/**
  * @param EntryDistribution $entryDistribution
  * @param entry $entry
  * @param DistributionProfile $distributionProfile
  * @return boolean
  */
 public static function assignAssets(EntryDistribution $entryDistribution, entry $entry, DistributionProfile $distributionProfile)
 {
     $submittingStatuses = array(EntryDistributionStatus::PENDING, EntryDistributionStatus::QUEUED, EntryDistributionStatus::SUBMITTING, EntryDistributionStatus::IMPORT_SUBMITTING, EntryDistributionStatus::ERROR_SUBMITTING);
     // if not in first submmiting status then it's an update and need to check if update is supported.
     if (!in_array($entryDistribution->getStatus(), $submittingStatuses)) {
         $distributionProvider = $distributionProfile->getProvider();
         if (!$distributionProvider) {
             KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider not found");
             return false;
         }
         if (!$distributionProvider->isUpdateEnabled() || !$distributionProvider->isMediaUpdateEnabled()) {
             KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider [" . $distributionProvider->getName() . "] does not support update");
             return false;
         }
     }
     $requiredAssetsConditions = $distributionProfile->getRequiredAssetDistributionRules();
     $optionalAssetsConditions = $distributionProfile->getOptionalAssetDistributionRules();
     $assetDistributionRules = array_merge($requiredAssetsConditions, $optionalAssetsConditions);
     if (!is_array($assetDistributionRules)) {
         return false;
     }
     $assetIds = array();
     $originalList = $entryDistribution->getAssetIds();
     $entryAssets = assetPeer::retrieveReadyByEntryId($entryDistribution->getEntryId());
     foreach ($assetDistributionRules as $assetDistributionRule) {
         /* @var $assetDistributionRule kAssetDistributionRule */
         foreach ($entryAssets as $asset) {
             /* @var $asset asset */
             if ($assetDistributionRule->fulfilled($asset)) {
                 $assetIds[] = $asset->getId();
             }
         }
     }
     $entryDistribution->setAssetIds($assetIds);
     return $originalList != $entryDistribution->getAssetIds();
 }
 /**
  * @param EntryDistribution $entryDistribution
  */
 public static function onEntryDistributionUpdateRequired(EntryDistribution $entryDistribution)
 {
     $distributionProfileId = $entryDistribution->getDistributionProfileId();
     $distributionProfile = DistributionProfilePeer::retrieveByPK($distributionProfileId);
     if (!$distributionProfile) {
         return true;
     }
     $distributionProvider = $distributionProfile->getProvider();
     if (!$distributionProvider) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider not found");
         return true;
     }
     if (!$distributionProvider->isUpdateEnabled()) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider [" . $distributionProvider->getName() . "] does not support update");
         return true;
     }
     $ignoreStatuses = array(EntryDistributionStatus::PENDING, EntryDistributionStatus::DELETED, EntryDistributionStatus::DELETING, EntryDistributionStatus::QUEUED, EntryDistributionStatus::REMOVED);
     if (in_array($entryDistribution->getStatus(), $ignoreStatuses)) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] status [" . $entryDistribution->getStatus() . "] does not require update");
         return true;
     }
     if ($entryDistribution->getDirtyStatus() == EntryDistributionDirtyStatus::UPDATE_REQUIRED) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] already requires update");
         return true;
     }
     $distributionProfileId = $entryDistribution->getDistributionProfileId();
     $distributionProfile = DistributionProfilePeer::retrieveByPK($distributionProfileId);
     if (!$distributionProfile) {
         KalturaLog::err("Entry distribution [" . $entryDistribution->getId() . "] profile [{$distributionProfileId}] not found");
         return true;
     }
     $distributionProvider = $distributionProfile->getProvider();
     if (!$distributionProvider->isUpdateEnabled()) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider [" . $distributionProvider->getName() . "] does not support update");
         return true;
     }
     if ($distributionProfile->getUpdateEnabled() != DistributionProfileActionStatus::AUTOMATIC) {
         KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] should not be updated automatically");
         $entryDistribution->setDirtyStatus(EntryDistributionDirtyStatus::UPDATE_REQUIRED);
         $entryDistribution->save();
         return true;
     }
     self::submitUpdateEntryDistribution($entryDistribution, $distributionProfile);
     return true;
 }
 /**
  * @param entry $entry
  * @param DistributionProfile $distributionProfile
  * @return EntryDistribution or null if failed to create.
  */
 public static function createEntryDistribution(entry $entry, DistributionProfile $distributionProfile)
 {
     $illegalEntryDistributionStatus = array(EntryDistributionStatus::SUBMITTING, EntryDistributionStatus::UPDATING, EntryDistributionStatus::DELETING, EntryDistributionStatus::IMPORT_SUBMITTING, EntryDistributionStatus::IMPORT_UPDATING);
     $entryDistribution = EntryDistributionPeer::retrieveByEntryAndProfileId($entry->getId(), $distributionProfile->getId());
     if (!$entryDistribution || $entryDistribution->getStatus() == EntryDistributionStatus::DELETED) {
         $entryDistribution = new EntryDistribution();
     } else {
         if (in_array($entryDistribution->getStatus(), $illegalEntryDistributionStatus)) {
             KalturaLog::err("Entry distribution already exist. entry [" . $entry->getId() . "] distribution profile [" . $distributionProfile->getId() . "] status [" . $entryDistribution->getStatus() . "]");
             return null;
         }
     }
     $entryDistribution->setEntryId($entry->getId());
     $entryDistribution->setPartnerId($entry->getPartnerId());
     $entryDistribution->setDistributionProfileId($distributionProfile->getId());
     $entryDistribution->setStatus(EntryDistributionStatus::PENDING);
     self::assignFlavorAssets($entryDistribution, $entry, $distributionProfile);
     self::assignThumbAssets($entryDistribution, $entry, $distributionProfile);
     self::assignAssets($entryDistribution, $entry, $distributionProfile);
     $entryDistribution->save();
     // need to save before checking validations
     $validationErrors = $distributionProfile->validateForSubmission($entryDistribution, DistributionAction::SUBMIT);
     $entryDistribution->setValidationErrorsArray($validationErrors);
     return $entryDistribution;
 }
