diff --git a/admin/inc/class.boaccounts.inc.php b/admin/inc/class.boaccounts.inc.php
new file mode 100755
index 0000000000..18d26f36d5
--- /dev/null
+++ b/admin/inc/class.boaccounts.inc.php
@@ -0,0 +1,950 @@
+ True,
+ 'add_user' => True,
+ 'delete_group' => True,
+ 'delete_user' => True,
+ 'edit_group' => True,
+ 'edit_user' => True,
+ 'set_group_managers' => True
+ );
+
+ var $xml_functions = array();
+
+ var $soap_functions = array(
+ 'add_user' => array(
+ 'in' => array('int', 'struct'),
+ 'out' => array()
+ )
+ );
+
+ function boaccounts()
+ {
+ $this->so = createobject('admin.soaccounts');
+ }
+
+ function DONTlist_methods($_type='xmlrpc')
+ {
+ /*
+ This handles introspection or discovery by the logged in client,
+ in which case the input might be an array. The server always calls
+ this function to fill the server dispatch map using a string.
+ */
+ if (is_array($_type))
+ {
+ $_type = $_type['type'] ? $_type['type'] : $_type[0];
+ }
+ switch($_type)
+ {
+ case 'xmlrpc':
+ $xml_functions = array(
+ 'rpc_add_user' => array(
+ 'function' => 'rpc_add_user',
+ 'signature' => array(array(xmlrpcStruct,xmlrpcStruct)),
+ 'docstring' => lang('Add a new account.')
+ ),
+ 'list_methods' => array(
+ 'function' => 'list_methods',
+ 'signature' => array(array(xmlrpcStruct,xmlrpcString)),
+ 'docstring' => lang('Read this list of methods.')
+ )
+ );
+ return $xml_functions;
+ break;
+ case 'soap':
+ return $this->soap_functions;
+ break;
+ default:
+ return array();
+ break;
+ }
+ }
+
+ function delete_group()
+ {
+ if (!@isset($_POST['account_id']) || !@$_POST['account_id'] || $GLOBALS['phpgw']->acl->check('group_access',32,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_groups');
+ return False;
+ }
+
+ $account_id = (int)$_POST['account_id'];
+
+ $GLOBALS['phpgw']->db->lock(
+ Array(
+ 'phpgw_accounts',
+ 'phpgw_app_sessions',
+ 'phpgw_acl'
+ )
+ );
+
+ $old_group_list = $GLOBALS['phpgw']->acl->get_ids_for_location($account_id,1,'phpgw_group');
+
+ @reset($old_group_list);
+ while($old_group_list && $id = each($old_group_list))
+ {
+ $GLOBALS['phpgw']->acl->delete_repository('phpgw_group',$account_id,(int)$id[1]);
+ $GLOBALS['phpgw']->session->delete_cache((int)$id[1]);
+ }
+
+ $GLOBALS['phpgw']->acl->delete_repository('%%','run',$account_id);
+
+ if (! @rmdir($GLOBALS['phpgw_info']['server']['files_dir'].SEP.'groups'.SEP.$GLOBALS['phpgw']->accounts->id2name($account_id)))
+ {
+ $cd = 38;
+ }
+ else
+ {
+ $cd = 32;
+ }
+
+ $GLOBALS['phpgw']->accounts->delete($account_id);
+
+ $GLOBALS['phpgw']->db->unlock();
+
+ Header('Location: '.$GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiaccounts.list_groups'));
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+
+ function delete_user()
+ {
+ if (isset($_POST['cancel']) || $GLOBALS['phpgw']->acl->check('account_access',32,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+ elseif($_POST['delete_account'])
+ {
+ $accountid = $_POST['account_id'];
+ settype($account_id,'integer');
+ $account_id = get_account_id($accountid);
+ // make this information also in hook available
+ $lid = $GLOBALS['phpgw']->accounts->id2name($account_id);
+
+ $GLOBALS['hook_values']['account_id'] = $account_id;
+ $GLOBALS['hook_values']['account_lid'] = $lid;
+
+ $singleHookValues = $GLOBALS['hook_values']+array('location' => 'deleteaccount');
+
+ $db = $GLOBALS['phpgw']->db;
+ $db->query('SELECT app_name,app_order FROM phpgw_applications WHERE app_enabled!=0 ORDER BY app_order',__LINE__,__FILE__);
+ if($db->num_rows())
+ {
+ while($db->next_record())
+ {
+ $appname = $db->f('app_name');
+
+ if($appname <> 'admin' || $appname <> 'preferences')
+ {
+ $GLOBALS['phpgw']->hooks->single($singleHookValues, $appname);
+ }
+ }
+ }
+
+ $GLOBALS['phpgw']->hooks->single('deleteaccount','preferences');
+ $GLOBALS['phpgw']->hooks->single('deleteaccount','admin');
+
+ $basedir = $GLOBALS['phpgw_info']['server']['files_dir'] . SEP . 'users' . SEP;
+
+ if (! @rmdir($basedir . $lid))
+ {
+ $cd = 34;
+ }
+ else
+ {
+ $cd = 29;
+ }
+
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+ }
+
+ function add_group()
+ {
+ if ($GLOBALS['phpgw']->acl->check('group_access',4,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_groups');
+ return False;
+ }
+
+ $temp_users = ($_POST['account_user']?$_POST['account_user']:Array());
+ $account_user = Array();
+ @reset($temp_users);
+ while(list($key,$user_id) = each($temp_users))
+ {
+ $account_user[$user_id] = ' selected';
+ }
+ @reset($account_user);
+
+ $group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array());
+ $account_apps = Array();
+ @reset($group_permissions);
+ while(list($key,$value) = each($group_permissions))
+ {
+ if($value)
+ {
+ $account_apps[$key] = True;
+ }
+ }
+ @reset($account_apps);
+
+ $group_info = Array(
+ 'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0),
+ 'account_name' => ($_POST['account_name']?$_POST['account_name']:''),
+ 'account_user' => $account_user,
+ 'account_apps' => $account_apps
+ );
+
+ $this->validate_group($group_info);
+
+ $GLOBALS['phpgw']->db->lock(
+ Array(
+ 'phpgw_accounts',
+ 'phpgw_nextid',
+ 'phpgw_preferences',
+ 'phpgw_sessions',
+ 'phpgw_acl',
+ 'phpgw_applications',
+ 'phpgw_app_sessions',
+ 'phpgw_hooks'
+ )
+ );
+
+ $group = CreateObject('phpgwapi.accounts',$group_info['account_id'],'g');
+ $group->acct_type = 'g';
+ $account_info = array(
+ 'account_type' => 'g',
+ 'account_lid' => $group_info['account_name'],
+ 'account_passwd' => '',
+ 'account_firstname' => $group_info['account_name'],
+ 'account_lastname' => 'Group',
+ 'account_status' => 'A',
+ 'account_expires' => -1
+// 'account_file_space' => $account_file_space_number . "-" . $account_file_space_type,
+ );
+ $group_info['account_id'] = $group->create($account_info);
+ // do the following only if we got an id - the create succided
+ if ($group_info['account_id'])
+ {
+ $apps = CreateObject('phpgwapi.applications',$group_info['account_id']);
+ $apps->update_data(Array());
+ reset($group_info['account_apps']);
+ while(list($app,$value) = each($group_info['account_apps']))
+ {
+ $apps->add($app);
+ $new_apps[] = $app;
+ }
+ $apps->save_repository();
+
+ $acl = CreateObject('phpgwapi.acl',$group_info['account_id']);
+ $acl->read_repository();
+
+ @reset($group_info['account_user']);
+ while(list($user_id,$dummy) = each($group_info['account_user']))
+ {
+ if(!$dummy)
+ {
+ continue;
+ }
+ $acl->add_repository('phpgw_group',$group_info['account_id'],$user_id,1);
+
+ $docommit = False;
+ $GLOBALS['pref'] = CreateObject('phpgwapi.preferences',$user_id);
+ $t = $GLOBALS['pref']->read_repository();
+ @reset($new_apps);
+ while(is_array($new_apps) && list($app_key,$app_name) = each($new_apps))
+ {
+ if (!$t[($app_name=='admin'?'common':$app_name)])
+ {
+ $GLOBALS['phpgw']->hooks->single('add_def_pref', $app_name);
+ $docommit = True;
+ }
+ }
+ if ($docommit)
+ {
+ $GLOBALS['pref']->save_repository();
+ }
+ }
+
+ $acl->save_repository();
+
+ $basedir = $GLOBALS['phpgw_info']['server']['files_dir'] . SEP . 'groups' . SEP;
+ $cd = 31;
+ umask(000);
+ if (! @mkdir ($basedir . $group_info['account_name'], 0707))
+ {
+ $cd = 37;
+ }
+
+ $GLOBALS['phpgw']->db->unlock();
+ }
+ ExecMethod('admin.uiaccounts.list_groups');
+
+ return False;
+ }
+
+ function add_user()
+ {
+ if ($GLOBALS['phpgw']->acl->check('account_access',4,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+
+ $accountPrefix = '';
+ if(isset($GLOBALS['phpgw_info']['server']['account_prefix']))
+ {
+ $accountPrefix = $GLOBALS['phpgw_info']['server']['account_prefix'];
+ }
+
+ if ($_POST['submit'])
+ {
+ $userData = array(
+ 'account_type' => 'u',
+ 'account_lid' => $accountPrefix.$_POST['account_lid'],
+ 'account_firstname' => $_POST['account_firstname'],
+ 'account_lastname' => $_POST['account_lastname'],
+ 'account_passwd' => $_POST['account_passwd'],
+ 'status' => ($_POST['account_status'] ? 'A' : ''),
+ 'account_status' => ($_POST['account_status'] ? 'A' : ''),
+ 'old_loginid' => ($_GET['old_loginid']?rawurldecode($_GET['old_loginid']):''),
+ 'account_id' => ($_GET['account_id']?$_GET['account_id']:0),
+ 'account_primary_group' => $_POST['account_primary_group'],
+ 'account_passwd_2' => $_POST['account_passwd_2'],
+ 'account_groups' => $_POST['account_groups'],
+ 'anonymous' => $_POST['anonymous'],
+ 'changepassword' => $_POST['changepassword'],
+ 'account_permissions' => $_POST['account_permissions'],
+ 'homedirectory' => $_POST['homedirectory'],
+ 'loginshell' => $_POST['loginshell'],
+ 'account_expires_never' => $_POST['never_expires'],
+ 'account_email' => $_POST['account_email'],
+ /* 'file_space' => $_POST['account_file_space_number'] . "-" . $_POST['account_file_space_type'] */
+ );
+
+ // add the primary group, to the users other groups, if not already added
+ if(is_array($userData['account_groups']))
+ {
+ if(!in_array($userData['account_primary_group'],$userData['account_groups']))
+ {
+ $userData['account_groups'][] = (int)$userData['account_primary_group'];
+ }
+ }
+ else
+ {
+ $userData['account_groups'] = array((int)$userData['account_primary_group']);
+ }
+
+ // when does the account expire
+ if ($_POST['expires'] !== '' && !$_POST['never_expires'])
+ {
+ $jscal = CreateObject('phpgwapi.jscalendar',False);
+ $userData += $jscal->input2date($_POST['expires'],False,'account_expires_day','account_expires_month','account_expires_year');
+ }
+
+ // do we have all needed data??
+ if (!($errors = $this->validate_user($userData)) &&
+ ($userData['account_id'] = $account_id = $this->so->add_user($userData))) // no error in the creation
+ {
+ if ($userData['anonymous'])
+ {
+ $GLOBALS['phpgw']->acl->add_repository('phpgwapi','anonymous',$account_id,1);
+ }
+ else
+ {
+ $GLOBALS['phpgw']->acl->delete_repository('phpgwapi','anonymous',$account_id);
+ }
+ // make this information for the hooks available
+ $GLOBALS['hook_values'] = $userData + array('new_passwd' => $userData['account_passwd']);
+ $GLOBALS['phpgw']->hooks->process($GLOBALS['hook_values']+array(
+ 'location' => 'addaccount'
+ ),False,True); // called for every app now, not only enabled ones
+
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+ else
+ {
+ $ui = createobject('admin.uiaccounts');
+ $ui->create_edit_user($userData['account_id'],$userData,$errors);
+ }
+ }
+ else
+ {
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+ }
+
+ function edit_group()
+ {
+ if ($GLOBALS['phpgw']->acl->check('group_access',16,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_groups');
+ return False;
+ }
+
+ $temp_users = ($_POST['account_user']?$_POST['account_user']:Array());
+ $account_user = Array();
+ @reset($temp_users);
+ while($temp_users && list($key,$user_id) = each($temp_users))
+ {
+ $account_user[$user_id] = ' selected';
+ }
+ @reset($account_user);
+
+ $group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array());
+ $account_apps = Array();
+ @reset($group_permissions);
+ while(list($key,$value) = each($group_permissions))
+ {
+ if($value)
+ {
+ $account_apps[$key] = True;
+ }
+ }
+ @reset($account_apps);
+
+ $group_info = Array(
+ 'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0),
+ 'account_name' => ($_POST['account_name']?$_POST['account_name']:''),
+ 'account_user' => $account_user,
+ 'account_apps' => $account_apps
+ );
+
+ $this->validate_group($group_info);
+
+ // Lock tables
+ $GLOBALS['phpgw']->db->lock(
+ Array(
+ 'phpgw_accounts',
+ 'phpgw_preferences',
+ 'phpgw_config',
+ 'phpgw_applications',
+ 'phpgw_hooks',
+ 'phpgw_sessions',
+ 'phpgw_acl',
+ 'phpgw_app_sessions'
+ )
+ );
+
+ $group = CreateObject('phpgwapi.accounts',$group_info['account_id'],'g');
+ $old_group_info = $group->read_repository();
+
+ // Set group apps
+ $apps = CreateObject('phpgwapi.applications',$group_info['account_id']);
+ $apps_before = $apps->read_account_specific();
+ $apps->update_data(Array());
+ $new_apps = Array();
+ if(count($group_info['account_apps']))
+ {
+ reset($group_info['account_apps']);
+ while(list($app,$value) = each($group_info['account_apps']))
+ {
+ $apps->add($app);
+ if(!@$apps_before[$app] || @$apps_before == False)
+ {
+ $new_apps[] = $app;
+ }
+ }
+ }
+ $apps->save_repository();
+
+ // Set new account_lid, if needed
+ if($group_info['account_name'] && $old_group_info['account_lid'] <> $group_info['account_name'])
+ {
+ $group->data['account_lid'] = $group_info['account_name'];
+ $group->data['firstname'] = $group_info['account_name'];
+
+ $basedir = $GLOBALS['phpgw_info']['server']['files_dir'] . SEP . 'groups' . SEP;
+ if (! @rename($basedir . $old_group_info['account_lid'], $basedir . $group_info['account_name']))
+ {
+ $cd = 39;
+ }
+ else
+ {
+ $cd = 33;
+ }
+ }
+ else
+ {
+ $cd = 33;
+ }
+
+ // Set group acl
+ $acl = CreateObject('phpgwapi.acl',$group_info['account_id']);
+ $old_group_list = $acl->get_ids_for_location($group_info['account_id'],1,'phpgw_group');
+ @reset($old_group_list);
+ while($old_group_list && list($key,$user_id) = each($old_group_list))
+ {
+ $acl->delete_repository('phpgw_group',$group_info['account_id'],$user_id);
+ if(!$group_info['account_user'][$user_id])
+ {
+ // If the user is logged in, it will force a refresh of the session_info
+ $GLOBALS['phpgw']->db->query("update phpgw_sessions set session_action='' "
+ ."where session_lid='" . $GLOBALS['phpgw']->accounts->id2name($user_id)
+ . '@' . $GLOBALS['phpgw_info']['user']['domain'] . "'",__LINE__,__FILE__);
+ $GLOBALS['phpgw']->session->delete_cache($user_id);
+ }
+ }
+
+ @reset($group_info['account_user']);
+ while(list($user_id,$dummy) = each($group_info['account_user']))
+ {
+ if(!$dummy)
+ {
+ continue;
+ }
+ $acl->add_repository('phpgw_group',$group_info['account_id'],$user_id,1);
+
+ // If the user is logged in, it will force a refresh of the session_info
+ $GLOBALS['phpgw']->db->query("update phpgw_sessions set session_action='' "
+ ."where session_lid='" . $GLOBALS['phpgw']->accounts->id2name($user_id)
+ . '@' . $GLOBALS['phpgw_info']['user']['domain'] . "'",__LINE__,__FILE__);
+
+ $GLOBALS['phpgw']->session->delete_cache($user_id);
+
+ // The following sets any default preferences needed for new applications..
+ // This is smart enough to know if previous preferences were selected, use them.
+ $docommit = False;
+ if($new_apps)
+ {
+ $GLOBALS['pref'] = CreateObject('phpgwapi.preferences',$user_id);
+ $t = $GLOBALS['pref']->read_repository();
+ @reset($new_apps);
+ while(list($app_key,$app_name) = each($new_apps))
+ {
+ if (!$t[($app_name=='admin'?'common':$app_name)])
+ {
+ $GLOBALS['phpgw']->hooks->single('add_def_pref', $app_name);
+ $docommit = True;
+ }
+ }
+ }
+ if ($docommit)
+ {
+ $GLOBALS['pref']->save_repository();
+ }
+ }
+
+ // This is down here so we are sure to catch the acl changes
+ // for LDAP to update the memberuid attribute
+ $group->save_repository();
+
+ $GLOBALS['phpgw']->db->unlock();
+
+ ExecMethod('admin.uiaccounts.list_groups');
+ return False;
+ }
+
+ function edit_user()
+ {
+ if ($GLOBALS['phpgw']->acl->check('account_access',16,'admin'))
+ {
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+
+ $accountPrefix = '';
+ if(isset($GLOBALS['phpgw_info']['server']['account_prefix']))
+ {
+ $accountPrefix = $GLOBALS['phpgw_info']['server']['account_prefix'];
+ }
+
+ if ($_POST['submit'])
+ {
+ $userData = array(
+ 'account_lid' => $accountPrefix.$_POST['account_lid'],
+ 'firstname' => $_POST['account_firstname'],
+ 'lastname' => $_POST['account_lastname'],
+ 'account_passwd' => $_POST['account_passwd'],
+ 'status' => ($_POST['account_status'] ? 'A' : ''),
+ 'account_status' => ($_POST['account_status'] ? 'A' : ''),
+ 'old_loginid' => ($_GET['old_loginid']?rawurldecode($_GET['old_loginid']):''),
+ 'account_id' => ($_GET['account_id']?$_GET['account_id']:0),
+ 'account_passwd_2' => $_POST['account_passwd_2'],
+ 'account_groups' => $_POST['account_groups'],
+ 'account_primary_group' => $_POST['account_primary_group'],
+ 'anonymous' => $_POST['anonymous'],
+ 'changepassword' => $_POST['changepassword'],
+ 'account_permissions' => $_POST['account_permissions'],
+ 'homedirectory' => $_POST['homedirectory'],
+ 'loginshell' => $_POST['loginshell'],
+ 'account_expires_never' => $_POST['never_expires'],
+ 'email' => $_POST['account_email'],
+ /* 'file_space' => $_POST['account_file_space_number'] . "-" . $_POST['account_file_space_type'] */
+ );
+ if ($userData['account_primary_group'] && (!isset($userData['account_groups']) || !in_array($userData['account_primary_group'],$userData['account_groups'])))
+ {
+ $userData['account_groups'][] = (int)$userData['account_primary_group'];
+ }
+ if ($_POST['expires'] !== '' && !$_POST['never_expires'])
+ {
+ $jscal = CreateObject('phpgwapi.jscalendar',False);
+ $userData += $jscal->input2date($_POST['expires'],False,'account_expires_day','account_expires_month','account_expires_year');
+ }
+ if (!$errors = $this->validate_user($userData))
+ {
+ $this->save_user($userData);
+ $GLOBALS['hook_values'] = $userData;
+ $GLOBALS['phpgw']->hooks->process($GLOBALS['hook_values']+array(
+ 'location' => 'editaccount'
+ ),False,True); // called for every app now, not only enabled ones)
+
+ // check if would create a menu
+ // if we do, we can't return to the users list, because
+ // there are also some other plugins
+ if (!ExecMethod('admin.uimenuclass.createHTMLCode','edit_user'))
+ {
+ ExecMethod('admin.uiaccounts.list_users');
+ return False;
+ }
+ else
+ {
+ ExecMethod('admin.uiaccounts.edit_user',$_GET['account_id']);
+ return False;
+ }
+ }
+ else
+ {
+ $ui = createobject('admin.uiaccounts');
+ $ui->create_edit_user($userData['account_id'],$userData,$errors);
+ }
+ }
+ }
+
+ function set_group_managers()
+ {
+ if($GLOBALS['phpgw']->acl->check('group_access',16,'admin') || $_POST['cancel'])
+ {
+ $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiaccounts.list_groups'));
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+ elseif($_POST['submit'])
+ {
+ $acl = CreateObject('phpgwapi.acl',(int)$_POST['account_id']);
+
+ $users = $GLOBALS['phpgw']->accounts->member($_POST['account_id']);
+ @reset($users);
+ while($managers && list($key,$user) = each($users))
+ {
+ $acl->add_repository('phpgw_group',(int)$_POST['account_id'],$user['account_id'],1);
+ }
+ $managers = $_POST['managers'];
+ @reset($managers);
+ while($managers && list($key,$manager) = each($managers))
+ {
+ $acl->add_repository('phpgw_group',(int)$_POST['account_id'],$manager,(1 + PHPGW_ACL_GROUP_MANAGERS));
+ }
+ }
+ $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiaccounts.list_groups'));
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+
+ function validate_group($group_info)
+ {
+ $errors = Array();
+
+ $group = CreateObject('phpgwapi.accounts',$group_info['account_id'],'g');
+ $group->read_repository();
+
+ if(!$group_info['account_name'])
+ {
+ $errors[] = lang('You must enter a group name.');
+ }
+
+ if($group_info['account_name'] != $group->id2name($group_info['account_id']))
+ {
+ if ($group->exists($group_info['account_name']))
+ {
+ $errors[] = lang('Sorry, that group name has already been taken.');
+ }
+ }
+
+ /*
+ if (preg_match ("/\D/", $account_file_space_number))
+ {
+ $errors[] = lang ('File space must be an integer');
+ }
+ */
+ if(count($errors))
+ {
+ $ui = createobject('admin.uiaccounts');
+ $ui->create_edit_group($group_info,$errors);
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+ }
+
+ /* checks if the userdata are valid
+ returns FALSE if the data are correct
+ otherwise the error array
+ */
+ function validate_user(&$_userData)
+ {
+ $totalerrors = 0;
+
+ if ($GLOBALS['phpgw_info']['server']['account_repository'] == 'ldap' &&
+ (!$_userData['account_lastname'] && !$_userData['lastname']))
+ {
+ $error[$totalerrors] = lang('You must enter a lastname');
+ $totalerrors++;
+ }
+
+ if (!$_userData['account_lid'])
+ {
+ $error[$totalerrors] = lang('You must enter a loginid');
+ $totalerrors++;
+ }
+
+ if(!in_array($_userData['account_primary_group'],$_userData['account_groups']))
+ {
+ $error[$totalerrors] = lang('The groups must include the primary group');
+ $totalerrors++;
+ }
+
+ if ($_userData['old_loginid'] != $_userData['account_lid'])
+ {
+ if ($GLOBALS['phpgw']->accounts->exists($_userData['account_lid']))
+ {
+ if ($GLOBALS['phpgw']->accounts->exists($_userData['account_lid']) && $GLOBALS['phpgw']->accounts->get_type($_userData['account_lid'])=='g')
+ {
+ $error[$totalerrors] = lang('There already is a group with this name. Userid\'s can not have the same name as a groupid');
+ }
+ else
+ {
+ $error[$totalerrors] = lang('That loginid has already been taken');
+ }
+ $totalerrors++;
+ }
+ }
+
+ if ($_userData['account_passwd'] || $_userData['account_passwd_2'])
+ {
+ if ($_userData['account_passwd'] != $_userData['account_passwd_2'])
+ {
+ $error[$totalerrors] = lang('The two passwords are not the same');
+ $totalerrors++;
+ }
+ }
+
+ if (!count($_userData['account_permissions']) && !count($_userData['account_groups']))
+ {
+ $error[$totalerrors] = lang('You must add at least 1 permission or group to this account');
+ $totalerrors++;
+ }
+
+ if ($_userData['account_expires_month'] || $_userData['account_expires_day'] || $_userData['account_expires_year'] || $_userData['account_expires_never'])
+ {
+ if($_userData['account_expires_never'])
+ {
+ $_userData['expires'] = -1;
+ $_userData['account_expires'] = $_userData['expires'];
+ }
+ else
+ {
+ if (! checkdate($_userData['account_expires_month'],$_userData['account_expires_day'],$_userData['account_expires_year']))
+ {
+ $error[$totalerrors] = lang('You have entered an invalid expiration date');
+ $totalerrors++;
+ }
+ else
+ {
+ $_userData['expires'] = mktime(2,0,0,$_userData['account_expires_month'],$_userData['account_expires_day'],$_userData['account_expires_year']);
+ $_userData['account_expires'] = $_userData['expires'];
+ }
+ }
+ }
+ else
+ {
+ $_userData['expires'] = -1;
+ $_userData['account_expires'] = $_userData['expires'];
+ }
+
+ /*
+ $check_account_file_space = explode ('-', $_userData['file_space']);
+ if (preg_match ("/\D/", $check_account_file_space[0]))
+ {
+ $error[$totalerrors] = lang ('File space must be an integer');
+ $totalerrors++;
+ }
+ */
+
+ if ($totalerrors == 0)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return $error;
+ }
+ }
+
+ /* stores the userdata */
+ function save_user($_userData)
+ {
+ $account = CreateObject('phpgwapi.accounts',$_userData['account_id'],'u');
+ $account->update_data($_userData);
+ $account->save_repository();
+ if ($_userData['account_passwd'])
+ {
+ $auth = CreateObject('phpgwapi.auth');
+ $auth->change_password($old_passwd, $_userData['account_passwd'], $_userData['account_id']);
+ $GLOBALS['hook_values']['account_id'] = $_userData['account_id'];
+ $GLOBALS['hook_values']['old_passwd'] = $old_passwd;
+ $GLOBALS['hook_values']['new_passwd'] = $_userData['account_passwd'];
+
+ $GLOBALS['phpgw']->hooks->process($GLOBALS['hook_values']+array(
+ 'location' => 'changepassword'
+ ),False,True); // called for every app now, not only enabled ones)
+ }
+
+ $apps = CreateObject('phpgwapi.applications',array((int)$_userData['account_id'],'u'));
+
+ $apps->account_id = $_userData['account_id'];
+ if ($_userData['account_permissions'])
+ {
+ while($app = each($_userData['account_permissions']))
+ {
+ if($app[1])
+ {
+ $apps->add($app[0]);
+ }
+ }
+ }
+ $apps->save_repository();
+
+ $account = CreateObject('phpgwapi.accounts',$_userData['account_id'],'u');
+ $allGroups = $account->get_list('groups');
+
+ if ($_userData['account_groups'])
+ {
+ reset($_userData['account_groups']);
+ while (list($key,$value) = each($_userData['account_groups']))
+ {
+ $newGroups[$value] = $value;
+ }
+ }
+
+ $acl = CreateObject('phpgwapi.acl',$_userData['account_id']);
+
+ reset($allGroups);
+ while (list($key,$groupData) = each($allGroups))
+ {
+ /* print "$key,". $groupData['account_id'] ."
";*/
+ /* print "$key,". $_userData['account_groups'][1] ."
"; */
+
+ if ($newGroups[$groupData['account_id']])
+ {
+ $acl->add_repository('phpgw_group',$groupData['account_id'],$_userData['account_id'],1);
+ }
+ else
+ {
+ $acl->delete_repository('phpgw_group',$groupData['account_id'],$_userData['account_id']);
+ }
+ }
+ if ($_userData['anonymous'])
+ {
+ $acl->add_repository('phpgwapi','anonymous',$_userData['account_id'],1);
+ }
+ else
+ {
+ $acl->delete_repository('phpgwapi','anonymous',$_userData['account_id']);
+ }
+ if ($_userData['changepassword'])
+ {
+ $GLOBALS['phpgw']->acl->add_repository('preferences','changepassword',$_userData['account_id'],1);
+ }
+ else
+ {
+ $GLOBALS['phpgw']->acl->delete_repository('preferences','changepassword',$_userData['account_id']);
+ }
+ $GLOBALS['phpgw']->session->delete_cache((int)$_userData['account_id']);
+ }
+
+ function load_group_users($account_id)
+ {
+ $temp_user = $GLOBALS['phpgw']->acl->get_ids_for_location($account_id,1,'phpgw_group');
+ if(!$temp_user)
+ {
+ return Array();
+ }
+ else
+ {
+ $group_user = $temp_user;
+ }
+ $account_user = Array();
+ while (list($key,$user) = each($group_user))
+ {
+ $account_user[$user] = ' selected';
+ }
+ @reset($account_user);
+ return $account_user;
+ }
+
+ function load_group_managers($account_id)
+ {
+ $temp_user = $GLOBALS['phpgw']->acl->get_ids_for_location($account_id,PHPGW_ACL_GROUP_MANAGERS,'phpgw_group');
+ if(!$temp_user)
+ {
+ return Array();
+ }
+ else
+ {
+ $group_user = $temp_user;
+ }
+ $account_user = Array();
+ while (list($key,$user) = each($group_user))
+ {
+ $account_user[$user] = ' selected';
+ }
+ @reset($account_user);
+ return $account_user;
+ }
+
+ function load_group_apps($account_id)
+ {
+ $apps = CreateObject('phpgwapi.applications',(int)$account_id);
+ $app_list = $apps->read_account_specific();
+ $account_apps = Array();
+ while(list($key,$app) = each($app_list))
+ {
+ $account_apps[$app['name']] = True;
+ }
+ @reset($account_apps);
+ return $account_apps;
+ }
+
+ // xmlrpc functions
+
+ function rpc_add_user($data)
+ {
+ exit;
+
+ if (!$errors = $this->validate_user($data))
+ {
+ $result = $this->so->add_user($data);
+ }
+ else
+ {
+ $result = $errors;
+ }
+ return $result;
+ }
+ }
+?>