]> git.mxchange.org Git - friendica.git/blobdiff - include/Photo.php
Automatically refresh after two minutes when system is overloaded
[friendica.git] / include / Photo.php
index 30424747da82a33af4ee88c733e0b712f9967e0b..d87bce478704fccb6489097269e2e83163a4fd5f 100644 (file)
@@ -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;
 }