Completed
Pull Request — gcconnex (#1509)
by Nick
18:12
created

members.php ➔ get_members_colleague()   F

Complexity

Conditions 15
Paths 520

Size

Total Lines 65
Code Lines 42

Duplication

Lines 13
Ratio 20 %

Importance

Changes 0
Metric Value
cc 15
eloc 42
nc 520
nop 6
dl 13
loc 65
rs 3.7048
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
	$filter_data = json_decode($filters);
121
	if (!empty($filter_data)) {
122
		$params = array(
123
			'limit' => $limit,
124
			'offset' => $offset
125
		);
126
127
		if ($filter_data->type) {
128
			$params['metadata_name'] = 'user_type';
129
			$params['metadata_value'] = $filter_data->type;
130
		}
131
		if ($filter_data->name) {
132
			$db_prefix = elgg_get_config('dbprefix');
133
			$params['joins'] = array("JOIN {$db_prefix}users_entity ue ON e.guid = ue.guid");
134
			$params['wheres'] = array("(ue.username LIKE '%" . $filter_data->name . "%' OR ue.name LIKE '%" . $filter_data->name . "%')");
135
		}
136
137
		$members = $user_entity->listFriends('', $limit, $params);
0 ignored issues
show
Deprecated Code introduced by
The method ElggUser::listFriends() has been deprecated with message: 1.9 Use elgg_list_entities_from_relationship()

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...
138
	} else {
139
		$members = $user_entity->listFriends('', $limit, array(
0 ignored issues
show
Deprecated Code introduced by
The method ElggUser::listFriends() has been deprecated with message: 1.9 Use elgg_list_entities_from_relationship()

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...
140
			'limit' => $limit,
141
			'offset' => $offset
142
		));
143
	}
144
	$members = json_decode($members);
145
146
	$data = array();
147 View Code Duplication
	foreach ($members as $member) {
148
		$member_obj = get_user($member->guid);
149
		$member_data = get_user_block($member->guid, $lang);
150
151
		$about = "";
152
		if ($member_obj->description) {
153
			$about = strip_tags($member_obj->description, '<p>');
154
			$about = str_replace("<p>&nbsp;</p>", '', $about);
155
		}
156
157
		$member_data['about'] = $about;
158
		$data[] = $member_data;
159
	}
160
161
	return $data;
162
}
163