Esempio n. 1
0
 /**
  * Overload render for array data output
  *
  * @param \FrenchFrogs\Table\Table\Table $table
  * @return array
  */
 public function table(Table\Table $table)
 {
     // INitilisation du CSV
     $csv = Writer::createFromFileObject(new \SplTempFileObject());
     // gestion des colonne
     $header = $columns = [];
     foreach ($table->getColumns() as $index => $column) {
         // Seule les colonnes Exportable peuvent être exporté
         if ($column instanceof Exportable) {
             $columns[$index] = $column;
             $header[$index] = $column->getLabel();
         }
     }
     // insertion du header
     $csv->insertOne(array_values($header));
     //@todo mettre en place un streaming pour économiser la memoire
     // insertion des lignes
     foreach ($table->getRows() as $row) {
         $line = [];
         foreach (array_keys($header) as $index) {
             $line[] = $columns[$index]->getValue($row);
         }
         $csv->insertOne($line);
     }
     $csv->output($table->getFilename());
     exit;
 }
Esempio n. 2
0
 /**
  * Execute strainer
  *
  * @param \FrenchFrogs\Table\Table\Table $table
  * @param array ...$params
  * @return $this
  * @throws \Exception
  */
 public function call(\FrenchFrogs\Table\Table\Table $table, ...$params)
 {
     if ($this->hasCallable()) {
         call_user_func_array($this->callable, $params);
     } else {
         // verify that source is a query
         if (!$table->isSourceQueryBuilder()) {
             throw new \Exception('Table source is not an instance of query builder');
         }
         // recuperation des valeurs
         $params = explode('#', $params[0]);
         $e = $this->getElement();
         // from
         if (!empty($params[0])) {
             $from = $e->setValue($params[0])->getFilteredValue();
             $table->getSource()->where($this->getField(), '>=', $from);
         }
         // to
         if (!empty($params[1])) {
             $to = $e->setValue($params[1])->getFilteredValue();
             $to = \Carbon\Carbon::createFromFormat($e->getFormatStore(), $to)->addDay(1)->format($e->getFormatStore());
             $table->getSource()->where($this->getField(), '<', $to);
         }
     }
     return $this;
 }
Esempio n. 3
0
 /**
  * Overload render for array data output
  *
  * @param \FrenchFrogs\Table\Table\Table $table
  * @return array
  */
 public function table(Table\Table $table)
 {
     $data = [];
     foreach ($table->getRows() as $row) {
         $line = [];
         foreach ($table->getColumns() as $name => $column) {
             $line[] = $column->render((array) $row);
         }
         $data[] = $line;
     }
     return $data;
 }
Esempio n. 4
0
 /**
  * Execute strainer
  *
  * @param \FrenchFrogs\Table\Table\Table $table
  * @param array ...$params
  * @return $this
  * @throws \Exception
  */
 public function call(\FrenchFrogs\Table\Table\Table $table, ...$params)
 {
     if ($this->hasCallable()) {
         call_user_func_array($this->callable, $params);
     } else {
         // verify that source is a query
         if (!$table->isSourceQueryBuilder()) {
             throw new \Exception('Table source is not an instance of query builder');
         }
         $table->getSource()->where($this->getField(), 'LIKE', '%' . $params[0] . '%');
     }
     return $this;
 }
 /**
  * Datatable render
  * @param string $route
  */
 public function bootDatatable($route = '/datatable/{token}')
 {
     // gestion de la navifgation Ajax
     Route::get($route, function ($token) {
         try {
             $request = request();
             // chargement de l'objet
             $table = FrenchFrogs\Table\Table\Table::load($token);
             // configuration de la navigation
             $table->setItemsPerPage(Input::get('length'));
             $table->setPageFromItemsOffset(Input::get('start'));
             $table->setRenderer(new FrenchFrogs\Table\Renderer\Remote());
             // gestion des reccherches
             foreach (request()->get('columns') as $c) {
                 if ($c['searchable'] == "true" && $c['search']['value'] != '') {
                     $table->getColumn($c['name'])->getStrainer()->call($table, $c['search']['value']);
                 }
             }
             // gestion de la recherche globale
             $search = $request->get('search');
             if (!empty($search['value'])) {
                 $table->search($search['value']);
             }
             // gestion du tri
             $order = $request->get('order');
             if (!empty($order)) {
                 if ($table->isSourceQueryBuilder()) {
                     $table->getSource()->orders = [];
                 }
                 foreach ($order as $o) {
                     extract($o);
                     $table->getColumnByIndex($column)->order($dir);
                 }
             }
             // recuperation des données
             $data = [];
             foreach ($table->render() as $row) {
                 $data[] = array_values($row);
             }
             return response()->json(['data' => $data, 'draw' => Input::get('draw'), 'recordsFiltered' => $table->getItemsTotal(), 'recordsTotal' => $table->getItemsTotal()]);
         } catch (\Exception $e) {
             //Si on catch une erreur on renvoi une reponse json avec le code 500
             return response()->json(['error' => $e->getMessage()], 500);
         }
     })->name('datatable');
     /**
      * Gestion de l'export CSV
      */
     Route::get($route . '/export', function ($token) {
         $table = FrenchFrogs\Table\Table\Table::load($token);
         $table->setItemsPerPage(5000);
         $table->toCsv();
     })->name('datatable-export');
     /**
      * Gestion de l'edition en remote
      *
      */
     Route::post($route, function ($token) {
         $request = request();
         $table = FrenchFrogs\Table\Table\Table::load($token);
         return $table->getColumn($request->get('column'))->remoteProcess($request->get('id'), $request->get('value'));
     });
 }
