Postupdate is now working again (#5512)
* "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
This commit is contained in:
parent
1e83261a88
commit
5f77e98d76
4 changed files with 82 additions and 4 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
12
update.php
12
update.php
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue