Open Journal Systems  3.3.0
ReviewFormElementForm.inc.php
1 <?php
2 
18 import('lib.pkp.classes.db.DBDataXMLParser');
19 import('lib.pkp.classes.form.Form');
20 
21 class ReviewFormElementForm extends Form {
22 
24  var $reviewFormId;
25 
28 
35  parent::__construct('manager/reviewForms/reviewFormElementForm.tpl');
36 
37  $this->reviewFormId = $reviewFormId;
38  $this->reviewFormElementId = $reviewFormElementId;
39 
40  // Validation checks for this form
41  $this->addCheck(new FormValidatorLocale($this, 'question', 'required', 'manager.reviewFormElements.form.questionRequired'));
42  $this->addCheck(new FormValidator($this, 'elementType', 'required', 'manager.reviewFormElements.form.elementTypeRequired'));
43  $this->addCheck(new FormValidatorPost($this));
44  $this->addCheck(new FormValidatorCSRF($this));
45  }
46 
51  function getLocaleFieldNames() {
52  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
53  return $reviewFormElementDao->getLocaleFieldNames();
54  }
55 
59  function fetch($request, $template = null, $display = false) {
60  $templateMgr = TemplateManager::getManager($request);
61  import('lib.pkp.classes.reviewForm.ReviewFormElement');
62  $templateMgr->assign(array(
63  'reviewFormId' => $this->reviewFormId,
64  'reviewFormElementId' => $this->reviewFormElementId,
65  'multipleResponsesElementTypes' => ReviewFormElement::getMultipleResponsesElementTypes(),
66  'multipleResponsesElementTypesString' => ';'.implode(';', ReviewFormElement::getMultipleResponsesElementTypes()).';',
67  'reviewFormElementTypeOptions' => ReviewFormElement::getReviewFormElementTypeOptions(),
68  ));
69  return parent::fetch($request, $template, $display);
70  }
71 
75  function initData() {
76  if ($this->reviewFormElementId) {
77  $request = Application::get()->getRequest();
78  $context = $request->getContext();
79  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
80  $reviewFormElement = $reviewFormElementDao->getById($this->reviewFormElementId, $this->reviewFormId);
81  $this->_data = array(
82  'question' => $reviewFormElement->getQuestion(null), // Localized
83  'description' => $reviewFormElement->getDescription(null), // Localized
84  'required' => $reviewFormElement->getRequired(),
85  'included' => $reviewFormElement->getIncluded(),
86 
87  'elementType' => $reviewFormElement->getElementType(),
88  'possibleResponses' => $reviewFormElement->getPossibleResponses(null) //Localized
89  );
90  } else {
91  $this->_data = array(
92  'included' => 1
93  );
94  }
95  }
96 
100  function readInputData() {
101  $this->readUserVars(array('question', 'description', 'required', 'included', 'elementType', 'possibleResponses'));
102  }
103 
108  function execute(...$functionArgs) {
109  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
110  $request = Application::get()->getRequest();
111 
112  if ($this->reviewFormElementId) {
113  $context = $request->getContext();
114  $reviewFormElement = $reviewFormElementDao->getById($this->reviewFormElementId);
115  $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /* @var $reviewFormDao ReviewFormDAO */
116  $reviewForm = $reviewFormDao->getById($reviewFormElement->getReviewFormId(), Application::getContextAssocType(), $context->getId());
117  if (!$reviewForm) fatalError('Invalid review form element ID!');
118  } else {
119  $reviewFormElement = $reviewFormElementDao->newDataObject();
120  $reviewFormElement->setReviewFormId($this->reviewFormId);
121  $reviewFormElement->setSequence(REALLY_BIG_NUMBER);
122  }
123 
124  $reviewFormElement->setQuestion($this->getData('question'), null); // Localized
125  $reviewFormElement->setDescription($this->getData('description'), null); // Localized
126  $reviewFormElement->setRequired($this->getData('required') ? 1 : 0);
127  $reviewFormElement->setIncluded($this->getData('included') ? 1 : 0);
128  $reviewFormElement->setElementType($this->getData('elementType'));
129 
130  if (in_array($this->getData('elementType'), ReviewFormElement::getMultipleResponsesElementTypes())) {
131  $this->setData('possibleResponsesProcessed', $reviewFormElement->getPossibleResponses(null));
132  ListbuilderHandler::unpack($request, $this->getData('possibleResponses'), array($this, 'deleteEntry'), array($this, 'insertEntry'), array($this, 'updateEntry'));
133  $reviewFormElement->setPossibleResponses($this->getData('possibleResponsesProcessed'), null);
134  } else {
135  $reviewFormElement->setPossibleResponses(null, null);
136  }
137  if ($reviewFormElement->getId()) {
138  $reviewFormElementDao->deleteSetting($reviewFormElement->getId(), 'possibleResponses');
139  $reviewFormElementDao->updateObject($reviewFormElement);
140  } else {
141  $this->reviewFormElementId = $reviewFormElementDao->insertObject($reviewFormElement);
142  $reviewFormElementDao->resequenceReviewFormElements($this->reviewFormId);
143  }
144  parent::execute(...$functionArgs);
146  }
147 
151  function insertEntry($request, $newRowId) {
152  $possibleResponsesProcessed = (array) $this->getData('possibleResponsesProcessed');
153  foreach ($newRowId['possibleResponse'] as $key => $value) {
154  $possibleResponsesProcessed[$key][] = $value;
155  }
156  $this->setData('possibleResponsesProcessed', $possibleResponsesProcessed);
157  return true;
158  }
159 
163  function deleteEntry($request, $rowId) {
164  $possibleResponsesProcessed = (array) $this->getData('possibleResponsesProcessed');
165  foreach (array_keys($possibleResponsesProcessed) as $locale) {
166  // WARNING: Listbuilders don't like zero row IDs. They are offset
167  // by 1 to avoid this case, so 1 is subtracted here to normalize.
168  unset($possibleResponsesProcessed[$locale][$rowId-1]);
169  }
170  $this->setData('possibleResponsesProcessed', $possibleResponsesProcessed);
171  return true;
172  }
173 
177  function updateEntry($request, $rowId, $newRowId) {
178  $possibleResponsesProcessed = (array) $this->getData('possibleResponsesProcessed');
179  foreach ($newRowId['possibleResponse'] as $locale => $value) {
180  // WARNING: Listbuilders don't like zero row IDs. They are offset
181  // by 1 to avoid this case, so 1 is subtracted here to normalize.
182  $possibleResponsesProcessed[$locale][$rowId-1] = $value;
183  }
184  $this->setData('possibleResponsesProcessed', $possibleResponsesProcessed);
185  return true;
186  }
187 }
188 
189 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
FormValidatorLocale
Class to represent a form validation check for localized fields.
Definition: FormValidatorLocale.inc.php:16
ReviewFormElementForm\updateEntry
updateEntry($request, $rowId, $newRowId)
Definition: ReviewFormElementForm.inc.php:183
ReviewFormElement\getMultipleResponsesElementTypes
& getMultipleResponsesElementTypes()
Definition: ReviewFormElement.inc.php:211
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
ListbuilderHandler\unpack
static unpack($request, $data, $deletionCallback, $insertionCallback, $updateCallback)
Definition: ListbuilderHandler.inc.php:245
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
ReviewFormElementForm\readInputData
readInputData()
Definition: ReviewFormElementForm.inc.php:106
ReviewFormElementForm\$reviewFormElementId
$reviewFormElementId
Definition: ReviewFormElementForm.inc.php:33
ReviewFormElementForm\execute
execute(... $functionArgs)
Definition: ReviewFormElementForm.inc.php:114
ReviewFormElementForm\__construct
__construct($reviewFormId, $reviewFormElementId=null)
Definition: ReviewFormElementForm.inc.php:40
ReviewFormElementForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: ReviewFormElementForm.inc.php:57
Application\getContextAssocType
static getContextAssocType()
Definition: Application.inc.php:199
ReviewFormElementForm\$reviewFormId
$reviewFormId
Definition: ReviewFormElementForm.inc.php:27
ReviewFormElementForm
Form for creating and modifying review form elements.
Definition: ReviewFormElementForm.inc.php:21
ReviewFormElementForm\insertEntry
insertEntry($request, $newRowId)
Definition: ReviewFormElementForm.inc.php:157
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
ReviewFormElement\getReviewFormElementTypeOptions
& getReviewFormElementTypeOptions()
Definition: ReviewFormElement.inc.php:194
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
ReviewFormElementForm\initData
initData()
Definition: ReviewFormElementForm.inc.php:81
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
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
ReviewFormElementForm\fetch
fetch($request, $template=null, $display=false)
Definition: ReviewFormElementForm.inc.php:65
ReviewFormElementForm\deleteEntry
deleteEntry($request, $rowId)
Definition: ReviewFormElementForm.inc.php:169