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/inventory.corals.io/Corals/modules/Entity/Http/Requests/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/inventory.corals.io/Corals/modules/Entity/Http/Requests/EntityRequest.php
<?php

namespace Corals\Modules\Entity\Http\Requests;

use Corals\Foundation\Http\Requests\BaseRequest;
use Corals\Modules\Entity\Models\Entity;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;

class EntityRequest extends BaseRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        $this->setModel(Entity::class);

        return $this->isAuthorized();
    }

    /**
     * @return array
     * @throws ValidationException
     */
    public function rules()
    {
        $this->setModel(Entity::class);
        $rules = parent::rules();

        if ($this->isUpdate() || $this->isStore()) {
            $rules = array_merge($rules, [
                'fields.*.type' => 'required|max:191',
                'fields.*.name' => 'required|max:191',
                'fields.*.label' => 'required|max:191',
                'fields.*.status' => 'required',
                'fields.*.options_setting.source' => 'required_if:type,select',
                'code' => 'required|max:191',
                'name_singular' => 'required|max:191',
                'name_plural' => 'required|max:191',
            ]);


            $hasIdentifier = false;

            foreach ($this->fields as $field) {
                if (data_get($field, 'field_config.is_identifier')) {
                    $hasIdentifier = true;
                    break;
                }
            }

            if (!$hasIdentifier) {
                $rules['identifier'] = 'required';
            }

            if (in_array($this->get('type'), ['select', 'radio', 'multi_values'])) {

                if ($this->get('options_setting')['source'] == "static") {
                    foreach ($this->get('options', []) as $id => $item) {
                        $rules = array_merge($rules, [
                            "options.{$id}.key" => 'required',
                            "options.{$id}.value" => 'required',
                        ]);
                    }
                } else if ($this->get('options_setting')['source'] == "database") {
                    $rules = array_merge($rules, [
                        "options_setting.source_model" => 'required',
                        "options_setting.source_model_column" => 'required',
                    ]);

                }

            }

            foreach ($this->get('custom_attributes', []) as $id => $item) {
                $rules = array_merge($rules, [
                    "custom_attributes.{$id}.key" => 'required',
                    "custom_attributes.{$id}.value" => 'required',
                ]);
            }

            $this->validateFieldsNames();
        }

        if ($this->isStore()) {
            $rules = array_merge($rules, [
                'code' => 'required|max:191|unique:entity_entities,code',
            ]);
        }

        if ($this->isUpdate()) {
            $entity = $this->route('entity');

            $rules = array_merge($rules, [
                'code' => 'required|max:191|unique:entity_entities,code,' . $entity->id,
            ]);
        }

        return $rules;
    }

    public function attributes()
    {
        $attributes = [];

        foreach ($this->get('options', []) as $id => $item) {
            $attributes["fields.*.options.{$id}.key"] = 'Key';
            $attributes["fields.*.options.{$id}.value"] = 'Value';
        }

        foreach ($this->get('custom_attributes', []) as $id => $item) {
            $attributes["fields.*.custom_attributes.{$id}.key"] = 'Key';
            $attributes["fields.*.custom_attributes.{$id}.value"] = 'Value';
        }

        $attributes = array_merge($attributes, [
            'fields.*.type' => 'Type',
            'fields.*.name' => 'Name',
            'fields.*.label' => 'Label',
            'fields.*.status' => 'Status',
            'fields.*.options_setting.source' => 'Source',
            'fields.*.field_config.is_identifier' => 'identifier'
        ]);

        return $attributes;
    }

    public function messages()
    {
        return [
            'identifier.required' => trans('validation.at_least_one', ['attribute' => 'identifier'])
        ];
    }

    /**
     * @throws ValidationException
     */
    protected function validateFieldsNames()
    {
        $specialValidation = [];

        foreach ($this->fields as $index => $field) {
            $names = Arr::pluck(Arr::except($this->fields, $index), 'name', 'name');

            if (in_array(data_get($field, 'name'), $names)) {
                $specialValidation = array_merge($specialValidation, [
                    "fields.$index.name" => trans('validation.unique', ['attribute' => 'name'])
                ]);
            }
        }

        if (filled($specialValidation)) {
            throw ValidationException::withMessages($specialValidation);
        }
    }

    /**
     * @return \Illuminate\Contracts\Validation\Validator
     */
    public function getValidatorInstance()
    {
        if ($this->isUpdate()) {
            $data = $this->all();

            $data['code'] = Str::slug(Arr::get($data, 'code'));
            $data['has_tags'] = Arr::get($data, 'has_tags', false);
            $data['has_gallery'] = Arr::get($data, 'has_gallery', false);
            $data['reviewable'] = Arr::get($data, 'reviewable', false);
            $data['wishlistable'] = Arr::get($data, 'wishlistable', false);

            foreach (data_get($data, 'fields', []) as $index => $field) {
                if (!empty($field['name'])) {
                    Arr::set($data, "fields.$index.name", Str::slug($field['name'], '_'));
                }
            }

            $this->getInputSource()->replace($data);
        }

        return parent::getValidatorInstance();
    }
}

Spamworldpro Mini