]> git.mxchange.org Git - friendica.git/commitdiff
Post update script to move old content from the item table
authorMichael <heluecht@pirati.ca>
Sun, 1 Jul 2018 19:02:29 +0000 (19:02 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 1 Jul 2018 19:02:29 +0000 (19:02 +0000)
src/Database/PostUpdate.php
src/Model/Item.php
src/Protocol/DFRN.php
src/Protocol/Diaspora.php

index 13da437796d709158d9b863404acd5dcd47df8c3..4f186ecbe3b2457aa1f3a5217595cc963ed995b6 100644 (file)
@@ -7,6 +7,7 @@ namespace Friendica\Database;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
+use Friendica\Model\Item;
 use dba;
 
 require_once 'include/dba.php';
@@ -30,6 +31,9 @@ class PostUpdate
                if (!self::update1206()) {
                        return;
                }
+               if (!self::update1274()) {
+                       return;
+               }
        }
 
        /**
@@ -217,4 +221,44 @@ class PostUpdate
                logger("Done", LOGGER_DEBUG);
                return true;
        }
+
+       /**
+        * @brief update the "item-content" table
+        *
+        * @return bool "true" when the job is done
+        */
+       private static function update1274()
+       {
+               // Was the script completed?
+               if (Config::get("system", "post_update_version") >= 1274) {
+                       return true;
+               }
+
+               logger("Start", LOGGER_DEBUG);
+
+               $fields = ['id', 'title', 'content-warning', 'body', 'location', 'tag', 'file',
+                       'coord', 'app', 'rendered-hash', 'rendered-html', 'verb',
+                       'object-type', 'object', 'target-type', 'target', 'plink'];
+
+               $condition = ["`icid` IS NULL"];
+               $params = ['limit' => 10000];
+               $items = Item::select($fields, $condition, $params);
+
+               if (!DBM::is_result($items)) {
+                       Config::set("system", "post_update_version", 1274);
+                       logger("Done", LOGGER_DEBUG);
+                       return true;
+               }
+
+               $rows = 0;
+
+               while ($item = Item::fetch($items)) {
+                       Item::update($item, ['id' => $item['id']]);
+                       ++$rows;
+               }
+               dba::close($items);
+
+               logger("Processed rows: " . $rows, LOGGER_DEBUG);
+               return true;
+       }
 }
index 71faa3f267d5978cdfab07ffa5b40de8125caba0..57090da4cb2b5bb2d0eab457823c59726204e2df 100644 (file)
@@ -614,7 +614,7 @@ class Item extends BaseObject
                // We cannot simply expand the condition to check for origin entries
                // The condition needn't to be a simple array but could be a complex condition.
                // And we have to execute this query before the update to ensure to fetch the same data.
-               $items = dba::select('item', ['id', 'origin', 'uri', 'plink'], $condition);
+               $items = dba::select('item', ['id', 'origin', 'uri', 'plink', 'icid'], $condition);
 
                $content_fields = [];
                foreach (array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST) as $field) {
@@ -657,6 +657,20 @@ class Item extends BaseObject
                        }
                        self::updateContent($content_fields, ['uri' => $item['uri']]);
 
+                       if (empty($item['icid'])) {
+                               $item_content = dba::selectFirst('item-content', [], ['uri' => $item['uri']]);
+                               if (DBM::is_result($item_content)) {
+                                       $item_fields = ['icid' => $item_content['id']];
+                                       // Clear all fields in the item table that have a content in the item-content table
+                                       foreach ($item_content as $field => $content) {
+                                               if (in_array($field, self::MIXED_CONTENT_FIELDLIST) && !empty($item_content[$field])) {
+                                                       $item_fields[$field] = '';
+                                               }
+                                       }
+                                       dba::update('item', $item_fields, ['id' => $item['id']]);
+                               }
+                       }
+
                        if (!empty($tags)) {
                                Term::insertFromTagFieldByItemId($item['id'], $tags);
                        }
index c1e116f2f73b28780b7f612e441e3a188620cea2..f979d6b00369aea49346e1d082e8945fdf64cd1f 100644 (file)
@@ -2087,13 +2087,6 @@ class DFRN
 
                logger('Contacts are updated.');
 
-               // update items
-               // This is an extreme performance killer
-               Item::update(['owner-link' => $relocate["url"]], ['owner-link' => $old["url"], 'uid' => $importer["importer_uid"]]);
-               Item::update(['author-link' => $relocate["url"]], ['author-link' => $old["url"], 'uid' => $importer["importer_uid"]]);
-
-               logger('Items are updated.');
-
                /// @TODO
                /// merge with current record, current contents have priority
                /// update record, set url-updated
index 6ef529b7fef8714e37ee9014b35c1e5aa82236c9..47101d5ad7a3e33f2abcd69e2c97af645957f93f 100644 (file)
@@ -1543,13 +1543,6 @@ class Diaspora
 
                logger('Contacts are updated.');
 
-               // update items
-               // This is an extreme performance killer
-               Item::update(['owner-link' => $data["url"]], ['owner-link' => $contact["url"], 'uid' => $importer["uid"]]);
-               Item::update(['author-link' => $data["url"]], ['author-link' => $contact["url"], 'uid' => $importer["uid"]]);
-
-               logger('Items are updated.');
-
                return true;
        }