4 commits - lib/api lib/Auth lib/client lib/kolab_api_service.php lib/kolab_client_task.php lib/locale public_html/js

Aleksander Machniak machniak at kolabsys.com
Fri Mar 30 13:28:37 CEST 2012


 lib/Auth/LDAP.php                         |    2 
 lib/api/kolab_api_service_form_value.php  |   63 +++------------
 lib/api/kolab_api_service_group.php       |    7 +
 lib/api/kolab_api_service_group_types.php |    2 
 lib/api/kolab_api_service_user.php        |   10 +-
 lib/api/kolab_api_service_user_types.php  |    2 
 lib/client/kolab_client_task_group.php    |   22 ++---
 lib/client/kolab_client_task_user.php     |   12 +-
 lib/kolab_api_service.php                 |  124 ++++++++++--------------------
 lib/kolab_client_task.php                 |   13 ++-
 lib/locale/en_US.php                      |    4 
 public_html/js/kolab_admin.js             |    5 -
 12 files changed, 101 insertions(+), 165 deletions(-)

New commits:
commit 7906fe64d5b76d6abec033ade2d3e9fa56d9abd8
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Mar 30 13:26:32 2012 +0200

    Unified some methods: Use object_type_*() instead of separate user_type_*/group_type_*/<any>_type_*.
    Unified some API calls arguments: Use object_name and type_id instead of user_type_id/group_type_id/<any>_type_id.

diff --git a/lib/api/kolab_api_service_form_value.php b/lib/api/kolab_api_service_form_value.php
index 3f53d79..b006b84 100644
--- a/lib/api/kolab_api_service_form_value.php
+++ b/lib/api/kolab_api_service_form_value.php
@@ -52,22 +52,14 @@ class kolab_api_service_form_value extends kolab_api_service
      * @param array $getdata   GET parameters
      * @param array $postdata  POST parameters. Required parameters:
      *                         - attributes: list of attribute names
