Open Monograph Press  3.3.0
PublicationDateForm.inc.php
1 <?php
2 
16 import('lib.pkp.classes.form.Form');
17 
18 class PublicationDateForm extends Form {
21 
24 
27 
31  public function __construct($submission, $publication, $publicationDate) {
32  parent::__construct('controllers/grid/catalogEntry/form/pubDateForm.tpl');
33  $this->setSubmission($submission);
34  $this->setPublication($publication);
35  $this->setPublicationDate($publicationDate);
36 
37  // Validation checks for this form
38  $form = $this;
39  $this->addCheck(new FormValidator($this, 'role', 'required', 'grid.catalogEntry.roleRequired'));
40  $this->addCheck(new FormValidator($this, 'dateFormat', 'required', 'grid.catalogEntry.dateFormatRequired'));
41 
42  $this->addCheck(new FormValidatorCustom(
43  $this, 'date', 'required', 'grid.catalogEntry.dateRequired',
44  function($date) use ($form) {
45  $onixCodelistItemDao = DAORegistry::getDAO('ONIXCodelistItemDAO'); /* @var $onixCodelistItemDao ONIXCodelistItemDAO */
46  $dateFormat = $form->getData('dateFormat');
47  if (!$dateFormat) return false;
48  $dateFormats = $onixCodelistItemDao->getCodes('List55');
49  $format = $dateFormats[$dateFormat];
50  if (stristr($format, 'string') && $date != '') return true;
51  $format = trim(preg_replace('/\s*\(.*?\)/i', '', $format));
52  if (count(str_split($date)) == count(str_split($format))) return true;
53  return false;
54  }
55  ));
56 
57  $this->addCheck(new FormValidator($this, 'representationId', 'required', 'grid.catalogEntry.publicationFormatRequired'));
58  $this->addCheck(new FormValidatorPost($this));
59  $this->addCheck(new FormValidatorCSRF($this));
60  }
61 
62  //
63  // Getters and Setters
64  //
69  public function getPublicationDate() {
71  }
72 
77  public function setPublicationDate($publicationDate) {
78  $this->_publicationDate = $publicationDate;
79  }
80 
85  public function getSubmission() {
86  return $this->_submission;
87  }
88 
93  public function setSubmission($submission) {
94  $this->_submission = $submission;
95  }
96 
101  public function getPublication() {
102  return $this->_publication;
103  }
104 
109  public function setPublication($publication) {
110  $this->_publication = $publication;
111  }
112 
113 
114  //
115  // Overridden template methods
116  //
120  public function initData() {
121  $date = $this->getPublicationDate();
122 
123  if ($date) {
124  $this->_data = array(
125  'publicationDateId' => $date->getId(),
126  'role' => $date->getRole(),
127  'dateFormat' => $date->getDateFormat(),
128  'date' => $date->getDate(),
129  );
130  }
131  }
132 
136  public function fetch($request, $template = null, $display = false) {
137  $templateMgr = TemplateManager::getManager($request);
138  $submission = $this->getSubmission();
139  $templateMgr->assign('submissionId', $submission->getId());
140  $templateMgr->assign('publicationId', $this->getPublication()->getId());
141  $publicationDate = $this->getPublicationDate();
142 
143  if ($publicationDate) {
144  $templateMgr->assign('publicationDateId', $publicationDate->getId());
145  $templateMgr->assign('role', $publicationDate->getRole());
146  $templateMgr->assign('dateFormat', $publicationDate->getDateFormat());
147  $templateMgr->assign('date', $publicationDate->getDate());
148  $representationId = $publicationDate->getPublicationFormatId();
149  } else { // loading a blank form
150  $representationId = (int) $request->getUserVar('representationId');
151  $templateMgr->assign('dateFormat', '20'); // YYYYMMDD Onix code as a default
152  }
153 
154  $publicationFormatDao = DAORegistry::getDAO('PublicationFormatDAO'); /* @var $publicationFormatDao PublicationFormatDAO */
155  $publicationFormat = $publicationFormatDao->getById($representationId, $this->getPublication()->getId());
156 
157  if ($publicationFormat) { // the format exists for this submission
158  $templateMgr->assign('representationId', $representationId);
159  $publicationDates = $publicationFormat->getPublicationDates();
160  $assignedRoles = array_keys($publicationDates->toAssociativeArray('role')); // currently assigned roles
161  if ($publicationDate) $assignedRoles = array_diff($assignedRoles, array($publicationDate->getRole())); // allow existing roles to keep their value
162  $onixCodelistItemDao = DAORegistry::getDAO('ONIXCodelistItemDAO'); /* @var $onixCodelistItemDao ONIXCodelistItemDAO */
163  $roles = $onixCodelistItemDao->getCodes('List163', $assignedRoles); // ONIX list for these
164  $templateMgr->assign('publicationDateRoles', $roles);
165 
166  //load our date formats
167  $dateFormats = $onixCodelistItemDao->getCodes('List55');
168  $templateMgr->assign('publicationDateFormats', $dateFormats);
169  } else {
170  fatalError('Format not in authorized submission');
171  }
172 
173  return parent::fetch($request, $template, $display);
174  }
175 
180  public function readInputData() {
181  $this->readUserVars(array(
182  'publicationDateId',
183  'representationId',
184  'role',
185  'dateFormat',
186  'date',
187  ));
188  }
189 
193  public function execute(...$functionArgs) {
194  parent::execute(...$functionArgs);
195  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
196  $publicationFormatDao = DAORegistry::getDAO('PublicationFormatDAO'); /* @var $publicationFormatDao PublicationFormatDAO */
197 
198  $submission = $this->getSubmission();
199  $publicationDate = $this->getPublicationDate();
200  $publicationFormat = $publicationFormatDao->getById($this->getData('representationId'), $this->getPublication()->getId());
201 
202  if (!$publicationDate) {
203  // this is a new publication date for this published submission
204  $publicationDate = $publicationDateDao->newDataObject();
205  $existingFormat = false;
206  if ($publicationFormat != null) { // ensure this assigned format is in this submission
207  $publicationDate->setPublicationFormatId($publicationFormat->getId());
208  } else {
209  fatalError('This assigned format not in authorized submission context!');
210  }
211  } else {
212  $existingFormat = true;
213  if ($publicationFormat->getId() !== $publicationDate->getPublicationFormatId()) fatalError('Invalid format!');
214  }
215 
216  $publicationDate->setRole($this->getData('role'));
217  $publicationDate->setDateFormat($this->getData('dateFormat'));
218  $publicationDate->setDate($this->getData('date'));
219 
220  if ($existingFormat) {
221  $publicationDateDao->updateObject($publicationDate);
222  $publicationDateId = $publicationDate->getId();
223  } else {
224  $publicationDateId = $publicationDateDao->insertObject($publicationDate);
225  }
226 
227  return $publicationDateId;
228  }
229 }
230 
PublicationDateForm
Form for adding/editing a publication date.
Definition: PublicationDateForm.inc.php:18
PublicationDateForm\__construct
__construct($submission, $publication, $publicationDate)
Definition: PublicationDateForm.inc.php:31
PublicationDateForm\$_publication
$_publication
Definition: PublicationDateForm.inc.php:23
PublicationDateForm\setPublication
setPublication($publication)
Definition: PublicationDateForm.inc.php:109
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PublicationDateForm\getPublication
getPublication()
Definition: PublicationDateForm.inc.php:101
PublicationDateForm\initData
initData()
Definition: PublicationDateForm.inc.php:120
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
PublicationDateForm\$_submission
$_submission
Definition: PublicationDateForm.inc.php:20
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PublicationDateForm\getPublicationDate
getPublicationDate()
Definition: PublicationDateForm.inc.php:69
PublicationDateForm\setPublicationDate
setPublicationDate($publicationDate)
Definition: PublicationDateForm.inc.php:77
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
PublicationDateForm\getSubmission
getSubmission()
Definition: PublicationDateForm.inc.php:85
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
PublicationDateForm\fetch
fetch($request, $template=null, $display=false)
Definition: PublicationDateForm.inc.php:136
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
PublicationDateForm\setSubmission
setSubmission($submission)
Definition: PublicationDateForm.inc.php:93
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
PublicationDateForm\$_publicationDate
$_publicationDate
Definition: PublicationDateForm.inc.php:26
PublicationDateForm\readInputData
readInputData()
Definition: PublicationDateForm.inc.php:180
PublicationDateForm\execute
execute(... $functionArgs)
Definition: PublicationDateForm.inc.php:193