17 import(
'lib.pkp.classes.navigationMenu.NavigationMenu');
18 import(
'lib.pkp.classes.navigationMenu.NavigationMenuItem');
27 $params = array((
int) $navigationMenuItemId);
29 'SELECT * FROM navigation_menu_items WHERE navigation_menu_item_id = ?',
34 if ($result->RecordCount() != 0) {
35 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
48 $params = array($path, (
int) $contextId,
'NMI_TYPE_CUSTOM');
50 'SELECT * FROM navigation_menu_items WHERE path = ? and context_id = ? and type= ?',
55 if ($result->RecordCount() != 0) {
56 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
68 $params = array((
int) $contextId);
70 'SELECT * FROM navigation_menu_items WHERE context_id = ?',
82 $params = array((
int) $menuId);
85 FROM navigation_menu_item_assignments as nmh
86 LEFT JOIN navigation_menu_items as nmi ON (nmh.navigation_menu_item_id = nmi.navigation_menu_item_id)
87 WHERE nmh.navigation_menu_id = ?
104 $menuItemTitleLocaleKey,
109 FROM navigation_menu_items
110 LEFT JOIN navigation_menu_item_settings ON (navigation_menu_items.navigation_menu_item_id = navigation_menu_item_settings.navigation_menu_item_id)
111 WHERE navigation_menu_items.type = ?
112 AND (navigation_menu_item_settings.setting_name = \'titleLocaleKey\' and navigation_menu_item_settings.setting_value = ?)
113 AND navigation_menu_items.context_id = ?',
118 if ($result->RecordCount() != 0) {
119 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
134 $params = array($type);
135 if ($contextId !==
null) {
136 $params[] = $contextId;
139 'SELECT * FROM navigation_menu_items WHERE type = ?' .
140 ($contextId !==
null ?
' AND context_id = ?' :
''),
151 return array(
'title',
'content',
'remoteUrl');
158 return array(
'titleLocaleKey');
176 $navigationMenuItem->setId($row[
'navigation_menu_item_id']);
177 $navigationMenuItem->setContextId($row[
'context_id']);
178 $navigationMenuItem->setType($row[
'type']);
179 $navigationMenuItem->setPath($row[
'path']);
181 $this->
getDataObjectSettings(
'navigation_menu_item_settings',
'navigation_menu_item_id', $row[
'navigation_menu_item_id'], $navigationMenuItem);
183 return $navigationMenuItem;
192 'navigation_menu_item_id' => $navigationMenuItem->getId()
203 'INSERT INTO navigation_menu_items
204 (path, context_id, type)
208 $navigationMenuItem->getPath(),
209 (
int) $navigationMenuItem->getContextId(),
210 $navigationMenuItem->getType(),
218 return $navigationMenuItem->getId();
227 $returner = $this->
update(
228 'UPDATE navigation_menu_items
233 WHERE navigation_menu_item_id = ?',
235 $navigationMenuItem->getPath(),
236 (
int) $navigationMenuItem->getContextId(),
237 $navigationMenuItem->getType(),
238 (
int) $navigationMenuItem->getId(),
254 return $this->
deleteById($navigationMenuItem->getId());
265 $this->
update(
'DELETE FROM navigation_menu_item_settings WHERE navigation_menu_item_id = ?', (
int) $navigationMenuItemId);
266 $this->
update(
'DELETE FROM navigation_menu_items WHERE navigation_menu_item_id = ?', (
int) $navigationMenuItemId);
269 $navigationMenuItemAssignmentDao->deleteByMenuItemId($navigationMenuItemId);
279 while ($navigationMenuItem = $navigationMenuItems->next()) {
289 return $this->
_getInsertId(
'navigation_menu_items',
'navigation_menu_item_id');
300 $tree = $xmlParser->parse($filename);
302 if ($contextId == CONTEXT_ID_NONE) {
304 $site = $siteDao->getSite();
307 if (!$tree)
return false;
309 foreach ($tree->getChildren() as $setting) {
310 $site = $setting->getAttribute(
'site');
312 if ($contextId == CONTEXT_ID_NONE && !$site) {
332 function installNodeSettings($contextId, $node, $navigationMenuId =
null, $navigationMenuItemParentId =
null, $seq = 0, $checkChildren =
false) {
333 $titleKey = $node->getAttribute(
'title');
334 $path = $node->getAttribute(
'path');
335 $type = $node->getAttribute(
'type');
339 if (!isset($navigationMenuItemExisting)) {
341 $navigationMenuItem->setPath($path);
342 $navigationMenuItem->setContextId($contextId);
344 $navigationMenuItem->setType($type);
346 $navigationMenuItemId = $this->
insertObject($navigationMenuItem);
350 $this->
updateSetting($navigationMenuItemId,
'titleLocaleKey', $titleKey);
352 $navigationMenuItemId = $navigationMenuItemExisting->getId();
354 $this->
updateSetting($navigationMenuItemId,
'titleLocaleKey', $titleKey);
358 if ($navigationMenuId) {
360 $assignmentExists = $navigationMenuItemAssignmentDao->getByNMIIdAndMenuIdAndParentId($navigationMenuItemId, $navigationMenuId, $navigationMenuItemParentId);
362 if (!isset($assignmentExists)) {
363 $navigationMenuItemAssignment = $navigationMenuItemAssignmentDao->newDataObject();
365 $navigationMenuItemAssignment->setMenuItemId($navigationMenuItemId);
366 $navigationMenuItemAssignment->setMenuId($navigationMenuId);
368 if ($navigationMenuItemParentId) {
369 $navigationMenuItemAssignment->setParentId($navigationMenuItemParentId);
372 $navigationMenuItemAssignment->setSequence($seq);
375 $navigationMenuItemAssignmentDao->insertObject($navigationMenuItemAssignment);
379 if ($checkChildren) {
382 foreach ($node->getChildren() as $navigationMenuItemSecondLevelNode) {
383 $this->
installNodeSettings($contextId, $navigationMenuItemSecondLevelNode, $navigationMenuId, $navigationMenuItemId, $seqSec,
false);
399 function updateSetting($navigationMenuItemId, $name, $value, $type =
null, $isLocalized =
false) {
400 $keyFields = array(
'setting_name',
'locale',
'navigation_menu_item_id');
404 $this->
replace(
'navigation_menu_item_settings',
406 'navigation_menu_item_id' => (
int) $navigationMenuItemId,
407 'setting_name' => $name,
408 'setting_value' => trim($value,
'##'),
409 'setting_type' => $type,
415 if (is_array($value))
foreach ($value as $locale => $localeValue) {
416 $this->
update(
'DELETE FROM navigation_menu_item_settings WHERE navigation_menu_item_id = ? AND setting_name = ? AND locale = ?', array((
int) $navigationMenuItemId, $name, $locale));
417 if (empty($localeValue))
continue;
419 $this->
update(
'INSERT INTO navigation_menu_item_settings
420 (navigation_menu_item_id, setting_name, setting_value, setting_type, locale)
421 VALUES (?, ?, ?, ?, ?)',
423 $navigationMenuItemId, $name, trim($this->
convertToDB($localeValue, $type),
'##'), $type, $locale
437 function getSetting($navigationMenuItemId, $name, $locale =
null) {
438 $params = array((
int) $navigationMenuItemId, $name);
439 if ($locale) $params[] = $locale;
441 'SELECT setting_name, setting_value, setting_type, locale
442 FROM navigation_menu_item_settings
443 WHERE navigation_menu_item_id = ? AND
445 ($locale?
' AND locale = ?':
''),
449 $recordCount = $result->RecordCount();
451 if ($recordCount == 1) {
452 $row = $result->getRowAssoc(
false);
453 $returner = $this->
convertFromDB($row[
'setting_value'], $row[
'setting_type']);
454 } elseif ($recordCount > 1) {
456 while (!$result->EOF) {
457 $returner[$row[
'locale']] = $this->
convertFromDB($row[
'setting_value'], $row[
'setting_type']);
472 return $this->
update(
'DELETE FROM navigation_menu_item_settings WHERE locale = ?', $locale);
482 $assignments = $navigationMenuItemAssignmentDao->getByMenuItemId($id);
484 $assignmentsArray = $assignments->toArray();
485 foreach ($assignmentsArray as $assignment) {
486 $cache = $navigationMenuDao->getCache($assignment->getMenuId());
487 if ($cache) $cache->flush();
498 $path = $staticPage->getPath();
499 $contextId = $staticPage->getContextId();
501 $existingNMIWithPath = $this->
getByPath($contextId, $path);
503 $retNavigationMenuItemId =
null;
505 if (!isset($existingNMIWithPath)) {
508 $navigationMenuItem->setPath($path);
509 $navigationMenuItem->setContextId($contextId);
510 $navigationMenuItem->setType(NMI_TYPE_CUSTOM);
512 $navigationMenuItem->setTitle($staticPage->getTitle(
null),
null);
513 $navigationMenuItem->setContent($staticPage->getContent(
null),
null);
515 $retNavigationMenuItemId = $this->
insertObject($navigationMenuItem);
518 return $retNavigationMenuItemId;