Exemplo n.º 1
0
 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));
 }