Completed
Pull Request — gcconnex (#1558)
by
unknown
15:36
created

group.php ➔ get_group_blogs()   C

Complexity

Conditions 8
Paths 24

Size

Total Lines 33
Code Lines 21

Duplication

Lines 33
Ratio 100 %

Importance

Changes 0
Metric Value
cc 8
eloc 21
nc 24
nop 5
dl 33
loc 33
rs 5.3846
c 0
b 0
f 0
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
	),
46
	'Retrieves a group\'s activity based on user id and group id',
47
	'POST',
48
	true,
49
	false
50
);
51
52
elgg_ws_expose_function(
53
	"get.groupblogs",
54
	"get_group_blogs",
55
	array(
56
		"user" => array('type' => 'string', 'required' => true),
57
		"guid" => array('type' => 'int', 'required' => true),
58
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
59
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
60
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
61
	),
62
	'Retrieves a group\'s blogs based on user id and group id',
63
	'POST',
64
	true,
65
	false
66
);
67
68
elgg_ws_expose_function(
69
	"get.groupdiscussions",
70
	"get_group_discussions",
71
	array(
72
		"user" => array('type' => 'string', 'required' => true),
73
		"guid" => array('type' => 'int', 'required' => true),
74
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
75
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
76
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
77
	),
78
	'Retrieves a group\'s discussions based on user id and group id',
79
	'POST',
80
	true,
81
	false
82
);
83
84
elgg_ws_expose_function(
85
	"get.groupdocs",
86
	"get_group_docs",
87
	array(
88
		"user" => array('type' => 'string', 'required' => true),
89
		"guid" => array('type' => 'int', 'required' => true),
90
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
91
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
92
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
93
	),
94
	'Retrieves a group\'s docs based on user id and group id',
95
	'POST',
96
	true,
97
	false
98
);
99
100
elgg_ws_expose_function(
101
	"get.groupevents",
102
	"get_group_events",
103
	array(
104
		"user" => array('type' => 'string', 'required' => true),
105
		"guid" => array('type' => 'int', 'required' => true),
106
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
107
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
108
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
109
	),
110
	'Retrieves a group\'s events based on user id and group id',
111
	'POST',
112
	true,
113
	false
114
);
115
116
elgg_ws_expose_function(
117
	"get.groupfiles",
118
	"get_group_files",
119
	array(
120
		"user" => array('type' => 'string', 'required' => true),
121
		"guid" => array('type' => 'int', 'required' => true),
122
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
123
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
124
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
125
	),
126
	'Retrieves a group\'s files based on user id and group id',
127
	'POST',
128
	true,
129
	false
130
);
131
132
elgg_ws_expose_function(
133
	"group.members",
134
	"get_groups_members",
135
	array(
136
		"user" => array('type' => 'string', 'required' => true),
137
		"guid" => array('type' => 'int', 'required' => true),
138
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
139
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
140
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
141
	),
142
	'Retrieves a group\'s members based on user id and group id',
143
	'POST',
144
	true,
145
	false
146
);
147
148
elgg_ws_expose_function(
149
	"group.join",
150
	"join_group_function",
151
	array(
152
		"user" => array('type' => 'string', 'required' => true),
153
		"guid" => array('type' => 'int', 'required' => true),
154
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
155
	),
156
	'Joins a group based on user id and group id',
157
	'POST',
158
	true,
159
	false
160
);
161
162
elgg_ws_expose_function(
163
	"group.leave",
164
	"leave_group_function",
165
	array(
166
		"user" => array('type' => 'string', 'required' => true),
167
		"guid" => array('type' => 'int', 'required' => true),
168
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
169
	),
170
	'Leaves a group based on user id and group id',
171
	'POST',
172
	true,
173
	false
174
);
175
176
elgg_ws_expose_function(
177
	"group.invite",
178
	"invite_group_member",
179
	array(
180
		"profileemail" => array('type' => 'string', 'required' => true),
181
		"user" => array('type' => 'string', 'required' => true),
182
		"guid" => array('type' => 'int', 'required' => true),
183
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
184
	),
185
	'Invites a member to a group based on user id and group id',
186
	'POST',
187
	true,
188
	false
189
);
190
191
elgg_ws_expose_function(
192
	"group.invitemembers",
193
	"invite_group_members",
194
	array(
195
		"profileemail" => array('type' => 'string', 'required' => true),
196
		"user" => array('type' => 'string', 'required' => true),
197
		"guid" => array('type' => 'int', 'required' => true),
198
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
199
	),
200
	'Invites members to a group based on user ids and group id',
201
	'POST',
202
	true,
203
	false
204
);
205
206
elgg_ws_expose_function(
207
	"group.decline",
208
	"decline_group_invite",
209
	array(
210
		"user" => array('type' => 'string', 'required' => true),
211
		"guid" => array('type' => 'int', 'required' => true),
212
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
213
	),
214
	'Declines a group invite to a group based on user id and group id',
215
	'POST',
216
	true,
217
	false
218
);
219
220
function get_group($user, $guid, $lang)
221
{
222
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
223
	if (!$user_entity) {
224
		return "User was not found. Please try a different GUID, username, or email address";
225
	}
226
	if (!$user_entity instanceof ElggUser) {
227
		return "Invalid user. Please try a different GUID, username, or email address";
228
	}
229
230
	$ia = elgg_set_ignore_access(true);
231
	$entity = get_entity($guid);
232
	elgg_set_ignore_access($ia);
233
234
	if (!$entity) {
235
		return "Group was not found. Please try a different GUID";
236
	}
237
	if (!$entity instanceof ElggGroup) {
238
		return "Invalid group. Please try a different GUID";
239
	}
240
241
	if (!elgg_is_logged_in()) {
242
		login($user_entity);
243
	}
244
245
	$groups = elgg_list_entities(array(
246
		'type' => 'group',
247
		'guid' => $guid
248
	));
249
	$group = json_decode($groups)[0];
250
251
	$group->name = gc_explode_translation($group->name, $lang);
252
253
	$likes = elgg_get_annotations(array(
254
		'guid' => $group->guid,
255
		'annotation_name' => 'likes'
256
	));
257
	$group->likes = count($likes);
258
259
	$liked = elgg_get_annotations(array(
260
		'guid' => $group->guid,
261
		'annotation_owner_guid' => $user_entity->guid,
262
		'annotation_name' => 'likes'
263
	));
264
	$group->liked = count($liked) > 0;
265
266
	$groupObj = get_entity($group->guid);
267
	$group->member = $groupObj->isMember($user_entity);
268
	$group->owner = ($groupObj->getOwnerEntity() == $user_entity);
269
	$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...
270
	$group->count = $groupObj->getMembers(array('count' => true));
271
272
	$group->comments = get_entity_comments($group->guid);
273
	$group->tags = $groupObj->interests;
274
275
	$group->userDetails = get_user_block($group->owner_guid, $lang);
276
	$group->description = gc_explode_translation($group->description, $lang);
277
278
	return $group;
279
}
280
281
function get_groups($user, $limit, $offset, $filters, $lang)
282
{
283
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
284
	if (!$user_entity) {
285
		return "User was not found. Please try a different GUID, username, or email address";
286
	}
287
	if (!$user_entity instanceof ElggUser) {
288
		return "Invalid user. Please try a different GUID, username, or email address";
289
	}
290
291
	if (!elgg_is_logged_in()) {
292
		login($user_entity);
293
	}
294
295
	$filter_data = json_decode($filters);
296
	if (!empty($filter_data)) {
297
		$params = array(
298
			'type' => 'group',
299
			'limit' => $limit,
300
			'offset' => $offset
301
		);
302
303
		if ($filter_data->mine) {
304
			$params['relationship'] = 'member';
305
			$params['relationship_guid'] = $user_entity->guid;
306
			$params['inverse_relationship'] = false;
307
		}
308
309
		if ($filter_data->name) {
310
			$db_prefix = elgg_get_config('dbprefix');
311
			$params['joins'] = array("JOIN {$db_prefix}groups_entity ge ON e.guid = ge.guid");
312
			$params['wheres'] = array("(ge.name LIKE '%" . $filter_data->name . "%' OR ge.description LIKE '%" . $filter_data->name . "%')");
313
		}
314
315
		if ($filter_data->mine) {
316
			$all_groups = elgg_list_entities_from_relationship($params);
317
		} else {
318
			$all_groups = elgg_list_entities_from_metadata($params);
319
		}
320
	} else {
321
		$all_groups = elgg_list_entities(array(
322
			'type' => 'group',
323
			'limit' => $limit,
324
			'offset' => $offset
325
		));
326
	}
327
328
	$groups = json_decode($all_groups);
329
330
	foreach ($groups as $group) {
331
		$group->name = gc_explode_translation($group->name, $lang);
332
333
		$likes = elgg_get_annotations(array(
334
			'guid' => $group->guid,
335
			'annotation_name' => 'likes'
336
		));
337
		$group->likes = count($likes);
338
339
		$liked = elgg_get_annotations(array(
340
			'guid' => $group->guid,
341
			'annotation_owner_guid' => $user_entity->guid,
342
			'annotation_name' => 'likes'
343
		));
344
		$group->liked = count($liked) > 0;
345
346
		$groupObj = get_entity($group->guid);
347
		$group->member = $groupObj->isMember($user_entity);
348
		$group->owner = ($groupObj->getOwnerEntity() == $user_entity);
349
		$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...
350
		$group->count = $groupObj->getMembers(array('count' => true));
351
352
		$group->comments = get_entity_comments($group->guid);
353
		$group->tags = $groupObj->interests;
354
355
		$group->userDetails = get_user_block($group->owner_guid, $lang);
356
		$group->description = gc_explode_translation($group->description, $lang);
357
	}
358
359
	return $groups;
360
}
361
362
function get_group_activity($user, $guid, $limit, $offset, $lang)
363
{
364
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
365
	if (!$user_entity) {
366
		return "User was not found. Please try a different GUID, username, or email address";
367
	}
368
	if (!$user_entity instanceof ElggUser) {
369
		return "Invalid user. Please try a different GUID, username, or email address";
370
	}
371
372
	$group = get_entity($guid);
373
	if (!$group) {
374
		return "Group was not found. Please try a different GUID";
375
	}
376
	if (!$group instanceof ElggGroup) {
377
		return "Invalid group. Please try a different GUID";
378
	}
379
380
	if (!elgg_is_logged_in()) {
381
		login($user_entity);
382
	}
383
384
	$all_activity = elgg_list_group_river(array(
385
		'limit' => $limit,
386
		'offset' => $offset,
387
		'wheres1' => array(
388
			"oe.container_guid = $group->guid",
389
		),
390
		'wheres2' => array(
391
			"te.container_guid = $group->guid",
392
		),
393
	));
394
395
	$activity = json_decode($all_activity);
396 View Code Duplication
	foreach ($activity as $event) {
397
		$subject = get_user($event->subject_guid);
398
		$object = get_entity($event->object_guid);
399
		$event->userDetails = get_user_block($event->subject_guid, $lang);
400
401
		if ($object instanceof ElggUser) {
402
			$event->object = get_user_block($event->object_guid, $lang);
403
			$event->object['type'] = 'user';
404
		} elseif ($object instanceof ElggWire) {
405
			$event->object['type'] = 'wire';
406
			$event->object['wire'] = wire_filter($object->description);
407
408
			$thread_id = $object->wire_thread;
409
			$reshare = $object->getEntitiesFromRelationship(array("relationship" => "reshare", "limit" => 1))[0];
410
411
			$url = "";
412
			if (!empty($reshare)) {
413
				$url = $reshare->getURL();
414
			}
415
416
			$text = "";
417
			if (!empty($reshare->title)) {
418
				$text = $reshare->title;
419
			} elseif (!empty($reshare->name)) {
420
				$text = $reshare->name;
421
			} elseif (!empty($reshare->description)) {
422
				$text = elgg_get_excerpt($reshare->description, 140);
423
			}
424
425
			$event->shareURL = $url;
426
			$event->shareText = gc_explode_translation($text, $lang);
427
		} elseif ($object instanceof ElggGroup) {
428
			$event->object['type'] = 'group';
429
			$event->object['name'] = gc_explode_translation($object->name, $lang);
430
		} elseif ($object instanceof ElggDiscussionReply) {
431
			$event->object['type'] = 'discussion-reply';
432
			$original_discussion = get_entity($object->container_guid);
433
			$event->object['name'] = $original_discussion->title;
434
			$event->object['description'] = $object->description;
435
		} elseif ($object instanceof ElggFile) {
436
			$event->object['type'] = 'file';
437
			$event->object['name'] = $object->title;
438
			$event->object['description'] = $object->description;
439
		} elseif ($object instanceof ElggObject) {
440
			$event->object['type'] = 'discussion-add';
441
442
			if($object->title){
443
				if (strpos($object->title, '"en":') !== false) {
444
					$event->object['name'] = gc_explode_translation($object->title, $lang);
445
				} else {
446
					$event->object['name'] = $object->title;
447
				}
448
			} else if($object->name){
449
				if (strpos($object->name, '"en":') !== false) {
450
					$event->object['name'] = gc_explode_translation($object->name, $lang);
451
				} else {
452
					$event->object['name'] = $object->name;
453
				}
454
			}
455
456
			if (strpos($object->description, '"en":') !== false) {
457
				$event->object['description'] = gc_explode_translation($object->description, $lang);
458
			} else {
459
				$event->object['description'] = $object->description;
460
			}
461
462
			$other = get_entity($event->object_guid);
463
			$parent = get_entity($other->container_guid);
464
			if ($parent instanceof ElggGroup) {
465
				if (!isset($event->object['name'])) {
466
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
467
				}
468
			} else {
469
				if (!isset($event->object['name'])) {
470
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
471
				}
472
			}
473
		} else {
474
			//@TODO handle any unknown events
475
			if (strpos($object->title, '"en":') !== false) {
476
				$event->object['name'] = gc_explode_translation($object->title, $lang);
477
			} else {
478
				$event->object['name'] = $object->title;
479
			}
480
481
			if (strpos($object->description, '"en":') !== false) {
482
				$event->object['description'] = gc_explode_translation($object->description, $lang);
483
			} else {
484
				$event->object['description'] = $object->description;
485
			}
486
		}
487
	}
488
489
	return $activity;
490
}
491
492 View Code Duplication
function get_group_blogs($user, $guid, $limit, $offset, $lang)
493
{
494
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
495
	if (!$user_entity) {
496
		return "User was not found. Please try a different GUID, username, or email address";
497
	}
498
	if (!$user_entity instanceof ElggUser) {
499
		return "Invalid user. Please try a different GUID, username, or email address";
500
	}
501
502
	$group = get_entity($guid);
503
	if (!$group) {
504
		return "Group was not found. Please try a different GUID";
505
	}
506
	if (!$group instanceof ElggGroup) {
507
		return "Invalid group. Please try a different GUID";
508
	}
509
510
	if (!elgg_is_logged_in()) {
511
		login($user_entity);
512
	}
513
514
	$blogs = elgg_list_entities(array(
515
		'type' => 'object',
516
		'subtype' => 'blog',
517
		'container_guid' => $guid,
518
		'limit' => $limit,
519
		'offset' => $offset,
520
		'order_by' => 'e.last_action desc'
521
	));
522
523
	return json_decode($blogs);
524
}
525
526 View Code Duplication
function get_group_discussions($user, $guid, $limit, $offset, $lang)
527
{
528
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
529
	if (!$user_entity) {
530
		return "User was not found. Please try a different GUID, username, or email address";
531
	}
532
	if (!$user_entity instanceof ElggUser) {
533
		return "Invalid user. Please try a different GUID, username, or email address";
534
	}
535
536
	$group = get_entity($guid);
537
	if (!$group) {
538
		return "Group was not found. Please try a different GUID";
539
	}
540
	if (!$group instanceof ElggGroup) {
541
		return "Invalid group. Please try a different GUID";
542
	}
543
544
	if (!elgg_is_logged_in()) {
545
		login($user_entity);
546
	}
547
548
	$discussions = elgg_list_entities(array(
549
		'type' => 'object',
550
		'subtype' => 'groupforumtopic',
551
		'container_guid' => $guid,
552
		'limit' => $limit,
553
		'offset' => $offset,
554
		'order_by' => 'e.last_action desc'
555
	));
556
557
	return json_decode($discussions);
558
}
559
560 View Code Duplication
function get_group_docs($user, $guid, $limit, $offset, $lang)
561
{
562
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
563
	if (!$user_entity) {
564
		return "User was not found. Please try a different GUID, username, or email address";
565
	}
566
	if (!$user_entity instanceof ElggUser) {
567
		return "Invalid user. Please try a different GUID, username, or email address";
568
	}
569
570
	$group = get_entity($guid);
571
	if (!$group) {
572
		return "Group was not found. Please try a different GUID";
573
	}
574
	if (!$group instanceof ElggGroup) {
575
		return "Invalid group. Please try a different GUID";
576
	}
577
578
	if (!elgg_is_logged_in()) {
579
		login($user_entity);
580
	}
581
582
	$docs = elgg_list_entities(array(
583
		'type' => 'object',
584
		'subtype' => 'etherpad',
585
		'container_guid' => $guid,
586
		'limit' => $limit,
587
		'offset' => $offset,
588
		'order_by' => 'e.last_action desc'
589
	));
590
591
	return json_decode($docs);
592
}
593
594 View Code Duplication
function get_group_events($user, $guid, $limit, $offset, $lang)
595
{
596
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
597
	if (!$user_entity) {
598
		return "User was not found. Please try a different GUID, username, or email address";
599
	}
600
	if (!$user_entity instanceof ElggUser) {
601
		return "Invalid user. Please try a different GUID, username, or email address";
602
	}
603
604
	$group = get_entity($guid);
605
	if (!$group) {
606
		return "Group was not found. Please try a different GUID";
607
	}
608
	if (!$group instanceof ElggGroup) {
609
		return "Invalid group. Please try a different GUID";
610
	}
611
612
	if (!elgg_is_logged_in()) {
613
		login($user_entity);
614
	}
615
616
	$events = elgg_list_entities(array(
617
		'type' => 'object',
618
		'subtype' => 'event_calendar',
619
		'container_guid' => $guid,
620
		'limit' => $limit,
621
		'offset' => $offset,
622
		'order_by' => 'e.last_action desc'
623
	));
624
625
	return json_decode($events);
626
}
627
628 View Code Duplication
function get_group_files($user, $guid, $limit, $offset, $lang)
629
{
630
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
631
	if (!$user_entity) {
632
		return "User was not found. Please try a different GUID, username, or email address";
633
	}
634
	if (!$user_entity instanceof ElggUser) {
635
		return "Invalid user. Please try a different GUID, username, or email address";
636
	}
637
638
	$group = get_entity($guid);
639
	if (!$group) {
640
		return "Group was not found. Please try a different GUID";
641
	}
642
	if (!$group instanceof ElggGroup) {
643
		return "Invalid group. Please try a different GUID";
644
	}
645
646
	if (!elgg_is_logged_in()) {
647
		login($user_entity);
648
	}
649
650
	$files = elgg_list_entities(array(
651
		'type' => 'object',
652
		'subtype' => 'file',
653
		'container_guid' => $guid,
654
		'limit' => $limit,
655
		'offset' => $offset,
656
		'order_by' => 'e.last_action desc'
657
	));
658
659
	return json_decode($files);
660
}
661
662
function get_groups_members($user, $guid, $limit, $offset, $lang)
663
{
664
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
665
	if (!$user_entity) {
666
		return "User was not found. Please try a different GUID, username, or email address";
667
	}
668
	if (!$user_entity instanceof ElggUser) {
669
		return "Invalid user. Please try a different GUID, username, or email address";
670
	}
671
672
	$group = get_entity($guid);
673
	if (!$group) {
674
		return "Group was not found. Please try a different GUID";
675
	}
676
	if (!$group instanceof ElggGroup) {
677
		return "Invalid group. Please try a different GUID";
678
	}
679
680
	if (!elgg_is_logged_in()) {
681
		login($user_entity);
682
	}
683
684
	$db_prefix = elgg_get_config('dbprefix');
685
	$members = elgg_list_entities_from_relationship(array(
686
		'type' => 'user',
687
		'limit' => $limit,
688
		'offset' => $offset,
689
		'relationship' => 'member',
690
		'relationship_guid' => $guid,
691
		'inverse_relationship' => true,
692
		'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
693
		'order_by' => 'u.name ASC'
694
	));
695
	$members = json_decode($members);
696
697
	$data = array();
698 View Code Duplication
	foreach ($members as $member) {
699
		$member_obj = get_user($member->guid);
700
		$member_data = get_user_block($member->guid, $lang);
701
702
		$about = "";
703
		if ($member_obj->description) {
704
			$about = strip_tags($member_obj->description, '<p>');
705
			$about = str_replace("<p>&nbsp;</p>", '', $about);
706
		}
707
708
		$member_data['about'] = $about;
709
		$data[] = $member_data;
710
	}
711
712
	return $data;
713
}
714
715
function join_group_function($user, $guid, $lang)
716
{
717
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
718
	if (!$user_entity) {
719
		return "User was not found. Please try a different GUID, username, or email address";
720
	}
721
	if (!$user_entity instanceof ElggUser) {
722
		return "Invalid user. Please try a different GUID, username, or email address";
723
	}
724
725
	$group = get_entity($guid);
726
	if (!$group) {
727
		return "Group was not found. Please try a different GUID";
728
	}
729
	if (!$group instanceof ElggGroup) {
730
		return "Invalid group. Please try a different GUID";
731
	}
732
733
	if (!elgg_is_logged_in()) {
734
		login($user_entity);
735
	}
736
737
	// access bypass for getting invisible group
738
	$ia = elgg_set_ignore_access(true);
739
	$group = get_entity($guid);
740
	elgg_set_ignore_access($ia);
741
742
	if ($user_entity && ($group instanceof ElggGroup)) {
743
744
		// join or request
745
		$join = false;
746 View Code Duplication
		if ($group->isPublicMembership() || $group->canEdit($user_entity->guid)) {
747
			// anyone can join public groups and admins can join any group
748
			$join = true;
749
		} else {
750
			if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
751
				// user has invite to closed group
752
				$join = true;
753
			}
754
		}
755
756
		if ($join) {
757
			if (groups_join_group($group, $user_entity)) {
758
759
760
				// cyu - 05/12/2016: modified to comform to the business requirements documentation
761 View Code Duplication
				if (elgg_is_active_plugin('cp_notifications')) {
762
					$user_entity = elgg_get_logged_in_user_entity();
763
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group->getGUID());
764
					add_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group->getGUID());
765
				}
766
767
				return elgg_echo("groups:joined");
768
			} else {
769
				return elgg_echo("groups:cantjoin");
770
			}
