Created calendar service and moved the context menu creation there
This commit is contained in:
parent
230d1a6aa9
commit
418bf0b5ff
6 changed files with 218 additions and 139 deletions
|
@ -2,9 +2,169 @@
|
|||
|
||||
class Application_Service_CalendarService
|
||||
{
|
||||
public function __construct()
|
||||
private $currentUser;
|
||||
private $ccShowInstance;
|
||||
private $showId;
|
||||
|
||||
public function __construct($instanceId = null)
|
||||
{
|
||||
|
||||
if (!is_null($instanceId)) {
|
||||
$this->ccShowInstance = CcShowInstancesQuery::create()->findPk($instanceId);
|
||||
$this->showId = $this->ccShowInstance->getDbShowId();
|
||||
}
|
||||
|
||||
$service_user = new Application_Service_UserService();
|
||||
$this->currentUser = $service_user->getCurrentUser();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Enter description here ...
|
||||
*/
|
||||
public function makeContextMenu()
|
||||
{
|
||||
$menu = array();
|
||||
$now = time();
|
||||
$baseUrl = Application_Common_OsPath::getBaseDir();
|
||||
$isAdminOrPM = $this->currentUser->isAdminOrPM();
|
||||
$isHostOfShow = $this->currentUser->isHostOfShow($this->showId);
|
||||
|
||||
//DateTime objects in UTC
|
||||
$startDT = new DateTime($this->ccShowInstance->getDbStarts(),
|
||||
new DateTimeZone("UTC"));
|
||||
$endDT = new DateTime($this->ccShowInstance->getDbEnds(),
|
||||
new DateTimeZone("UTC"));
|
||||
|
||||
//timestamps
|
||||
$start = $startDT->getTimestamp();
|
||||
$end = $endDT->getTimestamp();
|
||||
|
||||
//show has ended
|
||||
if ($now > $end) {
|
||||
if ($this->ccShowInstance->isRecorded()) {
|
||||
|
||||
$ccFile = $this->ccShowInstance->getCcFiles();
|
||||
|
||||
$menu["view_recorded"] = array(
|
||||
"name" => _("View Recorded File Metadata"),
|
||||
"icon" => "overview",
|
||||
"url" => $baseUrl."library/edit-file-md/id/".$ccFile->getDbId());
|
||||
|
||||
//recorded show can be uploaded to soundcloud
|
||||
if (Application_Model_Preference::GetUploadToSoundcloudOption()) {
|
||||
$scid = $ccFile->getDbSoundcloudId();
|
||||
|
||||
if ($scid > 0) {
|
||||
$menu["soundcloud_view"] = array(
|
||||
"name" => _("View on Soundcloud"),
|
||||
"icon" => "soundcloud",
|
||||
"url" => $ccFile->getDbSoundcloudLinkToFile());
|
||||
}
|
||||
|
||||
$text = is_null($scid) ? _('Upload to SoundCloud') : _('Re-upload to SoundCloud');
|
||||
$menu["soundcloud_upload"] = array(
|
||||
"name"=> $text,
|
||||
"icon" => "soundcloud");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//Show content can be modified from the calendar if:
|
||||
// the show has not started,
|
||||
// the user is admin or hosting the show,
|
||||
// the show is not recorded or rebroadcasted
|
||||
if ($now < $start && ($isAdminOrPM || $isHostOfShow) &&
|
||||
!$this->ccShowInstance->isRecorded() && !$this->ccShowInstance->isRebroadcast()) {
|
||||
|
||||
$menu["schedule"] = array(
|
||||
"name"=> _("Add / Remove Content"),
|
||||
"icon" => "add-remove-content",
|
||||
"url" => $baseUrl."showbuilder/builder-dialog/");
|
||||
|
||||
$menu["clear"] = array(
|
||||
"name"=> _("Remove All Content"),
|
||||
"icon" => "remove-all-content",
|
||||
"url" => $baseUrl."schedule/clear-show");
|
||||
}
|
||||
|
||||
//"Show Content" should be a menu item at all times except when
|
||||
//the show is recorded
|
||||
if (!$this->ccShowInstance->isRecorded()) {
|
||||
|
||||
$menu["content"] = array(
|
||||
"name"=> _("Show Content"),
|
||||
"icon" => "overview",
|
||||
"url" => $baseUrl."schedule/show-content-dialog");
|
||||
}
|
||||
|
||||
//show is currently playing and user is admin
|
||||
if ($start <= $now && $now < $end && $isAdminOrPM) {
|
||||
|
||||
if ($this->ccShowInstance->isRecorded()) {
|
||||
$menu["cancel_recorded"] = array(
|
||||
"name"=> _("Cancel Current Show"),
|
||||
"icon" => "delete");
|
||||
} else {
|
||||
$menu["cancel"] = array(
|
||||
"name"=> _("Cancel Current Show"),
|
||||
"icon" => "delete");
|
||||
}
|
||||
}
|
||||
|
||||
$isRepeating = $this->ccShowInstance->getCcShow()->getFirstCcShowDay()->isRepeating();
|
||||
if (!$this->ccShowInstance->isRebroadcast()) {
|
||||
if ($isRepeating) {
|
||||
$menu["edit"] = array(
|
||||
"name" => _("Edit"),
|
||||
"icon" => "edit",
|
||||
"items" => array());
|
||||
|
||||
$menu["edit"]["items"]["all"] = array(
|
||||
"name" => _("Edit Show"),
|
||||
"icon" => "edit",
|
||||
"url" => $baseUrl."Schedule/populate-show-form");
|
||||
|
||||
$menu["edit"]["items"]["instance"] = array(
|
||||
"name" => _("Edit This Instance"),
|
||||
"icon" => "edit",
|
||||
"url" => $baseUrl."Schedule/populate-show-instance-form");
|
||||
} else {
|
||||
$menu["edit"] = array(
|
||||
"name"=> _("Edit Show"),
|
||||
"icon" => "edit",
|
||||
"_type"=>"all",
|
||||
"url" => $baseUrl."Schedule/populate-show-form");
|
||||
}
|
||||
}
|
||||
|
||||
//show hasn't started yet and user is admin
|
||||
if ($now < $start && $isAdminOrPM) {
|
||||
//show is repeating so give user the option to delete all
|
||||
//repeating instances or just the one
|
||||
if ($isRepeating) {
|
||||
//create delete sub menu.
|
||||
$menu["del"] = array(
|
||||
"name"=> _("Delete"),
|
||||
"icon" => "delete",
|
||||
"items" => array());
|
||||
|
||||
$menu["del"]["items"]["single"] = array(
|
||||
"name"=> _("Delete This Instance"),
|
||||
"icon" => "delete",
|
||||
"url" => $baseUrl."schedule/delete-show");
|
||||
|
||||
$menu["del"]["items"]["following"] = array(
|
||||
"name"=> _("Delete This Instance and All Following"),
|
||||
"icon" => "delete",
|
||||
"url" => $baseUrl."schedule/cancel-show");
|
||||
} else {
|
||||
$menu["del"] = array(
|
||||
"name"=> _("Delete"),
|
||||
"icon" => "delete",
|
||||
"url" => $baseUrl."schedule/delete-show");
|
||||
}
|
||||
}
|
||||
}
|
||||
return $menu;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue