Completed
Pull Request — gcconnex (#1509)
by Nick
16:26
created

members.php ➔ get_members_colleague()   F

Complexity

Conditions 16
Paths 1000

Size

Total Lines 71
Code Lines 46

Duplication

Lines 13
Ratio 18.31 %

Importance

Changes 0
Metric Value
cc 16
eloc 46
nc 1000
nop 6
dl 13
loc 71
rs 2.4572
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
	if ($subtype) {
146
		$options['subtype'] = $subtype;
0 ignored issues
show
Bug introduced by
The variable $subtype 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...
147
	}
148
149
	$members = elgg_list_entities_from_relationship($options);
150
	$members = json_decode($members);
151
152
	$data = array();
153 View Code Duplication
	foreach ($members as $member) {
154
		$member_obj = get_user($member->guid);
155
		$member_data = get_user_block($member->guid, $lang);
156
157
		$about = "";
158
		if ($member_obj->description) {
159
			$about = strip_tags($member_obj->description, '<p>');
160
			$about = str_replace("<p>&nbsp;</p>", '', $about);
161
		}
162
163
		$member_data['about'] = $about;
164
		$data[] = $member_data;
165
	}
166
167
	return $data;
168
}
169