Completed
Push — api-test ( 6486f1...2894cc )
by
unknown
27:43
created

event.php ➔ get_see_calendar()   C

Complexity

Conditions 7
Paths 24

Size

Total Lines 30
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 18
nc 24
nop 3
dl 0
loc 30
rs 6.7272
c 0
b 0
f 0
1
<?php
2
/*
3
 * Exposes API endpoints for Event entities
4
 */
5
6
elgg_ws_expose_function(
7
	"get.event",
8
	"get_event",
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 an event based on user id and event id',
15
	'POST',
16
	true,
17
	false
18
);
19
20
elgg_ws_expose_function(
21
	"event.add.calendar",
22
	"event_add_calendar",
23
	array(
24
		"user" => array('type' => 'string', 'required' => true),
25
		"guid" => array('type' => 'int', 'required' => true),
26
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
27
	),
28
	'Retrieves an event based on user id and event id',
29
	'POST',
30
	true,
31
	false
32
);
33
34
elgg_ws_expose_function(
35
	"get.events",
36
	"get_events",
37
	array(
38
		"user" => array('type' => 'string', 'required' => true),
39
		"from" => array('type' => 'string', 'required' => false, 'default' => ""),
40
		"to" => array('type' => 'string', 'required' => false, 'default' => ""),
41
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
42
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
43
	),
44
	'Retrieves an event based on user id and event id',
45
	'POST',
46
	true,
47
	false
48
);
49
50
elgg_ws_expose_function(
51
	"get.eventsbyowner",
52
	"get_events_by_owner",
53
	array(
54
		"user" => array('type' => 'string', 'required' => true),
55
		"from" => array('type' => 'string', 'required' => false, 'default' => ""),
56
		"to" => array('type' => 'string', 'required' => false, 'default' => ""),
57
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
58
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
59
	),
60
	'Retrieves an event based on user id and event id',
61
	'POST',
62
	true,
63
	false
64
);
65
66
elgg_ws_expose_function(
67
	"get.eventsbycolleagues",
68
	"get_events_by_colleagues",
69
	array(
70
		"user" => array('type' => 'string', 'required' => true),
71
		"from" => array('type' => 'string', 'required' => false, 'default' => ""),
72
		"to" => array('type' => 'string', 'required' => false, 'default' => ""),
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 an event based on user id and event id',
78
	'POST',
79
	true,
80
	false
81
);
82
83
elgg_ws_expose_function(
84
	"get.seecalendar",
85
	"get_see_calendar",
86
	array(
87
		"user" => array('type' => 'string', 'required' => true),
88
		"guid" => array('type' => 'int', 'required' => true),
89
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
90
	),
91
	'Retrieves an event based on user id and event id',
92
	'POST',
93
	true,
94
	false
95
);
96
function get_event($user, $guid, $lang)
97
{
98
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
99
	if (!$user_entity) {
100
		return "User was not found. Please try a different GUID, username, or email address";
101
	}
102
	if (!$user_entity instanceof ElggUser) {
103
		return "Invalid user. Please try a different GUID, username, or email address";
104
	}
105
106
	if (!elgg_is_logged_in()) {
107
		login($user_entity);
108
	}
109
110
	$entity = get_entity($guid);
111
	if (!$entity) {
112
		return "Event was not found. Please try a different GUID";
113
	}
114
	if (!$entity->type !== "event_calendar") {
0 ignored issues
show
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
115
		//return "Invalid event. Please try a different GUID";
116
	}
117
118
	$events = elgg_list_entities(array(
119
		'type' => 'object',
120
		'subtype' => 'event_calendar',
121
		'guid' => $guid
122
	));
123
	$event = json_decode($events)[0];
124
125
	$likes = elgg_get_annotations(array(
126
		'guid' => $event->guid,
127
		'annotation_name' => 'likes'
128
	));
129
	$event->likes = count($likes);
130
131
	$liked = elgg_get_annotations(array(
132
		'guid' => $event->guid,
133
		'annotation_owner_guid' => $user_entity->guid,
134
		'annotation_name' => 'likes'
135
	));
136
137
	$event->liked = count($liked) > 0;
138
139
	$event->title = gc_explode_translation($event->title, $lang);
140
	$event->description = gc_explode_translation($event->description, $lang);
141
142
	$event->userDetails = get_user_block($event->owner_guid, $lang);
143
	$eventObj = get_entity($event->guid);
144
	$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
145
	$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
146
	$event->organizer = $eventObj->contact;
147
	$event->phone = $eventObj->contact_phone;
148
	$event->email = $eventObj->contact_email;
149
	$event->fee = $eventObj->fees;
150
	$event->eventLang = $eventObj->language;
151
	$event->location = $eventObj->venue;
152
	if ($eventObj->group_guid){
153
		$group = get_entity($eventObj->group_guid);
154
		$event->group = gc_explode_translation($group->name, $lang);
155
		$event->groupGUID = $eventObj->group_guid;
156
	}
157
158
159
	return $event;
160
}
161
162
function get_events($user, $from, $to, $limit, $offset, $lang)
163
{
164
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
165
	if (!$user_entity) {
166
		return "User was not found. Please try a different GUID, username, or email address";
167
	}
168
	if (!$user_entity instanceof ElggUser) {
169
		return "Invalid user. Please try a different GUID, username, or email address";
170
	}
171
172
	if (!elgg_is_logged_in()) {
173
		login($user_entity);
174
	}
175
176
	$params = array(
177
		'type' => 'object',
178
		'subtype' => 'event_calendar',
179
		'limit' => $limit,
180
		'offset' => $offset,
181
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer'))
182
	);
183
184 View Code Duplication
	if ($from) {
185
		$params['metadata_name_value_pairs'][] = array(
186
			'name' => 'start_date',
187
			'value' => strtotime($from),
188
			'operand' => '>='
189
		);
190
	}
191 View Code Duplication
	if ($to) {
192
		$params['metadata_name_value_pairs'][] = array(
193
			'name' => 'end_date',
194
			'value' => strtotime($to),
195
			'operand' => '<='
196
		);
197
	}
198
199
	$all_events = elgg_list_entities_from_metadata($params);
200
	$events = json_decode($all_events);
201
	$now = time();
202
	$one_day = 60*60*24;
203
204
	foreach ($events as $event) {
205
206
		$eventObj = get_entity($event->guid);
207
		if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
208
			
209
			$options = array(
210
				'type' => 'user',
211
				'relationship' => 'personal_event',
212
				'relationship_guid' => $event->guid,
213
				'inverse_relationship' => true,
214
				'limit' => false,
215
				'count' => true,
216
			);
217
218
			$count = elgg_get_entities_from_relationship($options);
219
			if ($count == 1) {
220
				$event->in_calendar = elgg_echo('event_calendar:personal_event_calendars_link_one');
221
			} else {
222
				$event->in_calendar = elgg_echo('event_calendar:personal_event_calendars_link', array($count));
223
			}
224
225
			$likes = elgg_get_annotations(array(
226
				'guid' => $event->guid,
227
				'annotation_name' => 'likes'
228
			));
229
			$event->likes = count($likes);
230
231
			$liked = elgg_get_annotations(array(
232
				'guid' => $event->guid,
233
				'annotation_owner_guid' => $user_entity->guid,
234
				'annotation_name' => 'likes'
235
			));
236
			$event->liked = count($liked) > 0;
237
238
			$event->title = gc_explode_translation($event->title, $lang);
239
			$event->description = gc_explode_translation($event->description, $lang);
240
			$event->userDetails = get_user_block($event->owner_guid, $lang);
241
			$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
242
			$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
243
	
244
			$event->location = $eventObj->venue;
245
246
			if ($eventObj->group_guid){
247
				$group = get_entity($eventObj->group_guid);
248
				$event->group = gc_explode_translation($group->name, $lang);
249
				$event->groupGUID = $eventObj->group_guid;
250
			}
251
		}
252
	}
253
	return $events;
254
}
255
256
function get_events_by_owner($user, $from, $to, $limit, $lang)
257
{
258
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
259
	if (!$user_entity) {
260
		return "User was not found. Please try a different GUID, username, or email address";
261
	}
262
	if (!$user_entity instanceof ElggUser) {
263
		return "Invalid user. Please try a different GUID, username, or email address";
264
	}
265
266
	if (!elgg_is_logged_in()) {
267
		login($user_entity);
268
	}
269
270
	$params = array(
271
		'type' => 'object',
272
		'subtype' => 'event_calendar',
273
		'limit' => $limit,
274
		'offset' => $offset,
0 ignored issues
show
Bug introduced by
The variable $offset 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...
275
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer')),
276
		'filter' => 'mine',
277
		'relationship' => 'personal_event',
278
		'relationship_guid' => $user_entity->entity,
279
	);
280
281 View Code Duplication
	if ($from) {
282
		$params['metadata_name_value_pairs'][] = array(
283
			'name' => 'start_date',
284
			'value' => strtotime($from),
285
			'operand' => '>='
286
		);
287
	}
288 View Code Duplication
	if ($to) {
289
		$params['metadata_name_value_pairs'][] = array(
290
			'name' => 'end_date',
291
			'value' => strtotime($to),
292
			'operand' => '<='
293
		);
294
	}
295
296
	$all_events = elgg_list_entities_from_relationship($params);
297
298
	$events = json_decode($all_events);
299
	$now = time();
300
	$one_day = 60*60*24;
301 View Code Duplication
	foreach ($events as $event) {
302
303
		$eventObj = get_entity($event->guid);
304
		if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
305
		
306
			$likes = elgg_get_annotations(array(
307
				'guid' => $event->guid,
308
				'annotation_name' => 'likes'
309
			));
310
			$event->likes = count($likes);
311
312
			$liked = elgg_get_annotations(array(
313
				'guid' => $event->guid,
314
				'annotation_owner_guid' => $user_entity->guid,
315
				'annotation_name' => 'likes'
316
			));
317
			$event->liked = count($liked) > 0;
318
319
			$event->title = gc_explode_translation($event->title, $lang);
320
			$event->description = gc_explode_translation($event->description, $lang);
321
322
			$event->userDetails = get_user_block($event->owner_guid, $lang);
323
324
			$eventObj = get_entity($event->guid);
325
			$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
326
			$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
327
			$event->location = $eventObj->venue;
328
329
			if ($eventObj->group_guid){
330
				$group = get_entity($eventObj->group_guid);
331
				$event->group = gc_explode_translation($group->name, $lang);
332
				$event->groupGUID = $eventObj->group_guid;
333
			}		
334
		}
335
	}
