summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7f08ea5)
raw | patch | inline | side by side (parent: 7f08ea5)
author | psc <psc@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 26 Feb 2010 12:35:17 +0000 (12:35 +0000) | ||
committer | psc <psc@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 26 Feb 2010 12:35:17 +0000 (12:35 +0000) |
- When removing members from an object group do not immediately remove
the tab objects. Instead stage them for removal (and unstage them
if an according member is added) and delete them on save. This
way we can avoid a bug where objects get changed although one
decides to cancel editting an object group.
- Fix the remove_from_parent functions in several classes so
that removing objects from object groups can actually remove
the attributes from the LDAP.
- Only delete attributes from LDAP if not all members are beeing
removed.
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.6-lhm@15748 594d385d-05f5-0310-b6e9-bd551577e9d8
the tab objects. Instead stage them for removal (and unstage them
if an according member is added) and delete them on save. This
way we can avoid a bug where objects get changed although one
decides to cancel editting an object group.
- Fix the remove_from_parent functions in several classes so
that removing objects from object groups can actually remove
the attributes from the LDAP.
- Only delete attributes from LDAP if not all members are beeing
removed.
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.6-lhm@15748 594d385d-05f5-0310-b6e9-bd551577e9d8
diff --git a/trunk/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc b/trunk/gosa-core/plugins/admin/ogroups/tabs_ogroups.inc
index 8bf9f7eaecec9d2666ad8b5acbd86cb57067fdd9..3794fc6e24e44fc79230803eb0ee6207bf3f138c 100644 (file)
{
var $base= "";
var $acl_category;
-
+ var $to_remove=array();
+
+ /*! \brief Stage an object for removal */
+ function remove($object) {
+ if (!isset($this->to_remove[$object])) {
+ $this->to_remove[$object] = $this->by_object[$object];
+ unset($this->by_object[$object]);
+ }
+ }
+
+ /*! \brief Unstage an object from removal */
+ function add($object) {
+ if (isset($this->to_remove[$object])) {
+ unset($this->to_remove[$object]);
+ }
+ }
+
function reload($dd)
{
$objects = preg_replace('/[\[\]]/', '', $dd);
}
if((!$usePhoneTab && isset($this->by_object['phonequeue']))||
(!preg_match("/U/",$objects) && isset($this->by_object['phonequeue']))){
- $this->by_object['phonequeue']->remove_from_parent();
+ $this->remove('phonequeue');
unset($this->by_object['phonequeue']);
unset($this->by_name['phonequeue']);
}
*/
if(class_available("mailogroup")){
if(!preg_match("/U/",$objects) && isset($this->by_object['mailogroup'])){
- $this->by_object['mailogroup']->remove_from_parent();
+ $this->remove('mailogroup');
unset($this->by_object['mailogroup']);
unset($this->by_name['mailogroup']);
}
if(class_available("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();
+ $this->remove('termgroup');
unset($this->by_object['termgroup']);
unset($this->by_name['termgroup']);
}
if(class_available("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();
+ $this->remove('termservice');
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();
+ $this->remove('termstartup');
unset($this->by_object['termstartup']);
unset($this->by_name['termstartup']);
}
if(class_available("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();
+ $this->remove('workservice');
unset($this->by_object['workservice']);
unset($this->by_name['workservice']);
}
if(class_available("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();
+ $this->remove('workstartup');
unset($this->by_object['workstartup']);
unset($this->by_name['workstartup']);
if (isset($this->by_object['faiSummary'])){
- $this->by_object['faiSummary']->remove_from_parent();
unset($this->by_object['faiSummary']);
unset($this->by_name['faiSummary']);
}
$this->by_name['phonequeue']= _("Phone queue");
$this->by_object['phonequeue']= new phonequeue($this->config, $this->dn);
$this->by_object['phonequeue']->parent= &$this;
+ $this->add('phonequeue');
break;
}
}
$this->by_name['mailogroup']= _("Mail");
$this->by_object['mailogroup']= new mailogroup($this->config, $this->dn);
$this->by_object['mailogroup']->parent= &$this;
+ $this->add('mailogroup');
}
}
}
$this->by_object['termgroup']= new termgroup($this->config, $this->dn);
$this->by_object['termgroup']->inheritTimeServer = false;
$this->by_object['termgroup']->parent= &$this;
+ $this->add('termgroup');
}
}
}
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#";
+ $this->by_object['termstartup']->parent= &$this;
+ $this->by_object['termstartup']->acl = "#all#";
+ $this->add('termstartup');
}
}
}
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#";
+ $this->by_object['termservice']->parent= &$this;
+ $this->by_object['termservice']->acl = "#all#";
+ $this->add('termservice');
}
}
}
$this->by_object['workstartup']= new workstartup($this->config, $this->dn);
$this->by_object['workstartup']->parent= &$this;
$this->by_object['workstartup']->acl = "#all#";
+ $this->add("workstartup");
}
}
if(!$mixed_type &&
$this->by_object['workservice']->inheritTimeServer = false;
$this->by_object['workservice']->parent= &$this;
$this->by_object['workservice']->acl = "#all#";
+ $this->add("workservice");
}
}
if(class_available("faiSummary")){
$this->by_name['faiSummary']= _("FAI summary");
$this->by_object['faiSummary']= new faiSummaryTab($this->config, $this->dn);
$this->by_object['faiSummary']->parent= &$this;
+ $this->add("faiSummary");
}
}
$this->by_object['environment']= new environment($this->config, $this->dn);
$this->by_object['environment']->acl = "#all#";
$this->by_object['environment']->parent= &$this;
+ $this->add("environment");
}
}
/* Remove environment tab if not required any longer */
if(class_available("environment")){
if(!preg_match("/G/",$objects) && !preg_match("/U/",$objects) && isset($this->by_name['environment'])){
- $this->by_object['environment']->remove_from_parent();
+ $this->remove("environment");
unset($this->by_name['environment']);
unset($this->by_object['environment']);
}
$this->by_object['appgroup']= new appgroup($this->config, $this->dn);
$this->by_object['appgroup']->acl = "#all#";
$this->by_object['appgroup']->parent= &$this;
+ $this->add('appgroup');
}
}
/* 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();
+ $this->remove('appgroup');
unset($this->by_name['appgroup']);
unset($this->by_object['appgroup']);
}
$this->dn= 'cn='.$baseobject->cn.','.get_ou('ogroupRDN').$baseobject->base;
}
+ /* Only delete attributes if there are members left */
+ if (count($this->by_object['ogroup']->memberList) != 0) {
+ foreach(array_keys($this->to_remove) as $object) {
+ $this->to_remove[$object]->remove_from_parent();
+ }
+ }
tabs::save();
}
diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_terminalService.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_terminalService.inc
index 17be75702095ed66594d8929d403cc8a7bca07f4..b4dc15460188e29f5cbc6bf214d4336b4b0e7e1b 100644 (file)
function remove_from_parent()
{
+ /* Cancel if there's nothing to do here */
+ if ((!$this->acl_is_removeable())){
+ return;
+ }
+
+ /* Remove and write to LDAP */
+ plugin::remove_from_parent();
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $ldap->modify($this->attrs);
new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
$this->handle_post_events("remove");
}
diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_terminalStartup.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_terminalStartup.inc
index c55ce9824b8192c538616c920504c26b44fc6bdb..a118c7a4f6be9d83e301852249889b8ed7eefe6d 100644 (file)
function remove_from_parent()
{
if($this->acl_is_removeable()){
+ plugin::remove_from_parent;
+
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $ldap->modify($this->attrs);
$this->handle_post_events("remove");
new log("remove","terminal/".get_class($this),$this->dn,array_keys($this->attrs));
}
diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationService.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationService.inc
index 4e122d898bf859c892051095fa47f56c8ae8bc56..fde0993dee56fd7ce4e142a2a532266bcc7344bd 100644 (file)
function remove_from_parent()
{
+ /* Cancel if there's nothing to do here */
+ if ((!$this->acl_is_removeable())){
+ return;
+ }
+
+ /* Remove and write to LDAP */
+ plugin::remove_from_parent();
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $ldap->modify($this->attrs);
$this->handle_post_events("remove");
new log("remove","workstation/".get_class($this),$this->dn);
}
diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc
index e4749fb1fa02c9cec02b6d1a8e1c0cf8f7a89f61..7b67379d7aaa7243a8db9dbc6bc29db005707e6b 100644 (file)
function remove_from_parent()
{
+ /* Cancel if there's nothing to do here */
+ if ((!$this->acl_is_removeable())){
+ return;
+ }
+
+ /* Remove and write to LDAP */
+ plugin::remove_from_parent();
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $this->attrs['gotoModules'] = array();
+ $ldap->modify($this->attrs);
$this->handle_post_events("remove");
new log("remove","workstation/".get_class($this),$this->dn);
}