X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_selectUserToPrinterDialog.inc;h=8f1c8eca2a56ca190b6ee79423b2894097994226;hb=ecabf2056dc1350d73115d5fa226676be30017d6;hp=923f9454f0f84bc628fb896f73941d35a51a454d;hpb=e0e3672f3ddfdc74b5c4131133f9eef5b7bd2dbb;p=gosa.git diff --git a/plugins/admin/systems/class_selectUserToPrinterDialog.inc b/plugins/admin/systems/class_selectUserToPrinterDialog.inc index 923f9454f..8f1c8eca2 100644 --- a/plugins/admin/systems/class_selectUserToPrinterDialog.inc +++ b/plugins/admin/systems/class_selectUserToPrinterDialog.inc @@ -20,7 +20,8 @@ class selectUserToPrinterDialog extends plugin var $searchAppend = ""; var $baseAddition = ""; var $type = ""; - + var $search_cat = ""; + function selectUserToPrinterDialog ($config, $dn= NULL,$type=false ) { plugin::plugin ($config, $dn); @@ -32,24 +33,28 @@ class selectUserToPrinterDialog extends plugin $this->searchAttrs = array("cn","uid"); $this->searchAppend = "uid"; $this->baseAddition = get_people_ou(); + $this->search_cat = "users"; ;break; case "AddGroup" : $this->searchObjects = "(objectClass=posixGroup)"; $this->searchAttrs = array("cn","description"); $this->searchAppend = "cn"; $this->baseAddition = get_groups_ou(); + $this->search_cat = "groups"; ;break; case "AddAdminUser" : $this->searchObjects = "(objectClass=gosaAccount)(!(uid=*$))"; $this->searchAttrs = array("cn","uid"); $this->searchAppend = "uid"; $this->baseAddition = get_people_ou(); + $this->search_cat = "users"; ;break; case "AddAdminGroup" : $this->searchObjects = "(objectClass=posixGroup)"; $this->searchAttrs = array("cn","description"); $this->searchAppend = "cn"; $this->baseAddition = get_groups_ou(); + $this->search_cat = "groups"; ;break; } $this->type = $type; @@ -75,9 +80,43 @@ class selectUserToPrinterDialog extends plugin $this->regex=preg_replace("/\*\*/","*",$this->regex); } + + /* Get all departments within this subtree */ + $base = $this->config->current['BASE']; + $deps_res= get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", array("users","groups"), $this->config->current['BASE'], + array("ou", "description"), GL_SIZELIMIT | GL_SUBSEARCH); + + /* Load possible departments */ + $ui = get_userinfo(); + + /* Allowed user departments */ + $udeps = $ui->get_module_departments("users"); + + /* Allowed groups department */ + $gdeps = $ui->get_module_departments("groups"); + + /* Combine both arrays */ + $tdeps = array_unique(array_merge($udeps,$gdeps)); + + /* Create usable departments array */ + $ids = $this->config->idepartments; + $deps = array(); + foreach($deps_res as $dep){ + if(isset($ids[$dep['dn']]) && in_array_ics($dep['dn'], $tdeps)){ + $value = $ids[$dep['dn']]; + $deps[$dep['dn']] = $value; + } + } + if(!isset($deps[$this->depselect])){ + $this->depselect = key($deps); + } + + + $tmp_printers= $this->getPrinter(); + natcasesort($tmp_printers); $smarty->assign("regexPrinter" , $this->regex); - $smarty->assign("deplistPrinter" , $this->config->idepartments);//deplist); + $smarty->assign("deplistPrinter" , $deps);;//deplist); $smarty->assign("depselectPrinter" , $this->depselect); $smarty->assign("gotoPrinters" , $tmp_printers); $smarty->assign("gotoPrinterKeys" , array_flip($tmp_printers)); @@ -87,14 +126,16 @@ class selectUserToPrinterDialog extends plugin $smarty->assign("tree_image" , get_template_path('images/tree.png')); $smarty->assign("infoimage" , get_template_path('images/info.png')); $smarty->assign("launchimage" , get_template_path('images/small_filter.png')); - $smarty->assign("deplist" , $this->config->idepartments); + $smarty->assign("deplist" , $deps); $display.= $smarty->fetch(get_template_path('selectUserToPrinterDialog.tpl', TRUE,dirname(__FILE__))); return($display); } function check(){ - $message=array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + if(empty($_POST['gotoPrinter'])){ $message[] = _("Please select a printer or press cancel."); } @@ -119,11 +160,14 @@ class selectUserToPrinterDialog extends plugin function getPrinter($detailed = false) { $a_return=array(); - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->depselect); - #$ldap->search("(&".$this->searchObjects."(cn=".$this->regex."))", $this->depselect, $this->searchAttrs); - $ldap->ls("(&".$this->searchObjects."(cn=".$this->regex."))", $this->baseAddition.$this->depselect, $this->searchAttrs); - while($printer = $ldap->fetch()){ + + $filter = "(&".$this->searchObjects."(cn=".$this->regex."))"; + $base = $this->baseAddition.$this->depselect; + $attrs = $this->searchAttrs; + $cat = $this->search_cat; + + $res = get_list($filter,$cat,$base,$attrs); + foreach($res as $printer){ if(($detailed ==true)){ if(isset($printer[$this->searchAppend])){ $a_return[$printer[$this->searchAppend][0]] = $printer;