Code

Update acl stuff
[gosa.git] / gosa-core / include / class_CopyPasteHandler.inc
index 244f7c7eec57c054bf97959957bd4775508e42c4..4d6fb1ddb04928d4e27061661fa2e7dfc6607ba6 100644 (file)
@@ -61,9 +61,9 @@ class CopyPasteHandler {
    *  array['tab_class']  - Tab object that should be used to initialize the new object
    *  array['tab_object'] - Tab object name used to initialize correct object Type like USERTABS
    */
-  function add_to_queue($dn,$action,$tab_class,$tab_object,$tab_acl_category)
+  function add_to_queue($dn,$action,$tab_class,$tab_object,$tab_acl_category,&$parent = NULL)
   {
-    if(!class_exists($tab_class)){
+    if(!class_available($tab_class)){
       trigger_error(sprintf("Specified class object '%s' does not exists.",$tab_class));
       return(FALSE);
     }
@@ -86,6 +86,7 @@ class CopyPasteHandler {
       $tmp['tab_class'] = $tab_class;
       $tmp['tab_object']= $tab_object;
       $tmp['tab_acl_category']= $tab_acl_category;
+      $tmp['parent']    = $parent;
       $this->queue[]    = $tmp; 
       $this->require_update = TRUE;
     }
@@ -111,19 +112,19 @@ class CopyPasteHandler {
     /* Create patch if it doesn't exists */
     if(!is_dir(LDAP_DUMP_PATH)){
       @mkdir(LDAP_DUMP_PATH);
+
+      /* 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_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
+        new log("copy","all/all","copy & paste, event queue.",array(), $msg);
+        return(FALSE);
+      }
     }    
-  
-    /* 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_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
-      new log("copy","all/all","copy & paste, event queue.",array(), $msg);
-      return(FALSE);
-    }
     
     /* check if we are able to create a new file the given directory */
     if(!is_writeable(LDAP_DUMP_PATH)){
-      $msg= _("Copy and paste failed!")."<br><br>"._("Error").": <i>".msgPool::cannotWrite(LDAP_DUMP_PATH)."</i>";
+      $msg= _("Copy and paste failed!")."<br><br>"._("Error").": <i>".msgPool::cannotWriteFile(LDAP_DUMP_PATH)."</i>";
       msg_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
       new log("copy","all/all","copy & paste, event queue.",array(), $msg);
       return(FALSE);
@@ -178,14 +179,6 @@ class CopyPasteHandler {
       return(FALSE);
     }  
 
-    /* Update folder permissions */
-    if(!@chmod(LDAP_DUMP_PATH,0700)){
-      $msg= sprintf(_("Copy and paste failed!")."<br><br>"._("Error").": <i>"._("Cannot set permission for '%s'"),LDAP_DUMP_PATH);
-      msg_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
-      new log("copy","all/all","copy & paste, event queue.",array(), $msg);
-      return(FALSE);
-    }
-
     /* Create file handle */
     $fp = @fopen($path."/".$filename,"w+");
     if(!$fp){
@@ -195,6 +188,14 @@ class CopyPasteHandler {
       return(FALSE);
     }    
 
+    /* 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_dialog::display(_("Configuration error"), $msg, ERROR_DIALOG);
+      new log("copy","all/all","copy & paste, event queue.",array(), $msg);
+      return(FALSE);
+    }
+
     $data = serialize($ldap->fetch());
     fwrite($fp,$data,strlen($data));
     fclose($fp);
@@ -223,6 +224,7 @@ class CopyPasteHandler {
     $tab_c = $entry['tab_class'];
     $tab_o = $entry['tab_object'];
     $tab_a = $entry['tab_acl_category'];
+    $parent = $entry['parent'];
 
     if($entry['method'] == "copy"){
       $entry['object']      = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],"new",$tab_a);
@@ -230,6 +232,9 @@ class CopyPasteHandler {
       $entry['object']      = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],$entry['dn'],$tab_a);
     }
 
+    if($parent ){
+      $entry['object']->parent = $parent;
+    }
     $entry['source_data'] = $this->load_attributes_from_hdd($entry['file_name']);
 
     if($entry['method'] == "copy"){
@@ -353,14 +358,17 @@ class CopyPasteHandler {
 
     /* 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->lastdn = $this->current['object']->dn;
         $this->current['object']->save();
+        $this->lastdn = $this->current['object']->dn;
         $this->current = FALSE;
       }else{
         foreach( $msgs as $msg){