17 import(
'lib.pkp.classes.form.Form');
32 $this->_contextId = $contextId;
35 parent::__construct(
'controllers/grid/navigationMenus/form/navigationMenuItemsForm.tpl');
62 function fetch($request, $template =
null, $display =
false) {
66 $templateMgr->assign(
'navigationMenuItemId', $this->navigationMenuItemId);
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'))),
76 import(
'classes.core.Services');
79 $typeTitles = array(0 => __(
'grid.navigationMenus.navigationMenu.selectType'));
80 foreach ($types as $type => $settings) {
81 $typeTitles[$type] = $settings[
'title'];
84 $typeDescriptions = array();
85 foreach ($types as $type => $settings) {
86 $typeDescriptions[$type] = $settings[
'description'];
89 $typeConditionalWarnings = array();
90 foreach ($types as $type => $settings) {
91 if (array_key_exists(
'conditionalWarning', $settings)) {
92 $typeConditionalWarnings[$type] = $settings[
'conditionalWarning'];
96 $customTemplates =
Services::get(
'navigationMenu')->getMenuItemCustomEditTemplates();
98 $templateArray = array(
99 'navigationMenuItemTypeTitles' => $typeTitles,
100 'navigationMenuItemTypeDescriptions' =>
json_encode($typeDescriptions),
101 'navigationMenuItemTypeConditionalWarnings' =>
json_encode($typeConditionalWarnings),
102 'customTemplates' => $customTemplates,
105 $templateMgr->assign($templateArray);
107 return parent::fetch($request, $template, $display);
115 $navigationMenuItem = $navigationMenuItemDao->getById($this->navigationMenuItemId);
117 if ($navigationMenuItem) {
119 ->setAllNMILocalisedTitles($navigationMenuItem);
122 'path' => $navigationMenuItem->getPath(),
123 'title' => $navigationMenuItem->getTitle(
null),
124 'url' => $navigationMenuItem->getUrl(),
125 'menuItemType' => $navigationMenuItem->getType(),
128 $this->_data = $formData;
130 $this->
setData(
'content', $navigationMenuItem->getContent(
null));
131 $this->
setData(
'remoteUrl', $navigationMenuItem->getRemoteUrl(
null));
139 $this->
readUserVars(array(
'navigationMenuItemId',
'path',
'content',
'title',
'remoteUrl',
'menuItemType'));
147 return $navigationMenuItemDao->getLocaleFieldNames();
153 function execute(...$functionParams) {
154 parent::execute(...$functionParams);
158 $navigationMenuItem = $navigationMenuItemDao->getById($this->navigationMenuItemId);
159 if (!$navigationMenuItem) {
160 $navigationMenuItem = $navigationMenuItemDao->newDataObject();
161 $navigationMenuItem->setTitle($this->
getData(
'title'),
null);
163 $localizedTitlesFromDB = $navigationMenuItem->getTitle(
null);
166 ->setAllNMILocalisedTitles($navigationMenuItem);
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);
175 $navigationMenuItem->setTitle($inputLocalisedTitles[$locale], $locale);
178 if (!$localizedTitlesFromDB
179 || !array_key_exists($locale, $localizedTitlesFromDB)) {
180 $navigationMenuItem->setTitle(
null, $locale);
186 $navigationMenuItem->setPath($this->
getData(
'path'));
187 $navigationMenuItem->setContent($this->
getData(
'content'),
null);
188 $navigationMenuItem->setContextId($this->
getContextId());
189 $navigationMenuItem->setRemoteUrl($this->
getData(
'remoteUrl'),
null);
190 $navigationMenuItem->setType($this->
getData(
'menuItemType'));
193 if ($navigationMenuItem->getId()) {
194 $navigationMenuItemDao->updateObject($navigationMenuItem);
196 $navigationMenuItemDao->insertObject($navigationMenuItem);
199 $this->navigationMenuItemId = $navigationMenuItem->getId();
201 return $navigationMenuItem->getId();
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'));
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'));
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'));
231 $this->
addError(
'path', __(
'manager.navigationMenus.form.typeMissing'));
234 return parent::validate($callHooks);