File "unitecreator_form.class.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/unlimited-elements-for-elementor/inc_php/unitecreator_form.class.php
File size: 11.12 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
class UniteCreatorForm extends HtmlOutputBaseUC
{
    private static $isFormIncluded = false;
    private $addon;
    private function a_INIT()
    {
    }
    private function validateAddonInited()
    {
        if (empty($this->addon)) {
            UniteFunctionsUC::throwError("The addon is not inited");
        }
    }
    public function setAddon(UniteCreatorAddon $addon)
    {
        $this->addon = $addon;
    }
    public function getDialogFormParams()
    {
        $params = array(UniteCreatorDialogParam::PARAM_TEXTFIELD, UniteCreatorDialogParam::PARAM_TEXTAREA, UniteCreatorDialogParam::PARAM_DROPDOWN);
        return $params;
    }
    private function a_FORM_SETTING()
    {
    }
    public function addFormSettings($objSettings, $name, $value, $title, $extra)
    {
        $arrValues = UniteFunctionsUC::getVal($value, $name);
        $adminEmail = helperuc::getGeneralSetting("form_admin_email");
        $adminEmail = trim($adminEmail);
        $urlGeneralSettings = HelperUC::getViewUrl(GlobalsUC::VIEW_SETTINGS);
        $linkGeneralSettings = HelperHtmlUC::getHtmlLink($urlGeneralSettings, esc_html__("General Settings", "unlimited-elements-for-elementor"), "", "", true);
        $urlGeneralSettings .= "#tab=fields_settings";
        if (empty($adminEmail)) {
            $objSettings->addStaticText(esc_html__("Please fill admin email in", "unlimited-elements-for-elementor") . " {$linkGeneralSettings}.");
        } else {
            $objSettings->addStaticText(esc_html__("Admin Email", "unlimited-elements-for-elementor") . ": <b>{$adminEmail}</b> (" . esc_html__("you can change it in", "unlimited-elements-for-elementor") . " {$linkGeneralSettings})");
        }
        $objSettings->addHr();
        $sendTextValue = UniteFunctionsUC::getVal($arrValues, $name . "_send_button_text", "Send");
        $objSettings->addTextBox($name . "_send_button_text", $sendTextValue, esc_html__("Send Button Text", "unlimited-elements-for-elementor"));
        $sendingTextValue = UniteFunctionsUC::getVal($arrValues, $name . "_sending_text", "Sending...");
        $objSettings->addTextBox($name . "_sending_text", $sendingTextValue, esc_html__("Loading Text", "unlimited-elements-for-elementor"));
        $successTextValue = UniteFunctionsUC::getVal($arrValues, $name . "_success_text", "Thank you for contacting us");
        $objSettings->addTextBox($name . "_success_text", $successTextValue, esc_html__("Thank you text", "unlimited-elements-for-elementor"));
    }
    private function a_FORM_OUTPUT()
    {
    }
    private function addFormIncludes()
    {
        if (self::$isFormIncluded == false) {
            $urlFormJS = GlobalsUC::$url_assets_internal . "js/uc_form.js";
            $this->addon->addLibraryInclude("jquery");
            $this->addon->addJsInclude($urlFormJS);
            $urlAjax = GlobalsUC::$url_ajax_front;
            $this->addon->addToJs('window.g_urlFormAjaxUC = "' . $urlAjax . '";');
        }
        self::$isFormIncluded = true;
        $script = "\n\n jQuery(document).ready(function(){\n";
        $script .= "\tvar objUCForm = new UniteCreatorFormFront();\n";
        $script .= "\tobjUCForm.init();\n";
        $script .= "});\n";
        $this->addon->addToJs($script);
    }
    public function getFormOutputData($data, $paramName, $arrValues)
    {
        $this->validateAddonInited();
        $this->addFormIncludes();
        $sendButtonText = UniteFunctionsUC::getVal($arrValues, "{$paramName}_send_button_text", esc_html__("Send", "unlimited-elements-for-elementor"));
        $htmlStart = "";
        $htmlStart .= "<form class='uc-form' name='uc_form_{$paramName}'>" . self::BR;
        $htmlStart .= self::TAB . "<div class='uc-form-content'>" . self::BR;
        $data["{$paramName}_start"] = $htmlStart;
        $textSending = UniteFunctionsUC::getVal($arrValues, "{$paramName}_sending_text");
        $textSent = UniteFunctionsUC::getVal($arrValues, "{$paramName}_success_text");
        $htmlEnd = "";
        $htmlEnd .= self::TAB2 . "<input type=\"submit\" value=\"{$sendButtonText}\" class=\"uc-submit-button\">" . self::BR2;
        $htmlEnd .= self::TAB2 . "<div class='uc-form-loading' style='display:none'>{$textSending}</div>" . self::BR;
        $htmlEnd .= self::TAB2 . "<div class='uc-form-error' style='display:none'></div>" . self::BR;
        $htmlEnd .= self::TAB . "</div>" . self::BR;
        $htmlEnd .= self::TAB . "<div class='uc-form-success' style='display:none'>{$textSent}</div>" . self::BR;
        $htmlEnd .= "</form>" . self::BR;
        $data["{$paramName}_end"] = $htmlEnd;
        return $data;
    }
    public function processFormItemsForOutput($arrItems)
    {
        $arrMainValues = $this->getFormMainValues();
        $arrItemsNew = array();
        foreach ($arrItems as $key => $item) {
            $type = UniteFunctionsUC::getVal($item, "type");
            UniteFunctionsUC::validateNotEmpty($type, "processFormItemsForOutput: Item Type");
            unset($item["admin_label"]);
            $title = UniteFunctionsUC::getVal($item, "title");
            $name = UniteFunctionsUC::getVal($item, "name");
            $title = htmlspecialchars($title);
            $value = UniteFunctionsUC::getVal($item, "default_value");
            $value = htmlspecialchars($value);
            $isRequired = UniteFunctionsUC::getVal($item, "is_required");
            $isRequired = UniteFunctionsUC::strToBool($isRequired);
            $htmlParams = "name='{$name}' placeholder='{$title}' data-title='{$title}' class='uc-form-field'";
            if ($isRequired == true) {
                $htmlParams .= " data-required='true'";
            }
            switch ($type) {
                case UniteCreatorDialogParam::PARAM_TEXTFIELD:
                    $htmlField = self::TAB2 . "<input type='text' {$htmlParams} value='{$value}'>";
                    break;
                case UniteCreatorDialogParam::PARAM_TEXTAREA:
                    $htmlField = self::TAB2 . "<textarea {$htmlParams}>{$value}</textarea>";
                    break;
                case UniteCreatorDialogParam::PARAM_DROPDOWN:
                    $options = UniteFunctionsUC::getVal($item, "options");
                    $options = array_flip($options);
                    $htmlField = HelperHtmlUC::getHTMLSelect($options, $value, $htmlParams, true);
                    break;
                case UniteCreatorDialogParam::PARAM_CHECKBOX:
                    $textNear = UniteFunctionsUC::getVal($item, "text_near");
                    $isChecked = UniteFunctionsUC::getVal($item, "is_checked");
                    $isChecked = UniteFunctionsUC::strToBool($isChecked);
                    $htmlChecked = "";
                    if ($isChecked == true) {
                        $htmlChecked = "checked='checked'";
                    }
                    $htmlField = self::TAB2 . "<div class='uc-form-checkbox-wrapper'>" . self::BR;
                    $htmlField .= self::TAB2 . "<input type='checkbox' {$htmlParams} {$htmlChecked}>" . self::BR;
                    $htmlField .= self::TAB2 . "<span class='uc-form-checkbox-text'>{$textNear}</span>" . self::BR;
                    $htmlField .= self::TAB2 . "</div>";
                    break;
                default:
                    $htmlField = "<pre>no output written for form type: {$type}</pre>";
                    break;
            }
            $item["form_field"] = $htmlField;
            $arrItemsNew[] = array("item" => $item);
        }
        return $arrItemsNew;
    }
    protected function getFormMainValues()
    {
        $param = $this->addon->getParamByType(UniteCreatorDialogParam::PARAM_FORM);
        UniteFunctionsUC::validateNotEmpty($param, "Font Param");
        $paramName = $param["name"];
        $arrValues = $this->addon->getProcessedMainParamsValues(UniteCreatorParamsProcessor::PROCESS_TYPE_CONFIG);
        $formValues = $arrValues[$paramName];
        return $formValues;
    }
    private function a_FORM_SEND()
    {
    }
    private function getFormMessage($arrFormFields)
    {
        $message = "";
        $emailPrefix = HelperUC::getGeneralSetting("form_admin_email_prefix");
        if (empty($emailPrefix)) {
            $emailPrefix = "The client info is:";
        }
        $emailPrefix = trim($emailPrefix);
        if (!empty($emailPrefix)) {
            $message .= "{$emailPrefix} <br>\n";
        }
        foreach ($arrFormFields as $arrField) {
            $title = UniteFunctionsUC::getVal($arrField, "title");
            $name = UniteFunctionsUC::getVal($arrField, "name");
            $value = UniteFunctionsUC::getVal($arrField, "value");
            if (empty($value)) {
                $value = "[empty text]";
            } else {
                $value = "<b> {$value} </b>";
            }
            $message .= "{$title}: {$value} <br>\n";
        }
        $message = str_replace("::", ":", $message);
        return $message;
    }
    private function validateFieldRequired($arrField)
    {
        $required = UniteFunctionsUC::getVal($arrField, "required");
        $required = UniteFunctionsUC::strToBool($required);
        if ($required == false) {
            return false;
        }
        $value = UniteFunctionsUC::getVal($arrField, "value");
        $value = trim($value);
        if (!empty($value)) {
            return false;
        }
        $title = UniteFunctionsUC::getVal($arrField, "title");
        $message = esc_html__("Please fill", "unlimited-elements-for-elementor") . " <b>" . $title . "</b>" . esc_html__(" field", "unlimited-elements-for-elementor");
        UniteFunctionsUC::throwError($message);
    }
    private function validateFormFields($formFields)
    {
        if (empty($formFields)) {
            return false;
        }
        foreach ($formFields as $field) {
            $this->validateFieldRequired($field);
        }
    }
    public function sendFormFromData($data)
    {
        $insideValidation = false;
        try {
            $arrFormFields = UniteFunctionsUC::getVal($data, "form_data");
            if (empty($arrFormFields)) {
                UniteFunctionsUC::throwError("No form fields given");
            }
            $insideValidation = true;
            $this->validateFormFields($arrFormFields);
            $insideValidation = false;
            $adminEmail = HelperUC::getGeneralSetting("form_admin_email");
            $urlViewSettings = HelperUC::getViewUrl(GlobalsUC::VIEW_SETTINGS, "#tab=fields_settings");
            $htmlLink = HelperHtmlUC::getHtmlLink($urlViewSettings, "general settings", "", "", true);
            if (UniteFunctionsUC::isEmailValid($adminEmail) == false) {
                UniteFunctionsUC::throwError("Admin email not valid, plase set in {$htmlLink}");
            }
            $message = $this->getFormMessage($arrFormFields);
            $subject = "Email from your website";
            UniteProviderFunctionsUC::sendEmail($adminEmail, $subject, $message);
        } catch (Exception $e) {
            if ($insideValidation == false) {
                $errorMessage = "Can't send form: " . $e->getMessage();
            } else {
                $errorMessage = $e->getMessage();
            }
            UniteFunctionsUC::throwError($errorMessage);
        }
    }
}