Как обновлять версии записей после редактировани пользователями?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Какой процесс сделать, не могу придумать?
Есть версия, например, статьи. Пользователь ее отредактировал. Нужно провести модерацию и, если все хорошо, то обновить старую версию на новую. Типа википедии.
 
Вики хранит все изменения над статьей.

Простейший алгоритм:
1) в таблице статей добавить колонки
- status типа int: version = 0, publish = 1, delete = 2, hide = 3, draft = 5 ... (только первые 2 нужны тебе, остальное навороты)
- version = max(version) + 1 для новых версий, либо указание последней проверенной version для publish
- moderated (0 - еще нет, 1 - прошла модерацию успешно, 2 - фу, гадость)
- parent_id - для поста типа version указываем post.id
2) при изменении добавляем post со статус = 0, колонке version присваиваем последний максимальный version + 1 и задаём parent_id
3) при модерации делаем джойн таблицы на себя по условию ON t1.id = t2.parent_id and t1.version < t2.version
и отфильтровка только max(t2.version)
- при успехе апдейтим publish post по колонкам text, title, datechange ... version
и ставим moderated для поста типа version

PS: можно попробовать версии вынести в отдельную таблицу (особенно актуально при большом количестве постов) приерно с тем же алгоритмом
в более сложном конфиге вместо полного текста всех версий, хранить только diff
 
еще вопрос...
а как проще всего сравнить старый и новый текст, типа подстветки. А то попробуй статью сравни, когда могли исправить только орфографическую ошибку.
Или, например, добавили пару предложений.
 
еще вопрос...
а как проще всего сравнить старый и новый текст, типа подстветки. А то попробуй статью сравни, когда могли исправить только орфографическую ошибку.
Или, например, добавили пару предложений.

Лучше что-то готовое поискать.

В упрощенке:
- разбиваем на строк
- обрабатываем конец строки(удалить), пробелы, табы
- построчно сравниваем, если равны зелёным, нет красным
группировать и учитывать смещение чуток сложнее...

+ сложность приходит, когда некий параграф был перемещен хоть и не изменился, или отличие на 1 символ в параграфе на 1000 символов...
 
Назад
Сверху