<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://docs.deansoffice.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0%3Astorages%2Fsync</id>
		<title>Разработка:storages/sync - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://docs.deansoffice.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0%3Astorages%2Fsync"/>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/sync&amp;action=history"/>
		<updated>2026-04-12T20:52:19Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/sync&amp;diff=2643&amp;oldid=prev</id>
		<title>Yumeneco: Новая страница: «{{Infobox_Plugin | name = sync | type = storages }}  ==Таблица в базе данных== ''sync'' - Справочник для работы с внешне...»</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:storages/sync&amp;diff=2643&amp;oldid=prev"/>
				<updated>2013-04-17T12:16:47Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «{{Infobox_Plugin | name = sync | type = storages }}  ==Таблица в базе данных== &amp;#039;&amp;#039;sync&amp;#039;&amp;#039; - Справочник для работы с внешне...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = sync&lt;br /&gt;
| type = storages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Таблица в базе данных==&lt;br /&gt;
''sync'' - Справочник для работы с внешней синхронизацией.&lt;br /&gt;
&lt;br /&gt;
===Подробный формат полей в таблице:===&lt;br /&gt;
* downptype Тип внутреннего плагина (с которым выполняется синхронизация)&lt;br /&gt;
* downpcode Код плагина&lt;br /&gt;
* downsubstorage Код субсправочника (пока пустой, но по полю должна выполняться фильтрация, чтобы методы не путали записи с пустым кодам и записи с указанным - они относятся к разным справочникам). Это нужно, например, если у нас есть универсальный справочник, который позволяет создавать через веб-интерфейс настраиваемые справочники, а физически хранит их в одной таблице SQL.&lt;br /&gt;
* downid Внутренний id&lt;br /&gt;
* upptype Тип плагина - поставщика синхронизации (обычно - sync)&lt;br /&gt;
* uppcode Код плагина - поставщика синхронизации&lt;br /&gt;
* upsubsubstorage Код субсправочника (а вот здесь ситуация частая - если через один плагин мы синхронизируемся с несколькими внешними справочниками).&lt;br /&gt;
* upid Внешний id.&lt;br /&gt;
* direct Направление последней синхронизации (up - изнутри наружу, down - внутрь)&lt;br /&gt;
* lasttime UnixTimestamp последней синхронизации&lt;br /&gt;
* lastoperation - последняя операция (connect - установлена связь между существующими объектами, create - создан объект в системе-получателе (по направлению), update, delete, unsync - синхронизация разорвана, следующая операция только create или connect)&lt;br /&gt;
* downhash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внутренней системы (нижней), при направлении синхронизации up.&lt;br /&gt;
* uphash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внешней системы (верхней), при направлении синхронизации down.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
===== makeHash() ===== &lt;br /&gt;
Метод вычисления хешей: на вход получает объект Object и объект-маску (необязательный параметр). Если передан объект-маска, сперва удаляются все игнорируемые поля через unset(). Затем объект сериализуется в json и от него считаем sha1. С порядком переменных пока не заморачиваемся - если где и ошибёмся, не страшно - ситуация редкая, да и если лишний раз синхронизируем апдейт - не страшно.&lt;br /&gt;
&lt;br /&gt;
Принцип работы с объектом маской: все поля, которые имеют в маске значение &amp;quot;ignore&amp;quot; не учитываются при вычислении хеша.&lt;br /&gt;
&lt;br /&gt;
Важное замечание:&lt;br /&gt;
&lt;br /&gt;
$obj-&amp;gt;a= &amp;quot;ignore&amp;quot;; - будет проигнорировано поле a;&lt;br /&gt;
&lt;br /&gt;
$obj-&amp;gt;a-&amp;gt;b= &amp;quot;ignore&amp;quot;; - будет проигнорировано только поле &amp;quot;b&amp;quot;, а остальные потомки поля &amp;quot;a&amp;quot; будут учтены.&lt;br /&gt;
&lt;br /&gt;
В будущем, возможно реализуем независимость хеша от порядка следования полей в объекте.&lt;br /&gt;
&lt;br /&gt;
Входные параметры:&lt;br /&gt;
* (object) $data - данные синхронизации.&lt;br /&gt;
* (object) $datamask - не значимые данные синхронизации, которые будут игнорированы. По умолчанию null.&lt;br /&gt;
Возвращаемые значения:&lt;br /&gt;
* (string) $hash - sha1 сериализованного json объекта значимых данных.&lt;br /&gt;
&lt;br /&gt;
===== createConnect() =====&lt;br /&gt;
Воздает подключение к синхронизации, вызывает класс dof_storage_sync_connect&lt;br /&gt;
Входные параметры:&lt;br /&gt;
* (string) $downptype - тип внутреннего плагина.&lt;br /&gt;
* (string) $downpcode - код внутреннего плагина.&lt;br /&gt;
* (string) $downsubstorage - код внутреннего субсправочника.&lt;br /&gt;
* (string) $upptype - тип внешнего плагина.&lt;br /&gt;
* (string) $uppcode - код внешнего плагина.&lt;br /&gt;
* (string) $upsubstorage - код внешнего субсправочника.&lt;br /&gt;
Возвращаемые значения:&lt;br /&gt;
* (stdClass) $connect - объект класса dof_storage_sync_connect.&lt;br /&gt;
&lt;br /&gt;
=== Класс dof_storage_sync_connect ===&lt;/div&gt;</summary>
		<author><name>Yumeneco</name></author>	</entry>

	</feed>