Files
Phraseanet/lib/Alchemy/Phrasea/Controller/Api/V3/V3Controller.php
Aina Sitraka 8efdc36efa PHRAS-3712 admin - sudefinition - property to define building rules on subdefinition (#4104)
* add building rules

* setting in first position

attribute `tobuild` on subdefinition

limit subdef name to 64 like db

taken account tobuild in tools rebuild GUI

taken account tobuild in command `bin/console records:build-subdefs`

* add check

* add tobuild in api response

* fix command `bin/console records:build-subdefs`
2022-07-27 18:25:44 +02:00

78 lines
2.8 KiB
PHP

<?php
namespace Alchemy\Phrasea\Controller\Api\V3;
use Alchemy\Phrasea\Controller\Api\Result;
use Alchemy\Phrasea\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class V3Controller extends Controller
{
public function getDataboxSubdefsAction(Request $request)
{
if (!empty($request->attributes->get('databox_id'))) {
$ret = [
'databoxes' => $this->listSubdefsStructure([$this->findDataboxById($request->attributes->get('databox_id'))])
];
} else {
$acl = $this->getAclForUser($this->getAuthenticatedUser());
// ensure can see databox structure
$ret = [
'databoxes' => $this->listSubdefsStructure($acl->get_granted_sbas([\ACL::BAS_MODIFY_STRUCT]))
];
}
return Result::create($request, $ret)->createResponse();
}
/**
* List the subdef structure of databoxes
* @param array $databoxes
* @return array
* @throws \Exception
*/
private function listSubdefsStructure(array $databoxes)
{
$ret = [];
/** @var \databox $databox */
foreach ($databoxes as $databox) {
$databoxId = $databox->get_sbas_id();
$subdefStructure = $databox->get_subdef_structure();
$subdefs = [];
foreach ($subdefStructure as $subGroup) {
/** @var \databox_subdef $sub */
foreach ($subGroup->getIterator() as $sub) {
$opt = [];
$data = [
'name' => $sub->get_name(),
'databox_id' => $databoxId,
'class' => $sub->get_class(),
'preset' => $sub->get_preset(),
'downloadable' => $sub->isDownloadable(),
'tobuild' => $sub->isTobuild(),
'devices' => $sub->getDevices(),
'labels' => [
'fr' => $sub->get_label('fr'),
'en' => $sub->get_label('en'),
'de' => $sub->get_label('de'),
'nl' => $sub->get_label('nl'),
],
];
$options = $sub->getOptions();
foreach ($options as $option) {
$opt[$option->getName()] = $option->getValue();
}
$data['options'] = $opt;
$subdefs[$subGroup->getName()][$sub->get_name()] = $data;
}
}
$ret[$databoxId]['databox_id'] = $databoxId;
$ret[$databoxId]['subdefs'] = $subdefs;
}
return $ret;
}
}