Перейти на очистку данных правила специальной функцией.

Issue #321 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 321

Там история такая (ее даже в комментах на трекере можно найти) Тим забыл сделать функцию
для удаления данных правила при удалении самого теста, когда составлял класс правила.
Мы Тиму написали, но вынуждены были сделать пока по механизму событий это удаление.

Но Тим через некоторое время сделал функцию, чтобы класс правила был функционально
законченным.
https://tracker.moodle.org/browse/MDL-44449

Теперь не мешало бы нам перенести код из события удаления теста в новую функцию, ибо
там ему более логичное место.

Reported by oasychev on 2015-01-10 20:14:51

Comments (13)

  1. Former user Account Deleted
    Я правильно поняла, что прямое обращение к БД в файле lib.php необходимо заменить на
    функцию Тима? Сами функции не трогать и не убирать? Там обращение к БД происходит в
    двух местах: в функции cleanup и в функции course_module_deleted. Я там и заменяю обращение
    к БД на функцию Тима, верно? 
    

    Reported by anastasiyaSergeevnaP on 2015-01-11 13:29:48

  2. Oleg Sychev reporter
    Нет, там наоборот идет речь о том, где оно по правилам должно находиться. Когда срабатывать.
    Речь идет о ситуации когда удалили quiz и надо удалить связанные с ним данные. Возможно
    это course_module_deleted - оно должно было по эвентам работать.  cleanup скорее всего
    это другое.
    
    А теперь вместо эвента у правила есть централизованная функция для удаления данных
    правила когда удален тест, надо поместить этот код в эту функцию, а реакцию на эвент
    (включая возможные настройки его вызова) - убрать.
    

    Reported by oasychev on 2015-01-12 16:23:23

  3. Oleg Sychev reporter
    Если совсем непонятно - завтра подойдите около полудня или позже - до 15 часов.
    

    Reported by oasychev on 2015-01-12 16:23:55

  4. Former user Account Deleted
    Олег Александрович, простите, пожалуйста, нам с Дарьей срочно надо было доделать курсовую.
    Я поставила то, что Тим сделал - honestycheck. Там функция delete_settings, я туда
    переношу код из вашего класса по очистке.
    

    Reported by anastasiyaSergeevnaP on 2015-01-17 21:28:51

  5. Oleg Sychev reporter
    Ничего страшного.
    Да, туда нужно перенести код очистки, эту функцию delete_settings надо перегрузить
    в нашем классе.
    И еще есть где-то запись что старый код вызывается при событии, ее удалить надо т.к.
    событие нас больше не интересует.
    

    Reported by oasychev on 2015-01-18 01:55:54

  6. Oleg Sychev reporter
    Настя, когда можно ожидать кода по этому и рядом находящемуся иссью? Люди ждут все-таки.
    
    Если есть вопросы, у меня будет экзамен в эту пятницу, можно подойти и дождаться пока
    я буду свободен.
    

    Reported by oasychev on 2015-01-20 18:57:28

  7. Former user Account Deleted
    Олег Александрович, я там обнаружила в коде странную вещь. В общем функции из библиотеки
    в классе rule вообще не используются, вместо этого удаление из таблицы шло напрямую
    через переменную DB в нескольких местах, я сделала метод в классе quizaccess_supervisedcheck
    как у Тима, вставила где надо его вызов, убрала временно файл lib - настройки нормально
    удаляются из таблицы mdl_quizaccess_supervisedcheck.
    

    Reported by anastasiyaSergeevnaP on 2015-01-22 09:40:05

  8. Former user Account Deleted
    Олег Александрович, я там обнаружила в коде странную вещь. В общем функции из библиотеки
    в классе rule вообще не используются, вместо этого удаление из таблицы шло напрямую
    через переменную DB в нескольких местах, я сделала метод в классе quizaccess_supervisedcheck
    как у Тима, вставила где надо его вызов, закомментировала функции из файла lib (тела
    функций) - настройки нормально удаляются из таблицы mdl_quizaccess_supervisedcheck.
    Код свой я вытолкнула
    

    Reported by anastasiyaSergeevnaP on 2015-01-22 10:04:30

  9. Oleg Sychev reporter
    Ваш коммит - 665ddd00d5b4 - требует дальнейшей доработки. Там циклы остались, а их стоит
    убрать. Надо сделать массив из id правил и использовать get_in_or_equal для того, чтобы
    сформировать нужное условие которое бы удалило все записи, без использования цикла.
    Так это будет работать быстрее.
    

    Reported by oasychev on 2015-02-08 22:19:20

  10. Oleg Sychev reporter
    Там в be146322cdda скорее всего пара недочетов.
    а) если вы создаете новый массив $oldrulesid  - то до цикла, его заполняющего, для
    надежности надо ставить строку
    $oldrulesid = array();
    Чтобы гарантировано начать с пустого. Кроме того, в его название следовало бы добавить
    множественное число - букву s в конце.
    
    б)для добавления элемента в конец массива если ключи не важны можно воспользоваться
    конструкцией типа
    $oldrulesid[] = value;
    вместо array_push. Она более распространена и понятна, чем эта функция.
    
    Попробуйте изменить и отпишитесь сюда, все ли протестировано.
    

    Reported by oasychev on 2015-02-18 21:27:55

  11. Oleg Sychev reporter
    Вы точно протестировали с массивом после изменений? С удалением нескольких элементов?
    Потому что в https://code.google.com/r/anastasiyasergeevnap-supervised-block-clone/source/detail?r=f548dd1c91125119038f2b991f396ab4fb831aae
    я не вижу пустых скобок слева от присваивания для добавления элемента массива, там
    вместо этого сам массив переприсваивается - если это работает в цикле, то странно...
    
    P.S. Если сделали и протестировали, устанавливайте Status иссью в Fixed
    

    Reported by oasychev on 2015-02-24 19:37:28

  12. Former user Account Deleted

    Reported by anastasiyaSergeevnaP on 2015-02-25 12:33:17 - Status changed: Fixed

  13. Oleg Sychev reporter
    Выложил новые версии, теперь вы в разработчиках на https://moodle.org/plugins/view/quizaccess_supervisedcheck
    тоже.
    

    Reported by oasychev on 2015-02-26 23:07:17 - Status changed: Done

  14. Log in to comment