Repository URL to install this package:
|
Version:
0.2.1 ▾
|
<?php
/**
* Created by PhpStorm.
* User: danilo
* Date: 21/12/15
* Time: 12:49
*/
namespace Modules\Exams\Services;
use Illuminate\Contracts\View\Factory;
use Modules\Exams\Contracts\Repositories\AnswerRepository;
use Modules\Exams\Contracts\Repositories\QuestionRepository;
use Modules\Exams\Contracts\Repositories\ExamRepository;
use Modules\Exams\Transformers\QuestionsDatatableTransformer;
use Yajra\Datatables\Datatables;
use Yajra\Datatables\Services\DataTable as DataTableService;
class QuestionService extends DataTableService
{
// protected $printPreview = 'path-to-print-preview-view';
// protected $exportColumns = ['id', 'name'];
// protected $printColumns = '*';
/**
* @var QuestionRepository
*/
protected $questionRepository;
/**
* Medico constructor.
* @param ExamRepository $repository
*/
public function __construct(QuestionRepository $questionRepository, Datatables $datatables, Factory $viewFactory)
{
parent::__construct($datatables, $viewFactory);
$this->questionRepository = $questionRepository;
}
public function create(array $data, $exam)
{
try {
$answers = array_intersect_key($data, array_flip(preg_grep('/^answer_\d+$/', array_keys($data), 0)));
/** @var \Modules\Exams\Entities\Question $question */
$question = $this->questionRepository->create([
'title' => $data['title'],
'exam_id' => $exam,
'is_active' => $data['is_active']
]);
foreach($answers as $key => $title){
$temp = explode('_', $key);
$question->answer()->create([
'title' => $title,
'is_active' => true,
'is_correct' => end($temp) == $data['is_correct'],
'question_id' => $question->id
]);
}
return $question;
}
catch (\Exception $e) {
return false;
}
}
public function update($id, array $data)
{
try {
/** @var \Modules\Exams\Entities\Question $model */
$model = $this->questionRepository->find($id);
$model->fill([
'title' => $data['title'],
'is_active' => $data['is_active']
])->save();
$answers = array_intersect_key($data, array_flip(preg_grep('/^answer_\d+$/', array_keys($data), 0)));
foreach($answers as $key => $title){
$temp = explode('_', $key);
$aid = end($temp);
$adata = [
'title' => $title,
'is_active' => true,
'is_correct' => $aid == $data['is_correct'],
'exam_id' => $model->exam_id,
'question_id' => $model->id
];
$answer = $model->answer()->findOrNew($aid);
if($answer) {
$answer->fill($adata)->save();
}else{
$answer->create($adata);
}
}
$deletes = explode(',', $data['delete_answer']);
$query = $model->answer()->whereIn('id', $deletes);
$query->update(['is_correct' => false]);
$query->delete();
return $model;
}
catch (\Exception $e) {
die($e->getMessage());
return false;
}
}
public function findById($id)
{
return $this->questionRepository->find($id);
}
public function editId($id)
{
return $this->findById($id);
}
public function findAll()
{
}
public function delete($id)
{
return $this->questionRepository->delete($id);
}
public function countActive()
{
return $this->questionRepository->countActive();
}
/**
* Display ajax response.
*
* @return \Illuminate\Http\JsonResponse
*/
public function ajax()
{
$data = $this->datatables
->of($this->query())
->setTransformer(QuestionsDatatableTransformer::class)
->make(true);
return $data;
}
/**
* Get the query object to be processed by datatables.
*
* @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
*/
public function query()
{
$data = $this->questionRepository->getModel()->where('exam_id', \Request::route('exam_id'))->select(['id', 'title', 'exam_id', 'is_active']);
return $this->applyScopes($data);
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\Datatables\Html\Builder
*/
public function html()
{
$columns =[
['data' => 'title', 'name' => 'title', 'title' => trans('exams::questions.list.columns.name')],
['data' => 'is_active', 'name' => 'is_active', 'title' => trans('exams::questions.list.columns.is_active')]
];
return $this->builder()
->columns($columns)
->addAction([
'title' => trans('exams::questions.list.columns.action'),
'sClass' => 'dt-actions'
])
->ajax('')
->parameters([
'language' => trans('core::core.datatables'),
'dom' => 'Bfrtip',
'buttons' => [
'create',
'pdf',
'csv',
'print'
],
]);
}
}