Completed
Push — Api_opt ( 47a261...24829b )
by
unknown
69:01 queued 36:29
created

group.php ➔ get_group()   C

Complexity

Conditions 11
Paths 48

Size

Total Lines 89
Code Lines 64

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 11
eloc 64
nc 48
nop 3
dl 0
loc 89
rs 5.2653
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/*
3
 * Exposes API endpoints for Group entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.group",
8
	"get_group",
9
	array(
10
		"user" => array('type' => 'string', 'required' => true),
11
		"guid" => array('type' => 'int', 'required' => true),
12
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
13
	),
14
	'Retrieves a group based on user id and group id',
15
	'POST',
16
	true,
17
	false
18
);
19
20
elgg_ws_expose_function(
21
	"get.groups",
22
	"get_groups",
23
	array(
24
		"user" => array('type' => 'string', 'required' => true),
25
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
26
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
27
		"filters" => array('type' => 'string', 'required' => false, 'default' => ""),
28
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
29
	),
30
	'Retrieves groups based on user id',
31
	'POST',
32
	true,
33
	false
34
);
35
36
elgg_ws_expose_function(
37
	"get.groupactivity",
38
	"get_group_activity",
39
	array(
40
		"user" => array('type' => 'string', 'required' => true),
41
		"guid" => array('type' => 'int', 'required' => true),
42
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
43
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
44
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en"),
45
		"api_version" => array('type' => 'float', 'required' => false, 'default' => 0)
46
	),
47
	'Retrieves a group\'s activity based on user id and group id',
48
	'POST',
49
	true,
50
	false
51
);
52
53
elgg_ws_expose_function(
54
	"get.groupblogs",
55
	"get_group_blogs",
56
	array(
57
		"user" => array('type' => 'string', 'required' => true),
58
		"guid" => array('type' => 'int', 'required' => true),
59
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
60
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
61
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
62
	),
63
	'Retrieves a group\'s blogs based on user id and group id',
64
	'POST',
65
	true,
66
	false
67
);
68
69
elgg_ws_expose_function(
70
	"get.groupdiscussions",
71
	"get_group_discussions",
72
	array(
73
		"user" => array('type' => 'string', 'required' => true),
74
		"guid" => array('type' => 'int', 'required' => true),
75
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
76
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
77
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
78
	),
79
	'Retrieves a group\'s discussions based on user id and group id',
80
	'POST',
81
	true,
82
	false
83
);
84
85
elgg_ws_expose_function(
86
	"get.groupdocs",
87
	"get_group_docs",
88
	array(
89
		"user" => array('type' => 'string', 'required' => true),
90
		"guid" => array('type' => 'int', 'required' => true),
91
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
92
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
93
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
94
	),
95
	'Retrieves a group\'s docs based on user id and group id',
96
	'POST',
97
	true,
98
	false
99
);
100
101
elgg_ws_expose_function(
102
	"get.groupevents",
103
	"get_group_events",
104
	array(
105
		"user" => array('type' => 'string', 'required' => true),
106
		"guid" => array('type' => 'int', 'required' => true),
107
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
108
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
109
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
110
	),
111
	'Retrieves a group\'s events based on user id and group id',
112
	'POST',
113
	true,
114
	false
115
);
116
117
elgg_ws_expose_function(
118
	"get.groupfiles",
119
	"get_group_files",
120
	array(
121
		"user" => array('type' => 'string', 'required' => true),
122
		"guid" => array('type' => 'int', 'required' => true),
123
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
124
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
125
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
126
	),
127
	'Retrieves a group\'s files based on user id and group id',
128
	'POST',
129
	true,
130
	false
131
);
132
133
elgg_ws_expose_function(
134
	"group.members",
135
	"get_groups_members",
136
	array(
137
		"user" => array('type' => 'string', 'required' => true),
138
		"guid" => array('type' => 'int', 'required' => true),
139
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
140
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
141
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
142
	),
143
	'Retrieves a group\'s members based on user id and group id',
144
	'POST',
145
	true,
146
	false
147
);
148
149
elgg_ws_expose_function(
150
	"group.join",
151
	"join_group_function",
152
	array(
153
		"user" => array('type' => 'string', 'required' => true),
154
		"guid" => array('type' => 'int', 'required' => true),
155
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
156
	),
157
	'Joins a group based on user id and group id',
158
	'POST',
159
	true,
160
	false
161
);
162
163
elgg_ws_expose_function(
164
	"group.leave",
165
	"leave_group_function",
166
	array(
167
		"user" => array('type' => 'string', 'required' => true),
168
		"guid" => array('type' => 'int', 'required' => true),
169
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
170
	),
171
	'Leaves a group based on user id and group id',
172
	'POST',
173
	true,
174
	false
175
);
176
177
elgg_ws_expose_function(
178
	"group.invite",
179
	"invite_group_member",
180
	array(
181
		"profileemail" => array('type' => 'string', 'required' => true),
182
		"user" => array('type' => 'string', 'required' => true),
183
		"guid" => array('type' => 'int', 'required' => true),
184
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
185
	),
186
	'Invites a member to a group based on user id and group id',
187
	'POST',
188
	true,
189
	false
190
);
191
192
elgg_ws_expose_function(
193
	"group.invitemembers",
194
	"invite_group_members",
195
	array(
196
		"profileemail" => array('type' => 'string', 'required' => true),
197
		"user" => array('type' => 'string', 'required' => true),
198
		"guid" => array('type' => 'int', 'required' => true),
199
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
200
	),
201
	'Invites members to a group based on user ids and group id',
202
	'POST',
203
	true,
204
	false
205
);
206
207
elgg_ws_expose_function(
208
	"group.decline",
209
	"decline_group_invite",
210
	array(
211
		"user" => array('type' => 'string', 'required' => true),
212
		"guid" => array('type' => 'int', 'required' => true),
213
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
214
	),
215
	'Declines a group invite to a group based on user id and group id',
216
	'POST',
217
	true,
218
	false
219
);
220
221
function get_group($user, $guid, $lang)
222
{
223
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
224
	if (!$user_entity) {
225
		return "User was not found. Please try a different GUID, username, or email address";
226
	}
227
	if (!$user_entity instanceof ElggUser) {
228
		return "Invalid user. Please try a different GUID, username, or email address";
229
	}
230
231
	$ia = elgg_set_ignore_access(true);
232
	$entity = get_entity($guid);
233
	elgg_set_ignore_access($ia);
234
235
	if (!$entity) {
236
		return "Group was not found. Please try a different GUID";
237
	}
238
	if (!$entity instanceof ElggGroup) {
239
		return "Invalid group. Please try a different GUID";
240
	}
241
242
	if (!elgg_is_logged_in()) {
243
		login($user_entity);
244
	}
245
246
	$groups = elgg_list_entities(array(
247
		'type' => 'group',
248
		'guid' => $guid
249
	));
250
	$group = json_decode($groups)[0];
251
252
	$group->name = gc_explode_translation($group->name, $lang);
253
254
	$likes = elgg_get_annotations(array(
255
		'guid' => $group->guid,
256
		'annotation_name' => 'likes'
257
	));
258
	$group->likes = count($likes);
259
260
	$liked = elgg_get_annotations(array(
261
		'guid' => $group->guid,
262
		'annotation_owner_guid' => $user_entity->guid,
263
		'annotation_name' => 'likes'
264
	));
265
	$group->liked = count($liked) > 0;
266
267
	$groupObj = get_entity($group->guid);
268
	$group->public = $groupObj->isPublicMembership();
269
	$group->member = $groupObj->isMember($user_entity);
270
	if (!$group->public && !$group->member){
271
		$group->access = false;
272
	} else {
273
		$group->access = true;
274
	}
275
	//Group 'Tools' that are enabled or not
276
	//Returning info hide anything not activitated
277
	$group->enabled = new stdClass();
278
	$group->enabled->activity = $groupObj->activity_enable;
279
	$group->enabled->bookmarks = $groupObj->bookmarks_enable;
280
	$group->enabled->file_tools_structure_management = $groupObj->file_tools_structure_management_enable;
281
	$group->enabled->etherpad = $groupObj->etherpad_enable;
282
	$group->enabled->blog = $groupObj->blog_enable;
283
	$group->enabled->forum = $groupObj->forum_enable; //discussions
284
	$group->enabled->event_calendar = $groupObj->event_calendar_enable;
285
	$group->enabled->file = $groupObj->file_enable;
286
	$group->enabled->photos = $groupObj->photos_enable; //image albums
287
	$group->enabled->tp_images = $groupObj->tp_images_enable; // group images
288
	$group->enabled->pages = $groupObj->pages_enable;
289
	$group->enabled->ideas = $groupObj->ideas_enable;
290
	$group->enabled->widget_manager = $groupObj->widget_manager_enable;
291
	$group->enabled->polls = $groupObj->polls_enable;
292
	$group->enabled->related_groups = $groupObj->related_groups_enable;
293
	$group->enabled->subgroups = $groupObj->subgroups_enable;
294
	$group->enabled->subgroups_members_create = $groupObj->subgroups_members_create_enable;
295
	// TODO - admin options / whats viewable to non-members, currently access variable can be used to block everything if they dont have access
296
297
	$group->owner = ($groupObj->getOwnerEntity() == $user_entity);
298
	$group->iconURL = $groupObj->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
299
	$group->count = $groupObj->getMembers(array('count' => true));
300
	$group->tags = $groupObj->interests;
301
	$group->userDetails = get_user_block($group->owner_guid, $lang);
302
303
	if ($group->access){
304
		$group->description = gc_explode_translation($group->description, $lang);
305
	} else {
306
		$group->description = elgg_echo("groups:access:private", $lang);
307
	}
308
	return $group;
309
}
310
311
function get_groups($user, $limit, $offset, $filters, $lang)
312
{
313
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
314
	if (!$user_entity) {
315
		return "User was not found. Please try a different GUID, username, or email address";
316
	}
317
	if (!$user_entity instanceof ElggUser) {
318
		return "Invalid user. Please try a different GUID, username, or email address";
319
	}
320
321
	if (!elgg_is_logged_in()) {
322
		login($user_entity);
323
	}
324
325
	$filter_data = json_decode($filters);
326
	if (!empty($filter_data)) {
327
		$params = array(
328
			'type' => 'group',
329
			'limit' => $limit,
330
			'offset' => $offset
331
		);
332
333
		if ($filter_data->mine) {
334
			$params['relationship'] = 'member';
335
			$params['relationship_guid'] = $user_entity->guid;
336
			$params['inverse_relationship'] = false;
337
		}
338
339 View Code Duplication
		if ($filter_data->name) {
340
			$db_prefix = elgg_get_config('dbprefix');
341
			$params['joins'] = array("JOIN {$db_prefix}groups_entity ge ON e.guid = ge.guid");
342
			$params['wheres'] = array("(ge.name LIKE '%" . $filter_data->name . "%' OR ge.description LIKE '%" . $filter_data->name . "%')");
343
		}
344
345
		if ($filter_data->mine) {
346
			$all_groups = elgg_list_entities_from_relationship($params);
347
		} else {
348
			$all_groups = elgg_list_entities_from_metadata($params);
349
		}
350
	} else {
351
		$all_groups = elgg_list_entities(array(
352
			'type' => 'group',
353
			'limit' => $limit,
354
			'offset' => $offset
355
		));
356
	}
357
358
	$groups = json_decode($all_groups);
359
360
	foreach ($groups as $group) {
361
		$group->name = gc_explode_translation($group->name, $lang);
362
363
		$likes = elgg_get_annotations(array(
364
			'guid' => $group->guid,
365
			'annotation_name' => 'likes'
366
		));
367
		$group->likes = count($likes);
368
369
		$liked = elgg_get_annotations(array(
370
			'guid' => $group->guid,
371
			'annotation_owner_guid' => $user_entity->guid,
372
			'annotation_name' => 'likes'
373
		));
374
		$group->liked = count($liked) > 0;
375
376
		$groupObj = get_entity($group->guid);
377
		$group->member = $groupObj->isMember($user_entity);
378
		$group->owner = ($groupObj->getOwnerEntity() == $user_entity);
379
		$group->iconURL = $groupObj->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
380
		$group->count = $groupObj->getMembers(array('count' => true));
381
382
		$group->comments = get_entity_comments($group->guid);
383
		$group->tags = $groupObj->interests;
384
385
		$group->userDetails = get_user_block($group->owner_guid, $lang);
386
		$group->description = gc_explode_translation($group->description, $lang);
387
	}
388
389
	return $groups;
390
}
391
392
function get_group_activity($user, $guid, $limit, $offset, $lang, $api_version)
393
{
394
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
395
	if (!$user_entity) {
396
		return "User was not found. Please try a different GUID, username, or email address";
397
	}
398
	if (!$user_entity instanceof ElggUser) {
399
		return "Invalid user. Please try a different GUID, username, or email address";
400
	}
401
	if (!elgg_is_logged_in()) {
402
		login($user_entity);
403
	}
404
405
	$group = get_entity($guid);
406
	if (!$group) {
407
		return "Group was not found. Please try a different GUID";
408
	}
409
	if (!$group instanceof ElggGroup) {
410
		return "Invalid group. Please try a different GUID";
411
	}
412
413
	$all_activity = elgg_list_group_river(array(
414
		'limit' => $limit,
415
		'offset' => $offset,
416
		'wheres1' => array(
417
			"oe.container_guid = $group->guid",
418
		),
419
		'wheres2' => array(
420
			"te.container_guid = $group->guid",
421
		),
422
	));
423
424
	$activity = json_decode($all_activity);
425
	foreach ($activity as $event) {
426
		$subject = get_user($event->subject_guid);
427
		$object = get_entity($event->object_guid);
428
		$event->userDetails = get_user_block($event->subject_guid, $lang);
429
430
		if ($object instanceof ElggUser) {
431
			$event->object = get_user_block($event->object_guid, $lang);
432
			$event->object['type'] = 'user';
433
		} elseif ($object instanceof ElggWire) {
434
			$event->object['type'] = 'wire';
435
			$event->object['wire'] = wire_filter($object->description);
436
437
			$thread_id = $object->wire_thread;
438
			$reshare = $object->getEntitiesFromRelationship(array("relationship" => "reshare", "limit" => 1))[0];
439
440
			$url = "";
441
			if (!empty($reshare)) {
442
				$url = $reshare->getURL();
443
			}
444
445
			$text = "";
446
			if (!empty($reshare->title)) {
447
				$text = $reshare->title;
448
			} elseif (!empty($reshare->name)) {
449
				$text = $reshare->name;
450
			} elseif (!empty($reshare->description)) {
451
				$text = elgg_get_excerpt($reshare->description, 140);
452
			}
453
454
			$event->shareURL = $url;
455
			$event->shareText = gc_explode_translation($text, $lang);
456
		} elseif ($object instanceof ElggGroup) {
457
			$event->object['type'] = 'group';
458
			$event->object['name'] = gc_explode_translation($object->name, $lang);
459
		} elseif ($object instanceof ElggDiscussionReply) {
460
			if ($api_version == 0.9){
461
				$event->object['type'] = 'discussion-reply';
462
				$original_discussion = get_entity($object->container_guid);
463
				$event->object['name'] = gc_explode_translation($original_discussion->title, $lang);
464
			} else {
465
				$event->object['type'] = 'discussion-reply';
466
				$original_discussion = get_entity($object->container_guid);
467
				$event->object['name'] = $original_discussion->title;
468
				$event->object['description'] = $object->description;
469
			}
470
		} elseif ($object instanceof ElggFile) {
471
			$event->object['type'] = 'file';
472
			if ($api_version == 0.9){
473
				$event->object['name'] = gc_explode_translation($object->title, $lang);
474
			} else {
475
				$event->object['name'] = $object->title;
476
				$event->object['description'] = $object->description;
477
			}
478
		} elseif ($object instanceof ElggObject) {
479
			$event->object['type'] = 'discussion-add';
480
481
			if($object->title){
482
				if (strpos($object->title, '"en":') !== false) {
483
					$event->object['name'] = gc_explode_translation($object->title, $lang);
484
				} else {
485
					$event->object['name'] = $object->title;
486
				}
487
			} else if($object->name){
488
				if (strpos($object->name, '"en":') !== false) {
489
					$event->object['name'] = gc_explode_translation($object->name, $lang);
490
				} else {
491
					$event->object['name'] = $object->name;
492
				}
493
			}
494
495
			if (strpos($object->description, '"en":') !== false) {
496
				$event->object['description'] = gc_explode_translation($object->description, $lang);
497
			} else {
498
				$event->object['description'] = $object->description;
499
			}
500
501
			$other = get_entity($event->object_guid);
502
			$parent = get_entity($other->container_guid);
503
			if ($parent instanceof ElggGroup) {
504
				if (!isset($event->object['name'])) {
505
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
506
				}
507
			} else {
508
				if (!isset($event->object['name'])) {
509
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
510
				}
511
			}
512
		} else {
513
			//@TODO handle any unknown events
514
			if (strpos($object->title, '"en":') !== false) {
515
				$event->object['name'] = gc_explode_translation($object->title, $lang);
516
			} else {
517
				$event->object['name'] = $object->title;
518
			}
519
520
			if (strpos($object->description, '"en":') !== false) {
521
				$event->object['description'] = gc_explode_translation($object->description, $lang);
522
			} else {
523
				$event->object['description'] = $object->description;
524
			}
525
		}
526
	}
527
528
	return $activity;
529
}
530
531 View Code Duplication
function get_group_blogs($user, $guid, $limit, $offset, $lang)
532
{
533
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
534
	if (!$user_entity) {
535
		return "User was not found. Please try a different GUID, username, or email address";
536
	}
537
	if (!$user_entity instanceof ElggUser) {
538
		return "Invalid user. Please try a different GUID, username, or email address";
539
	}
540
	if (!elgg_is_logged_in()) {
541
		login($user_entity);
542
	}
543
544
	$group = get_entity($guid);
545
	if (!$group) {
546
		return "Group was not found. Please try a different GUID";
547
	}
548
	if (!$group instanceof ElggGroup) {
549
		return "Invalid group. Please try a different GUID";
550
	}
551
552
	$blogs = elgg_list_entities(array(
553
		'type' => 'object',
554
		'subtype' => 'blog',
555
		'container_guid' => $guid,
556
		'limit' => $limit,
557
		'offset' => $offset,
558
		'order_by' => 'e.last_action desc'
559
	));
560
561
	return json_decode($blogs);
562
}
563
564
function get_group_discussions($user, $guid, $limit, $offset, $lang)
565
{
566
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
567
	if (!$user_entity) {
568
		return "User was not found. Please try a different GUID, username, or email address";
569
	}
570
	if (!$user_entity instanceof ElggUser) {
571
		return "Invalid user. Please try a different GUID, username, or email address";
572
	}
573
	if (!elgg_is_logged_in()) {
574
		login($user_entity);
575
	}
576
577
	$group = get_entity($guid);
578
	if (!$group) {
579
		return "Group was not found. Please try a different GUID";
580
	}
581
	if (!$group instanceof ElggGroup) {
582
		return "Invalid group. Please try a different GUID";
583
	}
584
585
	$discussions = elgg_list_entities(array(
586
		'type' => 'object',
587
		'subtype' => 'groupforumtopic',
588
		'container_guid' => $guid,
589
		'limit' => $limit,
590
		'offset' => $offset,
591
		'order_by' => 'e.last_action desc'
592
	));
593
594
	$discussions = json_decode($discussions);
595
	foreach ($discussions as $discussion) {
596
		
597
		$discussion->userDetails = get_user_block($discussion->owner_guid, $lang);
598
		$discussion->title = gc_explode_translation($discussion->title, $lang);
599
		$discussion->description = gc_explode_translation($discussion->description, $lang);
600
	}
601
602
	return $discussions;
603
}
604
605 View Code Duplication
function get_group_docs($user, $guid, $limit, $offset, $lang)
606
{
607
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
608
	if (!$user_entity) {
609
		return "User was not found. Please try a different GUID, username, or email address";
610
	}
611
	if (!$user_entity instanceof ElggUser) {
612
		return "Invalid user. Please try a different GUID, username, or email address";
613
	}
614
	if (!elgg_is_logged_in()) {
615
		login($user_entity);
616
	}
617
618
	$group = get_entity($guid);
619
	if (!$group) {
620
		return "Group was not found. Please try a different GUID";
621
	}
622
	if (!$group instanceof ElggGroup) {
623
		return "Invalid group. Please try a different GUID";
624
	}
625
626
	$docs = elgg_list_entities(array(
627
		'type' => 'object',
628
		'subtype' => 'etherpad',
629
		'container_guid' => $guid,
630
		'limit' => $limit,
631
		'offset' => $offset,
632
		'order_by' => 'e.last_action desc'
633
	));
634
635
	return json_decode($docs);
636
}
637
638 View Code Duplication
function get_group_events($user, $guid, $limit, $offset, $lang)
639
{
640
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
641
	if (!$user_entity) {
642
		return "User was not found. Please try a different GUID, username, or email address";
643
	}
644
	if (!$user_entity instanceof ElggUser) {
645
		return "Invalid user. Please try a different GUID, username, or email address";
646
	}
647
	if (!elgg_is_logged_in()) {
648
		login($user_entity);
649
	}
650
651
	$group = get_entity($guid);
652
	if (!$group) {
653
		return "Group was not found. Please try a different GUID";
654
	}
655
	if (!$group instanceof ElggGroup) {
656
		return "Invalid group. Please try a different GUID";
657
	}
658
659
	$events = elgg_list_entities(array(
660
		'type' => 'object',
661
		'subtype' => 'event_calendar',
662
		'container_guid' => $guid,
663
		'limit' => $limit,
664
		'offset' => $offset,
665
		'order_by' => 'e.last_action desc'
666
	));
667
668
	return json_decode($events);
669
}
670
671 View Code Duplication
function get_group_files($user, $guid, $limit, $offset, $lang)
672
{
673
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
674
	if (!$user_entity) {
675
		return "User was not found. Please try a different GUID, username, or email address";
676
	}
677
	if (!$user_entity instanceof ElggUser) {
678
		return "Invalid user. Please try a different GUID, username, or email address";
679
	}
680
	if (!elgg_is_logged_in()) {
681
		login($user_entity);
682
	}
683
684
	$group = get_entity($guid);
685
	if (!$group) {
686
		return "Group was not found. Please try a different GUID";
687
	}
688
	if (!$group instanceof ElggGroup) {
689
		return "Invalid group. Please try a different GUID";
690
	}
691
692
	$files = elgg_list_entities(array(
693
		'type' => 'object',
694
		'subtype' => 'file',
695
		'container_guid' => $guid,
696
		'limit' => $limit,
697
		'offset' => $offset,
698
		'order_by' => 'e.last_action desc'
699
	));
700
701
	return json_decode($files);
702
}
703
704
function get_groups_members($user, $guid, $limit, $offset, $lang)
705
{
706
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
707
	if (!$user_entity) {
708
		return "User was not found. Please try a different GUID, username, or email address";
709
	}
710
	if (!$user_entity instanceof ElggUser) {
711
		return "Invalid user. Please try a different GUID, username, or email address";
712
	}
713
	if (!elgg_is_logged_in()) {
714
		login($user_entity);
715
	}
716
717
	$group = get_entity($guid);
718
	if (!$group) {
719
		return "Group was not found. Please try a different GUID";
720
	}
721
	if (!$group instanceof ElggGroup) {
722
		return "Invalid group. Please try a different GUID";
723
	}
724
725
	$db_prefix = elgg_get_config('dbprefix');
726
	$members = elgg_list_entities_from_relationship(array(
727
		'type' => 'user',
728
		'limit' => $limit,
729
		'offset' => $offset,
730
		'relationship' => 'member',
731
		'relationship_guid' => $guid,
732
		'inverse_relationship' => true,
733
		'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
734
		'order_by' => 'u.name ASC'
735
	));
736
	$members = json_decode($members);
737
738
	$data = array();
739 View Code Duplication
	foreach ($members as $member) {
740
		$member_obj = get_user($member->guid);
741
		$member_data = get_user_block($member->guid, $lang);
742
743
		$about = "";
744
		if ($member_obj->description) {
745
			$about = strip_tags($member_obj->description, '<p>');
746
			$about = str_replace("<p>&nbsp;</p>", '', $about);
747
		}
748
749
		$member_data['about'] = $about;
750
		$data[] = $member_data;
751
	}
752
753
	return $data;
754
}
755
756
function join_group_function($user, $guid, $lang)
757
{
758
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
759
	if (!$user_entity) {
760
		return "User was not found. Please try a different GUID, username, or email address";
761
	}
762
	if (!$user_entity instanceof ElggUser) {
763
		return "Invalid user. Please try a different GUID, username, or email address";
764
	}
765
	if (!elgg_is_logged_in()) {
766
		login($user_entity);
767
	}
768
769
	$group = get_entity($guid);
770
	if (!$group) {
771
		return "Group was not found. Please try a different GUID";
772
	}
773
	if (!$group instanceof ElggGroup) {
774
		return "Invalid group. Please try a different GUID";
775
	}
776
777
778
779
	// access bypass for getting invisible group
780
	$ia = elgg_set_ignore_access(true);
781
	$group = get_entity($guid);
782
	elgg_set_ignore_access($ia);
783
784
	if ($user_entity && ($group instanceof ElggGroup)) {
785
786
		// join or request
787
		$join = false;
788 View Code Duplication
		if ($group->isPublicMembership() || $group->canEdit($user_entity->guid)) {
789
			// anyone can join public groups and admins can join any group
790
			$join = true;
791
		} else {
792
			if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
793
				// user has invite to closed group
794
				$join = true;
795
			}
796
		}
797
798
		if ($join) {
799
			if (groups_join_group($group, $user_entity)) {
800
801
802
				// cyu - 05/12/2016: modified to comform to the business requirements documentation
803 View Code Duplication
				if (elgg_is_active_plugin('cp_notifications')) {
804
					$user_entity = elgg_get_logged_in_user_entity();
805
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group->getGUID());
806
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group->getGUID());
807
				}
808
809
				return elgg_echo("groups:joined");
810
			} else {
811
				return elgg_echo("groups:cantjoin");
812
			}
813
		} else {
814
			add_entity_relationship($user_entity->guid, 'membership_request', $group->guid);
815
816
			$owner = $group->getOwnerEntity();
817
818
			$url = "{$CONFIG->url}groups/requests/$group->guid";
0 ignored issues
show
Bug introduced by
The variable $CONFIG does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
819
820
			$subject = elgg_echo('groups:request:subject', array(
821
				$user_entity->name,
822
				$group->name,
823
			), $owner->language);
824
825
			$body = elgg_echo('groups:request:body', array(
826
				$group->getOwnerEntity()->name,
827
				$user_entity->name,
828
				$group->name,
829
				$user_entity->getURL(),
830
				$url,
831
			), $owner->language);
832
833
			$params = [
834
				'action' => 'membership_request',
835
				'object' => $group,
836
			];
837
838
			// Notify group owner
839
			if (notify_user($owner->guid, $user_entity->getGUID(), $subject, $body, $params)) {
840
				return elgg_echo("groups:joinrequestmade");
841
			} else {
842
				return elgg_echo("groups:joinrequestnotmade");
843
			}
844
		}
845
	} else {
846
		return elgg_echo("groups:cantjoin");
847
	}
848
}
849
850
function leave_group_function($user, $guid, $lang)
851
{
852
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
853
	if (!$user_entity) {
854
		return "User was not found. Please try a different GUID, username, or email address";
855
	}
856
	if (!$user_entity instanceof ElggUser) {
857
		return "Invalid user. Please try a different GUID, username, or email address";
858
	}
859
	if (!elgg_is_logged_in()) {
860
		login($user_entity);
861
	}
862
863
	$group = get_entity($guid);
864
	if (!$group) {
865
		return "Group was not found. Please try a different GUID";
866
	}
867
	if (!$group instanceof ElggGroup) {
868
		return "Invalid group. Please try a different GUID";
869
	}
870
871
	elgg_set_page_owner_guid($group->guid);
872
873
	if ($user_entity && ($group instanceof ElggGroup)) {
874
		if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) {
875
			if ($group->leave($user_entity)) {
876
877
				// cyu - remove all the relationships when a user leaves a group
878
				if (elgg_is_active_plugin('cp_notifications')) {
879
880
					$group_content_arr = array('blog','bookmark','groupforumtopic','event_calendar','file',/*'hjforumtopic','hjforum',*/'photo','album','task','page','page_top','task_top','idea');
