]> git.mxchange.org Git - friendica.git/commitdiff
Postupdate is now working again (#5512)
authorMichael Vogel <icarus@dabo.de>
Fri, 27 Jul 2018 23:24:26 +0000 (01:24 +0200)
committerHypolite Petovan <mrpetovan@eml.cc>
Fri, 27 Jul 2018 23:24:26 +0000 (19:24 -0400)
* "post-type" replaces "bookmark" and "type"

* Removed some more type

* Added index to permission set

* The permission set is now stored

* The permission set is now removed upon expiry

* Post update now stores the permission set

* New file

* Permissions are now sorted

* The permission set is now used for item permissions

* Check for allow_cid, ... is superfluous. Checking for "private" is enough

* We query the permissionset

* Permissions are displayed correctly

* Changed index

* We don't store the permissions in the item table anymore

* Permission fields are now deprecated

* Reversed ...

* Postupdate now handles "postopts" as well

* Set deprecated fields to "null" if empty

* Postupdates are enabled again

src/Database/PostUpdate.php
src/Model/PermissionSet.php
src/Worker/CronJobs.php
update.php

index 3b78b94fcd588cea46313c98aa3f50afee292955..1d85e5fadc80f91266651d53d44abca6aba514f0 100644 (file)
@@ -238,7 +238,7 @@ class PostUpdate
                $fields = array_merge(Item::MIXED_CONTENT_FIELDLIST, ['network', 'author-id', 'owner-id', 'tag', 'file',
                        'author-name', 'author-avatar', 'author-link', 'owner-name', 'owner-avatar', 'owner-link', 'id',
                        'uid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'psid', 'post-type', 'bookmark', 'type',
-                       'inform']);
+                       'inform', 'postopts', 'icid']);
 
                $start_id = $id;
                $rows = 0;
@@ -265,6 +265,11 @@ class PostUpdate
                        if (!is_null($item['allow_cid']) && !is_null($item['allow_gid'])
                                && !is_null($item['deny_cid']) && !is_null($item['deny_gid'])) {
                                $item['psid'] = PermissionSet::fetchIDForPost($item);
+                       } else {
+                               $item['allow_cid'] = null;
+                               $item['allow_gid'] = null;
+                               $item['deny_cid'] = null;
+                               $item['deny_gid'] = null;
                        }
 
                        if ($item['post-type'] == 0) {
@@ -277,6 +282,13 @@ class PostUpdate
                                }
                        }
 
+                       self::createLanguage($item);
+
+                       if (!empty($item['icid']) && !empty($item['language'])) {
+                               DBA::update('item-content', ['language' => $item['language']], ['id' => $item['icid']]);
+                       }
+                       unset($item['language']);
+
                        Item::update($item, ['id' => $id]);
 
                        ++$rows;
@@ -288,6 +300,20 @@ class PostUpdate
                logger("Processed rows: " . $rows . " - last processed item:  " . $id, LOGGER_DEBUG);
 
                if ($start_id == $id) {
+                       // Set all deprecated fields to "null" if they contain an empty string
+                       $nullfields = ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'postopts', 'inform', 'type',
+                               'bookmark', 'file', 'location', 'coord', 'tag', 'plink', 'title', 'content-warning',
+                               'body', 'app', 'verb', 'object-type', 'object', 'target-type', 'target',
+                               'author-name', 'author-link', 'author-avatar', 'owner-name', 'owner-link', 'owner-avatar',
+                               'rendered-hash', 'rendered-html'];
+                       foreach ($nullfields as $field) {
+                               $fields = [$field => null];
+                               $condition = [$field => ''];
+                               logger("Setting '" . $field . "' to null if empty.", LOGGER_DEBUG);
+                               // Important: This has to be a "DBA::update", not a "Item::update"
+                               DBA::update('item', $fields, $condition);
+                       }
+
                        Config::set("system", "post_update_version", 1279);
                        logger("Done", LOGGER_DEBUG);
                        return true;
@@ -295,4 +321,46 @@ class PostUpdate
 
                return false;
        }
+
+       private static function createLanguage(&$item)
+       {
+               if (empty($item['postopts'])) {
+                       return;
+               }
+
+               $opts = explode(',', $item['postopts']);
+
+               $postopts = [];
+
+               foreach ($opts as $opt) {
+                       if (strstr($opt, 'lang=')) {
+                               $language = substr($opt, 5);
+                       } else {
+                               $postopts[] = $opt;
+                       }
+               }
+
+               if (empty($language)) {
+                       return;
+               }
+
+               if (!empty($postopts)) {
+                       $item['postopts'] = implode(',', $postopts);
+               } else {
+                       $item['postopts'] = null;
+               }
+
+               $lang_pairs = explode(':', $language);
+
+               $lang_arr = [];
+
+               foreach ($lang_pairs as $pair) {
+                       $lang_pair_arr = explode(';', $pair);
+                       if (count($lang_pair_arr) == 2) {
+                               $lang_arr[$lang_pair_arr[0]] = $lang_pair_arr[1];
+                       }
+               }
+
+               $item['language'] = json_encode($lang_arr);
+       }
 }
index 20848c04d3b2ea6fdc56d9babc67f62e79a9728b..f83f9ccb555cbabafd0c8bb65292d4d02860e582 100644 (file)
@@ -41,7 +41,6 @@ class PermissionSet extends BaseObject
                        $set = DBA::selectFirst('permissionset', ['id'], $condition);
                }
 
-
                $postarray['allow_cid'] = null;
                $postarray['allow_gid'] = null;
                $postarray['deny_cid'] = null;
index ca898f2b6285a3fb4dfd8776d1354059c0384a8d..c54e74e38ecdb8ff7223bc1bfec0d2f2f5d2d273 100644 (file)
@@ -35,8 +35,7 @@ class CronJobs
                // Call possible post update functions
                // see src/Database/PostUpdate.php for more details
                if ($command == 'post_update') {
-// Post updates will be reenabled (hopefully in a few days) when most item works are done
-//                     PostUpdate::update();
+                       PostUpdate::update();
                        return;
                }
 
index 7bd02f966500531a5306a1bce8e228094c2e8dce..47434b3373a4480900df5fe6b32807988cb68d81 100644 (file)
@@ -246,3 +246,15 @@ function update_1278() {
 
        return UPDATE_SUCCESS;
 }
+
+function update_1278() {
+       Config::set('system', 'maintenance', 1);
+       Config::set('system', 'maintenance_reason', L10n::t('%s: Updating post-type.', DBM::date().' '.date('e')));
+
+       Item::update(['post-type' => Item::PT_PAGE], ['bookmark' => true]);
+       Item::update(['post-type' => Item::PT_PERSONAL_NOTE], ['type' => 'note']);
+
+       Config::set('system', 'maintenance', 0);
+
+       return UPDATE_SUCCESS;
+}