/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter repeat group counter * * @return string */ public function elementJavascript($repeatCounter) { $app = JFactory::getApplication(); $input = $app->input; $id = $this->getHTMLId($repeatCounter); $params = $this->getParams(); if ($params->get('cdd_display_type') == 'auto-complete') { FabrikHelperHTML::autoComplete($id, $this->getElement()->id, 'fabrikcascadingdropdown'); } FabrikHelperHTML::script('media/com_fabrik/js/lib/Event.mock.js'); $opts = $this->getElementJSOptions($repeatCounter); $opts->showPleaseSelect = $this->showPleaseSelect(); $opts->watch = $this->_getWatchId($repeatCounter); $opts->id = $this->_id; // This bizarre chunk of code handles the case of setting a CDD value on the QS on a new form $rowid = $input->getInt('rowid', 0); $fullName = $this->getFullName(false, true, true); $watchName = $this->getWatchFullName(); $qsValue = $input->get($fullName, ''); $qsWatchValue = $input->get($watchName, ''); // $$$ hugh - Rob, is there a better way of finding out if validation has failed than looking at _arErrors? $opts->def = empty($this->getFormModel()->_arErrors) && $this->isEditable() && $rowid == 0 && !empty($qsValue) && !empty($qsWatchValue) ? $qsValue : $this->getValue(array(), $repeatCounter); // $$$ hugh - for reasons utterly beyond me, after failed validation, getValue() is returning an array. if (is_array($opts->def)) { $opts->def = $opts->def[0]; } $watchGroup = $this->getWatchElement()->getGroup()->getGroup(); $group = $this->getGroup()->getGroup(); $opts->watchInSameGroup = $watchGroup->id === $group->id; $opts->editing = $this->isEditable() && JRequest::getInt('rowid', 0) != 0; $opts->showDesc = $params->get('cdd_desc_column', '') === '' ? false : true; $opts = json_encode($opts); return "new FbCascadingdropdown('{$id}', {$opts})"; }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $input = $this->app->input; $id = $this->getHTMLId($repeatCounter); $params = $this->getParams(); if ($this->getDisplayType() === 'auto-complete') { $autoOpts = array(); $autoOpts['observerid'] = $this->getWatchId($repeatCounter); $autoOpts['formRef'] = $this->getFormModel()->jsKey(); $autoOpts['storeMatchedResultsOnly'] = true; FabrikHelperHTML::autoComplete($id, $this->getElement()->id, $this->getFormModel()->getId(), 'cascadingdropdown', $autoOpts); } $opts = $this->getElementJSOptions($repeatCounter); $opts->showPleaseSelect = $this->showPleaseSelect(); $opts->watch = $this->getWatchId($repeatCounter); $watchElementModel = $this->getWatchElement(); $opts->watchChangeEvent = $watchElementModel->getChangeEvent(); $opts->displayType = $params->get('cdd_display_type', 'dropdown'); $opts->id = $this->getId(); $opts->listName = $this->getListModel()->getTable()->db_table_name; $opts->lang = FabrikWorker::getMultiLangURLCode(); // This bizarre chunk of code handles the case of setting a CDD value on the QS on a new form $rowId = $input->get('rowid', '', 'string'); $fullName = $this->getFullName(); $watchName = $this->getWatchFullName(); // If returning from failed posted validation data can be in an array $qsValue = $input->get($fullName, array(), 'array'); $qsValue = FArrayHelper::getValue($qsValue, 0, null); $qsWatchValue = $input->get($watchName, array(), 'array'); $qsWatchValue = FArrayHelper::getValue($qsWatchValue, 0, null); $useQsValue = $this->getFormModel()->hasErrors() && $this->isEditable() && $rowId === '' && !empty($qsValue) && !empty($qsWatchValue); $opts->def = $useQsValue ? $qsValue : $this->getValue(array(), $repeatCounter); // $$$ hugh - for reasons utterly beyond me, after failed validation, getValue() is returning an array. if (is_array($opts->def) && !empty($opts->def)) { $opts->def = $opts->def[0]; } $watchGroup = $this->getWatchElement()->getGroup()->getGroup(); $group = $this->getGroup()->getGroup(); $opts->watchInSameGroup = $watchGroup->id === $group->id; $opts->editing = $this->isEditable() && $rowId !== ''; $opts->showDesc = $params->get('cdd_desc_column', '') === '' ? false : true; $opts->advanced = $this->getAdvancedSelectClass() != ''; $formId = $this->getFormModel()->getId(); $opts->autoCompleteOpts = $opts->displayType == 'auto-complete' ? FabrikHelperHTML::autoCompleteOptions($opts->id, $this->getElement()->id, $formId, 'cascadingdropdown') : null; $this->elementJavascriptJoinOpts($opts); $data = $this->getFormModel()->data; // Was otherwise using the none-raw value. $opts->value = $this->getValue($data, $repeatCounter, array('raw' => true)); $opts->optsPerRow = (int) $params->get('dbjoin_options_per_row', 1); if (is_array($opts->value) && count($opts->value) > 0) { $opts->value = ArrayHelper::getValue($opts->value, 0); } return array('FbCascadingdropdown', $id, $opts); }
/** * return tehe javascript to create an instance of the class defined in formJavascriptClass * @return string javascript to create instance. Instance name must be 'el' */ function elementJavascript($repeatCounter) { $id = $this->getHTMLId($repeatCounter); $params = $this->getParams(); if ($params->get('cdd_display_type') == 'auto-complete') { FabrikHelperHTML::autoComplete($id, $this->getElement()->id, 'fabrikcascadingdropdown'); } FabrikHelperHTML::script('media/com_fabrik/js/lib/Event.mock.js'); $opts = $this->getElementJSOptions($repeatCounter); $opts->showPleaseSelect = $params->get('cascadingdropdown_showpleaseselect', true); $opts->watch = $this->_getWatchId($repeatCounter); $opts->id = $this->_id; $opts->def = $this->getValue(array(), $repeatCounter); $watchGroup = $this->_getWatchElement()->getGroup()->getGroup(); $group = $this->getGroup()->getGroup(); $opts->watchInSameGroup = $watchGroup->id === $group->id; $opts->editing = ($this->_editable && JRequest::getInt('rowid', 0) != 0) ? '1' : '0'; $opts->showDesc = $params->get('cdd_desc_column') === '' ? false : true; $opts = json_encode($opts); return "new FbCascadingdropdown('$id', $opts)"; }
/** * return tehe javascript to create an instance of the class defined in formJavascriptClass * @return string javascript to create instance. Instance name must be 'el' */ function elementJavascript($repeatCounter) { $id = $this->getHTMLId($repeatCounter); $params =& $this->getParams(); if ($params->get('cdd_display_type') == 'auto-complete') { FabrikHelperHTML::autoComplete($id, $this->getElement()->id, 'fabrikcascadingdropdown'); } $opts =& $this->getElementJSOptions($repeatCounter); $opts->showPleaseSelect = $params->get('cascadingdropdown_showpleaseselect', true); $opts->watch = $this->_getWatchId($repeatCounter); $opts->id = $this->_id; $opts->liveSite = COM_FABRIK_LIVESITE; $opts->def = $this->getValue(array(), $repeatCounter); $watchGroup = $this->_getWatchElement()->getGroup()->getGroup(); $group = $this->getGroup()->getGroup(); $opts->watchInSameGroup = $watchGroup->id === $group->id; $opts->editing = $this->_editable && JRequest::getInt('rowid', 0) != 0 ? '1' : '0'; $opts->showDesc = $params->get('cdd_desc_column') === '' ? false : true; $opts->lang = FabrikWorker::getJoomfishLang(); $opts = json_encode($opts); return "new fbCascadingdropdown('{$id}', {$opts})"; }
/** * Get the table filter for the element * @param bol do we render as a normal filter or as an advanced searc filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter = 0, $normal = true) { $listModel =& $this->getlistModel(); $formModel =& $listModel->getFormModel(); $elName2 = $this->getFullName(false, false, false); if (!$formModel->hasElement($elName2)) { return ''; } $table =& $listModel->getTable(); $element = $this->getElement(); $params =& $this->getParams(); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $v = 'fabrik___filter[list_' . $table->id . '][value]'; $v .= $normal ? '[' . $counter . ']' : '[]'; //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $tabletype = $params->get('my_table_data', 'username'); $join =& $this->getJoin(); $joinTableName = FabrikString::safeColName($join->table_join_alias); // if filter type isn't set was blowing up in switch below 'cos no $rows // so added '' to this test. Should probably set $element->filter_type to a default somewhere. if (in_array($element->filter_type, array('range', 'dropdown', ''))) { $rows = $this->filterValueList($normal, '', $joinTableName . '.' . $tabletype, '', false); $rows = (array) $rows; array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } switch ($element->filter_type) { case "range": $attribs = 'class="inputbox fabrik_filter" size="1" '; $default1 = is_array($default) ? $default[0] : ''; $return = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_0"); $default1 = is_array($default) ? $default[1] : ''; $return .= JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_1"); break; case "dropdown": default: $return = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $htmlid); break; case "field": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"text\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$htmlid}\" />"; break; case "auto-complete": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"hidden\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$htmlid}\" />\n"; $return .= "<input type=\"text\" name=\"{$v}-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" value=\"{$default}\" id=\"{$htmlid}-auto-complete\" />"; FabrikHelperHTML::autoComplete($htmlid, $this->getElement()->id, 'user'); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * create an instance of the elements js class * @param int group repeat counter * @return string js call */ function elementJavascript($repeatCounter) { $id = $this->getHTMLId($repeatCounter); if ($this->getParams()->get('database_join_display_type') == 'auto-complete') { FabrikHelperHTML::autoComplete($id, $this->getElement()->id, 'databasejoin'); } $opts = $this->elementJavascriptOpts($repeatCounter); return "new FbDatabasejoin('{$id}', {$opts})"; }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $params = $this->getParams(); $id = $this->getHTMLId($repeatCounter); $opts = $this->getElementJSOptions($repeatCounter); $inputMask = trim($params->get('text_input_mask', '')); if (!empty($inputMask)) { $opts->use_input_mask = true; $opts->input_mask = $inputMask; $opts->input_mask_definitions = $params->get('text_input_mask_definitions', '{}'); } else { $opts->use_input_mask = false; $opts->input_mask = ''; } $opts->geocomplete = $params->get('autocomplete', '0') === '3'; $config = JComponentHelper::getParams('com_fabrik'); $apiKey = $config->get('google_api_key', ''); $opts->mapKey = empty($apiKey) ? false : $apiKey; if ($this->getParams()->get('autocomplete', '0') == '2') { $autoOpts = array(); $autoOpts['max'] = $this->getParams()->get('autocomplete_rows', '10'); $autoOpts['storeMatchedResultsOnly'] = false; FabrikHelperHTML::autoComplete($id, $this->getElement()->id, $this->getFormModel()->getId(), 'field', $autoOpts); } return array('FbField', $id, $opts); }
/** * Load the javascript class that manages plugin interaction * should only be called once * * @return string Javascript class file */ public function loadJavascriptClass() { $params = $this->getParams(); $model = $this->getModel(); $mapElement = $this->getMapElement(); if (!is_object($mapElement)) { throw new RuntimeException('Radius search plug-in active but map element unpublished'); return; } $opts = array(); $opts['container'] = 'radius_search_place_container'; // Increase z-index with advanced class $opts['menuclass'] = 'auto-complete-container advanced'; $formId = $model->getFormModel()->get('id'); if ($params->get('place', 1) == 1) { $el = $this->getPlaceElement(); FabrikHelperHTML::autoComplete("radius_search_place{$this->renderOrder}", $el->getElement()->id, $formId, $el->getElement()->plugin, $opts); } if ($params->get('myloc', 1) == 1) { $ext = FabrikHelperHTML::isDebug() ? '.js' : '-min.js'; FabrikHelperHTML::script('media/com_fabrik/js/lib/geo-location/geo' . $ext); } parent::loadJavascriptClass(); }
/** * Get the table filter for the element * @param int counter * @param bol do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter = 0, $normal = true) { $element = $this->getElement(); $values = $this->getSubOptionValues(); $default = $this->getDefaultFilterVal($normal, $counter); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $table =& $this->getlistModel()->getTable(); $params =& $this->getParams(); $v = 'fabrik___filter[list_' . $table->id . '][value]'; $v .= $normal ? '[' . $counter . ']' : '[]'; if (in_array($element->filter_type, array('range', 'dropdown', ''))) { $rows = $this->filterValueList($normal); JArrayHelper::sortObjects($rows, $params->get('filter_groupby', 'text')); if (!in_array('', $values)) { array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } } $attribs = 'class="inputbox fabrik_filter" size="1" '; $size = $params->get('filter_length', 20); switch ($element->filter_type) { case "range": $default1 = is_array($default) ? $default[0] : ''; $return = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_0"); $default1 = is_array($default) ? $default[1] : ''; $return .= JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_1"); break; case "dropdown": default: $return = JHTML::_('select.genericlist', $rows, $v, $attribs, 'value', 'text', $default, $htmlid); break; case "field": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"text\" name=\"{$v}\" class=\"inputbox fabrik_filter\" size=\"{$size}\" value=\"{$default}\" id=\"{$htmlid}\" />"; break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"hidden\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$htmlid}\" />"; $return .= "<input type=\"text\" name=\"{$v}-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" size=\"{$size}\" value=\"{$default}\" id=\"{$htmlid}-auto-complete\" />"; FabrikHelperHTML::autoComplete($htmlid, $this->getElement()->id, $element->plugin); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * Get the table filter for the element * @param int repeat group counter * @param bol do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function &getFilter($counter, $normal = true) { $params =& $this->getParams(); $listModel =& $this->getListModel(); $table =& $listModel->getTable(); $element = $this->getElement(); $origTable = $table->db_table_name; $fabrikDb =& $listModel->getDb(); $elName = $this->getFullName(false, true, false); $elName2 = $this->getFullName(false, false, false); $ids = $listModel->getColumnData($elName2); $v = 'fabrik___filter[list_' . $table->id . '][value][' . $counter . ']'; //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $format = $params->get('date_table_format', '%Y-%m-%d'); $fromTable = $origTable; $joinStr = ''; // $$$ hugh - in advanced search, _aJoins wasn't getting set $joins = $listModel->getJoins(); foreach ($joins as $aJoin) { // not sure why the group id key wasnt found - but put here to remove error if (array_key_exists('group_id', $aJoin)) { if ($aJoin->group_id == $element->group_id && $aJoin->element_id == 0) { $fromTable = $aJoin->table_join; $joinStr = " LEFT JOIN {$fromTable} ON " . $aJoin->table_join . "." . $aJoin->table_join_key . " = " . $aJoin->join_from_table . "." . $aJoin->table_key; $elName = str_replace($origTable . '.', $fromTable . '.', $elName); } } } $where = $listModel->_buildQueryPrefilterWhere($this); $elName = FabrikString::safeColName($elName); //dont format here as the format string is different between mysql and php's calendar strftime $sql = "SELECT DISTINCT({$elName}) AS text, {$elName} AS value FROM `{$origTable}` {$joinStr}" . "\n WHERE {$elName} IN ('" . implode("','", $ids) . "')" . "\n AND TRIM({$elName}) <> '' {$where} GROUP BY text ASC"; $requestName = $elName . "___filter"; if (array_key_exists($elName, $_REQUEST)) { if (is_array($_REQUEST[$elName]) && array_key_exists('value', $_REQUEST[$elName])) { $_REQUEST[$requestName] = $_REQUEST[$elName]['value']; } } $htmlid = $this->getHTMLId(); $tzoffset = new DateTimeZone(JFactory::getConfig()->get('offset')); if (in_array($element->filter_type, array('dropdown'))) { $rows = $this->filterValueList($normal); } $calOpts = array('class' => 'inputbox fabrik_filter', 'maxlength' => '19', 'size' => 16); switch ($element->filter_type) { case "range": FabrikHelperHTML::loadcalendar(); //@TODO: this messes up if the table date format is different to the form date format if (empty($default)) { $default = array('', ''); } $v = 'fabrik___filter[table_' . $table->id . '][value][' . $counter . ']'; $return = JText::_('COM_FABRIK_DATE_RANGE_BETWEEN') . $this->calendar($default[0], $v . '[0]', $this->getHTMLId() . "_filter_range_0_" . JRequest::getVar('task'), $format, $calOpts); $return .= "<br />" . JText::_('COM_FABRIK_DATE_RANGE_AND') . $this->calendar($default[1], $v . '[1]', $this->getHTMLId() . "_filter_range_1" . JRequest::getVar('task'), $format, $calOpts); break; case "dropdown": // cant do the format in the MySQL query as its not the same formatting // e.g. M in mysql is month and J's date code its minute jimport('joomla.utilities.date'); $ddData = array(); foreach ($rows as $k => $o) { if ($fabrikDb->getNullDate() === $o->text) { $o->text = ''; $o->value = ''; } else { $d = new JDate($o->text); //@TODO add an option as to whether we format values or not (if records as timestamps we don't want to format the filter value as running // the filter will result in no records found. see http://fabrikar.com/forums/showthread.php?t=10964 $o->value = $d->toFormat($format); //if we have a table format like %m-%d then we want to remove duplicate full times $o->text = $d->toFormat($format); } if (!array_key_exists($o->value, $ddData)) { $ddData[$o->value] = $o; } } array_unshift($ddData, JHTML::_('select.option', '', $this->filterSelectLabel())); $return = JHTML::_('select.genericlist', $ddData, $v, 'class="inputbox fabrik_filter" size="1" maxlength="19"', 'value', 'text', $default, $htmlid . "_filter_range_0"); break; default: case "field": FabrikHelperHTML::loadcalendar(); if (is_array($default)) { $default = array_shift($default); } if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = $this->calendar($default, $v, $htmlid . "_filter_range_0_" . JRequest::getVar('task'), $format, $calOpts); break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"hidden\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$htmlid}\" />"; $return .= "<input type=\"text\" name=\"{$v}-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" value=\"{$default}\" id=\"{$htmlid}-auto-complete\" />"; $autoId = $htmlid; if (!$normal) { $autoId = '#advanced-search-table .autocomplete-trigger'; } FabrikHelperHTML::autoComplete($autoId, $this->getElement()->id, 'date'); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * load the javascript class that manages interaction with the form element * should only be called once * @return string javascript class file */ function loadJavascriptClass() { $el = $this->getPlaceElement(); $mapelement = $this->getMapElement(); if (!is_object($mapelement)) { return; } $opts = array(); $opts['container'] = 'radius_search_place_container'; $tableid = $this->model->_id; $formid = $this->model->getForm()->_id; $shortkey = $el->getElement()->name; if (!is_object($mapelement)) { JError::raiseNotice(500, JText::_('Radius search plug-in active but map element unpublished')); return; } $mapfullkey = $mapelement->getFullName(false, true, false); FabrikHelperHTML::autoComplete("radius_search_place{$this->_counter}", $el->getElement()->id, $el->_pluginName, $opts); FabrikHelperHTML::script('geo.js', 'components/com_fabrik/libs/geo-location/'); FabrikHelperHTML::script('javascript.js', 'components/com_fabrik/plugins/table/radius_search/', false); }
/** * Get the table filter for the element * @param bol do we render as a normal filter or as an advanced searc filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter = 0, $normal = true) { $listModel = $this->getlistModel(); $formModel = $listModel->getFormModel(); $elName2 = $this->getFullName(false, false, false); if (!$formModel->hasElement($elName2)) { return ''; } $table = $listModel->getTable(); $element = $this->getElement(); $params = $this->getParams(); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $v = $this->filterName($counter, $normal); //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $return = array(); $tabletype = $this->_getValColumn(); $join = $this->getJoin(); $joinTableName = FabrikString::safeColName($join->table_join_alias); // if filter type isn't set was blowing up in switch below 'cos no $rows // so added '' to this test. Should probably set $element->filter_type to a default somewhere. if (in_array($element->filter_type, array('range', 'dropdown', ''))) { $rows = $this->filterValueList($normal, '', $joinTableName . '.' . $tabletype, '', false); $rows = (array) $rows; array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } switch ($element->filter_type) { case "range": $attribs = 'class="inputbox fabrik_filter" size="1" '; $default1 = is_array($default) ? $default[0] : ''; $return[] = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_0"); $default1 = is_array($default) ? $default[1] : ''; $return[] = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_1"); break; case "dropdown": default: $return[] = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $htmlid); break; case "field": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="text" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; break; case "hidden": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; break; case "auto-complete": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; $return[] = '<input type="text" name="' . $v . '-auto-complete" class="inputbox fabrik_filter autocomplete-trigger" value="' . $default . '" id="' . $htmlid . '-auto-complete" />'; $selector = '#listform_' . $listModel->getRenderContext() . ' .' . $id; FabrikHelperHTML::autoComplete($selector, $this->getElement()->id, 'user'); break; } if ($normal) { $return[] = $this->getFilterHiddenFields($counter, $elName); } else { $return[] = $this->getAdvancedFilterHiddenFields(); } return implode("\n", $return); }
/** * Get the list filter for the element * @param int filter order * @param bol do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter, $normal = true) { $params = $this->getParams(); $listModel = $this->getListModel(); $table = $listModel->getTable(); $element = $this->getElement(); $origTable = $table->db_table_name; $fabrikDb = $listModel->getDb(); $elName = $this->getFullName(false, true, false); $elName2 = $this->getFullName(false, false, false); $ids = $listModel->getColumnData($elName2); $v = $this->filterName($counter, $normal); //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $format = $params->get('date_table_format', '%Y-%m-%d'); $fromTable = $origTable; $joinStr = ''; // $$$ hugh - in advanced search, _aJoins wasn't getting set $joins = $listModel->getJoins(); foreach ($joins as $aJoin) { // not sure why the group id key wasnt found - but put here to remove error if (array_key_exists('group_id', $aJoin)) { if ($aJoin->group_id == $element->group_id && $aJoin->element_id == 0) { $fromTable = $aJoin->table_join; $joinStr = " LEFT JOIN {$fromTable} ON " . $aJoin->table_join . "." . $aJoin->table_join_key . " = " . $aJoin->join_from_table . "." . $aJoin->table_key; $elName = str_replace($origTable . '.', $fromTable . '.', $elName); } } } $where = $listModel->_buildQueryPrefilterWhere($this); $elName = FabrikString::safeColName($elName); //dont format here as the format string is different between mysql and php's calendar strftime $sql = "SELECT DISTINCT({$elName}) AS text, {$elName} AS value FROM `{$origTable}` {$joinStr}" . "\n WHERE {$elName} IN ('" . implode("','", $ids) . "')" . "\n AND TRIM({$elName}) <> '' {$where} GROUP BY text ASC"; $requestName = $elName . "___filter"; if (array_key_exists($elName, $_REQUEST)) { if (is_array($_REQUEST[$elName]) && array_key_exists('value', $_REQUEST[$elName])) { $_REQUEST[$requestName] = $_REQUEST[$elName]['value']; } } $htmlid = $this->getHTMLId(); $timeZone = new DateTimeZone(JFactory::getConfig()->get('offset')); if (in_array($element->filter_type, array('dropdown'))) { $rows = $this->filterValueList($normal); } $calOpts = $this->filterCalendarOpts(); $return = array(); switch ($element->filter_type) { case "range": FabrikHelperHTML::loadcalendar(); if (empty($default)) { $default = array('', ''); } else { $default[0] = JFactory::getDate($default[0])->toFormat($format); $default[1] = JFactory::getDate($default[1])->toFormat($format); } $return[] = JText::_('COM_FABRIK_DATE_RANGE_BETWEEN') . $this->calendar($default[0], $v . '[0]', $this->getHTMLId() . "_filter_range_0_" . JRequest::getVar('task'), $format, $calOpts); $return[] = '<br />' . JText::_('COM_FABRIK_DATE_RANGE_AND') . $this->calendar($default[1], $v . '[1]', $this->getHTMLId() . "_filter_range_1_" . JRequest::getVar('task'), $format, $calOpts); break; case "dropdown": // cant do the format in the MySQL query as its not the same formatting // e.g. M in mysql is month and J's date code its minute jimport('joomla.utilities.date'); $ddData = array(); foreach ($rows as $k => $o) { if ($fabrikDb->getNullDate() === $o->text) { $o->text = ''; $o->value = ''; } else { $d = new FabDate($o->text); $o->value = $d->toSql(); $o->text = $d->toFormat($format); } if (!array_key_exists($o->value, $ddData)) { $ddData[$o->value] = $o; } } array_unshift($ddData, JHTML::_('select.option', '', $this->filterSelectLabel())); $return[] = JHTML::_('select.genericlist', $ddData, $v, 'class="inputbox fabrik_filter" size="1" maxlength="19"', 'value', 'text', $default, $htmlid . "_filter_range_0"); break; default: case "field": FabrikHelperHTML::loadcalendar(); if (is_array($default)) { $default = array_shift($default); } if ($default !== '') { $default = JFactory::getDate($default)->toFormat($format); } $return[] = $this->calendar($default, $v, $htmlid . '_filter_range_0_' . JRequest::getVar('task'), $format, $calOpts); break; case 'hidden': if (is_array($default)) { $default = array_shift($default); } if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; $return[] = '<input type="text" name="' . $v . '-auto-complete" class="inputbox fabrik_filter autocomplete-trigger" value="' . $default . '" id="' . $htmlid . '-auto-complete" />'; $autoId = '#' . $htmlid . '-auto-complete'; if (!$normal) { $autoId = '#advanced-search-table .autocomplete-trigger'; } FabrikHelperHTML::autoComplete($autoId, $this->getElement()->id, 'date'); break; } if ($normal) { $return[] = $this->getFilterHiddenFields($counter, $elName); } else { $return[] = $this->getAdvancedFilterHiddenFields(); } return implode("\n", $return); }
/** * can be overwritten by plugin class * Get the table filter for the element * @param int filter order * @param bool do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ public function getFilter($counter = 0, $normal = true) { $listModel = $this->getListModel(); $formModel = $listModel->getFormModel(); $dbElName = $this->getFullName(false, false, false); if (!$formModel->hasElement($dbElName)) { return ''; } $table = $listModel->getTable(); $element = $this->getElement(); $elName = $this->getFullName(false, true, false); $id = $this->getHTMLId() . 'value'; $v = $this->filterName($counter, $normal); //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $return = array(); if (in_array($element->filter_type, array('range', 'dropdown'))) { $rows = $this->filterValueList($normal); $this->unmergeFilterSplits($rows); array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } $size = (int) $this->getParams()->get('filter_length', 20); switch ($element->filter_type) { case "range": $attribs = 'class="inputbox fabrik_filter" size="1" '; $default1 = is_array($default) ? $default['value'][0] : ''; $return[] = JText::_('COM_FABRIK_BETWEEN') . JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_0"); $default1 = is_array($default) ? $default['value'][1] : ''; $return[] = '<br /> ' . JText::_('COM_FABRIK_AND') . ' ' . JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_1"); break; case "dropdown": $return[] = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $id); break; case "field": default: // $$$ rob - if searching on "O'Fallon" from querystring filter the string has slashes added regardless //if (get_magic_quotes_gpc()) { $default = stripslashes($default); //} $default = htmlspecialchars($default); $return[] = '<input type="text" name="' . $v . '" class="inputbox fabrik_filter" size="' . $size . '" value="' . $default . '" id="' . $id . '" />'; break; case "hidden": $default = stripslashes($default); $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $id . '" />'; break; case "auto-complete": $default = stripslashes($default); $default = htmlspecialchars($default); // $$$ rob 28/10/2011 using selector rather than element id so we can have n modules with the same filters showing and not produce invald html & duplicate js calls $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter ' . $id . '" value="' . $default . '" />'; $return[] = '<input type="text" name="' . $v . '-auto-complete" class="inputbox fabrik_filter autocomplete-trigger ' . $id . '-auto-complete" size="' . $size . '" value="' . $default . '" />'; $selector = '#listform_' . $listModel->getRenderContext() . ' .' . $id; FabrikHelperHTML::autoComplete($selector, $this->getElement()->id); break; } if ($normal) { $return[] = $this->getFilterHiddenFields($counter, $elName); } else { $return[] = $this->getAdvancedFilterHiddenFields(); } return implode("\n", $return); }
/** * Build the HTML for the auto-complete filter * * @param string $default label * @param string $v field name * @param string $labelValue label value * @param bool $normal do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * * @return array html bits */ protected function autoCompleteFilter($default, $v, $labelValue = null, $normal = true) { $listModel = $this->getListModel(); if (is_null($labelValue)) { $labelValue = $default; } $default = stripslashes($default); $default = htmlspecialchars($default); $id = $this->getHTMLId() . 'value'; $size = (int) $this->getParams()->get('filter_length', 20); /** * $$$ rob 28/10/2011 using selector rather than element id so we can have n modules with the same filters * showing and not produce invald html & duplicate js calls */ $return = array(); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter ' . $id . '" value="' . $default . '" />'; $return[] = '<input type="text" name="' . 'auto-complete' . $this->getElement()->id . '" class="inputbox fabrik_filter autocomplete-trigger ' . $id . '-auto-complete" size="' . $size . '" value="' . $labelValue . '" />'; $opts = array(); if ($normal) { $opts['menuclass'] = 'auto-complete-container'; $selector = '#listform_' . $listModel->getRenderContext() . ' .' . $id; } else { $selector = '.advancedSeach_' . $listModel->getRenderContext() . ' .' . $id; $opts['menuclass'] = 'auto-complete-container advanced'; } $element = $this->getElement(); FabrikHelperHTML::autoComplete($selector, $element->id, $element->plugin, $opts); return $return; }
/** * can be overwritten by plugin class * Get the table filter for the element * @param bol do we render as a normal filter or as an advanced searc filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ public function getFilter($counter = 0, $normal = true) { $listModel =& $this->getListModel(); $formModel =& $listModel->getFormModel(); $dbElName = $this->getFullName(false, false, false); if (!$formModel->hasElement($dbElName)) { return ''; } $table =& $listModel->getTable(); $element = $this->getElement(); $elName = $this->getFullName(false, true, false); $id = $this->getHTMLId() . 'value'; $v = 'fabrik___filter[list_' . $table->id . '][value]'; $v .= $normal ? '[' . $counter . ']' : '[]'; //corect default got $default = $this->getDefaultFilterVal($normal, $counter); $return = ''; if (in_array($element->filter_type, array('range', 'dropdown'))) { $rows = $this->filterValueList($normal); $this->unmergeFilterSplits($rows); array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } $size = (int) $this->getParams()->get('filter_length', 20); switch ($element->filter_type) { case "range": $attribs = 'class="inputbox fabrik_filter" size="1" '; $default1 = is_array($default) ? $default['value'][0] : ''; $return = JText::_('COM_FABRIK_BETWEEN') . JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_0"); $default1 = is_array($default) ? $default['value'][1] : ''; $return .= "<br /> " . JText::_('and') . ' ' . JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default1, $element->name . "_filter_range_1"); break; case "dropdown": $return = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $id); break; case "field": default: // $$$ rob - if searching on "O'Fallon" from querystring filter the string has slashes added regardless //if (get_magic_quotes_gpc()) { $default = stripslashes($default); //} $default = htmlspecialchars($default); $return = "<input type=\"text\" name=\"{$v}\" class=\"inputbox fabrik_filter\" size=\"{$size}\" value=\"{$default}\" id=\"{$id}\" />"; break; case "auto-complete": $default = stripslashes($default); $default = htmlspecialchars($default); $return = "<input type=\"hidden\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$id}\" />"; $return .= "<input type=\"text\" name=\"{$v}-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" size=\"{$size}\" value=\"{$default}\" id=\"{$id}-auto-complete\" />"; // $$$ rob 29/04/2011 - for this to work you would need to update the autocompleter class as it does $(id) not document.getELement(); // think its safer to not alter the class as noneof the element pugin implementations work like this! //FabrikHelperHTML::autoComplete('#tableform_'.$table->id . ' #'.$id, $this->getElement()->id); FabrikHelperHTML::autoComplete($id, $this->getElement()->id); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * Get the table filter for the element * @param int filter order * @param bol do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter = 0, $normal = true) { $element = $this->getElement(); $values = $this->getSubOptionValues(); $default = $this->getDefaultFilterVal($normal, $counter); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $listModel = $this->getListModel(); $params = $this->getParams(); $v = $this->filterName($counter, $normal); if (in_array($element->filter_type, array('range', 'dropdown', ''))) { $rows = $this->filterValueList($normal); JArrayHelper::sortObjects($rows, $params->get('filter_groupby', 'text')); if (!in_array('', $values)) { array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } } $attribs = 'class="inputbox fabrik_filter" size="1" '; $size = $params->get('filter_length', 20); $return = array(); switch ($element->filter_type) { case "range": if (!is_array($default)) { $default = array('', ''); } $return[] = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default[0], $element->name . "_filter_range_0"); $return[] = JHTML::_('select.genericlist', $rows, $v . '[]', $attribs, 'value', 'text', $default[1], $element->name . "_filter_range_1"); break; case "dropdown": default: $return[] = JHTML::_('select.genericlist', $rows, $v, $attribs, 'value', 'text', $default, $htmlid); break; case "field": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="text" name="' . $v . '" class="inputbox fabrik_filter" size="' . $size . '" value="' . $default . '" id="' . $htmlid . '" />'; break; case "hidden": if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter" value="' . $default . '" id="' . $htmlid . '" />'; break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = '<input type="hidden" name="' . $v . '" class="inputbox fabrik_filter ' . $htmlid . '" value="' . $default . '" />'; $return .= '<input type="text" name="' . $v . '-auto-complete" class="inputbox fabrik_filter autocomplete-trigger ' . $htmlid . '-auto-complete" size="' . $size . '" value="' . $default . '" />'; $selector = '#list_' . $listModel->getRenderContext() . ' .' . $htmlid; FabrikHelperHTML::autoComplete($selector, $this->getElement()->id); break; } if ($normal) { $return[] = $this->getFilterHiddenFields($counter, $elName); } else { $return[] = $this->getAdvancedFilterHiddenFields(); } return implode("\n", $return); }
/** * Build the HTML for the auto-complete filter * * @param string $default Label * @param string $v Field name * @param string $labelValue Label value * @param bool $normal Do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced * filter rendering) * * @return string JLayout render */ protected function autoCompleteFilter($default, $v, $labelValue = null, $normal = true) { if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $htmlId = $this->getHTMLId(); $layout = $this->getLayout('list-filter-autocomplete'); $displayData = new stdClass(); $displayData->class = $this->filterClass(); $displayData->name = $v; $displayData->default = $default; $displayData->htmlId = $htmlId; $autoId = '#' . $htmlId . '-auto-complete'; if (!$normal) { $autoId = '.advanced-search-list .autocomplete-trigger'; } FabrikHelperHTML::autoComplete($autoId, $this->getElement()->id, $this->getFormModel()->getId(), 'date'); return $layout->render($displayData); }
/** * Get the list filter for the element * Note: uses FabDate as if date element first to be found in advanced search, and advanced search run on another element * the list model in getAdvancedSearchElementList() builds the first filter (this element) with the data from the first search * which was throwing '"500 - DateTime::__construct() ' errors * * see: http://fabrikar.com/forums/showthread.php?t=28231 * * @param int $counter Filter order * @param bool $normal Do we render as a normal filter or as an advanced search filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * * @return string filter html */ public function getFilter($counter = 0, $normal = true) { $params = $this->getParams(); $listModel = $this->getListModel(); $table = $listModel->getTable(); $element = $this->getElement(); $origTable = $table->db_table_name; $fabrikDb = $listModel->getDb(); $elName = $this->getFullName(true, false); $elName2 = $this->getFullName(false, false); $v = $this->filterName($counter, $normal); $class = $this->filterClass(); // Correct default got $default = $this->getDefaultFilterVal($normal, $counter); $format = $params->get('date_table_format', 'Y-m-d'); $fromTable = $origTable; // $$$ hugh - in advanced search, _aJoins wasn't getting set $joins = $listModel->getJoins(); foreach ($joins as $aJoin) { // Not sure why the group id key wasn't found - but put here to remove error if (array_key_exists('group_id', $aJoin)) { if ($aJoin->group_id == $element->group_id && $aJoin->element_id == 0) { $fromTable = $aJoin->table_join; $elName = str_replace($origTable . '.', $fromTable . '.', $elName); } } } $where = $listModel->buildQueryPrefilterWhere($this); $elName = FabrikString::safeColName($elName); $requestName = $elName . '___filter'; if (array_key_exists($elName, $_REQUEST)) { if (is_array($_REQUEST[$elName]) && array_key_exists('value', $_REQUEST[$elName])) { $_REQUEST[$requestName] = $_REQUEST[$elName]['value']; } } $htmlid = $this->getHTMLId(); $fType = $this->getFilterType(); $timeZone = new DateTimeZone(JFactory::getConfig()->get('offset')); if (in_array($fType, array('dropdown', 'checkbox', 'multiselect'))) { $rows = $this->filterValueList($normal); } $calOpts = $this->filterCalendarOpts(); $return = array(); switch ($fType) { case 'checkbox': $return[] = $this->checkboxFilter($rows, $default, $v); break; case 'range': case 'range-hidden': FabrikHelperHTML::loadcalendar(); if (empty($default)) { $default = array('', ''); } else { $d = new FabDate($default[0]); $default[0] = $d->format($format); $d = new FabDate($default[1]); $default[1] = $d->format($format); } // Add wrapper div for list filter toggling $return[] = '<div class="fabrik_filter_container">'; if ($fType === 'range-hidden') { $return[] = '<input type="hidden" name="' . $v . '[0]' . '" class="' . $class . '" value="' . $default[0] . '" id="' . $htmlid . '-0" />'; $return[] = '<input type="hidden" name="' . $v . '[1]' . '" class="' . $class . '" value="' . $default[1] . '" id="' . $htmlid . '-1" />'; $return[] = '</div>'; } else { $return[] = JText::_('COM_FABRIK_DATE_RANGE_BETWEEN') . $this->calendar($default[0], $v . '[0]', $this->getFilterHtmlId(0), $format, $calOpts); $return[] = '<br />' . JText::_('COM_FABRIK_DATE_RANGE_AND') . $this->calendar($default[1], $v . '[1]', $this->getFilterHtmlId(1), $format, $calOpts); $return[] = '</div>'; } break; case 'dropdown': case 'multiselect': /** * cant do the format in the MySQL query as its not the same formatting * e.g. M in MySQL is month and J's date code its minute */ $max = count($rows) < 7 ? count($rows) : 7; $size = $element->filter_type === 'multiselect' ? 'multiple="multiple" size="' . $max . '"' : 'size="1"'; $v = $fType === 'multiselect' ? $v . '[]' : $v; jimport('joomla.utilities.date'); $ddData = array(); foreach ($rows as $k => $o) { if ($fabrikDb->getNullDate() === $o->text) { $o->text = ''; $o->value = ''; } else { $d = new FabDate($o->text); $d->setTimeZone($timeZone); $o->value = $d->toSql(true); $o->text = $d->format($format, true); } if (!array_key_exists($o->value, $ddData)) { $ddData[$o->value] = $o; } } array_unshift($ddData, JHTML::_('select.option', '', $this->filterSelectLabel())); $return[] = JHTML::_('select.genericlist', $ddData, $v, 'class="' . $class . '" ' . $size . ' maxlength="19"', 'value', 'text', $default, $htmlid . '0'); break; default: case 'field': FabrikHelperHTML::loadcalendar(); if (is_array($default)) { $default = array_shift($default); } if ($default !== '') { $d = new FabDate($default); $default = $d->format($format); } // Add wrapper div for list filter toggling $return[] = '<div class="fabrik_filter_container">'; $return[] = $this->calendar($default, $v, $this->getFilterHtmlId(0), $format, $calOpts); $return[] = '</div>'; break; case 'hidden': if (is_array($default)) { $default = array_shift($default); } if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); // Don't add id as caused issues with inline edit plugin and clashing ids. $return[] = '<input type="hidden" name="' . $v . '" class="' . $class . '" value="' . $default . '" />'; break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return[] = '<input type="hidden" name="' . $v . '" class="' . $class . '" value="' . $default . '" id="' . $htmlid . '" />'; $return[] = '<input type="text" name="' . $v . '-auto-complete" class="' . $class . ' autocomplete-trigger" value="' . $default . '" id="' . $htmlid . '-auto-complete" />'; $autoId = '#' . $htmlid . '-auto-complete'; if (!$normal) { $autoId = '.advanced-search-list .autocomplete-trigger'; } FabrikHelperHTML::autoComplete($autoId, $this->getElement()->id, $this->getFormModel()->getId(), 'date'); break; } if ($normal) { $return[] = $this->getFilterHiddenFields($counter, $elName); } else { $return[] = $this->getAdvancedFilterHiddenFields(); } return implode("\n", $return); }
/** * Get the table filter for the element * @param bol do we render as a normal filter or as an advanced searc filter * if normal include the hidden fields as well (default true, use false for advanced filter rendering) * @return string filter html */ function getFilter($counter = 0, $normal = true) { $element =& $this->getElement(); $params =& $this->getParams(); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $table =& $this->getTableModel()->getTable(); $elName2 = $this->getFullName(false, false, false); $v = 'fabrik___filter[table_' . $table->id . '][value]'; $v .= $normal ? '[' . $counter . ']' : '[]'; //corect default got $default = $this->getDefaultFilterVal($normal, $counter); //filter the drop downs lists if the table_view_own_details option is on //other wise the lists contain data the user should not be able to see // note, this should now use the prefilter data to filter the list $values = explode("|", $element->sub_values); $labels = explode("|", $element->sub_labels); if (in_array($element->filter_type, array('range', 'dropdown'))) { $rows = $this->filterValueList($normal); $this->unmergeFilterSplits($rows); $this->reapplyFilterLabels($rows); JArrayHelper::sortObjects($rows, $params->get('filter_groupby', 'text')); if (!in_array('', $values)) { array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } } $size = $params->get('filter_length', 20); //@TODO - $rows values are not htmlspecialchar'd so data like '1"' gives html validation error switch ($element->filter_type) { case "range": $attribs = 'class="inputbox" size="1" '; $return = JHTML::_('select.genericlist', $rows, $v . '[0]', 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default[0], $element->name . "_filter_range_0"); $return .= JHTML::_('select.genericlist', $rows, $v . '[1]', 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default[1], $element->name . "_filter_range_0"); break; case "dropdown": default: case '': $return = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $htmlid); break; case "field": $return = "<input type=\"text\" class=\"inputbox fabrik_filter\" name=\"{$v}\" size=\"{$size}\" value=\"{$default}\" id=\"{$htmlid}\" />"; break; case 'auto-complete': if (get_magic_quotes_gpc()) { $default = stripslashes($default); } $default = htmlspecialchars($default); $return = "<input type=\"hidden\" name=\"{$v}\" class=\"inputbox fabrik_filter\" value=\"{$default}\" id=\"{$htmlid}\" />"; $return .= "<input type=\"text\" name=\"{$v}-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" size=\"{$size}\" value=\"{$default}\" id=\"{$htmlid}-auto-complete\" />"; FabrikHelperHTML::autoComplete($htmlid, $this->getElement()->id, $this->_pluginName); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $params = $this->getParams(); $id = $this->getHTMLId($repeatCounter); $opts = $this->getElementJSOptions($repeatCounter); $input_mask = trim($params->get('text_input_mask', '')); if (!empty($input_mask)) { $opts->use_input_mask = true; $opts->input_mask = $input_mask; } else { $opts->use_input_mask = false; $opts->input_mask = ''; } if ($this->getParams()->get('autocomplete', '0') == '2') { $autoOpts = array(); $autoOpts['max'] = $this->getParams()->get('autocomplete_rows', '10'); $autoOpts['storeMatchedResultsOnly'] = false; FabrikHelperHTML::autoComplete($id, $this->getElement()->id, $this->getFormModel()->getId(), 'field', $autoOpts); } return array('FbField', $id, $opts); }
/** * Get the table filter for the element * @return string filter html */ function getFilter($counter = 0, $normal = true) { $listModel = $this->getlistModel(); $groupModel = $this->getGroup(); $table =& $listModel->getTable(); $element = $this->getElement(); $params =& $this->getParams(); $elName = $this->getFullName(false, true, false); $htmlid = $this->getHTMLId() . 'value'; $v = 'fabrik___filter[list_'.$table->id.'][value]'; $v .= ($normal) ? '['.$counter.']' : '[]'; $values = $this->getSubOptionValues(); //corect default got $default = $this->getDefaultFilterVal($normal, $counter); if (!$normal || in_array($element->filter_type, array('range', 'dropdown'))) { $rows = $this->filterValueList($normal); $this->unmergeFilterSplits($rows); $this->reapplyFilterLabels($rows); if (!in_array('', $values)) { array_unshift($rows, JHTML::_('select.option', '', $this->filterSelectLabel())); } } $size = $params->get('filter_length', 20); switch ($element->filter_type) { case "range": if (!is_array($default)) { $default = array('', ''); } $attribs = 'class="inputbox" size="1" '; $return = JHTML::_('select.genericlist', $rows , $v.'[]', 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default[0], $element->name . "_filter_range_0"); $return .= JHTML::_('select.genericlist', $rows , $v.'[]', 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default[1], $element->name . "_filter_range_0"); break; case "dropdown": default: case '': $return = JHTML::_('select.genericlist', $rows, $v, 'class="inputbox fabrik_filter" size="1" ', 'value', 'text', $default, $htmlid); break; case "field": $return = "<input type=\"text\" class=\"inputbox fabrik_filter\" name=\"$v\" value=\"$default\" size=\"$size\" id=\"$htmlid\" />"; break; case 'auto-complete': $return = "<input type=\"hidden\" name=\"$v\" class=\"inputbox fabrik_filter\" value=\"$default\" id=\"$htmlid\" />"; $return .= "<input type=\"text\" name=\"$v-auto-complete\" class=\"inputbox fabrik_filter autocomplete-trigger\" size=\"$size\" value=\"$default\" id=\"$htmlid-auto-complete\" />"; FabrikHelperHTML::autoComplete($htmlid, $this->getElement()->id, 'radiobutton'); break; } if ($normal) { $return .= $this->getFilterHiddenFields($counter, $elName); } else { $return .= $this->getAdvancedFilterHiddenFields(); } return $return; }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $id = $this->getHTMLId($repeatCounter); if ($this->getParams()->get('database_join_display_type', 'dropdown') == 'auto-complete') { $autoOpts = array(); $autoOpts['max'] = $this->getParams()->get('autocomplete_rows', '10'); $autoOpts['storeMatchedResultsOnly'] = true; FabrikHelperHTML::autoComplete($id, $this->getElement()->id, $this->getFormModel()->getId(), 'databasejoin', $autoOpts); } $opts = $this->elementJavascriptOpts($repeatCounter); return array('FbDatabasejoin', $id, $opts); }