diff --git a/src/Database/PostUpdate.php b/src/Database/PostUpdate.php index 13da437796..e50250ff5f 100644 --- a/src/Database/PostUpdate.php +++ b/src/Database/PostUpdate.php @@ -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,58 @@ 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', + 'author-id', 'owner-id']; + + $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)) { + // Clearing the author and owner data if there is an id. + if ($item['author-id'] > 0) { + $item['author-name'] = ''; + $item['author-link'] = ''; + $item['author-avatar'] = ''; + } + + if ($item['owner-id'] > 0) { + $item['owner-name'] = ''; + $item['owner-link'] = ''; + $item['owner-avatar'] = ''; + } + + Item::update($item, ['id' => $item['id']]); + ++$rows; + } + dba::close($items); + + logger("Processed rows: " . $rows, LOGGER_DEBUG); + return true; + } } diff --git a/src/Model/Item.php b/src/Model/Item.php index 71faa3f267..57090da4cb 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -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); } diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index c1e116f2f7..f979d6b003 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -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 diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 6ef529b7fe..47101d5ad7 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -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; }