Code

Updated ppd dialogs
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 26 Jul 2010 13:04:06 +0000 (13:04 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 26 Jul 2010 13:04:06 +0000 (13:04 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19112 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-plugins/goto/admin/systems/ppd/class_printerPPDDialog.inc

index c82c5303059b210bf05756677161b66d21223ccd..a53538e887260b8461bb8f85f4fd91f0b8d359eb 100644 (file)
 
 class printerPPDDialog extends plugin
 {
-  /* attribute list for save action */
-  var $ignore_account       = TRUE;
-  var $attributes           = array("cn");
-  var $objectclasses        = array("whatever");
-
-  /* PPD Handling */
-  var $selectedPPD          = false;        // e.g. /vendor/device.ppd 
-  var $ppdManager           = false;        // new ppdManager;
-  var $ppdConfig            = false;        // $this->ppdManager->loadProperties($this->selectedPPD['link']);
-  var $ppdList              = array();      // Contains all Printer models
-  var $ppdListHeader        = array();      // Contains all printer vendors
-
-  /* Paths */
-  var $pathToPPD            = "";           // Base path, defined in gosa.conf e.g. "/var/spool/ppd/"
-  var $pathToModified       = "modified/";  // used to store the modified ppds  
-      
-  /* Object Info */
-  var $cn                   = "" ;          // Used to tag the ppds modified by the printer object, 
-  var $ui;
-
-  /* If there is already a ppd file for the same type of printer, 
-   *  remember the path to ppd file and display a dialog which allows 
-   *  to overwrite the current ppd file. 
-   */
-  var $add_ppd_later            = "";
-  var $add_later_msg_dialog     = NULL;
-
-  function printerPPDDialog (&$config, $dn= NULL, $ppdfile=NULL )
-  {
-    plugin::plugin ($config, $dn);
-    $this->depselect = $this->config->current['BASE'];
-
-    $this->ui = get_userinfo();
-
-    /* Get PPD path and remove double //, and add trailing /  */
-    $config = session::get('config');
-    if($config->get_cfg_value("core","ppdPath") != ""){
-      $this->pathToPPD = $config->get_cfg_value("core","ppdPath");
-      $this->pathToPPD= preg_replace("/\/\//", "/", $this->pathToPPD);
-      if(!preg_match("/\/$/",$this->pathToPPD)){
-        $this->pathToPPD = $this->pathToPPD."/";
-      }
-    }else{
-      $this->pathToPPD = "";
-    }
-
-    /* Check if ppdPath is set in gosa.conf. 
+    /* attribute list for save action */
+    var $ignore_account       = TRUE;
+    var $attributes           = array("cn");
+    var $objectclasses        = array("whatever");
+
+    /* PPD Handling */
+    var $selectedPPD          = false;        // e.g. /vendor/device.ppd 
+    var $ppdManager           = false;        // new ppdManager;
+    var $ppdConfig            = false;        // $this->ppdManager->loadProperties($this->selectedPPD['link']);
+    var $ppdList              = array();      // Contains all Printer models
+    var $ppdListHeader        = array();      // Contains all printer vendors
+
+    /* Paths */
+    var $pathToPPD            = "";           // Base path, defined in gosa.conf e.g. "/var/spool/ppd/"
+    var $pathToModified       = "modified/";  // used to store the modified ppds  
+
+    /* Object Info */
+    var $cn                   = "" ;          // Used to tag the ppds modified by the printer object, 
+    var $ui;
+
+    /* If there is already a ppd file for the same type of printer, 
+     *  remember the path to ppd file and display a dialog which allows 
+     *  to overwrite the current ppd file. 
      */
-    if(empty($this->pathToPPD)){
-      msg_dialog::display(_("Configuration error"), msgPool::invalidConfigurationAttribute("ppdPath"), ERROR_DIALOG);
-    }
-
-    /* It seams that we have an existing PPD path, so go on */
-    if(!((!is_dir($this->pathToPPD))||(empty($this->pathToPPD)))){ 
-
-      /* Load all available PPD files and sort them into an array */
-      $this->ppdManager= new ppdManager($this->pathToPPD);
-      $this->getPrinterReload ();
-
-      /* The user has already a valid PPD assigned
-       * Get some informations about this PPD
-       * and set it as selected. 
-       * The ppdpath ['link'] should be relative from .../ppd/modified/ 
-       *     e.g. "/Compaq/Compaq-J1200.ppd" */
-      if(($ppdfile!== NULL)&&(strlen($ppdfile)>0)){
-        $ppdfile = preg_replace("#".$this->pathToModified."#","",$ppdfile);
-        if(!file_exists($this->pathToPPD.$this->pathToModified.$ppdfile)){
-          msg_dialog::display(_("PPD error"), sprintf(_("Cannot open PPD '%s'!"), $ppdfile), ERROR_DIALOG);
+    var $add_ppd_later            = "";
+    var $add_later_msg_dialog     = NULL;
+
+    function printerPPDDialog (&$config, $dn= NULL, $ppdfile=NULL )
+    {
+        plugin::plugin ($config, $dn);
+        $this->depselect = $this->config->current['BASE'];
+
+        $this->ui = get_userinfo();
+
+        /* Get PPD path and remove double //, and add trailing /  */
+        $config = session::get('config');
+        if($config->get_cfg_value("core","ppdPath") != ""){
+            $this->pathToPPD = $config->get_cfg_value("core","ppdPath");
+            $this->pathToPPD= preg_replace("/\/\//", "/", $this->pathToPPD);
+            if(!preg_match("/\/$/",$this->pathToPPD)){
+                $this->pathToPPD = $this->pathToPPD."/";
+            }
         }else{
-          $ppdDesc = $this->ppdManager->loadDescription($this->pathToPPD.$this->pathToModified.$ppdfile);
-          if($ppdDesc){            
-            $selectedPPD = array(); 
-            $selectedPPD['name']   = $ppdDesc['name'];
-            $selectedPPD['link']   = $ppdfile;
-            $selectedPPD['ppd']    = $ppdDesc;
-          }    
-          $this->selectedPPD = $selectedPPD;
+            $this->pathToPPD = "";
         }
-      }
-    }
-  }
 
+        /* Check if ppdPath is set in gosa.conf. 
+         */
+        if(empty($this->pathToPPD)){
+            msg_dialog::display(_("Configuration error"), msgPool::invalidConfigurationAttribute("ppdPath"), ERROR_DIALOG);
+        }
 
-  function execute()
-  {
-    /* Call parent execute */
-    plugin::execute();
+        /* It seams that we have an existing PPD path, so go on */
+        if(!((!is_dir($this->pathToPPD))||(empty($this->pathToPPD)))){ 
+
+            /* Load all available PPD files and sort them into an array */
+            $this->ppdManager= new ppdManager($this->pathToPPD);
+            $this->getPrinterReload ();
+
+            /* The user has already a valid PPD assigned
+             * Get some informations about this PPD
+             * and set it as selected. 
+             * The ppdpath ['link'] should be relative from .../ppd/modified/ 
+             *     e.g. "/Compaq/Compaq-J1200.ppd" */
+            if(($ppdfile!== NULL)&&(strlen($ppdfile)>0)){
+                $ppdfile = preg_replace("#".$this->pathToModified."#","",$ppdfile);
+                if(!file_exists($this->pathToPPD.$this->pathToModified.$ppdfile)){
+                    msg_dialog::display(_("PPD error"), sprintf(_("Cannot open PPD '%s'!"), $ppdfile), ERROR_DIALOG);
+                }else{
+                    $ppdDesc = $this->ppdManager->loadDescription($this->pathToPPD.$this->pathToModified.$ppdfile);
+                    if($ppdDesc){            
+                        $selectedPPD = array(); 
+                        $selectedPPD['name']   = $ppdDesc['name'];
+                        $selectedPPD['link']   = $ppdfile;
+                        $selectedPPD['ppd']    = $ppdDesc;
+                    }    
+                    $this->selectedPPD = $selectedPPD;
+                }
+            }
+        }
+    }
 
-    /* Fill templating stuff */
-    $display= "";
-    $smarty= get_smarty();
-    $smarty->assign("ppdString", _("Can't get ppd informations."));
-    $smarty->assign("showOptions", "");
-    $smarty->assign("path_valid", TRUE);
-    $smarty->assign("acl",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"));
 
-    $acl = $this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD");
+    function execute()
+    {
+        /* Call parent execute */
+        plugin::execute();
 
-    if(empty($this->pathToPPD)){
+        /* Fill templating stuff */
+        $display= "";
+        $smarty= get_smarty();
+        $smarty->assign("ppdString", _("Can't get ppd informations."));
+        $smarty->assign("showOptions", "");
+        $smarty->assign("path_valid", TRUE);
+        $smarty->assign("acl",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"));
 
-        /* Print out template */
-        $smarty->assign("path_valid", FALSE);
-        $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
-        return($display);
-    }
+        $acl = $this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD");
 
-    /* Check these paths */
-    $paths = array($this->pathToPPD, $this->pathToPPD.$this->pathToModified);
+        if(empty($this->pathToPPD)){
 
-    /* If one of our required paths is not available, stop here and display some info */
-    foreach($paths as $path){
+            /* Print out template */
+            $smarty->assign("path_valid", FALSE);
+            $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
+            return($display);
+        }
 
-      /* Check if path is write/readable*/
-      $is_r = @is_readable($path);  
-      if(((!is_dir($path))||(empty($path)) || (!$is_r)) && (!@mkdir($path))){
-        msg_dialog::display(_("Configuration error"), 
-            sprintf(_("Cannot open PPD path '%s' for reading and writing!"), $path), ERROR_DIALOG);
+        /* Check these paths */
+        $paths = array($this->pathToPPD, $this->pathToPPD.$this->pathToModified);
 
-        /* Print out template */
-        $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
-        return($display);
-      }
-    }
+        /* If one of our required paths is not available, stop here and display some info */
+        foreach($paths as $path){
 
-    // PPD selection / upload / dialog handling 
+            /* Check if path is write/readable*/
+            $is_r = @is_readable($path);  
+            if(((!is_dir($path))||(empty($path)) || (!$is_r)) && (!@mkdir($path))){
+                msg_dialog::display(_("Configuration error"), 
+                        sprintf(_("Cannot open PPD path '%s' for reading and writing!"), $path), ERROR_DIALOG);
 
-    /* Is there a new PPD file uploaded ? */
-    if(preg_match("/w/",$acl)){
-      if((isset($_FILES['NewPPDFile']))&&(isset($_POST['SubmitNewPPDFile']))){
-        $file = ($_FILES['NewPPDFile']);
-        if($file['size'] != 0 ){
-          if($name = $this->AddPPD($file['tmp_name'])){
-            $this->SelectPPD($name); 
-          }
-        }else{
-          msg_dialog::display(_("PPD error"), msgPool::incorrectUpload(_("file is empty")), ERROR_DIALOG);
+                /* Print out template */
+                $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
+                return($display);
+            }
         }
-      }
-    }
 
-    /* Overwrite existing PPD file and select it as currently used for this object */
-    if(is_object($this->add_later_msg_dialog) && ($this->add_later_msg_dialog->is_confirmed()) && $this->add_ppd_later != ""){
-      if($name = $this->AddPPD($this->add_ppd_later,TRUE)){
-        $this->SelectPPD($name);
-      }
-      $this->add_ppd_later = "";
-      $this->add_later_msg_dialog = NULL;
-    } 
-
-    /* Open a dialog that allow us to select different PPDs */
-    if(preg_match("/w/",$acl)){
-      if(isset($_POST['SelectPPD'])){
-        $this->dialog= new printerPPDSelectionDialog($this->config,$this->dn,$this->ppdList,$this->ppdListHeader,$this->selectedPPD);
-      }
-    }
+        // PPD selection / upload / dialog handling 
+
+        /* Is there a new PPD file uploaded ? */
+        if(preg_match("/w/",$acl)){
+            if((isset($_FILES['NewPPDFile']))&&(isset($_POST['SubmitNewPPDFile']))){
+                $file = ($_FILES['NewPPDFile']);
+                if($file['size'] != 0 ){
+                    if($name = $this->AddPPD($file['tmp_name'])){
+                        $this->SelectPPD($name); 
+                    }
+                }else{
+                    msg_dialog::display(_("PPD error"), msgPool::incorrectUpload(_("file is empty")), ERROR_DIALOG);
+                }
+            }
+        }
 
-    /* The selection dialog fpr PPDs is canceled */
-    if(isset($_POST['ClosePPDSelection'])){
-      unset($this->dialog);
-      $this->dialog=FALSE;
-    }
+        /* Overwrite existing PPD file and select it as currently used for this object */
+        if(is_object($this->add_later_msg_dialog) && ($this->add_later_msg_dialog->is_confirmed()) && $this->add_ppd_later != ""){
+            if($name = $this->AddPPD($this->add_ppd_later,TRUE)){
+                $this->SelectPPD($name);
+            }
+            $this->add_ppd_later = "";
+            $this->add_later_msg_dialog = NULL;
+        } 
+
+        /* Open a dialog that allow us to select different PPDs */
+        if(preg_match("/w/",$acl)){
+            if(isset($_POST['SelectPPD'])){
+                $this->dialog= new printerPPDSelectionDialog($this->config,$this->dn,$this->ppdList,$this->ppdListHeader,$this->selectedPPD);
+            }
+        }
 
-    /* Div Selection */ 
-    if($this->dialog instanceOf printerPPDSelectionDialog){
-        $this->dialog->save_object();
-        if($this->dialog->isSelected()){
-            $this->SelectPPD($this->dialog->save());
+        /* The selection dialog fpr PPDs is canceled */
+        if(isset($_POST['ClosePPDSelection'])){
             unset($this->dialog);
             $this->dialog=FALSE;
         }
-    }
 
-    /* if a dialog is open, print the dialog instead of this class */
-    if(is_object($this->dialog)){
-        $display = $this->dialog->execute();
-        return($display);
-    }
+        /* Div Selection */ 
+        if($this->dialog instanceOf printerPPDSelectionDialog){
+            $this->dialog->save_object();
+            if($this->dialog->isSelected()){
+                $this->SelectPPD($this->dialog->save());
+                unset($this->dialog);
+                $this->dialog=FALSE;
+            }
+        }
 
-    // ENDE  PPD selection / upload / dialog handling 
+        /* if a dialog is open, print the dialog instead of this class */
+        if(is_object($this->dialog)){
+            $display = $this->dialog->execute();
+            return($display);
+        }
 
-    /* Give smarty the information it needs */
-    $smarty->assign("ppdString" ,$this->getPPDInformation());
-    $tmp= $this->generateProperties();
-    if ($tmp == ""){
-      $smarty->assign("showOptions", 0);
-    } else {
-      $smarty->assign("showOptions", 1);
-      $smarty->assign("properties",$this->generateProperties());
-    }
+        // ENDE  PPD selection / upload / dialog handling 
 
-    /* Print out template */
-    $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
-    return($display);
-  }
-
-
-  /* Select PPD */
-  function SelectPPD($name)
-  {
-    /* Replace base path we don't need it here 
-       The path we need looks like this : "/Vendor/ModellName.ppd"; 
-       thats all */
-    $name = preg_replace("#".$this->pathToPPD."#","",$name);
-
-    /* Intialise some base vars */
-    $AbsoluteSourceName       = $this->pathToPPD.$name;   
-    $AbsoluteDestinationPath  = $this->pathToPPD.$this->pathToModified;
-    $Vendor                   = ""; // Vendor 
-    $Name                     = ""; // Name 
-    $Modell                   = ""; // Modell
-    $PrinterName              = ""; // The new name of the printer 
-    $PPDName                  = "";
-    /* Force reload of config dialog */ 
-    $this->ppdConfig            = false;
-    $this->selectedPPD['link']  = false;
-
-    /* Get PPD informations and set vendor / modell / name */ 
-    if((!file_exists($AbsoluteSourceName)) || (!is_readable($AbsoluteSourceName))){
-      msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($AbsoluteSourceName), ERROR_DIALOG);
-      return;
-    }
-    $ppdDesc  = $this->ppdManager->loadDescription($AbsoluteSourceName);
-    if($ppdDesc){
-      $Name   = $ppdDesc['name'];
-      $Vendor = $ppdDesc['manufacturer'];
-      $Model  = $ppdDesc['model'];
-    }    
-
-    $PrinterName  = $this->cn."-".preg_replace("/[^a-z0-9-_\.]/i","_",$Name);
-    $PPDName      = $Vendor."/".$PrinterName.".ppd";
-    
-    /* Create the vendors path, if it doesn't exists already */
-    if(!is_dir($AbsoluteDestinationPath.$Vendor)){
-      if(!(@mkdir($AbsoluteDestinationPath.$Vendor))){
-        msg_dialog::display(_("PPD error"), msgPool::cannotCreateFolder($AbsoluteDestinationPath.$Vendor), ERROR_DIALOG);
-        return(false);
-      }
-    }
+        /* Give smarty the information it needs */
+        $smarty->assign("ppdString" ,$this->getPPDInformation());
+        $tmp= $this->generateProperties();
+        if ($tmp == ""){
+            $smarty->assign("showOptions", 0);
+        } else {
+            $smarty->assign("showOptions", 1);
+            $smarty->assign("properties",$this->generateProperties());
+        }
 
-    /* Create destination file handle */
-    $fp = @fopen($AbsoluteDestinationPath.$PPDName,"w+");
-    if(!$fp){
-      msg_dialog::display(_("PPD error"), msgPool::cannotWriteFile($AbsoluteDestinationPath.$PPDName), ERROR_DIALOG);
-      return(false);
+        /* Print out template */
+        $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__)));
+        return($display);
     }
 
-    $str = file_get_contents($AbsoluteSourceName);
-    fputs($fp,$str);
-    @fclose($fp);
 
-    //$this->ppdManager->updateAttribute($filename,"NO_SECTION","ModelName",$printerName);
+    /* Select PPD */
+    function SelectPPD($name)
+    {
+        /* Replace base path we don't need it here 
+           The path we need looks like this : "/Vendor/ModellName.ppd"; 
+           thats all */
+        $name = preg_replace("#".$this->pathToPPD."#","",$name);
+
+        /* Intialise some base vars */
+        $AbsoluteSourceName       = $this->pathToPPD.$name;   
+        $AbsoluteDestinationPath  = $this->pathToPPD.$this->pathToModified;
+        $Vendor                   = ""; // Vendor 
+        $Name                     = ""; // Name 
+        $Modell                   = ""; // Modell
+        $PrinterName              = ""; // The new name of the printer 
+        $PPDName                  = "";
+
+        /* Force reload of config dialog */ 
+        $this->ppdConfig            = false;
+        $this->selectedPPD['link']  = false;
+
+        /* Get PPD informations and set vendor / modell / name */ 
+        if((!file_exists($AbsoluteSourceName)) || (!is_readable($AbsoluteSourceName))){
+            msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($AbsoluteSourceName), ERROR_DIALOG);
+            return;
+        }
+        $ppdDesc  = $this->ppdManager->loadDescription($AbsoluteSourceName);
+        if($ppdDesc){
+            $Name   = $ppdDesc['name'];
+            $Vendor = $ppdDesc['manufacturer'];
+            $Model  = $ppdDesc['model'];
+        }    
+
+        $PrinterName  = $this->cn."-".preg_replace("/[^a-z0-9-_\.]/i","_",$Name);
+        $PPDName      = $Vendor."/".$PrinterName.".ppd";
+
+        /* Create the vendors path, if it doesn't exists already */
+        if(!is_dir($AbsoluteDestinationPath.$Vendor)){
+            if(!(@mkdir($AbsoluteDestinationPath.$Vendor))){
+                msg_dialog::display(_("PPD error"), msgPool::cannotCreateFolder($AbsoluteDestinationPath.$Vendor), ERROR_DIALOG);
+                return(false);
+            }
+        }
 
-    $tmp3['link']   =$PPDName;
-    $this->selectedPPD = $tmp3;
-    $this->getPrinterReload(); 
-    return($PPDName);
-  }
+        /* Create destination file handle */
+        $fp = @fopen($AbsoluteDestinationPath.$PPDName,"w+");
+        if(!$fp){
+            msg_dialog::display(_("PPD error"), msgPool::cannotWriteFile($AbsoluteDestinationPath.$PPDName), ERROR_DIALOG);
+            return(false);
+        }
 
+        $str = file_get_contents($AbsoluteSourceName);
+        fputs($fp,$str);
+        @fclose($fp);
 
-  /* This function adds a new ppd file to the list of available ppds. 
-     All required paths and files will be created 
-      $_PathOnHdd e.g. = /tmp/PHP_tmpfile213452 */
-  function AddPPD($_PathOnHdd,$overwrite = FALSE)
-  {
-    /* Check if file exists && is readable */
-    if((!is_file($_PathOnHdd)) || (!is_readable($_PathOnHdd))){
-      msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($_PathOnHdd), ERROR_DIALOG);
-      return(false);
-    }
-    
-    /* Reload list to detect changes e.g. a file has been deleted */
-    $this->getPrinterReload();
-
-    /* Get Description from ppd, & parse out some informations */   
-    $ppdDesc  = @$this->ppdManager->loadDescription($_PathOnHdd);
-    if($ppdDesc){
-      $name   = preg_replace("/\//","-",$ppdDesc['name']);
-      $vendor = $ppdDesc['manufacturer'];
-      $model  = $ppdDesc['model'];
-    }    
-
-    /* Check if parse was successfull */
-    if(empty($name) || empty($vendor)){
-      msg_dialog::display(_("PPD error"), sprintf(_("Cannot parse PPD '%s'!"), $_PathOnHdd), ERROR_DIALOG);
-      return(false);
-    }
+        //$this->ppdManager->updateAttribute($filename,"NO_SECTION","ModelName",$printerName);
 
-    /* Prepare list of ppds */
-    if(!isset($this->ppdList[$vendor])){
-      $this->ppdList[$vendor] = array();
+        $tmp3['link']   =$PPDName;
+        $this->selectedPPD = $tmp3;
+        $this->getPrinterReload(); 
+        return($PPDName);
     }
 
-    /* Create ppd file and fill in the source contents */
-    $ppdname      = $vendor."/".$name.".ppd";
-    $filename     = $this->pathToPPD.preg_replace("/[^a-z0-9-_\.\/]/i","_",$ppdname);
-    $filename     = $this->pathToPPD.$ppdname;
-    $contents     = file_get_contents($_PathOnHdd);
 
+    /* This function adds a new ppd file to the list of available ppds. 
+       All required paths and files will be created 
+       $_PathOnHdd e.g. = /tmp/PHP_tmpfile213452 */
+    function AddPPD($_PathOnHdd,$overwrite = FALSE)
+    {
+        /* Check if file exists && is readable */
+        if((!is_file($_PathOnHdd)) || (!is_readable($_PathOnHdd))){
+            msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($_PathOnHdd), ERROR_DIALOG);
+            return(false);
+        }
 
-    /* Check if this ppd already exists */
-    $found = false;
+        /* Reload list to detect changes e.g. a file has been deleted */
+        $this->getPrinterReload();
+
+        /* Get Description from ppd, & parse out some informations */   
+        $ppdDesc  = @$this->ppdManager->loadDescription($_PathOnHdd);
+        if($ppdDesc){
+            $name   = preg_replace("/\//","-",$ppdDesc['name']);
+            $vendor = $ppdDesc['manufacturer'];
+            $model  = $ppdDesc['model'];
+        }    
+
+        /* Check if parse was successfull */
+        if(empty($name) || empty($vendor)){
+            msg_dialog::display(_("PPD error"), sprintf(_("Cannot parse PPD '%s'!"), $_PathOnHdd), ERROR_DIALOG);
+            return(false);
+        }
 
-    foreach($this->ppdList[$vendor] as $key => $val){
-      if(preg_match("/".preg_quote($model,'/').".*/i",$key)){
-        $found = true;
-        if(!$overwrite){
-          if(!copy($_PathOnHdd,$_PathOnHdd."_back")){
-            msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($_PathOnHdd), ERROR_DIALOG);
-          }else{
-            $this->add_ppd_later = $_PathOnHdd."_back";
-            $this->add_later_msg_dialog = new msg_dialog(_("Overwrite existing PPD"),
-                _("There is already a ppd file for this kind of printer. Do you want to overwrite it?"),CONFIRM_DIALOG);
-          }
-          return;
+        /* Prepare list of ppds */
+        if(!isset($this->ppdList[$vendor])){
+            $this->ppdList[$vendor] = array();
         }
-      }
-    }
 
-    /* Create the vendors path, if it doesn't exists already */
-    if(!is_dir($this->pathToPPD.$vendor)){
-      if(!(@mkdir($this->pathToPPD.$vendor))){
-        msg_dialog::display(_("PPD error"), msgPool::cannotCreateFolder($this->pathToPPD.$vendor), ERROR_DIALOG);
-        return(false);
-      }
-    }
-  
-    /* Open file handle */
-    $fp           = fopen($filename,"w+");
-
-    /* Check file handle & contents */
-    if(!$fp){
-      msg_dialog::display(_("PPD error"), msgPool::cannotWriteFile($filename), ERROR_DIALOG);
-      return;
-    }
-    if(empty($contents)){
-      msg_dialog::display(_("PPD error"), msgPool::incorrectUpload(_("file is empty")), ERROR_DIALOG);
-      return;
-    }
-    
-    /* Fille file with data */
-    fputs($fp,$contents);
-    @fclose($fp);
-
-    /* Our job is done here */
-    return($ppdname);
-  }
-
-
-  /* This function reloads the list of available printers/vendors 
-     $this->ppdListHeader 
-     Compaq        => 1
-     $this->ppdList
-     Compaq => Compaq IJ1200 => name => Compaq IJ1200 
-     link => /var/spool/ppd/Compaq/Compaq-J1200.ppd
-     ppd  => Compaq - Co    
-   */
-  function getPrinterReload()
-  {
-    if(is_readable($this->pathToPPD)){
-      $tmp = @$this->ppdManager->getPrinterList(true);
-
-      $this->ppdListHeader = $this->ppdList = array();
-
-      /* Sort all available files, and create header (Vendor index) */
-      foreach($tmp as $file=>$ppd){
-               
-        if(preg_match("#".preg_quote($this->pathToModified,'#')."#",$file)) continue;
-
-        if(!isset($ppd['manufacturer'])) continue;
-
-        if(!isset($this->ppdListHeader[$ppd['manufacturer']])){
-          $this->ppdListHeader[$ppd['manufacturer']]=0;
+        /* Create ppd file and fill in the source contents */
+        $ppdname      = $vendor."/".$name.".ppd";
+        $filename     = $this->pathToPPD.preg_replace("/[^a-z0-9-_\.\/]/i","_",$ppdname);
+        $filename     = $this->pathToPPD.$ppdname;
+        $contents     = file_get_contents($_PathOnHdd);
+
+
+        /* Check if this ppd already exists */
+        $found = false;
+
+        foreach($this->ppdList[$vendor] as $key => $val){
+            if(preg_match("/".preg_quote($model,'/').".*/i",$key)){
+                $found = true;
+                if(!$overwrite){
+                    if(!copy($_PathOnHdd,$_PathOnHdd."_back")){
+                        msg_dialog::display(_("PPD error"), msgPool::cannotReadFile($_PathOnHdd), ERROR_DIALOG);
+                    }else{
+                        $this->add_ppd_later = $_PathOnHdd."_back";
+                        $this->add_later_msg_dialog = new msg_dialog(_("Overwrite existing PPD"),
+                                _("There is already a ppd file for this kind of printer. Do you want to overwrite it?"),CONFIRM_DIALOG);
+                    }
+                    return;
+                }
+            }
         }
-       
-        $tmp3['name']   =$ppd['name'];
-        $tmp3['link']   =$file;
-        $tmp3['ppd']    =$ppd;
-        $this->ppdListHeader[$ppd['manufacturer']]++;
-        $this->ppdList[$ppd['manufacturer']][$ppd['name']]=$tmp3;
-      }
-    }
-  }
 
+        /* Create the vendors path, if it doesn't exists already */
+        if(!is_dir($this->pathToPPD.$vendor)){
+            if(!(@mkdir($this->pathToPPD.$vendor))){
+                msg_dialog::display(_("PPD error"), msgPool::cannotCreateFolder($this->pathToPPD.$vendor), ERROR_DIALOG);
+                return(false);
+            }
+        }
 
-  /* Save all options posted from ppd dialog */
-  function save_object()
-  {
-    if(!((isset($_POST['PPDDisSubmitted'])) && (is_array($this->ppdConfig)))){
-      return;
-    }
+        /* Open file handle */
+        $fp           = fopen($filename,"w+");
 
-    if(preg_match("/w/",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"))){
-      foreach($this->ppdConfig as $cat => $obj){
-        foreach($obj as $attr => $attributes){
-          if(isset($_POST[base64_encode($attributes['_name'])])){
-            $this->ppdConfig[$cat][$attr]['_default'] = $_POST[base64_encode($attributes['_name'])];
-          }
+        /* Check file handle & contents */
+        if(!$fp){
+            msg_dialog::display(_("PPD error"), msgPool::cannotWriteFile($filename), ERROR_DIALOG);
+            return;
+        }
+        if(empty($contents)){
+            msg_dialog::display(_("PPD error"), msgPool::incorrectUpload(_("file is empty")), ERROR_DIALOG);
+            return;
         }
-      }
-    }
-  }
 
+        /* Fille file with data */
+        fputs($fp,$contents);
+        @fclose($fp);
 
-  /* Save modified ppd */
-  function save_ppd()
-  {
-    if($this->ppdManager){
-      $this->ppdManager->saveProperties($this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'],$this->ppdConfig);
-    }
-  }
-
-
-  /* Return selected ppd path, if none is selected then false */
-  function save()
-  {
-    /* return the selected PPD, and in future the selected options too */
-    return($this->pathToModified.$this->selectedPPD['link']);
-  }
-
-
-  /* Get Information for a single PPD entry 
-   * This will be shown on top of template
-   */
-  function getPPDInformation()
-  {
-    $str = "none";
-    if(!empty($this->selectedPPD)){
-      $ppdDesc = $this->ppdManager->loadDescription($this->pathToPPD.$this->pathToModified.$this->selectedPPD['link']);
-      $str = $ppdDesc['name'];
+        /* Our job is done here */
+        return($ppdname);
     }
-    return($str) ; 
-  }
 
-  /* Display all options from the selected ppd file */
-  function generateProperties()
-  { 
-    /* Set Headline */
-    $str = "";
-    $feed= "";
 
-    $s_ppd = $this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'];
+    /* This function reloads the list of available printers/vendors 
+       $this->ppdListHeader 
+       Compaq        => 1
+       $this->ppdList
+       Compaq => Compaq IJ1200 => name => Compaq IJ1200 
+       link => /var/spool/ppd/Compaq/Compaq-J1200.ppd
+       ppd  => Compaq - Co    
+     */
+    function getPrinterReload()
+    {
+        if(is_readable($this->pathToPPD)){
+            $tmp = @$this->ppdManager->getPrinterList(true);
+
+            $this->ppdListHeader = $this->ppdList = array();
 
-    /* If ppd exists and is readable */
-    if((!empty($this->selectedPPD['link']))&&(file_exists($s_ppd))){
+            /* Sort all available files, and create header (Vendor index) */
+            foreach($tmp as $file=>$ppd){
 
-      /* If there is no initial Configuration, load it */
-      if($this->ppdConfig == false){
-        $this->ppdConfig = $this->ppdManager->loadProperties($s_ppd);
-      }
+                if(preg_match("#".preg_quote($this->pathToModified,'#')."#",$file)) continue;
 
-      /* Create a table */
-      $str .= "<div style='padding-left:30px;'><table summary=''>";
+                if(!isset($ppd['manufacturer'])) continue;
 
-      /* Input all data to the table */
-      foreach($this->ppdConfig as $cat => $obj){
+                if(!isset($this->ppdListHeader[$ppd['manufacturer']])){
+                    $this->ppdListHeader[$ppd['manufacturer']]=0;
+                }
 
-        /* Add new category */
-        $str .= "<tr><td colspan='2'>$feed";
-        if ($feed == ""){
-          $feed= "<br>";
+                $tmp3['name']   =$ppd['name'];
+                $tmp3['link']   =$file;
+                $tmp3['ppd']    =$ppd;
+                $this->ppdListHeader[$ppd['manufacturer']]++;
+                $this->ppdList[$ppd['manufacturer']][$ppd['name']]=$tmp3;
+            }
         }
-        $str .= "<b>"._("Section")." '".$cat."'&nbsp;</b><br>";
-        $str .= "</td></tr>";       
+    }
 
-        /* Add attributes of the current category */
-        foreach($obj as $attr => $settings){
 
-          /* Skip all entries beginning with _ */
-          if($attr[0] == "_") continue;  
+    /* Save all options posted from ppd dialog */
+    function save_object()
+    {
+        if(!((isset($_POST['PPDDisSubmitted'])) && (is_array($this->ppdConfig)))){
+            return;
+        }
+
+        if(preg_match("/w/",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"))){
+            foreach($this->ppdConfig as $cat => $obj){
+                foreach($obj as $attr => $attributes){
+                    if(isset($_POST[base64_encode($attributes['_name'])])){
+                        $this->ppdConfig[$cat][$attr]['_default'] = get_post(base64_encode($attributes['_name']));
+                    }
+                }
+            }
+        }
+    }
+
+
+    /* Save modified ppd */
+    function save_ppd()
+    {
+        if($this->ppdManager){
+            $this->ppdManager->saveProperties($this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'],$this->ppdConfig);
+        }
+    }
+
+
+    /* Return selected ppd path, if none is selected then false */
+    function save()
+    {
+        /* return the selected PPD, and in future the selected options too */
+        return($this->pathToModified.$this->selectedPPD['link']);
+    }
 
-          /* Prepare data */
-          $values   = array();
-          $name     = $settings['_name'];
 
-          if (!isset($settings['_default'])){
-            $default  = "";
-          } else {
-            $default  = $settings['_default'];
-          }
+    /* Get Information for a single PPD entry 
+     * This will be shown on top of template
+     */
+    function getPPDInformation()
+    {
+        $str = "none";
+        if(!empty($this->selectedPPD)){
+            $ppdDesc = $this->ppdManager->loadDescription($this->pathToPPD.$this->pathToModified.$this->selectedPPD['link']);
+            $str = $ppdDesc['name'];
+        }
+        return($str) ; 
+    }
 
-          $type     = $settings['_type'];
+    /* Display all options from the selected ppd file */
+    function generateProperties()
+    { 
+        /* Set Headline */
+        $str = "";
+        $feed= "";
 
-          /* Add name to table */ 
-          $str .= "<tr><td style='padding-left:40px;'>\n";
-          $str .= $name."<br>\n";
-          $str .= "</td><td>\n";
+        $s_ppd = $this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'];
 
-          /* Get all values */ 
-          foreach( $settings as $vname => $value){
-            if($vname[0] != "_"){
-              $values[$vname]= $value;
+        /* If ppd exists and is readable */
+        if((!empty($this->selectedPPD['link']))&&(file_exists($s_ppd))){
+
+            /* If there is no initial Configuration, load it */
+            if($this->ppdConfig == false){
+                $this->ppdConfig = $this->ppdManager->loadProperties($s_ppd);
             }
-          }
-
-          $acl ="";
-          if(!preg_match("/w/",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"))){
-            $acl = "disabled";
-          }
-
-          /* preparing Html output
-           * Supported types are PickOne/Boolean
-           */
-
-          /* If type is PickOne, create a select box */
-          if(($type == "PickOne")||(($type=="Boolean")&&(count($values)>1))){
-
-            $str  .=  "<select name='".base64_encode($name)."' $acl size='1'>\n";
-            foreach($values as $optionKey => $value){
-              $selected = "";
-              if($optionKey == $default){
-                $selected = " selected ";
-              }
-              $str  .=  "<option value='".$optionKey."' ".$selected.">".$value."</option>\n";
+
+            /* Create a table */
+            $str .= "<div style='padding-left:30px;'><table summary=''>";
+
+            /* Input all data to the table */
+            foreach($this->ppdConfig as $cat => $obj){
+
+                /* Add new category */
+                $str .= "<tr><td colspan='2'>$feed";
+                if ($feed == ""){
+                    $feed= "<br>";
+                }
+                $str .= "<b>"._("Section")." '".$cat."'&nbsp;</b><br>";
+                $str .= "</td></tr>";       
+
+                /* Add attributes of the current category */
+                foreach($obj as $attr => $settings){
+
+                    /* Skip all entries beginning with _ */
+                    if($attr[0] == "_") continue;  
+
+                    /* Prepare data */
+                    $values   = array();
+                    $name     = $settings['_name'];
+
+                    if (!isset($settings['_default'])){
+                        $default  = "";
+                    } else {
+                        $default  = $settings['_default'];
+                    }
+
+                    $type     = $settings['_type'];
+
+                    /* Add name to table */ 
+                    $str .= "<tr><td style='padding-left:40px;'>\n";
+                    $str .= $name."<br>\n";
+                    $str .= "</td><td>\n";
+
+                    /* Get all values */ 
+                    foreach( $settings as $vname => $value){
+                        if($vname[0] != "_"){
+                            $values[$vname]= $value;
+                        }
+                    }
+
+                    $acl ="";
+                    if(!preg_match("/w/",$this->ui->get_permissions($this->acl_base,"printer/printgeneric","gotoPrinterPPD"))){
+                        $acl = "disabled";
+                    }
+
+                    /* preparing Html output
+                     * Supported types are PickOne/Boolean
+                     */
+
+                    /* If type is PickOne, create a select box */
+                    if(($type == "PickOne")||(($type=="Boolean")&&(count($values)>1))){
+
+                        $str  .=  "<select name='".base64_encode($name)."' $acl size='1'>\n";
+                        foreach($values as $optionKey => $value){
+                            $selected = "";
+                            if($optionKey == $default){
+                                $selected = " selected ";
+                            }
+                            $str  .=  "<option value='".$optionKey."' ".$selected.">".$value."</option>\n";
+                        }
+                        $str  .=  "</select>\n";
+
+                    }elseif($type == "Boolean"){
+
+                        /* If type is Boolean & no values are given */
+                        $str  .=  "<select name='".base64_encode($name)."' $acl size='1'>\n";
+                        if($default == "False"){
+                            $str  .=    "<option value='True' >"._("True")."</option>\n";
+                            $str  .=    "<option value='False' selected>"._("False")."</option>\n";
+                        }else{
+                            $str  .=    "<option value='True' selected>"._("True")."</option>\n";
+                            $str  .=    "<option value='False' >"._("False")."</option>\n";
+                        }          
+                        $str  .=  "</select>\n";
+
+                    }elseif($this->config->get_cfg_value("core","displayErrors") == "true"){
+                        msg_dialog::display(_("PPD error"), sprintf(_("PPD type '%s' is not supported!"), $type), ERROR_DIALOG);
+                    }
+                    $str .= "</td></tr>\n";
+                }
             }
-            $str  .=  "</select>\n";
+            $str .= "</table></div>\n";
+        }
+        return($str);
+    }
 
-          }elseif($type == "Boolean"){
+    function removeModifiedPPD()
+    {
+        $path = $this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'];
 
-            /* If type is Boolean & no values are given */
-            $str  .=  "<select name='".base64_encode($name)."' $acl size='1'>\n";
-            if($default == "False"){
-              $str  .=    "<option value='True' >"._("True")."</option>\n";
-              $str  .=    "<option value='False' selected>"._("False")."</option>\n";
+        if(file_exists($path)){
+            if(is_writeable($path)){
+                if(!@unlink($path)){
+                    msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
+                }
             }else{
-              $str  .=    "<option value='True' selected>"._("True")."</option>\n";
-              $str  .=    "<option value='False' >"._("False")."</option>\n";
-            }          
-            $str  .=  "</select>\n";
-
-          }elseif($this->config->get_cfg_value("core","displayErrors") == "true"){
-            msg_dialog::display(_("PPD error"), sprintf(_("PPD type '%s' is not supported!"), $type), ERROR_DIALOG);
-          }
-          $str .= "</td></tr>\n";
+                msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
+            }
+        }else{
+            msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
         }
-      }
-      $str .= "</table></div>\n";
     }
-    return($str);
-  }
 
-  function removeModifiedPPD()
-  {
-    $path = $this->pathToPPD.$this->pathToModified.$this->selectedPPD['link'];
+    function update_ppd_url()
+    {
+        $this->SelectPPD("modified/".$this->selectedPPD['link']);
+        return("modified/".$this->selectedPPD['link']);
+    }
 
-    if(file_exists($path)){
-      if(is_writeable($path)){
-        if(!@unlink($path)){
-          msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
+    function check()
+    {  
+        $message = plugin::check();
+        if(empty($this->selectedPPD['link'])){
+            $message[] = _("Please select a valid ppd file or use 'Cancel' to go back to printer configuration.");
         }
-      }else{
-        msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
-      }
-    }else{
-      msg_dialog::display(_("PPD error"), msgPool::cannotDeleteFile($path), ERROR_DIALOG);
-    }
-  }
-
-  function update_ppd_url()
-  {
-    $this->SelectPPD("modified/".$this->selectedPPD['link']);
-    return("modified/".$this->selectedPPD['link']);
-  }
-  
-  function check()
-  {  
-    $message = plugin::check();
-    if(empty($this->selectedPPD['link'])){
-      $message[] = _("Please select a valid ppd file or use 'Cancel' to go back to printer configuration.");
+        return($message); 
     }
-    return($message); 
-  }
 }
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>