X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_MultiSelectWindow.inc;h=9c9bd5071763836acd638b6201d0f0a983b95fd5;hb=67253c858b7c867ee5fa3a9b4bbfde1fc1ee81d1;hp=565de251a6886bf06e1ee33c963882ab934ee692;hpb=aa3bdaacb3dc9364eda7225dd272da4ea0400ca0;p=gosa.git diff --git a/gosa-core/include/class_MultiSelectWindow.inc b/gosa-core/include/class_MultiSelectWindow.inc index 565de251a..9c9bd5071 100644 --- a/gosa-core/include/class_MultiSelectWindow.inc +++ b/gosa-core/include/class_MultiSelectWindow.inc @@ -374,7 +374,7 @@ class MultiSelectWindow{ $divlist->SetEntriesPerPage(0); // 0 for scrollable list /* Display list footer with summary of all listed entries */ - if ($this->config->get_cfg_value("list_summary") == "true"){ + if ($this->config->get_cfg_value("listSummary") == "true"){ $divlist->SetFooter($this->get_List_Bottom_Info()); } @@ -529,9 +529,12 @@ class MultiSelectWindow{ } } - /* Save base selection from headpage selectbox*/ + /* Save base selection from headpage selectbox */ if(isset($_POST['CurrentMainBase'])){ - $this->selectedBase = $_POST['CurrentMainBase']; + $this->selectedBase = get_post('CurrentMainBase'); + session::global_set("CurrentMainBase", $this->selectedBase); + } else { + $this->selectedBase= session::global_get("CurrentMainBase"); } /* Homebutton is posted */ @@ -645,7 +648,7 @@ class MultiSelectWindow{ } /* Save currenlty selected base in session */ - session::set("CurrentMainBase",$this->selectedBase); + session::global_set("CurrentMainBase",$this->selectedBase); } @@ -654,6 +657,17 @@ class MultiSelectWindow{ { $this->DepartmentsAdded = true; $this->Added_Departments = array(); + $this->departments = array(); + + if(isset($this->Regex)){ + $this->base_selection_regex = $this->Regex; + } + + $linkopen = "%s"; + $types = departmentManagement::get_support_departments(); + $ui = get_userinfo(); + $module_deps = $ui->get_module_departments($this->module); + $found_deps = array(); /* check for a valid base */ if(!$base){ @@ -664,58 +678,39 @@ class MultiSelectWindow{ $ldap = $this->config->get_ldap_link(); $ldap->cd($base); - /* reset current deps */ - $this->departments = array(); - /* Get all departments within this subtree */ - $deps= get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", $this->module, $base, - array("ou", "description","objectClass"), GL_SIZELIMIT ); - - /* Edit delete link for system types - */ - $linkopen = "%s"; - - /* Create an array with all visible (in the list) departments */ - $types = departmentManagement::get_support_departments(); - - - /* Create search filter - */ - $this->departments = array(); + $s_filter = ""; + $s_attrs = array("description","objectClass"); + $s_acls = $this->module; foreach($types as $name => $data){ - $filter = "(&(objectClass=gosaDepartment)(objectClass=".$data['OC'].") - (".$data['ATTR']."=".$this->base_selection_regex."))"; - $tmp = get_list($filter,"department/".$data['ACL'],$this->selectedBase,array($data['ATTR'],"description"),GL_NONE); - foreach($tmp as $attrs){ - $attrs['NAME'] = $attrs[$data['ATTR']][0]; - $attrs['TYPE'] = $data; - $name = $attrs['NAME']." -".$attrs['dn']; - $this->departments[$name] = $attrs; - } + $s_filter.= "(&(objectClass=gosaDepartment)(objectClass=".$data['OC'].")(".$data['ATTR']."=".$this->base_selection_regex."))"; + $s_attrs[]= $data['ATTR']; } - uksort($this->departments, 'strnatcasecmp'); - - $ui = get_userinfo(); - $module_deps = $ui->get_module_departments($this->module); - - /* Add deps to this dialog object list */ - $this->departments = array_values($this->departments); - foreach($this->departments as $key=> $val){ - - if(!in_array($val['dn'],$module_deps)) continue; - - /* Check if this department contains sub-departments - Display different image in this case - */ - $img = $val['TYPE']['IMG']; - foreach($this->config->departments as $keyd){ - if(preg_match("/,".normalizePreg($val['dn'])."$/",$keyd)){ - $img = $val['TYPE']['IMG_FULL']; + $tmp = get_list("(|".$s_filter.")",$s_acls,$this->selectedBase,$s_attrs,GL_NONE); + foreach($tmp as $attrs){ + foreach($types as $name => $data){ + if(in_array($data['OC'],$attrs['objectClass']) && isset($attrs[$data['ATTR']][0])){ + $attrs['NAME'] = $attrs[$data['ATTR']][0]; + $attrs['TYPE'] = $data; + $name = $attrs['NAME']." ".$attrs['dn']; + $departments[$name] = $attrs; + $found_deps[$name] = $attrs['dn']; + break; } } + } - $img = ""; + /* Detect allowed departments + */ + $deps = array_intersect($found_deps,$module_deps); + uksort($deps, 'strnatcasecmp'); + $key = 0; + foreach($deps as $name => $dn){ + $key ++; + $val = $departments[$name]; + $this->departments[$key] = $val; + $img = ""; /* Add spacer cols to divlist */ @@ -735,8 +730,8 @@ class MultiSelectWindow{ /* Add departments */ - $row[]=$field1=array("string"=> $img,"attach"=>"style='text-align:center;width:20px;'"); - $row[]=$field2=array("string"=>sprintf($linkopen,$key,$name), "attach" => "style=''"); + $row[]=array("string"=> $img,"attach"=>"style='text-align:center;width:20px;'"); + $row[]=array("string"=>sprintf($linkopen,$key,$name), "attach" => "style=''"); /* Add spacer tabs */ @@ -757,45 +752,36 @@ class MultiSelectWindow{ function create_department_list($modules) { - /* Load possible departments */ + $departments = array(); $ui= get_userinfo(); $first = ""; $found = FALSE; + $options =""; - if(!is_array($modules)){ - $modules = array($modules); - } - - $department = $departments = array(); $ids = $this->config->idepartments; - foreach($modules as $module){ - $d = $ui->get_module_departments($module); - - foreach($ids as $department => $desc){ - if(in_array($department,$d)){ - $departments[$department] = $department; - } - } + $d = $ui->get_module_departments($modules); + $k_ids = array_keys($ids); + $deps = array_intersect($d,$k_ids); + foreach($k_ids as $department){ + $departments[$department] = $ids[$department]; } - $first = ""; - $found = FALSE; - $options =""; - foreach($departments as $dep => $name){ + foreach($departments as $value => $name){ /* Keep first base dn in mind, we could need this * info if no valid base was found */ if(empty($first)) { - $first = $dep['dn']; + $first = $value; } - $value = $ids[$dep]; - if ($this->selectedBase == $dep){ + + $v_value = htmlentities($value,ENT_QUOTES); + if ($this->selectedBase == $value){ $found = TRUE; - $options.= ""; + $options.= ""; } else { - $options.= ""; + $options.= ""; } }