XF 2.2 Очистка истории смены имени пользователя

Версия XenForo
2.2.2

capitan sbu

Проверенные
Сообщения
165
Решения
4
Реакции
75
Баллы
90
Интересует ответ на следующий вопрос: Как очистить историю смены имени пользователя? В поиске по данному форуму ответа не нашёл. Помощь зала?
 
Решение
Ну вот так и слушайте советы по лазанию в базу от челов с 20 мессагами.

НЕЛЬЗЯ ЛЕЗТЬ В БАЗУ БЕЗ ПОНИМАНИЯ ВНУТРЕННИХ МЕХАНИЗМОВ ДВИЖКА

Mirovinger, может бахнуть уже красным текстом на все страницы?

Иконка остаётся потому что в базе имеется ещё поле, с датой последнего изменения ника. На него и полагается движок, рисуя иконку. Лог вы, конечно, удаляете, да. Но дату эту обнулять тоже в таком случае надо. И не факт, что это всё, что нужно сделать для корректной очистки.
PHP:
    public function hasViewableUsernameHistory(): bool
    {
        if ($this->username_date == 0)
        {
            // username has never been changed
            return false;
        }

        if ($this->canViewFullUsernameHistory())
        {...
Не знаю как почистить её полностью, мб в базе можно почистить, но зато подскажу как скрыть информацию о смене ника пользователя
1635611116786.png
Выключаем тоглер и теперь инфа будет не публичной
 
Полностью иконку убирать мне незачем, я хочу её убрать с тех акков, где список изменения ников очищен.
Ты можешь отключить публичную историю смены ника в админке, тогда доступ будут иметь только члены команды.
 
Ну вот так и слушайте советы по лазанию в базу от челов с 20 мессагами.

НЕЛЬЗЯ ЛЕЗТЬ В БАЗУ БЕЗ ПОНИМАНИЯ ВНУТРЕННИХ МЕХАНИЗМОВ ДВИЖКА

Mirovinger, может бахнуть уже красным текстом на все страницы?

Иконка остаётся потому что в базе имеется ещё поле, с датой последнего изменения ника. На него и полагается движок, рисуя иконку. Лог вы, конечно, удаляете, да. Но дату эту обнулять тоже в таком случае надо. И не факт, что это всё, что нужно сделать для корректной очистки.
PHP:
    public function hasViewableUsernameHistory(): bool
    {
        if ($this->username_date == 0)
        {
            // username has never been changed
            return false;
        }

        if ($this->canViewFullUsernameHistory())
        {
            // if you have the ability to view this user's full history, then you're bypassing any visible/date checks
            return true;
        }

        // otherwise, we only look for recent visible changes...
        $cutOff = \XF::$time - 86400 * $this->app()->options()->usernameChangeRecentLimit;
        return ($this->username_date_visible >= $cutOff);
    }

В теории, вот такого скрипта должно быть достаточно. Заранее предупреждаю, что не проверял, бекаптесь перед запуском и вот это вот всё.
Код:
<?php
/**
 * Created by PhpStorm.
 * User: West
 * Date: 30.10.2021
 * Time: 22:18
 * Made with <3 by West from Bubuni Team
 */


use XF\Entity\UsernameChange;

$phpVersion = phpversion();
if (version_compare($phpVersion, '7.0.0', '<'))
{
    die("PHP 7.0.0 or newer is required. $phpVersion does not meet this requirement. Please ask your host to upgrade PHP.");
}

$dir = __DIR__;
require($dir . '/src/XF.php');

XF::start($dir);
XF::setupApp('XF\App');

// Идентификатор (или массив оных) пользователя, историю для которых нужно подчистить
$userId = -1;

/** @var UsernameChange[] $changeList */
$changeList = XF::finder('XF:UsernameChange')
    ->where('user_id', '=', $userId)
    ->fetch();

foreach ($changeList as $usernameChange)
{
    $usernameChange->delete();
}

В случае, если вы уже всё затерли с таблички этот скрипт результата никакого не даст. Меняйте поле с датой в таблице пользователей на 0 и впредь трижды думайте прежде чем лезть в базу.
 
Ну вот так и слушайте советы по лазанию в базу от челов с 20 мессагами.

НЕЛЬЗЯ ЛЕЗТЬ В БАЗУ БЕЗ ПОНИМАНИЯ ВНУТРЕННИХ МЕХАНИЗМОВ ДВИЖКА

Mirovinger, может бахнуть уже красным текстом на все страницы?

Иконка остаётся потому что в базе имеется ещё поле, с датой последнего изменения ника. На него и полагается движок, рисуя иконку. Лог вы, конечно, удаляете, да. Но дату эту обнулять тоже в таком случае надо. И не факт, что это всё, что нужно сделать для корректной очистки.
PHP:
    public function hasViewableUsernameHistory(): bool
    {
        if ($this->username_date == 0)
        {
            // username has never been changed
            return false;
        }

        if ($this->canViewFullUsernameHistory())
        {
            // if you have the ability to view this user's full history, then you're bypassing any visible/date checks
            return true;
        }

        // otherwise, we only look for recent visible changes...
        $cutOff = \XF::$time - 86400 * $this->app()->options()->usernameChangeRecentLimit;
        return ($this->username_date_visible >= $cutOff);
    }

В теории, вот такого скрипта должно быть достаточно. Заранее предупреждаю, что не проверял, бекаптесь перед запуском и вот это вот всё.
Код:
<?php
/**
 * Created by PhpStorm.
 * User: West
 * Date: 30.10.2021
 * Time: 22:18
 * Made with <3 by West from Bubuni Team
 */


use XF\Entity\UsernameChange;

$phpVersion = phpversion();
if (version_compare($phpVersion, '7.0.0', '<'))
{
    die("PHP 7.0.0 or newer is required. $phpVersion does not meet this requirement. Please ask your host to upgrade PHP.");
}

$dir = __DIR__;
require($dir . '/src/XF.php');

XF::start($dir);
XF::setupApp('XF\App');

// Идентификатор (или массив оных) пользователя, историю для которых нужно подчистить
$userId = -1;

/** @var UsernameChange[] $changeList */
$changeList = XF::finder('XF:UsernameChange')
    ->where('user_id', '=', $userId)
    ->fetch();

foreach ($changeList as $usernameChange)
{
    $usernameChange->delete();
}

В случае, если вы уже всё затерли с таблички этот скрипт результата никакого не даст. Меняйте поле с датой в таблице пользователей на 0 и впредь трижды думайте прежде чем лезть в базу.
В любом случае, история очищена и форум жив. Не знаю к чему ты это написал.
 
В любом случае, история очищена и форум жив. Не знаю к чему ты это написал
Жив, но в некоторых местах потрепан. Ваш совет не является правильным, из-за этого у человека появился дополнительный вопрос, а вы ему следом советуете в шаблонах что-то поменять, хотя надо было изначально просто дать другой запрос в базу
Никто не говорит что вы убили форум, но всё-таки раз вы даёте совет, надо разобраться немного более предметно, а не поверхностно
 
JustPayMe, а ещё можно в туалет под себя ходить - действие не смертельное, живы останетесь, но последствия не очень то и приятные. Как минимум - для окружающих, если они есть.

Написал к тому, что Вами был предоставлен некорректный совет, который меня очень сильно возмутил. Подмечу, что я аргументировал свою позицию и предоставил решение, которое с технической точки зрения лучше Вашего.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу