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);
+ });
+ })
});