X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2FPhoto.php;h=d87bce478704fccb6489097269e2e83163a4fd5f;hb=75be187216255c7c45421cb5f9596118a954f878;hp=9732801c9a3d8fbe18a0bbfe20c2ca11214b5d7e;hpb=be70dde61f14514d31da090e44546ce021b0a60a;p=friendica.git diff --git a/include/Photo.php b/include/Photo.php index 9732801c9a..d87bce4787 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -720,65 +720,101 @@ function guess_image_type($filename, $fromcurl=false) { } -function import_profile_photo($photo,$uid,$cid) { +/** + * @brief Updates the avatar links in a contact only if needed + * + * @param string $avatar Link to avatar picture + * @param int $uid User id of contact owner + * @param int $cid Contact id + * @param bool $force force picture update + * + * @return array Returns array of the different avatar sizes + */ +function update_contact_avatar($avatar,$uid,$cid, $force = false) { - $a = get_app(); + $r = q("SELECT `avatar`, `photo`, `thumb`, `micro` FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid)); + if (!$r) + return false; + else + $data = array($r[0]["photo"], $r[0]["thumb"], $r[0]["micro"]); - $r = q("select `resource-id` from photo where `uid` = %d and `contact-id` = %d and `scale` = 4 and `album` = 'Contact Photos' limit 1", - intval($uid), - intval($cid) - ); - if(count($r) && strlen($r[0]['resource-id'])) { - $hash = $r[0]['resource-id']; - } - else { - $hash = photo_new_resource(); - } + if (($r[0]["avatar"] != $avatar) OR $force) { + $photos = import_profile_photo($avatar,$uid,$cid, true); - $photo_failure = false; + if ($photos) { + q("UPDATE `contact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d", + dbesc($avatar), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), + dbesc(datetime_convert()), intval($cid)); + return $photos; + } + } - $filename = basename($photo); - $img_str = fetch_url($photo,true); + return $data; +} - $type = guess_image_type($photo,true); - $img = new Photo($img_str, $type); - if($img->is_valid()) { +function import_profile_photo($photo,$uid,$cid, $quit_on_error = false) { - $img->scaleImageSquare(175); + $a = get_app(); + + $r = q("select `resource-id` from photo where `uid` = %d and `contact-id` = %d and `scale` = 4 and `album` = 'Contact Photos' limit 1", + intval($uid), + intval($cid) + ); + if(count($r) && strlen($r[0]['resource-id'])) { + $hash = $r[0]['resource-id']; + } else { + $hash = photo_new_resource(); + } - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4 ); + $photo_failure = false; - if($r === false) - $photo_failure = true; + $filename = basename($photo); + $img_str = fetch_url($photo,true); - $img->scaleImage(80); + if ($quit_on_error AND ($img_str == "")) + return false; - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 5 ); + $type = guess_image_type($photo,true); + $img = new Photo($img_str, $type); + if($img->is_valid()) { - if($r === false) - $photo_failure = true; + $img->scaleImageSquare(175); - $img->scaleImage(48); + $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4 ); - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 6 ); + if($r === false) + $photo_failure = true; - if($r === false) - $photo_failure = true; + $img->scaleImage(80); - $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt(); - $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt(); - $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt(); - } - else - $photo_failure = true; + $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 5 ); - if($photo_failure) { - $photo = $a->get_baseurl() . '/images/person-175.jpg'; - $thumb = $a->get_baseurl() . '/images/person-80.jpg'; - $micro = $a->get_baseurl() . '/images/person-48.jpg'; - } + if($r === false) + $photo_failure = true; - return(array($photo,$thumb,$micro)); + $img->scaleImage(48); + + $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 6 ); + + if($r === false) + $photo_failure = true; + + $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt(); + $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt(); + $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt(); + } else + $photo_failure = true; + + if($photo_failure AND $quit_on_error) + return false; + + if($photo_failure) { + $photo = $a->get_baseurl() . '/images/person-175.jpg'; + $thumb = $a->get_baseurl() . '/images/person-80.jpg'; + $micro = $a->get_baseurl() . '/images/person-48.jpg'; + } + + return(array($photo,$thumb,$micro)); } @@ -787,27 +823,33 @@ function get_photo_info($url) { $data = Cache::get($url); - if (is_null($data)) { - $img_str = fetch_url($url, true, $redirects, 4); + // Unserialise to be able to check in the next step if the cached data is alright. + if (!is_null($data)) + $data = unserialize($data); + if (is_null($data) OR !$data) { + $img_str = fetch_url($url, true, $redirects, 4); $filesize = strlen($img_str); - $tempfile = tempnam(get_temppath(), "cache"); + if (function_exists("getimagesizefromstring")) + $data = getimagesizefromstring($img_str); + else { + $tempfile = tempnam(get_temppath(), "cache"); - $a = get_app(); - $stamp1 = microtime(true); - file_put_contents($tempfile, $img_str); - $a->save_timestamp($stamp1, "file"); + $a = get_app(); + $stamp1 = microtime(true); + file_put_contents($tempfile, $img_str); + $a->save_timestamp($stamp1, "file"); - $data = getimagesize($tempfile); - unlink($tempfile); + $data = getimagesize($tempfile); + unlink($tempfile); + } if ($data) $data["size"] = $filesize; Cache::set($url, serialize($data)); - } else - $data = unserialize($data); + } return $data; } @@ -873,9 +915,9 @@ function store_photo($a, $uid, $imagedata = "", $url = "") { $page_owner_nick = $r[0]['nickname']; -// To-Do: -// $default_cid = $r[0]['id']; -// $community_page = (($r[0]['page-flags'] == PAGE_COMMUNITY) ? true : false); + /// @TODO + /// $default_cid = $r[0]['id']; + /// $community_page = (($r[0]['page-flags'] == PAGE_COMMUNITY) ? true : false); if ((strlen($imagedata) == 0) AND ($url == "")) { logger("No image data and no url provided", LOGGER_DEBUG);