Open Monograph Press  3.3.0
NavigationMenuService.inc.php
1 <?php
2 
16 namespace APP\Services;
17 
19 define('NMI_TYPE_CATALOG', 'NMI_TYPE_CATALOG');
20 define('NMI_TYPE_SERIES', 'NMI_TYPE_SERIES');
21 define('NMI_TYPE_CATEGORY', 'NMI_TYPE_CATEGORY');
22 define('NMI_TYPE_NEW_RELEASE', 'NMI_TYPE_NEW_RELEASE');
23 
25 
29  public function __construct() {
30  \HookRegistry::register('NavigationMenus::itemTypes', array($this, 'getMenuItemTypesCallback'));
31  \HookRegistry::register('NavigationMenus::displaySettings', array($this, 'getDisplayStatusCallback'));
32  \HookRegistry::register('NavigationMenus::itemCustomTemplates', array($this, 'getMenuItemCustomEditTemplatesCallback'));
33  }
34 
40  public function getMenuItemTypesCallback($hookName, $args) {
41  $types =& $args[0];
42 
43  \AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_PKP_USER);
44 
45  $ompTypes = array(
46  NMI_TYPE_CATALOG => array(
47  'title' => __('navigation.catalog'),
48  'description' => __('navigation.navigationMenus.catalog.description'),
49  ),
50  NMI_TYPE_NEW_RELEASE => array(
51  'title' => __('navigation.navigationMenus.newRelease'),
52  'description' => __('navigation.navigationMenus.newRelease.description'),
53  ),
54  );
55 
56  $request = \Application::get()->getRequest();
57  $context = $request->getContext();
58  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
59 
60  $seriesDao = \DAORegistry::getDAO('SeriesDAO');
61  $series = $seriesDao->getByContextId($contextId);
62 
63  if ($series->count) {
64  $newArray = array(
65  NMI_TYPE_SERIES => array(
66  'title' => __('navigation.navigationMenus.series.generic'),
67  'description' => __('navigation.navigationMenus.series.description'),
68  ),
69  );
70 
71  $ompTypes = array_merge($ompTypes, $newArray);
72 
73  }
74 
75  $categoryDao = \DAORegistry::getDAO('CategoryDAO');
76  $categories = $categoryDao->getByParentId(null, $contextId);
77 
78  if ($categories->count) {
79  $newArray = array(
80  NMI_TYPE_CATEGORY => array(
81  'title' => __('navigation.navigationMenus.category.generic'),
82  'description' => __('navigation.navigationMenus.category.description'),
83  ),
84  );
85 
86  $ompTypes = array_merge($ompTypes, $newArray);
87  }
88 
89  $types = array_merge($types, $ompTypes);
90  }
91 
97  public function getMenuItemCustomEditTemplatesCallback($hookName, $args) {
98  $templates =& $args[0];
99 
100  \AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_PKP_USER);
101 
102  $ompTemplates = array(
103  NMI_TYPE_CATEGORY => array(
104  'template' => 'controllers/grid/navigationMenus/categoriesNMIType.tpl',
105  ),
106  NMI_TYPE_SERIES => array(
107  'template' => 'controllers/grid/navigationMenus/seriesNMIType.tpl',
108  ),
109  );
110 
111  $templates = array_merge($templates, $ompTemplates);
112  }
113 
119  function getDisplayStatusCallback($hookName, $args) {
120  $navigationMenuItem =& $args[0];
121 
122  $request = \Application::get()->getRequest();
123  $dispatcher = $request->getDispatcher();
124  $templateMgr = \TemplateManager::getManager(\Application::get()->getRequest());
125 
126  $isUserLoggedIn = \Validation::isLoggedIn();
127  $isUserLoggedInAs = \Validation::isLoggedInAs();
128  $context = $request->getContext();
129  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
130 
131  $this->transformNavMenuItemTitle($templateMgr, $navigationMenuItem);
132 
133  $menuItemType = $navigationMenuItem->getType();
134 
135  if ($navigationMenuItem->getIsDisplayed()) {
136  $menuItemType = $navigationMenuItem->getType();
137 
138  $relatedObject = null;
139 
140  switch ($menuItemType) {
141  case NMI_TYPE_SERIES:
142  $seriesId = $navigationMenuItem->getPath();
143 
144  $seriesDao = \DAORegistry::getDAO('SeriesDAO');
145  $relatedObject = $seriesDao->getById($seriesId, $contextId);
146 
147  break;
148  case NMI_TYPE_CATEGORY:
149  $categoryId = $navigationMenuItem->getPath();
150 
151  $categoryDao = \DAORegistry::getDAO('CategoryDAO');
152  $relatedObject = $categoryDao->getById($categoryId, $contextId);
153 
154  break;
155  }
156 
157  // Set the URL
158  switch ($menuItemType) {
159  case NMI_TYPE_CATALOG:
160  $navigationMenuItem->setUrl($dispatcher->url(
161  $request,
162  ROUTE_PAGE,
163  null,
164  'catalog',
165  null,
166  null
167  ));
168  break;
170  $navigationMenuItem->setUrl($dispatcher->url(
171  $request,
172  ROUTE_PAGE,
173  null,
174  'catalog',
175  'newReleases',
176  null
177  ));
178  break;
179  case NMI_TYPE_SERIES:
180  if ($relatedObject) {
181  $navigationMenuItem->setUrl($dispatcher->url(
182  $request,
183  ROUTE_PAGE,
184  null,
185  'catalog',
186  'series',
187  $relatedObject->getPath()
188  ));
189  } else {
190  $navigationMenuItem->setIsDisplayed(false);
191  }
192  break;
193  case NMI_TYPE_CATEGORY:
194  if ($relatedObject) {
195  $navigationMenuItem->setUrl($dispatcher->url(
196  $request,
197  ROUTE_PAGE,
198  null,
199  'catalog',
200  'category',
201  $relatedObject->getPath()
202  ));
203  } else {
204  $navigationMenuItem->setIsDisplayed(false);
205  }
206  break;
207  }
208  }
209  }
210 }
APP\Services\NavigationMenuService\getDisplayStatusCallback
getDisplayStatusCallback($hookName, $args)
Definition: NavigationMenuService.inc.php:119
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
Validation\isLoggedInAs
static isLoggedInAs()
Definition: Validation.inc.php:388
APP\Services\NavigationMenuService\getMenuItemTypesCallback
getMenuItemTypesCallback($hookName, $args)
Definition: NavigationMenuService.inc.php:40
Validation\isLoggedIn
static isLoggedIn()
Definition: Validation.inc.php:376
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
APP\Services\NavigationMenuService
Definition: NavigationMenuService.inc.php:24
APP\Services\NMI_TYPE_SERIES
const NMI_TYPE_SERIES
Definition: NavigationMenuService.inc.php:20
PKP\Services\PKPNavigationMenuService\transformNavMenuItemTitle
transformNavMenuItemTitle($templateMgr, &$navigationMenuItem)
Definition: PKPNavigationMenuService.inc.php:509
APP\Services\NavigationMenuService\__construct
__construct()
Definition: NavigationMenuService.inc.php:29
APP\Services\NavigationMenuService\getMenuItemCustomEditTemplatesCallback
getMenuItemCustomEditTemplatesCallback($hookName, $args)
Definition: NavigationMenuService.inc.php:97
APP\Services\NMI_TYPE_NEW_RELEASE
const NMI_TYPE_NEW_RELEASE
Definition: NavigationMenuService.inc.php:22
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
APP\Services
Definition: ContextService.inc.php:15
APP\Services\NMI_TYPE_CATALOG
const NMI_TYPE_CATALOG
Definition: NavigationMenuService.inc.php:19
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
PKP\Services\PKPNavigationMenuService
Definition: PKPNavigationMenuService.inc.php:20
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
APP\Services\NMI_TYPE_CATEGORY
const NMI_TYPE_CATEGORY
Definition: NavigationMenuService.inc.php:21