Completed
Pull Request — gcconnex (#1509)
by Nick
28:16 queued 13:03
created

user.php ➔ remove_colleague()   D

Complexity

Conditions 13
Paths 424

Size

Total Lines 59
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 13
eloc 34
nc 424
nop 3
dl 0
loc 59
rs 4.6162
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 User entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.user",
8
	"get_user_data",
9
	array(
10
		"profileemail" => array('type' => 'string', 'required' => true),
11
		"user" => array('type' => 'string', 'required' => false),
12
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
13
	),
14
	'Retrieves a user\'s profile information based on user id',
15
	'POST',
16
	true,
17
	false
18
);
19
20
elgg_ws_expose_function(
21
	"get.userexists",
22
	"get_user_exists",
23
	array(
24
		"user" => array('type' => 'string', 'required' => false),
25
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
26
	),
27
	'Retrieves whether a user exists based on user id',
28
	'POST',
29
	true,
30
	false
31
);
32
33
elgg_ws_expose_function(
34
	"get.useractivity",
35
	"get_user_activity",
36
	array(
37
		"profileemail" => array('type' => 'string', 'required' => true),
38
		"user" => array('type' => 'string', 'required' => true),
39
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
40
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
41
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
42
	),
43
	'Retrieves a user\'s activity information based on user id',
44
	'POST',
45
	true,
46
	false
47
);
48
49
elgg_ws_expose_function(
50
	"get.usergroups",
51
	"get_user_groups",
52
	array(
53
		"profileemail" => array('type' => 'string', 'required' => true),
54
		"user" => array('type' => 'string', 'required' => true),
55
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
56
	),
57
	'Retrieves a user\'s group information based on user id',
58
	'POST',
59
	true,
60
	false
61
);
62
63
elgg_ws_expose_function(
64
	"get.newsfeed",
65
	"get_newsfeed",
66
	array(
67
		"user" => array('type' => 'string', 'required' => true),
68
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
69
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
70
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
71
	),
72
	'Retrieves a user\'s newsfeed based on user id',
73
	'POST',
74
	true,
75
	false
76
);
77
78
elgg_ws_expose_function(
79
	"get.colleaguerequests",
80
	"get_colleague_requests",
81
	array(
82
		"user" => array('type' => 'string', 'required' => true),
83
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
84
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
85
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
86
	),
87
	'Retrieves a user\'s colleague requests based on user id',
88
	'POST',
89
	true,
90
	false
91
);
92
93
elgg_ws_expose_function(
94
	"add.colleague",
95
	"add_colleague",
96
	array(
97
		"profileemail" => array('type' => 'string', 'required' => true),
98
		"user" => array('type' => 'string', 'required' => true),
99
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
100
	),
101
	'Adds a colleague for a user based on user ids',
102
	'POST',
103
	true,
104
	false
105
);
106
107
elgg_ws_expose_function(
108
	"remove.colleague",
109
	"remove_colleague",
110
	array(
111
		"profileemail" => array('type' => 'string', 'required' => true),
112
		"user" => array('type' => 'string', 'required' => true),
113
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
114
	),
115
	'Removes a colleague for a user based on user ids',
116
	'POST',
117
	true,
118
	false
119
);
120
121
elgg_ws_expose_function(
122
	"approve.colleague",
123
	"approve_colleague",
124
	array(
125
		"profileemail" => array('type' => 'string', 'required' => true),
126
		"user" => array('type' => 'string', 'required' => true),
127
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
128
	),
129
	'Approves a colleague request for a user based on user ids',
130
	'POST',
131
	true,
132
	false
133
);
134
135
elgg_ws_expose_function(
136
	"decline.colleague",
137
	"decline_colleague",
138
	array(
139
		"profileemail" => array('type' => 'string', 'required' => true),
140
		"user" => array('type' => 'string', 'required' => true),
141
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
142
	),
143
	'Declines a colleague request for a user based on user ids',
144
	'POST',
145
	true,
146
	false
147
);
148
149
elgg_ws_expose_function(
150
	"revoke.colleague",
151
	"revoke_colleague",
152
	array(
153
		"profileemail" => array('type' => 'string', 'required' => true),
154
		"user" => array('type' => 'string', 'required' => true),
155
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
156
	),
157
	'Revokes a colleague request for a user based on user ids',
158
	'POST',
159
	true,
160
	false
161
);
162
163 View Code Duplication
function build_date($month, $year)
164
{
165
	$string = "01/";
166
	switch ($month) {
167
		case 1:
168
			$string = "01/";
169
			break;
170
		case 2:
171
			$string = "02/";
172
			break;
173
		case 3:
174
			$string = "03/";
175
			break;
176
		case 4:
177
			$string = "04/";
178
			break;
179
		case 5:
180
			$string = "05/";
181
			break;
182
		case 6:
183
			$string = "06/";
184
			break;
185
		case 7:
186
			$string = "07/";
187
			break;
188
		case 8:
189
			$string = "08/";
190
			break;
191
		case 9:
192
			$string = "09/";
193
			break;
194
		case 10:
195
			$string = "10/";
196
			break;
197
		case 11:
198
			$string = "11/";
199
			break;
200
		case 12:
201
			$string = "12/";
202
			break;
203
	}
204
	return $string . $year;
205
}
206
207
function get_user_data($profileemail, $user, $lang)
208
{
209
	$user_entity = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
210
	if (!$user_entity) {
211
		return "User was not found. Please try a different GUID, username, or email address";
212
	}
213
	if (!$user_entity instanceof ElggUser) {
214
		return "Invalid user. Please try a different GUID, username, or email address";
215
	}
216
217
	if ($user) {
218
		$viewer = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
219
		if (!$viewer) {
220
			return "Viewer user was not found. Please try a different GUID, username, or email address";
221
		}
222
		if (!$viewer instanceof ElggUser) {
223
			return "Invalid viewer user. Please try a different GUID, username, or email address";
224
		}
225
226
		$friends = $viewer->isFriendsWith($user_entity->guid);
227
228
		if (!elgg_is_logged_in()) {
229
			login($viewer);
230
		}
231
	} else {
232
		$friends = false;
233
	}
234
235
	$user = array();
236
	$user['id'] = $user_entity->guid;
237
	$user['friend'] = $friends;
238
	$user['user_type'] = $user_entity->user_type;
239
	$user['username'] = $user_entity->username;
240
	$user['displayName'] = $user_entity->name;
241
	$user['email'] = $user_entity->email;
242
	$user['profileURL'] = $user_entity->getURL();
243
	$user['iconURL'] = $user_entity->getIconURL();
244
	$user['jobTitle'] = $user_entity->job;
245
246
	switch ($user_entity->user_type) {
247
		case "federal":
248
			$user['department'] = $user_entity->federal;
249
			break;
250
		case "student":
251 View Code Duplication
		case "academic":
252
			$institution = $user_entity->institution;
253
			$user['department'] = ($institution == 'university') ? $user_entity->university : ($institution == 'college' ? $user_entity->college : $user_entity->highschool);
254
			break;
255
		case "provincial":
256
			$user['department'] = $user_entity->provincial . ' / ' . $user_entity->ministry;
257
			break;
258
		default:
259
			$user['department'] = $user_entity->{$user_entity->user_type};
260
			break;
261
	}
262
263
	$user['telephone'] = $user_entity->phone;
264
	$user['mobile'] = $user_entity->mobile;
265
	$user['website'] = $user_entity->website;
266
267
	if ($user_entity->facebook) {
268
		$user['links']['facebook'] = "http://www.facebook.com/".$user_entity->facebook;
269
	}
270
	if ($user_entity->google) {
271
		$user['links']['google'] = "http://www.google.com/".$user_entity->google;
272
	}
273
	if ($user_entity->github) {
274
		$user['links']['github'] = "https://github.com/".$user_entity->github;
275
	}
276
	if ($user_entity->twitter) {
277
		$user['links']['twitter'] = "https://twitter.com/".$user_entity->twitter;
278
	}
279
	if ($user_entity->linkedin) {
280
		$user['links']['linkedin'] = "http://ca.linkedin.com/in/".$user_entity->linkedin;
281
	}
282
	if ($user_entity->pinterest) {
283
		$user['links']['pinterest'] = "http://www.pinterest.com/".$user_entity->pinterest;
284
	}
285
	if ($user_entity->tumblr) {
286
		$user['links']['tumblr'] = "https://www.tumblr.com/blog/".$user_entity->tumblr;
287
	}
288
	if ($user_entity->instagram) {
289
		$user['links']['instagram'] = "http://instagram.com/".$user_entity->instagram;
290
	}
291
	if ($user_entity->flickr) {
292
		$user['links']['flickr'] = "http://flickr.com/".$user_entity->flickr;
293
	}
294
	if ($user_entity->youtube) {
295
		$user['links']['youtube'] = "http://www.youtube.com/".$user_entity->youtube;
296
	}
297
298
	// About Me
299
	$about_me = strip_tags($user_entity->description, '<p>');
300
	$about_me = str_replace("<p>&nbsp;</p>", '', $about_me);
301
	$user['about_me'] = $about_me;
302
303
	// Education
304
	$educationEntity = elgg_get_entities(array(
305
		'owner_guid'=>$user['id'],
306
		'subtype'=>'education',
307
		'type' => 'object',
308
		'limit' => 0
309
	));
310
	$i = 0;
311
	foreach ($educationEntity as $school) {
312
		if ($school->access_id == ACCESS_PUBLIC || $school->access_id == ACCESS_LOGGED_IN || ($friends && $school->access_id == ACCESS_FRIENDS)) {
313
			$user['education']['item_'.$i]['school_name'] = $school->school;
314
315
			$user['education']['item_'.$i]['start_date'] = build_date($school->startdate, $school->startyear);
316
317 View Code Duplication
			if ($school->ongoing == "false") {
318
				$user['education']['item_'.$i]['end_date'] = build_date($school->enddate, $school->endyear);
319
			} else {
320
				$user['education']['item_'.$i]['end_date'] = "present/actuel";
321
			}
322
			$user['education']['item_'.$i]['degree'] = $school->degree;
323
			$user['education']['item_'.$i]['field_of_study'] = $school->field;
324
			$i++;
325
		}
326
	}
327
328
	// Experience
329
	$experienceEntity = elgg_get_entities(array(
330
		'owner_guid'=>$user['id'],
331
		'subtype'=>'experience',
332
		'type' => 'object',
333
		'limit' => 0
334
	));
335
	usort($experienceEntity, "sortDate");
336
	$i = 0;
337
	foreach ($experienceEntity as $job) {
338
		if ($job->access_id == ACCESS_PUBLIC || $job->access_id == ACCESS_LOGGED_IN || ($friends && $job->access_id == ACCESS_FRIENDS)) {
339
			$jobMetadata = elgg_get_metadata(array(
340
				'guid' => $job->guid,
341
				'limit' => 0
342
			));
343
344
			$user['experience']['item_'.$i]['job_title'] = $job->title;
345
			$user['experience']['item_'.$i]['organization'] = $job->organization;
346
			$user['experience']['item_'.$i]['start_date'] = build_date($job->startdate, $job->startyear);
347 View Code Duplication
			if ($job->ongoing == "false") {
348
				$user['experience']['item_'.$i]['end_date'] = build_date($job->enddate, $job->endyear);
349
			} else {
350
				$user['experience']['item_'.$i]['end_date'] = "present/actuel";
351
			}
352
			$user['experience']['item_'.$i]['responsibilities'] = $job->responsibilities;
353
354
			$j = 0;
355
			if (is_array($job->colleagues)) {
356
				foreach ($job->colleagues as $friend) {
357
					$friendEntity = get_user($friend);
358
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["id"] = $friendEntity->guid;
359
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["username"] = $friendEntity->username;
360
361
					//get and store user display name
362
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["displayName"] = $friendEntity->name;
363
364
					//get and store URL for profile
365
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["profileURL"] = $friendEntity->getURL();
366
367
					//get and store URL of profile avatar
368
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["iconURL"] = $friendEntity->getIconURL();
369
					$j++;
370
				}
371
			} elseif (!is_null($job->colleagues)) {
372
				$friendEntity = get_user($job->colleagues);
373
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["id"] = $friendEntity->guid;
374
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["username"] = $friendEntity->username;
375
376
				//get and store user display name
377
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["displayName"] = $friendEntity->name;
378
379
				//get and store URL for profile
380
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["profileURL"] = $friendEntity->getURL();
381
382
				//get and store URL of profile avatar
383
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["iconURL"] = $friendEntity->getIconURL();
384
			}
385
			$i++;
386
		}
387
	}
388
389
	// Skills
390
	if ($user_entity->skill_access == ACCESS_PUBLIC || $user_entity->skill_access == ACCESS_LOGGED_IN || ($friends && $user_entity->skill_access == ACCESS_FRIENDS)) {
391
		$skillsEntity = elgg_get_entities(array(
392
			'owner_guid'=>$user['id'],
393
			'subtype'=>'MySkill',
394
			'type' => 'object',
395
			'limit' => 0
396
		));
397
398
		$i=0;
399 View Code Duplication
		foreach ($skillsEntity as $skill) {
400
			$user['skills']['item_'.$i]['skill'] = $skill->title;
401
402
			$j = 0;
403
			if (is_array($skill->endorsements)) {
404
				foreach ($skill->endorsements as $friend) {
405
					$friendEntity = get_user($friend);
406
					if ($friendEntity instanceof ElggUser) {
407
						$user['skills']['item_'.$i]['endorsements']["user_".$j]["id"] = $friendEntity->guid;
408
						$user['skills']['item_'.$i]['endorsements']["user_".$j]["username"] = $friendEntity->username;
409
						$user['skills']['item_'.$i]['endorsements']["user_".$j]["displayName"] = $friendEntity->name;
410
						$user['skills']['item_'.$i]['endorsements']["user_".$j]["profileURL"] = $friendEntity->getURL();
411
						$user['skills']['item_'.$i]['endorsements']["user_".$j]["iconURL"] = $friendEntity->getIconURL();
412
					}
413
					$j++;
414
				}
415
			} elseif (!is_null($skill->endorsements)) {
416
				$friendEntity = get_user($skill->endorsements);
417
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["id"] = $friendEntity->guid;
418
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["username"] = $friendEntity->username;
419
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["displayName"] = $friendEntity->name;
420
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["profileURL"] = $friendEntity->getURL();
421
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["iconURL"] = $friendEntity->getIconURL();
422
			}
423
			$i++;
424
		}
425
	}
426
427
	// Portfolio
428
	$portfolioEntity = elgg_get_entities(array(
429
		'owner_guid'=>$user['id'],
430
		'subtype'=>'portfolio',
431
		'type' => 'object',
432
		'limit' => 0
433
	));
434
	$i = 0;
435
	foreach ($portfolioEntity as $portfolio) {
436
		if ($portfolio->access_id == ACCESS_PUBLIC || $portfolio->access_id == ACCESS_LOGGED_IN || ($friends && $portfolio->access_id == ACCESS_FRIENDS)) {
437
			$user['portfolio']['item_'.$i]['title'] = $portfolio->title;
438
			$user['portfolio']['item_'.$i]['link'] = $portfolio->link;
439 View Code Duplication
			if ($portfolio->datestamped == "on") {
440
				$user['portfolio']['item_'.$i]['date'] = $portfolio->publishdate;
441
			}
442
			$user['portfolio']['item_'.$i]['description'] = $portfolio->description;
443
		}
444
	}
445
446
	$user['dateJoined'] = date("Y-m-d H:i:s", $user_entity->time_created);
447
	$user['lastActivity'] = date("Y-m-d H:i:s", $user_entity->last_action);
448
	$user['lastLogin'] = date("Y-m-d H:i:s", $user_entity->last_login);
449
450
	$options = array(
451
		'type' => 'object',
452
		'subtype' => 'thewire',
453
		'owner_guid' => $user_entity->guid,
454
		'limit' => 0
455
	);
456
	$wires = elgg_get_entities($options);
457
	$user['wires'] = count($wires);
458
459
	$options = array(
460
		'type' => 'object',
461
		'subtype' => 'blog',
462
		'owner_guid' => $user_entity->guid,
463
		'limit' => 0
464
	);
465
	$blogs = elgg_get_entities($options);
466
	$user['blogs'] = count($blogs);
467
468
	$colleagues = $user_entity->getFriends(array('limit' => 0));
469
	$user['colleagues'] = count($colleagues);
470
471
	return $user;
472
}
473
474 View Code Duplication
function get_user_exists($user, $lang)
475
{
476
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
477
478
	$valid = false;
479
	if ($user_entity instanceof ElggUser) {
480
		$is_validated = elgg_get_user_validation_status($user->guid);
481
		if ($is_validated) {
482
			$valid = true;
483
		}
484
	}
485
486
	return $valid;
487
}
488
489
function get_user_activity($profileemail, $user, $limit, $offset, $lang)
490
{
491
	$user_entity = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
492
	if (!$user_entity) {
493
		return "User was not found. Please try a different GUID, username, or email address";
494
	}
495
	if (!$user_entity instanceof ElggUser) {
496
		return "Invalid user. Please try a different GUID, username, or email address";
497
	}
498
499
	$viewer = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
500
	if (!$viewer) {
501
		return "Viewer user was not found. Please try a different GUID, username, or email address";
502
	}
503
	if (!$viewer instanceof ElggUser) {
504
		return "Invalid viewer user. Please try a different GUID, username, or email address";
505
	}
506
507
	if (!elgg_is_logged_in()) {
508
		login($viewer);
509
	}
510
511
	$all_activity = elgg_list_river(array(
512
		'subject_guid' => $user_entity->guid,
513
		'distinct' => false,
514
		'limit' => $limit,
515
		'offset' => $offset
516
	));
517
518
	$activity = json_decode($all_activity);
519
	foreach ($activity as $event) {
520
		$subject = get_user($event->subject_guid);
521
		$object = get_entity($event->object_guid);
522
		$event->userDetails = get_user_block($event->subject_guid, $lang);
523
524
		if ($object instanceof ElggUser) {
525
			$event->object = get_user_block($event->object_guid, $lang);
526
			$event->object['type'] = 'user';
527 View Code Duplication
		} elseif ($object instanceof ElggWire) {
528
			$event->object['type'] = 'wire';
529
			$event->object['wire'] = wire_filter($object->description);
530
531
			$thread_id = $object->wire_thread;
532
			$reshare = $object->getEntitiesFromRelationship(array("relationship" => "reshare", "limit" => 1))[0];
533
534
			$url = "";
535
			if (!empty($reshare)) {
536
				$url = $reshare->getURL();
537
			}
538
539
			$text = "";
540
			if (!empty($reshare->title)) {
541
				$text = $reshare->title;
542
			} elseif (!empty($reshare->name)) {
543
				$text = $reshare->name;
544
			} elseif (!empty($reshare->description)) {
545
				$text = elgg_get_excerpt($reshare->description, 140);
546
			}
547
548
			$event->shareURL = $url;
549
			$event->shareText = gc_explode_translation($text, $lang);
550
		} elseif ($object instanceof ElggGroup) {
551
			$event->object['type'] = 'group';
552
			$event->object['name'] = gc_explode_translation($object->name, $lang);
553
		} elseif ($object instanceof ElggDiscussionReply) {
554
			$event->object['type'] = 'discussion-reply';
555
			$original_discussion = get_entity($object->container_guid);
556
			$event->object['name'] = $original_discussion->title;
557
			$event->object['description'] = $object->description;
558
		} elseif ($object instanceof ElggFile) {
559
			$event->object['type'] = 'file';
560
			$event->object['name'] = $object->title;
561
			$event->object['description'] = $object->description;
562
		} elseif ($object instanceof ElggObject) {
563
			$event->object['type'] = 'discussion-add';
564
			$event->object['name'] = ($object->title) ? $object->title : $object->name;
565
			$event->object['description'] = $object->description;
566
567
			$other = get_entity($event->object_guid);
568
			$parent = get_entity($other->container_guid);
569
			if ($parent instanceof ElggGroup) {
570
				if (!isset($event->object['name'])) {
571
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
572
				}
573
			} else {
574
				if (!isset($event->object['name'])) {
575
					$event->object['name'] = ($parent->title) ? $parent->title : $parent->name;
576
				}
577
			}
578
		} else {
579
			//@TODO handle any unknown events
580
			if (strpos($object->title, '"en":') !== false) {
581
				$event->object['name'] = gc_explode_translation($object->title, $lang);
582
			} else {
583
				$event->object['name'] = $object->title;
584
			}
585
586
			if (strpos($object->description, '"en":') !== false) {
587
				$event->object['description'] = gc_explode_translation($object->description, $lang);
588
			} else {
589
				$event->object['description'] = $object->description;
590
			}
591
		}
592
	}
593
594
	return $activity;
595
}
596
597
function get_user_groups($profileemail, $user, $lang)
598
{
599
	$user_entity = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
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
607
	$viewer = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
608
	if (!$viewer) {
609
		return "Viewer user was not found. Please try a different GUID, username, or email address";
610
	}
611
	if (!$viewer instanceof ElggUser) {
612
		return "Invalid viewer user. Please try a different GUID, username, or email address";
613
	}
614
615
	if (!elgg_is_logged_in()) {
616
		login($viewer);
617
	}
618
619
	$all_groups = elgg_list_entities_from_relationship(array(
620
		'relationship' => 'member',
621
		'relationship_guid' => $user_entity->guid,
622
		'inverse_relationship' => false,
623
		'type' => 'group',
624
		'limit' => 0
625
	));
626
627
	$groups = json_decode($all_groups);
628
	foreach ($groups as $group) {
629
		$groupObj = get_entity($group->guid);
630
		$group->name = gc_explode_translation($group->name, $lang);
631
		$group->iconURL = $groupObj->getIconURL();
632
		$group->count = $groupObj->getMembers(array('count' => true));
633
		$group->description = clean_text(gc_explode_translation($group->description, $lang));
634
	}
635
636
	return $groups;
637
}
638
639
function get_newsfeed($user, $limit, $offset, $lang)
640
{
641
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
642
	if (!$user_entity) {
643
		return "User was not found. Please try a different GUID, username, or email address";
644
	}
645
	if (!$user_entity instanceof ElggUser) {
646
		return "Invalid user. Please try a different GUID, username, or email address";
647
	}
648
649
	if (!elgg_is_logged_in()) {
650
		login($user_entity);
651
	}
652
653
	$db_prefix = elgg_get_config('dbprefix');
654
655
	if ($user_entity) {
656
		// check if user exists and has friends or groups
657
		$hasfriends = $user_entity->getFriends();
658
		$hasgroups = $user_entity->getGroups();
659
		if ($hasgroups) {
660
			// loop through group guids
661
			$groups = $user_entity->getGroups(array('limit'=>0));
662
			$group_guids = array();
663
			foreach ($groups as $group) {
664
				$group_guids[] = $group->getGUID();
665
			}
666
		}
667
	} else {
668
		$hasfriends = false;
669
		$hasgroups = false;
670
		$group_guids = array();
671
	}
672
673
	$actionTypes = array('comment', 'create', 'join', 'update', 'friend', 'reply');
674
675
	if (!$hasgroups) {
676
	 	if(!$hasfriends) {
677
			// no friends and no groups :(
678
			$activity = '';
679
		} else {
680
			// has friends but no groups
681
			$optionsf = array();
682
			$optionsf['relationship_guid'] = $user_entity->guid;
683
			$optionsf['relationship'] = 'friend';
684
			$optionsf['pagination'] = true;
685
686
			// turn off friend connections
687
			// remove friend connections from action types
688
			// load user's preference
689
			$filteredItems = array($user_entity->colleagueNotif);
690
			// filter out preference
691
			$optionsf['action_types'] = array_diff($actionTypes, $filteredItems);
692
693
			$activity = json_decode(newsfeed_list_river($optionsf));
694
		}
695
	} elseif (!$hasfriends) {
696
		// if no friends but groups
697
		$guids_in = implode(',', array_unique(array_filter($group_guids)));
0 ignored issues
show
Bug introduced by
The variable $group_guids does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
698
699
		// display created content and replies and comments
700
		$optionsg = array();
701
		$optionsg['wheres'] = array("( oe.container_guid IN({$guids_in}) OR te.container_guid IN({$guids_in}) )");
702
		$optionsg['pagination'] = true;
703
		$activity = json_decode(newsfeed_list_river($optionsg));
704
	} else {
705
		// if friends and groups :3
706
		// turn off friend connections
707
		// remove friend connections from action types
708
		// load user's preference
709
		$filteredItems = array($user_entity->colleagueNotif);
710
		// filter out preference
711
		$optionsfg = array();
712
		$optionsfg['action_types'] = array_diff($actionTypes, $filteredItems);
713
714
		$guids_in = implode(',', array_unique(array_filter($group_guids)));
715
716
		// Groups + Friends activity query
717
		// This query grabs new created content and comments and replies in the groups the user is a member of *** te.container_guid grabs comments and replies
718
		$optionsfg['wheres'] = array(
719
			"( oe.container_guid IN({$guids_in})
720
         	OR te.container_guid IN({$guids_in}) )
721
        	OR rv.subject_guid IN (SELECT guid_two FROM {$db_prefix}entity_relationships WHERE guid_one=$user_entity->guid AND relationship='friend')"
722
		);
723
		$optionsfg['pagination'] = true;
724
		$activity = json_decode(newsfeed_list_river($optionsfg));
725
	}
