$kw) $final[$kw] = $res[1][$index]; $keyword = preg_replace($quotes_re, '', $keyword); $not_quoted_kw = preg_match_all($no_quotes_re, $keyword, $res); foreach ($res[2] as $index => $kw) $final[$kw] = $res[1][$index]; return $final; } function getPositiveKeywords($keyword) { $keywords = $this->splitKeyword($keyword); $ret = Array(); foreach ($keywords as $keyword => $sign) { if ($sign == '+' || $sign == '') { $ret[] = $keyword; } } return $ret; } function buildWhereClause($keyword, $fields) { $keywords = $this->splitKeyword($keyword); $normal_conditions = Array(); $plus_conditions = Array(); $minus_conditions = Array(); foreach ($keywords as $keyword => $sign) { switch ($sign) { case '+': $plus_conditions[] = implode(' LIKE "%'.$keyword.'%" OR ', $fields).' LIKE "%'.$keyword.'%"'; break; case '-': foreach ($fields as $field) { $condition[] = $field.' NOT LIKE "%'.$keyword.'%" OR '.$field.' IS NULL'; } $minus_conditions[] = '('.implode(') AND (', $condition).')'; break; case '': $normal_conditions[] = implode(' LIKE "%'.$keyword.'%" OR ', $fields).' LIKE "%'.$keyword.'%"'; break; } } // building where clause if ($normal_conditions) { $where_clause = '('.implode(') OR (', $normal_conditions).')'; } else { $where_clause = '1'; } if ($plus_conditions) { $where_clause = '('.$where_clause.') AND ('.implode(') AND (', $plus_conditions).')'; } if ($minus_conditions) { $where_clause = '('.$where_clause.') AND ('.implode(') AND (', $minus_conditions).')'; } return $where_clause; } /** * Creates filters based on "types" & "except" parameters from PrintList * * @param kEvent $event * @param Array $type_clauses * @param string $types * @param string $except_types */ function SetComplexFilter(&$event, &$type_clauses, $types, $except_types) { $includes_or_filter =& $this->Application->makeClass('kMultipleFilter', FLT_TYPE_OR); $excepts_and_filter =& $this->Application->makeClass('kMultipleFilter', FLT_TYPE_AND); $includes_or_filter_h =& $this->Application->makeClass('kMultipleFilter', FLT_TYPE_OR); $excepts_and_filter_h =& $this->Application->makeClass('kMultipleFilter', FLT_TYPE_AND); if ($types) { $types = explode(',', $types); foreach ($types as $type) { $type = trim($type); if (isset($type_clauses[$type])) { if ($type_clauses[$type]['having_filter']) { $includes_or_filter_h->addFilter('filter_'.$type, $type_clauses[$type]['include']); } else { $includes_or_filter->addFilter('filter_'.$type, $type_clauses[$type]['include']); } } } } if ($except_types) { $except_types = explode(',', $except_types); foreach ($except_types as $type) { $type = trim($type); if (isset($type_clauses[$type])) { if ($type_clauses[$type]['having_filter']) { $excepts_and_filter_h->addFilter('filter_'.$type, $type_clauses[$type]['except']); } else { $excepts_and_filter->addFilter('filter_'.$type, $type_clauses[$type]['except']); } } } } $object =& $event->getObject(); $object->addFilter('includes_filter', $includes_or_filter); $object->addFilter('excepts_filter', $excepts_and_filter); $object->addFilter('includes_filter_h', $includes_or_filter_h, HAVING_FILTER); $object->addFilter('excepts_filter_h', $excepts_and_filter_h, HAVING_FILTER); } } ?>