Esempio n. 6
0
 /**
  * Render datatable js
  *
  * @param \FrenchFrogs\Table\Table\Table $table
  * @return string
  */
 public function datatable(Table\Table $table)
 {
     $options = [];
     // Is remote loading
     if ($table->isRemote()) {
         $table->addClass('datatable-remote');
         $table->save();
         $options += ['ajax' => ['url' => route('datatable', ['token' => $table->getToken()])], 'processing' => true, 'serverSide' => true, 'pageLength' => $table->getItemsPerPage(), 'deferLoading' => $table->getItemsTotal()];
     }
     //param par default
     $options += ['searching' => true];
     //Param dom datatable
     $dom = '';
     //header dom
     $dom .= '<"dataTables_wrapper no-footer"<"row"<"col-md-6 col-sm-12"lB>';
     // is a search is set
     if ($table->hasSearch()) {
         $dom .= '<"col-md-6 col-sm-12"f>';
     }
     $dom .= '>';
     //dom table
     $dom .= '<"table-scrollable"t>';
     //footer dom
     if ($table->hasFooter()) {
         $dom .= '<"row"<"col-md-5 col-sm-12"i><"col-md-7 col-sm-12"p>>';
     }
     //Set dom
     $options += ['dom' => $dom];
     // columns mamangement
     $columns = [];
     $order = [];
     $index = 0;
     $search = '';
     foreach ($table->getColumns() as $c) {
         $data = [];
         /**@var Column\Column $c */
         $class = $c->getClasses();
         if (!empty($class)) {
             $data['className'] = trim($class);
         }
         // width
         if ($c->hasWidth()) {
             $data['width'] = $c->getWidth();
         }
         // other column attribute
         $data['orderable'] = $c->hasOrder();
         $data['searchable'] = $c->hasStrainer();
         $data['name'] = $c->getName();
         if ($data['searchable'] && !is_null($value = $c->getStrainer()->getValue())) {
             $value = is_bool($value) ? intval($value) : $value;
             $search[] = $value;
         } else {
             $search[] = null;
         }
         // set order for main table
         if ($c->hasOrderDirection()) {
             $order[] = [$index, $c->getOrderDirection()];
         }
         // set columns to null if column parameters is empty
         $columns[] = empty($data) ? null : $data;
         $index++;
     }
     if (!empty($columns)) {
         $options += ['columns' => $columns];
     }
     // buttons
     if ($table->hasDatatableButtons()) {
         $options += ['buttons' => $table->getDatatableButtons()];
     }
     // main order foir the table
     $options['order'] = $order;
     js('onload', '#' . $table->getAttribute('id'), 'dtt', $options);
     // init search configuration - seartchcols doesn't work
     foreach ($search as $i => $s) {
         if (is_null($s)) {
             continue;
         }
         js('onload', '#' . $table->getAttribute('id'), 'DataTable().columns(' . $i . ').search', $s);
     }
     return '';
 }