category id not null but product id can be null same with sku id - product photos

This commit is contained in:
2025-11-01 23:39:15 -07:00
parent d239a98e8e
commit dc2f422247
5 changed files with 93 additions and 19 deletions

View File

@@ -71,11 +71,33 @@ class ProductPhotosController extends AppController
$postData = $this->request->getData();
$postData['id'] = $uuid;
$baseDir = Configure::readOrFail('CakeProducts.photos.directory');
$product = $productPhotosTable->Products->get($this->request->getData('product_id'));
$path = $product->id;
$path = '';
if ($this->request->getData('product_sku_id')) {
$productSku = $productPhotosTable->ProductSkus->find()->where(['ProductSkus.id' => $this->request->getData('product_sku_id'), 'ProductSkus.product_id' => $product->id])->first();
$path = $productSku ? $path . DS . 'skus' . DS . $productSku->id : $path;
$productSku = $productPhotosTable->ProductSkus
->find()
->contain(['Products', 'Products.ProductCategories'])
->where([
'ProductSkus.id' => $this->request->getData('product_sku_id'),
])
->first();
$path = $productSku ? $productSku->product_id . DS . 'skus' . DS . $productSku->id : $path;
} else if ($this->request->getData('product_id')) {
$product = $productPhotosTable->Products
->find()
->contain(['ProductCategories'])
->where([
'Products.id' => $this->request->getData('product_id'),
])
->first();
$path = $product ? $product->id : $path;
} else if ($this->request->getData('product_category_id')) {
$productCategoryPosted = $productPhotosTable->ProductCategories
->find()
->where([
'ProductCategories.internal_id' => $this->request->getData('product_category_id'),
])
->first();
$path = $productCategoryPosted ? 'categories' : $path;
}
/**
* @var UploadedFileInterface $photoObject
@@ -95,7 +117,7 @@ class ProductPhotosController extends AppController
if (!file_exists($destination)) {
throw new ForbiddenException('Failed to move the uploaded image to the appropriate folder. Please try again.');
}
$postData['product_category_id'] = $product->product_category_id ?? null;
$postData['photo_dir'] = $path;
$postData['photo_filename'] = $uuid;
@@ -105,6 +127,7 @@ class ProductPhotosController extends AppController
return $this->redirect(['action' => 'index']);
}
dd($productPhoto->getErrors());
$this->Flash->error(__('The product photo could not be saved. Please, try again.'));
}
$productCategory = $productPhoto->product_category_id ? $productPhotosTable->ProductCategories->find()->where(['internal_id' => $productPhoto->product_category_id ?? '-1'])->first() : null;

View File

@@ -34,4 +34,24 @@ class SecondToggleBehavior extends ToggleBehavior {
'findOrder' => null, // null = autodetect modified/created, false to disable
'implementedMethods' => [], // to prevent conflict with public toggleField method
];
/**
* @param \Cake\Datasource\EntityInterface $entity
*
* @return array
*/
protected function buildConditions(EntityInterface $entity) {
$conditions = $this->getConfig('scope');
$scopeFields = (array)$this->getConfig('scopeFields');
foreach ($scopeFields as $scopeField) {
if ($entity->get($scopeField) === null) {
continue;
}
$conditions[$scopeField] = $entity->get($scopeField);
}
// dd($conditions);
return $conditions;
}
}

View File

@@ -60,6 +60,13 @@ class ProductPhotosTable extends Table
$this->addBehavior('Timestamp');
$this->addBehavior('Tools.Toggle', [
'field' => 'primary_category_photo',
'scopeFields' => ['product_category_id'],
'scope' => [
'deleted IS' => null,
],
]);
$this->addBehavior('CakeProducts.SecondToggle', [
'field' => 'primary_photo',
'scopeFields' => ['product_id'],
'scope' => [
@@ -67,14 +74,6 @@ class ProductPhotosTable extends Table
'product_id IS NOT' => null,
],
]);
$this->addBehavior('CakeProducts.SecondToggle', [
'field' => 'primary_category_photo',
'scopeFields' => ['product_category_id'],
'scope' => [
'deleted IS' => null,
'product_category_id IS NOT' => null,
],
]);
$this->addBehavior('CakeProducts.ThirdToggle', [
'field' => 'primary_sku_photo',
'scopeFields' => ['product_sku_id'],
@@ -92,7 +91,7 @@ class ProductPhotosTable extends Table
$this->belongsTo('ProductCategories', [
'foreignKey' => 'product_category_id',
'bindingKey' => 'internal_id',
'joinType' => 'LEFT',
'joinType' => 'INNER',
'className' => 'CakeProducts.ProductCategories',
]);
@@ -121,7 +120,8 @@ class ProductPhotosTable extends Table
$validator
->uuid('product_category_id')
->allowEmptyString('product_category_id');
->requirePresence('product_category_id', 'create')
->notEmptyString('product_category_id');
$validator
->scalar('photo_dir')