]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Photo.php
Update src/Model/Photo.php
[friendica.git] / src / Model / Photo.php
index e5b2ef87b96e3654901cf12c6f2c0b5721a3fd52..8b677a5192ebcdfb7a50c7ababa3d07e54eba84f 100644 (file)
@@ -364,15 +364,20 @@ class Photo
        public static function delete(array $conditions, array $options = [])
        {
                // get photo to delete data info
-               $photos = self::selectToArray(['backend-class', 'backend-ref'], $conditions);
+               $photos = DBA::select('photo', ['id', 'backend-class', 'backend-ref'], $conditions);
 
-               foreach($photos as $photo) {
+               while ($photo = DBA::fetch($photos)) {
                        $backend_class = DI::storageManager()->getByName($photo['backend-class'] ?? '');
                        if ($backend_class !== null) {
-                               $backend_class->delete($photo["backend-ref"] ?? '');
+                               if ($backend_class->delete($photo["backend-ref"] ?? '')) {
+                                       // Delete the photos after they had been deleted successfully
+                                       DBA::delete("photo", ['id' => $photo['id']]);
+                               }
                        }
                }
 
+               DBA::close($photos);
+
                return DBA::delete("photo", $conditions, $options);
        }
 
@@ -455,6 +460,29 @@ class Photo
                if ($Image->isValid()) {
                        $Image->scaleToSquare(300);
 
+                       $filesize = strlen($Image->asString());
+                       $maximagesize = DI::config()->get('system', 'maximagesize');
+                       if (!empty($maximagesize) && ($filesize > $maximagesize)) {
+                               Logger::info('Avatar exceeds image limit', ['uid' => $uid, 'cid' => $cid, 'maximagesize' => $maximagesize, 'size' => $filesize, 'type' => $Image->getType()]);
+                               if ($Image->getType() == 'image/gif') {
+                                       $Image->toStatic();
+                                       $Image = new Image($Image->asString(), 'image/png');
+
+                                       $filesize = strlen($Image->asString());
+                                       Logger::info('Converted gif to a static png', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]);
+                               }
+                               if ($filesize > $maximagesize) {
+                                       foreach ([160, 80] as $pixels) {
+                                               if ($filesize > $maximagesize) {
+                                                       Logger::info('Resize', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'max' => $maximagesize, 'pixels' => $pixels, 'type' => $Image->getType()]);
+                                                       $Image->scaleDown($pixels);
+                                                       $filesize = strlen($Image->asString());
+                                               }
+                                       }
+                               }
+                               Logger::info('Avatar is resized', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]);
+                       }
+
                        $r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4);
 
                        if ($r === false) {