Passed
Push — gcconnex ( a660c9...3f6bf9 )
by
unknown
46s
created

message.php ➔ get_notifications_count()   C

Complexity

Conditions 8
Paths 32

Size

Total Lines 28
Code Lines 18

Duplication

Lines 28
Ratio 100 %

Importance

Changes 0
Metric Value
cc 8
eloc 18
nc 32
nop 2
dl 28
loc 28
rs 5.3846
c 0
b 0
f 0
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
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
13
	),
14
	'Retrieves a message based on user id and message id',
15
	'POST',
16
	true,
17
	false
18
);
19
20
elgg_ws_expose_function(
21
	"get.messages",
22
	"get_messages",
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
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
28
	),
29
	'Retrieves a user\'s messages based on user id',
30
	'POST',
31
	true,
32
	false
33
);
34
35
elgg_ws_expose_function(
36
	"get.messagescount",
37
	"get_messages_count",
38
	array(
39
		"user" => array('type' => 'string', 'required' => true),
40
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
41
	),
42
	'Retrieves a user\'s unread message count based on user id',
43
	'POST',
44
	true,
45
	false
46
);
47
48
elgg_ws_expose_function(
49
	"get.sentmessages",
50
	"get_sent_messages",
51
	array(
52
		"user" => array('type' => 'string', 'required' => true),
53
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
54
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
55
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
56
	),
57
	'Retrieves a user\'s sent messages based on user id',
58
	'POST',
59
	true,
60
	false
61
);
62
63
elgg_ws_expose_function(
64
	"get.sentmessagescount",
65
	"get_sent_messages_count",
66
	array(
67
		"user" => array('type' => 'string', 'required' => true),
68
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
69
	),
70
	'Retrieves a user\'s unread sent messages count based on user id',
71
	'POST',
72
	true,
73
	false
74
);
75
76
77
elgg_ws_expose_function(
78
	"get.notifications",
79
	"get_notifications",
80
	array(
81
		"user" => array('type' => 'string', 'required' => true),
82
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
83
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
84
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
85
	),
86
	'Retrieves a user\'s notification messages based on user id',
87
	'POST',
88
	true,
89
	false
90
);
91
92
elgg_ws_expose_function(
93
	"get.notificationscount",
94
	"get_notifications_count",
95
	array(
96
		"user" => array('type' => 'string', 'required' => true),
97
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
98
	),
99
	'Retrieves a user\'s unread notification message count based on user id',
100
	'POST',
101
	true,
102
	false
103
);
104
105
elgg_ws_expose_function(
106
	"send.message",
107
	"send_message",
108
	array(
109
		"fromuser" => array('type' => 'string', 'required' => true),
110
		"touser" => array('type' => 'string', 'required' => true),
111
		"message" => array('type' => 'string', 'required' => true),
112
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
113
	),
114
	'Submits a message based on "from" user id and "to" user id',
115
	'POST',
116
	true,
117
	false
118
);
119
120
elgg_ws_expose_function(
121
	"reply.message",
122
	"reply_message",
123
	array(
124
		"user" => array('type' => 'string', 'required' => true),
125
		"message" => array('type' => 'string', 'required' => true),
126
		"guid" => array('type' => 'int', 'required' => false, 'default' => 0),
127
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
128
	),
129
	'Submits a reply to a message based on user id and message id',
130
	'POST',
131
	true,
132
	false
133
);
134
135
function get_message( $user, $guid, $lang ){
136
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
137
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
138
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
139
140
	if( !elgg_is_logged_in() )
141
		login($user_entity);
142
	
143
	$messages = elgg_list_entities(array(
144
	    'type' => 'object',
145
		'subtype' => 'messages',
146
		'guid' => $guid
147
	));
148
	$message = json_decode($messages)[0];
149
	if( !$message ) return "Message was not found. Please try a different GUID";
150
	if( $message->subtype !== "messages" ) return "Invalid message. Please try a different GUID";
151
	
152
	$likes = elgg_get_annotations(array(
153
		'guid' => $message->guid,
154
		'annotation_name' => 'likes'
155
	));
156
	$message->likes = count($likes);
157
158
	$liked = elgg_get_annotations(array(
159
		'guid' => $message->guid,
160
		'annotation_owner_guid' => $user_entity->guid,
161
		'annotation_name' => 'likes'
162
	));
163
	$message->liked = count($liked) > 0;
164
165
	$messageObj = get_entity($message->guid);
166
	$message->read = intval($messageObj->readYet);
167
168
	$message->fromUserDetails = get_user_block($messageObj->fromId, $lang);
169
	$message->toUserDetails = get_user_block($messageObj->toId, $lang);
170
171
	$message->description = utf8_decode($message->description);
172
	$message->description = str_replace(array("<html>", "</html>", "<body>", "</body>"), "", $message->description);
173
174
	// $message->description2 = strip_tags(utf8_decode($message->description));
175
176
	return $message;
177
}
178
179 View Code Duplication
function get_messages( $user, $limit, $offset, $lang ){
180
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
181
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
182
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
183
184
	if( !elgg_is_logged_in() )
185
		login($user_entity);
186
187
	$messages = elgg_list_entities_from_metadata(array(
188
		"type" => "object",
189
		"subtype" => "messages",
190
		'metadata_name_value_pair' => array( 
191
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
192
			array('name' => 'fromId', 'value' => 1,  'operand' => '!=')
193
		),
194
		"limit" => $limit,
195
		"offset" => $offset
196
	));
197
	$messages = json_decode($messages);
198
199
	foreach($messages as $object){
200
		$messageObj = get_entity($object->guid);
201
		$object->read = intval($messageObj->readYet);
202
203
		$object->fromUserDetails = get_user_block($messageObj->fromId, $lang);
204
		$object->toUserDetails = get_user_block($messageObj->toId, $lang);
205
206
		$object->description = utf8_decode($object->description);
207
		$object->description = str_replace(array("<html>", "</html>", "<body>", "</body>"), "", $object->description);
208
	}
209
210
	return $messages;
211
}
212
213 View Code Duplication
function get_messages_count( $user, $lang ){
214
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
215
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
216
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
217
218
	if( !elgg_is_logged_in() )
219
		login($user_entity);
220
221
	$messages = elgg_list_entities_from_metadata(array(
222
		"type" => "object",
223
		"subtype" => "messages",
224
		'metadata_name_value_pair' => array( 
225
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
226
			array('name' => 'fromId', 'value' => 1,  'operand' => '!=')
227
		)
228
	));
229
	$messages = json_decode($messages);
230
231
	$unread_count = 0;
232
233
	foreach($messages as $object){
234
		if( $object->read ){
235
			$unread_count++;
236
		}
237
	}
238
239
	return $unread_count;
240
}
241
242
function get_sent_messages( $user, $limit, $offset, $lang ){
243
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
244
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
245
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
246
247
	if( !elgg_is_logged_in() )
248
		login($user_entity);
249
	
250
	$messages = elgg_list_entities_from_metadata(array(
251
		"type" => "object",
252
		"subtype" => "messages",
253
		"metadata_name" => "fromId",
254
		"metadata_value" => $user_entity->guid,
255
		"owner_guid" => $user_entity->guid,
256
		"limit" => $limit,
257
		"offset" => $offset
258
	));
259
	$messages = json_decode($messages);
260
261
	foreach($messages as $object){
262
		$messageObj = get_entity($object->guid);
263
		$object->read = intval($messageObj->readYet);
264
265
		$object->fromUserDetails = get_user_block($messageObj->fromId, $lang);
266
		$object->toUserDetails = get_user_block($messageObj->toId, $lang);
267
268
		$object->description = utf8_decode($object->description);
269
		$object->description = str_replace(array("<html>", "</html>", "<body>", "</body>"), "", $object->description);
270
	}
271
272
	return $messages;
273
}
274
275
function get_sent_messages_count( $user, $lang ){
276
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
277
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
278
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
279
280
	if( !elgg_is_logged_in() )
281
		login($user_entity);
282
	
283
	$messages = elgg_list_entities_from_metadata(array(
284
		"type" => "object",
285
		"subtype" => "messages",
286
		"metadata_name" => "fromId",
287
		"metadata_value" => $user_entity->guid,
288
		"owner_guid" => $user_entity->guid
289
	));
290
	$messages = json_decode($messages);
291
292
	$unread_count = 0;
293
294
	foreach($messages as $object){
295
		if( $object->read ){
296
			$unread_count++;
297
		}
298
	}
299
300
	return $unread_count;
301
}
302
303 View Code Duplication
function get_notifications( $user, $limit, $offset, $lang ){
304
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
305
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
306
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
307
308
	if( !elgg_is_logged_in() )
309
		login($user_entity);
310
	
311
	$messages = elgg_list_entities_from_metadata(array(
312
		"type" => "object",
313
		"subtype" => "messages",
314
		'metadata_name_value_pair' => array( 
315
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
316
			array('name' => 'fromId', 'value' => 1,  'operand' => '=')
317
		),
318
		"limit" => $limit,
319
		"offset" => $offset
320
	));
321
	$messages = json_decode($messages);
322
323
	foreach($messages as $object){
324
		$messageObj = get_entity($object->guid);
325
		$object->read = intval($messageObj->readYet);
326
327
		$object->fromUserDetails = get_user_block($messageObj->fromId, $lang);
328
		$object->toUserDetails = get_user_block($messageObj->toId, $lang);
329
330
		$object->description = utf8_decode($object->description);
331
		$object->description = str_replace(array("<html>", "</html>", "<body>", "</body>"), "", $object->description);
332
	}
333
334
	return $messages;
335
}
336
337 View Code Duplication
function get_notifications_count( $user, $lang ){
338
	$user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
339
 	if( !$user_entity ) return "User was not found. Please try a different GUID, username, or email address";
340
	if( !$user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
341
342
	if( !elgg_is_logged_in() )
343
		login($user_entity);
344
	
345
	$messages = elgg_list_entities_from_metadata(array(
346
		"type" => "object",
347
		"subtype" => "messages",
348
		'metadata_name_value_pair' => array( 
349
			array('name' => 'toId', 'value' => $user_entity->guid,  'operand' => '='),
350
			array('name' => 'fromId', 'value' => 1,  'operand' => '=')
351
		)
352
	));
353
	$messages = json_decode($messages);
354
355
	$unread_count = 0;
356
357
	foreach($messages as $object){
358
		if( $object->read ){
359
			$unread_count++;
360
		}
361
	}
362
363
	return $unread_count;
364
}
365
366
function send_message( $fromuser, $touser, $subject, $message, $lang ){
367
	$from_user_entity = is_numeric($fromuser) ? get_user($fromuser) : ( strpos($fromuser, '@') !== FALSE ? get_user_by_email($fromuser)[0] : get_user_by_username($fromuser) );
368
 	if( !$from_user_entity ) return "\"From\" User was not found. Please try a different GUID, username, or email address";
369
	if( !$from_user_entity instanceof ElggUser ) return "Invalid \"from\" user. Please try a different GUID, username, or email address";
370
371
	$to_user_entity = is_numeric($touser) ? get_user($touser) : ( strpos($touser, '@') !== FALSE ? get_user_by_email($touser)[0] : get_user_by_username($touser) );
372
 	if( !$to_user_entity ) return "\"To\" User was not found. Please try a different GUID, username, or email address";
373
	if( !$to_user_entity instanceof ElggUser ) return "Invalid \"to\" user. Please try a different GUID, username, or email address";
374
375
	if( trim($subject) == "" ) return "A subject must be provided to send a message";
376
	if( trim($message) == "" ) return "A message must be provided to send a message";
377
378 View Code Duplication
	if( elgg_is_active_plugin('cp_notifications') ){
379
		$messageData = array(
380
			'cp_from' => $from_user_entity,
381
			'cp_to' => $to_user_entity,
382
			'cp_topic_title' => $subject,
383
			'cp_topic_description' => $message,
384
			'cp_msg_type' => 'cp_site_msg_type',
385
			'cp_topic_url' => elgg_get_site_url() . '/messages/inbox/',
386
		);
387
		$result = elgg_trigger_plugin_hook('cp_overwrite_notification', 'all', $messageData);
388
		$result = true;
389
	} else {
390
		$result = messages_send($subject, $message, $to_user_entity->guid, $from_user_entity->guid);
391
	}
392
393
	if( !$result ) return elgg_echo("messages:error");
394
395
	return elgg_echo("messages:posted");
396
}
397
398
function reply_message( $user, $message, $guid, $lang ){
399
	$from_user_entity = is_numeric($user) ? get_user($user) : ( strpos($user, '@') !== FALSE ? get_user_by_email($user)[0] : get_user_by_username($user) );
400
 	if( !$from_user_entity ) return "User was not found. Please try a different GUID, username, or email address";
401
	if( !$from_user_entity instanceof ElggUser ) return "Invalid user. Please try a different GUID, username, or email address";
402
403
	$entity = get_entity( $guid );
404
	if( !$entity ) return "Message was not found. Please try a different GUID";
405
	if( !$entity->subtype !== "messages" ) return "Invalid message. Please try a different GUID";
406
407
	$to_user_entity = get_user( $entity->fromId );
408
409
	if( trim($message) == "" ) return "A message must be provided to send a message";
410
411 View Code Duplication
	if( elgg_is_active_plugin('cp_notifications') ){
412
		$messageData = array(
413
			'cp_from' => $from_user_entity,
414
			'cp_to' => $to_user_entity,
415
			'cp_topic_title' => $entity->title,
416
			'cp_topic_description' => $message,
417
			'cp_msg_type' => 'cp_site_msg_type',
418
			'cp_topic_url' => elgg_get_site_url() . '/messages/inbox/',
419
		);
420
		$result = elgg_trigger_plugin_hook('cp_overwrite_notification', 'all', $messageData);
421
		$result = true;
422
	} else {
423
		$result = messages_send($entity->title, $message, $to_user_entity->guid, $from_user_entity->guid, $guid);
424
	}
425
426
	if( !$result ) return elgg_echo("messages:error");
427
428
	return elgg_echo("messages:posted");
429
}
430