/** * @param EntryDistribution $entryDistribution * @param $action * @param array $validationErrors * since entry distribution and entry are validated in the parent of validateForSubmission we will not add an error for them */ private function validateReferenceId(EntryDistribution $entryDistribution, $action, array &$validationErrors) { if ($entryDistribution && $entryDistribution->getEntryId()) { $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId()); if ($entry && !$entry->getReferenceID()) { $validationError = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, "Reference ID", "is a mandatory field"); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_EMPTY); $validationError->setValidationErrorParam("Reference ID is a mandatory field"); $validationErrors[] = $validationError; } } }
public function validateMetadataForSubmission(EntryDistribution $entryDistribution, $action, array $validationErrors) { if (!class_exists('MetadataProfile')) { return $validationErrors; } $metadataProfileId = $this->getMetadataProfileId(); if (!$metadataProfileId) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_MEDIAKEY, ''); return $validationErrors; } $metadata = MetadataPeer::retrieveByObject($metadataProfileId, MetadataObjectType::ENTRY, $entryDistribution->getEntryId()); if (!$metadata) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_MEDIAKEY); return $validationErrors; } $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_MEDIAKEY); if (!count($values)) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_MEDIAKEY, ''); } return $validationErrors; }
/** * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $xmlElement * @return SimpleXMLElement */ public function contributeDistribution(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionsProvider = null; $distributionsProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); if ($distributionsProfile) { $distributionsProvider = $distributionsProfile->getProvider(); } $distribution = $mrss->addChild('distribution'); $distribution->addAttribute('entryDistributionId', $entryDistribution->getId()); $distribution->addAttribute('distributionProfileId', $entryDistribution->getDistributionProfileId()); $distribution->addAttribute('lastReport', $entryDistribution->getLastReport(null)); if ($distributionsProvider) { $distribution->addAttribute('provider', $distributionsProvider->getName()); if ($distributionsProvider->getType() == DistributionProviderType::GENERIC) { $distribution->addAttribute('distributionProviderId', $distributionsProvider->getId()); } elseif ($distributionsProvider->getType() == DistributionProviderType::SYNDICATION) { if ($distributionsProfile instanceof SyndicationDistributionProfile) { $distribution->addAttribute('feedId', $distributionsProfile->getFeedId()); } } else { $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaContentDistributionProvider'); foreach ($pluginInstances as $pluginInstance) { if ($pluginInstance->getProvider() === $distributionsProvider) { $pluginInstance->contributeMRSS($entryDistribution, $distribution); } } } } if ($entryDistribution->getRemoteId()) { $distribution->addChild('remoteId', $entryDistribution->getRemoteId()); } if ($entryDistribution->getSunrise(null)) { $distribution->addChild('sunrise', $entryDistribution->getSunrise(null)); } if ($entryDistribution->getSunset(null)) { $distribution->addChild('sunset', $entryDistribution->getSunset(null)); } $flavorAssetIds = explode(',', $entryDistribution->getFlavorAssetIds()); $flavorAssetIdsNode = $distribution->addChild('flavorAssetIds'); foreach ($flavorAssetIds as $flavorAssetId) { $flavorAssetIdsNode->addChild('flavorAssetId', $flavorAssetId); } $thumbAssetIds = explode(',', $entryDistribution->getThumbAssetIds()); $thumbAssetIdsNode = $distribution->addChild('thumbAssetIds'); foreach ($thumbAssetIds as $thumbAssetId) { $thumbAssetIdsNode->addChild('thumbAssetId', $thumbAssetId); } }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); /* @var $distributionProfile VerizonVcastDistributionProfile */ $mrss->addChild('ProviderName', $distributionProfile->getProviderName()); $mrss->addChild('ProviderId', $distributionProfile->getProviderId()); $mrss->addChild('Entitlement', $distributionProfile->getEntitlement()); $mrss->addChild('Priority', $distributionProfile->getPriority()); $mrss->addChild('AllowStreaming', $distributionProfile->getAllowStreaming()); $mrss->addChild('StreamingPriceCode', $distributionProfile->getStreamingPriceCode()); $mrss->addChild('AllowDownload', $distributionProfile->getAllowDownload()); $mrss->addChild('DownloadPriceCode', $distributionProfile->getDownloadPriceCode()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append AttUverse specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('channel_title', $distributionProfile->getChannelTitle()); }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases -- especially when you override doSelect*() * methods in your stub classes -- you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * * @param EntryDistribution $value A EntryDistribution object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool(EntryDistribution $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { $key = (string) $obj->getId(); } if (isset(self::$instances[$key]) || count(self::$instances) < kConf::get('max_num_instances_in_pool')) { self::$instances[$key] = $obj; kMemoryManager::registerPeer('EntryDistributionPeer'); } } }
/** * @param entry $entry * @param DistributionProfile $distributionProfile * @return EntryDistribution */ public static function createEntryDistribution(entry $entry, DistributionProfile $distributionProfile) { $entryDistribution = new EntryDistribution(); $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; }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append UverseClickToOrder specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('background_image_wide', $distributionProfile->getBackgroundImageWide()); $mrss->addChild('background_image_standard', $distributionProfile->getBackgroundImageStandard()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append Yahoo specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('contact_telephone', $distributionProfile->getContactTelephone()); $mrss->addChild('contact_email', $distributionProfile->getContactEmail()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append comcast mrss specific configuration $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); /* @var $distributionProfile TVComDistributionProfile */ $mrss->addChild('feed_copyright', $distributionProfile->getFeedCopyright()); }
private function getRelatedEntrySortValue($profile, $relatedEntryId) { $relatedEntrydistribution = new EntryDistribution(); $relatedEntrydistribution->setEntryId($relatedEntryId); $relatedEntrydistribution->setPartnerId($profile->getPartnerId()); $relatedEntrydistribution->setDistributionProfileId($profile->getId()); return $profile->getFieldValue($relatedEntrydistribution, UverseClickToOrderDistributionField::SORT_ITEMS_BY_FIELD); }
/** * @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; }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); /* @var $distributionProfile DoubleClickDistributionProfile */ $mrss->addChild('ChannelTitle', htmlentities($distributionProfile->getChannelTitle())); $mrss->addChild('ChannelDescription', htmlentities($distributionProfile->getChannelDescription())); $mrss->addChild('ChannelLink', htmlentities($distributionProfile->getChannelLink())); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append YouTube specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('feed_title', $distributionProfile->getFeedTitle()); $mrss->addChild('feed_subtitle', $distributionProfile->getFeedSubtitle()); $mrss->addChild('feed_link', $distributionProfile->getFeedLink()); $mrss->addChild('feed_author_name', $distributionProfile->getFeedAuthorName()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); if ($distributionProfile && $distributionProfile instanceof KalturaFacebookDistributionProfile) { $mrss->addChild(FacebookDistributionField::CALL_TO_ACTION_TYPE, $distributionProfile->getCallToActionType()); $mrss->addChild(FacebookDistributionField::CALL_TO_ACTION_LINK, $distributionProfile->getCallToActionLink()); $mrss->addChild(FacebookDistributionField::CALL_TO_ACTION_LINK_CAPTION, $distributionProfile->getCallToActionLinkCaption()); $mrss->addChild(FacebookDistributionField::PLACE, $distributionProfile->getPlace()); $mrss->addChild(FacebookDistributionField::TAGS, $distributionProfile->getTags()); $mrss->addChild(FacebookDistributionField::TARGETING, $distributionProfile->getTargeting()); $mrss->addChild(FacebookDistributionField::FEED_TARGETING, $distributionProfile->getFeedTargeting()); } }
/** * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss * @return SimpleXMLElement */ public function contributeDistribution(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionsProvider = null; $distributionsProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); if ($distributionsProfile) { $distributionsProvider = $distributionsProfile->getProvider(); } $distribution = $mrss->addChild('distribution'); $distribution->addAttribute('entryDistributionId', $entryDistribution->getId()); $distribution->addAttribute('distributionProfileId', $entryDistribution->getDistributionProfileId()); if ($distributionsProfile) { $distribution->addAttribute('distributionProfileName', $distributionsProfile->getName()); } if ($distributionsProvider) { $distribution->addAttribute('provider', $distributionsProvider->getName()); if ($distributionsProvider->getType() == DistributionProviderType::GENERIC) { $distribution->addAttribute('distributionProviderId', $distributionsProvider->getId()); } elseif ($distributionsProvider->getType() == DistributionProviderType::SYNDICATION) { if ($distributionsProfile instanceof SyndicationDistributionProfile) { $distribution->addAttribute('feedId', $distributionsProfile->getFeedId()); } } else { $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaContentDistributionProvider'); foreach ($pluginInstances as $pluginInstance) { if ($pluginInstance->getProvider() === $distributionsProvider) { $pluginInstance->contributeMRSS($entryDistribution, $distribution); } } } } if ($entryDistribution->getRemoteId()) { $distribution->addChild('remoteId', $entryDistribution->getRemoteId()); } if ($entryDistribution->getSunrise(null)) { $distribution->addChild('sunrise', $entryDistribution->getSunrise(null)); } if ($entryDistribution->getSunset(null)) { $distribution->addChild('sunset', $entryDistribution->getSunset(null)); } $flavorAssetIds = explode(',', $entryDistribution->getFlavorAssetIds()); $flavorAssetIdsNode = $distribution->addChild('flavorAssetIds'); foreach ($flavorAssetIds as $flavorAssetId) { $flavorAssetIdsNode->addChild('flavorAssetId', $flavorAssetId); } $thumbAssetIds = explode(',', $entryDistribution->getThumbAssetIds()); $thumbAssetIdsNode = $distribution->addChild('thumbAssetIds'); foreach ($thumbAssetIds as $thumbAssetId) { $thumbAssetIdsNode->addChild('thumbAssetId', $thumbAssetId); } $assetIds = explode(',', $entryDistribution->getAssetIds()); $assetIdsNode = $distribution->addChild('assetIds'); foreach ($assetIds as $assetId) { $assetIdsNode->addChild('assetId', $assetId); } if ($entryDistribution->getErrorDescription()) { $distribution->addChild('errorDescription', kMrssManager::stringToSafeXml($entryDistribution->getErrorDescription())); } $distribution->addChild('createdAt', $entryDistribution->getCreatedAt(kMrssManager::FORMAT_DATETIME)); $distribution->addChild('updatedAt', $entryDistribution->getUpdatedAt(kMrssManager::FORMAT_DATETIME)); if ($entryDistribution->getSubmittedAt(null)) { $distribution->addChild('submittedAt', $entryDistribution->getSubmittedAt(kMrssManager::FORMAT_DATETIME)); } if ($entryDistribution->getLastReport(null)) { $distribution->addChild('lastReport', $entryDistribution->getLastReport(kMrssManager::FORMAT_DATETIME)); } if ($entryDistribution->getDirtyStatus()) { $distribution->addChild('dirtyStatus', $entryDistribution->getDirtyStatus()); } $distribution->addChild('status', $entryDistribution->getStatus()); $distribution->addChild('sunStatus', $entryDistribution->getSunStatus()); if ($entryDistribution->getPlays()) { $distribution->addChild('plays', $entryDistribution->getPlays()); } if ($entryDistribution->getViews()) { $distribution->addChild('views', $entryDistribution->getViews()); } if ($entryDistribution->getErrorNumber()) { $distribution->addChild('errorNumber', $entryDistribution->getErrorNumber()); } if ($entryDistribution->getErrorType()) { $distribution->addChild('errorType', $entryDistribution->getErrorType()); } }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases -- especially when you override doSelect*() * methods in your stub classes -- you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * * @param EntryDistribution $value A EntryDistribution object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool(EntryDistribution $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { $key = (string) $obj->getId(); } // if key === null self::$instances[$key] = $obj; } }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('channel_title', $distributionProfile->getChannelTitle()); $mrss->addChild('channel_link', $distributionProfile->getChannelLink()); $mrss->addChild('channel_description', $distributionProfile->getChannelDescription()); $mrss->addChild('channel_language', $distributionProfile->getChannelLanguage()); $mrss->addChild('channel_copyright', $distributionProfile->getChannelCopyright()); $mrss->addChild('channel_image_title', $distributionProfile->getChannelImageTitle()); $mrss->addChild('channel_image_url', $distributionProfile->getChannelImageUrl()); $mrss->addChild('channel_image_link', $distributionProfile->getChannelImageLink()); $mrss->addChild('item_media_rating', $distributionProfile->getItemMediaRating()); }
/** * @param EntryDistribution $entryDistribution * @param int $action enum from DistributionAction * @param array $validationErrors * @param bool $validateDescription * @param bool $validateTags * @return array */ public function validateMetadataForSubmission(EntryDistribution $entryDistribution, $action, array $validationErrors, &$validateDescription, &$validateTags) { $validateDescription = true; $validateTags = true; if (!class_exists('MetadataProfile')) { return $validationErrors; } $metadataProfileId = $this->getMetadataProfileId(); if (!$metadataProfileId) { return $validationErrors; } $metadata = MetadataPeer::retrieveByObject($metadataProfileId, Metadata::TYPE_ENTRY, $entryDistribution->getEntryId()); if (!$metadata) { return $validationErrors; } $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_DESCRIPTION); if ($metadataProfileCategoryField) { $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_DESCRIPTION); if (count($values)) { foreach ($values as $value) { if (!strlen($value)) { continue; } $validateDescription = false; // validate entry description minumum length of 1 character if (strlen($value) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'YouTube description is too short'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT); $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH); $validationErrors[] = $validationError; } // validate entry description maximum length of 60 characters if (strlen($value) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'YouTube description is too long'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG); $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH); $validationErrors[] = $validationError; } } } } $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_TAGS); if ($metadataProfileCategoryField) { $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TAGS); if (count($values)) { foreach ($values as $value) { if (!strlen($value)) { continue; } $validateTags = false; // validate entry tags minumum length of 1 character if (strlen($value) < self::ENTRY_TAGS_MINIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'YouTube tags is too short'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT); $validationError->setValidationErrorParam(self::ENTRY_TAGS_MINIMUM_LENGTH); $validationErrors[] = $validationError; } // validate entry tags maximum length of 60 characters if (strlen($value) > self::ENTRY_TAGS_MAXIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'YouTube tags is too long'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG); $validationError->setValidationErrorParam(self::ENTRY_TAGS_MAXIMUM_LENGTH); $validationErrors[] = $validationError; } } } } return $validationErrors; }
public function getAllFieldValues(EntryDistribution $entryDistribution) { if (is_null($this->fieldValuesByEntryDistributionId) || !is_array($this->fieldValuesByEntryDistributionId) || !isset($this->fieldValuesByEntryDistributionId[$entryDistribution->getId()])) { $valuesXmlObj = $this->getFieldValuesXml($entryDistribution); if (!$valuesXmlObj) { KalturaLog::err('Error transforming XML for distribution profile [' . $this->getId() . '] and entry distribution id [' . $entryDistribution->getId() . ']'); return null; } $valuesXmlStr = $valuesXmlObj->saveXML(); KalturaLog::debug('All field values result XML: ' . $valuesXmlStr); $fieldValues = array(); $fieldConfigArray = $this->getFieldConfigArray(); foreach ($fieldConfigArray as $fieldConfig) { $fieldName = $fieldConfig->getFieldName(); $fieldValues[$fieldName] = $this->getFieldValueFromXml($fieldName, $valuesXmlObj); } $this->fieldValuesByEntryDistributionId[$entryDistribution->getId()] = $fieldValues; } return $this->fieldValuesByEntryDistributionId[$entryDistribution->getId()]; }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); /* @var $distributionProfile HuluDistributionProfile */ $mrss->addChild('SeriesChannel', $distributionProfile->getSeriesChannel()); $mrss->addChild('SeriesPrimaryCategory', $distributionProfile->getSeriesPrimaryCategory()); foreach ($distributionProfile->getSeriesAdditionalCategories() as $category) { $mrss->addChild('AdditionalCategories', $category); } $mrss->addChild('SeasonNumber', $distributionProfile->getSeasonNumber()); $mrss->addChild('SeasonSynopsis', $distributionProfile->getSeasonSynopsis()); $mrss->addChild('SeasonTuneInInformation', $distributionProfile->getSeasonTuneInInformation()); $mrss->addChild('MediaType', $distributionProfile->getVideoMediaType()); }
/** * @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 EntryDistribution $entryDistribution * @param int $action enum from DistributionAction * @return array<kDistributionValidationError> */ public function validateForSubmission(EntryDistribution $entryDistribution, $action) { $validationErrors = array(); $requiredFlavorParamsIds = $this->getRequiredFlavorParamsIdsArray(); KalturaLog::log("Required Flavor Params Ids [" . print_r($requiredFlavorParamsIds, true) . "]"); $entryFlavorAssets = flavorAssetPeer::retreiveReadyByEntryId($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 = thumbAssetPeer::retreiveReadyByEntryId($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); } return $validationErrors; }
/** * @param EntryDistribution $entryDistribution * @param int $action enum from DistributionAction * @param array $validationErrors * @param bool $validateDescription * @param bool $validateTags * @return array */ public function validateMetadataForSubmission(EntryDistribution $entryDistribution, $action, array $validationErrors, &$validateDescription, &$validateTags) { $validateDescription = true; $validateTags = true; if (!class_exists('MetadataProfile')) { return $validationErrors; } $metadataProfileId = $this->getMetadataProfileId(); if (!$metadataProfileId) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, ''); return $validationErrors; } $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_CATEGORY); if (!$metadataProfileCategoryField) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, ''); return $validationErrors; } $metadata = MetadataPeer::retrieveByObject($metadataProfileId, Metadata::TYPE_ENTRY, $entryDistribution->getEntryId()); if (!$metadata) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY); return $validationErrors; } $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_CATEGORY); if (!count($values)) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, ''); } foreach ($values as $value) { if (!strlen($value)) { $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_CATEGORY, ''); return $validationErrors; } } $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_DESCRIPTION); if ($metadataProfileCategoryField) { $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_DESCRIPTION); if (count($values)) { foreach ($values as $value) { if (!strlen($value)) { continue; } $validateDescription = false; // validate entry description minumum length of 1 character if (strlen($value) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'Dailymotion description is too short'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT); $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH); $validationErrors[] = $validationError; } // validate entry description minumum length of 1 character if (strlen($value) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'Dailymotion description is too long'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG); $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH); $validationErrors[] = $validationError; } } } } $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_TAGS); if ($metadataProfileCategoryField) { $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TAGS); if (count($values) && strlen(implode('', $values))) { $tags = implode(',', $values); $tags = explode(',', $tags); $tagsStr = implode(' , ', $tags); $validateTags = false; if (strlen($tagsStr) > self::ENTRY_TAGS_MAXIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tags is too long'); $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG); $validationError->setValidationErrorParam(self::ENTRY_TAGS_MAXIMUM_LENGTH); $validationErrors[] = $validationError; } if (count($tags) < self::ENTRY_TAGS_MINIMUM_COUNT) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tags must contain at least ' . self::ENTRY_TAGS_MINIMUM_COUNT . ' tags'); $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR); $validationError->setValidationErrorParam('Dailymotion tags must contain at least ' . self::ENTRY_TAGS_MINIMUM_COUNT . ' tags'); $validationErrors[] = $validationError; } foreach ($tags as $tag) { if (strlen($tag) < self::ENTRY_TAG_MINIMUM_LENGTH) { $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tag [$tag] must contain at least ' . self::ENTRY_TAG_MINIMUM_LENGTH . ' characters'); $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR); $validationError->setValidationErrorParam('Dailymotion tag [$tag] must contain at least ' . self::ENTRY_TAG_MINIMUM_LENGTH . ' characters'); $validationErrors[] = $validationError; } } } } return $validationErrors; }
public function getEntryMrssDoc(EntryDistribution $entryDistribution) { $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId()); // set the default criteria to use the current entry distribution partner id (it is restored later) // this is needed for related entries under kMetadataMrssManager which is using retrieveByPK without the correct partner id filter $oldEntryCriteria = entryPeer::getCriteriaFilter()->getFilter(); entryPeer::setDefaultCriteriaFilter(); entryPeer::addPartnerToCriteria($this->getPartnerId(), true); try { $mrss = null; $mrssParams = new kMrssParameters(); if ($this->getItemXpathsToExtend()) { $mrssParams->setItemXpathsToExtend($this->getItemXpathsToExtend()); } $mrss = kMrssManager::getEntryMrssXml($entry, $mrss, $mrssParams); $mrssStr = $mrss->asXML(); } catch (Exception $e) { // restore the original criteria so it will not get stuck due to the exception entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); throw $e; } // restore the original criteria entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); $mrssObj = new DOMDocument(); if (!$mrssObj->loadXML($mrssStr)) { throw new Exception('Entry mrss xml is not valid'); } return $mrssObj; }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append comcast mrss specific configuration $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); /* @var $distributionProfile ComcastMrssDistributionProfile */ $mrss->addChild('feed_link', $distributionProfile->getFeedLink()); $mrss->addChild('item_link', $distributionProfile->getItemLink()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append PODCAST specific report statistics $status = $mrss->addChild('status'); $status->addChild('emailed', $entryDistribution->getFromCustomData('emailed')); $status->addChild('rated', $entryDistribution->getFromCustomData('rated')); $status->addChild('blogged', $entryDistribution->getFromCustomData('blogged')); $status->addChild('reviewed', $entryDistribution->getFromCustomData('reviewed')); $status->addChild('bookmarked', $entryDistribution->getFromCustomData('bookmarked')); $status->addChild('playbackFailed', $entryDistribution->getFromCustomData('playbackFailed')); $status->addChild('timeSpent', $entryDistribution->getFromCustomData('timeSpent')); $status->addChild('recommended', $entryDistribution->getFromCustomData('recommended')); }
/** * @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; }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append YouTube specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('allow_comments', $distributionProfile->getAllowComments()); $mrss->addChild('allow_responses', $distributionProfile->getAllowResponses()); $mrss->addChild('allow_ratings', $distributionProfile->getAllowRatings()); $mrss->addChild('allow_embedding', $distributionProfile->getAllowEmbedding()); $mrss->addChild('commerical_policy', $distributionProfile->getCommercialPolicy()); $mrss->addChild('ugc_policy', $distributionProfile->getUgcPolicy()); $mrss->addChild('default_category', $distributionProfile->getDefaultCategory()); $mrss->addChild('target', $distributionProfile->getTarget()); $mrss->addChild('notification_email', $distributionProfile->getNotificationEmail()); $mrss->addChild('account_username', $distributionProfile->getUsername()); $mrss->addChild('ad_server_partner_id', $distributionProfile->getAdServerPartnerId()); $mrss->addChild('allow_pre_roll_ads', $distributionProfile->getAllowPreRollAds()); $mrss->addChild('allow_post_roll_ads', $distributionProfile->getAllowPostRollAds()); $mrss->addChild('claim_type', $distributionProfile->getClaimType()); $mrss->addChild('instream_standard', $distributionProfile->getInstreamStandard()); }
/** * Append provider specific nodes and attributes to the MRSS * * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss */ public static function contributeMRSS(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { // append YouTube specific report statistics $distributionProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); $mrss->addChild('account_username', $distributionProfile->getUsername()); $mrss->addChild('default_category', $distributionProfile->getDefaultCategory()); $mrss->addChild('allow_comments', $distributionProfile->getAllowComments()); $mrss->addChild('allow_responses', $distributionProfile->getAllowResponses()); $mrss->addChild('allow_ratings', $distributionProfile->getAllowRatings()); $mrss->addChild('allow_embedding', $distributionProfile->getAllowEmbedding()); }