Ссылка на эту статью
Код: Выделить всё
[url=http://www.phpbbguru.net/community/topic37635.html]Изменение пользовательских настроек, задаваемых по умолчанию[/url]
В phpBB3 пользователи имеют возможность настраивать различные параметры личных настроек в Личном разделе (UCP - Панели управления пользователя). Для каждого из этих параметров установлено значение по умолчанию, которое будет действовать при регистрации новых пользователей, и каждый параметр имеет установленное значение для ранее зарегистрированных пользователей. Эти параметры могут или не могут совпадать со значениями по умолчанию.
В этой статье мы расскажем как установить эти параметры по умолчанию при регистрации новых пользователей и, как изменить установленные ранее значения для уже зарегистрированных пользователей. Обратите внимание, что пользователи по-прежнему смогут изменять эти значения по своему усмотрению, изменяя их на отличные от установленных для них по умолчанию. В этой статье не описано, как сделать эти значения постоянными и неизменными.
Некоторые пользовательские настройки определены в специальных полях таблицы users в базе данных, а другие являются результатом вычисления отдельных битов из значения, которое хранится в поле user_options таблицы users. Поэтому способы изменение разных пользовательских настроек различны, и мы опишем каждый из них ниже.
Что нужно знать, чтобы начать
- Всякий раз, когда вы запускаете запрос к базе данных, сначала сделайте резервную копию таблиц. Все запросы из этой статьи выполняются применительно к таблице users, поэтому сделайте резервную копию этой таблицы.
- Для редактирования файлов phpBB, всегда пользуйтесь "правильным" текстовым редактором, который может сохранять файлы в кодировке utf8 без BOM. Список "правильных" редакторов здесь.
- Все запросы предполагают, что ваши таблицы БД имеют префикс phpbb_ . Если это не так, вы должны изменить phpbb_ в примерах запросов на префикс ваших таблиц. Префикс таблицы можно увидеть в PhpMyAdmin, или подсмотрев значение переменной $table_prefix в файле config.php.
- Если вы не знаете как выполнить запросы к базе данных, см. Выполнение SQL-запросов в PHPMyAdmin
- Условие WHERE user_type <> 2 в образце запросов исключает ботов и гостей из работы запроса.
Некоторые параметры пользовательских настроек, которые пользователи могут установить (те, которые определены в файле includes/functions_user.php) записываются в отдельные поля в таблицы users. К ним относятся:
Код: Выделить всё
'user_notify' => 0,
'user_notify_pm' => 1,
'user_notify_type' => NOTIFY_EMAIL,
'user_allow_pm' => 1,
'user_allow_viewonline' => 1,
'user_allow_viewemail' => 1,
'user_allow_massemail' => 1,
Код: Выделить всё
UPDATE phpbb_users SET user_notify = 1 WHERE user_type <> 2;
Код: Выделить всё
UPDATE phpbb_users SET user_notify_type = 1 WHERE user_type <> 2;
Код: Выделить всё
UPDATE phpbb_users SET user_notify_type = 1 WHERE user_type <> 2 AND user_notify_type != 2;
Некоторые пользовательские настройки, которые пользователи могут изменять, являются результатом сложения вариаций возведения числа 2 в некоторую степень (двоичный код), и хранятся в поле user_options таблицы users как единое целое число. К ним относятся:
Код: Выделить всё
'viewimg' => array('bit' => 0, 'default' => 1),
'viewflash' => array('bit' => 1, 'default' => 1),
'viewsmilies' => array('bit' => 2, 'default' => 1),
'viewsigs' => array('bit' => 3, 'default' => 1),
'viewavatars' => array('bit' => 4, 'default' => 1),
'viewcensors' => array('bit' => 5, 'default' => 1),
'attachsig' => array('bit' => 6, 'default' => 1),
'bbcode' => array('bit' => 8, 'default' => 1),
'smilies' => array('bit' => 9, 'default' => 1),
'popuppm' => array('bit' => 10, 'default' => 0),
'sig_bbcode' => array('bit' => 15, 'default' => 1),
'sig_smilies' => array('bit' => 16, 'default' => 1),
'sig_links' => array('bit' => 17, 'default' => 1),
Эти значения, установленные по умолчанию таким образом, генерируют общую сумму различных степеней числа 2, которая записана в файле в includes/functions_user.php и равняется 230271:
Код: Выделить всё
'user_options' => 230271,
Таблица возведения числа 2 в степень приводится в конце этой статьи.
Чтобы изменить значения опции с 0 на 1 для уже существующих пользователей, нужно использовать запрос с побитовым оператором OR (|), изменяющий бит или биты в поле user_options таблицы users. То есть, необходимо рассчитать значение числа 2, возведенного в степень, соответствующую номеру бита (или же иными словами номеру опции, например у опции attachsig номер бита 6: 'attachsig' => array('bit' => 6). Значение для viewimg будет равно единице, потому что номер его бита равен 0 и 2 в степени 0 = 1.
Например, такой запрос изменил бы значение viewimg с выключено на включено путем добавления соответствующего значения, если оно еще не включено в общую сумму user_options для каждого пользователя:
Код: Выделить всё
UPDATE phpbb_users set user_options = user_options | 1 WHERE user_type <> 2;
Код: Выделить всё
UPDATE phpbb_users SET user_options = (user_options & 8) ^ user_options WHERE user_type <> 2;
Обратите внимание, что вы также можете изменить параметры для конкретного пользователя или пользователей, в частности группы. Однако вы можете делать это только для уже существующих пользователей, а не для будущих (без каких-либо модификаций). Например, этот запрос будет менять значение user_allow_pm с включено на выключено для пользователей, входящих в группу «Вновь зарегистрированные». Предполагается, что group_id для этой группы равно 7 (по умолчанию).
Код: Выделить всё
UPDATE phpbb_users SET user_allow_pm = 0 WHERE user_id IN(SELECT user_id FROM phpbb_user_group WHERE group_id = 7);
Код: Выделить всё
UPDATE phpbb_users SET user_options = (user_options & 2) ^ user_options WHERE user_sig = '';
2 ^ 0 = 1
2 ^ 1 = 2
2 ^ 2 = 4
2 ^ 3 = 8
2 ^ 4 = 16
2 ^ 5 = 32
2 ^ 6 = 64
2 ^ 7 = 128 (В phpBB3 не используется, зарезервировано)
2 ^ 8 = 256
2 ^ 9 = 512
2 ^ 10 = 1024
2 ^ 11 = 2048 (В phpBB3 не используется, зарезервировано)
2 ^ 12 = 4096 (В phpBB3 не используется, зарезервировано)
2 ^ 13 = 8192 (В phpBB3 не используется, зарезервировано)
2 ^ 14 = 16384 (В phpBB3 не используется, зарезервировано)
2 ^ 15 = 32768
2 ^ 16 = 65536
2 ^ 17 = 131072
Значение user_options – это двоичное число, записанное в десятичном формате.
230271 в двоичной форме выглядит так:
111000001101111111
Преобразовать это число в десятичный формат достаточно просто:
Биты считаются справа налево, то есть начинаем с конца. Там где бит установлен (1), возводим 2 в степень, равную номеру бита, там где снят (0) - ноль, итак:
2^0+2^1+2^2+2^3+2^4+2^5+2^6+0+2^8+2^9+0+0+0+0+0+2^15+2^16+2^17=
1+2+4+8+16+32+64+0+256+512+0+0+0+0+0+32768+65536+131072
Удобный калькулятор
Оригинал статьи