Example #1
0
 public function applyDatasetFilters($dataset, $ignore_sorting = false)
 {
     if (!empty($dataset['filters'])) {
         foreach ($dataset['filters'] as $filter) {
             if ($filter['value'] === '' && !in_array($filter['condition'], array('nn', 'ni'))) {
                 continue;
             }
             if (empty($filter['condition'])) {
                 continue;
             }
             if ($filter['value'] !== '') {
                 $filter['value'] = string_replace_user_properties($filter['value']);
             }
             switch ($filter['condition']) {
                 // общие условия
                 case 'eq':
                     $this->filterEqual($filter['field'], $filter['value']);
                     break;
                 case 'gt':
                     $this->filterGt($filter['field'], $filter['value']);
                     break;
                 case 'lt':
                     $this->filterLt($filter['field'], $filter['value']);
                     break;
                 case 'ge':
                     $this->filterGtEqual($filter['field'], $filter['value']);
                     break;
                 case 'le':
                     $this->filterLtEqual($filter['field'], $filter['value']);
                     break;
                 case 'nn':
                     $this->filterNotNull($filter['field']);
                     break;
                 case 'ni':
                     $this->filterIsNull($filter['field']);
                     break;
                     // строки
                 // строки
                 case 'lk':
                     $this->filterLike($filter['field'], '%' . $filter['value'] . '%');
                     break;
                 case 'lb':
                     $this->filterLike($filter['field'], $filter['value'] . '%');
                     break;
                 case 'lf':
                     $this->filterLike($filter['field'], '%' . $filter['value']);
                     break;
                     // даты
                 // даты
                 case 'dy':
                     $this->filterDateYounger($filter['field'], $filter['value']);
                     break;
                 case 'do':
                     $this->filterDateOlder($filter['field'], $filter['value']);
                     break;
             }
         }
     }
     if (!empty($dataset['sorting']) && !$ignore_sorting) {
         $this->orderByList($dataset['sorting']);
     }
     return true;
 }
Example #2
0
 private function getData($source, $period)
 {
     $this->model->selectOnly($source['key'], 'date')->select('COUNT(1)', 'count')->filterFunc($source['key'], "(CURDATE() - INTERVAL {$period} DAY)", '>=')->orderBy($source['key'], 'asc');
     if (isset($source['filter'])) {
         foreach ($source['filter'] as $filter) {
             if ($filter['value'] === '' && !in_array($filter['condition'], array('nn', 'ni'))) {
                 continue;
             }
             if (empty($filter['condition'])) {
                 continue;
             }
             if ($filter['value'] !== '') {
                 $filter['value'] = string_replace_user_properties($filter['value']);
             }
             switch ($filter['condition']) {
                 // общие условия
                 case 'eq':
                     $this->model->filterEqual($filter['field'], $filter['value']);
                     break;
                 case 'gt':
                     $this->model->filterGt($filter['field'], $filter['value']);
                     break;
                 case 'lt':
                     $this->model->filterLt($filter['field'], $filter['value']);
                     break;
                 case 'ge':
                     $this->model->filterGtEqual($filter['field'], $filter['value']);
                     break;
                 case 'le':
                     $this->model->filterLtEqual($filter['field'], $filter['value']);
                     break;
                 case 'nn':
                     $this->model->filterNotNull($filter['field']);
                     break;
                 case 'ni':
                     $this->model->filterIsNull($filter['field']);
                     break;
                     // строки
                 // строки
                 case 'lk':
                     $this->model->filterLike($filter['field'], '%' . $filter['value'] . '%');
                     break;
                 case 'lb':
                     $this->model->filterLike($filter['field'], $filter['value'] . '%');
                     break;
                 case 'lf':
                     $this->model->filterLike($filter['field'], '%' . $filter['value']);
                     break;
                     // даты
                 // даты
                 case 'dy':
                     $this->model->filterDateYounger($filter['field'], $filter['value']);
                     break;
                 case 'do':
                     $this->model->filterDateOlder($filter['field'], $filter['value']);
                     break;
             }
         }
     }
     $this->model->group_by = $period < 300 ? "DAY({$source['key']})" : "MONTH({$source['key']})";
     return (array) $this->model->get($source['table'], false, false);
 }
Example #3
0
 public static function buildMenu($menus, $parse_hooks = true)
 {
     $items = array();
     $user = cmsUser::getInstance();
     // перебираем все вернувшиеся пункты меню
     foreach ($menus as $item) {
         $is_root_added = false;
         if ($item['groups_view'] && !$user->isInGroups($item['groups_view'])) {
             continue;
         }
         if ($item['groups_hide'] && $user->isInGroups($item['groups_hide'])) {
             continue;
         }
         $hook_result = array('items' => false);
         if ($parse_hooks) {
             // если URL пункта меню содержит свойство пользователя
             if (strpos($item['url'], '{user.') !== false) {
                 $item['url'] = string_replace_user_properties($item['url']);
             } else {
                 // если URL пункта меню содержит шаблон {controller:action}
                 if (preg_match('/^{([a-z0-9]+):*([a-z0-9_]*)}$/i', $item['url'], $matches)) {
                     // то вызываем хук menu указанного контроллера
                     $controller = $matches[1];
                     $action = $matches[2];
                     $hook_result = cmsEventsManager::hook("menu_{$controller}", array('action' => $action, 'menu_item_id' => $item['id'], 'menu_item_url' => $item['url']));
                     // если хук вернул результат
                     if ($hook_result) {
                         // получаем новый URL пункта меню
                         $item['url'] = isset($hook_result['url']) ? $hook_result['url'] : '';
                         if (isset($hook_result['counter'])) {
                             $item['counter'] = $hook_result['counter'];
                         }
                         if (isset($hook_result['items']) && is_array($hook_result['items'])) {
                             $item['childs_count'] = sizeof($hook_result['items']);
                         }
                         $is_root_added = true;
                     } else {
                         continue;
                     }
                 }
             }
             $is_external = mb_strpos($item['url'], '://') !== false;
             if (!$is_root_added && !$is_external) {
                 $item['url'] = href_to($item['url']);
             }
         }
         // добавляем обработанную строку в результирующий массив
         $items[$item['id']] = $item;
         // получаем дополнительные пункты меню
         if (isset($hook_result['items']) && is_array($hook_result['items'])) {
             foreach ($hook_result['items'] as $i) {
                 $i['menu_id'] = $item['menu_id'];
                 $items[$i['id']] = $i;
             }
         }
     }
     $tree = array();
     cmsModel::buildTreeRecursive($items, $tree);
     // возвращаем дерево
     return $tree;
 }