Open Journal Systems  3.3.0
NavigationMenuItemDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.navigationMenu.NavigationMenu');
18 import('lib.pkp.classes.navigationMenu.NavigationMenuItem');
19 
20 class NavigationMenuItemDAO extends DAO {
26  function getById($navigationMenuItemId) {
27  $params = array((int) $navigationMenuItemId);
28  $result = $this->retrieve(
29  'SELECT * FROM navigation_menu_items WHERE navigation_menu_item_id = ?',
30  $params
31  );
32 
33  $returner = null;
34  if ($result->RecordCount() != 0) {
35  $returner = $this->_fromRow($result->GetRowAssoc(false));
36  }
37  $result->Close();
38  return $returner;
39  }
40 
47  function getByPath($contextId, $path) {
48  $params = array($path, (int) $contextId, 'NMI_TYPE_CUSTOM');
49  $result = $this->retrieve(
50  'SELECT * FROM navigation_menu_items WHERE path = ? and context_id = ? and type= ?',
51  $params
52  );
53 
54  $returner = null;
55  if ($result->RecordCount() != 0) {
56  $returner = $this->_fromRow($result->GetRowAssoc(false));
57  }
58  $result->Close();
59  return $returner;
60  }
61 
67  function getByContextId($contextId) {
68  $params = array((int) $contextId);
69  $result = $this->retrieve(
70  'SELECT * FROM navigation_menu_items WHERE context_id = ?',
71  $params
72  );
73 
74  return new DAOResultFactory($result, $this, '_fromRow');
75  }
76 
81  public function getByMenuId($menuId) {
82  $params = array((int) $menuId);
83  $result = $this->retrieve(
84  'SELECT nmi.*
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 = ?
88  ORDER BY nmh.seq',
89  $params
90  );
91 
92  return new DAOResultFactory($result, $this, '_fromRow');
93  }
94 
101  public function getByTypeAndTitleLocaleKey($contextId, $menuItemType, $menuItemTitleLocaleKey) {
102  $params = array(
103  $menuItemType,
104  $menuItemTitleLocaleKey,
105  (int) $contextId
106  );
107  $result = $this->retrieve(
108  'SELECT *
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 = ?',
114  $params
115  );
116 
117  $returner = null;
118  if ($result->RecordCount() != 0) {
119  $returner = $this->_fromRow($result->GetRowAssoc(false));
120  }
121 
122  $result->Close();
123 
124  return $returner;
125  }
126 
133  function getByType($type, $contextId = null) {
134  $params = array($type);
135  if ($contextId !== null) {
136  $params[] = $contextId;
137  }
138  $result = $this->retrieve(
139  'SELECT * FROM navigation_menu_items WHERE type = ?' .
140  ($contextId !== null ? ' AND context_id = ?' : ''),
141  $params
142  );
143  return new DAOResultFactory($result, $this, '_fromRow');
144  }
145 
150  function getLocaleFieldNames() {
151  return array('title', 'content', 'remoteUrl');
152  }
153 
158  return array('titleLocaleKey');
159  }
160 
165  function newDataObject() {
166  return new NavigationMenuItem();
167  }
168 
174  function _fromRow($row, $dataObject = false) {
175  $navigationMenuItem = $this->newDataObject();
176  $navigationMenuItem->setId($row['navigation_menu_item_id']);
177  $navigationMenuItem->setContextId($row['context_id']);
178  $navigationMenuItem->setType($row['type']);
179  $navigationMenuItem->setPath($row['path']);
180 
181  $this->getDataObjectSettings('navigation_menu_item_settings', 'navigation_menu_item_id', $row['navigation_menu_item_id'], $navigationMenuItem);
182 
183  return $navigationMenuItem;
184  }
185 
190  function updateLocaleFields($navigationMenuItem) {
191  $this->updateDataObjectSettings('navigation_menu_item_settings', $navigationMenuItem, array(
192  'navigation_menu_item_id' => $navigationMenuItem->getId()
193  ));
194  }
195 
201  function insertObject($navigationMenuItem) {
202  $this->update(
203  'INSERT INTO navigation_menu_items
204  (path, context_id, type)
205  VALUES
206  (?, ?, ?)',
207  array(
208  $navigationMenuItem->getPath(),
209  (int) $navigationMenuItem->getContextId(),
210  $navigationMenuItem->getType(),
211  )
212  );
213  $navigationMenuItem->setId($this->getInsertId());
214  $this->updateLocaleFields($navigationMenuItem);
215 
216  $this->unCacheRelatedNavigationMenus($navigationMenuItem->getId());
217 
218  return $navigationMenuItem->getId();
219  }
220 
226  function updateObject($navigationMenuItem) {
227  $returner = $this->update(
228  'UPDATE navigation_menu_items
229  SET
230  path = ?,
231  context_id = ?,
232  type = ?
233  WHERE navigation_menu_item_id = ?',
234  array(
235  $navigationMenuItem->getPath(),
236  (int) $navigationMenuItem->getContextId(),
237  $navigationMenuItem->getType(),
238  (int) $navigationMenuItem->getId(),
239  )
240  );
241  $this->updateLocaleFields($navigationMenuItem);
242 
243  $this->unCacheRelatedNavigationMenus($navigationMenuItem->getId());
244 
245  return $returner;
246  }
247 
253  function deleteObject($navigationMenuItem) {
254  return $this->deleteById($navigationMenuItem->getId());
255  }
256 
262  function deleteById($navigationMenuItemId) {
263  $this->unCacheRelatedNavigationMenus($navigationMenuItemId);
264 
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);
267 
268  $navigationMenuItemAssignmentDao = DAORegistry::getDAO('NavigationMenuItemAssignmentDAO'); /* @var $navigationMenuItemAssignmentDao NavigationMenuItemAssignmentDAO */
269  $navigationMenuItemAssignmentDao->deleteByMenuItemId($navigationMenuItemId);
270  }
271 
276  function deleteByContextId($contextId) {
277  $navigationMenuItems = $this->getByContextId($contextId);
278 
279  while ($navigationMenuItem = $navigationMenuItems->next()) {
280  $this->deleteObject($navigationMenuItem);
281  }
282  }
283 
288  function getInsertId() {
289  return $this->_getInsertId('navigation_menu_items', 'navigation_menu_item_id');
290  }
291 
298  function installSettings($contextId, $filename) {
299  $xmlParser = new XMLParser();
300  $tree = $xmlParser->parse($filename);
301 
302  if ($contextId == CONTEXT_ID_NONE) {
303  $siteDao = DAORegistry::getDAO('SiteDAO'); /* @var $siteDao SiteDAO */
304  $site = $siteDao->getSite();
305  }
306 
307  if (!$tree) return false;
308 
309  foreach ($tree->getChildren() as $setting) {
310  $site = $setting->getAttribute('site');
311 
312  if ($contextId == CONTEXT_ID_NONE && !$site) {
313  continue;
314  }
315 
316  $this->installNodeSettings($contextId, $setting, null, null, 0, true);
317  }
318 
319  return true;
320  }
321 
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');
336 
337  $navigationMenuItemExisting = $this->getByTypeAndTitleLocaleKey($contextId, $type, $titleKey);
338 
339  if (!isset($navigationMenuItemExisting)) {
340  $navigationMenuItem = $this->newDataObject();
341  $navigationMenuItem->setPath($path);
342  $navigationMenuItem->setContextId($contextId);
343 
344  $navigationMenuItem->setType($type);
345 
346  $navigationMenuItemId = $this->insertObject($navigationMenuItem);
347 
348  // add the i18n keys to the settings table so that they
349  // can be used when a new locale is added/reloaded
350  $this->updateSetting($navigationMenuItemId, 'titleLocaleKey', $titleKey);
351  } else {
352  $navigationMenuItemId = $navigationMenuItemExisting->getId();
353 
354  $this->updateSetting($navigationMenuItemId, 'titleLocaleKey', $titleKey);
355  }
356 
357  // insert into Assignments
358  if ($navigationMenuId) {
359  $navigationMenuItemAssignmentDao = DAORegistry::getDAO('NavigationMenuItemAssignmentDAO'); /* @var $navigationMenuItemAssignmentDao NavigationMenuItemAssignmentDAO */
360  $assignmentExists = $navigationMenuItemAssignmentDao->getByNMIIdAndMenuIdAndParentId($navigationMenuItemId, $navigationMenuId, $navigationMenuItemParentId);
361 
362  if (!isset($assignmentExists)) {
363  $navigationMenuItemAssignment = $navigationMenuItemAssignmentDao->newDataObject();
364 
365  $navigationMenuItemAssignment->setMenuItemId($navigationMenuItemId);
366  $navigationMenuItemAssignment->setMenuId($navigationMenuId);
367 
368  if ($navigationMenuItemParentId) {
369  $navigationMenuItemAssignment->setParentId($navigationMenuItemParentId);
370  }
371 
372  $navigationMenuItemAssignment->setSequence($seq);
373 
374  // Insert Assignment
375  $navigationMenuItemAssignmentDao->insertObject($navigationMenuItemAssignment);
376  }
377  }
378 
379  if ($checkChildren) {
380  $seqSec = 0;
381 
382  foreach ($node->getChildren() as $navigationMenuItemSecondLevelNode) {
383  $this->installNodeSettings($contextId, $navigationMenuItemSecondLevelNode, $navigationMenuId, $navigationMenuItemId, $seqSec, false);
384  $seqSec++;
385  }
386  }
387 
388  return true;
389  }
390 
399  function updateSetting($navigationMenuItemId, $name, $value, $type = null, $isLocalized = false) {
400  $keyFields = array('setting_name', 'locale', 'navigation_menu_item_id');
401 
402  if (!$isLocalized) {
403  $value = $this->convertToDB($value, $type);
404  $this->replace('navigation_menu_item_settings',
405  array(
406  'navigation_menu_item_id' => (int) $navigationMenuItemId,
407  'setting_name' => $name,
408  'setting_value' => trim($value,'##'),
409  'setting_type' => $type,
410  'locale' => ''
411  ),
412  $keyFields
413  );
414  } else {
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;
418  $type = null;
419  $this->update('INSERT INTO navigation_menu_item_settings
420  (navigation_menu_item_id, setting_name, setting_value, setting_type, locale)
421  VALUES (?, ?, ?, ?, ?)',
422  array(
423  $navigationMenuItemId, $name, trim($this->convertToDB($localeValue, $type),'##'), $type, $locale
424  )
425  );
426  }
427  }
428  }
429 
437  function getSetting($navigationMenuItemId, $name, $locale = null) {
438  $params = array((int) $navigationMenuItemId, $name);
439  if ($locale) $params[] = $locale;
440  $result = $this->retrieve(
441  'SELECT setting_name, setting_value, setting_type, locale
442  FROM navigation_menu_item_settings
443  WHERE navigation_menu_item_id = ? AND
444  setting_name = ?' .
445  ($locale?' AND locale = ?':''),
446  $params
447  );
448 
449  $recordCount = $result->RecordCount();
450  $returner = false;
451  if ($recordCount == 1) {
452  $row = $result->getRowAssoc(false);
453  $returner = $this->convertFromDB($row['setting_value'], $row['setting_type']);
454  } elseif ($recordCount > 1) {
455  $returner = array();
456  while (!$result->EOF) {
457  $returner[$row['locale']] = $this->convertFromDB($row['setting_value'], $row['setting_type']);
458  $result->MoveNext();
459  }
460 
461  $result->Close();
462  }
463 
464  return $returner;
465  }
466 
471  function deleteSettingsByLocale($locale) {
472  return $this->update('DELETE FROM navigation_menu_item_settings WHERE locale = ?', $locale);
473  }
474 
480  $navigationMenuDao = \DAORegistry::getDAO('NavigationMenuDAO');
481  $navigationMenuItemAssignmentDao = \DAORegistry::getDAO('NavigationMenuItemAssignmentDAO');
482  $assignments = $navigationMenuItemAssignmentDao->getByMenuItemId($id);
483  if ($assignments) {
484  $assignmentsArray = $assignments->toArray();
485  foreach ($assignmentsArray as $assignment) {
486  $cache = $navigationMenuDao->getCache($assignment->getMenuId());
487  if ($cache) $cache->flush();
488  }
489  }
490  }
491 
497  function portStaticPage($staticPage) {
498  $path = $staticPage->getPath();
499  $contextId = $staticPage->getContextId();
500 
501  $existingNMIWithPath = $this->getByPath($contextId, $path);
502 
503  $retNavigationMenuItemId = null;
504 
505  if (!isset($existingNMIWithPath)) {
506  $navigationMenuItem = $this->newDataObject();
507 
508  $navigationMenuItem->setPath($path);
509  $navigationMenuItem->setContextId($contextId);
510  $navigationMenuItem->setType(NMI_TYPE_CUSTOM);
511 
512  $navigationMenuItem->setTitle($staticPage->getTitle(null), null);
513  $navigationMenuItem->setContent($staticPage->getContent(null), null);
514 
515  $retNavigationMenuItemId = $this->insertObject($navigationMenuItem);
516  }
517 
518  return $retNavigationMenuItemId;
519  }
520 }
521 
522 
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
NavigationMenuItemDAO\unCacheRelatedNavigationMenus
unCacheRelatedNavigationMenus($id)
Definition: NavigationMenuItemDAO.inc.php:479
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DAO\convertToDB
convertToDB($value, &$type)
Definition: DAO.inc.php:401
NavigationMenuItemDAO\getByTypeAndTitleLocaleKey
getByTypeAndTitleLocaleKey($contextId, $menuItemType, $menuItemTitleLocaleKey)
Definition: NavigationMenuItemDAO.inc.php:101
NavigationMenuItemDAO\getInsertId
getInsertId()
Definition: NavigationMenuItemDAO.inc.php:288
NavigationMenuItemDAO\newDataObject
newDataObject()
Definition: NavigationMenuItemDAO.inc.php:165
NavigationMenuItemDAO\getByMenuId
getByMenuId($menuId)
Definition: NavigationMenuItemDAO.inc.php:81
NavigationMenuItemDAO\updateObject
updateObject($navigationMenuItem)
Definition: NavigationMenuItemDAO.inc.php:226
NavigationMenuItemDAO\getSetting
getSetting($navigationMenuItemId, $name, $locale=null)
Definition: NavigationMenuItemDAO.inc.php:437
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
DAO\convertFromDB
convertFromDB($value, $type)
Definition: DAO.inc.php:341
NavigationMenuItemDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: NavigationMenuItemDAO.inc.php:157
NavigationMenuItemDAO\updateLocaleFields
updateLocaleFields($navigationMenuItem)
Definition: NavigationMenuItemDAO.inc.php:190
NavigationMenuItemDAO\getByType
getByType($type, $contextId=null)
Definition: NavigationMenuItemDAO.inc.php:133
NavigationMenuItemDAO\getByContextId
getByContextId($contextId)
Definition: NavigationMenuItemDAO.inc.php:67
NavigationMenuItemDAO
Operations for retrieving and modifying NavigationMenuItem objects. NMI = NavigationMenuItem.
Definition: NavigationMenuItemDAO.inc.php:20
NavigationMenuItemDAO\insertObject
insertObject($navigationMenuItem)
Definition: NavigationMenuItemDAO.inc.php:201
NavigationMenuItemDAO\installNodeSettings
installNodeSettings($contextId, $node, $navigationMenuId=null, $navigationMenuItemParentId=null, $seq=0, $checkChildren=false)
Definition: NavigationMenuItemDAO.inc.php:332
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
NavigationMenuItemDAO\getByPath
getByPath($contextId, $path)
Definition: NavigationMenuItemDAO.inc.php:47
NavigationMenuItemDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: NavigationMenuItemDAO.inc.php:150
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
XMLParser
Generic class for parsing an XML document into a data structure.
Definition: XMLParser.inc.php:28
NavigationMenuItemDAO\deleteObject
deleteObject($navigationMenuItem)
Definition: NavigationMenuItemDAO.inc.php:253
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
DAO\replace
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:243
NavigationMenuItem
Basic class describing a NavigationMenuItem.
Definition: NavigationMenuItem.inc.php:36
NavigationMenuItemDAO\deleteByContextId
deleteByContextId($contextId)
Definition: NavigationMenuItemDAO.inc.php:276
NavigationMenuItemDAO\_fromRow
_fromRow($row, $dataObject=false)
Definition: NavigationMenuItemDAO.inc.php:174
NavigationMenuItemDAO\getById
getById($navigationMenuItemId)
Definition: NavigationMenuItemDAO.inc.php:26
NavigationMenuItemDAO\deleteById
deleteById($navigationMenuItemId)
Definition: NavigationMenuItemDAO.inc.php:262
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
NavigationMenuItemDAO\installSettings
installSettings($contextId, $filename)
Definition: NavigationMenuItemDAO.inc.php:298
NavigationMenuItemDAO\deleteSettingsByLocale
deleteSettingsByLocale($locale)
Definition: NavigationMenuItemDAO.inc.php:471
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
NavigationMenuItemDAO\portStaticPage
portStaticPage($staticPage)
Definition: NavigationMenuItemDAO.inc.php:497
NavigationMenuItemDAO\updateSetting
updateSetting($navigationMenuItemId, $name, $value, $type=null, $isLocalized=false)
Definition: NavigationMenuItemDAO.inc.php:399