Ejemplo n.º 4
0
 /**
  * @param EntryDistribution $entryDistribution
  * @param int $action enum from DistributionAction
  * @return array<kDistributionValidationError>
  */
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $validationErrors = array();
     $distributionProvider = $this->getProvider();
     if (!$distributionProvider) {
         KalturaLog::err("Entry distribution [" . $entryDistribution->getId() . "] provider [" . $this->getProviderType() . "] not found");
         return $validationErrors;
     }
     if ($action == DistributionAction::UPDATE || $entryDistribution->getStatus() == EntryDistributionStatus::READY || $entryDistribution->getStatus() == EntryDistributionStatus::ERROR_UPDATING) {
         if (!$distributionProvider->isUpdateEnabled() || !$distributionProvider->isMediaUpdateEnabled()) {
             KalturaLog::log("Entry distribution [" . $entryDistribution->getId() . "] provider [" . $distributionProvider->getName() . "] does not support update");
             return $validationErrors;
         }
     }
     $requiredFlavorParamsIds = $this->getRequiredFlavorParamsIdsArray();
     KalturaLog::log("Required Flavor Params Ids [" . print_r($requiredFlavorParamsIds, true) . "]");
     $entryFlavorAssets = assetPeer::retrieveReadyFlavorsByEntryId($entryDistribution->getEntryId());
     $requiredFlavorParamsIdsKeys = array_flip($requiredFlavorParamsIds);
     foreach ($entryFlavorAssets as $entryFlavorAsset) {
         $flavorParamsId = $entryFlavorAsset->getFlavorParamsId();
         if (isset($requiredFlavorParamsIdsKeys[$flavorParamsId])) {
             unset($requiredFlavorParamsIds[$requiredFlavorParamsIdsKeys[$flavorParamsId]]);
         }
     }
     foreach ($requiredFlavorParamsIds as $requiredFlavorParamsId) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_FLAVOR, $requiredFlavorParamsId);
     }
     $requiredThumbDimensions = $this->getRequiredThumbDimensionsObjects();
     KalturaLog::log("Required Thumb Dimensions [" . print_r($requiredThumbDimensions, true) . "]");
     $entryThumbAssets = assetPeer::retrieveReadyThumbnailsByEntryId($entryDistribution->getEntryId());
     $requiredThumbDimensionsWithKeys = array();
     foreach ($requiredThumbDimensions as $requiredThumbDimension) {
         $key = $requiredThumbDimension->getKey();
         $requiredThumbDimensionsWithKeys[$key] = $requiredThumbDimension;
     }
     foreach ($entryThumbAssets as $entryThumbAsset) {
         $key = $entryThumbAsset->getWidth() . 'x' . $entryThumbAsset->getHeight();
         if (isset($requiredThumbDimensionsWithKeys[$key])) {
             unset($requiredThumbDimensionsWithKeys[$key]);
         }
     }
     foreach ($requiredThumbDimensionsWithKeys as $key => $requiredThumbDimension) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_THUMBNAIL, $key);
     }
     $entryAssets = assetPeer::retrieveReadyByEntryId($entryDistribution->getEntryId());
     $requiredAssetDistributionRules = $this->getRequiredAssetDistributionRules();
     foreach ($requiredAssetDistributionRules as $entryAssetDistributionRule) {
         $foundMatchingAsset = false;
         /* @var $entryAssetDistributionRule kAssetDistributionRule */
         foreach ($entryAssets as $entryAsset) {
             /* @var $entryAsset asset */
             if ($entryAssetDistributionRule->fulfilled($entryAsset)) {
                 $foundMatchingAsset = true;
                 break;
             }
         }
         if (!$foundMatchingAsset) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_ASSET, $entryAssetDistributionRule->getValidationError());
         }
     }
     return $validationErrors;
 }
 /**
  * @param EntryDistribution $entryDistribution
  * @param DistributionProfile $distributionProfile
  * @param bool $submitWhenReady
  * @return BatchJob
  */
 public static function submitAddEntryDistribution(EntryDistribution $entryDistribution, DistributionProfile $distributionProfile, $submitWhenReady = true)
 {
     if ($distributionProfile->getStatus() != DistributionProfileStatus::ENABLED || $distributionProfile->getSubmitEnabled() == DistributionProfileActionStatus::DISABLED) {
         return null;
     }
     $validStatus = array(EntryDistributionStatus::ERROR_DELETING, EntryDistributionStatus::ERROR_SUBMITTING, EntryDistributionStatus::ERROR_UPDATING, EntryDistributionStatus::PENDING, EntryDistributionStatus::QUEUED, EntryDistributionStatus::READY, EntryDistributionStatus::REMOVED);
     if (!in_array($entryDistribution->getStatus(), $validStatus)) {
         KalturaLog::notice("wrong entry distribution status [" . $entryDistribution->getStatus() . "]");
         return null;
     }
     if ($submitWhenReady && $entryDistribution->getStatus() != EntryDistributionStatus::QUEUED) {
         $entryDistribution->setStatus(EntryDistributionStatus::QUEUED);
         $entryDistribution->save();
     }
     $validationErrors = $entryDistribution->getValidationErrors();
     if (!count($validationErrors)) {
         $sunrise = $entryDistribution->getSunrise(null);
         if ($sunrise) {
             $distributionProvider = $distributionProfile->getProvider();
             if (!$distributionProvider->isScheduleUpdateEnabled() && !$distributionProvider->isAvailabilityUpdateEnabled()) {
                 $sunrise -= $distributionProvider->getJobIntervalBeforeSunrise();
                 if ($sunrise > time()) {
                     KalturaLog::log("Will be sent on exact time [{$sunrise}] for sunrise time [" . $entryDistribution->getSunrise() . "]");
                     $entryDistribution->setDirtyStatus(EntryDistributionDirtyStatus::SUBMIT_REQUIRED);
                     $entryDistribution->save();
                     return null;
                 }
             }
         }
         return self::addSubmitAddJob($entryDistribution, $distributionProfile);
     }
     KalturaLog::log("Validation errors found");
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         return null;
     }
     $autoCreateFlavors = $distributionProfile->getAutoCreateFlavorsArray();
     $autoCreateThumbs = $distributionProfile->getAutoCreateThumbArray();
     foreach ($validationErrors as $validationError) {
         if ($validationError->getErrorType() == DistributionErrorType::MISSING_FLAVOR && in_array($validationError->getData(), $autoCreateFlavors)) {
             $errDescription = null;
             KalturaLog::log("Adding flavor [" . $validationError->getData() . "] to entry [" . $entryDistribution->getEntryId() . "]");
             kBusinessPreConvertDL::decideAddEntryFlavor(null, $entryDistribution->getEntryId(), $validationError->getData(), $errDescription);
             if ($errDescription) {
                 KalturaLog::log($errDescription);
             }
         }
         if ($validationError->getErrorType() == DistributionErrorType::MISSING_THUMBNAIL && in_array($validationError->getData(), $autoCreateThumbs)) {
             $destThumbParams = thumbParamsPeer::retrieveByPK($validationError->getData());
             if ($destThumbParams) {
                 KalturaLog::log("Adding thumbnail [" . $validationError->getData() . "] to entry [" . $entryDistribution->getEntryId() . "]");
                 kBusinessPreConvertDL::decideThumbGenerate($entry, $destThumbParams);
             } else {
                 KalturaLog::err("Required thumbnail params not found [" . $validationError->getData() . "]");
             }
         }
     }
     return null;
 }