Elgg  Version 7.1
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  const MEMBERSHIP_CLOSED = 0;
21  const MEMBERSHIP_PUBLIC = 2;
22 
23  use PluginSettings;
24 
28  protected function initializeAttributes() {
29  parent::initializeAttributes();
30 
31  $this->attributes['type'] = 'group';
32  $this->attributes['subtype'] = 'group';
33  $this->attributes['access_id'] = ACCESS_PUBLIC;
34  }
35 
46  public function getMembers(array $options = []) {
47  $options['relationship'] = 'member';
48  $options['relationship_guid'] = $this->getGUID();
49  $options['inverse_relationship'] = true;
50  $options['type'] = 'user';
51 
53  }
54 
60  public function isPublicMembership(): bool {
61  return ($this->membership === self::MEMBERSHIP_PUBLIC);
62  }
63 
70  public function isInviteOnlyMembership(): bool {
71  return ($this->membership === self::MEMBERSHIP_INVITE_ONLY);
72  }
73 
80  public function getContentAccessMode(): string {
81  $mode = $this->content_access_mode;
82 
83  if (!isset($mode)) {
84  if ($this->isPublicMembership()) {
85  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
86  } else {
87  $mode = self::CONTENT_ACCESS_MODE_MEMBERS_ONLY;
88  }
89  }
90 
91  // only support two modes for now
92  if ($mode === self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
93  return $mode;
94  }
95 
96  return self::CONTENT_ACCESS_MODE_UNRESTRICTED;
97  }
98 
107  public function setContentAccessMode(string $mode): void {
108  if (!$mode && $this->content_access_mode) {
109  return;
110  }
111 
112  // only support two modes for now
113  if ($mode !== self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
114  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
115  }
116 
117  $this->content_access_mode = $mode;
118  }
119 
127  public function isMember(?\ElggUser $user = null): bool {
128  if ($user === null) {
129  $user = _elgg_services()->session_manager->getLoggedInUser();
130  }
131 
132  if (!$user instanceof \ElggUser) {
133  return false;
134  }
135 
136  return $user->hasRelationship($this->guid, 'member');
137  }
138 
147  public function join(\ElggUser $user, array $params = []): bool {
148  if (!$user->addRelationship($this->guid, 'member')) {
149  return false;
150  }
151 
152  $params['group'] = $this;
153  $params['user'] = $user;
154 
155  _elgg_services()->events->trigger('join', 'group', $params);
156 
157  return true;
158  }
159 
167  public function leave(\ElggUser $user): bool {
168  // event needs to be triggered while user is still member of group to have access to group acl
169  $params = [
170  'group' => $this,
171  'user' => $user,
172  ];
173  _elgg_services()->events->trigger('leave', 'group', $params);
174 
175  return $user->removeRelationship($this->guid, 'member');
176  }
177 
181  protected function prepareObject(\Elgg\Export\Entity $object) {
182  $object = parent::prepareObject($object);
183  $object->name = $this->getDisplayName();
184  $object->description = $this->description;
185  unset($object->read_access);
186  return $object;
187  }
188 
197  public function isToolEnabled(string $name): bool {
198  if (empty($name)) {
199  return false;
200  }
201 
202  $tool = $this->getTool($name);
203  if (!$tool instanceof Tool) {
204  return false;
205  }
206 
207  $md_name = $tool->mapMetadataName();
208  $setting = $this->$md_name;
209 
210  if (!isset($setting)) {
211  return $tool->isEnabledByDefault();
212  }
213 
214  return $setting == 'yes';
215  }
216 
225  public function enableTool(string $name): bool {
226  $tool = $this->getTool($name);
227  if (!$tool instanceof Tool) {
228  return false;
229  }
230 
231  $md_name = $tool->mapMetadataName();
232  $md_value = $tool->mapMetadataValue('yes');
233 
234  $this->$md_name = $md_value;
235 
236  return true;
237  }
238 
247  public function disableTool(string $name): bool {
248  $tool = $this->getTool($name);
249  if (!$tool instanceof Tool) {
250  return false;
251  }
252 
253  $md_name = $tool->mapMetadataName();
254  $md_value = $tool->mapMetadataValue('no');
255 
256  $this->$md_name = $md_value;
257 
258  return true;
259  }
260 
268  protected function getTool(string $name): ?Tool {
269  return _elgg_services()->group_tools->group($this)->get($name);
270  }
271 
280  public function canAccessContent(?\ElggUser $user = null): bool {
281  if (!isset($user)) {
282  $user = _elgg_services()->session_manager->getLoggedInUser();
283  }
284 
285  if ($this->getContentAccessMode() == self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
286  if (!$user) {
287  return false;
288  }
289 
290  return $this->isMember($user) || $user->isAdmin();
291  }
292 
293  return true;
294  }
295 }
$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/clear'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['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', 'controller'=> \Elgg\Diagnostics\DownloadController::class,], '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:76
$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:60
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:280
prepareObject(\Elgg\Export\Entity $object)
{Prepare an object copy for toObject()Object representation of the entity\Elgg\Export\Entity}
Definition: ElggGroup.php:181
initializeAttributes()
{Initialize the attributes array.This is vital to distinguish between metadata and base parameters....
Definition: ElggGroup.php:28
enableTool(string $name)
Enables a tool option.
Definition: ElggGroup.php:225
const MEMBERSHIP_CLOSED
Definition: ElggGroup.php:19
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:127
leave(\ElggUser $user)
Remove a user from the group.
Definition: ElggGroup.php:167
const CONTENT_ACCESS_MODE_UNRESTRICTED
Definition: ElggGroup.php:16
join(\ElggUser $user, array $params=[])
Join a user to this group.
Definition: ElggGroup.php:147
isInviteOnlyMembership()
Returns whether the current group has an invitation only membership.
Definition: ElggGroup.php:70
disableTool(string $name)
Disables a tool option.
Definition: ElggGroup.php:247
const MEMBERSHIP_PUBLIC
Definition: ElggGroup.php:21
getContentAccessMode()
Return the content access mode.
Definition: ElggGroup.php:80
const MEMBERSHIP_INVITE_ONLY
Definition: ElggGroup.php:20
getMembers(array $options=[])
Get an array of group members.
Definition: ElggGroup.php:46
isToolEnabled(string $name)
Checks if a tool option is enabled.
Definition: ElggGroup.php:197
setContentAccessMode(string $mode)
Set the content access mode.
Definition: ElggGroup.php:107
getTool(string $name)
Returns the registered tool configuration.
Definition: ElggGroup.php:268
if(count($css_vars)< 2) $options
const ACCESS_PUBLIC
Definition: constants.php:12
if($email instanceof \Elgg\Email) $object
Definition: body.php:24
_elgg_services()
Get the global service provider.
Definition: elgglib.php:347
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