-     *                         - user_type_id or group_type_id: Type identifier
+     *                         - type_id: Type identifier
+     *                         - object_type: Object type (user, group, etc.)
      *
      * @return array Response with attribute name as a key
      */
     public function generate($getdata, $postdata)
     {
-        if (isset($postdata['user_type_id'])) {
-            $attribs = $this->user_type_attributes($postdata['user_type_id']);
-        }
-        else if (isset($postdata['group_type_id'])) {
-            $attribs = $this->group_type_attributes($postdata['group_type_id']);
-        }
-        else {
-            $attribs = array();
-        }
-
+        $attribs    = $this->object_type_attributes($postdata['object_type'], $postdata['type_id']);
         $attributes = (array) $postdata['attributes'];
         $result     = array();
 
@@ -93,29 +85,18 @@ class kolab_api_service_form_value extends kolab_api_service
      *
      * @param array $getdata   GET parameters
      * @param array $postdata  POST parameters. Required parameters:
-     *                         - user_type_id or group_type_id: Type identifier
+     *                         - type_id: Type identifier
+     *                         - object_type: Object type (user, group, etc.)
      *
      * @return array Response with attribute name as a key
      */
     public function validate($getdata, $postdata)
     {
-        if (isset($postdata['user_type_id'])) {
-            $attribs = $this->user_type_attributes($postdata['user_type_id']);
-        }
-        else if (isset($postdata['group_type_id'])) {
-            $attribs = $this->group_type_attributes($postdata['group_type_id']);
-        }
-        else {
-            $attribs = array();
-        }
-
-        $result = array();
+        $attribs = $this->object_type_attributes($postdata['object_type'], $postdata['type_id']);
+        $result  = array();
 
         foreach ((array)$postdata as $attr_name => $attr_value) {
-            if (empty($attr_name)) {
-                continue;
-            }
-            if (preg_match('/^[a-z]+_type_id$/i', $attr_name)) {
+            if (empty($attr_name) || $attr_name == 'type_id' || $attr_name == 'object_type') {
                 continue;
             }
 
@@ -138,22 +119,14 @@ class kolab_api_service_form_value extends kolab_api_service
      * @param array $getdata   GET parameters
      * @param array $postdata  POST parameters. Required parameters:
      *                         - attributes: list of attribute names
-     *                         - user_type_id or group_type_id: Type identifier
+     *                         - type_id: Type identifier
+     *                         - object_type: Object type (user, group, etc.)
      *
      * @return array Response with attribute name as a key
      */
     public function select_options($getdata, $postdata)
     {
-        if (isset($postdata['user_type_id'])) {
-            $attribs = $this->user_type_attributes($postdata['user_type_id']);
-        }
-        else if (isset($postdata['group_type_id'])) {
-            $attribs = $this->group_type_attributes($postdata['group_type_id']);
-        }
-        else {
-            $attribs = array();
-        }
-
+        $attribs    = $this->object_type_attributes($postdata['object_type'], $postdata['type_id']);
         $attributes = (array) $postdata['attributes'];
         $result     = array();
 
@@ -181,22 +154,14 @@ class kolab_api_service_form_value extends kolab_api_service
      * @param array $getdata   GET parameters
      * @param array $postdata  POST parameters. Required parameters:
      *                         - attribute: attribute name
-     *                         - user_type_id or group_type_id: Type identifier
+     *                         - type_id: Type identifier
+     *                         - object_type: Object type (user, group, etc.)
      *
      * @return array Response with attribute name as a key
      */
     public function list_options($getdata, $postdata)
     {
-        if (isset($postdata['user_type_id'])) {
-            $attribs = $this->user_type_attributes($postdata['user_type_id']);
-        }
-        else if (isset($postdata['group_type_id'])) {
-            $attribs = $this->group_type_attributes($postdata['group_type_id']);
-        }
-        else {
-            $attribs = array();
-        }
-
+        $attribs   = $this->object_type_attributes($postdata['object_type'], $postdata['type_id']);
         $attr_name = $postdata['attribute'];
         $result    = array(
             // return search value, so client can match response to request
diff --git a/lib/api/kolab_api_service_group.php b/lib/api/kolab_api_service_group.php
index c1decaf..a527aa5 100644
--- a/lib/api/kolab_api_service_group.php
+++ b/lib/api/kolab_api_service_group.php
@@ -55,7 +55,7 @@ class kolab_api_service_group extends kolab_api_service
      */
     public function group_add($getdata, $postdata)
     {
-        $gta = $this->group_type_attributes($postdata['group_type_id']);
+        $gta = $this->object_type_attributes('group', $postdata['type_id']);
         $group_attributes = array();
 
         if (isset($gta['form_fields'])) {
@@ -93,7 +93,7 @@ class kolab_api_service_group extends kolab_api_service
         }
 
         $auth   = Auth::get_instance();
-        $result = $auth->group_add($group_attributes, $postdata['group_type_id']);
+        $result = $auth->group_add($group_attributes, $postdata['type_id']);
 
         if ($result) {
             return $group_attributes;
@@ -150,7 +150,7 @@ class kolab_api_service_group extends kolab_api_service
         $result['entrydn'] = $dn;
 
         // add group type id to the result                                                                                                                       
-        $result['group_type_id'] = $this->object_type_id('group', $result['objectclass']);
+        $result['type_id'] = $this->object_type_id('group', $result['objectclass']);
 
         if ($result) {
             return $result;
diff --git a/lib/api/kolab_api_service_group_types.php b/lib/api/kolab_api_service_group_types.php
index 7145654..e564c06 100644
--- a/lib/api/kolab_api_service_group_types.php
+++ b/lib/api/kolab_api_service_group_types.php
@@ -52,7 +52,7 @@ class kolab_api_service_group_types extends kolab_api_service
      */
     public function group_types_list($get, $post)
     {
-        $group_types = $this->group_types();
+        $group_types = $this->object_types('group');
 
         return array(
             'list'  => $group_types,
diff --git a/lib/api/kolab_api_service_user.php b/lib/api/kolab_api_service_user.php
index fea9f9d..855518f 100644
--- a/lib/api/kolab_api_service_user.php
+++ b/lib/api/kolab_api_service_user.php
@@ -59,7 +59,7 @@ class kolab_api_service_user extends kolab_api_service
      */
     public function user_add($getdata, $postdata)
     {
-        $uta             = $this->user_type_attributes($postdata['user_type_id']);
+        $uta             = $this->object_type_attributes('user', $postdata['type_id']);
         $form_service    = $this->controller->get_service('form_value');
         $user_attributes = array();
 
@@ -96,7 +96,7 @@ class kolab_api_service_user extends kolab_api_service
         }
 
         $auth = Auth::get_instance();
-        $result = $auth->user_add($user_attributes, $postdata['user_type_id']);
+        $result = $auth->user_add($user_attributes, $postdata['type_id']);
 
         if ($result) {
             return $user_attributes;
@@ -154,12 +154,12 @@ class kolab_api_service_user extends kolab_api_service
         $result['entrydn'] = $dn;
 
         // add user type id to the result
-        $result['user_type_id'] = $this->object_type_id('user', $result['objectclass']);
+        $result['type_id'] = $this->object_type_id('user', $result['objectclass']);
 
         // Search for attributes associated with the type_id that are not part
         // of the results returned earlier. Example: nsrole / nsroledn / aci, etc.
-        if ($result['user_type_id']) {
-            $uta   = $this->user_type_attributes($result['user_type_id']);
+        if ($result['type_id']) {
+            $uta   = $this->object_type_attributes('user', $result['type_id']);
             $attrs = array();
 
             foreach ($uta as $field_type => $attributes) {
diff --git a/lib/api/kolab_api_service_user_types.php b/lib/api/kolab_api_service_user_types.php
index b2adcf2..7a200ae 100644
--- a/lib/api/kolab_api_service_user_types.php
+++ b/lib/api/kolab_api_service_user_types.php
@@ -52,7 +52,7 @@ class kolab_api_service_user_types extends kolab_api_service
      */
     public function user_types_list($get, $post)
     {
-        $user_types = $this->user_types();
+        $user_types = $this->object_types('user');
 
         return array(
             'list'  => $user_types,
diff --git a/lib/client/kolab_client_task_group.php b/lib/client/kolab_client_task_group.php
index 9b57b99..ba213de 100644
--- a/lib/client/kolab_client_task_group.php
+++ b/lib/client/kolab_client_task_group.php
@@ -202,13 +202,13 @@ class kolab_client_task_group extends kolab_client_task
 
         // field-to-section map and fields order
         $fields_map = array(
-            'group_type_id'       => 'system',
-            'group_type_id_name'  => 'system',
-            'cn'                  => 'system',
-            'gidnumber'           => 'system',
-            'mail'                => 'system',
-            'uniquemember'        => 'system',
-            'memberurl'           => 'system',
+            'type_id'       => 'system',
+            'type_id_name'  => 'system',
+            'cn'            => 'system',
+            'gidnumber'     => 'system',
+            'mail'          => 'system',
+            'uniquemember'  => 'system',
+            'memberurl'     => 'system',
         );
 
         // Prepare fields
@@ -222,7 +222,7 @@ class kolab_client_task_group extends kolab_client_task
         }
 
         // Add user type id selector
-        $fields['group_type_id'] = array(
+        $fields['type_id'] = array(
             'section'  => 'system',
             'type'     => kolab_form::INPUT_SELECT,
             'options'  => $accttypes,
@@ -231,7 +231,7 @@ class kolab_client_task_group extends kolab_client_task
 
         // Hide account type selector if there's only one type
         if (count($accttypes) < 2 || !$add_mode) {
-            $fields['group_type_id']['type'] = kolab_form::INPUT_HIDDEN;
+            $fields['type_id']['type'] = kolab_form::INPUT_HIDDEN;
         }
 
         // Create mode
@@ -244,8 +244,8 @@ class kolab_client_task_group extends kolab_client_task
             $title = $data['cn'];
 
             // Add user type name
-            $fields['group_type_id_name'] = array(
-                'label'    => 'group.group_type_id',
+            $fields['type_id_name'] = array(
+                'label'    => 'group.type_id',
                 'section'  => 'system',
                 'value'    => $accttypes[$type]['content'],
             );
diff --git a/lib/client/kolab_client_task_user.php b/lib/client/kolab_client_task_user.php
index 2daaead..f4c6d02 100644
--- a/lib/client/kolab_client_task_user.php
+++ b/lib/client/kolab_client_task_user.php
@@ -201,8 +201,8 @@ class kolab_client_task_user extends kolab_client_task
 
         // field-to-section map and fields order
         $fields_map = array(
-            'user_type_id'              => 'personal',
-            'user_type_id_name'         => 'personal',
+            'type_id'                   => 'personal',
+            'type_id_name'              => 'personal',
             'givenname'                 => 'personal',
             'sn'                        => 'personal',
             'displayname'               => 'personal',
@@ -255,7 +255,7 @@ class kolab_client_task_user extends kolab_client_task
         }
 
         // Add user type id selector
-        $fields['user_type_id'] = array(
+        $fields['type_id'] = array(
             'section'  => 'personal',
             'type'     => kolab_form::INPUT_SELECT,
             'options'  => $accttypes,
@@ -269,7 +269,7 @@ class kolab_client_task_user extends kolab_client_task
 
         // Hide account type selector if there's only one type
         if (count($accttypes) < 2 || !$add_mode) {
-            $fields['user_type_id']['type'] = kolab_form::INPUT_HIDDEN;
+            $fields['type_id']['type'] = kolab_form::INPUT_HIDDEN;
         }
 
         // Create mode
@@ -288,8 +288,8 @@ class kolab_client_task_user extends kolab_client_task
             $data['userpassword'] = '';
 
             // Add user type name
-            $fields['user_type_id_name'] = array(
-                'label'    => 'user.user_type_id',
+            $fields['type_id_name'] = array(
+                'label'    => 'user.type_id',
                 'section'  => 'personal',
                 'value'    => $accttypes[$type]['content'],
             );
diff --git a/lib/kolab_api_service.php b/lib/kolab_api_service.php
index 8c41e30..dfe69ea 100644
--- a/lib/kolab_api_service.php
+++ b/lib/kolab_api_service.php
@@ -51,55 +51,34 @@ abstract class kolab_api_service
     /**
      * Returns attributes of specified user type.
      *
-     * @param int  $type_id  User type identifier
-     * @param bool $required Throws exception on empty ID
+     * @param string $object_name  Name of the object (user, group, etc.)
+     * @param int    $type_id      User type identifier
+     * @param bool   $required     Throws exception on empty ID
      *
      * @return array User type attributes
      */
-    protected function user_type_attributes($type_id, $required = true)
+    protected function object_type_attributes($object_name, $type_id, $required = true)
     {
-        if (empty($type_id)) {
-            if ($required) {
-                throw new Exception($this->controller->translate('user.notypeid'), 34);
-            }
-
-            return array();
+        $supported = array('group', 'user');
+        if (!in_array($object_name, $supported)) {
+        
         }
-
-        $user_types = $this->user_types();
-
-        if (empty($user_types[$type_id])) {
-            throw new Exception($this->controller->translate('user.invalidtypeid'), 35);
-        }
-
-        return $user_types[$type_id]['attributes'];
-    }
-
-    /**
-     * Returns attributes of specified group type.
-     *
-     * @param int  $type_id  Group type identifier
-     * @param bool $required Throws exception on empty ID
-     *
-     * @return array Group type attributes
-     */
-    protected function group_type_attributes($type_id, $required = true)
-    {
+    
         if (empty($type_id)) {
             if ($required) {
-                throw new Exception($this->controller->translate('group.notypeid'), 34);
+                throw new Exception($this->controller->translate($object_name . '.notypeid'), 34);
             }
 
             return array();
         }
 
-        $group_types = $this->group_types();
+        $object_types = $this->object_types($object_name);
 
-        if (empty($group_types[$type_id])) {
-            throw new Exception($this->controller->translate('group.invalidtypeid'), 35);
+        if (empty($object_types[$type_id])) {
+            throw new Exception($this->controller->translate($object_name . '.invalidtypeid'), 35);
         }
 
-        return $group_types[$type_id]['attributes'];
+        return $object_types[$type_id]['attributes'];
     }
 
     /**
@@ -116,14 +95,8 @@ abstract class kolab_api_service
             return null;
         }
 
-        $method = $object_name . '_types';
-
-        if (!method_exists($this, $method)) {
-            return null;
-        }
-
         $object_class = array_map('strtolower', $object_class);
-        $object_types = $this->$method();
+        $object_types = $this->object_types($object_name);
         $type_score   = -1;
         $type_id      = null;
 
@@ -160,66 +133,42 @@ abstract class kolab_api_service
     }
 
     /**
-     * Returns user types definitions.
+     * Returns object types definitions.
+     *
+     * @param string $object_name  Name of the object (user, group, etc.)
      *
-     * @return array User types.
+     * @return array Object types.
      */
-    protected function user_types()
+    protected function object_types($object_name)
     {
-        if (!empty($this->cache['user_types'])) {
-            return $this->cache['user_types'];
+        if (!empty($this->cache['object_types']) && !empty($this->cache['object_types'][$object_name])) {
+            return $this->cache['object_types'][$object_name];
         }
 
-        $sql_result = $this->db->query("SELECT * FROM user_types");
-        $user_types = array();
-
-        while ($row = $this->db->fetch_assoc($sql_result)) {
-            $user_types[$row['id']] = array();
-
-            foreach ($row as $key => $value) {
-                if ($key != "id") {
-                    if ($key == "attributes") {
-                        $user_types[$row['id']][$key] = json_decode($value, true);
-                    }
-                    else {
-                        $user_types[$row['id']][$key] = $value;
-                    }
-                }
-            }
-        }
-
-        return $this->cache['user_types'] = $user_types;
-    }
-
-    /**
-     * Returns group types definitions.
-     *
-     * @return array Group types.
-     */
-    protected function group_types()
-    {
-        if (!empty($this->cache['group_types'])) {
-            return $this->cache['group_types'];
+        $supported = array('group', 'user');
+        if (!in_array($object_name, $supported)) {
+            return array();
         }
 
-        $sql_result = $this->db->query("SELECT * FROM group_types");
-        $group_types = array();
+        $sql_result   = $this->db->query("SELECT * FROM {$object_name}_types");
+        $object_types = array();
 
         while ($row = $this->db->fetch_assoc($sql_result)) {
-            $group_types[$row['id']] = array();
+            $object_types[$row['id']] = array();
 
             foreach ($row as $key => $value) {
                 if ($key != "id") {
                     if ($key == "attributes") {
-                        $group_types[$row['id']][$key] = json_decode($value, true);
+                        $object_types[$row['id']][$key] = json_decode($value, true);
                     }
                     else {
-                        $group_types[$row['id']][$key] = $value;
+                        $object_types[$row['id']][$key] = $value;
                     }
                 }
             }
         }
 
-        return $this->cache['group_types'] = $group_types;
+        return $this->cache['object_types'][$object_name] = $object_types;
     }
+
 }
diff --git a/lib/kolab_client_task.php b/lib/kolab_client_task.php
index 010e1ce..c6115e7 100644
--- a/lib/kolab_client_task.php
+++ b/lib/kolab_client_task.php
@@ -691,11 +691,11 @@ class kolab_client_task
         $extra_fields = array_flip($extra_fields);
 
         // Selected account type
-        if (!empty($data[$name . '_type_id'])) {
-            $type = $data[$name . '_type_id'];
+        if (!empty($data['type_id'])) {
+            $type = $data['type_id'];
         }
         else {
-            $data[$name . '_type_id'] = $type = key($types);
+            $data['type_id'] = $type = key($types);
         }
 
         if ($type) {
@@ -815,6 +815,13 @@ class kolab_client_task
             }
         }
 
+        // Add object type hidden field
+        $fields['object_type'] = array(
+            'section'  => 'system',
+            'type'     => kolab_form::INPUT_HIDDEN,
+            'value'    => $name,
+        );
+
         return array($fields, $types, $type);
     }
 
diff --git a/lib/locale/en_US.php b/lib/locale/en_US.php
index 773810b..f156994 100644
--- a/lib/locale/en_US.php
+++ b/lib/locale/en_US.php
@@ -73,7 +73,7 @@ $LANG['user.quota'] = 'Quota';
 $LANG['user.quota.desc'] = 'Leave blank for unlimited';
 $LANG['user.fbinterval'] = 'Free-Busy interval';
 $LANG['user.fbinterval.desc'] = 'Leave blank for default (60 days)';
-$LANG['user.user_type_id'] = 'Account type';
+$LANG['user.type_id'] = 'Account type';
 $LANG['user.alias'] = 'Secondary Email Address(es)';
 $LANG['user.mailalternateaddress'] = 'Secondary Email Address(es)';
 $LANG['user.invitation-policy'] = 'Invitation policy';
@@ -102,7 +102,7 @@ $LANG['group.list'] = 'Groups List';
 $LANG['group.list.records'] = '$1 to $2 of $3';
 $LANG['group.cn'] = 'Common name';
 $LANG['group.mail'] = 'Primary Email Address';
-$LANG['group.group_type_id'] = 'Group type';
+$LANG['group.type_id'] = 'Group type';
 $LANG['group.add.success'] = 'Group created successfully.';
 $LANG['group.delete.success'] = 'Group deleted successfully.';
 $LANG['group.gidnumber'] = 'Primary group number';
diff --git a/public_html/js/kolab_admin.js b/public_html/js/kolab_admin.js
index dabf56c..d035b49 100644
--- a/public_html/js/kolab_admin.js
+++ b/public_html/js/kolab_admin.js
@@ -924,8 +924,9 @@ function kolab_admin()
   {
     var i, j, e, elem, name, elem_name,
       form = $('#'+this.env.form_id),
-      type_id = $('[name="user_type_id"]', form).val(),
-      data = {user_type_id: type_id, attributes: []};
+      type_id = $('[name="type_id"]', form).val(),
+      object_type = $('[name="object_type"]', form).val(),
+      data = {type_id: type_id, object_type: object_type, attributes: []};
 
     this.set_busy(true, 'loading');
 


commit fe39a1887ffe4425b88613eeb384971f838103f3
Merge: d319214 0ebdbf8
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Mar 30 13:23:24 2012 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/kolab-wap



commit d319214a23237da051da667fb53d69922c64477e
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Mar 30 13:23:12 2012 +0200

    Fix PHP warning

diff --git a/lib/Auth/LDAP.php b/lib/Auth/LDAP.php
index 3c2e96e..af1d7ee 100644
--- a/lib/Auth/LDAP.php
+++ b/lib/Auth/LDAP.php
@@ -1122,7 +1122,7 @@ class LDAP
 
         $search_results = ldap_search($this->conn, $root_dn, $search_filter);
 
-        if (ldap_count_entries($this->conn, $search_results) == 0) {
+        if (!$search_result || ldap_count_entries($this->conn, $search_results) == 0) {
             //message("No entries found for the user dn in " . __METHOD__);
             return false;
         }


commit c93bfc52f643eb0c4ab77663a26e86823f597bec
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Mar 30 09:10:04 2012 +0200

    Group type ID detection (#660)

diff --git a/lib/api/kolab_api_service_group.php b/lib/api/kolab_api_service_group.php
index f382d79..c1decaf 100644
--- a/lib/api/kolab_api_service_group.php
+++ b/lib/api/kolab_api_service_group.php
@@ -149,6 +149,9 @@ class kolab_api_service_group extends kolab_api_service
         $result            = $result[$dn];
         $result['entrydn'] = $dn;
 
+        // add group type id to the result                                                                                                                       
+        $result['group_type_id'] = $this->object_type_id('group', $result['objectclass']);
+
         if ($result) {
             return $result;
         }
diff --git a/lib/api/kolab_api_service_user.php b/lib/api/kolab_api_service_user.php
index 8c60d33..fea9f9d 100644
--- a/lib/api/kolab_api_service_user.php
+++ b/lib/api/kolab_api_service_user.php
@@ -154,7 +154,7 @@ class kolab_api_service_user extends kolab_api_service
         $result['entrydn'] = $dn;
 
         // add user type id to the result
-        $result['user_type_id'] = $this->user_type_id($result['objectclass']);
+        $result['user_type_id'] = $this->object_type_id('user', $result['objectclass']);
 
         // Search for attributes associated with the type_id that are not part
         // of the results returned earlier. Example: nsrole / nsroledn / aci, etc.
diff --git a/lib/kolab_api_service.php b/lib/kolab_api_service.php
index 03c273e..8c41e30 100644
--- a/lib/kolab_api_service.php
+++ b/lib/kolab_api_service.php
@@ -103,28 +103,39 @@ abstract class kolab_api_service
     }
 
     /**
-     * Detects user type ID for specified objectClass attribute value
+     * Detects object type ID for specified objectClass attribute value
      *
-     * @param array $object_class Value of objectClass attribute
+     * @param string $object_name   Name of the object (user, group, etc.)
+     * @param array  $object_class  Value of objectClass attribute
      *
-     * @return int User type identifier
+     * @return int Object type identifier
      */
-    protected function user_type_id($object_class)
+    protected function object_type_id($object_name, $object_class)
     {
         if (empty($object_class)) {
             return null;
         }
 
+        $method = $object_name . '_types';
+
+        if (!method_exists($this, $method)) {
+            return null;
+        }
+
         $object_class = array_map('strtolower', $object_class);
-        $user_types   = $this->user_types();
+        $object_types = $this->$method();
         $type_score   = -1;
         $type_id      = null;
 
         console("Data objectClasses: " . implode(", ", $object_class));
 
-        foreach ($user_types as $idx => $elem) {
+        foreach ($object_types as $idx => $elem) {
             $ref_class = $elem['attributes']['fields']['objectclass'];
 
+            if (empty($ref_class)) {
+                continue;
+            }
+
             console("Reference objectclasses for " . $elem['key'] . ": " . implode(", ", $ref_class));
 
             // Eliminate the duplicates between the $data_ocs and $ref_ocs
@@ -137,7 +148,7 @@ abstract class kolab_api_service
 
 //            console("\$object_class not in \$ref_class (" . $elem['key'] . "): " . implode(", ", $_object_class));
 //            console("\$ref_class not in \$object_class (" . $elem['key'] . "): " . implode(", ", $_ref_class));
-            console("Score for user type " . $elem['name'] . ": " . $elem_score . "(" . $commonalities . "/" . $differences . ")");
+            console("Score for $object_name type " . $elem['name'] . ": " . $elem_score . "(" . $commonalities . "/" . $differences . ")");
 
             if ($elem_score > $type_score) {
                 $type_id    = $idx;





More information about the commits mailing list