881
					$dbprefix = elgg_get_config('dbprefix');
882
883
					$query = "SELECT o.guid as content_id, o.title FROM {$dbprefix}entity_relationships r, {$dbprefix}objects_entity o, {$dbprefix}entities e, {$dbprefix}entity_subtypes es WHERE r.guid_one = {$user_entity->getGUID()} AND r.guid_two = o.guid AND o.title <> '' AND o.guid = e.guid AND e.container_guid = {$guid} AND es.id = e.subtype AND ( es.subtype = 'poll'";
884
					foreach ($group_content_arr as $grp_content_subtype)
885
						$query .= " OR es.subtype = '{$grp_content_subtype}'";
886
					$query .= " )";
887
888
					$group_contents = get_data($query);
889
890
					// unsubscribe to the group
891
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $guid);
892
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $guid);
893
					// unsubscribe to group content if not already
894
					foreach ($group_contents as $group_content) {
895
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group_content->content_id);
896
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group_content->content_id);
897
					}
898
899
				}
900
901
				//check if user is a group operator
902
				if(check_entity_relationship($user_entity->getGUID(), 'operator', $guid)){
903
					//remove operator rights
904
					remove_entity_relationship($user_entity->getGUID(), 'operator', $guid);
905
				}
906
907
				return elgg_echo("groups:left");
908
			} else {
909
				return elgg_echo("groups:cantleave");
910
			}
911
		} else {
912
			return elgg_echo("groups:cantleave");
913
		}
914
	} else {
915
		return elgg_echo("groups:cantleave");
916
	}
917
}
918
919
function invite_group_member($profileemail, $user, $guid, $lang)
920
{
921
	$invitee = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
922
	if (!$invitee) {
923
		return "User was not found. Please try a different GUID, username, or email address";
924
	}
925
	if (!$invitee instanceof ElggUser) {
926
		return "Invalid user. Please try a different GUID, username, or email address";
927
	}
928
929
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
930
	if (!$user_entity) {
931
		return "Viewer user was not found. Please try a different GUID, username, or email address";
932
	}
933
	if (!$user_entity instanceof ElggUser) {
934
		return "Invalid viewer user. Please try a different GUID, username, or email address";
935
	}
936
	if (!elgg_is_logged_in()) {
937
		login($user_entity);
938
	}
939
940
	$group = get_entity($guid);
941
	if (!$group) {
942
		return "Group was not found. Please try a different GUID";
943
	}
944
	if (!$group instanceof ElggGroup) {
945
		return "Invalid group. Please try a different GUID";
946
	}
947
948
	if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
949
		return elgg_echo("groups:useralreadyinvited");
950
		continue;
951
	}
952
953
	if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
954
		// @todo add error message
955
		continue;
956
	}
957
958
	// Create relationship
959
	add_entity_relationship($group->guid, 'invited', $invitee->guid);
960
961
	$url = elgg_normalize_url("groups/invitations/$invitee->username");
962
963
	$subject = elgg_echo('groups:invite:subject', array(
964
		$invitee->name,
965
		$group->name
966
	), $invitee->language);
967
968
	$body = elgg_echo('groups:invite:body', array(
969
		$invitee->name,
970
		$user_entity->name,
971
		$group->name,
972
		$url,
973
	), $invitee->language);
974
975
	$params = [
976
		'action' => 'invite',
977
		'object' => $group,
978
	];
979
980
	// Send notification
981
	$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
982
983
	if ($result) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $result of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
984
		return elgg_echo("groups:userinvited");
985
	} else {
986
		return elgg_echo("groups:usernotinvited");
987
	}
988
}
989
990
function invite_group_members($profileemail, $user, $guid, $lang)
991
{
992
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
993
	if (!$user_entity) {
994
		return "Viewer user was not found. Please try a different GUID, username, or email address";
995
	}
996
	if (!$user_entity instanceof ElggUser) {
997
		return "Invalid viewer user. Please try a different GUID, username, or email address";
998
	}
999
	if (!elgg_is_logged_in()) {
1000
		login($user_entity);
1001
	}
1002
1003
	$group = get_entity($guid);
1004
	if (!$group) {
1005
		return "Group was not found. Please try a different GUID";
1006
	}
1007
	if (!$group instanceof ElggGroup) {
1008
		return "Invalid group. Please try a different GUID";
1009
	}
1010
1011
	$user_guids = explode(',', $profileemail);
1012
	if (count($user_guids) > 0 && elgg_instanceof($group, 'group') && $group->canEdit()) {
1013
		foreach ($user_guids as $guid) {
1014
			$invitee = is_numeric($guid) ? get_user($guid) : (strpos($guid, '@') !== false ? get_user_by_email($guid)[0] : get_user_by_username($guid));
1015
			if (!$invitee) {
1016
				continue;
1017
			}
1018
			if (!$invitee instanceof ElggUser) {
1019
				continue;
1020
			}
1021
1022
			if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
1023
				return elgg_echo("groups:useralreadyinvited");
1024
				continue;
0 ignored issues
show
Unused Code introduced by
continue; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
1025
			}
1026
1027
			if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
1028
				// @todo add error message
1029
				continue;
1030
			}
1031
1032
			// Create relationship
1033
			add_entity_relationship($group->guid, 'invited', $invitee->guid);
1034
1035
			$url = elgg_normalize_url("groups/invitations/$invitee->username");
1036
1037
			$subject = elgg_echo('groups:invite:subject', array(
1038
				$invitee->name,
1039
				$group->name
1040
			), $invitee->language);
1041
1042
			$body = elgg_echo('groups:invite:body', array(
1043
				$invitee->name,
1044
				$user_entity->name,
1045
				$group->name,
1046
				$url,
1047
			), $invitee->language);
1048
1049
			$params = [
1050
				'action' => 'invite',
1051
				'object' => $group,
1052
			];
1053
1054
			// Send notification
1055
			$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
1056
1057
			if ($result) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $result of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
1058
				return elgg_echo("groups:userinvited");
1059
			} else {
1060
				return elgg_echo("groups:usernotinvited");
1061
			}
1062
		}
1063
	}
1064
}
1065
1066
function decline_group_invite($user, $guid, $lang)
1067
{
1068
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1069
	if (!$user_entity) {
1070
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1071
	}
1072
	if (!$user_entity instanceof ElggUser) {
1073
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1074
	}
1075
	if (!elgg_is_logged_in()) {
1076
		login($user_entity);
1077
	}
1078
1079
	$group = get_entity($guid);
1080
	if (!$group) {
1081
		return "Group was not found. Please try a different GUID";
1082
	}
1083
	if (!$group instanceof ElggGroup) {
1084
		return "Invalid group. Please try a different GUID";
1085
	}
1086
1087
	// invisible groups require overriding access to delete invite
1088
	$old_access = elgg_set_ignore_access(true);
1089
	$group = get_entity($guid);
1090
	elgg_set_ignore_access($old_access);
1091
1092
	// If join request made
1093 View Code Duplication
	if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
1094
		remove_entity_relationship($group->guid, 'invited', $user_entity->guid);
1095
		return elgg_echo("groups:invitekilled");
1096
	}
1097
1098
	return false;
1099
}
1100