+ $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post', $fields);
+ if (!empty($update_fields)) {
+ $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');
+
+ // Only delete the "post" entry when all "post-user" entries are deleted
+ if (!empty($update_fields['deleted']) && DBA::exists('post-user', ['uri-id' => $uriids, 'deleted' => false])) {
+ unset($update_fields['deleted']);
+ }
+
+ if (!DBA::update('post', $update_fields, ['uri-id' => $uriids])) {
+ DBA::rollback();
+ Logger::warning('Updating post failed', ['fields' => $update_fields, 'condition' => $condition]);
+ return false;
+ }
+ $affected_count += DBA::affectedRows();
+ }
+ DBA::close($posts);
+ $affected = max($affected, $affected_count);
+ }
+
+ $update_fields = Post\DeliveryData::extractFields($fields);
+ if (!empty($update_fields)) {
+ $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::warning('Updating post-delivery-data failed', ['fields' => $update_fields, 'condition' => $condition]);
+ return false;
+ }
+ $affected_count += DBA::affectedRows();
+ }
+ DBA::close($posts);
+ $affected = max($affected, $affected_count);
+ }
+
+ $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $fields);
+ if (!empty($update_fields)) {
+ $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::warning('Updating post-thread failed', ['fields' => $update_fields, 'condition' => $condition]);
+ return false;
+ }
+ $affected_count += DBA::affectedRows();
+ }
+ DBA::close($posts);
+ $affected = max($affected, $affected_count);