| | |
| | | namespace JVBase\rest\routes; |
| | | |
| | | use JVBase\managers\queue\executors\UploadExecutor; |
| | | use JVBase\managers\queue\mergers\UploadMerger; |
| | | use JVBase\managers\queue\TypeConfig; |
| | | use JVBase\registrar\Registrar; |
| | | use JVBase\rest\PermissionHandler; |
| | | use JVBase\rest\Rest; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\managers\UploadManager; |
| | | use JVBase\rest\Route; |
| | | use JVBase\utility\Features; |
| | | use WP_REST_Request; |
| | | use WP_REST_Response; |
| | | use WP_Error; |
| | |
| | | { |
| | | $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: 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: 5 |
| | |
| | | { |
| | | $data = $request->get_params(); |
| | | $args = []; |
| | | $registrar = Registrar::getInstance($data['content']??''); |
| | | |
| | | foreach ($data as $key => $value) { |
| | | switch ($key) { |
| | | case 'depends_on': |
| | |
| | | case 'item_id': |
| | | if (is_numeric($value)) { |
| | | $args['item_id'] = absint($value); |
| | | if (!array_key_exists('post_id', $args)) { |
| | | $args['post_id'] = absint($value); |
| | | if ($registrar) { |
| | | switch ($registrar->getType()) { |
| | | case 'post': |
| | | $args['post_id'] = absint($value); |
| | | break; |
| | | case 'term': |
| | | $args['term_id'] = absint($value); |
| | | break; |
| | | case 'user': |
| | | $args['user_id'] = absint($value); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | // Post Type/Taxonomy |
| | | case 'content': |
| | | $key = str_replace('-', '_', $key); |
| | | if ($value === 'options' || array_key_exists($value, JVB_CONTENT) || Features::forTaxonomy($key)->has('is_content')) { |
| | | $value = str_replace('-', '_', $value); |
| | | if ($value === 'options' || $registrar) { |
| | | $args['content'] = $value; |
| | | } |
| | | break; |
| | |
| | | |
| | | error_log('queuedProcessing operation: '.print_r($queuedProcessing, true)); |
| | | |
| | | $uploadOpId = $queuedProcessing['operation_id']; |
| | | |
| | | if ($args['mode'] !== 'selection') { |
| | | $dependencies = [$args['upload']]; |
| | | |
| | | error_log('Queueing attach to upload with id: '.print_r($args['id'], true)); |
| | | error_log('And dependent on: '.print_r($dependencies, true)); |
| | | error_log('Attaching args: '.print_r($args, true)); |
| | | $attachingOp = JVB()->queue()->queueOperation( |
| | | 'attach_upload_to_content', |
| | | $args['user'], |
| | | $args, |
| | | [ |
| | | 'priority' => 'high', |
| | | 'operation_id' => $args['id'], |
| | | 'depends_on' => $dependencies |
| | | ] |
| | | ); |
| | | |
| | | error_log('queued attaching operation: '.print_r($attachingOp, true)); |
| | | // 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] |
| | | ] |
| | | ); |
| | | |
| | |
| | | |
| | | // Update with comma-separated string |
| | | $meta->set($data['field_name'], implode(',', $all_ids)); |
| | | $meta->save(); |
| | | } |
| | | |
| | | /** |
| | |
| | | if (!empty($args['content']) && !empty($args['field_name'])) { |
| | | $content_type = $args['content']; |
| | | $field_name = $args['field_name']; |
| | | |
| | | if (array_key_exists($content_type, JVB_CONTENT)) { |
| | | $content_fields = JVB_CONTENT[$content_type]['fields'] ?? []; |
| | | $registrar = Registrar::getInstance($content_type); |
| | | if ($registrar) { |
| | | $content_fields = $registrar->getFields(); |
| | | if (array_key_exists($field_name, $content_fields)) { |
| | | $field_def = $content_fields[$field_name]; |
| | | |