Index: trunk/kernel/include/advsearch.php =================================================================== diff -u -r1174 -r1188 --- trunk/kernel/include/advsearch.php (.../advsearch.php) (revision 1174) +++ trunk/kernel/include/advsearch.php (.../advsearch.php) (revision 1188) @@ -90,7 +90,7 @@ function AddAdvancedField($TableName,$FieldName,$Verb,$Value,$conj) { - global $objSearchConfig; + global $objSearchConfig, $objConfig; static $x = 0; @@ -125,20 +125,65 @@ $join = '('.$join.' AND '.$pseudo.'.CustomFieldId='.$FieldConfig->Get('CustomFieldId').')'; $this->AddRelationship($Table.' AS '.$pseudo, $join); - $FieldItem["where"] = str_replace('CustomMetaData', $pseudo, $FieldConfig->GetWhereClause($Verb,$Value)); + // for items that does not have appropriate records in CustomMetaData table + if ($Verb == 'notcontains' || $Verb == 'isnot') + { + $or_not_null = ' OR '.$pseudo.'.'.$Field.' IS NULL'; + } + else + { + $or_not_null = ''; + } + + $FieldItem["where"] = str_replace('CustomMetaData', $pseudo, $FieldConfig->GetWhereClause($Verb,$Value)).$or_not_null; $FieldItem["Field"] = $FieldConfig->Get("ForeignField"); $FieldItem["Table"] = $pseudo; $FieldItem["conjuction"] = $conj; $FieldItem["weight"] = $FieldConfig->Get("Priority"); } else { + $classes = Array( 'Link' => '_clsLinkList', + 'News' => '_clsNewsList', + 'Topic' => '_clsTopicList', + 'Category' => 'clsCatList'); + $list_class = $classes[$TableName]; + $objList =& new $list_class(); + switch ($FieldName) + { + case 'HotItem': + $cutoff = $objList->GetHotValue(); + $Value == 1 ? $not = '' : $not = 'NOT '; + $where_clause = $FieldConfig->GetWhereClause($Verb, $Value); + $where_clause .= ' OR ('.AddTablePrefix($TableName).'.HotItem=2 AND '. + $not.'('.AddTablePrefix($TableName). + '.Hits>='.$cutoff.'))'; + break; + case 'PopItem': + $cutoff = $objList->GetPopValue(); + $Value == 1 ? $not = '' : $not = 'NOT '; + $where_clause = $FieldConfig->GetWhereClause($Verb, $Value); + $where_clause .= ' OR ('.AddTablePrefix($TableName).'.PopItem=2 AND '. + $not.'('.AddTablePrefix($TableName). + '.CachedRating>='.$cutoff.'))'; + break; + case 'NewItem': + $NewTime = $objConfig->Get($TableName.'_NewDays')*3600*24; + $Value == 1 ? $not = '' : $not = 'NOT '; + $where_clause = $FieldConfig->GetWhereClause($Verb, $Value); + $where_clause .= ' OR ('.AddTablePrefix($TableName).'.NewItem=2 AND '. + $not.'('.mktime().'-'.AddTablePrefix($TableName). + '.CreatedOn<'.$NewTime.'))'; + break; + default: + $where_clause = $FieldConfig->GetWhereClause($Verb, $Value); + } $FieldItem = array(); - $FieldItem["Table"] = AddTablePrefix($TableName); - $FieldItem["Field"] = $FieldName; - $FieldItem["where"] = $FieldItem["Table"].'.'.$FieldConfig->GetWhereClause($Verb,$Value); - $FieldItem["conjuction"] = $conj; - $FieldItem["weight"] = $FieldConfig->Get("Priority"); + $FieldItem['Table'] = AddTablePrefix($TableName); + $FieldItem['Field'] = $FieldName; + $FieldItem['where'] = $FieldItem['Table'].'.'.$where_clause; + $FieldItem['conjuction'] = $conj; + $FieldItem['weight'] = $FieldConfig->Get('Priority'); } $this->FieldList[] = $FieldItem;