Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Закрыто Баг | Изменение аватарки

Статус
В этой теме нельзя размещать новые ответы.
Лучше плохо начать, чем хорошо бездействовать
Ноя
2,155
1,415
Профессионал
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(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
 
Последнее редактирование:
Снова в деле...
Фев
263
924
Активный
Не баг, окошко нужно для изменения положения аватарки. А загрузка аватарки не подтверждается по скрипту форума
 
никогда не поменяю аву
Ноя
2,662
5,725
Заблокированный
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки. Мы не несем ответственности за действия пользователя вне форума.
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(1) выбираю нужную фотку и нажимаю отправить(2) она добавляется и показывает как будет выглядеть(3), НО нажимая на крестик, то она должна сбросится и вернутся моя прежняя ава, но этого не происходит и остаётся новая моя выбранная фотка(4).
Нужно нажать ОК потом
 
𝚖𝚘𝚛𝚜 𝚌𝚎𝚛𝚝𝚊, 𝚑𝚘𝚛𝚊 𝚒𝚗𝚌𝚎𝚛𝚝𝚊.
Янв
1,557
3,428
Команда форума
Администратор
никогда не поменяю аву
Ноя
2,662
5,725
Заблокированный
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки. Мы не несем ответственности за действия пользователя вне форума.
проблема в другом - человек выбирает аватарку для предпросмотра, а у него она автоматически устанавливается.
OFFTOP

понял

 
Лучше плохо начать, чем хорошо бездействовать
Ноя
2,155
1,415
Профессионал
Ноя
1,681
4,481
Команда форума
Администратор
Приветствую!
Суть проблемы: решая изменить свою аватарку не из моего аккаунта, а из "окошечка на главной" я нажимаю на "изменить"(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
 
@viovit_dev
Апр
1,357
870
Продавец
Если они это одобрят, то добавят, может быть, на 2.4, либо на 2.3
а кто обновляться то будет на эти версии? 2.3 по прежнему не пользуется спросом, 2.4 уж тем более не будет.
да и предложить им, одобрят допустим, но введут это минимум через 3 месяца.
 
Ноя
1,681
4,481
Команда форума
Администратор
а кто обновляться то будет на эти версии? 2.3 по прежнему не пользуется спросом, 2.4 уж тем более не будет.
да и предложить им, одобрят допустим, но введут это минимум через 3 месяца.
OFFTOP

Сейчас большинство форумов остается на XenForo 2.2, потому что 2.3 не особо прижились, прошло +- год. Многие опасаются обновляться из-за возможных проблем с несовместимостью аддонов и стилей.

А про 2.4 вообще пока рано говорить, если эту версию до конца обновят, протестируют и выпустят,
форумы будут обновляться на неё очень медленно. Обычно админы ждут пару месяцев после выхода новой версии, чтобы убедиться, что она стабильна, а потом ещё столько же, пока разработчики обновят свои аддоны.

 
Лучше плохо начать, чем хорошо бездействовать
Ноя
2,155
1,415
Профессионал
Достаточно посмотреть, как происходит смена аватара в файлах движка
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
@Kolpak спасибо за объяснение.
Тема закрыта.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху