HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
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', '&nbsp;');
            $table->addColumn('actions', '&nbsp;');

            $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);
    }
}