From cc806d9b7b854e554399e2716fd8f15e491e23ed Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 11:18:28 +0200 Subject: [PATCH 01/20] CC-3605 : Create 2.1 upgrades --- .../common/Version20120411102907.php | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php new file mode 100644 index 000000000..8811990e1 --- /dev/null +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php @@ -0,0 +1,39 @@ +_addSql("ALTER TABLE cc_files ALTER COLUMN length TYPE interval"); + + $this->_addSql("ALTER TABLE cc_playlistcontents ALTER COLUMN cuein TYPE interval"); + $this->_addSql("ALTER TABLE cc_playlistcontents ALTER COLUMN cueout TYPE interval"); + $this->_addSql("ALTER TABLE cc_playlistcontents ALTER COLUMN cliplength TYPE interval"); + + $this->_addSql("ALTER TABLE cc_schedule ALTER COLUMN cue_in TYPE interval"); + $this->_addSql("ALTER TABLE cc_schedule ALTER COLUMN cue_out TYPE interval"); + $this->_addSql("ALTER TABLE cc_schedule ALTER COLUMN clip_length TYPE interval"); + + //remove old columns from cc_schedule that deal with groups or playlists. + $this->_addSql("ALTER TABLE cc_schedule DROP COLUMN group_id"); + $this->_addSql("ALTER TABLE cc_schedule DROP COLUMN schedule_group_played"); + $this->_addSql("ALTER TABLE cc_schedule DROP COLUMN playlist_id"); + + $this->_addSql("ALTER TABLE cc_schedule ADD playout_status integer DEFAULT 1 NOT NULL"); + } + + public function down(Schema $schema) + { + + } +} \ No newline at end of file From bcc30b9cb1cb9405b49c7b7b99f998472239ffb8 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 16:01:04 +0200 Subject: [PATCH 02/20] CC-3605 : Create 2.1 upgrades --- .../upgrades/airtime-2.1.0/DbUpgrade.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php index ed4ac9089..08935b8b3 100644 --- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php +++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php @@ -12,8 +12,23 @@ class AirtimeDatabaseUpgrade{ private static function task0(){ UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120410143340'); + $sql = "INSERT INTO cc_pref(\"keystr\", \"valstr\") VALUES('scheduled_play_switch', 'on')"; UpgradeCommon::nonSelectQueryDb($sql); + + require_once 'propel/runtime/lib/Propel.php'; + Propel::init(__DIR__."/../../configs/airtime-conf-production.php"); + + $con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); + + $showInstances = CcShowInstancesQuery::create() + ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) + ->filterByDbStarts(Criteria::GREATER_EQUAL) + ->find($con); + + foreach ($showInstances as $instance) { + $instance->updateScheduleStatus($con); + } } } From c2ce50bf46ca5e89822c8206e199fd0425c70683 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 16:27:46 +0200 Subject: [PATCH 03/20] CC-3605 : Create 2.1 upgrades --- .../upgrades/airtime-2.1.0/DbUpgrade.php | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php index 08935b8b3..a59510858 100644 --- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php +++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php @@ -8,26 +8,46 @@ class AirtimeDatabaseUpgrade{ public static function start(){ echo "* Updating Database".PHP_EOL; self::task0(); + self::task1(); } private static function task0(){ - UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120410143340'); + UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120411102907'); $sql = "INSERT INTO cc_pref(\"keystr\", \"valstr\") VALUES('scheduled_play_switch', 'on')"; UpgradeCommon::nonSelectQueryDb($sql); + } + + /* + * set values for playout_status in cc_schedule + */ + private static function task1() { + + // Define path to application directory + defined('APPLICATION_PATH') + || define('APPLICATION_PATH', realpath(__DIR__."/../../application")); + + // Ensure library is on include_path + set_include_path(implode(PATH_SEPARATOR, array( + get_include_path(), + realpath(APPLICATION_PATH . '/../library') + ))); + + //Propel classes. + set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); require_once 'propel/runtime/lib/Propel.php'; - Propel::init(__DIR__."/../../configs/airtime-conf-production.php"); - - $con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); - - $showInstances = CcShowInstancesQuery::create() - ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) - ->filterByDbStarts(Criteria::GREATER_EQUAL) - ->find($con); - - foreach ($showInstances as $instance) { - $instance->updateScheduleStatus($con); + Propel::init(APPLICATION_PATH."/configs/airtime-conf-production.php"); + + $con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); + + $showInstances = CcShowInstancesQuery::create() + ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) + ->filterByDbStarts(Criteria::GREATER_EQUAL) + ->find($con); + + foreach ($showInstances as $instance) { + $instance->updateScheduleStatus($con); } } From 08162de842949fded9a782729fc5be684b07b1b9 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 17:57:14 +0200 Subject: [PATCH 04/20] CC-3605 : Create 2.1 upgrades --- .../upgrades/airtime-2.1.0/DbUpgrade.php | 7 +++--- .../common/Version20120411174904.php | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php index a59510858..509beb5a1 100644 --- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php +++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php @@ -12,7 +12,7 @@ class AirtimeDatabaseUpgrade{ } private static function task0(){ - UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120411102907'); + UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120411174904'); $sql = "INSERT INTO cc_pref(\"keystr\", \"valstr\") VALUES('scheduled_play_switch', 'on')"; UpgradeCommon::nonSelectQueryDb($sql); @@ -25,7 +25,7 @@ class AirtimeDatabaseUpgrade{ // Define path to application directory defined('APPLICATION_PATH') - || define('APPLICATION_PATH', realpath(__DIR__."/../../application")); + || define('APPLICATION_PATH', realpath(__DIR__.'/../../../airtime_mvc/application')); // Ensure library is on include_path set_include_path(implode(PATH_SEPARATOR, array( @@ -36,6 +36,7 @@ class AirtimeDatabaseUpgrade{ //Propel classes. set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); + require_once APPLICATION_PATH."/configs/conf.php"; require_once 'propel/runtime/lib/Propel.php'; Propel::init(APPLICATION_PATH."/configs/airtime-conf-production.php"); @@ -43,7 +44,7 @@ class AirtimeDatabaseUpgrade{ $showInstances = CcShowInstancesQuery::create() ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) - ->filterByDbStarts(Criteria::GREATER_EQUAL) + ->filterByDbStarts(gmdate("Y-m-d H:i:s"), Criteria::GREATER_EQUAL) ->find($con); foreach ($showInstances as $instance) { diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php new file mode 100644 index 000000000..87f0f6714 --- /dev/null +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php @@ -0,0 +1,23 @@ +_addSql("ALTER TABLE cc_show_instances ADD created timestamp(6)"); + $this->_addSql("ALTER TABLE cc_show_instances ADD last_scheduled timestamp(6)"); + } + + public function down(Schema $schema) + { + + } +} \ No newline at end of file From 37c929f6101b7412ea1fe172e3834f79b2dd3f42 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 18:16:20 +0200 Subject: [PATCH 05/20] CC-3605 : Create 2.1 upgrades --- .../upgrades/airtime-2.1.0/common/Version20120411102907.php | 2 ++ .../upgrades/airtime-2.1.0/common/Version20120411174904.php | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php index 8811990e1..3eee194f2 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411102907.php @@ -24,6 +24,8 @@ class Version20120411102907 extends AbstractMigration $this->_addSql("ALTER TABLE cc_schedule ALTER COLUMN cue_out TYPE interval"); $this->_addSql("ALTER TABLE cc_schedule ALTER COLUMN clip_length TYPE interval"); + $this->_addSql("ALTER TABLE cc_show_instances ALTER COLUMN time_filled TYPE interval"); + //remove old columns from cc_schedule that deal with groups or playlists. $this->_addSql("ALTER TABLE cc_schedule DROP COLUMN group_id"); $this->_addSql("ALTER TABLE cc_schedule DROP COLUMN schedule_group_played"); diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php index 87f0f6714..8f8c1ba02 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120411174904.php @@ -14,6 +14,11 @@ class Version20120411174904 extends AbstractMigration { $this->_addSql("ALTER TABLE cc_show_instances ADD created timestamp(6)"); $this->_addSql("ALTER TABLE cc_show_instances ADD last_scheduled timestamp(6)"); + + //setting these to a default now for timeline refresh purposes. + $now = gmdate("Y-m-d H:i:s"); + $this->_addSql("UPDATE cc_show_instances SET created = '$now'"); + $this->_addSql("UPDATE cc_show_instances SET last_scheduled = '$now'"); } public function down(Schema $schema) From d76dea2187b8d3f362144dc944cd5e17808881fb Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 18:27:36 +0200 Subject: [PATCH 06/20] CC-3605 : Create 2.1 upgrades --- install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php index 509beb5a1..b6d2d73db 100644 --- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php +++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php @@ -36,8 +36,8 @@ class AirtimeDatabaseUpgrade{ //Propel classes. set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); - require_once APPLICATION_PATH."/configs/conf.php"; - require_once 'propel/runtime/lib/Propel.php'; + include_once APPLICATION_PATH."/configs/conf.php"; + include_once 'propel/runtime/lib/Propel.php'; Propel::init(APPLICATION_PATH."/configs/airtime-conf-production.php"); $con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); From f82aef2a85f98bcc277226ba21b0021be91f9825 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 11:03:13 -0400 Subject: [PATCH 07/20] CC-3566: Preferences->"Fade In" is not respected when Show starts - millisecond value of fade was sent wrong from php side. - crossfade() call was removed and it was causing fade in/out not working. --- airtime_mvc/application/models/Schedule.php | 3 ++- python_apps/pypo/liquidsoap_scripts/ls_lib.liq | 9 +++++++++ python_apps/pypo/liquidsoap_scripts/ls_script.liq | 1 + python_apps/pypo/pypopush.py | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index ad9a31089..19ba883fb 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -351,7 +351,8 @@ class Application_Model_Schedule { if (strpos($t[2], ".")) { $secParts = explode(".", $t[2]); $millisecs = $secParts[1]; - $millisecs = substr($millisecs, 0, 3); + $millisecs = str_pad(substr($millisecs, 0, 3),3, '0'); + Logging::log("mili:".print_r($millisecs,true)); $millisecs = intval($millisecs); $seconds = intval($secParts[0]); } else { diff --git a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq index aad687a53..82ef411b1 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq @@ -15,6 +15,15 @@ def append_title(m) = end end +def crossfade(s) + #duration is automatically overwritten by metadata fields passed in + #with audio + s = fade.in(type="log", duration=0., s) + s = fade.out(type="log", duration=0., s) + fader = fun (a,b) -> add(normalize=false,[b,a]) + cross(fader,s) +end + def transition(a,b) = log("transition called...") add(normalize=false, diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index fa5d631f8..d7422b93b 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -29,6 +29,7 @@ s3_namespace = ref '' queue = on_metadata(notify, queue) queue = map_metadata(append_title, queue) +queue = crossfade(queue) ignore(output.dummy(queue, fallible=true)) server.register(namespace="vars", "pypo_data", fun (s) -> begin pypo_data := s "Done" end) diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index 396302754..f66c96aed 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -426,7 +426,7 @@ class PypoPush(Thread): self.telnet_lock.release() def create_liquidsoap_annotation(self, media): - return 'annotate:media_id="%s",liq_fade_in="%s",liq_fade_out="%s",liq_cue_in="%s",liq_cue_out="%s",schedule_table_id="%s":%s' \ + return 'annotate:media_id="%s",liq_start_next="0",liq_fade_in="%s",liq_fade_out="%s",liq_cue_in="%s",liq_cue_out="%s",schedule_table_id="%s":%s' \ % (media['id'], float(media['fade_in'])/1000, float(media['fade_out'])/1000, float(media['cue_in']), float(media['cue_out']), media['row_id'], media['dst']) def run(self): From 29b8e0f68273377acf809aaf2fa3ebede26dc1b0 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 11 Apr 2012 18:35:47 +0200 Subject: [PATCH 08/20] CC-3424 , CSS and icon changes for the new context menu. Added icons for all actions Signed-off-by: Vladimir --- .../public/css/images/icon_add_content_cm.png | Bin 0 -> 1249 bytes .../css/images/icon_add_playlist_cm.png | Bin 0 -> 1261 bytes .../public/css/images/icon_copy_cm.png | Bin 0 -> 1185 bytes airtime_mvc/public/css/images/icon_cut_cm.png | Bin 0 -> 2949 bytes .../public/css/images/icon_delete_cm.png | Bin 0 -> 1156 bytes .../public/css/images/icon_door_cm.png | Bin 0 -> 1138 bytes .../public/css/images/icon_download_cm.png | Bin 0 -> 1159 bytes .../public/css/images/icon_edit_cm.png | Bin 0 -> 1211 bytes .../public/css/images/icon_overview_cm.png | Bin 0 -> 1244 bytes .../public/css/images/icon_paste_cm.png | Bin 0 -> 1191 bytes .../public/css/images/icon_play_cm.png | Bin 0 -> 1184 bytes .../css/images/icon_remove_all_content_cm.png | Bin 0 -> 1252 bytes .../css/images/icon_select-cursor_cm.png | Bin 0 -> 1218 bytes .../public/css/images/icon_soundcloud_cm.png | Bin 0 -> 1210 bytes airtime_mvc/public/css/jquery.contextMenu.css | 33 +++++++++++------- 15 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 airtime_mvc/public/css/images/icon_add_content_cm.png create mode 100644 airtime_mvc/public/css/images/icon_add_playlist_cm.png create mode 100644 airtime_mvc/public/css/images/icon_copy_cm.png create mode 100644 airtime_mvc/public/css/images/icon_cut_cm.png create mode 100644 airtime_mvc/public/css/images/icon_delete_cm.png create mode 100644 airtime_mvc/public/css/images/icon_door_cm.png create mode 100644 airtime_mvc/public/css/images/icon_download_cm.png create mode 100644 airtime_mvc/public/css/images/icon_edit_cm.png create mode 100644 airtime_mvc/public/css/images/icon_overview_cm.png create mode 100644 airtime_mvc/public/css/images/icon_paste_cm.png create mode 100644 airtime_mvc/public/css/images/icon_play_cm.png create mode 100644 airtime_mvc/public/css/images/icon_remove_all_content_cm.png create mode 100644 airtime_mvc/public/css/images/icon_select-cursor_cm.png create mode 100644 airtime_mvc/public/css/images/icon_soundcloud_cm.png diff --git a/airtime_mvc/public/css/images/icon_add_content_cm.png b/airtime_mvc/public/css/images/icon_add_content_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..9aed5f47d7896ad7c5f0c5b170b3942a9c9052cb GIT binary patch literal 1249 zcmbVMO^6#+9G{wPDeb0)79_T!<19T$o6NjP(oBX;w)44-cD5lK*i?mfcIIs|Br|Vz z=B>#tMbd(@i+ET)DMI%mh+si`XrZEuUGVeb#cn++2zu}X6%>T^O*UD3SoYw+%zJO< z|NH&^pR-b#nv5Sheu$!|c=?=KC2JzO4;~=TCw|{D$?_=H>UbK>;f@(VO0v-`q|2_^ zfK_PPi}Rnuaf*uFbZT{6H_nR|a?@sHlkU1cK~vQDMAtX17R2-{Y&c$#`Q^^X4DHxO zW+rEFhOfY;b8abs(@Rq|YpG=wY-XZFk9S2v;6iNDUAOIpVzVfMYqH1$+wR#SAZU96h)gq88Y5VpY`# zTI5t@ni%^c%XT`QbSINWL4yT_LLuVd`4q88g^M0GyD2Xm8#1Ucv;xP+4)W-T(VRsK zxX2Jsw?lCKs?%uVaEIIr2gxF7W4or$f;7hleVZu0A<8iJM!4>db%?9*Kj(Ml4{M7) zWUDYl3xP$dI5+ly)ZRjo;UEUlFoPB(Rn*OP2>TxlL%cwocRaJLB5T2g9xkgzhCtG` zV~Zd!=Y%ZBDT7`K+Mi zbU_|MC~ zMy8Qm{ri0LwTH_K`;Nt4>a9L*`XkHt_Wf3(KRWWq5A0h9dJlcJu`zOg{p8sXspV8} z^ThJ2y}uqyp#9&yO@CSc_4dyPYvIwv6D)GZ_ zzP@^Qo%*SLW&Ok@@%E8FGhfZ=r`uy!emr~Z_~p?`W9!pTN|W=+#M3Kl?>zhR#^g7n rM=yOLuTz!Ywdd#KGvb=?RBR+kl}4W_Rm1DIqMuG#n^JGcm#_T`naGtq literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_add_playlist_cm.png b/airtime_mvc/public/css/images/icon_add_playlist_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..3b273b3ea4390d77e8751444dc4062132e67ae1f GIT binary patch literal 1261 zcmbVMO=#Oz9M_tq4QV}0TS{97d#GEXTWoz;{*Z{5*!oD_R$1m4YG^2tr59V+(o?19 z+3{ht=?d8xti7d|F1w7uptSU|u)%2O%W`VV24ROD3Ofu2W9&4xHhXgHtcQ?81=4#@ z`u~2v|EE5lnVyP_9v`JBDpEMD6v-M5?~%Ra`Nm(H23d|_wTx%c0&W>Tq;eLjKu~au zDl9_7TDXe%lbLVL{8iYZQ^amBWQ{mpJ;oAS%(-@VAXcB^dH}TPXpV^ z(&v*pt9vr6*{3@`ob61P%ud}DEqdZzFy593fdjDt+D^j_q;{6>@k(SLzGi69Gr{#N zz2#I{p8+!RAxOsAn8~JCkmBN8LP)36V}NHlmSK5@<6~S}O7IfPg8oGlHQ!p0ii+0P zBBv}}!`PD;rqyc2TZuUGs|+WKV#vYsF=7!57F}$#V{UL_z@Wgu^lcB@$OR#zQ9(_d zrHQ9oAvj*quGVm{P3{K$WRbKnZNp=@ILr7wn=rlsO4oNsIL@|pfQ#^d=Xc}}N{b$3 ziZDP;-y~IBIPrqi?n0qqKL$xR{5m96)Qm;|dmnUNdXG47yGBDnX48Q#E+|==K;o8d zNnARg%m^$i%bA4Aaa=yB>tO0o|PjQkQpjX^`r)DT8N4S7JGO@i~bYoS&U)|x~_ zVpX7Te*i7bM-J$vU9xvjS4BY;I6kK;{iqXsKF11TQpSo3f&*Yu}8`-~V#tv-(D%dH*1|NOg}){vPRSlWW0b=bb1s z{B+-^tF@2p?$hcp_<6MZetGWRf#t9NTw5JkUVA899lNsj+M6Fn&`~NPX`u4m%{%I$ z<-L{E_0MlK7P=2ol?T7>0ndl6TUXCKoAM?8pV#-_Qi`ueoU`K>H`bS!CtuuMy>|He z=A(*nYX6nV4)w{~GqoQczw*wPAj+b^Gp8$dhD8~ literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_copy_cm.png b/airtime_mvc/public/css/images/icon_copy_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d0f1958fcd6d7f1f260de630a90aa529390657 GIT binary patch literal 1185 zcmbVMOK8+U7!LR@3dMr>0@L*3!A)keuWsyGl1OE0xmyc85gFDfc12#TPS?QZo@dN7d8O!9x<_dj#0yL0b` zhOG?@!)(ZPsCl|JhWFal^tt2PZ-Xvdh}K7X@Bk?rK4N4G_aipv7)6vvhBb0@8nrRZ zio159kM!yLB@;Wm5!&z-$D?S5X=|@|hB=4`+mDL2o94dUf5@@6mF9ZmI?%lgD%l;Q zKI$3mESRH%X3FB)_poghi4r)77;MEEas#Q7=Bm6B-G{FQj;)%I!8EtvRG;3>X0VUg zI1eHwNB}kgc^Hi)lgVAI2p|xEC_pg+lTuWa0AOnuN7a05K+3Dxnif5!xe_6sBnahl znJ-6q>=y-?N~J;$QH)TFNHF3OqY`n0mO6uq0@JrWVq=#L8I68COwt_nbRh)C%iF~g z2^PuSpq4C}Hlbp80_1_L^`b9^p8P)&a?*zs@ho9~4GBB;-+mhkcV)aiHZN zspW-2!&(fIZuoY)gVkCEgkXAd_j0 zY7jytt}3!70y(S6sn!grb1a38s!&ZPp+b==gc{vIpvGe|jH$_lqQ&aioEs3sHBnvH zrn)t(yewAA_{bpGFJL@WZ>a7PCO9ZzkInSN*rvGAuH=+hpnbv zvX@ZT5-}|XMOjm8QAb5Z2C-B;tH6u~Xw(Z>>whvPP-ld&)Bfqa`YYPb;dXJ3=wWdZ zkxL8b(>Xi*`NcgtqbGB!T&T?7I{#)J)4VqOv2=BQYX0e^2S4YUuh?X4Gy3}L&cwv! z3uBKArt!zCCO-1%X3z7TO0svirMc~QS53Y?c;fe-=hJJhd~X2EwYSHgt-o13 P6aF-ETBmwjIWqPKczTHG literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_cut_cm.png b/airtime_mvc/public/css/images/icon_cut_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..13e7abea8487af153b47cd8ef416df60855e5416 GIT binary patch literal 2949 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 literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_download_cm.png b/airtime_mvc/public/css/images/icon_download_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..90965f4dd30b905aedecdfec44db19d1e8d69fdb GIT binary patch literal 1159 zcmbVMPiWIn9L`X?F)TPinL{wk*hI0(OVh4xSl!Ylbp=yLT3GS2rO8_x+vLUM&1O4o z-UN?cWu62t^Wf2gf*#z(g9^e<^X5qrui|{^+PcG-U?6$#CBN_cet+{|p>!iUJT^>G zRJ1rRYh*nW-a`@cy!3NlC(8w_RB;)t;I{5TN-|Lm(nVXZLk;TY+T9&ELs2JQSd}WS zsy9Ug*{mMguz~FoG)2wK2Ci;2A*O4vZaG=z`^#4hZJAkSF{uL8&BKN@zwW{EdZ}Wp zH;s(R%wDHw0+A5d5bJbcw;W##vP_3pB>V6+$Iu-U+{`iuPF2+fI*&X^Cs`0Pz%-zz zd6pLvsZ{D39S1z%K%C>_F+L>U~?ViEJ#9IOX1$Dimi$j~=D%f%LQ=#Wvbp;eq^h^Gf3*sf;P8`$rYJAOA= zByC)vyByB~&gf%0eM0NEwh8WQpe$J`-0Gl8^ujQ21n0kbBso<73@1U{BW~x(C>F z;aIGg_n?lES3#)NYp8_=!pLtRm(G`y^rGdMsO^WfCJ~WXW$0P=pjq&cO?T2RT1Tk= zJL&_h`9B%sh%;Q+X@@$m_lmT0xb4poIrJwHI;3zOnX`wjFOy_O?-XUJ671G~?eEW? znA{lI8km}za(9IKdr&LCc{?{g8i_1N<>kG{gIc8eX^DzF9p_n>x>ERj`rKu9Y;${W zP#b*04m2aXzek=Ay!%ladi~+lv(2v?-=gQwM$>a!jf=M<)X7n5$zqL1SN)ISuc4@v JD6|ryazPqX!jsQJ5!15X8F|K_{pT=1bR34`YIXreOpl3(nixmbbyS~lImcP(8&mfSyL_G99H$o6R&U=01Z!# z{16>d_DdQu{ieHNF>q;MI;~|iM$~CgoqRnC4^w@;+UGFk4iZ?Q`2InI9H_9mUzBYD)~zR zKXD4Y5R1h;4pHx;)6N-%B6XL@ zEw`2|mNveu+PvULyi>LD;;W++Wo3kEE?K)YhyOUgEWewdv@xHjfne@U$@ zo!Kb=<|(4~ilkV9pzsIxZ7!!o(KM%5jcC{JNn_LL?cA1`$f7qJgv^ z2+5F~Or%AW$fOgoXbROimcs_p3523@G8&L$f{+%X;h2yLi*g{DW~{+j9hl#eAhE1%9l~N8?DRJ_IjMp2gzep%?i^PVhfe;)tES;2GuhuLg7ORXM<0RHI4l!Xh z?UJ#K`oE)I#OnW(F`hZYd!6=I=ha`acJ{VQbHolylZY)=IET&Ik6%4=Y({TqqoZTKr}MzoRdBZFGiW&mo_x=WVEQn4y|L0h^CEd~7Pf$yEytbC z9mQ~^$*i=0J$Cl>x<|bC> zb{&Hc+J=K2J-60h+H>m0!6QKV)Yw1V+H$|`@`j{u0vq@dd9r= SX!lX?calx_$q$pq&-@0FNP*@6 literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_overview_cm.png b/airtime_mvc/public/css/images/icon_overview_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..1e085d84a05162ae51e22ee3cc9639d4228c8172 GIT binary patch literal 1244 zcmbVMPi)&%9DZF`S5@i;gKb(g*pnyL2^Rakc&QVsrcLaWM#3dZA}yz>j{VYDjs0Bv zm83nO48b%wO^DOPVMu6#3mgz|0BMuPWz!^tG^C9i2P$zu95xO^i0(N}x*e)cnkD6sV7>ojo9@9js{?QrW;uHGGVYmmRw&G{{G>b09{8D z&Sp$x20CfE^Xnn0t}oQ=^<_Kf2s3ZM>8{ENJi;v4_1b=t4tHP zr&}R-LB(Bav1pszj|R!&X_LBEAYlZ-_F@-4UL*Z5^=+dF=d-{84Q!AX0@y zbTzbj6`LoXklI}+HXOvDnpU_>copZYc0~FgOjCWEJMa2d+o1NUM|@T?G=W1z$8}V! z6f)T}2cy-f z(0zwEb0PI$Kkcf!gZk5>-oiT1k}-)pBgLKeMCT1(@pg{4+jGPZ+mlFqUbv9Y*}cpE zzRPFyTFJ=Qy1zC4+uWQuR632(j(ZfWn2o=SX&?jHE|(AAa1CqIJ>0!ewIeB)UD z;OY4bd*Qv?pxS#$e>i_`44zCLhaZew{JN(kzx?>pg=TZl7y=uwx9)#`^8X|8|E5%2 KFup1*zV`^x_KF$+ literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_paste_cm.png b/airtime_mvc/public/css/images/icon_paste_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..9de4d01f90b812a7f3adb32e7c16203a528982bc GIT binary patch literal 1191 zcmbVMO=#0l9FN~~Y(oV>hpH5)3r zlL`v+1KGio&ZB}JJvhOOprD`^5l=%D1_KpA6!fKQr-w1YK=R&8{=eVv|Cx(@y@wm? zo9h{dY0PyidAjZh?z*k?+4AL=Mwh)LGf4XJC@E_$Vp0YkK_F*oV-=&F*Oz z^-uQ}^yzUuVX$3?K&LNJ0t*oh_*TjGBtOYkcqO_IUUMv{n2_-#yW-TK+6QFpA`lJ3 zkPc%I#P~2DX%|JY4G55j927WS2=Ss65hMsf^HC0o^^rzBe>#F03zTrP*p zkuY}0I6jd`1RR18q81@<$|jm0vc1+CgMvKWH63DN8w8Bn2%aEGmU_Apg5~7Ru_EzS z$!)KiESfgX*Bp)yL(Z+(1o72Ss=7YHvR17Uz6V}OgV_lBM(owI<4Yp>t9mq z3k8PN7$jA5#}Tb!Rx5d^@oRVZIBy5<5#Ea=@yd6SWjz=;) z&!?kGI+YP%Dw|0q;xepptc7itVLT2aB1I}ZpW)MDjL*nXISpg7l1(W!Y|i$GX6vY? zYf{}RHnuKSl3k<`>=rOC)f%d=hza(J*a32X6dW^c1DCy^)-)m-tAbo}5*b++TcDD5 z$y`JI-%+n%jsM9QN1fq~ z<)1X30}X9AX8i{nn&vw`Z9Y4cJDEE;9X|iQ`7^q*zwec_ x@Gbl1s-brXcy2MaPk5RCxqY$q%=c|KnN3Vg@4EGMV0J3_b>uR=%Dwc7ncqZReuDr2 literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_play_cm.png b/airtime_mvc/public/css/images/icon_play_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..8197e946bb6f771ea589dab1833f9807cff3cb17 GIT binary patch literal 1184 zcmbVMPfXKL94?GZC4oRZ2qcDQi8t52ZtPDRCT!~_GZaX-gdH$a+Q(M6_SN>y4Nj;R zcM|o=fukoi@q`}a;=!Zw#+8JtF&;I+*Rf3w1QVOI@4fc-ec$hITg!`gh6X1F8HO3k z&&w)ZNBsM8kUl4Wo@jI#C)pAy;0@ByT*RadypBNL(#l9hnz8xt3z}h=zRVM^ zG}zhOV5TWi0t*ohG_9KLNzEkN=9TE)f6cR?Z9=L^_SC78vJ5iVMIg$-kPc%I!~{-= zOvmH#TObSt$ipx%ghN7Hii9NyLFZzrnrm!Gs+{X+(NmJG5aLKY-)JNv!A={hkGRVl&UDF{Zwt>&6t>ZdLveeVl5G+SE%N64F$ZfBaESfgH zsX4sBLEdfK`0;g7igGc+vU=7YQPE%L&*k@un-1bt&Tj2St&VsPm?+)nu&KEo76toMb74GfYDg;^}B&8p2E_5y=XIkdDgfR5lD# zxok>IWMG%$JZw&gi_!_=1Qr!+VeIZuL zxJV<|En-~jHq>$j6YN#612TmuSTSt_H$1=AG$IY;&cBb>XuV_2_+uj_}LvIq1O$+DJIV+&UyL3jM=H*nedAR=jAHUOYp(WO8NRO9AGcap7M#GywO!FWzQJ9Bqs|&La-W$fEvaK*pBZ1>{%{QT zg9iuwuTzt)AN{c%ralzd4{oonF-Pxq_C~8?Bl^K5U^5SPpD8bQ`UbxBSt@%ka`khN a85m>UW?$_OC%z8*|BQTgQGSzNd-4Yd&vAbM literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_remove_all_content_cm.png b/airtime_mvc/public/css/images/icon_remove_all_content_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..29e1e83ae42f0c7d44e79b68878a4496525c586c GIT binary patch literal 1252 zcmbVMUufKP9M5@e8JpF^q0}k!XGUS5m;934?Jl9WUjAKo(6r@x(8Iknm;8DcuE{S; z(%rR)T$N%cs7ysreDI|&J_xc0g$)%PIPs}Z?e^$k=!He2$Ws3 zfhx$fS1)~sCMYU-&8gO+nlUX|*k#PvhUvIIK~vPkWXCtH7K%U}H5{)%|8o5+8aQ@= zUdS5I@Kw}wF02J;er={|t+g!CrYFyXiH<}FTojq0<1Txl)G5$CUWx4E*DMWsCQ++E z?>kj9=75R=1hNcFTksqN=QxHFGPzvtMZiN2vXEyvKF#GMftMfz{fj1QfxRSEv{GM- zoC+wC^f78o2fSWXnhn1koj#3CK8dXd>ld*PV@gN8yYaQw)@9*7yuI$nti zH1Tvl1lO-Pjb;=ckb7Z2StM<2$Mji_fo#yTiQ^lf4C82o>mFE#Q3d_y{Gt3|b=5~~ z1%-Geut*h`&O9V_v`}o=k3llbpoK^kOXhNjdLIl!nkCLVp1G`HYsE!gRMrYKfiSjX zOI%LL<}(ngYF^Mej#ILlBI`VqOS&xPRXE@{3@boc<>h=PFO&q1(>YP*Wsz4kQPTt! zLT!L8dtqdH78>X}M7NI>j>Jl8fXoO7Rg9Mh4K>%q5e}Q!2kLwlEI6Kx+hJU55)p}2 zLxFP{*`)xxpqF;ZIYeDoGJ1yNWnJq>E%1sAGh()+aHsJUCsk75BZPybc@2}U_ pH;PJf`0TAGcl@p78}IVPZi1SZ%x&p~_om|iPFbJPK2;W9{TFvcm1h6| literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_select-cursor_cm.png b/airtime_mvc/public/css/images/icon_select-cursor_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..a495d7279c417b4da4f8f9ebb550276eb38e2971 GIT binary patch literal 1218 zcmbVMO=#0l98c}6ZhlQK>J$u_dU0)D(sgaa>e?o)E10czh1G+yEO~3=mb{p}t=UdP zMHstG5t*>V5I+ur2L(YC9Eb-G;=Jx8Lp*p<(31%BrE8~$F~LCc-b?0wyb%>?uH#Vdx^wFEO5k%4T9u%h=) z*>GU0uc%Iqs&S3!IZb!F0wFLUR%q84GabQAFg0F*?7i14L)T33Xo6XHswC%W5!sNA zgg{UQU4ZW5LR`2r8jW_)Jm3Hec$VXXTvQ120swUVVu+fpjR*xPTh}6|1XID-5?Hoc zt%j=M5VFfG7mvq14xSGZi=Z=UV#N)bPJ4qvf{tqI7S@qTdyL938pjESc)A{fVHNap z1v?w$rc+NANgL}b7R!YIYu9YN_!=l#-Wp*T8`cgkz(3A!%I_2>Eyxz2gT`%@RB@#J zFR87CJi~enf~?r1kW?|Nj5)COL6(Jn;=FDuV-ixw4QS$=lwb%Xr0JT#MbnX3Cjg=t z3uicvOGl)1D#L?RHj|3SM9|>a3>%4YAO^&AEG(rtF2lumQ6%6vh(`#S7;a#5rh^qz zg$-Su=+?2REwO@VLj@zdh|pN0q4E`kkyAkyEe=HJLEY3))$wXgA|kO$(AFoQmbH;V z*U~QNo2dUg>UFI4KN(|*GpyHXe|28t6=`R0yD>-PurZ0yB!#odoOLgp|3GH+eojgi z-Id{AYim9J6Vo>y1m@@Gr%$|Jh`;WA;!D2!mHgtrb&Bfz)P63IjPy~fO~;kFRC7}7 zx_e~l+ME2`XR6cRHtqVBzqv01Nn?lJL9IM%J-Juwzt+b49v&R>T@M^x{NcmRrKKky zXPL#jSM#rDX0!L^_EFmp-F$R(@uGib*XnM6r5Ic~Fx0X<9b7!#c5d74iRPJ0xjW|b b{qz#`y{p{xGk4*V_gBef`lQF{p)0=uYifj9 literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/images/icon_soundcloud_cm.png b/airtime_mvc/public/css/images/icon_soundcloud_cm.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c4d8c61092e7fff1242230cd0f4136d0af96ed GIT binary patch literal 1210 zcmbVM&u`OK9Cs<|pacmGX=N2E4WYwY)&1Usf7jelfBn@g2OqJqmD`?axJ`x*O{ zxaAUh;l~MWmkP9LhiRL3m?rIl!~r%{NC^G_1Q$--WzwL#?10ogr%B;ZILwm$-m|}- z&*%HoH>RgPJ2*T#%yHbo+F7H{)p$ z*Rky`UwVWmIBxJauQ5w!tuIuE_=26<2#FsuG{;SplhAe+Fa=FK?*%3P?|b)o;JGFK ze8GZNsN$!bngAq2gPXKIlX87XjCPYO(Gt%* z-44MI>)w2e#yjLe+)EZqo0!<4hy*A`U7Iw%KFYG*kMR8+>zLN@8|QcBj~mM&7V9`B zOOeB>ICtVLsrL(|hP@b6%Z?T>t76q&jB)paWvShe>C1mJbWECM3DN0T@6_}UxyjI9-avxg@ zVrmBt?(2F?w};i3>btS39$}l3s6ohLzoDjEgp#;LLZHtSz2_z1*kNZ9ali@}u{o>Oen{Aiep53ljpSML_10E-@MP!4RSmuz`gLt>?ZwyUxaO@@ z1DwgMf7(d~ZVt3YzwbQ#@cNz3zx<(V1FuekjXljaxZL^qV(0MzZ}Mnn{lesUX8lQP z^RLOHSI34vnm&A`b9Z$gc|Q2+gP+C@+!~QO%GmWED?Zq(e5Z_Uta8Kran5}(G@NRlN6T9F+uxPjBS*MB8E!)u{i^)X`8@rb)XXX47wyZ{{{ZGCe)a$W literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/jquery.contextMenu.css b/airtime_mvc/public/css/jquery.contextMenu.css index 17c1555a9..98e5c5091 100755 --- a/airtime_mvc/public/css/jquery.contextMenu.css +++ b/airtime_mvc/public/css/jquery.contextMenu.css @@ -22,8 +22,8 @@ position: absolute; list-style-type: none; - border: 1px solid #DDD; - background: #EEE; + border: 1px solid #333333; + background: #f0f0f0; -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); @@ -31,14 +31,15 @@ -o-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); - font-family: Verdana, Arial, Helvetica, sans-serif; + font-family: Arial, Helvetica, sans-serif; font-size: 11px; } .context-menu-item { padding: 2px 2px 2px 28px; - background-color: #EEE; + background-color: #f0f0f0; position: relative; + min-height: 18px; -moz-user-select: -moz-none; } @@ -53,7 +54,7 @@ .context-menu-item.hover { cursor: pointer; - background-color: #39F; + background-color: #ff5d1a; } .context-menu-item.disabled { @@ -82,13 +83,21 @@ .context-menu-item.icon:before {} */ .context-menu-item.icon { min-height: 18px; background-repeat: no-repeat; background-position: 4px 2px; } -.context-menu-item.icon-edit { background-image: url(images/icon_edit.png); } -.context-menu-item.icon-cut { background-image: url(images/icon_cut.png); } -.context-menu-item.icon-copy { background-image: url(images/icon_copy.png); } -.context-menu-item.icon-paste { background-image: url(images/icon_paste.png); } -.context-menu-item.icon-delete { background-image: url(images/icon_delete.png); } -.context-menu-item.icon-quit { background-image: url(images/icon_door.png); } -.context-menu-item.icon-soundcloud { background-image: url(images/icon_soundcloud.png); } +.context-menu-item.icon-edit { background-image: url(images/icon_edit_cm.png); } +.context-menu-item.icon-cut { background-image: url(images/icon_cut_cm.png); } +.context-menu-item.icon-copy { background-image: url(images/icon_copy_cm.png); } +.context-menu-item.icon-paste { background-image: url(images/icon_paste_cm.png); } +.context-menu-item.icon-delete { background-image: url(images/icon_delete_cm.png); } +.context-menu-item.icon-quit { background-image: url(images/icon_door_cm.png); } +.context-menu-item.icon-soundcloud { background-image: url(images/icon_soundcloud_cm.png); } + +.context-menu-item.icon-download { background-image: url(images/icon_download_cm.png); } +.context-menu-item.icon-overview { background-image: url(images/icon_overview_cm.png); } +.context-menu-item.icon-play { background-image: url(images/icon_play_cm.png); } +.context-menu-item.icon-select-cursor { background-image: url(images/icon_select-cursor_cm.png); } +.context-menu-item.icon-add-playlist { background-image: url(images/icon_add_playlist_cm.png); } +.context-menu-item.icon-add-remove-content { background-image: url(images/icon_add_content_cm.png); } +.context-menu-item.icon-remove-all-content { background-image: url(images/icon_remove_all_content_cm.png); } /* vertically align inside labels */ .context-menu-input > label > * { vertical-align: top; } From d4e0410b0e631fbdfe59a7c25ac27e01365a8cbf Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 18:35:55 +0200 Subject: [PATCH 09/20] CC-3605 : Create 2.1 upgrades --- install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php index b6d2d73db..f3b00b8d9 100644 --- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php +++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php @@ -36,7 +36,7 @@ class AirtimeDatabaseUpgrade{ //Propel classes. set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); - include_once APPLICATION_PATH."/configs/conf.php"; + //include_once APPLICATION_PATH."/configs/conf.php"; include_once 'propel/runtime/lib/Propel.php'; Propel::init(APPLICATION_PATH."/configs/airtime-conf-production.php"); From 805454406f8f2e8c8e5b392c762cccde26a40dc2 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 11 Apr 2012 18:37:57 +0200 Subject: [PATCH 10/20] CC-3605 : Create 2.1 upgrades --- .../upgrades/airtime-2.1.0/common/Version20120410104441.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php index 557796819..c41f7ef31 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php @@ -28,6 +28,10 @@ class Version20120410104441 extends AbstractMigration //add utime, lptime $this->_addSql("ALTER TABLE cc_files ADD utime timestamp(6)"); $this->_addSql("ALTER TABLE cc_files ADD lptime timestamp(6)"); + + //setting these to a default now for timeline refresh purposes. + $now = gmdate("Y-m-d H:i:s"); + $this->_addSql("UPDATE cc_files SET utime = '$now'"); } public function down(Schema $schema) From 268ba661945b74e9250da15bea0221803fd260e4 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 13:44:24 -0400 Subject: [PATCH 11/20] CC-3566: Preferences->"Fade In" is not respected when Show starts - adding some comments --- python_apps/pypo/liquidsoap_scripts/ls_script.liq | 1 + python_apps/pypo/pypopush.py | 1 + 2 files changed, 2 insertions(+) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index d7422b93b..54649b8b1 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -29,6 +29,7 @@ s3_namespace = ref '' queue = on_metadata(notify, queue) queue = map_metadata(append_title, queue) +# the crossfade function controls fade in/out queue = crossfade(queue) ignore(output.dummy(queue, fallible=true)) diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index 3fb330977..fa9ef9ecf 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -429,6 +429,7 @@ class PypoPush(Thread): self.telnet_lock.release() def create_liquidsoap_annotation(self, media): + # we need lia_start_next value in the annotate. That is the value that controlls overlap duration of crossfade. return 'annotate:media_id="%s",liq_start_next="0",liq_fade_in="%s",liq_fade_out="%s",liq_cue_in="%s",liq_cue_out="%s",schedule_table_id="%s":%s' \ % (media['id'], float(media['fade_in'])/1000, float(media['fade_out'])/1000, float(media['cue_in']), float(media['cue_out']), media['row_id'], media['dst']) From c51028661405e749adf3589155d2bc0e90f1a962 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 14:09:51 -0400 Subject: [PATCH 12/20] CC-3596: Playlist->Library->Edit Metadata: Throw exception after inputing string in "BPM" - added digit validator --- airtime_mvc/application/forms/EditAudioMD.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/application/forms/EditAudioMD.php b/airtime_mvc/application/forms/EditAudioMD.php index 7dbcdf961..96d29bda5 100644 --- a/airtime_mvc/application/forms/EditAudioMD.php +++ b/airtime_mvc/application/forms/EditAudioMD.php @@ -84,12 +84,14 @@ class Application_Form_EditAudioMD extends Zend_Form )); // Add bmp field - $this->addElement('text', 'bpm', array( - 'label' => 'BPM:', - 'class' => 'input_text', - 'filters' => array('StringTrim'), - 'validators' => array(array('StringLength', false, array(0, 8))) - )); + $bpm = new Zend_Form_Element_Text('bpm'); + $bpm->class = 'input_text'; + $bpm->setLabel('BPM:') + ->setFilters(array('StringTrim')) + ->setValidators(array( + new Zend_Validate_StringLength(array('min'=>0,'max' => 8)), + new Zend_Validate_Digits())); + $this->addElement($bpm); // Add copyright field $this->addElement('text', 'copyright', array( From 37250d9508a6a168ab53e60ab97a52565b311cc3 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 11 Apr 2012 20:43:38 +0200 Subject: [PATCH 13/20] CC-3250 , new warning icon --- airtime_mvc/public/css/images/warning-icon.png | Bin 0 -> 1113 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 airtime_mvc/public/css/images/warning-icon.png diff --git a/airtime_mvc/public/css/images/warning-icon.png b/airtime_mvc/public/css/images/warning-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b86d38a206840977b998f824ab3cb1d0dd212a GIT binary patch literal 1113 zcmaJ=OH30%7~Z6cFVJE{1!Eky_)2K^0kn2)fwtS~CKj=jSQ2B{?hbUt-C1@ATkw&h z#(>eN37Q%&;L(GR#Dm6zBy!Q17%v|5LX03GWat$P zQIrd4=?u;!4+{#?eX@h`6?BuZDJs-nFlA*BVvvOcnh~bwpTD4iriSTbtw}a%#$Zl6 zG-|=_(ay9oI;aFyy1fmA3IY+(A(lZwKV{fLAxtmo3S{jZGc;I);K4Bc+f*jm1!Bm8 zpw-8E71qxJKj-6`TLOVV6X02nWmul!crOA#)&Ro=gF#1w=e-2swMPsr7rch;DJzK3RxHiL8Zv;RC}+_y4%5Wx?-X=% zS=O+Z%0vpr6l9a(e5{jF8JJA|AFAuiXd9>CAHV+;w$mdfWKz&Z!>M&dth*H)(+m~m?L~AlDM*HmWkZ3I7^Vr|r)jDXZHYE>kw|=h z3){+ZaV{DSMuUln7-a)u+#mOsxgt`Ab!gx+SN+3HROC91pqnJJ2rcb2R1+4`!D7OK zR@qCeqTUi$t?Wgt$YqEb#<|wNuDN_fddFEVH!ayLw>>mSuUn+4rPC+wkO%Qr5+mut zhwRaw9tfzW;sTh|H_Yz&wy&S=D{Xb}Se5nfZChXG`8Wf`E46US?>?Z^<}bg#sREB1 zT^cfa&#qJ&AJyK!oO8V#%hX^0a%=kJIDf-6zJ+&Jt(!i%rXjQb+RlsCVo6A207dIX?GzVzRrsxDaxU%(%xHaHf88#rwI`Iaf(F?(N=& zA64DHS{j#jAAY)V`)zf_cYe=}pB?I(Pp%im45dD6tgF7b%Oe#j7ggQ6bKRuB)aE>P MDc&hQi1uCh1yjjlvH$=8 literal 0 HcmV?d00001 From 8f197115ae69997e31bc37e07f256115ef282168 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 15:54:03 -0400 Subject: [PATCH 14/20] CC-3618: Current playing Text Field in Dashboard alternates between "Nothing Scheduled" and "current playing song" - fixed --- airtime_mvc/application/models/Schedule.php | 3 +++ airtime_mvc/public/js/airtime/dashboard/playlist.js | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 943d3da54..8394fb13c 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -114,6 +114,9 @@ class Application_Model_Schedule { $timeNowAsMillis = strtotime($p_timeNow); for( $i = 0; $i < $numberOfRows; ++$i ){ + if($rows[$i]['ends'] > $rows[$i]["show_ends"]){ + $rows[$i]['ends'] = $rows[$i]["show_ends"]; + } if ((strtotime($rows[$i]['starts']) <= $timeNowAsMillis) && (strtotime($rows[$i]['ends']) >= $timeNowAsMillis)){ if ( $i - 1 >= 0){ $results['previous'] = array("name"=>$rows[$i-1]["artist_name"]." - ".$rows[$i-1]["track_title"], diff --git a/airtime_mvc/public/js/airtime/dashboard/playlist.js b/airtime_mvc/public/js/airtime/dashboard/playlist.js index 9bbed3603..3ad590fb6 100644 --- a/airtime_mvc/public/js/airtime/dashboard/playlist.js +++ b/airtime_mvc/public/js/airtime/dashboard/playlist.js @@ -135,25 +135,28 @@ function updateProgressBarValue(){ function updatePlaybar(){ /* Column 0 update */ - $('#previous').empty(); - $('#prev-length').empty(); - $('#current').html("Current: Nothing Scheduled"); - $('#next').empty(); - $('#next-length').empty(); if (previousSong !== null){ $('#previous').text(previousSong.name+","); $('#prev-length').text(convertToHHMMSSmm(previousSong.songLengthMs)); + }else{ + $('#previous').empty(); + $('#prev-length').empty(); } if (currentSong !== null){ if (currentSong.record == "1") $('#current').html("Recording: "+currentSong.name+","); else $('#current').text(currentSong.name+","); + }else{ + $('#current').html("Current: Nothing Scheduled"); } if (nextSong !== null){ $('#next').text(nextSong.name+","); $('#next-length').text(convertToHHMMSSmm(nextSong.songLengthMs)); + }else{ + $('#next').empty(); + $('#next-length').empty(); } $('#start').empty(); From f0be7cc995008189ebf07aefa0586cd969fa21ba Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 16:06:10 -0400 Subject: [PATCH 15/20] - comments and removing logging --- airtime_mvc/application/models/Schedule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 8394fb13c..255fba75a 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -114,6 +114,7 @@ class Application_Model_Schedule { $timeNowAsMillis = strtotime($p_timeNow); for( $i = 0; $i < $numberOfRows; ++$i ){ + // if the show is overbooked, then update the track end time to the end of the show time. if($rows[$i]['ends'] > $rows[$i]["show_ends"]){ $rows[$i]['ends'] = $rows[$i]["show_ends"]; } @@ -355,7 +356,6 @@ class Application_Model_Schedule { $secParts = explode(".", $t[2]); $millisecs = $secParts[1]; $millisecs = str_pad(substr($millisecs, 0, 3),3, '0'); - Logging::log("mili:".print_r($millisecs,true)); $millisecs = intval($millisecs); $seconds = intval($secParts[0]); } else { From 92f0f11047c39b7df1398a2ed5edcee67c0fb6c9 Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 16:12:06 -0400 Subject: [PATCH 16/20] CC-3475: Pypo does not handles the case of RabbitMQ being restarted - added the other exception as well --- python_apps/pypo/pypomessagehandler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/pypo/pypomessagehandler.py b/python_apps/pypo/pypomessagehandler.py index a6dfc2e49..23e269b16 100644 --- a/python_apps/pypo/pypomessagehandler.py +++ b/python_apps/pypo/pypomessagehandler.py @@ -99,7 +99,7 @@ class PypoMessageHandler(Thread): self.handle_message(message.payload) # ACK the message to take it off the queue message.ack() - except IOError, e: + except (IOError, AttributeError), e: import traceback top = traceback.format_exc() self.logger.error('Exception: %s', e) From 1f5f5057bf3553ce2516b7d9f2823790aa496a2b Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 16:20:27 -0400 Subject: [PATCH 17/20] CC-3430: Live Stream: Admin should be able to kick out the source connection - fixed --- python_apps/pypo/pypofetch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index cbe21b5dd..b4e672996 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -90,7 +90,7 @@ class PypoFetch(Thread): self.switch_source(self.logger, self.telnet_lock, m['sourcename'], m['status']) elif command == 'disconnect_source': self.logger.info("disconnect_on_source show command received...") - self.disconnect_source(self.logger, self.telnet.lock, m['sourcename']) + self.disconnect_source(self.logger, self.telnet_lock, m['sourcename']) except Exception, e: import traceback top = traceback.format_exc() From 0ec58f0bc33d7fbe8ceb062e03b7a5612867037a Mon Sep 17 00:00:00 2001 From: James Date: Wed, 11 Apr 2012 17:24:26 -0400 Subject: [PATCH 18/20] CC-3250: UI design for mount monitor for media monitor ( Manage Media Folder and Playlist Builder screen) - adding tooltip and fixed a minor bug --- .../application/controllers/ApiController.php | 5 ++--- .../form/preferences_watched_dirs.phtml | 2 +- airtime_mvc/public/js/airtime/library/spl.js | 2 +- .../js/airtime/preferences/musicdirs.js | 20 ++++++++++++++++++- python_apps/api_clients/api_client.py | 5 ++++- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 514fcf6d5..284c4aaff 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -875,11 +875,10 @@ class ApiController extends Zend_Controller_Action $watched_dirs = Application_Model_MusicDir::getWatchedDirs(null,null); foreach( $added_list as $ad){ + $ad .= '/'; foreach( $watched_dirs as $dir ){ $dirPath = $dir->getDirectory(); - $ad .= '/'; - // if mount path itself was watched if($dirPath == $ad){ Application_Model_MusicDir::addWatchedDir($dirPath, false); @@ -901,9 +900,9 @@ class ApiController extends Zend_Controller_Action } } foreach( $removed_list as $rd){ + $rd .= '/'; foreach( $watched_dirs as $dir ){ $dirPath = $dir->getDirectory(); - $rd .= '/'; // if dir contains any dir in removed_list( if watched dir resides on new mounted path ) if(substr($dirPath, 0, strlen($rd)) === $rd && $dir->getExistsFlag() == true){ Application_Model_MusicDir::removeWatchedDir($dirPath, false); diff --git a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml index 192c40474..88b7a804d 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml @@ -38,7 +38,7 @@ 0): ?>
- getExistsFlag())?"":""?>getDirectory();?> + getExistsFlag())?"":""?>getDirectory();?>
diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index adb3d9891..a3b01f335 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -764,7 +764,7 @@ var AIRTIME = (function(AIRTIME){ $pl.find(".ui-icon-alert").qtip({ content: { - text: "File does not exist on disk..." + text: "Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't \"watched\" anymore." }, position:{ adjust: { diff --git a/airtime_mvc/public/js/airtime/preferences/musicdirs.js b/airtime_mvc/public/js/airtime/preferences/musicdirs.js index 796baec96..7e70b8650 100644 --- a/airtime_mvc/public/js/airtime/preferences/musicdirs.js +++ b/airtime_mvc/public/js/airtime/preferences/musicdirs.js @@ -98,5 +98,23 @@ function setWatchedDirEvents() { $(document).ready(function() { setWatchedDirEvents(); - + $(".ui-icon-alert").qtip({ + content: { + text: "This path is currently not accessible." + }, + position:{ + adjust: { + resize: true, + method: "flip flip" + }, + at: "right center", + my: "left top", + viewport: $(window) + }, + style: { + classes: "ui-tooltip-dark" + }, + show: 'mouseover', + hide: 'mouseout' + }); }); diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 1f32a993b..747f26300 100755 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -442,7 +442,10 @@ class AirTimeApiClient(ApiClientInterface): except Exception, e: response = None - logger.error("Exception with file %s: %s", md, e) + import traceback + top = traceback.format_exc() + logger.error('Exception: %s', e) + logger.error("traceback: %s", top) return response From d06b3573e9aafff5975a7d728ea1fbd6ab467a26 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 11 Apr 2012 19:22:47 -0400 Subject: [PATCH 19/20] CC-3623: Need to send show name to Liquidsoap. (Currently sending name as "TODO") -fixed --- airtime_mvc/application/models/Schedule.php | 11 +++++++++-- python_apps/pypo/pypofetch.py | 3 +-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 255fba75a..ca066757b 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -412,6 +412,7 @@ class Application_Model_Schedule { $baseQuery = "SELECT st.file_id AS file_id," ." st.id as id," + ." st.instance_id as instance_id," ." st.starts AS start," ." st.ends AS end," ." st.cue_in AS cue_in," @@ -527,7 +528,12 @@ class Application_Model_Schedule { } foreach ($items as $item){ - + + $showInstance = CcShowInstancesQuery::create()->findPK($item["instance_id"]); + $showId = $showInstance->getDbShowId(); + $show = CcShowQuery::create()->findPK($showId); + $showName = $show->getDbName(); + $showEndDateTime = new DateTime($item["show_end"], $utcTimeZone); $trackStartDateTime = new DateTime($item["start"], $utcTimeZone); $trackEndDateTime = new DateTime($item["end"], $utcTimeZone); @@ -559,7 +565,8 @@ class Application_Model_Schedule { 'cue_in' => Application_Model_DateHelper::CalculateLengthInSeconds($item["cue_in"]), 'cue_out' => Application_Model_DateHelper::CalculateLengthInSeconds($item["cue_out"]), 'start' => $start, - 'end' => Application_Model_Schedule::AirtimeTimeToPypoTime($item["end"]) + 'end' => Application_Model_Schedule::AirtimeTimeToPypoTime($item["end"]), + 'show_name' => $showName ); } diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index b4e672996..c66fc825e 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -421,8 +421,7 @@ class PypoFetch(Thread): try: mediaKeys = sorted(media.iterkeys()) for mkey in mediaKeys: - media_item = media[mkey] - media_item['show_name'] = "TODO" + media_item = media[mkey] except Exception, e: self.logger.error("%s", e) From 18391604b55639af8cf33b1604b8ba2d14e9ba01 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 12 Apr 2012 10:26:11 -0400 Subject: [PATCH 20/20] CC-3424: UI Design for new drop down menu - html integration --- .../application/controllers/LibraryController.php | 10 +++++----- .../application/controllers/ScheduleController.php | 6 +++--- .../application/controllers/ShowbuilderController.php | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index b3ca1dc79..8845583b6 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -45,7 +45,7 @@ class LibraryController extends Zend_Controller_Action $file = Application_Model_StoredFile::Recall($id); if (isset($this->pl_sess->id) && $screen == "playlist") { - $menu["pl_add"] = array("name"=> "Add to Playlist", "icon" => "copy"); + $menu["pl_add"] = array("name"=> "Add to Playlist", "icon" => "add-playlist", "icon" => "copy"); } @@ -56,7 +56,7 @@ class LibraryController extends Zend_Controller_Action } $url = $file->getRelativeFileUrl($baseUrl).'/download/true'; - $menu["download"] = array("name" => "Download", "url" => $url); + $menu["download"] = array("name" => "Download", "icon" => "download", "url" => $url); if (Application_Model_Preference::GetUploadToSoundcloudOption()) { @@ -75,11 +75,11 @@ class LibraryController extends Zend_Controller_Action $text = "Upload to SoundCloud"; } - $menu["soundcloud"]["items"]["upload"] = array("name" => $text, "url" => "/library/upload-file-soundcloud/id/{$id}"); + $menu["soundcloud"]["items"]["upload"] = array("name" => $text, "icon" => "soundcloud", "url" => "/library/upload-file-soundcloud/id/{$id}"); if ($scid > 0){ $url = $file->getSoundCloudLinkToFile(); - $menu["soundcloud"]["items"]["view"] = array("name" => "View on Soundcloud", "url" => $url); + $menu["soundcloud"]["items"]["view"] = array("name" => "View on Soundcloud", "icon" => "soundcloud", "url" => $url); } } } @@ -93,7 +93,7 @@ class LibraryController extends Zend_Controller_Action } //Open a jPlayer window and play the audio clip. - $menu["play"] = array("name"=> "Play", "icon" => "big_play"); + $menu["play"] = array("name"=> "Play", "icon" => "play"); $this->view->items = $menu; } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index fe9c96ef8..5431256ab 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -232,10 +232,10 @@ class ScheduleController extends Zend_Controller_Action && !$instance->isRecorded() && !$instance->isRebroadcast()) { - $menu["schedule"] = array("name"=> "Add / Remove Content", + $menu["schedule"] = array("name"=> "Add / Remove Content", "icon" => "add-remove-content", "url" => "/showbuilder/builder-dialog/"); - $menu["clear"] = array("name"=> "Remove All Content", "icon" => "delete", + $menu["clear"] = array("name"=> "Remove All Content", "icon" => "remove-all-content", "url" => "/schedule/clear-show"); } @@ -243,7 +243,7 @@ class ScheduleController extends Zend_Controller_Action if (!$instance->isRecorded()) { - $menu["content"] = array("name"=> "Show Content", "url" => "/schedule/show-content-dialog"); + $menu["content"] = array("name"=> "Show Content", "icon" => "overview", "url" => "/schedule/show-content-dialog"); } if ($showEndLocalDT->getTimestamp() <= $epochNow diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index b68c7d7bf..85780ef88 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -167,10 +167,10 @@ class ShowbuilderController extends Zend_Controller_Action $item = CcScheduleQuery::create()->findPK($id); $instance = $item->getCcShowInstances(); - $menu["preview"] = array("name"=> "Preview"); + $menu["preview"] = array("name"=> "Preview","icon" => "overview"); //select the cursor - $menu["selCurs"] = array("name"=> "Select Cursor"); - $menu["delCurs"] = array("name"=> "Remove Cursor"); + $menu["selCurs"] = array("name"=> "Select Cursor","icon" => "select-cursor"); + $menu["delCurs"] = array("name"=> "Remove Cursor","icon" => "select-cursor"); if ($now < floatval($item->getDbEnds("U.u")) && $user->canSchedule($instance->getDbShowId())) {