Open Monograph Press  3.3.0
PKPNavigationMenuItemsForm.inc.php
1 <?php
2 
17 import('lib.pkp.classes.form.Form');
18 
22 
25 
31  function __construct($contextId, $navigationMenuItemId) {
32  $this->_contextId = $contextId;
33  $this->navigationMenuItemId = $navigationMenuItemId;
34 
35  parent::__construct('controllers/grid/navigationMenus/form/navigationMenuItemsForm.tpl');
36 
37  $this->addCheck(new FormValidatorPost($this));
38  $this->addCheck(new FormValidatorCSRF($this));
39  }
40 
41 
42  //
43  // Getters and setters.
44  //
45 
50  function getContextId() {
51  return $this->_contextId;
52  }
53 
54 
55  //
56  // Extended methods from Form.
57  //
58 
62  function fetch($request, $template = null, $display = false) {
63  AppLocale::requireComponents(LOCALE_COMPONENT_APP_MANAGER);
64 
65  $templateMgr = TemplateManager::getManager($request);
66  $templateMgr->assign('navigationMenuItemId', $this->navigationMenuItemId);
67 
68  $context = $request->getContext();
69  if ($context) $templateMgr->assign('allowedVariables', array(
70  'contactName' => __('plugins.generic.tinymce.variables.principalContactName', array('value' => $context->getData('contactName'))),
71  'contactEmail' => __('plugins.generic.tinymce.variables.principalContactEmail', array('value' => $context->getData('contactEmail'))),
72  'supportName' => __('plugins.generic.tinymce.variables.supportContactName', array('value' => $context->getData('supportName'))),
73  'supportPhone' => __('plugins.generic.tinymce.variables.supportContactPhone', array('value' => $context->getData('supportPhone'))),
74  'supportEmail' => __('plugins.generic.tinymce.variables.supportContactEmail', array('value' => $context->getData('supportEmail'))),
75  ));
76  import('classes.core.Services');
77  $types = Services::get('navigationMenu')->getMenuItemTypes();
78 
79  $typeTitles = array(0 => __('grid.navigationMenus.navigationMenu.selectType'));
80  foreach ($types as $type => $settings) {
81  $typeTitles[$type] = $settings['title'];
82  }
83 
84  $typeDescriptions = array();
85  foreach ($types as $type => $settings) {
86  $typeDescriptions[$type] = $settings['description'];
87  }
88 
89  $typeConditionalWarnings = array();
90  foreach ($types as $type => $settings) {
91  if (array_key_exists('conditionalWarning', $settings)) {
92  $typeConditionalWarnings[$type] = $settings['conditionalWarning'];
93  }
94  }
95 
96  $customTemplates = Services::get('navigationMenu')->getMenuItemCustomEditTemplates();
97 
98  $templateArray = array(
99  'navigationMenuItemTypeTitles' => $typeTitles,
100  'navigationMenuItemTypeDescriptions' => json_encode($typeDescriptions),
101  'navigationMenuItemTypeConditionalWarnings' => json_encode($typeConditionalWarnings),
102  'customTemplates' => $customTemplates,
103  );
104 
105  $templateMgr->assign($templateArray);
106 
107  return parent::fetch($request, $template, $display);
108  }
109 
113  function initData() {
114  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
115  $navigationMenuItem = $navigationMenuItemDao->getById($this->navigationMenuItemId);
116 
117  if ($navigationMenuItem) {
118  Services::get('navigationMenu')
119  ->setAllNMILocalisedTitles($navigationMenuItem);
120 
121  $formData = array(
122  'path' => $navigationMenuItem->getPath(),
123  'title' => $navigationMenuItem->getTitle(null),
124  'url' => $navigationMenuItem->getUrl(),
125  'menuItemType' => $navigationMenuItem->getType(),
126  );
127 
128  $this->_data = $formData;
129 
130  $this->setData('content', $navigationMenuItem->getContent(null)); // Localized
131  $this->setData('remoteUrl', $navigationMenuItem->getRemoteUrl(null)); // Localized
132  }
133  }
134 
138  function readInputData() {
139  $this->readUserVars(array('navigationMenuItemId', 'path', 'content', 'title', 'remoteUrl', 'menuItemType'));
140  }
141 
145  function getLocaleFieldNames() {
146  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
147  return $navigationMenuItemDao->getLocaleFieldNames();
148  }
149 
153  function execute(...$functionParams) {
154  parent::execute(...$functionParams);
155 
156  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
157 
158  $navigationMenuItem = $navigationMenuItemDao->getById($this->navigationMenuItemId);
159  if (!$navigationMenuItem) {
160  $navigationMenuItem = $navigationMenuItemDao->newDataObject();
161  $navigationMenuItem->setTitle($this->getData('title'), null);
162  } else {
163  $localizedTitlesFromDB = $navigationMenuItem->getTitle(null);
164 
165  Services::get('navigationMenu')
166  ->setAllNMILocalisedTitles($navigationMenuItem);
167 
168  $localizedTitles = $navigationMenuItem->getTitle(null);
169  $inputLocalisedTitles = $this->getData('title');
170  foreach ($localizedTitles as $locale => $title) {
171  if ($inputLocalisedTitles[$locale] != $title) {
172  if (!isset($inputLocalisedTitles[$locale]) || trim($inputLocalisedTitles[$locale]) == '') {
173  $navigationMenuItem->setTitle(null, $locale);
174  } else {
175  $navigationMenuItem->setTitle($inputLocalisedTitles[$locale], $locale);
176  }
177  } else {
178  if (!$localizedTitlesFromDB
179  || !array_key_exists($locale, $localizedTitlesFromDB)) {
180  $navigationMenuItem->setTitle(null, $locale);
181  }
182  }
183  }
184  }
185 
186  $navigationMenuItem->setPath($this->getData('path'));
187  $navigationMenuItem->setContent($this->getData('content'), null); // Localized
188  $navigationMenuItem->setContextId($this->getContextId());
189  $navigationMenuItem->setRemoteUrl($this->getData('remoteUrl'), null); // Localized
190  $navigationMenuItem->setType($this->getData('menuItemType'));
191 
192  // Update or insert navigation menu item
193  if ($navigationMenuItem->getId()) {
194  $navigationMenuItemDao->updateObject($navigationMenuItem);
195  } else {
196  $navigationMenuItemDao->insertObject($navigationMenuItem);
197  }
198 
199  $this->navigationMenuItemId = $navigationMenuItem->getId();
200 
201  return $navigationMenuItem->getId();
202  }
203 
208  function validate($callHooks = true) {
209  import('lib.pkp.classes.navigationMenu.NavigationMenuItem');
210  if ($this->getData('menuItemType') && $this->getData('menuItemType') != "") {
211  if ($this->getData('menuItemType') == NMI_TYPE_CUSTOM) {
212  if (!preg_match('/^[a-zA-Z0-9\/._-]+$/', $this->getData('path'))) {
213  $this->addError('path', __('manager.navigationMenus.form.pathRegEx'));
214  }
215 
216  $navigationMenuItemDao = DAORegistry::getDAO('NavigationMenuItemDAO'); /* @var $navigationMenuItemDao NavigationMenuItemDAO */
217 
218  $navigationMenuItem = $navigationMenuItemDao->getByPath($this->_contextId, $this->getData('path'));
219  if (isset($navigationMenuItem) && $navigationMenuItem->getId() != $this->navigationMenuItemId) {
220  $this->addError('path', __('manager.navigationMenus.form.duplicatePath'));
221  }
222  } elseif ($this->getData('menuItemType') == NMI_TYPE_REMOTE_URL) {
223  $remoteUrls = $this->getData('remoteUrl');
224  foreach ($remoteUrls as $remoteUrl) {
225  if(!filter_var($remoteUrl, FILTER_VALIDATE_URL)) {
226  $this->addError('remoteUrl', __('manager.navigationMenus.form.customUrlError'));
227  }
228  }
229  }
230  } else {
231  $this->addError('path', __('manager.navigationMenus.form.typeMissing'));
232  }
233 
234  return parent::validate($callHooks);
235  }
236 
237 }
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
PKPNavigationMenuItemsForm\$_contextId
$_contextId
Definition: PKPNavigationMenuItemsForm.inc.php:30
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPNavigationMenuItemsForm\$navigationMenuItemId
$navigationMenuItemId
Definition: PKPNavigationMenuItemsForm.inc.php:24
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
PKPNavigationMenuItemsForm\fetch
fetch($request, $template=null, $display=false)
Definition: PKPNavigationMenuItemsForm.inc.php:68
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
PKPNavigationMenuItemsForm\readInputData
readInputData()
Definition: PKPNavigationMenuItemsForm.inc.php:144
PKPNavigationMenuItemsForm\execute
execute(... $functionParams)
Definition: PKPNavigationMenuItemsForm.inc.php:159
PKPNavigationMenuItemsForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: PKPNavigationMenuItemsForm.inc.php:151
PKPNavigationMenuItemsForm\validate
validate($callHooks=true)
Definition: PKPNavigationMenuItemsForm.inc.php:214
PKPNavigationMenuItemsForm\initData
initData()
Definition: PKPNavigationMenuItemsForm.inc.php:119
PKPNavigationMenuItemsForm\__construct
__construct($contextId, $navigationMenuItemId)
Definition: PKPNavigationMenuItemsForm.inc.php:37
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
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
PKPNavigationMenuItemsForm
Form for managers to create/edit navigationMenuItems.
Definition: PKPNavigationMenuItemsForm.inc.php:19
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
PKPNavigationMenuItemsForm\getContextId
getContextId()
Definition: PKPNavigationMenuItemsForm.inc.php:56