XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
menu.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
11 class menu extends ModuleObject
12 {
17  function moduleInstall()
18  {
19  // Create a directory to use menu
20  FileHandler::makeDir('./files/cache/menu');
21 
22  return new BaseObject();
23  }
24 
29  function checkUpdate()
30  {
31  $oDB = &DB::getInstance();
32  $oModuleModel = getModel('module');
34  $version_update_id = implode('.', array(__CLASS__, __XE_VERSION__, 'updated'));
35  if($oModuleModel->needUpdate($version_update_id))
36  {
37  // 2009. 02. 11 menu added to the table site_srl
38  if(!$oDB->isColumnExists('menu', 'site_srl')) return true;
39 
40  // 2012. 02. 01 title index check
41  if(!$oDB->isIndexExists("menu", "idx_title")) return true;
42 
43  if(!$oDB->isColumnExists('menu_item', 'is_shortcut'))
44  {
45  return TRUE;
46  }
47 
48  $oMenuAdminModel = getAdminModel('menu');
49  $args = new stdClass();
50  $args->title = array("Temporary menu");
51  $temp_menus = executeQueryArray('menu.getMenuByTitle', $args);
52  if($temp_menus->toBool() && count($temp_menus->data)) return true;
53 
54  // 2015. 06. 15 add column desc
55  if(!$oDB->isColumnExists('menu_item', 'desc'))
56  {
57  return true;
58  }
59 
60  $oModuleController->insertUpdatedLog($version_update_id);
61  }
62 
63  return false;
64  }
65 
70  function moduleUpdate() {
71  $oDB = &DB::getInstance();
72  $oModuleModel = getModel('module');
74  $version_update_id = implode('.', array(__CLASS__, __XE_VERSION__, 'updated'));
75  if($oModuleModel->needUpdate($version_update_id))
76  {
77  // 2009. 02. 11 menu added to the table site_srl
78  if(!$oDB->isColumnExists('menu', 'site_srl'))
79  {
80  $oDB->addColumn('menu','site_srl','number',11,0,true);
81  }
82 
83  // 2012. 02. 01 title index check
84  if(!$oDB->isIndexExists("menu","idx_title"))
85  {
86  $oDB->addIndex('menu', 'idx_title', array('title'));
87  }
88 
89  // 2015. 06. 15 add column desc
90  if(!$oDB->isColumnExists('menu_item', 'desc'))
91  {
92  $oDB->addColumn('menu_item', 'desc','varchar',250,"",true);
93  }
94 
95  // 1.7(maserati) shortcut column add and mirgration
96  if(!$oDB->isColumnExists('menu_item', 'is_shortcut'))
97  {
98  $oDB->addColumn('menu_item', 'is_shortcut', 'char', 1, 'N');
99 
100  // check empty url and change shortcut type
101  $oMenuAdminModel = getAdminModel('menu');
102  $output = $oMenuAdminModel->getMenus();
103 
104  if(is_array($output))
105  {
106  $menuItemUniqueList = array();
107  $menuItemAllList = array();
108  foreach($output AS $key=>$value)
109  {
110  unset($args);
111  $args->menu_srl = $value->menu_srl;
112  $output2 = executeQueryArray('menu.getMenuItems', $args);
113  if(is_array($output2->data))
114  {
115  foreach($output2->data AS $key2=>$value2)
116  {
117  $menuItemAllList[$value2->menu_item_srl] = $value2->url;
118  if(!in_array($value2->url, $menuItemUniqueList))
119  {
120  $menuItemUniqueList[$value2->menu_item_srl] = $value2->url;
121  }
122 
123  // if url is empty, change type to shortcurt
124  if($value2->is_shortcut == 'N' && (!$value2->url || strncasecmp('http', $value2->url, 4) === 0))
125  {
126  $value2->is_shortcut = 'Y';
127  $output3 = executeQuery('menu.updateMenuItem', $value2);
128  }
129  }
130  }
131  }
132 
133  $oModuleModel = getModel('module');
134  // if duplicate reference, change type to shortcut
135  $shortcutItemList = array_diff_assoc($menuItemAllList, $menuItemUniqueList);
136  foreach($output AS $key=>$value)
137  {
138  unset($args);
139  $args->menu_srl = $value->menu_srl;
140  $output2 = executeQueryArray('menu.getMenuItems', $args);
141  if(is_array($output2->data))
142  {
143  foreach($output2->data AS $key2=>$value2)
144  {
145  if(!empty($value2->url) && strncasecmp('http', $value2->url, 4) !== 0)
146  {
147  $moduleInfo = $oModuleModel->getModuleInfoByMid($value2->url);
148  if(!$moduleInfo->module_srl)
149  {
150  $value2->url = Context::getDefaultUrl();
151  if(!$value2->url) $value2->url = '#';
152  $value2->is_shortcut = 'Y';
153 
154  $updateOutput = executeQuery('menu.updateMenuItem', $value2);
155  }
156  }
157 
158  if($shortcutItemList[$value2->menu_item_srl])
159  {
160  $value2->is_shortcut = 'Y';
161  $output3 = executeQuery('menu.updateMenuItem', $value2);
162  }
163  }
164  }
165  }
166  }
167 
168  $this->recompileCache();
169  }
170 
171  // for 1.7.4 update, 기존에 생성된 Temporary menu 항목 정리
172  $oMenuAdminModel = getAdminModel('menu');
173  $args = new stdClass();
174  $args->title = array("Temporary menu");
175  $temp_menus = executeQueryArray('menu.getMenuByTitle', $args);
176 
177  $args = new stdClass();
178  if($temp_menus->toBool() && count($temp_menus->data))
179  {
181  foreach($temp_menus->data as $menu)
182  {
183  $args->current_menu_srl = $menu->menu_srl;
184  $args->menu_srl = $oMenuAdminController->getUnlinkedMenu();
185  $output3 = executeQuery('menu.updateMenuItems', $args);
186 
187  if($output3->toBool())
188  {
189  // delete
190  $oMenuAdminController->deleteMenu($menu->menu_srl);
191  }
192  }
193 
194  $this->recompileCache();
195  }
196 
197  $oModuleController->insertUpdatedLog($version_update_id);
198  }
199 
200  return new BaseObject(0, 'success_updated');
201  }
202 
207  function recompileCache()
208  {
210  $oMenuAdminModel = getAdminModel('menu');
211 
212  // get home module id
213  $oModuleModel = getModel('module');
214  $columnList = array('modules.mid',);
215  $output = $oModuleModel->getSiteInfo(0, $columnList);
216  $homeModuleMid = $output->mid;
217  $homeMenuSrl = NULL;
218 
219  // Wanted list of all the blog module
220  $output = executeQueryArray("menu.getMenus");
221  $list = $output->data;
222  if(!count($list)) return;
223  // The menu module is used in the re-create all the menu list
224  foreach($list as $menu_item)
225  {
226  $menu_srl = $menu_item->menu_srl;
227  $oMenuAdminController->makeXmlFile($menu_srl);
228 
229  // for homeSitemap.php regenrate
230  if(!$homeMenuSrl)
231  {
232  $menuItemList = $oMenuAdminModel->getMenuItems($menu_srl);
233 
234  if(is_array($menuItemList->data))
235  {
236  foreach($menuItemList->data AS $key=>$value)
237  {
238  if($homeModuleMid == $value->url)
239  {
240  $homeMenuSrl = $menu_srl;
241  break;
242  }
243  }
244  }
245  }
246  }
247 
248  if($homeMenuSrl)
249  {
250  $oMenuAdminController->makeHomemenuCacheFile($homeMenuSrl);
251  }
252  }
253 }
254 /* End of file menu.class.php */
255 /* Location: ./modules/menu/menu.class.php */
recompileCache()
Definition: menu.class.php:207
$oModuleModel
Definition: ko.install.php:236
getController($module_name)
Definition: func.inc.php:90
$oMenuAdminController
Definition: ko.install.php:7
checkUpdate()
Definition: menu.class.php:29
const __XE_VERSION__
Definition: config.inc.php:32
$output
Definition: ko.install.php:193
moduleInstall()
Definition: menu.class.php:17
$args
Definition: ko.install.php:185
getAdminModel($module_name)
Definition: func.inc.php:156
getInstance($db_type=NULL)
Definition: DB.class.php:142
makeDir($path_string)
$moduleInfo
Definition: ko.install.php:253
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
executeQuery($query_id, $args=NULL, $arg_columns=NULL)
Definition: func.inc.php:203
$oModuleController
Definition: ko.install.php:287
moduleUpdate()
Definition: menu.class.php:70