Completed
Pull Request — gcconnex (#1558)
by
unknown
15:36
created

message.php ➔ get_message()   C

Complexity

Conditions 14
Paths 72

Size

Total Lines 78
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 54
nc 72
nop 4
dl 0
loc 78
rs 5.1581
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 Message entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.message",
8
	"get_message",
9
	array(
10
		"user" => array('type' => 'string', 'required' => true),
11
		"guid" => array('type' => 'int', 'required' => true),
12
		"thread" => array('type' => 'int', 'required' => false, 'default' => 0),
13
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
14
	),
15
	'Retrieves a message based on user id and message id',
16
	'POST',
17
	true,
18
	false
19
);
20
21
elgg_ws_expose_function(
22
	"get.messages",
23
	"get_messages",
24
	array(
25
		"user" => array('type' => 'string', 'required' => true),
26
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
27
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
28
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
29
	),
30
	'Retrieves a user\'s messages based on user id',
31
	'POST',
32
	true,
33
	false
34
);
35
36
elgg_ws_expose_function(
37
	"get.messagescount",
38
	"get_messages_count",
39
	array(
40
		"user" => array('type' => 'string', 'required' => true),
41
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
42
	),
43
	'Retrieves a user\'s unread message count based on user id',
44
	'POST',
45
	true,
46
	false
47
);
48
49
elgg_ws_expose_function(
50
	"get.sentmessages",
51
	"get_sent_messages",
52
	array(
53
		"user" => array('type' => 'string', 'required' => true),
54
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
55
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
56
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
57
	),
58
	'Retrieves a user\'s sent messages based on user id',
59
	'POST',
60
	true,
61
	false
62
);
63
64
elgg_ws_expose_function(
65
	"get.sentmessagescount",
66
	"get_sent_messages_count",
67
	array(
68
		"user" => array('type' => 'string', 'required' => true),
69
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
70
	),
71
	'Retrieves a user\'s unread sent messages count based on user id',
72
	'POST',
73
	true,
74
	false
75
);
76
77
78
elgg_ws_expose_function(
79
	"get.notifications",
80
	"get_notifications",
81
	array(
82
		"user" => array('type' => 'string', 'required' => true),
83
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
84
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
85
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
86
	),
87
	'Retrieves a user\'s notification messages based on user id',
88
	'POST',
89
	true,
90
	false
91
);
92
93
elgg_ws_expose_function(
94
	"get.notificationscount",
95
	"get_notifications_count",
96
	array(
97
		"user" => array('type' => 'string', 'required' => true),
98
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
99
	),
100
	'Retrieves a user\'s unread notification message count based on user id',
101
	'POST',
102
	true,
103
	false
104
);
105
106
elgg_ws_expose_function(
107
	"send.message",
108
	"send_message",
109
	array(
110
		"user" => array('type' => 'string', 'required' => true),
111
		"touser" => array('type' => 'string', 'required' => true),
112
		"subject" => array('type' => 'string', 'required' => true),
113
		"message" => array('type' => 'string', 'required' => true),
114
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
115
	),
116
	'Submits a message based on "from" user id and "to" user id',
117
	'POST',
118
	true,
119
	false
120
);
121
122
elgg_ws_expose_function(
123
	"reply.message",
124
	"reply_message",
125
	array(
126
		"user" => array('type' => 'string', 'required' => true),
127
		"message" => array('type' => 'string', 'required' => true),
128
		"guid" => array('type' => 'int', 'required' => false, 'default' => 0),
129
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
130
	),
131
	'Submits a reply to a message based on user id and message id',
132
	'POST',
133
	true,
134
	false
135
);
136
137
elgg_ws_expose_function(
138
	"read.message",
139
	"read_message",
140
	array(
141
		"user" => array('type' => 'string', 'required' => true),
142
		"guid" => array('type' => 'int', 'required' => false, 'default' => 0),
143
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
144
	),
145
	'Marks a message as read based on user id and message id',
146
	'POST',
147
	true,
148
	false
149
);
150
151
function get_message( $user, $guid, $thread, $lang ){
152
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
153
	if (!$user_entity) {
154
		return "User was not found. Please try a different GUID, username, or email address";
155
	}
156
	if (!$user_entity instanceof ElggUser) {
157
		return "Invalid user. Please try a different GUID, username, or email address";
158
	}
159
160
	if (!elgg_is_logged_in()) {
161
		login($user_entity);
162
	}
163
164
	if( $thread ){
165
		$message = elgg_list_entities(array(
166
		    'type' => 'object',
167
			'subtype' => 'messages',
168
			'guid' => $guid
169
		));
170
		$the_message = json_decode($message)[0];
171
		if( !$the_message ) return "Message was not found. Please try a different GUID";
172
		if( $the_message->subtype !== "messages" ) return "Invalid message. Please try a different GUID";
173
174
		$db_prefix = elgg_get_config('dbprefix');
175
		$without_re = str_replace("RE: ", "", $the_message->title);
176
		$all_messages = elgg_list_entities(array(
177
			"types" => "object",
178
			"subtype" => "messages",
179
			"limit" => 0,
180
			// "metadata_name_value_pairs" => array(
181
			// 	array("name" => "fromId", "value" => $user_entity->guid, "operand" => "<>")
182
			// ),
183
			"preload_owners" => true,
184
			"joins" => array("JOIN {$db_prefix}objects_entity oe ON e.guid = oe.guid"),
185
			"wheres" => array("oe.title = '".$the_message->title."' OR oe.title = 'RE: ".$the_message->title."' OR oe.title = '".$without_re."'"),
186
			'order_by' => 'e.time_created ASC'
187
		));
188
		$messages = json_decode($all_messages);
189
190
		foreach($messages as $key => $message){
191
			$messageObj = get_entity($message->guid);
192
			$message->read = intval($messageObj->readYet);
193
194
			if( $messageObj->fromId && $messageObj->toId ){
195
				$message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
196
				$message->toUserDetails = get_user_block($messageObj->toId, $lang);
197
			} else {
198
				unset($messages[$key]);
199
				continue;
200
			}
201
202
			$message->description = utf8_decode($message->description);
203
			$message->description = str_replace(array("<html>", "</html>", "<body>", "</body>", "<p>&nbsp;</p>", "<br>", "<br/>", "<br />"), "", $message->description);
204
		}
205
206
		return array_values($messages);
207
	} else {
208
		$message = elgg_list_entities(array(
209
		    'type' => 'object',
210
			'subtype' => 'messages',
211
			'guid' => $guid
212
		));
213
		$the_message = json_decode($message)[0];
214
		if( !$the_message ) return "Message was not found. Please try a different GUID";
215
		if( $the_message->subtype !== "messages" ) return "Invalid message. Please try a different GUID";
216
217
		$messageObj = get_entity($the_message->guid);
218
		$the_message->read = intval($messageObj->readYet);
219
220
		$the_message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
221
		$the_message->toUserDetails = get_user_block($messageObj->toId, $lang);
222
223
		$the_message->description = utf8_decode($the_message->description);
224
		$the_message->description = str_replace(array("<html>", "</html>", "<body>", "</body>", "<p>&nbsp;</p>", "<br>", "<br/>", "<br />"), "", $the_message->description);
225
	
226
		return $the_message;
227
	}
228
}
229
230 View Code Duplication
function get_messages($user, $limit, $offset, $lang)
231
{
232
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
233
	if (!$user_entity) {
234
		return "User was not found. Please try a different GUID, username, or email address";
235
	}
236
	if (!$user_entity instanceof ElggUser) {
237
		return "Invalid user. Please try a different GUID, username, or email address";
238
	}
239
240
	if (!elgg_is_logged_in()) {
241
		login($user_entity);
242
	}
243
244
	$messages = elgg_list_entities_from_metadata(array(
245
		"type" => "object",
246
		"subtype" => "messages",
247
		'metadata_name_value_pair' => array(
248
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
249
			array('name' => 'fromId', 'value' => 1,  'operand' => '!=')
250
		),
251
		"limit" => $limit,
252
		"offset" => $offset
253
	));
254
	$messages = json_decode($messages);
255
256
	foreach ($messages as $the_message) {
257
		$messageObj = get_entity($the_message->guid);
258
		$the_message->read = intval($messageObj->readYet);
259
260
		$the_message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
261
		$the_message->toUserDetails = get_user_block($messageObj->toId, $lang);
262
263
		$the_message->description = utf8_decode($the_message->description);
264
		$the_message->description = str_replace(array("<html>", "</html>", "<body>", "</body>", "<p>&nbsp;</p>", "<br>", "<br/>", "<br />"), "", $the_message->description);
265
	}
266
267
	return $messages;
268
}
269
270 View Code Duplication
function get_messages_count($user, $lang)
271
{
272
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
273
	if (!$user_entity) {
274
		return "User was not found. Please try a different GUID, username, or email address";
275
	}
276
	if (!$user_entity instanceof ElggUser) {
277
		return "Invalid user. Please try a different GUID, username, or email address";
278
	}
279
280
	if (!elgg_is_logged_in()) {
281
		login($user_entity);
282
	}
283
284
	$messages = elgg_list_entities_from_metadata(array(
285
		"type" => "object",
286
		"subtype" => "messages",
287
		'metadata_name_value_pair' => array(
288
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
289
			array('name' => 'fromId', 'value' => 1,  'operand' => '!=')
290
		)
291
	));
292
	$messages = json_decode($messages);
293
294
	$unread_count = 0;
295
296
	foreach ($messages as $the_message) {
297
		if ($the_message->read) {
298
			$unread_count++;
299
		}
300
	}
301
302
	return $unread_count;
303
}
304
305
function get_sent_messages($user, $limit, $offset, $lang)
306
{
307
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
308
	if (!$user_entity) {
309
		return "User was not found. Please try a different GUID, username, or email address";
310
	}
311
	if (!$user_entity instanceof ElggUser) {
312
		return "Invalid user. Please try a different GUID, username, or email address";
313
	}
314
315
	if (!elgg_is_logged_in()) {
316
		login($user_entity);
317
	}
318
319
	$messages = elgg_list_entities_from_metadata(array(
320
		"type" => "object",
321
		"subtype" => "messages",
322
		"metadata_name" => "fromId",
323
		"metadata_value" => $user_entity->guid,
324
		"owner_guid" => $user_entity->guid,
325
		"limit" => $limit,
326
		"offset" => $offset
327
	));
328
	$messages = json_decode($messages);
329
330
	foreach ($messages as $the_message) {
331
		$messageObj = get_entity($the_message->guid);
332
		$the_message->read = intval($messageObj->readYet);
333
334
		$the_message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
335
		$the_message->toUserDetails = get_user_block($messageObj->toId, $lang);
336
337
		$the_message->description = utf8_decode($the_message->description);
338
		$the_message->description = str_replace(array("<html>", "</html>", "<body>", "</body>", "<p>&nbsp;</p>", "<br>", "<br/>", "<br />"), "", $the_message->description);
339
	}
340
341
	return $messages;
342
}
343
344
function get_sent_messages_count($user, $lang)
345
{
346
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
347
	if (!$user_entity) {
348
		return "User was not found. Please try a different GUID, username, or email address";
349
	}
350
	if (!$user_entity instanceof ElggUser) {
351
		return "Invalid user. Please try a different GUID, username, or email address";
352
	}
353
354
	if (!elgg_is_logged_in()) {
355
		login($user_entity);
356
	}
357
358
	$messages = elgg_list_entities_from_metadata(array(
359
		"type" => "object",
360
		"subtype" => "messages",
361
		"metadata_name" => "fromId",
362
		"metadata_value" => $user_entity->guid,
363
		"owner_guid" => $user_entity->guid
364
	));
365
	$messages = json_decode($messages);
366
367
	$unread_count = 0;
368
369
	foreach ($messages as $the_message) {
370
		if ($the_message->read) {
371
			$unread_count++;
372
		}
373
	}
374
375
	return $unread_count;
376
}
377
378 View Code Duplication
function get_notifications($user, $limit, $offset, $lang)
379
{
380
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
381
	if (!$user_entity) {
382
		return "User was not found. Please try a different GUID, username, or email address";
383
	}
384
	if (!$user_entity instanceof ElggUser) {
385
		return "Invalid user. Please try a different GUID, username, or email address";
386
	}
387
388
	if (!elgg_is_logged_in()) {
389
		login($user_entity);
390
	}
391
392
	$messages = elgg_list_entities_from_metadata(array(
393
		"type" => "object",
394
		"subtype" => "messages",
395
		'metadata_name_value_pair' => array(
396
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
397
			array('name' => 'fromId', 'value' => 1,  'operand' => '=')
398
		),
399
		"limit" => $limit,
400
		"offset" => $offset
401
	));
402
	$messages = json_decode($messages);
403
404
	foreach ($messages as $the_message) {
405
		$messageObj = get_entity($the_message->guid);
406
		$the_message->read = intval($messageObj->readYet);
407
408
		$the_message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
409
		$the_message->toUserDetails = get_user_block($messageObj->toId, $lang);
410
411
		$the_message->description = utf8_decode($the_message->description);
412
		$the_message->description = str_replace(array("<html>", "</html>", "<body>", "</body>", "<p>&nbsp;</p>", "<br>", "<br/>", "<br />"), "", $the_message->description);
413
	}
414
415
	return $messages;
416
}
417
418 View Code Duplication
function get_notifications_count($user, $lang)
419
{
420
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
421
	if (!$user_entity) {
422
		return "User was not found. Please try a different GUID, username, or email address";
423
	}
424
	if (!$user_entity instanceof ElggUser) {
425
		return "Invalid user. Please try a different GUID, username, or email address";
426
	}
427
428
	if (!elgg_is_logged_in()) {
429
		login($user_entity);
430
	}
431
432
	$messages = elgg_list_entities_from_metadata(array(
433
		"type" => "object",
434
		"subtype" => "messages",
435
		'metadata_name_value_pair' => array(
436
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
437
			array('name' => 'fromId', 'value' => 1,  'operand' => '=')
438
		)
439
	));
440
	$messages = json_decode($messages);
441
442
	$unread_count = 0;
443
444
	foreach ($messages as $the_message) {
445
		if ($the_message->read) {
446
			$unread_count++;
447
		}
448
	}
449
450
	return $unread_count;
451
}
452
453
function send_message($user, $touser, $subject, $message, $lang)
454
{
455
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user));
456
	if (!$user_entity) {
457
		return "\"From\" User was not found. Please try a different GUID, username, or email address";
458
	}
