/** * Returns true if kuser or current kuser is entitled to entryId * @param entry $entry * @param int $kuser * @return bool */ public static function isEntryEntitled(entry $entry, $kuserId = null) { if ($entry->getParentEntryId()) { $entry = $entry->getParentEntry(); if (!$entry) { KalturaLog::debug('Parent entry not found, cannot validate entitlement'); return false; } } $ks = ks::fromSecureString(kCurrentContext::$ks); if (self::$entitlementForced === false) { KalturaLog::debug('Entitlement forced to be disabled'); return true; } // entry is entitled when entitlement is disable // for actions with no ks - need to check if partner have default entitlement feature enable. if (!self::getEntitlementEnforcement() && $ks) { KalturaLog::debug('Entry entitled: entitlement disabled'); return true; } $partner = $entry->getPartner(); if (!$ks && !$partner->getDefaultEntitlementEnforcement()) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: no ks and default is with no enforcement'); return true; } if ($ks && in_array($entry->getId(), $ks->getDisableEntitlementForEntry())) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: ks disble entitlement for this entry'); return true; } $kuserId = self::getKuserIdForEntitlement($kuserId, $ks); if ($ks && $kuserId) { // kuser is set on the entry as creator or uploader if ($kuserId != '' && $entry->getKuserId() == $kuserId) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: ks user is the same as entry->kuserId or entry->creatorKuserId [' . $kuserId . ']'); return true; } // kuser is set on the entry entitled users edit or publish $entitledKusers = array_merge(explode(',', $entry->getEntitledKusersEdit()), explode(',', $entry->getEntitledKusersPublish())); if (in_array($kuserId, $entitledKusers)) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: ks user is the same as entry->entitledKusersEdit or entry->entitledKusersPublish'); return true; } } if (!$ks) { // entry that doesn't belong to any category is public //when ks is not provided - the entry is still public (for example - download action) $categoryEntry = categoryEntryPeer::retrieveOneActiveByEntryId($entry->getId()); if (!$categoryEntry) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: entry does not belong to any category'); return true; } } $ksPrivacyContexts = null; if ($ks) { $ksPrivacyContexts = $ks->getPrivacyContext(); } $allCategoriesEntry = array(); if (PermissionPeer::isValidForPartner(PermissionName::FEATURE_DISABLE_CATEGORY_LIMIT, $partner->getId())) { if (!$ksPrivacyContexts || trim($ksPrivacyContexts) == '') { $categoryEntry = categoryEntryPeer::retrieveOneByEntryIdStatusPrivacyContextExistance($entry->getId(), array(CategoryEntryStatus::PENDING, CategoryEntryStatus::ACTIVE)); if ($categoryEntry) { KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: entry belongs to public category and privacy context on the ks is not set'); return true; } } else { $allCategoriesEntry = categoryEntryPeer::retrieveActiveAndPendingByEntryIdAndPrivacyContext($entry->getId(), $ksPrivacyContexts); } } else { $allCategoriesEntry = categoryEntryPeer::retrieveActiveAndPendingByEntryId($entry->getId()); if ($ks && (!$ksPrivacyContexts || trim($ksPrivacyContexts) == '') && !count($allCategoriesEntry)) { // entry that doesn't belong to any category is public KalturaLog::debug('Entry [' . print_r($entry->getId(), true) . '] entitled: entry does not belong to any category and privacy context on the ks is not set'); return true; } } return self::isMemberOfCategory($allCategoriesEntry, $entry, $partner, $kuserId, $ks, $ksPrivacyContexts); }