/** * 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; }