From 772462eeca3002a1d52508aeba485aab2b4742ad Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 03 Mar 2026 19:06:19 +0000
Subject: [PATCH] =MAJOR OVERHAUL. Likely should have made a new branch ages ago. Key changes: Registrar.php is the base for custom post types, taxonomies, and user roles. Replaces JVB_CONTENT, JVB_TAXONOMY, and JVB_USER constants, eliminates most of Features.php (except for JVB_SITE, JVB_MEMBERSHIP), and has built in sanitizing and validation via sub-classes. Also started a major overhaul of the Schema output. Created a shit ton of property traits and classes to help sanitize and ensure proper data for different schema types. Still a bunch to do, but better to be starting committing changes here on this other branch.
---
inc/rest/routes/UploadRoutes.php | 79 ++++++++++++++++++++++++---------------
1 files changed, 48 insertions(+), 31 deletions(-)
diff --git a/inc/rest/routes/UploadRoutes.php b/inc/rest/routes/UploadRoutes.php
index f1db7a0..e46aa84 100644
--- a/inc/rest/routes/UploadRoutes.php
+++ b/inc/rest/routes/UploadRoutes.php
@@ -2,13 +2,14 @@
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;
@@ -34,16 +35,19 @@
{
$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
@@ -51,9 +55,10 @@
// Document uploads - chunked at 10
$registry->register('document_upload', new TypeConfig(
+ mergeable: $merger,
executor: $executor,
chunkKey: 'secured_files',
- chunkSize: 10
+ chunkSize: 5
));
// Metadata updates
@@ -110,7 +115,8 @@
->rateLimit(30)
->args([
'user' => 'int|required',
- 'items' => 'array|required'
+ 'items' => 'array|required',
+ 'id' => 'string'
])
->register();
}
@@ -142,7 +148,7 @@
// Post Type/Taxonomy
case 'content':
$key = str_replace('-', '_', $key);
- if ($value === 'options' || array_key_exists($value, JVB_CONTENT) || Features::forTaxonomy($key)->has('is_content')) {
+ if ($value === 'options' || array_key_exists($value, Registrar::getRegistered('post')) || Registrar::getInstance($key)->hasFeature('is_content')??false) {
$args['content'] = $value;
}
break;
@@ -395,7 +401,9 @@
$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(
@@ -409,22 +417,27 @@
]
);
- 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(
@@ -438,7 +451,7 @@
'priority' => 'low',
'chunk_size' => 5,
'chunk_key' => 'files',
- 'depends_on' => $args['upload']
+ 'depends_on' => [$uploadOpId]
]
);
@@ -812,7 +825,7 @@
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']??''));
}
@@ -882,7 +895,7 @@
/**
* 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 = [];
@@ -893,19 +906,23 @@
$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'
@@ -1073,9 +1090,9 @@
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];
--
Gitblit v1.10.0