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
Branches
Tags
No related merge requests found
...@@ -125,7 +125,8 @@ return [ ...@@ -125,7 +125,8 @@ return [
'label' => 'label_address_1_line_1', 'label' => 'label_address_1_line_1',
], ],
'attributes' => [ 'attributes' => [
'autocomplete' => 'address-line1' 'autocomplete' => 'address-line1',
'required' => true
], ],
], ],
], ],
...@@ -149,7 +150,8 @@ return [ ...@@ -149,7 +150,8 @@ return [
'label' => 'label_address_1_zip', 'label' => 'label_address_1_zip',
], ],
'attributes' => [ 'attributes' => [
'autocomplete' => 'postal-code' 'autocomplete' => 'postal-code',
'required' => true
], ],
], ],
], ],
...@@ -161,7 +163,8 @@ return [ ...@@ -161,7 +163,8 @@ return [
'label' => 'label_address_1_city', 'label' => 'label_address_1_city',
], ],
'attributes' => [ 'attributes' => [
'autocomplete' => 'city' 'autocomplete' => 'city',
'required' => true,
], ],
], ],
], ],
...@@ -173,7 +176,8 @@ return [ ...@@ -173,7 +176,8 @@ return [
'label' => 'label_address_1_country', 'label' => 'label_address_1_country',
], ],
'attributes' => [ 'attributes' => [
'autocomplete' => 'country-name' 'autocomplete' => 'country-name',
'required' => true,
], ],
], ],
], ],
......
<?php <?php
/** /**
* Validator for users home address inputs
*
* PHP version 7
*
* Copyright (C) 2019 Leipzig University Library * Copyright (C) 2019 Leipzig University Library
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -15,15 +19,26 @@ ...@@ -15,15 +19,26 @@
* with this program; if not, write to the Free Software Foundation, Inc., * with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* @author Sebastian Kehr <kehr@ub.uni-leipzig.de> * @category VuFind
* @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 * @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; namespace fid_adlr\Validator;
use fid\InputFilter\RootAwareBaseInputFilter; use fid\InputFilter\RootAwareBaseInputFilter;
use Zend\Validator\AbstractValidator; 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 class HomeAddressField extends AbstractValidator
{ {
public const ERROR = 'error'; public const ERROR = 'error';
...@@ -33,14 +48,24 @@ class HomeAddressField extends AbstractValidator ...@@ -33,14 +48,24 @@ class HomeAddressField extends AbstractValidator
self::ERROR => 'error_home_address_value', 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) public function isValid($value, array $context = null)
{ {
$empty = $context['line1'] . $context['line2'] . $context['zip']
. $context['city'] . $context['country'] === '';
$values = $context[RootAwareBaseInputFilter::ROOT]->getValues(); $values = $context[RootAwareBaseInputFilter::ROOT]->getValues();
$valid = $values['data']['delivery_address'] ? $value !== '' $active = $values['data']['delivery_address'];
: $empty || $value !== '';
if (!$active) {
return true;
}
$valid = !empty($value);
if (!$valid) { if (!$valid) {
$this->error(self::ERROR); $this->error(self::ERROR);
...@@ -48,4 +73,4 @@ class HomeAddressField extends AbstractValidator ...@@ -48,4 +73,4 @@ class HomeAddressField extends AbstractValidator
return $valid; 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 ...@@ -34,7 +34,7 @@ label_address_1_country = Land
error_home_address_value = "Dieser Wert wird benötigt." 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_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 label_deleted = Zur Löschung vorgemerkt
......
...@@ -35,7 +35,7 @@ label_address_1_country = Country ...@@ -35,7 +35,7 @@ label_address_1_country = Country
error_home_address_value = "This value is required." 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_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 label_deleted = Flagged for deletion
......
...@@ -3268,3 +3268,10 @@ footer { ...@@ -3268,3 +3268,10 @@ footer {
min-height: unset; 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']); ...@@ -88,7 +88,6 @@ $elemPassword->setAttributes(['class' => 'form-control']);
<div class="col-md-12"><?= $this->translate("fid::note_password") ?></div> <div class="col-md-12"><?= $this->translate("fid::note_password") ?></div>
<?= $this->formElementErrors($elemPassword) ?> <?= $this->formElementErrors($elemPassword) ?>
</div> </div>
<?php /* password confirmation */ ?> <?php /* password confirmation */ ?>
<?php <?php
/** @var Element\Password $elemPasswordConfirmation */ /** @var Element\Password $elemPasswordConfirmation */
...@@ -102,6 +101,8 @@ $elemPasswordConfirmation->setAttributes(['class' => 'form-control']); ...@@ -102,6 +101,8 @@ $elemPasswordConfirmation->setAttributes(['class' => 'form-control']);
<?= $this->formElementErrors($elemPasswordConfirmation) ?> <?= $this->formElementErrors($elemPasswordConfirmation) ?>
</div> </div>
<hr/>
<?php /* salutation */ ?> <?php /* salutation */ ?>
<?php <?php
/** @var Element\Select $elemSalutation */ /** @var Element\Select $elemSalutation */
......
...@@ -58,61 +58,65 @@ $elemLine1 = $address->get('line1'); ...@@ -58,61 +58,65 @@ $elemLine1 = $address->get('line1');
$elemLine1->setLabelAttributes(['class' => 'col-md-4']); $elemLine1->setLabelAttributes(['class' => 'col-md-4']);
$elemLine1->setAttributes(['class' => 'form-control']); $elemLine1->setAttributes(['class' => 'form-control']);
?> ?>
<div class="form-group"> <div id="home-address-container">
<?= $this->formLabel($elemLine1) ?> <div class="form-group">
<?= $this->formElement($elemLine1) ?> <?= $this->formLabel($elemLine1) ?>
<?= $this->formElementErrors($elemLine1) ?> <?= $this->formElement($elemLine1) ?>
</div> <?= $this->formElementErrors($elemLine1) ?>
</div>
<?php /* second line */ ?> <?php /* second line */ ?>
<?php <?php
/** @var Element\Text $elemLine2 */ /** @var Element\Text $elemLine2 */
$elemLine2 = $address->get('line2'); $elemLine2 = $address->get('line2');
$elemLine2->setLabelAttributes(['class' => 'col-md-4']); $elemLine2->setLabelAttributes(['class' => 'col-md-4']);
$elemLine2->setAttributes(['class' => 'form-control']); $elemLine2->setAttributes(['class' => 'form-control']);
?> ?>
<div class="form-group"> <div class="form-group">
<?= $this->formLabel($elemLine2) ?> <?= $this->formLabel($elemLine2) ?>
<?= $this->formElement($elemLine2) ?> <?= $this->formElement($elemLine2) ?>
<?= $this->formElementErrors($elemLine2) ?> <?= $this->formElementErrors($elemLine2) ?>
</div> </div>
<?php /* address zip */ ?> <?php /* address zip */ ?>
<?php <?php
/** @var Element\Text $elemZip */ /** @var Element\Text $elemZip */
$elemZip = $address->get('zip'); $elemZip = $address->get('zip');
$elemZip->setLabelAttributes(['class' => 'col-md-4']); $elemZip->setLabelAttributes(['class' => 'col-md-4']);
$elemZip->setAttributes(['class' => 'form-control']); $elemZip->setAttributes(['class' => 'form-control']);
?> ?>
<div class="form-group"> <div class="form-group">
<?= $this->formLabel($elemZip) ?> <?= $this->formLabel($elemZip) ?>
<?= $this->formElement($elemZip) ?> <?= $this->formElement($elemZip) ?>
<?= $this->formElementErrors($elemZip) ?> <?= $this->formElementErrors($elemZip) ?>
</div> </div>
<?php /* city */ ?> <?php /* city */ ?>
<?php <?php
/** @var Element\Text $elemCity */ /** @var Element\Text $elemCity */
$elemCity = $address->get('city'); $elemCity = $address->get('city');
$elemCity->setLabelAttributes(['class' => 'col-md-4']); $elemCity->setLabelAttributes(['class' => 'col-md-4']);
$elemCity->setAttributes(['class' => 'form-control']); $elemCity->setAttributes(['class' => 'form-control']);
?> ?>
<div class="form-group"> <div class="form-group">
<?= $this->formLabel($elemCity) ?> <?= $this->formLabel($elemCity) ?>
<?= $this->formElement($elemCity) ?> <?= $this->formElement($elemCity) ?>
<?= $this->formElementErrors($elemCity) ?> <?= $this->formElementErrors($elemCity) ?>
</div> </div>
<?php /* country */ ?> <?php /* country */ ?>
<?php <?php
/** @var Element\Text $elemCountry */ /** @var Element\Text $elemCountry */
$elemCountry = $address->get('country'); $elemCountry = $address->get('country');
$elemCountry->setLabelAttributes(['class' => 'col-md-4']); $elemCountry->setLabelAttributes(['class' => 'col-md-4']);
$elemCountry->setAttributes(['class' => 'form-control']); $elemCountry->setAttributes(['class' => 'form-control']);
?> ?>
<div class="form-group"> <div class="form-group">
<?= $this->formLabel($elemCountry) ?> <?= $this->formLabel($elemCountry) ?>
<?= $this->formElement($elemCountry) ?> <?= $this->formElement($elemCountry) ?>
<?= $this->formElementErrors($elemCountry) ?> <?= $this->formElementErrors($elemCountry) ?>
</div>
</div> </div>
<hr/>
<?=$this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'user_delivery_address.js', 'SET');?>
<!-- fid_adlr: fid - user - home-address-fieldset - END --> <!-- fid_adlr: fid - user - home-address-fieldset - END -->
...@@ -27,7 +27,7 @@ use Zend\Form\Element; ...@@ -27,7 +27,7 @@ use Zend\Form\Element;
/** @var Fieldset $address */ /** @var Fieldset $address */
$address = $this->address; $address = $this->address;
?> ?>
<hr/>
<h3><?= $this->translate('fid::' . $address->getLabel()) ?></h3> <h3><?= $this->translate('fid::' . $address->getLabel()) ?></h3>
<?php /* id */ ?> <?php /* id */ ?>
...@@ -110,4 +110,5 @@ $elemCountry->setAttributes(['class' => 'form-control']); ...@@ -110,4 +110,5 @@ $elemCountry->setAttributes(['class' => 'form-control']);
<?= $this->formElement($elemCountry) ?> <?= $this->formElement($elemCountry) ?>
<?= $this->formElementErrors($elemCountry) ?> <?= $this->formElementErrors($elemCountry) ?>
</div> </div>
<hr/>
<!-- fid_adlr: fid - user - office-address-fieldset - END --> <!-- 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