File Manager Lite
Dir:
/home/u540325668/domains/dumbafarm.in/public_html/src/PrestaShopBundle/Form/Admin/Extension
Upload
[..]
AlertsTrackingExtension.php (2.57 KB)
Edit
Rename
Del
ColumnsNumberExtension.php (2.59 KB)
Edit
Rename
Del
CommaTransformerExtension.php (2.23 KB)
Edit
Rename
Del
DefaultEmptyDataExtension.php (3.42 KB)
Edit
Rename
Del
DisablingSwitchExtension.php (7.53 KB)
Edit
Rename
Del
DownloadFileExtension.php (2.05 KB)
Edit
Rename
Del
ExternalLinkExtension.php (3.43 KB)
Edit
Rename
Del
FormThemeExtension.php (5 KB)
Edit
Rename
Del
HelpTextExtension.php (2.08 KB)
Edit
Rename
Del
ModifyAllShopsExtension.php (5.74 KB)
Edit
Rename
Del
MultistoreConfigurationTypeExtension.php (2.68 KB)
Edit
Rename
Del
UnitTypeExtension.php (2.29 KB)
Edit
Rename
Del
Edit: DisablingSwitchExtension.php
<?php /** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * 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.md. * 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 https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ declare(strict_types=1); namespace PrestaShopBundle\Form\Admin\Extension; use Closure; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; /** * This extension allows you to associate a switch disabler component to a form type by setting * the option disabling_switch to true. The component is automatically added to the form thanks to * a form listener and automatically rendered in the prestashop form theme (although you can always * override the rendering if needed). * * The switch state is detected based on your input empty data but you can also define a more accurate * disabled value if needed thanks to the disabled_value option. */ class DisablingSwitchExtension extends AbstractTypeExtension { use DisablingSwitchTrait; public const FIELD_PREFIX = 'disabling_switch_'; public const SWITCH_OPTION = 'disabling_switch'; public const SWITCH_EVENT_OPTION = 'disabling_switch_event'; public const DISABLED_VALUE_OPTION = 'disabled_value'; public const SWITCH_STATE_ON_DISABLE_OPTION = 'switch_state_on_disable'; /** * @var EventSubscriberInterface */ private $addDisablingSwitchListener; public function __construct( EventSubscriberInterface $addDisablingSwitchListener ) { $this->addDisablingSwitchListener = $addDisablingSwitchListener; } /** * {@inheritdoc} */ public static function getExtendedTypes(): iterable { return [ // To add the option on all form types FormType::class, ]; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { // This particular field has the expected option enabled, so we assign the add listener to dynamically add the // associated DisablingSwitchType to the parent $hasToggleOption = $builder->getOption(static::SWITCH_OPTION); if ($hasToggleOption) { $builder->addEventSubscriber($this->addDisablingSwitchListener); } } /** * @param FormView $view * @param FormInterface $form * @param array $options */ public function buildView(FormView $view, FormInterface $form, array $options): void { $switchableParent = $this->getSwitchableParent($form); if ($switchableParent) { $disablingFieldName = DisablingSwitchExtension::FIELD_PREFIX . $switchableParent->getName(); $parent = $switchableParent->getParent(); if ($parent->has($disablingFieldName)) { $shouldBeDisabled = $this->shouldFormBeDisabled($switchableParent, $switchableParent->getData()); // We only set the HTML attribute not the form field option disabled, or else its value will be ignored and // won't be part of the form submitted data, that's why we only set this attribute for the view This will // correctly set the input state on initial rendering and even on submit since buildView happens after the // submitted data is handled by the form $view->vars['attr']['disabled'] = $shouldBeDisabled; } } } /** * The switch option may be defined on a compound input, so we need to get back the parent with the option to get * back the appropriate options and be able to check the disabled status even for children. For non-compound forms * the switchable parent is actually itself. * * @param FormInterface $form * * @return FormInterface|null */ private function getSwitchableParent(FormInterface $form): ?FormInterface { if (!$form->getParent()) { return null; } if ($form->getConfig()->getOption(static::SWITCH_OPTION, false)) { return $form; } return $this->getSwitchableParent($form->getParent()); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver): void { $resolver ->setDefaults([ static::SWITCH_OPTION => false, // We use this value to know if the field state is disabled or not on first rendering, if the value is null // we have other fallback options, the priority is: // - disabled_value // - default_empty_data // - empty_data // // We then compare this value with the form data, if the two values match (strict equality) then the field // is considered disabled and the input will be assigned the disabled attribute. // // You can also specify a callback or a closure for this option this allows more complex use case to define // if the form is considered empty/disabled or not (useful for compound form based on multiple values). // The callback will receive the form data and the FormInterface, it must return true if the field should // be disabled. Keep in mind that the data, which comes from the Form event, can be null quite often, so // your callback should accept nullable data. // // ex: 'disabled_value' => function (?array $data, FormInterface $form): bool { // return empty($data['reduction_type']) || empty($data['reduction_value']); // }, static::DISABLED_VALUE_OPTION => null, // You can define an JS event triggered on which changes static::SWITCH_EVENT_OPTION => null, // Define the state of the switch component when value is disabled (by default on off) static::SWITCH_STATE_ON_DISABLE_OPTION => 'off', ]) ->setAllowedTypes(static::SWITCH_OPTION, 'bool') ->setAllowedTypes(static::DISABLED_VALUE_OPTION, ['null', 'string', 'int', 'array', 'object', 'bool', 'float', 'callback', Closure::class]) ->setAllowedTypes(static::SWITCH_EVENT_OPTION, ['string', 'null']) ->setAllowedTypes(static::SWITCH_STATE_ON_DISABLE_OPTION, 'string') ->setAllowedValues(static::SWITCH_STATE_ON_DISABLE_OPTION, ['off', 'on']) ; } }
Simpan