File: /var/www/ivs.kaunokolegija.lt/laravel/app/Http/Controllers/Admin/ScienceActivityController.php
<?php
namespace App\Http\Controllers\Admin;
use Gate;
use App\Models\User;
use App\Models\Student;
use App\Models\Scientist;
use App\Models\Department;
use App\Models\ScienceArea;
use App\Models\ActivityType;
use Illuminate\Http\Request;
use App\Models\AreaOfInterest;
use App\Models\ActivitySubType;
use App\Models\ResearcherGroup;
use App\Models\ScienceActivity;
use App\Models\ScienceDirection;
use App\Models\ResearcherSubGroup;
use App\Http\Controllers\Controller;
use App\Models\DepartmentSubsection;
use Yajra\DataTables\Facades\DataTables;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Controllers\Traits\CsvImportTrait;
use App\Http\Requests\StoreScienceActivityRequest;
use App\Http\Requests\UpdateScienceActivityRequest;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use App\Http\Requests\MassDestroyScienceActivityRequest;
class ScienceActivityController extends Controller
{
use MediaUploadingTrait, CsvImportTrait;
public function index(Request $request)
{
abort_if(Gate::denies('science_activity_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($request->ajax()) {
$query = ScienceActivity::with(['contactscientists', 'contactstudents', 'activity_types', 'activity_subtypes', 'science_areas', 'sciencedirections', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks'])->select(sprintf('%s.*', (new ScienceActivity)->table));
$table = Datatables::of($query);
$table->addColumn('placeholder', ' ');
$table->addColumn('actions', ' ');
$table->editColumn('actions', function ($row) {
$viewGate = 'science_activity_show';
$editGate = 'science_activity_edit';
$deleteGate = 'science_activity_delete';
$crudRoutePart = 'science-activities';
$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->editColumn('name', function ($row) {
return $row->name ? $row->name : '';
});
$table->editColumn('contractno', function ($row) {
return $row->contractno ? $row->contractno : '';
});
$table->editColumn('contactscientists', function ($row) {
$labels = [];
foreach ($row->contactscientists as $contactscientist) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $contactscientist->name);
}
return implode(' ', $labels);
});
$table->editColumn('contactstudent', function ($row) {
$labels = [];
foreach ($row->contactstudents as $contactstudent) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $contactstudent->name);
}
return implode(' ', $labels);
});
$table->editColumn('activity_type', function ($row) {
$labels = [];
foreach ($row->activity_types as $activity_type) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $activity_type->name);
}
return implode(' ', $labels);
});
$table->editColumn('activity_subtype', function ($row) {
$labels = [];
foreach ($row->activity_subtypes as $activity_subtype) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $activity_subtype->name);
}
return implode(' ', $labels);
});
$table->editColumn('is_mtep', function ($row) {
return '<input type="checkbox" disabled ' . ($row->is_mtep ? 'checked' : null) . '>';
});
$table->editColumn('science_area', function ($row) {
$labels = [];
foreach ($row->science_areas as $science_area) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $science_area->name);
}
return implode(' ', $labels);
});
$table->editColumn('sciencedirection', function ($row) {
$labels = [];
foreach ($row->sciencedirections as $sciencedirection) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $sciencedirection->name);
}
return implode(' ', $labels);
});
$table->editColumn('is_financed', function ($row) {
return '<input type="checkbox" disabled ' . ($row->is_financed ? 'checked' : null) . '>';
});
$table->editColumn('value', function ($row) {
return $row->value ? $row->value : '';
});
$table->editColumn('accountabledepartment', function ($row) {
$labels = [];
foreach ($row->accountabledepartments as $accountabledepartment) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $accountabledepartment->name);
}
return implode(' ', $labels);
});
$table->editColumn('accountablesubsection', function ($row) {
$labels = [];
foreach ($row->accountablesubsections as $accountablesubsection) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $accountablesubsection->name);
}
return implode(' ', $labels);
});
$table->editColumn('accountablepersonkk', function ($row) {
$labels = [];
foreach ($row->accountablepersonkks as $accountablepersonkk) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $accountablepersonkk->name);
}
return implode(' ', $labels);
});
$table->editColumn('other_accountable', function ($row) {
return $row->other_accountable ? $row->other_accountable : '';
});
$table->editColumn('other_accountable_contact', function ($row) {
return $row->other_accountable_contact ? $row->other_accountable_contact : '';
});
$table->editColumn('state', function ($row) {
return $row->state ? ScienceActivity::STATE_SELECT[$row->state] : '';
});
$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', 'contactscientists', 'contactstudent', 'activity_type', 'activity_subtype', 'is_mtep', 'science_area', 'sciencedirection', 'is_financed', 'accountabledepartment', 'accountablesubsection', 'accountablepersonkk', 'attachments']);
return $table->make(true);
}
$scientists = Scientist::get();
$students = Student::get();
$activity_types = ActivityType::get();
$activity_sub_types = ActivitySubType::get();
$science_areas = ScienceArea::get();
$science_directions = ScienceDirection::get();
$departments = Department::get();
$department_subsections = DepartmentSubsection::get();
$users = User::get();
$contactscientists = Scientist::pluck('name', 'id');
$contactstudents = Student::pluck('name', 'id');
$activity_subtypes = ActivitySubType::pluck('name', 'id');
$sciencedirections = ScienceDirection::pluck('name', 'id');
$accountabledepartments = Department::pluck('name', 'id');
$accountablesubsections = DepartmentSubsection::pluck('name', 'id');
$accountablepersonkks = User::pluck('name', 'id');
$groups = ResearcherGroup::pluck('title', 'id');
$subgroups = ResearcherSubGroup::pluck('title', 'id');
$areas_of_interests = AreaOfInterest::pluck('name', 'id');
return view('admin.scienceActivities.index', compact('scientists', 'students', 'activity_types', 'activity_sub_types', 'science_areas', 'science_directions', 'departments', 'department_subsections', 'users', 'contactscientists', 'contactstudents', 'activity_subtypes', 'sciencedirections', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks', 'groups', 'subgroups', 'areas_of_interests'));
}
public function create(Request $request)
{
abort_if(Gate::denies('science_activity_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$contactscientists = Scientist::pluck('name', 'id');
$contactstudents = Student::pluck('name', 'id');
$activity_types = ActivityType::pluck('name', 'id');
$activity_subtypes = ActivitySubType::pluck('name', 'id');
$science_areas = ScienceArea::pluck('name', 'id');
$sciencedirections = ScienceDirection::pluck('name', 'id');
$accountabledepartments = Department::pluck('name', 'id');
$accountablesubsections = DepartmentSubsection::pluck('name', 'id');
$accountablepersonkks = User::pluck('name', 'id');
if ($request->ajax()) {
return response()->view('admin.scienceActivities.create', compact('accountabledepartments', 'accountablepersonkks', 'accountablesubsections', 'activity_subtypes', 'activity_types', 'contactscientists', 'contactstudents', 'science_areas', 'sciencedirections'));
}
return view('admin.scienceActivities.create', compact('accountabledepartments', 'accountablepersonkks', 'accountablesubsections', 'activity_subtypes', 'activity_types', 'contactscientists', 'contactstudents', 'science_areas', 'sciencedirections'));
}
public function store(StoreScienceActivityRequest $request)
{
$scienceActivity = ScienceActivity::create($request->all());
$scienceActivity->contactscientists()->sync($request->input('contactscientists', []));
$scienceActivity->contactstudents()->sync($request->input('contactstudents', []));
$scienceActivity->activity_types()->sync($request->input('activity_types', []));
$scienceActivity->activity_subtypes()->sync($request->input('activity_subtypes', []));
$scienceActivity->science_areas()->sync($request->input('science_areas', []));
$scienceActivity->sciencedirections()->sync($request->input('sciencedirections', []));
$scienceActivity->accountabledepartments()->sync($request->input('accountabledepartments', []));
$scienceActivity->accountablesubsections()->sync($request->input('accountablesubsections', []));
$scienceActivity->accountablepersonkks()->sync($request->input('accountablepersonkks', []));
foreach ($request->input('attachments', []) as $file) {
$scienceActivity->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
if ($media = $request->input('ck-media', false)) {
Media::whereIn('id', $media)->update(['model_id' => $scienceActivity->id]);
}
if ($request->ajax()) {
return response()->json([
'success' => true,
'message' => __('global.create_success'),
'data' => $scienceActivity,
], 201);
}
return redirect()->route('admin.science-activities.index');
}
public function edit(ScienceActivity $scienceActivity)
{
abort_if(Gate::denies('science_activity_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$contactscientists = Scientist::pluck('name', 'id');
$contactstudents = Student::pluck('name', 'id');
$activity_types = ActivityType::pluck('name', 'id');
$activity_subtypes = ActivitySubType::pluck('name', 'id');
$science_areas = ScienceArea::pluck('name', 'id');
$sciencedirections = ScienceDirection::pluck('name', 'id');
$accountabledepartments = Department::pluck('name', 'id');
$accountablesubsections = DepartmentSubsection::pluck('name', 'id');
$accountablepersonkks = User::pluck('name', 'id');
$scienceActivity->load('contactscientists', 'contactstudents', 'activity_types', 'activity_subtypes', 'science_areas', 'sciencedirections', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks');
return view('admin.scienceActivities.edit', compact('accountabledepartments', 'accountablepersonkks', 'accountablesubsections', 'activity_subtypes', 'activity_types', 'contactscientists', 'contactstudents', 'scienceActivity', 'science_areas', 'sciencedirections'));
}
public function update(UpdateScienceActivityRequest $request, ScienceActivity $scienceActivity)
{
$scienceActivity->update($request->all());
$scienceActivity->contactscientists()->sync($request->input('contactscientists', []));
$scienceActivity->contactstudents()->sync($request->input('contactstudents', []));
$scienceActivity->activity_types()->sync($request->input('activity_types', []));
$scienceActivity->activity_subtypes()->sync($request->input('activity_subtypes', []));
$scienceActivity->science_areas()->sync($request->input('science_areas', []));
$scienceActivity->sciencedirections()->sync($request->input('sciencedirections', []));
$scienceActivity->accountabledepartments()->sync($request->input('accountabledepartments', []));
$scienceActivity->accountablesubsections()->sync($request->input('accountablesubsections', []));
$scienceActivity->accountablepersonkks()->sync($request->input('accountablepersonkks', []));
if (count($scienceActivity->attachments) > 0) {
foreach ($scienceActivity->attachments as $media) {
if (! in_array($media->file_name, $request->input('attachments', []))) {
$media->delete();
}
}
}
$media = $scienceActivity->attachments->pluck('file_name')->toArray();
foreach ($request->input('attachments', []) as $file) {
if (count($media) === 0 || ! in_array($file, $media)) {
$scienceActivity->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
}
if ($request->ajax()) {
return response()->json([
'success' => true,
'data' => $scienceActivity,
], 201);
}
return redirect()->route('admin.science-activities.index');
}
public function show(ScienceActivity $scienceActivity)
{
abort_if(Gate::denies('science_activity_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$scienceActivity->load('contactscientists', 'contactstudents', 'activity_types', 'activity_subtypes', 'science_areas', 'sciencedirections', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks');
return view('admin.scienceActivities.show', compact('scienceActivity'));
}
public function destroy(ScienceActivity $scienceActivity)
{
abort_if(Gate::denies('science_activity_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$scienceActivity->delete();
return back();
}
public function massDestroy(MassDestroyScienceActivityRequest $request)
{
$scienceActivities = ScienceActivity::find(request('ids'));
foreach ($scienceActivities as $scienceActivity) {
$scienceActivity->delete();
}
return response(null, Response::HTTP_NO_CONTENT);
}
public function storeCKEditorImages(Request $request)
{
abort_if(Gate::denies('science_activity_create') && Gate::denies('science_activity_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$model = new ScienceActivity();
$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);
}
}