diff --git a/fid/config/vufind/fid.ini b/fid/config/vufind/fid.ini index f9615bf43bb767c9f23c6697454d531717b00993..1739235747aa01027b1faf8e1a942c3f072b1a4a 100644 --- a/fid/config/vufind/fid.ini +++ b/fid/config/vufind/fid.ini @@ -14,12 +14,6 @@ role_display_priority[] = "full_access>limited_access>basic_access" role_display_order = "full_access>limited_access>basic_access" [Admin] -; Whitelist of all fields that admins shall be able -; to change for other users -;editable_user_fields[] = 'HomeLibrary' -editable_user_fields[] = 'Permissions' -editable_user_fields[] = 'Salutation' - ;list of user fields to be shown in overview table overview_fields[] = 'UserName' overview_fields[] = 'Firstname' diff --git a/module/fid/config/admin-edit-form.php b/module/fid/config/admin-edit-form.php index 81322e19f9306857c29d156410b139a279e0a6c4..55db3fe0391185e81f4bbdbdc3e6a3c62a492824 100644 --- a/module/fid/config/admin-edit-form.php +++ b/module/fid/config/admin-edit-form.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (C) 2019 Leipzig University Library + * Copyright (C) 2020 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 @@ -20,22 +20,25 @@ */ use fid\Hydrator\UserHydrator; -use fid\InputFilter\AdminEditFormInputFilter; use fid\InputFilter\RootAwareBaseInputFilter; -use Zend\Filter\StringTrim; use Zend\Form\Element\Collection; use Zend\Form\Element\Hidden; use Zend\Form\Element\Radio; use Zend\Form\Element\Select; use Zend\Form\Element\Submit; use Zend\Form\Element\Text; -use Zend\Validator\Regex; -use Zend\Validator\StringLength; +use Zend\Form\Fieldset; +use Zend\Form\InputFilterProviderFieldset; return [ - 'name' => 'admin-edit-form', - 'hydrator' => UserHydrator::class, - 'elements' => [ + 'name' => 'user-update-form', + 'hydrator' => UserHydrator::class, + 'validation_group' => [ + 'id', + 'job_title', + 'permissions' + ], + 'elements' => [ 'id' => [ 'spec' => [ 'name' => 'id', @@ -44,9 +47,9 @@ return [ ], 'salutation' => [ 'spec' => [ - 'name' => 'salutation', - 'type' => Select::class, - 'options' => [ + 'name' => 'salutation', + 'type' => Select::class, + 'options' => [ 'label' => 'label_salutation', 'options' => [ 'mr' => [ @@ -60,15 +63,21 @@ return [ ], 'empty_option' => '', ], + 'attributes' => [ + 'disabled' => true, + ], ], ], 'academic_title' => [ 'spec' => [ - 'name' => 'academic_title', - 'type' => Text::class, - 'options' => [ + 'name' => 'academic_title', + 'type' => Text::class, + 'options' => [ 'label' => 'label_academic_title', ], + 'attributes' => [ + 'readonly' => true, + ], ], ], 'firstname' => [ @@ -79,7 +88,7 @@ return [ 'label' => 'label_firstname', ], 'attributes' => [ - 'required' => true, + 'readonly' => true, ], ], ], @@ -91,7 +100,7 @@ return [ 'label' => 'label_lastname', ], 'attributes' => [ - 'required' => true, + 'readonly' => true, ], ], ], @@ -100,21 +109,23 @@ return [ 'name' => 'home_library', 'type' => Select::class, 'options' => [ - 'label' => 'label_home_library', - 'use_hidden_element' => true, + 'label' => 'label_home_library', ], 'attributes' => [ - 'required' => true, + 'disabled' => true, ], ], ], 'college' => [ 'spec' => [ - 'name' => 'college', - 'type' => Text::class, - 'options' => [ + 'name' => 'college', + 'type' => Text::class, + 'options' => [ 'label' => 'label_college', - ] + ], + 'attributes' => [ + 'readonly' => true, + ], ], ], 'job_title' => [ @@ -153,110 +164,116 @@ return [ ], ], ], - 'submit' => [ - 'spec' => [ - 'name' => 'submit', - 'type' => Submit::class, - 'attributes' => [ - 'value' => 'label_update_submit', - ], - ], -], - ], - 'input_filter' => [ - 'type' => RootAwareBaseInputFilter::class, - 'id' => [ - 'name' => 'id', - 'required' => true, - ], - 'salutation' => [ - 'name' => 'salutation', - 'required' => false, - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, - ], - ], - ], - 'academic_title' => [ - 'name' => 'academic_title', - 'required' => false, - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, - ], - ], - ], - 'firstname' => [ - 'name' => 'firstname', - 'required' => false, - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, - ], - ], - 'validators' => [ - StringLength::class => [ - 'name' => StringLength::class, - 'options' => [ - 'max' => 255 - ], - ], - Regex::class => [ - 'name' => Regex::class, - 'options' => [ - 'pattern' => '/^\D*$/', + 'addresses' => [ + 'spec' => [ + 'name' => 'addresses', + 'type' => Fieldset::class, + 'elements' => [ + 'address_0' => [ + 'spec' => [ + 'name' => 0, + 'type' => Fieldset::class, + 'options' => [ + 'template' => 'fid/user/address-fieldset.phtml', + ], + 'elements' => [ + 'id' => [ + 'spec' => [ + 'name' => 'id', + 'type' => Hidden::class, + ], + ], + 'line1' => [ + 'spec' => [ + 'name' => 'line1', + 'options' => [ + 'label' => 'label_address_0_line_1', + ], + 'attributes' => [ + 'readonly' => true, + ], + ], + ], + 'line2' => [ + 'spec' => [ + 'name' => 'line2', + 'options' => [ + 'label' => 'label_address_0_line_2', + ], + 'attributes' => [ + 'readonly' => true, + ], + ], + ], + 'zip' => [ + 'spec' => [ + 'name' => 'zip', + 'options' => [ + 'label' => 'label_address_0_zip', + ], + 'attributes' => [ + 'readonly' => true, + ], + ], + ], + 'city' => [ + 'spec' => [ + 'name' => 'city', + 'options' => [ + 'label' => 'label_address_0_city', + ], + 'attributes' => [ + 'readonly' => true, + ], + ], + ], + 'country' => [ + 'spec' => [ + 'name' => 'country', + 'options' => [ + 'label' => 'label_address_0_country', + ], + 'attributes' => [ + 'readonly' => true, + ], + ], + ], + ], + ], + ], ], ], ], - ], - 'lastname' => [ - 'name' => 'lastname', - 'required' => false, - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, + 'data' => [ + 'spec' => [ + 'name' => 'data', + 'type' => InputFilterProviderFieldset::class, ], ], - 'validators' => [ - StringLength::class => [ - 'name' => StringLength::class, - 'options' => [ - 'max' => 255 - ] - ], - Regex::class => [ - 'name' => Regex::class, - 'options' => [ - 'pattern' => '/^\D*$/', + 'submit' => [ + 'spec' => [ + 'name' => 'submit', + 'type' => Submit::class, + 'attributes' => [ + 'value' => 'label_update_submit', ], ], ], ], - 'home_library' => [ - 'name' => 'home_library', - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, - ], + 'input_filter' => [ + 'type' => RootAwareBaseInputFilter::class, + 'id' => [ + 'name' => 'id', + 'required' => true, ], - ], - 'college' => [ - 'name' => 'college', - 'required' => false, - 'filters' => [ - StringTrim::class => [ - 'name' => StringTrim::class, - ], + 'job_title' => [ + 'name' => 'job_title', + 'required' => true, + ], + 'submit' => [ + 'name' => 'submit', + 'required' => true, ], ], - 'job_title' => [ - 'name' => 'job_title', - 'required' => true, - ], - 'submit' => [ - 'name' => 'submit', - 'required' => true, - ], -], -]; \ No newline at end of file +]; + diff --git a/themes/fid/templates/fid/admin/edit.phtml b/themes/fid/templates/fid/admin/edit.phtml index 81cc338eaf41898ad6c5798bd92d1ae877389f45..7f37ffbffd67776dc61dc55e64fd878ec29b3fa9 100644 --- a/themes/fid/templates/fid/admin/edit.phtml +++ b/themes/fid/templates/fid/admin/edit.phtml @@ -20,19 +20,23 @@ * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 */ -use Zend\Form\Element as Element; +use Zend\Form\Element; +use Zend\Form\Element\Checkbox; use Zend\Form\Element\Submit; +use Zend\Form\Form; 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; +/** @var Form $form */ /** @var FormLabel $formLabel */ /** @var FormRadio $formRadio */ /** @var FormSelect $formSelect */ /** @var FormSubmit $formSubmit */ /** @var FormElementErrors $formElementErrors */ +$form = $this->form; $formLabel = $this->formLabel(); $formRadio = $this->formRadio(); $formSelect = $this->formSelect(); @@ -47,14 +51,12 @@ $this->headTitle($title = $this->translate("fid::user_edit_form_title", [ '%%userid%%' => $user->getId(), '%%username%%' => $user->getUsername() ])); -$editableFields = $this->config['Admin']['editable_user_fields'] ?? []; -$form->setAttributes(['class' => 'row']); -echo $this->form()->openTag($form); ?> -<h2 class="row col-md-12"><?= $title ?></h2> -<div class="row col-md-12"><?= $this->transEsc("fid::required_fields_note") ?></div> +<h2><?= $title ?></h2> +<div><?= $this->transEsc("fid::required_fields_note") ?></div> <?= $this->flashmessages() ?> +<?= $this->form()->openTag($form) ?> <br/> <? /* id */ ?> @@ -64,13 +66,10 @@ echo $this->form()->openTag($form); <?php /** @var Element\Select $elemSalutation */ $elemSalutation = $form->get('salutation'); -$elemSalutation->setLabelAttributes(['class' => 'col-md-3']); -$elemSalutation->setAttributes(['class' => 'col-md-3']); -if (!in_array('Salutation', $editableFields)) { - $elemSalutation->setAttribute('readonly', '1'); -} +$elemSalutation->setLabelAttributes(['class' => 'col-md-4']); +$elemSalutation->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemSalutation) ?> <?= $this->formSelect($elemSalutation) ?> </div> @@ -79,29 +78,22 @@ if (!in_array('Salutation', $editableFields)) { <?php /** @var Element\Text $elemAcademicTitle */ $elemAcademicTitle = $form->get('academic_title'); -$elemAcademicTitle->setLabelAttributes(['class' => 'col-md-3']); -$elemAcademicTitle->setAttributes(['class' => 'col-md-3']); -if (!in_array('AcademicTitle', $editableFields)) { - $elemAcademicTitle->setAttribute('readonly', '1'); -} +$elemAcademicTitle->setLabelAttributes(['class' => 'col-md-4']); +$elemAcademicTitle->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemAcademicTitle) ?> <?= $this->formElement($elemAcademicTitle) ?> - <br/> </div> <? /* firstname */ ?> <?php /** @var Element\Text $elemFirstname */ $elemFirstname = $form->get('firstname'); -$elemFirstname->setLabelAttributes(['class' => 'col-md-3']); -$elemFirstname->setAttributes(['class' => 'col-md-3']); -if (!in_array('Firstname', $editableFields)) { - $elemFirstname->setAttribute('readonly', '1'); -} +$elemFirstname->setLabelAttributes(['class' => 'col-md-4']); +$elemFirstname->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemFirstname) ?> <?= $this->formElement($elemFirstname) ?> <?= $this->formElementErrors($elemFirstname) ?> @@ -111,45 +103,23 @@ if (!in_array('Firstname', $editableFields)) { <?php /** @var Element\Text $elemLastname */ $elemLastname = $form->get('lastname'); -$elemLastname->setLabelAttributes(['class' => 'col-md-3']); -$elemLastname->setAttributes(['class' => 'col-md-3']); -if (!in_array('Lastname', $editableFields)) { - $elemLastname->setAttribute('readonly', '1'); -} +$elemLastname->setLabelAttributes(['class' => 'col-md-4']); +$elemLastname->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemLastname) ?> <?= $this->formElement($elemLastname) ?> <?= $this->formElementErrors($elemLastname) ?> </div> -<? /* college */ ?> -<?php -/** @var Element\Text $elemCollege */ -$elemCollege = $form->get('college'); -$elemCollege->setLabelAttributes(['class' => 'col-md-3']); -$elemCollege->setAttributes(['class' => 'col-md-3']); -if (!in_array('College', $editableFields)) { - $elemCollege->setAttribute('readonly', '1'); -} -?> -<div class="row"> - <?= $this->formLabel($elemCollege) ?> - <?= $this->formElement($elemCollege) ?> - <?= $this->formElementErrors($elemCollege) ?> -</div> - <? /* home library */ ?> <?php /** @var Element\Select $elemHomeLibrary */ $elemHomeLibrary = $form->get('home_library'); -$elemHomeLibrary->setLabelAttributes(['class' => 'col-md-3']); -$elemHomeLibrary->setAttributes(['class' => 'col-md-6']); -if (!in_array('HomeLibrary', $editableFields)) { - $elemHomeLibrary->setAttribute('disabled', '1'); -} +$elemHomeLibrary->setLabelAttributes(['class' => 'col-md-4']); +$elemHomeLibrary->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemHomeLibrary) ?> <?= $this->formSelect($elemHomeLibrary) ?> <?= $this->formElementErrors($elemHomeLibrary) ?> @@ -159,15 +129,12 @@ if (!in_array('HomeLibrary', $editableFields)) { <?php /** @var Element\Radio $elemJobTitle */ $elemJobTitle = $form->get('job_title'); -$elemJobTitle->setLabelAttributes(['class' => 'col-md-3']); -$elemJobTitle->setAttributes(['class' => 'col-md-6']); -if (!in_array('JobTitle', $editableFields)) { - $elemJobTitle->setAttribute('readonly', '1'); -} +$elemJobTitle->setLabelAttributes(['class' => 'col-md-4']); +$elemJobTitle->setAttributes(['class' => 'form-control']); ?> -<div class="row"> +<div class="form-group"> <?= $this->formLabel($elemJobTitle) ?> - <?= $this->formElement($elemJobTitle) ?> + <?= $this->formSelect($elemJobTitle) ?> <?= $this->formElementErrors($elemJobTitle) ?> </div> @@ -176,34 +143,29 @@ if (!in_array('JobTitle', $editableFields)) { /** @var Element\Collection $elemPermissions */ /** @var Element\Select[] $elemPermissionsElems */ $elemPermissions = $form->get('permissions'); -$elemPermissions->setLabelAttributes(['class' => 'col-md-3']); $elemPermissionsElems = $elemPermissions->getElements(); $permissions = $this->config['Admin']['permission_options'] ?? []; foreach ($permissions as $permission) { $element = $elemPermissionsElems[$permission]; $element->setLabel("permission_$permission"); - $element->setAttributes(['class' => 'col-md-2']); - $element->setLabelAttributes(['class' => 'col-md-6']); + $element->setAttributes(['class' => 'form-control']); + $element->setLabelAttributes(['class' => 'col-md-4']); $element->setAttribute('id', $element->getName()); $elements[] = $element; } ?> -<div class="row"> - <?= $this->formLabel($elemPermissions) ?> - <div class="col-md-9"> - <?php foreach ($elements as $element): ?> - <div class="row"> - <?= $this->formElement($element) ?> - <?= $this->formLabel($element) ?> - </div> - <? endforeach; ?> - <div class="row"> - <?= $this->formElementErrors($elemPermissions) ?> - </div> - </div> +<h3><?= $this->formLabel($elemPermissions) ?></h3> +<?php foreach ($elements ?? [] as $element): ?> +<div class="form-group"> + <?= $this->formLabel($element) ?> + <?= $this->formElement($element) ?> </div> +<?php endforeach; ?> + +<? /* addresses */ ?> +<?= $this->render('fid/user/address-collection.phtml') ?> <? /* submit button */ ?> <?php @@ -211,10 +173,10 @@ foreach ($permissions as $permission) { $elemSubmit = $form->get('submit'); $elemSubmit->setAttributes(['class' => 'btn btn-primary']); ?> -<div class="row"> +<div class="form-group"> <div class="col-lg-11 col-md-9 col-sm-11 col-xs-12"> <?= $this->formSubmit($elemSubmit) ?> - <a href="<?= $this->url('fid/admin/list') ?>" + <a href="<?= $this->url('myresearch-profile') ?>" class="btn btn-primary"> <?= $this->transEsc('Cancel') ?> </a> @@ -222,4 +184,3 @@ $elemSubmit->setAttributes(['class' => 'btn btn-primary']); </div> <?= $this->form()->closeTag($form) ?> -<!-- fid: admin - edit - END --> \ No newline at end of file