/home/mip/mip/app/Modules/Client/Controllers/Pages/ContactUsController.php
<?php

namespace QxCMS\Modules\Client\Controllers\Pages;

use Auth;
use Session;
use Datatables;

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

use QxCMS\Modules\Client\Requests\Pages\ContactUsRequest;
use QxCMS\Modules\Client\Repositories\Pages\ContactUsRepositoryInterface as ContactUs;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;

class ContactUsController extends Controller
{
	protected $contact_us;
	protected $permission;
	protected $auth;
	protected $prefix_name = '';

	public function __construct(Permission $permission, ContactUs $contact_us)
	{
		$this->contact_us = $contact_us;

		$this->permission = $permission;
		$this->auth = Auth::guard('client');
		$this->prefix_name = config('modules.client');
        $this->getDetails($this->contact_us->getModuleId());
	}

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

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

    public function create()
    {
        $this->authorize('create', $this->permissions());
        $data['permissions'] = $this->permissions();
        return view('Client::pages.contact-us.create', $data, $this->getFormOptions());
    }

    public function store(ContactUsRequest $request)
    {
        $this->authorize('create', $this->permissions());
        $contact_us = $this->contact_us->create($request);
        session()->flash('success', 'Successfully added.');

        return redirect()->route($this->prefix_name.'.contact-us.index');
    }

    public function show($id)
    {
        //
    }

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

    public function update(ContactUsRequest $request, $hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        $contact_us = $this->contact_us->update($id, $request);
        return redirect()->route($this->prefix_name.'.contact-us.index');
    }

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

    public function getContactUsData(Request $request)
    {
        $contact_us = $this->contact_us->select('*');

        $permissions = $this->permissions();
        return Datatables::of($contact_us)
            ->filterColumn('address', function($query, $keyword) {
                $query->whereRaw("CONCAT(building_name,' ',building_floor,' ',rec_number,' ',rec_street,', ',rec_city) like ?", ["%{$keyword}%"]);
            })
            ->addColumn('status_name', function($contact_us){
                return $contact_us->status;
            })
            ->addColumn('address', function($contact_us){
                $html = '';
                $html .= $contact_us->building_floor.($contact_us->building_floor && $contact_us->building_name ? ', ' : '').$contact_us->building_name.($contact_us->building_floor || $contact_us->building_name ? '<br>' : '');
                $html .= $contact_us->rec_number.' '.$contact_us->rec_street.', '.$contact_us->rec_city;
                return $html;
            })
            ->addColumn('action', function ($contact_us) use ($permissions){
                $html = '';
                if($this->auth->user()->can('update', $permissions)){
                    $html .= '<a href="'.route($this->prefix_name.'.contact-us.edit', $contact_us->hashid).'"><button type="button" data-toggle="tooltip" title="Edit" class="btn btn-warning btn-xs btn-flat edited"><span class="glyphicon glyphicon-pencil"></span></button></a>';
                }
                if($this->auth->user()->can('delete', $permissions)){
                    $html .= '&nbsp;&nbsp;<a href="#delete-'.$contact_us->hashid.'" class="btn btn-xs btn-flat btn-danger" id="btn-delete" data-action="'.route($this->prefix_name.'.contact-us.destroy', $contact_us->hashid).'" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fa fa-trash-o"></i></a>';
                }
                return $html;
            })
            ->rawColumns(['action', 'status'])
            ->make(true);
    }

    protected function getFormOptions()
    {
        $data['status'] = Array('Publish' => 'Publish', 'Draft' => 'Draft', 'Inactive' => 'Inactive');
        return $data;
    }
}