X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_printerPPDSelectionDialog.inc;h=9c36e88e9e38a09e195ee1afc60efa0fcf445f01;hb=ccaa264984e691fb1371b7e93e22e4fd9a2a6ba9;hp=b23a77323bc6953be117ef7c64ae8699468d1b9d;hpb=84d2c065af9ce3f287fef380606a593a0cda5a81;p=gosa.git diff --git a/plugins/admin/systems/class_printerPPDSelectionDialog.inc b/plugins/admin/systems/class_printerPPDSelectionDialog.inc index b23a77323..9c36e88e9 100644 --- a/plugins/admin/systems/class_printerPPDSelectionDialog.inc +++ b/plugins/admin/systems/class_printerPPDSelectionDialog.inc @@ -9,15 +9,14 @@ class printerPPDSelectionDialog extends plugin /* attribute list for save action */ var $ignore_account = FALSE; - var $attributes = array("currentPos","currentSel"); + var $attributes = array(); var $objectclasses = array("whatever"); var $list =array(); var $header =array(); - var $currentPos = ""; - var $currentSel = -1; - var $selectedPPD = ""; + var $Vendor = ""; + var $current_del_id = ""; function printerPPDSelectionDialog ($config, $dn= NULL,$list=false,$headers=false,$ppd=false) { @@ -26,16 +25,6 @@ class printerPPDSelectionDialog extends plugin $this->header = $headers; $this->depselect = $this->config->current['BASE']; - /* If there is already a ppd file selected, use this as preselected object in our ppds list - */ - if(isset($ppd)){ - $tmp2 = split("\n",$ppd['ppd']); - if(count($tmp2)==2){ - $this->currentPos = $tmp2[0]; - $this->currentSel = preg_replace("/^ -/","",$tmp2[1]); - } - } - if(!isset($_SESSION['printerPPDSelectionDialog'])){ $_SESSION['printerPPDSelectionDialog']['regex'] = "*"; } @@ -67,12 +56,53 @@ class printerPPDSelectionDialog extends plugin $regex = str_replace("**","*",$regex); $_SESSION['printerPPDSelectionDialog']['regex'] = $regex; + /* Delete requested, check if everything is ok and display confirmation dialog */ + if(isset($_GET['act']) && $_GET['act'] == "del"){ + + /* Get id and check if id is valid */ + $id_to_del = base64_decode($_GET['id']); + $found = ""; + foreach($this->list[$this->Vendor] as $key => $data){ + if($data['link'] == $id_to_del){ + $found = $key; + break; + } + } + if(!empty($found)){ + $this->current_del_id = $id_to_del; + + $smarty->assign("warning", sprintf(_("You're about to delete the ppd file '%s' at '%s'."), $found,$id_to_del)); + return($smarty->fetch(get_template_path('remove_ppd.tpl', TRUE))); + + }else{ + print_red(sprintf(_("Could not found specified ppd file '%s'."),$id_to_del)); + } + } - /* if manufacturer is selected and a ppd file - * Set this selected file to our return value. - */ - if(isset($this->list[$this->currentPos][$this->currentSel])){ - $this->selectedPPD = $this->list[$this->currentPos][$this->currentSel]; + /* Deletion confirmed */ + if(isset($_POST['delete_ppd_confirm']) && !empty($this->current_del_id)){ + + /* check if file is removeable */ + if(is_writeable($this->current_del_id)){ + $is_ok = @unlink($this->current_del_id); + + /* Update ppd list */ + if($is_ok){ + foreach($this->list as $vendor => $ppds){ + foreach($ppds as $ppd => $data){ + if($data['link'] == $this->current_del_id){ + unset($this->list[$vendor][$ppd]); + } + } + } + } + }else{ + $is_ok = false; + } + + if(!$is_ok){ + print_red(_("Something went wrong while trying to remove the ppd file from server, possibly we have no write access.")); + } } /** Added **/ @@ -80,13 +110,60 @@ class printerPPDSelectionDialog extends plugin foreach($this->list as $cat => $ppds){ foreach($ppds as $ppd){ if(preg_match("/^".str_replace("*",".*",$regex)."/i",$ppd['ppd'])){ - $list[$ppd['link']] = $ppd['ppd']; + if(is_readable($ppd['link'])){ + $list[$ppd['link']] = $ppd; + } + } + } + } + + + /* Open vendor folder */ + if((isset($_GET['act']))&&($_GET['act']=="open")) { + if((!empty($_GET['id'])) && (!isset( $this->header[base64_decode($_GET['id'])]))){ + print_red(sprintf(_("Selected vendor '%s' does not exists in our list of ppds."),base64_decode($_GET['id']))); + $this->Vendor = ""; + }else{ + $this->Vendor = base64_decode($_GET['id']); + } + } + + $div = new divSelectBox("printerPPDSelectionDialog"); + $div ->SetHeight(450); + $div ->SetSummary(_("Printer ppd selection.")); + + $linkopen = "%s"; + $uselink = "%s"; + $dellink = ""._("delete").""; + + if(empty($this->Vendor)){ + foreach($this-> header as $key => $entry){ + $div ->AddEntry (array( + array("string"=>sprintf($linkopen,base64_encode($key),$key),"attach"=>"style='border-right:0px;'") + )); + } + }else{ + $div ->AddEntry (array( + array("string"=>sprintf($linkopen,"",".. ["._("back")."]"),"attach"=>"style='border-right:0px;'") + )); + foreach($list as $key => $ppd){ + if(preg_match("/^".$this->Vendor."/",$ppd['ppd'])){ + + if(is_writeable($ppd['link'])){ + $del_str = sprintf($dellink,base64_encode($key)); + }else{ + $del_str = ""; + } + + $div ->AddEntry (array( + array("string"=>sprintf($uselink,base64_encode($key),$ppd['ppd'])), + array("string"=>$del_str,"attach"=>"style='border-right:0px;'") + )); } } } - $smarty->assign("objects", $list); - $smarty->assign("objectKeys", array_flip($list)); + $smarty->assign("List", $div -> DrawList()); $smarty->assign("search_image", get_template_path('images/search.png')); $smarty->assign("launchimage", get_template_path('images/small_filter.png')); $smarty->assign("tree_image", get_template_path('images/tree.png'));