/** * Override in order to filter objects returned from doSelect. * * @param array $selectResults The array of objects to filter. * @param Criteria $criteria */ public static function filterSelectResults(&$selectResults, Criteria $criteria) { if (empty($selectResults)) { return; } $partnerId = kCurrentContext::getCurrentPartnerId(); $partner = PartnerPeer::retrieveByPK($partnerId); if ($partner && $partner->getShouldApplyAccessControlOnEntryMetadata() && !kCurrentContext::$is_admin_session) { if (is_null(self::$accessControlScope)) { self::$accessControlScope = new accessControlScope(); self::$accessControlScope->setContexts(array(ContextType::METADATA)); } $selectResults = array_filter($selectResults, array('entryPeer', 'filterByAccessControl')); if ($criteria instanceof KalturaCriteria) { $criteria->setRecordsCount(count($selectResults)); } } $removedRecordsCount = 0; if (!kEntitlementUtils::getEntitlementEnforcement() && !is_null(kCurrentContext::$ks) || !self::$filerResults || !kEntitlementUtils::getInitialized()) { // if initEntitlement hasn't run - skip filters. return parent::filterSelectResults($selectResults, $criteria); } if (is_null(kCurrentContext::$ks) && count($selectResults)) { $entry = $selectResults[0]; $partner = $entry->getPartner(); if (!$partner) { throw new kCoreException('entry partner not found'); } if (!$partner->getDefaultEntitlementEnforcement() || !PermissionPeer::isValidForPartner(PermissionName::FEATURE_ENTITLEMENT, $partner->getId())) { return parent::filterSelectResults($selectResults, $criteria); } } foreach ($selectResults as $key => $entry) { if (!kEntitlementUtils::isEntryEntitled($entry)) { unset($selectResults[$key]); $removedRecordsCount++; } } if ($criteria instanceof KalturaCriteria) { $recordsCount = $criteria->getRecordsCount(); $criteria->setRecordsCount($recordsCount - $removedRecordsCount); } self::$filerResults = false; parent::filterSelectResults($selectResults, $criteria); }