Code

Simplified the way we handle tags. This *may* break tagging. Needs testing.
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 15 Jan 2008 16:28:27 +0000 (16:28 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 15 Jan 2008 16:28:27 +0000 (16:28 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@8370 594d385d-05f5-0310-b6e9-bd551577e9d8

23 files changed:
include/class_plugin.inc
include/functions.inc
plugins/admin/applications/tabs_application.inc
plugins/admin/departments/class_departmentGeneric.inc
plugins/admin/fai/class_faiHook.inc
plugins/admin/fai/class_faiPackage.inc
plugins/admin/fai/class_faiPartitionTable.inc
plugins/admin/fai/class_faiProfile.inc
plugins/admin/fai/class_faiScript.inc
plugins/admin/fai/class_faiTemplate.inc
plugins/admin/fai/class_faiVariable.inc
plugins/admin/groups/tabs_group.inc
plugins/admin/mimetypes/tabs_mimetypes.inc
plugins/admin/ogroups/tabs_ogroups.inc
plugins/admin/systems/class_printGeneric.inc
plugins/admin/systems/tabs_component.inc
plugins/admin/systems/tabs_phone.inc
plugins/admin/systems/tabs_printers.inc
plugins/admin/systems/tabs_server.inc
plugins/admin/systems/tabs_terminal.inc
plugins/admin/systems/tabs_winstation.inc
plugins/admin/systems/tabs_workstation.inc
plugins/personal/generic/class_user.inc

index e84ddec657b4b875b855927b819211f7f6177b14..d6678993073e7b0def6c7f63f478a5669ae80b68 100644 (file)
@@ -335,6 +335,8 @@ class plugin
       }
     }
 
+    /* Handle tagging */
+    $this->tag_attrs(&$this->attrs);
   }
 
 
@@ -892,6 +894,61 @@ class plugin
   }
 
 
+  function tag_attrs($at, $dn= "", $tag= "", $show= false)
+  {
+    /* No dn? Self-operation... */
+    if ($dn == ""){
+      $dn= $this->dn;
+    
+      /* No tag? Find it yourself... */
+      if ($tag == ""){
+        $len= strlen($dn);
+
+        @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "No tag for $dn - looking for one...", "Tagging");
+        $relevant= array();
+        foreach ($this->config->adepartments as $key => $ntag){
+
+          /* This one is bigger than our dn, its not relevant... */
+          if ($len <= strlen($key)){
+            continue;
+          }
+
+          /* This one matches with the latter part. Break and don't fix this entry */
+          if (preg_match('/(^|,)'.normalizePreg($key).'$/', $dn)){
+            @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "DEBUG: Possibly relevant: $key", "Tagging");
+            $relevant[strlen($key)]= $ntag;
+            continue;
+          }
+
+        }
+
+        /* If we've some relevant tags to set, just get the longest one */
+        if (count($relevant)){
+          ksort($relevant);
+          $tmp= array_keys($relevant);
+          $idx= end($tmp);
+          $tag= $relevant[$idx];
+          $this->gosaUnitTag= $tag;
+        }
+      }
+    }
+
+    /* Remove tags that may already be here... */
+    remove_objectClass("gosaAdministrativeUnitTag", &$at);
+    if (isset($at['gosaUnitTag'])){
+       unset($at['gosaUnitTag']);
+    }
+
+    /* Set tag? */
+    if ($tag != ""){
+      add_objectClass("gosaAdministrativeUnitTag", &$at);
+      $at['gosaUnitTag']= $tag;
+    }
+
+    return ($at);
+  }
+
+
   function handle_object_tagging($dn= "", $tag= "", $show= false)
   {
     //FIXME: How to optimize this? We have at least two
index e83805413ea93da35bb4f1171bef0653a685d113..70ab363acedfc872f34830b1a1dd11b2ae7d51fc 100644 (file)
@@ -2604,6 +2604,45 @@ function is_in_network($network, $netmask, $address)
 }
 
 
+/* Add a given objectClass to an attrs entry */
+function add_objectClass($classes, &$attrs)
+{
+       if (is_array($classes)){
+               $list= $classes;
+       } else {
+               $list= array($classes);
+       }
+
+       foreach ($list as $class){
+               $attrs['objectClass'][]= $class;
+       }
+}
+
+
+/* Removes a given objectClass from the attrs entry */
+function remove_objectClass($classes, &$attrs)
+{
+       if (isset($attrs['objectClass'])){
+               /* Array? */
+               if (is_array($classes)){
+                       $list= $classes;
+               } else {
+                       $list= array($classes);
+               }
+
+               $tmp= array();
+               foreach ($attrs['objectClass'] as $oc) {
+                       foreach ($list as $class){
+                               if ($oc != $class){
+                                       $tmp[]= $oc;
+                               }
+                       }
+               }
+               $attrs['objectClass']= $tmp;
+       }
+}
+
+
 /* Returns contents of the given POST variable and check magic quotes settings */
 function get_post($name)
 {
index 859218e040e4fae135af767942d4b9b5312597da..b8863a7a4670de33bb84fc084bb1bcec79b11506 100644 (file)
@@ -44,10 +44,6 @@ class apptabs extends tabs
     }
 
     tabs::save();
-
-    /* Fix tagging if needed */
-    $baseobject->dn= $this->dn;
-    $baseobject->handle_object_tagging();
   }
 
 }
index 9aecbccdff2cb3d39578dc59596a449b74e37625..18f8db4abe4574ff700d5cf047b0269e92f22e02 100644 (file)
@@ -296,7 +296,7 @@ class department extends plugin
                        $tmp= array();
 
                        /* Remove gosaAdministrativeUnit from this plugin */
-      $has_unit_tag= false;
+                       $has_unit_tag= false;
                        foreach($this->attrs['objectClass'] as $oc){
                                if (!preg_match("/^gosaAdministrativeUnit$/i", $oc)){
                                        $tmp[]= $oc;
@@ -333,11 +333,6 @@ class department extends plugin
         This will be done later */
     $this->tag_objects(true);
 
-    /* Fix tagging if needed */
-    if (!$this->is_administrational_unit){
-      $this->handle_object_tagging();
-    }
-    
     /* Optionally execute a command after we're done */
                $this->postcreate();
     return(true);
@@ -421,7 +416,7 @@ class department extends plugin
           $this->must_be_tagged =true;
           return;
         }
-                               $this->handle_object_tagging($attrs['dn'], $this->gosaUnitTag, TRUE );
+       $this->handle_object_tagging($attrs['dn'], $this->gosaUnitTag, TRUE );
         echo "<script language=\"javascript\" type=\"text/javascript\">scrollDown2();</script>" ;
                        }
                }
index 0ad7dba9e40936965dea554b0fca6810835db848..c00c14dc3f78321aeffe666442f9c8c58dcac89c 100644 (file)
@@ -432,9 +432,6 @@ class faiHook extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI hook base failed")); 
 
-    /* Do object tagging */
-    $this->handle_object_tagging();
-
     $ldap->cd($this->dn);
 
     /* Prepare FAIscriptEntry to write it to ldap
@@ -516,6 +513,9 @@ class faiHook extends plugin
         }
       }
 
+      /* Tag object */
+      $this->tag_attrs(&$tmp, $sub_dn, $this->gosaUnitTag);
+
       if($obj['status'] == "delete"){
         $ldap->cd($sub_dn);
         $ldap->rmdir_recursive($sub_dn);
@@ -538,7 +538,6 @@ class faiHook extends plugin
         $this->handle_post_events("add");
         show_ldap_error($ldap->get_error(), _("Saving FAI hook failed")); 
       }
-      $this->handle_object_tagging($sub_dn, $this->gosaUnitTag);
     }
   }
   
index 32a26f91bb1bca327d91c72be94b119ca651a50d..18a7aeae70c5a2a9b719dc7fa4dd1ef7fe46f9f0 100644 (file)
@@ -507,8 +507,6 @@ class faiPackage extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI package base failed"));
 
-    /* Do object tagging */
-    $this->handle_object_tagging();
     $ldap->cd($this->dn);
 
     /* Save Package configurations */
@@ -533,11 +531,8 @@ class faiPackage extends plugin
         /* cehck if object already exists */
         $ldap->cat($pkgdn,array("objectClass"));
 
-        /* Workaround for missing "gosaAdministrativeUnitTag" */
-        $attrs = $ldap->fetch();
-        if((isset($attrs['objectClass'])) && (in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass']))){
-          $pkgattrs['objectClass'][] = "gosaAdministrativeUnitTag";
-        }
+       /* Tag object */
+       $this->tag_attrs(&$pkgattrs, $sub_dn, $this->gosaUnitTag);
   
         if(in_array($pkgattrs['FAIvariableType'],array("boolean","multiselect","password","select","string","text"))){
           if($ldap->count()!=0){
@@ -554,8 +549,6 @@ class faiPackage extends plugin
           show_ldap_error($ldap->get_error(), _("Saving FAI package entry failed"));
         }
 
-        /* Handle tagging */
-        $this->handle_object_tagging($pkgdn, $this->gosaUnitTag);
       }
     }
   }
index c85cf9ab33e11f49997054cfe9e286efffb82a78..a627dfd6f7801211b641731d3ac97bcfcac3645e 100644 (file)
@@ -367,9 +367,6 @@ class faiPartitionTable extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI partition table base failed"));
   
-    /* Do object tagging */
-    $this->handle_object_tagging();
-  
     /* Sort entries, because we must delete entries with status="delete" first */
     $order = array();
     foreach($this->disks as $key => $disk){
@@ -402,13 +399,9 @@ class faiPartitionTable extends plugin
         }
       }
 
-      /* Fix problem with missing objectClass "gosaAdministrativeUnitTag" for disks */
-      $ldap->cat($disk_dn,array("objectClass"));
-      $attrs = $ldap->fetch();
-      if(isset($attrs['objectClass']) && in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){
-        $disk_attrs['objectClass'][] = "gosaAdministrativeUnitTag";
-      }
-
+      /* Do object tagging */
+      $this->tag_attrs(&$disk_attrs, $disk_dn, $this->gosaUnitTag);
+  
       if($disk['status'] == "delete"){
         $ldap->cd($disk_dn);
         $ldap->rmdir_recursive($disk_dn);
@@ -434,8 +427,6 @@ class faiPartitionTable extends plugin
         print_red("unknown status while saving disks");
       }
 
-      $this->handle_object_tagging($disk_dn, $this->gosaUnitTag);
-
       /* Collect all opperations. Delete first than add new entries .*/
       $Todo['delete'] = array();
       $Todo['rest'] = array();
@@ -512,11 +503,9 @@ class faiPartitionTable extends plugin
         $ldap->cat($partition_dn);
         if($ldap->count()){
 
-          /* Fix problem with missing objectClass "gosaAdministrativeUnitTag" for partitions */
-          $attrs = $ldap->fetch();
-          if(isset($attrs['objectClass']) && in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){
-            $partition_attrs['objectClass'][] = "gosaAdministrativeUnitTag";
-          }
+         /* Tag object */
+         $this->tag_attrs(&$partition_attrs, $partition_dn, $this->gosaUnitTag);
+
           if(empty($partition_attrs['description'])){
             $partition_attrs['description']=array();
           }
@@ -548,7 +537,6 @@ class faiPartitionTable extends plugin
           $ldap->add($partition_attrs);
           show_ldap_error($ldap->get_error(), _("Saving FAI partition table entry failed"));
         }
-        $this->handle_object_tagging($partition_dn, $this->gosaUnitTag);
       }
     }
     $this->handle_post_events("add");
index 84e5b40b1174dc503303d66235f18985c104ea0c..8f70c88a32bdb122f74ae59bcf1ce219cc59c64a 100644 (file)
@@ -457,10 +457,6 @@ class faiProfile extends plugin
       $ldap->add($this->attrs);
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI profile failed"));
-
-    /* Do object tagging */
-    $this->handle_object_tagging();
-    show_ldap_error($ldap->get_error());
   }
 
   
index ac945d890fedffa402ae1542b5017aa9546b303a..c4a84f3814ca6dbf3a7252a076fd443db17c0ebc 100644 (file)
@@ -464,9 +464,6 @@ class faiScript extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Creating FAI script base failed"));
 
-    /* Do object tagging */
-    $this->handle_object_tagging();
-
     /* Prepare FAIscriptEntry to write it to ldap
      * First sort array.
      *  Because we must delete old entries first.
@@ -531,16 +528,8 @@ class faiScript extends plugin
         $tmp['FAIpriority']  ="0";
       }
 
-      /* Check if gosaAdministrativeUnitTag is required as object class */
-      if($obj['status'] == "edited"){
-        $ldap->cat($sub_dn,array("objectClass"));
-        $attrs = $ldap->fetch();
-        if(isset($attrs['objectClass'])){
-          if(in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){
-            $tmp['objectClass'][] = "gosaAdministrativeUnitTag";
-          }
-        }
-      }
+      /* Tag object */
+      $this->tag_attrs(&$tmp, $sub_dn, $this->gosaUnitTag);
 
       if($obj['status'] == "delete"){
         $ldap->cd($sub_dn);
@@ -567,8 +556,6 @@ class faiScript extends plugin
         $this->handle_post_events("add");
         show_ldap_error($ldap->get_error(), _("Saving FAI script failed")); 
       }
-
-      $this->handle_object_tagging($sub_dn, $this->gosaUnitTag);
     }
   }
 
index bb552443cfa8a9690ec4711ccc25f151abc6d5e8..6a27eeca4cad45a8d2c07b504bbb006a39a86319 100644 (file)
@@ -402,9 +402,6 @@ class faiTemplate extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI template base failed"));
 
-    /* Do object tagging */
-    $this->handle_object_tagging();
-
     /* Prepare FAIscriptEntry to write it to ldap
      * First sort array.
      *  Because we must delete old entries first.
@@ -463,16 +460,8 @@ class faiTemplate extends plugin
         }
       }
 
-       /* Check if gosaAdministrativeUnitTag is required as object class */
-      if($obj['status'] == "edited"){
-        $ldap->cat($sub_dn,array("objectClass"));
-        $attrs = $ldap->fetch();
-        if(isset($attrs['objectClass'])){
-          if(in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){
-            $tmp['objectClass'][] = "gosaAdministrativeUnitTag";
-          }
-        }
-      }
+      /* Tag object */
+      $this->tag_attrs(&$tmp, $sub_dn, $this->gosaUnitTag);
 
       if($obj['status'] == "delete"){
         $ldap->cd($sub_dn);
@@ -498,8 +487,6 @@ class faiTemplate extends plugin
         $this->handle_post_events("add");
         show_ldap_error($ldap->get_error(), _("Creating FAI template entry failed")); 
       }
-
-      $this->handle_object_tagging($sub_dn, $this->gosaUnitTag);
     }
   }
   
index 171ad312d99130b3a8d5beb0ca07efbd7d3adb0f..a2f36897f70a8c86d8294dde28eaff48e181720f 100644 (file)
@@ -314,9 +314,6 @@ class faiVariable extends plugin
     }
     show_ldap_error($ldap->get_error(), _("Saving FAI variable base failed"));
  
-    /* Do object tagging */
-    $this->handle_object_tagging();
     /* Prepare FAIscriptEntry to write it to ldap
      * First sort array.
      *  Because we must delete old entries first.
@@ -363,16 +360,8 @@ class faiVariable extends plugin
         }
       }
 
-      /* Check if gosaAdministrativeUnitTag is required as object class */
-      if($obj['status'] == "edited"){
-        $ldap->cat($sub_dn,array("objectClass"));
-        $attrs = $ldap->fetch();
-        if(isset($attrs['objectClass'])){
-          if(in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){
-            $tmp['objectClass'][] = "gosaAdministrativeUnitTag";
-          }
-        }
-      }
+      /* Tag object */
+      $this->tag_attrs(&$tmp, $sub_dn, $this->gosaUnitTag);
  
       if($obj['status'] == "delete"){
         $ldap->cd($sub_dn);
@@ -399,8 +388,6 @@ class faiVariable extends plugin
         $this->handle_post_events("add");
         show_ldap_error($ldap->get_error(), _("Saving FAI variable failed")); 
       }
-
-      $this->handle_object_tagging($sub_dn, $this->gosaUnitTag);
     }
   }
   
index 7adb0c3054f4f53d346c036916692f15285147aa..c83e876289655469a863c0f274ef3761ab6c4f5e 100644 (file)
@@ -77,10 +77,6 @@ class grouptabs extends tabs
 
                $ret= tabs::save();
 
