| | |
| | | namespace JVBase\rest\routes; |
| | | |
| | | use JVBase\managers\queue\executors\UploadExecutor; |
| | | use JVBase\managers\queue\mergers\UploadMerger; |
| | | use JVBase\managers\queue\TypeConfig; |
| | | use JVBase\rest\PermissionHandler; |
| | | use JVBase\rest\Rest; |
| | |
| | | { |
| | | $registry = JVB()->queue()->registry(); |
| | | $executor = new UploadExecutor(); |
| | | $merger = new UploadMerger('secured_files'); |
| | | |
| | | // Image uploads - chunked at 5 files |
| | | $registry->register('image_upload', new TypeConfig( |
| | | mergeable: $merger, |
| | | executor: $executor, |
| | | chunkKey: 'secured_files', |
| | | chunkSize: 5 |
| | | chunkSize: 3 |
| | | )); |
| | | |
| | | // Video uploads - one at a time (heavy processing) |
| | | $registry->register('video_upload', new TypeConfig( |
| | | mergeable: $merger, |
| | | executor: $executor, |
| | | chunkKey: 'secured_files', |
| | | chunkSize: 1 |
| | |
| | | |
| | | // Document uploads - chunked at 10 |
| | | $registry->register('document_upload', new TypeConfig( |
| | | mergeable: $merger, |
| | | executor: $executor, |
| | | chunkKey: 'secured_files', |
| | | chunkSize: 10 |
| | | chunkSize: 5 |
| | | )); |
| | | |
| | | // Metadata updates |
| | |
| | | ->rateLimit(30) |
| | | ->args([ |
| | | 'user' => 'int|required', |
| | | 'items' => 'array|required' |
| | | 'items' => 'array|required', |
| | | 'id' => 'string' |
| | | ]) |
| | | ->register(); |
| | | } |
| | |
| | | $chunkSize = 10; |
| | | } |
| | | |
| | | JVB()->queue()->queueOperation( |
| | | error_log('Queueing Operation: '.print_r($operation_type, true)); |
| | | error_log('With ID: '.print_r($args['upload'], true)); |
| | | $queuedProcessing = JVB()->queue()->queueOperation( |
| | | $operation_type, |
| | | $args['user'], |
| | | array_merge( |
| | |
| | | ] |
| | | ); |
| | | |
| | | if ($args['mode'] !== 'selection') { |
| | | $dependencies = [$args['upload']]; |
| | | if (!empty($args['depends_on'])) { |
| | | $dependencies[] = $args['depends_on']; |
| | | } |
| | | error_log('queuedProcessing operation: '.print_r($queuedProcessing, true)); |
| | | |
| | | JVB()->queue()->queueOperation( |
| | | 'attach_upload_to_content', |
| | | $args['user'], |
| | | $args, |
| | | [ |
| | | 'priority' => 'high', |
| | | 'operation_id' => $args['id'], |
| | | 'depends_on' => $dependencies |
| | | ] |
| | | ); |
| | | $uploadOpId = $queuedProcessing['operation_id']; |
| | | |
| | | if ($args['mode'] !== 'selection') { |
| | | |
| | | // Only create attach_upload_to_content if the upload was NOT merged. |
| | | // When merged, the original upload's attach_upload_to_content |
| | | // will handle all files after the merged image_upload completes. |
| | | if (!$queuedProcessing['updated_existing']) { |
| | | JVB()->queue()->queueOperation( |
| | | 'attach_upload_to_content', |
| | | $args['user'], |
| | | $args, |
| | | [ |
| | | 'priority' => 'high', |
| | | 'operation_id' => $args['id'], |
| | | 'depends_on' => [$uploadOpId] |
| | | ] |
| | | ); |
| | | } |
| | | } |
| | | |
| | | JVB()->queue()->queueOperation( |
| | |
| | | 'priority' => 'low', |
| | | 'chunk_size' => 5, |
| | | 'chunk_key' => 'files', |
| | | 'depends_on' => $args['upload'] |
| | | 'depends_on' => [$uploadOpId] |
| | | ] |
| | | ); |
| | | |
| | |
| | | |
| | | if (!empty($attachments)) { |
| | | error_log('Attachments: '.print_r($attachments, true)); |
| | | return $this->queueMetaUpdate($attachments, $data['user']); |
| | | return $this->queueMetaUpdate($attachments, absint($data['user']), sanitize_text_field($data['id']??'')); |
| | | } |
| | | |
| | | |
| | |
| | | /** |
| | | * Queue metadata update with dependency on upload operation |
| | | */ |
| | | protected function queueMetaUpdate(array $data, int $user): WP_REST_Response |
| | | protected function queueMetaUpdate(array $data, int $user, ?string $operationId = null): WP_REST_Response |
| | | { |
| | | $queue = JVB()->queue(); |
| | | $depends_on = []; |
| | |
| | | $depends_on[] = $info['depends_on']; |
| | | } |
| | | } |
| | | $queueData = [ |
| | | 'depends_on' => $depends_on, |
| | | ]; |
| | | if ($operationId) { |
| | | $queueData['operation_id'] = $operationId; |
| | | } |
| | | $operationID = $queue->queueOperation( |
| | | 'update_image_meta', |
| | | $user, |
| | | $data, |
| | | [ |
| | | 'depends_on' => $depends_on, |
| | | ] |
| | | $queueData |
| | | ); |
| | | |
| | | return $this->sendResponse( |
| | | true, |
| | | [ |
| | | 'operation_id' => $operationID, |
| | | 'operation_id' => $operationID['operation_id']??$operationId, |
| | | 'message' => "Successfully queued ".count($data)." of {$original} meta updates" |
| | | ], |
| | | 'Metadata update queued - will apply after upload completes' |