From ee2bfe766448c9aa87571d5e465694107ee94ea9 Mon Sep 17 00:00:00 2001 From: drigato Date: Mon, 27 Jul 2015 07:06:22 -0400 Subject: [PATCH 1/2] SAAS-945: Language + Timezone Setup Popup --- airtime_mvc/application/configs/ACL.php | 4 +- .../controllers/SetupController.php | 48 +++++++++++++++++++ .../controllers/ShowbuilderController.php | 18 ++++++- .../forms/SetupLanguageTimezone.php | 28 +++++++++++ airtime_mvc/application/models/Preference.php | 10 ++++ .../scripts/form/setup-lang-timezone.phtml | 13 +++++ .../views/scripts/showbuilder/index.phtml | 6 ++- .../airtime/nowplaying/lang-timezone-setup.js | 40 ++++++++++++++++ 8 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 airtime_mvc/application/controllers/SetupController.php create mode 100644 airtime_mvc/application/forms/SetupLanguageTimezone.php create mode 100644 airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml create mode 100644 airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index 07ca7d822..ae6d83625 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -40,7 +40,8 @@ $ccAcl->add(new Zend_Acl_Resource('library')) ->add(new Zend_Acl_Resource('provisioning')) ->add(new Zend_Acl_Resource('player')) ->add(new Zend_Acl_Resource('soundcloud')) - ->add(new Zend_Acl_Resource('embeddablewidgets')); + ->add(new Zend_Acl_Resource('embeddablewidgets')) + ->add(new Zend_Acl_Resource('setup')); /** Creating permissions */ $ccAcl->allow('G', 'index') @@ -60,6 +61,7 @@ $ccAcl->allow('G', 'index') ->allow('G', 'downgrade') ->allow('G', 'rest:show-image', 'get') ->allow('G', 'rest:media', 'get') + ->allow('G', 'setup') ->allow('H', 'soundcloud') ->allow('H', 'rest:show-image') ->allow('H', 'rest:media') diff --git a/airtime_mvc/application/controllers/SetupController.php b/airtime_mvc/application/controllers/SetupController.php new file mode 100644 index 000000000..59bc09e45 --- /dev/null +++ b/airtime_mvc/application/controllers/SetupController.php @@ -0,0 +1,48 @@ +_helper->getHelper('AjaxContext'); + $ajaxContext->addActionContext('setup-language-timezone', 'json'); + } + + public function setupLanguageTimezoneAction() + { + $this->view->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(true); + + $request = $this->getRequest(); + $form = new Application_Form_SetupLanguageTimezone(); + + if ($request->isPost()) { + + $postData = $request->getPost(); + $formData = array(); + foreach ($postData["data"] as $key => $value) { + if ($value["name"] == "csrf") continue; + $formData[$value["name"]] = $value["value"]; + } + if ($form->isValid($formData)) { + $userService = new Application_Service_UserService(); + $currentUser = $userService->getCurrentUser(); + $currentUserId = $currentUser->getDbId(); + + Application_Model_Preference::SetUserTimezone($formData["timezone"], $currentUserId); + Application_Model_Preference::SetDefaultTimezone($formData["timezone"]); + + Application_Model_Preference::SetUserLocale($formData["language"], $currentUserId); + Application_Model_Preference::SetDefaultLocale($formData["language"]); + + Application_Model_Preference::setLangTimezoneSetupComplete(true); + + $this->_helper->json->sendJson(null); + } else { + $this->_helper->json->sendJson($form->get); + } + } else { + $this->_helper->json->sendJson($form); + } + } +} \ No newline at end of file diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 7051cf37c..0ba6fbedb 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -55,8 +55,23 @@ class ShowbuilderController extends Zend_Controller_Action $this->view->headLink()->appendStylesheet($baseUrl.'css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']); - $refer_sses = new Zend_Session_Namespace('referrer'); + $setupComplete = Application_Model_Preference::getLangTimezoneSetupComplete(); + $previousPage = $request->getHeader('Referer'); + $userService = new Application_Service_UserService(); + $currentUser = $userService->getCurrentUser(); + // If current user is Super Admin, and they came from the login page, + // and they have not seen the setup popup before + if ($currentUser->getDbType() == "S" && strpos(strtolower($previousPage), 'login') !== false + && empty($setupComplete)) { + Logging::info("hello"); + $lang_tz_popup_form = new Application_Form_SetupLanguageTimezone(); + $this->view->lang_tz_popup_form = $lang_tz_popup_form; + $this->view->headScript()->appendFile($baseUrl.'js/airtime/nowplaying/lang-timezone-setup.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + } + + //TODO: is it safe to remove this?? + /* if ($request->isPost()) { $form = new Application_Form_RegisterAirtime(); @@ -115,6 +130,7 @@ class ShowbuilderController extends Zend_Controller_Action $this->view->dialog = $form; $this->view->headScript()->appendFile($baseUrl.'js/airtime/nowplaying/register.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); } + */ //determine whether to remove/hide/display the library. $showLib = false; diff --git a/airtime_mvc/application/forms/SetupLanguageTimezone.php b/airtime_mvc/application/forms/SetupLanguageTimezone.php new file mode 100644 index 000000000..5e90308f3 --- /dev/null +++ b/airtime_mvc/application/forms/SetupLanguageTimezone.php @@ -0,0 +1,28 @@ +setDecorators(array( + array('ViewScript', array('viewScript' => 'form/setup-lang-timezone.phtml')))); + + $csrf_namespace = new Zend_Session_Namespace('csrf_namespace'); + $csrf_element = new Zend_Form_Element_Hidden('csrf'); + $csrf_element->setValue($csrf_namespace->authtoken)->setRequired('true')->removeDecorator('HtmlTag')->removeDecorator('Label'); + $this->addElement($csrf_element); + + $language = new Zend_Form_Element_Select('setup_language'); + $language->setLabel(_("Station Language")); + $language->setMultiOptions(Application_Model_Locale::getLocales()); + $this->addElement($language); + + $timezone = new Zend_Form_Element_Select('setup_timezone'); + $timezone->setLabel(_("Station Timezone")); + $timezone->setMultiOptions(Application_Common_Timezone::getTimezones()); + $this->addElement($timezone); + } +} + diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 6143058ba..f76a0f5e2 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -1521,4 +1521,14 @@ class Application_Model_Preference { self::setValue("radio_page_display_login_button", $value); } + + public static function getLangTimezoneSetupComplete() + { + return self::getValue("lang_tz_setup_complete"); + } + + public static function setLangTimezoneSetupComplete($value) + { + self::setValue("lang_tz_setup_complete", $value); + } } diff --git a/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml new file mode 100644 index 000000000..9a08f679b --- /dev/null +++ b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml @@ -0,0 +1,13 @@ +
" style="display: none;"> +
+
+
+ element->getElement('csrf') ?> + + element->getElement('setup_language')->render(); ?> + + element->getElement('setup_timezone')->render(); ?> +
+
+
+
diff --git a/airtime_mvc/application/views/scripts/showbuilder/index.phtml b/airtime_mvc/application/views/scripts/showbuilder/index.phtml index de83466a5..1d1751bec 100644 --- a/airtime_mvc/application/views/scripts/showbuilder/index.phtml +++ b/airtime_mvc/application/views/scripts/showbuilder/index.phtml @@ -21,4 +21,8 @@ -dialog ?> +dialog ?> + +lang_tz_popup_form; ?> diff --git a/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js new file mode 100644 index 000000000..6d6242159 --- /dev/null +++ b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js @@ -0,0 +1,40 @@ +$(document).ready(function() { + + var dialog = $("#lang-timezone-popup"); + + dialog.dialog({ + autoOpen: false, + width: 500, + resizable: false, + modal: true, + position:['center',50], + buttons: [ + { + id: "setup-later", + text: $.i18n._("Set Later"), + "class": "btn", + click: function() { + $(this).dialog("close"); + } + }, + { + id: "help_airtime", + text: $.i18n._("OK"), + "class": "btn", + click: function() { + var formValues = $("#lang-timezone-form").serializeArray(); + $.post(baseUrl+"setup/setup-language-timezone", + { + format: "json", + data: formValues + }, function(json) { + console.log(json); + $("#lang-timezone-popup").dialog("close"); + }); + } + } + ] + }); + + dialog.dialog('open'); +}); From 989b4994aabe39d65b5fe461b7cc4c2a4f5e53e0 Mon Sep 17 00:00:00 2001 From: drigato Date: Mon, 27 Jul 2015 14:38:42 -0400 Subject: [PATCH 2/2] SAAS-945: Language + Timezone Setup Popup forgot to auto detect user's timezone --- .../controllers/SetupController.php | 23 +++++++----------- .../controllers/ShowbuilderController.php | 2 +- .../scripts/form/setup-lang-timezone.phtml | 5 +++- .../airtime/nowplaying/lang-timezone-setup.js | 24 ++++++++++++------- .../js/js-timezone-detect/jstz-1.0.4.min.js | 2 ++ 5 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 airtime_mvc/public/js/js-timezone-detect/jstz-1.0.4.min.js diff --git a/airtime_mvc/application/controllers/SetupController.php b/airtime_mvc/application/controllers/SetupController.php index 59bc09e45..9b211eeb6 100644 --- a/airtime_mvc/application/controllers/SetupController.php +++ b/airtime_mvc/application/controllers/SetupController.php @@ -18,31 +18,24 @@ class SetupController extends Zend_Controller_Action if ($request->isPost()) { - $postData = $request->getPost(); - $formData = array(); - foreach ($postData["data"] as $key => $value) { - if ($value["name"] == "csrf") continue; - $formData[$value["name"]] = $value["value"]; - } + $formData = $request->getPost(); if ($form->isValid($formData)) { $userService = new Application_Service_UserService(); $currentUser = $userService->getCurrentUser(); $currentUserId = $currentUser->getDbId(); - Application_Model_Preference::SetUserTimezone($formData["timezone"], $currentUserId); - Application_Model_Preference::SetDefaultTimezone($formData["timezone"]); + Application_Model_Preference::SetUserTimezone($formData["setup_timezone"], $currentUserId); + Application_Model_Preference::SetDefaultTimezone($formData["setup_timezone"]); - Application_Model_Preference::SetUserLocale($formData["language"], $currentUserId); - Application_Model_Preference::SetDefaultLocale($formData["language"]); + Application_Model_Preference::SetUserLocale($formData["setup_language"], $currentUserId); + Application_Model_Preference::SetDefaultLocale($formData["setup_language"]); Application_Model_Preference::setLangTimezoneSetupComplete(true); - $this->_helper->json->sendJson(null); - } else { - $this->_helper->json->sendJson($form->get); + $this->_redirect('/Showbuilder'); } - } else { - $this->_helper->json->sendJson($form); } + $this->_redirect('/Showbuilder'); } + } \ No newline at end of file diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 0ba6fbedb..65521749c 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -45,6 +45,7 @@ class ShowbuilderController extends Zend_Controller_Action //$this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/dataTables.columnFilter.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'js/js-timezone-detect/jstz-1.0.4.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); @@ -64,7 +65,6 @@ class ShowbuilderController extends Zend_Controller_Action // and they have not seen the setup popup before if ($currentUser->getDbType() == "S" && strpos(strtolower($previousPage), 'login') !== false && empty($setupComplete)) { - Logging::info("hello"); $lang_tz_popup_form = new Application_Form_SetupLanguageTimezone(); $this->view->lang_tz_popup_form = $lang_tz_popup_form; $this->view->headScript()->appendFile($baseUrl.'js/airtime/nowplaying/lang-timezone-setup.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); diff --git a/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml index 9a08f679b..117d92a82 100644 --- a/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml +++ b/airtime_mvc/application/views/scripts/form/setup-lang-timezone.phtml @@ -1,5 +1,5 @@
" style="display: none;"> -
+
element->getElement('csrf') ?> @@ -7,6 +7,9 @@ element->getElement('setup_language')->render(); ?> element->getElement('setup_timezone')->render(); ?> + +
+ You can set these settings later under Preferences and your user settings.
diff --git a/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js index 6d6242159..4e200dbb9 100644 --- a/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js +++ b/airtime_mvc/public/js/airtime/nowplaying/lang-timezone-setup.js @@ -22,19 +22,25 @@ $(document).ready(function() { text: $.i18n._("OK"), "class": "btn", click: function() { - var formValues = $("#lang-timezone-form").serializeArray(); - $.post(baseUrl+"setup/setup-language-timezone", - { - format: "json", - data: formValues - }, function(json) { - console.log(json); - $("#lang-timezone-popup").dialog("close"); - }); + $("#lang-timezone-form").submit(); } } ] }); + var language = window.navigator.userLanguage || window.navigator.language; + if (language === undefined) { + language = "en_CA"; + } + language = language.replace("-", "_"); + $("#setup_language").val(language); + + var timezone = jstz.determine(); + var timezone_name = timezone.name(); + if (timezone_name === undefined) { + timezone_name = "America/Toronto"; + } + $("#setup_timezone").val(timezone_name); + dialog.dialog('open'); }); diff --git a/airtime_mvc/public/js/js-timezone-detect/jstz-1.0.4.min.js b/airtime_mvc/public/js/js-timezone-detect/jstz-1.0.4.min.js new file mode 100644 index 000000000..96e3dd8ae --- /dev/null +++ b/airtime_mvc/public/js/js-timezone-detect/jstz-1.0.4.min.js @@ -0,0 +1,2 @@ +/*! jstz - v1.0.4 - 2012-12-12 */ +(function(e){var t=function(){"use strict";var e="s",n=function(e){var t=-e.getTimezoneOffset();return t!==null?t:0},r=function(e,t,n){var r=new Date;return e!==undefined&&r.setFullYear(e),r.setDate(n),r.setMonth(t),r},i=function(e){return n(r(e,0,2))},s=function(e){return n(r(e,5,2))},o=function(e){var t=e.getMonth()>7?s(e.getFullYear()):i(e.getFullYear()),r=n(e);return t-r!==0},u=function(){var t=i(),n=s(),r=i()-s();return r<0?t+",1":r>0?n+",1,"+e:t+",0"},a=function(){var e=u();return new t.TimeZone(t.olson.timezones[e])};return{determine:a,date_is_dst:o}}();t.TimeZone=function(e){"use strict";var n=null,r=function(){return n},i=function(){var e=t.olson.ambiguity_list[n],r=e.length,i=0,s=e[0];for(;i