예제 #1
0
 /** @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);
 }
예제 #2
0
 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;
 }