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/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', '&nbsp;');
            $table->addColumn('actions', '&nbsp;');

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