Ejemplo n.º 1
0
 public static function updateThumbnailFromFile($dbEntry, $filePath, $fileSyncType = entry::FILE_SYNC_ENTRY_SUB_TYPE_THUMB)
 {
     $dbEntry->setThumbnail(".jpg");
     // this will increase the thumbnail version
     $dbEntry->save();
     $fileSyncKey = $dbEntry->getSyncKey($fileSyncType);
     $fileSync = FileSync::createForFileSyncKey($fileSyncKey);
     kFileSyncUtils::file_put_contents($fileSyncKey, file_get_contents($filePath));
     $wrapper = objectWrapperBase::getWrapperClass($dbEntry);
     $wrapper->removeFromCache("entry", $dbEntry->getId());
     myNotificationMgr::createNotification(kNotificationJobData::NOTIFICATION_TYPE_ENTRY_UPDATE_THUMBNAIL, $dbEntry);
     $mediaEntry = KalturaEntryFactory::getInstanceByType($dbEntry->getType());
     $mediaEntry->fromObject($dbEntry);
     self::disableAutoThumbnailCreation($dbEntry->getId());
     return $mediaEntry;
 }
 public function executeImpl($partner_id, $subp_id, $puser_id, $partner_prefix, $puser_kuser)
 {
     if (!$puser_kuser) {
         $this->addError(APIErrors::INVALID_USER_ID, $puser_id);
         return;
     }
     $entry_id = $this->getPM("entry_id");
     $entry = entryPeer::retrieveByPK($entry_id);
     // TODO - verify the user is allowed to modify the entry
     if ($entry->getKshowId() === kshow::SANDBOX_ID) {
         $this->addError(APIErrors::SANDBOX_ALERT);
         return;
     }
     $entry->setThumbnail(".jpg");
     $entry->setCreateThumb(false);
     $entry->save();
     if (isset($HTTP_RAW_POST_DATA)) {
         $thumb_data = $HTTP_RAW_POST_DATA;
     } else {
         $thumb_data = file_get_contents("php://input");
     }
     $thumb_data_size = strlen($thumb_data);
     $fileSyncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_THUMB);
     $fileSync = FileSync::createForFileSyncKey($fileSyncKey);
     kFileSyncUtils::file_put_contents($fileSyncKey, $thumb_data);
     // update the metadata in case of a roughcut
     if ($entry->getType() == entryType::MIX) {
         $sync_key = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_DATA);
         $xml_doc = new DOMDocument();
         $xml_doc->loadXML(kFileSyncUtils::file_get_contents($sync_key));
         if (myMetadataUtils::updateThumbUrl($xml_doc, $entry->getThumbnailUrl())) {
             $entry->setMetadata(null, $xml_doc->saveXML(), true, null, null);
             //$entry->getVersion() );
         }
         myNotificationMgr::createNotification(kNotificationJobData::NOTIFICATION_TYPE_ENTRY_UPDATE_THUMBNAIL, $entry);
     }
     $this->res = $entry->getBigThumbnailUrl();
     $wrapper = objectWrapperBase::getWrapperClass($entry, objectWrapperBase::DETAIL_LEVEL_REGULAR);
     $wrapper->removeFromCache("entry", $entry->getId());
     $this->addMsg("entry", $wrapper);
 }
