SCROLL
Среднее время на прочтение: 3 мин.

Проблема с Moodle + ONLYOFFICE Docs

В продуктиве крутится Moodle 4.5+ (Build: 20241018), решил к нему добавить возможность использовать ONLYOFFICE Docs (8.2.1-38), но не все завелось сразу, пришлось повозится чтобы заставить работать.

Для использования ONLYOFFICE Docs в Moodle использую следующий плагин — https://moodle.org/plugins/mod_onlyofficeeditor

На странице плагина указано что старшая поддерживаемая версия Moodle 4.5, а у меня 4.5+, вероятно из за этого в коде плагина есть некоторые нюансы, которые мы ниже поправим. Сам плагин устанавливается штатно, без ошибок, настройка тоже тривиальная.

Но при попытке открыть документ на странице выдает следующую ошибку:

Сервер документов ONLYOFFICE недоступен. Пожалуйста, свяжитесь с администратором.

Если включить ОТЛАДКУ (Администрирование -> Разработка -> Отладка), то можно будет видеть сообщение вида:

Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in /var/www/moodle/moodle/lib/filelib.php on line 3564

Проанализировав файл /var/www/moodle/moodle/lib/filelib.php стало понятно что там все в порядке, а проблема кроется в коде файлов плагина:

  • /var/www/moodle/moodle/mod/onlyofficeeditor/classes/util.php
  • /var/www/moodle/moodle/mod/onlyofficeeditor/view.php

Находим в файле /var/www/moodle/moodle/mod/onlyofficeeditor/classes/util.php описание функции — public static function get_connection_info($url) и заменяем ее следующим кодом:

/var/www/moodle/moodle/mod/onlyofficeeditor/classes/util.php
public static function get_connection_info($url) {
    $ch = new \curl();
    $disableverifyssl = get_config('onlyofficeeditor', 'disable_verify_ssl') == 0;

    $ch->setopt(['CURLOPT_SSL_VERIFYPEER' => $disableverifyssl]);

    if ($disableverifyssl) {
        $ch->setopt(['CURLOPT_SSL_VERIFYHOST' => 2]);
    } else {
        $ch->setopt(['CURLOPT_SSL_VERIFYHOST' => 0]);
    }

    $ch->get($url);
    $info = $ch->get_info();
    
    return $info;
}

Далее в файле /var/www/moodle/moodle/mod/onlyofficeeditor/view.php находим секцию кода:

/var/www/moodle/moodle/mod/onlyofficeeditor/view.php
if (!isset($documentserverurl) ||
        empty($documentserverurl) ||
        $httpcode != 200) {
    echo $OUTPUT->notification(get_string('docserverunreachable', 'onlyofficeeditor'), 'error');
} else {

и приводи ее к виду:

/var/www/moodle/moodle/mod/onlyofficeeditor/view.php
if (!isset($documentserverurl) ||
        empty($documentserverurl)) {
    echo $OUTPUT->notification(get_string('docserverunreachable', 'onlyofficeeditor'), 'error');
} else {

Т.е. в первом файле мы внесли правки где указали типизацию CURLOPT_SSL_VERIFYHOST в соответствии с требованиями, а во втором файле мы убрали проверку $httpcode != 200, которая лично в моем случае возвращала 404 при запросе прямого url через функцию get_connection_info, при этом сервер ONLYOFFICE работает штатно.

Дополнительно

В случае если после проделанных выше операций вы по-прежнему видите ошибку — Сервер документов ONLYOFFICE недоступен. Пожалуйста, свяжитесь с администратором. При это в логах Moodle (Администрирование -> Отчеты -> События в реальном времени) наблюдается ошибка — The URL was blocked Blocked onlyoffice.*.com: The URL is blocked.

То необходимо в Администрирование -> Безопасность -> Безопасность HTTP в секции Список заблокированных хостов cURL удалить подсеть где у вас находится сервер ONLYOFFICE Docs

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.