]> git.mxchange.org Git - friendica.git/blobdiff - src/Database/PostUpdate.php
Issue 10392: Avoid "Friendica can't display this page at the moment"
[friendica.git] / src / Database / PostUpdate.php
index 51ce0d2b55a5c91b56dbf0e61ee399a124c72bcc..3e2627b9a9f5f585fd06af4fef7f9244d5f79172 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
  *
@@ -27,11 +27,11 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\GServer;
 use Friendica\Model\Item;
+use Friendica\Model\ItemURI;
 use Friendica\Model\Photo;
 use Friendica\Model\Post;
 use Friendica\Model\Post\Category;
 use Friendica\Model\Tag;
-use Friendica\Model\UserItem;
 use Friendica\Model\Verb;
 use Friendica\Util\Strings;
 
@@ -45,7 +45,7 @@ class PostUpdate
 {
        // Needed for the helper function to read from the legacy term table
        const OBJECT_TYPE_POST  = 1;
-       const VERSION = 1384;
+       const VERSION = 1400;
 
        /**
         * Calls the post update functions
@@ -88,7 +88,9 @@ class PostUpdate
                if (!self::update1384()) {
                        return false;
                }
-
+               if (!self::update1400()) {
+                       return false;
+               }
                return true;
        }
 
@@ -168,7 +170,7 @@ class PostUpdate
        }
 
        /**
-        * update user-item data with notifications
+        * update user notification data
         *
         * @return bool "true" when the job is done
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
@@ -180,6 +182,11 @@ class PostUpdate
                        return true;
                }
 
+               if (!DBStructure::existsTable('item')) {
+                       DI::config()->set('system', 'post_update_version', 1329);
+                       return true;
+               }
+
                $id = DI::config()->get('system', 'post_update_version_1329_id', 0);
 
                Logger::info('Start', ['item' => $id]);
@@ -188,7 +195,7 @@ class PostUpdate
                $rows = 0;
                $condition = ["`id` > ?", $id];
                $params = ['order' => ['id'], 'limit' => 10000];
-               $items = DBA::select('item', ['id'], $condition, $params);
+               $items = DBA::select('item', ['id', 'uri-id', 'uid'], $condition, $params);
 
                if (DBA::errorNo() != 0) {
                        Logger::error('Database error', ['no' => DBA::errorNo(), 'message' => DBA::errorMessage()]);
@@ -198,7 +205,7 @@ class PostUpdate
                while ($item = DBA::fetch($items)) {
                        $id = $item['id'];
 
-                       UserItem::setNotification($item['id']);
+                       Post\UserNotification::setNotification($item['uri-id'], $item['uid']);
 
                        ++$rows;
                }
@@ -515,7 +522,7 @@ class PostUpdate
                        return true;
                }
 
-               if (!DBStructure::existsTable('item-activity')) {
+               if (!DBStructure::existsTable('item-activity') || !DBStructure::existsTable('item')) {
                        DI::config()->set('system', 'post_update_version', 1347);
                        return true;
                }
@@ -762,4 +769,51 @@ class PostUpdate
 
                return false;
        }
+
+       /**
+        * update the "hash" field in the photo table
+        *
+        * @return bool "true" when the job is done
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @throws \ImagickException
+        */
+       private static function update1400()
+       {
+               // Was the script completed?
+               if (DI::config()->get("system", "post_update_version") >= 1400) {
+                       return true;
+               }
+
+               if (!DBStructure::existsTable('item')) {
+                       DI::config()->set("system", "post_update_version", 1400);
+                       return true;
+               }
+
+               $condition = ["`extid` != ? AND EXISTS(SELECT `id` FROM `post-user` WHERE `uri-id` = `item`.`uri-id` AND `uid` = `item`.`uid` AND `external-id` IS NULL)", ''];
+               Logger::info('Start', ['rest' => DBA::count('item', $condition)]);
+
+               $rows = 0;
+               $items = DBA::select('item', ['uri-id', 'uid', 'extid'], $condition, ['order' => ['id'], 'limit' => 10000]);
+
+               if (DBA::errorNo() != 0) {
+                       Logger::error('Database error', ['no' => DBA::errorNo(), 'message' => DBA::errorMessage()]);
+                       return false;
+               }
+
+               while ($item = DBA::fetch($items)) {
+                       Post::update(['external-id' => ItemURI::getIdByURI($item['extid'])], ['uri-id' => $item['uri-id'], 'uid' => $item['uid']]);
+                       ++$rows;
+               }
+               DBA::close($items);
+
+               Logger::info('Processed', ['rows' => $rows]);
+
+               if ($rows <= 100) {
+                       DI::config()->set("system", "post_update_version", 1400);
+                       Logger::info('Done');
+                       return true;
+               }
+
+               return false;
+       }
 }