123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- <?php
- /**
- * Define a menuitem.
- * @author Valentin CARRUESCO
- * @category Plugin
- * @license MIT
- */
- class MenuItem extends Entity{
- public $id,$icon,$label,$url,$classes,$sort,$firm,$parent,$user,$target,$editable,$slug,$childs,$visibility,$menu;
- public $TABLE_NAME = 'menuitem';
- public $fields =
- array(
- 'id' => 'key',
- 'icon' => 'string',
- 'label' => 'string',
- 'slug' => 'string',
- 'url' => 'longstring',
- 'visibility' => 'longstring',
- 'classes' => 'string',
- 'sort' => 'int',
- 'firm' => array('type'=>'firm','label'=>'Etablissement', 'link'=>'class/Firm.class.php'),
- 'user' => 'string',
- 'target' => 'string',
- 'editable' => 'int',
- 'parent' => 'int',
- 'menu' => 'int'
- );
- const MENU_SHORTCUT = 'shortcut-menu';
- public $indexes = array('slug','menu');
- function __construct(){
- parent::__construct();
- $this->editable = true;
- $this->menu = 0;
- $this->user = '';
- }
- public static function target($slug=null){
- $targets = array(
- 'redirect' => array('label'=>'Redirection','slug'=>'redirect','icon'=>'fas fa-link'),
- '_blank' => array('label'=>'Redirection (nouvel onglet)','slug'=>'_blank','icon'=>'fas fa-link'),
- 'iframe' => array('label'=>'IFrame','slug'=>'iframe','icon'=>'fas fa-crop'),
- );
- $undefined = array('label'=>'Non défini','slug'=>'','icon'=>'');
- if(!isset($slug)) return $targets;
- return isset($targets[$slug]) ? $targets[$slug] : $undefined;
- }
- public function visibleFor($user){
- if(!isset($this->visibility) || empty($this->visibility) || $user->superadmin) return true;
- $visibility = explode(',', $this->visibility);
- foreach($visibility as $entity){
- if(is_numeric($entity)){
- if($user->hasRank($entity)) return true;
- }else{
- if($user->login==$entity) return true;
- }
- }
- return false;
- }
- public static function bySlug($menuSlug,$user='',$firms = array()){
- $menuItems = array();
- $mainMenu = array();
- $query = 'SELECT it.*,me.slug as parentSlug FROM {{table}} it LEFT JOIN {{table}} me ON it.menu=me.id WHERE me.user=?';
- $data = array($user);
- if(is_array($menuSlug)){
- $query .= ' AND me.slug IN ('.implode(',',array_fill(0,count($menuSlug),'?')).') ';
- foreach($menuSlug as $slug) $data[] = $slug;
- }else{
- $query .= ' AND me.slug=? ';
- $data[] = $menuSlug;
- }
- if(!empty($firms)){
- $query .=' AND it.firm IN ('.implode(',',array_fill(0, count($firms), '?')).') ';
- foreach($firms as $firm)
- $data[] = $firm;
- }
- $query .= ' ORDER BY sort';
- foreach(self::staticQuery($query,$data ,true) as $dbItem){
- $item = $dbItem->toArray();
- $item['foreign'] = $dbItem->foreign();
- $mainMenu[] = $item;
- }
- uasort ($mainMenu , function($a,$b){return $a['sort']>$b['sort']?1:-1;});
- foreach ($mainMenu as $i=>$item) {
- if(isset($item['parent'])) continue;
- $menuItems[$item['id']] = $item;
- $menuItems[$item['id']]['childs'] = array();
- unset($mainMenu[$i]);
- }
- foreach ($mainMenu as $item) {
- $menuItems[$item['parent']]['childs'][] = $item;
- }
- if(is_array($menuSlug)){
- //tri par slug
- $menuItemsBySlug = array();
- foreach($menuSlug as $slug){
- $menuItemsBySlug[$slug] = array();
- foreach($menuItems as $item){
- if($item['foreign']['parentSlug']!=$slug) continue;
- $menuItemsBySlug[$slug][] = $item;
- }
- }
- return $menuItemsBySlug;
- }else{
- return $menuItems;
- }
- }
- }
- ?>
|