additionalValues = $values; } /** * @param $class */ public function setAdditionalTableClass($class){ $this->additionalTableClass = $class; } /** * Default unlink button * * @var array */ protected $btnUnlink = [ 'unlink' => [ 'data' => 'unlink', 'title' => '', 'data_type' => 'unlink', 'orderable' => false, 'searchable' => false, ] ]; /** * Default checkbox button * * @var array */ protected $btnCheck_selection = [ 'check_select' => [ 'data' => 'check_select', 'class' => 'check_select', 'title' => '', 'data_type' => 'check_select', 'orderable' => false, 'searchable' => false, ] ]; /** * Default quick edit button * * @var array */ protected $btnQuick_edit = [ 'quick_edit' => [ 'data' => 'quick_edit', 'title' => '', 'data_type' => 'quick_edit', 'orderable' => false, 'searchable' => false, ] ]; protected $excludeFromExport = [ 'quick_edit','check_select','unlink' ]; protected $excludeFromPrint = [ 'quick_edit','check_select','unlink' ]; /** * Available query filters definition * @return array */ public static function availableQueryFilters(){ return []; } /** * Available columns */ public static function availableColumns(){ return []; } protected function setFilterDefinition() { $this->filterDefinition = self::availableQueryFilters(); } public function getFilterDefinition() { return $this->filterDefinition; } /** * @param $route */ public function setAjaxSource($route) { $this->sourceRoute = $route; } public function setTableId($tableId) { $this->tableId = $tableId; } /** * Apply rules from jquery rules builder * * @param $rules */ public function applyFilterRules($rules) { $this->filterRules = $rules; } public function applyAdvancedView($view,$moduleName){ if(!empty($view->defined_columns)){ $columns = unserialize($view->defined_columns); $allColumns = $this->availableColumns(); if(!empty($columns)) { foreach ($columns as $key => $value) { $this->advancedView[$value] = $allColumns[$value]; } }else{ $this->advancedView = $allColumns; } if(!empty($view->filter_rules) && empty($this->filterRules)){ $this->filterRules = $view->filter_rules; } } // base on $view && $moduleName // find check if user can access this if not return default view. } /** * Display ajax response. * * Clamps the requested page length to the configured maximum so a single * request can never ask the server for an unreasonable amount of rows. * * @return \Illuminate\Http\JsonResponse */ public function ajax() { $this->clampPageLength(); return parent::ajax(); } /** * Limit the "length" request parameter to $maxPageLength when configured. * * @return void */ protected function clampPageLength() { if (empty($this->maxPageLength)) { return; } $request = request(); $length = (int) $request->input('length', 0); if ($length > 0 && $length <= $this->maxPageLength) { return; } // Keep the DataTables default length (10) when nothing was requested. $length = $length > 0 ? $this->maxPageLength : 10; $request->query->set('length', $length); $request->request->set('length', $length); } /** * @return \Yajra\DataTables\Html\Builder */ public function builder() { $this->setFilterDefinition(); $builder = parent::builder(); $builder->hasQueryFilters = false; if (!empty($this->filterDefinition)) { $builder->hasQueryFilters = true; } if ($this->tableId != '') { $builder = $builder->setTableId($this->tableId); } if ($this->sourceRoute != '') { $builder = $builder->ajax($this->sourceRoute); } return $builder; } /** * @param EloquentDataTable $table * @param $route * @param null $prefix */ public function applyLinks(EloquentDataTable $table, $route, $prefix = null) { $rawColumns = []; $table->addRowAttr('record-id', function ($record) { return $record->id; }); $table->addRowAttr('record-type', function ($record) { return get_class($record); }); foreach ($this->getColumns() as $column => $properties) { $rawColumns[] = $column; if (isset($properties['data_type']) && $properties['data_type'] === 'none') { continue; } $table->editColumn($column, function ($record) use ($column, $properties, $route, $prefix) { if ($properties['data_type'] == 'unlink') { $recordId = $record->id; $view = view('core::crud.relation.unlink'); $view->with('entityId', $this->entityId); $view->with('relationEntityId', $recordId); $view->with('unlink_route', $this->unlinkRoute); return $view; } if ($properties['data_type'] == 'quick_edit') { $recordId = $record->id; $view = view('core::crud.relation.quick_edit'); $view->with('entityId', $this->entityId); $view->with('relationEntityId', $recordId); $view->with('editRouteAdditionalParams',$this->editRouteAdditionalParams); $view->with('edit_route', $this->editRoute); return $view; } if ($properties['data_type'] == 'check_select') { $recordId = $record->id; return ''; } return DataTableHelper::renderLink($column, $record, $properties, $route, $prefix); }); } $table->rawColumns($rawColumns); } /** * @return array */ protected function getColumns() { return []; } }