336
	return $events;
337
}
338
339
function get_events_by_colleagues($user, $from, $to, $limit, $lang)
340
{
341
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
342
	if (!$user_entity) {
343
		return "User was not found. Please try a different GUID, username, or email address";
344
	}
345
	if (!$user_entity instanceof ElggUser) {
346
		return "Invalid user. Please try a different GUID, username, or email address";
347
	}
348
349
	if (!elgg_is_logged_in()) {
350
		login($user_entity);
351
	}
352
	$friends = $user_entity->getFriends(array('limit' => false));
353
	
354
	if ($friends) {
355
		$friend_guids = array();
356
357
		foreach($friends as $friend) {
358
			$friend_guids[] = $friend->getGUID();
359
		}
360
		$friend_list = implode(",", $friend_guids);
361
		$db_prefix = elgg_get_config('dbprefix');
362
		$params = array(
363
			'type' => 'object',
364
			'subtype' => 'event_calendar',
365
			'limit' => $limit,
366
			'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer')),
367
			'filter' => 'friends',
368
			'relationship' => 'personal_event',
369
			'relationship_guid' => $user_entity->entity,
370
			'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"),
371
			'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"),
372
		);
373
374 View Code Duplication
		if ($from) {
375
			$params['metadata_name_value_pairs'][] = array(
376
				'name' => 'start_date',
377
				'value' => strtotime($from),
378
				'operand' => '>='
379
			);
380
		}
