Elgg  Version 6.3
Title.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Elgg\Menus;
4 
6 
13 class Title {
14 
22  public static function registerAvatarEdit(\Elgg\Event $event) {
23  $user = $event->getEntityParam();
24  if (!$user instanceof \ElggUser || !$user->canEdit()) {
25  return;
26  }
27 
28  /* @var $return MenuItems */
29  $return = $event->getValue();
30 
31  $return[] = \ElggMenuItem::factory([
32  'name' => 'avatar:edit',
33  'icon' => 'image',
34  'text' => elgg_echo('avatar:edit'),
35  'href' => elgg_generate_entity_url($user, 'edit', 'avatar'),
36  'link_class' => ['elgg-button', 'elgg-button-action'],
37  ]);
38 
39  return $return;
40  }
41 
49  public static function registerEntityToTitle(\Elgg\Event $event) {
50  $entity = $event->getEntityParam();
51  if (!$entity instanceof \ElggEntity) {
52  return;
53  }
54 
55  $return = $event->getValue();
56  if (!$return instanceof MenuItems) {
57  return;
58  }
59 
60  $entity_menu = _elgg_services()->menus->getUnpreparedMenu('entity', [
61  'entity' => $entity,
62  ]);
63 
64  /* @var $menu_item \ElggmenuItem */
65  foreach ($entity_menu->getItems() as $menu_item) {
66  if ($return->has($menu_item->getName())) {
67  if ($menu_item->getName() === 'edit') {
68  // move edit always to z-last location
69  $return->get('edit')->setSection('z-last');
70  }
71 
72  continue;
73  }
74 
75  switch ($menu_item->getName()) {
76  case 'edit':
77  $menu_item->addLinkClass('elgg-button');
78  $menu_item->addLinkClass('elgg-button-action');
79 
80  $menu_item->setSection('z-last');
81  break;
82  default:
83  if ($menu_item->getSection() === 'default') {
84  $menu_item->setParentName('title-menu-toggle');
85  $menu_item->setSection('z-last');
86  } else {
87  $menu_item->addLinkClass('elgg-button');
88  $menu_item->addLinkClass('elgg-button-action');
89  }
90  break;
91  }
92 
93  $return->add($menu_item);
94  }
95 
96  $return->add(\ElggMenuItem::factory([
97  'name' => 'title-menu-toggle',
98  'icon' => 'ellipsis-v',
99  'href' => false,
100  'text' => '',
101  'title' => elgg_echo('more'),
102  'child_menu' => [
103  'display' => 'dropdown',
104  'data-position' => json_encode([
105  'at' => 'right bottom',
106  'my' => 'right top',
107  'collision' => 'fit fit',
108  ]),
109  'class' => "elgg-{$event->getParam('name')}-dropdown-menu",
110  ],
111  'show_with_empty_children' => false,
112  'link_class' => [
113  'elgg-button',
114  'elgg-button-action',
115  ],
116  'priority' => 999,
117  'section' => 'z-last',
118  ]));
119 
120  return $return;
121  }
122 
130  public static function registerSubscribable(\Elgg\Event $event): ?MenuItems {
132  if (!$user instanceof \ElggUser) {
133  return null;
134  }
135 
136  $entity = $event->getEntityParam();
137  if (!$entity instanceof \ElggEntity || !$entity->hasCapability('subscribable')) {
138  return null;
139  }
140 
141  $result = $event->getValue();
142  if (!$result instanceof MenuItems) {
143  return null;
144  }
145 
146  $can_subscribe = !$entity->hasSubscriptions() || $entity->hasMutedNotifications();
147 
148  // subscribe
149  $subscribe_options = [
150  'name' => 'entity_subscribe',
151  'icon' => 'bell',
152  'text' => elgg_echo('entity:subscribe'),
153  'href' => false,
154  'item_class' => $can_subscribe ? '' : 'hidden',
155  'link_class' => [
156  'elgg-button',
157  'elgg-button-action',
158  ],
159  ];
160 
161  // check if it makes sense to enable the subscribe button
162  $has_preferences = !empty($user->getNotificationSettings('default', true));
163  if ($has_preferences) {
164  $subscribe_options['href'] = elgg_generate_action_url('entity/subscribe', [
165  'guid' => $entity->guid,
166  ]);
167  $subscribe_options['data-toggle'] = 'entity_mute';
168  } else {
169  $subscribe_options['link_class'][] = 'elgg-state-disabled';
170  $subscribe_options['title'] = elgg_echo('entity:subscribe:disabled');
171  }
172 
173  $result[] = \ElggMenuItem::factory($subscribe_options);
174 
175  // mute
177  'name' => 'entity_mute',
178  'icon' => 'bell-slash',
179  'text' => elgg_echo('entity:mute'),
180  'href' => elgg_generate_action_url('entity/mute', [
181  'guid' => $entity->guid,
182  ]),
183  'item_class' => $can_subscribe ? 'hidden' : '',
184  'link_class' => [
185  'elgg-button',
186  'elgg-button-action',
187  ],
188  'data-toggle' => 'entity_subscribe',
189  ]);
190 
191  return $result;
192  }
193 }
$entity
Definition: reset.php:8
$user
Definition: ban.php:7
static factory(array $options)
Create an ElggMenuItem from an associative array.
Models an event passed to event handlers.
Definition: Event.php:11
A collection of menu items.
Definition: MenuItems.php:10
Register menu items to the title menu.
Definition: Title.php:13
static registerAvatarEdit(\Elgg\Event $event)
Add a link to the avatar edit page.
Definition: Title.php:22
static registerSubscribable(\Elgg\Event $event)
Register (un)subscribe menu items to the title menu.
Definition: Title.php:130
static registerEntityToTitle(\Elgg\Event $event)
Move entity menu items to the title menu.
Definition: Title.php:49
_elgg_services()
Get the global service provider.
Definition: elgglib.php:337
elgg_echo(string $message_key, array $args=[], string $language='')
Elgg language module Functions to manage language and translations.
Definition: languages.php:17
elgg_generate_entity_url(ElggEntity $entity, string $resource='view', ?string $subresource=null, array $parameters=[])
Generate entity URL from a named route.
elgg_generate_action_url(string $action, array $query=[], bool $add_csrf_tokens=true)
Generate an action URL.
elgg_get_logged_in_user_entity()
Return the current logged in user, or null if no user is logged in.
Definition: sessions.php:24