Completed
Push — Api_opt ( 47a261...24829b )
by
unknown
69:01 queued 36:29
created

blog.php ➔ get_blogposts_by_owner()   C

Complexity

Conditions 13
Paths 136

Size

Total Lines 66
Code Lines 41

Duplication

Lines 28
Ratio 42.42 %

Importance

Changes 0
Metric Value
cc 13
eloc 41
nc 136
nop 5
dl 28
loc 66
rs 5.3966
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 Blog entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.blogpost",
8
	"get_blogpost",
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 blog post & all replies based on user id and blog post id',
15
	'POST',
16
	true,
17
	false
18
);
19
20
elgg_ws_expose_function(
21
	"get.blogposts",
22
	"get_blogposts",
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 blog posts & all replies based on user id',
31
	'POST',
32
	true,
33
	false
34
);
35
36
elgg_ws_expose_function(
37
	"get.blogpostsbyowner",
38
	"get_blogposts_by_owner",
39
	array(
40
		"user" => array('type' => 'string', 'required' => true),
41
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
42
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
43
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en"),
44
		"target" => array('type' => 'string', 'required'=> false, 'default' => '')
45
	),
46
	'Retrieves blog posts & all replies based on user id',
47
	'POST',
48
	true,
49
	false
50
);
51
52
function get_blogpost($user, $guid, $lang)
53
{
54
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
55
	if (!$user_entity) {
56
		return "User was not found. Please try a different GUID, username, or email address";
57
	}
58
	if (!$user_entity instanceof ElggUser) {
59
		return "Invalid user. Please try a different GUID, username, or email address";
60
	}
61
62
	$entity = get_entity($guid);
63
	if (!isset($entity)) {
64
		return "Blog was not found. Please try a different GUID";
65
	}
66
67
	if (!elgg_is_logged_in()) {
68
		login($user_entity);
69
	}
70
71
	$blog_posts = elgg_list_entities(array(
72
		'type' => 'object',
73
		'subtype' => 'blog',
74
		'guid' => $guid
75
	));
76
	$blog_post = json_decode($blog_posts)[0];
77
78
	$blog_post->title = gc_explode_translation($blog_post->title, $lang);
79
	$blog_post->description = gc_explode_translation($blog_post->description, $lang);
80
81
	$likes = elgg_get_annotations(array(
82
		'guid' => $blog_post->guid,
83
		'annotation_name' => 'likes'
84
	));
85
	$blog_post->likes = count($likes);
86
87
	$liked = elgg_get_annotations(array(
88
		'guid' => $blog_post->guid,
89
		'annotation_owner_guid' => $user_entity->guid,
90
		'annotation_name' => 'likes'
91
	));
92
	$blog_post->liked = count($liked) > 0;
93
94
	$blog_post->comments = get_entity_comments($blog_post->guid);
95
96
	$blog_post->userDetails = get_user_block($blog_post->owner_guid, $lang);
97
98
	$group = get_entity($blog_post->container_guid);
99
	$blog_post->group = gc_explode_translation($group->name, $lang);
100
101
	if (is_callable(array($group, 'getURL'))) {
102
		$blog_post->groupURL = $group->getURL();
103
	}
104
105
	return $blog_post;
106
}
107
108
function get_blogposts($user, $limit, $offset, $filters, $lang)
109
{
110
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
111
	if (!$user_entity) {
112
		return "User was not found. Please try a different GUID, username, or email address";
113
	}
114
	if (!$user_entity instanceof ElggUser) {
115
		return "Invalid user. Please try a different GUID, username, or email address";
116
	}
117
118
	if (!elgg_is_logged_in()) {
119
		login($user_entity);
120
	}
121
122
	$filter_data = json_decode($filters);
123
	if (!empty($filter_data)) {
124
		$params = array(
125
			'type' => 'object',
126
			'subtype' => 'blog',
127
			'limit' => $limit,
128
			'offset' => $offset
129
		);
130
131 View Code Duplication
		if ($filter_data->name) {
132
			$db_prefix = elgg_get_config('dbprefix');
133
			$params['joins'] = array("JOIN {$db_prefix}objects_entity oe ON e.guid = oe.guid");
134
			$params['wheres'] = array("(oe.title LIKE '%" . $filter_data->name . "%' OR oe.description LIKE '%" . $filter_data->name . "%')");
135
		}
136
137
		$all_blog_posts = elgg_list_entities_from_metadata($params);
138
	} else {
139
		$all_blog_posts = elgg_list_entities(array(
140
			'type' => 'object',
141
			'subtype' => 'blog',
142
			'limit' => $limit,
143
			'offset' => $offset
144
		));
145
	}
146
147
	$blog_posts = json_decode($all_blog_posts);
148
149 View Code Duplication
	foreach ($blog_posts as $blog_post) {
150
		$blog_post->title = gc_explode_translation($blog_post->title, $lang);
151
		$blog_post->description = gc_explode_translation($blog_post->description, $lang);
152
153
		$likes = elgg_get_annotations(array(
154
			'guid' => $blog_post->guid,
155
			'annotation_name' => 'likes'
156
		));
157
		$blog_post->likes = count($likes);
158
159
		$liked = elgg_get_annotations(array(
160
			'guid' => $blog_post->guid,
161
			'annotation_owner_guid' => $user_entity->guid,
162
			'annotation_name' => 'likes'
163
		));
164
		$blog_post->liked = count($liked) > 0;
165
166
		$blog_post->comments = get_entity_comments($blog_post->guid);
167
168
		$blog_post->userDetails = get_user_block($blog_post->owner_guid, $lang);
169
170
		$group = get_entity($blog_post->container_guid);
171
		$blog_post->group = gc_explode_translation($group->name, $lang);
172
173
		if (is_callable(array($group, 'getURL'))) {
174
			$blog_post->groupURL = $group->getURL();
175
		}
176
	}
177
178
	return $blog_posts;
179
}
180
181
function get_blogposts_by_owner($user, $limit, $offset, $lang, $target)
182
{
183
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
184
	if (!$user_entity) {
185
		return "User was not found. Please try a different GUID, username, or email address";
186
	}
187
	if (!$user_entity instanceof ElggUser) {
188
		return "Invalid user. Please try a different GUID, username, or email address";
189
	}
190
191
	$target_entity = $user_entity;
192
	if (!empty($target)){
193
		$target_entity =  is_numeric($target) ? get_user($target) : (strpos($target, '@') !== false ? get_user_by_email($target)[0] : get_user_by_username($target));
194
		if (!$target_entity) {
195
			return "Target user was not found. Please try a different GUID, username, or email address";
196
		}
197
		if (!$target_entity instanceof ElggUser) {
198
			return "Invalid target user. Please try a different GUID, username, or email address";
199
		}
200
	}
201
202
	if (!elgg_is_logged_in()) {
203
		login($user_entity);
204
	}
205
206
	$all_blog_posts = elgg_list_entities(array(
207
		'type' => 'object',
208
		'subtype' => 'blog',
209
		'owner_guid' => $target_entity->guid,
210
		'limit' => $limit,
211
		'offset' => $offset
212
	));
213
214
	$blog_posts = json_decode($all_blog_posts);
215
216 View Code Duplication
	foreach ($blog_posts as $blog_post) {
217
		$blog_post->title = gc_explode_translation($blog_post->title, $lang);
218
		$blog_post->description = gc_explode_translation($blog_post->description, $lang);
219
220
		$likes = elgg_get_annotations(array(
221
			'guid' => $blog_post->guid,
222
			'annotation_name' => 'likes'
223
		));
224
		$blog_post->likes = count($likes);
225
226
		$liked = elgg_get_annotations(array(
227
			'guid' => $blog_post->guid,
228
			'annotation_owner_guid' => $user_entity->guid,
229
			'annotation_name' => 'likes'
230
		));
231
		$blog_post->liked = count($liked) > 0;
232
233
		$blog_post->comments = get_entity_comments($blog_post->guid);
234
235
		$blog_post->userDetails = get_user_block($blog_post->owner_guid, $lang);
236
237
		$group = get_entity($blog_post->container_guid);
238
		$blog_post->group = gc_explode_translation($group->name, $lang);
239
240
		if (is_callable(array($group, 'getURL'))) {
241
			$blog_post->groupURL = $group->getURL();
242
		}
243
	}
244
245
	return $blog_posts;
246
}
247