private function handleListFiltering($oCriteria) { foreach ($this->oListSettings->aFilters as $sFilterIdentifier => $mFilterValue) { $sFilterType = $this->filterTypeForColumn($sFilterIdentifier); if ($mFilterValue === self::SELECT_ALL || $sFilterType === self::FILTER_TYPE_MANUAL) { continue; } $sFilterColumn = $this->getDatabaseColumnForColumn($sFilterIdentifier); $bInverted = $mFilterValue === self::SELECT_WITHOUT; $mFilterValue = $bInverted ? null : $mFilterValue; if ($sFilterType === self::FILTER_TYPE_IS) { $oCriteria->add($sFilterColumn, $mFilterValue, Criteria::EQUAL); //LIKE criterias are not compatible with $bInverted == true } else { if ($sFilterType === self::FILTER_TYPE_BEGINS) { $oCriteria->add($sFilterColumn, "{$mFilterValue}%", Criteria::LIKE); } else { if ($sFilterType === self::FILTER_TYPE_CONTAINS) { $oCriteria->add($sFilterColumn, "%{$mFilterValue}%", Criteria::LIKE); } else { if ($sFilterType === self::FILTER_TYPE_IS_NULL) { if ($mFilterValue) { $oCriteria->add($sFilterColumn, null, Criteria::ISNULL); } else { $oCriteria->add($sFilterColumn, null, Criteria::ISNOTNULL); } } else { if ($sFilterType === self::FILTER_TYPE_IN) { if (!is_array($mFilterValue)) { $mFilterValue = array($mFilterValue); } if (count($mFilterValue) === 0) { $bInverted = true; } $oCriteria->add($sFilterColumn, $mFilterValue, $bInverted ? Criteria::NOT_IN : Criteria::IN); } else { if ($sFilterType === self::FILTER_TYPE_TAG) { $aTaggedItemIds = array(); foreach (TagInstancePeer::getByModelNameAndTagName($this->sModelName, $mFilterValue) as $oTagInstance) { $aTaggedItemIds[] = $oTagInstance->getTaggedItemId(); } $oCriteria->add($sFilterColumn, $aTaggedItemIds, $bInverted ? Criteria::NOT_IN : Criteria::IN); } } } } } } } }