예제 #1
0
파일: BooleanType.php 프로젝트: ekyna/table
 /**
  * {@inheritdoc}
  */
 public function applyFilter(QueryBuilder $qb, array $data, array $options)
 {
     self::$filterCount++;
     $alias = $qb->getRootAliases()[0];
     if ($options['mode'] === self::MODE_DEFAULT) {
         $qb->andWhere(FilterOperator::buildExpression($alias . '.' . $data['property_path'], $data['operator'], ':filter_' . self::$filterCount))->setParameter('filter_' . self::$filterCount, FilterOperator::buildParameter($data['operator'], $data['value']));
     } else {
         $value = $options['mode'] === self::MODE_IS_NULL ? $data['value'] : !$data['value'];
         $operator = $value ? FilterOperator::IS_NULL : FilterOperator::IS_NOT_NULL;
         $qb->andWhere(FilterOperator::buildExpression($alias . '.' . $data['property_path'], $operator, ':filter_' . self::$filterCount));
     }
 }
예제 #2
0
파일: ChoiceType.php 프로젝트: ekyna/table
 /**
  * {@inheritdoc}
  */
 public function buildActiveFilter(TableView $view, array $data, array $options)
 {
     $value = $data['value'];
     $choices = $options['choices'];
     $transform = function ($v) use($choices) {
         if (array_key_exists($v, $choices)) {
             return $choices[$v];
         }
         return $v;
     };
     if (is_array($value)) {
         $value = array_map($transform, $value);
     } else {
         $value = $transform($value);
     }
     $activeFilter = new ActiveFilter();
     $activeFilter->setVars(['full_name' => $data['full_name'], 'id' => $data['id'], 'field' => $data['label'], 'operator' => FilterOperator::getLabel($data['operator']), 'value' => $value]);
     $view->active_filters[] = $activeFilter;
 }
예제 #3
0
파일: EntityType.php 프로젝트: ekyna/table
 /**
  * {@inheritdoc}
  */
 public function buildActiveFilter(TableView $view, array $data, array $options)
 {
     $repo = $this->em->getRepository($options['class']);
     $entities = $repo->findBy(['id' => $data['value']]);
     $values = [];
     if (0 < strlen($property = $options['property'])) {
         $accessor = PropertyAccess::createPropertyAccessor();
         $transform = function ($entity) use($accessor, $property) {
             return $accessor->getValue($entity, $property);
         };
     } else {
         $transform = function ($entity) {
             return (string) $entity;
         };
     }
     foreach ($entities as $entity) {
         $values[] = $transform($entity);
     }
     $activeFilter = new ActiveFilter();
     $activeFilter->setVars(['full_name' => $data['full_name'], 'id' => $data['id'], 'field' => $data['label'], 'operator' => FilterOperator::getLabel($data['operator']), 'value' => $values]);
     $view->active_filters[] = $activeFilter;
 }
예제 #4
0
 /**
  * {@inheritdoc}
  */
 public function applyFilter(QueryBuilder $qb, array $data, array $options)
 {
     self::$filterCount++;
     $alias = $qb->getRootAliases()[0];
     $qb->andWhere(FilterOperator::buildExpression($alias . '.' . $data['property_path'], $data['operator'], ':filter_' . self::$filterCount))->setParameter('filter_' . self::$filterCount, $data['value'], Type::DATETIME);
 }
예제 #5
0
파일: NumberType.php 프로젝트: ekyna/table
 /**
  * {@inheritdoc}
  */
 public function buildFilterFrom(FormBuilderInterface $form, array $options)
 {
     $form->add('operator', 'choice', ['label' => false, 'choices' => FilterOperator::getChoices($this->getOperators())])->add('value', 'number', ['label' => false]);
 }