File: /var/www/ivs.kaunokolegija.lt/laravel/app/Http/Controllers/Admin/ActivityEntryController.php
<?php
namespace App\Http\Controllers\Admin;
use Gate;
use App\Models\User;
use App\Models\Company;
use App\Models\Department;
use App\Models\CompanySize;
use App\Models\LegalStatus;
use App\Models\ActivityType;
use App\Models\StudyProgram;
use Illuminate\Http\Request;
use App\Models\ActivityEntry;
use App\Models\ContactPerson;
use App\Models\CoopAgreement;
use App\Models\ActivitySubType;
use App\Models\ReliabilityState;
use App\Models\AreasOfCooperation;
use App\Models\InternshipProvided;
use App\Http\Controllers\Controller;
use App\Models\DepartmentSubsection;
use App\Models\SubAreasOfCooperation;
use Yajra\DataTables\Facades\DataTables;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Requests\StoreActivityEntryRequest;
use App\Http\Requests\UpdateActivityEntryRequest;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use App\Http\Requests\MassDestroyActivityEntryRequest;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class ActivityEntryController extends Controller
{
use MediaUploadingTrait;
public function index(Request $request)
{
abort_if(Gate::denies('activity_entry_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($request->ajax()) {
$query = ActivityEntry::with(['social_partner', 'activitytypes', 'activitysubtypes', 'departments', 'departmentsubs'])->select(sprintf('%s.*', (new ActivityEntry)->table));
$table = Datatables::of($query);
$table->addColumn('placeholder', ' ');
$table->addColumn('actions', ' ');
$table->editColumn('actions', function ($row) {
$viewGate = 'activity_entry_show';
$editGate = 'activity_entry_edit';
$deleteGate = 'activity_entry_delete';
$crudRoutePart = 'activity-entries';
$modal = true;
$rowData = $row;
return view('partials.datatablesActions', compact(
'viewGate',
'editGate',
'deleteGate',
'crudRoutePart',
'row',
'modal',
'rowData'
));
});
$table->editColumn('id', function ($row) {
return $row->id ? $row->id : '';
});
$table->addColumn('social_partner_name', function ($row) {
return $row->social_partner ? $row->social_partner->name : '';
});
$table->editColumn('social_partner.companycode', function ($row) {
return $row->social_partner ? (is_string($row->social_partner) ? $row->social_partner : $row->social_partner->companycode) : '';
});
$table->editColumn('activitytype', function ($row) {
$labels = [];
foreach ($row->activitytypes as $activitytype) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $activitytype->name);
}
return implode(' ', $labels);
});
$table->editColumn('activitysubtype', function ($row) {
$labels = [];
foreach ($row->activitysubtypes as $activitysubtype) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $activitysubtype->name);
}
return implode(' ', $labels);
});
$table->editColumn('description', function ($row) {
return $row->description ? $row->description : '';
});
$table->editColumn('department', function ($row) {
$labels = [];
foreach ($row->departments as $department) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $department->name);
}
return implode(' ', $labels);
});
$table->editColumn('departmentsub', function ($row) {
$labels = [];
foreach ($row->departmentsubs as $departmentsub) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $departmentsub->name);
}
return implode(' ', $labels);
});
$table->editColumn('raised_funds', function ($row) {
return $row->raised_funds ? $row->raised_funds : '';
});
$table->editColumn('attachments', function ($row) {
if (! $row->attachments) {
return '';
}
$links = [];
foreach ($row->attachments as $media) {
$links[] = '<a href="' . $media->getUrl() . '" target="_blank">' . trans('global.downloadFile') . '</a>';
}
return implode(', ', $links);
});
$table->rawColumns(['actions', 'placeholder', 'social_partner', 'activitytype', 'activitysubtype', 'department', 'departmentsub', 'attachments']);
return $table->make(true);
}
$companies = Company::get();
$activity_types = ActivityType::get();
$activity_sub_types = ActivitySubType::get();
$departments = Department::get();
$department_subsections = DepartmentSubsection::get();
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$activitytypes = ActivityType::pluck('name', 'id');
$activitysubtypes = ActivitySubType::pluck('name', 'id');
$departmentsubs = DepartmentSubsection::pluck('name', 'id');
$legalstatuses = LegalStatus::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpersons = ContactPerson::pluck('email', 'id');
$coopagreements = CoopAgreement::pluck('number', 'id');
$coopareas = AreasOfCooperation::pluck('name', 'id');
$accountabledepartments = Department::pluck('name', 'id');
$accountablesubsections = DepartmentSubsection::pluck('name', 'id');
$accountablepersonkks = User::pluck('name', 'id');
$reliabilities = ReliabilityState::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$subAreasOfCooperations = SubAreasOfCooperation::get();
$studyprograms = StudyProgram::pluck('name', 'id');
$internshipsprovided = InternshipProvided::pluck('title', 'id');
$companysizes = CompanySize::pluck('name', 'id');
return view('admin.activityEntries.index', compact('companies', 'activity_types', 'activity_sub_types', 'departments', 'department_subsections', 'social_partners', 'activitytypes', 'activitysubtypes', 'departments', 'departmentsubs', 'legalstatuses', 'contactpersons', 'coopagreements', 'coopareas', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks', 'reliabilities', 'subAreasOfCooperations', 'studyprograms', 'internshipsprovided', 'companysizes'));
}
public function create()
{
abort_if(Gate::denies('activity_entry_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$activitytypes = ActivityType::pluck('name', 'id');
$activitysubtypes = ActivitySubType::pluck('name', 'id');
$departments = Department::pluck('name', 'id');
$departmentsubs = DepartmentSubsection::pluck('name', 'id');
return view('admin.activityEntries.create', compact('activitysubtypes', 'activitytypes', 'departments', 'departmentsubs', 'social_partners'));
}
public function store(StoreActivityEntryRequest $request)
{
$activityEntry = ActivityEntry::create($request->all());
$activityEntry->activitytypes()->sync($request->input('activitytypes', []));
$activityEntry->activitysubtypes()->sync($request->input('activitysubtypes', []));
$activityEntry->departments()->sync($request->input('departments', []));
$activityEntry->departmentsubs()->sync($request->input('departmentsubs', []));
foreach ($request->input('attachments', []) as $file) {
$activityEntry->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
if ($media = $request->input('ck-media', false)) {
Media::whereIn('id', $media)->update(['model_id' => $activityEntry->id]);
}
if ($request->ajax()) {
return response()->json([
'success' => true,
'message' => __('global.create_success'),
'data' => $activityEntry,
], 201);
}
return redirect()->route('admin.activity-entries.index');
}
public function edit(ActivityEntry $activityEntry)
{
abort_if(Gate::denies('activity_entry_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$activitytypes = ActivityType::pluck('name', 'id');
$activitysubtypes = ActivitySubType::pluck('name', 'id');
$departments = Department::pluck('name', 'id');
$departmentsubs = DepartmentSubsection::pluck('name', 'id');
$activityEntry->load('social_partner', 'activitytypes', 'activitysubtypes', 'departments', 'departmentsubs');
return view('admin.activityEntries.edit', compact('activityEntry', 'activitysubtypes', 'activitytypes', 'departments', 'departmentsubs', 'social_partners'));
}
public function update(UpdateActivityEntryRequest $request, ActivityEntry $activityEntry)
{
$activityEntry->update($request->all());
$activityEntry->activitytypes()->sync($request->input('activitytypes', []));
$activityEntry->activitysubtypes()->sync($request->input('activitysubtypes', []));
$activityEntry->departments()->sync($request->input('departments', []));
$activityEntry->departmentsubs()->sync($request->input('departmentsubs', []));
if (count($activityEntry->attachments) > 0) {
foreach ($activityEntry->attachments as $media) {
if (! in_array($media->file_name, $request->input('attachments', []))) {
$media->delete();
}
}
}
$media = $activityEntry->attachments->pluck('file_name')->toArray();
foreach ($request->input('attachments', []) as $file) {
if (count($media) === 0 || ! in_array($file, $media)) {
$activityEntry->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
}
if ($request->ajax()){
return response()->json([
'success' => true,
'data' => $activityEntry,
]);
}
return redirect()->route('admin.activity-entries.index');
}
public function show(ActivityEntry $activityEntry)
{
abort_if(Gate::denies('activity_entry_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$activityEntry->load('social_partner', 'activitytypes', 'activitysubtypes', 'departments', 'departmentsubs');
return view('admin.activityEntries.show', compact('activityEntry'));
}
public function destroy(ActivityEntry $activityEntry)
{
abort_if(Gate::denies('activity_entry_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$activityEntry->delete();
return back();
}
public function massDestroy(MassDestroyActivityEntryRequest $request)
{
$activityEntries = ActivityEntry::find(request('ids'));
foreach ($activityEntries as $activityEntry) {
$activityEntry->delete();
}
return response(null, Response::HTTP_NO_CONTENT);
}
public function storeCKEditorImages(Request $request)
{
abort_if(Gate::denies('activity_entry_create') && Gate::denies('activity_entry_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$model = new ActivityEntry();
$model->id = $request->input('crud_id', 0);
$model->exists = true;
$media = $model->addMediaFromRequest('upload')->toMediaCollection('ck-media');
return response()->json(['id' => $media->id, 'url' => $media->getUrl()], Response::HTTP_CREATED);
}
}