Разработка:storages/sync
Плагин | |
Название | sync |
Тип | storages |
Содержание
Таблица в базе данных
sync - Справочник для работы с внешней синхронизацией.
Подробный формат полей в таблице:
- downptype Тип внутреннего плагина (с которым выполняется синхронизация)
- downpcode Код плагина
- downsubstorage Код субсправочника (пока пустой, но по полю должна выполняться фильтрация, чтобы методы не путали записи с пустым кодам и записи с указанным - они относятся к разным справочникам). Это нужно, например, если у нас есть универсальный справочник, который позволяет создавать через веб-интерфейс настраиваемые справочники, а физически хранит их в одной таблице SQL.
- downid Внутренний id
- upptype Тип плагина - поставщика синхронизации (обычно - sync)
- uppcode Код плагина - поставщика синхронизации
- upsubsubstorage Код субсправочника (а вот здесь ситуация частая - если через один плагин мы синхронизируемся с несколькими внешними справочниками).
- upid Внешний id.
- direct Направление последней синхронизации (up - изнутри наружу, down - внутрь)
- lasttime UnixTimestamp последней синхронизации
- lastoperation - последняя операция (connect - установлена связь между существующими объектами, create - создан объект в системе-получателе (по направлению), update, delete, unsync - синхронизация разорвана, следующая операция только create или connect)
- downhash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внутренней системы (нижней), при направлении синхронизации up.
- uphash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внешней системы (верхней), при направлении синхронизации down.
API
makeHash()
Метод вычисления хешей: на вход получает объект Object и объект-маску (необязательный параметр). Если передан объект-маска, сперва удаляются все игнорируемые поля через unset(). Затем объект сериализуется в json и от него считаем sha1. С порядком переменных пока не заморачиваемся - если где и ошибёмся, не страшно - ситуация редкая, да и если лишний раз синхронизируем апдейт - не страшно.
Принцип работы с объектом маской: все поля, которые имеют в маске значение "ignore" не учитываются при вычислении хеша.
Важное замечание:
$obj->a= "ignore"; - будет проигнорировано поле a;
$obj->a->b= "ignore"; - будет проигнорировано только поле "b", а остальные потомки поля "a" будут учтены.
В будущем, возможно реализуем независимость хеша от порядка следования полей в объекте.
Входные параметры:
- (object) $data - данные синхронизации.
- (object) $datamask - не значимые данные синхронизации, которые будут игнорированы. По умолчанию null.
Возвращаемые значения:
- (string) $hash - sha1 сериализованного json объекта значимых данных.
createConnect()
Воздает подключение к синхронизации, вызывает класс dof_storage_sync_connect Входные параметры:
- (string) $downptype - тип внутреннего плагина.
- (string) $downpcode - код внутреннего плагина.
- (string) $downsubstorage - код внутреннего субсправочника.
- (string) $upptype - тип внешнего плагина.
- (string) $uppcode - код внешнего плагина.
- (string) $upsubstorage - код внешнего субсправочника.
Возвращаемые значения:
- (stdClass) $connect - объект класса dof_storage_sync_connect.