Passed
Push — crawler_data ( d5e76d...91acf4 )
by
unknown
20:42 queued 02:45
created

blog.php ➔ get_blogposts_by_container()   C

Complexity

Conditions 8
Paths 32

Size

Total Lines 36
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 23
nc 32
nop 5
dl 0
loc 36
rs 5.3846
c 0
b 0
f 0
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
elgg_ws_expose_function(
53
 "get.blogpostsbycolleague",
54
 "get_blogposts_by_colleague",
55
 array(
56
	"user" => array('type' => 'string', 'required' => true),
57
	"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
58
	"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
59
	"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
60
 ),
61
 'Retrieves a container\'s blogs based on user id and container guid. Used for groups, as a group\'s blogs have container_id of the group.',
62
 'POST',
63
 true,
64
 false
65
);
66
67
elgg_ws_expose_function(
68
 "get.blogpostsbycontainer",
69
 "get_blogposts_by_container",
70
 array(
71
	 "user" => array('type' => 'string', 'required' => true),
72
	 "guid" => array('type' => 'int', 'required' => true),
73
	 "limit" => array('type' => 'int', 'required' => false, 'default' => 10),
74
	 "offset" => array('type' => 'int', 'required' => false, 'default' => 0),
75
	 "lang" => array('type' => 'string', 'required' => false, 'default' => "en")
76
 ),
77
 'Retrieves a container\'s blogs based on user id and container guid. Used for groups, as a group\'s blogs have container_id of the group.',
78
 'POST',
79
 true,
80
 false
81
);
82
83
elgg_ws_expose_function(
84
 "post.blog",
85
 "post_blog",
86
 array(
87
	 "user" => array('type' => 'string', 'required' => true),
88
	 "title" => array('type' => 'string', 'required' => true),
89
	 "excerpt" => array('type' =>'string', 'required' => false, 'default' => ''),
90
	 "body" => array('type' =>'string', 'required' => true),
91
	 "container_guid" => array('type' =>'string', 'required' => false, 'default' => ''),
92
	 "comments" => array('type' =>'int', 'required' => false, 'default' => 1),
93
	 "access" => array('type' =>'int', 'required' => false, 'default' => 1),
94
	 "status" => array('type' =>'int', 'required' => false, 'default' => 0),
95
	 "lang" => array('type' => 'string', 'required' => false, 'default' => "en")
96
 ),
97
 'Posts/Saves a new blog post',
98
 'POST',
99
 true,
100
 false
101
);
102
103
function foreach_blogs($blogs, $user_entity, $lang)
104
{
105
	foreach ($blogs as $blog_post) {
106
		$blog_post->title = gc_explode_translation($blog_post->title, $lang);
107
		$blog_post->description = gc_explode_translation($blog_post->description, $lang);
108
109
		$likes = elgg_get_annotations(array(
110
			'guid' => $blog_post->guid,
111
			'annotation_name' => 'likes'
112
		));
113
		$blog_post->likes = count($likes);
114
115
		$liked = elgg_get_annotations(array(
116
			'guid' => $blog_post->guid,
117
			'annotation_owner_guid' => $user_entity->guid,
118
			'annotation_name' => 'likes'
119
		));
120
		$blog_post->liked = count($liked) > 0;
121
122
		$blog_post->comments = get_entity_comments($blog_post->guid);
123
124
		$blog_post->userDetails = get_user_block($blog_post->owner_guid, $lang);
125
126
		$group = get_entity($blog_post->container_guid);
127
		$blog_post->group = gc_explode_translation($group->name, $lang);
128
129
		if (is_callable(array($group, 'getURL'))) {
130
			$blog_post->groupURL = $group->getURL();
131
		}
132
	}
133
	return $blogs;
134
}
135
136
function get_blogpost($user, $guid, $lang)
137
{
138
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
139
	if (!$user_entity) {
140
		return "User was not found. Please try a different GUID, username, or email address";
141
	}
142
	if (!$user_entity instanceof ElggUser) {
143
		return "Invalid user. Please try a different GUID, username, or email address";
144
	}
145
146
	$entity = get_entity($guid);
147
	if (!isset($entity)) {
148
		return "Blog was not found. Please try a different GUID";
149
	}
150
151
	if (!elgg_is_logged_in()) {
152
		login($user_entity);
153
	}
154
155
	$blog_posts = elgg_list_entities(array(
156
		'type' => 'object',
157
		'subtype' => 'blog',
158
		'guid' => $guid
159
	));
160
	$blog_post = json_decode($blog_posts)[0];
161
162
	$blog_post->title = gc_explode_translation($blog_post->title, $lang);
163
	$blog_post->description = gc_explode_translation($blog_post->description, $lang);
164
165
	$likes = elgg_get_annotations(array(
166
		'guid' => $blog_post->guid,
167
		'annotation_name' => 'likes'
168
	));
169
	$blog_post->likes = count($likes);
170
171
	$liked = elgg_get_annotations(array(
172
		'guid' => $blog_post->guid,
173
		'annotation_owner_guid' => $user_entity->guid,
174
		'annotation_name' => 'likes'
175
	));
176
	$blog_post->liked = count($liked) > 0;
177
178
	$blog_post->comments = get_entity_comments($blog_post->guid);
179
180
	$blog_post->userDetails = get_user_block($blog_post->owner_guid, $lang);
181
182
	$group = get_entity($blog_post->container_guid);
183
	$blog_post->group = gc_explode_translation($group->name, $lang);
184
185
	if (is_callable(array($group, 'getURL'))) {
186
		$blog_post->groupURL = $group->getURL();
187
	}
188
189
	return $blog_post;
190
}
191
192
function get_blogposts($user, $limit, $offset, $filters, $lang)
193
{
194
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
195
	if (!$user_entity) {
196
		return "User was not found. Please try a different GUID, username, or email address";
197
	}
198
	if (!$user_entity instanceof ElggUser) {
199
		return "Invalid user. Please try a different GUID, username, or email address";
200
	}
201
202
	if (!elgg_is_logged_in()) {
203
		login($user_entity);
204
	}
205
206
	$filter_data = json_decode($filters);
207
	if (!empty($filter_data)) {
208
		$params = array(
209
			'type' => 'object',
210
			'subtype' => 'blog',
211
			'limit' => $limit,
212
			'offset' => $offset
213
		);
214
215 View Code Duplication
		if ($filter_data->name) {
216
			$db_prefix = elgg_get_config('dbprefix');
217
			$params['joins'] = array("JOIN {$db_prefix}objects_entity oe ON e.guid = oe.guid");
218
			$params['wheres'] = array("(oe.title LIKE '%" . $filter_data->name . "%' OR oe.description LIKE '%" . $filter_data->name . "%')");
219
		}
220
221
		$all_blog_posts = elgg_list_entities_from_metadata($params);
222
	} else {
223
		$all_blog_posts = elgg_list_entities(array(
224
			'type' => 'object',
225
			'subtype' => 'blog',
226
			'limit' => $limit,
227
			'offset' => $offset
228
		));
229
	}
230
231
	$blog_posts = json_decode($all_blog_posts);
232
233
	$blogs = foreach_blogs($blog_posts, $user_entity, $lang);
234
235
	return $blogs;
236
}
237
238
function get_blogposts_by_owner($user, $limit, $offset, $lang, $target)
239
{
240
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
241
	if (!$user_entity) {
242
		return "User was not found. Please try a different GUID, username, or email address";
243
	}
244
	if (!$user_entity instanceof ElggUser) {
245
		return "Invalid user. Please try a different GUID, username, or email address";
246
	}
247
248
	$target_entity = $user_entity;
249
	if (!empty($target)){
250
		$target_entity =  is_numeric($target) ? get_user($target) : (strpos($target, '@') !== false ? get_user_by_email($target)[0] : get_user_by_username($target));
251
		if (!$target_entity) {
252
			return "Target user was not found. Please try a different GUID, username, or email address";
253
		}
254
		if (!$target_entity instanceof ElggUser) {
255
			return "Invalid target user. Please try a different GUID, username, or email address";
256
		}
257
	}
258
259
	if (!elgg_is_logged_in()) {
260
		login($user_entity);
261
	}
262
263
	$all_blog_posts = elgg_list_entities(array(
264
		'type' => 'object',
265
		'subtype' => 'blog',
266
		'owner_guid' => $target_entity->guid,
267
		'limit' => $limit,
268
		'offset' => $offset
269
	));
270
271
	$blog_posts = json_decode($all_blog_posts);
272
273
	$blogs = foreach_blogs($blog_posts, $user_entity, $lang);
274
275
	return $blogs;
276
}
277
278 View Code Duplication
function get_blogposts_by_colleague($user, $limit, $offset, $lang, $target)
279
{
280
 $user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
281
 if (!$user_entity) {
282
	 return "User was not found. Please try a different GUID, username, or email address";
283
 }
284
 if (!$user_entity instanceof ElggUser) {
285
	 return "Invalid user. Please try a different GUID, username, or email address";
286
 }
287
288
 if (!elgg_is_logged_in()) {
289
	 login($user_entity);
290
 }
291
292
 $all_blog_posts = elgg_list_entities_from_relationship(array(
293
	 'type' => 'object',
294
	 'subtype' => 'blog',
295
	 'relationship' => 'friend',
296
	 'relationship_guid' => $user_entity->guid,
297
	 'relationship_join_on' => 'container_guid',
298
	 'limit' => $limit,
299
	 'offset' => $offset
300
 ));
301
302
 $blog_posts = json_decode($all_blog_posts);
303
304
 $blogs = foreach_blogs($blog_posts, $user_entity, $lang);
305
306
 return $blogs;
307
}
308
309
310
function get_blogposts_by_container($user, $guid, $limit, $offset, $lang)
311
{
312
 $user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
313
 if (!$user_entity) {
314
	 return "User was not found. Please try a different GUID, username, or email address";
315
 }
316
 if (!$user_entity instanceof ElggUser) {
317
	 return "Invalid user. Please try a different GUID, username, or email address";
318
 }
319
 if (!elgg_is_logged_in()) {
320
	 login($user_entity);
321
 }
322
323
 $group = get_entity($guid);
324
 if (!$group) {
325
	 return "Group was not found. Please try a different GUID";
326
 }
327
 if (!$group instanceof ElggGroup) {
328
	 return "Invalid group. Please try a different GUID";
329
 }
330
331
 $all_blog_posts = elgg_list_entities(array(
332
	 'type' => 'object',
333
	 'subtype' => 'blog',
334
	 'container_guid' => $guid,
335
	 'limit' => $limit,
336
	 'offset' => $offset,
337
	 'order_by' => 'e.last_action desc'
338
 ));
339
340
 $blog_posts = json_decode($all_blog_posts);
341
342
 $blogs_final = foreach_blogs($blog_posts, $user_entity, $lang);
343
344
 return $blogs_final;
345
}
346
347
function post_blog($user, $title, $excerpt, $body, $container_guid, $comments, $access, $status, $lang)
348
{
349
 $user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
350
	 if (!$user_entity) {
351
		 return "User was not found. Please try a different GUID, username, or email address";
352
	 }
353
	 if (!$user_entity instanceof ElggUser) {
354
		 return "Invalid user. Please try a different GUID, username, or email address";
355
	 }
356
	 if (!elgg_is_logged_in()) {
357
		 login($user_entity);
358
	 }
359
	 $error = FALSE;
360
	 //check required fields being not empty
361
	 $titles = json_decode($title);
362
	 $bodies = json_decode($body);
363
	 $excerpts = json_decode($excerpt);
364
	 //Check Required
365
	 if (!$titles->en && !$titles->fr) { return elgg_echo("blog:error:missing:title"); }
366
	 if (!$bodies->en && !$bodies->fr) { return elgg_echo("blog:error:missing:description");  }
367
	 if (!($titles->en && $bodies->en) && !($titles->fr && $bodies->fr)) { return "require-same-lang"; }
368
	 //Default any Missing or faulty
369
	 if (!$titles->en) { $titles->en = ''; }
370
	 if (!$titles->fr) { $titles->fr = ''; }
371
	 if (!$bodies->en) { $bodies->en = ''; }
372
	 if (!$bodies->fr) { $bodies->fr = ''; }
373
	 if (!$excerpts->en) { $excerpts->en = ''; }
374
	 if (!$excerpts->fr) { $excerpts->fr = ''; }
375
	 if ($comments != 0 && $comments != 1) { $comments = 1; }
376
	 if ($access != 0 && $access != 1 && $access != -2 ) { $access = 1; }
377
	 if ($status != 0 && $status != 1) { $status = 0; }
378
379
	 //If no group container, use user guid.
380
	 if ($container_guid==''){ $container_guid = $user_entity->guid; }
381
382
	 //Set int variables to correct
383
	 if ($status == 1) { $status = 'published'; } else { $status = 'draft'; }
384
	 if ($comments == 1) { $comments = 'On'; } else { $comments = 'Off'; }
385
	 if ($access == 1 ) { $access = ACCESS_PUBLIC; }
386
	 if ($status == 'draft') { $access = ACCESS_PRIVATE; }
387
	 $titles->en = htmlspecialchars($titles->en, ENT_QUOTES, 'UTF-8');
388
	 $titles->fr = htmlspecialchars($titles->fr, ENT_QUOTES, 'UTF-8');
389
	 $excerpts->en = elgg_get_excerpt($excerpts->en);
390
	 $excerpts->fr = elgg_get_excerpt($excerpts->fr);
391
392
	 $values = array(
393
		 'title' => JSON_encode($titles),
394
		 'title2' => '',
395
		 //'title3' => '',
396
		 'description' => JSON_encode($bodies),
397
		 'description2' => '',
398
		 'description3' => '',
399
		 'status' => $status,
400
		 'access_id' => $access,
401
		 'comments_on' => $comments,
402
		 'excerpt' => JSON_encode($excerpts),
403
		 'excerpt2' => '',
404
		 'excerpt3' => '',
405
		 'tags' => '',
406
		 'publication_date' => '',
407
		 'expiration_date' => '',
408
		 'show_owner' => 'no'
409
	 );
410
411
	 //return $values;
412
	 //return elgg_echo("test: pre blog creation");
413
	 //Create blog
414
	 $blog = new ElggBlog();
415
	 $blog->subtype = 'blog';
416
	 $blog->container_guid = $container_guid;
417
	 $new_post = TRUE;
418
419
	 $old_status = $blog->status;
420
421
	 // assign values to the entity, stopping on error.
422 View Code Duplication
	 if (!$error) {
423
		 foreach ($values as $name => $value) {
424
			 if (($name != 'title2') && ($name != 'description2') &&  ($name != 'excerpt2')){ // remove input 2 in metastring table
425
			 $blog->$name = $value;
426
			 }
427
		 }
428
	 }
429
430
	 if (!$error){
431
		 if ($blog->save()){
432
433
				 $icon_file = get_resized_image_from_uploaded_file("icon", 100, 100);
434
				 $icon_sizes = elgg_get_config("icon_sizes");
435
436 View Code Duplication
				 if (!empty($icon_file) && !empty($icon_sizes)) {
437
					 // create icon
438
					 $prefix = "blogs/" . $blog->getGUID();
439
440
					 $fh = new ElggFile();
441
					 $fh->owner_guid = $blog->getOwnerGUID();
442
443
					 foreach ($icon_sizes as $icon_name => $icon_info) {
444
						 $icon_file = get_resized_image_from_uploaded_file("icon", $icon_info["w"], $icon_info["h"], $icon_info["square"], $icon_info["upscale"]);
445
						 if (!empty($icon_file)) {
446
							 $fh->setFilename($prefix . $icon_name . ".jpg");
447
448
							 if ($fh->open("write")) {
449
								 $fh->write($icon_file);
450
								 $fh->close();
451
							 }
452
						 }
453
					 }
454
455
					 $blog->icontime = time();
456
			 }
457
			 // no longer a brand new post.
458
			 $blog->deleteMetadata('new_post');
459
460
			 $status = $blog->status;
461
				 // add to river if changing status or published, regardless of new post
462
				 // because we remove it for drafts.
463
				 if (($new_post || $old_status == 'draft' ||  $old_status == 'published') && $status == 'published') {
464
					 elgg_create_river_item(array(
465
						 'view' => 'river/object/blog/create',
466
						 'action_type' => 'create',
467
						 'subject_guid' => $blog->owner_guid,
468
						 'object_guid' => $blog->getGUID(),
469
					 ));
470
					 // we only want notifications sent when post published
471
					 elgg_trigger_event('publish', 'object', $blog);
0 ignored issues
show
Documentation introduced by
$blog is of type object<ElggBlog>, but the function expects a string|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
472
473
					 // reset the creation time for posts that move from draft to published
474
					 if ($guid) {
0 ignored issues
show
Bug introduced by
The variable $guid 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...
475
						 $blog->time_created = time();
476
						 $blog->save();
477
					 }
478
				 } elseif ($old_status == 'published' && $status == 'draft') {
479
					 elgg_delete_river(array(
480
						 'object_guid' => $blog->guid,
481
						 'action_type' => 'create',
482
					 ));
483
				 }
484
				 if ($blog->status == 'published' || $save == false) {
0 ignored issues
show
Bug introduced by
The variable $save 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...
485
					 return ($blog->getURL());
486
				 } else {
487
					 return ("blog/edit/$blog->guid");
488
				 }
489
490
		 } else {
491
			 return elgg_echo('blog:error:cannot_save');
492
		 }
493
	 }
494
}
495