Elgg  Version 4.3
ElggGroup.php
Go to the documentation of this file.
1 <?php
2 
5 
13 class ElggGroup extends \ElggEntity {
14 
15  const CONTENT_ACCESS_MODE_UNRESTRICTED = 'unrestricted';
16  const CONTENT_ACCESS_MODE_MEMBERS_ONLY = 'members_only';
17 
18  use PluginSettings;
19 
23  protected function initializeAttributes() {
24  parent::initializeAttributes();
25  $this->attributes['subtype'] = 'group';
26  }
27 
31  public function getType() {
32  return 'group';
33  }
34 
45  public function getMembers(array $options = []) {
46  $options['relationship'] = 'member';
47  $options['relationship_guid'] = $this->getGUID();
48  $options['inverse_relationship'] = true;
49  $options['type'] = 'user';
50 
52  }
53 
59  public function isPublicMembership() {
60  return ($this->membership == ACCESS_PUBLIC);
61  }
62 
69  public function getContentAccessMode() {
70  $mode = $this->content_access_mode;
71 
72  if (!isset($mode)) {
73  if ($this->isPublicMembership()) {
74  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
75  } else {
76  $mode = self::CONTENT_ACCESS_MODE_MEMBERS_ONLY;
77  }
78  }
79 
80  // only support two modes for now
81  if ($mode === self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
82  return $mode;
83  }
84  return self::CONTENT_ACCESS_MODE_UNRESTRICTED;
85  }
86 
95  public function setContentAccessMode($mode) {
96  if (!$mode && $this->content_access_mode) {
97  return;
98  }
99 
100  // only support two modes for now
101  if ($mode !== self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
102  $mode = self::CONTENT_ACCESS_MODE_UNRESTRICTED;
103  }
104 
105  $this->content_access_mode = $mode;
106  }
107 
115  public function isMember(\ElggUser $user = null) {
116  if ($user === null) {
117  $user = _elgg_services()->session->getLoggedInUser();
118  }
119  if (!$user instanceof \ElggUser) {
120  return false;
121  }
122 
123  $result = $user->hasRelationship($this->guid, 'member');
124 
125  $params = [
126  'user' => $user,
127  'group' => $this,
128  ];
129  return _elgg_services()->hooks->triggerDeprecated('is_member', 'group', $params, $result, "Hook 'is_member', 'group' has been deprecated. Use 'gatekeeper', 'all' hook instead.", '4.3');
130  }
131 
140  public function join(\ElggUser $user, $params = []) {
141  if (!$user->addRelationship($this->guid, 'member')) {
142  return false;
143  }
144 
145  $event_params = [
146  'group' => $this,
147  'user' => $user,
148  ];
149 
150  if (is_array($params)) {
151  $event_params = array_merge($params, $event_params);
152  }
153 
154  _elgg_services()->events->trigger('join', 'group', $event_params);
155 
156  return true;
157  }
158 
166  public function leave(\ElggUser $user) {
167  // event needs to be triggered while user is still member of group to have access to group acl
168  $params = [
169  'group' => $this,
170  'user' => $user,
171  ];
172  _elgg_services()->events->trigger('leave', 'group', $params);
173 
174  return $user->removeRelationship($this->guid, 'member');
175  }
176 
180  protected function prepareObject(\Elgg\Export\Entity $object) {
181  $object = parent::prepareObject($object);
182  $object->name = $this->getDisplayName();
183  $object->description = $this->description;
184  unset($object->read_access);
185  return $object;
186  }
187 
196  public function isToolEnabled($name) {
197  if (empty($name)) {
198  return false;
199  }
200 
201  $tool = $this->getTool($name);
202  if (!$tool instanceof Tool) {
203  return false;
204  }
205 
206  $md_name = $tool->mapMetadataName();
207  $setting = $this->$md_name;
208 
209  if (!isset($setting)) {
210  return $tool->isEnabledByDefault();
211  }
212 
213  return $setting == 'yes';
214  }
215 
224  public function enableTool($name) {
225  $tool = $this->getTool($name);
226  if (!$tool instanceof Tool) {
227  return false;
228  }
229 
230  $md_name = $tool->mapMetadataName();
231  $md_value = $tool->mapMetadataValue('yes');
232 
233  $this->$md_name = $md_value;
234 
235  return true;
236  }
237 
246  public function disableTool($name) {
247  $tool = $this->getTool($name);
248  if (!$tool instanceof Tool) {
249  return false;
250  }
251 
252  $md_name = $tool->mapMetadataName();
253  $md_value = $tool->mapMetadataValue('no');
254 
255  $this->$md_name = $md_value;
256 
257  return true;
258  }
259 
267  protected function getTool($name) {
268  return _elgg_services()->group_tools->group($this)->get($name);
269  }
270 
278  public function canAccessContent(ElggUser $user = null) {
279  if (!isset($user)) {
280  $user = _elgg_services()->session->getLoggedInUser();
281  }
282 
283  if ($this->getContentAccessMode() == self::CONTENT_ACCESS_MODE_MEMBERS_ONLY) {
284  if (!$user) {
285  return false;
286  }
287 
288  return $this->isMember($user) || $user->isAdmin();
289  }
290 
291  return true;
292  }
293 }
$params
Saves global plugin settings.
Definition: save.php:13
$mode
Configure site maintenance mode.
if(!$user||!$user->canDelete()) $name
Definition: delete.php:22
getGUID()
Returns the guid.
getTool($name)
Returns the registered tool configuration.
Definition: ElggGroup.php:267
$options
Elgg admin footer.
Definition: footer.php:6
removeRelationship($guid_two, $relationship)
Remove a relationship.
Definition: ElggEntity.php:628
join(\ElggUser $user, $params=[])
Join a user to this group.
Definition: ElggGroup.php:140
getContentAccessMode()
Return the content access mode.
Definition: ElggGroup.php:69
elgg_get_entities(array $options=[])
Fetches/counts entities or performs a calculation on their properties.
Definition: entities.php:545
const CONTENT_ACCESS_MODE_UNRESTRICTED
Definition: ElggGroup.php:15
$user
Definition: ban.php:7
prepareObject(\Elgg\Export\Entity $object)
{}
Definition: ElggGroup.php:180
getMembers(array $options=[])
Get an array of group members.
Definition: ElggGroup.php:45
$description
Definition: record.php:15
const CONTENT_ACCESS_MODE_MEMBERS_ONLY
Definition: ElggGroup.php:16
addRelationship($guid_two, $relationship)
Add a relationship between this an another entity.
Definition: ElggEntity.php:557
isPublicMembership()
Returns whether the current group has open membership or not.
Definition: ElggGroup.php:59
if($email instanceof\Elgg\Email) $object
Definition: body.php:24
leave(\ElggUser $user)
Remove a user from the group.
Definition: ElggGroup.php:166
disableTool($name)
Disables a tool option.
Definition: ElggGroup.php:246
isMember(\ElggUser $user=null)
Is the given user a member of this group?
Definition: ElggGroup.php:115
isToolEnabled($name)
Checks if a tool option is enabled.
Definition: ElggGroup.php:196
getType()
{}
Definition: ElggGroup.php:31
enableTool($name)
Enables a tool option.
Definition: ElggGroup.php:224
_elgg_services()
Get the global service provider.
Definition: elgglib.php:638
const ACCESS_PUBLIC
Definition: constants.php:14
canAccessContent(ElggUser $user=null)
Check if current user can access group content based on his/her membership status and group&#39;s content...
Definition: ElggGroup.php:278
setContentAccessMode($mode)
Set the content access mode.
Definition: ElggGroup.php:95
initializeAttributes()
{}
Definition: ElggGroup.php:23
getDisplayName()
Get the entity&#39;s display name.
Definition: ElggEntity.php:318