public static function showForm($formId, $val = array(), $validation = array()) { $mainframe = JFactory::getApplication(); $formId = (int) $formId; $db = JFactory::getDBO(); $doc = JFactory::getDocument(); $db->setQuery("SELECT `FormId`, `FormLayoutName`, `FormLayout`, `ScriptDisplay`, `ErrorMessage`, `FormTitle`, `CSS`, `JS`, `CSSClass`, `CSSId`, `CSSName`, `CSSAction`, `CSSAdditionalAttributes`, `AjaxValidation`, `ThemeParams` FROM #__rsform_forms WHERE FormId='" . $formId . "' AND `Published`='1'"); $form = $db->loadObject(); $lang = RSFormProHelper::getCurrentLanguage(); $translations = RSFormProHelper::getTranslations('forms', $form->FormId, $lang); if ($translations) { foreach ($translations as $field => $value) { if (isset($form->{$field})) { $form->{$field} = $value; } } } if ($form->JS) { $doc->addCustomTag($form->JS); } if ($form->CSS) { $doc->addCustomTag($form->CSS); } if ($form->ThemeParams) { RSFormProHelper::loadTheme($form); } $doc->addStyleSheet(JURI::root(true) . '/components/com_rsform/assets/css/front.css'); if ($doc->getDirection() == 'rtl') { $doc->addStyleSheet(JURI::root(true) . '/components/com_rsform/assets/css/front-rtl.css'); } $doc->addScript(JURI::root(true) . '/components/com_rsform/assets/js/script.js?v=' . _RSFORM_REVISION); $calendars = RSFormProHelper::componentExists($formId, 6); //6 is the componentTypeId for calendar if (!empty($calendars)) { $doc->addStyleSheet(JURI::root(true) . '/components/com_rsform/assets/calendar/calendar.css'); $hidden = JRequest::getVar('hidden'); $all_data = RSFormProHelper::getComponentProperties($calendars); foreach ($calendars as $i => $calendarComponentId) { $data = $all_data[$calendarComponentId]; $calendars['CALENDARLAYOUT'][$i] = $data['CALENDARLAYOUT']; $calendars['DATEFORMAT'][$i] = $data['DATEFORMAT']; $calendars['VALUES'][$i] = ''; $calendars['EXTRA'][$i] = array(); if (!empty($hidden[$data['NAME']])) { $calendars['VALUES'][$i] = preg_replace('#[^0-9\\/]+#i', '', $hidden[$data['NAME']]); } if (isset($data['MINDATE'])) { $data['MINDATE'] = RSFormProHelper::isCode($data['MINDATE']); } if (isset($data['MAXDATE'])) { $data['MAXDATE'] = RSFormProHelper::isCode($data['MAXDATE']); } if (!empty($data['MINDATE'])) { $calendars['EXTRA'][$i][] = "'mindate': '" . $data['MINDATE'] . "'"; } if (!empty($data['MAXDATE'])) { $calendars['EXTRA'][$i][] = "'maxdate': '" . $data['MAXDATE'] . "'"; } if (!empty($data['VALIDATIONCALENDAR'])) { list($rule, $otherCalendar) = explode(' ', $data['VALIDATIONCALENDAR']); if (isset($all_data[$otherCalendar])) { $calendars['EXTRA'][$i][] = "'rule': '" . $rule . '|' . $all_data[$otherCalendar]['NAME'] . "'"; } } $calendars['EXTRA'][$i] = '{' . implode(', ', $calendars['EXTRA'][$i]) . '}'; } unset($all_data); $calendarsLayout = "'" . implode("','", $calendars['CALENDARLAYOUT']) . "'"; $calendarsFormat = "'" . implode("','", $calendars['DATEFORMAT']) . "'"; $calendarsValues = "'" . implode("','", $calendars['VALUES']) . "'"; $calendarsExtra = implode(',', $calendars['EXTRA']); } $formLayout = $form->FormLayout; unset($form->FormLayout); $errorMessage = $form->ErrorMessage; unset($form->ErrorMessage); $db->setQuery("SELECT p.PropertyValue AS name, c.ComponentId, c.ComponentTypeId, ct.ComponentTypeName, c.Order FROM #__rsform_properties p LEFT JOIN #__rsform_components c ON (c.ComponentId=p.ComponentId) LEFT JOIN #__rsform_component_types ct ON (ct.ComponentTypeId=c.ComponentTypeId) WHERE c.FormId='" . $formId . "' AND p.PropertyName='NAME' AND c.Published='1' ORDER BY c.Order"); $components = $db->loadObjectList(); $pages = array(); $page_progress = array(); $submits = array(); foreach ($components as $component) { if ($component->ComponentTypeId == 41) { $pages[] = $component->ComponentId; } elseif ($component->ComponentTypeId == 13) { $submits[] = $component->ComponentId; } } $start_page = 0; if (!empty($validation)) { foreach ($components as $component) { if (in_array($component->ComponentId, $validation)) { break; } if ($component->ComponentTypeId == 41) { $start_page++; } } } $find = array(); $replace = array(); $all_data = RSFormProHelper::getComponentProperties($components); foreach ($components as $component) { $data = $all_data[$component->ComponentId]; $data['componentTypeId'] = $component->ComponentTypeId; $data['ComponentTypeName'] = $component->ComponentTypeName; $data['Order'] = $component->Order; // Pagination if ($component->ComponentTypeId == 41) { $data['PAGES'] = $pages; $page_progress[] = array('show' => @$data['DISPLAYPROGRESS'] == 'YES', 'text' => @$data['DISPLAYPROGRESSMSG']); } elseif ($component->ComponentTypeId == 13) { $data['SUBMITS'] = $submits; if ($component->ComponentId == end($submits)) { $page_progress[] = array('show' => @$data['DISPLAYPROGRESS'] == 'YES', 'text' => @$data['DISPLAYPROGRESSMSG']); } } // Caption $find[] = '{' . $component->name . ':caption}'; $caption = ''; if (isset($data['SHOW']) && $data['SHOW'] == 'NO') { $caption = ''; } elseif (isset($data['CAPTION'])) { $caption = $data['CAPTION']; } $replace[] = $caption; // Body $find[] = '{' . $component->name . ':body}'; $replace[] = RSFormProHelper::getFrontComponentBody($formId, $component->ComponentId, $data, $val, in_array($component->ComponentId, $validation), $form->FormLayoutName); // Description $find[] = '{' . $component->name . ':description}'; $description = ''; if (isset($data['SHOW']) && $data['SHOW'] == 'NO') { $description = ''; } elseif (isset($data['DESCRIPTION'])) { $descrtmp = $data['DESCRIPTION']; } if (trim($descrtmp) != '') { $description = '<a data-placement="top" rel="clickover" data-original-title="info" data-content="' . $descrtmp . '" class="btn btn-small btn-link">info</a>'; } else { $description = ''; } $replace[] = $description; // Validation message $find[] = '{' . $component->name . ':validation}'; $validationMessage = ''; if (isset($data['SHOW']) && $data['SHOW'] == 'NO') { $validationMessage = ''; } elseif (isset($data['VALIDATIONMESSAGE'])) { if (!empty($validation) && in_array($component->ComponentId, $validation)) { $validationMessage = '<span id="component' . $component->ComponentId . '" class="formError">' . $data['VALIDATIONMESSAGE'] . '</span>'; } else { $validationMessage = '<span id="component' . $component->ComponentId . '" class="formNoError">' . $data['VALIDATIONMESSAGE'] . '</span>'; } } $replace[] = $validationMessage; } unset($all_data); $u = RSFormProHelper::getURL(); //Trigger Event - onInitFormDisplay $mainframe->triggerEvent('rsfp_f_onInitFormDisplay', array(array('find' => &$find, 'replace' => &$replace, 'formLayout' => &$formLayout))); $user = JFactory::getUser(); $jconfig = JFactory::getConfig(); array_push($find, '{global:formtitle}', '{global:username}', '{global:userip}', '{global:userid}', '{global:useremail}', '{global:fullname}', '{global:sitename}', '{global:siteurl}'); array_push($replace, $form->FormTitle, $user->get('username'), isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '', $user->get('id'), $user->get('email'), $user->get('name'), $jconfig->get('sitename'), JURI::root()); $formLayout = str_replace($find, $replace, $formLayout); if (strpos($formLayout, 'class="formError"') !== false) { $formLayout = str_replace('{error}', $errorMessage, $formLayout); } elseif ($form->AjaxValidation) { $formLayout = str_replace('{error}', '<div id="rsform_error_' . $formId . '" style="display: none;">' . $errorMessage . '</div>', $formLayout); } else { $formLayout = str_replace('{error}', '', $formLayout); } $formLayout .= '<input type="hidden" name="form[formId]" value="' . $formId . '"/>'; if ($form->FormLayoutName == 'responsive') { $form->CSSClass .= ' formResponsive'; if (RSFormProHelper::getConfig('auto_responsive')) { $doc->addCustomTag('<meta name="viewport" content="width=device-width, initial-scale=1.0">'); $mainframe->registerEvent('onAfterRender', '_modifyResponsiveTemplate'); } } if ($form->FormLayoutName == 'bootstrap-horizontal') { $form->CSSClass .= ' form-horizontal'; } if ($form->FormLayoutName == 'bootstrap-vertical') { $form->CSSClass .= ' form-vertical'; } $CSSClass = $form->CSSClass ? ' class="' . RSFormProHelper::htmlEscape(trim($form->CSSClass)) . '"' : ''; $CSSId = $form->CSSId ? ' id="' . RSFormProHelper::htmlEscape(trim($form->CSSId)) . '"' : ''; $CSSName = $form->CSSName ? ' name="' . RSFormProHelper::htmlEscape(trim($form->CSSName)) . '"' : ''; $u = $form->CSSAction ? RSFormProHelper::htmlEscape($form->CSSAction) : $u; $CSSAdditionalAttributes = $form->CSSAdditionalAttributes ? ' ' . trim($form->CSSAdditionalAttributes) : ''; if (!empty($pages)) { $total_pages = count($pages) + 1; $step = floor(100 / $total_pages); $replace_progress = array('{page}', '{total}', '{percent}'); $with_progress = array(1, $total_pages, $step * 1); $progress = reset($page_progress); $progress_script = ''; $formLayout = '<div id="rsform_progress_' . $formId . '" class="rsformProgress">' . ($progress['show'] ? str_replace($replace_progress, $with_progress, $progress['text']) : '') . '</div>' . "\n" . $formLayout; foreach ($page_progress as $p => $progress) { $progress['text'] = str_replace(array("\r", "\n"), array('', '\\n'), addcslashes($progress['text'], "'")); $replace_progress = array('{page}', '{total}', '{percent}'); $with_progress = array($p + 1, $total_pages, $p + 1 == $total_pages ? 100 : $step * ($p + 1)); $progress_script .= "if (page == " . $p . ") document.getElementById('rsform_progress_" . $formId . "').innerHTML = '" . ($progress['show'] ? str_replace($replace_progress, $with_progress, $progress['text']) : '') . "';"; } $formLayout .= "\n" . '<script type="text/javascript">' . "\n" . 'function rsfp_showProgress_' . $formId . '(page) {' . "\n" . $progress_script . "\n" . '}' . "\n" . '</script>'; } $formLayout = '<form method="post" ' . $CSSId . $CSSClass . $CSSName . $CSSAdditionalAttributes . ' enctype="multipart/form-data" action="' . RSFormProHelper::htmlEscape($u) . '">' . $formLayout . '</form>'; if ($prices = self::$prices) { $formLayout .= "\n" . '<script type="text/javascript">' . "\n" . implode("\n", $prices) . "\n" . '</script>' . "\n"; } if (!empty($calendars)) { $formLayout .= "\n" . '<script type="text/javascript" src="' . JURI::root(true) . '/components/com_rsform/assets/calendar/cal.js?v=' . _RSFORM_REVISION . '"></script>' . "\n"; $formLayout .= '<script type="text/javascript">' . RSFormProHelper::getCalendarJS() . '</script>' . "\n"; $formLayout .= '<script type="text/javascript" defer="defer">rsf_CALENDAR.util.Event.addListener(window, "load", rsfp_init(' . $formId . ',{ layouts: Array(' . $calendarsLayout . '), formats: Array(' . $calendarsFormat . '), values: Array(' . $calendarsValues . '), extra: Array(' . $calendarsExtra . ') }));</script>' . "\n"; } if (!empty($pages)) { $formLayout .= '<script type="text/javascript" src="' . JURI::root(true) . '/components/com_rsform/assets/js/pages.js?v=' . _RSFORM_REVISION . '"></script>' . "\n"; $formLayout .= '<script type="text/javascript">rsfp_changePage(' . $formId . ', ' . $start_page . ', ' . count($pages) . ');</script>' . "\n"; } if ($form->AjaxValidation || !empty($pages)) { $formLayout .= '<script type="text/javascript">var rsfp_ajax_root = \'' . addslashes(JURI::root(true)) . '\';</script>'; } if ($form->AjaxValidation) { $formLayout .= '<script type="text/javascript">rsfp_addEvent(window, \'load\', function(){var form = rsfp_getForm(' . $formId . '); form.onsubmit = ajaxValidation;});</script>'; } $ajaxScript = ''; $mainframe->triggerEvent('rsfp_f_onAJAXScriptCreate', array(array('script' => &$ajaxScript, 'formId' => $formId))); $formLayout .= '<script type="text/javascript">'; $formLayout .= 'ajaxExtraValidationScript[' . $formId . '] = function(task, formId, data) {'; $formLayout .= 'var formComponents = {};'; foreach ($components as $component) { if (in_array($component->ComponentTypeId, array(7, 9, 10, 11, 12, 13, 15, 41))) { continue; } $formLayout .= "formComponents[" . $component->ComponentId . "]='" . $component->name . "';"; } $formLayout .= "if (task == 'afterSend') {"; $formLayout .= "\r\n\t\tvar ids = data.response[0].split(',');\r\n\t\tfor (var i=0; i<ids.length; i++) {\r\n\t\t\tvar id = parseInt(ids[i]);\r\n\t\t\tif (!isNaN(id) && typeof formComponents[id] != 'undefined') {\r\n\t\t\t\tvar formComponent = rsfp_getFieldsByName(formId, formComponents[id]);\r\n\t\t\t\tif (formComponent && formComponent.length > 0) {\r\n\t\t\t\t\tfor (var j=0; j<formComponent.length; j++) {\r\n\t\t\t\t\t\tif (formComponent[j]) {\r\n\t\t\t\t\t\t\tformComponent[j].className = formComponent[j].className.replace(' rsform-error', '');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar ids = data.response[1].split(',');\r\n\t\tfor (var i=0; i<ids.length; i++) {\r\n\t\t\tvar id = parseInt(ids[i]);\r\n\t\t\tif (!isNaN(id) && typeof formComponents[id] != 'undefined') {\r\n\t\t\t\tvar formComponent = rsfp_getFieldsByName(formId, formComponents[id]);\r\n\t\t\t\tif (formComponent && formComponent.length > 0) {\r\n\t\t\t\t\tfor (var j=0; j<formComponent.length; j++) {\r\n\t\t\t\t\t\tif (formComponent[j]) {\r\n\t\t\t\t\t\t\tformComponent[j].className = formComponent[j].className.replace(' rsform-error', '') + ' rsform-error';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t"; $formLayout .= "}\n"; // has this been modified? if ($ajaxScript) { $formLayout .= $ajaxScript; } $formLayout .= '}'; $formLayout .= '</script>'; if ($conditions = RSFormProHelper::getConditions($formId)) { $formLayout .= '<script type="text/javascript">'; foreach ($conditions as $condition) { $formLayout .= "\n" . 'function rsfp_runCondition' . $condition->id . '(){'; if ($condition->details) { $condition_vars = array(); foreach ($condition->details as $detail) { $formLayout .= "\n" . "isChecked = rsfp_verifyChecked(" . $formId . ", '" . addslashes($detail->ComponentName) . "', '" . addslashes($detail->value) . "');"; $formLayout .= "\n" . "condition" . $detail->id . " = isChecked == " . ($detail->operator == 'is' ? 'true' : 'false') . ";"; $condition_vars[] = "condition" . $detail->id; } if ($condition->block) { $block = JFilterOutput::stringURLSafe($condition->ComponentName); $formLayout .= "\n" . "items = rsfp_getBlock(" . $formId . ", '" . addslashes($block) . "');"; } else { $formLayout .= "\n" . "items = rsfp_getFieldsByName(" . $formId . ", '" . addslashes($condition->ComponentName) . "');"; } $formLayout .= "\n" . "if (items) {"; $formLayout .= "\n" . "if (" . implode($condition->condition == 'all' ? '&&' : '||', $condition_vars) . ")"; $formLayout .= "\n" . "rsfp_setDisplay(items, '" . ($condition->action == 'show' ? '' : 'none') . "');"; $formLayout .= "\n" . 'else'; $formLayout .= "\n" . "rsfp_setDisplay(items, '" . ($condition->action == 'show' ? 'none' : '') . "');"; $formLayout .= "\n" . "}"; } $formLayout .= "\n" . '}'; $formLayout .= "\n" . 'rsfp_runCondition' . $condition->id . '();'; if ($condition->details) { foreach ($condition->details as $detail) { $formLayout .= "\n" . "rsfp_addCondition(" . $formId . ", '" . addslashes($detail->ComponentName) . "', rsfp_runCondition" . $condition->id . ");"; } } } $formLayout .= "\n" . '</script>'; } if ($calculations = RSFormProHelper::getCalculations($formId)) { require_once dirname(__FILE__) . '/calculations.php'; $formLayout .= "\n" . '<script type="text/javascript">'; $formLayout .= "\n" . 'function rsfp_Calculations' . $formId . '(){'; foreach ($calculations as $calculation) { $expression = RSFormProCalculations::expression($calculation, $formId); $formLayout .= "\n" . $expression . "\n"; } $formLayout .= "\n" . '}'; $formLayout .= "\n" . 'rsfp_Calculations' . $formId . '();'; $formLayout .= RSFormProCalculations::getFields($calculations, $formId); $formLayout .= "\n" . 'rsfp_setCalculationsEvents(' . $formId . ',rsfpCalculationFields' . $formId . ');'; $formLayout .= "\n" . '</script>'; } $maps = RSFormProHelper::componentExists($formId, 212); //212 is the componentTypeId for maps if (!empty($maps)) { $formLayout .= "\n" . '<script type="text/javascript">'; foreach ($maps as $map) { $formLayout .= RSFormProHelper::generateMap($map, $validation); } $formLayout .= "\n" . '</script>'; } $RSadapter = RSFormProHelper::getLegacyAdapter(); eval($form->ScriptDisplay); //Trigger Event - onBeforeFormDisplay $mainframe->triggerEvent('rsfp_f_onBeforeFormDisplay', array(array('formLayout' => &$formLayout, 'formId' => $formId))); return $formLayout; }
public function display($tpl = null) { $mainframe = JFactory::getApplication(); $document = JFactory::getDocument(); $document->addCustomTag('<!--[if IE 7]><link href="' . JURI::root() . 'administrator/components/com_rsform/assets/css/styleie.css" rel="stylesheet" type="text/css" /><![endif]-->'); RSFormProHelper::loadCodeMirror(); JToolBarHelper::title('RSForm! Pro', 'rsform'); // adding the toolbar on 2.5 if (!RSFormProHelper::isJ('3.0')) { $this->addToolbar(); } $layout = $this->getLayout(); $this->isComponent = JRequest::getVar('tmpl') == 'component'; $this->tooltipClass = RSFormPRoHelper::getTooltipClass(); if ($layout == 'edit') { $submissionsIcon = RSFormProHelper::isJ('3.0') ? 'database' : 'forward'; $previewIcon = RSFormProHelper::isJ('3.0') ? 'new tab' : 'preview'; $directoryIcon = RSFormProHelper::isJ('3.0') ? 'folder' : 'forward'; JToolBarHelper::apply('forms.apply'); JToolBarHelper::save('forms.save'); JToolBarHelper::spacer(); JToolBarHelper::custom('forms.preview', $previewIcon, $previewIcon, JText::_('JGLOBAL_PREVIEW'), false); JToolBarHelper::custom('submissions.back', $submissionsIcon, $submissionsIcon, JText::_('RSFP_SUBMISSIONS'), false); JToolBarHelper::custom('forms.directory', $directoryIcon, $directoryIcon, JText::_('RSFP_DIRECTORY'), false); JToolBarHelper::custom('components.copy', 'copy', 'copy', JText::_('RSFP_COPY_TO_FORM'), false); JToolBarHelper::custom('components.duplicate', 'copy', 'copy', JText::_('RSFP_DUPLICATE'), false); JToolBarHelper::deleteList(JText::_('RSFP_ARE_YOU_SURE_DELETE'), 'components.remove', JText::_('JTOOLBAR_DELETE')); JToolBarHelper::publishList('components.publish', JText::_('JTOOLBAR_PUBLISH')); JToolBarHelper::unpublishList('components.unpublish', JText::_('JTOOLBAR_UNPUBLISH')); JToolBarHelper::spacer(); JToolBarHelper::cancel('forms.cancel'); $this->tabposition = JRequest::getInt('tabposition', 0); $this->tab = JRequest::getInt('tab', 0); $this->form = $this->get('form'); $this->form_post = $this->get('formPost'); $this->hasSubmitButton = $this->get('hasSubmitButton'); JToolBarHelper::title('RSForm! Pro <small>[' . JText::sprintf('RSFP_EDITING_FORM', $this->form->FormTitle) . ']</small>', 'rsform'); $lists['Published'] = $this->renderHTML('select.booleanlist', 'Published', '', $this->form->Published); $lists['ShowFormTitle'] = $this->renderHTML('select.booleanlist', 'ShowFormTitle', '', $this->form->ShowFormTitle); $lists['keepdata'] = $this->renderHTML('select.booleanlist', 'Keepdata', '', $this->form->Keepdata); $lists['confirmsubmission'] = $this->renderHTML('select.booleanlist', 'ConfirmSubmission', '', $this->form->ConfirmSubmission); $lists['ShowThankyou'] = $this->renderHTML('select.booleanlist', 'ShowThankyou', 'onclick="enableThankyou(this.value);"', $this->form->ShowThankyou); $lists['ShowContinue'] = $this->renderHTML('select.booleanlist', 'ShowContinue', !$this->form->ShowThankyou ? 'disabled="true"' : '', $this->form->ShowContinue); $lists['UserEmailMode'] = $this->renderHTML('select.booleanlist', 'UserEmailMode', 'onclick="enableEmailMode(\'User\', this.value)"', $this->form->UserEmailMode, JText::_('HTML'), JText::_('RSFP_COMP_FIELD_TEXT')); $lists['UserEmailAttach'] = $this->renderHTML('select.booleanlist', 'UserEmailAttach', 'onclick="enableAttachFile(this.value)"', $this->form->UserEmailAttach); $lists['AdminEmailMode'] = $this->renderHTML('select.booleanlist', 'AdminEmailMode', 'onclick="enableEmailMode(\'Admin\', this.value)"', $this->form->AdminEmailMode, JText::_('HTML'), JText::_('RSFP_COMP_FIELD_TEXT')); $lists['MetaTitle'] = $this->renderHTML('select.booleanlist', 'MetaTitle', '', $this->form->MetaTitle); $lists['TextareaNewLines'] = $this->renderHTML('select.booleanlist', 'TextareaNewLines', '', $this->form->TextareaNewLines); $lists['AjaxValidation'] = $this->renderHTML('select.booleanlist', 'AjaxValidation', '', $this->form->AjaxValidation); $lists['FormLayoutAutogenerate'] = $this->renderHTML('select.booleanlist', 'FormLayoutAutogenerate', 'onclick="changeFormAutoGenerateLayout(' . $this->form->FormId . ', this.value);"', $this->form->FormLayoutAutogenerate); $lists['post_enabled'] = $this->renderHTML('select.booleanlist', 'form_post[enabled]', '', $this->form_post->enabled); $lists['post_method'] = $this->renderHTML('select.booleanlist', 'form_post[method]', '', $this->form_post->method, JText::_('RSFP_POST_METHOD_POST'), JText::_('RSFP_POST_METHOD_GET')); $lists['post_silent'] = $this->renderHTML('select.booleanlist', 'form_post[silent]', '', $this->form_post->silent); $this->themes = $this->get('themes'); $this->lang = $this->get('lang'); // workaround for first time visit $session = JFactory::getSession(); $session->set('com_rsform.form.' . $this->form->FormId . '.lang', $this->lang); $this->fields = $this->get('fields'); $this->totalFields = $this->get('totalfields'); $this->quickfields = $this->get('quickfields'); $this->pagination = $this->get('fieldspagination'); $this->calculations = RSFormProHelper::getCalculations($this->form->FormId); $lists['Languages'] = JHTML::_('select.genericlist', $this->get('languages'), 'Language', 'onchange="submitbutton(\'changeLanguage\')"', 'value', 'text', $this->lang); $lists['totalFields'] = JHTML::_('select.genericlist', $this->get('languages'), 'Language', 'onchange="submitbutton(\'changeLanguage\')"', 'value', 'text', $this->lang); $this->mappings = $this->get('mappings'); $this->mpagination = $this->get('mpagination'); $this->conditions = $this->get('conditions'); $this->formId = $this->form->FormId; $this->emails = $this->get('emails'); $this->lists = $lists; } elseif ($layout == 'new') { $nextIcon = RSFormProHelper::isJ('3.0') ? 'next' : 'forward'; JToolBarHelper::custom('forms.new.steptwo', $nextIcon, $nextIcon, JText::_('JNEXT'), false); JToolBarHelper::cancel('forms.cancel'); } elseif ($layout == 'new2') { $nextIcon = RSFormProHelper::isJ('3.0') ? 'next' : 'forward'; JToolBarHelper::custom('forms.new.stepthree', $nextIcon, $nextIcon, JText::_('JNEXT'), false); JToolBarHelper::cancel('forms.cancel'); $lists['AdminEmail'] = $this->renderHTML('select.booleanlist', 'AdminEmail', 'onclick="changeAdminEmail(this.value)"', 1); $lists['UserEmail'] = $this->renderHTML('select.booleanlist', 'UserEmail', '', 1); $actions = array(JHTML::_('select.option', 'refresh', JText::_('RSFP_SUBMISSION_REFRESH_PAGE')), JHTML::_('select.option', 'thankyou', JText::_('RSFP_SUBMISSION_THANKYOU')), JHTML::_('select.option', 'redirect', JText::_('RSFP_SUBMISSION_REDIRECT_TO'))); $lists['SubmissionAction'] = JHTML::_('select.genericlist', $actions, 'SubmissionAction', 'onclick="changeSubmissionAction(this.value)"'); $this->adminEmail = $this->get('adminEmail'); $this->lists = $lists; $this->editor = JFactory::getEditor(); } elseif ($layout == 'new3') { $nextIcon = RSFormProHelper::isJ('3.0') ? 'next' : 'forward'; JToolBarHelper::custom('forms.new.stepfinal', $nextIcon, $nextIcon, JText::_('RSFP_FINISH'), false); JToolBarHelper::cancel('forms.cancel'); $lists['predefinedForms'] = JHTML::_('select.genericlist', $this->get('predefinedforms'), 'predefinedForm', ''); $this->lists = $lists; } elseif ($layout == 'component_copy') { JToolBarHelper::custom('components.copy.process', 'copy', 'copy', JText::_('RSFP_COPY'), false); JToolBarHelper::cancel('components.copy.cancel'); $formlist = $this->get('formlist'); $lists['forms'] = JHTML::_('select.genericlist', $formlist, 'toFormId', '', 'value', 'text'); $this->formId = JRequest::getInt('formId'); $this->cids = JRequest::getVar('cid', array()); $this->lists = $lists; } elseif ($layout == 'richtext') { $this->editor = JFactory::getEditor(); $this->noEditor = JRequest::getInt('noEditor'); $this->formId = JRequest::getInt('formId'); $this->editorName = JRequest::getCmd('opener'); $this->editorText = $this->get('editorText'); } elseif ($layout == 'edit_mappings') { $formId = JRequest::getInt('formId'); $this->mappings = $this->get('mappings'); $this->mpagination = $this->get('mpagination'); $this->formId = $formId; } elseif ($layout == 'edit_conditions') { $formId = JRequest::getInt('formId'); $this->conditions = $this->get('conditions'); $this->formId = $formId; } elseif ($layout == 'edit_emails') { $this->emails = $this->get('emails'); $this->lang = $this->get('emaillang'); } elseif ($layout == 'show') { $db = JFactory::getDBO(); $lang = JFactory::getLanguage(); $lang->load('com_rsform', JPATH_SITE); $formId = JRequest::getInt('formId'); $db->setQuery("SELECT FormTitle FROM #__rsform_forms WHERE FormId = " . $formId . " "); JToolBarHelper::title($db->loadResult(), 'rsform'); $this->formId = $formId; } elseif ($layout == 'emails') { $this->row = $this->get('email'); $this->lang = $this->get('emaillang'); $lists['mode'] = $this->renderHTML('select.booleanlist', 'mode', 'onclick="showMode(this.value);"', $this->row->mode, JText::_('HTML'), JText::_('Text')); $lists['Languages'] = JHTML::_('select.genericlist', $this->get('languages'), 'ELanguage', 'onchange="submitbutton(\'changeEmailLanguage\')"', 'value', 'text', $this->lang); $this->lists = $lists; $this->editor = JFactory::getEditor(); $this->quickfields = $this->get('quickfields'); } else { $this->addToolbar(); $this->sidebar = $this->get('Sidebar'); JToolbarHelper::addNew('forms.add', JText::_('JTOOLBAR_NEW')); JToolBarHelper::spacer(); JToolBarHelper::custom('forms.copy', 'copy.png', 'copy_f2.png', JText::_('RSFP_DUPLICATE'), false); JToolBarHelper::spacer(); JToolBarHelper::deleteList(JText::_('RSFP_ARE_YOU_SURE_DELETE'), 'forms.delete', JText::_('JTOOLBAR_DELETE')); JToolBarHelper::spacer(); JToolBarHelper::publishList('forms.publish', JText::_('JTOOLBAR_PUBLISH')); JToolBarHelper::unpublishList('forms.unpublish', JText::_('JTOOLBAR_UNPUBLISH')); $this->forms = $this->get('forms'); $this->pagination = $this->get('pagination'); $this->sortColumn = $this->get('sortColumn'); $this->sortOrder = $this->get('sortOrder'); } parent::display($tpl); }
public static function create($formIds, $submissions, $filename) { $db = JFactory::getDbo(); $user = JFactory::getUser(); $app = JFactory::getApplication(); $config = JFactory::getConfig(); $version = new RSFormProVersion(); $xml = '<?xml version="1.0" encoding="utf-8"?>' . "\n"; $xml .= '<RSinstall type="rsformbackup">' . "\n"; $xml .= '<name>RSform backup</name>' . "\n"; $xml .= '<creationDate>' . date('Y-m-d') . '</creationDate>' . "\n"; $xml .= '<author>' . $user->username . '</author>' . "\n"; $xml .= '<copyright>(C) ' . date('Y') . ' ' . JURI::root() . '</copyright>' . "\n"; $xml .= '<authorEmail>' . $config->get('mailfrom') . '</authorEmail>' . "\n"; $xml .= '<authorUrl>' . JURI::root() . '</authorUrl>' . "\n"; $xml .= '<version>' . (string) $version . '</version>' . "\n"; $xml .= '<revision>' . $version->revision . '</revision>' . "\n"; $xml .= '<description>RSForm! Pro Backup</description>' . "\n"; $xml .= '<tasks>' . "\n"; // We need to see all available languages here, because the conditions are attached to languages $lang = JFactory::getLanguage(); $languages = $lang->getKnownLanguages(JPATH_SITE); //LOAD FORMS $db->setQuery("SELECT * FROM #__rsform_forms WHERE FormId IN ('" . implode("','", $formIds) . "') ORDER BY FormId"); $form_rows = $db->loadObjectList(); foreach ($form_rows as $form_row) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_forms', $form_row, 'FormId') . "\n"; $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'q_FormId\'] = $db->insertid();]]></task>' . "\n"; $db->setQuery("SELECT * FROM #__rsform_translations WHERE `form_id`='" . $form_row->FormId . "' AND `reference`='forms'"); $translations = $db->loadObjectList(); foreach ($translations as $translation) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_translations', $translation, 'id') . "\n"; } $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'ComponentIds\'] = array();]]></task>' . "\n"; //LOAD COMPONENTS $db->setQuery("SELECT * FROM #__rsform_components WHERE FormId = '" . $form_row->FormId . "'"); $component_rows = $db->loadObjectList(); foreach ($component_rows as $component_row) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_components', $component_row, 'ComponentId', 'FormId') . "\n"; $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'q_ComponentId\'] = $db->insertid();]]></task>' . "\n"; //LOAD PROPERTIES $db->setQuery("SELECT * FROM #__rsform_properties WHERE ComponentId = '" . $component_row->ComponentId . "'"); $property_rows = $db->loadObjectList(); $ComponentName = ''; foreach ($property_rows as $property_row) { if ($property_row->PropertyName == 'NAME') { $ComponentName = $property_row->PropertyValue; } $xml .= RSFormProBackup::createXMLEntry('#__rsform_properties', $property_row, 'PropertyId', 'ComponentId') . "\n"; } if ($ComponentName) { $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'ComponentIds\'][\'' . $ComponentName . '\'] = $GLOBALS[\'q_ComponentId\'];]]></task>' . "\n"; } //LOAD TRANSLATIONS $db->setQuery("SELECT * FROM #__rsform_translations WHERE `form_id`='" . $form_row->FormId . "' AND `reference_id` LIKE '" . $component_row->ComponentId . ".%'"); $translations = $db->loadObjectList(); foreach ($translations as $translation) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_translations', $translation, 'id') . "\n"; } } if ($submissions) { //LOAD SUBMISSIONS $db->setQuery("SELECT * FROM #__rsform_submissions WHERE FormId = '" . $form_row->FormId . "'"); $submission_rows = $db->loadObjectList(); foreach ($submission_rows as $submission_row) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_submissions', $submission_row, 'SubmissionId', 'FormId') . "\n"; $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'q_SubmissionId\'] = $db->insertid();]]></task>' . "\n"; //LOAD SUBMISSION_VALUES $db->setQuery("SELECT * FROM #__rsform_submission_values WHERE SubmissionId = '" . $submission_row->SubmissionId . "'"); $submission_value_rows = $db->loadObjectList(); foreach ($submission_value_rows as $submission_value_row) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_submission_values', $submission_value_row, 'SubmissionValueId', array('SubmissionId', 'FormId')) . "\n"; } } } //LOAD CONDITIONS foreach ($languages as $tag => $properties) { $conditions = RSFormProHelper::getConditions($form_row->FormId, $tag); if ($conditions) { foreach ($conditions as $condition) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_conditions', $condition, array('id')) . "\n"; $xml .= "\t" . '<task type="eval"><![CDATA[$GLOBALS[\'q_ConditionId\'] = $db->insertid();]]></task>' . "\n"; if ($condition->details) { foreach ($condition->details as $detail) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_condition_details', $detail, array('id')) . "\n"; } } } } } //LOAD POSTS $db->setQuery("SELECT * FROM #__rsform_posts WHERE `form_id`='" . $form_row->FormId . "'"); if ($post = $db->loadObject()) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_posts', $post, null, null, true) . "\n"; } //LOAD CALCULATIONS if ($calculations = RSFormProHelper::getCalculations($form_row->FormId)) { foreach ($calculations as $calculation) { $xml .= RSFormProBackup::createXMLEntry('#__rsform_calculations', $calculation, null, null, true) . "\n"; } } //Trigger Event - onFormBackup $app->triggerEvent('rsfp_bk_onFormBackup', array(array('formId' => $form_row->FormId, 'xml' => &$xml))); } $xml .= '</tasks>' . "\n"; $xml .= '</RSinstall>'; jimport('joomla.filesystem.file'); return JFile::write($filename, $xml); }