function resolveCategoryTag(Tag $tag) { $c = KalturaCriteria::create(categoryPeer::OM_CLASS); $c->add(categoryPeer::PARTNER_ID, $tag->getPartnerId()); $categoryFilter = new categoryFilter(); $categoryFilter->set('_mlikeand_tags', $tag->getTag()); $categoryFilter->attachToCriteria($c); $count = $c->getRecordsCount(); if (!$count) { $tag->delete(); } }
private static function executeQueryByType($partner_id, $report_type, $report_flavor, reportsInputFilter $input_filter, $page_size, $page_index, $order_by, $object_ids = null, $offset = null) { $start = microtime(true); try { $add_search_text = false; $has_object_ids = false; if ($input_filter instanceof endUserReportsInputFilter) { $has_object_ids = $input_filter->categories; } $has_object_ids = $has_object_ids || $object_ids; if (is_numeric($report_type)) { $file_path = myReportsSqlFileMgr::getSqlFilePath(self::$type_map[$report_type], self::$flavor_map[$report_flavor], $add_search_text, $has_object_ids ? true : false, $input_filter); } else { if (strpos($report_type, ".") === 0 || strpos($report_type, "/") === 0 || strpos($report_type, "http") === 0) { throw new kCoreException("Will not search for invalid report_type [{$report_type}", kCoreException::INVALID_QUERY); } $file_path = dirname(__FILE__) . "/" . $report_type . ".sql"; } $sql_raw_content = file_get_contents($file_path); if (!$sql_raw_content) { $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaReportProvider'); foreach ($pluginInstances as $pluginInstance) { $res = $pluginInstance->getReportResult($partner_id, $report_type, $report_flavor, $object_ids, $order_by); if (!is_null($res)) { return $res; } } throw new kCoreException("Cannot find sql for [{$report_type}] [{$report_flavor}] at [{$file_path}]", kCoreException::QUERY_NOT_FOUND); } $entryFilter = new entryFilter(); $entryFilter->setPartnerSearchScope($partner_id); $shouldSelectFromSearchEngine = false; $category_ids_clause = "1=1"; if ($input_filter instanceof endUserReportsInputFilter) { if ($input_filter->playbackContext || $input_filter->ancestorPlaybackContext) { $categoryFilter = new categoryFilter(); if ($input_filter->playbackContext && $input_filter->ancestorPlaybackContext) { $categoryIds = category::CATEGORY_ID_THAT_DOES_NOT_EXIST; } else { if ($input_filter->playbackContext) { $categoryFilter->set("_in_full_name", $input_filter->playbackContext); } if ($input_filter->ancestorPlaybackContext) { $categoryFilter->set("_matchor_likex_full_name", $input_filter->ancestorPlaybackContext); } $c = KalturaCriteria::create(categoryPeer::OM_CLASS); $categoryFilter->attachToCriteria($c); $c->applyFilters(); $categoryIdsFromDB = $c->getFetchedIds(); if (count($categoryIdsFromDB)) { $categoryIds = implode(",", $categoryIdsFromDB); } else { $categoryIds = category::CATEGORY_ID_THAT_DOES_NOT_EXIST; } } $category_ids_clause = "ev.context_id in ( {$categoryIds} )"; } } if ($input_filter->categories) { $entryFilter->set("_matchor_categories", $input_filter->categories); $shouldSelectFromSearchEngine = true; } if ($input_filter->keywords) { if ($input_filter->search_in_tags) { $entryFilter->set("_free_text", $input_filter->keywords); } else { $entryFilter->set("_like_admin_tags", $input_filter->keywords); } $shouldSelectFromSearchEngine = true; } $entryIdsFromDB = array(); if ($shouldSelectFromSearchEngine) { $c = KalturaCriteria::create(entryPeer::OM_CLASS); $entryFilter->attachToCriteria($c); $c->applyFilters(); $entryIdsFromDB = $c->getFetchedIds(); if ($c->getRecordsCount() > count($entryIdsFromDB)) { throw new kCoreException('Search is to general', kCoreException::SEARCH_TOO_GENERAL); } if (!count($entryIdsFromDB)) { $entryIdsFromDB[] = entry::ENTRY_ID_THAT_DOES_NOT_EXIST; } } $obj_ids_clause = null; if ($object_ids) { //the object ids are not supposed to include single quotes - if they do have them - remove them $object_ids = str_replace("'", '', $object_ids); // quote all the objects with SINGLE-QUOTES $object_ids_str = "'" . str_replace(",", "','", $object_ids) . "'"; if ($report_type == self::REPORT_TYPE_CONTENT_CONTRIBUTIONS) { $obj_ids_clause = "en.entry_media_source_id in ( {$object_ids_str})"; } else { if ($report_type == self::REPORT_TYPE_TOP_SYNDICATION) { $obj_ids_clause = "ev.domain_id in ( {$object_ids_str})"; } else { if ($report_type == self::REPORT_TYPE_MAP_OVERLAY) { $obj_ids_clause = "ev.country_id in ( {$object_ids_str})"; } else { if ($report_type == self::REPORT_TYPE_ADMIN_CONSOLE) { $obj_ids_clause = "dim_partner.partner_id in ( {$object_ids_str})"; } else { if ($report_type == self::REPORT_TYPE_PARTNER_USAGE || $report_type == self::REPORT_TYPE_VAR_USAGE || $report_type == self::REPORT_TYPE_PEAK_STORAGE) { $obj_ids_clause = "partner_id in ({$object_ids_str})"; } else { if ($report_type == self::REPORT_TYPE_PLATFORMS) { $obj_ids_clause = "device in ({$object_ids_str})"; } else { $objectIds = explode(',', $object_ids); $entryIds = "'" . implode("','", array_merge($objectIds, $entryIdsFromDB)) . "'"; $obj_ids_clause = "ev.entry_id in ( {$entryIds} )"; } } } } } } } elseif (count($entryIdsFromDB)) { $entryIds = "'" . implode("','", $entryIdsFromDB) . "'"; $obj_ids_clause = "ev.entry_id in ( {$entryIds} )"; } if ($input_filter instanceof endUserReportsInputFilter && $input_filter->userIds != null && ($report_type == self::REPORT_TYPE_USER_USAGE || $report_type == self::REPORT_TYPE_SPECIFIC_USER_USAGE)) { $userFilter = new kuserFilter(); $userFilter->set("_in_puser_id", $input_filter->userIds); $c = KalturaCriteria::create(kuserPeer::OM_CLASS); $userFilter->attachToCriteria($c); $c->applyFilters(); $userIdsFromDB = $c->getFetchedIds(); if (count($userIdsFromDB)) { $kuserIds = implode(",", $userIdsFromDB); } else { $kuserIds = kuser::KUSER_ID_THAT_DOES_NOT_EXIST; } $obj_ids_clause = "u.kuser_id in ( {$kuserIds} )"; } if (is_numeric($report_type)) { $order_by = self::getOrderBy(self::$type_map[$report_type], $order_by); } $query = self::getReplacedSql($sql_raw_content, $partner_id, $input_filter, $page_size, $page_index, $order_by, $obj_ids_clause, $category_ids_clause, $offset); if (is_numeric($report_type)) { $query_header = "/* -- " . self::$type_map[$report_type] . " " . self::$flavor_map[$report_flavor] . " -- */\n"; } else { $query_header = "/* -- " . $report_type . " -- */\n"; } KalturaLog::log("\n{$query_header}{$query}"); $res = self::executeQuery($query); $end = microtime(true); KalturaLog::log("Query took [" . ($end - $start) . "]"); return $res; } catch (Exception $ex) { KalturaLog::log($ex->getMessage()); // TODO - write proeper error if ($ex->getCode() == kCoreException::SEARCH_TOO_GENERAL) { } throw $ex; throw new Exception("Error while processing report for [{$partner_id} , {$report_type} , {$report_flavor}]"); } }
/** * @param Tag $tag * @return int */ private function resolveCategoryTag(Tag $tag) { $c = KalturaCriteria::create(categoryPeer::OM_CLASS); $c->add(categoryPeer::PARTNER_ID, $tag->getPartnerId()); $categoryFilter = new categoryFilter(); $tagString = str_replace(kTagFlowManager::$specialCharacters, kTagFlowManager::$specialCharactersReplacement, $tag->getTag()); $categoryFilter->set('_mlikeand_tags', $tagString); $categoryFilter->attachToCriteria($c); $c->applyFilters(); $count = $c->getRecordsCount(); if (!$count) { $tag->delete(); return 1; } else { $tag->setInstanceCount($count); $tag->save(); return 1; } return 0; }
public function addIndexCategoryInheritedTreeJob($fullIdsStartsWithCategoryId) { $featureStatusToRemoveIndex = new kFeatureStatus(); $featureStatusToRemoveIndex->setType(IndexObjectType::CATEGORY); $featureStatusesToRemove = array(); $featureStatusesToRemove[] = $featureStatusToRemoveIndex; $filter = new categoryFilter(); $filter->setFullIdsStartsWith($fullIdsStartsWithCategoryId); $filter->setInheritanceTypeEqual(InheritanceType::INHERIT); $c = KalturaCriteria::create(categoryPeer::OM_CLASS); $filter->attachToCriteria($c); KalturaCriterion::disableTag(KalturaCriterion::TAG_ENTITLEMENT_CATEGORY); $categories = categoryPeer::doSelect($c); KalturaCriterion::restoreTag(KalturaCriterion::TAG_ENTITLEMENT_CATEGORY); if (count($categories)) { kJobsManager::addIndexJob($this->getPartnerId(), IndexObjectType::CATEGORY, $filter, true, $featureStatusesToRemove); } }
protected function addIndexCategoryJob($fullIdsStartsWithCategoryId, $categoriesIdsIn, $lock = false) { $jobSubType = IndexObjectType::CATEGORY; if ($lock) { $jobSubType = IndexObjectType::LOCK_CATEGORY; $featureStatusToRemoveIndex = new kFeatureStatus(); $featureStatusToRemoveIndex->setType(IndexObjectType::LOCK_CATEGORY); } else { $featureStatusToRemoveIndex = new kFeatureStatus(); $featureStatusToRemoveIndex->setType(IndexObjectType::CATEGORY); } $featureStatusesToRemove = array(); $featureStatusesToRemove[] = $featureStatusToRemoveIndex; $filter = new categoryFilter(); $filter->setFullIdsStartsWith($fullIdsStartsWithCategoryId); $filter->setIdIn($categoriesIdsIn); $c = KalturaCriteria::create(categoryPeer::OM_CLASS); $filter->attachToCriteria($c); KalturaCriterion::disableTag(KalturaCriterion::TAG_ENTITLEMENT_CATEGORY); categoryPeer::doSelect($c); KalturaCriterion::restoreTag(KalturaCriterion::TAG_ENTITLEMENT_CATEGORY); if ($c->getRecordsCount() > 0) { kJobsManager::addIndexJob($this->getPartnerId(), $jobSubType, $filter, true, $featureStatusesToRemove); } }