getTable()->find() ->contain(['Products']); $productPhotos = $this->paginate($query); $this->set(compact('productPhotos')); } /** * View method * * @param string|null $id Product Photo id. * @return \Cake\Http\Response|null|void Renders view * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function view($id = null) { $productPhoto = $this->getTable()->get($id, contain: ['Products']); $this->set(compact('productPhoto')); } /** * Add method * * @return \Cake\Http\Response|null|void Redirects on successful add, renders view otherwise. */ public function add() { $productPhotosTable = $this->getTable(); $productPhoto = $productPhotosTable->newEmptyEntity(); if ($this->request->is('post')) { $uuid = Text::uuid(); $postData = $this->request->getData(); $postData['id'] = $uuid; $baseDir = Configure::readOrFail('CakeProducts.photos.directory'); $product = $productPhotosTable->Products->get($this->request->getData('product_id')); $path = $baseDir . $product->id; if ($this->request->getData('product_sku_id')) { $productSku = $productPhotosTable->ProductSkus->get($this->request->getData('product_sku_id')); $path .= DS . 'skus' . DS . $productSku->id; } /** * @var UploadedFileInterface $photoObject */ $photoObject = $this->request->getData('photo'); if (!file_exists($path)) { if (!mkdir($path, 0777, true)) { dd('Failed to create the required folders. Please check the folder permissions and try again. PATH: ' . $path); throw new ForbiddenException('Failed to create the required folders. Please check the folder permissions and try again.'); } } $destination = $path . DS . $uuid; // Existing files with the same name will be replaced. $photoObject->moveTo($destination); if (!file_exists($destination)) { dd('Failed to move the uploaded image to the appropriate folder. Please try again.'); throw new ForbiddenException('Failed to move the uploaded image to the appropriate folder. Please try again.'); } $postData['photo_dir'] = $path; $postData['photo_filename'] = $uuid; $productPhoto = $productPhotosTable->patchEntity($productPhoto, $postData); if ($productPhotosTable->save($productPhoto)) { $this->Flash->success(__('The product photo has been saved.')); return $this->redirect(['action' => 'index']); } dd(print_r($productPhoto->getErrors(), true)); $this->Flash->error(__('The product photo could not be saved. Please, try again.')); } $products = $productPhotosTable->Products->find('list', limit: 200)->all(); $this->set(compact('productPhoto', 'products')); } /** * Edit method * * @param string|null $id Product Photo id. * @return \Cake\Http\Response|null|void Redirects on successful edit, renders view otherwise. * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function edit($id = null) { $productPhotosTable = $this->getTable(); $productPhoto = $productPhotosTable->get($id, contain: []); if ($this->request->is(['patch', 'post', 'put'])) { $productPhoto = $productPhotosTable->patchEntity($productPhoto, $this->request->getData()); if ($productPhotosTable->save($productPhoto)) { $this->Flash->success(__('The product photo has been saved.')); return $this->redirect(['action' => 'index']); } dd(print_r($productPhoto->getErrors(), true)); $this->Flash->error(__('The product photo could not be saved. Please, try again.')); } $products = $productPhotosTable->Products->find('list', limit: 200)->all(); $this->set(compact('productPhoto', 'products')); } /** * Delete method * * @param string|null $id Product Photo id. * @return \Cake\Http\Response|null Redirects to index. * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function delete($id = null) { $this->request->allowMethod(['post', 'delete']); $productPhotosTable = $this->getTable(); $productPhoto = $productPhotosTable->get($id); if ($productPhotosTable->delete($productPhoto)) { $this->Flash->success(__('The product photo has been deleted.')); } else { $this->Flash->error(__('The product photo could not be deleted. Please, try again.')); } return $this->redirect(['action' => 'index']); } }