Вот мои идеи.Предполагается, что на клиентах установлена локальная копия Moodle, но все данные находятся на сервере.
Сервер -> Синхронизация клиента легко.Ваш сервер должен предоставить схему базы данных + данные.Когда ваша база данных становится больше, может быть целесообразно отправлять только db diff (каждый раз, когда клиент синхронизируется с сервером, сделайте снимок дампа db и отметьте время синхронизации, затем, когда клиент захочет снова синхронизировать, сравнитетекущий дб и снимок на момент последней синхронизации и отправка только различий).Вы можете легко синхронизировать файлы и папки с rsync
.
Клиент -> Синхронизация с сервером сложно.Допустим, проф. А и проф. Б создают два разных курса с двумя разными именами, когда они находятся в автономном режиме.Однако из-за того, как работают базы данных, оба курса могут иметь одинаковый идентификатор в базе данных, и это сломает вещи.Вот сумасшедшая идея, как решить эту проблему без изменения кодовой базы Moodle: если вы используете MySQL, присваивайте каждому пользователю свой номер AUTO_INCREMENT при каждой синхронизации.Например, после синхронизации проф. A с сервером он получает информацию о том, что следующий автоматически сгенерированный идентификатор для таблицы курсов должен быть 10000, а для проф. B - 20000. Если проф. A создает новый курс, у него будет ID = 10001 и проф.новый курс будет 20001. Таким образом, Профессоры могут создать до 10000 новых курсов, не вызывая идентификационные конфликты.Это, однако, не защитит вас от кого-то со злонамеренными намерениями.
Похоже, вы не единственный, кто задумался о переводе Moodle в автономный режим.