459
	if (!$user_entity instanceof ElggUser) {
460
		return "Invalid \"from\" user. Please try a different GUID, username, or email address";
461
	}
462
463
	$to_user_entity = is_numeric($touser) ? get_user($touser) : (strpos($touser, '@') !== false ? get_user_by_email($touser)[0] : get_user_by_username($touser));
464
	if (!$to_user_entity) {
465
		return "\"To\" User was not found. Please try a different GUID, username, or email address";
466
	}
467
	if (!$to_user_entity instanceof ElggUser) {
468
		return "Invalid \"to\" user. Please try a different GUID, username, or email address";
469
	}
470
471
	if (trim($subject) == "") {
472
		return "A subject must be provided to send a message";
473
	}
474
	if (trim($message) == "") {
475
		return "A message must be provided to send a message";
476
	}
477
478
	$result = messages_send($subject, $message, $to_user_entity->guid, $user_entity->guid);
479
480
	if (!$result) {
481
		return elgg_echo("messages:error");
482
	}
483
484
	return elgg_echo("messages:posted");
485
}
486
487
function reply_message($user, $message, $guid, $lang)
488
{
489
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user));
490
 	if (!$user_entity) {
491
 		return "User was not found. Please try a different GUID, username, or email address";
492
 	}
493
	if (!$user_entity instanceof ElggUser) {
494
		return "Invalid user. Please try a different GUID, username, or email address";
495
	}
