Code

Fixed save_object
[gosa.git] / plugins / admin / systems / class_printGeneric.inc
index e18bf2409d5411060e8d21610f33d79b226a341f..7c51299fe51f3e6c49e77dbf020cce1e3f62d089 100644 (file)
@@ -77,7 +77,7 @@ class printgeneric extends plugin
 
     /* set orig dn to new if object is new */
     $ldap= $this->config->get_ldap_link();
-    $ldap->cat($this->dn);
+    $ldap->cat($this->dn, array('dn'));
     if(!$ldap->count()){
       $this->orig_dn = "new";
     }
@@ -91,7 +91,18 @@ class printgeneric extends plugin
       $this->base= dn2base($ui->dn);
       $this->cn= "";
     } else {
-      $this->base= dn2base($this->dn);
+    
+      /* Set base and check if the extracted base exists */
+      if(preg_match("/ou=incoming,/",$this->dn)){
+        $this->base= preg_replace("/ou=incoming,/","",dn2base($this->dn));
+      }else{
+        $this->base= preg_replace("/ou=printers,ou=systems,/","",dn2base($this->dn));
+      }
+
+      if(!isset($this->config->idepartments[$this->base])){
+        print_red(_("Can't extract a valid base out of object dn, setting base to '%s'."),$_SESSION['CurrentMainBase']);
+        $this->base = $_SESSION['CurrentMainBase'];
+      }
     }
 
     /* Extract selected ppd */
@@ -195,9 +206,9 @@ class printgeneric extends plugin
 
       /* Detect if this is a valid printer account;
        */
+      //FIXME: do we need to do this? we've already everything we need in $this->attrs...
       $ldap = $this->config->get_ldap_link();
-      $ldap->cd($this->config->current['BASE']);
-      $ldap->cat($this->dn);
+      $ldap->cat($this->dn, array('objectClass'));
 
       if($ldap->count()){
         $attrs = $ldap->fetch();
@@ -216,12 +227,12 @@ class printgeneric extends plugin
     /* Call parent execute */
     plugin::execute();
 
-    /* If type of printer couldn't be detected (because of missing parent object in construcktion) 
+    /* If type of printer couldn't be detected (because of missing parent object in construction) 
      * hide this tab.
      */
     if($this->BelongsTo == "unknown"){
       $display= $this->show_header(_("Add printer extension"),
-          _("Could not intialize printer tab, parameter parent was missing while construcktion."),TRUE,TRUE);
+          _("Could not intialize printer tab, parameter parent was missing while construction."),TRUE,TRUE);
       return($display);
     }
 
@@ -338,6 +349,8 @@ class printgeneric extends plugin
       $smarty->assign("$attr", $this->$attr);
     }
 
+    $smarty->assign("baseACL", chkacl($this->acl,"base"));
+
     if(isset($_POST['AddUser'])){
       $this->dialog = new selectUserToPrinterDialog($this->config, get_userinfo(),"AddUser");
     }
@@ -464,7 +477,7 @@ class printgeneric extends plugin
       $ppdManager= new ppdManager($path);
       if(!empty($this->gotoPrinterPPD)){
         if((!file_exists($path.$this->gotoPrinterPPD))){
-          $smarty->assign("driverInfo", "<b>".sprintf(_("Your currently selected PPD file '%s' doesn't exist."),$this->gotoPrinterPPD))."</b>";
+          $smarty->assign("driverInfo", "<b>".sprintf(_("Your currently selected PPD file '%s' doesn't exist."),$path.$this->gotoPrinterPPD))."</b>";
         }else{
           $smarty->assign("driverInfo", $ppdManager->loadDescription($path.$this->gotoPrinterPPD));
         }
@@ -522,23 +535,23 @@ class printgeneric extends plugin
 
       /* Check if this dn points to a printer, to avoid deleting something else */
       $ldap= $this->config->get_ldap_link();
-      $ldap->cat($this->dn);
+      $ldap->cat($this->dn, array('dn',"objectClass"));
       if(!$ldap->count()){
-        print_red("Trying to remove printer obejct which isn't a printer. Aborted to avoid data loss.");
+        print_red("Trying to remove printer object which isn't a printer. Aborted to avoid data loss.");
         return;
       }
 
       /* Check if obejct is a printer */
       $CheckPrinter = $ldap->fetch();
       if(!in_array("gotoPrinter",$CheckPrinter['objectClass'])){
-        print_red("Trying to remove printer obejct which isn't a printer. Aborted to avoid data loss.");
+        print_red("Trying to remove printer object which isn't a printer. Aborted to avoid data loss.");
         return;
       }
 
       /* Remove account & dns extension */ 
       $this->netConfigDNS->remove_from_parent();
       $ldap->rmdir($this->dn);
-      show_ldap_error($ldap->get_error());
+      show_ldap_error($ldap->get_error(), _("Removing printer failed"));
       $this->handle_post_events("remove");
 
       /* Delete references to object groups */
@@ -588,7 +601,12 @@ class printgeneric extends plugin
     if(($this->BelongsTo == "Printer") && (empty($this->cn))){
       $message[]= "The required field 'Printer name' is not set.";
     }
-
+    
+    /* must: labeledURI */
+    if(empty($this->labeledURI)){
+      $message[]= "The required field 'Printer URL' is not set.";
+    }
+    
     /* Check if there is already an entry with this cn*/
     if (($this->orig_dn != $dn)&&($this->BelongsTo == "Printer")){
       $ldap= $this->config->get_ldap_link();
@@ -715,7 +733,7 @@ class printgeneric extends plugin
 
       $this->handle_post_events("modify");
     }
-    show_ldap_error($ldap->get_error());
+    show_ldap_error($ldap->get_error(), _("Saving printer failed"));
 
     $this->netConfigDNS->cn = $this->cn;
     $this->netConfigDNS->dn = $this->dn;