2000-08-18 05:24:22 +02:00
< ? 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 . *
\ **************************************************************************/
2001-02-11 04:07:43 +01:00
/* $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 )
{
global $phpgw , $phpgw_info ;
$t = new Template ( $phpgw -> common -> get_tpl_dir ( " admin " ));
$t -> set_file ( array ( " form " => " account_form.tpl " ));
$account = CreateObject ( 'phpgwapi.accounts' , $account_id );
$userData = $account -> read_repository ( $account_id );
$t -> set_var ( " form_action " , $phpgw -> link ( " editaccount.php " , " account_id= " . $userData [ " account_id " ]));
$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 " ]);
$t -> pparse ( 'out' , 'form' );
}
// stores the userdata
function saveUserData ( $_userData )
{
$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']);
}
}
// checks if the userdata are valid
function userDataValid ( $_userData )
{
return TRUE ;
}
// 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 , 'passwd' => $n_passwd ,
'status' => $status , 'old_loginid' => $old_loginid ,
'account_id' => $account_id
);
if ( userDataValid ( $userData ))
{
saveUserData ( $userData );
Header ( 'Location: ' . $phpgw -> link ( 'accounts.php' , 'cd=' . $cd ));
$phpgw -> common -> phpgw_exit ();
}
}
else
{
$phpgw -> common -> phpgw_header ();
echo parse_navbar ();
createPageBody ( $account_id );
account_close ();
$phpgw -> common -> phpgw_footer ();
}
return ;
2000-12-27 03:10:21 +01:00
function is_odd ( $n )
{
$ln = substr ( $n , - 1 );
if ( $ln == 1 || $ln == 3 || $ln == 5 || $ln == 7 || $ln == 9 ) {
return True ;
} else {
return False ;
}
}
2000-10-20 06:43:13 +02:00
if ( ! $account_id ) {
2000-08-18 05:24:22 +02:00
Header ( " Location: " . $phpgw -> link ( " accounts.php " ));
2000-10-20 06:43:13 +02:00
}
2000-08-18 05:24:22 +02:00
if ( $submit ) {
2000-10-28 21:24:51 +02:00
$totalerrors = 0 ;
2000-12-06 12:19:59 +01:00
if ( $phpgw_info [ " server " ][ " account_repository " ] == " ldap " && ! $allow_long_loginids ) {
2000-11-13 11:05:45 +01:00
if ( strlen ( $n_loginid ) > 8 ) {
$error [ $totalerrors ++ ] = lang ( " The loginid can not be more then 8 characters " );
}
}
2000-10-28 21:24:51 +02:00
2000-10-20 06:43:13 +02:00
if ( $old_loginid != $n_loginid ) {
if ( account_exsists ( $n_loginid )) {
2000-10-28 21:24:51 +02:00
$error [ $totalerrors ++ ] = lang ( " That loginid has already been taken " );
2000-10-20 06:43:13 +02:00
}
2000-11-23 23:00:11 +01:00
// $c_loginid = $n_loginid;
// $n_loginid = $old_loginid;
2000-10-20 06:43:13 +02:00
}
if ( $n_passwd || $n_passwd_2 ) {
if ( $n_passwd != $n_passwd_2 ) {
2000-10-28 21:24:51 +02:00
$error [ $totalerrors ++ ] = lang ( " The two passwords are not the same " );
2000-10-20 06:43:13 +02:00
}
if ( ! $n_passwd ){
2000-10-28 21:24:51 +02:00
$error [ $totalerrors ++ ] = lang ( " You must enter a password " );
2000-10-20 06:43:13 +02:00
}
}
2001-02-02 04:11:57 +01:00
if ( ! count ( $new_permissions ) || ! count ( $n_groups )) {
2001-02-02 13:28:39 +01:00
$error [ $totalerrors ++ ] = " <br> " . lang ( " You must add at least 1 permission or group to this account " );
2000-10-20 06:43:13 +02:00
}
2000-10-28 21:24:51 +02:00
if ( ! $totalerrors ) {
2001-02-02 13:28:39 +01:00
$phpgw -> db -> lock ( array ( 'accounts' , 'preferences' , 'phpgw_sessions' , 'phpgw_acl' , 'applications' ));
2001-02-02 04:11:57 +01:00
$phpgw -> db -> query ( " SELECT account_id FROM accounts WHERE account_lid=' " . $old_loginid . " ' " , __LINE__ , __FILE__ );
$phpgw -> db -> next_record ();
2001-02-02 13:28:39 +01:00
$account_id = intval ( $phpgw -> db -> f ( " account_id " ));
2001-02-02 04:11:57 +01:00
$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
2001-02-02 13:28:39 +01:00
$phpgw -> acl -> delete ( 'phpgw_group' , $groups [ 0 ], $account_id , 'u' );
2001-02-02 04:11:57 +01:00
}
}
2001-02-02 13:28:39 +01:00
2001-02-02 04:11:57 +01:00
$apps -> account_type = 'u' ;
2001-02-02 13:28:39 +01:00
$apps -> account_id = $account_id ;
2001-02-02 04:11:57 +01:00
$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 ();
2001-02-03 04:31:00 +01:00
@ reset ( $new_permissions );
2000-12-26 07:30:51 +01:00
2001-02-02 13:28:39 +01:00
$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 )));
2000-12-26 07:30:51 +01:00
// If the user is logged in, it will force a refresh of the session_info
2001-01-10 05:26:06 +01:00
//$phpgw->db->query("update phpgw_sessions set session_info='' where session_lid='$new_loginid@" . $phpgw_info["user"]["domain"] . "'",__LINE__,__FILE__);
2000-12-22 22:18:35 +01:00
2001-02-02 04:11:57 +01:00
// Add new groups user is associated to
for ( $i = 0 ; $i < count ( $n_groups ); $i ++ ) {
2001-02-02 13:28:39 +01:00
$phpgw -> acl -> add ( 'phpgw_group' , $n_groups [ $i ], $account_id , 'u' , 1 );
2001-02-02 04:11:57 +01:00
}
2000-12-31 17:20:49 +01:00
// The following sets any default preferences needed for new applications..
// This is smart enough to know if previous preferences were selected, use them.
2001-01-04 21:06:38 +01:00
2001-01-18 04:50:48 +01:00
$pref = CreateObject ( 'phpgwapi.preferences' , intval ( $account_id ));
2001-01-04 21:06:38 +01:00
$t = $pref -> get_preferences ();
2000-12-31 17:20:49 +01:00
2001-01-04 21:06:38 +01:00
$docommit = False ;
2001-01-10 06:01:56 +01:00
$after_apps = explode ( ':' , $apps_after );
for ( $i = 1 ; $i < count ( $after_apps ) - 1 ; $i ++ ) {
2001-02-02 13:28:39 +01:00
if ( $after_apps [ $i ] == 'admin' ) {
$check = 'common' ;
2001-01-04 21:06:38 +01:00
} else {
2001-01-10 06:01:56 +01:00
$check = $after_apps [ $i ];
2001-01-04 21:06:38 +01:00
}
2001-01-10 06:01:56 +01:00
if ( ! $t [ " $check " ]) {
2001-02-02 13:28:39 +01:00
$phpgw -> common -> hook_single ( 'add_def_pref' , $after_apps [ $i ]);
2001-01-04 21:06:38 +01:00
$docommit = True ;
2000-12-26 07:30:51 +01:00
}
2000-12-31 17:20:49 +01:00
}
2001-01-04 21:06:38 +01:00
if ( $docommit ) {
$pref -> commit ();
}
2001-02-02 13:28:39 +01:00
$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 ]];
}
}
2001-01-04 21:06:38 +01:00
// start including other admin tools
2001-02-02 13:28:39 +01:00
while ( $app = each ( $apps_after ))
2000-12-31 17:20:49 +01:00
{
2001-02-02 13:28:39 +01:00
$phpgw -> common -> hook_single ( 'update_user_data' , $app [ 0 ]);
2000-12-31 17:20:49 +01:00
}
2001-02-02 04:11:57 +01:00
$phpgw -> db -> unlock ();
2001-02-02 13:28:39 +01:00
Header ( 'Location: ' . $phpgw -> link ( 'accounts.php' , 'cd=' . $cd ));
2000-12-31 17:20:49 +01:00
$phpgw -> common -> phpgw_exit ();
2000-10-20 06:43:13 +02:00
}
2000-12-18 02:28:30 +01:00
} // if $submit
2001-01-18 04:50:48 +01:00
2001-02-11 04:07:43 +01:00
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 " ));
/*
2000-12-18 02:28:30 +01:00
$user_groups = $phpgw -> accounts -> read_group_names ( $userData [ " account_lid " ]);
2000-12-18 22:46:41 +01:00
$groups_select = '<select name="n_groups[]" multiple>' ;
2000-12-18 02:28:30 +01:00
$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 " ;
}
2000-12-18 22:46:41 +01:00
$groups_select .= " </select> " ;
2001-02-11 04:07:43 +01:00
$t -> set_var ( " groups_select " , $groups_select );
2000-12-18 02:28:30 +01:00
$i = 0 ;
2000-12-23 07:28:34 +01:00
$sorted_apps = $phpgw_info [ " apps " ];
2000-12-27 03:10:21 +01:00
@ asort ( $sorted_apps );
@ reset ( $sorted_apps );
2001-02-02 04:11:57 +01:00
while ( $permission = each ( $sorted_apps )) {
2000-12-18 02:28:30 +01:00
if ( $permission [ 1 ][ " enabled " ]) {
$perm_display [ $i ][ 0 ] = $permission [ 0 ];
$perm_display [ $i ][ 1 ] = $permission [ 1 ][ " title " ];
$i ++ ;
}
}
2001-02-02 13:28:39 +01:00
@ reset ( $db_perms );
2000-12-18 17:36:43 +01:00
for ( $i = 0 ; $i < 200 ;) { // The $i<200 is only used for a brake
2000-12-18 02:28:30 +01:00
if ( ! $perm_display [ $i ][ 1 ]) break ;
2000-12-26 01:52:38 +01:00
$perm_html .= '<tr bgcolor="' . $phpgw_info [ " theme " ][ " row_on " ] . '"><td>' . lang ( $perm_display [ $i ][ 1 ]) . '</td>'
2000-12-18 02:28:30 +01:00
. '<td><input type="checkbox" name="new_permissions['
. $perm_display [ $i ][ 0 ] . ']" value="True"' ;
2001-02-02 04:11:57 +01:00
if ( $new_permissions [ $perm_display [ $i ][ 0 ]] || $db_perms [ $perm_display [ $i ][ 0 ]]) {
2000-12-18 02:28:30 +01:00
$perm_html .= " checked " ;
}
$perm_html .= " ></td> " ;
$i ++ ;
2000-12-27 03:10:21 +01:00
if ( $i == count ( $perm_display ) && is_odd ( count ( $perm_display ))) {
$perm_html .= '<td colspan="2"> </td></tr>' ;
}
2000-12-18 02:28:30 +01:00
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"' ;
2001-02-02 04:11:57 +01:00
if ( $new_permissions [ $perm_display [ $i ][ 0 ]] || $db_perms [ $perm_display [ $i ][ 0 ]]) {
2000-12-18 02:28:30 +01:00
$perm_html .= " checked " ;
}
2000-12-27 03:10:21 +01:00
$perm_html .= " ></td></tr> \n " ;
2000-12-18 02:28:30 +01:00
$i ++ ;
}
2000-12-23 07:28:34 +01:00
2001-02-11 04:07:43 +01:00
$t -> set_var ( " permissions_list " , $perm_html );
2000-12-31 17:20:49 +01:00
2001-02-02 13:28:39 +01:00
$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 ]];
}
}
2001-02-11 04:07:43 +01:00
*/
2001-02-02 13:28:39 +01:00
$includedSomething = False ;
2000-12-31 17:20:49 +01:00
// start inlcuding other admin tools
2001-02-02 13:28:39 +01:00
while ( $app = each ( $apps_after ))
2000-12-31 17:20:49 +01:00
{
// check if we have something included, when not ne need to set
// {gui_hooks} to ""
2001-02-02 13:28:39 +01:00
if ( $phpgw -> common -> hook_single ( 'show_user_data' , $app [ 0 ])) $includedSomething = True ;
2000-12-31 17:20:49 +01:00
}
2001-02-11 04:07:43 +01:00
if ( ! $includedSomething ) $t -> set_var ( 'gui_hooks' , '' );
2000-12-26 01:52:38 +01:00
2001-02-11 04:07:43 +01:00
$t -> set_var ( " lang_button " , lang ( 'Save' ));
$t -> pparse ( 'out' , 'form' );
2000-12-18 02:28:30 +01:00
2000-10-20 07:59:25 +02:00
account_close ();
$phpgw -> common -> phpgw_footer ();
2000-09-29 07:24:18 +02:00
?>