Skip to content

Commit

Permalink
Fix: Predefined Properties doesn't respect ctype (#11141)
Browse files Browse the repository at this point in the history
* Fix: Predefined Properties doesn't respect ctype

* Fix also other setFilter methods

* Small improvements

* BadRequestHttpException if type is invalid
  • Loading branch information
blankse committed Jan 17, 2022
1 parent 5e72bf8 commit d8377fc
Show file tree
Hide file tree
Showing 9 changed files with 76 additions and 91 deletions.
Expand Up @@ -40,6 +40,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;

Expand Down Expand Up @@ -742,24 +743,21 @@ public function docTypesAction(Request $request)
*
* @param Request $request
*
* @throws BadRequestHttpException If type is invalid
*
* @return JsonResponse
*/
public function getDocTypesAction(Request $request)
{
$list = new Document\DocType\Listing();
if ($request->get('type')) {
$type = $request->get('type');
if (Document\Service::isValidType($type)) {
$list->setFilter(function ($row) use ($type) {
if ($row['type'] == $type) {
return true;
}

return false;
});
if ($type = $request->get('type')) {
if (!Document\Service::isValidType($type)) {
throw new BadRequestHttpException('Invalid type: ' . $type);
}
$list->setFilter(function (Document\DocType $docType) use ($type) {
return $docType->getType() === $type;
});
}
$list->load();

$docTypes = [];
foreach ($list->getDocTypes() as $type) {
Expand Down
15 changes: 5 additions & 10 deletions bundles/AdminBundle/Controller/Admin/ElementController.php
Expand Up @@ -786,21 +786,16 @@ public function getPredefinedPropertiesAction(Request $request)
$type = $request->get('elementType');
$allowedTypes = ['asset', 'document', 'object'];

if (in_array($type, $allowedTypes)) {
if (in_array($type, $allowedTypes, true)) {
$list = new Model\Property\Predefined\Listing();
$list->setFilter(function ($row) use ($type) {
if (is_array($row['ctype'])) {
$row['ctype'] = implode(',', $row['ctype']);
}
if (strpos($row['ctype'], $type) !== false) {
return true;
$list->setFilter(function (Model\Property\Predefined $predefined) use ($type) {
if (!str_contains($predefined->getCtype(), $type)) {
return false;
}

return false;
return true;
});

$list->load();

foreach ($list->getProperties() as $type) {
$properties[] = $type->getObjectVars();
}
Expand Down
86 changes: 29 additions & 57 deletions bundles/AdminBundle/Controller/Admin/SettingsController.php
Expand Up @@ -210,14 +210,12 @@ public function metadataAction(Request $request)
}
} else {
// get list of types

$list = new Metadata\Predefined\Listing();

if ($request->get('filter')) {
$filter = $request->get('filter');
$list->setFilter(function ($row) use ($filter) {
foreach ($row as $value) {
if (strpos($value, $filter) !== false) {
if ($filter = $request->get('filter')) {
$list->setFilter(function (Metadata\Predefined $predefined) use ($filter) {
foreach ($predefined->getObjectVars() as $value) {
if (stripos($value, $filter) !== false) {
return true;
}
}
Expand All @@ -226,15 +224,11 @@ public function metadataAction(Request $request)
});
}

$list->load();

$properties = [];
if (is_array($list->getDefinitions())) {
foreach ($list->getDefinitions() as $metadata) {
$data = $metadata->getObjectVars();
$data['writeable'] = $metadata->isWriteable();
$properties[] = $data;
}
foreach ($list->getDefinitions() as $metadata) {
$data = $metadata->getObjectVars();
$data['writeable'] = $metadata->isWriteable();
$properties[] = $data;
}

return $this->adminJson(['data' => $properties, 'success' => true, 'total' => $list->getTotalCount()]);
Expand Down Expand Up @@ -333,15 +327,14 @@ public function propertiesAction(Request $request)
// get list of types
$list = new Property\Predefined\Listing();

if ($request->get('filter')) {
$filter = $request->get('filter');
$list->setFilter(function ($row) use ($filter) {
foreach ($row as $value) {
if ($filter = $request->get('filter')) {
$list->setFilter(function (Property\Predefined $predefined) use ($filter) {
foreach ($predefined->getObjectVars() as $value) {
if ($value) {
$cellValues = is_array($value) ? $value : [$value];

foreach ($cellValues as $cellValue) {
if (strpos($cellValue, $filter) !== false) {
if (stripos($cellValue, $filter) !== false) {
return true;
}
}
Expand All @@ -352,15 +345,11 @@ public function propertiesAction(Request $request)
});
}

$list->load();

$properties = [];
if (is_array($list->getProperties())) {
foreach ($list->getProperties() as $property) {
$data = $property->getObjectVars();
$data['writeable'] = $property->isWriteable();
$properties[] = $data;
}
foreach ($list->getProperties() as $property) {
$data = $property->getObjectVars();
$data['writeable'] = $property->isWriteable();
$properties[] = $data;
}

return $this->adminJson(['data' => $properties, 'success' => true, 'total' => $list->getTotalCount()]);
Expand Down Expand Up @@ -885,15 +874,13 @@ public function staticroutesAction(Request $request)

$list = new Staticroute\Listing();

if ($request->get('filter')) {
$filter = $request->get('filter');
$list->setFilter(function ($staticRoute) use ($filter) {
$vars = $staticRoute->getObjectVars();
foreach ($vars as $value) {
if (! is_scalar($value)) {
if ($filter = $request->get('filter')) {
$list->setFilter(function (Staticroute $staticRoute) use ($filter) {
foreach ($staticRoute->getObjectVars() as $value) {
if (!is_scalar($value)) {
continue;
}
if (strpos((string)$value, $filter) !== false) {
if (stripos((string)$value, $filter) !== false) {
return true;
}
}
Expand All @@ -902,10 +889,7 @@ public function staticroutesAction(Request $request)
});
}

$list->load();

$routes = [];
/** @var Staticroute $routeFromList */
foreach ($list->getRoutes() as $routeFromList) {
$route = $routeFromList->getObjectVars();
$route['writeable'] = $routeFromList->isWriteable();
Expand Down Expand Up @@ -1157,22 +1141,18 @@ public function thumbnailAdapterCheckAction(Request $request)
/**
* @Route("/thumbnail-tree", name="pimcore_admin_settings_thumbnailtree", methods={"GET", "POST"})
*
* @param Request $request
*
* @return JsonResponse
*/
public function thumbnailTreeAction(Request $request)
public function thumbnailTreeAction()
{
$this->checkPermission('thumbnails');

$thumbnails = [];

$list = new Asset\Image\Thumbnail\Config\Listing();
$items = $list->getThumbnails();

$groups = [];
/** @var Asset\Image\Thumbnail\Config $item */
foreach ($items as $item) {
foreach ($list->getThumbnails() as $item) {
if ($item->getGroup()) {
if (empty($groups[$item->getGroup()])) {
$groups[$item->getGroup()] = [
Expand Down Expand Up @@ -1217,22 +1197,18 @@ public function thumbnailTreeAction(Request $request)
/**
* @Route("/thumbnail-downloadable", name="pimcore_admin_settings_thumbnaildownloadable", methods={"GET"})
*
* @param Request $request
*
* @return JsonResponse
*/
public function thumbnailDownloadableAction(Request $request)
public function thumbnailDownloadableAction()
{
$thumbnails = [];

$list = new Asset\Image\Thumbnail\Config\Listing();
$list->setFilter(function (array $config) {
return array_key_exists('downloadable', $config) ? $config['downloadable'] : false;
$list->setFilter(function (Asset\Image\Thumbnail\Config $config) {
return $config->isDownloadable();
});
$items = $list->getThumbnails();

/** @var Asset\Image\Thumbnail\Config $item */
foreach ($items as $item) {
foreach ($list->getThumbnails() as $item) {
$thumbnails[] = [
'id' => $item->getName(),
'text' => $item->getName(),
Expand Down Expand Up @@ -1391,22 +1367,18 @@ public function videoThumbnailAdapterCheckAction(Request $request)
/**
* @Route("/video-thumbnail-tree", name="pimcore_admin_settings_videothumbnailtree", methods={"GET", "POST"})
*
* @param Request $request
*
* @return JsonResponse
*/
public function videoThumbnailTreeAction(Request $request)
public function videoThumbnailTreeAction()
{
$this->checkPermission('thumbnails');

$thumbnails = [];

$list = new Asset\Video\Thumbnail\Config\Listing();
$items = $list->getThumbnails();

$groups = [];
/** @var Asset\Video\Thumbnail\Config $item */
foreach ($items as $item) {
foreach ($list->getThumbnails() as $item) {
if ($item->getGroup()) {
if (!$groups[$item->getGroup()]) {
$groups[$item->getGroup()] = [
Expand Down
12 changes: 6 additions & 6 deletions lib/Model/Listing/JsonListing.php
Expand Up @@ -20,41 +20,41 @@
abstract class JsonListing extends AbstractModel
{
/**
* @var mixed
* @var callable|null
*/
protected $filter;

/**
* @var mixed
* @var callable|null
*/
protected $order;

/**
* @return mixed
* @return callable|null
*/
public function getFilter()
{
return $this->filter;
}

/**
* @param mixed $filter
* @param callable|null $filter
*/
public function setFilter($filter)
{
$this->filter = $filter;
}

/**
* @return mixed
* @return callable|null
*/
public function getOrder()
{
return $this->order;
}

/**
* @param mixed $order
* @param callable|null $order
*/
public function setOrder($order)
{
Expand Down
8 changes: 7 additions & 1 deletion models/Asset/Image/Thumbnail/Config/Listing/Dao.php
Expand Up @@ -34,6 +34,12 @@ public function loadList()
foreach ($this->loadIdList() as $name) {
$configs[] = Config::getByName($name);
}
if ($this->model->getFilter()) {
$configs = array_filter($configs, $this->model->getFilter());
}
if ($this->model->getOrder()) {
usort($configs, $this->model->getOrder());
}

$this->model->setThumbnails($configs);

Expand All @@ -45,6 +51,6 @@ public function loadList()
*/
public function getTotalCount()
{
return count($this->loadIdList());
return count($this->loadList());
}
}
10 changes: 7 additions & 3 deletions models/Document/DocType/Listing/Dao.php
Expand Up @@ -33,6 +33,12 @@ public function loadList()
foreach ($this->loadIdList() as $id) {
$docTypes[] = Model\Document\DocType::getById($id);
}
if ($this->model->getFilter()) {
$docTypes = array_filter($docTypes, $this->model->getFilter());
}
if ($this->model->getOrder()) {
usort($docTypes, $this->model->getOrder());
}

$this->model->setDocTypes($docTypes);

Expand All @@ -44,8 +50,6 @@ public function loadList()
*/
public function getTotalCount()
{
$amount = count($this->loadIdList());

return $amount;
return count($this->loadList());
}
}
6 changes: 6 additions & 0 deletions models/Metadata/Predefined/Listing/Dao.php
Expand Up @@ -36,6 +36,12 @@ public function loadList()
foreach ($this->loadIdList() as $id) {
$properties[] = Model\Metadata\Predefined::getById($id);
}
if ($this->model->getFilter()) {
$properties = array_filter($properties, $this->model->getFilter());
}
if ($this->model->getOrder()) {
usort($properties, $this->model->getOrder());
}

$this->model->setDefinitions($properties);

Expand Down
6 changes: 6 additions & 0 deletions models/Property/Predefined/Listing/Dao.php
Expand Up @@ -37,6 +37,12 @@ public function loadList()
foreach ($this->loadIdList() as $id) {
$properties[] = Model\Property\Predefined::getById($id);
}
if ($this->model->getFilter()) {
$properties = array_filter($properties, $this->model->getFilter());
}
if ($this->model->getOrder()) {
usort($properties, $this->model->getOrder());
}

$this->model->setProperties($properties);

Expand Down
4 changes: 1 addition & 3 deletions models/Staticroute/Listing/Dao.php
Expand Up @@ -50,8 +50,6 @@ public function loadList()
*/
public function getTotalCount()
{
$amount = count($this->loadIdList());

return $amount;
return count($this->loadList());
}
}

0 comments on commit d8377fc

Please sign in to comment.