X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_tabs.inc;h=3be731dcbcb0e780a173b2b7981b974353e8ba62;hb=2dd0610553775a07cd552ccdcbbf650a18794a8c;hp=cda88a02cff2fcb2f5cfbd0826ec8ebd27cc6876;hpb=ad960225d3962b0a94f6504af46e2b97fd4d5479;p=gosa.git
diff --git a/include/class_tabs.inc b/include/class_tabs.inc
index cda88a02c..3be731dcb 100644
--- a/include/class_tabs.inc
+++ b/include/class_tabs.inc
@@ -24,6 +24,7 @@ class tabs
var $config;
var $acl;
var $is_template;
+ var $is_new= FALSE;
var $last= "";
var $current= "";
@@ -32,23 +33,32 @@ class tabs
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()
@@ -75,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;
+ if (is_php4()){
+ $this->by_object[$this->current]= $obj;
+ }
/* Footer for tabbed dialog */
$display.= " |
";
@@ -96,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 */
@@ -112,9 +126,10 @@ 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()
@@ -137,19 +152,29 @@ class tabs
}
/* Paint tab */
- $display.= "";
+ $display.= " | ";
/* Shorten string if its too long for the tab headers*/
$title= _($name);
- if (mb_strlen($title, 'UTF-8') > 14){
- $title= mb_substr($title,0, 12, 'UTF-8')."...";
+ 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);
+
+ /* Take care about notifications */
+ if ($this->by_object[$class]->pl_notify){
+ $notify= "id=\"notify\"";
+ } else {
+ $notify= "";
+ }
+
if ($_SESSION['js']==FALSE){
- $display.= " | ";
}
@@ -162,19 +187,21 @@ class tabs
function set_acl($acl)
{
- /* Set local acl */
- $this->acl= $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();
@@ -195,24 +222,36 @@ 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();
+
+ $current_set = FALSE;
+
+ /* 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");
+
+ $msg = $obj->check();
+
+ if (is_php4()){
+ $this->by_object[$key]= $obj;
+ }
+ if (count($msg)){
+ $this->by_object[$key]->pl_notify= TRUE;
+ if(!$current_set){
+ $current_set = TRUE;
+ $this->current= $key;
+ $messages = $msg;
+ }
+ }else{
+ $this->by_object[$key]->pl_notify= FALSE;
+ }
+ }else{
+ $this->by_object[$key]->pl_notify= FALSE;
+ }
+ }
+ return ($messages);
}
function save($ignore_account= FALSE)
@@ -242,7 +281,9 @@ 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;
+ }
}
}
@@ -263,22 +304,52 @@ class tabs
*/
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{
- $ret .= "
".$tmp['string'];
- }
- }
- }
- return($ret);
+ $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:
?>