protected function grid_data() { $this->show_layout = false; $return_value = array('recordsTotal' => 0, 'recordsFiltered' => 0, 'data' => array()); $limit = Arr::get($_GET, 'length', 10); $offset = Arr::get($_GET, 'start', 0); $model = $this->app->models->factory($this->model); $filter_value = null; $return_uri = $this->return_uri; if ($this->filter_param !== null) { $filter_value = Arr::get($_GET, $this->filter_param); if ($filter_value === null) { throw new Exception("filter param {$this->filter_param} not specified"); } $model->where($this->filter_param, '=', new MongoId($filter_value)); $return_uri = str_replace("<id>", $filter_value, $return_uri); } if (isset($_POST['update_sort'])) { $this->update_sort($model->find_all()->as_array(), explode(",", $_POST['ids'])); $this->response->body("true"); $this->show_layout = false; return; } $cursor = $model->find_all(); $return_value['recordsTotal'] = $cursor->count(); $return_value['recordsFiltered'] = $return_value['recordsTotal']; $cursor->limit($limit); $cursor->skip($offset); if (isset($_GET['order']) && is_array($_GET['order']) && count($_GET['order']) > 0) { $sort = array(); foreach ($_GET['order'] as $order_config) { if (isset($this->columns[$order_config['column']])) { $sort[(string) $this->columns[$order_config['column']]] = $order_config['dir'] == 'desc' ? -1 : 1; } } } $return_value['sort'] = $sort; $cursor->sort($sort); $fields = $model->get_fields(); while ($item = $cursor->getNext()) { $item_data = array(); foreach ($this->columns as $column) { $val = ""; if ($column instanceof \Door\BSPanel\Data\IColumn) { $val = $column->render($item); } else { $val = $item->{$column}; if ($fields[$column]['type'] == 'boolean') { $val = Icons::show($val ? "ok" : "remove"); } if ($fields[$column]['type'] == 'date') { $val = date('d.m.Y', $val); } } $item_data[] = $val; } $buttons_text = ""; foreach ($this->buttons as $button) { $buttons_text .= " " . $button->render($this->app, array("<id>" => $item->pk())); } $item_data[] = $buttons_text; $return_value['data'][] = $item_data; } $this->response->headers("Content-Type", "application/json; charset=utf-8"); $this->response->body(json_encode($return_value)); }