示例#1
0
    /**
     * generate HTML Pages
     *
     * @param   Object  $formId          Form Id
     * @param   String  $formName        Form Name
     * @param   String  $formType        Form Type
     * @param   String  $topContent      Module Top content
     * @param   String  $bottomContent   Module Bottom Content
     * @param   String  $showTitle       State Show Title Form
     * @param   String  $showDes         State Show Description Form
     *
     * @return string
     */
    public static function generateHTMLPages($formId, $formName, $formType = "", $topContent = "", $bottomContent = "", $showTitle = false, $showDes = false)
    {
        $uri = JUri::getInstance();
        $baseUrl = JURI::base(true);
        $html = "";
        // Load language
        $lang = JFactory::getLanguage();
        $lang->load('com_uniform');
        $document = JFactory::getDocument();
        /** load Css  */
        $loadBootstrap = self::getDataConfig('load_bootstrap_css');
        $loadBootstrap = isset($loadBootstrap->value) ? $loadBootstrap->value : "0";
        $stylesheets = array();
        if (preg_match('/msie/i', $_SERVER['HTTP_USER_AGENT'])) {
            $document->addStyleSheet(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-ui/css/ui-bootstrap/jquery.ui.1.9.0.ie.css');
        }
        if ($loadBootstrap == 1) {
            $document->addStyleSheet(JSN_UNIFORM_ASSETS_URI . '/3rd-party/bootstrap/css/bootstrap.min.css');
        }
        $document->addStyleSheet(JURI::root(true) . '/plugins/system/jsnframework/assets/joomlashine/css/jsn-gui.css');
        //$document->addStyleSheet(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/font-awesome/css/font-awesome.css');
        $document->addStyleSheet(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-tipsy/tipsy.css');
        $document->addStyleSheet(JSN_UNIFORM_ASSETS_URI . '/css/form.css');
        /** end  */
        /* Get data form */
        $db = JFactory::getDBO();
        $db->setQuery($db->getQuery(true)->from('#__jsn_uniform_forms')->select('*')->where('form_state = 1 AND form_id=' . (int) $formId));
        $items = $db->loadObject();
        /* Get data page form */
        $db->setQuery($db->getQuery(true)->from('#__jsn_uniform_form_pages')->select('*')->where('form_id=' . (int) $formId)->order("page_id ASC"));
        $formPages = $db->loadObjectList();
        /* define language */
        $arrayTranslated = array('JSN_UNIFORM_CHARACTERS', 'JSN_UNIFORM_WORDS', 'JSN_UNIFORM_CONFIRM_FIELD_PASSWORD_MIN_MAX_CHARACTER', 'JSN_UNIFORM_CONFIRM_FIELD_EMAIL_CONFIRM', 'JSN_UNIFORM_CONFIRM_FIELD_MIN_NUMBER', 'JSN_UNIFORM_CONFIRM_FIELD_MAX_NUMBER', 'JSN_UNIFORM_DATE_HOUR_TEXT', 'JSN_UNIFORM_DATE_MINUTE_TEXT', 'JSN_UNIFORM_DATE_CLOSE_TEXT', 'JSN_UNIFORM_DATE_PREV_TEXT', 'JSN_UNIFORM_DATE_NEXT_TEXT', 'JSN_UNIFORM_DATE_CURRENT_TEXT', 'JSN_UNIFORM_DATE_MONTH_JANUARY', 'JSN_UNIFORM_DATE_MONTH_FEBRUARY', 'JSN_UNIFORM_DATE_MONTH_MARCH', 'JSN_UNIFORM_DATE_MONTH_APRIL', 'JSN_UNIFORM_DATE_MONTH_MAY', 'JSN_UNIFORM_DATE_MONTH_JUNE', 'JSN_UNIFORM_DATE_MONTH_JULY', 'JSN_UNIFORM_DATE_MONTH_AUGUST', 'JSN_UNIFORM_DATE_MONTH_SEPTEMBER', 'JSN_UNIFORM_DATE_MONTH_OCTOBER', 'JSN_UNIFORM_DATE_MONTH_NOVEMBER', 'JSN_UNIFORM_DATE_MONTH_DECEMBER', 'JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT', 'JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT', 'JSN_UNIFORM_DATE_MONTH_MARCH_SHORT', 'JSN_UNIFORM_DATE_MONTH_APRIL_SHORT', 'JSN_UNIFORM_DATE_MONTH_MAY_SHORT', 'JSN_UNIFORM_DATE_MONTH_JUNE_SHORT', 'JSN_UNIFORM_DATE_MONTH_JULY_SHORT', 'JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT', 'JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT', 'JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT', 'JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT', 'JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT', 'JSN_UNIFORM_DATE_DAY_SUNDAY', 'JSN_UNIFORM_DATE_DAY_MONDAY', 'JSN_UNIFORM_DATE_DAY_TUESDAY', 'JSN_UNIFORM_DATE_DAY_WEDNESDAY', 'JSN_UNIFORM_DATE_DAY_THURSDAY', 'JSN_UNIFORM_DATE_DAY_FRIDAY', 'JSN_UNIFORM_DATE_DAY_SATURDAY', 'JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_MONDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT', 'JSN_UNIFORM_DATE_DAY_SUNDAY_MIN', 'JSN_UNIFORM_DATE_DAY_MONDAY_MIN', 'JSN_UNIFORM_DATE_DAY_TUESDAY_MIN', 'JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN', 'JSN_UNIFORM_DATE_DAY_THURSDAY_MIN', 'JSN_UNIFORM_DATE_DAY_FRIDAY_MIN', 'JSN_UNIFORM_DATE_DAY_SATURDAY_MIN', 'JSN_UNIFORM_DATE_DAY_WEEK_HEADER', 'JSN_UNIFORM_CONFIRM_FIELD_MAX_LENGTH', 'JSN_UNIFORM_CONFIRM_FIELD_MIN_LENGTH', 'JSN_UNIFORM_CAPTCHA_PUBLICKEY', 'JSN_UNIFORM_BUTTON_BACK', 'JSN_UNIFORM_BUTTON_NEXT', 'JSN_UNIFORM_BUTTON_RESET', 'JSN_UNIFORM_BUTTON_SUBMIT', 'JSN_UNIFORM_CONFIRM_FIELD_CANNOT_EMPTY', 'JSN_UNIFORM_CONFIRM_FIELD_INVALID');
        /* Check load JS */
        $checkLoadJS = array();
        $checkLoadJSTipsy = false;
        if ($items) {
            $formStyleCustom = new stdClass();
            if (!empty($items->form_style)) {
                $formStyleCustom = json_decode($items->form_style);
            }
            $dataSumbission = '';
            $classForm = !empty($formStyleCustom->layout) ? $formStyleCustom->layout : '';
            $formTheme = !empty($formStyleCustom->theme) ? $formStyleCustom->theme : '';
            $uri = JURI::getInstance();
            $url = $uri->toString(array('scheme', 'host', 'port')) . JURI::root(true);
            if (!$formType) {
                if ($showTitle && !empty($items->form_title)) {
                    $html .= "<h2 class='contentheading'>{$items->form_title}</h2>";
                }
                if ($showDes && !empty($items->form_description)) {
                    $des = str_replace("\n", "<br/>", $items->form_description);
                    $html .= "<p>{$des}</p>";
                }
                $document->addStyleSheet(JRoute::_('index.php?option=com_uniform&view=form&task=generateStylePages&form_id=' . $items->form_id));
                $html .= "<div class=\"jsn-uniform jsn-master\" data-form-name='" . $formName . "' id='jsn_form_" . $items->form_id . "'><div class=\"jsn-bootstrap\">";
                $html .= $topContent;
                $html .= "<form name='form_{$formName}' id='form_{$formName}' action=\"" . $url . '/index.php?option=com_uniform&view=form&task=form.save&form_id=' . $items->form_id . "\" method=\"post\" class=\"form-validate {$classForm} \" enctype=\"multipart/form-data\" >";
                $html .= "<span class=\"hide jsn-language\" style=\"display:none;\" data-value='" . json_encode(JSNUniformHelper::getTranslated($arrayTranslated)) . "'></span>";
                $html .= "<span class=\"hide jsn-base-url\" style=\"display:none;\" data-value=\"" . $url . "\"></span>";
                $html .= "<div id=\"page-loading\" class=\"jsn-bgloading\"><i class=\"jsn-icon32 jsn-icon-loading\"></i></div>";
                $html .= "<div class=\"jsn-row-container {$formTheme}\">";
            }
            $html .= "<div class=\"message-uniform\"> </div>";
            foreach ($formPages as $i => $contentForm) {
                $pageContainer = !empty($contentForm->page_container) && json_decode($contentForm->page_container) ? $contentForm->page_container : '[[{"columnName":"left","columnClass":"span12"}]]';
                $formContent = isset($contentForm->page_content) ? json_decode($contentForm->page_content) : "";
                $htmlForm = "";
                if (!empty($formContent)) {
                    foreach ($formContent as $content) {
                        if (!empty($content->instruction)) {
                            $checkLoadJSTipsy = true;
                        }
                        if (!empty($content->type)) {
                            $checkLoadJS[$content->type] = $content->type;
                        }
                    }
                    $htmlForm .= JSNFormGenerateHelper::generate($formContent, $dataSumbission, $pageContainer);
                }
                $html .= "<div data-value=\"{$contentForm->page_id}\" class=\"jsn-form-content hide\">{$htmlForm}";
                if ($i + 1 == count($formPages)) {
                    if (!empty($items->form_captcha) && $items->form_captcha == 1) {
                        if ($uri->getScheme() == 'https') {
                            $html .= "<script type=\"text/javascript\" src=\"https://www.google.com/recaptcha/api/js/recaptcha_ajax.js\"></script>";
                        } else {
                            $html .= "<script type=\"text/javascript\" src=\"http://www.google.com/recaptcha/api/js/recaptcha_ajax.js\"></script>";
                        }
                        $html .= "<div id=\"" . md5(date("Y-m-d H:i:s") . $i . $formName) . "\"  publickey=\"" . JSN_UNIFORM_CAPTCHA_PUBLICKEY . "\" class=\"form-captcha control-group\"></div>";
                    } else {
                        if (!empty($items->form_captcha) && $items->form_captcha == 2) {
                            require_once JPATH_ROOT . '/components/com_uniform/libraries/3rd-party/securimage/securimage.php';
                            $img = new Securimage();
                            $img->case_sensitive = true;
                            // true to use case sensitve codes - not recommended
                            $img->image_bg_color = new Securimage_Color("#ffffff");
                            // image background color
                            $img->text_color = new Securimage_Color("#000000");
                            // captcha text color
                            $img->num_lines = 0;
                            // how many lines to draw over the image
                            $img->line_color = new Securimage_Color("#0000CC");
                            // color of lines over the image
                            $img->namespace = $formName;
                            $img->signature_color = new Securimage_Color(rand(0, 64), rand(64, 128), rand(128, 255));
                            // random signature color
                            ob_start();
                            $img->show(JPATH_ROOT . '/components/com_uniform/libraries/3rd-party/securimage/backgrounds/bg4.png');
                            $dataCaptcha = base64_encode(ob_get_clean());
                            $html .= '<div class="control-group">
									<div class="controls">
									<div class="row-fluid"><img src="data:image/png;base64,' . $dataCaptcha . '" alt="CAPTCHA" /></div>
									<input type="text" id="jsn-captcha" name="captcha" autocomplete="off" placeholder="' . JText::_("JSN_UNIFORM_CAPTCHA") . '">
									</div>
									</div>';
                        }
                    }
                }
                $html .= "</div>";
            }
            $formSettings = !empty($items->form_settings) ? json_decode($items->form_settings) : "";
            $btnNext = !empty($formSettings->form_btn_next_text) ? $formSettings->form_btn_next_text : "Next";
            $btnPrev = !empty($formSettings->form_btn_prev_text) ? $formSettings->form_btn_prev_text : "Prev";
            $btnSubmit = !empty($formSettings->form_btn_submit_text) ? $formSettings->form_btn_submit_text : "Submit";
            $btnReset = !empty($formSettings->form_btn_reset_text) ? $formSettings->form_btn_reset_text : "Reset";
            $btnNextStyle = !empty($formStyleCustom->button_next_color) ? $formStyleCustom->button_next_color : "btn  btn-primary";
            $btnPrevStyle = !empty($formStyleCustom->button_prev_color) ? $formStyleCustom->button_prev_color : "btn";
            $btnSubmitStyle = !empty($formStyleCustom->button_submit_color) ? $formStyleCustom->button_submit_color : "btn  btn-primary";
            $btnResetStyle = !empty($formStyleCustom->button_reset_color) ? $formStyleCustom->button_reset_color : "btn";
            $btnPosition = !empty($formStyleCustom->button_position) ? $formStyleCustom->button_position : "btn-toolbar";
            $htmlBtnReset = "";
            if (!empty($formSettings->form_state_btn_reset_text) && $formSettings->form_state_btn_reset_text == "Yes") {
                $htmlBtnReset = '<button class="' . $btnResetStyle . ' reset hide" onclick="return false;">' . JText::_($btnReset) . '</button>';
            }
            $html .= '<div class="form-actions">
									<div class="' . $btnPosition . '">
									    <button class="' . $btnPrevStyle . ' prev hide" onclick="return false;">' . JText::_($btnPrev) . '</button>
									    <button class="' . $btnNextStyle . ' next hide" onclick="return false;">' . JText::_($btnNext) . '</button>
									    ' . $htmlBtnReset . '
									    <button type="submit" class="' . $btnSubmitStyle . ' jsn-form-submit hide" >' . JText::_($btnSubmit) . '</button>
									</div>
								     </div>';
            $formId = isset($items->form_id) ? $items->form_id : "";
            $postAction = isset($items->form_post_action) ? $items->form_post_action : "";
            $postActionData = isset($items->form_post_action_data) ? $items->form_post_action_data : "";
            $edition = defined('JSN_UNIFORM_EDITION') ? JSN_UNIFORM_EDITION : "free";
            if (strtolower($edition) == "free") {
                $html .= "<div class=\"jsn-text-center\"><a href=\"http://www.joomlashine.com/joomla-extensions/jsn-uniform.html\" target=\"_blank\">" . JText::_('JSN_UNIFORM_POWERED_BY') . "</a> by <a href=\"http://www.joomlashine.com\" target=\"_blank\">JoomlaShine</a></div>";
            }
            $html .= "<input type=\"hidden\" name=\"form_name\" value=\"{$formName}\" />";
            if (!$formType) {
                $html .= "</div>";
                $html .= "<input type=\"hidden\" name=\"task\" value=\"form.save\" />";
                $html .= "<input type=\"hidden\" name=\"option\" value=\"com_uniform\" />";
                $html .= "<input type=\"hidden\" name=\"form_id\" value=\"{$formId}\" />";
                $html .= "<input type=\"hidden\" id=\"form_post_action\" name=\"form_post_action\" value=\"{$postAction}\" />";
                $html .= "<input type=\"hidden\" name=\"form_post_action_data\" value='" . htmlentities($postActionData, ENT_QUOTES, "UTF-8") . "' />";
                $html .= JHtml::_('form.token');
                $html .= "</form>";
                $html .= $bottomContent;
                $html .= "</div></div>";
            }
            /* Load JS */
            if (!empty($checkLoadJS['date'])) {
                $document->addStyleSheet(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-ui/css/ui-bootstrap/jquery-ui-1.9.0.custom.css');
            }
            $getHeadData = JFactory::getDocument()->getHeadData();
            $checkLoadScript = true;
            $scripts = array();
            foreach ($getHeadData['scripts'] as $script => $option) {
                if ($script == JSN_UNIFORM_ASSETS_URI . '/js/form.js') {
                    if (!empty($checkLoadJS['google-maps']) && empty($getHeadData['scripts']['https://maps.google.com/maps/api/js?sensor=false&libraries=places'])) {
                        if ($uri->getScheme() == 'https') {
                            $scripts['https://maps.google.com/maps/api/js?sensor=false&libraries=places'] = $option;
                        } else {
                            $scripts['http://maps.google.com/maps/api/js?sensor=false&libraries=places'] = $option;
                        }
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.js'] = $option;
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.services.js'] = $option;
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.extensions.js'] = $option;
                    }
                    if (!empty($checkLoadJS['date']) && empty($getHeadData['scripts'][JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-timepicker-addon.js'])) {
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-1.10.3.custom.min.js'] = $option;
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-timepicker-addon.js'] = $option;
                    }
                    if ($checkLoadJSTipsy && empty($getHeadData['scripts'][JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-tipsy/jquery.tipsy.js'])) {
                        $scripts[JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-tipsy/jquery.tipsy.js'] = $option;
                    }
                    $scripts[$script] = $option;
                    $checkLoadScript = false;
                } else {
                    $scripts[$script] = $option;
                }
                if ($script == JSN_UNIFORM_ASSETS_URI . '/js/submissions.js' || $script == JSN_UNIFORM_ASSETS_URI . '/js/submission.js') {
                    $scripts[JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-scrollto/jquery.scrollTo.js'] = $option;
                    $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery.placeholder.js'] = $option;
                    $scripts[JURI::root(true) . '/media/jui/js/bootstrap.min.js'] = $option;
                    if (!empty($checkLoadJS['google-maps'])) {
                        if ($uri->getScheme() == 'https') {
                            $scripts['https://maps.google.com/maps/api/js?sensor=false&libraries=places'] = $option;
                        } else {
                            $scripts['http://maps.google.com/maps/api/js?sensor=false&libraries=places'] = $option;
                        }
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.js'] = $option;
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.services.js'] = $option;
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.extensions.js'] = $option;
                    }
                    if (!empty($checkLoadJS['date'])) {
                        $scripts[JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-timepicker-addon.js'] = $option;
                    }
                    $scripts[JSN_UNIFORM_ASSETS_URI . '/js/form.js'] = $option;
                    $checkLoadScript = false;
                }
            }
            if ($checkLoadScript) {
                $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/jsn_uf_jquery_safe.js');
                $document->addScript(JURI::root(true) . '/media/jui/js/jquery.min.js');
                $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery.placeholder.js');
                $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/json-2.3.min.js');
                if ($checkLoadJSTipsy) {
                    $document->addScript(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-tipsy/jquery.tipsy.js');
                }
                $document->addScript(JURI::root(true) . '/plugins/system/jsnframework/assets/3rd-party/jquery-scrollto/jquery.scrollTo.js');
                $document->addScript(JURI::root(true) . '/media/jui/js/bootstrap.min.js');
                if (!empty($checkLoadJS['date'])) {
                    $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-1.10.3.custom.min.js');
                    $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/jquery-ui-timepicker-addon.js');
                }
                if (!empty($checkLoadJS['google-maps'])) {
                    if ($uri->getScheme() == 'https') {
                        $document->addScript('https://maps.google.com/maps/api/js?sensor=false&libraries=places');
                    } else {
                        $document->addScript('http://maps.google.com/maps/api/js?sensor=false&libraries=places');
                    }
                    $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.js');
                    $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.services.js');
                    $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/libs/googlemaps/jquery.ui.map.extensions.js');
                }
                $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/form.js');
                $document->addScript(JSN_UNIFORM_ASSETS_URI . '/js/jsn_uf_conflict.js');
            } else {
                if (!empty($scripts)) {
                    $getHeadData['scripts'] = $scripts;
                    JFactory::getDocument()->setHeadData($getHeadData);
                }
            }
        }
        return $html;
    }