"Eins ist toll", "zwei" => "Zwei ist noch besser"); /* Headpage attributes */ var $conferences = array(); /* attribute list for save action */ var $attributes = array(); var $objectclasses = array(); var $conftab = false; var $departments =array(); /* Initialise Class */ function phoneConferenceManagment ($config, $ui) { $this->ui = $ui; $this->dn = ""; $this->config = $config; /* Get global filter config */ if (!isset($_SESSION["conferencefilter"])){ $base= get_base_from_people($ui->dn); $conferencefilter= array( "depselect" => $base, "regex" => "*"); $_SESSION["conferencefilter"] = $conferencefilter; } } /* Execute class and display something */ function execute() { /* Reload departments */ $this->config->departments = get_departments(); $smarty = get_smarty(); $display = ""; $s_action = ""; // Will contain an action, like del or edit $s_entry = ""; // The entry name for edit delete -... $conferencefilter = $_SESSION["conferencefilter"]; if(isset($_POST['regexit'])){ $conferencefilter['regex']=$_POST['regexit']; } if(isset($_GET['search'])){ if($_GET['search']=="*"){ $conferencefilter['regex']=$_GET['search']; }else{ $conferencefilter['regex']=$_GET['search']."*"; } } $smarty->assign("regex",$conferencefilter['regex']); /* Start for New List Managment */ if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ $s_action="open"; $s_entry = base64_decode($_GET['dep_id']); $conferencefilter['depselect']= "".$this->config->departments[trim($s_entry)]; } foreach($_POST as $key => $post){ if(preg_match("/.*new.*/i",$key)){ $s_action = "new"; // Post for delete }elseif(preg_match("/conf_del.*/",$key)){ $s_action = "del"; $s_entry = preg_replace("/conf_".$s_action."_/i","",$key); $s_entry = preg_replace("/_.*$/","",$s_entry); // Post for edit }elseif(preg_match("/conf_edit_.*/",$key)){ $s_action="edit"; $s_entry = preg_replace("/conf_".$s_action."_/i","",$key); $s_entry = preg_replace("/_.*$/","",$s_entry); }elseif(preg_match("/dep_back.*/i",$key)){ $s_action="back"; }elseif(preg_match("/dep_home.*/i",$key)){ $s_action="home"; }elseif(preg_match("/dep_root.*/i",$key)){ $s_action="root"; } } /* Edit Entry */ if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){ $s_action = "edit"; $s_entry = $_GET['id']; } /* Department changed? */ if(isset($_POST['depselect']) && $_POST['depselect']){ $conferencefilter['depselect']= $_POST['depselect']; } /* Homebutton is posted */ if($s_action=="home"){ $conferencefilter['depselect']=(preg_replace("/^[^,]+,/","",$this->ui->dn)); $conferencefilter['depselect']=(preg_replace("/^[^,]+,/","",$conferencefilter['depselect'])); } /* back to root */ if($s_action=="root"){ $conferencefilter['depselect']=($this->config->current['BASE']); } /* If Backbutton is Posted */ if($s_action=="back"){ $base_back = preg_replace("/^[^,]+,/","",$conferencefilter['depselect']); $base_back = convert_department_dn($base_back); if(isset($this->config->departments[trim($base_back)])){ $conferencefilter['depselect']= $this->config->departments[trim($base_back)]; }else{ $conferencefilter['depselect']= $this->config->departments["/"]; } } register_global("conferencefilter",$conferencefilter); $this->reload(); /* Reset requested? */ if (isset($_POST['edit_cancel']) || isset($_POST['password_cancel'])){ if (isset($this->conftab)){ del_lock ($this->conftab->dn); unset ($this->conftab); } $this->conftab= NULL; $this->lognames= array();; $this->cn= ""; unset ($_SESSION['objectinfo']); } /* Delete Entry if Posted action (s_action) == del * The entry which will be deleted is defined in $s_entry */ if ($s_action =="del"){ $this->dn= $this->conferences[$s_entry]['dn']; /* Check locking */ if (($conf= get_lock($this->dn)) != ""){ $_SESSION['dn']= $this->dn; return(gen_locked_message($conf, $this->dn)); } else { add_lock ($this->dn, $this->ui->dn); $smarty->assign("info", sprintf(_("You're about to delete the whole LDAP subtree placed under '%s'."), $this->dn)); $display.= $smarty->fetch (get_template_path('remove.tpl', TRUE)); return ($display); } } /* If department deletion is accepted ... * Finally delete department */ if (isset($_POST['delete_department_confirm'])){ $acl= get_permissions ($this->dn, $this->ui->subtreeACL); $acl= get_module_permission($acl, "goFonConference", $this->dn); if (chkacl($acl, "all") == ""){ $this->remove_from_parent(); gosa_log ("Department object'".$this->dn."' has been removed"); $this->reload (); } else { print_red (_("You have no permission to remove this department.")); } } /* Edit Entry if Posted action (s_action) == edit * The entry which will be edited is defined in $s_entry */ if ($s_action=="edit"){ $this->dn= $this->conferences[$s_entry]['dn']; if (($conf= get_lock($this->dn)) != ""){ return(gen_locked_message ($conf, $this->dn)); } /* Lock the current entry, so everyone will get the above dialog */ add_lock ($this->dn, $this->ui->dn); /* Set up the users ACL's for this 'dn' */ $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); /* Register conftab to trigger edit dialog */ $this->conftab= new conferencetabs($this->config,$this->config->data['TABS']['CONFERENCETABS'], $this->dn); $this->conftab->set_acl(array(":all")); $_SESSION['objectinfo']= $this->dn; } /* Insert new entry*/ if($s_action == "new"){ $this->dn= "new"; $this->conftab= new conferencetabs($this->config,$this->config->data['TABS']['CONFERENCETABS'], $this->dn); $this->conftab->set_acl(array(':all')); } /* Edit finished, check and save changes */ if (isset($_POST['edit_finish'])){ /* Check tabs, will feed message array */ $this->conftab->last= $this->conftab->current; $this->conftab->save_object(); $message= $this->conftab->check(); if (count($message) == 0){ if($this->conftab->save() == 1){ gosa_log ("goFonConference object '".$this->dn."' saving failed."); return; } gosa_log ("goFonConference object '".$this->dn."' has been saved"); if ($this->dn != "new"){ del_lock ($this->dn); } $this->conftab->save (); unset ($this->conftab); $this->conftab= NULL; unset ($_SESSION['objectinfo']); } else { show_errors($message); } $this->reload(); } /* if edit or new, show dialog */ if($this->conftab){ $display= $this->conftab->execute(); /* Don't show buttons if tab dialog requests this */ if (!$this->conftab->by_object[$this->conftab->current]->dialog){ $display.= "

\n"; $display.= "\n"; $display.= " \n"; $display.= "\n"; $display.= "

"; } return ($display); } /* Header + Departmentlist*/ $options= ""; foreach ($this->config->idepartments as $key => $value){ if ($conferencefilter['depselect'] == $key){ $options.= ""; } else { $options.= ""; } } $listhead = "
". "  ". "  ". "  ". "  ". "  ". "  ". _("Current base")." ". "  ". "
"; /* Images for delete / edit */ $actions = ""; $actions.= ""; $actions2= ""; /* open an entry */ $linkopen= "%s"; /* Set Header */ $divlist = new divlist("conferenceTabs"); $divlist->SetSummary(_("This table displays all available conference rooms.")); $divlist->SetEntriesPerPage(20); $divlist->SetHeader(array( array("string" => " "), array("string" =>_("Name / nummer")), array("string" => _("Owner")), array("string" => _("PIN")), array("string" =>_("Actions"), "attach" => "style='text-align: right;border:none'"))); /* Insert departments in divlist*/ foreach($this->departments as $key=> $val){ if(!isset($this->config->departments[trim($key)])){ $this->config->departments[trim($key)]=""; } $non_empty=""; $keys= str_replace("/","\/",$key); foreach($this->config->departments as $keyd=>$vald ){ if(preg_match("/".$keys."\/.*/",$keyd)){ $non_empty="full"; } } /* Prepare and insert fields*/ $a_field1 = array("string" => "department","attach"=>"style='width:22px;'"); $a_field2 = array("string" => sprintf($linkopen,base64_encode($key),$val)); $a_field3 = array("string" => " "); $a_field4 = array("string" => " "); $a_field5 = array("string" => " ", "attach" => "style='text-align: right;border:none'"); /* Add entries */ $divlist->AddEntry(array($a_field1,$a_field2,$a_field3,$a_field4,$a_field5)); } /* Image shown in divlist */ $userimg = "User"; /* Edit entry link*/ $editlink = "%s"; /* Insert conferneces*/ foreach($this->conferences as $conferencekey => $conference ){ if((isset($conference['goFonPIN'][0]))&&($this->ui->dn==$conference['goFonConferenceOwner'][0])){ $pin = $conference['goFonPIN'][0]; }else{ $pin = " "; } if(isset($conference['telephoneNumber'][0])){ $number = " - ".$conference['telephoneNumber'][0]; }else{ $number = "  - ?"; } $ldap= $this->config->get_ldap_link(); $ldap->cd ($conference['goFonConferenceOwner'][0]); $data = $ldap->fetch($ldap->cat($conference['goFonConferenceOwner'][0])); $cn = $data['cn'][0]; $a_field1 = array("string"=>sprintf($userimg,_("Conference"))); $acl= get_permissions ($conference['dn'], $this->ui->subtreeACL); $this->acl = get_module_permission($acl, "goFonConference", $conference['dn']); if(($this->ui->dn==$conference['goFonConferenceOwner'][0])&&(chkacl($this->acl,"goFonConferenceOwner")=="")){ $a_field2 = array("string"=>sprintf($editlink,$conferencekey,$conference['cn'][0].$number)); }else{ $a_field2 = array("string"=>$conference['cn'][0].$number); } $a_field3 = array("string"=> $cn); $a_field4 = array("string"=> $pin); if(($this->ui->dn==$conference['goFonConferenceOwner'][0])&&(chkacl($this->acl,"goFonConferenceOwner")=="")){ $a_field5 = array("string"=>preg_replace("/%KEY%/",$conferencekey,$actions), "attach" => "style='text-align: right;border:none'"); }elseif(chkacl($this->acl,"goFonConferenceOwner")==""){ $a_field5 = array("string"=>preg_replace("/%KEY%/",$conferencekey,$actions2), "attach" => "style='text-align: right;border:none'"); }else{ $a_field5 = array("string"=>" ", "attach" => "style='text-align: right;border:none'"); } $divlist->AddEntry(array($a_field1,$a_field2,$a_field3,$a_field4,$a_field5)); } $smarty->assign("search_image", get_template_path('images/search.png')); $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/launch.png')); $smarty->assign("conferences", $divlist->DrawList()); $smarty->assign("conferencehead", $listhead); $smarty->assign("deplist", $this->config->idepartments); $smarty->assign("apply", apply_filter()); $smarty->assign("alphabet", generate_alphabet()); $smarty->assign("hint", print_sizelimit_warning()); $display= $smarty->fetch(get_template_path('headpage.tpl', TRUE)); return($display); } /* Reload entries for divlist. * First, reload all conferences for the current base, with the given regex * Second, get all departments for the given base and regex * Convert departments dn */ function reload() { $conferencefilter = $_SESSION["conferencefilter"]; $base = $conferencefilter['depselect']; $regex = $conferencefilter['regex']; $this->conferences=get_list($this->ui->subtreeACL, "(&(|(cn=$regex)(description=$regex))(objectClass=goFonConference))",FALSE, $base, array("*"), TRUE); $res3=get_list2($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))",TRUE, $base, array("ou", "description"), TRUE); $this->departments= array(); $tmp = array(); foreach ($res3 as $value){ $tmp[strtolower($value['dn']).$value['dn']]=$value; } ksort($tmp); foreach($tmp as $value){ if($value["description"][0]!=".."){ $this->departments[$value['dn']]=convert_department_dn2($value['dn'])." - [".$value["description"][0]."]"; }else{ $this->departments[$value['dn']]=$value["description"][0]; } } } function remove_from_parent() { $ldap= $this->config->get_ldap_link(); $ldap->cd ($this->dn); $ldap->recursive_remove(); /* Optionally execute a command after we're done */ $this->postremove(); /* Delete references to object groups */ $ldap->cd ($this->config->current['BASE']); $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); while ($ldap->fetch()){ $og= new conftab($this->config, $ldap->getDN()); unset($og->member[$this->dn]); $og->save (); } } function remove_lock() { if (isset($this->dn)){ del_lock ($this->dn); } } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>