Example #1
0
 /**
  * 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;
 }