Aligatro
@Aligatro
Turn food and coffee into software...

Как организовать одобрение/отклонение правок от нескольких пользователей в тексте?

Добрый вечер, друзья. В целом адекватно сформулировать вопрос полностью отражающий суть проблемы крайне сложно, потому постараюсь пояснить что я имею ввиду.

Если кратко то мне необходимо доработать Text_Diff (я абсолютно не привязан конкретно к данной библиотеке, просто это первое, что я нашел в сети) так, что-бы помимо сравнения двух версий имелась возможность - отображать + удалять/восстанавливать правки по пользователям + на основе этого формировать конечный документ из:
"Исходная версия текста" -> "Одобренные правки" -> "Конечная версия текста".

Например:
Исходная версия
Это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века.
Одобренная правка Пользователя 1
Это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1
Одобренная правка Пользователя 2
Это не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 2
Отклоненная правка Пользователя 3
Это фееричный бред текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Хрень от пользователя 3
Модераторская версия
Это фееричный бред не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1Дополнение от пользователя 2Хрень от пользователя 3
Итоговая версия
Это не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1Дополнение от пользователя 2
Важно заметить что все правки добавляются не друг за другом а относительно исходной версии текста

Проблемы у меня возникают с построение архитектуры как таковой, так как ничего более здравого чем десятки сравнений версий текста на каждого пользователя я не придумал.

Пока мой неюзабельный набросок выглядит так:
  1. Создаем таблицу где храним текст каждой правки пользователя (текст правки каждого пользователя вычленяем сравнивая исходную версию текста и версию пользователя с правками, разницу записываем в таблицу)
  2. Создаем таблицу с общим текстом правок от всех пользователей для последующего сравнения с текстом от каждого пользователя и подсвечиванием их правок (вот тут тупик, так как мне совсем не ясно как работать с очередностью текста, ведь каждая новая правка будет вноситься относительно исходной версии документа а не друг за другом)
  3. В случае если два отдельных пользователя затрагивают один и тот же текст в документе размещаем их друг за другом (тоже пробел, гипотетически можно провести перекрёстное сравнение с предыдущей общей версией с внесенными правками от прочих пользователей, версией с правками от текущего пользователя и исходной версией для выделение повторяющихся правок, но звучит так себе)

По итогу вызовов text_diff там будет невероятно много (и даже с сравнением всего и вся проблема хронологии сохраняется), что убого как по архитектуре так и по производительности. Потому хотел бы попросить у вас помощи с поиском верного направления мысли или еще лучше со ссылкой на готовую библиотеку xD.

Спасибо всем кто дочитал до конца...

P.s и да я знаю что мне не мешало бы прочесть курс по алгоритмам, изучить виды сортировок, etc. И я обязательно этим займусь но сейчас, у меня просто нет времени. И да я так же знаю, что по хорошему я всё это должен знать, но уж извините...
  • Вопрос задан
  • 1027 просмотров
Пригласить эксперта
Ответы на вопрос 3
@laxikodeje
Вики-движок такое умеет.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Я туплю или вы гит переизобретаете?
Ответ написан
MSrVladis
@MSrVladis
Надеюсь на глубинную генетическую порядочность нас
Великолепная задача и постановка!
Обдумываю это решение уже пять лет, так как готовое решение даст неимоверный толчек в развитии того Государства, где этот механизм реализуется полностью и сделан будет максимально удобным. Ведь не секрет, что многочисленные согласования в каскадных системах управления и не только, отнимают огромное количество время, и большинство этих согласований - теряют самое ценное.
Добавка, которая надеюсь приблизит решение: пользователей необходимо классифицировать и присваивать им свой (неповторимый) цвет, здесь будет видно самые малые но невероятно ощутимые правки до одного знака наглядно. Также, цветовая "дифференциация штанов" позволит определять уровень редактирующего текст или другое пользователем. Например, - зеленая группа (по всей цветовой шкале данного цвета) - это ученые, синяя группа - гос служащие, красная группа - непрофессиональные пользователи ( к их правкам требуется более пристальное внимание по разным причинам) И ТАК ДАЛЕЕ. Также каждый цвет представляет собой уникальный порядковый номер #00000 - #.......
Да, выше было затронуто; "реализован движок в википедии" - нифиг..а, подобного! Там правки осуществляются доверенными пользователями и абсолютно не видно наглядно, что правилось (нужно искать отдельно и самому находить эти редакции) очень неудобно и неэффективно и не всегда эти формулировки действительно ценны и "научны".

К сожалению у меня мало время и остальных ресурсов для настоящей помощи в данной работе, но если не сложно.. , держите меня в курсе. Большое спасибо, есть еще настоящие ИСКАТЕЛИ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы