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/job-board.corals.io/Corals/modules/FormBuilder/Classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/FormBuilder/Classes/FormBuilder.php
<?php

namespace Corals\Modules\FormBuilder\Classes;

use Corals\Modules\FormBuilder\Models\Form;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;

class FormBuilder
{
    protected $attachments = [];

    /**
     * FormBuilder constructor.
     */
    function __construct()
    {
    }

    public function fillActionData($action, $data)
    {
        if (!$action) {
            abort(400);
        }

        foreach ($data as $key => $field) {
            $action['fields'][$key]['value'] = $field;
        }

        return $action;
    }

    public function getSubmissionValue($submission, $type, $key)
    {
        if (empty($submission)) {
            return null;
        }

        $type = Arr::get($submission, $type, []);

        $value = Arr::get($type, $key, null);

        return $value;
    }

    /**
     * @param Request $request
     * @param Form $form
     * @return mixed
     */
    public function submit(Request $request, Form $form)
    {
        try {
            $rules = [];

            foreach ($request->all() as $key => $value) {
                if ($request->hasFile($key)) {
                    if (is_array($value)) {
                        $key .= '.*';
                    }
                    $rules[$key] = 'mimes:' . config('form_builder.mimes');
                }
            }

            if ($form->getProperty('has_captcha')) {
                $rules['g-recaptcha-response'] = 'required|captcha';
            }

            $validator = Validator::make($request->all(), $rules, [], ['g-recaptcha-response' => 'reCaptcha']);

            if ($validator->fails()) {
                $errors = $validator->errors()->toArray();

                $validationMessage = '<div style="text-align:left;">';

                foreach ($errors as $key => $error) {
                    $error = join('<br/>', $error);
                    $validationMessage .= "{$error}<br/>";
                }

                $validationMessage .= '</div>';

                throw new \Exception($validationMessage);
            }
            $actions = $form->actions;

            ksort($actions);

            foreach ($actions as $key => $actions) {
                foreach ($actions as $action) {
                    $this->{$key . 'ActionHandler'}($action, $request, $form);
                }
            }

            $success_submission_action = $this->getSubmissionValue($form->submission, 'on_success', 'action');
            $success_submission_content = $this->getSubmissionValue($form->submission, 'on_success', 'content');

            if ($success_submission_action == 'show_message') {
                return response()->json([
                    'message' => $success_submission_content,
                    'class' => 'alert-success',
                    'level' => 'success'
                ]);
            } elseif ($success_submission_action == 'redirect_to') {
                return redirectTo($success_submission_content);
            }
        } catch (\Exception $exception) {
            $failure_submission_action = $this->getSubmissionValue($form->submission, 'on_failure', 'action');
            $failure_submission_content = $this->getSubmissionValue($form->submission, 'on_failure', 'content');

            if ($failure_submission_action == 'show_message') {
                logger($exception->getTraceAsString());
                $failure_submission_content .= '<br/>' . $exception->getMessage();
                return response()->json(['message' => $failure_submission_content, 'class' => 'alert-danger'], 422);
            } elseif ($failure_submission_action == 'redirect_to') {
                logger($exception->getTraceAsString());
                return redirectTo($failure_submission_content);
            }

            return response()->json([
                'message' => trans('FormBuilder::exception.form_builder.something_went_wrong'),
                'class' => 'alert-danger'
            ], 422);
        }
    }

    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function aweberActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');


        $email_field = Arr::get($action, 'email_field', null);
        $email = Arr::get($data, $email_field, null);
        $name_field = Arr::get($action, 'name_field', null);
        $name = Arr::get($data, $name_field, null);
        $list = Arr::get($action, 'list', null);


        if (empty($email_field) || empty($name_field) || empty($list)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        Aweber::subscribe($email, $name, $list);
    }


    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function mailchimpActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');


        $email_field = Arr::get($action, 'email_field', null);
        $email = Arr::get($data, $email_field, null);
        $name_field = Arr::get($action, 'name_field', null);
        $name = Arr::get($data, $name_field, null);
        $list = Arr::get($action, 'list', null);


        if (empty($email_field) || empty($name_field) || empty($list)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        Mailchimp::subscribe($email, $name, $list);
    }

    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function covert_commissionsActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');


        $email_field = Arr::get($action, 'email_field', null);
        $email = Arr::get($data, $email_field, null);
        $name_field = Arr::get($action, 'name_field', null);
        $name = Arr::get($data, $name_field, null);
        $list = Arr::get($action, 'list', null);


        if (empty($email_field) || empty($name_field) || empty($list)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        CovertCommissions::subscribe($email, $name, $list);
    }


    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function constant_contactActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');


        $email_field = Arr::get($action, 'email_field', null);
        $email = Arr::get($data, $email_field, null);
        $name_field = Arr::get($action, 'name_field', null);
        $name = Arr::get($data, $name_field, null);
        $list = Arr::get($action, 'list', null);


        if (empty($email_field) || empty($name_field) || empty($list)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        ConstantContact::subscribe($email, $name, $list);
    }

    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function get_responseActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');


        $email_field = Arr::get($action, 'email_field', null);
        $email = Arr::get($data, $email_field, null);
        $name_field = Arr::get($action, 'name_field', null);
        $name = Arr::get($data, $name_field, null);
        $list = Arr::get($action, 'list', null);


        if (empty($email_field) || empty($name_field) || empty($list)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        GetResponse::subscribe($email, $name, $list);
    }

    /**
     * @param $action
     * @param Request $request
     * @param $form
     * @throws \Exception
     */
    protected function emailActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');

        $to = explode(',', Arr::get($action, 'to', []));

        $subject = Arr::get($action, 'subject', null);

        $body = Arr::get($action, 'body', null);

        if (empty($to) || empty($subject) || empty($body)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        $body = $this->replaceFieldsInContent($body, $data);

        $attachments = [];

        $submissionKey = Str::random();

        if (empty($this->attachments)) {
            if ($files = $request->allFiles()) {
                foreach ($files as $f) {
                    $filesObject = Arr::wrap($f);
                    foreach ($filesObject as $file) {
                        $originalName = $file->getClientOriginalName();

                        $filename = $originalName;

                        $path = 'uploads/submissions/' . $submissionKey;
                        $file->move(storage_path($path), $filename);
                        $attachments[] = storage_path($path) . '/' . $filename;
                    }
                }
            }
        } else {
            $attachments = $this->attachments;
        }

        Mail::send('FormBuilder::emails.submission_email_template', compact('body'),
            function (Message $message) use ($to, $subject, $attachments) {
                $message->to($to)
                    ->subject($subject);
                foreach ($attachments as $attachment) {
                    $message->attach($attachment);
                }
            });
    }

    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function apiActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');

        $end_point = Arr::get($action, 'end_point', null);

        $method = Arr::get($action, 'method', null);

        $body = Arr::get($action, 'body', null);

        if (empty($end_point) || empty($method) || empty($body)) {
            throw new \Exception(trans('FormBuilder::exception.form_builder.invalid_parameter'));
        }

        $body = $this->replaceFieldsInContent($body, $data);

        $body = json_decode($body, true);

        $httpClient = new Client();

        if ($method == 'GET') {
            $httpResponse = $httpClient->request($method, $end_point . '?' . http_build_query($body));
        } else {
            $httpResponse = $httpClient->request($method, $end_point, [
                'json' => $body
            ]);
        }

        // Empty response body should be parsed also as and empty array
//        $responses = $httpResponse->getBody(true);
//        $jsonToArrayResponse = !empty($responses) ? $httpResponse->json() : array();
    }

    /**
     * @param $action
     * @param $request
     * @param $form
     * @throws \Exception
     */
    protected function databaseActionHandler($action, $request, $form)
    {
        $data = $request->except('_token');

        $unique_field = Arr::get($action, 'unique_field');

        $submissionData = [
            'unique_identifier' => null
        ];

        if (!empty($unique_field)) {
            $unique_field_data = Arr::get($data, $unique_field, null);

            $unique_submission = $form->submissions()->where('unique_identifier', $unique_field_data)->first();

            if (!$unique_field_data || $unique_submission) {
                throw new \Exception(trans('FormBuilder::exception.form_builder.unique_is_required',
                    ['unique' => $unique_field]));
            }

            $submissionData['unique_identifier'] = $unique_field_data;
        }

        $submissionData['content'] = $data;

        $submissionRecord = $form->submissions()->create($submissionData);

        foreach ($request->all() as $key => $value) {
            if ($request->hasFile($key)) {
                $f = $request->file($key);

                $files = Arr::wrap($f);

                $content = $submissionRecord->content;

                $content[$key] = '';

                foreach ($files as $file) {
                    $originalName = $file->getClientOriginalName();

                    $filename = time() . '-' . $originalName;

                    $path = 'uploads/submissions/' . $submissionRecord->id;

                    $file->move(public_path($path), $filename);

                    $this->attachments[] = $path . '/' . $filename;

                    $content[$key] .= '<a href="' . asset($path . '/' . $filename) . '" target="_blank">' . $originalName . '</a> | ';
                }

                $content[$key] = trim($content[$key], ' |');

                $submissionRecord->content = $content;

                $submissionRecord->save();
            }
        }
    }

    protected function replaceFieldsInContent($content, $data)
    {
        foreach ($data as $key => $field) {
            if (is_array($field)) {
                $field = join(', ', $field);
            }
            $content = preg_replace('/\[' . $key . '\]/', $field, $content);
        }

        return $content;
    }

    /**
     * @param Form $form
     * @param bool $showOnListState
     * @return array
     */
    public function getFormFieldsLabel(Form $form, $showOnListState = null)
    {
        $labels = [];
        $form_fields = [];
        $formContent = json_decode($form->content, true);

        foreach ($formContent as $formSection) {
            $form_fields = array_merge($form_fields, $formSection);
        }


        $content = collect($form_fields);

        $labeledContent = $content->filter(function ($element) use ($showOnListState) {
            $type = Arr::get($element, 'type', false);

            if (is_null($showOnListState)) {
                return ($type && in_array($type, [
                        'text',
                        'autocomplete',
                        'checkbox-group',
                        'date',
                        'file',
                        'number',
                        'radio-group',
                        'select',
                        'textarea',
                        'starRating'
                    ]));
            } else {
                $elementShowInListing = Arr::get($element, 'showInListing', false);

                return ($type && in_array($type, [
                        'text',
                        'autocomplete',
                        'checkbox-group',
                        'date',
                        'file',
                        'number',
                        'radio-group',
                        'select',
                        'textarea',
                        'starRating'
                    ]) && ($elementShowInListing === $showOnListState));
            }
        });

        $unLabeledContent = $content->filter(function ($element) {
            $type = Arr::get($element, 'type', false);
            return ($type && in_array($type, ['hidden']));
        });

        $labels = array_merge($labels, $unLabeledContent->pluck('name', 'name')->toArray());
        $labels = array_merge($labels, $labeledContent->pluck('label', 'name')->toArray());

        return $labels;
    }

    /**
     * @param Form $form
     * @param $attribute
     * @return mixed
     */
    public function getFormFieldsAttribute(Form $form, $attribute)
    {
        $content = collect(json_decode($form->content, true));

        $inputContent = $content->filter(function ($element) {
            $type = Arr::get($element, 'type', false);
            return ($type && in_array($type, [
                    'text',
                    'autocomplete',
                    'checkbox-group',
                    'date',
                    'file',
                    'number',
                    'radio-group',
                    'select',
                    'textarea',
                    'starRating',
                    'hidden'
                ]));
        });

        return $inputContent->pluck($attribute, 'name')->toArray();
    }

    /**
     * @param Form $form
     * @param $attribute
     * @return mixed
     */
    public function getFormEmbedCode(Form $form)
    {
        $code = '<div data-embed-src="' . url('forms/' . $form->hashed_id . '/embed') . '"></div><script type="text/javascript" src="' . asset('assets/corals/plugins/formbuilder/js/embed.js') . '"></script>';

        return '<pre><code id="embed_' . $form->id . '">' . htmlentities($code, ENT_COMPAT,
                'UTF-8') . '</code> <a href="#" onclick="event.preventDefault();" class="copy-button"data-clipboard-target="#embed_' . $form->id . '"><i class="fa fa-clipboard"></i></a></pre>';
    }


}

Spamworldpro Mini