Сейчас рассматриваем вариант:
При открытии на редактирование вторым пользователем предупреждать, что запись уже редактируется, возможно некую функцию перехвата лока. Да, при сохранении предупреждать, если запись была изменена кем-то другим, система позволяет определить исходную версию редактируемой записи и были ли изменения другим пользователем.
Остается вопрос на сколько это необходимо конечным пользователям, и не усложнит ли это работу с системой. В комментариях к статье промелькнуло, что нужно, правда в рамках обсуждения другого вопроса.
Мы работаем над этим, недавно выпустили первый скринкаст. Документации будет много, на ее написание и перевод необходимо время. Попутно дорабатываем систему с учетом пожеланий и предложений. Например снизили обилие singletone доставшихся по наследству, продумываем локи на одновременное редактирование записей.
Откатиться можно следующим образом — откатить файлы конфигурации объектов ORM в своей VCS, в интерфейса запустить синхронизацию структуры. Так же можно воспользоваться бекапом, который можно сделать в интерфейсе управления ORM
Нет контроля версий разработки нет, он отдается на откуп разработчику. Единственное, что есть — дополнительный лог операций изменения структуры базы данных.
Ну вот вроде бы и разобрались, мы говорили о разных вещах.
Под версионyым контролем объектов подразумевались непосредственно данные объектов. Их структура лежит и контролируется отдельно, при помощи выбранyой вами VCS
Есть механизм синхронизации структуры базы данных, который сверяет конфигурацию и реальную структуру БД, способен обновить структуру базы данных, записать лог SQL запросов. Описание структуры хранится в файлах конфигурации, которые в свою очередь в VCS. Как это связано с одновременной записью данных 2 пользователями мне не совсем понятно.
Мне кажется мы с вами запутались. Мы говорим о миграции структуры или о версиях данных в БД.
Миграция структуры предусмотрена.
Вы предлагаете сохранять запись из бд в файловую систему?
Не доводилось иметь дело сторонними VCS на уровне данных MySQL. Приведите пример такой системы php + mysql, которая бы управляла версиями данных MySQL. Думаю, не мне одному будет полезно изучить это направление.
Это версионный контроль данных, какие слияния конфликты вы имеете в виду? Смысл в том, что была некая запись пользователь А внес в нее изменения пользователь B посмотрел какие данные изменил пользователь A.
Если вы имеете в виду функционал блокировки одновременных изменений, на данном этапе он не предусмотрен. Кто последний сохранил тот и прав. Добавить функциональность блокировок вполне реально.
Хороший вопрос. На данный момент у нас нет реализованного функционала под это задачу, но в целом она решаема
/*
* предположим, что сравниваем объект "news" c известным нам id,
* знаем, что последняя версия 10
* Вариант 1 Сравнение объекта и его версии
*/
$vcModel = Model::factory('vc');
$object = new Db_Object('news', $id);
$dataBefore = $vcModel->getData('news', $id , 10);
/*
* Нельзя задавать id напрямую
*/
unset($dataBefore['id']);
$object->setValues($dataBefore);
var_dump($object->getUpdates());
/*
* Вариант 2 Сравнение 2ух версий объекта
*/
$dataBefore = $vcModel->getData('news', $id , 9);
$data = $vcModel->getData('news', $id , 10);
$diff = array();
foreach ($data as $k=>$v){
if(!isset($dataBefore[$k]) || $dataBefore[$k]!==$v)
$diff[] = $k;
}
var_dump($diff);
Функционал сравнения добавим в следующую версию, спасибо за отзыв
Для этого как ни кстати подошел Extjs, взявший на себя отрисовку интерфейса, что позволило отвлечься от шаблонов и заняться непосредственно бизнес логикой.
При открытии на редактирование вторым пользователем предупреждать, что запись уже редактируется, возможно некую функцию перехвата лока. Да, при сохранении предупреждать, если запись была изменена кем-то другим, система позволяет определить исходную версию редактируемой записи и были ли изменения другим пользователем.
Остается вопрос на сколько это необходимо конечным пользователям, и не усложнит ли это работу с системой. В комментариях к статье промелькнуло, что нужно, правда в рамках обсуждения другого вопроса.
Под версионyым контролем объектов подразумевались непосредственно данные объектов. Их структура лежит и контролируется отдельно, при помощи выбранyой вами VCS
Миграция структуры предусмотрена.
Вы предлагаете сохранять запись из бд в файловую систему?
Если вы имеете в виду функционал блокировки одновременных изменений, на данном этапе он не предусмотрен. Кто последний сохранил тот и прав. Добавить функциональность блокировок вполне реально.
Функционал сравнения добавим в следующую версию, спасибо за отзыв