Блокировка оценок ( Lock \ Unlock grdades )

Блокировка оценок ( Lock \ Unlock grdades )

от Mikhail Sabyanin -
Количество ответов: 8

Добрый день!

Проблема такая: для роли преподавателя в правах блокирую lock/unlock оценок. Но тем не менее преподаватель может блокировать и разблокировывать элементы.

1


Раньше в moodle 1.9 была такая же проблема её решал так
сайт/grade/edit/tree/action.php

2

в if        (!has_capability('moodle/grade:unlock', $context))
менял на if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context))


Оно позволяло преподавателям редактировать формулу и тд.


С выходом второй версии moodle, при изменении этого case 'unlock':
Блокируется moodle/grade:manage , где преподаватель  уже не может настраивать формулы оценок по курсу.



Вопрос почему не блокируется оценки при отключении в правах?

В ответ на Mikhail Sabyanin

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Vadim Tabunshchik -
Изображение пользователя Developers
Вопрос почему не блокируется оценки при отключении в правах?

Cамо по себе lock/unlock не работает, а только вместе с moodle/grade:manage (оператор and - нужно выполнение обоих условий). А раз отключаете moodle/grade:manage, то и формулу нельзя редактировать.

Имхо, в оценках сейчас всё привязали к moodle/grade:manage и без отключения этого права, остальные сами по себе не срабатывают.

Можно попробовать убрать условие с moodle/grade:manage в public function get_locking_icon (grade/lib.php), чтобы убрать иконки lock/unlock при отключении соотв. разрешений, а то редактирование /grade/edit/tree/action.php - не совсем верный путь, имхо.

В ответ на Mikhail Sabyanin

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Vadim Tabunshchik -
Изображение пользователя Developers

Касательно 1.9. Не знаю, какая у вас была версия, сейчас посмотрел 1.9.8+ (Build: 20100526)

Всё то же самое, что и в 3.1.2+. Везде привязка к moodle/grade:manage, например функция get_locking_icon:

            if (!has_capability('moodle/grade:manage', $this->context) and !has_capability('moodle/grade:unlock', $this->context)) {
                return '';
            }
            $url     = $CFG->wwwroot.'/grade/edit/tree/action.php?id='.$this->courseid.'&action=unlock&sesskey='.sesskey()
                     . '&eid='.$element['eid'];
            $url     = $gpr->add_url_params($url);
            $action  = '<a href="'.$url.'"><img src="'.$CFG->pixpath.'/t/'.$icon.'.gif" alt="'.s($strunlock).'" class="iconsmall" title="'.s($tooltip).'"/></a>';

        } else {
            if (!has_capability('moodle/grade:manage', $this->context) and !has_capability('moodle/grade:lock', $this->context)) {
                return '';
            }
..................................

И даже фрагмент кода, кот. вы привели скриншотом:

    case 'lock':
        if ($eid and confirm_sesskey()) {
            if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:lock', $context)) {
                error('No permission to lock!', $returnurl);
            }
            if ($type == 'grade' and empty($object->id)) {
                $object->insert();
            }
            $object->set_locked(1, true, true);
        }
        break;

    case 'unlock':
        if ($eid and confirm_sesskey()) {
            if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context)) {
..................................

Так что оно давно так работает улыбаюсь

В ответ на Vadim Tabunshchik

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Mikhail Sabyanin -


Тут немного ошибся, делал наоборот, убирал привязку moodle/grade:manage и оно работало

if (!has_capability('moodle/grade:manage', $context) and !has_capability('moodle/grade:unlock', $context))
менял на
if  (!has_capability('moodle/grade:unlock', $context))


Попробовал убрать moodle/grade:manage из  public function get_locking_icon (grade/lib.php)
Всё так же, возможность lock/unlock остаётся

В ответ на Mikhail Sabyanin

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Vadim Tabunshchik -
Изображение пользователя Developers
убирал привязку moodle/grade:manage

Вот это больше на правду похоже улыбаюсь

Всё так же, возможность lock/unlock остаётся

Версия 3.1.2+ последняя. Ставлю "отозвать право" у разрешений moodle/grade:lock и moodle/grade:unlock. Убираю в get_locking_icon условие !has_capability('moodle/grade:manage', $this->context). Результат:

ris

До изменений:

1

Что я делаю не так?

В ответ на Vadim Tabunshchik

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Mikhail Sabyanin -

Я имел ввиду эти настройки

1

переходим

2

В ответ на Mikhail Sabyanin

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Vadim Tabunshchik -
Изображение пользователя Developers
Я имел ввиду эти настройки

Понятно. Это вообще тяжелый случай. Форма выводит все элементы, не проверяя никаких прав. Может позже, при сохранении введённых данных будет проверка, но я не копал ещё так глубоко.

Если в /grade/edit/tree/item_form.php поравить код,то блокировка скрывается при отключении разрешений grade:lock и grade:unlock.

        /// locking
        $context = context_course::instance($COURSE->id);
        if (has_capability('moodle/grade:lock', $context) and has_capability('moodle/grade:unlock', $context)) {
        $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades'));
        $mform->addHelpButton('locked', 'locked', 'grades');

        $mform->addElement('date_time_selector', 'locktime', get_string('locktime', 'grades'), array('optional'=>true));
        $mform->disabledIf('locktime', 'gradetype', 'eq', GRADE_TYPE_NONE);
}

Но это костыль. Или всё так и должно работать только с moodle/grade:manage или это баг и нужно искать на баг-трекере (или создавать новый тикет)

В ответ на Vadim Tabunshchik

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Mikhail Sabyanin -

Я долго думал что это глюк, а оказалось это просто задумка такая)

Вадим, в принципе предложенный вами вариант вполне устраивает! 

Благодарю вас за вашу помощь и потраченное время!

В ответ на Mikhail Sabyanin

Re: Блокировка оценок ( Lock \ Unlock grdades )

от Vadim Tabunshchik -
Изображение пользователя Developers

Вопрос поднимался давно, ещё в версии 1.9.4 - MDL-18442

Тоже говорится о том, что сами по себе разрешения moodle/grade:hide, moodle/grade:lock и moodle/grade:unlock не работают.

Ответ Petr Skoda: "да, это было сделано намеренно, потому что реализовать все комбинации в отчете по оценкам будет кошмар" улыбаюсь

И, судя по MDL-44072, так это и останется. Смиритесь улыбаюсь