18 import(
'lib.pkp.classes.form.Form');
32 function __construct($contextId, $navigationMenuId =
null) {
33 $this->_navigationMenuId = !empty($navigationMenuId) ? (int) $navigationMenuId :
null;
34 $this->_contextId = $contextId;
36 parent::__construct(
'controllers/grid/navigationMenus/form/navigationMenuForm.tpl');
55 function fetch($request, $template =
null, $display =
false) {
59 if (empty($themePlugins)) {
63 $activeThemeNavigationAreas = array();
65 $activeThemeNavigationAreas = array(
'' => __(
'common.none'));
67 foreach ($themePlugins as $themePlugin) {
68 if ($themePlugin->isActive()) {
69 $areas = $themePlugin->getMenuAreas();
70 foreach ($areas as $area) {
71 $activeThemeNavigationAreas[$area] = $area;
76 $context = $request->getContext();
77 $contextId = CONTEXT_ID_NONE;
79 $contextId = $context->getId();
83 $navigationMenuItems = $navigationMenuItemDao->getByContextId($contextId)
85 $assignedItems = $navigationMenuItemDao->getByMenuId($this->_navigationMenuId)
87 $unassignedItems = array_udiff($navigationMenuItems, $assignedItems,
function($a, $b) {
88 return $a->getId() - $b->getId();
91 foreach ($unassignedItems as $unassignedItem) {
92 import(
'classes.core.Services');
93 Services::get(
'navigationMenu')->transformNavMenuItemTitle($templateMgr, $unassignedItem);
96 import(
'classes.core.Services');
97 $navigationMenuItemTypes =
Services::get(
'navigationMenu')->getMenuItemTypes();
99 $typeConditionalWarnings = array();
100 foreach ($navigationMenuItemTypes as $type => $settings) {
101 if (array_key_exists(
'conditionalWarning', $settings)) {
102 $typeConditionalWarnings[$type] = $settings[
'conditionalWarning'];
106 $templateMgr->assign(array(
107 'activeThemeNavigationAreas' => $activeThemeNavigationAreas,
108 'unassignedItems' => $unassignedItems,
109 'navigationMenuId' => $this->_navigationMenuId,
110 'title' => $this->
getData(
'title'),
111 'navigationMenuArea' => $this->
getData(
'areaName'),
112 'menuTree' => $this->
getData(
'menuTree'),
113 'navigationMenuItemTypes' => $navigationMenuItemTypes,
114 'navigationMenuItemTypeConditionalWarnings' =>
json_encode($typeConditionalWarnings),
117 return parent::fetch($request, $template, $display);
125 if (isset($this->_navigationMenuId) && $this->_navigationMenuId != 0) {
127 $navigationMenu = $navigationMenusDao->getById($this->_navigationMenuId);
129 if ($navigationMenu !=
null) {
130 import(
'classes.core.Services');
131 Services::get(
'navigationMenu')->getMenuTree($navigationMenu);
133 $this->_data = array(
134 'title' => $navigationMenu->getTitle(),
135 'navigationMenuId' => $navigationMenu->getId(),
136 'navigationMenuArea' => $navigationMenu->getAreaName(),
137 'menuTree' => $navigationMenu->menuTree,
140 $this->_navigationMenuId =
null;
149 $this->
readUserVars(array(
'title',
'navigationMenuId',
'areaName',
'menuTree'));
156 function execute(...$functionParams) {
157 parent::execute(...$functionParams);
162 if (isset($this->_navigationMenuId)) {
163 $navigationMenu = $navigationMenusDao->getById($this->_navigationMenuId);
166 if (!isset($navigationMenu)) {
167 $navigationMenu = $navigationMenusDao->newDataObject();
170 $navigationMenu->setContextId($this->_contextId);
171 $navigationMenu->setTitle($this->
getData(
'title'));
172 $navigationMenu->setAreaName($this->
getData(
'areaName'));
175 if ($navigationMenu->getId() !=
null) {
176 $navigationMenusDao->updateObject($navigationMenu);
178 $this->_navigationMenuId = $navigationMenusDao->insertObject($navigationMenu);
182 if ($this->_navigationMenuId) {
183 $navigationMenuItemAssignmentDao->deleteByMenuId($this->_navigationMenuId);
184 $menuTree = $this->
getData(
'menuTree');
185 if (!empty($menuTree)) {
186 foreach ($menuTree as $menuItemId => $assignmentData) {
188 $assignment->setMenuId($this->_navigationMenuId);
189 $assignment->setMenuItemId((
int) $menuItemId);
190 $assignment->setSequence((
int) $assignmentData[
'seq']);
191 if (isset($assignmentData[
'parentId'])) {
192 $assignment->setParentId((
int) $assignmentData[
'parentId']);
194 $navigationMenuItemAssignmentDao->insertObject($assignment);
204 function validate($callHooks =
true) {
207 $navigationMenu = $navigationMenuDao->getByTitle($this->_contextId, $this->
getData(
'title'));
208 if (isset($navigationMenu) && $navigationMenu->getId() != $this->_navigationMenuId) {
209 $this->
addError(
'path', __(
'manager.navigationMenus.form.duplicateTitle'));
212 if ($this->
getData(
'areaName') !=
'') {
213 $navigationMenusWithArea = $navigationMenuDao->getByArea($this->_contextId, $this->
getData(
'areaName'))->toArray();
214 if (count($navigationMenusWithArea) == 1 && $navigationMenusWithArea[0]->getId() != $this->_navigationMenuId) {
215 $this->
addError(
'areaName', __(
'manager.navigationMenus.form.menuAssigned'));
219 return parent::validate($callHooks);