From 61e6bac027ffca3e1d7e62a005558a92e665e6e3 Mon Sep 17 00:00:00 2001 From: hickert Date: Mon, 15 Oct 2007 11:50:23 +0000 Subject: [PATCH] Allow adding git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@7549 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../admin/systems/class_printerPPDDialog.inc | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/plugins/admin/systems/class_printerPPDDialog.inc b/plugins/admin/systems/class_printerPPDDialog.inc index ebcb2efdb..d2dfab34f 100644 --- a/plugins/admin/systems/class_printerPPDDialog.inc +++ b/plugins/admin/systems/class_printerPPDDialog.inc @@ -26,6 +26,13 @@ class printerPPDDialog extends plugin /* Object Info */ var $cn = "" ; // Used to tag the ppds modified by the printer object, + /* 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); @@ -115,6 +122,15 @@ class printerPPDDialog extends plugin } } + /* 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(isset($_POST['SelectPPD'])){ $this->dialog= new printerPPDSelectionDialog($this->config,$this->dn,$this->ppdList,$this->ppdListHeader,$this->selectedPPD); @@ -226,7 +242,7 @@ class printerPPDDialog extends plugin /* 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) + function AddPPD($_PathOnHdd,$overwrite = FALSE) { /* Check if file exists && is readable */ if((!is_file($_PathOnHdd)) || (!is_readable($_PathOnHdd))){ @@ -257,16 +273,34 @@ class printerPPDDialog extends plugin $this->ppdList[$vendor] = array(); } + /* 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("/".$model.".*/i",$key)){ $found = true; - print_red(sprintf(_("There is already a ppd file for this kind of printer."))); - return; + if(!$overwrite){ + if(!copy($_PathOnHdd,$_PathOnHdd."_back")){ + print_red(sprintf(_("Can't add new ppd file, the source file '%s' is not accessible."),$_PathOnHdd)); + }else{ + $this->add_ppd_later = $_PathOnHdd."_back"; + $this->add_later_msg_dialog = new msg_dialog(_("PPD file already exists"), + _("There is already a ppd file for this kind of printer."),CONFIRM_DIALOG); + } + return; + } } } + /* Open file handle */ + $fp = fopen($filename,"w+"); + /* Create the vendors path, if it doesn't exists already */ if(!is_dir($this->pathToPPD.$vendor)){ if(!(@mkdir($this->pathToPPD.$vendor))){ @@ -275,12 +309,6 @@ class printerPPDDialog extends plugin } } - /* Create ppd file and fill in the source contents */ - $ppdname = $vendor."/".$name.".ppd"; - $filename = $this->pathToPPD.$ppdname; - $fp = fopen($filename,"w+"); - $contents = file_get_contents($_PathOnHdd); - /* Check file handle & contents */ if(!$fp){ print_red(sprintf(_("Can't save file '%s'."),$filename)); -- 2.30.2