1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
<?php
namespace BEdita\Core\Model\Action;
use BEdita\Core\Exception\InvalidDataException;
use Cake\Http\Exception\InternalErrorException;
use Cake\Log\LogTrait;
use Cake\Utility\Hash;
class SaveEntityAction extends BaseAction
{
use LogTrait;
protected $Table;
protected function initialize(array $config)
{
$this->Table = $this->getConfig('table');
}
public function execute(array $data = [])
{
$entityOptions = (array)Hash::get($data, 'entityOptions');
$saveOptions = (array)Hash::get($data, 'saveOptions');
$entity = $data['entity'];
if (!$entity->isNew()) {
$data['data']['id'] = $entity->get('id');
}
$entity = $this->Table->patchEntity($entity, $data['data'], $entityOptions);
$success = $this->Table->save($entity, $saveOptions);
if ($success === false) {
$errors = $entity->getErrors();
if (!empty($errors)) {
$this->log(sprintf('Entity save errors: %s', json_encode($errors)), 'warning');
throw new InvalidDataException(__d('bedita', 'Invalid data'), $errors);
}
$this->log(sprintf('Save failed - data: %s', json_encode($data['data'])), 'error');
throw new InternalErrorException(__d('bedita', 'Save failed'));
}
return $success;
}
}