-               /* Fix tagging if needed */
-               $baseobject->dn= $new_dn;
-               $baseobject->handle_object_tagging();
-
                return $ret;
        }
 
index eb4368ce91e363c3a33d5a727bce145b1b4f04f3..cab01e1471a723335e24086a6866e6afe9863b62 100644 (file)
@@ -49,11 +49,6 @@ class mimetabs extends tabs
     }
 
     tabs::save();
-
-    /* Fix tagging if needed */
-    $baseobject->dn= $this->dn;
-    $baseobject->handle_object_tagging();
-    $this->by_object['mimetype'] = $baseobject;
   }
 
 }
index 33c6ae98c84134d771e0268d5a0f01541cf74388..496e84c44dd295756ea23b6d59d77fa0823f0500 100644 (file)
@@ -273,14 +273,10 @@ class ogrouptabs extends tabs
     }
 
     if ($this->dn == "new"){
-      $this->dn= 'cn='.$baseobject->cn.','.get_groups_ou().$baseobject->base;
+      $this->dn= $new_dn;
     }
 
     tabs::save();
-
-    /* Fix tagging if needed */
-               $baseobject->dn= $new_dn;
-    $baseobject->handle_object_tagging();
   }
 
   function saveCopyDialog()
index d2f3b6beaf826d3b6f86b6043a7c1542441894fe..9fd41e31bb712854e879d0a4b897ffbea55a2d55 100644 (file)
@@ -851,9 +851,6 @@ class printgeneric extends plugin
       $this->netConfigDNS->dn = $this->dn;
       $this->netConfigDNS->save($this->dn);
     }
-
-    /* This is a multi object. Handle tagging here... */
-    $this->handle_object_tagging();
   }
 
   function generateList(){
index 60facee5a7c6ea884f29804a158571db2f7f4958..55cb008cff3983a71eea11e953179ae1d3a78ce5 100644 (file)
@@ -27,9 +27,6 @@ class componenttabs extends tabs
     }
 
     tabs::save(TRUE);
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index cae0a24934acfdad42b01080229207c6c1b2c2cf..7328c86d10f52e4ab28f5962307fd3555cc77de5 100644 (file)
@@ -27,9 +27,6 @@ class phonetabs extends tabs
     }
 
     tabs::save(TRUE);
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index 0fbbccc222005f837dc571db50c45f4bc3d6652d..fd255199ce48fb07e1e4c9ad4359f03f38d4fc50 100644 (file)
@@ -45,9 +45,6 @@ class printtabs extends tabs
     }
 
     tabs::save(FALSE);
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index 037aa850199ef91f1d45d9ecfe5ce965bc37968a..68a0f7b217132d1ec1558b1faf040f5adc408026 100644 (file)
@@ -33,9 +33,6 @@ class servtabs extends tabs
     $config= $_SESSION['config'];
     $config->load_servers();
     $_SESSION['config']= $config;
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index cac248e2ec5f80e7b5a332908440beddba8d9573..0395906ad791a3d7232f43170fd673e03a9ee2e8 100644 (file)
@@ -64,8 +64,6 @@ class termtabs extends tabs
       }
     }
 
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index 3f03437fa837401b896944d1e758ae91e0e2d0fb..b04f89f98cb1b1c018f18729cfc2a15eb9927ee9 100644 (file)
@@ -33,9 +33,6 @@ class wintabs extends tabs
     }
 
     tabs::save(TRUE);
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index 8716247cde1e19950bd508f84a8c1801a5e176de..80c789ee8a48abcb43ff5fa10dad3603fcd3240c 100644 (file)
@@ -59,9 +59,6 @@ class worktabs extends tabs
         $this->by_object['printgeneric']->remove_from_parent();
       }
     }
-
-    /* Fix tagging if needed */
-    $baseobject->handle_object_tagging();
   }
 
 }
index 41093363189083a9f33aed3143af20413af5aceb..79cda297bab86e1adf83cd5811d8e529da3435e7 100644 (file)
@@ -985,9 +985,6 @@ class user extends plugin
       $this->handle_post_events("modify",array("uid" => $this->uid));
     }
 
-    /* Fix tagging if needed */
-    $this->handle_object_tagging();
-
     return (0);
   }