From 1aa6f8de59c77ca42c90e0eeb1bb68893df5867f Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 1 Feb 2004 12:33:21 +0000 Subject: [PATCH] added module selection --- lam/lib/config.inc | 36 +- lam/templates/config/conflogin.php | 3 + lam/templates/config/confmain.php | 104 +++++- lam/templates/config/confmodules.php | 518 +++++++++++++++++++++++++++ lam/templates/config/confsave.php | 21 ++ 5 files changed, 659 insertions(+), 23 deletions(-) create mode 100644 lam/templates/config/confmodules.php diff --git a/lam/lib/config.inc b/lam/lib/config.inc index e2f0279e..5dd01902 100644 --- a/lam/lib/config.inc +++ b/lam/lib/config.inc @@ -3,7 +3,7 @@ $Id$ This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam) - Copyright (C) 2003-04 Roland Gruber + Copyright (C) 2003 - 2004 Roland Gruber This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,6 +25,7 @@ $Id$ */ include_once("status.inc"); +include_once("modules.inc"); // sets language settings for automatic translation function setlanguage() { @@ -259,6 +260,9 @@ class Config { if (!in_array("samba3", $saved)) array_push($file_array, "\n\n# Set to \"yes\" only if you use the new Samba 3.x schema.\n" . "samba3: " . $this->samba3 . "\n"); if (!in_array("cachetimeout", $saved)) array_push($file_array, "\n\n# Number of minutes LAM caches LDAP searches.\n" . "cacheTimeout: " . $this->cachetimeout . "\n"); if (!in_array("pwdhash", $saved)) array_push($file_array, "\n\n# Password hash algorithm (CRYPT/MD5/SMD5/SHA/SSHA/PLAIN).\n" . "pwdhash: " . $this->pwdhash . "\n"); + if (!in_array("usermodules", $saved)) array_push($file_array, "\n\n# List of used user modules\n" . "usermodules: " . $this->usermodules . "\n"); + if (!in_array("groupmodules", $saved)) array_push($file_array, "\n\n# List of used group modules\n" . "groupmodules: " . $this->groupmodules . "\n"); + if (!in_array("hostmodules", $saved)) array_push($file_array, "\n\n# List of used host modules\n" . "hostmodules: " . $this->hostmodules . "\n"); $file = fopen($conffile, "w"); if ($file) { for ($i = 0; $i < sizeof($file_array); $i++) fputs($file, $file_array[$i]); @@ -295,7 +299,10 @@ class Config { echo "" . _("Default language") . ": " . $this->defaultLanguage . "
"; echo "" . _("Path to external script") . ": " . $this->scriptPath . "
"; echo "" . _("Server of external script") . ": " . $this->scriptServer . "
"; - echo "" . _("List of valid users") . ": " . $this->Admins . "

"; + echo "" . _("List of valid users") . ": " . $this->Admins . "
"; + echo "" . _("User modules") . ": " . $this->usermodules . "
"; + echo "" . _("Group modules") . ": " . $this->groupmodules . "
"; + echo "" . _("Host modules") . ": " . $this->hostmodules . "

