/** @param $task Task */ public function processTask($task) { parent::processTask($task); $data = $task->request->post->get('commands'); if (!is_string($data)) { $this->postResults(array(ServiceResult::createWithError('error', 'No data', '::GLOBAL::'))); return; } if (strlen($data) > $this->maxPackageSize) { $this->postResults(array(ServiceResult::createWithError('error', 'Data too large', '::GLOBAL::'))); return; } $data = json_decode($data, true); if (json_last_error() != JSON_ERROR_NONE || !is_array($data)) { $this->postResults(array(ServiceResult::createWithError('error', 'Invalid data', '::GLOBAL::'))); return; } $results = array(); $f = new ArrayFilter(); foreach ($data as $command) { if (!is_array($command)) { $this->postResults(array(ServiceResult::createWithError('error', 'Invalid data', '::GLOBAL::'))); return; } $f->setData($command); $id = $f->get('id'); $command = $f->get('command'); $data = $f->asFilter('data'); $results[] = $this->_executeCommand($command, $data, $id); } $this->postResults($results); }
public function listSets($options) { $options = new ArrayFilter($options); $search = $options->get('search'); $sorting = $options->asFilter('sort'); $sortingField = $sorting->get('field'); $sortingDirection = $sorting->get('direction'); $offset = $options->get('offset', 0); $count = $options->get('count', 0); $parameters = array(); // Create queries $data = $this->_getListQueryData($options); // Create search queries $searchQueries =& $data['searchQueries']; if ($search != '') { foreach ($this->contents as $content) { if ($content->searchable) { $parameters['search'] = '%' . $search . '%'; $searchQueries[] = 'e.' . $content->name . ' LIKE :search'; } } } // Create query parts if ($searchQueries) { $filterClause = '(' . implode(' OR ', $searchQueries) . ')'; } else { $filterClause = '1 = 1'; } // Check for ordering $orderClause = ''; if ($sortingField) { foreach ($this->contents as $content) { if ($content->sortable && $content->name == $sortingField) { $orderClause = 'e.' . $content->name . ' ' . $sortingDirection; break; } } } if ($orderClause === '') { if ($data['select']['defaultOrder']) { $orderClause = $data['select']['defaultOrder']; } else { $orderField = $this->config->get('order'); if ($orderField) { $orderClause = 'e.' . $orderField; } else { $identifiers = $this->_getEntityManager()->getClassMetadata($this->_getEntityClass())->getIdentifierFieldNames(); $orderClause = 'e.' . $identifiers[0] . ' DESC'; } } } $queryLookUps = array('{where}', '{order}', '{e}', '{entity}'); $queryReplaces = array($filterClause, $orderClause, 'e', $this->_getEntityClass() . ' e'); $queryClauseLookUps = array('{select-clause}', '{where-clause}', '{order-clause}', '{from-clause}'); $queryClauseReplaces = array($data['clauses']['select'], $data['clauses']['where'], $data['clauses']['order'], $data['clauses']['from']); // Get items $queryData = $data['select']; $query = str_replace($queryClauseLookUps, $queryClauseReplaces, $queryData['query']); $query = str_replace($queryLookUps, $queryReplaces, $query); $parameters = array_merge($parameters, $queryData['parameters'], $data['parameters']); $query = $this->_getEntityManager()->createQuery($query); if ($offset) { $query->setFirstResult($offset); } if ($count) { $query->setMaxResults($count); } if ($parameters) { $query->setParameters($parameters); } $result = new DoctrineSetListResult($this, $query->getResult()); // Get count $queryData = $data['count']; $query = str_replace($queryClauseLookUps, $queryClauseReplaces, $queryData['query']); $query = str_replace($queryLookUps, $queryReplaces, $query); $query = $this->_getEntityManager()->createQuery($query); if ($parameters) { $query->setParameters($parameters); } $result->countAll = $query->getSingleScalarResult(); return $result; }