tax management
This commit is contained in:
45
core/lib/Thelia/Core/Form/Type/TheliaType.php
Normal file
45
core/lib/Thelia/Core/Form/Type/TheliaType.php
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
namespace Thelia\Core\Form\Type;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\FormInterface;
|
||||||
|
use Symfony\Component\Form\FormView;
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||||
|
|
||||||
|
class TheliaType extends AbstractType
|
||||||
|
{
|
||||||
|
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
||||||
|
{
|
||||||
|
$resolver->setDefaults(array(
|
||||||
|
'instance' => false,
|
||||||
|
'type' => false,
|
||||||
|
'options' => false,
|
||||||
|
));
|
||||||
|
|
||||||
|
$resolver->setAllowedTypes(array(
|
||||||
|
'instance' => array('Thelia\Type\TypeInterface'),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function buildView(FormView $view, FormInterface $form, array $options)
|
||||||
|
{
|
||||||
|
$view->vars = array_replace($view->vars, array(
|
||||||
|
'instance' => $options['instance'],
|
||||||
|
'type' => $options['type'],
|
||||||
|
'options' => $options['options'],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParent()
|
||||||
|
{
|
||||||
|
return 'form';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'thelia_type';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -254,7 +254,7 @@ abstract class BaseLoop
|
|||||||
*
|
*
|
||||||
* @param $pagination
|
* @param $pagination
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return LoopResult
|
||||||
*/
|
*/
|
||||||
abstract public function exec(&$pagination);
|
abstract public function exec(&$pagination);
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,11 @@
|
|||||||
/*************************************************************************************/
|
/*************************************************************************************/
|
||||||
namespace Thelia\Core\Template\Smarty\Plugins;
|
namespace Thelia\Core\Template\Smarty\Plugins;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
|
use Thelia\Core\Form\Type\TheliaType;
|
||||||
use Thelia\Form\BaseForm;
|
use Thelia\Form\BaseForm;
|
||||||
use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
|
use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
@@ -56,6 +60,8 @@ use Thelia\Core\Template\ParserContext;
|
|||||||
*/
|
*/
|
||||||
class Form extends AbstractSmartyPlugin
|
class Form extends AbstractSmartyPlugin
|
||||||
{
|
{
|
||||||
|
static private $taggedFieldsStack = null;
|
||||||
|
static private $taggedFieldsStackPosition = null;
|
||||||
|
|
||||||
protected $request;
|
protected $request;
|
||||||
protected $parserContext;
|
protected $parserContext;
|
||||||
@@ -118,11 +124,16 @@ class Form extends AbstractSmartyPlugin
|
|||||||
|
|
||||||
$template->assign("value", $fieldValue);
|
$template->assign("value", $fieldValue);
|
||||||
|
|
||||||
|
$template->assign("options", $formFieldView->vars);
|
||||||
|
|
||||||
// If Checkbox input type
|
// If Checkbox input type
|
||||||
if ($fieldVars['checked'] !== null) {
|
if ($fieldVars['checked'] !== null) {
|
||||||
$this->renderFormFieldCheckBox($template, $formFieldView['checked']);
|
$this->renderFormFieldCheckBox($template, $formFieldView['checked']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//data
|
||||||
|
$template->assign("data", $fieldVars['data']);
|
||||||
|
|
||||||
$template->assign("label", $fieldVars["label"]);
|
$template->assign("label", $fieldVars["label"]);
|
||||||
$template->assign("label_attr", $fieldVars["label_attr"]);
|
$template->assign("label_attr", $fieldVars["label_attr"]);
|
||||||
|
|
||||||
@@ -143,18 +154,51 @@ class Form extends AbstractSmartyPlugin
|
|||||||
$template->assign("attr", implode(" ", $attr));
|
$template->assign("attr", implode(" ", $attr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function assignFormTypeValues($template, $formFieldConfig, $formFieldView)
|
||||||
|
{
|
||||||
|
$formFieldType = $formFieldConfig->getType()->getInnerType();
|
||||||
|
|
||||||
|
/* access to choices */
|
||||||
|
if($formFieldType instanceof ChoiceType) {
|
||||||
|
$template->assign("choices", $formFieldView->vars['choices']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* access to collections */
|
||||||
|
if($formFieldType instanceof CollectionType) {
|
||||||
|
if( true === $formFieldConfig->getOption('prototype') ) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* access to thelia type */
|
||||||
|
if($formFieldType instanceof TheliaType) {
|
||||||
|
$template->assign("formType", $formFieldView->vars['type']);
|
||||||
|
|
||||||
|
switch($formFieldView->vars['type']) {
|
||||||
|
case "choice":
|
||||||
|
if(!isset($formFieldView->vars['options']['choices']) || !is_array($formFieldView->vars['options']['choices'])) {
|
||||||
|
//throw new
|
||||||
|
}
|
||||||
|
$choices = array();
|
||||||
|
foreach($formFieldView->vars['options']['choices'] as $value => $choice) {
|
||||||
|
$choices[] = new ChoiceView($value, $value, $choice);
|
||||||
|
}
|
||||||
|
$template->assign("choices", $choices);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function renderFormField($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
public function renderFormField($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
{
|
{
|
||||||
if ($repeat) {
|
if ($repeat) {
|
||||||
|
|
||||||
$formFieldView = $this->getFormFieldView($params);
|
$formFieldView = $this->getFormFieldView($params);
|
||||||
|
$formFieldConfig = $this->getFormFieldConfig($params);
|
||||||
|
|
||||||
$template->assign("options", $formFieldView->vars);
|
$this->assignFormTypeValues($template, $formFieldConfig, $formFieldView);
|
||||||
|
|
||||||
/* access to choices */
|
|
||||||
if(isset($formFieldView->vars['choices'])) {
|
|
||||||
$template->assign("choices", $formFieldView->vars['choices']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$value = $formFieldView->vars["value"];
|
$value = $formFieldView->vars["value"];
|
||||||
/* FIXME: doesnt work. We got "This form should not contain extra fields." error.
|
/* FIXME: doesnt work. We got "This form should not contain extra fields." error.
|
||||||
@@ -185,6 +229,38 @@ $this->assignFieldValues($template, $formFieldView->vars["full_name"], $fieldVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function renderTaggedFormFields($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
|
{
|
||||||
|
if(null === $content) {
|
||||||
|
self::$taggedFieldsStack = $this->getFormFieldsFromTag($params);
|
||||||
|
self::$taggedFieldsStackPosition = 0;
|
||||||
|
} else {
|
||||||
|
self::$taggedFieldsStackPosition++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset(self::$taggedFieldsStack[self::$taggedFieldsStackPosition])) {
|
||||||
|
$this->assignFieldValues(
|
||||||
|
$template,
|
||||||
|
self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['view']->vars["full_name"],
|
||||||
|
self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['view']->vars["value"],
|
||||||
|
self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['view']->vars
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assignFormTypeValues($template, self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['config'], self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['view']);
|
||||||
|
|
||||||
|
self::$taggedFieldsStack[self::$taggedFieldsStackPosition]['view']->setRendered();
|
||||||
|
|
||||||
|
$repeat = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $repeat) {
|
||||||
|
self::$taggedFieldsStack = null;
|
||||||
|
self::$taggedFieldsStackPosition = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
public function renderHiddenFormField($params, \Smarty_Internal_Template $template)
|
public function renderHiddenFormField($params, \Smarty_Internal_Template $template)
|
||||||
{
|
{
|
||||||
$attrFormat = '%s="%s"';
|
$attrFormat = '%s="%s"';
|
||||||
@@ -266,6 +342,48 @@ $this->assignFieldValues($template, $formFieldView->vars["full_name"], $fieldVar
|
|||||||
return $instance->getView()[$fieldName];
|
return $instance->getView()[$fieldName];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getFormFieldsFromTag($params)
|
||||||
|
{
|
||||||
|
$instance = $this->getInstanceFromParams($params);
|
||||||
|
|
||||||
|
$tag = $this->getParam($params, 'tag');
|
||||||
|
|
||||||
|
if (null == $tag)
|
||||||
|
throw new \InvalidArgumentException("'tag' parameter is missing");
|
||||||
|
|
||||||
|
$viewList = array();
|
||||||
|
foreach($instance->getView() as $view) {
|
||||||
|
if(isset($view->vars['attr']['tag']) && $tag == $view->vars['attr']['tag']) {
|
||||||
|
$fieldData = $instance->getForm()->all()[$view->vars['name']];
|
||||||
|
$viewList[] = array(
|
||||||
|
'view' => $view,
|
||||||
|
'config' => $fieldData->getConfig(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $viewList;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFormFieldConfig($params)
|
||||||
|
{
|
||||||
|
$instance = $this->getInstanceFromParams($params);
|
||||||
|
|
||||||
|
$fieldName = $this->getParam($params, 'field');
|
||||||
|
|
||||||
|
if (null == $fieldName) {
|
||||||
|
throw new \InvalidArgumentException("'field' parameter is missing");
|
||||||
|
}
|
||||||
|
|
||||||
|
$fieldData = $instance->getForm()->all()[$fieldName];
|
||||||
|
|
||||||
|
if (empty( $fieldData )) {
|
||||||
|
throw new \InvalidArgumentException(sprintf("Field name '%s' not found in form %s children", $fieldName, $instance->getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fieldData->getConfig();
|
||||||
|
}
|
||||||
|
|
||||||
protected function getInstanceFromParams($params)
|
protected function getInstanceFromParams($params)
|
||||||
{
|
{
|
||||||
$instance = $this->getParam($params, 'form');
|
$instance = $this->getParam($params, 'form');
|
||||||
@@ -304,6 +422,7 @@ $this->assignFieldValues($template, $formFieldView->vars["full_name"], $fieldVar
|
|||||||
return array(
|
return array(
|
||||||
new SmartyPluginDescriptor("block", "form", $this, "generateForm"),
|
new SmartyPluginDescriptor("block", "form", $this, "generateForm"),
|
||||||
new SmartyPluginDescriptor("block", "form_field", $this, "renderFormField"),
|
new SmartyPluginDescriptor("block", "form_field", $this, "renderFormField"),
|
||||||
|
new SmartyPluginDescriptor("block", "form_tagged_fields", $this, "renderTaggedFormFields"),
|
||||||
new SmartyPluginDescriptor("function", "form_hidden_fields", $this, "renderHiddenFormField"),
|
new SmartyPluginDescriptor("function", "form_hidden_fields", $this, "renderHiddenFormField"),
|
||||||
new SmartyPluginDescriptor("function", "form_enctype", $this, "formEnctype"),
|
new SmartyPluginDescriptor("function", "form_enctype", $this, "formEnctype"),
|
||||||
new SmartyPluginDescriptor("block", "form_error", $this, "formError")
|
new SmartyPluginDescriptor("block", "form_error", $this, "formError")
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ class TheliaLoop extends AbstractSmartyPlugin
|
|||||||
/**
|
/**
|
||||||
* @param $smartyParams
|
* @param $smartyParams
|
||||||
*
|
*
|
||||||
* @return object
|
* @return BaseLoop
|
||||||
* @throws \Thelia\Core\Template\Element\Exception\InvalidElementException
|
* @throws \Thelia\Core\Template\Element\Exception\InvalidElementException
|
||||||
* @throws \Thelia\Core\Template\Element\Exception\ElementNotFoundException
|
* @throws \Thelia\Core\Template\Element\Exception\ElementNotFoundException
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ namespace Thelia\Form;
|
|||||||
|
|
||||||
use Symfony\Component\Validator\Constraints;
|
use Symfony\Component\Validator\Constraints;
|
||||||
use Symfony\Component\Validator\Constraints\NotBlank;
|
use Symfony\Component\Validator\Constraints\NotBlank;
|
||||||
|
use Thelia\Core\Form\Type\TheliaType;
|
||||||
use Thelia\Core\Translation\Translator;
|
use Thelia\Core\Translation\Translator;
|
||||||
use Thelia\TaxEngine\TaxEngine;
|
use Thelia\TaxEngine\TaxEngine;
|
||||||
use Thelia\TaxEngine\TaxType;
|
use Thelia\TaxEngine\TaxType;
|
||||||
@@ -36,10 +37,12 @@ class TaxCreationForm extends BaseForm
|
|||||||
{
|
{
|
||||||
$types = TaxEngine::getInstance()->getTaxTypeList();
|
$types = TaxEngine::getInstance()->getTaxTypeList();
|
||||||
$typeList = array();
|
$typeList = array();
|
||||||
|
$requirementList = array();
|
||||||
foreach($types as $type) {
|
foreach($types as $type) {
|
||||||
$classPath = "\\Thelia\\TaxEngine\\TaxType\\$type";
|
$classPath = "\\Thelia\\TaxEngine\\TaxType\\$type";
|
||||||
$instance = new $classPath();
|
$instance = new $classPath();
|
||||||
$typeList[$type] = $instance->getTitle();
|
$typeList[$type] = $instance->getTitle();
|
||||||
|
$requirementList[$type] = $instance->getRequirementsList();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->formBuilder
|
$this->formBuilder
|
||||||
@@ -57,6 +60,26 @@ class TaxCreationForm extends BaseForm
|
|||||||
))
|
))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
foreach($requirementList as $type => $requirements) {
|
||||||
|
foreach($requirements as $name => $requirementType) {
|
||||||
|
$this->formBuilder
|
||||||
|
->add($type . '_' . $name, new TheliaType(), array(
|
||||||
|
"instance" => $requirementType,
|
||||||
|
"constraints" => array(new NotBlank()),
|
||||||
|
"attr" => array(
|
||||||
|
"tag" => "requirements",
|
||||||
|
),
|
||||||
|
"data" => array(
|
||||||
|
"tax_type" => $type,
|
||||||
|
),
|
||||||
|
"label" => Translator::getInstance()->trans($name),
|
||||||
|
"type" => $requirementType->getFormType(),
|
||||||
|
"options" => $requirementType->getFormOptions(),
|
||||||
|
))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->addStandardDescFields(array('postscriptum', 'chapo', 'locale'));
|
$this->addStandardDescFields(array('postscriptum', 'chapo', 'locale'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class featureSlicePercentTaxType extends BaseTaxType
|
|||||||
public function getRequirementsList()
|
public function getRequirementsList()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
'featureId' => new ModelValidIdType('Currency'),
|
'featureId' => new ModelValidIdType('Feature'),
|
||||||
'slices' => new FloatToFloatArrayType(),
|
'slices' => new FloatToFloatArrayType(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,4 +50,14 @@ class AlphaNumStringListType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($values) ? explode(',', $values) : null;
|
return $this->isValid($values) ? explode(',', $values) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,14 @@ class AlphaNumStringType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,14 @@ class AnyType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,4 +49,14 @@ class BooleanOrBothType implements TypeInterface
|
|||||||
if ($value === self::ANY) return $value;
|
if ($value === self::ANY) return $value;
|
||||||
return $value === null ? null : filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
|
return $value === null ? null : filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,14 @@ class BooleanType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $value === null ? null : filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
|
return $value === null ? null : filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,4 +69,14 @@ class EnumListType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return in_array($value, $this->values);
|
return in_array($value, $this->values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,4 +52,14 @@ class EnumType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,4 +54,14 @@ class FloatToFloatArrayType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,14 @@ class FloatType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,4 +50,14 @@ class IntListType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($values) ? explode(',', $values) : null;
|
return $this->isValid($values) ? explode(',', $values) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,4 +124,14 @@ class IntToCombinedIntsListType implements TypeInterface
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,4 +124,14 @@ class IntToCombinedStringsListType implements TypeInterface
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,14 @@ class IntType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,4 +46,14 @@ class JsonType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? json_decode($value, true) : null;
|
return $this->isValid($value) ? json_decode($value, true) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,4 +63,14 @@ class ModelType implements TypeInterface
|
|||||||
{
|
{
|
||||||
return $this->isValid($value) ? $value : null;
|
return $this->isValid($value) ? $value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,4 +67,23 @@ class ModelValidIdType implements TypeInterface
|
|||||||
|
|
||||||
return $this->isValid($value) ? $queryClass::create()->findPk($value) : null;
|
return $this->isValid($value) ? $queryClass::create()->findPk($value) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return 'choice';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormOptions()
|
||||||
|
{
|
||||||
|
$queryClass = $this->expectedModelActiveRecordQuery;
|
||||||
|
|
||||||
|
$choices = array();
|
||||||
|
foreach($queryClass::create()->find() as $item) {
|
||||||
|
$choices[$item->getId()] = method_exists($item, "getTitle") ? $item->getTitle() : $item->getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
"choices" => $choices,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,4 +35,7 @@ interface TypeInterface
|
|||||||
public function isValid($value);
|
public function isValid($value);
|
||||||
|
|
||||||
public function getFormattedValue($value);
|
public function getFormattedValue($value);
|
||||||
|
|
||||||
|
public function getFormType();
|
||||||
|
public function getFormOptions();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<select name="{$name}" data-toggle="selectpicker">
|
<select name="{$name}" class="js-change-tax-type" data-toggle="selectpicker">
|
||||||
{foreach $choices as $choice}
|
{foreach $choices as $choice}
|
||||||
<option value="{$choice->value}" {if $choice->value == $TYPE}selected="selected" {/if}>{$choice->label}</option>
|
<option value="{$choice->value}" {if $choice->value == $TYPE}selected="selected" {/if}>{$choice->label}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
@@ -85,6 +85,24 @@
|
|||||||
</div>
|
</div>
|
||||||
{/form_field}
|
{/form_field}
|
||||||
|
|
||||||
|
{form_tagged_fields form=$form tag='requirements'}
|
||||||
|
<div class="form-group {if $error}has-error{/if} js-tax-requirements" data-tax-type="{$data.tax_type}" {if $data.tax_type != $TYPE}style="display: none"{/if}>
|
||||||
|
<label for="{$label_attr.for}" class="control-label">
|
||||||
|
{intl l=$label} :
|
||||||
|
</label>
|
||||||
|
{if $formType == 'choice'}
|
||||||
|
<select name="{$name}">
|
||||||
|
{foreach $choices as $choice}
|
||||||
|
<option value="{$choice->value}">{$choice->label}</option>
|
||||||
|
{/foreach}
|
||||||
|
</select>
|
||||||
|
{/if}
|
||||||
|
{if $formType == 'text'}
|
||||||
|
<input type="text" name="{$name}" value="">
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/form_tagged_fields}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
@@ -123,6 +141,10 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
|
$('.js-change-tax-type').change(function(e){
|
||||||
|
$('.js-tax-requirements').hide();
|
||||||
|
$('.js-tax-requirements[data-tax-type="' + $(this).val() + '"]').show();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user