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

members.php ➔ get_members_colleague()   F

Complexity

Conditions 15
Paths 520

Size

Total Lines 67
Code Lines 44

Duplication

Lines 13
Ratio 19.4 %

Importance

Changes 0
Metric Value
cc 15
eloc 44
nc 520
nop 6
dl 13
loc 67
rs 3.5986
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 Member entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.members",
8
	"get_members",
9
	array(
10
		"user" => array('type' => 'string', 'required' => true),
11
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
12
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
13
		"filters" => array('type' => 'string', 'required' => false, 'default' => ""),
14
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
15
	),
16
	'Retrieves members registered on GCcollab',
17
	'POST',
18
	true,
19
	false
20
);
21
22
elgg_ws_expose_function(
23
	"get.memberscolleague",
24
	"get_members_colleague",
25
	array(
26
		"profileemail" => array('type' => 'string', 'required' => true),
27
		"user" => array('type' => 'string', 'required' => true),
28
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
29
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
30
		"filters" => array('type' => 'string', 'required' => false, 'default' => ""),
31
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
32
	),
33
	'Retrieves members who are colleagues of a given user',
34
	'POST',
35
	true,
36
	false
37
);
38
39
function get_members($user, $limit, $offset, $filters, $lang)
40
{
41
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
42
	if (!$user_entity) {
43
		return "User was not found. Please try a different GUID, username, or email address";
44
	}
45
	if (!$user_entity instanceof ElggUser) {
46
		return "Invalid user. Please try a different GUID, username, or email address";
47
	}
48
49
	if (!elgg_is_logged_in()) {
50
		login($user_entity);
51
	}
52
53
	$filter_data = json_decode($filters);
54
	if (!empty($filter_data)) {
55
		$params = array(
56
			'type' => 'user',
57
			'limit' => $limit,
58
			'offset' => $offset
59
		);
60
61
		if ($filter_data->type) {
62
			$params['metadata_name'] = 'user_type';
63
			$params['metadata_value'] = $filter_data->type;
64
		}
65
		if ($filter_data->name) {
66
			$db_prefix = elgg_get_config('dbprefix');
67
			$params['joins'] = array("JOIN {$db_prefix}users_entity ue ON e.guid = ue.guid");
68
			$params['wheres'] = array("(ue.username LIKE '%" . $filter_data->name . "%' OR ue.name LIKE '%" . $filter_data->name . "%')");
69
		}
70
71
		$members = elgg_get_entities_from_metadata($params);
72
	} else {
73
		$members = elgg_get_entities(array(
74
			'type' => 'user',
75
			'limit' => $limit,
76
			'offset' => $offset
77
		));
78
	}
79
80
	$data = array();
81 View Code Duplication
	foreach ($members as $member) {
82
		$member_obj = get_user($member->guid);
83
		$member_data = get_user_block($member->guid, $lang);
84
85
		$about = "";
86
		if ($member_obj->description) {
87
			$about = strip_tags($member_obj->description, '<p>');
88
			$about = str_replace("<p>&nbsp;</p>", '', $about);
89
		}
90
91
		$member_data['about'] = $about;
92
		$data[] = $member_data;
93
	}
94
95
	return $data;
96
}
97
98
function get_members_colleague($profileemail, $user, $limit, $offset, $filters, $lang)
99
{
100
	$user_entity = is_numeric($profileemail) ? get_user($profileemail) : (strpos($profileemail, '@') !== false ? get_user_by_email($profileemail)[0] : get_user_by_username($profileemail));
101
	if (!$user_entity) {
102
		return "User was not found. Please try a different GUID, username, or email address";
103
	}
104
	if (!$user_entity instanceof ElggUser) {
105
		return "Invalid user. Please try a different GUID, username, or email address";
106
	}
107
108
	$viewer = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
109
	if (!$viewer) {
110
		return "Viewer user was not found. Please try a different GUID, username, or email address";
111
	}
112
	if (!$viewer instanceof ElggUser) {
113
		return "Invalid viewer user. Please try a different GUID, username, or email address";
114
	}
115
116
	if (!elgg_is_logged_in()) {
117
		login($user_entity);
118
	}
119
120
	$defaults = array(
121
		'type' => 'user',
122
		'relationship' => 'friend',
123
		'relationship_guid' => $user_entity->getGUID(),
124
		'limit' => $limit,
125
		'offset' => $offset,
126
		'full_view' => false,
127
	);
128
129
	$vars = array();
130
	$filter_data = json_decode($filters);
131
	if (!empty($filter_data)) {
132
		if ($filter_data->type) {
133
			$vars['metadata_name'] = 'user_type';
134
			$vars['metadata_value'] = $filter_data->type;
135
		}
136
		if ($filter_data->name) {
137
			$db_prefix = elgg_get_config('dbprefix');
138
			$vars['joins'] = array("JOIN {$db_prefix}users_entity ue ON e.guid = ue.guid");
139
			$vars['wheres'] = array("(ue.username LIKE '%" . $filter_data->name . "%' OR ue.name LIKE '%" . $filter_data->name . "%')");
140
		}
141
	}
142
143
	$options = array_merge($defaults, $vars);
144
145
	$members = elgg_list_entities_from_relationship($options);
146
	$members = json_decode($members);
147
148
	$data = array();
149 View Code Duplication
	foreach ($members as $member) {
150
		$member_obj = get_user($member->guid);
151
		$member_data = get_user_block($member->guid, $lang);
152
153
		$about = "";
154
		if ($member_obj->description) {
155
			$about = strip_tags($member_obj->description, '<p>');
156
			$about = str_replace("<p>&nbsp;</p>", '', $about);
157
		}
158
159
		$member_data['about'] = $about;
160
		$data[] = $member_data;
161
	}
162
163
	return $data;
164
}
165