Связь между группами

Главные вкладки

Аватар пользователя molp molp 10 января 2016 в 21:49

Задумал сайт, который должен позволять:

  1. Создавать группы, вступать в них - модуль Organic groups
  2. Добавлять к группам подгруппы - группа должна иметь возможность вступить в другую - ищу решение, тестирую Subgroups for Organic groups
  3. Устанавливать связи между группами - группа должна иметь возможность установить равноценную взаимосвязь с другой группой - ищу решение, тестирую User Relationships

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

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

Комментарии

Аватар пользователя Studio VIZA Studio VIZA 11 января 2016 в 3:02

Здесь интеграция с ОГ Shoutbox
А вообще, проще на орге в поиске выставить 7-ку, выбрать Organic groups (OG) и отфильтруется список из 56 модулей, имеющих какое либо отношение к ОГ.

Аватар пользователя molp molp 11 января 2016 в 3:20

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

Аватар пользователя Orion76 Orion76 11 января 2016 в 7:40

Разъяснили бы немного поподробнее: Для чего Группы, почему Группы и т.д..
Необходимо разграничение доступа к контенту в Группах?
Если нет, то и большого смысла их использовать нет.

Аватар пользователя molp molp 12 января 2016 в 2:31

Обозначения

  • a,b,c,d - пользователи
  • -> присоединение
  • <- принятие
  • Фигурными скобками {} помечены группы
  • За круглые скобки () вынесен пользователь являющийся администратором группы

Группы

user/user

  • a -> b = невозможно

group/user

  • {a} -> b = невозможно
  • {a} <- b = {a(b)}
  • {a(b)} <- c = {a(bc)}

group/group

  • {a} -> {b} = {b(a)}
  • {a} <- {b} = {b(a)}
  • {a(b)} -> {c} = {c(ab)}
  • {a(b)} <- {c} = {a(bc)}
  • {a(b)} -> {c(d)} = {c(abd)}
  • {a(b)} <- {c(d)} = {a(bcd)}

Связи (равносторонние)

user/user

  • a-b

group/user

  • {ab}-c

group/group

  • {ab}-{cd}

Условия (Roles + Rules) и исключения

  1. Для принятия членов, вначале должна быть создана группа
  2. Если user уже состоит в группе, то он не может создавать другие группы
  3. Если user не является админом группы, то он не может присоединяться, принимать и вступать в связи
  4. Админ соответственно может присоединяться, принимать и вступать в связь со всеми кроме членов своей группы
  5. Свободный user (не имеющий собственной группы и не состоящий в любой другой) соответственно может только присоединяться либо вступать в связь, но не может принимать в группу

Другое

  • Группы по определенному условию разрываются при помощи Rules
  • Связи по определенному условию получают новый статус (к примеру expired) и становятся видны в истории участников

Как я себе это представляю

Группы и подгруппы

  1. OG
  2. OG Subgroups - пока не работает

Связи

  1. Relation - Поскольку в данном случае группой будет являться нода, то для связи двух нод (групп) думаю подойдет Relation. Остается вопросом процесс установки связи - хочется чтобы это имело форму приглашения как в OG или User Relationships
  2. История связей - Возможно ноды придется объединять в единую сущность для назначения ей нового статуса - тут пока решения не вижу
Аватар пользователя Orion76 Orion76 11 января 2016 в 21:15

Для "Истории связей" возможно подойдут стандартные "Ревизии"(revision) сущностей Drupal.

Кратко: при изменении поля или свойства сущности, запись в БД с данными поля не удаляется, а создается новая.
И по "старым" записям БД данного поля можно отслеживать историю изменения поля или свойства сущности.

Views работает с ревизиями,также на drupal.org есть несколько модулей для работы с ревизиями.

Аватар пользователя molp molp 11 января 2016 в 21:38

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

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

Аватар пользователя Orion76 Orion76 11 января 2016 в 22:18

molp wrote:

о установке равносторонней связи (к примеру "оппоненты") между группами.

По-моему Relation такое может..
Как раз "именнованные"(оппоненты и т.п.) "равносторонние" связи..