/** * Get rows for manager * * @param array $params * @param object $model * @return type */ public function getRows($params = [], $model = null) { $modelName = $this->modelName; if (!class_exists($modelName)) { return []; } if (!$this->checkAccess()) { $this->drawError('you not have access to "' . $this->modelName . '" manager with name: "' . $this->managerName . '"'); return []; } $modelName = $this->modelName; $queryParams = []; if (empty($params['all'])) { if (!empty($params['limit'])) { $this->limit = (int) $params['limit']; } if (!empty($params['page'])) { $this->page = (int) $params['page']; } $queryParams['limit'] = $this->limit; $queryParams['start'] = $this->page * $this->limit - $this->limit; } if (!empty($params['categoryPath']) && $modelName::$categoryModel) { $queryParams['where'][] = ['tree_path', $params['categoryPath'] . '%', 'LIKE']; } if (!empty($params['appType'])) { $queryParams['appType'] = $params['appType']; } if ($this->joins) { $queryParams['joins'] = $this->joins; } if (!empty($this->managerOptions['userGroupFilter'][\Users\User::$cur->group_id]['getRows'])) { foreach ($this->managerOptions['userGroupFilter'][\Users\User::$cur->group_id]['getRows'] as $colName => $colOptions) { if (!empty($colOptions['userCol'])) { if (strpos($colOptions['userCol'], ':')) { $rel = substr($colOptions['userCol'], 0, strpos($colOptions['userCol'], ':')); $param = substr($colOptions['userCol'], strpos($colOptions['userCol'], ':') + 1); $queryParams['where'][] = [$colName, \Users\User::$cur->{$rel}->{$param}]; } } elseif (isset($colOptions['value'])) { $queryParams['where'][] = [$colName, $colOptions['value'], is_array($colOptions['value']) ? 'IN' : '=']; } } } if (!empty($this->managerOptions['filters'])) { foreach ($this->managerOptions['filters'] as $col) { $colInfo = $modelName::getColInfo($col); switch ($colInfo['colParams']['type']) { case 'select': if (empty($params['filters'][$col]['value'])) { continue; } if (is_array($params['filters'][$col]['value'])) { foreach ($params['filters'][$col]['value'] as $key => $value) { if ($value === '') { unset($params['filters'][$col]['value'][$key]); } } } if (!$params['filters'][$col]['value']) { continue; } $queryParams['where'][] = [$col, $params['filters'][$col]['value'], is_array($params['filters'][$col]['value']) ? 'IN' : '=']; break; case 'bool': if (!isset($params['filters'][$col]['value']) || $params['filters'][$col]['value'] === '') { continue; } $queryParams['where'][] = [$col, $params['filters'][$col]['value']]; break; case 'dateTime': case 'date': if (empty($params['filters'][$col]['min']) && empty($params['filters'][$col]['max'])) { continue; } if (!empty($params['filters'][$col]['min'])) { $queryParams['where'][] = [$col, $params['filters'][$col]['min'], '>=']; } if (!empty($params['filters'][$col]['max'])) { if ($colInfo['colParams']['type'] == 'dateTime' && !strpos($params['filters'][$col]['max'], ' ')) { $date = $params['filters'][$col]['max'] . ' 23:59:59'; } else { $date = $params['filters'][$col]['max']; } $queryParams['where'][] = [$col, $date, '<=']; } break; case 'number': if (empty($params['filters'][$col]['min']) && empty($params['filters'][$col]['max'])) { continue; } if (!empty($params['filters'][$col]['min'])) { $queryParams['where'][] = [$col, $params['filters'][$col]['min'], '>=']; } if (!empty($params['filters'][$col]['max'])) { $queryParams['where'][] = [$col, $params['filters'][$col]['max'], '<=']; } break; case 'email': case 'text': case 'textarea': case 'html': if (empty($params['filters'][$col]['value'])) { continue; } switch ($params['filters'][$col]['compareType']) { case 'contains': $queryParams['where'][] = [$col, '%' . $params['filters'][$col]['value'] . '%', 'LIKE']; break; case 'equals': $queryParams['where'][] = [$col, $params['filters'][$col]['value']]; break; case 'starts_with': $queryParams['where'][] = [$col, $params['filters'][$col]['value'] . '%', 'LIKE']; break; case 'ends_with': $queryParams['where'][] = [$col, '%' . $params['filters'][$col]['value'], 'LIKE']; break; } break; } } } if (!empty($params['mode']) && $params['mode'] == 'sort') { $queryParams['order'] = ['weight', 'asc']; } elseif (!empty($params['sortered']) && !empty($this->managerOptions['sortable'])) { foreach ($params['sortered'] as $key => $sortType) { $keys = array_keys($this->managerOptions['cols']); $colName = ''; if (isset($keys[$key])) { if (is_array($this->managerOptions['cols'][$keys[$key]])) { $colName = $keys[$key]; } else { $colName = $this->managerOptions['cols'][$keys[$key]]; } } if ($colName && in_array($colName, $this->managerOptions['sortable'])) { $sortType = in_array($sortType, ['desc', 'asc']) ? $sortType : 'desc'; $queryParams['order'][] = [$colName, $sortType]; } } } if ($model && !empty($params['relation'])) { $relation = $model::getRelation($params['relation']); $items = $model->{$params}['relation']($queryParams); } else { $relation = false; $items = $modelName::getList($queryParams); } $rows = []; foreach ($items as $item) { if ($relation && !empty($relation['relModel'])) { $item = $relation['relModel']::get([[$item->index(), $item->id], [$model->index(), $model->id]]); } $row = []; $row[] = '<input type ="checkbox" name = "pk[]" value =' . $item->pk() . '>'; $row[] = $item->pk(); foreach ($this->managerOptions['cols'] as $key => $colName) { if (!empty($params['download'])) { $row[] = \Model::getColValue($item, is_array($colName) ? $key : $colName, true, false); } else { $row[] = DataManager::drawCol($item, is_array($colName) ? $key : $colName, $params, $this); } } $row[] = $this->rowButtons($item, $params); $rows[] = $row; } return $rows; }