Кнопка редагувати та додаткові поля на сторінці профілю Moodle
- Олександр Мойсеюк
- Moodle
- Переглядів: 1374
-
Часто доводиться надавати навчальні матеріали людям, які мало працювали за комп'ютером або в інтернеті і складні інтерфейси LMS Moodle для них здаються надто незрозумілою грамотою. В таких випадках було б добре трохи змінити сторінку профілю користувача, наприклад додавши помітну і зрозумілу кнопку "Редагувати".
Щоб це зробити, відкриємо для редагування файл SITEROOT/user/profile.php і в наприклад в тег-обгортку картинки користувача додамо посилання на редагування, в якому замість параметрів ID користувача та ID сайту вставимо змінні. Приблизно на рядку 254 трохи почаклуємо з блоком userprofilebox.
Кнопка "Редагувати" для менеджерів і власників профілю
Менеджери мають можливість редагувати профілі студентів тому, тому перш за все потрібно додати функцію, яка визначить чи має користувач таку роль. Функція проста і автономна. Параметром є ID користувача. Повертає правду (true), якщо користувач має задану роль в будь-якому контексті. Роль задається значенням її ID в параметрі roleid. Основні ролі: 1 - менеджер (керівник), 3 - викладач, 4 - асистент, 5 - студент. Для виявлення адміністраторів є окрема функція is_siteadmin($USER), де $USER - об'єкт користувача. Вставити наступний код потрібно перед викликом функції, тобто наприклад на рядок 253:
function is_manager($user_id){ global $DB; $select = "userid='".$user_id."' and roleid='1'"; $userrol_res = $DB->get_records_select('role_assignments',$select); if (!empty($userrol_res)) { return true; } else{ return false; } }
Отже виводимо кнопку за наступних умов відповідно:
- $edit - відкрито режим редагування і користувач має достатньо прав щоб редагувати параметри профілю. Змінна доступна в цьому файлі (дивіться код)
- $currentuser - ще одна змінна, об'явлена в файлі профілю. Означає, що авторизований користувач знаходиться на своїй сторінці.
- is_siteadmin($USER) - якщо авторизований користувач адміністратор, даємо можливість редагувати
- is_manager($USER->id)&&!is_siteadmin($user) - авторизований користувач менеджер, але не знаходиться на сторінці профілю адміністратора
echo '<div class="userprofilebox clearfix"><div class="profilepicture">'; echo $OUTPUT->user_picture($user, array('size' => 100)); if ($edit||$currentuser||is_siteadmin($USER)||(is_manager($USER->id)&&!is_siteadmin($user))) { echo '<a class="btn btn-lg btn-primary" href="/user/editadvanced.php?id='.$user->id.'course='.$SITE->id.'">'.get_string('edit').'</a>'; } echo '</div>';
Поясню: ми додали кнопку (посилання з стилями btn btn-primary, де primary зазвичай означає основний колір посилань на сайті.), в якій у в якості ідентифікатора користувача використаний ID відкритого профілю - $user->id. $SITE->id - це ідентифікатор системи.
Приватні і загальні додаткові поля у профілі користувача.
Загальні додаткові поля відомі всім користувачам Moodle: додаються на сторінці Адміністрування → Користувачі → Облікові записи → Додаткові поля. Якщо потрібно показати певну інформацію з стандартних полів, то це знаходиться тут: Адміністрування → Користувачі → Права → Політики користувача. Однак якщо ввімкнути наприклад поле "Телефон", то воно буде відображене також і в більшості таблиць. В нашому випадку цікавить виведення поля тільки в профілі. Для цього у тому ж файлі SITEROOT/user/profile.php можна підправити метод виведення конкретного поля. Знаходимо наступну фразу (в мене вона на рядку 289 після додавання коду, що вище):
// Print all the little details in a list. echo html_writer::start_tag('dl', array('class' => 'list'));
І там змінюємо умову виведення потрібного поля. Наприклад для поля телефон2 в мене вийшов такий код:
if ($currentuser||is_siteadmin($USER)||is_manager($USER->id)) { //if (isset($identityfields['phone2']) && $user->phone2) { echo html_writer::tag('dt', get_string('phone2')); if (!empty($user->phone2)) { echo html_writer::tag('dd', '<a href="tel:'.$user->phone2.'">'.$user->phone2.'</a>'); } else{ echo html_writer::tag('dd', ' - '); } }
Тобто я показав телефон в своєму профілі, для адміністратора і для менеджера. Також гарним тоном є загортати номери телефонів в посилання типу tel:, тоді дуже зручно з мобільного телефонувати (один клік). Приклад реалізації в коді.
Ось і все. Якщо виникли питання, залишайте в коментарях нижче. Вдалих вам компіляцій. До нових статей!
Увага! Файл буде перезаписано при оновленні сайту, тому всі дії потрібно буде повторити і перевірити. Зберігайте резервну копію.
Код приведений для версії Moodle 2.8