18 import(
'lib.pkp.classes.navigationMenu.NavigationMenu');
35 function getById($navigationMenuId, $contextId =
null) {
36 $params = array((
int) $navigationMenuId);
37 if ($contextId !==
null) $params[] = (int) $contextId;
39 'SELECT * FROM navigation_menus WHERE navigation_menu_id = ?' .
40 ($contextId !==
null?
' AND context_id = ?':
''),
45 if ($result->RecordCount() != 0) {
46 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
58 $params = array((
int) $contextId);
60 'SELECT * FROM navigation_menus WHERE context_id = ?',
74 $params = array($areaName);
75 $params[] = (int) $contextId;
77 'SELECT * FROM navigation_menus WHERE area_name = ? and context_id = ?',
91 $params = array((
int) $contextId);
94 'SELECT * FROM navigation_menus WHERE context_id = ? and title = ?',
99 if ($result->RecordCount() != 0) {
100 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
116 FROM navigation_menus
124 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true :
false;
145 $navigationMenu->setId($row[
'navigation_menu_id']);
146 $navigationMenu->setTitle($row[
'title']);
147 $navigationMenu->setAreaName($row[
'area_name']);
148 $navigationMenu->setContextId($row[
'context_id']);
150 return $navigationMenu;
160 'INSERT INTO navigation_menus
161 (title, area_name, context_id)
165 $navigationMenu->getTitle(),
166 $navigationMenu->getAreaName(),
167 (
int) $navigationMenu->getContextId(),
172 return $navigationMenu->getId();
181 $returner = $this->
update(
182 'UPDATE navigation_menus
186 WHERE navigation_menu_id = ?',
188 $navigationMenu->getTitle(),
189 $navigationMenu->getAreaName(),
190 (
int) $navigationMenu->getContextId(),
191 (
int) $navigationMenu->getId(),
195 $this->
unCache($navigationMenu->getId());
206 return $this->
deleteById($navigationMenu->getId());
214 $this->
unCache($navigationMenuId);
216 $this->
update(
'DELETE FROM navigation_menus WHERE navigation_menu_id = ?', (
int) $navigationMenuId);
219 $navigationMenuItemAssignmentDao->deleteByMenuId($navigationMenuId);
229 while ($navigationMenu = $navigationMenus->next()) {
239 return $this->
_getInsertId(
'navigation_menus',
'navigation_menu_id');
250 $tree = $xmlParser->parse($filename);
252 if ($contextId == CONTEXT_ID_NONE) {
254 $site = $siteDao->getSite();
257 if (!$tree)
return false;
259 foreach ($tree->getChildren() as $navigationMenuNode) {
260 $site = $navigationMenuNode->getAttribute(
'site');
261 if ($contextId == CONTEXT_ID_NONE && !$site) {
265 if ($navigationMenuNode->name ==
'navigationMenu') {
266 $title = $navigationMenuNode->getAttribute(
'title');
267 $area = $navigationMenuNode->getAttribute(
'area');
269 $navigationMenu =
null;
273 $navigationMenusWithArea = $this->
getByArea($contextId, $area)->toArray();
274 if (count($navigationMenusWithArea) != 0) {
275 error_log(
"WARNING: The NavigationMenu (ContextId: $contextId, Title: $title, Area: $area) will be skipped because the specified area has already a NavigationMenu attached.");
280 $navigationMenu = $this->
getByTitle($contextId, $title);
281 $navigationMenu->setAreaName($area);
284 $navigationMenuId = $this->
updateObject($navigationMenu);
287 $navigationMenu->setTitle($title);
288 $navigationMenu->setContextId($contextId);
289 $navigationMenu->setAreaName($area);
292 $navigationMenuId = $this->
insertObject($navigationMenu);
293 $navigationMenu->setId($navigationMenuId);
297 foreach ($navigationMenuNode->getChildren() as $navigationMenuItemFirstLevelNode) {
299 $navigationMenuItemDao->installNodeSettings($contextId, $navigationMenuItemFirstLevelNode, $navigationMenu->getId(),
null, $seq,
true);
303 } elseif ($navigationMenuNode->name ==
'navigationMenuItem') {
305 $navigationMenuItemDao->installNodeSettings($contextId, $navigationMenuNode,
null,
null, 0,
true);
318 if ($cache) $cache->flush();
327 static $navigationMenuCache;
328 if (!isset($navigationMenuCache)) {
329 $navigationMenuCache = array();
331 if (!isset($navigationMenuCache[$id])) {
333 $navigationMenuCache[$id] = $cacheManager->getCache(
334 'navigationMenu', $id,
335 array($this,
'_cacheMiss')
338 return $navigationMenuCache[$id];
349 $navigationMenu = $navigationMenuDao->GetById($cache->getCacheId());
350 import(
'classes.core.Services');
351 Services::get(
'navigationMenu')->getMenuTree($navigationMenu);
353 return $navigationMenu;