Ошибка "Fatal error" при создании новых элементов.

Ошибка "Fatal error" при создании новых элементов.

от Максим Петров -
Количество ответов: 5

Здравствуйте.

Помогите,пожалуйста, найти решение следующей проблемы.

В moodle стало невозможно посмотреть оценки, создать новый курс или зарегистрировать пользователя. Выдает ошибку: Fatal error: Call to undefined method MoodleQuickForm_header::MoodleQuickForm_header() in /home/gorooors/public_html/school20/moodle/lib/pear/HTML/QuickForm/element.php on line 363

Раньше все работало отлично. Есть подозрение, что администратор домена обновил версию PHP.

Сейчас  PHP Version 5.3.29.

Проверка настроек сервера выдает:

moodleтребуется версия 1.0, у Вас используется версия 1.9.4OK
unicodeнеобходимо установить и включитьOK
databasemysqlтребуется версия 4.1.16, у Вас используется версия 5.6.36OK
phpтребуется версия 4.3.0, у Вас используется версия 5.3.29

В ответ на Максим Петров

Re: Ошибка "Fatal error" при создании новых элементов.

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

Moodle версий 1.9.3, 1.9.4, 1.9.5 не работает с PHP 5.3

Решений несколько:

  1. откатывайте версию РНР до 5.2, если админ домена может (и захочет) это сделать.
  2. если п. 1 не подходит, обновите moodle до 1.9.19+. Этот вариант предпочтительней п. 1.
  3. если оба варианта не нравятся, есть третий:
    подправить код файла /moodle/lib/pear/HTML/QuickForm/element.php, добавив туда функцию:
public function __call($name, $args) {
    $name = str_replace('MoodleQuickForm_', '', $name);

    if ($name == 'passwordunmask') {
        $name = 'password';
    }

    return call_user_func_array(array($this, 'HTML_QuickForm_'.$name), $args);
}

Этот вариант сам не пробовал, гарантий, что сработает, дать не могу. Хотя хлопцы хвалили: https://tracker.moodle.org/browse/MDL-16804 улыбаюсь

В ответ на Vadim Tabunshchik

Re: Ошибка "Fatal error" при создании новых элементов.

от Максим Петров -

Огромное спасибо!  Хлопцы не зря хвалили третий способ улыбаюсь   Несколько секунд и все работает как прежде.


Может быть вы поможете решить еще одну проблему?

Еще до обновления версии PHP стал невозможен просмотр оценок для элемента курса.

Пишет следующее:

BIGINT UNSIGNED value is out of range in '(`gorooors_sch20`.`qa`.`timefinish` - `gorooors_sch20`.`qa`.`timestart`)'

SELECT CONCAT(u.id,'#', IFNULL(qa.attempt, 0) ) AS uniqueid, (CASE WHEN qa.sumgrades = (SELECT MAX(qa2.sumgrades) FROM sch20_mdl_quiz_attempts qa2 WHERE qa2.quiz = qa.quiz AND qa2.userid = qa.userid) AND qa.timestart = (SELECT MIN(qa3.timestart) FROM sch20_mdl_quiz_attempts qa3 WHERE qa3.quiz = qa.quiz AND qa3.userid = qa.userid AND qa3.sumgrades = qa.sumgrades) THEN 1 ELSE 0 END) AS gradedattempt, qa.uniqueid AS attemptuniqueid, qa.id AS attempt, u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt, qa.sumgrades, qa.timefinish, qa.timestart, qa.timefinish - qa.timestart AS duration FROM sch20_mdl_user u LEFT JOIN sch20_mdl_quiz_attempts qa ON qa.userid = u.id AND qa.quiz = 852 WHERE qa.id IS NOT NULL AND qa.preview = 0 ORDER BY uniqueid

  • line 686 of lib/dmllib.php: call to debugging()
  • line 966 of lib/dmllib.php: call to get_recordset_sql()
  • line 430 of mod/quiz/report/overview/report.php: call to get_records_sql()
  • line 73 of mod/quiz/report.php: call to quiz_report->display()
При этом оценки для всего курса можно посмотреть без проблем. А для отдельного элемента, выдает эту ошибку.
В ответ на Максим Петров

Re: Ошибка "Fatal error" при создании новых элементов.

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

Пока не обновите Мудл хотя бы до последней стабильной версии ветки 1.9 (а это 1.9.19+), постоянно будете отлавливать разные косяки.

Пользуйтесь поиском для решения проблемы: https://moodle.org/public/search/

MDL-26937. Исправление тут: https://github.com/timhunt/moodle/commit/71ec5d19df4f506ca810cd55e25ebca4c5b94962

В ответ на Максим Петров

Re: Ошибка "Fatal error" при создании новых элементов.

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Вообще, идеальный вариант всё-таки, чтобы ПО работало примерно в том окружении, в котором разрабатывалось. Иначе неизвестно, какие ещё могут штуки вылезти из-за того, что что-то из старого moodle не тестировалось на новом php. Поэтому в вашем случае следует и версию php вернуть ту, которая была раньше, и moodle обновить до последнего релиза 1.9.