]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Photo.php
File and category aren't using "term" anymore
[friendica.git] / src / Model / Photo.php
index 461cddf2937f0016aff0d89ad7cbe6268de0b346..9d8b5611f7f8b5f2543b0cc74e92521be7a6a0ba 100644 (file)
@@ -1,14 +1,27 @@
 <?php
-
 /**
- * @file src/Model/Photo.php
- * This file contains the Photo class for database interface
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
  */
+
 namespace Friendica\Model;
 
 use Friendica\Core\Cache\Duration;
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
@@ -128,7 +141,7 @@ class Photo
         * @return boolean|array
         * @throws \Exception
         */
-       public static function getPhoto($resourceid, $scale = 0)
+       public static function getPhoto(string $resourceid, int $scale = 0)
        {
                $r = self::selectFirst(["uid"], ["resource-id" => $resourceid]);
                if (!DBA::isResult($r)) {
@@ -137,7 +150,9 @@ class Photo
 
                $uid = $r["uid"];
 
-               $sql_acl = Security::getPermissionsSQLByUserId($uid);
+               $accessible = $uid ? (bool)DI::pConfig()->get($uid, 'system', 'accessible-photos', false) : false;
+
+               $sql_acl = Security::getPermissionsSQLByUserId($uid, $accessible);
 
                $conditions = ["`resource-id` = ? AND `scale` <= ? " . $sql_acl, $resourceid, $scale];
                $params = ["order" => ["scale" => true]];
@@ -283,7 +298,6 @@ class Photo
                        $backend_ref = $storage->put($Image->asString(), $backend_ref);
                }
 
-
                $fields = [
                        "uid" => $uid,
                        "contact-id" => $cid,
@@ -418,9 +432,7 @@ 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()) {
@@ -542,7 +554,7 @@ class Photo
                $key = "photo_albums:".$uid.":".local_user().":".remote_user();
                $albums = DI::cache()->get($key);
                if (is_null($albums) || $update) {
-                       if (!Config::get("system", "no_count", false)) {
+                       if (!DI::config()->get("system", "no_count", false)) {
                                /// @todo This query needs to be renewed. It is really slow
                                // At this time we just store the data in the cache
                                $albums = q("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created`
@@ -648,13 +660,26 @@ class Photo
                                '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;
                        }
 
-                       /// @todo Check if $str_contact_allow does contain a public forum. Then set the permissions to public.
+                       /**
+                        * @todo Existing permissions need to be mixed with the new ones.
+                        * Otherwise this creates problems with sharing the same picture multiple times
+                        * Also check if $str_contact_allow does contain a public forum.
+                        * Then set the permissions to public.
+                        */
 
                        $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]);
                        Photo::update($fields, $condition);