/** * Get list of entities for autopopulate fields. * * @param $type * @param $filter * @param $limit * @param $start * * @return array */ public function getLookupResults($type, $filter = '', $limit = 10, $start = 0) { $results = []; switch ($type) { case 'companyfield': case 'lead.company': $expr = null; if ('lead.company' === $type) { $column = 'companyname'; $filterVal = $filter; } else { if (is_array($filter)) { $column = $filter[0]; $filterVal = $filter[1]; } else { $column = $filter; } } $expr = new ExpressionBuilder($this->em->getConnection()); $composite = $expr->andX(); $composite->add($expr->like("comp.{$column}", ':filterVar')); // Validate owner permissions if (!$this->security->isGranted('lead:leads:viewother')) { $composite->add($expr->orX($expr->andX($expr->isNull('comp.owner_id'), $expr->eq('comp.created_by', (int) $this->userHelper->getUser()->getId())), $expr->eq('comp.owner_id', (int) $this->userHelper->getUser()->getId()))); } $results = $this->em->getRepository('MauticLeadBundle:Company')->getSimpleList($composite, ['filterVar' => $filterVal . '%'], $column); break; } return $results; }
/** * The default handler is the last to be run and handler simple value parsing. * * @param string $key * @param string $value * @param ExpressionBuilder $expr * * @return Filter */ public function defaultFilterHandler($key, $value, $expr) { $val = $this->parseValue($value); $placeholder = $key . '_1'; $exprMethod = $val['operator']; $filter = new Filter(); $filter->setKey($key); $filter->setExpression($expr->andX($expr->{$exprMethod}($this->alias . $key, ":{$placeholder}"))); $filter->setParameters([$placeholder => $val['value']]); return $filter; }
/** * @param $queryBuilder * @param $expressionBuilder */ protected function addFilteredGroups(QueryBuilder &$queryBuilder, ExpressionBuilder $expressionBuilder) { if (!count($this->filteredGroups)) { return; } foreach ($this->filteredGroups as $index => $filteredGroup) { $condition = $filteredGroup['membersGroupFilter_condition']; $group = $filteredGroup['membersGroupFilter_group']; switch ($condition) { case 'in': $where = $expressionBuilder->orX(); $where->add('m.groups REGEXP :groupPattern_' . $index); break; case 'not in': $where = $expressionBuilder->andX(); $where->add('m.groups NOT REGEXP :groupPattern_' . $index); break; default: continue 2; } $queryBuilder->andWhere($where)->setParameter('groupPattern_' . $index, strtr('^a:[[:digit:]]+:\\{([is]:[[:digit:]]+(:"[[:alnum:]]+")?;' . '[is]:[[:digit:]]+(:"[[:alnum:]]+")?;)*[is]:[[:digit:]]+(:"[[:alnum:]]+")?;' . '(s:%length%:"%id%"|i:%id%);', array('%length%' => strlen($group), '%id%' => $group))); } }