Esempio n. 1
0
 /** НАДО ЗАМЕНИТЬ НА Cortex
  * Создает виртуальные поля в классе Query для связей один-ко-многим (выбирает значение из справочника для данного объекта)
  * Используется для нестандартных запросов. 
  * Более эффективно, так как нет фложенных селектов
  * @param DBAL\Query $query
  */
 private function addVirtualFieldsToQuery($query)
 {
     // Для всех связей один-ко-многим
     foreach ($this->tableMeta->getParents() as $v) {
         // Добавляем таблицу в секцию from
         $query->from(array($v['table']));
         $virtual_field_name = 'cat_' . $v['table'];
         // Добавляем и маппим в красивые имена title и slug из справочника (надо, чтобы формировать ссылки)
         $query->select(array($v['table'] . '.title as ' . $virtual_field_name, $v['table'] . '.slug as ' . $virtual_field_name . '_slug'));
         // Добавляем связь в условия запроса
         $query->conditions(array($this->table . '.fko_' . $v['table'] . '=' . $v['table'] . '.id'));
     }
 }
Esempio n. 2
0
 /**
  * Комплексная функция для сложного запроса с сортировкой и фильтрацией
  * @param int $start номер первой записи (для постраничного чтения)
  * @param int $limit количество записей (для постраничного чтения)
  * @param bool $group_id если null, то пользователи из всех групп
  * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление')
  * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) 
  * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug)
  * @return array результат запроса
  */
 public function get($start = 0, $limit = 10, $group_id = null, $sort = null, $filter = null)
 {
     $params = array();
     $params[] = '';
     $query = new DBALQuery();
     $query->select('_user.*')->from('_user')->options(array('order' => ['registered DESC']));
     $this->addVirtualFieldsToQuery($query);
     //		\helpers\Debug::prePrintR($filter);
     $clear_filter = $this->getFilterQueryPart($filter);
     //		\helpers\Debug::prePrintR($clear_filter);
     if (!is_null($group_id)) {
         $clear_filter[] = array('field' => 'group_id', 'value' => $group_id);
     }
     //		\helpers\Debug::prePrintR($query);
     $query->filters($clear_filter);
     //		\helpers\Debug::prePrintR($query);
     $list = $query->paginate($start, $limit);
     $users = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array());
     foreach ($list['subset'] as $k => $item) {
         $users['subset'][$k] = array_map('stripslashes', $item);
     }
     $users['pages'] = $this->getPaginationPages($users['count'], $users['pos']);
     return $users;
 }
Esempio n. 3
0
 /**
  * Комплексная функция для сложного запроса с сортировкой и фильтрацией
  * @param int $start номер первой записи (для постраничного чтения)
  * @param int $limit количество записей (для постраничного чтения)
  * @param bool $all если false, то только опубликованные
  * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление')
  * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) 
  * @param string $additional_confitions строка дополнительных условий, полученная, например, из классов сложных фильров или просто кусок запроса WHERE, который будет добавлен к основному условию через AND
  * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug)
  * @return array результат запроса
  */
 public function getList($start = 0, $limit = 10, $all = true, $sort = null, $filter = null, $additional_conditions = null, $with_related_fields = true)
 {
     $params = array();
     $params[] = '';
     $query = new DBALQuery();
     $group_table = \models\UserGroup::getInstance()->getTable();
     $query->select($this->table . '.*, ' . $group_table . '.name as group_name')->from($this->table)->from($group_table)->conditions([$this->table . '.group_id = ' . $group_table . '.id'])->options(array('order' => [$this->table . '.id DESC']));
     if ($additional_conditions) {
         $query->conditions([$additional_conditions]);
     }
     $list = $query->paginate($start, $limit);
     $nodes = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array());
     foreach ($list['subset'] as $k => $item) {
         $nodes['subset'][$k] = array_map('stripslashes', $item);
         $nodes['subset'][$k]['title'] = $this->toString($nodes['subset'][$k]);
     }
     $nodes['pages'] = $this->getPaginationPages($nodes['count'], $nodes['pos']);
     // \helpers\Debug::prePrintR($nodes);
     return $nodes;
 }
Esempio n. 4
0
 /**
  * Комплексная функция для сложного запроса с сортировкой и фильтрацией
  * @param int $start номер первой записи (для постраничного чтения)
  * @param int $limit количество записей (для постраничного чтения)
  * @param bool $all если false, то только опубликованные
  * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление')
  * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) 
  * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug)
  * @return array результат запроса
  */
 public function getList($start = 0, $limit = 10, $all = true, $sort = null, $filter = null, $with_related_fields = true)
 {
     $params = array();
     $params[] = '';
     $query = new DBALQuery();
     $query->select($this->table . '.*')->from($this->table);
     $list = $query->paginate($start, $limit);
     $nodes = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array());
     foreach ($list['subset'] as $k => $item) {
         $nodes['subset'][$k] = array_map('stripslashes', $item);
     }
     $nodes['pages'] = $this->getPaginationPages($nodes['count'], $nodes['pos']);
     // \helpers\Debug::prePrintR($nodes);
     return $nodes;
 }
