Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
30 Ноя 2024
Сообщения
150
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(1) выбираю нужную фотку и нажимаю отправить(2) она добавляется и показывает как будет выглядеть(3), НО нажимая на крестик, то она должна сбросится и вернутся моя прежняя ава, но этого не происходит и остаётся новая моя выбранная фотка(4).
1740415332526.jpg
1740415353969.jpg
upload_2025_02_24_19_45_01_425.jpg
upload_2025_02_24_19_47_12_469.jpg
 
Последнее редактирование:
Активный
Регистрация
12 Фев 2025
Сообщения
156
Не баг, окошко нужно для изменения положения аватарки. А загрузка аватарки не подтверждается по скрипту форума
 
777
Профессионал
Регистрация
2 Ноя 2024
Сообщения
1,180
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(1) выбираю нужную фотку и нажимаю отправить(2) она добавляется и показывает как будет выглядеть(3), НО нажимая на крестик, то она должна сбросится и вернутся моя прежняя ава, но этого не происходит и остаётся новая моя выбранная фотка(4).
Нужно нажать ОК потом
 
Дальше — Больше
Команда форума
Модератор
Регистрация
21 Янв 2023
Сообщения
899
Редактор
Регистрация
4 Ноя 2024
Сообщения
298
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(1) выбираю нужную фотку и нажимаю отправить(2) она добавляется и показывает как будет выглядеть(3), НО нажимая на крестик, то она должна сбросится и вернутся моя прежняя ава, но этого не происходит и остаётся новая моя выбранная фотка(4).
Достаточно посмотреть, как происходит смена аватара в файлах движка
PHP:
    public function updateAvatar()
    {
        if (!$this->fileName)
        {
            return $this->throwException(new \LogicException("No source file for avatar set"));
        }
        if (!$this->user->exists())
        {
            return $this->throwException(new \LogicException("User does not exist, cannot update avatar"));
        }

        $imageManager = $this->app->imageManager();

        $outputFiles = [];
        $baseFile = $this->fileName;

        $origSize = $this->sizeMap['o'];
        $shortSide = min($this->width, $this->height);

        if ($shortSide > $origSize)
        {
            $image = $imageManager->imageFromFile($this->fileName);
            if (!$image)
            {
                return false;
            }

            $image->resizeShortEdge($origSize);

            $newTempFile = \XF\Util\File::getTempFile();
            if ($newTempFile && $image->save($newTempFile, null, 95))
            {
                $outputFiles['o'] = $newTempFile;
                $baseFile = $newTempFile;
                $width = $image->getWidth();
                $height = $image->getHeight();
            }
            else
            {
                return $this->throwException(new \RuntimeException("Failed to save image to temporary file; check internal_data/data permissions"));
            }

            unset($image);
        }
        else
        {
            $outputFiles['o'] = $this->fileName;
            $width = $this->width;
            $height = $this->height;
        }

        $crop = [
            'm' => [0, 0]
        ];

        foreach ($this->sizeMap AS $code => $size)
        {
            if (isset($outputFiles[$code]))
            {
                continue;
            }

            $image = $imageManager->imageFromFile($baseFile);
            if (!$image)
            {
                continue;
            }

            $crop[$code] = $this->resizeAvatarImage($image, $size);

            $newTempFile = \XF\Util\File::getTempFile();
            if ($newTempFile && $image->save($newTempFile))
            {
                $outputFiles[$code] = $newTempFile;
            }
            unset($image);
        }

        if (count($outputFiles) != count($this->sizeMap))
        {
            return $this->throwException(new \RuntimeException("Failed to save image to temporary file; image may be corrupt or check internal_data/data permissions"));
        }

        foreach ($outputFiles AS $code => $file)
        {
            $dataFile = $this->user->getAbstractedCustomAvatarPath($code);
            \XF\Util\File::copyFileToAbstractedPath($file, $dataFile);
        }

        $user = $this->user;
        $user->bulkSet([
            'avatar_date' => \XF::$time,
            'avatar_width' => $width,
            'avatar_height' => $height,
            'avatar_highdpi' => ($width >= self::HIGH_DPI_THRESHOLD && $height >= self::HIGH_DPI_THRESHOLD),
            'gravatar' => ''
        ]);

        $profile = $user->getRelationOrDefault('Profile');
        $profile->bulkSet([
            'avatar_crop_x' => $crop['m'][0],
            'avatar_crop_y' => $crop['m'][1]
        ]);
        $user->addCascadedSave($profile);

        if ($this->logChange == false)
        {
            $user->getBehavior('XF:ChangeLoggable')->setOption('enabled', false);
        }

        $user->save();

        if ($this->logIp)
        {
            $ip = ($this->logIp === true ? $this->app->request()->getIp() : $this->logIp);
            $this->writeIpLog('update', $ip);
        }

        return true;
    }
В коде нет предпросмотра, либо проверки, требующей от пользователя подтвердить изменения. Как только был выбран файл и он прошел проверку, то он сразу обрабатывается, записывается в файловую систему, потом данные обновляются в базе.
PHP:
$user->save();
Думаю, что лучше было это написать на официальном форуме XenForo, о предложение добавить подтверждения перед установкой аватара. Если они это одобрят, то добавят, может быть, на 2.4, либо на 2.3
 
Сверху