726
727
	foreach ($activity as $event) {
728
		$subject = get_user($event->subject_guid);
729
		$object = get_entity($event->object_guid);
730
		$event->userDetails = get_user_block($event->subject_guid, $lang);
731
732
		$likes = elgg_get_annotations(array(
733
			'guid' => $event->object_guid,
734
			'annotation_name' => 'likes'
735
		));
736
		$event->likes = count($likes);
737
738
		$liked = elgg_get_annotations(array(
739
			'guid' => $event->object_guid,
740
			'annotation_owner_guid' => $user_entity->guid,
741
			'annotation_name' => 'likes'
742
		));
743
		$event->liked = count($liked) > 0;
744
745
		if ($object->description) {
746
			$object->description = str_replace("<p>&nbsp;</p>", '', $object->description);
747
		}
748
749
		if ($object instanceof ElggUser) {
750
			$event->object = get_user_block($event->object_guid, $lang);
751
			$event->object['type'] = 'user';
752 View Code Duplication
		} elseif ($object instanceof ElggWire) {
753
			$event->object['type'] = 'wire';
754
			$event->object['wire'] = wire_filter($object->description);
755
756
			$thread_id = $object->wire_thread;
757
			$reshare = $object->getEntitiesFromRelationship(array("relationship" => "reshare", "limit" => 1))[0];
758
759
			$url = "";
760
			if (!empty($reshare)) {
761
				$url = $reshare->getURL();
762
			}
763
764
			$text = "";
765
			if (!empty($reshare->title)) {
766
				$text = $reshare->title;
767
			} elseif (!empty($reshare->name)) {
768
				$text = $reshare->name;
769
			} elseif (!empty($reshare->description)) {
770
				$text = elgg_get_excerpt($reshare->description, 140);
771
			}
772
773
			$event->shareURL = $url;
774
			$event->shareText = gc_explode_translation($text, $lang);
775
		} elseif ($object instanceof ElggGroup) {
776
			$event->object['type'] = 'group';
777
			$event->object['name'] = gc_explode_translation($object->name, $lang);
778
			$event->object['description'] = gc_explode_translation($object->name, $lang);
779
780
			if (is_callable(array($object, 'getURL'))) {
781
				$event->object['url'] = $object->getURL();
782
			}
783
		} elseif ($object instanceof ElggDiscussionReply) {
784
			$event->object['type'] = 'discussion-reply';
785
			$original_discussion = get_entity($object->container_guid);
786
			$event->object['name'] = gc_explode_translation($original_discussion->title, $lang);
787
			$event->object['description'] = gc_explode_translation($object->description, $lang);
788
789
			if (is_callable(array($original_discussion, 'getURL'))) {
790
				$event->object['url'] = $original_discussion->getURL();
791
			}
792
		} elseif ($object instanceof ElggFile) {
793
			$event->object['type'] = 'file';
794
			$event->object['name'] = gc_explode_translation($object->title, $lang);
795
			$event->object['description'] = gc_explode_translation($object->description, $lang);
796
			$event->object['url'] = $object->getURL();
797
		} elseif ($object instanceof ElggObject) {
798
			$event->object['type'] = 'discussion-add';
799
800
			$name = ($object->title) ? $object->title : $object->name;
801
			if (empty(trim($name))) {
802
				$otherEntity = get_entity($object->container_guid);
803
				$name = ($otherEntity->title) ? $otherEntity->title : $otherEntity->name;
804
			}
805
			$event->object['name'] = $name;
806
807
			if (is_callable(array($object, 'getURL'))) {
808
				$event->object['url'] = $object->getURL();
809
			}
810
811
			$event->object['description'] = gc_explode_translation($object->description, $lang);
812
813
			$other = get_entity($object->container_guid);
814
			if ($other instanceof ElggGroup) {
815
				if (!isset($event->object['type'])) {
816
					$event->object['name'] = ($other->title) ? $other->title : $other->name;
817
				}
818
			} else {
819
				if (!isset($event->object['type'])) {
820
					$event->object['name'] = ($other->title) ? $other->title : $other->name;
821
				}
822
			}
823
824
			if (strpos($event->object['name'], '"en":') !== false) {
825
				$event->object['name'] = gc_explode_translation($event->object['name'], $lang);
826
			}
827
		} else {
828
			//@TODO handle any unknown events
829
			if (strpos($object->title, '"en":') !== false) {
830
				$event->object['name'] = gc_explode_translation($object->title, $lang);
831
			} else {
832
				$event->object['name'] = $object->title;
833
			}
834
835
			if (strpos($object->description, '"en":') !== false) {
836
				$event->object['description'] = gc_explode_translation($object->description, $lang);
837
			} else {
838
				$event->object['description'] = $object->description;
839
			}
840
841
			if (is_callable(array($object, 'getURL'))) {
842
				$event->object['url'] = $object->getURL();
843
			}
844
		}
845
	}
