Open Journal Systems  3.3.0
NavigationMenuForm.inc.php
1 <?php
2 
18 import('lib.pkp.classes.form.Form');
19 
20 class NavigationMenuForm extends Form {
22  var $_contextId;
23 
26 
32  function __construct($contextId, $navigationMenuId = null) {
33  $this->_navigationMenuId = !empty($navigationMenuId) ? (int) $navigationMenuId : null;
34  $this->_contextId = $contextId;
35 
36  parent::__construct('controllers/grid/navigationMenus/form/navigationMenuForm.tpl');
37 
38  $this->addCheck(new FormValidator($this, 'title', 'required', 'manager.navigationMenus.form.titleRequired'));
39 
40  $this->addCheck(new FormValidatorPost($this));
41  $this->addCheck(new FormValidatorCSRF($this));
42  }
43 
48  function getLocaleFieldNames() {
49  return null;
50  }
51 
55  function fetch($request, $template = null, $display = false) {
56  $templateMgr = TemplateManager::getManager($request);
57 
58  $themePlugins = PluginRegistry::getPlugins('themes');
59  if (empty($themePlugins)) {
60  $themePlugins = PluginRegistry::loadCategory('themes', true);
61  }
62 
63  $activeThemeNavigationAreas = array();
64 
65  $activeThemeNavigationAreas = array('' => __('common.none'));
66 
67  foreach ($themePlugins as $themePlugin) {
68  if ($themePlugin->isActive()) {
69  $areas = $themePlugin->getMenuAreas();
70  foreach ($areas as $area) {
71  $activeThemeNavigationAreas[$area] = $area;
72  }
73  }
74  }
75 
76  $context = $request->getContext();
77  $contextId = CONTEXT_ID_NONE;
78  if ($context) {
79  $contextId = $context->getId();
80  }
81 
82  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
83  $navigationMenuItems = $navigationMenuItemDao->getByContextId($contextId)
84  ->toArray();
85  $assignedItems = $navigationMenuItemDao->getByMenuId($this->_navigationMenuId)
86  ->toArray();
87  $unassignedItems = array_udiff($navigationMenuItems, $assignedItems, function($a, $b) {
88  return $a->getId() - $b->getId();
89  });
90 
91  foreach ($unassignedItems as $unassignedItem) {
92  import('classes.core.Services');
93  Services::get('navigationMenu')->transformNavMenuItemTitle($templateMgr, $unassignedItem);
94  }
95 
96  import('classes.core.Services');
97  $navigationMenuItemTypes = Services::get('navigationMenu')->getMenuItemTypes();
98 
99  $typeConditionalWarnings = array();
100  foreach ($navigationMenuItemTypes as $type => $settings) {
101  if (array_key_exists('conditionalWarning', $settings)) {
102  $typeConditionalWarnings[$type] = $settings['conditionalWarning'];
103  }
104  }
105 
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),
115  ));
116 
117  return parent::fetch($request, $template, $display);
118  }
119 
123  function initData() {
124 
125  if (isset($this->_navigationMenuId) && $this->_navigationMenuId != 0) {
126  $navigationMenusDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenusDao NavigationMenuDAO */
127  $navigationMenu = $navigationMenusDao->getById($this->_navigationMenuId);
128 
129  if ($navigationMenu != null) {
130  import('classes.core.Services');
131  Services::get('navigationMenu')->getMenuTree($navigationMenu);
132 
133  $this->_data = array(
134  'title' => $navigationMenu->getTitle(),
135  'navigationMenuId' => $navigationMenu->getId(),
136  'navigationMenuArea' => $navigationMenu->getAreaName(),
137  'menuTree' => $navigationMenu->menuTree,
138  );
139  } else {
140  $this->_navigationMenuId = null;
141  }
142  }
143  }
144 
148  function readInputData() {
149  $this->readUserVars(array('title', 'navigationMenuId', 'areaName', 'menuTree'));
150 
151  }
152 
156  function execute(...$functionParams) {
157  parent::execute(...$functionParams);
158 
159  $navigationMenusDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenusDao NavigationMenuDAO */
160  $navigationMenuItemAssignmentDao = DAORegistry::getDAO('NavigationMenuItemAssignmentDAO'); /* @var $navigationMenuItemAssignmentDao NavigationMenuItemAssignmentDAO */
161 
162  if (isset($this->_navigationMenuId)) {
163  $navigationMenu = $navigationMenusDao->getById($this->_navigationMenuId);
164  }
165 
166  if (!isset($navigationMenu)) {
167  $navigationMenu = $navigationMenusDao->newDataObject();
168  }
169 
170  $navigationMenu->setContextId($this->_contextId);
171  $navigationMenu->setTitle($this->getData('title'));
172  $navigationMenu->setAreaName($this->getData('areaName'));
173 
174  // Update or insert NavigationMenu
175  if ($navigationMenu->getId() != null) {
176  $navigationMenusDao->updateObject($navigationMenu);
177  } else {
178  $this->_navigationMenuId = $navigationMenusDao->insertObject($navigationMenu);
179  }
180 
181  // Update NavigationMenuItemAssignment
182  if ($this->_navigationMenuId) {
183  $navigationMenuItemAssignmentDao->deleteByMenuId($this->_navigationMenuId);
184  $menuTree = $this->getData('menuTree');
185  if (!empty($menuTree)) {
186  foreach ($menuTree as $menuItemId => $assignmentData) {
187  $assignment = new NavigationMenuItemAssignment();
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']);
193  }
194  $navigationMenuItemAssignmentDao->insertObject($assignment);
195  }
196  }
197  }
198  }
199 
204  function validate($callHooks = true) {
205  $navigationMenuDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenuDao NavigationMenuDAO */
206 
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'));
210  }
211 
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'));
216  }
217  }
218 
219  return parent::validate($callHooks);
220  }
221 }
PluginRegistry\getPlugins
static & getPlugins($category=null)
Definition: PluginRegistry.inc.php:30
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
Form\addError
addError($field, $message)
Definition: Form.inc.php:404
PluginRegistry\loadCategory
static loadCategory($category, $enabledOnly=false, $mainContextId=null)
Definition: PluginRegistry.inc.php:103
NavigationMenuForm
Form for manager to create/edit NavigationMenus.
Definition: NavigationMenuForm.inc.php:20
NavigationMenuForm\execute
execute(... $functionParams)
Definition: NavigationMenuForm.inc.php:162
NavigationMenuForm\fetch
fetch($request, $template=null, $display=false)
Definition: NavigationMenuForm.inc.php:61
NavigationMenuForm\__construct
__construct($contextId, $navigationMenuId=null)
Definition: NavigationMenuForm.inc.php:38
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
NavigationMenuForm\initData
initData()
Definition: NavigationMenuForm.inc.php:129
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
NavigationMenuForm\readInputData
readInputData()
Definition: NavigationMenuForm.inc.php:154
NavigationMenuItemAssignment
Basic class describing a NavigationMenuItemAssignment. Each assignment describes a NavigationMenuItem...
Definition: NavigationMenuItemAssignment.inc.php:19
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
NavigationMenuForm\validate
validate($callHooks=true)
Definition: NavigationMenuForm.inc.php:210
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
NavigationMenuForm\$_navigationMenuId
$_navigationMenuId
Definition: NavigationMenuForm.inc.php:31
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
GuzzleHttp\json_encode
json_encode($value, $options=0, $depth=512)
Definition: guzzlehttp/guzzle/src/functions.php:324
NavigationMenuForm\$_contextId
$_contextId
Definition: NavigationMenuForm.inc.php:25
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
NavigationMenuForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: NavigationMenuForm.inc.php:54