Ejemplo n.º 3
0
 /**
  * @param FileSyncKey $key
  * @param $file_root
  * @param $real_path
  * @return SyncFile
  */
 public static function createSyncFileLinkForKey(FileSyncKey $target_key, FileSyncKey $source_key)
 {
     KalturaLog::debug("target_key [{$target_key}], source_key [{$source_key}]");
     // TODO - see that if in strict mode - there are no duplicate keys -> update existing records AND set the other DC's records to PENDING
     $dc = kDataCenterMgr::getCurrentDc();
     $dc_id = $dc["id"];
     // load all source file syncs
     $c = new Criteria();
     $c = FileSyncPeer::getCriteriaForFileSyncKey($source_key);
     $file_sync_list = FileSyncPeer::doSelect($c);
     if (!$file_sync_list) {
         KalturaLog::notice("Warning: no source. target_key [{$target_key}], source_key [{$source_key}] ");
         return null;
     }
     $source_file_syncs = array();
     foreach ($file_sync_list as $file_sync) {
         $file_sync = self::resolve($file_sync);
         // we only want to link to a source and not to a link.
         $source_file_syncs[] = $file_sync;
     }
     // find the current dc file sync
     $current_dc_source_file = null;
     foreach ($source_file_syncs as $source_file_sync) {
         if ($source_file_sync->getDc() == $dc_id) {
             $current_dc_source_file = $source_file_sync;
         }
     }
     if (!$current_dc_source_file) {
         $current_dc_source_file = reset($source_file_syncs);
     }
     // create the remote file syncs
     foreach ($source_file_syncs as $source_file_sync) {
         $remote_dc_file_sync = FileSync::createForFileSyncKey($target_key);
         $remote_dc_file_sync->setDc($source_file_sync->getDc());
         $remote_dc_file_sync->setStatus($source_file_sync->getStatus());
         $remote_dc_file_sync->setOriginal($current_dc_source_file == $source_file_sync);
         $remote_dc_file_sync->setFileSize(-1);
         if ($source_file_sync->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_URL) {
             $remote_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
             $remote_dc_file_sync->setFileRoot($source_file_sync->getFileRoot());
             $remote_dc_file_sync->setFilePath($source_file_sync->getFilePath());
         } else {
             $remote_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_LINK);
         }
         $remote_dc_file_sync->setLinkedId($source_file_sync->getId());
         self::incrementLinkCountForFileSync($source_file_sync);
         $remote_dc_file_sync->setPartnerID($target_key->partner_id);
         $remote_dc_file_sync->save();
         if ($current_dc_source_file == $source_file_sync) {
             $current_dc_target_file = $remote_dc_file_sync;
         } else {
             kEventsManager::raiseEvent(new kObjectAddedEvent($remote_dc_file_sync));
         }
     }
     kEventsManager::raiseEvent(new kObjectAddedEvent($current_dc_target_file));
 }
 /**
  * @param FileSyncKey $key
  * @param $file_root
  * @param $real_path
  * @return SyncFile
  */
 public static function createSyncFileLinkForKey(FileSyncKey $target_key, FileSyncKey $source_key)
 {
     KalturaLog::log(__METHOD__ . " - target_key [{$target_key}], source_key [{$source_key}]");
     // TODO - see that if in strict mode - there are no duplicate keys -> update existing records AND set the other DC's records to PENDING
     $dc = kDataCenterMgr::getCurrentDc();
     $dc_id = $dc["id"];
     list($sourceFile, $local) = self::getReadyFileSyncForKey($source_key, true, false);
     if (!$sourceFile) {
         KalturaLog::log(__METHOD__ . " - Warning: no source. target_key [{$target_key}], source_key [{$source_key}] ");
         return null;
     }
     $sourceFile = self::resolve($sourceFile);
     // we only want to link to a source and not to a link.
     // create a FileSync for the current DC with status READY
     $current_dc_file_sync = FileSync::createForFileSyncKey($target_key);
     $current_dc_file_sync->setPartnerId($target_key->partner_id);
     $current_dc_file_sync->setFileSize(-1);
     $current_dc_file_sync->setStatus($sourceFile->getStatus());
     $current_dc_file_sync->setOriginal(1);
     if ($sourceFile->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_URL) {
         $current_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
         $current_dc_file_sync->setDc($sourceFile->getDc());
         $current_dc_file_sync->setFileRoot($sourceFile->getFileRoot());
         $current_dc_file_sync->setFilePath($sourceFile->getFilePath());
     } else {
         $current_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_LINK);
         $current_dc_file_sync->setDc($dc_id);
         $current_dc_file_sync->setLinkedId($sourceFile->getId());
     }
     $current_dc_file_sync->save();
     //increment link_count for this DC source]
     if ($sourceFile->getFileType() != FileSync::FILE_SYNC_FILE_TYPE_URL) {
         self::incrementLinkCountForFileSync($sourceFile);
     }
     $c = new Criteria();
     $c = FileSyncPeer::getCriteriaForFileSyncKey($source_key);
     $file_sync_list = FileSyncPeer::doSelect($c);
     $source_file_syncs = array();
     foreach ($file_sync_list as $file_sync) {
         $file_sync = self::resolve($file_sync);
         // we only want to link to a source and not to a link.
         $source_file_syncs[$file_sync->getDc()] = $file_sync;
     }
     foreach ($source_file_syncs as $remote_dc_id => $source_file_sync) {
         if ($source_file_sync->getDc() == $current_dc_file_sync->getDc()) {
             continue;
         }
         $remote_dc_file_sync = FileSync::createForFileSyncKey($target_key);
         $remote_dc_file_sync->setDc($remote_dc_id);
         $remote_dc_file_sync->setStatus($source_file_sync->getStatus());
         $remote_dc_file_sync->setOriginal(0);
         if ($source_file_sync->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_URL) {
             $remote_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
             $remote_dc_file_sync->setFileRoot($source_file_sync->getFileRoot());
             $remote_dc_file_sync->setFilePath($source_file_sync->getFilePath());
         } else {
             $remote_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_LINK);
             $remote_dc_file_sync->setLinkedId($source_file_sync->getId());
         }
         $remote_dc_file_sync->setPartnerID($target_key->partner_id);
         $remote_dc_file_sync->save();
         // increment link_cont for remote DCs sources
         if ($source_file_sync->getFileType() != FileSync::FILE_SYNC_FILE_TYPE_URL) {
             self::incrementLinkCountForFileSync($source_file_sync);
         }
         kEventsManager::raiseEvent(new kObjectAddedEvent($remote_dc_file_sync));
     }
     kEventsManager::raiseEvent(new kObjectAddedEvent($current_dc_file_sync));
 }