846
847
	return $activity;
848
}
849
850
function get_colleague_requests($user, $limit, $offset, $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
860
	if (!elgg_is_logged_in()) {
861
		login($user_entity);
862
	}
863
864
	$friendrequests = elgg_get_entities_from_relationship(array(
865
		"type" => "user",
866
		"relationship" => "friendrequest",
867
		"relationship_guid" => $user_entity->getGUID(),
868
		"inverse_relationship" => true,
869
		"limit" => $limit,
870
		"offset" => $offset
871
	));
872
873
	$data = array();
874
	foreach ($friendrequests as $member) {
875
		$member_obj = get_user($member->guid);
876
		$member_data = get_user_block($member->guid, $lang);
877
878
		$about = "";
879
		if ($member_obj->description) {
880
			$about = strip_tags($member_obj->description, '<p>');
881
			$about = str_replace("<p>&nbsp;</p>", '', $about);
882
		}
883
884
		$member_data['about'] = $about;
885
		$data[] = $member_data;
886
	}
887
888
	return $data;
889
}
890
891
function add_colleague($profileemail, $user, $lang)
892
{
893
	$friend = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
894
	if (!$friend) {
895
		return "User was not found. Please try a different GUID, username, or email address";
896
	}
897
	if (!$friend instanceof ElggUser) {
898
		return "Invalid user. Please try a different GUID, username, or email address";
899
	}
900
901
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
902
	if (!$user_entity) {
903
		return "Viewer user was not found. Please try a different GUID, username, or email address";
904
	}
905
	if (!$user_entity instanceof ElggUser) {
906
		return "Invalid viewer user. Please try a different GUID, username, or email address";
907
	}
908
909
	if (!elgg_is_logged_in()) {
910
		login($user_entity);
911
	}
912
913
	//Now we need to attempt to create the relationship
914
	if (empty($user_entity) || empty($friend)) {
915
		return elgg_echo("friend_request:add:failure");
916
	} else {
917
		//New for v1.1 - If the other user is already a friend (fan) of this user we should auto-approve the friend request...
918
		if (check_entity_relationship($friend->getGUID(), "friend", $user_entity->getGUID())) {
919
			try {
920
				$user_entity->addFriend($friend->getGUID());
921
				return true;
922
			} catch (Exception $e) {
923
				return elgg_echo("friends:add:failure", array($friend->name));
924
			}
925
		} elseif (check_entity_relationship($friend->getGUID(), "friendrequest", $user_entity->getGUID())) {
926
			// Check if your potential friend already invited you, if so make friends
927
			if (remove_entity_relationship($friend->getGUID(), "friendrequest", $user_entity->getGUID())) {
928
929
				// Friends mean reciprical...
930
				$user_entity->addFriend($friend->getGUID());
931
				$friend->addFriend($user_entity->getGUID());
932
933
				$n_result = notify_user(
934
					$friend->guid,
935
					$user_entity->guid,
936
					elgg_echo('friend:newfriend:subject', array(
937
						$user_entity->name,
938
						$user_entity->name,
939
					)),
940
					elgg_echo("friend:newfriend:body", array(
941
						$user_entity->name,
942
						$user_entity->getURL(),
943
						elgg_get_site_url().'notifications/personal/',
944
945
						$user_entity->name,
946
						$user_entity->getURL(),
947
						elgg_get_site_url().'notifications/personal/',
948
					))
949
				);
950
951
				// add to river
952
				elgg_create_river_item(array(
953
					"view" => "river/relationship/friend/create",
954
					"action_type" => "friend",
955
					"subject_guid" => $user_entity->getGUID(),
956
					"object_guid" => $friend->getGUID(),
957
				));
958
				elgg_create_river_item(array(
959
					"view" => "river/relationship/friend/create",
960
					"action_type" => "friend",
961
					"subject_guid" => $friend->getGUID(),
962
					"object_guid" => $user_entity->getGUID(),
963
				));
964
965
				return true;
966
			} else {
967
				return elgg_echo("friend_request:approve:fail", array($friend->name));
968
			}
969
		} else {
970
			try {
971 View Code Duplication
				if (!add_entity_relationship($user_entity->getGUID(), "friendrequest", $friend->getGUID())) {
972
					return elgg_echo("friend_request:add:exists", array($friend->name));
973
				}
974
			} catch (Exception $e) {	//register_error calls insert_data which CAN raise Exceptions.
975
				return elgg_echo("friend_request:add:exists", array($friend->name));
976
			}
977
		}
978
	}
979
}
980
981
function remove_colleague($profileemail, $user, $lang)
982
{
983
	$friend = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
984
	if (!$friend) {
985
		return "User was not found. Please try a different GUID, username, or email address";
986
	}
987
	if (!$friend instanceof ElggUser) {
988
		return "Invalid user. Please try a different GUID, username, or email address";
989
	}
990
991
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
992
	if (!$user_entity) {
993
		return "Viewer user was not found. Please try a different GUID, username, or email address";
994
	}
995
	if (!$user_entity instanceof ElggUser) {
996
		return "Invalid viewer user. Please try a different GUID, username, or email address";
997
	}
998
999
	if (!elgg_is_logged_in()) {
1000
		login($user_entity);
1001
	}
1002
1003
	if (!empty($friend)) {
1004
		try {
1005
			$user_entity->removeFriend($friend->getGUID());
1006
1007
			// remove river items
1008
			elgg_delete_river(array(
1009
				"view" => "river/relationship/friend/create",
1010
				"subject_guid" => $user_entity->getGUID(),
1011
				"object_guid" => $friend->getGUID()
1012
			));
1013
1014
			try {
1015
				//V1.1 - Old relationships might not have the 2 as friends...
1016
				$friend->removeFriend($user_entity->getGUID());
1017
1018
				// remove river items
1019
				elgg_delete_river(array(
1020
					"view" => "river/relationship/friend/create",
1021
					"subject_guid" => $friend->getGUID(),
1022
					"object_guid" => $user_entity->getGUID()
1023
				));
1024
1025
				// cyu - remove the relationship (if applicable) for the subscribed to user
1026
				remove_entity_relationship($user_entity->guid, 'cp_subscribed_to_email', $friend->getGUID());
1027
				remove_entity_relationship($user_entity->guid, 'cp_subscribe_to_site_mail', $friend->getGUID());
1028
1029
				return true;
1030
			} catch (Exception $e) {
1031
				// do nothing
1032
			}
1033
		} catch (Exception $e) {
1034
			return elgg_echo("friends:remove:failure", array($friend->name));
1035
		}
1036
	} else {
1037
		return elgg_echo("friends:remove:failure", array($friend->getGUID()));
1038
	}
1039
}
1040
1041
function approve_colleague($profileemail, $user, $lang)
1042
{
1043
	$friend = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
1044
	if (!$friend) {
1045
		return "User was not found. Please try a different GUID, username, or email address";
1046
	}
1047
	if (!$friend instanceof ElggUser) {
1048
		return "Invalid user. Please try a different GUID, username, or email address";
1049
	}
1050
1051
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1052
	if (!$user_entity) {
1053
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1054
	}
1055
	if (!$user_entity instanceof ElggUser) {
1056
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1057
	}
1058
1059
	if (!elgg_is_logged_in()) {
1060
		login($user_entity);
1061
	}
1062
1063
	if (!empty($friend)) {
1064
		if (remove_entity_relationship($friend->getGUID(), "friendrequest", $user_entity->getGUID())) {
1065
			$user_entity->addFriend($friend->getGUID());
1066
			$friend->addFriend($user_entity->getGUID());			//Friends mean reciprical...
1067
1068
			// notify the user about the acceptance
1069
			$subject = elgg_echo("friend_request:approve:subject", array($user_entity->name, $user_entity->name));
1070
			$message = elgg_echo("friend_request:approve:message", array($user_entity->name, $user_entity->getURL(), $user_entity->name, $user_entity->getURL()));
1071
1072
			$params = array(
1073
				"action" => "add_friend",
1074
				"object" => $user_entity
1075
			);
1076
1077
			// cyu - 04/04/2016: use new notification system hook instead (if activated)
1078 View Code Duplication
			if (elgg_is_active_plugin('cp_notifications')) {
1079
				$message = array(
1080
					'object' => $user_entity,
1081
					'cp_request_guid' => $friend->getGUID(),
1082
					'cp_approver' => $user_entity->name,
1083
					'cp_approver_profile' => $user_entity->getURL(),
1084
					'cp_msg_type' => 'cp_friend_approve'
1085
				);
1086
				$result = elgg_trigger_plugin_hook('cp_overwrite_notification', 'all', $message);
1087
			} else {
1088
				notify_user($friend->getGUID(), $user_entity->getGUID(), $subject, $message, $params);
1089
			}
1090
1091
			// add to river
1092
			elgg_create_river_item(array(
1093
				"view" => "river/relationship/friend/create",
1094
				"action_type" => "friend",
1095
				"subject_guid" => $user_entity->getGUID(),
1096
				"object_guid" => $friend->getGUID(),
1097
			));
1098
			elgg_create_river_item(array(
1099
				"view" => "river/relationship/friend/create",
1100
				"action_type" => "friend",
1101
				"subject_guid" => $friend->getGUID(),
1102
				"object_guid" => $user_entity->getGUID(),
1103
			));
1104
1105
			return elgg_echo("friend_request:approve:successful", array($friend->name));
1106
		} else {
1107
			return elgg_echo("friend_request:approve:fail", array($friend->name));
1108
		}
1109
	}
1110
}
1111
1112
function decline_colleague($profileemail, $user, $lang)
1113
{
1114
	$friend = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
1115
	if (!$friend) {
1116
		return "User was not found. Please try a different GUID, username, or email address";
1117
	}
1118
	if (!$friend instanceof ElggUser) {
1119
		return "Invalid user. Please try a different GUID, username, or email address";
1120
	}
1121
1122
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1123
	if (!$user_entity) {
1124
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1125
	}
1126
	if (!$user_entity instanceof ElggUser) {
1127
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1128
	}
1129
1130
	if (!elgg_is_logged_in()) {
1131
		login($user_entity);
1132
	}
1133
1134
	if (!empty($friend)) {
1135
		if (remove_entity_relationship($friend->getGUID(), "friendrequest", $user_entity->getGUID())) {
1136
			$subject = elgg_echo("friend_request:decline:subject", array($user_entity->name));
1137
			$message = elgg_echo("friend_request:decline:message", array($friend->name, $user_entity->name));
1138
1139
			return elgg_echo("friend_request:decline:success");
1140
		} else {
1141
			return elgg_echo("friend_request:decline:fail");
1142
		}
1143
	}
1144
}
1145
1146
function revoke_colleague($profileemail, $user, $lang)
1147
{
1148
	$friend = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
1149
	if (!$friend) {
1150
		return "User was not found. Please try a different GUID, username, or email address";
1151
	}
1152
	if (!$friend instanceof ElggUser) {
1153
		return "Invalid user. Please try a different GUID, username, or email address";
1154
	}
1155
1156
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
1157
	if (!$user_entity) {
1158
		return "Viewer user was not found. Please try a different GUID, username, or email address";
1159
	}
1160
	if (!$user_entity instanceof ElggUser) {
1161
		return "Invalid viewer user. Please try a different GUID, username, or email address";
1162
	}
1163
1164
	if (!elgg_is_logged_in()) {
1165
		login($user_entity);
1166
	}
1167
1168
	if (!empty($friend)) {
1169
		if (remove_entity_relationship($user_entity->getGUID(), "friendrequest", $friend->getGUID())) {
1170
			return elgg_echo("friend_request:revoke:success");
1171
		} else {
1172
			return elgg_echo("friend_request:revoke:fail");
1173
		}
1174
	}
1175
}
1176