496
497
	if (!elgg_is_logged_in()) {
498
		login($user_entity);
499
	}
500
	
501
	$messages = elgg_list_entities(array(
502
	    'type' => 'object',
503
		'subtype' => 'messages',
504
		'guid' => $guid
505
	));
506
	$the_message = json_decode($messages)[0];
507
	if (!$the_message) {
508
		return "Message was not found. Please try a different GUID";
509
	}
510
	if ($the_message->subtype !== "messages") {
511
		return "Invalid message. Please try a different GUID";
512
	}
513
514
	$messageObj = get_entity($the_message->guid);
515
516
	$to_user_entity = get_user($messageObj->fromId);
517
 	if (!$to_user_entity) {
518
 		return "User was not found. Please try a different GUID, username, or email address";
519
 	}
520
	if (!$to_user_entity instanceof ElggUser) {
521
		return "Invalid user. Please try a different GUID, username, or email address";
522
	}
523
524
	if (trim($message) == "") {
525
		return "A message must be provided to send a message";
526
	}
527
528
	$result = messages_send($messageObj->title, $message, $to_user_entity->guid, $user_entity->guid, $guid);
529
	
530
	if (!$result) {
531
		return elgg_echo("messages:error");
532
	}
533
534
	return elgg_echo("messages:posted");
535
}
536
537
function read_message($user, $guid, $lang)
538
{
539
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user));
540
 	if (!$user_entity) {
541
 		return "User was not found. Please try a different GUID, username, or email address";
542
 	}
543
	if (!$user_entity instanceof ElggUser) {
544
		return "Invalid user. Please try a different GUID, username, or email address";
545
	}
546
547
	if (!elgg_is_logged_in()) {
548
		login($user_entity);
549
	}
550
	
551
	$messages = elgg_list_entities(array(
552
	    'type' => 'object',
553
		'subtype' => 'messages',
554
		'guid' => $guid
555
	));
556
	$the_message = json_decode($messages)[0];
557
	if (!$the_message) {
558
		return "Message was not found. Please try a different GUID";
559
	}
560
	if ($the_message->subtype !== "messages") {
561
		return "Invalid message. Please try a different GUID";
562
	}
563
564
	$messageObj = get_entity($the_message->guid);
565
	$messageObj->readYet = true;
566
	$result = $messageObj->save();
567
568
	return $result;
569
}
570