File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/ExperienceController.php
<?php
namespace App\Http\Controllers;
use Carbon\Carbon;
use App\Models\Experience\Experience;
use App\Services\ExperienceService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Yajra\DataTables\Facades\DataTables;
class ExperienceController extends Controller
{
private $experienceService;
private $schemes = [
['key' => 'Esquema 1 - Compras disponibles por plan', 'value' => '1'],
['key' => 'Esquema 2 - Cupos por plan', 'value' => '2'],
];
public function __construct()
{
$this->experienceService = new ExperienceService();
}
public function index($experience_type = 'children')
{
return view('experiences.settings.list', compact('experience_type'));
}
public function indexAdd($experience_type = 'children')
{
$schemes = $this->schemes;
return view('experiences.settings.create', compact('experience_type', 'schemes'));
}
public function indexEdit($id)
{
$object = Experience::findOrFail($id);
$schemes = $this->schemes;
return view('experiences.settings.edit', compact('object', 'schemes'));
}
public function tableFilter(Request $request)
{
$obj = $this->tableFilterQuery($request);
DB::enableQueryLog();
$dataTable = DataTables::of($obj);
$this->tableFilterCustomColumns($dataTable);
$response = $dataTable->make(true);
$data = $response->getData();
$data = json_decode(json_encode($data), true);
$queries = \DB::getQueryLog();
$data['queries'] = $queries;
return $data;
}
public function create(Request $request)
{
try {
if (Experience::where([['name', $request->input('name')], ['active', true]])->first()) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
$data = $request->all();
if ($model = Experience::create($data)) {
$experience = Experience::with('plans', 'academy_plans')->find($model->id);
$this->registerLog(Auth::user()->id, 'Crear experiencia', json_encode($experience), "Create", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('experiences.settings.messages.create_success'), "data" => $model->id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('experiences.settings.messages.create_error'), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function update(Request $request, $id)
{
try {
$request['id'] = $id;
if (Experience::where([['id', '!=', $id], ['name', $request->input('name')], ['active', true]])->first()) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
}
$data = $request->all();
$model = Experience::findOrFail($id);
if ($model->update($data)) {
$experience = Experience::with('plans', 'academy_plans')->find($id);
$this->registerLog(Auth::user()->id, 'Editar experiencia', json_encode($experience), "Update", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => $id));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
}
} catch (\Exception $e) {
return response(
array(
"r" => false,
"type" => "error",
"title" => "Oops...",
"m" => __($e->getMessage()),
"data" => null
)
);
}
}
public function delete(Request $request, $id)
{
try {
$experience = Experience::with('plans', 'academy_plans')->find($id);
$model = Experience::findOrFail($id);
if ($model->delete()) {
$this->registerLog(Auth::user()->id, 'Eliminar experiencia', json_encode($experience), "Delete", $this->getModule($request));
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
} else {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
}
} catch (\Illuminate\Database\QueryException $e) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
}
}
public function activate(Request $request)
{
try {
$id = $request['id'];
$state = $request['state'];
$experience = Experience::with('plans', 'academy_plans')->find($id);
$experience->active = $state;
$experience->update();
$this->registerLog(Auth::user()->id, 'Activar/Desactivar experiencia', json_encode($experience), "Update", $this->getModule($request));
return array('r' => true, 'd' => null, 'm' => __('messages.updated_successfully'));
} catch (\Throwable $th) {
return array('r' => false, 'd' => null, 'm' => __('messages.error_updating'));
}
}
public function saveImage(Request $request)
{
try {
$extension = $request->file('image')->getClientOriginalExtension();
$filenametostore = $request->id . '.' . $extension;
Storage::disk('s3')->put(config('s3.experiences') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
$url = config('filesystems.disks.s3.url') . '/experience/' . $filenametostore;
$experience = Experience::find($request->id);
$experience->image = $url;
$experience->update();
return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => $th->getMessage()));
}
}
private function tableFilterQuery($request)
{
$obj = Experience::select(
'id',
'name',
'icon',
'short_description',
'description',
'apply_to',
'includes',
'when',
'experience_type',
'active',
'created_at'
)
->when($request->experienceType, function ($query, $request) {
$query->where('experience_type', $request->experienceType);
})
->orderBy('created_at', 'DESC');
return $obj;
}
private function tableFilterCustomColumns($dataTable)
{
$dataTable->addColumn('actions', function ($obj) {
if (
$this->validateRolePermissions('experience', 'administrator') ||
$this->validateRolePermissions('experience', 'supervisor')
) {
$actions = '
<i class="fa fa-pencil iconMini" onClick="clickEdit(' . $obj->id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" title="Editar" style="cursor:pointer;"></i>
<i class="fa fa-trash iconMini" onClick="clickDelete(' . $obj->id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" title="Eliminar" style="cursor:pointer;"></i>
';
$actions .= '<i class="fa fa-list iconMini" onClick="getExperiencePlans(' . $obj->id . ')" data-id="' . $obj->id . '" title="Planes"></i>';
return $actions;
} else {
return '';
}
})
->editColumn('created_at', function ($obj) {
return Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->editColumn('active', function ($obj) {
if (
$this->validateRolePermissions('experience', 'administrator') ||
$this->validateRolePermissions('experience', 'supervisor')
) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success">
<label>' . __('messages.no') . '
<input type="checkbox" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" />
<span></span>' . __('messages.yes') . '
</label>
</div>
</label>
</div>';
} else {
return '<div class="switch"><label>
<div class="checkbox checbox-switch switch-success">
<label>' . __('messages.no') . '
<input type="checkbox" onChange="chk(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
<span></span> ' . __('messages.yes') . '
</label>
</div>
</label>
</div>';
}
} else {
return '';
}
})
->rawColumns(['actions', 'created_at', 'active']);
}
public function getUser($id)
{
return $this->experienceService->getUser($id);
}
}