X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FPost.php;h=aae847664db2093efee10ebc45575a2fa44a39ad;hb=a24febb8b656217a7cd88db205007420cb64485e;hp=5bb41d16c28b64983031156c6545b4a9028905d4;hpb=ac03399a90d4fb4fc7b85a462b066876d8aac6fc;p=friendica.git diff --git a/src/Model/Post.php b/src/Model/Post.php index 5bb41d16c2..aae847664d 100644 --- a/src/Model/Post.php +++ b/src/Model/Post.php @@ -1,6 +1,6 @@ $uid, 'pinned' => true]); - if (!DBA::isResult($useritems)) { - return $useritems; + $postthreaduser = DBA::select('post-thread-user', ['uri-id'], ['uid' => $uid, 'pinned' => true]); + if (!DBA::isResult($postthreaduser)) { + return $postthreaduser; } $pinned = []; - while ($useritem = DBA::fetch($useritems)) { - $pinned[] = $useritem['iid']; + while ($useritem = DBA::fetch($postthreaduser)) { + $pinned[] = $useritem['uri-id']; } - DBA::close($useritems); + DBA::close($postthreaduser); if (empty($pinned)) { return []; } - $condition = DBA::mergeConditions(['iid' => $pinned], $condition); + $condition = DBA::mergeConditions(['uri-id' => $pinned, 'uid' => $uid, 'gravity' => GRAVITY_PARENT], $condition); - return self::selectThreadForUser($uid, $selected, $condition, $params); + return self::selectForUser($uid, $selected, $condition, $params); } /** @@ -418,7 +440,7 @@ class Post { $affected = 0; - Logger::info('Start Update', ['fields' => $fields, 'condition' => $condition]); + Logger::info('Start Update', ['fields' => $fields, 'condition' => $condition, 'uid' => local_user(),'callstack' => System::callstack(10)]); // Don't allow changes to fields that are responsible for the relation between the records unset($fields['id']); @@ -438,93 +460,104 @@ class Post $update_fields = DBStructure::getFieldsForTable('post-user', $fields); if (!empty($update_fields)) { - $rows = DBA::selectToArray('post-view', ['post-user-id'], $condition); - $puids = array_column($rows, 'post-user-id'); - if (!DBA::update('post-user', $update_fields, ['id' => $puids])) { - DBA::rollback(); - Logger::notice('Updating post-user failed', ['fields' => $update_fields, 'condition' => $condition]); - return false; + $affected_count = 0; + $posts = DBA::select('post-user-view', ['post-user-id'], $condition); + while ($rows = DBA::toArray($posts, false, 100)) { + $puids = array_column($rows, 'post-user-id'); + if (!DBA::update('post-user', $update_fields, ['id' => $puids])) { + DBA::rollback(); + Logger::notice('Updating post-user failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - $affected = DBA::affectedRows(); + DBA::close($posts); + $affected = $affected_count; } $update_fields = DBStructure::getFieldsForTable('post-content', $fields); if (!empty($update_fields)) { - $rows = DBA::selectToArray('post-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); - $uriids = array_column($rows, 'uri-id'); - if (!DBA::update('post-content', $update_fields, ['uri-id' => $uriids])) { - DBA::rollback(); - Logger::notice('Updating post-content failed', ['fields' => $update_fields, 'condition' => $condition]); - return false; + $affected_count = 0; + $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); + while ($rows = DBA::toArray($posts, false, 100)) { + $uriids = array_column($rows, 'uri-id'); + if (!DBA::update('post-content', $update_fields, ['uri-id' => $uriids])) { + DBA::rollback(); + Logger::notice('Updating post-content failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - $affected = max($affected, DBA::affectedRows()); + DBA::close($posts); + $affected = max($affected, $affected_count); } - $update_fields = Post\DeliveryData::extractFields($fields); + $update_fields = DBStructure::getFieldsForTable('post', $fields); if (!empty($update_fields)) { - if (empty($uriids)) { - $rows = DBA::selectToArray('post-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); + $affected_count = 0; + $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); + while ($rows = DBA::toArray($posts, false, 100)) { $uriids = array_column($rows, 'uri-id'); + if (!DBA::update('post', $update_fields, ['uri-id' => $uriids])) { + DBA::rollback(); + Logger::notice('Updating post failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - if (!DBA::update('post-delivery-data', $update_fields, ['uri-id' => $uriids])) { - DBA::rollback(); - Logger::notice('Updating post-delivery-data failed', ['fields' => $update_fields, 'condition' => $condition]); - return false; - } - $affected = max($affected, DBA::affectedRows()); + DBA::close($posts); + $affected = max($affected, $affected_count); } - $update_fields = DBStructure::getFieldsForTable('post-thread-user', $fields); + $update_fields = Post\DeliveryData::extractFields($fields); if (!empty($update_fields)) { - $rows = DBA::selectToArray('post-view', ['post-user-id'], $thread_condition); - $thread_puids = array_column($rows, 'post-user-id'); - - $post_thread_condition = DBA::collapseCondition(['id' => $thread_puids]); - - $post_thread_condition[0] = "EXISTS(SELECT `id` FROM `post-user` WHERE " . - $post_thread_condition[0] . " AND `uri-id` = `post-thread-user`.`uri-id` AND `uid` = `post-thread-user`.`uid`)"; - Logger::info('Test2-start', ['condition' => $post_thread_condition]); - if (!DBA::update('post-thread-user', $update_fields, $post_thread_condition)) { - DBA::rollback(); - Logger::notice('Updating post-thread-user failed', ['fields' => $update_fields, 'condition' => $condition]); - return false; + $affected_count = 0; + $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); + while ($rows = DBA::toArray($posts, false, 100)) { + $uriids = array_column($rows, 'uri-id'); + if (!DBA::update('post-delivery-data', $update_fields, ['uri-id' => $uriids])) { + DBA::rollback(); + Logger::notice('Updating post-delivery-data failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - Logger::info('Test2-end'); - $affected = max($affected, DBA::affectedRows()); + DBA::close($posts); + $affected = max($affected, $affected_count); } - $update_fields = DBStructure::getFieldsForTable('thread', $fields); + $update_fields = DBStructure::getFieldsForTable('post-thread', $fields); if (!empty($update_fields)) { - $rows = DBA::selectToArray('post-view', ['id'], $thread_condition); - $ids = array_column($rows, 'id'); - if (!DBA::update('thread', $update_fields, ['iid' => $ids])) { - DBA::rollback(); - Logger::notice('Updating thread failed', ['fields' => $update_fields, 'condition' => $thread_condition]); - return false; + $affected_count = 0; + $posts = DBA::select('post-user-view', ['uri-id'], $thread_condition, ['group_by' => ['uri-id']]); + while ($rows = DBA::toArray($posts, false, 100)) { + $uriids = array_column($rows, 'uri-id'); + if (!DBA::update('post-thread', $update_fields, ['uri-id' => $uriids])) { + DBA::rollback(); + Logger::notice('Updating post-thread failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - $affected = max($affected, DBA::affectedRows()); + DBA::close($posts); + $affected = max($affected, $affected_count); } - $item_fields = ['guid', 'type', 'wall', 'gravity', 'extid', 'created', 'edited', 'commented', 'received', 'changed', - 'resource-id', 'post-type', 'private', 'pubmail', 'moderated', 'visible', 'starred', 'bookmark', - 'unseen', 'deleted', 'origin', 'forum_mode', 'mention', 'global', 'network', 'vid', 'psid', - 'contact-id', 'author-id', 'owner-id', 'causer-id', 'event-id']; - - $update_fields = []; - foreach ($item_fields as $field) { - if (array_key_exists($field, $fields)) { - $update_fields[$field] = $fields[$field]; - } - } + $update_fields = DBStructure::getFieldsForTable('post-thread-user', $fields); if (!empty($update_fields)) { - $rows = DBA::selectToArray('post-view', ['id'], $condition, []); - $ids = array_column($rows, 'id'); - if (!DBA::update('item', $update_fields, ['id' => $ids])) { - DBA::rollback(); - Logger::notice('Updating item failed', ['fields' => $update_fields, 'condition' => $condition]); - return false; + $affected_count = 0; + $posts = DBA::select('post-user-view', ['post-user-id'], $thread_condition); + while ($rows = DBA::toArray($posts, false, 100)) { + $thread_puids = array_column($rows, 'post-user-id'); + if (!DBA::update('post-thread-user', $update_fields, ['post-user-id' => $thread_puids])) { + DBA::rollback(); + Logger::notice('Updating post-thread-user failed', ['fields' => $update_fields, 'condition' => $condition]); + return false; + } + $affected_count += DBA::affectedRows(); } - $affected = max($affected, DBA::affectedRows()); + DBA::close($posts); + $affected = max($affected, $affected_count); } DBA::commit(); @@ -532,4 +565,20 @@ class Post Logger::info('Updated posts', ['rows' => $affected]); return $affected; } + + /** + * Delete a row from the post table + * + * @param array $conditions Field condition(s) + * @param array $options + * - cascade: If true we delete records in other tables that depend on the one we're deleting through + * relations (default: true) + * + * @return boolean was the delete successful? + * @throws \Exception + */ + public static function delete(array $conditions, array $options = []) + { + return DBA::delete('post', $conditions, $options); + } }