]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/User.php
Drop using the proxy large size for image preview
[friendica.git] / src / Model / User.php
index 18da3e956046c2d79968de025e8a01138981aae8..f985dc2a67cce1480349a1b8d30d37f0e4e61189 100644 (file)
@@ -37,10 +37,10 @@ use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Module;
 use Friendica\Network\HTTPClient\Client\HttpClientAccept;
-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;
@@ -182,7 +182,7 @@ class User
                $system['dob'] = '0000-00-00';
 
                // Ensure that the user contains data
-               $user = DBA::selectFirst('user', ['prvkey', 'guid'], ['uid' => 0]);
+               $user = DBA::selectFirst('user', ['prvkey', 'guid', 'language'], ['uid' => 0]);
                if (empty($user['prvkey']) || empty($user['guid'])) {
                        $fields = [
                                'username' => $system['name'],
@@ -202,7 +202,8 @@ class User
 
                        $system['guid'] = $fields['guid'];
                } else {
-                       $system['guid'] = $user['guid'];
+                       $system['guid']     = $user['guid'];
+                       $system['language'] = $user['language'];
                }
 
                return $system;
@@ -278,8 +279,7 @@ class User
                // 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;
                        }
@@ -324,7 +324,7 @@ class User
        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];
                }
@@ -531,6 +531,24 @@ class User
                return $default_circle;
        }
 
+/**
+ * Fetch the language code from the given user. If the code is invalid, return the system language
+ *
+ * @param integer $uid User-Id
+ * @return string
+ */
+       public static function getLanguageCode(int $uid): string
+       {
+               $owner = self::getOwnerDataById($uid);
+               $languages = DI::l10n()->getAvailableLanguages(true);
+               if (in_array($owner['language'], array_keys($languages))) {
+                       $language = $owner['language'];
+               } else {
+                       $language = DI::config()->get('system', 'language');
+               }
+               return $language;
+       }
+
        /**
         * Authenticate a user with a clear text password
         *
@@ -682,7 +700,7 @@ class User
                                $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);
@@ -718,7 +736,7 @@ class User
                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]);
                }
        }
 
@@ -1328,33 +1346,18 @@ class User
        /**
         * Update a user entry and distribute the changes if needed
         *
-        * @param array $fields
+        * @param array   $fields
         * @param integer $uid
         * @return boolean
+        * @throws Exception
         */
        public static function update(array $fields, int $uid): bool
        {
-               $old_owner = self::getOwnerDataById($uid);
-               if (empty($old_owner)) {
-                       return false;
-               }
-
                if (!DBA::update('user', $fields, ['uid' => $uid])) {
                        return false;
                }
 
-               $update = Contact::updateSelfFromUserID($uid);
-
-               $owner = self::getOwnerDataById($uid);
-               if (empty($owner)) {
-                       return false;
-               }
-
-               if ($old_owner['name'] != $owner['name']) {
-                       Profile::update(['name' => $owner['name']], $uid);
-               }
-
-               if ($update) {
+               if (Contact::updateSelfFromUserID($uid)) {
                        Profile::publishUpdate($uid);
                }
 
@@ -1634,16 +1637,24 @@ class User
         * @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);
 
@@ -1698,7 +1709,7 @@ class 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;
                }
@@ -1715,7 +1726,7 @@ class User
                        $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));
@@ -1725,7 +1736,7 @@ class User
                        $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);
@@ -1735,7 +1746,7 @@ class User
                        $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));
@@ -1746,7 +1757,7 @@ class User
                        "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)) {
@@ -1768,7 +1779,7 @@ class User
                        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;
                }
@@ -1777,7 +1788,7 @@ class User
                        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;
                }