/** * @param ProductQuery $search * @param $searchTerm * @param $searchIn * @param $searchCriteria */ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) { $search->_and(); foreach ($searchIn as $index => $searchInElement) { if ($index > 0) { $search->_or(); } switch ($searchInElement) { case "ref": $search->filterByRef($searchTerm, $searchCriteria); break; case "title": $search->where("CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END " . $searchCriteria . " ?", $searchTerm, \PDO::PARAM_STR); break; } } }
/** * @param ProductQuery $search * @param string[] $feature_values */ protected function manageFeatureValue(&$search, $feature_values) { if (null !== $feature_values) { foreach ($feature_values as $feature => $feature_choice) { foreach ($feature_choice['values'] as $feature_value) { $featureAlias = 'fv_' . $feature; if ($feature_value != '*') { $featureAlias .= '_' . $feature_value; } $search->joinFeatureProduct($featureAlias, Criteria::LEFT_JOIN)->addJoinCondition($featureAlias, "`{$featureAlias}`.FEATURE_ID = ?", $feature, null, \PDO::PARAM_INT); if ($feature_value != '*') { $search->addJoinCondition($featureAlias, "`{$featureAlias}`.FREE_TEXT_VALUE = ?", $feature_value, null, \PDO::PARAM_STR); } } /* format for mysql */ $sqlWhereString = $feature_choice['expression']; if ($sqlWhereString == '*') { $sqlWhereString = 'NOT ISNULL(`fv_' . $feature . '`.ID)'; } else { $sqlWhereString = preg_replace('#([a-zA-Z0-9_\\-]+)#', 'NOT ISNULL(`fv_' . $feature . '_' . '\\1`.ID)', $sqlWhereString); $sqlWhereString = str_replace('&', ' AND ', $sqlWhereString); $sqlWhereString = str_replace('|', ' OR ', $sqlWhereString); } $search->where("(" . $sqlWhereString . ")"); } } }