| | |
| | | )); |
| | | |
| | | // Metadata updates |
| | | $registry->register('update_metadata', new TypeConfig( |
| | | $registry->register('update_image_meta', new TypeConfig( |
| | | executor: $executor |
| | | )); |
| | | |
| | |
| | | } |
| | | $pending = []; |
| | | $attachments = array_filter($items, function ($item) { |
| | | return array_key_exists('attachmentId', $item); |
| | | return array_key_exists('attachmentId', $item) || array_key_exists('uploadId', $item); |
| | | }); |
| | | if (count($attachments) !== count($items)) { |
| | | $pending = array_filter($items, function ($item) { |
| | | return array_key_exists('uploadId',$item); |
| | | }); |
| | | } |
| | | |
| | | |
| | | if (!empty($attachments)) { |
| | | // Phase 2B: Direct attachment update (images already processed) |
| | | return $this->updateMeta($attachments, $data['user']); |
| | | error_log('Attachments: '.print_r($attachments, true)); |
| | | return $this->queueMetaUpdate($attachments, $data['user']); |
| | | } |
| | | elseif (!empty($pending)) { |
| | | // Phase 2A: Queue metadata update with dependency on upload operation |
| | | return $this->queueMetaUpdate($pending, $data['user']); |
| | | } |
| | | |
| | | |
| | | return $this->sendResponse( |
| | | false, |
| | |
| | | foreach ($data as $info) { |
| | | try { |
| | | $attachment_id = $info['attachmentId']; |
| | | error_log('Updating attachment ID:'.print_r($attachment_id,true)); |
| | | $ids[] = $attachment_id; |
| | | unset($info['attachmentId']); |
| | | // Verify attachment exists and user has permission |
| | |
| | | $errors = []; |
| | | $original = count($data); |
| | | foreach ($data as $uploadID => $info) { |
| | | if (!array_key_exists('depends_on', $info)) { |
| | | unset($data[$uploadID]); |
| | | $errors[$uploadID] = $info; |
| | | continue; |
| | | } |
| | | if (!in_array($info['depends_on'], $depends_on)) { |
| | | if (array_key_exists('depends_on', $info) && !in_array($info['depends_on'], $depends_on)) { |
| | | $depends_on[] = $info['depends_on']; |
| | | } |
| | | } |
| | | $operationID = $queue->queueOperation( |
| | | 'update_metadata', |
| | | 'update_image_meta', |
| | | $user, |
| | | $data, |
| | | [ |
| | | 'depends_on' => $depends_on, |
| | | 'priority' => 'medium', |
| | | ] |
| | | ); |
| | | |
| | |
| | | $errors = []; |
| | | foreach ($operation->depends_on as $dependency) { |
| | | $operationData = JVB()->queue()->getOperation($dependency); |
| | | if (!$operationData || $operationData->status !== 'completed') { |
| | | if (!$operationData || $operationData->state !== 'completed') { |
| | | throw new Exception('Original upload operation not found or not completed'); |
| | | } |
| | | |