Beispiel #1
0
 /**
  * @param FormBuilderInterface $builder
  * @param array                $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('glue', 'choice', array('label' => false, 'choices' => array('and' => 'mautic.lead.list.form.glue.and', 'or' => 'mautic.lead.list.form.glue.or'), 'attr' => array('class' => 'form-control not-chosen glue-select', 'onchange' => 'Mautic.updateFilterPositioning(this)')));
     $translator = $this->translator;
     $operatorChoices = $this->operatorChoices;
     $currentListId = $this->currentListId;
     $formModifier = function (FormEvent $event, $eventName) use($translator, $operatorChoices, $currentListId) {
         $data = $event->getData();
         $form = $event->getForm();
         $options = $form->getConfig()->getOptions();
         $fieldType = $data['type'];
         $fieldName = $data['field'];
         $type = 'text';
         $attr = array('class' => 'form-control');
         $displayType = 'hidden';
         $displayAttr = array();
         $customOptions = array();
         switch ($fieldType) {
             case 'leadlist':
                 if (!isset($data['filter'])) {
                     $data['filter'] = array();
                 } elseif (!is_array($data['filter'])) {
                     $data['filter'] = array($data['filter']);
                 }
                 // Don't show the current list ID in the choices
                 if (!empty($currentListId)) {
                     unset($options['lists'][$currentListId]);
                 }
                 $customOptions['choices'] = $options['lists'];
                 $customOptions['multiple'] = true;
                 $type = 'choice';
                 break;
             case 'lead_email_received':
                 if (!isset($data['filter'])) {
                     $data['filter'] = array();
                 } elseif (!is_array($data['filter'])) {
                     $data['filter'] = array($data['filter']);
                 }
                 $customOptions['choices'] = $options['emails'];
                 $customOptions['multiple'] = true;
                 $type = 'choice';
                 break;
             case 'tags':
                 if (!isset($data['filter'])) {
                     $data['filter'] = array();
                 } elseif (!is_array($data['filter'])) {
                     $data['filter'] = array($data['filter']);
                 }
                 $customOptions['choices'] = $options['tags'];
                 $customOptions['multiple'] = true;
                 $attr = array_merge($attr, array('data-placeholder' => $translator->trans('mautic.lead.tags.select_or_create'), 'data-no-results-text' => $translator->trans('mautic.lead.tags.enter_to_create'), 'data-allow-add' => 'true', 'onchange' => 'Mautic.createLeadTag(this)'));
                 $type = 'choice';
                 break;
             case 'stage':
                 $customOptions['choices'] = $options['stage'];
                 $type = 'choice';
                 break;
             case 'timezone':
             case 'country':
             case 'region':
                 switch ($fieldType) {
                     case 'timezone':
                         $choiceKey = 'timezones';
                         break;
                     case 'country':
                         $choiceKey = 'countries';
                         break;
                     case 'region':
                         $choiceKey = 'regions';
                         break;
                 }
                 $type = 'choice';
                 $customOptions['choices'] = $options[$choiceKey];
                 $customOptions['multiple'] = in_array($data['operator'], array('in', '!in'));
                 if ($customOptions['multiple']) {
                     array_unshift($customOptions['choices'], array('' => ''));
                     if (!isset($data['filter'])) {
                         $data['filter'] = array();
                     }
                 }
                 break;
             case 'time':
             case 'date':
             case 'datetime':
                 $attr['data-toggle'] = $fieldType;
                 break;
             case 'lookup_id':
                 $type = 'hidden';
                 $displayType = 'text';
                 $displayAttr = array_merge($displayAttr, array('class' => 'form-control', 'data-toggle' => 'field-lookup', 'data-target' => $data['field'], 'placeholder' => $translator->trans('mautic.lead.list.form.filtervalue')));
                 if (isset($options['fields'][$fieldName]['properties']['list'])) {
                     $displayAttr['data-options'] = $options['fields'][$fieldName]['properties']['list'];
                 }
                 break;
             case 'select':
             case 'boolean':
                 $type = 'choice';
                 $attr = array_merge($attr, array('placeholder' => $translator->trans('mautic.lead.list.form.filtervalue')));
                 if (in_array($data['operator'], array('in', '!in'))) {
                     $customOptions['multiple'] = true;
                     if (!isset($data['filter'])) {
                         $data['filter'] = array();
                     } elseif (!is_array($data['filter'])) {
                         $data['filter'] = array($data['filter']);
                     }
                 }
                 $list = $options['fields'][$fieldName]['properties']['list'];
                 $choices = FormFieldHelper::parseListStringIntoArray($list);
                 if ($fieldType == 'select') {
                     // array_unshift cannot be used because numeric values get lost as keys
                     $choices = array_reverse($choices, true);
                     $choices[''] = '';
                     $choices = array_reverse($choices, true);
                 }
                 $customOptions['choices'] = $choices;
                 break;
             case 'lookup':
             default:
                 $attr = array_merge($attr, array('data-toggle' => 'field-lookup', 'data-target' => $data['field'], 'placeholder' => $translator->trans('mautic.lead.list.form.filtervalue')));
                 if (isset($options['fields'][$fieldName]['properties']['list'])) {
                     $attr['data-options'] = $options['fields'][$fieldName]['properties']['list'];
                 }
                 break;
         }
         if (in_array($data['operator'], array('empty', '!empty'))) {
             $attr['disabled'] = 'disabled';
         } else {
             $customOptions['constraints'] = array(new NotBlank(array('message' => 'mautic.core.value.required')));
         }
         // @todo implement in UI
         if (in_array($data['operator'], array('between', '!between'))) {
             $form->add('filter', 'collection', array('type' => $type, 'options' => array('label' => false, 'attr' => $attr), 'label' => false));
         } else {
             $form->add('filter', $type, array_merge(array('label' => false, 'attr' => $attr, 'data' => isset($data['filter']) ? $data['filter'] : '', 'error_bubbling' => false), $customOptions));
         }
         $form->add('display', $displayType, array('label' => false, 'attr' => $displayAttr, 'data' => $data['display'], 'error_bubbling' => false));
         $choices = $operatorChoices;
         if (isset($options['fields'][$fieldName]['operators']['include'])) {
             // Inclusive operators
             $choices = array_intersect_key($choices, array_flip($options['fields'][$fieldName]['operators']['include']));
         } elseif (isset($options['fields'][$fieldName]['operators']['exclude'])) {
             // Inclusive operators
             $choices = array_diff_key($choices, array_flip($options['fields'][$fieldName]['operators']['exclude']));
         }
         $form->add('operator', 'choice', array('label' => false, 'choices' => $choices, 'attr' => array('class' => 'form-control not-chosen', 'onchange' => 'Mautic.convertLeadFilterInput(this)')));
         if ($eventName == FormEvents::PRE_SUBMIT) {
             $event->setData($data);
         }
     };
     $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);
     });
     $builder->add('field', 'hidden');
     $builder->add('type', 'hidden');
 }
Beispiel #2
0
                    </div>
                    <div class="tab-pane fade bdr-w-0" id="filters">
                        <div class="form-group">
                            <div class="available-filters mb-md pl-0 col-md-4" data-prototype="<?php 
echo $view->escape($view['form']->row($form['filters']->vars['prototype']));
?>
" data-index="<?php 
echo $index + 1;
?>
">
                                <select class="chosen form-control" id="available_filters">
                                    <option value=""></option>
                                    <?php 
foreach ($fields as $value => $params) {
    $list = !empty($params['properties']['list']) ? $params['properties']['list'] : array();
    $choices = \Mautic\LeadBundle\Helper\FormFieldHelper::parseListStringIntoArray($list);
    $list = json_encode($choices);
    $callback = !empty($params['properties']['callback']) ? $params['properties']['callback'] : '';
    $operators = !empty($params['operators']) ? $view->escape(json_encode($params['operators'])) : '{}';
    ?>
                                        <option value="<?php 
    echo $value;
    ?>
" id="available_<?php 
    echo $value;
    ?>
" data-field-type="<?php 
    echo $params['properties']['type'];
    ?>
" data-field-list="<?php 
    echo $view->escape($list);