lib/client lib/kolab_client_task.php public_html/js public_html/skins

Aleksander Machniak machniak at kolabsys.com
Mon May 27 11:20:25 CEST 2013


 lib/client/kolab_client_task_domain.php |    8 ++++
 lib/kolab_client_task.php               |   13 ++++---
 public_html/js/kolab_admin.js           |   56 +++++++++++++++++++-------------
 public_html/skins/default/style.css     |    7 ++--
 public_html/skins/default/ui.js         |   14 ++++++--
 5 files changed, 66 insertions(+), 32 deletions(-)

New commits:
commit e2054aa50bd5ca07b6cc95e045d9178862ca511f
Author: Aleksander Machniak <alec at alec.pl>
Date:   Mon May 27 11:18:22 2013 +0200

    Update domain selector after adding/removing domain (Bug #1761)

diff --git a/lib/client/kolab_client_task_domain.php b/lib/client/kolab_client_task_domain.php
index 9cf1e14..e50ba3c 100644
--- a/lib/client/kolab_client_task_domain.php
+++ b/lib/client/kolab_client_task_domain.php
@@ -55,6 +55,14 @@ class kolab_client_task_domain extends kolab_client_task
      */
     public function action_list()
     {
+        if (!empty($_POST['refresh'])) {
+            // refresh domains list
+            if ($domains = $this->get_domains(true)) {
+                sort($domains, SORT_LOCALE_STRING);
+                $this->output->set_env('domains', $domains);
+            }
+        }
+
         $page_size = 20;
         $page      = (int) self::get_input('page', 'POST');
         if (!$page || $page < 1) {
diff --git a/lib/kolab_client_task.php b/lib/kolab_client_task.php
index 789a743..4f3cce0 100644
--- a/lib/kolab_client_task.php
+++ b/lib/kolab_client_task.php
@@ -661,13 +661,14 @@ class kolab_client_task
     /**
      * Returns list of system capabilities.
      *
-     * @param bool $all If enabled capabilities for all domains will be returned
+     * @param bool $all     If enabled capabilities for all domains will be returned
+     * @param bool $refresh Disable session cache
      *
      * @return array List of system capabilities
      */
-    protected function capabilities($all = false)
+    protected function capabilities($all = false, $refresh = false)
     {
-        if (isset($_SESSION['capabilities']) && !$this->devel_mode) {
+        if (!$refresh && isset($_SESSION['capabilities']) && !$this->devel_mode) {
             $list = $_SESSION['capabilities'];
         }
         else {
@@ -701,11 +702,13 @@ class kolab_client_task
     /**
      * Returns domains list (based on capabilities response)
      *
+     * @param bool $refresh Refresh session cache
+     *
      * @return array List of domains
      */
-    protected function get_domains()
+    protected function get_domains($refresh = false)
     {
-        $caps = $this->capabilities(true);
+        $caps = $this->capabilities(true, $refresh);
 
         return is_array($caps) ? array_keys($caps) : array();
     }
diff --git a/public_html/js/kolab_admin.js b/public_html/js/kolab_admin.js
index 0f93fcf..f3281fd 100644
--- a/public_html/js/kolab_admin.js
+++ b/public_html/js/kolab_admin.js
@@ -284,7 +284,7 @@ function kolab_admin()
 
     return $.ajax({
       type: 'POST', url: url, data: postdata, dataType: 'json',
-      success: function(response) { kadm.http_response(response); },
+      success: function(response) { kadm.http_response(response, action); },
       error: function(o, status, err) { kadm.http_error(o, status, err); }
     });
   };
@@ -307,7 +307,7 @@ function kolab_admin()
   };
 
   // handle HTTP response
-  this.http_response = function(response)
+  this.http_response = function(response, action)
   {
     var i;
 
@@ -334,6 +334,7 @@ function kolab_admin()
     if (response.exec)
       eval(response.exec);
 
+    response.action = action;
     this.trigger_event('http-response', response);
   };
 
@@ -980,25 +981,34 @@ function kolab_admin()
   {
     var e = $(form_element),
       form = form_element.form,
-      elem = $('<span class="link"></span>'),
-      area = $('<span class="listarea autocomplete select popup"></span>'),
-      content = $('<span class="listcontent"></span>'),
+      name = form_element.name,
+      elem = $('#selectlabel_' + name),
+      area = $('<span class="listarea autocomplete select popup" id="selectarea_' + name + '"></span>'),
+      content = $('<span class="listcontent" id="selectcontent_' + name + '"></span>'),
       list = this.env.assoc_fields ? this.env.assoc_fields[form_element.name] : [];
 
-    elem.text(e.val()).css({cursor: 'pointer'})
-      .click(function(e) {
-        var popup = $('span.listarea', this.parentNode);
-        kadm.popup_show(e, popup);
-        $('input', popup).val('').focus();
-        $('span.listcontent > span.listelement', popup).removeClass('selected').show();
-      })
-      .appendTo(form_element.parentNode);
+    if (elem.length) {
+      $('#selectarea_' + name).remove();
+      $('#selectcontent_' + name).remove();
+    }
+    else {
+      elem = $('<span class="link" id="selectlabel_' + name + '"></span>')
+        .css({cursor: 'pointer'})
+        .click(function(e) {
+          var popup = $('span.listarea', this.parentNode);
+          kadm.popup_show(e, popup);
+          $('input', popup).val('').focus();
+          $('span.listcontent > span.listelement', popup).removeClass('selected').show();
+        })
+        .appendTo(form_element.parentNode);
+    }
+
+    elem.text(e.val());
 
     if (list.length <= 1)
       return;
 
     if (form_element.type != 'hidden') e.hide();
-    area.hide();
 
     elem = this.form_list_element(form, {
       autocomplete: true,
@@ -1007,6 +1017,7 @@ function kolab_admin()
 
     elem.appendTo(area);
     content.appendTo(area);
+    area.hide().appendTo(form_element.parentNode);
 
     // popup events
     $('input', area)
@@ -1092,8 +1103,6 @@ function kolab_admin()
       var elem = kadm.form_select_option_element(form, {value: v, key: v, element: e});
       elem.appendTo(content);
     });
-
-    area.appendTo(form_element.parentNode);
   };
 
   // Creates option element for smart select
@@ -1403,17 +1412,17 @@ function kolab_admin()
 
   this.domain_delete_response = function(response)
   {
-    this.response_handler(response, 'domain.delete', 'domain.list');
+    this.response_handler(response, 'domain.delete', 'domain.list', {refresh: 1});
   };
 
   this.domain_add_response = function(response)
   {
-    this.response_handler(response, 'domain.add', 'domain.list');
+    this.response_handler(response, 'domain.add', 'domain.list', {refresh: 1});
   };
 
   this.domain_edit_response = function(response)
   {
-    this.response_handler(response, 'domain.edit', 'domain.list');
+    this.response_handler(response, 'domain.edit', 'domain.list', {refresh: 1});
   };
 
   this.user_info = function(id)
@@ -1689,7 +1698,6 @@ function kolab_admin()
     this.response_handler(response, 'sharedfolder.edit', 'sharedfolder.list');
   };
 
-
   this.settings_type_info = function(id)
   {
     this.http_post('settings.type_info', {id: id});
@@ -1825,7 +1833,7 @@ function kolab_admin()
   /*********************************************************/
 
   // universal API response handler
-  this.response_handler = function(response, action, list)
+  this.response_handler = function(response, action, list, list_params)
   {
     if (!this.api_response(response))
       return;
@@ -1841,7 +1849,11 @@ function kolab_admin()
       if (this.env.list_page > 1 && this.env.list_size == 1 && action.match(/\.delete/))
         page -= 1;
 
-      this.command(list, {page: page});
+      if (!list_params)
+        list_params = {};
+
+      list_params.page = page;
+      this.command(list, list_params);
       this.set_watermark('taskcontent');
     }
   };
diff --git a/public_html/skins/default/style.css b/public_html/skins/default/style.css
index fa808c6..6647caa 100644
--- a/public_html/skins/default/style.css
+++ b/public_html/skins/default/style.css
@@ -151,8 +151,8 @@ td.label {
   color: #aaa;
   font-size: 11px;
   padding-top: 2px;
-  display: inline-block;
-  height: 18px;
+  height: 20px;
+  line-height: 20px;
 }
 
 #navigation {
@@ -257,7 +257,7 @@ td.label {
 }
 
 #topmenu .logout {
-  background: url(images/buttons.png) -1px -100px no-repeat;
+  background: url(images/buttons.png) -1px -101px no-repeat;
   padding-left: 20px;
   margin-right: 10px;
   color: white;
@@ -604,6 +604,7 @@ span.listelement {
   padding: 0;
   margin: 0;
   height: 18px;
+  line-height: 18px;
   overflow: hidden;
   border-top: 1px solid #d0d0d0;
   white-space: nowrap;
diff --git a/public_html/skins/default/ui.js b/public_html/skins/default/ui.js
index 45bfd51..ac56bc7 100644
--- a/public_html/skins/default/ui.js
+++ b/public_html/skins/default/ui.js
@@ -161,12 +161,22 @@ function ui_resize()
 function ui_load()
 {
   domain_selector();
-}
+};
+
+// API response handler
+function http_response(response)
+{
+  ui_resize();
+
+  // update domain selector
+  if (response.action == 'domain.list')
+    domain_selector();
+};
 
 /**
  * UI Initialization
  */
 kadm.add_event_listener('form-load', form_load);
-kadm.add_event_listener('http-response', ui_resize);
+kadm.add_event_listener('http-response', http_response);
 //$(window).resize(function() { ui_resize(); });
 $(window).load(function() { ui_load(); });





More information about the commits mailing list