Skip to content
Snippets Groups Projects
Commit 382e2565 authored by Robert Lange's avatar Robert Lange
Browse files

refs #20900 [fid_adlr] make home address fields optional

* allow empty inputs in home address if checkbox for delivery_address is deactivated
* set required attributes by javascript in new introduced user_delivery_address.js - except for line 2
* add new translation for checkbox label
* code styles / add comments
* add horizontal row as divider between user data sections
parent 966e2e1c
No related merge requests found
......@@ -125,7 +125,8 @@ return [
'label' => 'label_address_1_line_1',
],
'attributes' => [
'autocomplete' => 'address-line1'
'autocomplete' => 'address-line1',
'required' => true
],
],
],
......@@ -149,7 +150,8 @@ return [
'label' => 'label_address_1_zip',
],
'attributes' => [
'autocomplete' => 'postal-code'
'autocomplete' => 'postal-code',
'required' => true
],
],
],
......@@ -161,7 +163,8 @@ return [
'label' => 'label_address_1_city',
],
'attributes' => [
'autocomplete' => 'city'
'autocomplete' => 'city',
'required' => true,
],
],
],
......@@ -173,7 +176,8 @@ return [
'label' => 'label_address_1_country',
],
'attributes' => [
'autocomplete' => 'country-name'
'autocomplete' => 'country-name',
'required' => true,
],
],
],
......
<?php
/**
* Validator for users home address inputs
*
* PHP version 7
*
* Copyright (C) 2019 Leipzig University Library
*
* This program is free software; you can redistribute it and/or modify
......@@ -15,15 +19,26 @@
* 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
* @category VuFind
* @package Validator
* @author Sebastian Kehr <kehr@ub.uni-leipzig.de>
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @link https://vufind.org/wiki/development Wiki
*/
namespace fid_adlr\Validator;
use fid\InputFilter\RootAwareBaseInputFilter;
use Zend\Validator\AbstractValidator;
/**
* Validator for users home address inputs
*
* @category VuFind
* @package Validator
* @author Sebastian Kehr <kehr@ub.uni-leipzig.de>
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @link https://vufind.org/wiki/development Wiki
*/
class HomeAddressField extends AbstractValidator
{
public const ERROR = 'error';
......@@ -33,14 +48,24 @@ class HomeAddressField extends AbstractValidator
self::ERROR => 'error_home_address_value',
];
/**
* Check if inputs are valid
*
* @param string $value current input value
* @param array|null $context all values
*
* @return bool
*/
public function isValid($value, array $context = null)
{
$empty = $context['line1'] . $context['line2'] . $context['zip']
. $context['city'] . $context['country'] === '';
$values = $context[RootAwareBaseInputFilter::ROOT]->getValues();
$valid = $values['data']['delivery_address'] ? $value !== ''
: $empty || $value !== '';
$active = $values['data']['delivery_address'];
if (!$active) {
return true;
}
$valid = !empty($value);
if (!$valid) {
$this->error(self::ERROR);
......@@ -48,4 +73,4 @@ class HomeAddressField extends AbstractValidator
return $valid;
}
}
\ No newline at end of file
}
function showHidePrivateAddress()
{
var requiredInputs = ["line1", "zip", "city", "country"];
if($('input[id="delivery_address"]').prop('checked')) {
$("[id=home-address-container]").fadeIn(300);
$.each(requiredInputs, function() {
$(`input[name="addresses[1][${this}]"]`).attr("required", "required");
});
} else {
$("[id=home-address-container]").fadeOut(300);
$.each(requiredInputs, function() {
$(`input[name="addresses[1][${this}]"]`).removeAttr('required');
});
}
}
$(document).ready(function(){
$('input[id="delivery_address"]').on('change', showHidePrivateAddress);
showHidePrivateAddress();
});
......@@ -34,7 +34,7 @@ label_address_1_country = Land
error_home_address_value = "Dieser Wert wird benötigt."
label_delivery_address = Meine Privatadresse als Lieferadresse verwenden
label_delivery_address = Abweichende Privatadresse als Lieferadresse angeben
label_newsletter = Ja, ich möchte regelmäßig Informationen zu Neuerungen und Neuerscheinungen bei adlr.link per E-Mail erhalten (ca. 1x monatlich).
label_deleted = Zur Löschung vorgemerkt
......
......@@ -35,7 +35,7 @@ label_address_1_country = Country
error_home_address_value = "This value is required."
label_delivery_address = Use my home address as delivery address
label_delivery_address = Use home address as shipping address
label_newsletter = Yes, I would like to receive regular information about new releases and improvements at adlr.link by e-mail (approx. once a month).
label_deleted = Flagged for deletion
......
......@@ -3268,3 +3268,10 @@ footer {
min-height: unset;
}
}
// #20900 create / update user form
hr {
background-color: $midnight-medium;
border-width: 0;
height: 3px;
}
......@@ -88,7 +88,6 @@ $elemPassword->setAttributes(['class' => 'form-control']);
<div class="col-md-12"><?= $this->translate("fid::note_password") ?></div>
<?= $this->formElementErrors($elemPassword) ?>
</div>
<?php /* password confirmation */ ?>
<?php
/** @var Element\Password $elemPasswordConfirmation */
......@@ -102,6 +101,8 @@ $elemPasswordConfirmation->setAttributes(['class' => 'form-control']);
<?= $this->formElementErrors($elemPasswordConfirmation) ?>
</div>
<hr/>
<?php /* salutation */ ?>
<?php
/** @var Element\Select $elemSalutation */
......
......@@ -58,61 +58,65 @@ $elemLine1 = $address->get('line1');
$elemLine1->setLabelAttributes(['class' => 'col-md-4']);
$elemLine1->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemLine1) ?>
<?= $this->formElement($elemLine1) ?>
<?= $this->formElementErrors($elemLine1) ?>
</div>
<div id="home-address-container">
<div class="form-group">
<?= $this->formLabel($elemLine1) ?>
<?= $this->formElement($elemLine1) ?>
<?= $this->formElementErrors($elemLine1) ?>
</div>
<?php /* second line */ ?>
<?php
/** @var Element\Text $elemLine2 */
$elemLine2 = $address->get('line2');
$elemLine2->setLabelAttributes(['class' => 'col-md-4']);
$elemLine2->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemLine2) ?>
<?= $this->formElement($elemLine2) ?>
<?= $this->formElementErrors($elemLine2) ?>
</div>
<?php /* second line */ ?>
<?php
/** @var Element\Text $elemLine2 */
$elemLine2 = $address->get('line2');
$elemLine2->setLabelAttributes(['class' => 'col-md-4']);
$elemLine2->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemLine2) ?>
<?= $this->formElement($elemLine2) ?>
<?= $this->formElementErrors($elemLine2) ?>
</div>
<?php /* address zip */ ?>
<?php
/** @var Element\Text $elemZip */
$elemZip = $address->get('zip');
$elemZip->setLabelAttributes(['class' => 'col-md-4']);
$elemZip->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemZip) ?>
<?= $this->formElement($elemZip) ?>
<?= $this->formElementErrors($elemZip) ?>
</div>
<?php /* address zip */ ?>
<?php
/** @var Element\Text $elemZip */
$elemZip = $address->get('zip');
$elemZip->setLabelAttributes(['class' => 'col-md-4']);
$elemZip->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemZip) ?>
<?= $this->formElement($elemZip) ?>
<?= $this->formElementErrors($elemZip) ?>
</div>
<?php /* city */ ?>
<?php
/** @var Element\Text $elemCity */
$elemCity = $address->get('city');
$elemCity->setLabelAttributes(['class' => 'col-md-4']);
$elemCity->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemCity) ?>
<?= $this->formElement($elemCity) ?>
<?= $this->formElementErrors($elemCity) ?>
</div>
<?php /* city */ ?>
<?php
/** @var Element\Text $elemCity */
$elemCity = $address->get('city');
$elemCity->setLabelAttributes(['class' => 'col-md-4']);
$elemCity->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemCity) ?>
<?= $this->formElement($elemCity) ?>
<?= $this->formElementErrors($elemCity) ?>
</div>
<?php /* country */ ?>
<?php
/** @var Element\Text $elemCountry */
$elemCountry = $address->get('country');
$elemCountry->setLabelAttributes(['class' => 'col-md-4']);
$elemCountry->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemCountry) ?>
<?= $this->formElement($elemCountry) ?>
<?= $this->formElementErrors($elemCountry) ?>
<?php /* country */ ?>
<?php
/** @var Element\Text $elemCountry */
$elemCountry = $address->get('country');
$elemCountry->setLabelAttributes(['class' => 'col-md-4']);
$elemCountry->setAttributes(['class' => 'form-control']);
?>
<div class="form-group">
<?= $this->formLabel($elemCountry) ?>
<?= $this->formElement($elemCountry) ?>
<?= $this->formElementErrors($elemCountry) ?>
</div>
</div>
<hr/>
<?=$this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'user_delivery_address.js', 'SET');?>
<!-- fid_adlr: fid - user - home-address-fieldset - END -->
......@@ -27,7 +27,7 @@ use Zend\Form\Element;
/** @var Fieldset $address */
$address = $this->address;
?>
<hr/>
<h3><?= $this->translate('fid::' . $address->getLabel()) ?></h3>
<?php /* id */ ?>
......@@ -110,4 +110,5 @@ $elemCountry->setAttributes(['class' => 'form-control']);
<?= $this->formElement($elemCountry) ?>
<?= $this->formElementErrors($elemCountry) ?>
</div>
<hr/>
<!-- fid_adlr: fid - user - office-address-fieldset - END -->
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