]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Item.php
Merge pull request #10860 from nupplaphil/feat/depository_profilefield
[friendica.git] / src / Model / Item.php
index 7406bb2907be6c7ef9957a74471bda03baecd425..285187e5fbe70c6db44de2c32b8394917f8b2209 100644 (file)
@@ -88,7 +88,7 @@ class Item
                'writable', 'self', 'cid', 'alias',
                'event-created', 'event-edited', 'event-start', 'event-finish',
                'event-summary', 'event-desc', 'event-location', 'event-type',
-               'event-nofinish', 'event-adjust', 'event-ignore', 'event-id',
+               'event-nofinish', 'event-ignore', 'event-id',
                'delivery_queue_count', 'delivery_queue_done', 'delivery_queue_failed'
        ];
 
@@ -103,7 +103,7 @@ class Item
                        'thr-parent-id', 'parent-uri-id', 'postopts', 'pubmail',
                        'event-created', 'event-edited', 'event-start', 'event-finish',
                        'event-summary', 'event-desc', 'event-location', 'event-type',
-                       'event-nofinish', 'event-adjust', 'event-ignore', 'event-id'];
+                       'event-nofinish', 'event-ignore', 'event-id'];
 
        // All fields in the item table
        const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent',
@@ -659,6 +659,12 @@ class Item
                $params = ['order' => ['id' => false]];
                $parent = Post::selectFirst($fields, $condition, $params);
 
+               if (!DBA::isResult($parent) && $item['origin']) {
+                       $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid']);
+                       Logger::info('Stored thread parent item for user', ['uri-id' => $item['thr-parent-id'], 'uid' => $item['uid'], 'stored' => $stored]);
+                       $parent = Post::selectFirst($fields, $condition, $params);
+               }
+
                if (!DBA::isResult($parent)) {
                        Logger::notice('item parent was not found - ignoring item', ['thr-parent-id' => $item['thr-parent-id'], 'uid' => $item['uid']]);
                        return [];
@@ -673,6 +679,13 @@ class Item
                        'uid' => $parent['uid']];
                $params = ['order' => ['id' => false]];
                $toplevel_parent = Post::selectFirst($fields, $condition, $params);
+
+               if (!DBA::isResult($toplevel_parent) && $item['origin']) {
+                       $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']);
+                       Logger::info('Stored parent item for user', ['uri-id' => $item['parent-uri-id'], 'uid' => $item['uid'], 'stored' => $stored]);
+                       $toplevel_parent = Post::selectFirst($fields, $condition, $params);
+               }
+
                if (!DBA::isResult($toplevel_parent)) {
                        Logger::notice('item top level parent was not found - ignoring item', ['parent-uri-id' => $parent['parent-uri-id'], 'uid' => $parent['uid']]);
                        return [];
@@ -967,13 +980,14 @@ class Item
                }
 
                // Creates or assigns the permission set
-               $item['psid'] = PermissionSet::getIdFromACL(
-                       $item['uid'],
-                       $item['allow_cid'],
-                       $item['allow_gid'],
-                       $item['deny_cid'],
-                       $item['deny_gid']
-               );
+               $item['psid'] = DI::permissionSet()->selectOrCreate(
+                       DI::permissionSetFactory()->createFromString(
+                               $item['uid'],
+                               $item['allow_cid'],
+                               $item['allow_gid'],
+                               $item['deny_cid'],
+                               $item['deny_gid']
+               ))->id;
 
                if (!empty($item['extid'])) {
                        $item['external-id'] = ItemURI::getIdByURI($item['extid']);
@@ -1939,18 +1953,19 @@ class Item
                        $private = self::PUBLIC;
                }
 
-               $psid = PermissionSet::getIdFromACL(
-                       $user['uid'],
-                       $user['allow_cid'],
-                       $user['allow_gid'],
-                       $user['deny_cid'],
-                       $user['deny_gid']
-               );
+               $permissionSet = DI::permissionSet()->selectOrCreate(
+                       DI::permissionSetFactory()->createFromString(
+                               $user['uid'],
+                               $user['allow_cid'],
+                               $user['allow_gid'],
+                               $user['deny_cid'],
+                               $user['deny_gid']
+                       ));
 
                $forum_mode = ($prvgroup ? 2 : 1);
 
                $fields = ['wall' => true, 'origin' => true, 'forum_mode' => $forum_mode, 'contact-id' => $self['id'],
-                       'owner-id' => $owner_id, 'private' => $private, 'psid' => $psid];
+                       'owner-id' => $owner_id, 'private' => $private, 'psid' => $permissionSet->id];
                self::update($fields, ['id' => $item['id']]);
 
                Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], 'Notifier', Delivery::POST, (int)$item['uri-id'], (int)$item['uid']);
@@ -2536,12 +2551,12 @@ class Item
                        $condition = [];
                } elseif ($remote_user) {
                         // Authenticated visitor - fetch the matching permissionsets
-                       $set = PermissionSet::get($owner_id, $remote_user);
+                       $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id);
                        if (!empty($set)) {
                                $condition = ["(`private` != ? OR (`private` = ? AND `wall`
                                        AND `psid` IN (" . implode(', ', array_fill(0, count($set), '?')) . ")))",
                                        self::PRIVATE, self::PRIVATE];
-                               $condition = array_merge($condition, $set);
+                               $condition = array_merge($condition, $permissionSets->column('id'));
                        }
                }
 
@@ -2582,10 +2597,10 @@ class Item
                         * If pre-verified, the caller is expected to have already
                         * done this and passed the groups into this function.
                         */
-                       $set = PermissionSet::get($owner_id, $remote_user);
+                       $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id);
 
                        if (!empty($set)) {
-                               $sql_set = sprintf(" OR (" . $table . "`private` = %d AND " . $table . "`wall` AND " . $table . "`psid` IN (", self::PRIVATE) . implode(',', $set) . "))";
+                               $sql_set = sprintf(" OR (" . $table . "`private` = %d AND " . $table . "`wall` AND " . $table . "`psid` IN (", self::PRIVATE) . implode(',', $permissionSets->column('id')) . "))";
                        } else {
                                $sql_set = '';
                        }