]> git.mxchange.org Git - friendica.git/blobdiff - mod/wall_upload.php
More replaced "q" calls
[friendica.git] / mod / wall_upload.php
index c3ba323043aa5a55ca8b0cb1f0029e477b9c19da..100c9480882de740f4e06c6f3dfd5a106a4c4a29 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -43,9 +43,9 @@ function wall_upload_post(App $a, $desktopmode = true)
        $r_json = (!empty($_GET['response']) && $_GET['response'] == 'json');
        $album = trim($_GET['album'] ?? '');
 
-       if ($a->argc > 1) {
+       if (DI::args()->getArgc() > 1) {
                if (empty($_FILES['media'])) {
-                       $nick = $a->argv[1];                    
+                       $nick = DI::args()->getArgv()[1];                       
                        $user = DBA::selectFirst('owner-view', ['id', 'uid', 'nickname', 'page-flags'], ['nickname' => $nick, 'blocked' => false]);
                        if (!DBA::isResult($user)) {
                                if ($r_json) {
@@ -81,17 +81,8 @@ function wall_upload_post(App $a, $desktopmode = true)
                $can_post = true;
        } elseif ($community_page && !empty(Session::getRemoteContactID($page_owner_uid))) {
                $contact_id = Session::getRemoteContactID($page_owner_uid);
-
-               $r = q("SELECT `uid` FROM `contact`
-                       WHERE `blocked` = 0 AND `pending` = 0
-                       AND `id` = %d AND `uid` = %d LIMIT 1",
-                       intval($contact_id),
-                       intval($page_owner_uid)
-               );
-               if (DBA::isResult($r)) {
-                       $can_post = true;
-                       $visitor = $contact_id;
-               }
+               $can_post = DBA::exists('contact', ['blocked' => false, 'pending' => false, 'id' => $contact_id, 'uid' => $page_owner_uid]);
+               $visitor = $contact_id;
        }
 
        if (!$can_post) {
@@ -168,19 +159,6 @@ function wall_upload_post(App $a, $desktopmode = true)
        Logger::log("File upload src: " . $src . " - filename: " . $filename .
                " - size: " . $filesize . " - type: " . $filetype, Logger::DEBUG);
 
-       $maximagesize = DI::config()->get('system', 'maximagesize');
-
-       if (($maximagesize) && ($filesize > $maximagesize)) {
-               $msg = DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize));
-               if ($r_json) {
-                       echo json_encode(['error' => $msg]);
-               } else {
-                       echo  $msg. EOL;
-               }
-               @unlink($src);
-               exit();
-       }
-
        $imagedata = @file_get_contents($src);
        $Image = new Image($imagedata, $filetype);
 
@@ -204,12 +182,39 @@ function wall_upload_post(App $a, $desktopmode = true)
        }
        if ($max_length > 0) {
                $Image->scaleDown($max_length);
+               $filesize = strlen($Image->asString());
                Logger::log("File upload: Scaling picture to new size " . $max_length, Logger::DEBUG);
        }
 
        $width = $Image->getWidth();
        $height = $Image->getHeight();
 
+       $maximagesize = DI::config()->get('system', 'maximagesize');
+
+       if (!empty($maximagesize) && ($filesize > $maximagesize)) {
+               // Scale down to multiples of 640 until the maximum size isn't exceeded anymore
+               foreach ([5120, 2560, 1280, 640] as $pixels) {
+                       if (($filesize > $maximagesize) && (max($width, $height) > $pixels)) {
+                               Logger::info('Resize', ['size' => $filesize, 'width' => $width, 'height' => $height, 'max' => $maximagesize, 'pixels' => $pixels]);
+                               $Image->scaleDown($pixels);
+                               $filesize = strlen($Image->asString());
+                               $width = $Image->getWidth();
+                               $height = $Image->getHeight();
+                       }
+               }
+               if ($filesize > $maximagesize) {
+                       Logger::notice('Image size is too big', ['size' => $filesize, 'max' => $maximagesize]);
+                       $msg = DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize));
+                       if ($r_json) {
+                               echo json_encode(['error' => $msg]);
+                       } else {
+                               echo  $msg. EOL;
+                       }
+                       @unlink($src);
+                       exit();
+               }
+       }
+
        $resource_id = Photo::newResource();
 
        $smallest = 0;
@@ -250,12 +255,8 @@ function wall_upload_post(App $a, $desktopmode = true)
        }
 
        if (!$desktopmode) {
-               $r = q("SELECT `id`, `datasize`, `width`, `height`, `type` FROM `photo`
-                       WHERE `resource-id` = '%s'
-                       ORDER BY `width` DESC LIMIT 1",
-                       $resource_id
-               );
-               if (!$r) {
+               $photo = Photo::selectFirst(['id', 'datasize', 'width', 'height', 'type'], ['resource-id' => $resource_id], ['order' => ['width']]);
+               if (!$photo) {
                        if ($r_json) {
                                echo json_encode(['error' => '']);
                                exit();
@@ -264,11 +265,11 @@ function wall_upload_post(App $a, $desktopmode = true)
                }
                $picture = [];
 
-               $picture["id"]        = $r[0]["id"];
-               $picture["size"]      = $r[0]["datasize"];
-               $picture["width"]     = $r[0]["width"];
-               $picture["height"]    = $r[0]["height"];
-               $picture["type"]      = $r[0]["type"];
+               $picture["id"]        = $photo["id"];
+               $picture["size"]      = $photo["datasize"];
+               $picture["width"]     = $photo["width"];
+               $picture["height"]    = $photo["height"];
+               $picture["type"]      = $photo["type"];
                $picture["albumpage"] = DI::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $resource_id;
                $picture["picture"]   = DI::baseUrl() . "/photo/{$resource_id}-0." . $Image->getExt();
                $picture["preview"]   = DI::baseUrl() . "/photo/{$resource_id}-{$smallest}." . $Image->getExt();