X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_tabs.inc;h=729a441d89e576a5cc511accdd7957eee3e1373d;hb=2a57ce5c805f18c400cff1d6083de54e078c02ee;hp=f94d985014a5a480106ece032e5a44a16dc0a386;hpb=c2c6a6e54355a1b67c25bb4d761d847513810d02;p=gosa.git diff --git a/include/class_tabs.inc b/include/class_tabs.inc index f94d98501..729a441d8 100644 --- a/include/class_tabs.inc +++ b/include/class_tabs.inc @@ -24,30 +24,41 @@ class tabs var $config; var $acl; var $is_template; + var $is_new= FALSE; var $last= ""; var $current= ""; var $disabled= ""; var $by_name= array(); var $by_object= array(); + var $SubDialog = false; - function tabs($config, $data, $dn) + function tabs($config, $data, $dn, $acl_category= "") { /* Save dn */ $this->dn= $dn; $this->config= $config; + + $baseobject= NULL; foreach ($data as $tab){ $this->by_name[$tab['CLASS']]= $tab['NAME']; - $this->by_object[$tab['CLASS']]= new $tab['CLASS']($this->config, $this->dn); + + if ($baseobject == NULL){ + $baseobject= new $tab['CLASS']($this->config, $this->dn); + $this->by_object[$tab['CLASS']]= $baseobject; + } else { + $this->by_object[$tab['CLASS']]= new $tab['CLASS']($this->config, $this->dn, $baseobject); + } + $this->by_object[$tab['CLASS']]->parent= &$this; + $this->by_object[$tab['CLASS']]->set_acl_category($acl_category); /* Initialize current */ if ($this->current == ""){ $this->current= $tab['CLASS']; } } - } function execute() @@ -74,12 +85,14 @@ class tabs $display= $this->gen_tabs(); /* Show object */ - $display.= "\n"; + $display.= "
\n"; $display.= "
\n"; $obj= $this->by_object[$this->current]; - $display.= $obj->execute (); - $this->by_object[$this->current]= $obj; + $display.= $obj->execute(); + if (is_php4()){ + $this->by_object[$this->current]= $obj; + } /* Footer for tabbed dialog */ $display.= "
"; @@ -95,7 +108,9 @@ class tabs $obj= $this->by_object[$this->last]; $obj->save_object (); - $this->by_object[$this->last]= $obj; + if (is_php4()){ + $this->by_object[$this->last]= $obj; + } } /* Skip if curent and last are the same object */ @@ -111,15 +126,16 @@ class tabs $this->current, "Saving (current)"); $obj->save_object (); - $this->by_object[$this->current]= $obj; + if (is_php4()){ + $this->by_object[$this->current]= $obj; + } } - } function gen_tabs() { $display= ""; - $display.= ""; + $display.= "
"; $index= 0; $style= array("tab_left", "tab_active", "tab_near_active", "tab_right"); foreach ($this->by_name as $class => $name){ @@ -136,12 +152,22 @@ class tabs } /* Paint tab */ - $display.= "
"; + $display.= ""; + + /* Shorten string if its too long for the tab headers*/ + $title= _($name); + if (mb_strlen($title, 'UTF-8') > 28){ + $title= mb_substr($title,0, 25, 'UTF-8')."..."; + } + + /* nobr causes w3c warnings so we use   to keep the tab name in one line */ + $title= preg_replace("/ /"," ",$title); + if ($_SESSION['js']==FALSE){ $display.= "
"._($name)."$titleacl= $acl; - - /* Setup for all plugins */ - foreach ($this->by_object as $key => $obj){ - $sacl= get_module_permission($acl, "$key", $this->dn); - $obj->acl= $sacl; - $this->by_object[$key]= $obj; - } + /* Look for attribute in ACL */ + trigger_error("Don't use tabs::set_acl() its obsolete."); } function delete() { + /* Check if all plugins will ACK for deletion */ + foreach (array_reverse($this->by_object) as $key => $obj){ + $reason= $obj->allow_remove(); + if ($reason != ""){ + print_red(sprintf(_("Delete process has been canceled by plugin '%s': %s"), $key, $reason)); + return; + } + } + /* Delete for all plugins */ foreach (array_reverse($this->by_object) as $key => $obj){ $obj->remove_from_parent(); @@ -187,24 +215,27 @@ class tabs function check($ignore_account= FALSE) { - $this->save_object(TRUE); - $messages= array(); - - /* Check all plugins */ - foreach ($this->by_object as $key => $obj){ - if ($obj->is_account || $ignore_account || $obj->ignore_account){ - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, - $key, "Checking"); - - $messages= $obj->check(); - if (count($messages)){ - $this->current= $key; - break; - } - } - } - - return ($messages); + $this->save_object(TRUE); + $messages= array(); + + /* Check all plugins */ + foreach ($this->by_object as $key => $obj){ + if ($obj->is_account || $ignore_account || $obj->ignore_account){ + @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, + $key, "Checking"); + + $messages= $obj->check(); + if (is_php4()){ + $this->by_object[$key]= $obj; + } + if (count($messages)){ + $this->current= $key; + break; + } + } + } + + return ($messages); } function save($ignore_account= FALSE) @@ -234,10 +265,75 @@ class tabs $key, "Adapting"); $obj->parent= &$this; $obj->adapt_from_template($dn); - $this->by_object[$key]= $obj; + if (is_php4()){ + $this->by_object[$key]= $obj; + } } } -} + + /* Save attributes posted by copy & paste dialog + */ + function saveCopyDialog() + { + foreach ($this->by_object as $key => $obj){ + if($obj->is_account){ + $this->by_object[$key]->saveCopyDialog(); + } + } + } + + + /* return copy & paste dialog + */ + function getCopyDialog() + { + $ret = ""; + $this->SubDialog = false; + foreach ($this->by_object as $key => $obj){ + if($obj->is_account){ + $tmp = $this->by_object[$key]->getCopyDialog(); + if($tmp['status'] == "SubDialog"){ + $this->SubDialog = true; + return($tmp['string']); + }else{ + if(!empty($tmp['string'])){ + $ret .= $tmp['string']; + $ret .= "

 

"; + } + } + } + } + return($ret); + } + + function addSpecialTabs() + { + $this->by_name['acl']= _("ACL"); + $this->by_object['acl']= new acl($this->config, $this, $this->dn); + $this->by_object['acl']->parent= &$this; + $this->by_name['reference']= _("References"); + $this->by_object['reference']= new reference($this->config, $this->dn); + $this->by_object['reference']->parent= &$this; + } + + + function set_acl_base($base= "") + { + /* Update reference, transfer variables */ + $first= ($base == ""); + foreach ($this->by_object as $name => $obj){ + if ($first){ + $first= FALSE; + $base= $obj->acl_base; + } else { + $obj->set_acl_base($base); + $this->by_object[$name]= $obj; + } + } + } + +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>