"; echo "" . _("Text for user PDF") . ": " . $this->get_pdftext(); } @@ -712,13 +719,18 @@ class Config { function set_UserModules($modules) { if (! is_array($modules)) return false; // check module names - // TODO check against available module names + $available = getAvailableUserModules(); + for ($i = 0; $i < sizeof($modules); $i++) { + if (! in_array($modules[$i], $available)) return false; + } + // TODO: check depends/conflicts $this->usermodules = implode(",", $modules); + return true; } // returns an array of all selected group modules function get_GroupModules() { - return explode(",", $this->usermodules); + return explode(",", $this->groupmodules); } // sets the selected group modules @@ -727,13 +739,18 @@ class Config { function set_GroupModules($modules) { if (! is_array($modules)) return false; // check module names - // TODO check against available module names + $available = getAvailableGroupModules(); + for ($i = 0; $i < sizeof($modules); $i++) { + if (! in_array($modules[$i], $available)) return false; + } + // TODO: check depends/conflicts $this->groupmodules = implode(",", $modules); + return true; } // returns an array of all selected host modules function get_HostModules() { - return explode(",", $this->usermodules); + return explode(",", $this->hostmodules); } // sets the selected host modules @@ -742,8 +759,13 @@ class Config { function set_HostModules($modules) { if (! is_array($modules)) return false; // check module names - // TODO check against available module names + $available = getAvailableHostModules(); + for ($i = 0; $i < sizeof($modules); $i++) { + if (! in_array($modules[$i], $available)) return false; + } + // TODO: check depends/conflicts $this->hostmodules = implode(",", $modules); + return true; } } diff --git a/lam/templates/config/conflogin.php b/lam/templates/config/conflogin.php index 66c7cfd3..b3072655 100644 --- a/lam/templates/config/conflogin.php +++ b/lam/templates/config/conflogin.php @@ -57,6 +57,9 @@ unset($_SESSION['conf_scriptserver']); unset($_SESSION['conf_samba3']); unset($_SESSION['conf_pwdhash']); unset($_SESSION['conf_filename']); +unset($_SESSION['conf_usermodules']); +unset($_SESSION['conf_groupmodules']); +unset($_SESSION['conf_hostmodules']); // remove config wizard settings unset($_SESSION['confwiz_config']); diff --git a/lam/templates/config/confmain.php b/lam/templates/config/confmain.php index 68cbbe4d..60ee26e3 100644 --- a/lam/templates/config/confmain.php +++ b/lam/templates/config/confmain.php @@ -3,7 +3,7 @@ $Id$ This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam) - Copyright (C) 2003 Roland Gruber + Copyright (C) 2003-04 Roland Gruber This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,9 +33,9 @@ session_save_path("../../sess"); setlanguage(); // check if button was pressed and if we have to save the setting or go back to login -if ($_POST['back'] || $_POST['submitconf']){ +if ($_POST['back'] || $_POST['submitconf'] || $_POST['editmodules']){ // save settings - if ($_POST['submitconf']){ + if ($_POST['submitconf'] || $_POST['editmodules']){ // save HTTP-POST variables in session $_SESSION['conf_passwd'] = $_POST['passwd']; $_SESSION['conf_passwd1'] = $_POST['passwd1']; @@ -63,9 +63,19 @@ if ($_POST['back'] || $_POST['submitconf']){ $_SESSION['conf_scriptpath'] = $_POST['scriptpath']; $_SESSION['conf_scriptserver'] = $_POST['scriptserver']; $_SESSION['conf_pdf_usertext'] = $_POST['pdf_usertext']; + $_SESSION['conf_usermodules'] = explode(",", $_POST['usermodules']); + $_SESSION['conf_groupmodules'] = explode(",", $_POST['groupmodules']); + $_SESSION['conf_hostmodules'] = explode(",", $_POST['hostmodules']); $_SESSION['conf_filename'] = $_POST['filename']; + } + // go to final page + if ($_POST['submitconf']){ metaRefresh("confsave.php"); } + // go to modules page + elseif ($_POST['editmodules']){ + metaRefresh("confmodules.php"); + } // back to login else if ($_POST['back']){ metaRefresh("../login.php"); @@ -75,6 +85,7 @@ if ($_POST['back'] || $_POST['submitconf']){ // get password if register_globals is off if ($_POST['passwd']) $passwd = $_POST['passwd']; +if ($_GET["modulesback"] == "true") $passwd = $_SESSION['conf_passwd']; // check if password was entered // if not: load login page @@ -84,16 +95,53 @@ if (! $passwd) { exit; } +include_once ('../../lib/config.inc'); +$filename = $_POST['filename']; +if ($_GET["modulesback"] == "true") $filename = $_SESSION['conf_filename']; +$conf = new Config($filename); + // check if password is valid // if not: load login page -include_once ('../../lib/config.inc'); -$conf = new Config($_POST['filename']); if (!(($conf->get_Passwd()) == $passwd)) { $message = _("The password is invalid! Please try again."); require('conflogin.php'); exit; } +// check if user comes from modules page +if ($_GET["modulesback"] == "true") { + // load config values from session + $conf->set_samba3($_SESSION['conf_samba3']); + $conf->set_ServerURL($_SESSION['conf_serverurl']); + $conf->set_cacheTimeout($_SESSION['conf_cachetimeout']); + $conf->set_Adminstring($_SESSION['conf_admins']); + $conf->set_UserSuffix($_SESSION['conf_suffusers']); + $conf->set_GroupSuffix($_SESSION['conf_suffgroups']); + $conf->set_HostSuffix($_SESSION['conf_suffhosts']); + $conf->set_DomainSuffix($_SESSION['conf_suffdomains']); + $conf->set_minUID($_SESSION['conf_minUID']); + $conf->set_maxUID($_SESSION['conf_maxUID']); + $conf->set_minGID($_SESSION['conf_minGID']); + $conf->set_maxGID($_SESSION['conf_maxGID']); + $conf->set_minMachine($_SESSION['conf_minMach']); + $conf->set_maxMachine($_SESSION['conf_maxMach']); + $conf->set_userlistAttributes($_SESSION['conf_usrlstattr']); + $conf->set_grouplistAttributes($_SESSION['conf_grplstattr']); + $conf->set_hostlistAttributes($_SESSION['conf_hstlstattr']); + $conf->set_MaxListEntries($_SESSION['conf_maxlistentries']); + $conf->set_defaultLanguage($_SESSION['conf_lang']); + $conf->set_scriptpath($_SESSION['conf_scriptpath']); + $conf->set_scriptserver($_SESSION['conf_scriptserver']); + $conf->set_pwdhash($_SESSION['conf_pwdhash']); + $conf->set_pdftext($_SESSION['conf_pdf_usertext']); + // check if modules were edited + if ($_GET["moduleschanged"] == "true") { + $conf->set_UserModules($_SESSION['conf_usermodules']); + $conf->set_GroupModules($_SESSION['conf_groupmodules']); + $conf->set_HostModules($_SESSION['conf_hostmodules']); + } +} + echo $_SESSION['header']; echo ("" . _("LDAP Account Manager Configuration") . "\n"); @@ -173,6 +221,23 @@ echo ("" . _("Help echo (""); echo (""); + +echo ("

"); + +echo ("
" . _("Account modules") . ""); +echo (""); + +// Account modules +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; + +echo ("
" . _("User modules") . ": " . implode(", ", $conf->get_UserModules()) . "
" . _("Group modules") . ": " . implode(", ", $conf->get_GroupModules()) . "
" . _("Host modules") . ": " . implode(", ", $conf->get_HostModules()) . "
 
  " . + "" . _("Help") . "
"); +echo ("
"); + echo ("

"); echo ("
" . _("Samba settings") . ""); @@ -188,6 +253,7 @@ echo ("" . _("Help echo (""); echo ("
"); + echo ("

"); echo ("
" . _("Ranges") . ""); @@ -197,6 +263,7 @@ echo (""); echo ("\n"); +echo "\n"; // maxUID echo ("\n"); @@ -206,6 +273,7 @@ echo ("\n"); +echo "\n"; // maxGID echo ("\n"); @@ -215,6 +283,7 @@ echo ("\n"); +echo "\n"; // maxMach echo ("\n"); @@ -342,22 +411,20 @@ echo ("
". _("Minimum UID number") . " *: ". "get_minUID() . "\">   " . _("Maximum UID number") . " *: ". "get_maxUID() . "\">" . _("Help echo ("
". _("Minimum GID number") . " *: ". "get_minGID() . "\">   " . _("Maximum GID number")." *: ". "get_maxGID() . "\">" . _("Help echo ("
". _("Minimum Machine number") . " **: ". "get_minMachine() . "\">   " . _("Maximum Machine number") . " **: ". "get_maxMachine() . "\">
\n"); // admin list echo ("". - "\n"); + "\n"); echo ("\n"); -echo ("
". _("List of valid users") . " *: get_Adminstring() . "\">get_Adminstring() . "\">" . _("Help") . "
\n"); -echo ("

\n"); +echo (" \n"); -echo ("\n"); // new password -echo ("". - "\n"); +echo ("". + "\n"); echo ("\n"); // reenter password -echo ("". - "\n"); +echo ("". + "\n"); echo ("
". - _("New Password") . ":
". + _("New Password") . ": " . _("Help") . "
". - _("Reenter Password") . ":
". + _("Reenter Password") . ":
\n"); echo ("
\n"); echo ("

\n"); @@ -385,7 +452,12 @@ echo ("

*** = ". _("required for Samba 3 accounts") . "

"); echo ("

\n"); // config file -echo ("

\n"); +echo ("

\n"); + +// modules +echo ("

get_UserModules()) . "\">

\n"); +echo ("

get_GroupModules()) . "\">

\n"); +echo ("

get_HostModules()) . "\">

\n"); echo ("\n"); echo ("\n"); diff --git a/lam/templates/config/confmodules.php b/lam/templates/config/confmodules.php new file mode 100644 index 00000000..de7e1ee4 --- /dev/null +++ b/lam/templates/config/confmodules.php @@ -0,0 +1,518 @@ +get_Passwd()) { + require('conflogin.php'); + exit; +} + +// user pressed submit/abort button +if ($_POST['submit']) { + metarefresh('confmain.php?modulesback=true&moduleschanged=true'); +} +elseif ($_POST['abort']) { + metarefresh('confmain.php?modulesback=true'); +} + +echo $_SESSION['header']; + +echo "" . _("LDAP Account Manager Configuration") . "\n"; +echo "\n"; +echo "\n"; + +echo ("

". + "\"LDAP



\n"); + +echo ("
\n"); +echo "

" . _("Module selection") . "

"; + +// module dependencies +$user_deps = getUserModuleDependencies(); +$group_deps = getGroupModuleDependencies(); +$host_deps = getHostModuleDependencies(); + +// user modules +$selected_users = array(); +$selected_users = $_SESSION['conf_usermodules']; +$available_users = array(); +$available_users = getAvailableUserModules(); +$no_conflicts_user = true; +$no_depends_user = true; + +// remove modules from selection +if ($_POST['user_selected'] && ($_POST['user_remove'])) { + $new_selected_users = array(); + for ($i = 0; $i < sizeof($selected_users); $i++) { + if (! in_array($selected_users[$i], $_POST['user_selected'])) $new_selected_users[] = $selected_users[$i]; + } + $selected_users = $new_selected_users; + $_SESSION['conf_usermodules'] = $selected_users; +} +// add modules to selection +elseif ($_POST['user_available'] && ($_POST['user_add'])) { + $new_selected_users = $selected_users; + for ($i = 0; $i < sizeof($_POST['user_available']); $i++) { + if (! in_array($_POST['user_available'][$i], $selected_users)) $new_selected_users[] = $_POST['user_available'][$i]; + } + $selected_users = $new_selected_users; + $_SESSION['conf_usermodules'] = $selected_users; +} + +// group modules +$selected_groups = array(); +$selected_groups = $_SESSION['conf_groupmodules']; +$available_groups = array(); +$available_groups = getAvailableGroupModules(); +$no_conflicts_group = true; +$no_depends_group = true; + +// remove modules from selection +if ($_POST['group_selected'] && ($_POST['group_remove'])) { + $new_selected_groups = array(); + for ($i = 0; $i < sizeof($selected_groups); $i++) { + if (! in_array($selected_groups[$i], $_POST['group_selected'])) $new_selected_groups[] = $selected_groups[$i]; + } + $selected_groups = $new_selected_groups; + $_SESSION['conf_groupmodules'] = $selected_groups; +} +// add modules to selection +elseif ($_POST['group_available'] && ($_POST['group_add'])) { + $new_selected_groups = $selected_groups; + for ($i = 0; $i < sizeof($_POST['group_available']); $i++) { + if (! in_array($_POST['group_available'][$i], $selected_groups)) $new_selected_groups[] = $_POST['group_available'][$i]; + } + $selected_groups = $new_selected_groups; + $_SESSION['conf_groupmodules'] = $selected_groups; +} + +// host modules +$selected_hosts = array(); +$selected_hosts = $_SESSION['conf_hostmodules']; +$available_hosts = array(); +$available_hosts = getAvailableHostModules(); +$no_conflicts_host = true; +$no_depends_host = true; + +// remove modules from selection +if ($_POST['host_selected'] && ($_POST['host_remove'])) { + $new_selected_hosts = array(); + for ($i = 0; $i < sizeof($selected_hosts); $i++) { + if (! in_array($selected_hosts[$i], $_POST['host_selected'])) $new_selected_hosts[] = $selected_hosts[$i]; + } + $selected_hosts = $new_selected_hosts; + $_SESSION['conf_hostmodules'] = $selected_hosts; +} +// add modules to selection +elseif ($_POST['host_available'] && ($_POST['host_add'])) { + $new_selected_hosts = $selected_hosts; + for ($i = 0; $i < sizeof($_POST['host_available']); $i++) { + if (! in_array($_POST['host_available'][$i], $selected_hosts)) $new_selected_hosts[] = $_POST['host_available'][$i]; + } + $selected_hosts = $new_selected_hosts; + $_SESSION['conf_hostmodules'] = $selected_hosts; +} + +// show user modules +echo "
" . _("User modules") . "\n"; +echo "\n"; + // select boxes + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; +echo "
  \n"; + echo "
\n"; + echo "" . _("Selected user modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  \n"; + echo "

"; + echo ""; + echo "
"; + echo ""; + echo "

\n"; + echo "
  \n"; + echo "
\n"; + echo "" . _("Available user modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  
\n"; +$user_depends = user_depends($selected_users); +if ($user_depends != false) { + $no_depends_user = false; + echo "

\n"; + for ($i = 0; $i < sizeof($user_depends); $i++) { + echo "" . _("Unsolved dependency: ") . "" . $user_depends[$i][0] . " (" . + $user_depends[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +$user_conflicts = user_conflicts($selected_users); +if ($user_conflicts != false) { + $no_conflicts_user = false; + echo "

\n"; + for ($i = 0; $i < sizeof($user_conflicts); $i++) { + echo "" . _("Conflicting module: ") . "" . $user_conflicts[$i][0] . " (" . + $user_conflicts[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +echo "

\n"; + +echo "

\n"; + +// show group modules +echo "
" . _("Group modules") . "\n"; +echo "\n"; + // select boxes + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; +echo "
  \n"; + echo "
\n"; + echo "" . _("Selected group modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  \n"; + echo "

"; + echo ""; + echo "
"; + echo ""; + echo "

\n"; + echo "
  \n"; + echo "
\n"; + echo "" . _("Available group modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  
\n"; +$group_depends = group_depends($selected_groups); +if ($group_depends != false) { + $no_depends_group = false; + echo "

\n"; + for ($i = 0; $i < sizeof($group_depends); $i++) { + echo "" . _("Unsolved dependency: ") . "" . $group_depends[$i][0] . " (" . + $group_depends[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +$group_conflicts = group_conflicts($selected_groups); +if ($group_conflicts != false) { + $no_conflicts_group = false; + echo "

\n"; + for ($i = 0; $i < sizeof($group_conflicts); $i++) { + echo "" . _("Conflicting module: ") . "" . $group_conflicts[$i][0] . " (" . + $group_conflicts[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +echo "

\n"; + +echo "

\n"; + +// show host modules +echo "
" . _("Host modules") . "\n"; +echo "\n"; + // select boxes + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; +echo "
  \n"; + echo "
\n"; + echo "" . _("Selected host modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  \n"; + echo "

"; + echo ""; + echo "
"; + echo ""; + echo "

\n"; + echo "
  \n"; + echo "
\n"; + echo "" . _("Available host modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
  
\n"; +$host_depends = host_depends($selected_hosts); +if ($host_depends != false) { + $no_depends_host = false; + echo "

\n"; + for ($i = 0; $i < sizeof($host_depends); $i++) { + echo "" . _("Unsolved dependency: ") . "" . $host_depends[$i][0] . " (" . + $host_depends[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +$host_conflicts = host_conflicts($selected_hosts); +if ($host_conflicts != false) { + $no_conflicts_host = false; + echo "

\n"; + for ($i = 0; $i < sizeof($host_conflicts); $i++) { + echo "" . _("Conflicting module: ") . "" . $host_conflicts[$i][0] . " (" . + $host_conflicts[$i][1] . ")" . "
\n"; + } + echo "

\n"; +} +echo "

\n"; + +// submit buttons +echo "

\n"; + // disable button if there are conflicts/depends + if ($no_conflicts_user && $no_conflicts_group && $no_conflicts_host && $no_depends_user && $no_depends_group && $no_depends_host) { + echo "\n"; + } + else { + echo "\n"; + } + echo " "; + echo "\n"; +echo "

\n"; + +echo "
\n"; +echo "\n"; +echo "\n"; + +// checks if there are missing dependencies between user modules +// $selected is an array of selected module names +// returns false if no misssing dependency was found +// returns an array of array(selected module, depending module) if missing dependencies were found +function user_depends($selected) { +global $user_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($user_deps[$selected[$m]]['depends']); $i++) { + // check if we have OR-combined modules + if (is_array($user_deps[$selected[$m]]['depends'][$i])) { + // one of the elements is needed + $found = false; + $depends = $user_deps[$selected[$m]]['depends'][$i]; + for ($d = 0; $d < sizeof($depends); $d++) { + if (in_array($depends[$d], $selected)) { + $found = true; + break; + } + } + if (! $found) { + $ret[] = array($selected[$m], implode(" || ", $depends)); + } + } + else { + // single dependency + if (! in_array($user_deps[$selected[$m]]['depends'][$i], $selected)) { + $ret[] = array($selected[$m], $user_deps[$selected[$m]]['depends'][$i]); + } + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +// checks if there are conflicts between user modules +// $selected is an array of selected module names +// returns false if no conflict was found +// returns an array of array(selected module, conflicting module) if conflicts were found +function user_conflicts($selected) { +global $user_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($user_deps[$selected[$m]]['conflicts']); $i++) { + if (in_array($user_deps[$selected[$m]]['conflicts'][$i], $selected)) { + $ret[] = array($selected[$m], $user_deps[$selected[$m]]['conflicts'][$i]); + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +// checks if there are missing dependencies between group modules +// $selected is an array of selected module names +// returns false if no misssing dependency was found +// returns an array of array(selected module, depending module) if missing dependencies were found +function group_depends($selected) { +global $group_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($group_deps[$selected[$m]]['depends']); $i++) { + // check if we have OR-combined modules + if (is_array($group_deps[$selected[$m]]['depends'][$i])) { + // one of the elements is needed + $found = false; + $depends = $group_deps[$selected[$m]]['depends'][$i]; + for ($d = 0; $d < sizeof($depends); $d++) { + if (in_array($depends[$d], $selected)) { + $found = true; + break; + } + } + if (! $found) { + $ret[] = array($selected[$m], implode(" || ", $depends)); + } + } + else { + // single dependency + if (! in_array($group_deps[$selected[$m]]['depends'][$i], $selected)) { + $ret[] = array($selected[$m], $group_deps[$selected[$m]]['depends'][$i]); + } + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +// checks if there are conflicts between group modules +// $selected is an array of selected module names +// returns false if no conflict was found +// returns an array of array(selected module, conflicting module) if conflicts were found +function group_conflicts($selected) { +global $group_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($group_deps[$selected[$m]]['conflicts']); $i++) { + if (in_array($group_deps[$selected[$m]]['conflicts'][$i], $selected)) { + $ret[] = array($selected[$m], $group_deps[$selected[$m]]['conflicts'][$i]); + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +// checks if there are missing dependencies between host modules +// $selected is an array of selected module names +// returns false if no misssing dependency was found +// returns an array of array(selected module, depending module) if missing dependencies were found +function host_depends($selected) { +global $host_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($host_deps[$selected[$m]]['depends']); $i++) { + // check if we have OR-combined modules + if (is_array($host_deps[$selected[$m]]['depends'][$i])) { + // one of the elements is needed + $found = false; + $depends = $host_deps[$selected[$m]]['depends'][$i]; + for ($d = 0; $d < sizeof($depends); $d++) { + if (in_array($depends[$d], $selected)) { + $found = true; + break; + } + } + if (! $found) { + $ret[] = array($selected[$m], implode(" || ", $depends)); + } + } + else { + // single dependency + if (! in_array($host_deps[$selected[$m]]['depends'][$i], $selected)) { + $ret[] = array($selected[$m], $host_deps[$selected[$m]]['depends'][$i]); + } + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +// checks if there are conflicts between host modules +// $selected is an array of selected module names +// returns false if no conflict was found +// returns an array of array(selected module, conflicting module) if conflicts were found +function host_conflicts($selected) { +global $host_deps; + $ret = array(); + for ($m = 0; $m < sizeof($selected); $m++) { + for ($i = 0; $i < sizeof($host_deps[$selected[$m]]['conflicts']); $i++) { + if (in_array($host_deps[$selected[$m]]['conflicts'][$i], $selected)) { + $ret[] = array($selected[$m], $host_deps[$selected[$m]]['conflicts'][$i]); + } + } + } + if (sizeof($ret) > 0) return $ret; + else return false; +} + +?> + + + + diff --git a/lam/templates/config/confsave.php b/lam/templates/config/confsave.php index a435de39..9b0c9ef1 100644 --- a/lam/templates/config/confsave.php +++ b/lam/templates/config/confsave.php @@ -201,6 +201,24 @@ if (!$conf->set_pdftext($pdftext)) { exit; } +if (! $conf->set_UserModules($_SESSION['conf_usermodules'])) { + echo ("" . _("Saving user modules failed!") . ""); + echo ("\n


" . _("Back to preferences...") . ""); + exit; +} + +if (! $conf->set_GroupModules($_SESSION['conf_groupmodules'])) { + echo ("" . _("Saving group modules failed!") . ""); + echo ("\n


" . _("Back to preferences...") . ""); + exit; +} + +if (! $conf->set_HostModules($_SESSION['conf_hostmodules'])) { + echo ("" . _("Saving host modules failed!") . ""); + echo ("\n


" . _("Back to preferences...") . ""); + exit; +} + // check if password was changed if ($passwd1) { @@ -251,5 +269,8 @@ unset($_SESSION['conf_samba3']); unset($_SESSION['conf_pwdhash']); unset($_SESSION['conf_pdf_usertext']); unset($_SESSION['conf_filename']); +unset($_SESSION['conf_usermodules']); +unset($_SESSION['conf_groupmodules']); +unset($_SESSION['conf_hostmodules']); ?>