HEX
Server: LiteSpeed
System: Linux srv1.dhviews.com 5.14.0-570.23.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jun 24 11:27:16 EDT 2025 x86_64
User: bdedition (1723)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/bdedition/public_html/core/app/Lib/FormProcessor.php
<?php

namespace App\Lib;

use App\Models\Form;
use App\Rules\FileTypeValidate;

class FormProcessor
{
    public function generatorValidation()
    {
        $validation['rules'] = [
            'form_generator.is_required.*' => 'required|in:required,optional',
            'form_generator.options.*' => 'nullable',
            'form_generator.form_label.*' => 'required',
            'form_generator.form_type.*' => 'required|in:text,select,radio,textarea,checkbox,file,email,url,number,datetime,date,time',
            'form_generator.form_width.*' => 'required|in:12,6,4,3',
            'form_generator.extensions.*' => 'required_if:form_generator.form_type.*,file'
        ];
        $validation['messages'] = [
            'form_generator.is_required.*.required' => 'All is required field is required',
            'form_generator.is_required.*.in' => 'Is required field is invalid',
            'form_generator.form_label.*.required' => 'All form label is required',
            'form_generator.form_type.*.required' => 'All form type is required',
            'form_generator.form_type.*.in' => 'Some selected form type is invalid',
            'form_generator.form_width.*.required' => 'All form width is required',
            'form_generator.form_width.*.in' => 'Some selected form width is invalid',
            'form_generator.extensions.*.required_if' => 'Extensions is required when the form type is file',
        ];
        return $validation;
    }

    public function generate($act, $isUpdate = false, $identifierField = 'act', $identifier = null)
    {
        $forms = request()->form_generator;
        $formData = [];
        if ($forms) {
            for ($i = 0; $i < count($forms['form_label']); $i++) {
                $extensions = $forms['extensions'][$i];
                if ($extensions != 'null' && $extensions != null) {
                    $extensionsArr = explode(',', $extensions);
                    $notMatchedExt = count(array_diff($extensionsArr, $this->supportedExt()));
                    if ($notMatchedExt > 0) {
                        throw new \Exception("Your selected extensions are invalid");
                    }
                }
                $label = titleToKey($forms['form_label'][$i]);
                $formData[$label] = [
                    'name' => $forms['form_label'][$i],
                    'label' => $label,
                    'is_required' => $forms['is_required'][$i],
                    'instruction' => @$forms['instruction'][$i],
                    'extensions' => $forms['extensions'][$i] == 'null' ? "" : $forms['extensions'][$i],
                    'options' => $forms['options'][$i] ? explode(",", $forms['options'][$i]) : [],
                    'type' => $forms['form_type'][$i],
                    'width' => $forms['form_width'][$i],
                ];
            }
        }
        if ($isUpdate) {
            if ($identifierField == 'act') {
                $identifier = $act;
            }
            $form = Form::where($identifierField, $identifier)->first();
            if (!$form) {
                $form = new Form();
            }
        } else {
            $form = new Form();
        }
        $form->act = $act;
        $form->form_data = $formData;
        $form->save();
        return $form;
    }

    public function valueValidation($formData)
    {
        $validationRule = [];
        $rule = [];

        foreach ($formData as $data) {
            if ($data->is_required == 'required') {
                $rule = array_merge($rule, ['required']);
            } else {
                $rule = array_merge($rule, ['nullable']);
            }
            if ($data->type == 'select' || $data->type == 'checkbox' || $data->type == 'radio') {
                $rule = array_merge($rule, ['in:' . implode(',', $data->options)]);
            }
            if ($data->type == 'file') {
                $rule = array_merge($rule, [new FileTypeValidate(explode(',', $data->extensions))]);
            }
            if ($data->type == 'email') {
                $rule = array_merge($rule, ['email']);
            }
            if ($data->type == 'url') {
                $rule = array_merge($rule, ['url']);
            }
            if ($data->type == 'number') {
                $rule = array_merge($rule, ['integer']);
            }
            if ($data->type == 'checkbox') {
                $rule = array_merge($rule, ['array']);
                $validationRule[$data->label] = $rule;
            } else {
                $validationRule[$data->label] = $rule;
            }
            $rule = [];
        }
        return $validationRule;
    }

    public function processFormData($request, $formData)
    {
        $requestForm = [];
        foreach ($formData as $data) {
            $name = $data->label;
            $value = $request->$name;
            if ($data->type == 'file') {
                if ($request->hasFile($name)) {
                    $directory = date("Y") . "/" . date("m") . "/" . date("d");
                    $path = getFilePath('verify') . '/' . $directory;
                    $value = $directory . '/' . fileUploader($value, $path);
                } else {
                    $value = null;
                }
            }
            $requestForm[] = [
                'name' => $data->name,
                'type' => $data->type,
                'value' => $value,
            ];
        }
        return $requestForm;
    }

    public function supportedExt()
    {
        return [
            'jpg',
            'jpeg',
            'png',
            'pdf',
            'doc',
            'docx',
            'txt',
            'xlx',
            'xlsx',
            'csv',
            'avi',
            'flv',
            'gif',
            'm4a',
            'mp3',
            'mp4',
            'ppsx',
            'rtf',
            'wav',
            'xla',
        ];
    }
}