Current Path :
/
home
/
develito
/
public_html
/
components
/
com_raforms
/
models
/
Or
Select Your Path :
Upload File :
New :
File
Dir
/home/develito/public_html/components/com_raforms/models/fform.php
<?php /* ------------------------------------------------------------------------ # com_raforms - rootArea Forms # ------------------------------------------------------------------------ # author Markus Döhla # copyright Copyright (C) 2012 rootarea.de. All Rights Reserved. # @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL # @license - Please read policy about plugins development in administrator/components/com_raforms/license-plugins.txt carefully # @license - Additional EULA on www.rootarea.de DOES NOT apply to ANY lite packages # Websites: http://www.rootarea.de # Technical Support: Forum - http://www.rootarea.de/en/forum ------------------------------------------------------------------------- */ //-- No direct access defined('_JEXEC') or die('=;)'); jimport('joomla.application.component.modelform'); class RAformsModelFForm extends JModelForm { var $_formid; var $_id; var $_formdata; protected $_context = 'com_raforms'; function __construct() { $app = JFactory::getApplication(); // Initialise variables. $this->params = $app->getParams(); $this->state = $this->getState(); parent::__construct(); } /* public function setParams($params = null) { $app =& JFactory::getApplication(); $this->params = &$app->getParams(); if (!empty($params)) { $this->params = $params; $this->formid = $this->params->get('formid'); } } */ protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); $this->id = JRequest::getVar('id', 0); $formid = $app->getUserStateFromRequest($this->_context . '.formid', 'formid', $this->params->get('formid')); $paramFormid = $this->params->get('formid'); $this->formid = (!empty($paramFormid)) ? $paramFormid : $formid; // if we came from a category page, rip off alias from slug $this->formid = (strpos($this->formid, ':')) ? substr($this->formid, 0, strpos($this->formid, ':')) : $this->formid; $app->setUserState($this->_context . '.formid', $formid); $this->edit = ($this->id == 0) ? false : true; /* If (empty($this->formid) || $this->formid <= 0) { JError::RaiseError('500', 'Es kann keine Formularliste mit id <= 0 angezeigt werden.'); } */ // List state information. parent::populateState($ordering, $direction); } protected function allowEditSelOptFromDb($data = array(), $permType) { if ($permType == 'access') { $userAccessLevels = JFactory::getUser()->getAuthorisedViewLevels(); } // Check specific edit permission then general edit permission. foreach ($data as $id => $object) { $allowed = true; switch ($permType) { case 'asset': $allowed = JFactory::getUser()->authorise('core.edit.own', $object->asset_id ); break; case 'access': $allowed = in_array($object->access, $userAccessLevels); break; } if ( ! $allowed ) { unset($data[$id]); } } return $data; } function getId() { return $this->id; } function setId($id) { //-- Set id and wipe data $this->id = (int)$id; return true; } function setFormId($formid) { //-- Set id and wipe data $this->formid = (int) $formid; return true; } function getFormData() { if (empty($this->_formdata)) { $db = JFactory::getDBO(); $query = 'SELECT * FROM #__raforms' . ' WHERE id = ' . $this->formid; $db->setQuery($query); if (!$form = $db->loadObject()) { return false; } $gzData = @gzuncompress($form->data); if ($gzData !== false) { $form->data = $gzData; } if (!is_array($resData = @unserialize($form->data))) { if (!is_array($resData = json_decode($form->data, true))) { $resData = array(); } } $data = $resData; unset($form->data); foreach ($data as $k => $v) { $form->data[$v['fieldname']] = $v; } $gzConfig = @gzuncompress($form->config); if ($gzConfig !== false) { $form->config = $gzConfig; } if (!is_array($resConfig = @unserialize($form->config))) { if (!is_array($resConfig = json_decode($form->config, true))) { $resConfig = array(); } } $pages = 1; $form->config = $resConfig; foreach($form->data as $k => $v) { foreach ($v as $k2 => $v2) { if ($k2 != 'selopt' && $k2 != 'html') { if (!is_array($v)) { $v[$k2] = nl2br($v2); } } } // check for page settings // set page to 1 if no page was definded (for backwards compatibility) if (array_key_exists("page", $v) && is_numeric($v['page'])) { $pages = ($v['page'] > $pages) ? $v['page'] : $pages; } else { $v['page'] = 1; } } $this->setPages($pages); $this->_formdata = $form; } return $this->_formdata; } function setPages($pages) { $this->pages = $pages; } function getPages() { if (!$this->pages) { $this->getFormData(); } return $this->pages; } function getFormDataVar($elementkey, $var) { $formdata = $this->getFormData(); $elementkeynr = preg_replace("/.*_field(\d+)/", "$1", $elementkey); $value = $formdata->data[$elementkeynr][$var]; return $value; } static function javascriptConversion(&$value) { $value = preg_replace("/'/", "\\'", $value); $value = preg_replace("/(\r\n)+|(\n|\r)+/", "\\n", $value); if (!is_numeric($value) && !preg_match("/true|false/", $value)) { $value = preg_replace("/^(.*)$/", "'$1'", $value); } } static function javascriptCSSConversion($value) { $array = preg_split("/(\r\n)+|(\n|\r)+/", $value); foreach ($array as $k => $v) { $array[$k] = preg_replace("/([^:]*):\s*([^;]*);/", "'$1': '$2'", $v); } return implode(",", $array); } function removeElementByValue($arr, $val) { $return = array(); foreach($arr as $k => $v) { if (is_array($v)) { $return[$k] = $this->removeElementByValue($v, $val); //recursion continue; } if ($v == $val) continue; $return[$k] = $v; } return $return; } public function getForm($data = array(), $loadData = true) { return true; } function getFormattedForm($page = 1) { $app = JFactory::getApplication(); $document = JFactory::getDocument(); $db = JFactory::getDBO(); $user = JFactory::getUser(); // If form was already sent $formData = $app->getUserState('com_raforms.formrequest_form_'. $this->formid, array()); $ffData = (isset($formData[$page]) && isset($formData[$page]['data'])) ? $formData[$page]['data'] : array(); $pluginData = (isset($formData[$page]) && isset($formData[$page]['plugins'])) ? $formData[$page]['plugins'] : array(); if (is_array($ffData)) { $ffData = $this->removeElementByValue($ffData, ''); } $form = $this->getFormData(); $form->hidden = array(); $form->element = array(); $tabindexPosX = array(); $tabindexPosY = array(); $form->effects_domready = array(); $form->effects = array(); foreach($form->data as $k => $v) { if (!isset($v['page']) || !is_numeric($v['page'])) { $v['page'] = 1; } if ($v['page'] != $page) { continue; } // check if it is a submit button and if user is allowed to edit / create an entry // if not, leave out the submit button if ($v['elementtype'] == 'submit') { $canDo = RAformsHelper::getActions($this->formid, 'raform'); if ($this->edit) { $canEdit = $canDo->get('core.edit'); $canEditOwn = ($canDo->get('core.edit.own') && $ffData['user'] == $user->id); if (!$canEdit && !$canEditOwn) { unset($form->data[$k]); continue; } } else { $canCreate = $canDo->get('core.create'); if (!$canCreate) { unset($form->data[$k]); continue; } } } if (array_key_exists('hidden', $v) && $v['hidden'] == 1) { unset($form->data[$k]); continue; } $required = ""; $requiredclass = ""; if (isset($form->data[$k]['validation'])) { if(in_array('required', $form->data[$k]['validation'])) { $required = "<span style='font-weight: bold; color: #FF0000;'>*</span>"; } $requiredclass = " " . implode( " ", $form->data[$k]['validation']); } $cssclass = (array_key_exists('cssclass', $v)) ? ' '.$v['cssclass'] : ''; $classval = $v['fieldname'] . $cssclass; $formElementClass = $v['fieldname'] . "_formElement "; $required = ($this->params->get('showrequired')) ? $required : ""; $disabled = (isset($v['disabledelement']) && $v['disabledelement']) ? "disabled='disabled'" : ""; if (array_key_exists('posX', $v) && array_key_exists('posY', $v)) { $form->element[$v['fieldname']]['fieldname'] = $v['fieldname']; $form->element[$v['fieldname']]['label'] = (array_key_exists('label', $v) && $v['labeldisplay'] == 1) ? "<div class='" . $classval . " formLabel'>" . $v['label'] . $required . "</div>" : ''; // for tabindex sorting $tabindexPosY[$v['fieldname']] = $v['posY']; $tabindexPosX[$v['fieldname']] = $v['posX']; } else { $tabindexPosY[$v['fieldname']] = 1; $tabindexPosX[$v['fieldname']] = 1; } switch ($v['elementtype']) { case 'text': (!empty($ffData[$v['fieldname']])) ? $value = "value='".$ffData[$v['fieldname']]."'" : $value = ""; // compatibility $v['elwidth'] = ((!$v['elwidth'] || $v['elwidth'] == '') && isset($v['textsize'])) ? '100' : $v['elwidth']; $v['elheight'] = ((!$v['elheight'] || $v['elheight'] == '') && isset($v['textsize'])) ? '20' : $v['elheight']; $form->element[$v['fieldname']]['element'] = "<input type='text' name='data[".$v['fieldname']."]' style='width: ".$v['elwidth']."px; height: ".$v['elheight']."px;' maxlength='".$v['maxlength']."' class='" . $formElementClass . $classval . $requiredclass . "' ".$value." " . $disabled . "/>"; if (isset($v['disabledelement']) && $v['disabledelement']) { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "]' " . $value . " />"; } break; case 'select': $multi = ($v['multi'] == 'true') ? "multiple='multiple'" : ""; $name = ($v['multi'] == 'true') ? "data[".$v['fieldname']."][]" : "data[".$v['fieldname']."]"; $optionCount = 0; $form->element[$v['fieldname']]['element'] = "<select name='".$name."' size='".$v['seloptsize']."' class='" . $formElementClass . $classval . $requiredclass . "' ".$multi." " . $disabled . ">\n"; $values = array(); if (!empty($v['seloptempty'])) { $form->element[$v['fieldname']]['element'] .= "<option value=''>".$v['seloptempty']."</option>\n"; } if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } else { if (preg_match("/[ ,]asset_id[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'asset'); } if (preg_match("/[ ,]access[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'access'); } } foreach ($seloptfromdb as $key => $val) { $selected = ''; if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $ffData[$v['fieldname']])) { $selected = " selected='selected'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { if ($val->$v['seloptfromdbvalue'] == $ffData[$v['fieldname']]) { $selected = " selected='selected'"; $values[] = $val->$v['seloptfromdbvalue']; } } } else if (isset($v['seloptfromdbpreselect']) && !array_key_exists($v['fieldname'], $ffData)) { if (in_array($val->$v['seloptfromdbvalue'], $v['seloptfromdbpreselect'])) { $selected = " selected='selected'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { $selected = ""; } $form->element[$v['fieldname']]['element'] .= "<option id='" . $v['fieldname'] . "_" . $optionCount . "' value='".$val->$v['seloptfromdbvalue']."'".$selected.">".$val->$v['seloptfromdbtext']."</option>\n"; $optionCount++; } } else { foreach ($v['selopt'] as $id => $option) { $selected = ''; if ($option['hidden'] != 1) { $label = rtrim($option['option']); if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($id, $ffData[$v['fieldname']])) { $selected = " selected='selected'"; $values[] = $id; } } else { if ($id == $ffData[$v['fieldname']]) { $selected = " selected='selected'"; $values[] = $id; } } } else if (isset($option['preselect']) && $option['preselect'] == 1 && !array_key_exists($v['fieldname'], $ffData)) { $selected = " selected='selected'"; $values[] = $id; } else { $selected = ""; } $form->element[$v['fieldname']]['element'] .= "<option id='" . $v['fieldname'] . "_" . $optionCount . "' value='" . $id . "'" . $selected . ">" . $label . "</option>\n"; $optionCount++; } } } $form->element[$v['fieldname']]['element'] .= "</select>"; if (isset($v['disabledelement']) && $v['disabledelement']) { if (count($values) > 1 && $v['multi'] == 'true') { foreach ($values as $value) { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "][]' value='" . $value . "' />"; } } else if (count($values) >= 1 && $v['multi'] != 'true') { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "]' value='" . $values[0] . "' />"; } } break; case 'textarea': $ffData[$v['fieldname']] = (!empty($ffData[$v['fieldname']])) ? $ffData[$v['fieldname']] : ''; $form->element[$v['fieldname']]['element'] = "<textarea name='data[".$v['fieldname']."]' style='width: " . $v['elwidth'] . "px; height: " . $v['elheight'] . "px;' class='" . $formElementClass . $classval . $requiredclass . "' " . $disabled . ">".$ffData[$v['fieldname']]."</textarea>"; if (isset($v['disabledelement']) && $v['disabledelement']) { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "]' value='" . $ffData[$v['fieldname']] . "' />"; } break; case 'checkbox': $form->element[$v['fieldname']]['element'] = "<input type='hidden' name='data[".$v['fieldname']."]' value='' " . $disabled . ">"; $labelstyle = ($v['position'] == "1") ? 'float: left;' : 'float: right;'; $inputstyle = ($v['position'] == "1") ? 'float: right;' : 'float: left;'; $divstyle = ($v['position'] == "1" && $form->data[$k]['hv'] != 1) ? 'width: 100%;' : ''; $divstyle .= ($form->data[$k]['hv'] == 1) ? ' float: left;' : ' float: left; clear: both;'; $labelstyle .= 'margin: 0 5px;'; $values = array(); if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } else { if (preg_match("/[ ,]asset_id[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'asset'); } if (preg_match("/[ ,]access[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'access'); } } // last key of array end($seloptfromdb); $lastkey = key($seloptfromdb); reset($seloptfromdb); foreach ($seloptfromdb as $key => $val) { $checked = ""; if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $ffData[$v['fieldname']])) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { if ($val->$v['seloptfromdbvalue'] == $ffData[$v['fieldname']]) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } } else if (isset($v['seloptfromdbpreselect']) && !array_key_exists($v['fieldname'], $ffData)) { if (in_array($val->$v['seloptfromdbvalue'], $v['seloptfromdbpreselect'])) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { $checked = ""; } //$form->element[$v['fieldname']]['element'] .= "<option value='".$val->$v['seloptfromdbvalue']."'".$selected.">".$val->$v['seloptfromdbtext']."</option>\n"; $checkboxlabel = rtrim($val->$v['seloptfromdbtext']); $class = ($key == $lastkey) ? $classval . $requiredclass : $classval; $form->element[$v['fieldname']]['element'] .= "<div id='" . $v['fieldname'] . "_" . (int) $val->$v['seloptfromdbvalue'] . "Div' class='" . $v['fieldname'] . "_elementDiv' style='" . $divstyle . "'>"; $form->element[$v['fieldname']]['element'] .= "<label for='data[".$v['fieldname']."][]' style='" . $labelstyle . "'>" . $checkboxlabel . "</label>"; $form->element[$v['fieldname']]['element'] .= "<input id='" . $v['fieldname'] . "_" . (int) $val->$v['seloptfromdbvalue'] . "' type='checkbox' class='" . $formElementClass . $class . "' name='data[".$v['fieldname']."][]' value='" . $val->$v['seloptfromdbvalue'] . "' style='" . $inputstyle . "' ".$checked." " . $disabled . ">"; $form->element[$v['fieldname']]['element'] .= "</div>"; } } else { // last key of array end($v['selopt']); $lastkey = key($v['selopt']); reset($v['selopt']); foreach ($v['selopt'] as $id => $option) { $checked = ""; if (isset($option['hidden']) && $option['hidden'] != 1) { $label = rtrim($option['option']); $checked = ""; if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($id, $ffData[$v['fieldname']])) { $checked = " checked='checked'"; $values[] = $id; } } else { if ($id == $ffData[$v['fieldname']]) { $checked = " checked='checked'"; $values[] = $id; } } } else if (isset($option['preselect']) && $option['preselect'] == 1 && !array_key_exists($v['fieldname'], $ffData)) { $checked = " checked='checked'"; $values[] = $id; } else { $checked = ""; } $class = ($id == $lastkey) ? $classval . $requiredclass : $classval; $form->element[$v['fieldname']]['element'] .= "<div id='" . $v['fieldname'] . "_" . $id . "Div' class='" . $v['fieldname'] . "_elementDiv' style='" . $divstyle . "'>"; $form->element[$v['fieldname']]['element'] .= "<label for='data[".$v['fieldname']."][]' style='" . $labelstyle . "'>" . $label . "</label>"; $form->element[$v['fieldname']]['element'] .= "<input id='" . $v['fieldname'] . "_" . $id . "' type='checkbox' class='" . $formElementClass . $class . "' name='data[".$v['fieldname']."][]' value='" . $id . "' style='" . $inputstyle . "' ".$checked." " . $disabled . ">"; $form->element[$v['fieldname']]['element'] .= "</div>"; } } } if (isset($v['disabledelement']) && $v['disabledelement']) { foreach ($values as $value) { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "][]' value='" . $value . "' />"; } } break; case 'radio': $form->element[$v['fieldname']]['element'] = "<input type='hidden' name='data[".$v['fieldname']."]' value=''>"; $labelstyle = ($v['position'] == "1") ? 'float: left;' : 'float: right;'; $labelstyle .= 'margin: 0 5px;'; $inputstyle = ($v['position'] == "1") ? 'float: right;' : 'float: left;'; $divstyle = ($v['position'] == "1" && $form->data[$k]['hv'] != 1) ? 'width: 100%;' : ''; $divstyle .= ($form->data[$k]['hv'] == 1) ? ' float: left;' : ' float: left; clear: both;'; $values = array(); if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } else { if (preg_match("/[ ,]asset_id[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'asset'); } if (preg_match("/[ ,]access[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'access'); } } // last key of array end($seloptfromdb); $lastkey = key($seloptfromdb); reset($seloptfromdb); foreach ($seloptfromdb as $key => $val) { $checked = ""; if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $ffData[$v['fieldname']])) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { if ($val->$v['seloptfromdbvalue'] == $ffData[$v['fieldname']]) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } } else if (isset($v['seloptfromdbpreselect']) && !array_key_exists($v['fieldname'], $ffData)) { if (in_array($val->$v['seloptfromdbvalue'], $v['seloptfromdbpreselect'])) { $checked = " checked='checked'"; $values[] = $val->$v['seloptfromdbvalue']; } } else { $checked = ""; } $radiolabel = rtrim($val->$v['seloptfromdbtext']); $form->element[$v['fieldname']]['element'] .= "<div id='" . $v['fieldname'] . "_" . (int) $val->$v['seloptfromdbvalue'] . "Div' class='" . $v['fieldname'] . "_elementDiv' style='" . $divstyle . "'>"; $form->element[$v['fieldname']]['element'] .= "<label for='data[".$v['fieldname']."]' style='" . $labelstyle . "'>" . $radiolabel . "</label>"; $class = ($key == $lastkey) ? $classval . $requiredclass : $classval; $form->element[$v['fieldname']]['element'] .= "<input id='" . $v['fieldname'] . "_" . $val->$v['seloptfromdbvalue'] . "' type='radio' class='" . $formElementClass . $class . "' name='data[".$v['fieldname']."]' value='" . $val->$v['seloptfromdbvalue'] . "' ".$checked." style='" . $inputstyle . "' " . $disabled . ">"; $form->element[$v['fieldname']]['element'] .= "</div>"; } } else { // last key of array end($v['selopt']); $lastkey = key($v['selopt']); reset($v['selopt']); foreach ($v['selopt'] as $id => $option) { if ($option['hidden'] != 1 && !empty($option['option'])) { $checked = ""; $label = rtrim($option['option']); if (array_key_exists($v['fieldname'], $ffData)) { if (is_array($ffData[$v['fieldname']])) { if (in_array($id, $ffData[$v['fieldname']])) { $checked = " checked='checked'"; $values[] = $id; } } else { if ($id == $ffData[$v['fieldname']]) { $checked = " checked='checked'"; $values[] = $id; } } } else if (isset($option['preselect']) && $option['preselect'] == 1 && !array_key_exists($v['fieldname'], $ffData)) { $checked = " checked='checked'"; $values[] = $id; } else { $checked = ""; } $form->element[$v['fieldname']]['element'] .= "<div id='" . $v['fieldname'] . "_" . $id . "Div' class='" . $v['fieldname'] . "_elementDiv' style='" . $divstyle . "'>"; $form->element[$v['fieldname']]['element'] .= "<label for='data[".$v['fieldname']."]' style='" . $labelstyle . "'>" . $label . "</label>"; $class = (isset($id) && $id == $lastkey) ? $classval . $requiredclass : $classval; $form->element[$v['fieldname']]['element'] .= "<input id='" . $v['fieldname'] . "_" . $id . "' type='radio' class='" . $formElementClass . $class . "' name='data[".$v['fieldname']."]' value='" . $id . "' ".$checked." style='" . $inputstyle . "' " . $disabled . ">"; $form->element[$v['fieldname']]['element'] .= "</div>"; } } } if (isset($v['disabledelement']) && $v['disabledelement']) { if (count($values) > 0) { $form->element[$v['fieldname']]['element'] .= "<input type='hidden' name='data[" . $v['fieldname'] . "]' value='" . $values[0] . "' />"; } } break; case 'submit': $style = ""; $width = (array_key_exists('elwidth', $v)) ? preg_replace('/[^0-9]/', '', $v['elwidth']) : 0; $height = (array_key_exists('elheight', $v)) ? preg_replace('/[^0-9]/', '', $v['elheight']) : 0; if ($width > 0) { $style .= 'width: ' . $width . 'px;'; } if ($height > 0) { $style .= 'height: ' . $height . 'px;'; } if ( !empty($style) ) { $style = "style='" . $style . "'"; } $form->element[$v['fieldname']]['element'] = "<input id='submit_" . $v['fieldname'] . "' type='button' name='" . $v['fieldname'] . "' class='" . $requiredclass.$cssclass . "' value='" . $v['submit'] . "' " . $style . " " . $disabled . ">"; $keepvalues = (array_key_exists('keepvalues', $v) && $v['keepvalues'] == true) ? 'true' : 'false'; $returntocurrentform = (array_key_exists('returntocurrentform', $v) && $v['returntocurrentform'] == true) ? 'true' : 'false'; $fieldname = 'submit_' . $v['fieldname']; $redirect = $v['redirect']; $redirecturl = (array_key_exists('redirecturl', $v) && !empty($v['redirecturl'])) ? rawurlencode($v['redirecturl']) : ''; $submitformname = 'raforms-form-' . $this->formid; $js = <<<EOT window.addEvent('domready', function() { document.id('$fieldname').addEvent('click', function() { (new Element ('input', {'type': 'hidden', 'name': 'redirect', 'value': '$redirect'})).inject('$fieldname', 'before'); if ('$redirect' == 'url') { (new Element ('input', {'type': 'hidden', 'name': 'redirecturl', 'value': '$redirecturl'})).inject('$fieldname', 'before'); } if ($keepvalues == true) { (new Element ('input', {'type': 'hidden', 'name': 'keepvalues', 'value': '1'})).inject('$fieldname', 'before'); } if ($returntocurrentform == true) { (new Element ('input', {'type': 'hidden', 'name': 'returntocurrentform', 'value': '1'})).inject('$fieldname', 'before'); } if (raformsValidate.validate()) { document.id('$submitformname').submit(); } }); }); EOT; //$form->submitjs[] = $js; $document->addScriptDeclaration($js); break; case 'html': $form->element[$v['fieldname']]['label'] = ""; $form->element[$v['fieldname']]['element'] = $v['html']; break; case 'separator': $form->element[$v['fieldname']]['label'] = ""; $form->element[$v['fieldname']]['element'] = "<hr style='border-style: ".$v['style'].";'/>"; break; case 'ip': $form->hidden[$v['fieldname']] = "<input type='hidden' name='data[ip]' value='".$_SERVER['REMOTE_ADDR']."'>"; break; case 'user': $form->hidden[$v['fieldname']] = "<input type='hidden' name='data[user]' value='".$user->id."'>"; break; case 'date': $form->hidden[$v['fieldname']] = "<input type='hidden' name='data[date]' value='true'>"; break; default : $pluginPath = JPATH_SITE . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'extension' . DIRECTORY_SEPARATOR . 'raforms_' . $v['elementtype'] . DIRECTORY_SEPARATOR . 'site'; $plugin = $pluginPath . DIRECTORY_SEPARATOR . $v['elementtype'].'.php'; if (JFile::exists($plugin)) { include_once($plugin); $elementlabel = JFile::stripExt(JFile::getName($plugin)).'label'; $element = JFile::stripExt(JFile::getName($plugin)).'element'; // add some properties $properties = $v; $properties['edit'] = $this->edit; $properties['formid'] = $this->formid; $form->element[$v['fieldname']]['label'] = "<div class='" . $classval . " formLabel'>" . $elementlabel($properties, $required, $requiredclass) . "</div>"; $pluginFormData = (isset($pluginData[$v['elementtype']][$v['fieldname']])) ? $pluginData[$v['elementtype']][$v['fieldname']] : ''; $form->element[$v['fieldname']]['element'] = $element($properties, $required, $requiredclass, $pluginFormData); // check for plugin css if (JFile::exists($pluginPath . DIRECTORY_SEPARATOR . $v['elementtype'] . '.css')) { $document->addStyleSheet(JUri::root() . 'plugins/extension/raforms_' . $v['elementtype'] . '/site/' . $v['elementtype'] . '.css'); } } } // check for effects if (array_key_exists('fx', $v) && is_array($form->data[$k]['fx'])) { $elementDiv = $form->data[$k]['fieldname']; $divstyle = ""; // add effects property if (!isset($form->effects)) { $form->effects = array(); } if (!isset($form->effects_domready)) { $form->effects_domready = array(); } switch ($v['elementtype']) { case 'radio': case 'checkbox': $form->effects_domready[] = <<<EOT var {$elementDiv}_Fx = function(reset) { $$('input.$elementDiv').each( function(cbx) { var cbx_id = cbx.get('id') if (cbx.checked) { if (eval('typeof ' + cbx_id + '_Fx == "function"')) { eval( cbx_id + '_Fx();' ); } } else if (!cbx.checked) { if (reset) { if (eval ('typeof ' + cbx_id + '_Fx_Reset == "function"')) { eval( cbx_id + '_Fx_Reset();' ); } } } }.bind(this)); }; {$elementDiv}_Fx(false); EOT; foreach ($form->data[$k]['fx'] as $subElementDiv => $effects) { $fxElement = ($effects['applyto'] == 'row') ? $elementDiv : $subElementDiv . 'Div'; $divstyle = '.' . $elementDiv . '_elementDiv { ' . $divstyle . ' } '; $document->addStyleDeclaration($divstyle); switch (key($effects['fxtype'])) { case 'background-color': $setFX = "'background-color': '" . $effects['fxtype'][key($effects['fxtype'])] . "'"; $resetFX = "'background-color': ''"; break; case 'css': $setFX = $this->javascriptCSSConversion($effects['fxtype'][key($effects['fxtype'])]); $resetFX = preg_split('/,/', $setFX); foreach ($resetFX as $stkey => $stval) { $clean = preg_replace("/^([^:]*):.*/", "$1: ''", $stval); $resetFX[$stkey] = preg_replace("/\\n/", '', $clean); } $resetFX = implode(',', $resetFX); break; } if ($effects['applyto'] == 'row') { $resetFxJs = <<<EOT var {$subElementDiv}_Fx_Reset = function() { var resetFx = {}; Object.each({ $setFX }, function (val, style) { if (val.toLowerCase() ==document.id('$fxElement').getStyle(style).toLowerCase()) { resetFx[style] = ''; } }.bind(this)); document.id('$fxElement').setStyles( resetFx ); }; EOT; } else { $resetFxJs = <<<EOT var {$subElementDiv}_Fx_Reset = function() {document.id('$fxElement').setStyles({ $resetFX }); }; EOT; } $form->effects[] = <<<EOT var {$subElementDiv}_Fx = function() {document.id('$fxElement').setStyles({ $setFX }); }; EOT; $form->effects[] = $resetFxJs . "\n"; $form->effects_domready[] = <<<EOT document.id('$subElementDiv').addEvent('click', function (ev, reset) { {$elementDiv}_Fx(true); }); EOT; } break; case 'select': $selectElement = $elementDiv . '_formElement'; $form->effects_domready[] = <<<EOT var {$selectElement}_Fx = function(reset) { $$('.$selectElement').each( function(selectElement) { Array.each(selectElement.getChildren('option'), function (cbx) { var cbx_id = cbx.get('id') if (cbx.selected) { if (eval('typeof ' + cbx_id + '_Fx == "function"')) { eval( cbx_id + '_Fx();' ); } } else if (!cbx.selected) { if (reset) { if (eval ('typeof ' + cbx_id + '_Fx_Reset == "function"')) { eval( cbx_id + '_Fx_Reset();' ); } } } }.bind(this)); }.bind(this)); }; {$selectElement}_Fx(false); EOT; foreach ($form->data[$k]['fx'] as $subElement => $effects) { $fxElement = ($effects['applyto'] == 'row') ? $elementDiv : $subElement; $divstyle = '.' . $elementDiv . '_elementDiv { ' . $divstyle . ' } '; $document->addStyleDeclaration($divstyle); switch (key($effects['fxtype'])) { case 'background-color': $setFX = "'background-color': '" . $effects['fxtype'][key($effects['fxtype'])] . "'"; $resetFX = "'background-color': ''"; break; case 'css': $setFX = $this->javascriptCSSConversion($effects['fxtype'][key($effects['fxtype'])]); $resetFX = preg_split('/,/', $setFX); foreach ($resetFX as $stkey => $stval) { $clean = preg_replace("/^([^:]*):.*/", "$1: ''", $stval); $resetFX[$stkey] = preg_replace("/\\n/", '', $clean); } $resetFX = implode(',', $resetFX); break; } if ($effects['applyto'] == 'row') { $resetFxJs = <<<EOT var {$subElement}_Fx_Reset = function() { var resetFx = {}; Object.each({ $setFX }, function (val, style) { if (val.toLowerCase() ==document.id('$fxElement').getStyle(style).toLowerCase()) { resetFx[style] = ''; } }.bind(this)); document.id('$fxElement').setStyles( resetFx ); }; EOT; } else { $resetFxJs = <<<EOT var {$subElement}_Fx_Reset = function() {document.id('$fxElement').setStyles({ $resetFX }); }; EOT; } $form->effects[] = <<<EOT var {$subElement}_Fx = function() {document.id('$fxElement').setStyles({ $setFX }); }; EOT; $form->effects[] = $resetFxJs . "\n"; $form->effects_domready[] = <<<EOT $$('.$selectElement').addEvent('change', function (ev, reset) { {$selectElement}_Fx(true); }); EOT; } break; } } } if (count($form->effects_domready) > 0) { $domready_js = "window.addEvent('domready', function() {\n "; foreach ($form->effects_domready as $js) { $domready_js .= $js; } $domready_js .= "\n }); \n"; $document->addScriptDeclaration($domready_js); } foreach ($form->effects as $js) { $document->addScriptDeclaration($js); } // sort for tabindex $merged = array(); $elementOrdering = array(); foreach ($tabindexPosY as $fieldname => $pos) { $merged[$pos][$tabindexPosX[$fieldname]] = $fieldname; } ksort($merged); foreach ($merged as $k1 => $v1) { ksort($v1); foreach ($v1 as $k2 => $v2) { $elementOrdering[] = $v2; } } $form->elementOrdering = $elementOrdering; return $form; } function getFormTableData() { $app = JFactory::getApplication(); $document = JFactory::getDocument(); $db = JFactory::getDBO(); $formresult = JModelLegacy::getInstance( 'FormResult', 'RAformsModel' ); $formresult->setId($this->getId()); $resultData = $formresult->getData(); $form = $this->getFormData(); $form->hidden = array(); $form->element = array(); $tabindexPosX = array(); $tabindexPosY = array(); $elementOrdering = array(); $required = ''; foreach($form->data as $k => $v) { // exclude some fields if ((array_key_exists('hidden', $v) && $v['hidden'] == 1) || $v['elementtype'] == 'submit' || (isset($v['nodata']) && $v['nodata'] == 1)) { unset($form->data[$k]); continue; } $cssclass = (array_key_exists('cssclass', $v)) ? ' '.$v['cssclass'] : ''; $classval = $v['fieldname'] . $cssclass; $required = ($this->params->get('showrequired')) ? $required : ""; $disabled = (isset($v['disabledelement']) && $v['disabledelement']) ? "disabled='disabled'" : ""; if (array_key_exists('posX', $v) && array_key_exists('posY', $v)) { $form->element[$v['fieldname']]['fieldname'] = $v['fieldname']; $form->element[$v['fieldname']]['label'] = $v['label']; // for tabindex sorting $tabindexPosY[$v['fieldname']] = $v['posY']; $tabindexPosX[$v['fieldname']] = $v['posX']; } switch ($v['elementtype']) { case 'submit': continue; break; case 'text': $form->element[$v['fieldname']]['element'] = $resultData['data'][$v['fieldname']]; break; case 'select': $values = array(); if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } foreach ($seloptfromdb as $key => $val) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $resultData['data'][$v['fieldname']])) { $values[] = $val->$v['seloptfromdbtext']; } } else { if ($val->$v['seloptfromdbvalue'] == $resultData['data'][$v['fieldname']]) { $values[] = $val->$v['seloptfromdbtext']; } } } } } else { foreach ($v['selopt'] as $id => $option) { if ($option['hidden'] != 1) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($id, $resultData['data'][$v['fieldname']])) { $values[] = rtrim($option['option']); } } else { if ($id == $resultData['data'][$v['fieldname']]) { $values[] = rtrim($option['option']); } } } } } } $form->element[$v['fieldname']]['element'] = implode('<br/>', $values); break; case 'textarea': $form->element[$v['fieldname']]['element'] = $resultData['data'][$v['fieldname']]; break; case 'checkbox': $values = array(); if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } // last key of array end($seloptfromdb); $lastkey = key($seloptfromdb); reset($seloptfromdb); foreach ($seloptfromdb as $key => $val) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $resultData['data'][$v['fieldname']])) { $values[] = $val->$v['seloptfromdbtext']; } } else { if ($val->$v['seloptfromdbvalue'] == $resultData['data'][$v['fieldname']]) { $values[] = $val->$v['seloptfromdbtext']; } } } } } else { // last key of array end($v['selopt']); $lastkey = key($v['selopt']); reset($v['selopt']); foreach ($v['selopt'] as $id => $option) { if (isset($option['hidden']) && $option['hidden'] != 1) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($id, $resultData['data'][$v['fieldname']])) { $values[] = rtrim($option['option']); } } else { if ($id == $resultData['data'][$v['fieldname']]) { $values[] = rtrim($option['option']); } } } } } } $form->element[$v['fieldname']]['element'] = implode('<br/>', $values); break; case 'radio': if ($v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } // last key of array end($seloptfromdb); $lastkey = key($seloptfromdb); reset($seloptfromdb); foreach ($seloptfromdb as $key => $val) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($val->$v['seloptfromdbvalue'], $resultData['data'][$v['fieldname']])) { $values[] = $val->$v['seloptfromdbtext']; } } else { if ($val->$v['seloptfromdbvalue'] == $resultData['data'][$v['fieldname']]) { $values[] = $val->$v['seloptfromdbtext']; } } } } } else { // last key of array end($v['selopt']); $lastkey = key($v['selopt']); reset($v['selopt']); foreach ($v['selopt'] as $id => $option) { if ($option['hidden'] != 1 && !empty($option['option'])) { if (array_key_exists($v['fieldname'], $resultData['data'])) { if (is_array($resultData['data'][$v['fieldname']])) { if (in_array($id, $resultData['data'][$v['fieldname']])) { $values[] = rtrim($option['option']); } } else { if ($id == $resultData['data'][$v['fieldname']]) { $values[] = rtrim($option['option']); } } } } } } $form->element[$v['fieldname']]['element'] = implode('<br/>', $values); break; case 'date': $form->element[$v['fieldname']]['label'] = JText::_('RAFORMS_DATE'); $form->element[$v['fieldname']]['element'] = $resultData['data'][$v['fieldname']]; $elementOrdering[] = $v['fieldname']; break; case 'user': $user = JFactory::getUser($resultData['data'][$v['fieldname']]); $form->element[$v['fieldname']]['label'] = JText::_('RAFORMS_USERNAME'); $form->element[$v['fieldname']]['element'] = $user->username; $elementOrdering[] = $v['fieldname']; break; case 'ip': $form->element[$v['fieldname']]['label'] = JText::_('RAFORMS_IP'); $form->element[$v['fieldname']]['element'] = $resultData['data'][$v['fieldname']]; $elementOrdering[] = $v['fieldname']; break; default : if (is_array($resultData['data'][$v['fieldname']])) { $resultData['data'][$v['fieldname']] = implode('<br/>', $resultData['data'][$v['fieldname']]); } $form->element[$v['fieldname']]['element'] = $resultData['data'][$v['fieldname']]; } } // sort $merged = array(); foreach ($tabindexPosY as $fieldname => $pos) { $merged[$pos][$tabindexPosX[$fieldname]] = $fieldname; } ksort($merged); foreach ($merged as $k1 => $v1) { ksort($v1); foreach ($v1 as $k2 => $v2) { $elementOrdering[] = $v2; } } $result = array(); foreach ($elementOrdering as $fieldname) { $result[$fieldname]['label'] = $form->element[$fieldname]['label']; $result[$fieldname]['element'] = $form->element[$fieldname]['element']; } return $result; } function getFormTable() { $tableData = $this->getFormTableData(); $i = 1; $table = '<table style="border: 1px solid #CCCCCC; max-width: 800px;">'; foreach ($tableData as $data) { $table .= '<tr style="background-color: ' . ( ($i % 2) ? '#DDDDDD' : '#FFFFFF' ) . ';">'; $table .= '<td style="padding: 5px 15px 5px 5px; font-weight: bold;">' . $data['label'] . '</td>'; $table .= '<td style="padding: 5px;">' . $data['element'] . '</td>'; $table .= '</tr>'; $i++; } $table .= '</table>'; return $table; } function getFilters() { $app = JFactory::getApplication(); $document = JFactory::getDocument(); $db = JFactory::getDBO(); $filter = array(); $form = $this->getFormData(); foreach($form->data as $k => $v) { if (array_key_exists('hidden', $v) && $v['hidden'] == 1) { unset($form->data[$k]); continue; } if ((array_key_exists('listfilter', $v) && $v['listfilter'] < 0)) { continue; } if (array_key_exists('seloptfromdb', $v) && $v['seloptfromdb'] == 'true') { $db->setQuery($v['seloptfromdbsql']); if (!$seloptfromdb = $db->loadObjectList()) { $seloptfromdb = array(); } else { if (preg_match("/[ ,]asset_id[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'asset'); } if (preg_match("/[ ,]access[ ,]/", $v['seloptfromdbsql'])) { $seloptfromdb = $this->allowEditSelOptFromDb($seloptfromdb, 'access'); } } } $filter_value = $app->getUserStateFromRequest('filter.form_' . $this->formid . '_'.$v['fieldname'], 'filter_form_' . $this->formid . '_'.$v['fieldname']); // filter empty filter values if (is_array($filter_value)) { foreach ($filter_value as $filter_k => $filter_v) { if (strlen($filter_v) < 1) { unset($filter_value[$filter_k]); } } } $label = (array_key_exists('label', $v)) ? $v['label'] : ''; $filter_label = (array_key_exists('filterlabel', $v)) ? $v['filterlabel'] : $label ; switch ($v['elementtype']) { case 'textarea': $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = "<input type='text' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."' value='".$filter_value."' >"; break; case 'text': $v['elwidth'] = ((!$v['elwidth'] || $v['elwidth'] == '') && isset($v['textsize'])) ? '100' : $v['elwidth']; $v['elheight'] = ((!$v['elheight'] || $v['elheight'] == '') && isset($v['textsize'])) ? '20' : $v['elheight']; $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = "<input type='text' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."' style='width: ".$v['elwidth']."px; height: ".$v['elheight']."px;' value='".$filter_value."' >"; break; case 'select': $filter_value = (!is_array($filter_value)) ? array() : $filter_value; $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; if ($v['multi'] == 'true') { $multi = "multiple='multiple'"; $v['seloptsize'] += 1; } else { $multi = ""; } $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = "<select name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."[]' size='".$v['seloptsize']."' ".$multi.">\n"; if (array_key_exists('seloptempty', $v) && strlen($v['seloptempty']) > 0) { $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<option value=''>".$v['seloptempty']."</option>\n"; } else { $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<option value=''> -- </option>\n"; } if ($v['seloptfromdb'] == 'true') { foreach ($seloptfromdb as $key => $val) { $selected = (in_array($val->$v['seloptfromdbvalue'], $filter_value)) ? " selected='selected'" : ""; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<option value='".$val->$v['seloptfromdbvalue']."'".$selected.">".$val->$v['seloptfromdbtext']."</option>\n"; } } else { if (array_key_exists('selopt', $v) && is_array($v['selopt'])) { foreach ($v['selopt'] as $id => $option) { if ($option['hidden'] != 1) { $selected = (in_array($id, $filter_value)) ? " selected='selected'" : ""; $optionlabel = rtrim($option['option']); $optionvalue = $id; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<option value='" . $optionvalue . "'" . $selected . ">" . $optionlabel . "</option>\n"; } } } } $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "</select>"; break; case 'radio': case 'checkbox': $filter_value = (!is_array($filter_value)) ? array() : $filter_value; $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = "<input class='filter_checkbox' type='hidden' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."' value=''>"; $labelstyle = ($v['position'] == "1") ? 'float: left;' : 'float: right;'; $inputstyle = ($v['position'] == "1") ? 'float: right;' : 'float: left;'; $divstyle = ($form->data[$k]['hv'] == 1) ? 'float: left;' : 'float: left; clear: both;'; $labelstyle .= 'margin: 0 5px;'; if (array_key_exists('seloptfromdb', $v) && $v['seloptfromdb'] == 'true') { foreach ($seloptfromdb as $key => $val) { $checked = (in_array($val->$v['seloptfromdbvalue'], $filter_value)) ? " checked='checked'" : ""; $checkboxlabel = rtrim($val->$v['seloptfromdbtext']); $checkboxvalue = rawurlencode($val->$v['seloptfromdbvalue']); $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<div style='" . $divstyle . "'>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<input class='filter_checkbox filter_form_" . $this->formid . "_" . $v['fieldname'] . "' type='checkbox' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."[]' value='" . $checkboxvalue . "' style='" . $inputstyle . "' ".$checked.">"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<label for='filter_form_" . $this->formid . "_" . $v['fieldname'] . "' style='" . $labelstyle . "'>" . $checkboxlabel . "</label>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "</div>"; } } else { if (array_key_exists('selopt', $v) && is_array($v['selopt'])) { foreach ($v['selopt'] as $id => $option) { if ($option['hidden'] != 1) { $checked = (in_array($id, $filter_value)) ? " checked='checked'" : ""; $checkboxlabel = rtrim($option['option']); $checkboxvalue = $id; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<div style='" . $divstyle . "'>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<input class='filter_checkbox filter_form_" . $this->formid . "_" . $v['fieldname'] . "' type='checkbox' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."[]' value='" . $checkboxvalue . "' style='" . $inputstyle . "' ".$checked.">"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<label for='filter_form_" . $this->formid . "_" . $v['fieldname'] . "' style='" . $labelstyle . "'>" . $checkboxlabel . "</label>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "</div>"; } } } } $checked = ($app->getUserStateFromRequest('filter.form_' . $this->formid . '_' . $v['fieldname'] . '_all', 'filter_form_' . $this->formid . '_' . $v['fieldname'] . '_all') == 1) ? "checked='checked'" : ""; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<input class='filter_checkbox' type='hidden' name='filter_form_" . $this->formid . "_" . $v['fieldname'] . "_all' value=''>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<div style='" . $divstyle . "'>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<input id='filter_form_" . $this->formid . "_" . $v['fieldname'] . "_all' class='filter_checkbox' type='checkbox' name='filter_form_" . $this->formid . "_".$v['fieldname']."_all' value='1' style='" . $inputstyle . "' ".$checked.">"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "<label for='filter_form_" . $this->formid . "_".$v['fieldname']."_all' style='" . $labelstyle . "'>" . JText::_('RAFORMS_SELECT_ALL') . "</label>"; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] .= "</div>"; $fieldname = $v['fieldname']; $formid = $this->formid; $javascript = <<<EOT window.addEvent('domready', function() { document.id('filter_form_${formid}_${fieldname}_all').addEvent('click', function () { var all =document.id('filter_form_${formid}_${fieldname}_all').checked; $$('.filter_form_${formid}_${fieldname}').each( function (el) { (all == true) ? el.checked = true : el.checked = false; }); }); var all =document.id('filter_form_${formid}_${fieldname}_all').checked; $$('.filter_form_${formid}_${fieldname}').each( function (el) { (all == true) ? el.checked = true : el.checked = el.checked; }); }); EOT; $document->addScriptDeclaration($javascript); break; case 'ip': $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = "<input type='text' name='filter_form_" . $this->formid . "_" . $v['fieldname'] ."' value='".$_SERVER['REMOTE_ADDR']."'>"; break; case 'user': $sql = $db->getQuery(true); $sql->select("DISTINCT b.id as id, a.user, b.name"); $sql->from("#__raforms_" . (int) $this->formid . " a "); $sql->join("LEFT", "#__users b ON a.user = b.id"); $sql->order("b.name ASC"); $db->setQuery($sql); $users = $db->loadObjectList('id'); if (array_key_exists(null, $users)) { $users[null]->name = JTEXT::_('RAFORMS_GUEST'); $unknown = $users[null]; unset($users[null]); $users[] = $unknown; } if (array_key_exists(0, $users)) { $users[0]->name = JTEXT::_('RAFORMS_GUEST'); $unknown = $users[0]; unset($users[0]); $users[] = $unknown; } $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $filter_label; $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = ' <select name="filter_form_' . $this->formid . '_user"> <option value="">-- ' . $filter_label . ' --</option>' . JHtml::_('select.options', $users, 'user', 'name', $filter_value) . ' </select>'; break; default : $pluginPath = JPATH_SITE . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'extension' . DIRECTORY_SEPARATOR . 'raforms_' . $v['elementtype'] . DIRECTORY_SEPARATOR . 'site'; $plugin = $pluginPath . DIRECTORY_SEPARATOR . 'filter_'.$v['elementtype'].'.php'; if (JFile::exists($plugin)) { include_once($plugin); $elementlabel = JFile::stripExt(JFile::getName($plugin)).'label'; $element = JFile::stripExt(JFile::getName($plugin)).'element'; $filter[$v['listfiltercontainer']][$v['listfilter']]['label'] = $elementlabel($v); $filter[$v['listfiltercontainer']][$v['listfilter']]['element'] = $element($v, $app->getUserStateFromRequest('filter.form_' . $this->formid . '_'.$v['fieldname'], 'filter_form_' . $this->formid . '_'.$v['fieldname']), $this->formid); } } } return $filter; } function store($formData, $keepvalues = 0) { JLoader::import( 'raform', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_raforms' . DIRECTORY_SEPARATOR . 'models' ); // get DB connection $db = JFactory::getDBO(); // get User $user = JFactory::getUser(); // get Application $app = JFactory::getApplication(); $params = $app->getParams(); $fieldTable = array(); $raform = JModelLegacy::getInstance( 'raform', 'RAformsModel' ); $raformData = $raform->getData(); // form data $data = $formData['data']; // setup filter $filterHTML = JFilterInput::getInstance(RAformsHelper::getBlacklistedTags(), RAformsHelper::getBlacklistedAttributes(), 1, 1, 1); // serialize data from arrays // and check for HTML filtering foreach ($data as $k => $v) { $fieldtype = preg_replace('/^([^_]*)_.*$/', '$1', $k); switch ($fieldtype) { case 'select': case 'checkbox': case 'radio': $fieldTable[$k] = $v; unset($data[$k]); continue; } if (array_key_exists($k, $data) && !is_array($v)) { $data[$k] = rawurldecode($v); } // filtering if (isset($raformData->data[$k]['filterHTML']) && $raformData->data[$k]['filterHTML'] == 'true') { $data[$k] = $filterHTML->clean($v); } } // add date and time if (array_key_exists('date', $data) && $data['date'] == "true") { $data['date'] = strftime("%Y-%m-%d %H:%M:%S", time()); } // add userid if ($user->guest) { $data['userid'] = 0; } $table = $this->getTable('saveform'); $table->setTableNameId($this->formid); // Bind the form fields to the table if( ! $table->bind($data)) { $this->setError($this->_db->stderr()); return false; } //-- Make sure the record is valid if( ! $table->check()) { $this->setError($this->_db->stderr()); return false; } if( ! $table->store() ) { $this->setError($table->getError().$this->_db->stderr()); return false; } else { $this->setId($table->id); } $tablename = $table->getTableName(); $dataset_id = $table->id; $fdata = array(); if (count($fieldTable) > 0) { foreach ($fieldTable as $fieldname => $data) { if (!is_array($data)) { $data = array($data); } $ftable = RAformsHelper::getFieldTable($fieldname, $table->getTableName() . "_" . $fieldname); $ftable->delete($dataset_id); $fdata['dataset_id'] = $dataset_id; foreach ($data as $key => $value) { if (strlen($value) > 0) { $ftable->id = null; $fdata['data'] = rawurldecode($value); // Bind the form fields to the table if( ! $ftable->bind($fdata)) { $this->setError($this->_db->stderr()); return false; } //-- Make sure the record is valid if( ! $ftable->check()) { $this->setError($this->_db->stderr()); return false; } //-- Store the table to the database if( ! $ftable->store()) { $this->setError($ftable->getError().$this->_db->stderr()); return false; } } } } } // reset form data if (!$keepvalues) { $app->setUserState( 'com_raforms.formrequest_form_'. $this->formid, null); } return true; } function sendAdminMail() { jimport( 'joomla.mail.mail' ); jimport( 'joomla.access.access' ); $formData = $this->getFormData(); $mail = JFactory::getMailer(); $config = JFactory::getConfig(); $user = JFactory::getUser(); $form = $this->getFormTable(); $patterns = array('/%USER/', '/%FORMNAME/', '/%FORM/', '/%DATE/'); $replace = array($user->username, $formData->formname, $form, strftime('%Y-%m-%d %H:%M:%S', time())); $sender = (empty($formData->config['mail-admin-from'])) ? $config->getValue('config.mailfrom') : $formData->config['mail-admin-from']; if (preg_match('/.*<[^>]*>.*/', $sender)) { list($sender, $senderName) = preg_split('/ /', $sender); $senderName = preg_replace('/.*<([^>]*)>.*/', '$1', $senderName); } else { $senderName = $sender; } $subject = (isset($formData->config['mail-admin-subject'])) ? $formData->config['mail-admin-subject'] : ''; $body = (isset($formData->config['mail-admin-text'])) ? $formData->config['mail-admin-text'] : ''; $cc = (isset($formData->config['mail-admin-cc'])) ? $formData->config['mail-admin-cc'] : ''; $bcc = (isset($formData->config['mail-admin-bcc'])) ? $formData->config['mail-admin-bcc'] : ''; $ccs = preg_split('/,;/', $cc); $bccs = preg_split('/,;/', $bcc); $subject = preg_replace($patterns, $replace, $subject); $body = preg_replace($patterns, $replace, $body); // get recipients $groupIds = (isset($formData->config['mail-admin-to']) && count($formData->config['mail-admin-to']) > 0) ? $formData->config['mail-admin-to'] : $config->getValue('config.mailfrom'); $userIds = array(); foreach ($groupIds as $groupId) { $userIds = array_merge($userIds, JAccess::getUsersByGroup($groupId)); } $userIds = array_unique($userIds); foreach ($userIds as $userId) { $recipients[] = JFactory::getUser($userId)->email; } if (!$mail->sendMail ($sender, $senderName, $recipients, $subject, $body, true, $ccs, $bccs, null, null, null)) { $errorMail = JFactory::getMailer(); $errorMail->setSender( $config->getValue('config.mailfrom') ); $errorMail->addRecipient( $config->getValue('config.mailfrom') ); $errorMail->setSubject( JText::_('RAFORMS_SENDING_ADMIN_MAIL_FAILED_SUBJECT') ); $errorMail->setBody( JText::_('RAFORMS_SENDING_ADMIN_MAIL_FAILED_BODY') ); $errorMail->Send(); } return true; } function delete() { // get DB connection $db = JFactory::getDBO(); $canDo = RAformsHelper::getActions($this->formid, 'raform'); $table = $this->getTable('saveform'); $table->setTableNameId($this->formid); $sql = "DELETE FROM " . $table->getTableName() . " WHERE id = " . $this->id; $db->setQuery($sql); if (!$db->query()) { $this->setError($db->getErrorMsg()); return false; } $sql = "DELETE FROM " . $table->getTableName() . '_comments' . " WHERE entryid = " . $this->id; $db->setQuery($sql); return true; } function checkUnique() { // get DB connection $db = JFactory::getDBO(); // get User $user = JFactory::getUser(); // get Tablename $table = $this->getTable('saveform'); $query = "SELECT count(*) AS ucount FROM ".$table->getTableName() . " WHERE user=".$db->Quote($user->id) ; $db->setQuery($query); $rs = $db->loadAssoc(); if ((int)$rs['ucount'] > 0) { return true; } return false; } } ?>