771
		} else {
772
			add_entity_relationship($user_entity->guid, 'membership_request', $group->guid);
773
774
			$owner = $group->getOwnerEntity();
775
776
			$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...
777
778
			$subject = elgg_echo('groups:request:subject', array(
779
				$user_entity->name,
780
				$group->name,
781
			), $owner->language);
782
783
			$body = elgg_echo('groups:request:body', array(
784
				$group->getOwnerEntity()->name,
785
				$user_entity->name,
786
				$group->name,
787
				$user_entity->getURL(),
788
				$url,
789
			), $owner->language);
790
791
			$params = [
792
				'action' => 'membership_request',
793
				'object' => $group,
794
			];
795
			
796
			// Notify group owner
797
			if (notify_user($owner->guid, $user_entity->getGUID(), $subject, $body, $params)) {
798
				return elgg_echo("groups:joinrequestmade");
799
			} else {
800
				return elgg_echo("groups:joinrequestnotmade");
801
			}
802
		}
803
	} else {
804
		return elgg_echo("groups:cantjoin");
805
	}
806
}
807
808
function leave_group_function($user, $guid, $lang)
809
{
810
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
811
	if (!$user_entity) {
812
		return "User was not found. Please try a different GUID, username, or email address";
813
	}
814
	if (!$user_entity instanceof ElggUser) {
815
		return "Invalid user. Please try a different GUID, username, or email address";
816
	}
817
818
	$group = get_entity($guid);
819
	if (!$group) {
820
		return "Group was not found. Please try a different GUID";
821
	}
822
	if (!$group instanceof ElggGroup) {
823
		return "Invalid group. Please try a different GUID";
824
	}
825
826
	if (!elgg_is_logged_in()) {
827
		login($user_entity);
828
	}
829
830
	elgg_set_page_owner_guid($group->guid);
831
832
	if ($user_entity && ($group instanceof ElggGroup)) {
833
		if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) {
834
			if ($group->leave($user_entity)) {
835
836
				// cyu - remove all the relationships when a user leaves a group
837
				if (elgg_is_active_plugin('cp_notifications')) {
838
839
					$group_content_arr = array('blog','bookmark','groupforumtopic','event_calendar','file',/*'hjforumtopic','hjforum',*/'photo','album','task','page','page_top','task_top','idea');
840
					$dbprefix = elgg_get_config('dbprefix');
841
842
					$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'";
843
					foreach ($group_content_arr as $grp_content_subtype)
844
						$query .= " OR es.subtype = '{$grp_content_subtype}'";
845
					$query .= " )";
846
847
					$group_contents = get_data($query);
848
849
					// unsubscribe to the group
850
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $guid);
851
					remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $guid);
852
					// unsubscribe to group content if not already
853
					foreach ($group_contents as $group_content) {
854
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_email', $group_content->content_id);
855
						remove_entity_relationship($user_entity->getGUID(), 'cp_subscribed_to_site_mail', $group_content->content_id);
856
					}
857
858
				}
859
860
				//check if user is a group operator
861
				if(check_entity_relationship($user_entity->getGUID(), 'operator', $guid)){
862
					//remove operator rights
863
					remove_entity_relationship($user_entity->getGUID(), 'operator', $guid);
864
				}
865
866
				return elgg_echo("groups:left");
867
			} else {
868
				return elgg_echo("groups:cantleave");
869
			}
