* @package admin * @copyright (c) 2007 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ /** * admin command: delete an account (user or group) */ class admin_cmd_delete_account extends admin_cmd { /** * Constructor * * @param string/int/array $account account name or id, or array with all parameters * @param string $new_user=null if specified, account to transfer the data to (users only) * @param string $is_user=true type of the account: true=user, false=group */ function __construct($account,$new_user=null,$is_user=true) { if (!is_array($account)) { $account = array( 'account' => $account, 'new_user' => $new_user, 'is_user' => $is_user, ); } admin_cmd::__construct($account); } /** * delete an account (user or group) * * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself * @return string success message * @throws egw_exception_no_admin * @throws egw_exception_wrong_userinput(lang("Unknown account: %1 !!!",$this->account),15); * @throws egw_exception_wrong_userinput(lang('Error changing the password for %1 !!!',$this->account),99); */ protected function exec($check_only=false) { $account_id = admin_cmd::parse_account($this->account,$this->is_user); admin_cmd::_instanciate_accounts(); $account_lid = admin_cmd::$accounts->id2name($account_id); if ($this->is_user && $this->new_user) { $new_user = admin_cmd::parse_account($this->new_user,true); // true = user, no group } // check creator is still admin and not explicitly forbidden to edit accounts if ($this->creator) $this->_check_admin($this->is_user ? 'account_access' : 'group_access',32); if ($check_only) return true; // delete the account $GLOBALS['hook_values'] = array( 'account_id' => $account_id, 'account_lid' => $account_lid, 'account_name'=> $account_lid, // depericated name for deletegroup hook 'new_owner' => (int)$new_user, // deleteaccount only 'location' => $this->is_user ? 'deleteaccount' : 'deletegroup', ); // first all other apps, then preferences and admin foreach(array_merge(array_diff(array_keys($GLOBALS['egw_info']['apps']),array('preferences','admin')),array('preferences','admin')) as $app) { $GLOBALS['egw']->hooks->single($GLOBALS['hook_values'],$app); } if (!$this->is_user) $GLOBALS['egw']->accounts->delete($account_id); // groups get not deleted via the admin hook, as users return lang("Account '%1' deleted.",$this->account)."\n\n"; } /** * Return a title / string representation for a given command, eg. to display it * * @return string */ function __tostring() { return lang('Delete account %1',admin_cmd::display_account($this->account)); } }