/home/mip/mip/app/Modules/Client/Repositories/Questionnaire/TemplateRepository.php
<?php
namespace QxCMS\Modules\Client\Repositories\Questionnaire;
use QxCMS\Modules\AbstractRepository;
use QxCMS\Modules\Client\Models\Questionnaire\Template;
use QxCMS\Modules\Client\Models\Settings\UserLogs\UserLogs as Log;
class TemplateRepository extends AbstractRepository implements TemplateRepositoryInterface
{
protected $model;
protected $log;
function __construct(Template $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]);
return $model;
}
public function _serialize(array $request)
{
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', 'Template successfully updated.');
$this->log->saveLog(['action' => 'Update', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id]);
}
return $model;
}
public function delete($id)
{
$user = auth()->user();
$model = $this->findById($id);
$model->questions->each(function($value){
$value->answers()->delete();
});
$model->questions()->delete();
$model->delete();
$this->log->saveLog(['action' => 'Delete', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id]);
return $this->getAjaxResponse('success', 'Template successfully deleted.');
}
public function copyTemplate($id)
{
$user = auth()->user();
if($id)
{
$model = $this->model->with(['questions','questions.answers'])->find($id);
if($model)
{
$templates['title'] = $model->title.'(Copy)';
$templates['user_id'] = auth('client')->user()->id;
$templates['description'] = $model->description;
$templates['status'] = 'Open';
$new_template = $this->model->create($templates);
$this->log->saveLog(['action' => 'Duplicate', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $new_template->id]);
if(count($model->questions) > 0) {
$questions = array();
foreach ($model->questions as $question) {
$questions['title'] = $question->title;
$questions['order'] = $question->order;
$questions['template_id'] = $question->template_id;
$questions['required'] = $question->required;
$questions['multiple_select'] = $question->multiple_select;
$questions['question_type'] = $question->question_type;
$new_question = $new_template->questions()->create($questions);
if(isset($question->answers))
{
if(count($question->answers) > 0)
{
$answers = array();
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 $model;
}
public function select2($params = array())
{
if(!isset($params['title'])) $params['title'] = '';
$model = $this->model
->select(['title as text', 'id'])
->searchByTitle($params['title'])
->get();
if(isset($params['placeholder'])) {
$placeholder = array('text' => ' - All -', 'id' => '-1');
if(isset($params['placeholder']['text'])) $placeholder = array('text' => $params['placeholder']['text'], 'id' => '-1');
return response(
array_prepend($model->toArray(), $placeholder)
)->header('Content-Type', 'application/json');
}
return response(
$model->toArray()
)->header('Content-Type', 'application/json');
}
public function findTemplateById($id, $relationships = [])
{
if(count($relationships)) {
return $this->model->with($relationships)->find($id);
}
return $this->model->find($id);
}
/*
API REQUEST
*/
public function apiGetQuestionnaire(array $request)
{
if(!isset($request['template_id'])) return array();
return $this->model->with(['questions' => function($query) {
$query->orderBy('order', 'ASC');
}, 'questions.answers' => function($query){
$query->orderBy('order', 'ASC');
}])->find($request['template_id']);
}
}