/** * DynamicContentFilterEntryType constructor. * * @param ListModel $listModel * @param StageModel $stageModel */ public function __construct(ListModel $listModel, StageModel $stageModel) { $this->fieldChoices = $listModel->getChoiceFields(); $this->filterFieldChoices(); $this->countryChoices = FormFieldHelper::getCountryChoices(); $this->regionChoices = FormFieldHelper::getRegionChoices(); $this->timezoneChoices = FormFieldHelper::getTimezonesChoices(); $this->localeChoices = FormFieldHelper::getLocaleChoices(); $stages = $stageModel->getRepository()->getSimpleList(); foreach ($stages as $stage) { $this->stageChoices[$stage['value']] = $stage['label']; } }
/** * @param MauticFactory $factory */ public function __construct(MauticFactory $factory) { $this->translator = $factory->getTranslator(); $this->defaultTheme = $factory->getParameter('theme'); $this->em = $factory->getEntityManager(); $this->request = $factory->getRequest(); $this->countryChoices = FormFieldHelper::getCountryChoices(); $this->regionChoices = FormFieldHelper::getRegionChoices(); $this->timezoneChoices = FormFieldHelper::getTimezonesChoices(); $this->localeChoices = FormFieldHelper::getLocaleChoices(); $stages = $factory->getModel('stage')->getRepository()->getSimpleList(); foreach ($stages as $stage) { $this->stageChoices[$stage['value']] = $stage['label']; } }
/** * @param MauticFactory $factory */ public function __construct(MauticFactory $factory) { $this->translator = $factory->getTranslator(); /** @var \Mautic\LeadBundle\Model\ListModel $listModel */ $listModel = $factory->getModel('lead.list'); $this->fieldChoices = $listModel->getChoiceFields(); // Locales $this->timezoneChoices = FormFieldHelper::getTimezonesChoices(); $this->countryChoices = FormFieldHelper::getCountryChoices(); $this->regionChoices = FormFieldHelper::getRegionChoices(); $this->localeChoices = FormFieldHelper::getLocaleChoices(); // Segments $lists = $listModel->getUserLists(); foreach ($lists as $list) { $this->listChoices[$list['id']] = $list['name']; } // Emails /** @var \Mautic\EmailBundle\Model\EmailModel $emailModel */ $emailModel = $factory->getModel('email'); $viewOther = $factory->getSecurity()->isGranted('email:emails:viewother'); $emails = $emailModel->getRepository()->getEmailList('', 0, 0, $viewOther, true); foreach ($emails as $email) { $this->emailChoices[$email['language']][$email['id']] = $email['name']; } ksort($this->emailChoices); // Tags $leadModel = $factory->getModel('lead'); $tags = $leadModel->getTagList(); foreach ($tags as $tag) { $this->tagChoices[$tag['value']] = $tag['label']; } $stages = $factory->getModel('stage')->getRepository()->getSimpleList(); foreach ($stages as $stage) { $this->stageChoices[$stage['value']] = $stage['label']; } }
private function getFormFields(FormBuilderInterface $builder, array $options, $object = 'lead') { $fieldValues = []; $isObject = false; if (!empty($options['data'])) { $isObject = is_object($options['data']); $fieldValues = $isObject ? $options['data']->getFields() : $options['data']; } $mapped = !$isObject; foreach ($options['fields'] as $field) { if ($field['isPublished'] === false || $field['object'] !== $object) { continue; } $attr = ['class' => 'form-control']; $properties = $field['properties']; $type = $field['type']; $required = $isObject ? $field['isRequired'] : false; $alias = $field['alias']; $group = $field['group']; if ($field['isUniqueIdentifer']) { $attr['data-unique-identifier'] = $field['alias']; } if ($isObject) { $value = isset($fieldValues[$group][$alias]['value']) ? $fieldValues[$group][$alias]['value'] : $field['defaultValue']; } else { $value = isset($fieldValues[$alias]) ? $fieldValues[$alias] : ''; } $constraints = []; if ($required && empty($options['ignore_required_constraints'])) { $constraints[] = new NotBlank(['message' => 'mautic.lead.customfield.notblank']); } switch ($type) { case 'number': if (empty($properties['precision'])) { $properties['precision'] = null; } else { $properties['precision'] = (int) $properties['precision']; } if ('' === $value) { // Prevent transform errors $value = null; } $builder->add($alias, $type, ['required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'attr' => $attr, 'data' => null !== $value ? (double) $value : $value, 'mapped' => $mapped, 'constraints' => $constraints, 'precision' => $properties['precision'], 'rounding_mode' => isset($properties['roundmode']) ? (int) $properties['roundmode'] : 0]); break; case 'date': case 'datetime': case 'time': $attr['data-toggle'] = $type; $opts = ['required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'widget' => 'single_text', 'attr' => $attr, 'mapped' => $mapped, 'input' => 'string', 'html5' => false, 'constraints' => $constraints]; if ($value) { try { $dtHelper = new DateTimeHelper($value, null, 'local'); } catch (\Exception $e) { // Rather return empty value than break the page $value = null; } } if ($type == 'datetime') { $opts['model_timezone'] = 'UTC'; $opts['view_timezone'] = date_default_timezone_get(); $opts['format'] = 'yyyy-MM-dd HH:mm'; $opts['with_seconds'] = false; $opts['data'] = !empty($value) ? $dtHelper->toLocalString('Y-m-d H:i:s') : null; } elseif ($type == 'date') { $opts['data'] = !empty($value) ? $dtHelper->toLocalString('Y-m-d') : null; } else { $opts['data'] = !empty($value) ? $dtHelper->toLocalString('H:i:s') : null; } $builder->add($alias, $type, $opts); break; case 'select': case 'multiselect': case 'boolean': $typeProperties = ['required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'attr' => $attr, 'mapped' => $mapped, 'multiple' => false, 'constraints' => $constraints]; $choiceType = 'choice'; $emptyValue = ''; if (in_array($type, ['select', 'multiselect']) && !empty($properties['list'])) { $typeProperties['choices'] = FormFieldHelper::parseList($properties['list']); $typeProperties['expanded'] = false; $typeProperties['multiple'] = 'multiselect' === $type; } if ($type == 'boolean' && !empty($properties['yes']) && !empty($properties['no'])) { $choiceType = 'yesno_button_group'; $typeProperties['expanded'] = true; $typeProperties['yes_label'] = $properties['yes']; $typeProperties['no_label'] = $properties['no']; $typeProperties['attr'] = []; $emptyValue = ' x '; if ($value !== '' && $value !== null) { $value = (int) $value; } } $typeProperties['data'] = $type === 'multiselect' ? FormFieldHelper::parseList($value) : $value; $typeProperties['empty_value'] = $emptyValue; $builder->add($alias, $choiceType, $typeProperties); break; case 'country': case 'region': case 'timezone': case 'locale': switch ($type) { case 'country': $choices = FormFieldHelper::getCountryChoices(); break; case 'region': $choices = FormFieldHelper::getRegionChoices(); break; case 'timezone': $choices = FormFieldHelper::getTimezonesChoices(); break; case 'locale': $choices = FormFieldHelper::getLocaleChoices(); break; } $builder->add($alias, 'choice', ['choices' => $choices, 'required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'data' => $value, 'attr' => ['class' => 'form-control', 'data-placeholder' => $field['label']], 'mapped' => $mapped, 'multiple' => false, 'expanded' => false, 'constraints' => $constraints]); break; default: if ($type == 'lookup') { $type = 'text'; $attr['data-toggle'] = 'field-lookup'; $attr['data-action'] = 'lead:fieldList'; $attr['data-target'] = $alias; if (!empty($properties['list'])) { $attr['data-options'] = $properties['list']; } } $builder->add($alias, $type, ['required' => $field['isRequired'], 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'attr' => $attr, 'data' => $value, 'mapped' => $mapped, 'constraints' => $constraints]); break; } } }
/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addEventSubscriber(new CleanFormSubscriber()); $builder->addEventSubscriber(new FormExitSubscriber('lead.lead', $options)); if (!$options['isShortForm']) { $imageChoices = ['gravatar' => 'Gravatar', 'custom' => 'mautic.lead.lead.field.custom_avatar']; $cache = $options['data']->getSocialCache(); if (count($cache)) { foreach ($cache as $key => $data) { $imageChoices[$key] = $key; } } $builder->add('preferred_profile_image', 'choice', ['choices' => $imageChoices, 'label' => 'mautic.lead.lead.field.preferred_profile', 'label_attr' => ['class' => 'control-label'], 'required' => true, 'multiple' => false, 'attr' => ['class' => 'form-control']]); $builder->add('custom_avatar', 'file', ['label' => false, 'label_attr' => ['class' => 'control-label'], 'required' => false, 'attr' => ['class' => 'form-control'], 'mapped' => false, 'constraints' => [new File(['mimeTypes' => ['image/gif', 'image/jpeg', 'image/png'], 'mimeTypesMessage' => 'mautic.lead.avatar.types_invalid'])]]); } $fieldValues = !empty($options['data']) ? $options['data']->getFields() : ['filter' => ['isVisible' => true]]; foreach ($options['fields'] as $field) { if ($field['isPublished'] === false) { continue; } $attr = ['class' => 'form-control']; $properties = $field['properties']; $type = $field['type']; $required = $field['isRequired']; $alias = $field['alias']; $group = $field['group']; if ($field['isUniqueIdentifer']) { $attr['data-unique-identifier'] = $field['alias']; } $value = isset($fieldValues[$group][$alias]['value']) ? $fieldValues[$group][$alias]['value'] : $field['defaultValue']; $constraints = []; if ($required) { $constraints[] = new NotBlank(['message' => 'mautic.lead.customfield.notblank']); } switch ($type) { case 'number': if (empty($properties['precision'])) { $properties['precision'] = null; } else { $properties['precision'] = (int) $properties['precision']; } $builder->add($alias, $type, ['required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'attr' => $attr, 'data' => isset($fieldValues[$group][$alias]['value']) ? (double) $fieldValues[$group][$alias]['value'] : (double) $field['defaultValue'], 'mapped' => false, 'constraints' => $constraints, 'precision' => $properties['precision'], 'rounding_mode' => isset($properties['roundmode']) ? (int) $properties['roundmode'] : 0]); break; case 'date': case 'datetime': case 'time': $attr['data-toggle'] = $type; $opts = ['required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'widget' => 'single_text', 'attr' => $attr, 'mapped' => false, 'input' => 'string', 'html5' => false, 'constraints' => $constraints]; try { $dtHelper = new DateTimeHelper($value, null, 'local'); } catch (\Exception $e) { // Rather return empty value than break the page $value = ''; } if ($type == 'datetime') { $opts['model_timezone'] = 'UTC'; $opts['view_timezone'] = date_default_timezone_get(); $opts['format'] = 'yyyy-MM-dd HH:mm'; $opts['with_seconds'] = false; $opts['data'] = !empty($value) ? $dtHelper->toLocalString('Y-m-d H:i:s') : null; } elseif ($type == 'date') { $opts['data'] = !empty($value) ? $dtHelper->toLocalString('Y-m-d') : null; } else { $opts['data'] = !empty($value) ? $dtHelper->toLocalString('H:i:s') : null; } $builder->add($alias, $type, $opts); break; case 'select': case 'boolean': $choices = []; if ($type == 'select' && !empty($properties['list'])) { $list = explode('|', $properties['list']); foreach ($list as $l) { $l = trim($l); $choices[$l] = $l; } $expanded = false; } if ($type == 'boolean' && !empty($properties['yes']) && !empty($properties['no'])) { $expanded = true; $choices = [1 => $properties['yes'], 0 => $properties['no']]; $attr = []; } if (!empty($choices)) { $builder->add($alias, 'choice', ['choices' => $choices, 'required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'data' => $type == 'boolean' ? (int) $value : $value, 'attr' => $attr, 'mapped' => false, 'multiple' => false, 'empty_value' => false, 'expanded' => $expanded, 'constraints' => $constraints]); } break; case 'country': case 'region': case 'timezone': case 'locale': switch ($type) { case 'country': $choices = FormFieldHelper::getCountryChoices(); break; case 'region': $choices = FormFieldHelper::getRegionChoices(); break; case 'timezone': $choices = FormFieldHelper::getTimezonesChoices(); break; case 'locale': $choices = FormFieldHelper::getLocaleChoices(); break; } $builder->add($alias, 'choice', ['choices' => $choices, 'required' => $required, 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'data' => $value, 'attr' => ['class' => 'form-control', 'data-placeholder' => $field['label']], 'mapped' => false, 'multiple' => false, 'expanded' => false, 'constraints' => $constraints]); break; default: if ($type == 'lookup') { $type = "text"; $attr['data-toggle'] = 'field-lookup'; $attr['data-target'] = $alias; if (!empty($properties['list'])) { $attr['data-options'] = $properties['list']; } } $builder->add($alias, $type, ['required' => $field['isRequired'], 'label' => $field['label'], 'label_attr' => ['class' => 'control-label'], 'attr' => $attr, 'data' => $value, 'mapped' => false, 'constraints' => $constraints]); break; } } $builder->add('tags', 'lead_tag', ['by_reference' => false, 'attr' => ['data-placeholder' => $this->factory->getTranslator()->trans('mautic.lead.tags.select_or_create'), 'data-no-results-text' => $this->factory->getTranslator()->trans('mautic.lead.tags.enter_to_create'), 'data-allow-add' => 'true', 'onchange' => 'Mautic.createLeadTag(this)']]); $transformer = new IdToEntityModelTransformer($this->factory->getEntityManager(), 'MauticUserBundle:User'); $builder->add($builder->create('owner', 'user_list', ['label' => 'mautic.lead.lead.field.owner', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'multiple' => false])->addModelTransformer($transformer)); $transformer = new IdToEntityModelTransformer($this->factory->getEntityManager(), 'MauticStageBundle:Stage'); $builder->add($builder->create('stage', 'stage_list', ['label' => 'mautic.lead.lead.field.stage', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'multiple' => false])->addModelTransformer($transformer)); if (!$options['isShortForm']) { $builder->add('buttons', 'form_buttons'); } else { $builder->add('buttons', 'form_buttons', ['apply_text' => false, 'save_text' => 'mautic.core.form.save']); } if (!empty($options["action"])) { $builder->setAction($options["action"]); } }
/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addEventSubscriber(new CleanFormSubscriber()); $builder->addEventSubscriber(new FormExitSubscriber('lead.field', $options)); $builder->add('label', 'text', ['label' => 'mautic.lead.field.label', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control', 'length' => 50]]); $disabled = !empty($options['data']) ? $options['data']->isFixed() : false; $builder->add('group', 'choice', ['choices' => ['core' => 'mautic.lead.field.group.core', 'social' => 'mautic.lead.field.group.social', 'personal' => 'mautic.lead.field.group.personal', 'professional' => 'mautic.lead.field.group.professional'], 'attr' => ['class' => 'form-control', 'tooltip' => 'mautic.lead.field.form.group.help'], 'expanded' => false, 'multiple' => false, 'label' => 'mautic.lead.field.group', 'empty_value' => false, 'required' => false, 'disabled' => $disabled]); $new = !empty($options['data']) && $options['data']->getAlias() ? false : true; $type = $options['data']->getType(); $default = empty($type) ? 'text' : $type; $fieldHelper = new FormFieldHelper(); $fieldHelper->setTranslator($this->translator); $builder->add('type', 'choice', ['choices' => $fieldHelper->getChoiceList(), 'expanded' => false, 'multiple' => false, 'label' => 'mautic.lead.field.type', 'empty_value' => false, 'disabled' => $disabled || !$new, 'attr' => ['class' => 'form-control', 'onchange' => 'Mautic.updateLeadFieldProperties(this.value);'], 'data' => $default, 'required' => false]); $builder->add('properties_select_template', 'sortablelist', ['mapped' => false, 'label' => 'mautic.lead.field.form.properties.select', 'option_required' => false, 'with_labels' => true]); $builder->add('default_template', 'text', ['label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'mapped' => false]); $builder->add('default_bool_template', 'yesno_button_group', ['label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'mapped' => false, 'data' => '', 'empty_value' => ' x ']); $builder->add('properties', 'collection', ['required' => false, 'allow_add' => true, 'error_bubbling' => false]); $builder->add('defaultValue', 'text', ['label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false]); $formModifier = function (FormEvent $event, $eventName) { $form = $event->getForm(); $data = $event->getData(); $type = is_array($data) ? isset($data['type']) ? $data['type'] : null : $data->getType(); switch ($type) { case 'multiselect': case 'select': case 'lookup': if (is_array($data) && isset($data['properties'])) { $properties = $data['properties']; } else { $properties = $data->getProperties(); } $form->add('properties', 'sortablelist', ['required' => false, 'label' => 'mautic.lead.field.form.properties.select', 'data' => $properties, 'with_labels' => true]); break; case 'country': case 'locale': case 'timezone': case 'region': switch ($type) { case 'country': $choices = FormFieldHelper::getCountryChoices(); break; case 'region': $choices = FormFieldHelper::getRegionChoices(); break; case 'timezone': $choices = FormFieldHelper::getTimezonesChoices(); break; case 'locale': $choices = FormFieldHelper::getLocaleChoices(); break; } $form->add('defaultValue', 'choice', ['choices' => $choices, 'label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'data' => !empty($value)]); break; case 'boolean': if (is_array($data)) { $value = isset($data['defaultValue']) ? $data['defaultValue'] : false; $yesLabel = !empty($data['properties']['yes']) ? $data['properties']['yes'] : 'matuic.core.form.yes'; $noLabel = !empty($data['properties']['no']) ? $data['properties']['no'] : 'matuic.core.form.no'; } else { $value = $data->getDefaultValue(); $props = $data->getProperties(); $yesLabel = !empty($props['yes']) ? $props['yes'] : 'matuic.core.form.yes'; $noLabel = !empty($props['no']) ? $props['no'] : 'matuic.core.form.no'; } if ($value !== '' && $value !== null) { $value = (int) $value; } $form->add('defaultValue', 'yesno_button_group', ['label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'data' => $value, 'no_label' => $noLabel, 'yes_label' => $yesLabel, 'empty_value' => ' x ']); break; case 'datetime': case 'date': case 'time': $constraints = []; switch ($type) { case 'datetime': $constraints = [new Assert\Callback(function ($object, ExecutionContextInterface $context) { if (!empty($object) && \DateTime::createFromFormat('Y-m-d H:i', $object) === false) { $context->buildViolation('mautic.lead.datetime.invalid')->addViolation(); } })]; break; case 'date': $constraints = [new Assert\Callback(function ($object, ExecutionContextInterface $context) { if (!empty($object)) { $validator = $context->getValidator(); $violations = $validator->validateValue($object, new Assert\Date()); if (count($violations) > 0) { $context->buildViolation('mautic.lead.date.invalid')->addViolation(); } } })]; break; case 'time': $constraints = [new Assert\Callback(function ($object, ExecutionContextInterface $context) { if (!empty($object)) { $validator = $context->getValidator(); $violations = $validator->validateValue($object, new Assert\Regex(['pattern' => '/(2[0-3]|[01][0-9]):([0-5][0-9])/'])); if (count($violations) > 0) { $context->buildViolation('mautic.lead.time.invalid')->addViolation(); } } })]; break; } $form->add('defaultValue', 'text', ['label' => 'mautic.core.defaultvalue', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => false, 'constraints' => $constraints]); break; } }; $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($formModifier) { $formModifier($event, FormEvents::PRE_SET_DATA); }); $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($formModifier) { $formModifier($event, FormEvents::PRE_SUBMIT); }); //get order list $transformer = new FieldToOrderTransformer($this->em); $builder->add($builder->create('order', 'entity', ['label' => 'mautic.core.order', 'class' => 'MauticLeadBundle:LeadField', 'property' => 'label', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('f')->orderBy('f.order', 'ASC'); }, 'required' => false])->addModelTransformer($transformer)); $builder->add('alias', 'text', ['label' => 'mautic.core.alias', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control', 'length' => 25, 'tooltip' => 'mautic.lead.field.help.alias'], 'required' => false, 'disabled' => $disabled || !$new]); $builder->add('isPublished', 'yesno_button_group', ['disabled' => $options['data']->getAlias() == 'email', 'data' => $options['data']->getAlias() == 'email' ? true : $options['data']->getIsPublished()]); $builder->add('isRequired', 'yesno_button_group', ['label' => 'mautic.core.required']); $builder->add('isVisible', 'yesno_button_group', ['label' => 'mautic.lead.field.form.isvisible']); $builder->add('isShortVisible', 'yesno_button_group', ['label' => 'mautic.lead.field.form.isshortvisible', 'attr' => ['tooltip' => 'mautic.lead.field.form.isshortvisible.tooltip']]); $builder->add('isListable', 'yesno_button_group', ['label' => 'mautic.lead.field.form.islistable']); $data = $options['data']->isUniqueIdentifier(); $builder->add('isUniqueIdentifer', 'yesno_button_group', ['label' => 'mautic.lead.field.form.isuniqueidentifer', 'attr' => ['tooltip' => 'mautic.lead.field.form.isuniqueidentifer.tooltip', 'onchange' => 'Mautic.displayUniqueIdentifierWarning(this)'], 'data' => !empty($data)]); $builder->add('isPubliclyUpdatable', 'yesno_button_group', ['label' => 'mautic.lead.field.form.ispubliclyupdatable', 'attr' => ['tooltip' => 'mautic.lead.field.form.ispubliclyupdatable.tooltip']]); $builder->add('object', 'choice', ['choices' => ['lead' => 'mautic.lead.contact', 'company' => 'mautic.company.company'], 'expanded' => false, 'multiple' => false, 'label' => 'mautic.lead.field.object', 'empty_value' => false, 'attr' => ['class' => 'form-control'], 'required' => true, 'disabled' => $disabled || !$new]); $builder->add('buttons', 'form_buttons'); if (!empty($options['action'])) { $builder->setAction($options['action']); } }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function updateLeadFieldValuesAction(Request $request) { $alias = InputHelper::clean($request->request->get('alias')); $dataArray = ['success' => 0, 'options' => null]; $leadField = $this->getModel('lead.field')->getRepository()->findOneBy(['alias' => $alias]); $choiceTypes = ['boolean', 'locale', 'country', 'region', 'lookup', 'timezone', 'select', 'radio']; if ($leadField && in_array($leadField->getType(), $choiceTypes)) { $properties = $leadField->getProperties(); $leadFieldType = $leadField->getType(); if (!empty($properties['list'])) { // Lookup/Select options $options = explode('|', $properties['list']); $options = array_combine($options, $options); } elseif (!empty($properties) && $leadFieldType == 'boolean') { // Boolean options $options = [0 => $properties['no'], 1 => $properties['yes']]; } else { switch ($leadFieldType) { case 'country': $options = FormFieldHelper::getCountryChoices(); break; case 'region': $options = FormFieldHelper::getRegionChoices(); break; case 'timezone': $options = FormFieldHelper::getTimezonesChoices(); break; case 'locale': $options = FormFieldHelper::getLocaleChoices(); break; default: $options = !empty($properties) ? $properties : []; } } $dataArray['options'] = $options; } $dataArray['success'] = 1; return $this->sendJsonResponse($dataArray); }
break; case 'boolean' == $leadFieldType: $parseList = [0 => $contactFields[$field['leadField']]['properties']['no'], 1 => $contactFields[$field['leadField']]['properties']['yes']]; $ignoreNumericalKeys = true; break; case 'country' == $leadFieldType: $list = \Mautic\LeadBundle\Helper\FormFieldHelper::getCountryChoices(); break; case 'region' == $leadFieldType: $list = \Mautic\LeadBundle\Helper\FormFieldHelper::getRegionChoices(); break; case 'timezone' == $leadFieldType: $list = \Mautic\LeadBundle\Helper\FormFieldHelper::getTimezonesChoices(); break; case 'locale': $list = \Mautic\LeadBundle\Helper\FormFieldHelper::getLocaleChoices(); break; } } if (empty($parseList)) { if (isset($list)) { $parseList = $list; } elseif (!empty($properties['list'])) { $parseList = $properties['list']; } elseif (!empty($properties['optionlist'])) { $parseList = $properties['optionlist']; } if (isset($parseList['list'])) { $parseList = $parseList['list']; } }
/** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('field', 'leadfields_choices', ['label' => 'mautic.lead.campaign.event.field', 'label_attr' => ['class' => 'control-label'], 'multiple' => false, 'empty_value' => 'mautic.core.select', 'attr' => ['class' => 'form-control', 'tooltip' => 'mautic.lead.campaign.event.field_descr', 'onchange' => 'Mautic.updateLeadFieldValues(this)'], 'required' => true, 'constraints' => [new NotBlank(['message' => 'mautic.core.value.required'])]]); $leadModel = $this->factory->getModel('lead.lead'); $fieldModel = $this->factory->getModel('lead.field'); $operators = $leadModel->getFilterExpressionFunctions(); $choices = []; foreach ($operators as $key => $operator) { $choices[$key] = $operator['label']; } $builder->add('operator', 'choice', ['choices' => $choices]); $ff = $builder->getFormFactory(); // function to add 'template' choice field dynamically $func = function (FormEvent $e) use($ff, $fieldModel) { $data = $e->getData(); $form = $e->getForm(); $fieldValues = null; $fieldType = null; $choiceTypes = ['boolean', 'locale', 'country', 'region', 'lookup', 'timezone', 'select', 'radio']; if (isset($data['field'])) { $field = $fieldModel->getRepository()->findOneBy(['alias' => $data['field']]); if ($field) { $properties = $field->getProperties(); $fieldType = $field->getType(); if (!empty($properties['list'])) { // Lookup/Select options $fieldValues = explode('|', $properties['list']); $fieldValues = array_combine($fieldValues, $fieldValues); } elseif (!empty($properties) && $fieldType == 'boolean') { // Boolean options $fieldValues = [0 => $properties['no'], 1 => $properties['yes']]; } else { switch ($fieldType) { case 'country': $fieldValues = FormFieldHelper::getCountryChoices(); break; case 'region': $fieldValues = FormFieldHelper::getRegionChoices(); break; case 'timezone': $fieldValues = FormFieldHelper::getTimezonesChoices(); break; case 'locale': $fieldValues = FormFieldHelper::getLocaleChoices(); break; default: if (!empty($properties)) { $fieldValues = $properties; } } } } } // Display selectbox for a field with choices, textbox for others if (!empty($fieldValues) && in_array($fieldType, $choiceTypes)) { $form->add('value', 'choice', ['choices' => $fieldValues, 'label' => 'mautic.form.field.form.value', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => true, 'constraints' => [new NotBlank(['message' => 'mautic.core.value.required'])]]); } else { $form->add('value', 'text', ['label' => 'mautic.form.field.form.value', 'label_attr' => ['class' => 'control-label'], 'attr' => ['class' => 'form-control'], 'required' => true, 'constraints' => [new NotBlank(['message' => 'mautic.core.value.required'])]]); } }; // Register the function above as EventListener on PreSet and PreBind $builder->addEventListener(FormEvents::PRE_SET_DATA, $func); $builder->addEventListener(FormEvents::PRE_SUBMIT, $func); }