/mod/groups/elgg-plugin.php

https://github.com/mrclay/Elgg-leaf · PHP · 253 lines · 247 code · 5 blank · 1 comment · 0 complexity · e82f1f4ca4456d9a778143ffc78114e3 MD5 · raw file

  1. <?php
  2. use Elgg\Groups\Middleware\LimitedGroupCreation;
  3. require_once(__DIR__ . '/lib/functions.php');
  4. $membership = __DIR__ . '/actions/groups/membership/';
  5. return [
  6. 'plugin' => [
  7. 'name' => 'Groups',
  8. 'activate_on_install' => true,
  9. ],
  10. 'entities' => [
  11. [
  12. 'type' => 'group',
  13. 'subtype' => 'group',
  14. 'searchable' => true,
  15. ],
  16. ],
  17. 'actions' => [
  18. 'groups/edit' => [],
  19. 'groups/featured' => [
  20. 'access' => 'admin',
  21. ],
  22. // membership actions
  23. 'groups/invite' => [
  24. 'filename' => "{$membership}invite.php",
  25. ],
  26. 'groups/join' => [
  27. 'filename' => "{$membership}join.php",
  28. ],
  29. 'groups/leave' => [
  30. 'filename' => "{$membership}leave.php",
  31. ],
  32. 'groups/remove' => [
  33. 'filename' => "{$membership}remove.php",
  34. ],
  35. 'groups/killrequest' => [
  36. 'filename' => "{$membership}delete_request.php",
  37. ],
  38. 'groups/killinvitation' => [
  39. 'filename' => "{$membership}delete_invite.php",
  40. ],
  41. 'groups/addtogroup' => [
  42. 'filename' => "{$membership}add.php",
  43. ],
  44. ],
  45. 'routes' => [
  46. 'default:group:group' => [
  47. 'path' => '/groups',
  48. 'resource' => 'groups/all',
  49. ],
  50. 'collection:group:group:all' => [
  51. 'path' => '/groups/all',
  52. 'resource' => 'groups/all',
  53. ],
  54. 'collection:group:group:owner' => [
  55. 'path' => '/groups/owner/{username}',
  56. 'resource' => 'groups/owner',
  57. ],
  58. 'collection:group:group:member' => [
  59. 'path' => '/groups/member/{username}',
  60. 'resource' => 'groups/member',
  61. ],
  62. 'collection:group:group:invitations' => [
  63. 'path' => '/groups/invitations/{username}',
  64. 'resource' => 'groups/invitations',
  65. 'middleware' => [
  66. \Elgg\Router\Middleware\Gatekeeper::class,
  67. \Elgg\Router\Middleware\UserPageOwnerCanEditGatekeeper::class,
  68. ],
  69. ],
  70. 'collection:group:group:search' => [
  71. 'path' => '/groups/search',
  72. 'resource' => 'groups/search',
  73. ],
  74. 'collection:user:user:group_members' => [
  75. 'path' => '/groups/members/{guid}/{sort?}',
  76. 'resource' => 'groups/members',
  77. 'default' => [
  78. 'sort' => 'alpha',
  79. ],
  80. ],
  81. 'collection:user:user:group_invites' => [
  82. 'path' => '/groups/invites/{guid}',
  83. 'resource' => 'groups/invites',
  84. 'middleware' => [
  85. \Elgg\Router\Middleware\Gatekeeper::class,
  86. \Elgg\Router\Middleware\GroupPageOwnerCanEditGatekeeper::class,
  87. ],
  88. ],
  89. 'add:group:group' => [
  90. 'path' => '/groups/add/{guid}',
  91. 'resource' => 'groups/add',
  92. 'middleware' => [
  93. \Elgg\Router\Middleware\Gatekeeper::class,
  94. LimitedGroupCreation::class,
  95. ],
  96. ],
  97. 'view:group:group' => [
  98. 'path' => '/groups/profile/{guid}/{title?}',
  99. 'resource' => 'groups/profile',
  100. ],
  101. 'edit:group:group' => [
  102. 'path' => '/groups/edit/{guid}',
  103. 'resource' => 'groups/edit',
  104. 'middleware' => [
  105. \Elgg\Router\Middleware\Gatekeeper::class,
  106. ],
  107. ],
  108. 'invite:group:group' => [
  109. 'path' => '/groups/invite/{guid}',
  110. 'resource' => 'groups/invite',
  111. 'middleware' => [
  112. \Elgg\Router\Middleware\Gatekeeper::class,
  113. ],
  114. 'detect_page_owner' => true,
  115. ],
  116. 'requests:group:group' => [
  117. 'path' => '/groups/requests/{guid}',
  118. 'resource' => 'groups/requests',
  119. 'middleware' => [
  120. \Elgg\Router\Middleware\Gatekeeper::class,
  121. \Elgg\Router\Middleware\GroupPageOwnerCanEditGatekeeper::class,
  122. ],
  123. 'detect_page_owner' => true,
  124. ],
  125. 'settings:notification:groups' => [
  126. 'path' => '/settings/notifications/groups/{username}',
  127. 'resource' => 'settings/notifications/groups',
  128. 'middleware' => [
  129. \Elgg\Router\Middleware\UserPageOwnerCanEditGatekeeper::class,
  130. ],
  131. ],
  132. ],
  133. 'widgets' => [
  134. 'a_users_groups' => [
  135. 'context' => ['profile', 'dashboard'],
  136. ],
  137. ],
  138. 'view_extensions' => [
  139. 'elgg.css' => [
  140. 'groups/groups.css' => [],
  141. ],
  142. 'notifications/settings/records' => [
  143. 'notifications/settings/group_join' => [],
  144. ],
  145. ],
  146. 'events' => [
  147. 'create' => [
  148. 'group' => [
  149. 'Elgg\Groups\Group::createAccessCollection' => [],
  150. \Elgg\Notifications\CreateContentEventHandler::class => [],
  151. ],
  152. 'relationship' => [
  153. 'Elgg\Groups\Relationships::applyGroupNotificationSettings' => [],
  154. ],
  155. ],
  156. 'delete' => [
  157. 'relationship' => [
  158. 'Elgg\Groups\Relationships::removeGroupNotificationSubscriptions' => [],
  159. ],
  160. ],
  161. 'join' => [
  162. 'group' => [
  163. 'Elgg\Groups\Group::joinGroup' => [],
  164. ],
  165. ],
  166. 'leave' => [
  167. 'group' => [
  168. 'Elgg\Groups\Group::leaveGroup' => [],
  169. ],
  170. ],
  171. 'update:after' => [
  172. 'group' => [
  173. 'Elgg\Groups\Group::updateGroup' => [],
  174. ],
  175. ],
  176. ],
  177. 'hooks' => [
  178. 'access:collections:write' => [
  179. 'all' => [
  180. 'Elgg\Groups\Access::getWriteAccess' => ['priority' => 600],
  181. ],
  182. ],
  183. 'access_collection:name' => [
  184. 'access_collection' => [
  185. 'Elgg\Groups\Access::getAccessCollectionName' => [],
  186. ],
  187. ],
  188. 'default' => [
  189. 'access' => [
  190. 'Elgg\Groups\Access::getDefaultAccess' => [],
  191. 'Elgg\Groups\Access::overrideDefaultAccess' => [],
  192. ],
  193. ],
  194. 'fields' => [
  195. 'group:group' => [
  196. \Elgg\Groups\FieldsHandler::class => [],
  197. ],
  198. ],
  199. 'gatekeeper' => [
  200. 'group:group' => [
  201. 'Elgg\Groups\Access::allowProfilePage' => [],
  202. ],
  203. ],
  204. 'likes:is_likable' => [
  205. 'group:' => [
  206. 'Elgg\Values::getTrue' => [],
  207. ],
  208. ],
  209. 'register' => [
  210. 'menu:entity:group:group' => [
  211. 'Elgg\Groups\Menus\Entity::register' => [],
  212. 'Elgg\Groups\Menus\Entity::registerFeature' => [],
  213. ],
  214. 'menu:filter:groups/all' => [
  215. 'Elgg\Groups\Menus\Filter::registerGroupsAll' => [],
  216. ],
  217. 'menu:filter:settings/notifications' => [
  218. 'Elgg\Groups\Menus\Filter::registerNotificationSettings' => [],
  219. ],
  220. 'menu:groups_members' => [
  221. 'Elgg\Groups\Menus\GroupsMembers::register' => [],
  222. ],
  223. 'menu:page' => [
  224. 'Elgg\Groups\Menus\Page::register' => [],
  225. 'Elgg\Groups\Menus\Page::registerGroupProfile' => [],
  226. ],
  227. 'menu:relationship' => [
  228. 'Elgg\Groups\Menus\Relationship::registerInvitedItems' => [],
  229. 'Elgg\Groups\Menus\Relationship::registerMembershipRequestItems' => [],
  230. 'Elgg\Groups\Menus\Relationship::registerRemoveUser' => [],
  231. ],
  232. 'menu:site' => [
  233. 'Elgg\Groups\Menus\Site::register' => [],
  234. ],
  235. 'menu:title' => [
  236. 'Elgg\Groups\Menus\Title::register' => [],
  237. ],
  238. 'menu:topbar' => [
  239. 'Elgg\Groups\Menus\Topbar::register' => [],
  240. ],
  241. ],
  242. 'search:fields' => [
  243. 'group' => [
  244. 'Elgg\Search\GroupSearchProfileFieldsHandler' => [],
  245. ],
  246. ],
  247. ],
  248. ];