parent = $parent;
$this->selectedBase = $config->current['BASE'];
$this->allowedBases = $onlyAllowThisBases;
$this->SetTitle("Base");
$this->SetSummary(_("Choose a base"));
$this->SetListHeader("
".
" ".
" ".
" ".
" ".
"
");
$this->SetInformation(_("Step in the prefered tree and click save to use the current subtree as base. Or click the image at the end of each entry."));
$this->EnableAplhabet (true);
$this->EnableCloseButton(true);
$this->EnableSaveButton (true);
$this->SetSaveButtonString(_("Use"));
$this->SetCloseButtonString(_("Cancel"));
$this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'"));
$this->AddHeader(array("string"=>_("Base")));
$this->AddHeader(array("string"=>_("Action"),"attach"=>"style='width:50px;border-right:0px;'"));
/* Text ,Value ,Name ,Is selected */
// $this->AddCheckBox("Doesnothing","servers","Doesnothing",true);
/* Name ,Text ,Default , Connect with alphabet */
$this->AddRegex ("base_selection_regex",_("Filter entries with this syntax"),"*" , true);
}
function execute()
{
$this->setEntries();
return($this->Draw());
}
function setEntries()
{
$this->ClearElementsList();
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->selectedBase);
$ldap->ls("(&(objectClass=gosaDepartment)
(|(ou=".$this->base_selection_regex.")
(cn=".$this->base_selection_regex.")
(description=".$this->base_selection_regex.")))",
$this->selectedBase,array("ou","description","cn"));
$link = "%s";
$base_back = preg_replace("/^[^,]+,/","",$this->selectedBase);
$base_back = convert_department_dn($base_back);
/* Add departments, to be able to switch into them
*/
while($attrs = $ldap->fetch()){
$key = $attrs['dn'] ;
$val = $attrs['ou'][0];
if(count($this->allowedBases) != 0){
if(!isset($this->allowedBases[$key])){
continue;
break;
}
}
/* Append description */
if(isset($attrs['description'][0])){
$val.=" [".$attrs['description'][0]."]";
}
/* Add missing entries ... */
if(!isset($this->config->departments[trim($key)])){
$this->config->departments[trim($key)]="";
}
/* check if this department contains sub-departments
Display different image in this case
*/
$non_empty="";
$keys= str_replace("/","\/",$key);
foreach($this->config->departments as $keyd ){
if(preg_match("/,".$keys."/",$keyd)){
$non_empty="full";
}
}
/* Add to divlist */
$field1 = array("string" => "",
"attach" => "style='text-align:center;width:20px;'");
$field2 = array("string" => sprintf($link,base64_encode($key),$val), "attach" => "style=''");
$field3 = array("string" => sprintf(" ",base64_encode($key)),
"attach" => "style='width:50px;border-right:0px;text-align:right;'");
$this->AddElement(array($field1,$field2,$field3));
}
}
function Save()
{
MultiSelectWindow :: Save();
$this->BaseToUse = $this->selectedBase;
}
function isSelected()
{
return($this->BaseToUse);
}
function setCurrentBase($base)
{
$this->selectedBase = $base;
}
function save_object()
{
/* Save current base */
$old_base = $this->selectedBase;
/* Save automatic created POSTs like regex, checkboxes */
MultiSelectWindow::save_object();
if(isset($_GET['open_dep'])){
$this->selectedBase = base64_decode($_GET['open_dep']);
}
$s_action ="";
foreach($_POST as $key => $value){
if(preg_match("/^dep_back.*/i",$key)){
$s_action="back";
}elseif(preg_match("/^dep_root.*/",$key)){
$s_action="root";
}elseif(preg_match("/^dep_home.*/i",$key)){
$s_action="home";
}elseif(preg_match("/^usebase_/",$key)){
$tmp = preg_replace("/^usebase_/","",$key);
$tmp = preg_replace("/_.*$/","",$tmp);
$tmp = base64_decode($tmp);
$this->BaseToUse = $tmp;
}
}
$ui= get_userinfo();
/* Homebutton is posted */
if($s_action=="home"){
$this->selectedBase=(preg_replace("/^[^,]+,/","",$ui->dn));
$this->selectedBase=(preg_replace("/^[^,]+,/","",$this->selectedBase));
}
/* back to the roots ^^ */
if($s_action=="root"){
$this->selectedBase=($this->config->current['BASE']);
}
/* If Backbutton is Posted */
if($s_action=="back"){
$base_back = preg_replace("/^[^,]+,/","",$this->selectedBase);
$base_back = convert_department_dn($base_back);
if(isset($this->config->departments[trim($base_back)])){
$this->selectedBase= $this->config->departments[trim($base_back)];
}else{
$this->selectedBase= $this->config->departments["/"];
}
}
/* Restore old base, if selected base is not allowed */
if(count($this->allowedBases) && !isset($this->allowedBases[$this->selectedBase])){
$this->selectedBase = $old_base;
}
}
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>