Open Journal Systems  3.3.0
IssueForm.inc.php
1 <?php
2 
17 import('lib.pkp.classes.form.Form');
18 import('lib.pkp.classes.linkAction.LinkAction');
19 import('lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
20 
21 import('classes.issue.Issue'); // Bring in constants
22 
23 class IssueForm extends Form {
25  var $issue;
26 
31  function __construct($issue = null) {
32  parent::__construct('controllers/grid/issues/form/issueForm.tpl');
33 
34  $form = $this;
35  $this->addCheck(new FormValidatorRegExp($this, 'volume', 'optional', 'editor.issues.volumeRequired', '/^[0-9]+$/i'));
36  $this->addCheck(new FormValidatorCustom($this, 'showVolume', 'optional', 'editor.issues.volumeRequired', function($showVolume) use ($form) {
37  return !$showVolume || $form->getData('volume') ? true : false;
38  }));
39  $this->addCheck(new FormValidatorCustom($this, 'showNumber', 'optional', 'editor.issues.numberRequired', function($showNumber) use ($form) {
40  return !$showNumber || $form->getData('number') ? true : false;
41  }));
42  $this->addCheck(new FormValidatorCustom($this, 'showYear', 'optional', 'editor.issues.yearRequired', function($showYear) use ($form) {
43  return !$showYear || $form->getData('year') ? true : false;
44  }));
45  $this->addCheck(new FormValidatorCustom($this, 'showTitle', 'optional', 'editor.issues.titleRequired', function($showTitle) use ($form) {
46  return !$showTitle || implode('', $form->getData('title'))!='' ? true : false;
47  }));
48  $this->addCheck(new FormValidatorRegExp($this, 'urlPath', 'optional', 'validator.alpha_dash', '/^[-_a-z0-9]*$/'));
49  $this->addCheck(new FormValidatorPost($this));
50  $this->addCheck(new FormValidatorCSRF($this));
51  $this->issue = $issue;
52  }
53 
58  function getLocaleFieldNames() {
59  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
60  return $issueDao->getLocaleFieldNames();
61  }
62 
66  function fetch($request, $template = null, $display = false) {
67  if ($this->issue) {
68  $templateMgr = TemplateManager::getManager($request);
69  $templateMgr->assign(array(
70  'issue' => $this->issue,
71  'issueId' => $this->issue->getId(),
72  ));
73 
74  // Cover image delete link action
75  if ($coverImage = $this->issue->getCoverImage(AppLocale::getLocale())) $templateMgr->assign(
76  'deleteCoverImageLinkAction',
77  new LinkAction(
78  'deleteCoverImage',
80  $request->getSession(),
81  __('common.confirmDelete'), null,
82  $request->getRouter()->url(
83  $request, null, null, 'deleteCoverImage', null, array(
84  'coverImage' => $coverImage,
85  'issueId' => $this->issue->getId(),
86  )
87  ),
88  'modal_delete'
89  ),
90  __('common.delete'),
91  null
92  )
93  );
94  }
95 
96  return parent::fetch($request, $template, $display);
97  }
98 
102  function validate($callHooks = true) {
103  if ($temporaryFileId = $this->getData('temporaryFileId')) {
104  $request = Application::get()->getRequest();
105  $user = $request->getUser();
106  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
107  $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
108 
109  import('classes.file.PublicFileManager');
110  $publicFileManager = new PublicFileManager();
111  if (!$publicFileManager->getImageExtension($temporaryFile->getFileType())) {
112  $this->addError('coverImage', __('editor.issues.invalidCoverImageFormat'));
113  }
114  }
115 
116  // Check if urlPath is already being used
117  if ($this->getData('urlPath')) {
118  if (ctype_digit((string) $this->getData('urlPath'))) {
119  $this->addError('urlPath', __('publication.urlPath.numberInvalid'));
120  $this->addErrorField('urlPath');
121  } else {
122  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
123  $issue = $issueDao->getByBestId($this->getData('urlPath'), Application::get()->getRequest()->getContext()->getId());
124  if ($issue &&
125  (!$this->issue || $this->issue->getId() !== $issue->getId())
126  ) {
127  $this->addError('urlPath', __('publication.urlPath.duplicate'));
128  $this->addErrorField('urlPath');
129  }
130  }
131  }
132 
133  return parent::validate($callHooks);
134  }
135 
139  function initData() {
140  if (isset($this->issue)) {
141  $locale = AppLocale::getLocale();
142  $this->_data = array(
143  'title' => $this->issue->getTitle(null), // Localized
144  'volume' => $this->issue->getVolume(),
145  'number' => $this->issue->getNumber(),
146  'year' => $this->issue->getYear(),
147  'datePublished' => $this->issue->getDatePublished(),
148  'description' => $this->issue->getDescription(null), // Localized
149  'showVolume' => $this->issue->getShowVolume(),
150  'showNumber' => $this->issue->getShowNumber(),
151  'showYear' => $this->issue->getShowYear(),
152  'showTitle' => $this->issue->getShowTitle(),
153  'coverImage' => $this->issue->getCoverImage($locale),
154  'coverImageAltText' => $this->issue->getCoverImageAltText($locale),
155  'urlPath' => $this->issue->getData('urlPath'),
156  );
157  parent::initData();
158  } else {
159  $this->_data = array(
160  'showVolume' => 1,
161  'showNumber' => 1,
162  'showYear' => 1,
163  'showTitle' => 1,
164  );
165  }
166  }
167 
171  function readInputData() {
172  $this->readUserVars(array(
173  'title',
174  'volume',
175  'number',
176  'year',
177  'description',
178  'showVolume',
179  'showNumber',
180  'showYear',
181  'showTitle',
182  'temporaryFileId',
183  'coverImageAltText',
184  'datePublished',
185  'urlPath',
186  ));
187 
188  $form = $this;
189  $this->addCheck(new FormValidatorCustom($this, 'issueForm', 'required', 'editor.issues.issueIdentificationRequired', function() use ($form) {
190  return $form->getData('showVolume') || $form->getData('showNumber') || $form->getData('showYear') || $form->getData('showTitle');
191  }));
192  }
193 
197  function execute(...$functionArgs) {
198  parent::execute(...$functionArgs);
199 
200  $request = Application::get()->getRequest();
201  $journal = $request->getJournal();
202 
203  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
204  if ($this->issue) {
205  $isNewIssue = false;
207  } else {
208  $issue = $issueDao->newDataObject();
209  switch ($journal->getData('publishingMode')) {
210  case PUBLISHING_MODE_SUBSCRIPTION:
211  case PUBLISHING_MODE_NONE:
212  $issue->setAccessStatus(ISSUE_ACCESS_SUBSCRIPTION);
213  break;
214  case PUBLISHING_MODE_OPEN:
215  default:
216  $issue->setAccessStatus(ISSUE_ACCESS_OPEN);
217  break;
218  }
219  $isNewIssue = true;
220  }
221  $volume = $this->getData('volume');
222  $number = $this->getData('number');
223  $year = $this->getData('year');
224 
225  $issue->setJournalId($journal->getId());
226  $issue->setTitle($this->getData('title'), null); // Localized
227  $issue->setVolume(empty($volume) ? null : $volume);
228  $issue->setNumber(empty($number) ? null : $number);
229  $issue->setYear(empty($year) ? null : $year);
230  if (!$isNewIssue) {
231  $issue->setDatePublished($this->getData('datePublished'));
232  }
233  $issue->setDescription($this->getData('description'), null); // Localized
234  $issue->setShowVolume($this->getData('showVolume'));
235  $issue->setShowNumber($this->getData('showNumber'));
236  $issue->setShowYear($this->getData('showYear'));
237  $issue->setShowTitle($this->getData('showTitle'));
238  $issue->setData('urlPath', $this->getData('urlPath'));
239 
240  // If it is a new issue, first insert it, then update the cover
241  // because the cover name needs an issue id.
242  if ($isNewIssue) {
243  $issue->setPublished(0);
244  $issue->setCurrent(0);
245  $issueDao->insertObject($issue);
246  }
247 
248  $locale = AppLocale::getLocale();
249  // Copy an uploaded cover file for the issue, if there is one.
250  if ($temporaryFileId = $this->getData('temporaryFileId')) {
251  $user = $request->getUser();
252  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
253  $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
254 
255  import('classes.file.PublicFileManager');
256  $publicFileManager = new PublicFileManager();
257  $newFileName = 'cover_issue_' . $issue->getId() . '_' . $locale . $publicFileManager->getImageExtension($temporaryFile->getFileType());
258  $journal = $request->getJournal();
259  $publicFileManager->copyContextFile($journal->getId(), $temporaryFile->getFilePath(), $newFileName);
260  $issue->setCoverImage($newFileName, $locale);
261  $issueDao->updateObject($issue);
262  }
263 
264  $issue->setCoverImageAltText($this->getData('coverImageAltText'), $locale);
265 
266  HookRegistry::call('issueform::execute', array($this, $issue));
267 
268  $issueDao->updateObject($issue);
269  }
270 }
271 
272 
IssueForm\__construct
__construct($issue=null)
Definition: IssueForm.inc.php:34
IssueForm\$issue
$issue
Definition: IssueForm.inc.php:28
IssueForm\execute
execute(... $functionArgs)
Definition: IssueForm.inc.php:200
RemoteActionConfirmationModal
Class defining a simple confirmation modal with a remote action and ok/cancel buttons.
Definition: RemoteActionConfirmationModal.inc.php:18
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
IssueForm\readInputData
readInputData()
Definition: IssueForm.inc.php:174
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
Http\Client\Exception\getRequest
getRequest()
Definition: RequestAwareTrait.php:25
Form\addError
addError($field, $message)
Definition: Form.inc.php:404
PublicFileManager
Wrapper class for uploading files to a site/journal's public directory.
Definition: PublicFileManager.inc.php:18
IssueForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: IssueForm.inc.php:61
IssueForm\fetch
fetch($request, $template=null, $display=false)
Definition: IssueForm.inc.php:69
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
FormValidatorRegExp
Form validation check using a regular expression.
Definition: FormValidatorRegExp.inc.php:18
IssueForm\validate
validate($callHooks=true)
Definition: IssueForm.inc.php:105
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
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
Form\addErrorField
addErrorField($field)
Definition: Form.inc.php:412
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
IssueForm
Form to create or edit an issue.
Definition: IssueForm.inc.php:23
IssueForm\initData
initData()
Definition: IssueForm.inc.php:142