/home/mip/mip/app/Modules/Client/Repositories/Questionnaire/QuestionRepository.php
<?php
namespace QxCMS\Modules\Client\Repositories\Questionnaire;
use QxCMS\Modules\AbstractRepository;
use QxCMS\Modules\Client\Models\Questionnaire\Question;
use QxCMS\Modules\Client\Models\Settings\UserLogs\UserLogs as Log;
class QuestionRepository extends AbstractRepository implements QuestionRepositoryInterface
{
protected $model;
protected $log;
function __construct(Question $model, Log $log)
{
$this->model = $model;
$this->log = $log;
}
public function create(array $request)
{
$user = auth()->user();
$model = $this->model->fill($this->_serialize($request));
$model->save();
$this->log->saveLog(['action' => 'Create', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id, 'sub_menu' => 'Questions-'.$model->template_id]);
return $model;
}
public function _serialize(array $request)
{
if(isset($request['template_id'])) {
$order = $this->model->where('template_id', $request['template_id'])->count();
$request['order'] = $order + 1;
}
if(!isset($request['required'])) $request['required'] = false;
if(!isset($request['multiple_select'])) $request['multiple_select'] = false;
return $request;
}
public function update($id, array $request)
{
$user = auth()->user();
$model = $this->findById($id);
$model->fill($this->_serialize($request));
if(count($model->getDirty()) > 0) {
$model->save();
session()->flash('success', 'Question is successfully updated.');
$this->log->saveLog(['action' => 'Update', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id, 'sub_menu' => 'Questions-'.$model->template_id]);
}
return $model;
}
public function delete($id)
{
$user = auth()->user();
$model = $this->findById($id);
$model->answers()->delete();
$model->delete();
$this->log->saveLog(['action' => 'Delete', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id, 'sub_menu' => 'Questions-'.$model->template_id]);
return $this->getAjaxResponse('success', 'Question and its answers are successfully deleted.');
}
public function sort($order = 0, $id = 0)
{
if($id <> 0) {
$model = $this->model->find($id);
$model->order = $order;
$model->save();
}
return;
}
public function copyQuestion($question = null)
{
$user = auth()->user();
if($question != null)
{
$question_input['title'] = $question->title.'(Copy)';
$question_input['order'] = $question->order;
$question_input['template_id'] = $question->template_id;
$question_input['required'] = $question->required;
$question_input['multiple_select'] = $question->multiple_select;
$question_input['question_type'] = $question->question_type;
$new_question = $this->model->create($question_input);
$this->log->saveLog(['action' => 'Duplicate', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $new_question->id, 'sub_menu' => 'Questions-'.$question->template_id]);
$answers = array();
if(count($question->answers) > 0) {
foreach ($question->answers as $answer) {
$answers['question_id'] = $answer->question_id;
$answers['name'] = $answer->name;
$answers['order'] = $answer->order;
$new_question->answers()->create($answers);
}
}
return $this->model->find($question->id);
}
}
public function getQuestionTypes()
{
return $this->model->questionTypes();
}
public function getTypes()
{
return [
1 => 'text',
2 => 'radiogroup',
3 => 'checkbox'
];
}
}