Exemplo n.º 1
0
 public function removeItems($scheduledItems, $adjustSched = true, $cancelShow = false)
 {
     $showInstances = array();
     $this->con->beginTransaction();
     try {
         $this->validateRequest($scheduledItems);
         $scheduledIds = array();
         foreach ($scheduledItems as $item) {
             $scheduledIds[] = $item["id"];
         }
         $removedItems = CcScheduleQuery::create()->findPks($scheduledIds);
         //check to make sure all items selected are up to date
         foreach ($removedItems as $removedItem) {
             $instance = $removedItem->getCcShowInstances($this->con);
             //check if instance is linked and if so get the schedule items
             //for all linked instances so we can delete them too
             if (!$cancelShow && $instance->getCcShow()->isLinked()) {
                 //returns all linked instances if linked
                 $ccShowInstances = $this->getInstances($instance->getDbId());
                 $instanceIds = array();
                 foreach ($ccShowInstances as $ccShowInstance) {
                     $instanceIds[] = $ccShowInstance->getDbId();
                 }
                 /*
                  * Find all the schedule items that are in the same position
                  * as the selected item by the user.
                  * The position of each track is the same across each linked instance
                  */
                 $itemsToDelete = CcScheduleQuery::create()->filterByDbPosition($removedItem->getDbPosition())->filterByDbInstanceId($instanceIds, Criteria::IN)->find();
                 foreach ($itemsToDelete as $item) {
                     if (!$removedItems->contains($item)) {
                         $removedItems->append($item);
                     }
                 }
             }
             //check to truncate the currently playing item instead of deleting it.
             if ($removedItem->isCurrentItem($this->epochNow)) {
                 $nEpoch = $this->epochNow;
                 $sEpoch = $removedItem->getDbStarts('U.u');
                 $length = bcsub($nEpoch, $sEpoch, 6);
                 $cliplength = Application_Common_DateHelper::secondsToPlaylistTime($length);
                 $cueinSec = Application_Common_DateHelper::playlistTimeToSeconds($removedItem->getDbCueIn());
                 $cueOutSec = bcadd($cueinSec, $length, 6);
                 $cueout = Application_Common_DateHelper::secondsToPlaylistTime($cueOutSec);
                 //Set DbEnds - 1 second because otherwise there can be a timing issue
                 //when sending the new schedule to Pypo where Pypo thinks the track is still
                 //playing.
                 $removedItem->setDbCueOut($cueout)->setDbClipLength($cliplength)->setDbEnds($this->nowDT)->save($this->con);
             } else {
                 $removedItem->delete($this->con);
             }
             // update is_scheduled in cc_files but only if
             // the file is not scheduled somewhere else
             $fileId = $removedItem->getDbFileId();
             // check if the removed item is scheduled somewhere else
             $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles();
             if (!is_null($fileId) && !in_array($fileId, $futureScheduledFiles)) {
                 $db_file = CcFilesQuery::create()->findPk($fileId, $this->con);
                 $db_file->setDbIsScheduled(false)->save($this->con);
             }
         }
         if ($adjustSched === true) {
             //get the show instances of the shows we must adjust times for.
             foreach ($removedItems as $item) {
                 $instance = $item->getDBInstanceId();
                 if (!in_array($instance, $showInstances)) {
                     $showInstances[] = $instance;
                 }
             }
             foreach ($showInstances as $instance) {
                 $this->removeGaps($instance);
                 $this->calculateCrossfades($instance);
             }
         }
         //update the status flag in cc_schedule.
         $instances = CcShowInstancesQuery::create()->filterByPrimaryKeys($showInstances)->find($this->con);
         foreach ($instances as $instance) {
             $instance->updateScheduleStatus($this->con);
             $instance->correctSchedulePositions();
         }
         //update the last scheduled timestamp.
         CcShowInstancesQuery::create()->filterByPrimaryKeys($showInstances)->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con);
         $this->con->commit();
         Application_Model_RabbitMq::PushSchedule();
     } catch (Exception $e) {
         $this->con->rollback();
         throw $e;
     }
 }
 public function emptyShowContent($instanceId)
 {
     try {
         $ccShowInstance = CcShowInstancesQuery::create()->findPk($instanceId);
         $instances = array();
         $instanceIds = array();
         if ($ccShowInstance->getCcShow()->isLinked()) {
             foreach ($ccShowInstance->getCcShow()->getCcShowInstancess() as $instance) {
                 $instanceIds[] = $instance->getDbId();
                 $instances[] = $instance;
             }
         } else {
             $instanceIds[] = $ccShowInstance->getDbId();
             $instances[] = $ccShowInstance;
         }
         /* Get the file ids of the tracks we are about to delete
          * from cc_schedule. We need these so we can update the
          * is_scheduled flag in cc_files
          */
         $ccSchedules = CcScheduleQuery::create()->filterByDbInstanceId($instanceIds, Criteria::IN)->setDistinct(CcSchedulePeer::FILE_ID)->find();
         $fileIds = array();
         foreach ($ccSchedules as $ccSchedule) {
             $fileIds[] = $ccSchedule->getDbFileId();
         }
         /* Clear out the schedule */
         CcScheduleQuery::create()->filterByDbInstanceId($instanceIds, Criteria::IN)->delete();
         /* Now that the schedule has been cleared we need to make
          * sure we do not update the is_scheduled flag for tracks
          * that are scheduled in other shows
          */
         $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles();
         foreach ($fileIds as $k => $v) {
             if (in_array($v, $futureScheduledFiles)) {
                 unset($fileIds[$k]);
             }
         }
         $selectCriteria = new Criteria();
         $selectCriteria->add(CcFilesPeer::ID, $fileIds, Criteria::IN);
         $updateCriteria = new Criteria();
         $updateCriteria->add(CcFilesPeer::IS_SCHEDULED, false);
         BasePeer::doUpdate($selectCriteria, $updateCriteria, Propel::getConnection());
         Application_Model_RabbitMq::PushSchedule();
         $con = Propel::getConnection(CcShowInstancesPeer::DATABASE_NAME);
         foreach ($instances as $instance) {
             $instance->updateDbTimeFilled($con);
         }
         return true;
     } catch (Exception $e) {
         Logging::info($e->getMessage());
         return false;
     }
 }
Exemplo n.º 3
0
 public static function setIsScheduled($fileId, $status)
 {
     $file = self::RecallById($fileId);
     $updateIsScheduled = false;
     if (!is_null($fileId) && !in_array($fileId, Application_Model_Schedule::getAllFutureScheduledFiles())) {
         $file->_file->setDbIsScheduled($status)->save();
         $updateIsScheduled = true;
     }
     return $updateIsScheduled;
 }