Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * Get the table 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(false, true, false);
     $elName2 = $this->getFullName(false, false, false);
     $v = $this->filterName($counter, $normal);
     // Corect 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 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;
                 $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();
     $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 {
                 $d = new FabDate($default[0]);
                 $default[0] = $d->toFormat($format);
                 $d = new FabDate($default[1]);
                 $default[1] = $d->toFormat($format);
             }
             // Add wrapper div for list filter toggeling
             $return[] = '<div class="fabrik_filter_container">';
             $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":
             /**
              *  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 . '0');
             break;
         default:
         case "field":
             FabrikHelperHTML::loadcalendar();
             if (is_array($default)) {
                 $default = array_shift($default);
             }
             if ($default !== '') {
                 $d = new FabDate($default);
                 $default = $d->toFormat($format);
             }
             // Add wrapper div for list filter toggeling
             $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);
             $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-list .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);
 }