[url=http://www.phpbbguru.net/kb/administration/changing-user-defaults/]Изменение пользовательских настроек, задаваемых по умолчанию[/url]
содержание
Изменение параметров, которые определены в отдельных полях
Изменение параметров, которые хранятся в поле user_options
Изменение параметров для отдельных групп или пользователей
Введение
В 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,
"0" означает, что опция выключена, "1" означает, что опция включена. Эти установки действуют по умолчанию и записываются в базу данных при регистрации новых пользователей. Чтобы их изменить, вам необходимо отредактировать файл includes/functions_user.php, и изменить 0 на 1 или наоборот. Чтобы изменить эти параметры для уже зарегистрированных пользователей, необходимо выполнить запрос:
UPDATE phpbb_users SET user_notify = 1 WHERE user_type <> 2;
Обратите внимание, опция user_notify_type отличается от других вариантов тем, что она может принимать три различных значения, каждому из которых соответствует одно из трех возможных числовых значений, которые определены в файле includes/constants.php. Если вы хотите изменить вариант user_notify_type при регистрации новых пользователей, вы должны отредактировать эти значения в файле includes/functions_user.php, указав NOTIFY_EMAIL (значение 0) либо NOTIFY_IM (значение 1) или NOTIFY_BOTH (значение 2) по вашему выбору. Чтобы изменить вариант user_notify_type для существующих пользователей, например поменять NOTIFY_EMAIL на NOTIFY_IM, необходимо выполнить запрос:
UPDATE phpbb_users SET user_notify_type = 1 WHERE user_type <> 2;
Этот запрос изменит настройки по умолчанию с NOTIFY_EMAIL, значение которого равно 0, на NOTIFY_IM, значение которого равно 1. Обратите внимание, что этот запрос изменяет значение этой опции на NOTIFY_IM для всех пользователей, даже для тех, кто выбрал для себя NOTIFY_BOTH (значение 2). Если вы хотите исключить пользователей, которые выбрали NOTIFY_BOTH и изменить только у тех пользователей, для которых установлено значение по умолчанию NOTIFY_EMAIL, то запрос должен выглядеть так:
UPDATE phpbb_users SET user_notify_type = 1 WHERE user_type <> 2 AND user_notify_type != 2;
Изменение параметров, которые хранятся в поле user_options
Некоторые пользовательские настройки, которые пользователи могут изменять, являются результатом сложений вариаций возведения числа 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),
Как отсюда можно заметить, это число в двоичном формате выглядит так: 111000001101111111
Эти значения, установленные по умолчанию таким образом, генерируют общую сумму различных степеней числа 2, которая записана в файле в includes/functions_user.php и равняется 230271:
'user_options' => 230271,
Чтобы изменить настройки по умолчанию при регистрации новых пользователей, вы должны изменить значение 230271 в файле в includes/functions_user.php. Например, если вы хотите, чтобы viewsigs был выключен (0) по умолчанию, а viewimg включен (1), вы должны вычесть 8 (2 ^ 3 = 2 в степени 3), потому что значение viewsigs записано в бите номер 3, то есть это третий бит двоичного представления числа user_options, и прибавить 1 (2 ^ 0 = 2 в степени 0), так как значение viewimg записывается в нулевом бите. Таким образом, вам необходимо изменить значение user_options в файле includes/functions_user.php на 230 264 (230 271 -8 +1).
Таблица возведения числа 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;
Для изменения значений опций с 1 на 0 для существующих пользователей, нужно использовать запрос с использованием оператора побитового XOR (^) и побитового оператора AND (&), изменяющих бит или биты в поле user_options. Это вычтет соответствующие значения из суммы user_options, если они уже включены в эту сумму для каждого пользователя. Например, этот запрос изменит значение viewsigs с включено на выключено. Здесь используется значение 8, поскольку номер бита для viewsigs равен 3, и 2 в степени 3 = 8.
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);
Этот запрос изменит значение опции viewflash с включено на выключено для пользователей, которые не имеют подписи:
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