/home/mip/mip/app/Modules/Client/Controllers/Questionnaire/TemplateController.php
<?php

namespace QxCMS\Modules\Client\Controllers\Questionnaire;

use DB;
use Auth;
use Datatables;

use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;

use QxCMS\Modules\Client\Requests\Questionnaire\TemplateRequest;
use QxCMS\Modules\Client\Repositories\Questionnaire\TemplateRepositoryInterface as Template;
//use QxCMS\Modules\Client\Repositories\Participants\ParticipantRepositoryInterface as Participant;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;

class TemplateController extends Controller
{
	protected $template;
    //protected $
	protected $permission;
	protected $auth;
	protected $prefix_name = '';

	public function __construct(Template $template, Permission $permission)
	{
		$this->template = $template;
		$this->permission = $permission;
		$this->auth = Auth::guard('client');
		$this->prefix_name = config('modules.client');
        config(['jsvalidation.view' => 'jsvalidation::bootstrap-modal']);
        $this->getDetails($this->template->getModuleId());
	}

	public function permissions()
    {
        return $this->permission->getPermission($this->template->getModuleId());
    }

    public function index() 
    {
    	$this->authorize('activated', $this->permissions());
    	$data['permissions'] = $this->permissions();
        $data['userLogs'] = $this->template->getUserLogs($this->template->getModuleId());
        return view('Client::questionnaire.template.index', $data);    	
    }

    public function create()
    {
        $this->authorize('create', $this->permissions());        
        $data['permissions'] = $this->permissions();
        $data['roles'] = $this->user->getRolelists();
        return view('Client::settings.users.create', $data);
    }

    public function store(TemplateRequest $request)
    {
        $this->authorize('create', $this->permissions());
        $input = $request->all();
        $input['user_id'] = auth('client')->user()->id;
        $template = $this->template->create($input); 
        session()->flash('success', 'Questionnaire template successfully added.');
        return redirect($this->prefix_name.'/questionnaire/'.$template->hashid.'/question');
    }

    public function show($id)
    {
        $this->authorize('activated', $this->permissions());
        return $id;
    }

    public function edit($hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        $data['template'] = $this->template->findById($id);
        $data['permissions'] = $this->permissions();
        $data['userLogs'] = $this->template->getUserLogs($this->template->getModuleId(), $id);
        return view('Client::questionnaire.template.edit', $data);
    }

    public function update(TemplateRequest $request, $hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        $template = $this->template->update($id, $request->all());
        return redirect($this->prefix_name.'/questionnaire');
    }

    public function destroy($hashid)
    {
        $this->authorize('delete', $this->permissions());
        $id = decode($hashid);
        return $this->template->delete($id); 
    }

    public function copyTemplate($hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        return $this->template->copyTemplate($id);
    }

    public function select2(Request $request)
    {   
        return $this->template->select2($request->all());
    }

    public function preview(Request $request, $hashid)
    {
        $id = decode($hashid);
        $data['template'] = $this->template->findById($id);
        return view('Client::questionnaire.template.preview', $data);
    }

    public function result(Request $request, $hashid)
    {
        $id = decode($hashid);
        $data['template'] = $this->template->findTemplateById($id, ['questions']);
        return view('Client::questionnaire.results.index', $data);
    }
    /*
    * Datatables
    */
    public function getTemplateData()
    {        
        $templates = $this->template->all();
        $permissions = $this->permissions();


        return Datatables::of($templates)
            ->editColumn('status', function($template){
                if($template->status == 'Close') return '<span class="label label-danger">Close</span>';
                return '<span class="label label-success">Open</span>';
            })
            ->editColumn('created_at', function($template){
                return $template->created_at->format('M d, Y');
            })
            ->addColumn('description', function($template){
                $html_out = "";
                $html_out .= "<a href=\"".url($this->prefix_name.'/questionnaire/'.$template->hashid.'/question')."\">".$template->title."</a>";
               // $html_out .= "<br/>".$template->description;

                return $html_out;
            })
            ->addColumn('action', function ($template) use ($permissions) {
                $html_out = '';
	            return view('Client::questionnaire.template.action', compact('template', 'permissions'))->render();
	        })
	        ->make(true);
    }

}