Files
bio-concept-labo/web/classes/form/CustomerFormatter.php
2019-11-20 07:44:43 +01:00

254 lines
7.9 KiB
PHP

<?php
/**
* 2007-2018 PrestaShop.
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2018 PrestaShop SA
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
use Symfony\Component\Translation\TranslatorInterface;
class CustomerFormatterCore implements FormFormatterInterface
{
private $translator;
private $language;
private $ask_for_birthdate = true;
private $ask_for_partner_optin = true;
private $partner_optin_is_required = true;
private $ask_for_password = true;
private $password_is_required = true;
private $ask_for_new_password = false;
public function __construct(
TranslatorInterface $translator,
Language $language
) {
$this->translator = $translator;
$this->language = $language;
}
public function setAskForBirthdate($ask_for_birthdate)
{
$this->ask_for_birthdate = $ask_for_birthdate;
return $this;
}
public function setAskForPartnerOptin($ask_for_partner_optin)
{
$this->ask_for_partner_optin = $ask_for_partner_optin;
return $this;
}
public function setPartnerOptinRequired($partner_optin_is_required)
{
$this->partner_optin_is_required = $partner_optin_is_required;
return $this;
}
public function setAskForPassword($ask_for_password)
{
$this->ask_for_password = $ask_for_password;
return $this;
}
public function setAskForNewPassword($ask_for_new_password)
{
$this->ask_for_new_password = $ask_for_new_password;
return $this;
}
public function setPasswordRequired($password_is_required)
{
$this->password_is_required = $password_is_required;
return $this;
}
public function getFormat()
{
$format = [];
$format['id_customer'] = (new FormField())
->setName('id_customer')
->setType('hidden')
;
$genders = Gender::getGenders($this->language->id);
if ($genders->count() > 0) {
$genderField = (new FormField())
->setName('id_gender')
->setType('radio-buttons')
->setLabel(
$this->translator->trans(
'Social title', [], 'Shop.Forms.Labels'
)
)
;
foreach ($genders as $gender) {
$genderField->addAvailableValue($gender->id, $gender->name);
}
$format[$genderField->getName()] = $genderField;
}
$format['firstname'] = (new FormField())
->setName('firstname')
->setLabel(
$this->translator->trans(
'First name', [], 'Shop.Forms.Labels'
)
)
->setRequired(true)
;
$format['lastname'] = (new FormField())
->setName('lastname')
->setLabel(
$this->translator->trans(
'Last name', [], 'Shop.Forms.Labels'
)
)
->setRequired(true)
;
if (Configuration::get('PS_B2B_ENABLE')) {
$format['company'] = (new FormField())
->setName('company')
->setType('text')
->setLabel($this->translator->trans(
'Company', [], 'Shop.Forms.Labels'
));
$format['siret'] = (new FormField())
->setName('siret')
->setType('text')
->setLabel($this->translator->trans(
// Please localize this string with the applicable registration number type in your country. For example : "SIRET" in France and "Código fiscal" in Spain.
'Identification number', [], 'Shop.Forms.Labels'
));
}
$format['email'] = (new FormField())
->setName('email')
->setType('email')
->setLabel(
$this->translator->trans(
'Email', [], 'Shop.Forms.Labels'
)
)
->setRequired(true)
;
if ($this->ask_for_password) {
$format['password'] = (new FormField())
->setName('password')
->setType('password')
->setLabel(
$this->translator->trans(
'Password', [], 'Shop.Forms.Labels'
)
)
->setRequired($this->password_is_required)
;
}
if ($this->ask_for_new_password) {
$format['new_password'] = (new FormField())
->setName('new_password')
->setType('password')
->setLabel(
$this->translator->trans(
'New password', [], 'Shop.Forms.Labels'
)
)
;
}
if ($this->ask_for_birthdate) {
$format['birthday'] = (new FormField())
->setName('birthday')
->setType('text')
->setLabel(
$this->translator->trans(
'Birthdate', [], 'Shop.Forms.Labels'
)
)
->addAvailableValue('placeholder', Tools::getDateFormat())
->addAvailableValue(
'comment',
$this->translator->trans('(E.g.: %date_format%)', array('%date_format%' => Tools::formatDateStr('31 May 1970')), 'Shop.Forms.Help')
)
;
}
if ($this->ask_for_partner_optin) {
$format['optin'] = (new FormField())
->setName('optin')
->setType('checkbox')
->setLabel(
$this->translator->trans(
'Receive offers from our partners', [], 'Shop.Theme.Customeraccount'
)
)
->setRequired($this->partner_optin_is_required)
;
}
// ToDo, replace the hook exec with HookFinder when the associated PR will be merged
$additionalCustomerFormFields = Hook::exec('additionalCustomerFormFields', array(), null, true);
if (is_array($additionalCustomerFormFields)) {
foreach ($additionalCustomerFormFields as $moduleName => $additionnalFormFields) {
if (!is_array($additionnalFormFields)) {
continue;
}
foreach ($additionnalFormFields as $formField) {
$formField->moduleName = $moduleName;
$format[$moduleName . '_' . $formField->getName()] = $formField;
}
}
}
// TODO: TVA etc.?
return $this->addConstraints($format);
}
private function addConstraints(array $format)
{
$constraints = Customer::$definition['fields'];
foreach ($format as $field) {
if (!empty($constraints[$field->getName()]['validate'])) {
$field->addConstraint(
$constraints[$field->getName()]['validate']
);
}
}
return $format;
}
}