X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_printerPPDDialog.inc;h=f9f3ed2717412c8d9a8567df3639c8885488f3c4;hb=e6474199981bcb02d2d0679522006e4546e06a9a;hp=86da20b32d298e590b0435905e6f0f47a7f1c75c;hpb=3082209baacc737659b444a6de4ed6ef5588faaf;p=gosa.git diff --git a/plugins/admin/systems/class_printerPPDDialog.inc b/plugins/admin/systems/class_printerPPDDialog.inc index 86da20b32..f9f3ed271 100644 --- a/plugins/admin/systems/class_printerPPDDialog.inc +++ b/plugins/admin/systems/class_printerPPDDialog.inc @@ -21,42 +21,57 @@ class printerPPDDialog extends plugin var $ppdManager = false; // new ppdManager; var $ppdConfig = false; // $this->ppdManager->loadProperties($this->selectedPPD['link']); + var $pathToPPD = ""; + function printerPPDDialog ($config, $dn= NULL,$ppdfile=NULL ) { plugin::plugin ($config, $dn); $this->depselect = $this->config->current['BASE']; - /* Load all available PPD files and sort them into an array - */ - require_once ("class_ppdManager.inc"); - $this->ppdManager= new ppdManager('/var/spool/ppd/'); - $tmp = $this->ppdManager->getPrinterList(); - - /* Sort all available files, and create header (Vendor index) */ - foreach($tmp as $file=>$ppd){ - $tmp2 = split("\n",$ppd); - if(!isset($this->ppdListHeader[$tmp2[0]])){ - $this->ppdListHeader[$tmp2[0]]=0; + if(isset($_SESSION['config']->data['MAIN']['PPD_PATH'])){ + $this->pathToPPD = $_SESSION['config']->data['MAIN']['PPD_PATH']; + $this->pathToPPD= preg_replace("/\/\//", "/", $this->pathToPPD); + if(!preg_match("/\/$/",$this->pathToPPD)){ + $this->pathToPPD = $this->pathToPPD."/"; } - $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]." - ".$tmp2[2]); - $tmp3['link'] =$file; - $tmp3['ppd'] =$ppd; - $this->ppdListHeader[$tmp2[0]]++; - $this->ppdList[$tmp2[0]][preg_replace("/^ -/","",$tmp2[1]." - ".$tmp2[2])]=$tmp3; + }else{ + $this->pathToPPD = ""; } - /* The user has already a valid PPD assigned - * Get some informations about this PPD - */ - if(($ppdfile!= NULL)&&(strlen($ppdfile)>0)){ - if(!file_exists($ppdfile)){ - print_red(sprintf(_("Can't open '%s', ppd settings reseted."),$ppdfile)); - }else{ - $tmp2= split("\n", $this->ppdManager->loadDescription($ppdfile)); - $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]); - $tmp3['link'] =$ppdfile; - $tmp3['ppd'] =$this->ppdManager->loadDescription($ppdfile); - $this->selectedPPD = $tmp3; + if(!((!is_dir($this->pathToPPD))||(empty($this->pathToPPD)))){ + + /* Load all available PPD files and sort them into an array + */ + require_once ("class_ppdManager.inc"); + $this->ppdManager= new ppdManager($this->pathToPPD); + $tmp = $this->ppdManager->getPrinterList(); + + /* Sort all available files, and create header (Vendor index) */ + foreach($tmp as $file=>$ppd){ + $tmp2 = split("\n",$ppd); + if(!isset($this->ppdListHeader[$tmp2[0]])){ + $this->ppdListHeader[$tmp2[0]]=0; + } + $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]." - ".$tmp2[2]); + $tmp3['link'] =preg_replace("/".str_replace("/","\/",$this->pathToPPD)."/i","",$file); + $tmp3['ppd'] =$ppd; + $this->ppdListHeader[$tmp2[0]]++; + $this->ppdList[$tmp2[0]][preg_replace("/^ -/","",$tmp2[1]." - ".$tmp2[2])]=$tmp3; + } + + /* The user has already a valid PPD assigned + * Get some informations about this PPD + */ + if(($ppdfile!= NULL)&&(strlen($ppdfile)>0)){ + if(!file_exists($this->pathToPPD.$ppdfile)){ + print_red(sprintf(_("Can't open '%s', ppd settings resetted."),$ppdfile)); + }else{ + $tmp2= split("\n", $this->ppdManager->loadDescription($this->pathToPPD.$ppdfile)); + $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]); + $tmp3['link'] =$ppdfile; + $tmp3['ppd'] =$this->ppdManager->loadDescription($this->pathToPPD.$ppdfile); + $this->selectedPPD = $tmp3; + } } } } @@ -82,112 +97,141 @@ class printerPPDDialog extends plugin function execute() { - /* Call parent execute */ - plugin::execute(); + /* Call parent execute */ + plugin::execute(); + /* Fill templating stuff */ $smarty= get_smarty(); $display= ""; - /* Is there a new PPD file uploaded ? */ - if((isset($_FILES['NewPPDFile']))&&(isset($_POST['SubmitNewPPDFile']))){ - $file = ($_FILES['NewPPDFile']); - if($file['size'] != 0 ){ - $res = @$this->ppdManager->loadDescription($file['tmp_name']); - $name = (trim(preg_replace("/-/","",$res))); - if(!empty($name)){ - $vendor = trim(preg_replace("/-.*$/i","",$res)); - $model = trim(preg_replace("/".$vendor."/","",$name)); - if(!is_dir('/var/spool/ppd/'.$vendor)){ - if(!(@mkdir('/var/spool/ppd/'.$vendor))){ - print_red(sprintf(_("Cab't create folder '%s' for the uploaded ppd file."),$vendor)); + if((!is_dir($this->pathToPPD))||(empty($this->pathToPPD))){ + print_red(sprintf(_("The specified PPD_PATH='%s' in your gosa.conf is invalid, can't read any ppd informations."),$this->pathToPPD)); + $smarty->assign("ppdString", _("Can't get ppd informations.")); + $smarty->assign("showOptions", ""); + }else{ + + + /* Is there a new PPD file uploaded ? */ + if((isset($_FILES['NewPPDFile']))&&(isset($_POST['SubmitNewPPDFile']))){ + $file = ($_FILES['NewPPDFile']); + if($file['size'] != 0 ){ + $res = @$this->ppdManager->loadDescription($file['tmp_name']); + $name = (trim(preg_replace("/-/","",$res))); + if(!empty($name)){ + $vendor = trim(preg_replace("/-.*$/i","",$res)); + $model = trim(preg_replace("/".$vendor."/","",$name)); + if(!is_dir($this->pathToPPD.$vendor)){ + if(!(@mkdir($this->pathToPPD.$vendor))){ + print_red(sprintf(_("Can't create folder '%s' for the uploaded ppd file."),$vendor)); + } } - } - if(!isset($this->ppdList[$vendor])){ - $this->ppdList[$vendor] = array(); - } - - if(is_dir('/var/spool/ppd/'.$vendor)){ - $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."))); - } - }// Foreach - if(!$found){ - $filename = '/var/spool/ppd/'.$vendor."/".$vendor."-".preg_replace("/^[^ ]/","",str_replace("-","",$model)).".ppd"; - $fp = @fopen($filename,"w+"); - if(!$fp){ - print_red(sprintf(_("Can't save file '%s'"),$filename)); - }else{ - $str = file_get_contents($file['tmp_name']); - fputs($fp,$str); - @fclose($fp); - - $tmp2= split("\n", $res); - $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]); - $tmp3['link'] =$filename; - $tmp3['ppd'] =$res; - $this->selectedPPD = $tmp3; - $this->getPrinterReload(); - } + if(!isset($this->ppdList[$vendor])){ + $this->ppdList[$vendor] = array(); } - }// If dir + + if(is_dir($this->pathToPPD.$vendor)){ + $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."))); + } + }// Foreach + if(!$found){ + $ppdname = $vendor."/".$vendor."-".preg_replace("/^[^ ]/","",str_replace("-","",$model)).".ppd"; + $filename = $this->pathToPPD.$vendor."/".$vendor."-".preg_replace("/^[^ ]/","",str_replace("-","",$model)).".ppd"; + $fp = @fopen($filename,"w+"); + if(!$fp){ + print_red(sprintf(_("Can't save file '%s'."),$filename)); + }else{ + $str = file_get_contents($file['tmp_name']); + fputs($fp,$str); + @fclose($fp); + + $tmp2= split("\n", $res); + $tmp3['name'] =preg_replace("/^ -/","",$tmp2[1]); + $tmp3['link'] =$ppdname; + $tmp3['ppd'] =$res; + + $this->selectedPPD = $tmp3; + $this->getPrinterReload(); + } + } + }// If dir + }else{ + print_red(_("Please specify a valid ppd file.")); + } }else{ print_red(_("Please specify a valid ppd file.")); } - }else{ - print_red(_("Please specify a valid ppd file.")); + } - - } - /* 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); - } + /* 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); + } - /* The selection dialog fpr PPDs is canceled - */ - if(isset($_POST['ClosePPDSelection'])){ - unset($this->dialog); - $this->dialog=NULL; - } - - /* A new PPDs was selected in the PPDs selection Dialog - * Perform a Check. If everything is fine, use the new PPD. - */ - if(isset($_POST['SavePPDSelection'])){ - if(!isset($_POST['PPDselection'])){ - print_red(_("Please select a valid ppd.")); - }else{ - $this->selectedPPD['link'] = $_POST['PPDselection']; - $this->ppdConfig = false; + /* The selection dialog fpr PPDs is canceled + */ + if(isset($_POST['ClosePPDSelection'])){ unset($this->dialog); $this->dialog=NULL; } - } - - /* if a dialog is open, print the dialog instead of this class - */ - if($this->dialog!=NULL){ - $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()); - } - + /* A new PPDs was selected in the PPDs selection Dialog + * Perform a Check. If everything is fine, use the new PPD. + */ + if(isset($_POST['SavePPDSelection'])){ + if(!isset($_POST['PPDselection'])){ + print_red(_("Please select a valid ppd.")); + }else{ + $this->selectedPPD['link'] = $_POST['PPDselection']; + $this->ppdConfig = false; + unset($this->dialog); + $this->dialog=NULL; + } + } + + /* Div Selection */ + if((isset($_GET['act']))&&($_GET['act']=="use")){ + $hit = false; + foreach($this->ppdList as $vendor => $ppds ){ + foreach($ppds as $name => $ppd){ + if($ppd['link']==$_GET['id']){ + $hit = true; + } + } + } + if($hit == true){ + $this->selectedPPD['link'] = str_replace($this->pathToPPD,"",$_GET['id']); + $this->ppdConfig = false; + } + unset($this->dialog); + $this->dialog=NULL; + + } + + /* if a dialog is open, print the dialog instead of this class + */ + if($this->dialog!=NULL){ + $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()); + } + } /* Print out template */ $display.= $smarty->fetch(get_template_path('printerPPDDialog.tpl', TRUE,dirname(__FILE__))); return($display); @@ -215,9 +259,11 @@ class printerPPDDialog extends plugin } } - + function save_ppd(){ - $this->ppdManager->saveProperties($this->selectedPPD['link'],$this->ppdConfig); + if($this->ppdManager){ + $this->ppdManager->saveProperties($this->pathToPPD.$this->selectedPPD['link'],$this->ppdConfig); + } } /* Save to LDAP */ @@ -234,8 +280,7 @@ class printerPPDDialog extends plugin */ $str = "none"; if(!empty($this->selectedPPD)){ - $str = $this->selectedPPD['link']; - $str = $this->ppdManager->loadDescription($this->selectedPPD['link']); + $str = $this->ppdManager->loadDescription($this->pathToPPD."/".$this->selectedPPD['link']); } return($str) ; } @@ -245,17 +290,19 @@ class printerPPDDialog extends plugin /* In future there will be a schema parser that provide us all settings that can be made in the selected PPD file. * This function will generate a userfriendly post based form with this informations */ - + /* Set Headline */ $str = ""; $feed= ""; + $s_ppd = $this->pathToPPD.$this->selectedPPD['link']; + /* If ppd exists and is readable */ - if((!empty($this->selectedPPD['link']))&&(file_exists($this->selectedPPD['link']))){ - + 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($this->selectedPPD['link']); + $this->ppdConfig = $this->ppdManager->loadProperties($s_ppd); } /* Create a table */ @@ -263,7 +310,7 @@ class printerPPDDialog extends plugin /* Input all data to the table */ foreach($this->ppdConfig as $cat => $obj){ - + /* Add new category */ $str .= "$feed"; if ($feed == ""){ @@ -274,22 +321,22 @@ class printerPPDDialog extends plugin /* 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']; $default = $settings['_default']; $type = $settings['_type']; - + /* Add name to table */ $str .= "\n"; $str .= $name."
\n"; $str .= "\n"; - + /* Get all values */ foreach( $settings as $vname => $value){ if($vname[0] != "_"){