Example #1
0
 /**
  * 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);
 }