function wikiplugin_trackerfilter_build_trackerlist_filter($input, $formats, &$ffs, &$values, &$exactValues, Tracker_Definition $tracker_definition) { global $trklib; foreach ($input as $key =>$val) { if (substr($key, 0, 2) == 'f_' && !empty($val) && (!is_array($val) || !empty($val[0]))) { if (!is_array($val)) { $val = urldecode($val); } $fieldId = substr($key, 2); $field = $tracker_definition->getField($fieldId); if ($fieldId == 'status') continue; if (preg_match('/([0-9]+)(Month|Day|Year|Hour|Minute|Second)/', $fieldId, $matches)) { // a date if (!in_array($matches[1], $ffs)) { $fieldId = $matches[1]; $ffs[] = $matches[1]; // TO do optimize get options of the field $date = $trklib->build_date($_REQUEST, $trklib->get_tracker_field($fieldId), 'f_'.$fieldId); if (empty($formats[$fieldId])) { // = date $exactValues[] = $date; } else { // > or < data $exactValues[] = array($formats[$fieldId]=>$date); } } } else if ($field['type'] == 'F') { // if field type is freetag force the use of $values instead of $exactValues $ffs[] = $fieldId; if (is_array($val)) { $val = implode('%', $val); } $values[] = "%$val%"; } else { if (!is_numeric($fieldId)) { // composite filter $ffs[] = array('sqlsearch'=>explode(':', str_replace(array('(', ')'), '', $fieldId))); } else { $ffs[] = $fieldId; } if (isset($formats[$fieldId]) && ($formats[$fieldId] == 't' || $formats[$fieldId] == 'i')) { $exactValues[] = ''; $values[] = ($formats[$fieldId] == 'i')? "$val%": $val; } else { if (!empty($formats[$fieldId]) && preg_match('/[\>\<]+/', $formats[$fieldId]) ) { $exactValues[] = array($formats[$fieldId]=>$val); } else { $exactValues[] = $val; } $values[] = ''; } } } } }