use Friendica\DI;
use Friendica\Module;
use Friendica\Network\HTTPClient\Client\HttpClientAccept;
-use Friendica\Network\HTTPException\InternalServerErrorException;
-use Friendica\Security\TwoFactor\Model\AppSpecificPassword;
use Friendica\Network\HTTPException;
use Friendica\Object\Image;
use Friendica\Protocol\Delivery;
+use Friendica\Security\TwoFactor\Model\AppSpecificPassword;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Images;
// List of possible actor names
$possible_accounts = ['friendica', 'actor', 'system', 'internal'];
foreach ($possible_accounts as $name) {
- if (!DBA::exists('user', ['nickname' => $name, 'account_removed' => false, 'account_expired' => false]) &&
- !DBA::exists('userd', ['username' => $name])) {
+ if (!DBA::exists('user', ['nickname' => $name]) && !DBA::exists('userd', ['username' => $name])) {
DI::config()->set('system', 'actor_name', $name);
return $name;
}
public static function getByGuid(string $guid, array $fields = [], bool $active = true)
{
if ($active) {
- $cond = ['guid' => $guid, 'account_expired' => false, 'account_removed' => false];
+ $cond = ['guid' => $guid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false];
} else {
$cond = ['guid' => $guid];
}
/**
* Fetch the language code from the given user. If the code is invalid, return the system language
*
- * @param integer $uid User-Id
- * @param boolean $short If true, return the short form g.g. "en", otherwise the long form e.g. "en-gb"
+ * @param integer $uid User-Id
* @return string
*/
- public static function getLanguageCode(int $uid, bool $short): string
+ public static function getLanguageCode(int $uid): string
{
$owner = self::getOwnerDataById($uid);
- $languages = DI::l10n()->getAvailableLanguages();
+ $languages = DI::l10n()->getAvailableLanguages(true);
if (in_array($owner['language'], array_keys($languages))) {
$language = $owner['language'];
} else {
$language = DI::config()->get('system', 'language');
}
- if ($short) {
- return substr($language, 0, 2);
- }
return $language;
}
$fields = ['uid', 'nickname', 'password', 'legacy_password'];
$condition = [
"(`email` = ? OR `username` = ? OR `nickname` = ?)
- AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified`",
+ AND `verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired`",
$user_info, $user_info, $user_info
];
$user = DBA::selectFirst('user', $fields, $condition);
if ($user['last-activity'] != $current_day) {
User::update(['last-activity' => $current_day], $uid);
// Set the last activity for all identities of the user
- DBA::update('user', ['last-activity' => $current_day], ['parent-uid' => $uid, 'account_removed' => false]);
+ DBA::update('user', ['last-activity' => $current_day], ['parent-uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]);
}
}
* @param int $uid user to remove
* @return bool
* @throws HTTPException\InternalServerErrorException
+ * @throws HTTPException\NotFoundException
*/
public static function remove(int $uid): bool
{
if (empty($uid)) {
- return false;
+ throw new \InvalidArgumentException('uid needs to be greater than 0');
}
Logger::notice('Removing user', ['user' => $uid]);
- $user = DBA::selectFirst('user', [], ['uid' => $uid]);
+ $user = self::getById($uid);
+ if (!$user) {
+ throw new HTTPException\NotFoundException('User not found with uid: ' . $uid);
+ }
+
+ if (DBA::exists('user', ['parent-uid' => $uid])) {
+ throw new \RuntimeException(DI::l10n()->t("User with delegates can't be removed, please remove delegate users first"));
+ }
Hook::callAll('remove_user', $user);
$identities = [];
- $user = DBA::selectFirst('user', ['uid', 'nickname', 'username', 'parent-uid'], ['uid' => $uid]);
+ $user = DBA::selectFirst('user', ['uid', 'nickname', 'username', 'parent-uid'], ['uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]);
if (!DBA::isResult($user)) {
return $identities;
}
$r = DBA::select(
'user',
['uid', 'username', 'nickname'],
- ['parent-uid' => $user['uid'], 'account_removed' => false]
+ ['parent-uid' => $user['uid'], 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]
);
if (DBA::isResult($r)) {
$identities = array_merge($identities, DBA::toArray($r));
$r = DBA::select(
'user',
['uid', 'username', 'nickname'],
- ['uid' => $user['parent-uid'], 'account_removed' => false]
+ ['uid' => $user['parent-uid'], 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]
);
if (DBA::isResult($r)) {
$identities = DBA::toArray($r);
$r = DBA::select(
'user',
['uid', 'username', 'nickname'],
- ['parent-uid' => $user['parent-uid'], 'account_removed' => false]
+ ['parent-uid' => $user['parent-uid'], 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]
);
if (DBA::isResult($r)) {
$identities = array_merge($identities, DBA::toArray($r));
"SELECT `user`.`uid`, `user`.`username`, `user`.`nickname`
FROM `manage`
INNER JOIN `user` ON `manage`.`mid` = `user`.`uid`
- WHERE `user`.`account_removed` = 0 AND `manage`.`uid` = ?",
+ WHERE NOT `user`.`account_removed` AND `manage`.`uid` = ?",
$user['uid']
);
if (DBA::isResult($r)) {
return false;
}
- $user = DBA::selectFirst('user', ['parent-uid'], ['uid' => $uid, 'account_removed' => false]);
+ $user = DBA::selectFirst('user', ['parent-uid'], ['uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]);
if (!DBA::isResult($user)) {
return false;
}
return true;
}
- if (DBA::exists('user', ['parent-uid' => $uid, 'account_removed' => false])) {
+ if (DBA::exists('user', ['parent-uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false])) {
return true;
}