egroupware/admin/editaccount.php

629 lines
20 KiB
PHP
Executable File

<?php
/**************************************************************************\
* phpGroupWare - administration *
* http://www.phpgroupware.org *
* -------------------------------------------- *
* 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 the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$phpgw_info["flags"] = array(
"noheader" => True,
"nonavbar" => True,
"currentapp" => "admin",
"parent_page" => "accounts.php"
);
include("../header.inc.php");
include($phpgw_info["server"]["app_inc"]."/accounts_".$phpgw_info["server"]["account_repository"].".inc.php");
// creates the html for the user data
function createPageBody($_account_id,$_userData='',$_errors='')
{
global $phpgw,$phpgw_info;
$t = new Template($phpgw->common->get_tpl_dir("admin"));
$t->set_file(array("form" => "account_form.tpl"));
if ($_userData)
{
$userData=$_userData;
}
else
{
$account = CreateObject('phpgwapi.accounts',$_account_id);
$userData = $account->read_repository();
}
$t->set_var("form_action",$phpgw->link("editaccount.php",
"account_id=$_account_id&old_loginid=".rawurlencode($userData['account_lid'])));
// groups list
$groups_select = '<select name="n_groups[]" multiple>';
$accounts = $account->get_list();
for($i=0;$i<count($accounts);$i++) {
//echo $account->get_type($accounts[$i]["account_id"]);
if ($account->get_type($accounts[$i]["account_id"]) == "g") {
$groups_select .= '<option value="' . $accounts[$i]["account_id"] . '"';
$members = $account->members($accounts[$i]["account_id"]);
if (!$members) { $members = array(); }
while (list($name,$value) = each($members)) {
//echo $value;
if ($value == $accounts[$i]["account_id"]) {
$groups_select .= " selected";
}
}
}
$groups_select .= ">" . $accounts[$i]["account_lid"] . "</option>\n";
}
$groups_select .= "</select>";
$t->set_var("groups_select",$groups_select);
// end groups list
if ($_errors)
{
$t->set_var("error_messages","<center>" . $phpgw->common->error_list($_errors) . "</center>");
}
else
{
$t->set_var("error_messages","");
}
$t->set_var("th_bg",$phpgw_info["theme"]["th_bg"]);
$t->set_var("tr_color1",$phpgw_info["theme"]["row_on"]);
$t->set_var("tr_color2",$phpgw_info["theme"]["row_off"]);
$t->set_var("lang_action",lang("Edit user account"));
$t->set_var("lang_loginid",lang("LoginID"));
$t->set_var("lang_account_active",lang("Account active"));
$t->set_var("lang_password",lang("Password"));
$t->set_var("lang_reenter_password",lang("Re-Enter Password"));
$t->set_var("lang_lastname",lang("Last Name"));
$t->set_var("lang_groups",lang("Groups"));
$t->set_var("lang_firstname",lang("First Name"));
$t->set_var("lang_button",lang('Save'));
$t->set_var("n_loginid_value",$userData["account_lid"]);
$t->set_var("n_passwd_value",$n_passwd);
$t->set_var("n_passwd_2_value",$n_passwd_2);
if ($userData["status"])
{
$t->set_var("account_checked","checked");
}
else
{
$t->set_var("account_checked","");
}
$t->set_var("n_firstname_value",$userData["firstname"]);
$t->set_var("n_lastname_value",$userData["lastname"]);
// create list of available app
$i = 0;
$availableApps = $phpgw_info["apps"];
@asort($availableApps);
@reset($availableApps);
while ($application = each($availableApps))
{
if ($application[1]["enabled"])
{
$perm_display[$i]['appName'] = $application[0];
$perm_display[$i]['translatedName'] = $application[1]["title"];
$i++;
}
}
// create apps output
$apps = CreateObject('phpgwapi.applications',intval($_account_id));
$db_perms = $apps->read_account_specific();
@reset($db_perms);
for ($i=0;$i<=count($perm_display);$i++)
{
$checked = "";
if ($new_permissions[$perm_display[$i]['appName']] || $db_perms[$perm_display[$i]['appName']])
{
$checked = " checked";
}
if($perm_display[$i]['translatedName'])
{
$part1 = sprintf("<td>%s</td><td><input type=\"checkbox\" name=\"new_permissions[%s]\" value=\"True\" %s></td>",
lang($perm_display[$i]['translatedName']),
$perm_display[$i]['appName'],
$checked);
}
$i++;
$checked = "";
if ($new_permissions[$perm_display[$i]['appName']] || $db_perms[$perm_display[$i]['appName']])
{
$checked = " checked";
}
if($perm_display[$i]['translatedName'])
{
$part2 = sprintf("<td>%s</td><td><input type=\"checkbox\" name=\"new_permissions[%s]\" value=\"True\" %s></td>",
lang($perm_display[$i]['translatedName']),
$perm_display[$i]['appName'],
$checked);
}
else
{
$part2 = '<td colspan="2">&nbsp;</td>';
}
$appRightsOutput .= sprintf("<tr bgcolor=\"%s\">$part1$part2</tr>\n",$phpgw_info["theme"]["row_on"]);
}
$t->set_var("permissions_list",$appRightsOutput);
$t->pparse('out','form');
}
// stores the userdata
function saveUserData($_userData)
{
global $new_permissions;
$account = CreateObject('phpgwapi.accounts',$_userData['account_id']);
$account->update_data($_userData);
$account->save_repository();
if ($_userData['passwd'])
{
$auth = CreateObject('phpgwapi.auth');
$auth->change_password($old_passwd, $_userData['passwd'], $_userData['account_id']);
}
$apps = CreateObject('phpgwapi.applications',array(intval($_userData['account_id']),'u'));
# $apps->read_installed_apps();
# $apps_before = $apps->read_account_specific();
$apps->account_type = 'u';
$apps->account_id = $_userData['account_id'];
$apps->account_apps = Array(Array());
while($app = each($new_permissions))
{
if($app[1])
{
$apps->add($app[0]);
if(!$apps_before[$app[0]])
{
$apps_after[] = $app[0];
}
}
}
$apps->save_repository();
}
// checks if the userdata are valid
// returns FALSE if the data are correct
// otherwise the error array
function userDataInvalid($_userData)
{
global $phpgw_info;
$totalerrors = 0;
if ($phpgw_info["server"]["account_repository"] == "ldap" && ! $allow_long_loginids)
{
if (strlen($_userData['account_lid']) > 8)
{
$error[$totalerrors] = lang("The loginid can not be more then 8 characters");
$totalerrors++;
}
}
if ($_userData['old_loginid'] != $_userData['account_lid'])
{
if (account_exsists($_userData['n_loginid']))
{
$error[$totalerrors] = lang("That loginid has already been taken");
$totalerrors++;
}
}
if ($_userData['n_passwd'] || $_userData['n_passwd_2'])
{
if ($_userData['n_passwd'] != $_userData['n_passwd_2'])
{
$error[$totalerrors] = lang("The two passwords are not the same");
$totalerrors++;
}
}
if (!count($new_permissions) || !count($n_groups))
{
#$error[$totalerrors] = "<br>" . lang("You must add at least 1 permission or group to this account");
#$totalerrors++;
}
if ($totalerrors == 0)
{
return FALSE;
}
else
{
return $error;
}
}
// todo
// not needed if i use the same file for new users too
if (! $account_id) {
Header("Location: " . $phpgw->link("accounts.php"));
}
if ($submit)
{
$userData = array(
'account_lid' => $account_lid, 'firstname' => $firstname,
'lastname' => $lastname, 'n_passwd' => $n_passwd,
'status' => $status, 'old_loginid' => rawurldecode($old_loginid),
'account_id' => $account_id, 'n_passwd_2' => $n_passwd_2
);
if (!$errors = userDataInvalid($userData))
{
saveUserData($userData);
Header('Location: ' . $phpgw->link('accounts.php', 'cd='.$cd));
$phpgw->common->phpgw_exit();
}
else
{
$phpgw->common->phpgw_header();
echo parse_navbar();
createPageBody($userData['account_id'],$userData,$errors);
account_close();
$phpgw->common->phpgw_footer();
}
}
else
{
$phpgw->common->phpgw_header();
echo parse_navbar();
createPageBody($account_id);
account_close();
$phpgw->common->phpgw_footer();
}
return;
//////////////////////////////////////////////////////////////////////////////////////////
//
// the old code
//
/////////////////////////////////////////////////////////////////////////////////////////
if (! $account_id) {
Header("Location: " . $phpgw->link("accounts.php"));
}
if ($submit) {
$totalerrors = 0;
if ($phpgw_info["server"]["account_repository"] == "ldap" && ! $allow_long_loginids) {
if (strlen($n_loginid) > 8) {
$error[$totalerrors++] = lang("The loginid can not be more then 8 characters");
}
}
if ($old_loginid != $n_loginid) {
if (account_exsists($n_loginid)) {
$error[$totalerrors++] = lang("That loginid has already been taken");
}
// $c_loginid = $n_loginid;
// $n_loginid = $old_loginid;
}
if ($n_passwd || $n_passwd_2) {
if ($n_passwd != $n_passwd_2) {
$error[$totalerrors++] = lang("The two passwords are not the same");
}
if (! $n_passwd){
$error[$totalerrors++] = lang("You must enter a password");
}
}
if (!count($new_permissions) || !count($n_groups)) {
$error[$totalerrors++] = "<br>" . lang("You must add at least 1 permission or group to this account");
}
if (! $totalerrors) {
$phpgw->db->lock(array('accounts','preferences','phpgw_sessions','phpgw_acl','applications'));
$phpgw->db->query("SELECT account_id FROM accounts WHERE account_lid='" . $old_loginid . "'",__LINE__,__FILE__);
$phpgw->db->next_record();
$account_id = intval($phpgw->db->f("account_id"));
$apps = CreateObject('phpgwapi.applications',array(intval($account_id),'u'));
$apps->read_installed_apps();
$apps_before = $apps->read_account_specific();
// Read Old Group ID's
$old_groups = $phpgw->accounts->read_groups($account_id);
// Read Old Group Apps
if ($old_groups) {
$apps->account_type = 'g';
reset($old_groups);
while($groups = each($old_groups)) {
$apps->account_id = $groups[0];
$old_app_groups = $apps->read_account_specific();
@reset($old_app_groups);
while($old_group_app = each($old_app_groups)) {
if(!$apps_before[$old_group_app[0]]) {
$apps_before[$old_group_app[0]] = $old_app_groups[$old_group_app[0]];
}
}
// delete old groups user was associated to
$phpgw->acl->delete('phpgw_group',$groups[0],$account_id,'u');
}
}
$apps->account_type = 'u';
$apps->account_id = $account_id;
$apps->account_apps = Array(Array());
while($app = each($new_permissions)) {
if($app[1]) {
$apps->add_app($app[0]);
if(!$apps_before[$app[0]]) {
$apps_after[] = $app[0];
}
}
}
$apps->save_apps();
@reset($new_permissions);
$cd = account_edit(array('loginid' => $n_loginid, 'firstname' => $n_firstname,
'lastname' => $n_lastname, 'passwd' => $n_passwd,
'account_status' => $n_account_status, 'old_loginid' => $old_loginid,
'account_id' => rawurldecode($account_id)));
// If the user is logged in, it will force a refresh of the session_info
//$phpgw->db->query("update phpgw_sessions set session_info='' where session_lid='$new_loginid@" . $phpgw_info["user"]["domain"] . "'",__LINE__,__FILE__);
// Add new groups user is associated to
for($i=0;$i<count($n_groups);$i++) {
$phpgw->acl->add('phpgw_group',$n_groups[$i],$account_id,'u',1);
}
// The following sets any default preferences needed for new applications..
// This is smart enough to know if previous preferences were selected, use them.
$pref = CreateObject('phpgwapi.preferences',intval($account_id));
$t = $pref->get_preferences();
$docommit = False;
$after_apps = explode(':',$apps_after);
for($i=1;$i<count($after_apps) - 1;$i++) {
if($after_apps[$i]=='admin') {
$check = 'common';
} else {
$check = $after_apps[$i];
}
if (!$t["$check"]) {
$phpgw->common->hook_single('add_def_pref', $after_apps[$i]);
$docommit = True;
}
}
if ($docommit) {
$pref->commit();
}
$apps->account_apps = Array(Array());
$apps_after = Array(Array());
// Read new Group ID's
$new_groups = $phpgw->accounts->read_groups($account_id);
// Read new Group Apps
if ($new_groups) {
$apps->account_type = 'g';
reset($new_groups);
while($groups = each($new_groups)) {
$apps->account_id = intval($groups[0]);
$new_app_groups = $apps->read_account_specific();
@reset($new_app_groups);
while($new_group_app = each($new_app_groups)) {
if(!$apps_after[$new_group_app[0]]) {
$apps_after[$new_group_app[0]] = $new_app_groups[$new_group_app[0]];
}
}
}
}
$apps->account_type = 'u';
$apps->account_id = $account_id;
$new_app_user = $apps->read_account_specific();
while($new_user_app = each($new_app_user)) {
if(!$apps_after[$new_user_app[0]]) {
$apps_after[$new_user_app[0]] = $new_app_user[$new_user_app[0]];
}
}
// start including other admin tools
while($app = each($apps_after))
{
$phpgw->common->hook_single('update_user_data', $app[0]);
}
$phpgw->db->unlock();
Header('Location: ' . $phpgw->link('accounts.php', 'cd='.$cd));
$phpgw->common->phpgw_exit();
}
} // if $submit
if ($totalerrors) {
$t->set_var("error_messages","<center>" . $phpgw->common->error_list($error) . "</center>");
} else {
$t->set_var("error_messages","");
}
$userData = $phpgw->accounts->read_repository($account_id);
if (! $submit) {
print $n_loginid = $userData["account_lid"];
print $n_firstname = $userData["firstname"];
print $n_lastname = $userData["lastname"];
$apps = CreateObject('phpgwapi.applications',array(intval($userData["account_id"]),'u'));
$apps->read_installed_apps();
/* $db_perms = $apps->read_account_specific(); */
}
if ($phpgw_info["server"]["account_repository"] == "ldap") {
$t->set_var("form_action",$phpgw->link("editaccount.php","account_id=" . rawurlencode($userData["account_dn"]) . "&old_loginid=" . $userData["account_lid"]));
} else {
$t->set_var("form_action",$phpgw->link("editaccount.php","account_id=" . $userData["account_id"] . "&old_loginid=" . $userData["account_lid"]));
}
$t->set_var("th_bg",$phpgw_info["theme"]["th_bg"]);
$t->set_var("tr_color1",$phpgw_info["theme"]["row_on"]);
$t->set_var("tr_color2",$phpgw_info["theme"]["row_off"]);
$t->set_var("lang_action",lang("Edit user account"));
$t->set_var("lang_loginid",lang("LoginID"));
$t->set_var("n_loginid_value",$n_loginid);
$t->set_var("lang_account_active",lang("Account active"));
if ($userData["status"]) {
$t->set_var("account_checked","checked");
} else {
$t->set_var("account_checked","");
}
$t->set_var("lang_password",lang("Password"));
$t->set_var("n_passwd_value",$n_passwd);
$t->set_var("lang_reenter_password",lang("Re-Enter Password"));
$t->set_var("n_passwd_2_value",$n_passwd_2);
$t->set_var("lang_firstname",lang("First Name"));
$t->set_var("n_firstname_value",$n_firstname);
$t->set_var("lang_lastname",lang("Last Name"));
$t->set_var("n_lastname_value",$n_lastname);
$t->set_var("lang_groups",lang("Groups"));
/*
$user_groups = $phpgw->accounts->read_group_names($userData["account_lid"]);
$groups_select = '<select name="n_groups[]" multiple>';
$phpgw->db->query("select * from groups");
while ($phpgw->db->next_record()) {
$groups_select .= '<option value="' . $phpgw->db->f("group_id") . '"';
for ($i=0; $i<count($user_groups); $i++) {
if ($user_groups[$i][0] == $phpgw->db->f("group_id")) {
$groups_select .= " selected";
}
}
$groups_select .= ">" . $phpgw->db->f("group_name") . "</option>\n";
}
$groups_select .= "</select>";
$t->set_var("groups_select",$groups_select);
$i = 0;
$sorted_apps = $phpgw_info["apps"];
@asort($sorted_apps);
@reset($sorted_apps);
while ($permission = each($sorted_apps)) {
if ($permission[1]["enabled"]) {
$perm_display[$i][0] = $permission[0];
$perm_display[$i][1] = $permission[1]["title"];
$i++;
}
}
@reset($db_perms);
for ($i=0;$i<200;) { // The $i<200 is only used for a brake
if (! $perm_display[$i][1]) break;
$perm_html .= '<tr bgcolor="'.$phpgw_info["theme"]["row_on"].'"><td>' . lang($perm_display[$i][1]) . '</td>'
. '<td><input type="checkbox" name="new_permissions['
. $perm_display[$i][0] . ']" value="True"';
if ($new_permissions[$perm_display[$i][0]] || $db_perms[$perm_display[$i][0]]) {
$perm_html .= " checked";
}
$perm_html .= "></td>";
$i++;
if ($i == count($perm_display) && is_odd(count($perm_display))) {
$perm_html .= '<td colspan="2">&nbsp;</td></tr>';
}
if (! $perm_display[$i][1]) break;
$perm_html .= '<td>' . lang($perm_display[$i][1]) . '</td>'
. '<td><input type="checkbox" name="new_permissions['
. $perm_display[$i][0] . ']" value="True"';
if ($new_permissions[$perm_display[$i][0]] || $db_perms[$perm_display[$i][0]]) {
$perm_html .= " checked";
}
$perm_html .= "></td></tr>\n";
$i++;
}
$t->set_var("permissions_list",$perm_html);
$apps->account_apps = Array(Array());
// Read new Group ID's
$new_groups = $phpgw->accounts->read_groups($account_id);
$apps_after = Array(Array());
// Read new Group Apps
if ($new_groups) {
$apps->account_type = 'g';
reset($new_groups);
while($groups = each($new_groups)) {
$apps->account_id = intval($groups[0]);
$new_app_groups = $apps->read_account_specific();
@reset($new_app_groups);
while($new_group_app = each($new_app_groups)) {
if(!$apps_after[$new_group_app[0]]) {
$apps_after[$new_group_app[0]] = $new_app_groups[$new_group_app[0]];
}
}
}
}
$apps->account_type = 'u';
$apps->account_id = intval($userData["account_id"]);
$new_app_user = $apps->read_account_specific();
while($new_user_app = each($new_app_user)) {
if(!$apps_after[$new_user_app[0]]) {
$apps_after[$new_user_app[0]] = $new_app_user[$new_user_app[0]];
}
}
*/
$includedSomething = False;
// start inlcuding other admin tools
while($app = each($apps_after))
{
// check if we have something included, when not ne need to set
// {gui_hooks} to ""
if ($phpgw->common->hook_single('show_user_data', $app[0])) $includedSomething=True;
}
if (!$includedSomething) $t->set_var('gui_hooks','');
$t->set_var("lang_button",lang('Save'));
$t->pparse('out','form');
account_close();
$phpgw->common->phpgw_footer();
?>