protected function applyFilterFields(baseObjectFilter $filter) { /* @var $filter cuePointFilter */ // Reduce the cache expiry when fetching live stream cuepoints $entryId = $filter->get('_in_entry_id'); if ($entryId && strpos($entryId, ',') === false) { $entry = entryPeer::retrieveByPK($entryId); if ($entry && $entry->getType() == entryType::LIVE_STREAM) { kApiCache::setExpiry(self::LIVE_ENTRY_CUE_POINT_CACHE_EXPIRY_SECONDS); } } if ($filter->get('_free_text')) { $this->sphinxSkipped = false; $freeTexts = $filter->get('_free_text'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $this->addFreeTextToMatchClauseByMatchFields($freeTexts, CuePointFilter::FREE_TEXT_FIELDS); } $filter->unsetByName('_free_text'); if ($filter->get('_eq_is_public')) { $this->sphinxSkipped = false; $isPublic = $filter->get('_eq_is_public'); $this->addCondition('is_public' . " = " . $isPublic); } $filter->unsetByName('_eq_is_public'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { /* @var $filter AnswerCuePointFilter */ if ($filter->get('_eq_quiz_user_entry_id')) { $userEntryId = $filter->get('_eq_quiz_user_entry_id'); $searchValue = $userEntryId . kCurrentContext::getCurrentPartnerId() . QuizPlugin::SEARCH_TEXT_SUFFIX; $this->addMatch("(@plugins_data {$searchValue})"); } $filter->unsetByName('_eq_quiz_user_entry_id'); if ($filter->get('_in_quiz_user_entry_id')) { $userEntryIds = explode(',', $filter->get('_in_quiz_user_entry_id')); foreach ($userEntryIds as &$userEntryId) { $userEntryId .= kCurrentContext::getCurrentPartnerId() . QuizPlugin::SEARCH_TEXT_SUFFIX; } $searchValues = implode(' | ', $userEntryIds); $this->addMatch("(@plugins_data ({$searchValues}))"); } $filter->unsetByName('_in_quiz_user_entry_id'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { //Role ids and kuser permission names are indexed with the partner ID if ($filter->get('_eq_role_ids')) { $filter->set('_eq_role_ids', kuser::getIndexedFieldValue('kuserPeer::ROLE_IDS', $filter->get('_eq_role_ids'), kCurrentContext::getCurrentPartnerId())); } if ($filter->get('_in_role_ids')) { $filter->set('_eq_role_ids', kuser::getIndexedFieldValue('kuserPeer::ROLE_IDS', $filter->get('_eq_role_ids'), kCurrentContext::getCurrentPartnerId())); } if ($filter->get('_mlikeand_permission_names')) { $permissionNames = kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', $filter->get('_mlikeand_permission_names'), kCurrentContext::getCurrentPartnerId()); $permissionNames = implode(' ', explode(',', $permissionNames)); $universalPermissionName = kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', kuser::UNIVERSAL_PERMISSION, kCurrentContext::getCurrentPartnerId()); $value = "({$universalPermissionName} | ({$permissionNames}))"; $this->addMatch("@permission_names {$value}"); $filter->unsetByName('_mlikeand_permission_names'); } if ($filter->get('_mlikeor_permission_names')) { $filter->set('_mlikeor_permission_names', kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', $filter->get('_mlikeor_permission_names') . ',' . kuser::UNIVERSAL_PERMISSION, kCurrentContext::getCurrentPartnerId())); } if ($filter->get('_likex_puser_id_or_screen_name')) { $freeTexts = $filter->get('_likex_puser_id_or_screen_name'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($filter->getPartnerSearchScope(), $freeTexts); } $this->addFreeTextToMatchClauseByMatchFields($freeTexts, kuserFilter::PUSER_ID_OR_SCREEN_NAME, $additionalConditions, true); } $filter->unsetByName('_likex_puser_id_or_screen_name'); if ($filter->get('_likex_first_name_or_last_name')) { $names = $filter->get('_likex_first_name_or_last_name'); KalturaLog::debug("Attach free text [{$names}]"); $this->addFreeTextToMatchClauseByMatchFields($names, kuserFilter::FIRST_NAME_OR_LAST_NAME, null, true); } $filter->unsetByName('_likex_first_name_or_last_name'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { //Role ids and kuser permission names are indexed with the partner ID $partnerId = kCurrentContext::$partner_id ? kCurrentContext::$partner_id : kCurrentContext::$ks_partner_id; if ($filter->get('_eq_role_ids')) { $filter->set('_eq_role_ids', kuser::getIndexedFieldValue('kuserPeer::ROLE_IDS', $filter->get('_eq_role_ids'), $partnerId)); } if ($filter->get('_in_role_ids')) { $filter->set('_eq_role_ids', kuser::getIndexedFieldValue('kuserPeer::ROLE_IDS', $filter->get('_eq_role_ids'), $partnerId)); } if ($filter->get('_mlikeand_permission_names')) { $permissionNames = kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', $filter->get('_mlikeand_permission_names'), $partnerId); $permissionNames = implode(' ', explode(',', $permissionNames)); $universalPermissionName = kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', kuser::UNIVERSAL_PERMISSION, $partnerId); $value = "({$universalPermissionName} | ({$permissionNames}))"; $this->addMatch("@permission_names {$value}"); $filter->unsetByName('_mlikeand_permission_names'); } if ($filter->get('_mlikeor_permission_names')) { $filter->set('_mlikeor_permission_names', kuser::getIndexedFieldValue('kuserPeer::PERMISSION_NAMES', $filter->get('_mlikeor_permission_names') . ',' . kuser::UNIVERSAL_PERMISSION, $partnerId)); } if ($filter->get('_likex_puser_id_or_screen_name')) { $freeTexts = $filter->get('_likex_puser_id_or_screen_name'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($freeTexts); } if (preg_match('/^"[^"]+"$/', $freeTexts)) { $freeText = str_replace('"', '', $freeTexts); $freeText = SphinxUtils::escapeString($freeText); $freeText = "^{$freeText}\$"; $additionalConditions[] = "@(" . kuserFilter::PUSER_ID_OR_SCREEN_NAME . ") {$freeText}\\\\*"; } else { if (strpos($freeTexts, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $freeTexts); $freeTextsArr = explode(baseObjectFilter::IN_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } foreach ($freeTextsArr as $freeText) { $additionalConditions[] = "@(" . kuserFilter::PUSER_ID_OR_SCREEN_NAME . ") {$freeText}\\\\*"; } } else { $freeTextsArr = explode(baseObjectFilter::AND_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } $freeTextsArr = array_unique($freeTextsArr); $freeTextExpr = implode(baseObjectFilter::AND_SEPARATOR, $freeTextsArr); $additionalConditions[] = "@(" . kuserFilter::PUSER_ID_OR_SCREEN_NAME . ") {$freeTextExpr}\\\\*"; } } if (count($additionalConditions)) { $additionalConditions = array_unique($additionalConditions); $matches = reset($additionalConditions); if (count($additionalConditions) > 1) { $matches = '( ' . implode(' ) | ( ', $additionalConditions) . ' )'; } $this->matchClause[] = $matches; } } $filter->unsetByName('_likex_puser_id_or_screen_name'); if ($filter->get('_likex_first_name_or_last_name')) { $names = $filter->get('_likex_first_name_or_last_name'); KalturaLog::debug("Attach free text [{$names}]"); $additionalConditions = array(); if (preg_match('/^"[^"]+"$/', $names)) { $name = str_replace('"', '', $names); $name = SphinxUtils::escapeString($name); $name = "^{$name}\$"; $additionalConditions[] = "@(" . kuserFilter::FIRST_NAME_OR_LAST_NAME . ") {$name}\\\\*"; } else { if (strpos($names, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $names); $namesArr = explode(baseObjectFilter::IN_SEPARATOR, $names); foreach ($namesArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($namesArr[$valIndex]); } else { $namesArr[$valIndex] = SphinxUtils::escapeString($valValue); } } foreach ($namesArr as $name) { $additionalConditions[] = "@(" . kuserFilter::FIRST_NAME_OR_LAST_NAME . ") {$name}\\\\*"; } } else { $namesArr = explode(baseObjectFilter::AND_SEPARATOR, $names); foreach ($namesArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($namesArr[$valIndex]); } else { $namesArr[$valIndex] = SphinxUtils::escapeString($valValue); } } $namesArr = array_unique($namesArr); $nameExpr = implode(baseObjectFilter::AND_SEPARATOR, $namesArr); $additionalConditions[] = "@(" . kuserFilter::FIRST_NAME_OR_LAST_NAME . ") {$nameExpr}\\\\*"; } } if (count($additionalConditions)) { $additionalConditions = array_unique($additionalConditions); $matches = reset($additionalConditions); if (count($additionalConditions) > 1) { $matches = '( ' . implode(' ) | ( ', $additionalConditions) . ' )'; } $this->matchClause[] = $matches; } } $filter->unsetByName('_likex_first_name_or_last_name'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { $partnerId = kCurrentContext::getCurrentPartnerId(); $categories = $filter->get("_matchor_likex_full_name"); if ($categories !== null) { $categories = explode(',', $categories); $parsedCategories = array(); foreach ($categories as $category) { if (trim($category) == '') { continue; } $parsedCategories[] = $category . '\\*'; } $fullNameMatchOr = ''; if (count($parsedCategories)) { $fullNameMatchOr = implode(',', $parsedCategories); } if ($fullNameMatchOr != '') { $filter->set("_matchor_full_name", $fullNameMatchOr); } } $filter->unsetByName('_matchor_likex_full_name'); if ($filter->get('_free_text')) { $freeTexts = $filter->get('_free_text'); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($filter->getPartnerSearchScope(), $freeTexts); } $this->addFreeTextToMatchClauseByMatchFields($freeTexts, categoryFilter::FREE_TEXT_FIELDS, $additionalConditions); } $filter->unsetByName('_free_text'); if ($filter->get('_eq_privacy_context') && $filter->get('_eq_privacy_context') == '*') { $filter->set('_matchor_privacy_context', kEntitlementUtils::NOT_DEFAULT_CONTEXT); $filter->unsetByName('_eq_privacy_context'); } if ($filter->get('_eq_manager')) { $puserId = $filter->get('_eq_manager'); $kuser = kuserPeer::getKuserByPartnerAndUid($partnerId, $puserId); if ($kuser) { $manager = category::getPermissionLevelName(CategoryKuserPermissionLevel::MANAGER); $this->matchClause[] = '(@(' . categoryFilter::MEMBERS . ') ' . $manager . '_' . $kuser->getid() . ')'; } } $filter->unsetByName('_eq_manager'); if ($filter->get('_eq_member')) { $puserId = $filter->get('_eq_member'); $kuser = kuserPeer::getKuserByPartnerAndUid($partnerId, $puserId); if ($kuser) { $manager = category::getPermissionLevelName(CategoryKuserPermissionLevel::MANAGER); $member = category::getPermissionLevelName(CategoryKuserPermissionLevel::MEMBER); $moderator = category::getPermissionLevelName(CategoryKuserPermissionLevel::MODERATOR); $contributor = category::getPermissionLevelName(CategoryKuserPermissionLevel::CONTRIBUTOR); $kuserId = $kuser->getid(); $this->matchClause[] = '(@(' . categoryFilter::MEMBERS . ') ' . "({$member}_{$kuserId} | {$moderator}_{$kuserId} | {$contributor}_{$kuserId} ) !({$manager}_{$kuserId}))"; } } $filter->unsetByName('_eq_member'); if ($filter->get('_eq_full_name')) { $filter->set('_matchor_full_name', $filter->get('_eq_full_name') . category::FULL_NAME_EQUAL_MATCH_STRING); } $filter->unsetByName('_eq_full_name'); if ($filter->get('_in_full_name')) { $fullnames = explode(',', $filter->get('_in_full_name')); $fullnameIn = ''; foreach ($fullnames as $fullname) { $fullnameIn .= $fullname . category::FULL_NAME_EQUAL_MATCH_STRING . ','; } $filter->set('_matchor_full_name', $fullnameIn); $filter->unsetByName('_in_full_name'); } $categories = $filter->get("_in_ancestor_id"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryIdsToAllSubCategoriesIdsParsed($categories); if ($categoriesParsed !== '' || $categories == '') { $filter->set("_matchor_full_ids", $categoriesParsed); } else { $filter->set("_matchor_full_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } $filter->unsetByName('_in_ancestor_id'); if ($filter->get('_likex_full_ids')) { $fullids = explode(',', $filter->get('_likex_full_ids')); $fullIdsIn = ''; foreach ($fullids as $fullid) { $fullIdsIn .= $fullid . '\\*,'; } $filter->set('_matchor_full_ids', $fullIdsIn); $filter->unsetByName('_likex_full_ids'); } if ($filter->get('_eq_full_ids')) { $filter->set('_matchor_full_ids', $filter->get('_eq_full_ids') . category::FULL_IDS_EQUAL_MATCH_STRING); } $filter->unsetByName('_eq_full_ids'); if ($filter->get('_likex_name_or_reference_id')) { $names = $filter->get('_likex_name_or_reference_id'); $this->addFreeTextToMatchClauseByMatchFields($names, categoryFilter::NAME_REFERNCE_ID, null, true); } $filter->unsetByName('_likex_name_or_reference_id'); if ($filter->get('_eq_privacy')) { $filter->set('_eq_privacy', $filter->get('_eq_privacy') . "P" . $partnerId); } if ($filter->get('_in_privacy')) { $privacyIn = explode(',', $filter->get('_in_privacy')); $newPrivacyIn = array(); foreach ($privacyIn as $privacy) { $newPrivacyIn[] = $privacy . "P" . $partnerId; } $filter->set('_in_privacy', implode(",", $newPrivacyIn)); } if ($filter->get('_eq_display_in_search')) { $filter->set('_eq_display_in_search', $filter->get('_eq_display_in_search')); } return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { /* @var $filter entryFilter */ if ($filter->is_set('_eq_redirect_from_entry_id')) { $partnerGroup = array(kCurrentContext::getCurrentPartnerId(), PartnerPeer::GLOBAL_PARTNER); $criteriaFilter = entryPeer::getCriteriaFilter(); $defaultCriteria = $criteriaFilter->getFilter(); $defaultCriteria->remove(entryPeer::PARTNER_ID); $defaultCriteria->add(entryPeer::PARTNER_ID, $partnerGroup, Criteria::IN); $origEntryId = $filter->get('_eq_redirect_from_entry_id'); $origEntry = entryPeer::retrieveByPK($origEntryId); if (!empty($origEntry)) { if ($origEntry->getType() == entryType::LIVE_STREAM) { // Set a relatively short expiry value in order to reduce the wait-time // until the cache is refreshed and a redirection kicks-in. kApiCache::setExpiry(kApiCache::REDIRECT_ENTRY_CACHE_EXPIRY); } // Get the id of the entry id that is being redirected from the original entry $redirectEntryId = $origEntry->getRedirectEntryId(); if (is_null($redirectEntryId)) { $filter->set('_eq_id', $origEntryId); // Continue with original entry id } else { // Get the redirected entry and check if it exists and is ready $redirectedEntry = entryPeer::retrieveByPK($redirectEntryId); if (!empty($redirectedEntry) && $redirectedEntry->getStatus() == entryStatus::READY) { // Redirected entry is ready. // Set it as the replacement of the original one $filter->set('_eq_id', $redirectEntryId); } else { // Can't redirect? --> Fallback to the original entry $filter->set('_eq_id', $origEntryId); } } } else { throw new kCoreException("Invalid entry id [\"{$origEntryId}\"]", kCoreException::INVALID_ENTRY_ID, $origEntryId); } $filter->unsetByName('_eq_redirect_from_entry_id'); } $categoriesAncestorParsed = null; $categories = $filter->get("_in_category_ancestor_id"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesAncestorParsed = $filter->categoryIdsToAllSubCategoriesIdsParsed($categories); if (!($categoriesAncestorParsed !== '' || $categories == '')) { $categoriesAncestorParsed = category::CATEGORY_ID_THAT_DOES_NOT_EXIST; } } $filter->unsetByName('_in_category_ancestor_id'); $categories = $filter->get("_matchor_categories_ids"); if ($categories !== null) { //if the category exist or the category name is an empty string if (is_null($categoriesAncestorParsed)) { $categoriesParsed = $filter->categoryIdsToIdsParsed($categories); } else { $categoriesParsed = $categoriesAncestorParsed; } if ($categoriesParsed !== '' || $categories == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } else { $filter->set("_matchor_categories_ids", $categoriesAncestorParsed); } $categories = $filter->get("_matchand_categories_ids"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryIdsToIdsParsed($categories); if ($categoriesParsed !== '' || $categories == '') { $filter->set("_matchand_categories_ids", $categoriesParsed); } else { $filter->set("_matchand_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } $categoriesIds = $filter->get("_notcontains_categories_ids"); if ($categoriesIds !== null) { $categoriesParsed = $filter->categoryIdsToAllSubCategoriesIdsParsed($categoriesIds, CategoryEntryStatus::ACTIVE . ',' . CategoryEntryStatus::PENDING . ',' . CategoryEntryStatus::REJECTED); if ($categoriesParsed !== '' || $categoriesIds == '') { $filter->set("_notcontains_categories_ids", $categoriesParsed); } else { $filter->set("_notcontains_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } $matchAndCats = $filter->get("_matchand_categories"); if ($matchAndCats !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($matchAndCats, CategoryEntryStatus::ACTIVE); if ($categoriesParsed !== '' || $matchAndCats == '') { $filter->set("_matchand_categories_ids", $categoriesParsed); } else { $filter->set("_matchand_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_matchand_categories'); } $matchOrCats = $filter->get("_matchor_categories"); if ($matchOrCats !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($matchOrCats, CategoryEntryStatus::ACTIVE); if ($categoriesParsed !== '' || $matchOrCats == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_matchor_categories'); } $notContainsCats = $filter->get("_notcontains_categories"); if ($notContainsCats !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($notContainsCats, CategoryEntryStatus::ACTIVE . ',' . CategoryEntryStatus::PENDING . ',' . CategoryEntryStatus::REJECTED); if ($categoriesParsed !== '' || $notContainsCats == '') { $filter->set("_notcontains_categories_ids", $categoriesParsed); } else { $filter->set("_notcontains_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_notcontains_categories'); } // match categories by full name $CatFullNameIn = $filter->get("_in_categories_full_name"); if ($CatFullNameIn !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($CatFullNameIn, CategoryEntryStatus::ACTIVE); if ($categoriesParsed !== '' || $CatFullNameIn == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_in_categories_full_name'); } if ($filter->is_set('_is_live')) { $this->addCondition(entryIndex::DYNAMIC_ATTRIBUTES . '.' . LiveEntry::IS_LIVE . ' = ' . ($filter->get('_is_live') == '1' ? '1' : '0')); $filter->unsetByName('_is_live'); } if ($filter->is_set('_is_recorded_entry_id_empty')) { $fieldName = entryIndex::DYNAMIC_ATTRIBUTES . '.' . LiveEntry::RECORDED_ENTRY_ID; $this->addWhere("{$fieldName} " . ($filter->get('_is_recorded_entry_id_empty') ? "IS" : "IS NOT") . " NULL"); $filter->unsetByName('_is_recorded_entry_id_empty'); } $matchOrRoots = array(); if ($filter->is_set('_eq_root_entry_id')) { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX . ' ' . $filter->get('_eq_root_entry_id'); $filter->unsetByName('_eq_root_entry_id'); } if ($filter->is_set('_in_root_entry_id')) { $roots = explode(baseObjectFilter::IN_SEPARATOR, $filter->get('_in_root_entry_id')); foreach ($roots as $root) { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX . " {$root}"; } $filter->unsetByName('_in_root_entry_id'); } //When setting parent entry ID we also set the root entry id so the entry should be indexed with the root entry prefix if ($filter->is_set('_eq_parent_entry_id')) { $matchOrRoots[] = entry::ROOTS_FIELD_PARENT_ENTRY_PREFIX . '_' . $filter->get('_eq_parent_entry_id'); $filter->unsetByName('_eq_parent_entry_id'); } if ($filter->is_set('_is_root')) { if ($filter->get('_is_root')) { $filter->set('_notin_roots', entry::ROOTS_FIELD_ENTRY_PREFIX); } else { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX; } $filter->unsetByName('_is_root'); } if (count($matchOrRoots)) { $filter->set('_matchand_roots', $matchOrRoots); } // if ($filter->get("_matchor_duration_type") !== null) // $filter->set("_matchor_duration_type", $filter->durationTypesToIndexedStrings($filter->get("_matchor_duration_type"))); if ($filter->get(baseObjectFilter::ORDER) === "recent" || $filter->get(baseObjectFilter::ORDER) === "-recent") { $filter->set("_lte_available_from", time()); //$filter->set("_gteornull_end_date", time()); // schedule not finished $filter->set(baseObjectFilter::ORDER, "-available_from"); } if ($filter->get(baseObjectFilter::ORDER) === "+recent") { $filter->set(baseObjectFilter::ORDER, "+available_from"); } if ($filter->get(baseObjectFilter::ORDER) === "-first_broadcast") { $this->addOrderBy(entryIndex::DYNAMIC_ATTRIBUTES . '.' . LiveEntry::FIRST_BROADCAST, Criteria::DESC); $filter->set(baseObjectFilter::ORDER, null); } if ($filter->get(baseObjectFilter::ORDER) === "+first_broadcast") { $this->addOrderBy(entryIndex::DYNAMIC_ATTRIBUTES . '.' . LiveEntry::FIRST_BROADCAST, Criteria::ASC); $filter->set(baseObjectFilter::ORDER, null); } if ($filter->get('_free_text')) { $freeTexts = $filter->get('_free_text'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($filter->getPartnerSearchScope(), $freeTexts); } $this->addFreeTextToMatchClauseByMatchFields($freeTexts, entryFilter::FREE_TEXT_FIELDS, $additionalConditions); } $filter->unsetByName('_free_text'); return parent::applyFilterFields($filter); }
/** * Applies all filter fields and unset the handled fields * * @param baseObjectFilter $filter */ protected function applyFilterFields(baseObjectFilter $filter) { foreach ($filter->fields as $field => $val) { if (is_null($val) || !strlen($val) || $field == '_order_by') { continue; } $fieldParts = explode(baseObjectFilter::FILTER_PREFIX, $field, 3); if (count($fieldParts) != 3) { KalturaLog::debug("Skip field[{$field}] has [" . count($fieldParts) . "] parts"); continue; } list($prefix, $operator, $fieldName) = $fieldParts; $fieldNamesArr = explode(baseObjectFilter::OR_SEPARATOR, $fieldName); if (count($fieldNamesArr) > 1) { $sphinxFieldNames = array(); foreach ($fieldNamesArr as $fieldName) { $sphinxField = $this->getSphinxFieldName($fieldName); $type = $this->getSphinxFieldType($sphinxField); $sphinxFieldNames[] = $sphinxField; } $sphinxField = '(' . implode(',', $sphinxFieldNames) . ')'; $vals = is_array($val) ? $val : array_unique(explode(baseObjectFilter::OR_SEPARATOR, $val)); $val = implode(' ', $vals); } elseif (!$this->hasMatchableField($fieldName)) { KalturaLog::debug("Skip field[{$field}] has no matchable for name[{$fieldName}]"); continue; } else { $sphinxField = $this->getSphinxFieldName($fieldName); $type = $this->getSphinxFieldType($sphinxField); } $valStr = print_r($val, true); $fieldsEscapeType = $this->getSearchIndexFieldsEscapeType($fieldName); KalturaLog::debug("Attach field[{$fieldName}] as sphinx field[{$sphinxField}] of type [{$type}] and comparison[{$operator}] for value[{$valStr}]"); switch ($operator) { case baseObjectFilter::MULTI_LIKE_OR: case baseObjectFilter::MATCH_OR: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!$valValue) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $val = implode(' | ', $vals); $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::NOT_IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!$valValue) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $vals = array_slice($vals, 0, SphinxCriterion::MAX_IN_VALUES); $val = $this->getPositiveMatch($sphinxField) . ' !' . implode(' !', $vals); $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!$valValue) { unset($vals[$valIndex]); } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $vals = array_slice($vals, 0, SphinxCriterion::MAX_IN_VALUES); $val = '((^' . implode('$) | (^', $vals) . '$))'; $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::EQ: if (is_numeric($val) || strlen($val) > 0) { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); $this->addMatch("@{$sphinxField} ^{$val}\$"); $filter->unsetByName($field); } break; case baseObjectFilter::MULTI_LIKE_AND: case baseObjectFilter::MATCH_AND: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!$valValue) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { //if there are spaces or tabs - should add "<VALUE>" $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $val = implode(' ', $vals); $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::LIKE: if (strlen($val)) { if (preg_match('/[\\s\\t]/', $val)) { //if there are spaces or tabs - should add "<VALUE>" $val = '"' . SphinxUtils::escapeString($val, $fieldsEscapeType) . '"'; } else { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); } $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::LIKEX: if (strlen($val)) { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); if ($fieldsEscapeType != SearchIndexFieldEscapeType::MD5_LOWER_CASE) { $this->addMatch('@' . $sphinxField . ' "' . $val . '\\\\*"'); } else { $this->addMatch('@' . $sphinxField . ' "' . $val . '"'); } $filter->unsetByName($field); } break; case baseObjectFilter::NOT_CONTAINS: $val = is_array($val) ? $val : explode(",", $val); foreach ($val as &$singleVal) { $singleVal = SphinxUtils::escapeString($singleVal, $fieldsEscapeType); } if ($this->getFieldPrefix($sphinxField)) { $this->addMatch('@' . $sphinxField . ' ' . $this->getFieldPrefix($sphinxField) . ' -(' . implode(' | ', $val) . ')'); } $filter->unsetByName($field); break; default: KalturaLog::debug("Skip field[{$field}] has no opertaor[{$operator}]"); } } }
/** * Applies all filter fields and unset the handled fields * * @param baseObjectFilter $filter */ protected function applyFilterFields(baseObjectFilter $filter) { $objectClass = $this->getIndexObjectName(); foreach ($filter->fields as $field => $val) { if (is_null($val) || $val === '' || $field == '_order_by') { continue; } $fieldParts = explode(baseObjectFilter::FILTER_PREFIX, $field, 3); if (count($fieldParts) != 3) { KalturaLog::debug("Skip field[{$field}] has [" . count($fieldParts) . "] parts"); continue; } list($prefix, $operator, $fieldName) = $fieldParts; $type = null; $fieldNamesArr = explode(baseObjectFilter::OR_SEPARATOR, $fieldName); if (count($fieldNamesArr) > 1) { $sphinxFieldNames = array(); $skip = false; foreach ($fieldNamesArr as $fieldName) { if (!$objectClass::hasMatchableField($fieldName)) { KalturaLog::debug("** Skip field[{$field}] has no matchable for name[{$fieldName}]"); $skip = true; break; } $sphinxField = $objectClass::getIndexFieldName($fieldName); $type = $objectClass::getFieldType($sphinxField); $sphinxFieldNames[] = $sphinxField; } if ($skip) { continue; } $sphinxField = '(' . implode(',', $sphinxFieldNames) . ')'; $vals = is_array($val) ? $val : array_unique(explode(baseObjectFilter::OR_SEPARATOR, $val)); $val = implode(' ', $vals); } elseif (!$objectClass::hasMatchableField($fieldName)) { KalturaLog::debug("* Skip field[{$field}] has no matchable for name[{$fieldName}]"); continue; } else { $sphinxField = $objectClass::getIndexFieldName($fieldName); } $valStr = print_r($val, true); $fieldsEscapeType = $objectClass::getSearchFieldsEscapeType($fieldName); KalturaLog::debug("Attach field[{$fieldName}] as sphinx field[{$sphinxField}] of type [{$type}] and comparison[{$operator}] for value[{$valStr}]"); $partnerId = kCurrentContext::getCurrentPartnerId(); $notEmpty = kSphinxSearchManager::HAS_VALUE . $partnerId; switch ($operator) { case baseObjectFilter::MULTI_LIKE_OR: case baseObjectFilter::MATCH_OR: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!strlen($valValue)) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $val = implode(' | ', $vals); $this->addMatch("(@{$sphinxField} {$val})"); $filter->unsetByName($field); } break; case baseObjectFilter::NOT_IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!strlen($valValue)) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $vals = array_slice($vals, 0, SphinxCriterion::MAX_IN_VALUES); $val = $this->getFieldPrefix($sphinxField) . ' !' . implode(' !', $vals); $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!strlen($valValue)) { unset($vals[$valIndex]); } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $vals = array_slice($vals, 0, SphinxCriterion::MAX_IN_VALUES); $vals = array_filter($vals, 'trim'); if ($objectClass::isNullableField($fieldName)) { $val = "((\\\"^" . implode(" {$notEmpty}\$\\\") | (\\\"^", $vals) . " {$notEmpty}\$\\\"))"; } else { $val = "((\\\"^" . implode("\$\\\") | (\\\"^", $vals) . "\$\\\"))"; } $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::EQ: if (is_numeric($val) || strlen($val) > 0) { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); if ($objectClass::isNullableField($fieldName)) { $this->addMatch("@{$sphinxField} \\\"^{$val} {$notEmpty}\$\\\""); } else { $this->addMatch("@{$sphinxField} \\\"^{$val}\$\\\""); } $filter->unsetByName($field); } break; case baseObjectFilter::IS_EMPTY: if ($val) { $isEmpty = kSphinxSearchManager::HAS_NO_VALUE . $partnerId; $this->addMatch("@{$sphinxField} {$isEmpty}"); } else { $this->addMatch("@{$sphinxField} {$notEmpty}"); } $filter->unsetByName($field); break; case baseObjectFilter::MULTI_LIKE_AND: case baseObjectFilter::MATCH_AND: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!strlen($valValue)) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { //if there are spaces or tabs - should add "<VALUE>" $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue, $fieldsEscapeType) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue, $fieldsEscapeType); } } if (count($vals)) { $val = implode(' ', $vals); $this->addMatch("(@{$sphinxField} {$val})"); $filter->unsetByName($field); } break; case baseObjectFilter::LIKE: if (strlen($val)) { if (preg_match('/[\\s\\t]/', $val)) { //if there are spaces or tabs - should add "<VALUE>" $val = '"' . SphinxUtils::escapeString($val, $fieldsEscapeType) . '"'; } else { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); } $this->addMatch("@{$sphinxField} {$val}"); $filter->unsetByName($field); } break; case baseObjectFilter::LIKEX: if (strlen($val)) { $val = SphinxUtils::escapeString($val, $fieldsEscapeType); if ($fieldsEscapeType != SearchIndexFieldEscapeType::MD5_LOWER_CASE) { $this->addMatch('@' . $sphinxField . ' "' . $val . '\\\\*"'); } else { $this->addMatch('@' . $sphinxField . ' "' . $val . '"'); } $filter->unsetByName($field); } break; case baseObjectFilter::NOT_CONTAINS: $val = is_array($val) ? $val : explode(",", $val); foreach ($val as &$singleVal) { $singleVal = SphinxUtils::escapeString($singleVal, $fieldsEscapeType); } if ($this->getFieldPrefix($sphinxField)) { $this->addMatch('@' . $sphinxField . ' ' . $this->getFieldPrefix($sphinxField) . ' -(' . implode(' | ', $val) . ')'); } $filter->unsetByName($field); break; default: KalturaLog::debug("Skip field[{$field}] has no opertaor[{$operator}]"); } } }
protected function applyFilterFields(baseObjectFilter $filter) { $categories = $filter->get("_matchor_likex_full_name"); if ($categories !== null) { $categories = explode(',', $categories); $parsedCategories = array(); foreach ($categories as $category) { if (trim($category) == '') { continue; } $parsedCategories[] = $category . '\\*'; } $fullNameMatchOr = ''; if (count($parsedCategories)) { $fullNameMatchOr = implode(',', $parsedCategories); } if ($fullNameMatchOr != '') { $filter->set("_matchor_full_name", $fullNameMatchOr); } } $filter->unsetByName('_matchor_likex_full_name'); if ($filter->get('_free_text')) { $freeTexts = $filter->get('_free_text'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($freeTexts); } if (preg_match('/^"[^"]+"$/', $freeTexts)) { $freeText = str_replace('"', '', $freeTexts); $freeText = SphinxUtils::escapeString($freeText); $freeText = "^{$freeText}\$"; $additionalConditions[] = "@(" . categoryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } else { if (strpos($freeTexts, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $freeTexts); $freeTextsArr = explode(baseObjectFilter::IN_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } foreach ($freeTextsArr as $freeText) { $additionalConditions[] = "@(" . categoryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } } else { $freeTextsArr = explode(baseObjectFilter::AND_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } $freeTextsArr = array_unique($freeTextsArr); $freeTextExpr = implode(baseObjectFilter::AND_SEPARATOR, $freeTextsArr); $additionalConditions[] = "@(" . categoryFilter::FREE_TEXT_FIELDS . ") {$freeTextExpr}"; } } if (count($additionalConditions)) { $additionalConditions = array_unique($additionalConditions); $matches = reset($additionalConditions); if (count($additionalConditions) > 1) { $matches = '( ' . implode(' ) | ( ', $additionalConditions) . ' )'; } $this->matchClause[] = $matches; } } $filter->unsetByName('_free_text'); if ($filter->get('_eq_privacy_context') && $filter->get('_eq_privacy_context') == '*') { $filter->set('_matchor_privacy_context', kEntitlementUtils::NOT_DEFAULT_CONTEXT); $filter->unsetByName('_eq_privacy_context'); } if ($filter->get('_eq_manager')) { $partnerId = kCurrentContext::$partner_id ? kCurrentContext::$partner_id : kCurrentContext::$ks_partner_id; $puserId = $filter->get('_eq_manager'); $kuser = kuserPeer::getKuserByPartnerAndUid($partnerId, $puserId); if ($kuser) { $manager = category::getPermissionLevelName(CategoryKuserPermissionLevel::MANAGER); $this->matchClause[] = '(@(' . categoryFilter::MEMBERS . ') ' . $manager . '_' . $kuser->getid() . ')'; } } $filter->unsetByName('_eq_manager'); if ($filter->get('_eq_member')) { //memeber but not a menager $partnerId = kCurrentContext::$partner_id ? kCurrentContext::$partner_id : kCurrentContext::$ks_partner_id; $puserId = $filter->get('_eq_member'); $kuser = kuserPeer::getKuserByPartnerAndUid($partnerId, $puserId); if ($kuser) { $manager = category::getPermissionLevelName(CategoryKuserPermissionLevel::MANAGER); $member = category::getPermissionLevelName(CategoryKuserPermissionLevel::MEMBER); $moderator = category::getPermissionLevelName(CategoryKuserPermissionLevel::MODERATOR); $contributor = category::getPermissionLevelName(CategoryKuserPermissionLevel::CONTRIBUTOR); $kuserId = $kuser->getid(); $this->matchClause[] = '(@(' . categoryFilter::MEMBERS . ') ' . "({$member}_{$kuserId} | {$moderator}_{$kuserId} | {$contributor}_{$kuserId} ) !({$manager}_{$kuserId}))"; } } $filter->unsetByName('_eq_member'); if ($filter->get('_eq_full_name')) { $filter->set('_matchor_full_name', $filter->get('_eq_full_name') . category::FULL_NAME_EQUAL_MATCH_STRING); } $filter->unsetByName('_eq_full_name'); if ($filter->get('_in_full_name')) { $fullnames = explode(',', $filter->get('_in_full_name')); $fullnameIn = ''; foreach ($fullnames as $fullname) { $fullnameIn .= $fullname . category::FULL_NAME_EQUAL_MATCH_STRING . ','; } $filter->set('_matchor_full_name', $fullnameIn); $filter->unsetByName('_in_full_name'); } $categories = $filter->get("_in_ancestor_id"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryIdsToAllSubCategoriesIdsParsed($categories); if ($categoriesParsed !== '' || $categories == '') { $filter->set("_likex_full_ids", $categoriesParsed); } else { $filter->set("_likex_full_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } $filter->unsetByName('_in_ancestor_id'); if ($filter->get('_likex_full_ids')) { $fullids = explode(',', $filter->get('_likex_full_ids')); $fullIdsIn = ''; foreach ($fullids as $fullid) { $fullIdsIn .= $fullid . '\\*,'; } $filter->set('_matchor_full_ids', $fullIdsIn); $filter->unsetByName('_likex_full_ids'); } if ($filter->get('_eq_full_ids')) { $filter->set('_matchor_full_ids', $filter->get('_eq_full_ids') . category::FULL_IDS_EQUAL_MATCH_STRING); } $filter->unsetByName('_eq_full_ids'); if ($filter->get('_likex_name_or_reference_id')) { $names = $filter->get('_likex_name_or_reference_id'); KalturaLog::debug("Attach free text [{$names}]"); $additionalConditions = array(); if (preg_match('/^"[^"]+"$/', $names)) { $name = str_replace('"', '', $names); $name = SphinxUtils::escapeString($name); $name = "^{$name}\$"; $additionalConditions[] = "@(" . categoryFilter::NAME_REFERNCE_ID . ") {$name}\\\\*"; } else { if (strpos($names, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $names); $namesArr = explode(baseObjectFilter::IN_SEPARATOR, $names); foreach ($namesArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($namesArr[$valIndex]); } else { $namesArr[$valIndex] = SphinxUtils::escapeString($valValue); } } foreach ($namesArr as $name) { $additionalConditions[] = "@(" . categoryFilter::NAME_REFERNCE_ID . ") {$name}\\\\*"; } } else { $namesArr = explode(baseObjectFilter::AND_SEPARATOR, $names); foreach ($namesArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($namesArr[$valIndex]); } else { $namesArr[$valIndex] = SphinxUtils::escapeString($valValue); } } $namesArr = array_unique($namesArr); $nameExpr = implode(baseObjectFilter::AND_SEPARATOR, $namesArr); $additionalConditions[] = "@(" . categoryFilter::NAME_REFERNCE_ID . ") {$nameExpr}\\\\*"; } } if (count($additionalConditions)) { $additionalConditions = array_unique($additionalConditions); $matches = reset($additionalConditions); if (count($additionalConditions) > 1) { $matches = '( ' . implode(' ) | ( ', $additionalConditions) . ' )'; } $this->matchClause[] = $matches; } } $filter->unsetByName('_likex_name_or_reference_id'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { $categoriesAncestorParsed = null; $categories = $filter->get("_in_category_ancestor_id"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesAncestorParsed = $filter->categoryIdsToAllSubCategoriesIdsParsed($categories); if (!($categoriesAncestorParsed !== '' || $categories == '')) { $categoriesAncestorParsed = category::CATEGORY_ID_THAT_DOES_NOT_EXIST; } } $filter->unsetByName('_in_category_ancestor_id'); $categories = $filter->get("_matchor_categories_ids"); if ($categories !== null) { //if the category exist or the category name is an empty string if (is_null($categoriesAncestorParsed)) { $categoriesParsed = $filter->categoryIdsToIdsParsed($categories); } else { $categoriesParsed = $categoriesAncestorParsed; } if ($categoriesParsed !== '' || $categories == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } else { $filter->set("_matchor_categories_ids", $categoriesAncestorParsed); } $categories = $filter->get("_matchand_categories_ids"); if ($categories !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryIdsToIdsParsed($categories); if ($categoriesParsed !== '' || $categories == '') { $filter->set("_matchand_categories_ids", $categoriesParsed); } else { $filter->set("_matchand_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } } $matchAndCats = $filter->get("_matchand_categories"); if ($matchAndCats !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($matchAndCats); if ($categoriesParsed !== '' || $matchAndCats == '') { $filter->set("_matchand_categories_ids", $categoriesParsed); } else { $filter->set("_matchand_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_matchand_categories'); } $matchOrCats = $filter->get("_matchor_categories"); if ($matchOrCats !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($matchOrCats); if ($categoriesParsed !== '' || $matchOrCats == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_matchor_categories'); } // match categories by full name $CatFullNameIn = $filter->get("_in_categories_full_name"); if ($CatFullNameIn !== null) { //if the category exist or the category name is an empty string $categoriesParsed = $filter->categoryFullNamesToIdsParsed($CatFullNameIn); if ($categoriesParsed !== '' || $CatFullNameIn == '') { $filter->set("_matchor_categories_ids", $categoriesParsed); } else { $filter->set("_matchor_categories_ids", category::CATEGORY_ID_THAT_DOES_NOT_EXIST); } $filter->unsetByName('_in_categories_full_name'); } $matchOrRoots = array(); if ($filter->is_set('_eq_root_entry_id')) { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX . ' ' . $filter->get('_eq_root_entry_id'); $filter->unsetByName('_eq_root_entry_id'); } if ($filter->is_set('_in_root_entry_id')) { $roots = explode(baseObjectFilter::IN_SEPARATOR, $filter->get('_in_root_entry_id')); foreach ($roots as $root) { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX . " {$root}"; } $filter->unsetByName('_in_root_entry_id'); } if ($filter->is_set('_is_root')) { if ($filter->get('_is_root')) { $filter->set('_notin_roots', entry::ROOTS_FIELD_ENTRY_PREFIX); } else { $matchOrRoots[] = entry::ROOTS_FIELD_ENTRY_PREFIX; } $filter->unsetByName('_is_root'); } if (count($matchOrRoots)) { $filter->set('_matchand_roots', $matchOrRoots); } // if ($filter->get("_matchor_duration_type") !== null) // $filter->set("_matchor_duration_type", $filter->durationTypesToIndexedStrings($filter->get("_matchor_duration_type"))); if ($filter->get(baseObjectFilter::ORDER) === "recent" || $filter->get(baseObjectFilter::ORDER) === "-recent") { $filter->set("_lte_available_from", time()); //$filter->set("_gteornull_end_date", time()); // schedule not finished $filter->set(baseObjectFilter::ORDER, "-available_from"); } if ($filter->get(baseObjectFilter::ORDER) === "+recent") { $filter->set(baseObjectFilter::ORDER, "+available_from"); } if ($filter->get('_free_text')) { $freeTexts = $filter->get('_free_text'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($freeTexts); } if (preg_match('/^"[^"]+"$/', $freeTexts)) { $freeText = str_replace('"', '', $freeTexts); $freeText = SphinxUtils::escapeString($freeText); $freeText = "^{$freeText}\$"; $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } else { if (strpos($freeTexts, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $freeTexts); $freeTextsArr = explode(baseObjectFilter::IN_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } foreach ($freeTextsArr as $freeText) { $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } } else { $freeTextsArr = explode(baseObjectFilter::AND_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 0) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = SphinxUtils::escapeString($valValue); } } $freeTextsArr = array_unique($freeTextsArr); $freeTextExpr = implode(baseObjectFilter::AND_SEPARATOR, $freeTextsArr); $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeTextExpr}"; } } if (count($additionalConditions)) { $additionalConditions = array_unique($additionalConditions); $matches = reset($additionalConditions); if (count($additionalConditions) > 1) { $matches = '( ' . implode(' ) | ( ', $additionalConditions) . ' )'; } $this->matchClause[] = $matches; } } $filter->unsetByName('_free_text'); return parent::applyFilterFields($filter); }
protected function applyFilterFields(baseObjectFilter $filter) { if ($filter->get('_in_status')) { $statusList = explode(',', $filter->get('_in_status')); $statusList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::STATUS, $statusList); $filter->set('_in_status', implode(',', $statusList)); } if ($filter->get('_eq_status')) { $filter->set('_eq_status', categoryKuser::getSearchIndexFieldValue(categoryKuserPeer::STATUS, $filter->get('_eq_status'), kCurrentContext::getCurrentPartnerId())); } if ($filter->get('_in_update_method')) { $updateMethodList = explode(',', $filter->get('_in_update_method')); $updateMethodList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::UPDATE_METHOD, $updateMethodList); $filter->set('_in_update_method', implode(',', $updateMethodList)); } if ($filter->get('_eq_update_method')) { $filter->set('_eq_update_method', categoryKuser::getSearchIndexFieldValue(categoryKuserPeer::UPDATE_METHOD, $filter->get('_eq_update_method'), kCurrentContext::getCurrentPartnerId())); } if (!is_null($filter->get('_eq_permission_level'))) { $permissionLevel = $filter->get('_eq_permission_level'); $permissionNamesList = categoryKuser::getPermissionNamesByPermissionLevel($permissionLevel); $negativePermissionNamesList = $this->fixPermissionNamesListForSphinx($permissionLevel); if ($negativePermissionNamesList) { $filter->set('_notcontains_permission_names', implode(',', $negativePermissionNamesList)); } if ($filter->get('_matchand_permission_names')) { $permissionNamesList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList); $criterion = $this->getNewCriterion(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList, baseObjectFilter::MATCH_AND); $this->addAnd($criterion); } else { $filter->set('_matchand_permission_names', $permissionNamesList); } $filter->unsetByName('_eq_permission_level'); } if ($filter->get('_in_permission_level')) { $permissionLevels = $filter->get('_in_permission_level'); $permissionLevels = explode(',', $permissionLevels); foreach ($permissionLevels as $permissionLevel) { $permissionNamesList = categoryKuser::getPermissionNamesByPermissionLevel($permissionLevel); $permissionNamesList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList); $criterion = $this->getNewCriterion(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList, baseObjectFilter::MATCH_AND); $this->addOr($criterion); } $filter->unsetByName('_in_permission_level'); } if ($filter->get('_matchor_permission_names')) { $permissionNamesList = explode(',', $filter->get('_matchor_permission_names')); $permissionNamesList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList); $filter->set('_matchor_permission_names', implode(',', $permissionNamesList)); } if ($filter->get('_matchand_permission_names')) { $permissionNamesList = explode(',', $filter->get('_matchand_permission_names')); $permissionNamesList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList); $filter->set('_matchand_permission_names', implode(',', $permissionNamesList)); } if ($filter->get('_notcontains_permission_names')) { $permissionNamesList = explode(',', $filter->get('_notcontains_permission_names')); $permissionNamesList = $this->translateToSearchIndexFieldValue(categoryKuserPeer::PERMISSION_NAMES, $permissionNamesList); $filter->set('_notcontains_permission_names', $permissionNamesList); } if ($filter->get('_eq_category_full_ids')) { $filter->set('_eq_category_full_ids', $filter->get('_eq_category_full_ids') . category::FULL_IDS_EQUAL_MATCH_STRING); } return parent::applyFilterFields($filter); }
/** * Applies all filter fields and unset the handled fields * * @param baseObjectFilter $filter */ protected function applyFilterFields(baseObjectFilter $filter) { if ($filter->get("_matchand_categories") !== null) { $filter->set("_matchand_categories_ids", $filter->categoryNamesToIds($filter->get("_matchand_categories"))); $filter->unsetByName('_matchand_categories'); } if ($filter->get("_matchor_categories") !== null) { $filter->set("_matchor_categories_ids", $filter->categoryNamesToIds($filter->get("_matchor_categories"))); $filter->unsetByName('_matchor_categories'); } // if ($filter->get("_matchor_duration_type") !== null) // $filter->set("_matchor_duration_type", $filter->durationTypesToIndexedStrings($filter->get("_matchor_duration_type"))); if ($filter->get(baseObjectFilter::ORDER) === "recent") { $filter->set("_lte_available_from", time()); $filter->set("_gteornull_end_date", time()); // schedule not finished $filter->set(baseObjectFilter::ORDER, "-available_from"); } if ($filter->get('_free_text')) { $freeTexts = $filter->get('_free_text'); KalturaLog::debug("Attach free text [{$freeTexts}]"); $additionalConditions = array(); $advancedSearch = $filter->getAdvancedSearch(); if ($advancedSearch) { $additionalConditions = $advancedSearch->getFreeTextConditions($freeTexts); } if (preg_match('/^"[^"]+"$/', $freeTexts)) { $freeText = str_replace('"', '', $freeTexts); $freeText = "^{$freeText}\$"; $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } else { if (strpos($freeTexts, baseObjectFilter::IN_SEPARATOR) > 0) { str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $freeTexts); $freeTextsArr = explode(baseObjectFilter::IN_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = $valValue; } } foreach ($freeTextsArr as $freeText) { $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeText}"; } } else { $freeTextsArr = explode(baseObjectFilter::AND_SEPARATOR, $freeTexts); foreach ($freeTextsArr as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($freeTextsArr[$valIndex]); } else { $freeTextsArr[$valIndex] = $valValue; } } $freeTextExpr = implode(baseObjectFilter::AND_SEPARATOR, $freeTextsArr); $additionalConditions[] = "@(" . entryFilter::FREE_TEXT_FIELDS . ") {$freeTextExpr}"; } } if (count($additionalConditions)) { $this->matchClause[] = implode(' | ', $additionalConditions); } } $filter->unsetByName('_free_text'); return parent::applyFilterFields($filter); }
/** * Applies all filter fields and unset the handled fields * * @param baseObjectFilter $filter */ protected function applyFilterFields(baseObjectFilter $filter) { foreach ($filter->fields as $field => $val) { if (is_null($val) || !strlen($val)) { // KalturaLog::debug("Skip field[$field] value is null"); continue; } $fieldParts = explode(baseObjectFilter::FILTER_PREFIX, $field, 3); if (count($fieldParts) != 3) { KalturaLog::debug("Skip field[{$field}] has [" . count($fieldParts) . "] parts"); continue; } list($prefix, $operator, $fieldName) = $fieldParts; $mySqlField = $fieldName; $mySqlCriterionField = $fieldName; $fieldNamesArr = explode(baseObjectFilter::OR_SEPARATOR, $fieldName); if (count($fieldNamesArr) > 1) { $mySqlFieldNames = array(); foreach ($fieldNamesArr as $fieldName) { $mySqlField = $this->getSearchFieldName($fieldName); $mySqlFieldNames[] = $mySqlField; } $mySqlCriterionField = $mySqlField; $mySqlField = implode(',', $mySqlFieldNames); $vals = is_array($val) ? $val : array_unique(explode(baseObjectFilter::OR_SEPARATOR, $val)); $val = implode(' ', $vals); } elseif (!$this->hasMatchableField($fieldName)) { KalturaLog::debug("Skip field[{$field}] has no matchable for name[{$fieldName}]"); continue; } else { $mySqlField = $this->getMySqlFieldName($fieldName); $mySqlCriterionField = $mySqlField; } $valStr = print_r($val, true); KalturaLog::debug("Attach field[{$fieldName}] as search field[{$mySqlField}] and comparison[{$operator}] for value[{$valStr}]"); switch ($operator) { case baseObjectFilter::MULTI_LIKE_OR: case baseObjectFilter::MATCH_OR: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . $valValue . '"'; } else { $vals[$valIndex] = $valValue; } } if (count($vals)) { $val = implode(' ', $vals); $this->add($mySqlCriterionField, "MATCH({$mySqlField}) AGAINST({$val})", Criteria::CUSTOM); $filter->unsetByName($field); } break; case baseObjectFilter::NOT_IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . $valValue . '"'; } else { $vals[$valIndex] = $valValue; } } if (count($vals)) { $vals = array_slice($vals, 0, self::MAX_IN_VALUES); $val = '-' . implode(' -', $vals); $this->add($mySqlCriterionField, "MATCH({$mySqlField}) AGAINST({$val})", Criteria::CUSTOM); $filter->unsetByName($field); } break; case baseObjectFilter::IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . $valValue . '"'; } else { $vals[$valIndex] = $valValue; } } if (count($vals)) { $vals = array_slice($vals, 0, self::MAX_IN_VALUES); $val = '"' . implode('" "', $vals) . '"'; $this->add($mySqlCriterionField, "MATCH({$mySqlField}) AGAINST({$val})", Criteria::CUSTOM); $filter->unsetByName($field); } break; case baseObjectFilter::EQ: if (is_numeric($val) || strlen($val) > 1) { $val = '"' . $val . '"'; $this->add($mySqlCriterionField, "MATCH({$mySqlField}) AGAINST({$val})", Criteria::CUSTOM); $filter->unsetByName($field); } break; case baseObjectFilter::MULTI_LIKE_AND: case baseObjectFilter::MATCH_AND: case baseObjectFilter::LIKE: $vals = is_array($val) ? $val : explode(' ', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . $valValue . '"'; } else { $vals[$valIndex] = $valValue; } } if (count($vals)) { $val = '+' . implode(' +', $vals); $this->add($mySqlCriterionField, "MATCH({$mySqlField}) AGAINST({$val})", Criteria::CUSTOM); $filter->unsetByName($field); } break; default: KalturaLog::debug("Skip field[{$field}] has no opertaor[{$operator}]"); } } }
/** * Applies all filter fields and unset the handled fields * * @param baseObjectFilter $filter */ protected function applyFilterFields(baseObjectFilter $filter) { foreach ($filter->fields as $field => $val) { if (is_null($val) || !strlen($val)) { // KalturaLog::debug("Skip field[$field] value is null"); continue; } $fieldParts = explode(baseObjectFilter::FILTER_PREFIX, $field, 3); if (count($fieldParts) != 3) { KalturaLog::debug("Skip field[{$field}] has [" . count($fieldParts) . "] parts"); continue; } list($prefix, $operator, $fieldName) = $fieldParts; $fieldNamesArr = explode(baseObjectFilter::OR_SEPARATOR, $fieldName); if (count($fieldNamesArr) > 1) { $sphinxFieldNames = array(); foreach ($fieldNamesArr as $fieldName) { $sphinxField = $this->getSphinxFieldName($fieldName); $type = $this->getSphinxFieldType($sphinxField); $sphinxFieldNames[] = $sphinxField; } $sphinxField = '(' . implode(',', $sphinxFieldNames) . ')'; $vals = is_array($val) ? $val : array_unique(explode(baseObjectFilter::OR_SEPARATOR, $val)); $val = implode(' ', $vals); } elseif (!$this->hasMatchableField($fieldName)) { KalturaLog::debug("Skip field[{$field}] has no matchable for name[{$fieldName}]"); continue; } else { $sphinxField = $this->getSphinxFieldName($fieldName); $type = $this->getSphinxFieldType($sphinxField); } $valStr = print_r($val, true); KalturaLog::debug("Attach field[{$fieldName}] as sphinx field[{$sphinxField}] of type [{$type}] and comparison[{$operator}] for value[{$valStr}]"); switch ($operator) { case baseObjectFilter::MULTI_LIKE_OR: case baseObjectFilter::MATCH_OR: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue); } } if (count($vals)) { $val = implode(' | ', $vals); $this->matchClause[] = "@{$sphinxField} {$val}"; $filter->unsetByName($field); } break; case baseObjectFilter::NOT_IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue); } } if (count($vals)) { $vals = array_slice($vals, 0, self::MAX_IN_VALUES); $val = '!' . implode(' & !', $vals); $this->matchClause[] = "@{$sphinxField} {$val}"; $filter->unsetByName($field); } break; case baseObjectFilter::IN: $vals = is_array($val) ? $val : explode(',', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue); } } if (count($vals)) { $vals = array_slice($vals, 0, self::MAX_IN_VALUES); $val = '(^' . implode('$ | ^', $vals) . '$)'; $this->matchClause[] = "@{$sphinxField} {$val}"; $filter->unsetByName($field); } break; case baseObjectFilter::EQ: if (is_numeric($val) || strlen($val) > 1) { $val = SphinxUtils::escapeString($val); $this->matchClause[] = "@{$sphinxField} ^{$val}\$"; $filter->unsetByName($field); } break; case baseObjectFilter::MULTI_LIKE_AND: case baseObjectFilter::MATCH_AND: case baseObjectFilter::LIKE: $vals = is_array($val) ? $val : explode(' ', $val); foreach ($vals as $valIndex => $valValue) { if (!is_numeric($valValue) && strlen($valValue) <= 1) { unset($vals[$valIndex]); } elseif (preg_match('/[\\s\\t]/', $valValue)) { $vals[$valIndex] = '"' . SphinxUtils::escapeString($valValue) . '"'; } else { $vals[$valIndex] = SphinxUtils::escapeString($valValue); } } if (count($vals)) { $val = implode(' & ', $vals); $this->matchClause[] = "@{$sphinxField} {$val}"; $filter->unsetByName($field); } break; default: KalturaLog::debug("Skip field[{$field}] has no opertaor[{$operator}]"); } } }