|
|
@ -0,0 +1,66 @@ |
|
|
|
<?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 findOneByName($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([ |
|
|
|
'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; |
|
|
|
} |
|
|
|
} |