X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fhtml%2Fmain.php;h=7b17a5d3e8003bff320431e908a8b4a06fa53752;hb=90747e5966f031a8ab2ac19256c26cc037c838c2;hp=f79abdad78f17771dc96a4533e967f9b21aa9494;hpb=93c6b5868a4c6d88a6f38870ebc95965af5493bb;p=gosa.git diff --git a/gosa-core/html/main.php b/gosa-core/html/main.php index f79abdad7..7b17a5d3e 100644 --- a/gosa-core/html/main.php +++ b/gosa-core/html/main.php @@ -23,6 +23,9 @@ /* Save start time */ $start = microtime(); +// Will be used in the "stats" plugin later, to be able calculate the elapsed render time. +$overallRenderTimer = microtime(TRUE); + /* Basic setup, remove eventually registered sessions */ require_once ("../include/php_setup.inc"); require_once ("functions.inc"); @@ -35,12 +38,35 @@ $domain = 'messages'; bindtextdomain($domain, LOCALE_DIR); textdomain($domain); + /* Remember everything we did after the last click */ session::start(); session::set('errorsAlreadyPosted',array()); session::global_set('runtime_cache',array()); session::set('limit_exceeded',FALSE); +// Count number of page reloads +if(!session::is_set('clicks')){ + session::set('clicks', 0); +} +$clicks = session::get('clicks'); +$clicks ++ ; +session::set('clicks', $clicks); + + +/* On some systems we can not operate on uploaded tmp files. We need to + * explicitely copy them first + */ +foreach($_FILES as $postName => $entry){ + $tempfile = tempnam(sys_get_temp_dir(), 'GOsa'); + if(move_uploaded_file($_FILES[$postName]['tmp_name'], $tempfile)){ + $_FILES[$postName]['tmp_name'] = $tempfile; + } +} + + +pathNavigator::clear(); + if ($_SERVER["REQUEST_METHOD"] == "POST"){ @DEBUG (DEBUG_POST, __LINE__, __FUNCTION__, __FILE__, $_POST, "_POST"); } @@ -62,9 +88,17 @@ if ($_SERVER['REMOTE_ADDR'] != $ui->ip){ } $config= session::global_get('config'); $config->check_and_reload(); +$config->configRegistry->reload(); + +// Validate LDAP schema if not done already +if( $config->boolValueIsTrue('core','schemaCheck') && + !$config->configRegistry->schemaCheckFinished() && + !$config->configRegistry->validateSchemata($force=FALSE,$disableIncompatiblePlugins=TRUE)){ + $config->configRegistry->displayRequirementErrors(); +} /* Enable compressed output */ -if ($config->get_cfg_value("sendCompressedOutput") == "true"){ +if ($config->get_cfg_value("core","sendCompressedOutput") == "true"){ ob_start("ob_gzhandler"); } @@ -74,7 +108,7 @@ if(session::global_get('_LAST_PAGE_REQUEST') == ""){ }else{ /* check GOsa.conf for defined session lifetime */ - $max_life= $config->get_cfg_value("sessionLifetime", 60*60*2); + $max_life= $config->get_cfg_value("core","sessionLifetime"); /* get time difference between last page reload */ $request_time = (time()- session::global_get('_LAST_PAGE_REQUEST')); @@ -95,7 +129,8 @@ if(session::global_get('_LAST_PAGE_REQUEST') == ""){ @DEBUG (DEBUG_CONFIG, __LINE__, __FUNCTION__, __FILE__, $config->data, "config"); /* Set template compile directory */ -$smarty->compile_dir= $config->get_cfg_value("templateCompileDirectory", '/var/spool/gosa'); +$smarty->compile_dir= $config->get_cfg_value("core","templateCompileDirectory"); +$smarty->error_unassigned= true; /* Set default */ $reload_navigation = false; @@ -145,8 +180,8 @@ if (!session::global_is_set('plist')){ require_once("$BASE_DIR/$path"); } else { msg_dialog::display(_("Fatal error"), - sprintf(_("Cannot locate file '%s' - please run '%s' to fix this"), - "$BASE_DIR/$path", "update-gosa"), FATAL_ERROR_DIALOG); + sprintf(_("Cannot locate file %s - please run %s to fix this"), + bold("$BASE_DIR/$path"), bold("update-gosa")), FATAL_ERROR_DIALOG); exit; } } @@ -162,10 +197,10 @@ if (!session::global_is_set('plist')){ $plist= session::global_get('plist'); /* Check for register globals */ -if (isset($global_check) && $config->get_cfg_value("forceglobals") == "true"){ +if (isset($global_check) && $config->boolValueIsTrue("core","forceGlobals")){ msg_dialog::display( _("PHP configuration"), - _("FATAL: Register globals is on. GOsa will refuse to login unless this is fixed by an administrator."), + _("FATAL: Register globals is active. Please fix this in order to continue."), FATAL_ERROR_DIALOG); new log("security","login","",array(),"Register globals is on. For security reasons, this should be turned off.") ; @@ -179,6 +214,40 @@ if (session::global_is_set('plugin_dir')){ } else { $old_plugin_dir= ""; } + +// Generate menus +$plist->gen_headlines(); +$plist->gen_menu(); +$plist->genPathMenu(); + +/* check if we are using account expiration */ +$smarty->assign("hideMenus", FALSE); +if ($config->boolValueIsTrue("core","handleExpiredAccounts")){ + $expired= ldap_expired_account($config, $ui->dn, $ui->username); + + if ($expired == POSIX_WARN_ABOUT_EXPIRATION && !session::is_set('POSIX_WARN_ABOUT_EXPIRATION__DONE')){ + + // The users password is about to xpire soon, display a warning message. + new log("security","gosa","",array(),"password for user \"$ui->username\" is about to expire") ; + msg_dialog::display(_("Password change"), _("Your password is about to expire, please change your password!"), INFO_DIALOG); + session::set('POSIX_WARN_ABOUT_EXPIRATION__DONE', TRUE); + + } elseif ($expired == POSIX_FORCE_PASSWORD_CHANGE){ + + // The password is expired, we are now going to enforce a new one from the user. + + // Hide the GOsa menus to avoid leaving the enforced password change dialog. + $smarty->assign("hideMenus", TRUE); + $plug = (isset($_GET['plug'])) ? $_GET['plug'] : null; + + // Detect password plugin id: + $passId = array_search('password', $plist->pluginList); + if($passId !== FALSE){ + $_GET['plug'] = $passId; + } + } +} + if (isset($_GET['plug']) && $plist->plugin_access_allowed($_GET['plug'])){ $plug= validate($_GET['plug']); $plugin_dir= $plist->get_path($plug); @@ -195,24 +264,29 @@ if (isset($_GET['plug']) && $plist->plugin_access_allowed($_GET['plug'])){ $plugin_dir= "$BASE_DIR/plugins/generic/welcome"; } -/* Check if we need to delete a lock */ -$cleanup = FALSE; +/* Handle plugin locks. + - Remove the plugin from session if we switched to another. (cleanup) + - Remove all created locks if "reset" was posted. + - Remove all created locks if we switched to another plugin. +*/ +$cleanup = FALSE; $remove_lock= FALSE; -if ($old_plugin_dir != $plugin_dir && $old_plugin_dir != "" || isset($_POST['delete_lock'])){ + +/* Check if we have changed the selected plugin +*/ +if($old_plugin_dir != $plugin_dir && $old_plugin_dir != ""){ if (is_file("$old_plugin_dir/main.inc")){ - if(isset($_POST['delete_lock'])){ - $remove_lock= TRUE; - } - if($old_plugin_dir != $plugin_dir && $old_plugin_dir != ""){ - $cleanup= TRUE; - } - $display = ""; - require_once ("$old_plugin_dir/main.inc"); - $display = ""; + $cleanup = $remove_lock = TRUE; + require ("$old_plugin_dir/main.inc"); + $cleanup = $remove_lock = FALSE; } +}else // elseif + +/* Reset was posted, remove all created locks for the current plugin +*/ +if((isset($_GET['reset']) && $_GET['reset'] == 1) || isset($_POST['delete_lock'])){ + $remove_lock = TRUE; } -$remove_lock= FALSE; -$cleanup= FALSE; /* Check for sizelimits */ eval_sizelimit(); @@ -260,8 +334,12 @@ if (isset($_GET['reset'])){ } /* show web frontend */ +$smarty->assign ("title","GOsa"); +$smarty->assign ("logo", image(get_template_path("images/logo.png"))); +$smarty->assign ("logoutimage", get_template_path("images/btn-logout.png")); $smarty->assign ("date", date("l, dS F Y H:i:s O")); -$smarty->assign ("must", "*"); +$smarty->assign ("lang", preg_replace('/_.*$/', '', $lang)); +$smarty->assign ("must", "*"); if (isset($plug)){ $plug= "?plug=$plug"; } else { @@ -275,11 +353,14 @@ if (session::global_get('js')==FALSE){ $smarty->assign("help_method"," onclick=\"return popup('helpviewer.php$plug','GOsa help');\""); } + +$loggedin = sprintf(_("You're logged in as %s"), + "".$ui->cn." [".$ui->username."] / ".$config->current['NAME']."  "); if($ui->ignore_acl_for_current_user()){ - $smarty->assign ("username", ""._("User ACL checks disabled")." ".$ui->username); -}else{ - $smarty->assign ("username", $ui->username); + $loggedin = ""._("ACLs are disabled")." ".$loggedin; } + +$smarty->assign ("loggedin", $loggedin); $smarty->assign ("go_logo", get_template_path('images/go_logo.png')); $smarty->assign ("go_base", get_template_path('images/dtree.png')); $smarty->assign ("go_home", get_template_path('images/gohome.png')); @@ -293,52 +374,51 @@ $smarty->assign ("go_help", get_template_path('images/help.png')); if($reload_navigation){ $plist->menu=""; } -$plist->gen_headlines(); -$plist->gen_menu(); -$smarty->assign ("menu", $plist->menu); +$smarty->assign ("menu", $plist->gen_menu()); $smarty->assign ("plug", "$plug"); -$header= "".$smarty->fetch(get_template_path('headers.tpl')); /* React on clicks */ if ($_SERVER["REQUEST_METHOD"] == "POST"){ if (isset($_POST['delete_lock']) || isset($_POST['open_readonly'])){ /* Set old Post data */ - if(session::global_is_set('LOCK_VARS_USED')){ - foreach(session::global_get('LOCK_VARS_USED') as $name => $value){ + if(session::global_is_set('LOCK_VARS_USED_GET')){ + foreach(session::global_get('LOCK_VARS_USED_GET') as $name => $value){ $_GET[$name] = $value; + } + } + if(session::global_is_set('LOCK_VARS_USED_POST')){ + foreach(session::global_get('LOCK_VARS_USED_POST') as $name => $value){ $_POST[$name] = $value; } } - } -} - -/* check if we are using account expiration */ -if ($config->get_cfg_value("handleExpiredAccounts") == "true"){ - $expired= ldap_expired_account($config, $ui->dn, $ui->username); - - if ($expired == 2){ - new log("security","gosa","",array(),"password for user \"$ui->username\" is about to expire") ; - msg_dialog::display(_("Password change"), _("Your password is about to expire, please change your password!"), INFO_DIALOG); + if(session::global_is_set('LOCK_VARS_USED_REQUEST')){ + foreach(session::global_get('LOCK_VARS_USED_REQUEST') as $name => $value){ + $_REQUEST[$name] = $value; + } + } } } /* Load plugin */ if (is_file("$plugin_dir/main.inc")){ + $display =""; require ("$plugin_dir/main.inc"); } else { msg_dialog::display( - _("Plugin"), - sprintf(_("FATAL: Cannot find any plugin definitions for plugin '%s'!"), $plug), - FATAL_ERROR_DIALOG); + _("Plug-in"), + sprintf(_("FATAL: Cannot find any plugin definitions for plugin %s!"), bold($plug)), + FATAL_ERROR_DIALOG); exit(); } /* Print_out last ErrorMessage repeated string. */ $smarty->assign("msg_dialogs", msg_dialog::get_dialogs()); +$smarty->assign ("pathMenu", $plist->genPathMenu()); $smarty->assign("contents", $display); +$smarty->assign("sessionLifetime", $config->get_cfg_value('core','sessionLifetime')); /* If there's some post, take a look if everything is there... */ if (isset($_POST) && count($_POST)){ @@ -391,7 +471,8 @@ if (isset($_POST['_channel_'])){ $smarty->assign("channel", ""); } -$display= $header.$smarty->fetch(get_template_path('framework.tpl')); +$display= "".$smarty->fetch(get_template_path('headers.tpl')). + $smarty->fetch(get_template_path('framework.tpl')); /* Save dialog filters and selected base in a cookie. So we may be able to restore the filter an base settings on reload. @@ -405,7 +486,7 @@ if(isset($_COOKIE['GOsa_Filter_Settings'])){ } /* Save filters? */ -if($config->get_cfg_value("storeFilterSettings") == "true"){ +if($config->get_cfg_value("core","storeFilterSettings") == "true"){ $cookie_vars = array("MultiDialogFilters","CurrentMainBase"); foreach($cookie_vars as $var){ if(session::global_is_set($var)){