lib/api lib/kolab_api_service.php

Aleksander Machniak machniak at kolabsys.com
Mon Apr 2 15:49:25 CEST 2012


 lib/api/kolab_api_service_group.php |   81 +------------------------------
 lib/api/kolab_api_service_user.php  |   92 ++----------------------------------
 lib/kolab_api_service.php           |   56 +++++++++++++++++++++
 3 files changed, 65 insertions(+), 164 deletions(-)

New commits:
commit 589b9d61dbbb02a7f60ad934f3320d437a210b57
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Mon Apr 2 15:49:00 2012 +0200

    Move some shared code to service (parent) class

diff --git a/lib/api/kolab_api_service_group.php b/lib/api/kolab_api_service_group.php
index bbbabe0..3e4825e 100644
--- a/lib/api/kolab_api_service_group.php
+++ b/lib/api/kolab_api_service_group.php
@@ -56,44 +56,7 @@ class kolab_api_service_group extends kolab_api_service
      */
     public function group_add($getdata, $postdata)
     {
-        $gta = $this->object_type_attributes('group', $postdata['type_id']);
-        $group_attributes = array();
-
-        if (isset($gta['form_fields'])) {
-            foreach ($gta['form_fields'] as $key => $value) {
-                if (empty($postdata[$key]) && empty($value['optional'])) {
-                    throw new Exception("Missing input value for $key", 345);
-                }
-                else {
-                    $group_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($gta['auto_form_fields'])) {
-            foreach ($gta['auto_form_fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    if (empty($value['optional'])) {
-                        $postdata['attributes'] = array($key);
-                        $res                    = $form_service->generate($getdata, $postdata);
-                        $postdata[$key]         = $res[$key];
-                        $group_attributes[$key]  = $postdata[$key];
-                    }
-                } else {
-                    $group_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($gta['fields'])) {
-            foreach ($gta['fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    $group_attributes[$key] = $gta['fields'][$key];
-                } else {
-                    $group_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
+        $group_attributes = $this->parse_input_attributes('group', $postdata);
 
         $auth   = Auth::get_instance();
         $result = $auth->group_add($group_attributes, $postdata['type_id']);
@@ -132,9 +95,7 @@ class kolab_api_service_group extends kolab_api_service
 
     public function group_edit($getdata, $postdata)
     {
-        $gta             = $this->object_type_attributes('group', $postdata['type_id']);
-        $form_service    = $this->controller->get_service('form_value');
-        $group_attributes = array();
+        $group_attributes = $this->parse_input_attributes('group', $postdata);
 
         // Get the type "key" string for the next few settings.
         if ($postdata['type_id'] == null) {
@@ -166,48 +127,12 @@ class kolab_api_service_group extends kolab_api_service
             $rdn_attr = 'cn';
         }
 
-        if (isset($gta['form_fields'])) {
-            foreach ($gta['form_fields'] as $key => $value) {
-                if (empty($postdata[$key]) && empty($value['optional'])) {
-                    throw new Exception("Missing input value for $key", 345);
-                }
-                else {
-                    $group_attributes[$key] = $postdata[$key];
-                } 
-            }
-        }
-
-        if (isset($gta['auto_form_fields'])) {
-            foreach ($gta['auto_form_fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    if (empty($value['optional'])) {
-                        $postdata['attributes'] = array($key);
-                        $res                    = $form_service->generate($getdata, $postdata);
-                        $postdata[$key]         = $res[$key];
-                        $group_attributes[$key] = $postdata[$key];
-                    }
-                } else {
-                    $group_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($gta['fields'])) {
-            foreach ($gta['fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    $group_attributes[$key] = $gta['fields'][$key];
-                } else {
-                    $group_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
         $auth = Auth::get_instance();
         $auth->connect();
 
         // Now that values have been re-generated where necessary, compare
         // the new group attributes to the original group attributes.
-        $_group = $auth->group_find_by_attribute(array($unique_attr => $postdata['id']));
+        $_group = $auth->group_find_by_attribute(array($unique_attr => $group_attributes[$unique_attr]));
 
         if (!$_group) {
             console("Could not find group");
diff --git a/lib/api/kolab_api_service_user.php b/lib/api/kolab_api_service_user.php
index 106fe33..cafa6bf 100644
--- a/lib/api/kolab_api_service_user.php
+++ b/lib/api/kolab_api_service_user.php
@@ -60,48 +60,7 @@ class kolab_api_service_user extends kolab_api_service
     public function user_add($getdata, $postdata)
     {
         console("user_add()", $postdata);
-
-        $uta             = $this->object_type_attributes('user', $postdata['type_id']);
-        $form_service    = $this->controller->get_service('form_value');
-        $user_attributes = array();
-
-        if (isset($uta['form_fields'])) {
-            foreach ($uta['form_fields'] as $key => $value) {
-                if (empty($postdata[$key]) && empty($value['optional'])) {
-                    throw new Exception("Missing input value for $key", 345);
-                }
-                else {
-                    $user_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($uta['auto_form_fields'])) {
-            foreach ($uta['auto_form_fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    // If the attribute is marked as optional, however...
-                    if (empty($value['optional'])) {
-                        $postdata['attributes'] = array($key);
-                        $res                    = $form_service->generate($getdata, $postdata);
-                        $postdata[$key]         = $res[$key];
-                        $user_attributes[$key] = $postdata[$key];
-                    }
-                } else {
-                    $user_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($uta['fields'])) {
-            foreach ($uta['fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    $user_attributes[$key] = $uta['fields'][$key];
-                } else {
-                    $user_attributes[$key] = $uta['fields'][$key];
-                }
-            }
-        }
-
+        $user_attributes = $this->parse_input_attributes('user', $postdata); 
         console("user_add()", $user_attributes);
 
         $auth = Auth::get_instance();
@@ -143,9 +102,7 @@ class kolab_api_service_user extends kolab_api_service
     {
         console("\$postdata to user_edit()", $postdata);
 
-        $uta             = $this->object_type_attributes('user', $postdata['type_id']);
-        $form_service    = $this->controller->get_service('form_value');
-        $user_attributes = array();
+        $user_attributes = $this->parse_input_attributes('user', $postdata); 
 
         // Get the type "key" string for the next few settings.
         if ($postdata['type_id'] == null) {
@@ -163,6 +120,9 @@ class kolab_api_service_user extends kolab_api_service
         if (!$unique_attr) {
             $unique_attr = 'nsuniqueid';
         }
+        $user_attributes[$unique_attr] = $postdata['id'];                                                                                                      
+        unset($postdata['id']);
+
         // TODO: "rdn" is somewhat LDAP specific, but not used as something
         // LDAP specific...?
         $rdn_attr = $conf->get($type_str . '_user_name_attribute');
@@ -179,7 +139,7 @@ class kolab_api_service_user extends kolab_api_service
 
         // Now that values have been re-generated where necessary, compare
         // the new group attributes to the original group attributes.
-        $_user = $auth->user_find_by_attribute(Array($unique_attr => $postdata[$unique_attr]));
+        $_user = $auth->user_find_by_attribute(array($unique_attr => $user_attributes[$unique_attr]));
 
         if (!$_user) {
             console("Could not find user");
@@ -187,45 +147,7 @@ class kolab_api_service_user extends kolab_api_service
         }
 
         $_user_dn = key($_user);
-        $_user = $this->user_info(Array('user' => $_user_dn), Array());
-
-        if (isset($uta['form_fields'])) {
-            foreach ($uta['form_fields'] as $key => $value) {
-                if (empty($postdata[$key]) && empty($value['optional'])) {
-                    throw new Exception("Missing input value for $key", 345);
-                }
-                else {
-                    $user_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        if (isset($uta['auto_form_fields'])) {
-            foreach ($uta['auto_form_fields'] as $key => $value) {
-                if (empty($postdata[$key])) {
-                    if (empty($value['optional'])) {
-                        $postdata['attributes'] = array($key);
-                        $res                    = $form_service->generate($getdata, $postdata);
-                        $postdata[$key]         = $res[$key];
-                        $user_attributes[$key]  = $postdata[$key];
-                    }
-                } else {
-                    $user_attributes[$key] = $postdata[$key];
-                }
-            }
-        }
-
-        // The user did not edit these.
-        // They're not in $postdata.
-        // Only the original user object has the right ones
-        if (isset($uta['fields'])) {
-            foreach ($uta['fields'] as $key => $value) {
-                console("Setting $key from original user's value", $_user[$key]);
-                $user_attributes[$key] = $_user[$key];
-            }
-
-            $user_attributes[$unique_attr] = $postdata[$unique_attr];
-        }     
+        $_user = $this->user_info(array('user' => $_user_dn), array());
 
         // We should start throwing stuff over the fence here.
         $result = $auth->modify_entry($_user_dn, $_user, $user_attributes);
diff --git a/lib/kolab_api_service.php b/lib/kolab_api_service.php
index cf95c38..8f6227d 100644
--- a/lib/kolab_api_service.php
+++ b/lib/kolab_api_service.php
@@ -186,7 +186,7 @@ abstract class kolab_api_service
     }
 
     /**
-     * Detects object type ID for specified objectClass attribute value
+     * Parses result attributes
      *
      * @param string $object_name  Name of the object (user, group, etc.)
      * @param array  $attrs        Entry attributes
@@ -236,4 +236,58 @@ abstract class kolab_api_service
 
         return $attrs;
     }
+
+    /**
+     * Parses input (for add/edit) attributes
+     *
+     * @param string $object_name  Name of the object (user, group, etc.)
+     * @param array  $attrs        Entry attributes
+     *
+     * @return array Entry attributes
+     */
+    protected function parse_input_attributes($object_name, $attribs)
+    {
+        $type_attrs   = $this->object_type_attributes($object_name, $attribs['type_id']);
+        $form_service = $this->controller->get_service('form_value');
+        $result       = array();
+
+        if (isset($type_attrs['form_fields'])) {
+            foreach ($type_attrs['form_fields'] as $key => $value) {
+                if (empty($attribs[$key]) && empty($value['optional'])) {
+                    throw new Exception("Missing input value for $key", 345);
+                }
+                else {
+                    $result[$key] = $attribs[$key];
+                }
+            }
+        }
+
+        if (isset($type_attrs['auto_form_fields'])) {
+            foreach ($type_attrs['auto_form_fields'] as $key => $value) {
+                if (empty($attribs[$key])) {
+                    if (empty($value['optional'])) {
+                        $attribs['attributes'] = array($key);
+                        $res                   = $form_service->generate(null, $attribs);
+                        $attribs[$key]         = $res[$key];
+                        $result[$key]          = $attribs[$key];
+                    }
+                } else {
+                    $result[$key] = $attribs[$key];
+                }
+            }
+        }
+
+        if (isset($type_attrs['fields'])) {
+            foreach ($type_attrs['fields'] as $key => $value) {
+                if (empty($attribs[$key])) {
+                    $result[$key] = $gta['fields'][$key];
+                } else {
+                    $result[$key] = $attribs[$key];
+                }
+            }
+        }
+
+        return $result;
+    }
+
 }





More information about the commits mailing list