23 import(
'lib.pkp.classes.form.FormError');
24 import(
'lib.pkp.classes.form.FormBuilderVocabulary');
27 import(
'lib.pkp.classes.form.validation.FormValidatorUsername');
28 import(
'lib.pkp.classes.form.validation.FormValidatorArray');
29 import(
'lib.pkp.classes.form.validation.FormValidatorArrayCustom');
30 import(
'lib.pkp.classes.form.validation.FormValidatorBoolean');
31 import(
'lib.pkp.classes.form.validation.FormValidatorControlledVocab');
32 import(
'lib.pkp.classes.form.validation.FormValidatorCustom');
33 import(
'lib.pkp.classes.form.validation.FormValidatorReCaptcha');
34 import(
'lib.pkp.classes.form.validation.FormValidatorEmail');
35 import(
'lib.pkp.classes.form.validation.FormValidatorInSet');
36 import(
'lib.pkp.classes.form.validation.FormValidatorLength');
37 import(
'lib.pkp.classes.form.validation.FormValidatorLocale');
38 import(
'lib.pkp.classes.form.validation.FormValidatorLocaleEmail');
39 import(
'lib.pkp.classes.form.validation.FormValidatorCSRF');
40 import(
'lib.pkp.classes.form.validation.FormValidatorPost');
41 import(
'lib.pkp.classes.form.validation.FormValidatorRegExp');
42 import(
'lib.pkp.classes.form.validation.FormValidatorUrl');
43 import(
'lib.pkp.classes.form.validation.FormValidatorLocaleUrl');
44 import(
'lib.pkp.classes.form.validation.FormValidatorISSN');
45 import(
'lib.pkp.classes.form.validation.FormValidatorORCID');
95 $this->_template = $template;
96 $this->_data = array();
97 $this->_checks = array();
98 $this->_errors = array();
99 $this->errorsArray = array();
100 $this->errorFields = array();
101 $this->formSectionErrors = array();
103 if ($callHooks ===
true) {
121 $this->_template = $template;
150 function display($request =
null, $template =
null) {
151 $this->
fetch($request, $template,
true);
162 function fetch($request, $template =
null, $display =
false) {
164 if (!is_null($template)) $this->_template = $template;
176 $templateMgr->setCacheability(CACHEABILITY_NO_STORE);
180 $fbv = $templateMgr->getFBV();
181 $fbv->setForm($this);
183 $templateMgr->assign(array_merge(
186 'isError' => !$this->
isValid(),
188 'formLocales' => $this->supportedLocales,
194 $templateMgr->display($this->_template);
197 $returner = $templateMgr->fetch($this->_template);
212 return isset($this->_data[$key]) ? $this->_data[$key] :
null;
221 if (is_array($key))
foreach($key as $aKey => $aValue) {
222 $this->
setData($aKey, $aValue);
224 $this->_data[$key] = $value;
252 function validate($callHooks =
true) {
253 if (!isset($this->errorsArray)) {
257 foreach ($this->_checks as $check) {
258 if (!isset($this->errorsArray[$check->getField()]) && !$check->isValid()) {
259 if (method_exists($check,
'getErrorFields') && method_exists($check,
'isArray') && call_user_func(array(&$check,
'isArray'))) {
260 $errorFields = call_user_func(array(&$check,
'getErrorFields'));
262 $this->
addError($errorFields[$i], $check->getMessage());
266 $this->
addError($check->getField(), $check->getMessage());
267 $this->errorFields[$check->getField()] = 1;
272 if ($callHooks ===
true) {
284 if (!defined(
'SESSION_DISABLE_INIT')) {
286 $user = $request->getUser();
288 if (!$this->
isValid() && $user) {
290 import(
'classes.notification.NotificationManager');
292 $notificationManager->createTrivialNotification(
293 $user->getId(), NOTIFICATION_TYPE_FORM_ERROR, array(
'contents' => $this->
getErrorsArray())
307 function execute(...$functionArgs) {
356 if (!in_array($supportedLocale, $this->supportedLocales)) {
358 $siteSupportedLocales = $site->getSupportedLocaleNames();
359 if (array_key_exists($supportedLocale, $siteSupportedLocales)) {
360 $this->supportedLocales[$supportedLocale] = $siteSupportedLocales[$supportedLocale];
377 foreach ($vars as $k) {
387 $this->_checks[] =& $formValidator;
396 $this->_errors[] =
new FormError($field, $message);
404 $this->errorFields[$field] = 1;
412 return empty($this->_errors);
421 $this->errorsArray = array();
422 foreach ($this->_errors as $error) {
423 if (!isset($this->errorsArray[$error->getField()])) {
424 $this->errorsArray[$error->getField()] = $error->getMessage();
443 if (is_array($value)) {
444 foreach ($value as $key => $subValue) {
450 $name = htmlentities($name, ENT_COMPAT, LOCALE_ENCODING);
451 $value = htmlentities($value, ENT_COMPAT, LOCALE_ENCODING);
452 $returner .=
'<input type="hidden" name="' . $name;
453 while (($item = array_shift($stack)) !==
null) {
454 $item = htmlentities($item, ENT_COMPAT, LOCALE_ENCODING);
455 $returner .=
'[' . $item .
']';
457 $returner .=
'" value="' . $value .
"\" />\n";