Skip to content
Snippets Groups Projects
Commit 56a0c97a authored by Sebastian Kehr's avatar Sebastian Kehr :rowboat_tone2: Committed by Dorian Merz
Browse files

refs #16696 [fid] revision of admin edit form

* dislay all user data (mostly in read-only mode)
* exclude most attributes via validation groups
* drop former editable_attributes configuration
parent d3eea281
No related merge requests found
......@@ -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'
......
<?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
];
......@@ -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
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment