X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fdepartments%2Fclass_departmentManagement.inc;h=2a1e2e523a85bdc5efbe9d061dff3a96d6cc2b7f;hb=68c8306203abd7ee288216ceed2c085ff3bf90ee;hp=8e34de931c9672c2a4f4d00817ac3a1922259b8a;hpb=e299f0ca47a924516f2afbe4e922f2418b75315c;p=gosa.git diff --git a/plugins/admin/departments/class_departmentManagement.inc b/plugins/admin/departments/class_departmentManagement.inc index 8e34de931..2a1e2e523 100644 --- a/plugins/admin/departments/class_departmentManagement.inc +++ b/plugins/admin/departments/class_departmentManagement.inc @@ -1,293 +1,451 @@ "Eins ist toll", "zwei" => "Zwei ist noch besser"); - - /* Headpage attributes */ - var $last_dep_sorting= "invalid"; - var $departments= array(); - var $deptabs= NULL; - - /* attribute list for save action */ - var $attributes= array(); - var $objectclasses= array(); - - function departmentManagement ($config, $ui) - { - $this->ui= $ui; - $this->dn= ""; - $this->config= $config; - - /* Get global filter config */ - if (!is_global("depfilter")){ - $base= get_base_from_people($ui->dn); - $depfilter= array("depselect" => $base, - "regex" => "*"); - register_global("depfilter", $depfilter); - } - } - - function execute() - { - /* Reload departments */ - $this->config->departments= get_departments(); - $this->config->make_idepartments(); - $smarty= get_smarty(); - - /* Save data */ - $depfilter= get_global("depfilter"); - foreach( array("depselect", "regex") as $type){ - if (isset($_POST[$type])){ - $depfilter[$type]= $_POST[$type]; - } - } - if (isset($_GET['search'])){ - $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; - if ($s == "**"){ - $s= "*"; - } - $depfilter['regex']= $s; - } - register_global("depfilter", $depfilter); - - - /* Create new department? */ - if (isset($_POST['new_department'])){ - $this->acl= array(":all"); - $this->dn= "new"; - - /* Register deptabs to trigger edit dialog */ - $this->deptabs= new deptabs($this->config, - $this->config->data['TABS']['DEPTABS'], $this->dn); - $this->deptabs->set_acl($this->acl); + /* Definitions */ + var $plHeadline= "Departments"; + var $plDescription= "This does something"; + + /* CLI vars */ + var $cli_summary= "Handling of LDAP subtrees"; + var $cli_description= "Some longer text\nfor help"; + var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* Headpage attributes */ + var $last_dep_sorting= "invalid"; + var $departments= array(); + var $deptabs= NULL; + + /* attribute list for save action */ + var $attributes= array(); + var $objectclasses= array(); + + function departmentManagement ($config, $ui) + { + $this->ui= $ui; + $this->dn= ""; + $this->config= $config; + + /* Get global filter config */ + if (!is_global("depfilter")){ + $base= get_base_from_people($ui->dn); + $depfilter= array("depselect" => $base, + "regex" => "*"); + register_global("depfilter", $depfilter); + } } - /* Edit existing department */ - if ((isset($_POST['select_department']) || (isset($_POST['edit_helper']) && $_POST['edit_helper'] == "1")) && isset($_POST['deplist']) != ""){ - $this->dn= $this->config->departments[trim($_POST['deplist'])]; + function execute() + { + /* Call parent execute */ + plugin::execute(); + + /* Reload departments */ + $this->config->departments = get_departments(); + $smarty = get_smarty(); + $display = ""; + $depfilter = get_global("depfilter"); + $s_action = ""; // Will contain an action, like del or edit + $s_entry = ""; // The entry name for edit delete -... + + $this->config->make_idepartments(); + + if (isset($_POST['regex'])){ + $depfilter['regex']= $_POST['regex']; + } - /* Check locking, save current plugin in 'back_plugin', so - the dialog knows where to return. */ - if (($user= get_lock($this->dn)) != ""){ - return(gen_locked_message ($user, $this->dn)); + // Check Post action + foreach($_POST as $key => $val){ + // Post for delete + if(preg_match("/dep_del.*/",$key)){ + $s_action = "del"; + $s_entry = preg_replace("/dep_".$s_action."_/i","",$key); + $s_entry = preg_replace("/_.*$/","",$s_entry); + $s_entry = base64_decode($s_entry); + // Post for edit + }elseif(preg_match("/dep_edit_.*/",$key)){ + $s_action="edit"; + $s_entry = preg_replace("/dep_".$s_action."_/i","",$key); + $s_entry = preg_replace("/_.*$/","",$s_entry); + $s_entry = base64_decode($s_entry); + // Post for new + }elseif(preg_match("/dep_new.*/",$key)){ + $s_action="new"; + }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"; + } + } - /* Lock the current entry, so everyone will get the - above dialog */ - add_lock ($this->dn, $this->ui->dn); + if(isset($_POST['depselect']) && $_POST['depselect']){ + $depfilter['depselect']= $_POST['depselect']; + } + + if($s_action=="root"){ + $depfilter['depselect']=($this->config->current['BASE']); + } - /* Set up the users ACL's for this 'dn' */ - $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); + if($s_action=="home"){ + $depfilter['depselect']=(preg_replace("/^[^,]+,/","",$this->ui->dn)); + $depfilter['depselect']=(preg_replace("/^[^,]+,/","",$depfilter['depselect'])); + } - /* Register deptabs to trigger edit dialog */ - $this->deptabs= new deptabs($this->config, - $this->config->data['TABS']['DEPTABS'], $this->dn); - $this->deptabs->set_acl($this->acl); - $_SESSION['objectinfo']= $this->dn; - } + if($s_action=="back"){ + $base_back = preg_replace("/^[^,]+,/","",$depfilter['depselect']); + $base_back = convert_department_dn($base_back); + + if(isset($this->config->departments[trim($base_back)])){ + $depfilter['depselect']= $this->config->departments[trim($base_back)]; + }else{ + $depfilter['depselect']= $this->config->departments["/"]; + } + } + if(isset($_GET['act'])&&($_GET['act']=="dep_open")){ + $s_action="open"; + $s_entry = base64_decode($_GET['dep_id']); + $depfilter['depselect']= $this->config->departments[trim($s_entry)]; + } - /* Delete requested department */ - $display= ""; - if (isset($_POST['delete_department']) && isset($_POST['deplist'])){ - $this->dn= $this->config->departments[trim($_POST['deplist'])]; + if (isset($_GET['search'])){ + $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; + if ($s == "**"){ + $s= "*"; + } + $depfilter['regex']= $s; + } + register_global("depfilter", $depfilter); + + /* New Entry if Posted action (s_action) == new + */ + if ($s_action=="new"){ + $this->dn= "new"; + $this->deptabs= new deptabs($this->config, + $this->config->data['TABS']['DEPTABS'], $this->dn); + } - /* Check locking */ - if (($user= get_lock($this->dn)) != ""){ - $_SESSION['dn']= $this->dn; - return(gen_locked_message($user, $this->dn)); - } else { - # Lock this dn for editing + /* 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->config->departments[trim($s_entry)]; + + if (($user= get_lock($this->dn)) != ""){ + return(gen_locked_message ($user, $this->dn)); + } + + /* Lock the current entry, so everyone will get the above dialog */ 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); - } - } + /* Set up the users ACL's for this 'dn' */ + $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); - /* Finally delete department */ - if (isset($_POST['delete_department_confirm'])){ - $acl= get_permissions ($this->dn, $this->ui->subtreeACL); - $acl= get_module_permission($acl, "department", $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.")); + /* Register deptabs to trigger edit dialog */ + $this->deptabs= new deptabs($this->config,$this->config->data['TABS']['DEPTABS'], $this->dn); + $this->deptabs->set_acl($this->acl); + $_SESSION['objectinfo']= $this->dn; } - } - /* Finish request */ - if (isset($_POST['edit_finish'])){ + /* 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->config->departments[trim($s_entry)]; + + /* Check locking */ + if (($user= get_lock($this->dn)) != ""){ + $_SESSION['dn']= $this->dn; + return(gen_locked_message($user, $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'."), LDAP::fix($this->dn))); + $display.= $smarty->fetch (get_template_path('remove.tpl', TRUE)); + return ($display); + } + } - /* Check tabs, will feed message array */ - $message= $this->deptabs->check(); + /* 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, "department", $this->dn); + if (chkacl($acl, "delete") == ""){ + $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.")); + } + } - /* Save, or display error message? */ - if (count($message) == 0){ + /* Edit Complete ... + * Finish request + */ + if (isset($_POST['edit_finish'])){ + + /* Check tabs, will feed message array */ + $message= $this->deptabs->check(); + + /* Save, or display error message? */ + if (count($message) == 0){ + + /* Save user data to ldap */ + $this->deptabs->save(); + gosa_log ("Department object'".$this->dn."' has been saved"); + + /* Group has been saved successfully, remove lock from + LDAP. */ + if ($this->dn != "new"){ + del_lock ($this->dn); + } + + /* There's no page reload so we have to read new users at + this point. */ + $this->reload (); + unset ($this->deptabs); + $this->deptabs= NULL; + unset ($_SESSION['objectinfo']); + + } else { + /* Ok. There seem to be errors regarding to the tab data, + show message and continue as usual. */ + show_errors($message); + } + } - /* Save user data to ldap */ - $this->deptabs->save(); - gosa_log ("Department object'".$this->dn."' has been saved"); - /* Group has been saved successfully, remove lock from - LDAP. */ - if ($this->dn != "new"){ - del_lock ($this->dn); - } + /* User cancelt edit oder delete + * Cancel dialog + */ + if (isset($_POST['edit_cancel']) || isset($_POST['delete_cancel']) || + isset($_POST['delete_department_confirm']) || isset($_POST['delete_lock'])){ - /* There's no page reload so we have to read new users at - this point. */ - $this->reload (); - unset ($this->deptabs); - $this->deptabs= NULL; + del_lock ($this->dn); + unset($this->depdabs); + $this->deptabs= NULL; unset ($_SESSION['objectinfo']); + } - } else { - /* Ok. There seem to be errors regarding to the tab data, - show message and continue as usual. */ - show_errors($message); - } - } + /* Headpage or normal plugin screen? */ + if ($this->deptabs == NULL){ + /* Check sorting variable */ + $this->reload(); + + /* Check for exeeded sizelimit */ + if (($message= check_sizelimit()) != ""){ + return($message); + } + + /* Prepare departments */ + $options= ""; + foreach ($this->config->idepartments as $key => $value){ + if ($depfilter['depselect'] == $key){ + $options.= ""; + } else { + $options.= ""; + } + } + + /* Generate list head */ + $listhead = "
". + "  ". + "  ". + "  ". + "  ". + "  ". + "  ". + _("Base")." ". + "  ". + "
"; + + /* Show main page */ + $divlist = new divlist("departmenttabs"); + $divlist->SetSummary(_("This table displays all departments, in the selected tree.")); + $divlist->SetEntriesPerPage(0); + $actions= ""; + $actions.= ""; + + $linkopen = "%s"; + + $divlist->SetHeader(array( + array("string" => " ", "attach" => "style='text-align:center;width:20px;'"), + array("string"=>_("Department name"), "attach" => "style=''"), + array("string" =>_("Actions"), "attach" => "style='width:60px;border-right:0px;text-align:right;'"))); + + 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"; + } + } + + $title = $this->config->departments[$key]; + $field0 = array("string" => "department", "attach" => "style='text-align:center;width:20px;'"); + $field1 = array("string" => sprintf($linkopen,base64_encode($key),$val), "attach" => "style='' title='".$title."'"); + $field2 = array("string" => preg_replace("/%KEY%/", base64_encode($key), $actions), "attach" => "style='width:60px;border-right:0px;text-align:right;'"); + + $divlist->AddEntry( array($field0,$field1,$field2)); + + } + $smarty->assign("departments",$divlist->DrawList() ); + $smarty->assign("departmentshead",$listhead); + $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("deplist", $this->config->idepartments); + + foreach( array("depselect", "regex") as $type){ + $smarty->assign("$type", $depfilter[$type]); + } + + /* Extend if we are not using javascript */ + $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); + } + + /* Show main page (tabs) */ + $display= $this->deptabs->execute(); - /* Cancel dialog */ - if (isset($_POST['edit_cancel']) || isset($_POST['delete_cancel']) || - isset($_POST['delete_department_confirm']) || isset($_POST['delete_lock'])){ + $display.= "

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

"; - del_lock ($this->dn); - unset($this->depdabs); - $this->deptabs= NULL; - unset ($_SESSION['objectinfo']); + return ($display); } - /* Headpage or normal plugin screen? */ - if ($this->deptabs == NULL){ - /* Check sorting variable */ - $this->reload(); - - /* Check for exeeded sizelimit */ - if (($message= check_sizelimit()) != ""){ - return($message); - } - - /* Show main page */ - $smarty->assign("departments", $this->departments); - $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("deplist", $this->config->idepartments); - foreach( array("depselect", "regex") as $type){ - $smarty->assign("$type", $depfilter[$type]); - } + function reload() + { + /* Get config */ + $depfilter= get_global('depfilter'); + // Added for dirlist function... - /* Extend if we are not using javascript */ - $smarty->assign("apply", apply_filter()); - $smarty->assign("alphabet", generate_alphabet()); - $smarty->assign("hint", print_sizelimit_warning()); + if(isset($_POST['deplist'])){ + $depfilter= get_global("depfilter"); + $depfilter['depselect']= $this->config->departments[trim($_POST['deplist'])]; + register_global("depfilter", $depfilter); + } - $display= $smarty->fetch(get_template_path('headpage.tpl', TRUE)); - return($display); - } + /* Set base for all searches */ + $base= $depfilter['depselect']; - /* Show main page (tabs) */ - $display= $this->deptabs->execute(); + /* Regex filter? */ + if ($depfilter['regex'] != ""){ + $regex= $depfilter['regex']; + } else { + $regex= "*"; + } - $display.= "

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

"; + // Configure Back Address + $base_back = preg_replace("/^[^,]+,/","",$base); - return ($display); - } + // Create Array to Test if we have a valid back button + $tmp = array_flip($_SESSION['config']->departments); + // In case of a valid back button create entry + if(isset($tmp[$base_back])){ + $tmp2 ['dn'] = convert_department_dn($base_back); - function reload() - { - /* Get config */ - $depfilter= get_global('depfilter'); + // If empty always go to top + if(empty($tmp2['dn'])){ + $tmp2['dn']="/"; + } + $tmp2 ['description'][0] = _(".."); + $result[$tmp[$base_back]]=$tmp2; + } - /* Set base for all searches */ - $base= $depfilter['depselect']; + $res= get_list2($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", + TRUE, $base, array("ou", "description"), TRUE); + + //hickert Replaced Block + // $this->departments= array(); + // foreach ($res as $value){ + // $title= convert_department_dn($value["dn"]); + // $this->departments[$title]= "$title [".$value["description"][0]."]"; + // $this->departments[$value['dn']]= "[".$value["description"][0]."]"; + // } + + $this->departments= array(); + foreach ($res as $value){ + if(isset($value["description"][0])){ + $this->departments[$value['dn']]= convert_department_dn2($value['dn'])." - [".$value["description"][0]."]"; + }else{ + $this->departments[$value['dn']]= convert_department_dn2($value['dn']);//$value["description"][0]; + } + } + natcasesort ($this->departments); + reset ($this->departments); - /* Regex filter? */ - if ($depfilter['regex'] != ""){ - $regex= $depfilter['regex']; - } else { - $regex= "*"; - } + /* Unset global department list */ + unset($_SESSION['cached_departments']); + } - /*Get all gosaDepartments */ - $res= get_list($this->ui->subtreeACL, "(&(|(ou=$regex)(description=$regex))(objectClass=gosaDepartment))", TRUE, $base, array("ou", "description"), TRUE); + 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 ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } - $this->departments= array(); - foreach ($res as $value){ - $title= convert_department_dn($value["dn"]); - $this->departments[$title]= "$title [".$value["description"][0]."]"; } - natcasesort ($this->departments); - reset ($this->departments); - } - - 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 ogroup($this->config, $ldap->getDN()); - unset($og->member[$this->dn]); - $og->save (); - } - - } - - function remove_lock() - { - if (isset($this->dn)){ - del_lock ($this->dn); + + function remove_lock() + { + if (isset($this->dn)){ + del_lock ($this->dn); + } } - } -} + } -?> + ?>