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 77 78 79 80 81 82 83 84 85 86 87 88 89
<?php
namespace BEdita\Core\Model\Action;
use Cake\Utility\Hash;
class ListObjectsAction extends BaseAction
{
protected $Table;
protected $objectType;
protected function initialize(array $config)
{
$this->Table = $this->getConfig('table');
$this->objectType = $this->getConfig('objectType');
}
public function execute(array $data = [])
{
$filter = [
'deleted' => (int)!empty($data['deleted']),
];
$contain = array_merge(['ObjectTypes'], (array)Hash::get($data, 'contain'));
$type = null;
if (!empty($this->objectType)) {
$type = $this->objectType->id;
$assoc = $this->objectType->associations;
if (!empty($assoc)) {
$contain = array_merge($contain, $assoc);
}
}
if (!empty($data['filter'])) {
$filter = array_merge(
ListEntitiesAction::parseFilter($data['filter']),
$filter
);
}
$action = new ListEntitiesAction(['table' => $this->Table]);
$query = $action->execute(compact('filter', 'contain'));
if (isset($type)) {
$query = $query->find('type', (array)$type);
}
if (!empty($data['lang'])) {
$query = $query->find('translations', ['lang' => $data['lang']]);
}
return $query->find('publishable');
}
}