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; }
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); }
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; }