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 [];
}
}