Code

We're html5, right?
[gosa.git] / gosa-core / include / class_CopyPasteHandler.inc
index 6436330550dec8d17e1b0caac0a4da8576389d06..587cdcc901c95143a375540d660294cf147e2e7b 100644 (file)
@@ -64,17 +64,17 @@ class CopyPasteHandler {
   function add_to_queue($dn,$action,$tab_class,$tab_object,$tab_acl_category,&$parent = NULL)
   {
     if(!class_available($tab_class)){
-      trigger_error(sprintf("Specified class object '%s' does not exists.",$tab_class));
+      trigger_error(sprintf("Specified class object %s does not exists.", bold($tab_class)));
       return(FALSE);
     }
 
     if(!isset($this->config->data['TABS'][$tab_object])){
-      trigger_error(sprintf("Specified tab object '%s' does not exists.",$tab_object));
+      trigger_error(sprintf("Specified tab object %s does not exists.", bold($tab_object)));
       return(FALSE);
     }
 
     if(!in_array($action,array("cut","copy"))){
-      trigger_error(sprintf("Specified action '%s' does not exists for copy & paste.",$action));
+      trigger_error(sprintf("Specified action %s does not exists for copy & paste.", bold($action)));
       return(FALSE);
     } 
 
@@ -115,7 +115,7 @@ class CopyPasteHandler {
 
       /* Update folder permissions */
       if(!@chmod(LDAP_DUMP_PATH,0700)){
-        $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": <i>"._("Cannot set permission for '%s'")."</i>" ,LDAP_DUMP_PATH);
+        $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": "._("Cannot set permission for %s"), bold(LDAP_DUMP_PATH));
         msg_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
         new log("copy","all/all","copy & paste, event queue.",array(), $msg);
         return(FALSE);
@@ -156,7 +156,7 @@ class CopyPasteHandler {
 
     /* Check if given dn is valid and ldap search was succesfull */ 
     if(!$res){
-      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": <i>"._("'%s' is no vaild LDAP object"), LDAP::fix($dn));
+      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": "._("'%s' is no vaild LDAP object"), bold(LDAP::fix($dn)));
       msg_dialog::display(_("Internal error"), $msg, ERROR_DIALOG);
       new log("copy","all/all",$dn,array(), $msg);
       return(FALSE);
@@ -173,7 +173,7 @@ class CopyPasteHandler {
 
     /* check if we are able to create a new file the given directory */
     if(!is_writeable($path)){
-      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": <i>"._("No write permission in '%s'"),LDAP_DUMP_PATH);
+      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": "._("No write permission in '%s'"), bold(LDAP_DUMP_PATH));
       msg_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
       new log("copy","all/all",$dn,array(), $msg);
       return(FALSE);
@@ -190,7 +190,7 @@ class CopyPasteHandler {
 
     /* Update folder permissions */
     if(!@chmod($path."/".$filename,0700)){
-      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": <i>"._("Cannot set permission for '%s'"),LDAP_DUMP_PATH);
+      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": "._("Cannot set permission for '%s'"), bold(LDAP_DUMP_PATH));
       msg_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
       new log("copy","all/all","copy & paste, event queue.",array(), $msg);
       return(FALSE);
@@ -352,19 +352,24 @@ class CopyPasteHandler {
         $this->lastdn = $this->current['object']->dn;
         $this->current= $this->_update_vars($this->current);
         $this->current['object']->save();
+        $this->handleReferences();
         $this->current = FALSE;
       } 
     }
 
     /* Save edited entry and force loading new one 
      */
-    if(isset($_POST['PerformCopyPaste']) && $this->current){
+    if(isset($this->current['object']) && method_exists($this->current['object'],"saveCopyDialog")) {
       $this->current['object']->saveCopyDialog();
+    }
+
+    if(isset($_POST['PerformCopyPaste']) && $this->current){
       $msgs = $this->check();
 
       /* Load next queue entry */
       if(!count($msgs)){
         $this->current['object']->save();
+        $this->handleReferences();
         $this->lastdn = $this->current['object']->dn;
         $this->current = FALSE;
       }else{
@@ -412,7 +417,7 @@ class CopyPasteHandler {
         $smarty->assign("AttributesToFix",$this->generateAttributesToFix());
         $smarty->assign("SubDialog",$this->current['object']->SubDialog);
         $smarty->assign("objectDN",$this->current['source_data']['dn']);
-        $smarty->assign("message", sprintf(_("This object will be pasted: %s"), "<br><br>".$this->current['source_data']['dn']));
+        $smarty->assign("message", sprintf(_("This object will be pasted: %s"), "<br><br>".bold($this->current['source_data']['dn'])));
         return($smarty->fetch(get_template_path("copyPasteDialog.tpl",FALSE)));
       }
     }
@@ -501,6 +506,60 @@ class CopyPasteHandler {
   }
 
 
+  function handleReferences()
+  {
+    $dst_dn = $this->current['object']->dn;
+    $src_dn = $this->current['dn'];
+
+    // Only copy references if required 
+    if($this->current['method'] != 'copy') return;
+
+    // Migrate objectgroups
+    $ogroups = get_sub_list("(&(objectClass=gosaGroupOfNames)(member=".LDAP::prepare4filter(LDAP::fix($src_dn))."))",
+            "ogroups", array(get_ou("group", "ogroupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK);
+
+    // Walk through all objectGroups
+    foreach($ogroups as $ogroup){
+        $o_ogroup= new ogroup($this->config,$ogroup['dn']);
+        $o_ogroup->member[$dst_dn]= $dst_dn;
+        $o_ogroup->save();
+    }
+
+    // Update roles 
+    $roles = get_sub_list("(&(objectClass=organizationalRole)(roleOccupant=".LDAP::prepare4filter(LDAP::fix($src_dn))."))",
+            "roles", array(get_ou("roleGeneric", "roleRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK);
+
+    // Walk through all roles
+    foreach($roles as $role){
+        $role = new roleGeneric($this->config,$role['dn']);
+        $role->roleOccupant[] = $dst_dn;
+        $role->save();
+    }
+
+    // Update groups
+    if(isset($this->current['object']->uid) && !empty($this->current['object']->uid)){
+
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd($this->config->current['BASE']);
+        $ldap->cat($src_dn);
+        $attrs = $ldap->fetch();
+        if(isset($attrs['uid'][0])){
+            $suid = $attrs['uid'][0];
+
+            $uid = $this->current['object']->uid;
+            $groups = get_sub_list("(&(objectClass=posixGroup)(memberUid={$suid}))",
+                    "groups",array(get_ou("core", "groupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK);
+
+            // Walk through all POSIX groups
+            foreach($groups as $group){
+                $o_group= new group($this->config,$group['dn']);
+                $o_group->addUser($uid);
+                $o_group->save();
+            }
+        }
+    }
+  }
+
   /* returns the paste icon for headpages */ 
   function generatePasteIcon()
   {