From 1ea142c03570f8ea71c65927d242ed0d524f3b1e Mon Sep 17 00:00:00 2001 From: Sebastian Kehr <kehr@ub.uni-leipzig.de> Date: Fri, 23 Aug 2019 13:55:08 +0200 Subject: [PATCH] refs #15520 [fid_bbi] exclude certain fields on user registration * let various registration related form fields be optional or not requested at all * reduce adjusted form specs --- module/fid_bbi/config/form.config.php | 88 +++++ module/fid_bbi/config/module.config.php | 141 +++++--- .../fid_bbi/templates/fid/user/create.phtml | 321 ++++++++++++++++++ 3 files changed, 496 insertions(+), 54 deletions(-) create mode 100644 module/fid_bbi/config/form.config.php create mode 100644 themes/fid_bbi/templates/fid/user/create.phtml diff --git a/module/fid_bbi/config/form.config.php b/module/fid_bbi/config/form.config.php new file mode 100644 index 00000000000..40e55cb2ef1 --- /dev/null +++ b/module/fid_bbi/config/form.config.php @@ -0,0 +1,88 @@ +<?php +/** + * Copyright (C) 2019 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Sebastian Kehr <kehr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ + +use fid\FormModel\UserCreateModel; +use fid\FormModel\UserInitModel; + +return [ + UserInitModel::class => [ + 'elements' => [ + 'firstname' => [ + 'spec' => [ + 'attributes' => [ + 'required' => false + ], + ], + ], + 'lastname' => [ + 'spec' => [ + 'attributes' => [ + 'required' => false + ], + ], + ], + ], + 'input_filter' => [ + 'firstname' => [ + 'required' => false, + ], + 'lastname' => [ + 'required' => false, + ], + ] + ], + UserCreateModel::class => [ + 'elements' => [ + 'firstname' => [ + 'spec' => [ + 'attributes' => [ + 'required' => false + ], + ], + ], + 'lastname' => [ + 'spec' => [ + 'attributes' => [ + 'required' => false + ], + ], + ], + 'homeLibrary' => [ + 'spec' => [ + 'attributes' => [ + 'required' => false + ], + ], + ], + ], + 'input_filter' => [ + 'firstname' => [ + 'required' => false, + ], + 'lastname' => [ + 'required' => false, + ], + 'homeLibrary' => [ + 'required' => false, + ] + ] + ], +]; diff --git a/module/fid_bbi/config/module.config.php b/module/fid_bbi/config/module.config.php index d2a7176b2d6..414e9af2d87 100644 --- a/module/fid_bbi/config/module.config.php +++ b/module/fid_bbi/config/module.config.php @@ -1,91 +1,122 @@ <?php -namespace fid_bbi\Module\Configuration; +/** + * Copyright (C) 2019 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Sebastian Kehr <kehr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ $config = [ + 'forms' => require_once 'form.config.php', 'controllers' => [ 'factories' => [ 'fid_bbi\Controller\FeedbackController' => 'VuFind\Controller\AbstractBaseFactory', - 'fid_bbi\Controller\SearchController' => 'VuFind\Controller\AbstractBaseFactory', + 'fid_bbi\Controller\SearchController' => 'VuFind\Controller\AbstractBaseFactory', ], - 'aliases' => [ + 'aliases' => [ 'feedback' => 'fid_bbi\Controller\FeedbackController', 'Feedback' => 'fid_bbi\Controller\FeedbackController', - 'Search' => 'fid_bbi\Controller\SearchController', - 'search' => 'fid_bbi\Controller\SearchController', + 'Search' => 'fid_bbi\Controller\SearchController', + 'search' => 'fid_bbi\Controller\SearchController', ], ], - 'vufind' => [ - 'plugin_managers' => [ + 'vufind' => [ + 'plugin_managers' => [ 'recorddriver' => [ 'factories' => [ - 'solrdefault' => 'finc\RecordDriver\Factory::getSolrDefault', - 'solrmarc' => 'finc\RecordDriver\Factory::getSolrMarc', - 'solrmarcfinc' => 'fid_bbi\RecordDriver\Factory::getSolrMarcFinc', - 'solrmarcfincpda' => 'finc\RecordDriver\Factory::getSolrMarcFincPDA', - 'solrmarcremote' => 'finc\RecordDriver\Factory::getSolrMarcRemote', + 'solrdefault' => 'finc\RecordDriver\Factory::getSolrDefault', + 'solrmarc' => 'finc\RecordDriver\Factory::getSolrMarc', + 'solrmarcfinc' => 'fid_bbi\RecordDriver\Factory::getSolrMarcFinc', + 'solrmarcfincpda' => 'finc\RecordDriver\Factory::getSolrMarcFincPDA', + 'solrmarcremote' => 'finc\RecordDriver\Factory::getSolrMarcRemote', 'solrmarcremotefinc' => 'finc\RecordDriver\Factory::getSolrMarcRemoteFinc', - 'solrai' => 'finc\RecordDriver\Factory::getSolrAI', - 'solris' => 'finc\RecordDriver\Factory::getSolrIS', - 'solrlido' => 'finc\RecordDriver\Factory::getSolrLido', - 'solrlidondl' => 'finc\RecordDriver\Factory::getSolrLidoNdl' + 'solrai' => 'finc\RecordDriver\Factory::getSolrAI', + 'solris' => 'finc\RecordDriver\Factory::getSolrIS', + 'solrlido' => 'finc\RecordDriver\Factory::getSolrLido', + 'solrlidondl' => 'finc\RecordDriver\Factory::getSolrLidoNdl' ], ], - 'recordtab' => [ - 'factories' => [ + 'recordtab' => [ + 'factories' => [ 'hierarchytree' => 'finc\RecordTab\Factory::getHierarchyTree', ], 'invokables' => [ - 'staffviewai' => 'finc\RecordTab\StaffViewAI', - 'acquisitionpda' => 'finc\RecordTab\AcquisitionPDA', - 'topics' => 'finc\RecordTab\Topics', + 'staffviewai' => 'finc\RecordTab\StaffViewAI', + 'acquisitionpda' => 'finc\RecordTab\AcquisitionPDA', + 'topics' => 'finc\RecordTab\Topics', 'descriptionlido' => 'finc\RecordTab\DescriptionLido' ], ], ], - 'recorddriver_tabs' => [ - 'finc\RecordDriver\SolrDefault' => [ - 'tabs' => [ - 'Description' => 'Description', 'Holdings' => 'HoldingsILS', - 'TOC' => 'TOC', 'UserComments' => 'UserComments', - 'Reviews' => 'Reviews', 'Excerpt' => 'Excerpt', - 'Preview' => 'preview', - 'HierarchyTree' => 'HierarchyTree', 'Map' => 'Map', - 'Similar' => null, - 'Details' => 'StaffViewArray', + 'recorddriver_tabs' => [ + 'finc\RecordDriver\SolrDefault' => [ + 'tabs' => [ + 'Description' => 'Description', + 'Holdings' => 'HoldingsILS', + 'TOC' => 'TOC', + 'UserComments' => 'UserComments', + 'Reviews' => 'Reviews', + 'Excerpt' => 'Excerpt', + 'Preview' => 'preview', + 'HierarchyTree' => 'HierarchyTree', + 'Map' => 'Map', + 'Similar' => null, + 'Details' => 'StaffViewArray', ], 'defaultTab' => null, ], 'finc\RecordDriver\SolrMarcFinc' => [ - 'tabs' => [ - 'Description' => 'Description', 'Holdings' => 'HoldingsILS', - 'TOC' => 'TOC', 'UserComments' => 'UserComments', - 'Reviews' => 'Reviews', 'Excerpt' => 'Excerpt', - 'Preview' => 'preview', - 'HierarchyTree' => 'HierarchyTree', 'Map' => 'Map', - 'Similar' => null, - 'Details' => 'StaffViewMARC', + 'tabs' => [ + 'Description' => 'Description', + 'Holdings' => 'HoldingsILS', + 'TOC' => 'TOC', + 'UserComments' => 'UserComments', + 'Reviews' => 'Reviews', + 'Excerpt' => 'Excerpt', + 'Preview' => 'preview', + 'HierarchyTree' => 'HierarchyTree', + 'Map' => 'Map', + 'Similar' => null, + 'Details' => 'StaffViewMARC', ], 'defaultTab' => null, ], - 'finc\RecordDriver\SolrAI' => [ - 'tabs' => [ - 'Description' => 'Description', 'Holdings' => 'HoldingsILS', - 'TOC' => 'TOC', 'UserComments' => 'UserComments', - 'Reviews' => 'Reviews', 'Excerpt' => 'Excerpt', - 'Preview' => 'preview', - 'HierarchyTree' => 'HierarchyTree', 'Map' => 'Map', - 'Similar' => null, - 'Details' => 'StaffViewAI', + 'finc\RecordDriver\SolrAI' => [ + 'tabs' => [ + 'Description' => 'Description', + 'Holdings' => 'HoldingsILS', + 'TOC' => 'TOC', + 'UserComments' => 'UserComments', + 'Reviews' => 'Reviews', + 'Excerpt' => 'Excerpt', + 'Preview' => 'preview', + 'HierarchyTree' => 'HierarchyTree', + 'Map' => 'Map', + 'Similar' => null, + 'Details' => 'StaffViewAI', ], 'defaultTab' => null, ], ], 'recorddriver_collection_tabs' => [ 'VuFind\RecordDriver\AbstractBase' => [ - 'tabs' => [ + 'tabs' => [ 'CollectionList' => 'CollectionList', - 'HierarchyTree' => 'CollectionHierarchyTree', - 'Details' => 'StaffViewArray', + 'HierarchyTree' => 'CollectionHierarchyTree', + 'Details' => 'StaffViewArray', ], 'defaultTab' => null, ], @@ -94,15 +125,17 @@ $config = [ ]; $nonTabRecordActions = [ - 'PDA', 'EmailHold', 'ReportErrors' + 'PDA', + 'EmailHold', + 'ReportErrors' ]; // Define record view routes -- route name => controller // Define record view routes once again to add new nonTabRecordActions $recordRoutes = [ - 'record' => 'Record', - 'export' => 'Export', + 'record' => 'Record', + 'export' => 'Export', 'resources' => 'Resources' ]; diff --git a/themes/fid_bbi/templates/fid/user/create.phtml b/themes/fid_bbi/templates/fid/user/create.phtml new file mode 100644 index 00000000000..e11b132c347 --- /dev/null +++ b/themes/fid_bbi/templates/fid/user/create.phtml @@ -0,0 +1,321 @@ +<?php +/** + * Copyright (C) 2019 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Gregor Gawol <gawol@ub.uni-leipzig.de> + * @author Sebastian Kehr <kehr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ + +use Zend\Form\Element\Checkbox; +use Zend\Form\Element\Submit; +use Zend\Form\Form; +use Zend\Form\Element as Element; +use Zend\Form\View\Helper\FormElementErrors; +use Zend\Form\View\Helper\FormLabel; +use Zend\Form\View\Helper\FormRadio; +use Zend\Form\View\Helper\FormSelect; +use Zend\Form\View\Helper\FormSubmit; +use Zend\I18n\Translator\TranslatorInterface; + +/** @var FormLabel $formLabel */ +$formLabel = $this->formLabel(); +/**@var FormRadio $formRadio */ +$formRadio = $this->formRadio(); +/**@var FormSelect $formSelect */ +$formSelect = $this->formSelect(); +/**@var FormSubmit $formSubmit */ +$formSubmit = $this->formSubmit(); +/** @var FormElementErrors $formElementErrors */ +$formElementErrors = $this->formElementErrors(); +$formLabel->setTranslatorTextDomain('fid'); +$formSelect->setTranslatorTextDomain('fid'); +$formRadio->setTranslatorTextDomain('fid'); +$formSubmit->setTranslatorTextDomain('fid'); +$formElementErrors->setTranslatorTextDomain('fid'); +/** @var TranslatorInterface $translator */ +$translator = $this->getHelperPluginManager()->get('translate') + ->getTranslator(); + +$formLabel->setTranslator($translator); +$formElementErrors->setTranslator($translator); + +/** @var Form $form */ +$form = $this->form; +$form->setAttribute('method', 'post'); +$form->setAttribute('action', $this->url('fid/user/create')); +$form->setAttribute('class', 'fid-user-create-form registration'); +$form->prepare(); + +$this->headTitle($this->translate('Profile Form')); +$this->headTitle($this->translate("fid::user_create_form_title")); +?> + +<?= $this->flashmessages() ?> +<?= $this->form()->openTag($form) ?> + <h2><?= $this->translate("fid::user_create_form_title") ?></h2> + <div class="subito-pg"> + * <?= $this->transEsc("This field is required") ?> + </div> +<? /* username */ ?> +<?php +/** @var Element\Text $elemUsername */ +$elemUsername = $form->get('username'); +$elemUsername->setLabelAttributes(['class' => 'col-md-4']); +$elemUsername->setAttributes(['class' => 'form-control', 'disabled' => 1]); +?> + <div class="form-group"> + <?= $this->formLabel($elemUsername) ?> + <?= $this->formElement($elemUsername) ?> + <?= $this->formElementErrors($elemUsername) ?> + <?php + $elemUsername->removeAttribute('disabled'); + $elemUsername->setAttribute('type', 'hidden'); + echo $this->formElement($elemUsername); + ?> + </div> + +<? /* password */ ?> +<?php +/** @var Element\Password $elemPassword */ +$elemPassword = $form->get('password'); +$elemPassword->setLabelAttributes(['class' => 'col-md-4']); +$elemPassword->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemPassword) ?> + <?= $this->formElement($elemPassword) ?> + <?= $this->formElementErrors($elemPassword) ?> + </div> + +<? /* password confirmation */ ?> +<?php +/** @var Element\Password $elemPasswordConfirmation */ +$elemPasswordConfirmation = $form->get('passwordConfirmation'); +$elemPasswordConfirmation->setLabelAttributes(['class' => 'col-md-4']); +$elemPasswordConfirmation->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemPasswordConfirmation) ?> + <?= $this->formElement($elemPasswordConfirmation) ?> + <?= $this->formElementErrors($elemPasswordConfirmation) ?> + </div> + +<? /* home library */ ?> +<?php +/** @var Element\Select $elemHomeLibrary */ +$elemHomeLibrary = $form->get('homeLibrary'); +$elemHomeLibrary->setLabelAttributes(['class' => 'col-md-4']); +$elemHomeLibrary->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemHomeLibrary) ?> + <?= $this->formSelect($elemHomeLibrary) ?> + <?= $this->formElementErrors($elemHomeLibrary) ?> + </div> + +<? /* salutation */ ?> +<?php +/** @var Element\Select $elemSalutation */ +$elemSalutation = $form->get('salutation'); +$elemSalutation->setAttribute('type', 'hidden'); +echo $this->formElement($elemSalutation); +?> + +<? /* academic title */ ?> +<?php +/** @var Element\Text $elemAcademicTitle */ +$elemAcademicTitle = $form->get('academicTitle'); +$elemAcademicTitle->setLabelAttributes(['class' => 'col-md-4']); +$elemAcademicTitle->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemAcademicTitle) ?> + <?= $this->formElement($elemAcademicTitle) ?> + </div> + +<? /* firstname */ ?> +<?php +/** @var Element\Text $elemFirstname */ +$elemFirstname = $form->get('firstname'); +$elemFirstname->setLabelAttributes(['class' => 'col-md-4']); +$elemFirstname->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemFirstname) ?> + <?= $this->formElement($elemFirstname) ?> + <?= $this->formElementErrors($elemFirstname) ?> + </div> + +<? /* lastname */ ?> +<?php +/** @var Element\Text $elemLastname */ +$elemLastname = $form->get('lastname'); +$elemLastname->setLabelAttributes(['class' => 'col-md-4']); +$elemLastname->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemLastname) ?> + <?= $this->formElement($elemLastname) ?> + <?= $this->formElementErrors($elemLastname) ?> + </div> + +<? /* year of birth */ ?> +<?php +/** @var Element\Text $elemYearOfBirth */ +$elemYearOfBirth = $form->get('yearOfBirth'); +$elemYearOfBirth->setAttribute('type', 'hidden'); +echo $this->formElement($elemYearOfBirth); +?> + +<? /* college */ ?> +<?php +/** @var Element\Text $elemCollege */ +$elemCollege = $form->get('college'); +$elemCollege->setLabelAttributes(['class' => 'col-md-4']); +$elemCollege->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formLabel($elemCollege) ?> + <?= $this->formElement($elemCollege) ?> + <?= $this->formElementErrors($elemCollege) ?> + </div> + +<? /* job title */ ?> +<?php +/** @var Element\Text $elemJobTitle */ +$elemJobTitle = $form->get('jobTitle'); +$elemJobTitle->setAttribute('type', 'hidden'); +echo $this->formElement($elemJobTitle); +?> + +<? /* role (user group) */ ?> +<?php +/** @var Element\Radio $accessLevel */ +$accessLevel = $form->get('accessLevel'); +?> + <div class="form-group"> + <div class="col-md-4"> + <?= $this->formLabel($accessLevel) ?> + </div> + <div class="col-md-8"> + <?= $this->formRadio($accessLevel) ?> + </div> + <?= $this->formElementErrors($accessLevel) ?> + </div> + +<?php +/** @var Element\Text $elemAddressLine1 */ +$elemAddressLine1 = $form->get('addressLine1'); +$elemAddressLine1->setLabelAttributes(['class' => 'col-md-4']); +$elemAddressLine1->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?= $this->formLabel($elemAddressLine1) ?> + <?= $this->formElement($elemAddressLine1) ?> + <?= $this->formElementErrors($elemAddressLine1) ?> +</div> + +<? /* second address line */ ?> +<?php +/** @var Element\Text $elemAddressLine2 */ +$elemAddressLine2 = $form->get('addressLine2'); +$elemAddressLine2->setLabelAttributes(['class' => 'col-md-4']); +$elemAddressLine2->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?= $this->formLabel($elemAddressLine2) ?> + <?= $this->formElement($elemAddressLine2) ?> + <?= $this->formElementErrors($elemAddressLine2) ?> +</div> + +<? /* address zip */ ?> +<?php +/** @var Element\Text $elemAddressZip */ +$elemAddressZip = $form->get('addressZip'); +$elemAddressZip->setLabelAttributes(['class' => 'col-md-4']); +$elemAddressZip->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?= $this->formLabel($elemAddressZip) ?> + <?= $this->formElement($elemAddressZip) ?> + <?= $this->formElementErrors($elemAddressZip) ?> +</div> + +<? /* address city */ ?> +<?php +/** @var Element\Text $elemAddressCity */ +$elemAddressCity = $form->get('addressCity'); +$elemAddressCity->setLabelAttributes(['class' => 'col-md-4']); +$elemAddressCity->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?= $this->formLabel($elemAddressCity) ?> + <?= $this->formElement($elemAddressCity) ?> + <?= $this->formElementErrors($elemAddressCity) ?> +</div> + +<? /* address country */ ?> +<?php +/** @var Element\Text $elemAddressCountry */ +$elemAddressCountry = $form->get('addressCountry'); +$elemAddressCountry->setLabelAttributes(['class' => 'col-md-4']); +$elemAddressCountry->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?= $this->formLabel($elemAddressCountry) ?> + <?= $this->formElement($elemAddressCountry) ?> + <?= $this->formElementErrors($elemAddressCountry) ?> +</div> + +<? /* eula privacy policy */ ?> +<?php +/** @var Checkbox $elemEulaAccepted */ +$elemEulaAccepted = $form->get('eulaAccepted'); +$elemEulaAccepted->setAttribute('id', 'eulaAccepted'); +?> + <div class="form-group eula"> + <div> + <?= $this->formElement($elemEulaAccepted) ?> + <?= $this->formLabel()->openTag($elemEulaAccepted) ?> + <?= $this->translate("fid::policy_text") ?> + <?php $url = $this->url('fid/user/policy') ?> + <a data-lightbox href="<?= $url ?>"> + <?= $this->translate("fid::policy") ?> + </a> + <?= $this->translate("fid::terms_text") ?> + <?php $url = $this->url('fid/user/terms') ?> + <a data-lightbox href="<?= $url ?>"> + <?= $this->translate("fid::terms") ?> + </a>. + <?= $this->formLabel()->closeTag($elemEulaAccepted) ?> + </div> + <?= $this->formElementErrors($elemEulaAccepted) ?> + </div> + +<? /* submit button */ ?> +<?php +/** @var Submit $elemSubmit */ +$elemSubmit = $form->get('submit'); +$elemSubmit->setAttributes(['class' => 'btn btn-primary']); +?> + <div class="form-group"> + <div class=""> + <?= $this->formSubmit($elemSubmit) ?> + </div> + </div> + +<?= $this->form()->closeTag($form) ?> -- GitLab