File: /var/www/ivs.kaunokolegija.lt/laravel/app/Http/Controllers/Admin/ScientistController.php
<?php
namespace App\Http\Controllers\Admin;
use Gate;
use App\Models\Scientist;
use Illuminate\Http\Request;
use App\Models\ResearcherGroup;
use App\Imports\ScientistsImport;
use App\Models\ResearcherSubGroup;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Yajra\DataTables\Facades\DataTables;
use App\Http\Requests\StoreScientistRequest;
use App\Http\Requests\UpdateScientistRequest;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Controllers\Traits\CsvImportTrait;
use App\Http\Requests\MassDestroyScientistRequest;
class ScientistController extends Controller
{
use CsvImportTrait;
public function index(Request $request)
{
abort_if(Gate::denies('scientist_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($request->ajax()) {
$query = Scientist::with(['groups', 'subgroups'])->select(sprintf('%s.*', (new Scientist)->table));
$table = Datatables::of($query);
$table->addColumn('placeholder', ' ');
$table->addColumn('actions', ' ');
$table->editColumn('actions', function ($row) {
$viewGate = 'scientist_show';
$editGate = 'scientist_edit';
$deleteGate = 'scientist_delete';
$crudRoutePart = 'scientists';
$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('position', function ($row) {
return $row->position ? $row->position : '';
});
$table->editColumn('email', function ($row) {
return $row->email ? $row->email : '';
});
$table->editColumn('phone', function ($row) {
return $row->phone ? $row->phone : '';
});
$table->editColumn('ismain', function ($row) {
return '<input type="checkbox" disabled ' . ($row->ismain ? 'checked' : null) . '>';
});
$table->editColumn('group', function ($row) {
$labels = [];
foreach ($row->groups as $group) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $group->title);
}
return implode(' ', $labels);
});
$table->editColumn('subgroup', function ($row) {
$labels = [];
foreach ($row->subgroups as $subgroup) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $subgroup->title);
}
return implode(' ', $labels);
});
$table->rawColumns(['actions', 'placeholder', 'ismain', 'group', 'subgroup']);
return $table->make(true);
}
$researcher_groups = ResearcherGroup::get();
$researcher_sub_groups = ResearcherSubGroup::get();
$groups = ResearcherGroup::pluck('title', 'id');
$subgroups = ResearcherSubGroup::pluck('title', 'id');
return view('admin.scientists.index', compact('researcher_groups', 'researcher_sub_groups', 'groups', 'subgroups'));
}
public function create()
{
abort_if(Gate::denies('scientist_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$groups = ResearcherGroup::pluck('title', 'id');
$subgroups = ResearcherSubGroup::pluck('title', 'id');
return view('admin.scientists.create', compact('groups', 'subgroups'));
}
public function store(StoreScientistRequest $request)
{
//TODO: pasitikslint del email naudojimo ar validuot kaip email
$scientist = Scientist::create($request->all());
$scientist->groups()->sync($request->input('groups', []));
$scientist->subgroups()->sync($request->input('subgroups', []));
if ($request->ajax()) {
return response()->json([
'success' => true,
'message' => __('global.create_success'),
'data' => $scientist,
], 201);
}
return redirect()->route('admin.scientists.index');
}
public function edit(Scientist $scientist)
{
abort_if(Gate::denies('scientist_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$groups = ResearcherGroup::pluck('title', 'id');
$subgroups = ResearcherSubGroup::pluck('title', 'id');
$scientist->load('groups', 'subgroups');
return view('admin.scientists.edit', compact('groups', 'scientist', 'subgroups'));
}
public function update(UpdateScientistRequest $request, Scientist $scientist)
{
$scientist->update($request->all());
$scientist->groups()->sync($request->input('groups', []));
$scientist->subgroups()->sync($request->input('subgroups', []));
if ($request->ajax()) {
return response()->json([
'success' => true,
'data' => $scientist,
], 201);
}
return redirect()->route('admin.scientists.index');
}
public function show(Scientist $scientist)
{
abort_if(Gate::denies('scientist_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$scientist->load('groups', 'subgroups', 'contactscientistsScienceActivities', 'scientistResearchFields', 'scientistWorkExperiences', 'scientistExpertActivities', 'scientistIntScienceProjects', 'scientistNatScienceProjects', 'scientistInstProjects', 'scientistStudyPublications', 'scientistSciencePublications', 'scientistIntSciencePapers', 'scientistSupervisedThesis', 'scientistPatents', 'scientistPatentApplications', 'scientistScientificPublications', 'scientistPeerReviewedArticles', 'scientistAppliedScientificPublications', 'scientistArtAndOtherPublications', 'scientistScientificReviews', 'scientistConferenceAbstracts', 'scientistScientificTranslations', 'scientistArtWorks', 'scientistProfessionalDevelopments', 'scientistHonorsAndAwards');
return view('admin.scientists.show', compact('scientist'));
}
public function destroy(Scientist $scientist)
{
abort_if(Gate::denies('scientist_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$scientist->delete();
return back();
}
public function massDestroy(MassDestroyScientistRequest $request)
{
$scientists = Scientist::find(request('ids'));
foreach ($scientists as $scientist) {
$scientist->delete();
}
return response(null, Response::HTTP_NO_CONTENT);
}
public function import(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:xlsx,xls,csv',
]);
try {
$file = $request->file('file');
$import = new ScientistsImport();
Excel::import($import, $file);
return redirect()->back()->with('success', __('global.create_success'));
} catch (\Exception $e) {
return redirect()->back()->with('error', 'An error occurred: ' . $e->getMessage());
}
}
}