XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
menu.admin.model.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
11 class menuAdminModel extends menu
12 {
13  private $menuSrlWithinHome = 0;
14 
19  function init()
20  {
21  }
22 
28  function getMenuList($obj)
29  {
30  if(!$obj->site_srl)
31  {
32  $site_module_info = Context::get('site_module_info');
33  $obj->site_srl = (int)$site_module_info->site_srl;
34  }
35  $args = new stdClass;
36  $args->site_srl = $obj->site_srl;
37  $args->sort_index = $obj->sort_index;
38  $args->page = $obj->page?$obj->page:1;
39  $args->list_count = $obj->list_count?$obj->list_count:20;
40  $args->page_count = $obj->page_count?$obj->page_count:10;
41  // document.getDocumentList query execution
42  $output = executeQuery('menu.getMenuList', $args);
43  // Return if no result or an error occurs
44  if(!$output->toBool()||!count($output->data)) return $output;
45 
46  return $output;
47  }
48 
54  function getMenus($site_srl = null)
55  {
56  if(!isset($site_srl))
57  {
58  $site_module_info = Context::get('site_module_info');
59  $site_srl = (int)$site_module_info->site_srl;
60  }
61  // Get information from the DB
62  $args = new stdClass();
63  $args->site_srl = $site_srl ;
64  $args->menu_srl = $menu_srl;
65  $output = executeQueryArray('menu.getMenus', $args);
66  if(!$output->data) return;
67  $menus = $output->data;
68  return $menus;
69  }
70 
77  function getMenu($menu_srl)
78  {
79  // Get information from the DB
80  $args = new stdClass();
81  $args->menu_srl = $menu_srl;
82  $output = executeQuery('menu.getMenu', $args);
83  if(!$output->data) return;
84 
85  $menu_info = $output->data;
86  $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_srl);
87  $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_srl);
88  return $menu_info;
89  }
90 
97  function getMenuByTitle($title, $site_srl = 0)
98  {
99  // Get information from the DB
100  if(!is_array($title))
101  {
102  $title = array($title);
103  }
104  $args = new stdClass();
105  $args->title = $title;
106  $args->site_srl = $site_srl;
107  $output = executeQuery('menu.getMenuByTitle', $args);
108  if(!$output->data) return;
109 
110  if(is_array($output->data)) $menu_info = $output->data[0];
111  else $menu_info = $output->data;
112 
113  if($menu_info->menu_srl)
114  {
115  $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_info->menu_srl);
116  $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_info->menu_srl);
117  }
118  return $menu_info;
119  }
120 
127  function getMenuListByTitle($title)
128  {
129  // Get information from the DB
130  $args = new stdClass();
131  $args->title = $title;
132  $output = executeQueryArray('menu.getMenuByTitle', $args);
133  if(!$output->data)
134  {
135  return array();
136  }
137 
138  return $output->data;
139  }
140 
147  function getMenuItemInfo($menu_item_srl)
148  {
149  // Get the menu information if menu_item_srl exists
150  $args = new stdClass();
151  $args->menu_item_srl = $menu_item_srl;
152  $output = executeQuery('menu.getMenuItem', $args);
153  $node = $output->data;
154  settype($node,'object');
155  if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
156  else $node->group_srls = array();
157 
158  $tmp_name = unserialize($node->name);
159  if($tmp_name && count($tmp_name))
160  {
161  $selected_lang = array();
162  $rand_name = $tmp_name[Context::getLangType()];
163  if(!$rand_name) $rand_name = array_shift($tmp_name);
164  $node->name = $rand_name;
165  }
166  return $node;
167  }
168 
174  {
175  $menuItemSrl = Context::get('menu_item_srl');
176  $menuItem = $this->getMenuItemInfo($menuItemSrl);
177 
178  if(!$menuItem->url)
179  {
180  $menuItem->moduleType = null;
181  }
182  else if(strncasecmp('http', $menuItem->url, 4) !== 0)
183  {
184  $oModuleModel = getModel('module');
185  $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItem->url, 0);
186  if(!$moduleInfo) $menuItem->moduleType = 'url';
187  else
188  {
189  if($moduleInfo->mid == $menuItem->url)
190  {
191  $menuItem->moduleType = $moduleInfo->module;
192  $menuItem->pageType = $moduleInfo->page_type;
193  $menuItem->layoutSrl = $moduleInfo->layout_srl;
194  }
195  }
196  }
197  else $menuItem->moduleType = 'url';
198 
199  // grant setting
200  if(is_array($menuItem->group_srls) && count($menuItem->group_srls) > 0)
201  {
202  if($menuItem->group_srls[0] == -1)
203  {
204  $menuItem->grant = 'member';
205  }
206  else if($menuItem->group_srls[0] == -3)
207  {
208  $menuItem->grant = 'manager';
209  }
210  else
211  {
212  $menuItem->grant = 'group';
213  }
214  }
215 
216  // get groups
217  $oMemberModel = getModel('member');
218  $oModuleAdminModel = getAdminModel('module');
219  $output = $oMemberModel->getGroups();
220  if(is_array($output))
221  {
222  $groupList = array();
223  foreach($output AS $key=>$value)
224  {
225  $groupList[$value->group_srl] = new stdClass();
226  $groupList[$value->group_srl]->group_srl = $value->group_srl;
227  if(substr($value->title,0,12)=='$user_lang->')
228  {
229  $tmp = $oModuleAdminModel->getLangCode(0, $value->title);
230  $groupList[$value->group_srl]->title = $tmp[Context::getLangType()];
231  }
232  else $groupList[$value->group_srl]->title = $value->title;
233 
234  if(in_array($key, $menuItem->group_srls)) $groupList[$value->group_srl]->isChecked = true;
235  else $groupList[$value->group_srl]->isChecked = false;
236  }
237  }
238  $menuItem->groupList = $groupList;
239 
240  $oModuleController = getController('module');
241  $menuItem->name_key = $menuItem->name;
242  $oModuleController->replaceDefinedLangCode($menuItem->name);
243 
244  $this->add('menu_item', $menuItem);
245  }
246 
254  function getMenuItems($menu_srl, $parent_srl = null, $columnList = array())
255  {
256  $args = new stdClass();
257  $args->menu_srl = $menu_srl;
258  $args->parent_srl = $parent_srl;
259 
260  $output = executeQueryArray('menu.getMenuItems', $args, $columnList);
261  return $output;
262  }
263 
270  function getMenuItemNames($source_name, $site_srl = null)
271  {
272  if(!$site_srl)
273  {
274  $site_module_info = Context::get('site_module_info');
275  $site_srl = (int)$site_module_info->site_srl;
276  }
277  // Get language code
278  $oModuleAdminModel = getAdminModel('module');
279  return $oModuleAdminModel->getLangCode($site_srl, $source_name, TRUE);
280  }
281 
288  {
289  // Get information on the menu for the parameter settings
290  $menu_item_srl = Context::get('menu_item_srl');
291  $parent_srl = Context::get('parent_srl');
292  // Get a list of member groups
293  $oMemberModel = getModel('member');
294  $group_list = $oMemberModel->getGroups();
295  Context::set('group_list', $group_list);
296 
297  // Add a sub-menu if there is parent_srl but not menu_item_srl
298  $item_info = new stdClass;
299  if(!$menu_item_srl && $parent_srl)
300  {
301  // Get information of the parent menu
302  $parent_info = $this->getMenuItemInfo($parent_srl);
303  // Default parameter settings for a new menu
304  $item_info->menu_item_srl = getNextSequence();
305  $item_info->parent_srl = $parent_srl;
306  $item_info->parent_menu_name = $parent_info->name;
307  // In case of modifying the existing menu or addting a new menu to the root
308  }
309  else
310  {
311  // Get information of the menu if menu_item_srl exists
312  if($menu_item_srl) $item_info = $this->getMenuItemInfo($menu_item_srl);
313  // Get only menu_item_srl if no values found, considering it as adding a new menu
314  if(!$item_info->menu_item_srl)
315  {
316  $item_info->menu_item_srl = getNextSequence();
317  }
318  }
319  Context::set('item_info', $item_info);
320  //Security
321  $security = new Security();
322  $security->encodeHTML('group_list..title');
323  $security->encodeHTML('item_info.url');
324  $security->encodeHTML('item_info.name');
325 
326  // Compile the template file into tpl variable and then return it
327  $oTemplate = &TemplateHandler::getInstance();
328  $tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info');
329 
330  $this->add('tpl', str_replace("\n"," ",$tpl));
331  }
332 
337  {
338  $oModuleModel = getModel('module');
339  $oAutoinstallModel = getModel('autoinstall');
340  $this->add('menu_types', $this->getModuleListInSitemap(0));
341 
342  $_allModules = FileHandler::readDir('./modules', '/^([a-zA-Z0-9_-]+)$/');
343  sort($_allModules);
344 
345  $allModules = array();
346 
347  Context::loadLang('modules/page/lang');
348 
349  foreach($_allModules as $module_name)
350  {
351  $module = $oModuleModel->getModuleInfoXml($module_name);
352  if(!isset($module)) continue;
353  $defaultSkin = $oModuleModel->getModuleDefaultSkin($module_name, 'P');
354  $defaultMobileSkin = $oModuleModel->getModuleDefaultSkin($module_name, 'M');
355  $skinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($module_name), $defaultSkin);
356  $mobileSkinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($module_name), $defaultMobileSkin, 'm.skins');
357  $module->defaultSkin = new stdClass();
358  $module->defaultSkin->skin = $defaultSkin;
359  $module->defaultSkin->title = $skinInfo->title ? $skinInfo->title : $defaultSkin;
360  $module->defaultMobileSkin = new stdClass();
361  $module->defaultMobileSkin->skin = $defaultMobileSkin;
362  $module->defaultMobileSkin->title = $mobileSkinInfo->title ? $mobileSkinInfo->title : $defaultMobileSkin;
363 
364  $module->package_srl = $oAutoinstallModel->getPackageSrlByPath('./modules/' . $module_name);
365  $module->url = _XE_LOCATION_SITE_ . '?mid=download&package_srl=' . $module->package_srl;
366 
367  if($module_name == 'page')
368  {
369  $pageTypeName = Context::getLang('page_type_name');
370  $module->title = $pageTypeName['ARTICLE'];
371  $allModules['ARTICLE'] = $module;
372  $wModuleInfo = clone $module;
373  unset($wModuleInfo->default_skin, $wModuleInfo->default_mskin);
374  $wModuleInfo->title = $pageTypeName['WIDGET'];
375  $wModuleInfo->no_skin = 'Y';
376  $allModules['WIDGET'] = $wModuleInfo;
377  $oModuleInfo = clone $module;
378  unset($oModuleInfo->default_skin, $oModuleInfo->default_mskin);
379  $oModuleInfo->title = $pageTypeName['OUTSIDE'];
380  $oModuleInfo->no_skin = 'Y';
381  $allModules['OUTSIDE'] = $oModuleInfo;
382  }
383  else
384  {
385  $allModules[$module_name] = $module;
386  }
387  }
388 
389  $this->add('all_modules', $allModules);
390  }
391 
398  function getModuleListInSitemap($site_srl = 0)
399  {
400  $oModuleModel = getModel('module');
401  $moduleList = array('page');
402 
403  $output = $oModuleModel->getModuleListByInstance($site_srl);
404  if(is_array($output->data))
405  {
406  foreach($output->data as $value)
407  {
408  if($value->instanceCount > 1)
409  {
410  $moduleList[] = $value->module;
411  }
412  }
413  }
414 
415  // after trigger
416  $output = ModuleHandler::triggerCall('menu.getModuleListInSitemap', 'after', $moduleList);
417  if(!$output->toBool()) return $output;
418 
419  $localModuleList = array_unique($moduleList);
420 
421  $oAutoinstallModel = getModel('autoinstall');
422 
423  // get have instance
424  $remotePackageList = $oAutoinstallModel->getHaveInstance(array('path'));
425  $remoteModuleList = array();
426  foreach($remotePackageList as $package)
427  {
428  if(strpos($package->path, './modules/') !== 0) continue;
429 
430  $pathInfo = explode('/', $package->path);
431  $remoteModuleList[] = $pathInfo[2];
432  }
433 
434  // all module list
435  $allModuleList = FileHandler::readDir('./modules', '/^([a-zA-Z0-9_-]+)$/');
436 
437  // union have instance and all module list
438  $haveInstance = array_intersect($remoteModuleList, $allModuleList);
439  $haveDirectory = array_intersect($localModuleList, $allModuleList);
440 
441  // union
442  $moduleList = array_unique(array_merge($haveDirectory, $haveInstance));
443 
444  $moduleInfoList = array();
445  Context::loadLang('modules/page/lang');
446  if(is_array($moduleList))
447  {
448  foreach($moduleList as $value)
449  {
450  $moduleInfo = $oModuleModel->getModuleInfoXml($value);
451 
452  if($value == 'page')
453  {
454  $pageTypeName = Context::getLang('page_type_name');
455  $moduleInfo->title = $pageTypeName['ARTICLE'];
456  $moduleInfoList['ARTICLE'] = $moduleInfo;
457  $wModuleInfo = clone $moduleInfo;
458  unset($wModuleInfo->default_skin, $wModuleInfo->default_mskin);
459  $wModuleInfo->title = $pageTypeName['WIDGET'];
460  $wModuleInfo->no_skin = 'Y';
461  $moduleInfoList['WIDGET'] = $wModuleInfo;
462  $oModuleInfo = clone $moduleInfo;
463  unset($oModuleInfo->default_skin, $oModuleInfo->default_mskin);
464  $oModuleInfo->title = $pageTypeName['OUTSIDE'];
465  $oModuleInfo->no_skin = 'Y';
466  $moduleInfoList['OUTSIDE'] = $oModuleInfo;
467  }
468  else
469  {
470  $moduleInfoList[$value] = $moduleInfo;
471  }
472  }
473  }
474 
475  return $moduleInfoList;
476  }
477 
478  public function getMenuAdminSiteMap()
479  {
480  $siteSrl = Context::get('site_srl');
481  $menuSrl = Context::get('menu_srl');
482 
483  if(!isset($siteSrl))
484  {
485  $site_module_info = Context::get('site_module_info');
486  $siteSrl = (int)$site_module_info->site_srl;
487  }
488 
489  $oModuleModel = getModel('module');
491  $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl');
492  $start_module = $oModuleModel->getSiteInfo(0, $columnList);
493 
494  $menuList = array();
495  if($menuSrl)
496  {
497  $isMenuFixed = false;
498  $output = $this->getMenu($menuSrl);
499  $php_file = sprintf(_XE_PATH_ . 'files/cache/menu/%s.php',$output->menu_srl);
500  if(file_exists($php_file)) include($php_file);
501  else $oMenuAdminController->makeXmlFile($menuSrl);
502 
503  if(count($menu->list)>0)
504  {
505  foreach($menu->list AS $key=>$value)
506  {
507  $this->_menuInfoSetting($menu->list[$key], $start_module, $isMenuFixed, $menuSrl,$siteSrl);
508  }
509  }
510 
511  // menu recreate
512  if($isMenuFixed)
513  {
514  $oMenuAdminController->makeXmlFile($menuSrl);
515  }
516 
517  $menuItems->menuSrl = $output->menu_srl;
518  $menuItems->title = $output->title;
519  $menuItems->menuItems = $menu;
520  $menuList[] = $menuItems;
521  }
522  else
523  {
524  $menuListFromDB = $this->getMenus($siteSrl);
525  if(is_array($menuListFromDB))
526  {
527  $oAdmin = getClass('admin');
528  foreach($menuListFromDB AS $key=>$value)
529  {
530  if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]);
531  else
532  {
533  unset($menu);
534  unset($menuItems);
535  $value->php_file = sprintf(_XE_PATH_ . 'files/cache/menu/%s.php',$value->menu_srl);
536  if(!file_exists($value->php_file))
537  {
538  $oMenuAdminController->makeXmlFile($value->menu_srl);
539  }
540 
541  include($value->php_file);
542 
543  $isMenuFixed = false;
544  if(count($menu->list) > 0)
545  {
546  foreach($menu->list AS $key2=>$value2)
547  {
548  $this->_menuInfoSetting($menu->list[$key2], $start_module, $isMenuFixed, $value->menu_srl,$siteSrl);
549  }
550  }
551 
552  // menu recreate
553  if($isMenuFixed)
554  {
555  $oMenuAdminController->makeXmlFile($value->menu_srl);
556  }
557 
558  $menuItems = new stdClass();
559  $menuItems->menuSrl = $value->menu_srl;
560  $menuItems->title = $value->title;
561  $menuItems->menuItems = $menu;
562 
563  // If include home menu, move first
564  if($value->menu_srl == $this->menuSrlWithinHome)
565  {
566  $menuList[-1] = $menuItems;
567  }
568  else
569  {
570  $menuList[] = $menuItems;
571  }
572  }
573  }
574  }
575  }
576  ksort($menuList);
577  $this->add('menuList', $menuList);
578  }
579 
584  public function getMenuAdminDetailSetup()
585  {
586  $menuItemSrl = Context::get('menu_item_srl');
587  if(!$menuItemSrl)
588  {
589  return new BaseObject(-1, 'msg_invalid_request');
590  }
591 
592  $menuItemInfo = $this->getMenuItemInfo($menuItemSrl);
593 
594  // if menu is shortcut
595  if($menuItemInfo->is_shortcut == 'Y')
596  {
597  return new BaseObject(-1, 'msg_invalid_request');
598  }
599 
600  // get module info
601  $oModuleModel = getModel('module');
602  $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url);
603 
604  // get xml info
605  $moduleConfInfo = $oModuleModel->getModuleInfoXml($moduleInfo->module);
606 
607  if($moduleConfInfo->setup_index_act)
608  {
609  $setupUrl = getNotEncodedUrl('', 'module', 'admin', 'act', $moduleConfInfo->setup_index_act, 'module_srl', $moduleInfo->module_srl, 'isLayoutDrop', '1');
610  }
611 
612  if($moduleConfInfo->simple_setup_index_act)
613  {
614  $oTargetmoduleAdminModel = getAdminModel($moduleInfo->module);
615  $advancedSetupUrl = getUrl('', 'module', 'admin', 'act', $moduleConfInfo->setup_index_act, 'module_srl', $moduleInfo->module_srl);
616  $simpleSetupHtml = $oTargetmoduleAdminModel->{$moduleConfInfo->simple_setup_index_act}($moduleInfo->module_srl, $advancedSetupUrl);
617 
618  if($simpleSetupHtml)
619  {
620  $this->add('simpleSetupHtml', $simpleSetupHtml);
621  }
622  }
623  $this->add('setupUrl', $setupUrl);
624  }
625 
631  private function _menuInfoSetting(&$menu, &$start_module, &$isMenuFixed, $menuSrl,$siteSrl = 0)
632  {
633  $oModuleModel = getModel('module');
634  // if url is empty and is_shortcut is 'N', change to is_shortcut 'Y'
635  if(!$menu['url'] && $menu['is_shortcut'] == 'N')
636  {
637  $menu['is_shortcut'] = 'Y';
638 
639  $args = new stdClass;
640  $args->menu_item_srl = $menu['node_srl'];
641  $args->is_shortcut = 'Y';
642  if($menu['menu_name_key']) $args->name = $menu['menu_name_key'];
643  else $args->name = $menu['menu_name'];
644  $output = executeQuery('menu.updateMenuItem', $args);
645 
646  $isMenuFixed = true;
647  }
648 
649  //if menu type is module menu
650  //if(!empty($menu['url']) && !preg_match('/^http/i', $menu['url']))
651  if($menu['is_shortcut'] != 'Y')
652  {
653  unset($midInfo, $moduleInfo);
654  $midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], $siteSrl);
655  $moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module);
656 
657  if($midInfo)
658  {
659  $menu['module_srl'] = $midInfo->module_srl;
660  $menu['module'] = $midInfo->module;
661  if($midInfo->page_type)
662  {
663  $menu['module_type'] = $midInfo->page_type;
664  }
665  else
666  {
667  $menu['module_type'] = $midInfo->module;
668  }
669  }
670 
671  if($moduleInfo->setup_index_act)
672  {
673  $menu['setup_index_act'] = $moduleInfo->setup_index_act;
674  }
675  else if($moduleInfo->default_index_act)
676  {
677  $menu['setup_index_act'] = $moduleInfo->default_index_act;
678  }
679 
680  if($menu['is_shortcut'] == 'N' && $midInfo->mid == $start_module->mid)
681  {
682  $menu['is_start_module'] = true;
683  $this->menuSrlWithinHome = $menuSrl;
684  }
685  // setting layout srl for layout management
686  $menu['layout_srl'] = $midInfo->layout_srl;
687  $menu['browser_title'] = $midInfo->browser_title;
688  }
689  if(count($menu['list']) > 0)
690  {
691  foreach($menu['list'] as $key=>$value)
692  {
693  $this->_menuInfoSetting($menu['list'][$key], $start_module, $isMenuFixed, $menuSrl, $siteSrl);
694  }
695  }
696  }
697 }
698 /* End of file menu.admin.model.php */
699 /* Location: ./modules/menu/menu.admin.model.php */
$oModuleModel
Definition: ko.install.php:236
getController($module_name)
Definition: func.inc.php:90
$oMenuAdminController
Definition: ko.install.php:7
$obj
Definition: ko.install.php:262
loadLang($path)
getMenus($site_srl=null)
getModuleListInSitemap($site_srl=0)
when menu add in sitemap, select module list this menu showing with trigger
$output
Definition: ko.install.php:193
add($key, $val)
set($key, $val, $set_to_get_vars=0)
getNotEncodedUrl()
Definition: func.inc.php:316
$moduleList
Definition: ko.install.php:225
getMenu($menu_srl)
$args
Definition: ko.install.php:185
getMenuByTitle($title, $site_srl=0)
getMenuItems($menu_srl, $parent_srl=null, $columnList=array())
getMenuItemNames($source_name, $site_srl=null)
getAdminModel($module_name)
Definition: func.inc.php:156
getLang($code)
const _XE_PATH_
Definition: config.inc.php:49
$moduleInfo
Definition: ko.install.php:253
const _XE_LOCATION_SITE_
Definition: config.inc.php:74
getNextSequence()
Definition: func.inc.php:236
getModel($module_name)
Definition: func.inc.php:145
executeQueryArray($query_id, $args=NULL, $arg_columns=NULL)
Definition: func.inc.php:219
getAdminController($module_name)
Definition: func.inc.php:101
readDir($path, $filter= '', $to_lower=FALSE, $concat_prefix=FALSE)
executeQuery($query_id, $args=NULL, $arg_columns=NULL)
Definition: func.inc.php:203
$module
Class name of Xe Module that is identified by mid.
$oModuleController
Definition: ko.install.php:287
getMenuItemInfo($menu_item_srl)
getUrl()
Definition: func.inc.php:297
admin model class of the menu module
getMenuListByTitle($title)
triggerCall($trigger_name, $called_position, &$obj)
getClass($module_name)
Definition: func.inc.php:189