diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 6a7a2c896..df1ab8475 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -88,6 +88,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->headLink()->appendStylesheet($baseUrl.'/css/styles.css?'.$CC_CONFIG['airtime_version']); $view->headLink()->appendStylesheet($baseUrl.'/css/masterpanel.css?'.$CC_CONFIG['airtime_version']); $view->headLink()->appendStylesheet($baseUrl.'/css/bootstrap.css?'.$CC_CONFIG['airtime_version']); + $view->headLink()->appendStylesheet($baseUrl.'/css/tipsy/jquery.tipsy.css?'.$CC_CONFIG['airtime_version']); } protected function _initHeadScript() @@ -116,7 +117,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/helperfunctions.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/dashboard.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/versiontooltip.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - + $view->headScript()->appendFile($baseUrl.'/js/tipsy/jquery.tipsy.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/airtime/common/common.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/airtime/common/audioplaytest.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index 46ec0c6a3..a23846a99 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -33,6 +33,7 @@ $ccAcl->add(new Zend_Acl_Resource('library')) $ccAcl->allow('G', 'index') ->allow('G', 'login') ->allow('G', 'error') + ->allow('G', 'user', 'edit-user') ->allow('G', 'showbuilder') ->allow('G', 'api') ->allow('G', 'schedule') diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index b04a6e98b..d5ee57e2f 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -10,6 +10,7 @@ class UserController extends Zend_Controller_Action ->addActionContext('get-user-data-table-info', 'json') ->addActionContext('get-user-data', 'json') ->addActionContext('remove-user', 'json') + ->addActionContext('edit-user', 'json') ->initContext(); } @@ -114,6 +115,49 @@ class UserController extends Zend_Controller_Action $id = $this->_getParam('id'); $this->view->entries = Application_Model_User::GetUserData($id); } + + public function editUserAction() + { + $request = $this->getRequest(); + $form = new Application_Form_EditUser(); + if ($request->isPost()) { + $params = $request->getPost(); + $postData = explode('&', $params['data']); + foreach($postData as $k=>$v) { + $v = explode('=', $v); + $formData[$v[0]] = urldecode($v[1]); + } + + if (isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1 + && $formData['cu_login'] == 'admin') { + $this->view->form = $form; + $this->view->successMessage = "
"._("Specific action is not allowed in demo version!")."
"; + die(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); + } else if ($form->isValid($formData) && + $form->validateLogin($formData['cu_login'], $formData['cu_user_id'])) { + $user = new Application_Model_User($formData['cu_user_id']); + $user->setFirstName($formData['cu_first_name']); + $user->setLastName($formData['cu_last_name']); + $user->setLogin($formData['cu_login']); + // We don't allow 6 x's as a password. + // The reason is because we use that as a password placeholder + // on the client side. + if ($formData['cu_password'] != "xxxxxx") { + $user->setPassword($formData['cu_password']); + } + $user->setEmail($formData['cu_email']); + $user->setCellPhone($formData['cu_cell_phone']); + $user->setSkype($formData['cu_skype']); + $user->setJabber($formData['cu_jabber']); + $user->save(); + $this->view->successMessage = "
"._("User updated successfully!")."
"; + } + $this->view->form = $form; + die(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); + } + $this->view->form = $form; + $this->view->html = $this->view->render('user/edit-user.phtml'); + } public function removeUserAction() { diff --git a/airtime_mvc/application/layouts/scripts/layout.phtml b/airtime_mvc/application/layouts/scripts/layout.phtml index 80951b748..e65791153 100644 --- a/airtime_mvc/application/layouts/scripts/layout.phtml +++ b/airtime_mvc/application/layouts/scripts/layout.phtml @@ -23,7 +23,9 @@ $this->navigation()->menu()->setPartial($partial); ?>
diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index 9b5fbfdee..9b3ee10a2 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -93,6 +93,10 @@ select { } /* Version Notification Ends*/ +#current-user-container { + padding-bottom: 20px; +} + .override_help_icon, .icecast_metadata_help_icon { cursor: help; position: relative; diff --git a/airtime_mvc/public/js/airtime/dashboard/dashboard.js b/airtime_mvc/public/js/airtime/dashboard/dashboard.js index b7d7054e6..1790b055d 100644 --- a/airtime_mvc/public/js/airtime/dashboard/dashboard.js +++ b/airtime_mvc/public/js/airtime/dashboard/dashboard.js @@ -441,7 +441,65 @@ function init() { }); } +/* We never retrieve the user's password from the db + * and when we call isValid($params) the form values are cleared + * and repopulated with $params which does not have the password + * field. Therefore, we fill the password field with 6 x's + */ +function setCurrentUserPseudoPassword() { + $('#cu_password').val("xxxxxx"); +} + $(document).ready(function() { if ($('#master-panel').length > 0) init(); + + var timer; + + $('.tipsy').live('mouseover', function() { + clearTimeout(timer); + }); + + $('.tipsy').live('mouseout', function() { + timer = setTimeout("$('#current-user').tipsy('hide')", 500); + }); + + $('#current-user').bind('mouseover', function() { + $.ajax({ + url: baseUrl+'/user/edit-user/format/json', + dataType: 'json', + success: function(json) { + $('#current-user').tipsy({ + gravity: 'n', + html: true, + fade: true, + opacity: 0.9, + trigger: 'manual', + title: function() { + return json.html; + } + }); + }, + cache: false, + complete: function() { + $('#current-user').tipsy('show'); + setCurrentUserPseudoPassword(); + } + }); + + }); + + $('#current-user').bind('mouseout', function() { + timer = setTimeout("$('#current-user').tipsy('hide')", 500); + }); + + $('#cu_save_user').live('click', function() { + var data = $('#current-user-form').serialize(); + $.post(baseUrl+'/user/edit-user', {format: 'json', data: data}, function(data) { + var json = $.parseJSON(data); + $('#current-user-container').empty().append(json.html); + setCurrentUserPseudoPassword(); + setTimeout(removeSuccessMsg, 5000); + }); + }) });