. // }}} namespace Plugin\Directory; use App\Core\Event; use App\Core\Modules\Plugin; use App\Core\Router; use App\Util\Common; use App\Util\Exception\RedirectException; use App\Util\Exception\ServerException; use App\Util\Formatting; use Component\Group\Controller as ComponentGroupController; use EventResult; use Symfony\Component\HttpFoundation\Request; class Directory extends Plugin { /** * Map Directory routes to its corresponding Controllers * * @return bool */ public function onAddRoute(Router $r): EventResult { $r->connect('directory_people', '/directory/people', [Controller\Directory::class, 'people']); $r->connect('directory_groups', '/directory/groups', [Controller\Directory::class, 'groups']); return Event::next; } /** * Add Links to main navigation card * * @param array $res out menu items * * @return bool hook value; true means continue processing, false means stop */ public function onAddMainNavigationItem(array $vars, array &$res): EventResult { $res[] = ['title' => 'People', 'path' => Router::url($path_id = 'directory_people', []), 'path_id' => $path_id]; $res[] = ['title' => 'Groups', 'path' => Router::url($path_id = 'directory_groups', []), 'path_id' => $path_id]; return Event::next; } /** * Prepend various widgets to Actors Collection template * * @param array $elements array of widgets to be prepended * * @throws RedirectException * @throws ServerException * * @return bool EventHook */ public function onPrependActorsCollection(Request $request, array &$elements): EventResult { if (\is_null($actor = Common::actor())) { return Event::next; } if ($request->get('_route') === 'directory_groups') { $elements[] = Formatting::twigRenderFile('cards/group/create_widget.html.twig', context: [ 'create_form' => ComponentGroupController\Group::getGroupCreateForm($request, $actor)->createView(), ]); } return Event::next; } }