Ejemplo n.º 5
0
 /**
  * @param FileSyncKey $key
  * @param $file_root
  * @param $real_path
  * @param $strict
  * @return SyncFile
  */
 public static function createSyncFileLinkForKey(FileSyncKey $target_key, FileSyncKey $source_key, $strict = true)
 {
     KalturaLog::log(__METHOD__ . " - target_key [{$target_key}], source_key [{$source_key}]");
     // TODO - see that if in strict mode - there are no duplicate keys -> update existing records AND set the other DC's records to PENDING
     $dc = kDataCenterMgr::getCurrentDc();
     $dc_id = $dc["id"];
     $sourceFile = self::getLocalFileSyncForKey($source_key, $strict);
     if (!$sourceFile) {
         KalturaLog::log(__METHOD__ . " - Warning: no source but NOT strict. target_key [{$target_key}], source_key [{$source_key}] ");
         return null;
     }
     $sourceFile = self::resolve($sourceFile);
     // we only want to link to a source and not to a link.
     // create a FileSync for the current DC with status READY
     $current_dc_file_sync = FileSync::createForFileSyncKey($target_key);
     $current_dc_file_sync->setDc($dc_id);
     $current_dc_file_sync->setPartnerId($target_key->partner_id);
     $current_dc_file_sync->setFileSize(-1);
     $current_dc_file_sync->setStatus(FileSync::FILE_SYNC_STATUS_READY);
     $current_dc_file_sync->setReadyAt(time());
     $current_dc_file_sync->setOriginal(1);
     $current_dc_file_sync->setLinkedId($sourceFile->getId());
     $current_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_LINK);
     $current_dc_file_sync->save();
     //increment link_count for this DC source]
     self::incrementLinkCountForFileSync($sourceFile);
     $c = new Criteria();
     $c = FileSyncPeer::getCriteriaForFileSyncKey($source_key);
     $file_sync_list = FileSyncPeer::doSelect($c);
     $source_file_syncs = array();
     foreach ($file_sync_list as $file_sync) {
         $file_sync = self::resolve($file_sync);
         // we only want to link to a source and not to a link.
         $source_file_syncs[$file_sync->getDc()] = $file_sync;
     }
     // create records for all other DCs with status READY
     // link is always ready since no one is going to fetch it.
     $other_dcs = kDataCenterMgr::getAllDcs();
     foreach ($other_dcs as $remote_dc) {
         // TODO - maybe we should create the file sync
         if (!isset($source_file_syncs[$remote_dc["id"]])) {
             continue;
         }
         $remote_dc_file_sync = FileSync::createForFileSyncKey($target_key);
         $remote_dc_file_sync->setDc($remote_dc["id"]);
         $remote_dc_file_sync->setStatus(FileSync::FILE_SYNC_STATUS_READY);
         $remote_dc_file_sync->setOriginal(0);
         $remote_dc_file_sync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_LINK);
         $remote_dc_file_sync->setReadyAt(time());
         $remote_dc_file_sync->setPartnerID($target_key->partner_id);
         $remote_dc_file_sync->setLinkedId($source_file_syncs[$remote_dc["id"]]->getId());
         $remote_dc_file_sync->save();
         // increment link_cont for remote DCs sources
         self::incrementLinkCountForFileSync($source_file_syncs[$remote_dc["id"]]);
         kEventsManager::raiseEvent(new kObjectAddedEvent($remote_dc_file_sync));
     }
     kEventsManager::raiseEvent(new kObjectAddedEvent($current_dc_file_sync));
 }