Esempio n. 5
0
 /**
  * Комплексная функция для сложного запроса с сортировкой и фильтрацией
  * @param int $start номер первой записи (для постраничного чтения)
  * @param int $limit количество записей (для постраничного чтения)
  * @param bool $all если false, то только опубликованные
  * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление')
  * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) 
  * @param string $additional_confitions строка дополнительных условий, полученная, например, из классов сложных фильров или просто кусок запроса WHERE, который будет добавлен к основному условию через AND
  * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug)
  * @return array результат запроса
  */
 public function get($start = 0, $limit = 10, $all = true, $sort = null, $filter = null, $additional_conditions = null, $with_related_fields = true)
 {
     $params = array();
     $params[] = '';
     $query = new DBALQuery();
     $query->select($this->table . '.*')->from($this->table)->options(array('order' => $this->getSortQueryPart($sort)));
     if ($additional_conditions) {
         $query->conditions([$additional_conditions]);
     }
     //		echo $this->table.' '.$limit;
     //              \helpers\Debug::prePrintR($filter);
     $clear_filter = $this->getFilterQueryPart($filter);
     //              \helpers\Debug::prePrintR($clear_filter);
     // Проверка на наличие pid в фильтре, в этом случае надо посчитать кол-во потомков
     foreach ($clear_filter as $k => $c_filter) {
         if ($c_filter['field'] == 'pid') {
             $clear_filter[$k]['field'] = $this->table . '.pid';
             // Чтобы не было ambigious
             $query->join($this->table);
             $query->options(['group' => [$this->table . '.id']]);
             break;
         }
     }
     if (!$all) {
         $clear_filter[] = array('field' => $this->table . '.published', 'value' => 1);
     }
     //		\helpers\Debug::prePrintR($query);
     $query->filters($clear_filter);
     //		\helpers\Debug::prePrintR($query);
     if ($with_related_fields) {
         $this->addVirtualFieldsToQuery($query);
         //			\helpers\Debug::prePrintR($query);
     }
     if ($this->tableMeta->isSortable()) {
         $list['subset'] = $query->exec();
     } else {
         $list = $query->paginate($start, $limit);
     }
     //		\helpers\Debug::prePrintR($list['subset']);
     if ($this->tableMeta->hasItems()) {
         $item_model = \models\ContentItem::getInstance($this->table);
     }
     $nodes = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array());
     //		$related_cats = RelationsManager::getPlural($this->slug);
     foreach ($list['subset'] as $k => $item) {
         $nodes['subset'][$k] = array_map('stripslashes', $item);
         if ($this->tableMeta->hasItems()) {
             $nodes['subset'][$k]['content_count'] = $item_model->count($item['id']);
             $nodes['subset'][$k]['tn'] = $item_model->getThumbnailId($item['id']);
         } else {
             $nodes['subset'][$k]['content_count'] = 0;
             $nodes['subset'][$k]['tn'] = null;
         }
         //			if (count($related_cats) > 0) {
         //				foreach ($related_cats as $rel_cat) {
         ////					\helpers\Debug::prePrintR($rel_cat);
         //					$nodes['subset'][$k]['releated'][$rel_cat['label']] = RelationsManager::getPluralSelectedFull($item['id'], $this->slug, $rel_cat['full_table_name']);
         //					//$nc[$v['table']] = new NodeCategory($v['table']);
         //				}
         //			}
     }
     if (!$this->tableMeta->isSortable()) {
         $nodes['pages'] = $this->getPaginationPages($nodes['count'], $nodes['pos']);
     }
     //		\helpers\Debug::prePrintR($nodes);
     return $nodes;
 }
Esempio n. 6
0
 public function getGroupList($group_id, $start = 0, $limit = 10)
 {
     $query = new DBALQuery();
     $query->select($this->table . '.*')->from($this->table)->filters(['field' => 'group_id', 'value' => $group_id])->options(array('order' => array('registered DESC')));
     $this->addVirtualFieldsToQuery($query);
     $list = $query->paginate($start, $limit);
     $users = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array());
     foreach ($list['subset'] as $k => $item) {
         $users['subset'][$k] = array_map('stripslashes', $item);
     }
     $pages = array();
     for ($i = 0; $i < $users['count']; $i++) {
         $pages[$i] = $i == $users['pos'] ? 'disabled' : 'active';
     }
     $users['pages'] = $pages;
     return $users;
 }