Passed
Push — Group-API ( 9c339f )
by
unknown
23:53
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;
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
		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 View Code Duplication
		} 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 View Code Duplication
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
	return json_decode($discussions);
595
}
596
597 View Code Duplication
function get_group_docs($user, $guid, $limit, $offset, $lang)
598
{
599
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
600
	if (!$user_entity) {
601
		return "User was not found. Please try a different GUID, username, or email address";
602
	}
603
	if (!$user_entity instanceof ElggUser) {
604
		return "Invalid user. Please try a different GUID, username, or email address";
605
	}
606
	if (!elgg_is_logged_in()) {
607
		login($user_entity);
608
	}
609
610
	$group = get_entity($guid);
611
	if (!$group) {
612
		return "Group was not found. Please try a different GUID";
613
	}
614
	if (!$group instanceof ElggGroup) {
615
		return "Invalid group. Please try a different GUID";
616
	}
617
618
	$docs = elgg_list_entities(array(
619
		'type' => 'object',
620
		'subtype' => 'etherpad',
621
		'container_guid' => $guid,
622
		'limit' => $limit,
623
		'offset' => $offset,
624
		'order_by' => 'e.last_action desc'
625
	));
626
627
	return json_decode($docs);
628
}
629
630 View Code Duplication
function get_group_events($user, $guid, $limit, $offset, $lang)
631
{
632
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
633
	if (!$user_entity) {
634
		return "User was not found. Please try a different GUID, username, or email address";
635
	}
636
	if (!$user_entity instanceof ElggUser) {
637
		return "Invalid user. Please try a different GUID, username, or email address";
638
	}
639
	if (!elgg_is_logged_in()) {
640
		login($user_entity);
641
	}
642
643
	$group = get_entity($guid);
644
	if (!$group) {
645
		return "Group was not found. Please try a different GUID";
646
	}
647
	if (!$group instanceof ElggGroup) {
648
		return "Invalid group. Please try a different GUID";
649
	}
650
651
	$events = elgg_list_entities(array(
652
		'type' => 'object',
653
		'subtype' => 'event_calendar',
654
		'container_guid' => $guid,
655
		'limit' => $limit,
656
		'offset' => $offset,
657
		'order_by' => 'e.last_action desc'
658
	));
659
660
	return json_decode($events);
661
}
662
663 View Code Duplication
function get_group_files($user, $guid, $limit, $offset, $lang)
664
{
665
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
666
	if (!$user_entity) {
667
		return "User was not found. Please try a different GUID, username, or email address";
668
	}
669
	if (!$user_entity instanceof ElggUser) {
670
		return "Invalid user. Please try a different GUID, username, or email address";
671
	}
672
	if (!elgg_is_logged_in()) {
673
		login($user_entity);
674
	}
675
676
	$group = get_entity($guid);
677
	if (!$group) {
678
		return "Group was not found. Please try a different GUID";
679
	}
680
	if (!$group instanceof ElggGroup) {
681
		return "Invalid group. Please try a different GUID";
682
	}
683
684
	$files = elgg_list_entities(array(
685
		'type' => 'object',
686
		'subtype' => 'file',
687
		'container_guid' => $guid,
688
		'limit' => $limit,
689
		'offset' => $offset,
690
		'order_by' => 'e.last_action desc'
691
	));
692
693
	return json_decode($files);
694
}
695
696
function get_groups_members($user, $guid, $limit, $offset, $lang)
697
{
698
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
699
	if (!$user_entity) {
700
		return "User was not found. Please try a different GUID, username, or email address";
701
	}
702
	if (!$user_entity instanceof ElggUser) {
703
		return "Invalid user. Please try a different GUID, username, or email address";
704
	}
705
	if (!elgg_is_logged_in()) {
706
		login($user_entity);
707
	}
708
709
	$group = get_entity($guid);
710
	if (!$group) {
711
		return "Group was not found. Please try a different GUID";
712
	}
713
	if (!$group instanceof ElggGroup) {
714
		return "Invalid group. Please try a different GUID";
715
	}
716
717
	$db_prefix = elgg_get_config('dbprefix');
718
	$members = elgg_list_entities_from_relationship(array(
719
		'type' => 'user',
720
		'limit' => $limit,
721
		'offset' => $offset,
722
		'relationship' => 'member',
723
		'relationship_guid' => $guid,
724
		'inverse_relationship' => true,
725
		'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
726
		'order_by' => 'u.name ASC'
727
	));
728
	$members = json_decode($members);
729
730
	$data = array();
731 View Code Duplication
	foreach ($members as $member) {
732
		$member_obj = get_user($member->guid);
733
		$member_data = get_user_block($member->guid, $lang);
734
735
		$about = "";
736
		if ($member_obj->description) {
737
			$about = strip_tags($member_obj->description, '<p>');
738
			$about = str_replace("<p>&nbsp;</p>", '', $about);
739
		}
740
741
		$member_data['about'] = $about;
742
		$data[] = $member_data;
743
	}
744
745
	return $data;
746
}
747
748
function join_group_function($user, $guid, $lang)
749
{
750
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
751
	if (!$user_entity) {
752
		return "User was not found. Please try a different GUID, username, or email address";
753
	}
754
	if (!$user_entity instanceof ElggUser) {
755
		return "Invalid user. Please try a different GUID, username, or email address";
756
	}
757
	if (!elgg_is_logged_in()) {
758
		login($user_entity);
759
	}
760
761
	$group = get_entity($guid);
762
	if (!$group) {
763
		return "Group was not found. Please try a different GUID";
764
	}
765
	if (!$group instanceof ElggGroup) {
766
		return "Invalid group. Please try a different GUID";
767
	}
768
769
770
771
	// access bypass for getting invisible group
772
	$ia = elgg_set_ignore_access(true);
773
	$group = get_entity($guid);
774
	elgg_set_ignore_access($ia);
775
776
	if ($user_entity && ($group instanceof ElggGroup)) {
777
778
		// join or request
779
		$join = false;
780 View Code Duplication
		if ($group->isPublicMembership() || $group->canEdit($user_entity->guid)) {
781
			// anyone can join public groups and admins can join any group
782
			$join = true;
783
		} else {
784
			if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
785
				// user has invite to closed group
786
				$join = true;
787
			}
788
		}
789
790
		if ($join) {
791
			if (groups_join_group($group, $user_entity)) {
792
793
794
				// cyu - 05/12/2016: modified to comform to the business requirements documentation
795 View Code Duplication
				if (elgg_is_active_plugin('cp_notifications')) {
796
					$user_entity = elgg_get_logged_in_user_entity();
797
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group->getGUID());
798
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group->getGUID());
799
				}
800
801
				return elgg_echo("groups:joined");
802
			} else {
803
				return elgg_echo("groups:cantjoin");
804
			}
805
		} else {
806
			add_entity_relationship($user_entity->guid, 'membership_request', $group->guid);
807
808
			$owner = $group->getOwnerEntity();
809
810
			$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...
811
812
			$subject = elgg_echo('groups:request:subject', array(
813
				$user_entity->name,
814
				$group->name,
815
			), $owner->language);
816
817
			$body = elgg_echo('groups:request:body', array(
818
				$group->getOwnerEntity()->name,
819
				$user_entity->name,
820
				$group->name,
821
				$user_entity->getURL(),
822
				$url,
823
			), $owner->language);
824
825
			$params = [
826
				'action' => 'membership_request',
827
				'object' => $group,
828
			];
829
830
			// Notify group owner
831
			if (notify_user($owner->guid, $user_entity->getGUID(), $subject, $body, $params)) {
832
				return elgg_echo("groups:joinrequestmade");
833
			} else {
834
				return elgg_echo("groups:joinrequestnotmade");
835
			}
836
		}
837
	} else {
838
		return elgg_echo("groups:cantjoin");
839
	}
840
}
841
842
function leave_group_function($user, $guid, $lang)
843
{
844
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
845
	if (!$user_entity) {
846
		return "User was not found. Please try a different GUID, username, or email address";
847
	}
848
	if (!$user_entity instanceof ElggUser) {
849
		return "Invalid user. Please try a different GUID, username, or email address";
850
	}
851
	if (!elgg_is_logged_in()) {
852
		login($user_entity);
853
	}
854
855
	$group = get_entity($guid);
856
	if (!$group) {
857
		return "Group was not found. Please try a different GUID";
858
	}
859
	if (!$group instanceof ElggGroup) {
860
		return "Invalid group. Please try a different GUID";
861
	}
862
863
	elgg_set_page_owner_guid($group->guid);
864
865
	if ($user_entity && ($group instanceof ElggGroup)) {
866
		if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) {
867
			if ($group->leave($user_entity)) {
868
869
				// cyu - remove all the relationships when a user leaves a group
870
				if (elgg_is_active_plugin('cp_notifications')) {
871
872
					$group_content_arr = array('blog','bookmark','groupforumtopic','event_calendar','file',/*'hjforumtopic','hjforum',*/'photo','album','task','page','page_top','task_top','idea');
873
					$dbprefix = elgg_get_config('dbprefix');
874
875
					$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'";
876
					foreach ($group_content_arr as $grp_content_subtype)
877
						$query .= " OR es.subtype = '{$grp_content_subtype}'";
878
					$query .= " )";
879
880
					$group_contents = get_data($query);
881
882
					// unsubscribe to the group
883
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $guid);
884
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $guid);
885
					// unsubscribe to group content if not already
886
					foreach ($group_contents as $group_content) {
887
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group_content->content_id);
888
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group_content->content_id);
889
					}
890
891
				}
892
893
				//check if user is a group operator
894
				if(check_entity_relationship($user_entity->getGUID(), 'operator', $guid)){
895
					//remove operator rights
896
					remove_entity_relationship($user_entity->getGUID(), 'operator', $guid);
897
				}
898
899
				return elgg_echo("groups:left");
900
			} else {
901
				return elgg_echo("groups:cantleave");
902
			}
903
		} else {
904
			return elgg_echo("groups:cantleave");
905
		}
906
	} else {
907
		return elgg_echo("groups:cantleave");
908
	}
909
}
910
911
function invite_group_member($profileemail, $user, $guid, $lang)
912
{
913
	$invitee = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
914
	if (!$invitee) {
915
		return "User was not found. Please try a different GUID, username, or email address";
916
	}
917
	if (!$invitee instanceof ElggUser) {
918
		return "Invalid user. Please try a different GUID, username, or email address";
919
	}
920
921
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
922
	if (!$user_entity) {
923
		return "Viewer user was not found. Please try a different GUID, username, or email address";
924
	}
925
	if (!$user_entity instanceof ElggUser) {
926
		return "Invalid viewer user. Please try a different GUID, username, or email address";
927
	}
928
	if (!elgg_is_logged_in()) {
929
		login($user_entity);
930
	}
931
932
	$group = get_entity($guid);
933
	if (!$group) {
934
		return "Group was not found. Please try a different GUID";
935
	}
936
	if (!$group instanceof ElggGroup) {
937
		return "Invalid group. Please try a different GUID";
938
	}
939
940
	if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
941
		return elgg_echo("groups:useralreadyinvited");
942
		continue;
943
	}
944
945
	if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
946
		// @todo add error message
947
		continue;
948
	}
949
950
	// Create relationship
951
	add_entity_relationship($group->guid, 'invited', $invitee->guid);
952
953
	$url = elgg_normalize_url("groups/invitations/$invitee->username");
954
955
	$subject = elgg_echo('groups:invite:subject', array(
956
		$invitee->name,
957
		$group->name
958
	), $invitee->language);
959
960
	$body = elgg_echo('groups:invite:body', array(
961
		$invitee->name,
962
		$user_entity->name,
963
		$group->name,
964
		$url,
965
	), $invitee->language);
966
967
	$params = [
968
		'action' => 'invite',
969
		'object' => $group,
970
	];
971
972
	// Send notification
973
	$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
974
975
	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...
976
		return elgg_echo("groups:userinvited");
977
	} else {
978
		return elgg_echo("groups:usernotinvited");
979
	}
980
}
981
982
function invite_group_members($profileemail, $user, $guid, $lang)
983
{
984
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
985
	if (!$user_entity) {
986
		return "Viewer user was not found. Please try a different GUID, username, or email address";
987
	}
988
	if (!$user_entity instanceof ElggUser) {
989
		return "Invalid viewer user. Please try a different GUID, username, or email address";
990
	}
991
	if (!elgg_is_logged_in()) {
992
		login($user_entity);
993
	}
994
995
	$group = get_entity($guid);
996
	if (!$group) {
997
		return "Group was not found. Please try a different GUID";
998
	}
999
	if (!$group instanceof ElggGroup) {
1000
		return "Invalid group. Please try a different GUID";
1001
	}
1002
1003
	$user_guids = explode(',', $profileemail);
1004
	if (count($user_guids) > 0 && elgg_instanceof($group, 'group') && $group->canEdit()) {
1005
		foreach ($user_guids as $guid) {
1006
			$invitee = is_numeric($guid) ? get_user($guid) : (strpos($guid, '@') !== false ? get_user_by_email($guid)[0] : get_user_by_username($guid));
1007
			if (!$invitee) {
1008
				continue;
1009
			}
1010
			if (!$invitee instanceof ElggUser) {
1011
				continue;
1012
			}
1013
1014
			if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
1015
				return elgg_echo("groups:useralreadyinvited");
1016
				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...
1017
			}
1018
1019
			if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
1020
				// @todo add error message
1021
				continue;
1022
			}
1023
1024
			// Create relationship
1025
			add_entity_relationship($group->guid, 'invited', $invitee->guid);
1026
1027
			$url = elgg_normalize_url("groups/invitations/$invitee->username");
1028
1029
			$subject = elgg_echo('groups:invite:subject', array(
1030
				$invitee->name,
1031
				$group->name
1032
			), $invitee->language);
1033
1034
			$body = elgg_echo('groups:invite:body', array(
1035
				$invitee->name,
1036
				$user_entity->name,
1037
				$group->name,
1038
				$url,
1039
			), $invitee->language);
1040
1041
			$params = [
1042
				'action' => 'invite',
1043
				'object' => $group,
1044
			];
1045
1046
			// Send notification
1047
			$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
1048
1049
			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...
1050
				return elgg_echo("groups:userinvited");
1051
			} else {
1052
				return elgg_echo("groups:usernotinvited");
1053
			}
1054
		}
1055
	}
1056
}
1057
1058
function decline_group_invite($user, $guid, $lang)
1059
{
1060
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1061
	if (!$user_entity) {
1062
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1063
	}
1064
	if (!$user_entity instanceof ElggUser) {
1065
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1066
	}
1067
	if (!elgg_is_logged_in()) {
1068
		login($user_entity);
1069
	}
1070
1071
	$group = get_entity($guid);
1072
	if (!$group) {
1073
		return "Group was not found. Please try a different GUID";
1074
	}
1075
	if (!$group instanceof ElggGroup) {
1076
		return "Invalid group. Please try a different GUID";
1077
	}
1078
1079
	// invisible groups require overriding access to delete invite
1080
	$old_access = elgg_set_ignore_access(true);
1081
	$group = get_entity($guid);
1082
	elgg_set_ignore_access($old_access);
1083
1084
	// If join request made
1085 View Code Duplication
	if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
1086
		remove_entity_relationship($group->guid, 'invited', $user_entity->guid);
1087
		return elgg_echo("groups:invitekilled");
1088
	}
1089
1090
	return false;
1091
}
1092