Кнопка редагувати та додаткові поля на сторінці профілю Moodle

Часто доводиться надавати навчальні матеріали людям, які мало працювали за комп'ютером або в інтернеті і складні інтерфейси 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
Мітки: moodle, php

Залітай у Твітер

Це ще що таке?

Я назвав цей сайт студією онлайн-творчості, тому що не вважаю свою діяльність роботою. Займаючись розробкою, я пізнаю нове, подорожую просторами мережі, знайомлюся з дивовижними людьми. Це життя.

Олександр Мойсеюк

Чому мене варто послухати?

Наразі за моїми плечима близько 6 тисяч годин задушевного спілкування з програмним кодом, документаціями, статтями і варіантами розмітки.

Олександр Мойсеюк

Також зараз під моїм наглядом або керівництвом активно розвиваються близько 7 проектів, серед яких студія розробки розширень і навчальних матеріалів для CMS Joomla. І просто досить знати, що я дуже люблю свою роботу:)

Читати у

Змінити мову на

Son of Sky - основний псевдонім Олександра Мойсеюка, неочевидне значення якого - "українець".

Згідно праць Олексія Братко-Кутинського, як зазначено в Олександра Середюка, монголо-татари після вторгнення на Київську Русь, почали називати місцевих "хохлами". Першопочатковий переклад цього слова:
"Неба син" (Кок (Небо), ол (син)), що у слов'янському звучанні - "хохол". Простий переклад на англійську: Son of the Sky

Синь неба - це схожа за звучанням назва для сайту.