diff --git a/lam/lib/modules/account.inc b/lam/lib/modules/account.inc index 1e7ccdd1..8498129a 100644 --- a/lam/lib/modules/account.inc +++ b/lam/lib/modules/account.inc @@ -33,8 +33,10 @@ class account extends baseModule { $return["account_types"] = array("host", "user"); // alias name $return["alias"] = _('Account'); + // this is a base module + $return["is_base"] = true; // module dependencies - $return['dependencies'] = array('depends' => array(), 'conflicts' => array('inetOrgPerson')); + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); // available PDF fields $return['PDF_fields'] = array( 'description' diff --git a/lam/lib/modules/ieee802device.inc b/lam/lib/modules/ieee802device.inc index 40602983..dcf147de 100644 --- a/lam/lib/modules/ieee802device.inc +++ b/lam/lib/modules/ieee802device.inc @@ -49,7 +49,7 @@ class ieee802Device extends baseModule { // alias name $return["alias"] = _("MAC address"); // module dependencies - $return['dependencies'] = array('depends' => array('account'), 'conflicts' => array()); + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); // help Entries $return['help'] = array( 'mac' => array( diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index 72c00b16..45ce0ed3 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -85,10 +85,12 @@ class inetOrgPerson extends baseModule { $return["account_types"] = array("user"); // alias name $return["alias"] = _('Personal'); + // this is a base module + $return["is_base"] = true; // RDN attribute $return["RDN"] = array("cn" => "low"); // module dependencies - $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array('account')); + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); // profile elements $return['profile_options'] = array( array( diff --git a/lam/lib/modules/nisMailAlias.inc b/lam/lib/modules/nisMailAlias.inc index 5e1233bb..f3658bc5 100644 --- a/lam/lib/modules/nisMailAlias.inc +++ b/lam/lib/modules/nisMailAlias.inc @@ -53,7 +53,7 @@ class nisMailAlias extends baseModule { // alias name $return["alias"] = _("Mail aliases"); // module dependencies - $return['dependencies'] = array('depends' => array(), 'conflicts' => array('posixGroup')); + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); // help Entries $return['help'] = array( 'alias' => array( diff --git a/lam/lib/modules/posixAccount.inc b/lam/lib/modules/posixAccount.inc index 8487316b..73b4a7c5 100644 --- a/lam/lib/modules/posixAccount.inc +++ b/lam/lib/modules/posixAccount.inc @@ -99,8 +99,6 @@ class posixAccount extends baseModule { $return["account_types"] = array("user", "host"); // user specific data if ($this->get_scope() == "user") { - // this is a base module - $return["is_base"] = true; // LDAP filter $return["ldap_filter"] = array('or' => "(objectClass=posixAccount)", 'and' => "(!(uid=*$))"); // module dependencies diff --git a/lam/lib/modules/posixGroup.inc b/lam/lib/modules/posixGroup.inc index 64be6a4a..e6901d46 100644 --- a/lam/lib/modules/posixGroup.inc +++ b/lam/lib/modules/posixGroup.inc @@ -227,7 +227,7 @@ class posixGroup extends baseModule { // RDN attribute $return["RDN"] = array("cn" => "normal"); // module dependencies - $return['dependencies'] = array('depends' => array(), 'conflicts' => array('inetOrgPerson', 'account', 'sambaDomain')); + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); // configuration options $return['config_options']['group'] = array( array( diff --git a/lam/lib/modules/sambaAccount.inc b/lam/lib/modules/sambaAccount.inc index 2f6f60cd..4563e438 100644 --- a/lam/lib/modules/sambaAccount.inc +++ b/lam/lib/modules/sambaAccount.inc @@ -84,8 +84,6 @@ class sambaAccount extends baseModule { // manages user and host accounts $return["account_types"] = array("user", "host"); if ($this->get_scope() == "host") { - // this is a base module - $return["is_base"] = true; // LDAP filter $return["ldap_filter"] = array('and' => '(uid=*$)', 'or' => "(objectClass=posixAccount)"); } diff --git a/lam/lib/modules/sambaSamAccount.inc b/lam/lib/modules/sambaSamAccount.inc index ca27dc95..a7b35dcf 100644 --- a/lam/lib/modules/sambaSamAccount.inc +++ b/lam/lib/modules/sambaSamAccount.inc @@ -82,8 +82,6 @@ class sambaSamAccount extends baseModule { // manages user and host accounts $return["account_types"] = array("user", "host"); if ($this->get_scope() == "host") { - // this is a base module - $return["is_base"] = true; // LDAP filter $return["ldap_filter"] = array('and' => '(uid=*$)', 'or' => "(objectClass=posixAccount)"); } diff --git a/lam/templates/config/confmodules.php b/lam/templates/config/confmodules.php index 070869ce..289a7095 100644 --- a/lam/templates/config/confmodules.php +++ b/lam/templates/config/confmodules.php @@ -75,421 +75,26 @@ echo ("
\n"); echo "

" . _("Module selection") . "

"; -// user modules -$selected_users_temp = $_SESSION['conf_usermodules']; -$available_users = array(); -$available_users = getAvailableModules('user'); -$selected_users = array(); -// only use available modules as selected -for ($i = 0; $i < sizeof($selected_users_temp); $i++) { - if (in_array($selected_users_temp[$i], $available_users)) $selected_users[] = $selected_users_temp[$i]; -} -$no_conflicts_user = true; -$no_depends_user = true; -$no_missing_basemodule_user = true; +$account_list = array( + array('user', _('User modules')), + array('group', _('Group modules')), + array('host', _('Host modules')) +); -// 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; -} +$allDependenciesOk = true; -// 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_temp = $_SESSION['conf_groupmodules']; -$available_groups = array(); -$available_groups = getAvailableModules('group'); -$selected_groups = array(); -// only use available modules as selected -for ($i = 0; $i < sizeof($selected_groups_temp); $i++) { - if (in_array($selected_groups_temp[$i], $available_groups)) $selected_groups[] = $selected_groups_temp[$i]; -} -$no_conflicts_group = true; -$no_depends_group = true; -$no_missing_basemodule_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_temp = $_SESSION['conf_hostmodules']; -$available_hosts = array(); -$available_hosts = getAvailableModules('host'); -$selected_hosts = array(); -// only use available modules as selected -for ($i = 0; $i < sizeof($selected_hosts_temp); $i++) { - if (in_array($selected_hosts_temp[$i], $available_hosts)) $selected_hosts[] = $selected_hosts_temp[$i]; -} -$no_conflicts_host = true; -$no_depends_host = true; -$no_missing_basemodule_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 "" . _("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"; - -// check dependencies -$user_depends = check_module_depends($selected_users, getModulesDependencies('user')); -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"; -} - -// check conflicts -$user_conflicts = check_module_conflicts($selected_users, getModulesDependencies('user')); -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"; -} - -// check for base module -$found = false; -for ($i = 0; $i < sizeof($selected_users); $i++) { - if (is_base_module($selected_users[$i], "user")) { - $found = true; - break; +for ($i = 0; $i < sizeof($account_list); $i++) { + $ret = config_showAccountModules($account_list[$i][0], $account_list[$i][1]); + if (!$ret) { + $allDependenciesOk = false; } } -if (! $found) { - $no_missing_basemodule_user = false; - echo "