381 View Code Duplication
		if ($to) {
382
			$params['metadata_name_value_pairs'][] = array(
383
				'name' => 'end_date',
384
				'value' => strtotime($to),
385
				'operand' => '<='
386
			);
387
		}
388
389
		$all_events = elgg_list_entities_from_metadata($params);
390
		$events = json_decode($all_events);
391
		$now = time();
392
		$one_day = 60*60*24;
393 View Code Duplication
		foreach ($events as $event) {
394
395
			$eventObj = get_entity($event->guid);
396
			if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
397
			
398
				$likes = elgg_get_annotations(array(
399
					'guid' => $event->guid,
400
					'annotation_name' => 'likes'
401
				));
402
				$event->likes = count($likes);
403
404
				$liked = elgg_get_annotations(array(
405
					'guid' => $event->guid,
406
					'annotation_owner_guid' => $user_entity->guid,
407
					'annotation_name' => 'likes'
408
				));
409
				$event->liked = count($liked) > 0;
410
411
				$event->title = gc_explode_translation($event->title, $lang);
412
				$event->description = gc_explode_translation($event->description, $lang);
413
414
				$event->userDetails = get_user_block($event->owner_guid, $lang);
415
416
				$eventObj = get_entity($event->guid);
417
				$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
418
				$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
419
				$event->location = $eventObj->venue;
420
421
				if ($eventObj->group_guid){
422
					$group = get_entity($eventObj->group_guid);
423
					$event->group = gc_explode_translation($group->name, $lang);
424
					$event->groupGUID = $eventObj->group_guid;
425
				}
426
			}
