From 38fbdb057d7a8ce07bd35d779bc183ef2ae1e115 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Mon, 15 Mar 2004 16:34:16 +0000 Subject: [PATCH] implemented loading/saving of profiles --- lam/templates/profedit/profilecreate.php | 371 +++-------------------- lam/templates/profedit/profilepage.php | 148 ++++----- 2 files changed, 120 insertions(+), 399 deletions(-) diff --git a/lam/templates/profedit/profilecreate.php b/lam/templates/profedit/profilecreate.php index 30c30cff..628da9c7 100644 --- a/lam/templates/profedit/profilecreate.php +++ b/lam/templates/profedit/profilecreate.php @@ -24,7 +24,7 @@ $Id$ */ include_once("../../lib/status.inc"); -include_once("../../lib/account.inc"); +include_once("../../lib/modules.inc"); include_once("../../lib/profiles.inc"); include_once("../../lib/ldap.inc"); include_once("../../lib/config.inc"); @@ -53,344 +53,65 @@ echo $_SESSION['header']; echo "\n\n"; echo "\n\n
\n"; -// save user profile -if ($_GET['type'] == "user") { - $acct = new account(); - // check input - if ($_POST['general_group'] && eregi("^[a-z]([a-z0-9_\\-])*$", $_POST['general_group'])) { - $acct->general_group = $_POST['general_group']; - } - else { - StatusMessage("ERROR", _("Primary group name is invalid!"), $_POST['general_group']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; +// create option array to check and save +$options = array(); +$opt_keys = array_keys($_SESSION['profile_types']); +foreach ($opt_keys as $element) { + // text fields + if ($_SESSION['profile_types'][$element] == "text") { + $options[$element] = array($_POST[$element]); } - if ($_POST['general_groupadd']) { - $acct->general_groupadd = $_POST['general_groupadd']; + // checkboxes + elseif ($_SESSION['profile_types'][$element] == "checkbox") { + if ($_POST[$element] == "checked") $options[$element] = array(true); + else $options[$element] = array(false); } - if ($_POST['general_homedir'] && eregi("^[/]([a-z0-9])+([/][a-z0-9_\\-\\$]+)*$", $_POST['general_homedir'])) { - $acct->general_homedir = $_POST['general_homedir']; + // dropdownbox + elseif ($_SESSION['profile_types'][$element] == "select") { + $options[$element] = array($_POST[$element]); } - elseif ($_POST['general_homedir']) { - StatusMessage("ERROR", _("Homedir is invalid!"), $_POST['general_homedir']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; + // multiselect + elseif ($_SESSION['profile_types'][$element] == "multiselect") { + $options[$element] = $_POST[$element]; // value is already an array } - if ($_POST['general_shell'] && eregi("^[/]([a-z])+([/][a-z]+)*$", $_POST['general_shell'])) { - $acct->general_shell = $_POST['general_shell']; - } - else { - StatusMessage("ERROR", _("Shell is invalid!"), $_POST['general_shell']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['unix_password_no'] == "1") || ($_POST['unix_password_no'] == "0")) { - $acct->unix_password_no = $_POST['unix_password_no']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for login disable!"), $_POST['unix_password_no']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['unix_pwdwarn'] && is_numeric($_POST['unix_pwdwarn'])) { - $acct->unix_pwdwarn = $_POST['unix_pwdwarn']; - } - elseif ($_POST['unix_pwdwarn']) { - StatusMessage("ERROR", _("Wrong parameter for Unix password warning!"), $_POST['unix_pwdwarn']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['unix_pwdminage'] && is_numeric($_POST['unix_pwdminage'])) { - $acct->unix_pwdminage = $_POST['unix_pwdminage']; - } - elseif ($_POST['unix_pwdminage']) { - StatusMessage("ERROR", _("Password minimum age is not numeric!"), $_POST['unix_pwdminage']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['unix_pwdmaxage'] && is_numeric($_POST['unix_pwdmaxage'])) { - $acct->unix_pwdmaxage = $_POST['unix_pwdmaxage']; - } - elseif ($_POST['unix_pwdmaxage']) { - StatusMessage("ERROR", _("Password maximum age is not numeric!"), $_POST['unix_pwdmaxage']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (is_numeric($_POST['unix_pwdexpire_day']) && is_numeric($_POST['unix_pwdexpire_mon']) && is_numeric($_POST['unix_pwdexpire_yea'])) { - $acct->unix_pwdexpire = mktime(0, 0, 0, $_POST['unix_pwdexpire_mon'], $_POST['unix_pwdexpire_day'], $_POST['unix_pwdexpire_yea']); - } - else { - StatusMessage("ERROR", _("Wrong parameter for Unix password expiry!")); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['unix_host'] && eregi("^[a-z0-9]+(,[a-z0-9]+)*$", $_POST['unix_host'])) { - $acct->unix_host = $_POST['unix_host']; - } - elseif ($_POST['unix_host']) { - StatusMessage("ERROR", _("Unix workstations are invalid!"), $_POST['unix_host']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['unix_deactivated'] == "1") || ($_POST['unix_deactivated'] == "0")) { - $acct->unix_deactivated = $_POST['unix_deactivated']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Unix account activation!"), $_POST['unix_deactivated']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['unix_pwdallowlogin'] && is_numeric($_POST['unix_pwdallowlogin'])) { - $acct->unix_pwdallowlogin = $_POST['unix_pwdallowlogin']; - } - elseif ($_POST['unix_pwdallowlogin']) { - StatusMessage("ERROR", _("Password expiry is not numeric!"), $_POST['unix_pwdallowlogin']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['smb_password_no'] == "1") || ($_POST['smb_password_no'] == "0")) { - $acct->smb_flags['N'] = $_POST['smb_password_no']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Samba option: Set Samba Password!"), $_POST['smb_password_no']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['smb_useunixpwd'] == "1") || ($_POST['smb_useunixpwd'] == "0")) { - $acct->smb_useunixpwd = $_POST['smb_useunixpwd']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Samba option: Set Unix Password for Samba!"), $_POST['smb_useunixpwd']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['smb_flagsD'] == "1") || ($_POST['smb_flagsD'] == "0")) { - $acct->smb_flags['D'] = $_POST['smb_flagsD']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Samba option: Account does not expire!"), $_POST['smb_flagsD']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (($_POST['smb_flagsX'] == "1") || ($_POST['smb_flagsX'] == "0")) { - $acct->smb_flags['X'] = $_POST['smb_flagsX']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Samba option: Account is disabled!"), $_POST['smb_flagsX']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['smb_homedrive'] && ereg("^[D-Z]:$", $_POST['smb_homedrive'])) { - $acct->smb_homedrive = $_POST['smb_homedrive']; - } - else { - StatusMessage("ERROR", _("Wrong parameter for Samba option: home drive!"), $_POST['smb_homedrive']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - // replace double \'s with \ - $_POST['smb_smbhome'] = str_replace('\\\\', '\\', $_POST['smb_smbhome']); - if ($_POST['smb_smbhome'] && eregi("^[\][\]([a-z0-9])+([\][a-z0-9_\\-\\$%]+)+$", $_POST['smb_smbhome'])) { - $acct->smb_smbhome = $_POST['smb_smbhome']; - } - elseif ($_POST['smb_smbhome']) { - StatusMessage("ERROR", _("Samba home directory is invalid!"), $_POST['smb_smbhome']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - // replace double \'s with \ - $_POST['smb_profilepath'] = str_replace('\\\\', '\\', $_POST['smb_profilepath']); - if ($_POST['smb_profilepath'] && eregi("^[\][\]([a-z0-9])+([\][a-z0-9_\\-\\$%]+)+$", $_POST['smb_profilepath'])) { - $acct->smb_profilePath = $_POST['smb_profilepath']; - } - elseif ($_POST['smb_profilepath']) { - StatusMessage("ERROR", _("Profile path is invalid!"), $_POST['smb_profilepath']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - // replace double \'s with \ - $_POST['smb_scriptPath'] = str_replace('\\\\', '\\', $_POST['smb_scriptPath']); - if ($_POST['smb_scriptPath'] && is_string($_POST['smb_scriptPath'])) { - $acct->smb_scriptPath = $_POST['smb_scriptPath']; - } - elseif ($_POST['smb_scriptPath']) { - StatusMessage("ERROR", _("Script path is invalid!"), $_POST['smb_scriptPath']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['smb_smbuserworkstations'] && eregi("^[a-z0-9\\.\\-_]+( [a-z0-9\\.\\-_]+)*$", $_POST['smb_smbuserworkstations'])) { - $acct->smb_smbuserworkstations = $_POST['smb_smbuserworkstations']; - } - elseif ($_POST['smb_smbuserworkstations']) { - StatusMessage("ERROR", _("Samba workstations are invalid!"), $_POST['smb_smbuserworkstations']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['smb_domain'] && is_string($_POST['smb_domain'])) { - $acct->smb_domain = $_POST['smb_domain']; - } - elseif ($_POST['smb_domain']) { - StatusMessage("ERROR", _("Domain name is invalid!"), $_POST['smb_domain']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - - // check quota settings if script is given - if ($_SESSION['config']->get_scriptPath()) { - if ($_POST['quotacount'] && ($_POST['quotacount'] > 0)) { - for ($i = 0; $i < $_POST['quotacount']; $i++) { - $acct->quota[$i][0] = $_POST['f_quota_'.$i.'_0']; - $acct->quota[$i][2] = $_POST['f_quota_'.$i.'_2']; - $acct->quota[$i][3] = $_POST['f_quota_'.$i.'_3']; - $acct->quota[$i][6] = $_POST['f_quota_'.$i.'_6']; - $acct->quota[$i][7] = $_POST['f_quota_'.$i.'_7']; - // Check if values are OK - if (!ereg('^([0-9])+$', $acct->quota[$i][2])) { - StatusMessage('ERROR', _('Block soft quota'), _('Block soft quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][3])) { - StatusMessage('ERROR', _('Block hard quota'), _('Block hard quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][6])) { - StatusMessage('ERROR', _('Inode soft quota'), _('Inode soft quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][7])) { - StatusMessage('ERROR', _('Inode hard quota'), _('Inode hard quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - } - } - } - - if ($_POST['profname'] && eregi("^[0-9a-z_\\-]+$", $_POST['profname'])) { - $profname = $_POST['profname']; - } - else { - StatusMessage("ERROR", _("Invalid profile name!"), $_POST['profname']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - - // save profile - if (saveUserProfile($acct, $profname)) { - StatusMessage("INFO", _("Profile was saved."), $profname); - } - else StatusMessage("ERROR", _("Unable to save profile!"), $profname); - - echo ("

" . _("Back to Profile Editor") . "

"); } - -// save group profile -elseif ($_GET['type'] == "group") { - $acct = new account(); - // check input - if ($_POST['smb_domain'] && is_string($_POST['smb_domain'])) { - $acct->smb_domain = $_POST['smb_domain']; - } - elseif ($_POST['smb_domain']) { - StatusMessage("ERROR", _("Domain name is invalid!"), $_POST['smb_domain']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - // check quota settings if script is given - if ($_SESSION['config']->get_scriptPath()) { - if ($_POST['quotacount'] && ($_POST['quotacount'] > 0)) { - for ($i = 0; $i < $_POST['quotacount']; $i++) { - $acct->quota[$i][0] = $_POST['f_quota_'.$i.'_0']; - $acct->quota[$i][2] = $_POST['f_quota_'.$i.'_2']; - $acct->quota[$i][3] = $_POST['f_quota_'.$i.'_3']; - $acct->quota[$i][6] = $_POST['f_quota_'.$i.'_6']; - $acct->quota[$i][7] = $_POST['f_quota_'.$i.'_7']; - // Check if values are OK - if (!ereg('^([0-9])+$', $acct->quota[$i][2])) { - StatusMessage('ERROR', _('Block soft quota'), _('Block soft quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][3])) { - StatusMessage('ERROR', _('Block hard quota'), _('Block hard quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][6])) { - StatusMessage('ERROR', _('Inode soft quota'), _('Inode soft quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if (!ereg('^([0-9])+$', $acct->quota[$i][7])) { - StatusMessage('ERROR', _('Inode hard quota'), _('Inode hard quota contains invalid characters. Only natural numbers are allowed')); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - } +// check options +$errors = checkProfileOptions($_POST['accounttype'], $options); +// print error messages if any +if (sizeof($errors) > 0) { + for ($i = 0; $i < sizeof($errors); $i++) { + if (sizeof($errors[$i]) > 3) { // messages with additional variables + StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2], $errors[$i][3]); + } + else { + StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2]); } } - - if ($_POST['profname'] && eregi("^[0-9a-z_\\-]+$", $_POST['profname'])) { - $profname = $_POST['profname']; - } - else { - StatusMessage("ERROR", _("Invalid profile name!"), $_POST['profname']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - - // save profile - if (savegroupProfile($acct, $profname)) { - StatusMessage("INFO", _("Profile was saved."), $profname); - } - else StatusMessage("ERROR", _("Unable to save profile!"), $profname); - - echo ("

" . _("Back to Profile Editor") . "

"); } - - -// save host profile -elseif ($_GET['type'] == "host") { - $acct = new account(); - // check input - if ($_POST['general_group'] && eregi("^[a-z]([a-z0-9_\\-])*$", $_POST['general_group'])) { - $acct->general_group = $_POST['general_group']; - } - else { - StatusMessage("ERROR", _("Primary group name is invalid!"), $_POST['general_group']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['smb_domain'] && is_string($_POST['smb_domain'])) { - $acct->smb_domain = $_POST['smb_domain']; - } - elseif ($_POST['smb_domain']) { - StatusMessage("ERROR", _("Domain name is invalid!"), $_POST['smb_domain']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } - if ($_POST['profname'] && eregi("^[0-9a-z_\\-]+$", $_POST['profname'])) { - $profname = $_POST['profname']; - } - else { - StatusMessage("ERROR", _("Invalid profile name!"), $_POST['profname']); - echo ("

" . _("Back to Profile Editor") . ""); - exit; - } +else { // input data is valid, save profile // save profile - if (saveHostProfile($acct, $profname)) { - echo StatusMessage("INFO", _("Profile was saved."), $profname); + if ($_POST['accounttype'] == "user") { + if (saveUserProfile($options, $_POST['profname'])) { + echo StatusMessage("INFO", _("Profile was saved."), $profname); + } + else StatusMessage("ERROR", _("Unable to save profile!"), $profname); + } + elseif ($_POST['accounttype'] == "group") { + if (saveGroupProfile($options, $_POST['profname'])) { + echo StatusMessage("INFO", _("Profile was saved."), $profname); + } + else StatusMessage("ERROR", _("Unable to save profile!"), $profname); + } + elseif ($_POST['accounttype'] == "host") { + if (saveHostProfile($options, $_POST['profname'])) { + echo StatusMessage("INFO", _("Profile was saved."), $profname); + } + else StatusMessage("ERROR", _("Unable to save profile!"), $profname); } echo ("

" . _("Back to Profile Editor") . "

"); } -// error: no or wrong type -else StatusMessage("ERROR", "", _("No type specified!")); - echo ("\n"); ?> diff --git a/lam/templates/profedit/profilepage.php b/lam/templates/profedit/profilepage.php index 345634fc..7c8271b8 100644 --- a/lam/templates/profedit/profilepage.php +++ b/lam/templates/profedit/profilepage.php @@ -56,7 +56,7 @@ if (!(($type == 'user') || ($type == 'group') || ($type == 'host'))) meta_refres $options = getProfileOptions($type); // load old profile if needed -$old_profile = array(); +$old_options = array(); if ($_GET['edit']) { if ($type == "user") $old_options = loadUserProfile($_GET['edit']); else if ($type == "group") $old_options = loadGroupProfile($_GET['edit']); @@ -78,7 +78,7 @@ for ($m = 0; $m < sizeof($modules); $m++) { echo "\n"; for ($o = 0; $o < sizeof($options[$modules[$m]][$l]); $o++) { // line parts echo ""; - print_option($options[$modules[$m]][$l][$o], $modules[$m], $old_profile); + print_option($options[$modules[$m]][$l][$o], $modules[$m], $old_options); echo "\n"; } echo "\n"; @@ -105,89 +105,89 @@ echo ("\ echo (" "); echo ("\n"); echo ("\n"); +echo "\n"; echo ("\n"); // prints out the row of a table including the option name, values and help // $values: An array formated as module option // $module_name: The name of the module the options belong to -// $old_profile: A hash array with the values from the loaded profile -function print_option($values, $modulename, $old_profile) { - switch ($values['kind']) { - // text value - case 'text': - echo $values['text'] . "\n"; - break; - // help link - case 'help': - echo "" . _('Help') . "\n"; - break; - // input field - case 'input': - if (($values['type'] == 'text') || ($values['type'] == 'checkbox')) { - if ($values['type'] == 'text') { - $output = "\n"; - $_SESSION['profile_types'][$values['name']] = "multiselect"; +// $old_options: A hash array with the values from the loaded profile +function print_option($values, $modulename, $old_options) { + switch ($values['kind']) { + // text value + case 'text': + echo $values['text'] . "\n"; + break; + // help link + case 'help': + echo "" . _('Help') . "\n"; + break; + // input field + case 'input': + if (($values['type'] == 'text') || ($values['type'] == 'checkbox')) { + if ($values['type'] == 'text') { + $output = "\n"; + $_SESSION['profile_types'][$values['name']] = "multiselect"; + } + else { + echo "\n"; - $_SESSION['profile_types'][$values['name']] = "select"; + echo "\n"; } - // option values - for ($i = 0; $i < sizeof($values['options']); $i++) { - // use values from old profile if given - if (isset($old_profile[$values['name']])) { - if (in_array($values['options'][$i], $old_profile[$values['name']])) { - echo "\n"; - } - else { - echo "\n"; - } - } - // use default values if not in profile - else { - if (in_array($values['options'][$i], $values['options_selected'])) { - echo "\n"; - } - else { - echo "\n"; - } - } + } + // use default values if not in profile + else { + if (in_array($values['options'][$i], $values['options_selected'])) { + echo "\n"; } - echo "\n"; - break; - // print error message for invalid types - default: - echo _("Unrecognized type") . ": " . $values['kind'] . "\n"; - break; + else { + echo "\n"; + } + } } + echo "\n"; + break; + // print error message for invalid types + default: + echo _("Unrecognized type") . ": " . $values['kind'] . "\n"; + break; + } } ?>