\n"; - echo "" . _("No base module selected!") . "
\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 "" . _("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"; - -// check dependencies -$group_depends = check_module_depends($selected_groups, getModulesDependencies('group')); -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"; -} - -// check conflicts -$group_conflicts = check_module_conflicts($selected_groups, getModulesDependencies('group')); -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"; -} - -// check for base module -$found = false; -for ($i = 0; $i < sizeof($selected_groups); $i++) { - if (is_base_module($selected_groups[$i], "group")) { - $found = true; - break; - } -} -if (! $found) { - $no_missing_basemodule_group = false; - echo "

\n"; - echo "" . _("No base module selected!") . "
\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 "" . _("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"; - -// check dependencies -$host_depends = check_module_depends($selected_hosts, getModulesDependencies('host')); -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"; -} - -// check conflicts -$host_conflicts = check_module_conflicts($selected_hosts, getModulesDependencies('host')); -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"; -} - -// check for base module -$found = false; -for ($i = 0; $i < sizeof($selected_hosts); $i++) { - if (is_base_module($selected_hosts[$i], "host")) { - $found = true; - break; - } -} -if (! $found) { - $no_missing_basemodule_host = false; - echo "

\n"; - echo "" . _("No base module selected!") . "
\n"; - echo "

\n"; -} - -echo "

\n"; // submit buttons echo "

\n"; // disable button if there are conflicts/depends - if ($no_conflicts_user && $no_depends_user && $no_missing_basemodule_user && - $no_conflicts_group && $no_depends_group && $no_missing_basemodule_group && - $no_conflicts_host && $no_depends_host && $no_missing_basemodule_host) { + if ($allDependenciesOk) { echo "\n"; } else { @@ -499,10 +104,162 @@ echo "

\n"; echo "\n"; echo "

\n"; +echo "



\n"; +echo "(*) " . _("Base module") . ""; +echo "

\n"; + echo "
\n"; echo "\n"; echo "\n"; + +/** +* Displays the module selection boxes and checks if dependencies are fulfilled. +* +* @param string $scope account type +* @param string $title title for module selection (e.g. "User modules") +* @return boolean true if all dependencies are ok +*/ +function config_showAccountModules($scope, $title) { + // account modules + $selected_temp = $_SESSION['conf_' . $scope . 'modules']; + $available = array(); + $available = getAvailableModules($scope); + $selected = array(); + // only use available modules as selected + for ($i = 0; $i < sizeof($selected_temp); $i++) { + if (in_array($selected_temp[$i], $available)) $selected[] = $selected_temp[$i]; + } + $no_conflicts = true; + $no_depends = true; + $no_missing_basemodule = true; + + // remove modules from selection + if ($_POST[$scope . '_selected'] && ($_POST[$scope . '_remove'])) { + $new_selected = array(); + for ($i = 0; $i < sizeof($selected); $i++) { + if (! in_array($selected[$i], $_POST[$scope . '_selected'])) $new_selected[] = $selected[$i]; + } + $selected = $new_selected; + $_SESSION['conf_' . $scope . 'modules'] = $selected; + } + + // add modules to selection + elseif ($_POST[$scope . '_available'] && ($_POST[$scope . '_add'])) { + $new_selected = $selected; + for ($i = 0; $i < sizeof($_POST[$scope . '_available']); $i++) { + if (! in_array($_POST[$scope . '_available'][$i], $selected)) $new_selected[] = $_POST[$scope . '_available'][$i]; + } + $selected = $new_selected; + $_SESSION['conf_' . $scope . 'modules'] = $selected; + } + + // show account modules + echo "
" . $title . "\n"; + echo "\n"; + // select boxes + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "" . _("Selected modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "

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

\n"; + echo "
\n"; + echo "
\n"; + echo "" . _("Available modules") . "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + + // check dependencies + $depends = check_module_depends($selected, getModulesDependencies($scope)); + if ($depends != false) { + $no_depends = false; + echo "

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

\n"; + } + + // check conflicts + $conflicts = check_module_conflicts($selected, getModulesDependencies($scope)); + if ($conflicts != false) { + $no_conflicts = false; + echo "

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

\n"; + } + + // check for base module + $baseCount = 0; + for ($i = 0; $i < sizeof($selected); $i++) { + if (is_base_module($selected[$i], $scope)) { + $baseCount++; + } + } + if ($baseCount != 1) { + $no_missing_basemodule = false; + echo "

\n"; + echo "" . _("No or more than one base module selected!") . "
\n"; + echo "

\n"; + } + + echo "

\n"; + + echo "

\n"; + + return ($no_conflicts & $no_depends & $no_missing_basemodule); + +} + + ?>