427
		}
428
	}
429
	return $events;
0 ignored issues
show
Bug introduced by
The variable $events does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
430
}
431
432
function event_add_calendar($user, $guid, $lang)
433
{
434
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
435
	if (!$user_entity) {
436
		return "User was not found. Please try a different GUID, username, or email address";
437
	}
438
	if (!$user_entity instanceof ElggUser) {
439
		return "Invalid user. Please try a different GUID, username, or email address";
440
	}
441
442
	if (!elgg_is_logged_in()) {
443
		login($user_entity);
444
	}
445
446
	elgg_load_library('elgg:event_calendar');
447
448
	$event_guid = $guid;
449
	$event = get_entity($event_guid);
450
	if (elgg_instanceof($event, 'object', 'event_calendar')) {
451
452
		if (!event_calendar_has_personal_event($event_guid,$user_entity->guid)) {
453
			if (event_calendar_add_personal_event($event_guid,$user_entity->guid)) {
454
				return(elgg_echo('event_calendar:add_to_my_calendar_response'));
455
			} else {
456
				return(elgg_echo('event_calendar:add_to_my_calendar_error'));
457
			}
458
		}else{
459
			return elgg_echo('event_calendar:already_in');
460
461
		}
462
	}
463
}
464
465
function get_see_calendar($user, $guid, $lang)
466
{
467
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
468
	if (!$user_entity) {
469
		return "User was not found. Please try a different GUID, username, or email address";
470
	}
471
	if (!$user_entity instanceof ElggUser) {
472
		return "Invalid user. Please try a different GUID, username, or email address";
473
	}
474
475
	if (!elgg_is_logged_in()) {
476
		login($user_entity);
477
	}
478
479
	elgg_load_library('elgg:event_calendar');
480
481
	$limit = 12;
482
	$offset = get_input('offset', 0);
483
	$users = event_calendar_get_users_for_event($guid, $limit, $offset, false);
484
485
	$data = array();
486
	foreach ($users as $user) {
487
		$user_obj = get_user($user->guid);
488
		$user_data = get_user_block($user->guid, $lang);
489
		$data[] = $user_data;
490
	}
491
492
	return $data;
493
494
}