forked from devfelipereis/laravel-quiz
/
AlternativeDataTable.php
90 lines (81 loc) · 3 KB
/
AlternativeDataTable.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
namespace PandoApps\Quiz\DataTables;
use Illuminate\Database\Eloquent\Builder;
use PandoApps\Quiz\DataTables\AlternativeDataTableInterface;
use PandoApps\Quiz\Models\Alternative;
use PandoApps\Quiz\Services\DataTablesDefaults;
use Yajra\DataTables\Datatables;
use Yajra\DataTables\Services\DataTable;
class AlternativeDataTable extends DataTable implements AlternativeDataTableInterface
{
/**
* Build DataTable class.
*
* @return \Yajra\DataTables\Datatables
*/
public function dataTable()
{
$parentName = config('quiz.models.parent_url_name');
$parentId = config('quiz.models.parent_id');
$parentId = request()->$parentId;
$alternativeId = request()->alternative_id;
$questionId = request()->question_id;
if ($alternativeId) {
$alternatives = Alternative::whereHas('question.questionnaire', function (Builder $query) use ($parentId) {
$query->where('parent_id', $parentId);
})->where('alternative_id', $alternativeId)->with('question');
} else {
$alternatives = Alternative::whereHas('question.questionnaire', function (Builder $query) use ($parentId) {
$query->where('parent_id', $parentId);
});
}
if ($questionId) {
$alternatives = $alternatives->where('question_id', $questionId);
}
return Datatables::of($alternatives)
->addColumn('action', 'pandoapps::alternatives.datatables_actions')
->addColumn('question', function (Alternative $alternative) {
return $alternative->question->description;
})
->editColumn('is_correct', function (Alternative $alternative) {
return $alternative->is_correct ? 'Sim' : 'Não';
})
->rawColumns(['action', 'question']);
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->minifiedAjax()
->columns($this->getColumns())
->addAction(['printable' => false, 'title' => 'Opções'])
->parameters(DataTablesDefaults::getParameters());
}
/**
* Get columns.
*
* @return array
*/
public function getColumns()
{
return [
'question' => ['title' => \Lang::get('pandoapps::datatable.columns.alternatives.question')],
'description' => ['title' => \Lang::get('pandoapps::datatable.columns.alternatives.description')],
'value' => ['title' => \Lang::get('pandoapps::datatable.columns.alternatives.value')],
'is_correct' => ['title' => \Lang::get('pandoapps::datatable.columns.alternatives.is_correct')],
];
}
/**
* Get filename for export.
*
* @return string
*/
public function filename()
{
return 'questionnairesdatatable_' . time();
}
}