|
|
- <?php
-
- namespace App\Repositories;
-
- use App\Repositories\RepositoryAbstract;
-
- /**
- * request menu items from a menu
- *
- * @author Björn Hase, Tentakelfabrik
- * @license http://opensource.org/licenses/MIT The MIT License
- * @link https://gitea.tentakelfabrik.de/Tentakelfabrik/super-gear-directus
- *
- */
-
- class MenuRepository extends RepositoryAbstract
- {
- /** endpoint */
- protected $endpoint = 'menu_items';
-
- /**
- * find menu_items by name of menu
- * menu must be published
- *
- * @param string $slug
- * @return array
- */
- public function findByName($name)
- {
- $results = $this->queryBuilder
- ->fields([
- 'title',
- 'target',
- 'url',
- 'page.title',
- 'page.status',
- 'page.slug',
- 'menus.sort',
- 'menus.menus_id.name'
- ])
- ->aliases('page[title]', 'page_title')
- ->aliases('page[status]', 'page_status')
- ->aliases('page[slug]', 'page_slug')
- ->filter([
- '_or' => [
- [
- '_and' => [
- [ 'page' => [
- 'id' => [
- '_null' => 'true'
- ]
- ]],
- [ 'menus' => [
- 'menus_id' => [
- 'name' => $name,
- 'status' => 'published'
- ]
- ]]
- ]
- ],
- [
- '_and' => [
- [ 'page' => [
- 'status' => 'published'
- ]],
- [ 'menus' => [
- 'menus_id' => [
- 'name' => $name,
- 'status' => 'published'
- ]
- ]]
- ]
- ],
- ]
- ])
- ->find();
-
- // @TODO Workaround sort functions seems have problems with relationals fields
- if (count($results['data'])) {
- usort($results['data'], function($a, $b) {
- return ($a['menus'][0]['sort'] > $b['menus'][0]['sort']);
- });
- }
-
- return $results;
- }
- }
|