Зміна налаштувань, що задаються за умовчанням - замітки аццкого кодера

В phpBB3 користувачі мають можливість налаштовувати різні параметри особистих налаштувань в Особистому розділі (UCP - Панелі управління користувача). Для кожного з цих параметрів встановлено значення за замовчуванням, яке буде діяти при реєстрації нових користувачів, і кожен параметр має встановлене значення для раніше зареєстрованих користувачів. Ці параметри можуть або не можуть збігатися зі значеннями за замовчуванням.

У цій статті ми розповімо як встановити ці параметри за замовчуванням при реєстрації нових користувачів і, як змінити встановлені раніше значення для вже зареєстрованих користувачів. Зверніть увагу, що користувачі як і раніше зможуть змінювати ці значення на свій розсуд, змінюючи їх на відмінні від встановлених для них за замовчуванням. У цій статті не описано, як зробити ці значення постійними і незмінними.

Деякі призначені для користувача настройки визначені в спеціальних полях таблиці users в базі даних, а інші є результатом обчислення окремих бітів з значення, яке зберігається в поле user_options таблиці users. Тому способи зміна різних призначених для користувача налаштувань різні, і ми опишемо кожен з них нижче.

Що потрібно знати, щоб почати

Зміна параметрів, які визначені в окремих полях

Деякі параметри налаштувань, які користувачі можуть встановити (ті, які визначені в файлі 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 як єдине ціле число. До них відносяться:

Як звідси можна помітити, це число в двійковому форматі виглядає так: 111000001101111111
Ці значення, встановлені за замовчуванням таким чином, генерують загальну суму різних ступенів числа 2, яка записана у файлі в includes / functions_user.php і дорівнює 230 271:

Код: '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).

Щоб змінити значення опції з 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) - нуль, отже: