diff --git a/include/class_tabs.inc b/include/class_tabs.inc
index 6a9959e1ac9198736ab9ec1739c2e51beefb278b..c543065b22dee48da42e42047218e2cc3695155f 100644 (file)
--- a/include/class_tabs.inc
+++ b/include/class_tabs.inc
var $config;
var $acl;
var $is_template;
var $config;
var $acl;
var $is_template;
+ var $is_new= FALSE;
var $last= "";
var $current= "";
var $last= "";
var $current= "";
var $by_object= array();
var $SubDialog = false;
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;
-
- foreach ($data as $tab){
- $this->by_name[$tab['CLASS']]= $tab['NAME'];
- $this->by_object[$tab['CLASS']]= new $tab['CLASS']($this->config, $this->dn);
- $this->by_object[$tab['CLASS']]->parent= &$this;
-
- /* Initialize current */
- if ($this->current == ""){
- $this->current= $tab['CLASS'];
- }
- }
-
+ /* Save dn */
+ $this->dn= $dn;
+ $this->config= &$config;
+
+ $baseobject= NULL;
+
+ foreach ($data as &$tab){
+ $this->by_name[$tab['CLASS']]= $tab['NAME'];
+
+ 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()
{
}
function execute()
{
- /* Rotate current to last */
- $this->last= $this->current;
-
- /* Look for pressed tab button */
- foreach ($this->by_object as $class => $obj){
- if (isset($_POST[$class]) || (isset($_POST['arg']) && $_POST['arg'] == "$class")){
- $this->current= $class;
- break;
- }
- }
-
- /* Save last tab object */
- if ($this->last == $this->current){
- $this->save_object(TRUE);
- } else {
- $this->save_object(FALSE);
- }
-
- /* Build tab line */
- $display= $this->gen_tabs();
-
- /* Show object */
- $display.= "<table summary=\"\" cellpadding=4 cellspacing=0 border=0 style=\"width:100%; background-color:#F0F0F0; border-style:solid; border-color:black; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px;\">\n";
- $display.= "<tr><td>\n";
-
- $obj= $this->by_object[$this->current];
- $display.= $obj->execute();
- $this->by_object[$this->current]= $obj;
-
- /* Footer for tabbed dialog */
- $display.= "</td></tr></table>";
- return ($display);
+ /* Rotate current to last */
+ $this->last= $this->current;
+
+ /* Look for pressed tab button */
+ foreach ($this->by_object as $class => &$obj){
+ if (isset($_POST[$class]) || (isset($_POST['arg']) && $_POST['arg'] == "$class")){
+ $this->current= $class;
+ break;
+ }
+ }
+
+ /* Save last tab object */
+ if ($this->last == $this->current){
+ $this->save_object(TRUE);
+ } else {
+ $this->save_object(FALSE);
+ }
+
+ /* Build tab line */
+ $display= $this->gen_tabs();
+
+ /* Show object */
+ $display.= "<table summary=\"\" cellpadding=4 cellspacing=0 border=0 style=\"width:100%; background-color:#F8F8F8; border-style:solid; border-color:#AAA; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px;\">\n";
+ $display.= "<tr><td>\n";
+
+ $display.= $this->by_object[$this->current]->execute();
+
+ /* Footer for tabbed dialog */
+ $display.= "</td></tr></table>";
+
+ return ($display);
}
function save_object($save_current= FALSE)
{
}
function save_object($save_current= FALSE)
{
- /* Save last tab */
- if ($this->last != ""){
- @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
- $this->last, "Saving");
-
- $obj= $this->by_object[$this->last];
- $obj->save_object ();
- $this->by_object[$this->last]= $obj;
- }
+ /* Save last tab */
+ if ($this->last != ""){
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
+ $this->last, "Saving");
- /* Skip if curent and last are the same object */
- if ($this->last == $this->current){
- return;
- }
+ $this->by_object[$this->last]->save_object ();
+ }
- $obj= $this->by_object[$this->current];
- $this->disabled= $obj->parent->disabled;
+ /* Skip if curent and last are the same object */
+ if ($this->last == $this->current){
+ return;
+ }
- if ($save_current){
- @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
- $this->current, "Saving (current)");
+ $obj= @$this->by_object[$this->current];
+ $this->disabled= $obj->parent->disabled;
- $obj->save_object ();
- $this->by_object[$this->current]= $obj;
- }
+ if ($save_current){
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
+ $this->current, "Saving (current)");
+ $obj->save_object ();
+ }
}
function gen_tabs()
{
}
function gen_tabs()
{
- $display= "<input type=\"hidden\" name=\"arg\" value=\"\">";
- $display.= "<table summary=\"\" cellpadding=0 cellspacing=0 border=0 style=\"width:100%;\"><tr>";
- $index= 0;
- $style= array("tab_left", "tab_active", "tab_near_active", "tab_right");
- foreach ($this->by_name as $class => $name){
-
- /* Activate right tabs with style "tab_right"
- Activate near current with style "tab_near_active" */
- if ($index == 2 || $index == 1){
- $index++;
- }
-
- /* Activate current tab with style "tab_active " */
- if ($class == $this->current){
- $index++;
- }
-
- /* Paint tab */
- $display.= "<td style=\"vertical-align:bottom; width:100px;\">";
-
- /* 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 ($_SESSION['js']==FALSE){
- $display.= "<div class=\"$style[$index]\"><input type=\"submit\" name=\"$class\"".
- " class=\"$style[$index]\" value=\"$title\"";
- } else {
- $display.= "<div class=\"$style[$index]\"><a class=\"$style[$index]\" onclick=\"return true;\" href=\"javascript:document.mainform.arg.value='$class';document.mainform.submit();\">$title</a";
- }
- $display.= "></div></td>";
- }
- $display.= "<td style=\"vertical-align:bottom;\">\n";
- $display.= "<div class=\"tab_border\"> </div></td></tr></table>";
-
- return($display);
+ $display= "<input type=\"hidden\" name=\"arg\" value=\"\">";
+ $display.= "<table summary=\"\" cellpadding=0 cellspacing=0 border=0 style=\"width:100%;\"><tr>";
+ $index= 0;
+ $style= array("tab_left", "tab_active", "tab_near_active", "tab_right");
+ foreach ($this->by_name as $class => $name){
+
+ /* Activate right tabs with style "tab_right"
+ Activate near current with style "tab_near_active" */
+ if ($index == 2 || $index == 1){
+ $index++;
+ }
+
+ /* Activate current tab with style "tab_active " */
+ if ($class == $this->current){
+ $index++;
+ }
+
+ /* Paint tab */
+ $display.= "<td style=\"vertical-align:bottom;width:1px;white-space:nowrap;\">";
+
+ /* 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);
+
+ /* Take care about notifications */
+ if ($this->by_object[$class]->pl_notify){
+ $notify= "id=\"notify\"";
+ } else {
+ $notify= "";
+ }
+
+ if ($_SESSION['js']==FALSE){
+ $display.= "<div ".$notify." class=\"$style[$index]\"><input type=\"submit\" name=\"$class\"".
+ " class=\"$style[$index]\" value=\"$title\"";
+ } else {
+ $display.= "<div ".$notify." class=\"$style[$index]\"><a class=\"$style[$index]\" onclick=\"return true;\" href=\"javascript:document.mainform.arg.value='$class';document.mainform.submit();\">$title</a";
+ }
+ $display.= "></div></td>";
+ }
+ $display.= "<td style=\"vertical-align:bottom;\">\n";
+ $display.= "<div class=\"tab_border\"> </div></td></tr></table>";
+
+ return($display);
}
function set_acl($acl)
{
}
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()
{
}
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();
- }
+ /* 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 $obj){
+ $obj->remove_from_parent();
+ }
}
function password_change_needed()
{
}
function password_change_needed()
{
- /* Ask all plugins for needed password changes */
- foreach ($this->by_object as $key => $obj){
- if ($obj->password_change_needed()){
- return TRUE;
- }
- }
-
- return FALSE;
+ /* Ask all plugins for needed password changes */
+ foreach ($this->by_object as &$obj){
+ if ($obj->password_change_needed()){
+ return TRUE;
+ }
+ }
+
+ return FALSE;
}
function check($ignore_account= FALSE)
{
}
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 (count($msg)){
+ $obj->pl_notify= TRUE;
+ if(!$current_set){
+ $current_set = TRUE;
+ $this->current= $key;
+ $messages = $msg;
+ }
+ }else{
+ $obj->pl_notify= FALSE;
+ }
+ }else{
+ $obj->pl_notify= FALSE;
+ }
+ }
+ return ($messages);
}
function save($ignore_account= FALSE)
{
}
function save($ignore_account= FALSE)
{
- /* Save all plugins */
- foreach ($this->by_object as $key => $obj){
- @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
- $key, "Saving");
-
- $obj->dn= $this->dn;
-
- if ($obj->is_account || $ignore_account || $obj->ignore_account){
- if ($obj->save() == 1){
- return (1);
- }
- } else {
- $obj->remove_from_parent();
- }
- $this->by_object[$key]= $obj;
- }
- return (0);
+ /* Save all plugins */
+ foreach ($this->by_object as $key => &$obj){
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
+ $key, "Saving");
+
+ $obj->dn= $this->dn;
+
+ if ($obj->is_account || $ignore_account || $obj->ignore_account){
+ if ($obj->save() == 1){
+ return (1);
+ }
+ } else {
+ $obj->remove_from_parent();
+ }
+ }
+ return (0);
}
function adapt_from_template($dn)
{
}
function adapt_from_template($dn)
{
- foreach ($this->by_object as $key => $obj){
- @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
- $key, "Adapting");
- $obj->parent= &$this;
- $obj->adapt_from_template($dn);
- $this->by_object[$key]= $obj;
- }
+ foreach ($this->by_object as $key => &$obj){
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
+ $key, "Adapting");
+ $obj->parent= &$this;
+ $obj->adapt_from_template($dn);
+ }
}
}
*/
function saveCopyDialog()
{
*/
function saveCopyDialog()
{
- foreach ($this->by_object as $key => $obj){
+ foreach ($this->by_object as &$obj){
if($obj->is_account){
if($obj->is_account){
- $this->by_object[$key]->saveCopyDialog();
+ $obj->saveCopyDialog();
}
}
}
}
}
}
*/
function getCopyDialog()
{
*/
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 &$obj){
+ if($obj->is_account){
+ $tmp = $obj->getCopyDialog();
+ if($tmp['status'] == "SubDialog"){
+ $this->SubDialog = true;
+ return($tmp['string']);
+ }else{
+ if(!empty($tmp['string'])){
+ $ret .= $tmp['string'];
+ $ret .= "<p class='seperator'> </p>";
+ }
+ }
+ }
+ }
+ 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 &$obj){
+ if ($first){
+ $first= FALSE;
+ $base= $obj->acl_base;
+ } else {
+ $obj->set_acl_base($base);
+ }
+ }
+ }
+
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>
?>