X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fplugins%2Fadmin%2Fogroups%2Ftabs_ogroups.inc;h=bea1067d843ef66cfd6ef26bf4e66d62154df018;hb=933ecbdd14e8e3ce99ca2f57731549304dfdd7b7;hp=e5654cd7342dfb9f4b180075b42eab2d3d209c2b;hpb=3cee55fb7c60f702660ac0066cee99148e6e13fd;p=gosa.git diff --git a/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc b/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc index e5654cd73..bea1067d8 100644 --- a/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc +++ b/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc @@ -25,73 +25,98 @@ class ogrouptabs extends tabs var $base= ""; var $acl_category; - function reload($dd){ - $objects= preg_replace('/[\[\]]/', '', $dd); - + function reload($dd) + { + $objects = preg_replace('/[\[\]]/', '', $dd); + + /* Check if we have a group with a set different mixed objects. + */ + $mixed_type = FALSE; + for($i = 0 ; $i < (strlen($objects) -1 );$i++){ + $mixed_type |= $objects[$i] != $objects[($i+1)]; + } + /* If there is a phonequeue, * but there is no user left with goPhoneAccount ... remove it. */ $usePhoneTab = false; - foreach($this->by_object['ogroup']->memberList as $dn => $val){ + if(class_available("phonequeue")){ - if(isset($this->by_object['ogroup']->objcache[$dn])){ - $obj = $this->by_object['ogroup']->objcache[$dn]; - if(isset($obj['objectClass'])){ - if(in_array("goFonAccount",$obj['objectClass'])){ - $usePhoneTab = true; + foreach($this->by_object['ogroup']->memberList as $dn => $val){ + if(isset($this->by_object['ogroup']->objcache[$dn])){ + $obj = $this->by_object['ogroup']->objcache[$dn]; + if(isset($obj['objectClass'])){ + if(in_array("goFonAccount",$obj['objectClass'])){ + $usePhoneTab = true; + } } } } - } - - if(class_available("phonequeue")){ - if(((!$usePhoneTab)&&(isset($this->by_object['phonequeue'])))||((!preg_match("/U/",$objects))&&(isset($this->by_object['phonequeue'])))){ + if((!$usePhoneTab && isset($this->by_object['phonequeue']))|| + (!preg_match("/U/",$objects) && isset($this->by_object['phonequeue']))){ $this->by_object['phonequeue']->remove_from_parent(); unset($this->by_object['phonequeue']); unset($this->by_name['phonequeue']); } } - /* Remove mail group if there is no user anymore */ + + /* Remove mail group if there is no user anymore + */ if(class_available("mailogroup")){ - if((!preg_match("/U/",$objects))&&(isset($this->by_object['mailogroup']))){ + if(!preg_match("/U/",$objects) && isset($this->by_object['mailogroup'])){ $this->by_object['mailogroup']->remove_from_parent(); unset($this->by_object['mailogroup']); unset($this->by_name['mailogroup']); } } - /* Remove terminal group, if theres no terminal left in the object list */ + /* Remove terminal group, if theres no terminal left in the object list + */ if(class_available("termgroup")){ - if(((!preg_match("/T/",$objects)) && (!preg_match("/W/",$objects)))&&(isset($this->by_object['termgroup']))){ + if(($mixed_type && isset($this->by_object['termgroup'])) || + !preg_match("/T/",$objects) && !preg_match("/W/",$objects) && isset($this->by_object['termgroup'])){ $this->by_object['termgroup']->remove_from_parent(); unset($this->by_object['termgroup']); unset($this->by_name['termgroup']); } } if(class_available("termservice")){ - if(!preg_match("/T/",$objects) &&(isset($this->by_object['termservice']))){ + if(($mixed_type && isset($this->by_object['termservice'])) || + !preg_match("/T/",$objects) &&(isset($this->by_object['termservice']))){ $this->by_object['termservice']->remove_from_parent(); unset($this->by_object['termservice']); unset($this->by_name['termservice']); } } + if(class_available("termstartup")){ + if(($mixed_type && isset($this->by_object['termstartup'])) || + !preg_match("/T/",$objects)&&(isset($this->by_object['termstartup']))){ + $this->by_object['termstartup']->remove_from_parent(); + unset($this->by_object['termstartup']); + unset($this->by_name['termstartup']); + } + } /* Remove ws tabs, if theres no ws left in the object list */ if(class_available("workservice")){ - if((!preg_match("/W/",$objects))&&(isset($this->by_object['workservice']))){ + if(($mixed_type && isset($this->by_object['workservice'])) || + (!preg_match("/W/",$objects))&&(isset($this->by_object['workservice']))){ $this->by_object['workservice']->remove_from_parent(); unset($this->by_object['workservice']); unset($this->by_name['workservice']); } } if(class_available("workstartup")){ - if((!preg_match("/S/",$objects) && !preg_match("/W/",$objects))&&(isset($this->by_object['workstartup']))){ + if(($mixed_type && isset($this->by_object['workstartup'])) || + (!preg_match("/S/",$objects) && !preg_match("/W/",$objects))&&(isset($this->by_object['workstartup']))){ $this->by_object['workstartup']->remove_from_parent(); unset($this->by_object['workstartup']); unset($this->by_name['workstartup']); - $this->by_object['faiSummary']->remove_from_parent(); - unset($this->by_object['faiSummary']); - unset($this->by_name['faiSummary']); + if (isset($this->by_object['faiSummary'])){ + $this->by_object['faiSummary']->remove_from_parent(); + unset($this->by_object['faiSummary']); + unset($this->by_name['faiSummary']); + } } } @@ -101,10 +126,8 @@ class ogrouptabs extends tabs if(class_available("phonequeue")){ if(!isset($this->by_object['phonequeue'])){ foreach($this->by_object['ogroup']->memberList as $dn => $val){ - if(isset($this->by_object['ogroup']->objcache[$dn])){ $obj = $this->by_object['ogroup']->objcache[$dn]; - if(isset($obj['objectClass'])){ if(in_array("goFonAccount",$obj['objectClass'])){ $this->by_name['phonequeue']= _("Phone queue"); @@ -121,19 +144,18 @@ class ogrouptabs extends tabs /* Add mail group tab , if there is curerntly no mail tab defined */ if(class_available("mailogroup")){ if((preg_match("/U/",$objects))&&(!isset($this->by_object['mailogroup']))){ - if(isset($this->config->current['MAILMETHOD'])){ - if (preg_match('/kolab/i', $this->config->current['MAILMETHOD'])){ - $this->by_name['mailogroup']= _("Mail"); - $this->by_object['mailogroup']= new mailogroup($this->config, $this->dn); - $this->by_object['mailogroup']->parent= &$this; - } + if ($this->config->get_cfg_value("mailmethod") == "kolab"){ + $this->by_name['mailogroup']= _("Mail"); + $this->by_object['mailogroup']= new mailogroup($this->config, $this->dn); + $this->by_object['mailogroup']->parent= &$this; } } } /* Add Terminal tab */ if(class_available("termgroup")){ - if(((preg_match("/T/",$objects)) || (preg_match("/W/",$objects)))&&(!isset($this->by_object['termgroup']))){ + if(!$mixed_type && + ((preg_match("/T/",$objects)) || (preg_match("/W/",$objects)))&&(!isset($this->by_object['termgroup']))){ if(!isset($this->by_object['termgroup'])){ $this->by_name['termgroup']= _("Systems"); $this->by_object['termgroup']= new termgroup($this->config, $this->dn); @@ -142,25 +164,41 @@ class ogrouptabs extends tabs } } } - if(class_available("termservice")){ + if(class_available("termstartup")){ + if(!$mixed_type && + preg_match("/T/",$objects) &&(!isset($this->by_object['termstartup']))){ + if(!isset($this->by_object['termstartup'])){ + $this->by_name['termstartup']= _("Startup"); + $this->by_object['termstartup']= new termstartup($this->config, $this->dn,$this->by_object['ogroup']); + $this->by_object['termstartup']->parent= &$this; + $this->by_object['termstartup']->acl = "#all#"; + } + } + } + if(!$mixed_type && + class_available("termservice")){ if(preg_match("/T/",$objects) &&(!isset($this->by_object['termservice']))){ if(!isset($this->by_object['termservice'])){ $this->by_name['termservice']= _("Devices"); $this->by_object['termservice']= new termservice($this->config, $this->dn,$this->by_object['ogroup']); + $this->by_object['termservice']->parent= &$this; + $this->by_object['termservice']->acl = "#all#"; } } } /* Add Workstation tabs */ if(class_available("workstartup")){ - if((preg_match("/S/",$objects) || preg_match("/W/",$objects))&&(!isset($this->by_object['workstartup']))){ + if(!$mixed_type && + (preg_match("/S/",$objects) || preg_match("/W/",$objects))&&(!isset($this->by_object['workstartup']))){ $this->by_name['workstartup']= _("Startup"); $this->by_object['workstartup']= new workstartup($this->config, $this->dn); $this->by_object['workstartup']->parent= &$this; $this->by_object['workstartup']->acl = "#all#"; } } - if(class_available("workservice")){ + if(!$mixed_type && + class_available("workservice")){ if((preg_match("/W/",$objects))&&(!isset($this->by_object['workservice']))){ $this->by_name['workservice']= _("Devices"); $this->by_object['workservice']= new workservice($this->config, $this->dn); @@ -170,32 +208,14 @@ class ogrouptabs extends tabs } } if(class_available("faiSummary")){ - if((preg_match("/S/",$objects) || preg_match("/W/",$objects))&&(!isset($this->by_object['faiSummary']))){ + if(!$mixed_type && + (preg_match("/S/",$objects) || preg_match("/W/",$objects))&&(!isset($this->by_object['faiSummary']))){ $this->by_name['faiSummary']= _("FAI summary"); $this->by_object['faiSummary']= new faiSummaryTab($this->config, $this->dn); $this->by_object['faiSummary']->parent= &$this; } } - /* Add application tab if user or group is member in this object group*/ - if(class_available("appgroup")){ - if((preg_match("/G/",$objects) || preg_match("/U/",$objects)) && !isset($this->by_name['appgroup'])){ - $this->by_name['appgroup']= _("Application"); - $this->by_object['appgroup']= new appgroup($this->config, $this->dn); - $this->by_object['appgroup']->acl = "#all#"; - $this->by_object['appgroup']->parent= &$this; - } - } - - /* Remove application tab if not required any longer */ - if(class_available("appgroup")){ - if(!preg_match("/G/",$objects) && !preg_match("/U/",$objects) && isset($this->by_name['appgroup'])){ - $this->by_object['appgroup']->remove_from_parent(); - unset($this->by_name['appgroup']); - unset($this->by_object['appgroup']); - } - } - /* Add environment tab if user or group is member in this object group*/ if(class_available("environment")){ if((preg_match("/G/",$objects) || preg_match("/U/",$objects)) && !isset($this->by_name['environment'])){ @@ -214,6 +234,26 @@ class ogrouptabs extends tabs unset($this->by_object['environment']); } } + + /* Add application tab if user or group is member in this object group*/ + if(class_available("appgroup")){ + if((preg_match("/G/",$objects) || preg_match("/U/",$objects)) && !isset($this->by_name['appgroup'])){ + $this->by_name['appgroup']= _("Applications"); + $this->by_object['appgroup']= new appgroup($this->config, $this->dn); + $this->by_object['appgroup']->acl = "#all#"; + $this->by_object['appgroup']->parent= &$this; + } + } + + /* Remove application tab if not required any longer */ + if(class_available("appgroup")){ + if(!preg_match("/G/",$objects) && !preg_match("/U/",$objects) && isset($this->by_name['appgroup'])){ + $this->by_object['appgroup']->remove_from_parent(); + unset($this->by_name['appgroup']); + unset($this->by_object['appgroup']); + } + } + /* Move reference tab to second position from right */ if(class_available("acl")){ if(isset($this->by_name['acl'])){ @@ -232,7 +272,11 @@ class ogrouptabs extends tabs } /* Reset acls */ - $this->set_acl_base($this->base); + if($this->dn == "new"){ + $this->set_acl_base($this->base); + }else{ + $this->set_acl_base($this->dn); + } foreach($this->by_object as $name => $obj){ $this->by_object[$name]->set_acl_category($this->acl_category); } @@ -247,72 +291,13 @@ class ogrouptabs extends tabs return ( $str); } - function ogrouptabs($config, $data, $dn,$category ="ogroups") + function ogrouptabs($config, $data, $dn,$category ="ogroups",$hide_refs = FALSE, $hide_acls = FALSE) { - tabs::tabs($config, $data, $dn, $category); + tabs::tabs($config, $data, $dn, $category,$hide_refs, $hide_acls); $this->base= $this->by_object['ogroup']->base; $this->acl_category = $category; - /* Insert extra tabs for several object types - if present */ - - $objects= preg_replace('/[\[\]]/', '', $this->by_object['ogroup']->gosaGroupObjects); - - for ($n= 0; $nby_name['termgroup']= _("Terminals"); - $this->by_object['termgroup']= new termgroup($this->config, $this->dn); - $this->by_object['termgroup']->parent= &$this; - } - - if(class_available("termservice")){ - $this->by_name['termservice']= _("Devices"); - $this->by_object['termservice']= new termservice($this->config, $this->dn,$this->by_object['ogroup']); - } - break; - - case "U": - /* Append a PhoneQueue, if objectClass = goFonAccount */ - $use = false; - - /* We found goFonAccount in users objectClasses*/ - if(class_available("phonequeue")){ - foreach($this->by_object['ogroup']->memberList as $dn => $val){ - - $obj = $this->by_object['ogroup']->objcache[$dn]; - - if(isset($obj['objectClass'])){ - if(in_array("goFonAccount",$obj['objectClass'])){ - $use = true; - } - } - } - - if($use){ - $this->by_name['phonequeue']= _("Phone queue"); - $this->by_object['phonequeue']= new phonequeue($this->config, $this->dn); - $this->by_object['phonequeue']->parent= &$this; - } - } - - /* Add a user tab used for mail distribution lists */ - if(class_available("mailogroup")){ - if(isset($this->config->current['MAILMETHOD'])){ - if (preg_match('/kolab/i', $this->config->current['MAILMETHOD'])){ - $this->by_name['mailogroup']= _("Mail"); - $this->by_object['mailogroup']= new mailogroup($this->config, $this->dn); - $this->by_object['mailogroup']->parent= &$this; - } - } - } - - break; - } - } - /* Add references/acls/snapshots */ $this->reload($this->by_object['ogroup']->gosaGroupObjects); $this->addSpecialTabs(); @@ -355,10 +340,10 @@ class ogrouptabs extends tabs /* Check for new 'dn', in order to propagate the 'dn' to all plugins */ - $new_dn= 'cn='.$baseobject->cn.','.get_ou('ogroupou').$baseobject->base; + $new_dn= 'cn='.$baseobject->cn.','.get_ou('ogroupRDN').$baseobject->base; /* Move group? */ - if ($this->dn != $new_dn){ + if (LDAP::fix($this->dn) != LDAP::fix($new_dn)){ /* Write entry on new 'dn' */ if ($this->dn != "new"){ @@ -371,7 +356,7 @@ class ogrouptabs extends tabs } if ($this->dn == "new"){ - $this->dn= 'cn='.$baseobject->cn.','.get_ou('ogroupou').$baseobject->base; + $this->dn= 'cn='.$baseobject->cn.','.get_ou('ogroupRDN').$baseobject->base; } tabs::save();