protected function executeImpl(kshow $kshow) { $asset_type = $this->getRequestParameter("type", entry::ENTRY_MEDIA_TYPE_VIDEO); if ($asset_type > entry::ENTRY_MEDIA_TYPE_AUDIO || $asset_type < entry::ENTRY_MEDIA_TYPE_VIDEO) { // TODO - // trying to fetch invalid media type } $show_entry_id = $kshow->getShowEntryId(); $intro_id = $kshow->getIntroId(); $c = new Criteria(); $c->add(entryPeer::KUSER_ID, kuser::KUSER_KALTURA); $c->add(entryPeer::TYPE, kuser::KUSER_KALTURA); $this->entry_list = entryPeer::doSelect($c); if ($this->entry_list == NULL) { $this->entry_list = array(); } }
public static function deepClone(kshow $source_kshow, &$new_entries) { $target_kshow = $source_kshow->copy(); // will have to save to retrieve the id from the DB. $target_kshow->save(); $target_id = $target_kshow->getId(); echo "Creating new kshow {$target_id}\n"; $special_entries = array(); $special_entries[] = $source_kshow->getShowEntryId(); $special_entries[] = $source_kshow->getIntroId(); $skin = $source_kshow->getSkinObj(); ///bg_entry_id=2171&bg_entry_path=/content/entry/data/0/2/2171_100000.jpg $bg_entry_id = $skin->get("bg_entry_id"); $special_entries[] = $bg_entry_id; echo "special entry_ids: " . print_r($special_entries, true); // clone the show_entry and intro $entries = entryPeer::retrieveByPKs($special_entries); echo "special entries count " . count($entries) . "\n"; // it's hard to assume the order - if a PK was not found, there is no placeholder foreach ($entries as $entry) { $new_entry = myEntryUtils::deepClone($entry, $target_id, NULL); $new_entries[] = $new_entry; if ($entry->getId() == $source_kshow->getShowEntryId()) { echo "ShowEntry:\n"; $target_kshow->setShowEntryId($new_entry->getId()); } elseif ($entry->getId() == $source_kshow->getIntroId()) { echo "Intro:\n"; $target_kshow->setIntroId($new_entry->getId()); } elseif ($entry->getId() == $bg_entry_id) { echo "Background:\n"; $skin->set("bg_entry_id", $new_entry->getId()); $skin->set("bg_entry_path", $new_entry->getDataPath()); // replaced__getDataPath } else { // ERROR ! } } $source_thumbnail_path = $source_kshow->getThumbnailPath(); $target_kshow->setThumbnail($source_kshow->getThumbnail()); $target_thumbnail_path = $target_kshow->getThumbnailPath(); // TODO - don't copy files if poiting to templates ! $content = myContentStorage::getFSContentRootPath(); // echo ( "Background - copying file: " . $content . $source_thumbnail_path . " -> " . $content . $target_thumbnail_path ."\n"); // myContentStorage::moveFile( $content . $source_thumbnail_path , $content . $target_thumbnail_path , false , true ); self::resetKshowStats($target_kshow); $target_kshow->save(); $c = new Criteria(); $c->add(entryPeer::KSHOW_ID, $source_kshow->getId()); // don't clope the entries that were alredt cloned $c->add(entryPeer::ID, $special_entries, Criteria::NOT_IN); $entries = entryPeer::doSelect($c); foreach ($entries as $entry) { $new_entry = myEntryUtils::deepClone($entry, $target_id, NULL); $new_entries[] = $new_entry; } echo "Ended creating new kshow {$target_id}. " . count($new_entries) . " entries copied\n"; return $target_kshow; }
/** * Executes addComment action, which returns a form enabling the insertion of a comment * The request may include 1 fields: entry id. */ protected function executeImpl(kshow $kshow, entry &$entry) { $kshow_id = $kshow->getId(); if ($this->partner_id != null) { // this part overhere should be in a more generic place - part of the services $multiple_roghcuts = Partner::allowMultipleRoughcuts($this->partner_id); $likuser_id = $this->getLoggedInUserId(); } else { // is the logged-in-user is not an admin or the producer - check if show can be published $likuser_id = $this->getLoggedInUserId(); $multiple_roghcuts = true; } if (!$likuser_id) { return $this->securityViolation($kshow->getId()); } $isIntro = $kshow->getIntroId() == $entry->getId(); if ($multiple_roghcuts) { // create a new entry in two cases: // 1. the user saving the roughcut isnt the owner of the entry // 2. the entry is an intro and the current entry is not show (probably an image or video) if ($entry->getKuserId() != $likuser_id || $isIntro && $entry->getMediaType() != entry::ENTRY_MEDIA_TYPE_SHOW) { // TODO: add security check to whether multiple roughcuts are allowed // create a new roughcut entry by cloning the original entry $entry = myEntryUtils::deepClone($entry, $kshow_id, false); $entry->setKuserId($likuser_id); $entry->setCreatorKuserId($likuser_id); $entry->setCreatedAt(time()); $entry->setMediaType(entry::ENTRY_MEDIA_TYPE_SHOW); $entry->save(); } } /* $viewer_type = myKshowUtils::getViewerType($kshow, $likuser_id); if ( $viewer_type != KshowKuser::KSHOWKUSER_VIEWER_PRODUCER && ( ! $kshow->getCanPublish() ) ) { // ERROR - attempting to publish a non-publishable show return $this->securityViolation( $kshow->getId() ); } */ $this->xml_content = "<xml><EntryID>" . $entry->getId() . "</EntryID></xml>"; if ($isIntro) { $kshow->setIntroId($entry->getId()); } else { $kshow->setShowEntryId($entry->getId()); $has_roughcut = @$_REQUEST["HasRoughCut"]; if ($has_roughcut === "0") { $kshow->setHasRoughcut(false); $kshow->save(); return; } } $content = @$_REQUEST["xml"]; $update_kshow = false; if ($content != NULL) { list($xml_content, $this->comments, $update_kshow) = myMetadataUtils::setMetadata($content, $kshow, $entry); // Send an email alert to producer if ($kshow->getProducerId() != $likuser_id) { // don't send producer alerts when the producer is the editor alertPeer::sendEmailIfNeeded($kshow->getProducerId(), alert::KALTURAS_PRODUCED_ALERT_TYPE_ROUGHCUT_CREATED, array('screenname' => $this->getUser()->getAttribute('screenname'), 'kshow_name' => $kshow->getName(), 'kshow_id' => $kshow->getId())); } // TODO: efficiency: see if there is a wa to search for contributors based on some other method than full entry table scan // Send email alerts to contributors $c = new Criteria(); $c->add(entryPeer::KSHOW_ID, $kshow_id); $c->add(entryPeer::KUSER_ID, $likuser_id, Criteria::NOT_EQUAL); // the current user knows they just edited $c->addAnd(entryPeer::KUSER_ID, $kshow->getProducerId(), Criteria::NOT_EQUAL); // the producer knows they just edited $c->add(entryPeer::TYPE, entryType::MEDIA_CLIP); $c->addGroupByColumn(entryPeer::KUSER_ID); $entries = entryPeer::doSelect($c); $already_received_alert_array = array(); foreach ($entries as $entry) { alertPeer::sendEmailIfNeeded($entry->getKuserId(), alert::KALTURAS_PARTOF_ALERT_TYPE_ROUGHCUT_CREATED, array('screenname' => $this->getUser()->getAttribute('screenname'), 'kshow_name' => $kshow->getName(), 'kshow_id' => $kshow->getId())); $already_received_alert_array[$entry->getKuserId()] = true; } // send email alert to subscribers $c = new Criteria(); $c->add(KshowKuserPeer::KSHOW_ID, $kshow_id); //only subsribers of this show $c->add(KshowKuserPeer::KUSER_ID, $likuser_id, Criteria::NOT_EQUAL); // the current user knows they just edited $c->add(KshowKuserPeer::SUBSCRIPTION_TYPE, KshowKuser::KSHOW_SUBSCRIPTION_NORMAL); // this table stores other relations too $subscriptions = KshowKuserPeer::doSelect($c); foreach ($subscriptions as $subscription) { if (!isset($already_received_alert_array[$subscription->getKuserId()])) { // don't send emails to subscribed users who are also contributors alertPeer::sendEmailIfNeeded($subscription->getKuserId(), alert::KALTURAS_SUBSCRIBEDTO_ALERT_TYPE_ROUGHCUT_CREATED, array('screenname' => $this->getUser()->getAttribute('screenname'), 'kshow_name' => $kshow->getName(), 'kshow_id' => $kshow->getId())); } } if ($this->debug) { return "text/html; charset=utf-8"; } } else { $this->comments = ""; // if there is no xml - receive it from the user $this->debug = true; $file_name = myContentStorage::getFSContentRootPath() . "/" . $entry->getDataPath(); //$this->xml_content = kFile::getFileContent( $file_name ); return "text/html; charset=utf-8"; } }