Elgg  Version 6.2
ElggGroup.php
Go to the documentation of this file.
1 <?php
2 
4 use Elgg\Traits\Entity\PluginSettings;
5 
14 class ElggGroup extends \ElggEntity {
15 
16  const CONTENT_ACCESS_MODE_UNRESTRICTED = 'unrestricted';
17  const CONTENT_ACCESS_MODE_MEMBERS_ONLY = 'members_only';
18 
19  use PluginSettings;
20 
24  protected function initializeAttributes() {
25  parent::initializeAttributes();
26 
27  $this->attributes['type'] = 'group';
28  $this->attributes['subtype'] = 'group';
29  }
30 
41  public function getMembers(array $options = []) {
42  $options['relationship'] = 'member';
43  $options['relationship_guid'] = $this->getGUID();
44  $options['inverse_relationship'] = true;
45  $options['type'] = 'user';
46 
48  }
49 
55  public function isPublicMembership(): bool {
56  return ($this->membership === ACCESS_PUBLIC);
57  }
58 
65  public function getContentAccessMode(): string {
66  $mode = $this->content_access_mode;
67 
68  if (!isset($mode)) {
69  if ($this->isPublicMembership()) {
70  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
71  } else {
72  $mode = self::CONTENT_ACCESS_MODE_MEMBERS_ONLY;
73  }
74  }
75 
76  // only support two modes for now
77  if ($mode === self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
78  return $mode;
79  }
80 
81  return self::CONTENT_ACCESS_MODE_UNRESTRICTED;
82  }
83 
92  public function setContentAccessMode(string $mode): void {
93  if (!$mode && $this->content_access_mode) {
94  return;
95  }
96 
97  // only support two modes for now
98  if ($mode !== self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
99  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
100  }
101 
102  $this->content_access_mode = $mode;
103  }
104 
112  public function isMember(?\ElggUser $user = null): bool {
113  if ($user === null) {
114  $user = _elgg_services()->session_manager->getLoggedInUser();
115  }
116 
117  if (!$user instanceof \ElggUser) {
118  return false;
119  }
120 
121  return $user->hasRelationship($this->guid, 'member');
122  }
123 
132  public function join(\ElggUser $user, array $params = []): bool {
133  if (!$user->addRelationship($this->guid, 'member')) {
134  return false;
135  }
136 
137  $params['group'] = $this;
138  $params['user'] = $user;
139 
140  _elgg_services()->events->trigger('join', 'group', $params);
141 
142  return true;
143  }
144 
152  public function leave(\ElggUser $user): bool {
153  // event needs to be triggered while user is still member of group to have access to group acl
154  $params = [
155  'group' => $this,
156  'user' => $user,
157  ];
158  _elgg_services()->events->trigger('leave', 'group', $params);
159 
160  return $user->removeRelationship($this->guid, 'member');
161  }
162 
166  protected function prepareObject(\Elgg\Export\Entity $object) {
167  $object = parent::prepareObject($object);
168  $object->name = $this->getDisplayName();
169  $object->description = $this->description;
170  unset($object->read_access);
171  return $object;
172  }
173 
182  public function isToolEnabled(string $name): bool {
183  if (empty($name)) {
184  return false;
185  }
186 
187  $tool = $this->getTool($name);
188  if (!$tool instanceof Tool) {
189  return false;
190  }
191 
192  $md_name = $tool->mapMetadataName();
193  $setting = $this->$md_name;
194 
195  if (!isset($setting)) {
196  return $tool->isEnabledByDefault();
197  }
198 
199  return $setting == 'yes';
200  }
201 
210  public function enableTool(string $name): bool {
211  $tool = $this->getTool($name);
212  if (!$tool instanceof Tool) {
213  return false;
214  }
215 
216  $md_name = $tool->mapMetadataName();
217  $md_value = $tool->mapMetadataValue('yes');
218 
219  $this->$md_name = $md_value;
220 
221  return true;
222  }
223 
232  public function disableTool(string $name): bool {
233  $tool = $this->getTool($name);
234  if (!$tool instanceof Tool) {
235  return false;
236  }
237 
238  $md_name = $tool->mapMetadataName();
239  $md_value = $tool->mapMetadataValue('no');
240 
241  $this->$md_name = $md_value;
242 
243  return true;
244  }
245 
253  protected function getTool(string $name): ?Tool {
254  return _elgg_services()->group_tools->group($this)->get($name);
255  }
256 
265  public function canAccessContent(?\ElggUser $user = null): bool {
266  if (!isset($user)) {
267  $user = _elgg_services()->session_manager->getLoggedInUser();
268  }
269 
270  if ($this->getContentAccessMode() == self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
271  if (!$user) {
272  return false;
273  }
274 
275  return $this->isMember($user) || $user->isAdmin();
276  }
277 
278  return true;
279  }
280 }
$mode
Configure site maintenance mode.
if(! $user||! $user->canDelete()) $name
Definition: delete.php:22
$params
Saves global plugin settings.
Definition: save.php:13
return[ 'admin/delete_admin_notices'=>['access'=> 'admin'], 'admin/menu/save'=>['access'=> 'admin'], 'admin/plugins/activate'=>['access'=> 'admin'], 'admin/plugins/activate_all'=>['access'=> 'admin'], 'admin/plugins/deactivate'=>['access'=> 'admin'], 'admin/plugins/deactivate_all'=>['access'=> 'admin'], 'admin/plugins/set_priority'=>['access'=> 'admin'], 'admin/security/security_txt'=>['access'=> 'admin'], 'admin/security/settings'=>['access'=> 'admin'], 'admin/security/regenerate_site_secret'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['access'=> 'admin'], 'admin/site/flush_cache'=>['access'=> 'admin'], 'admin/site/icons'=>['access'=> 'admin'], 'admin/site/set_maintenance_mode'=>['access'=> 'admin'], 'admin/site/set_robots'=>['access'=> 'admin'], 'admin/site/theme'=>['access'=> 'admin'], 'admin/site/unlock_upgrade'=>['access'=> 'admin'], 'admin/site/settings'=>['access'=> 'admin'], 'admin/upgrade'=>['access'=> 'admin'], 'admin/upgrade/reset'=>['access'=> 'admin'], 'admin/user/ban'=>['access'=> 'admin'], 'admin/user/bulk/ban'=>['access'=> 'admin'], 'admin/user/bulk/delete'=>['access'=> 'admin'], 'admin/user/bulk/unban'=>['access'=> 'admin'], 'admin/user/bulk/validate'=>['access'=> 'admin'], 'admin/user/change_email'=>['access'=> 'admin'], 'admin/user/delete'=>['access'=> 'admin'], 'admin/user/login_as'=>['access'=> 'admin'], 'admin/user/logout_as'=>[], 'admin/user/makeadmin'=>['access'=> 'admin'], 'admin/user/resetpassword'=>['access'=> 'admin'], 'admin/user/removeadmin'=>['access'=> 'admin'], 'admin/user/unban'=>['access'=> 'admin'], 'admin/user/validate'=>['access'=> 'admin'], 'annotation/delete'=>[], 'avatar/upload'=>[], 'comment/save'=>[], 'diagnostics/download'=>['access'=> 'admin'], 'entity/chooserestoredestination'=>[], 'entity/delete'=>[], 'entity/mute'=>[], 'entity/restore'=>[], 'entity/subscribe'=>[], 'entity/trash'=>[], 'entity/unmute'=>[], 'entity/unsubscribe'=>[], 'login'=>['access'=> 'logged_out'], 'logout'=>[], 'notifications/mute'=>['access'=> 'public'], 'plugins/settings/remove'=>['access'=> 'admin'], 'plugins/settings/save'=>['access'=> 'admin'], 'plugins/usersettings/save'=>[], 'register'=>['access'=> 'logged_out', 'middleware'=>[\Elgg\Router\Middleware\RegistrationAllowedGatekeeper::class,],], 'river/delete'=>[], 'settings/notifications'=>[], 'settings/notifications/subscriptions'=>[], 'user/changepassword'=>['access'=> 'public'], 'user/requestnewpassword'=>['access'=> 'public'], 'useradd'=>['access'=> 'admin'], 'usersettings/save'=>[], 'widgets/add'=>[], 'widgets/delete'=>[], 'widgets/move'=>[], 'widgets/save'=>[],]
Definition: actions.php:73
$user
Definition: ban.php:7
getGUID()
Returns the guid.
Definition: ElggEntity.php:469
isPublicMembership()
Returns whether the current group has open membership or not.
Definition: ElggGroup.php:55
canAccessContent(?\ElggUser $user=null)
Check if current user can access group content based on his/her membership status and group's content...
Definition: ElggGroup.php:265
prepareObject(\Elgg\Export\Entity $object)
{Prepare an object copy for toObject()Object representation of the entity\Elgg\Export\Entity}
Definition: ElggGroup.php:166
initializeAttributes()
{Initialize the attributes array.This is vital to distinguish between metadata and base parameters....
Definition: ElggGroup.php:24
enableTool(string $name)
Enables a tool option.
Definition: ElggGroup.php:210
const CONTENT_ACCESS_MODE_MEMBERS_ONLY
Definition: ElggGroup.php:17
isMember(?\ElggUser $user=null)
Is the given user a member of this group?
Definition: ElggGroup.php:112
leave(\ElggUser $user)
Remove a user from the group.
Definition: ElggGroup.php:152
const CONTENT_ACCESS_MODE_UNRESTRICTED
Definition: ElggGroup.php:16
join(\ElggUser $user, array $params=[])
Join a user to this group.
Definition: ElggGroup.php:132
disableTool(string $name)
Disables a tool option.
Definition: ElggGroup.php:232
getContentAccessMode()
Return the content access mode.
Definition: ElggGroup.php:65
getMembers(array $options=[])
Get an array of group members.
Definition: ElggGroup.php:41
isToolEnabled(string $name)
Checks if a tool option is enabled.
Definition: ElggGroup.php:182
setContentAccessMode(string $mode)
Set the content access mode.
Definition: ElggGroup.php:92
getTool(string $name)
Returns the registered tool configuration.
Definition: ElggGroup.php:253
const ACCESS_PUBLIC
Definition: constants.php:12
if($who_can_change_language==='nobody') elseif($who_can_change_language==='admin_only' &&!elgg_is_admin_logged_in()) $options
Definition: language.php:20
if($email instanceof \Elgg\Email) $object
Definition: body.php:24
_elgg_services()
Get the global service provider.
Definition: elgglib.php:353
elgg_get_entities(array $options=[])
Fetches/counts entities or performs a calculation on their properties.
Definition: entities.php:507
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.
Definition: robots.php:10
$description
Definition: record.php:15