X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_multi_plug.inc;h=a6cbc9410df2aa1652403bcd071599be471e8e62;hb=33295af82f6e7e0eb6881d2f4ee5eb6697eaca8a;hp=84637992ea8c04bba4320b6b7d997477246927a8;hpb=654d905191af7e2a795fa39957b4c7445102a6cb;p=gosa.git diff --git a/gosa-core/include/class_multi_plug.inc b/gosa-core/include/class_multi_plug.inc index 84637992e..a6cbc9410 100644 --- a/gosa-core/include/class_multi_plug.inc +++ b/gosa-core/include/class_multi_plug.inc @@ -1,21 +1,23 @@ o_tab->enable_multiple_support() #Enable multiple support for ui handle |->detect_multiple_used_attributes() #Update ui handle with some default values - |->handles->attrs - |->ui->attrs + |->handles[] + |->by_object->get_multi_init_values() #Get attributes from all handles + |->o_tab + |->by_object->init_multiple_support() #Assign values to ui handle | |->execute() #Display ui | |->o_tab->execute() @@ -129,6 +133,8 @@ class multi_plug public $config = NULL; private $s_class= ""; public $current = ""; + public $by_object = array(); + public $by_name = array(); /*! \brief Creates a multi_plug object @param object $config GOsa Configuration object @@ -150,8 +156,11 @@ class multi_plug /* Initialize collector object * Used to display the ui and to collect the user input. */ - $this->o_tab = new $class($config,$tab,"new",$acl_category); + $this->o_tab = new $class($config,$tab,"new",$acl_category, TRUE, TRUE); $this->o_tab->set_acl_base($acl_base); + $this->by_object = &$this->o_tab->by_object; + $this->by_name = &$this->o_tab->by_name; + $this->current = &$this->o_tab->current; /* Check if the specified tab object supports multiple edits */ @@ -164,7 +173,7 @@ class multi_plug /* Initialize the objects we want to edit at once */ foreach($dns as $dn){ - $obj = new $class($config,$tab,$dn,$acl_category); + $obj = new $class($config,$tab,$dn,$acl_category, TRUE, TRUE); $obj->set_acl_base($acl_base); $this->a_handles[] = $obj; } @@ -184,11 +193,25 @@ class multi_plug */ private function array_combine($base,$add) { + foreach($add as $key => $attr) { if(!is_numeric($key)){ + + if(!is_array($add[$key])){ + $add[$key] = array('count' => 1,$add[$key]); + } + if(!isset($base[$key])){ $base[$key] = $add[$key]; - }elseif(is_array($add[$key])){ + }else{ + + if(!isset($base[$key]['count'])){ + $base[$key]['count'] = count($base[$key]); + } + + if(!isset($add[$key]['count'])){ + $add[$key]['count'] = count($add[$key]); + } for($i=0;$i<$add[$key]['count'];$i++){ if(!in_array($add[$key][$i],$base[$key])){ $base[$key][] = $add[$key][$i]; @@ -218,6 +241,9 @@ class multi_plug unset($base[$key]); }elseif(is_array($base[$key])){ $tmp = array(); + if(!isset($base[$key]['count'])){ + $base[$key]['count'] = count($base[$key]); + } for($i = 0 ; $i < $base[$key]['count'] ; $i ++){ if(isset($base[$key][$i]) && in_array($base[$key][$i],$minus[$key])){ $tmp[] = $base[$key][$i]; @@ -239,18 +265,21 @@ class multi_plug */ private function detect_multiple_used_attributes() { - $attrs = array(); - $first = $this->o_tab->current; - $all = array(); - foreach($this->a_handles as $handle){ - if(count($attrs) == 0){ - $attrs = $handle->by_object[$first]->attrs; - }else{ - $attrs = $this->array_intersect($attrs,$handle->by_object[$first]->attrs); + foreach($this->o_tab->by_object as $name => $plug){ + + if(empty($name)) continue; + + $attrs = array(); + $all = array(); + foreach($this->a_handles as $hid => $handle){ + $h_attrs = $this->a_handles[$hid]->by_object[$name]->get_multi_init_values(); + if(count($attrs) == 0){ + $attrs = $h_attrs; + }else{ + $attrs = $this->array_intersect($attrs,$h_attrs); + } + $all = $this->array_combine($all,$h_attrs); } - $all = $this->array_combine($all,$handle->by_object[$first]->attrs); - } - foreach($this->o_tab->by_object as $name => $obj){ $this->o_tab->by_object[$name]->init_multiple_support($attrs,$all); } } @@ -261,7 +290,8 @@ class multi_plug */ public function execute() { - return($this->o_tab->execute()); + $str = $this->o_tab->execute(); + return($str); } @@ -358,7 +388,7 @@ class multi_plug { foreach($this->a_handles as $i_id => $o_handle){ if($o_handle->password_change_needed() && isset($o_handle->by_object['user'])){ - new msg_dialog(_("Password reset"),_("The user password was resetted, please set a new password value!"),WARNING_DIALOG); + new msg_dialog(_("Reset password"),_("The user password has been reset. Please set a new password!"),WARNING_DIALOG); change_password ($o_handle->dn, "",0, $o_handle->by_object['user']->pw_storage); } }