public function addOrderBy($column, $orderByType = Criteria::ASC)
 {
     if ($this->currentQuery) {
         $this->currentQuery->addOrderBy($column, $orderByType);
     }
 }
Пример #2
0
 private function applyMatchCondition($conditionStr, IKalturaIndexQuery $query)
 {
     $matchCondition = $this->createSphinxMatchPhrase($conditionStr);
     $query->addMatch("({$matchCondition})");
 }
 private function addCondition($conditionStr, IKalturaIndexQuery $query)
 {
     if (!is_null($conditionStr)) {
         $query->addMatch("(" . $this->createSphinxMatchPhrase($conditionStr) . ")");
     }
 }
 public function applyCondition(IKalturaIndexQuery $query)
 {
     $condition = $this->getCondition();
     KalturaLog::debug("condition [" . print_r($condition, true) . "]");
     $key = '@' . ContentDistributionSphinxPlugin::getSphinxFieldName(ContentDistributionPlugin::SPHINX_EXPANDER_FIELD_DATA);
     $query->addMatch("({$key} {$condition})");
 }
 public function applyCondition(IKalturaIndexQuery $query, $xPaths = null)
 {
     $this->parentQuery = $query;
     if (!$this->condition) {
         if (is_null($xPaths)) {
             $xPaths = array();
             $profileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($this->metadataProfileId);
             foreach ($profileFields as $profileField) {
                 $xPaths[$profileField->getXpath()] = $profileField;
             }
         }
         $dataConditions = array();
         $subConditions = array();
         $pluginName = MetadataPlugin::PLUGIN_NAME;
         if (count($this->items)) {
             foreach ($this->items as $item) {
                 $dataCondition = null;
                 if ($item instanceof AdvancedSearchFilterComparableCondition) {
                     /* @var $item AdvancedSearchFilterComparableCondition  */
                     $field = $item->getField();
                     if (!isset($xPaths[$field])) {
                         $this->addCondition('1 <> 1');
                         KalturaLog::ERR("Missing field: {$field} in xpath array: " . print_r($xPaths, true));
                         continue;
                     }
                     switch ($item->getComparison()) {
                         case KalturaSearchConditionComparison::EQUEL:
                             $comparison = ' = ';
                             break;
                         case KalturaSearchConditionComparison::GREATER_THAN:
                             $comparison = ' > ';
                             break;
                         case KalturaSearchConditionComparison::GREATER_THAN_OR_EQUEL:
                             $comparison = ' >= ';
                             break;
                         case KalturaSearchConditionComparison::LESS_THAN:
                             $comparison = " < ";
                             break;
                         case KalturaSearchConditionComparison::LESS_THAN_OR_EQUEL:
                             $comparison = " <= ";
                             break;
                         default:
                             KalturaLog::ERR("Missing comparison type");
                             continue;
                     }
                     $metadataField = $this->getMetadataSearchField($field, $xPaths);
                     if (!$metadataField) {
                         KalturaLog::ERR("Missing metadataField for {$field} in xpath array: " . print_r($xPaths, true));
                         continue;
                     }
                     $value = $item->getValue();
                     if (!is_numeric($value)) {
                         switch ($value) {
                             case Criteria::CURRENT_DATE:
                                 $d = getdate();
                                 $value = mktime(0, 0, 0, $d['mon'], $d['mday'], $d['year']);
                                 break;
                             case Criteria::CURRENT_TIME:
                             case Criteria::CURRENT_TIMESTAMP:
                                 $value = time();
                                 break;
                             default:
                                 if ($xPaths[$field]->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_DATE || $xPaths[$field]->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_INT) {
                                     $this->addCondition('1 <> 1');
                                     KalturaLog::ERR("wrong search value: {$field} is numeric. search value: " . print_r($item->getValue(), true));
                                     continue;
                                 }
                                 $value = SphinxUtils::escapeString($value);
                                 break;
                         }
                     }
                     $newCondition = $metadataField . $comparison . $value;
                     if ($item->getComparison() != KalturaSearchConditionComparison::EQUEL) {
                         $newCondition = "({$newCondition} AND {$metadataField} <> 0)";
                     }
                     $this->addCondition($newCondition);
                 } elseif ($item instanceof AdvancedSearchFilterCondition) {
                     $field = $item->getField();
                     if (!isset($xPaths[$field])) {
                         $this->addCondition('1 <> 1');
                         KalturaLog::ERR("Missing field: {$field} in xpath array: " . print_r($xPaths, true));
                         continue;
                     }
                     $value = $item->getValue();
                     $value = SphinxUtils::escapeString($value);
                     $fieldId = $xPaths[$field]->getId();
                     // any value in the field
                     if (trim($value) == '*') {
                         $dataCondition = "{$pluginName}_{$fieldId}";
                     } elseif ($xPaths[$field]->getType() == self::KMC_FIELD_TYPE_LIST) {
                         $dataCondition = "\\\"{$pluginName}_{$fieldId} {$value} " . kMetadataManager::SEARCH_TEXT_SUFFIX . "_{$fieldId}" . "\\\"";
                     } else {
                         $dataCondition = "{$pluginName}_{$fieldId} << ( {$value} ) << " . kMetadataManager::SEARCH_TEXT_SUFFIX . "_{$fieldId}";
                     }
                     kalturalog::debug("add {$dataCondition}");
                     $dataConditions[] = "( {$dataCondition} )";
                 } elseif ($item instanceof MetadataSearchFilter) {
                     $item->applyCondition($this, $xPaths);
                 }
             }
         }
         if (count($dataConditions)) {
             $glue = $this->type == MetadataSearchFilter::SEARCH_AND ? ' ' : ' | ';
             $dataConditions = array_unique($dataConditions);
             $key = '@' . $this->getMetadataSearchField();
             $value = implode($glue, $dataConditions);
             $this->addMatch("{$key} {$value}");
         }
         $matchClause = array_unique($this->matchClause);
         $glue = $this->type == self::SEARCH_AND ? ' ' : ' | ';
         $this->condition = implode($glue, $matchClause);
         if ($this->type == self::SEARCH_OR) {
             $this->condition = "( {$this->condition} )";
         }
     }
     if ($this->condition) {
         $query->addMatch($this->condition);
     }
     if (isset($this->orderBy)) {
         $orderByField = substr($this->orderBy, 1);
         $orderByAscending = $this->orderBy[0] == '+' ? true : false;
         $metadataField = $this->getMetadataSearchField($orderByField);
         if ($metadataField) {
             if ($orderByAscending) {
                 $query->addOrderBy($metadataField, Criteria::ASC);
             } else {
                 $query->addOrderBy($metadataField, Criteria::DESC);
             }
         }
     }
 }
 private function addCondition($conditionStr, IKalturaIndexQuery $query)
 {
     if (!is_null($conditionStr)) {
         $condition = "ca_prefix<<{$conditionStr}<<ca_sufix";
         KalturaLog::debug("condition [" . print_r($condition, true) . "]");
         $key = '@' . CaptionSearchPlugin::getSearchFieldName(CaptionSearchPlugin::SEARCH_FIELD_DATA);
         $query->addMatch("({$key} {$condition})");
     }
 }