[FAQ] Изменение пользовательских настроек по умолчанию

Темы по наиболее часто задаваемым вопросам по phpBB 3.0.x. Читать в первую очередь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11475
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2568 раз
Контактная информация:

[FAQ] Изменение пользовательских настроек по умолчанию

Сообщение Sheer » 12.09.2012 4:12

Изменение пользовательских настроек, задаваемых по умолчанию
Ссылка на эту статью

Код: Выделить всё

[url=http://www.phpbbguru.net/community/topic37635.html]Изменение пользовательских настроек, задаваемых по умолчанию[/url]
Введение
В phpBB3 пользователи имеют возможность настраивать различные параметры личных настроек в Личном разделе (UCP - Панели управления пользователя). Для каждого из этих параметров установлено значение по умолчанию, которое будет действовать при регистрации новых пользователей, и каждый параметр имеет установленное значение для ранее зарегистрированных пользователей. Эти параметры могут или не могут совпадать со значениями по умолчанию.
В этой статье мы расскажем как установить эти параметры по умолчанию при регистрации новых пользователей и, как изменить установленные ранее значения для уже зарегистрированных пользователей. Обратите внимание, что пользователи по-прежнему смогут изменять эти значения по своему усмотрению, изменяя их на отличные от установленных для них по умолчанию. В этой статье не описано, как сделать эти значения постоянными и неизменными.

Некоторые пользовательские настройки определены в специальных полях таблицы users в базе данных, а другие являются результатом вычисления отдельных битов из значения, которое хранится в поле user_options таблицы users. Поэтому способы изменение разных пользовательских настроек различны, и мы опишем каждый из них ниже.

Что нужно знать, чтобы начать
  1. Всякий раз, когда вы запускаете запрос к базе данных, сначала сделайте резервную копию таблиц. Все запросы из этой статьи выполняются применительно к таблице users, поэтому сделайте резервную копию этой таблицы.
  2. Для редактирования файлов phpBB, всегда пользуйтесь "правильным" текстовым редактором, который может сохранять файлы в кодировке utf8 без BOM. Список "правильных" редакторов здесь.
  3. Все запросы предполагают, что ваши таблицы БД имеют префикс phpbb_ . Если это не так, вы должны изменить phpbb_ в примерах запросов на префикс ваших таблиц. Префикс таблицы можно увидеть в PhpMyAdmin, или подсмотрев значение переменной $table_prefix в файле config.php.
  4. Если вы не знаете как выполнить запросы к базе данных, см. Выполнение SQL-запросов в PHPMyAdmin
  5. Условие 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
Удобный калькулятор

Оригинал статьи
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Закрыто

Вернуться в «FAQ (phpBB 3.0.x)»