870
		} else {
871
			return elgg_echo("groups:cantleave");
872
		}
873
	} else {
874
		return elgg_echo("groups:cantleave");
875
	}
876
}
877
878
function invite_group_member($profileemail, $user, $guid, $lang)
879
{
880
	$invitee = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
881
	if (!$invitee) {
882
		return "User was not found. Please try a different GUID, username, or email address";
883
	}
884
	if (!$invitee instanceof ElggUser) {
885
		return "Invalid user. Please try a different GUID, username, or email address";
886
	}
887
888
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
889
	if (!$user_entity) {
890
		return "Viewer user was not found. Please try a different GUID, username, or email address";
891
	}
892
	if (!$user_entity instanceof ElggUser) {
893
		return "Invalid viewer user. Please try a different GUID, username, or email address";
894
	}
895
896
	$group = get_entity($guid);
897
	if (!$group) {
898
		return "Group was not found. Please try a different GUID";
899
	}
900
	if (!$group instanceof ElggGroup) {
901
		return "Invalid group. Please try a different GUID";
902
	}
903
904
	if (!elgg_is_logged_in()) {
905
		login($user_entity);
906
	}
907
908
	if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
909
		return elgg_echo("groups:useralreadyinvited");
910
		continue;
911
	}
912
913
	if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
914
		// @todo add error message
915
		continue;
916
	}
917
918
	// Create relationship
919
	add_entity_relationship($group->guid, 'invited', $invitee->guid);
920
921
	$url = elgg_normalize_url("groups/invitations/$invitee->username");
922
923
	$subject = elgg_echo('groups:invite:subject', array(
924
		$invitee->name,
925
		$group->name
926
	), $invitee->language);
927
928
	$body = elgg_echo('groups:invite:body', array(
929
		$invitee->name,
930
		$user_entity->name,
931
		$group->name,
932
		$url,
933
	), $invitee->language);
934
	
935
	$params = [
936
		'action' => 'invite',
937
		'object' => $group,
938
	];
939
940
	// Send notification
941
	$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
942
943
	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...
944
		return elgg_echo("groups:userinvited");
945
	} else {
946
		return elgg_echo("groups:usernotinvited");
947
	}
948
}
949
950
function invite_group_members($profileemail, $user, $guid, $lang)
951
{
952
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
953
	if (!$user_entity) {
954
		return "Viewer user was not found. Please try a different GUID, username, or email address";
955
	}
956
	if (!$user_entity instanceof ElggUser) {
957
		return "Invalid viewer user. Please try a different GUID, username, or email address";
958
	}
959
960
	$group = get_entity($guid);
961
	if (!$group) {
962
		return "Group was not found. Please try a different GUID";
963
	}
964
	if (!$group instanceof ElggGroup) {
965
		return "Invalid group. Please try a different GUID";
966
	}
967
968
	if (!elgg_is_logged_in()) {
969
		login($user_entity);
970
	}
971
972
	$user_guids = explode(',', $profileemail);
973
	if (count($user_guids) > 0 && elgg_instanceof($group, 'group') && $group->canEdit()) {
974
		foreach ($user_guids as $guid) {
975
			$invitee = is_numeric($guid) ? get_user($guid) : (strpos($guid, '@') !== false ? get_user_by_email($guid)[0] : get_user_by_username($guid));
976
			if (!$invitee) {
977
				continue;
978
			}
979
			if (!$invitee instanceof ElggUser) {
980
				continue;
981
			}
982
983
			if (check_entity_relationship($group->guid, 'invited', $invitee->guid)) {
984
				return elgg_echo("groups:useralreadyinvited");
985
				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...
986
			}
987
988
			if (check_entity_relationship($invitee->guid, 'member', $group->guid)) {
989
				// @todo add error message
990
				continue;
991
			}
992
993
			// Create relationship
994
			add_entity_relationship($group->guid, 'invited', $invitee->guid);
995
996
			$url = elgg_normalize_url("groups/invitations/$invitee->username");
997
998
			$subject = elgg_echo('groups:invite:subject', array(
999
				$invitee->name,
1000
				$group->name
1001
			), $invitee->language);
1002
1003
			$body = elgg_echo('groups:invite:body', array(
1004
				$invitee->name,
1005
				$user_entity->name,
1006
				$group->name,
1007
				$url,
1008
			), $invitee->language);
1009
			
1010
			$params = [
1011
				'action' => 'invite',
1012
				'object' => $group,
1013
			];
1014
1015
			// Send notification
1016
			$result = notify_user($invitee->getGUID(), $group->owner_guid, $subject, $body, $params);
1017
1018
			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...
1019
				return elgg_echo("groups:userinvited");
1020
			} else {
1021
				return elgg_echo("groups:usernotinvited");
1022
			}
1023
		}
1024
	}
1025
}
1026
1027
function decline_group_invite($user, $guid, $lang)
1028
{
1029
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1030
	if (!$user_entity) {
1031
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1032
	}
1033
	if (!$user_entity instanceof ElggUser) {
1034
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1035
	}
1036
1037
	$group = get_entity($guid);
1038
	if (!$group) {
1039
		return "Group was not found. Please try a different GUID";
1040
	}
1041
	if (!$group instanceof ElggGroup) {
1042
		return "Invalid group. Please try a different GUID";
1043
	}
1044
1045
	if (!elgg_is_logged_in()) {
1046
		login($user_entity);
1047
	}
1048
1049
	// invisible groups require overriding access to delete invite
1050
	$old_access = elgg_set_ignore_access(true);
1051
	$group = get_entity($guid);
1052
	elgg_set_ignore_access($old_access);
1053
1054
	// If join request made
1055 View Code Duplication
	if (check_entity_relationship($group->guid, 'invited', $user_entity->guid)) {
1056
		remove_entity_relationship($group->guid, 'invited', $user_entity->guid);
1057
		return elgg_echo("groups:invitekilled");
1058
	}
1059
1060
	return false;
1061
}
1062