]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Photo.php
Issue 9584: Only search posts from federated networks
[friendica.git] / src / Model / Photo.php
index fa3ffe81b368bda326a22f3f83b8bda18cfcb490..0f03b54b0dbac9677dfaca7ee2cb48a6211f5e76 100644 (file)
@@ -31,8 +31,8 @@ use Friendica\Model\Storage\SystemResource;
 use Friendica\Object\Image;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Images;
-use Friendica\Util\Network;
-use Friendica\Util\Security;
+use Friendica\Security\Security;
+use Friendica\Util\Proxy;
 use Friendica\Util\Strings;
 
 require_once "include/dba.php";
@@ -42,6 +42,8 @@ require_once "include/dba.php";
  */
 class Photo
 {
+       const CONTACT_PHOTOS = 'Contact Photos';
+
        /**
         * Select rows from the photo table and returns them as array
         *
@@ -298,14 +300,6 @@ class Photo
                        $backend_ref = $storage->put($Image->asString(), $backend_ref);
                }
 
-               // Prevent "null" permissions
-               if (!empty($uid)) {
-                       $allow_cid = $allow_cid ?? '<' . $uid . '>';
-                       $allow_gid = $allow_gid ?? '';
-                       $deny_cid = $deny_cid ?? '';
-                       $deny_gid = $deny_gid ?? '';
-               }
-
                $fields = [
                        "uid" => $uid,
                        "contact-id" => $cid,
@@ -417,7 +411,7 @@ class Photo
                $micro = "";
 
                $photo = DBA::selectFirst(
-                       "photo", ["resource-id"], ["uid" => $uid, "contact-id" => $cid, "scale" => 4, "album" => "Contact Photos"]
+                       "photo", ["resource-id"], ["uid" => $uid, "contact-id" => $cid, "scale" => 4, "album" => self::CONTACT_PHOTOS]
                );
                if (!empty($photo['resource-id'])) {
                        $resource_id = $photo["resource-id"];
@@ -429,7 +423,7 @@ class Photo
 
                $filename = basename($image_url);
                if (!empty($image_url)) {
-                       $ret = Network::curl($image_url, true);
+                       $ret = DI::httpRequest()->get($image_url);
                        $img_str = $ret->getBody();
                        $type = $ret->getContentType();
                } else {
@@ -440,15 +434,13 @@ class Photo
                        return false;
                }
 
-               if (empty($type)) {
-                       $type = Images::guessType($image_url, true);
-               }
+               $type = Images::getMimeTypeByData($img_str, $image_url, $type);
 
                $Image = new Image($img_str, $type);
                if ($Image->isValid()) {
                        $Image->scaleToSquare(300);
 
-                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, "Contact Photos", 4);
+                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4);
 
                        if ($r === false) {
                                $photo_failure = true;
@@ -456,7 +448,7 @@ class Photo
 
                        $Image->scaleDown(80);
 
-                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, "Contact Photos", 5);
+                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 5);
 
                        if ($r === false) {
                                $photo_failure = true;
@@ -464,7 +456,7 @@ class Photo
 
                        $Image->scaleDown(48);
 
-                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, "Contact Photos", 6);
+                       $r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 6);
 
                        if ($r === false) {
                                $photo_failure = true;
@@ -503,9 +495,10 @@ class Photo
                }
 
                if ($photo_failure) {
-                       $image_url = DI::baseUrl() . "/images/person-300.jpg";
-                       $thumb = DI::baseUrl() . "/images/person-80.jpg";
-                       $micro = DI::baseUrl() . "/images/person-48.jpg";
+                       $contact = Contact::getById($cid) ?: [];
+                       $image_url = Contact::getDefaultAvatar($contact, Proxy::SIZE_SMALL);
+                       $thumb = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB);
+                       $micro = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO);
                }
 
                return [$image_url, $thumb, $micro];
@@ -572,8 +565,8 @@ class Photo
                                        WHERE `uid` = %d  AND `album` != '%s' AND `album` != '%s' $sql_extra
                                        GROUP BY `album` ORDER BY `created` DESC",
                                        intval($uid),
-                                       DBA::escape("Contact Photos"),
-                                       DBA::escape(DI::l10n()->t("Contact Photos"))
+                                       DBA::escape(self::CONTACT_PHOTOS),
+                                       DBA::escape(DI::l10n()->t(self::CONTACT_PHOTOS))
                                );
                        } else {
                                // This query doesn't do the count and is much faster
@@ -581,8 +574,8 @@ class Photo
                                        FROM `photo` USE INDEX (`uid_album_scale_created`)
                                        WHERE `uid` = %d  AND `album` != '%s' AND `album` != '%s' $sql_extra",
                                        intval($uid),
-                                       DBA::escape("Contact Photos"),
-                                       DBA::escape(DI::l10n()->t("Contact Photos"))
+                                       DBA::escape(self::CONTACT_PHOTOS),
+                                       DBA::escape(DI::l10n()->t(self::CONTACT_PHOTOS))
                                );
                        }
                        DI::cache()->set($key, $albums, Duration::DAY);
@@ -662,21 +655,20 @@ class Photo
                                continue;
                        }
 
-                       if (DI::pConfig()->get($uid, 'system', 'accessible-photos')) {
-                               $condition = ['resource-id' => $image_rid, 'uid' => $uid];
-                               Logger::info('Set accessibility', ['condition' => $condition]);
-                               Photo::update(['accessible' => true], $condition);
-                       }
-
                        // Ensure to only modify photos that you own
                        $srch = '<' . intval($original_contact_id) . '>';
 
-                       $condition = ["(`allow_cid` = ? OR `allow_cid` IS NULL) AND
-                               (`allow_gid` = ? OR `allow_gid` IS NULL) AND
-                               (`deny_cid` = ? OR `deny_cid` IS NULL) AND
-                               (`deny_gid` = ? OR `deny_gid` IS NULL) AND
-                               `resource-id` = ? AND `uid` =?", $srch, '', '', '', $image_rid, $uid];
+                       $condition = [
+                               'allow_cid' => $srch, 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '',
+                               'resource-id' => $image_rid, 'uid' => $uid
+                       ];
                        if (!Photo::exists($condition)) {
+                               $photo = self::selectFirst(['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'uid'], ['resource-id' => $image_rid]);
+                               if (!DBA::isResult($photo)) {
+                                       Logger::info('Image not found', ['resource-id' => $image_rid]);
+                               } else {
+                                       Logger::info('Mismatching permissions', ['condition' => $condition, 'photo' => $photo]);
+                               }
                                continue;
                        }
 
@@ -688,7 +680,8 @@ class Photo
                         */
 
                        $fields = ['allow_cid' => $str_contact_allow, 'allow_gid' => $str_group_allow,
-                                       'deny_cid' => $str_contact_deny, 'deny_gid' => $str_group_deny];
+                                       'deny_cid' => $str_contact_deny, 'deny_gid' => $str_group_deny,
+                                       'accessible' => DI::pConfig()->get($uid, 'system', 'accessible-photos', false)];
 
                        $condition = ['resource-id' => $image_rid, 'uid' => $uid];
                        Logger::info('Set permissions', ['condition' => $condition, 'permissions' => $fields]);