Open Monograph Press  3.3.0
NavigationMenuDAO.inc.php
1 <?php
2 
18 import('lib.pkp.classes.navigationMenu.NavigationMenu');
19 
20 class NavigationMenuDAO extends DAO {
25  function newDataObject() {
26  return new NavigationMenu();
27  }
28 
35  function getById($navigationMenuId, $contextId = null) {
36  $params = array((int) $navigationMenuId);
37  if ($contextId !== null) $params[] = (int) $contextId;
38  $result = $this->retrieve(
39  'SELECT * FROM navigation_menus WHERE navigation_menu_id = ?' .
40  ($contextId !== null?' AND context_id = ?':''),
41  $params
42  );
43 
44  $returner = null;
45  if ($result->RecordCount() != 0) {
46  $returner = $this->_fromRow($result->GetRowAssoc(false));
47  }
48  $result->Close();
49  return $returner;
50  }
51 
57  function getByContextId($contextId) {
58  $params = array((int) $contextId);
59  $result = $this->retrieve(
60  'SELECT * FROM navigation_menus WHERE context_id = ?',
61  $params
62  );
63 
64  return new DAOResultFactory($result, $this, '_fromRow');
65  }
66 
73  function getByArea($contextId, $areaName) {
74  $params = array($areaName);
75  $params[] = (int) $contextId;
76  $result = $this->retrieve(
77  'SELECT * FROM navigation_menus WHERE area_name = ? and context_id = ?',
78  $params
79  );
80 
81  return new DAOResultFactory($result, $this, '_fromRow');
82  }
83 
90  function getByTitle($contextId, $title) {
91  $params = array((int) $contextId);
92  $params[] = $title;
93  $result = $this->retrieve(
94  'SELECT * FROM navigation_menus WHERE context_id = ? and title = ?',
95  $params
96  );
97 
98  $returner = null;
99  if ($result->RecordCount() != 0) {
100  $returner = $this->_fromRow($result->GetRowAssoc(false));
101  }
102  $result->Close();
103  return $returner;
104  }
105 
113  function navigationMenuExistsByTitle($contextId, $title) {
114  $result = $this->retrieve(
115  'SELECT COUNT(*)
116  FROM navigation_menus
117  WHERE title = ? AND
118  context_id = ?',
119  array(
120  $title,
121  (int) $contextId
122  )
123  );
124  $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
125 
126  $result->Close();
127  return $returner;
128  }
129 
134  function getLocaleFieldNames() {
135  return array();
136  }
137 
143  function _fromRow($row) {
144  $navigationMenu = $this->newDataObject();
145  $navigationMenu->setId($row['navigation_menu_id']);
146  $navigationMenu->setTitle($row['title']);
147  $navigationMenu->setAreaName($row['area_name']);
148  $navigationMenu->setContextId($row['context_id']);
149 
150  return $navigationMenu;
151  }
152 
158  function insertObject($navigationMenu) {
159  $this->update(
160  'INSERT INTO navigation_menus
161  (title, area_name, context_id)
162  VALUES
163  (?, ?, ?)',
164  array(
165  $navigationMenu->getTitle(),
166  $navigationMenu->getAreaName(),
167  (int) $navigationMenu->getContextId(),
168  )
169  );
170  $navigationMenu->setId($this->getInsertId());
171 
172  return $navigationMenu->getId();
173  }
174 
180  function updateObject($navigationMenu) {
181  $returner = $this->update(
182  'UPDATE navigation_menus
183  SET title = ?,
184  area_name = ?,
185  context_id = ?
186  WHERE navigation_menu_id = ?',
187  array(
188  $navigationMenu->getTitle(),
189  $navigationMenu->getAreaName(),
190  (int) $navigationMenu->getContextId(),
191  (int) $navigationMenu->getId(),
192  )
193  );
194 
195  $this->unCache($navigationMenu->getId());
196 
197  return $returner;
198  }
199 
205  function deleteObject($navigationMenu) {
206  return $this->deleteById($navigationMenu->getId());
207  }
208 
213  function deleteById($navigationMenuId) {
214  $this->unCache($navigationMenuId);
215 
216  $this->update('DELETE FROM navigation_menus WHERE navigation_menu_id = ?', (int) $navigationMenuId);
217 
218  $navigationMenuItemAssignmentDao = DAORegistry::getDAO('NavigationMenuItemAssignmentDAO'); /* @var $navigationMenuItemAssignmentDao NavigationMenuItemAssignmentDAO */
219  $navigationMenuItemAssignmentDao->deleteByMenuId($navigationMenuId);
220  }
221 
226  function deleteByContextId($contextId) {
227  $navigationMenus = $this->getByContextId($contextId);
228 
229  while ($navigationMenu = $navigationMenus->next()) {
230  $this->deleteObject($navigationMenu);
231  }
232  }
233 
238  function getInsertId() {
239  return $this->_getInsertId('navigation_menus', 'navigation_menu_id');
240  }
241 
248  function installSettings($contextId, $filename) {
249  $xmlParser = new XMLParser();
250  $tree = $xmlParser->parse($filename);
251 
252  if ($contextId == CONTEXT_ID_NONE) {
253  $siteDao = DAORegistry::getDAO('SiteDAO'); /* @var $siteDao SiteDAO */
254  $site = $siteDao->getSite();
255  }
256 
257  if (!$tree) return false;
258 
259  foreach ($tree->getChildren() as $navigationMenuNode) {
260  $site = $navigationMenuNode->getAttribute('site');
261  if ($contextId == CONTEXT_ID_NONE && !$site) {
262  continue;
263  }
264 
265  if ($navigationMenuNode->name == 'navigationMenu') {
266  $title = $navigationMenuNode->getAttribute('title');
267  $area = $navigationMenuNode->getAttribute('area');
268 
269  $navigationMenu = null;
270 
271  // Check if the given area has a NM attached.
272  // If it does the NM is not being processed and a warning is being thrown
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.");
276  continue;
277  }
278 
279  if ($this->navigationMenuExistsByTitle($contextId, $title)) {
280  $navigationMenu = $this->getByTitle($contextId, $title);
281  $navigationMenu->setAreaName($area);
282 
283  // update the navigationMenu into the DB
284  $navigationMenuId = $this->updateObject($navigationMenu);
285  } else {
286  $navigationMenu = $this->newDataObject();
287  $navigationMenu->setTitle($title);
288  $navigationMenu->setContextId($contextId);
289  $navigationMenu->setAreaName($area);
290 
291  // insert the navigationMenu into the DB
292  $navigationMenuId = $this->insertObject($navigationMenu);
293  $navigationMenu->setId($navigationMenuId);
294  }
295 
296  $seq = 0;
297  foreach ($navigationMenuNode->getChildren() as $navigationMenuItemFirstLevelNode) {
298  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
299  $navigationMenuItemDao->installNodeSettings($contextId, $navigationMenuItemFirstLevelNode, $navigationMenu->getId(), null, $seq, true);
300 
301  $seq++;
302  }
303  } elseif ($navigationMenuNode->name == 'navigationMenuItem') {
304  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
305  $navigationMenuItemDao->installNodeSettings($contextId, $navigationMenuNode, null, null, 0, true);
306  }
307  }
308 
309  return true;
310  }
311 
316  function unCache($id){
317  $cache = $this->getCache($id);
318  if ($cache) $cache->flush();
319  }
320 
326  function getCache($id) {
327  static $navigationMenuCache;
328  if (!isset($navigationMenuCache)) {
329  $navigationMenuCache = array();
330  }
331  if (!isset($navigationMenuCache[$id])) {
332  $cacheManager = \CacheManager::getManager();
333  $navigationMenuCache[$id] = $cacheManager->getCache(
334  'navigationMenu', $id,
335  array($this, '_cacheMiss')
336  );
337  }
338  return $navigationMenuCache[$id];
339  }
340 
347  function _cacheMiss($cache, $id) {
348  $navigationMenuDao = \DAORegistry::getDAO('NavigationMenuDAO');
349  $navigationMenu = $navigationMenuDao->GetById($cache->getCacheId());
350  import('classes.core.Services');
351  Services::get('navigationMenu')->getMenuTree($navigationMenu);
352 
353  return $navigationMenu;
354  }
355 }
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
NavigationMenuDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: NavigationMenuDAO.inc.php:134
NavigationMenuDAO\getCache
getCache($id)
Definition: NavigationMenuDAO.inc.php:326
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
NavigationMenuDAO\deleteById
deleteById($navigationMenuId)
Definition: NavigationMenuDAO.inc.php:213
NavigationMenuDAO\deleteObject
deleteObject($navigationMenu)
Definition: NavigationMenuDAO.inc.php:205
NavigationMenuDAO\installSettings
installSettings($contextId, $filename)
Definition: NavigationMenuDAO.inc.php:248
NavigationMenuDAO\newDataObject
newDataObject()
Definition: NavigationMenuDAO.inc.php:25
NavigationMenuDAO\insertObject
insertObject($navigationMenu)
Definition: NavigationMenuDAO.inc.php:158
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
NavigationMenuDAO\getInsertId
getInsertId()
Definition: NavigationMenuDAO.inc.php:238
NavigationMenuDAO\getById
getById($navigationMenuId, $contextId=null)
Definition: NavigationMenuDAO.inc.php:35
NavigationMenuDAO\getByArea
getByArea($contextId, $areaName)
Definition: NavigationMenuDAO.inc.php:73
NavigationMenuDAO\unCache
unCache($id)
Definition: NavigationMenuDAO.inc.php:316
NavigationMenuDAO
Operations for retrieving and modifying NavigationMenu objects.
Definition: NavigationMenuDAO.inc.php:20
NavigationMenuDAO\updateObject
updateObject($navigationMenu)
Definition: NavigationMenuDAO.inc.php:180
CacheManager\getManager
static getManager()
Definition: CacheManager.inc.php:27
NavigationMenuDAO\_cacheMiss
_cacheMiss($cache, $id)
Definition: NavigationMenuDAO.inc.php:347
NavigationMenu
Class describing a NavigationMenu.
Definition: NavigationMenu.inc.php:17
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
NavigationMenuDAO\deleteByContextId
deleteByContextId($contextId)
Definition: NavigationMenuDAO.inc.php:226
NavigationMenuDAO\getByTitle
getByTitle($contextId, $title)
Definition: NavigationMenuDAO.inc.php:90
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
NavigationMenuDAO\navigationMenuExistsByTitle
navigationMenuExistsByTitle($contextId, $title)
Definition: NavigationMenuDAO.inc.php:113
NavigationMenuDAO\getByContextId
getByContextId($contextId)
Definition: NavigationMenuDAO.inc.php:57
NavigationMenuDAO\_fromRow
_fromRow($row)
Definition: NavigationMenuDAO.inc.php:143
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49