Completed
Push — see_calendar_user ( 9d1353 )
by
unknown
60:35 queued 36:18
created

event.php ➔ get_see_calendar()   B

Complexity

Conditions 6
Paths 16

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 13
nc 16
nop 3
dl 0
loc 23
rs 8.5906
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
		"from" => array('type' => 'string', 'required' => false, 'default' => ""),
89
		"to" => array('type' => 'string', 'required' => false, 'default' => ""),
90
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
91
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
92
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
93
	),
94
	'Retrieves an event based on user id and event id',
95
	'POST',
96
	true,
97
	false
98
);
99
function get_event($user, $guid, $lang)
100
{
101
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
102
	if (!$user_entity) {
103
		return "User was not found. Please try a different GUID, username, or email address";
104
	}
105
	if (!$user_entity instanceof ElggUser) {
106
		return "Invalid user. Please try a different GUID, username, or email address";
107
	}
108
109
	if (!elgg_is_logged_in()) {
110
		login($user_entity);
111
	}
112
113
	$entity = get_entity($guid);
114
	if (!$entity) {
115
		return "Event was not found. Please try a different GUID";
116
	}
117
	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...
118
		//return "Invalid event. Please try a different GUID";
119
	}
120
121
	$events = elgg_list_entities(array(
122
		'type' => 'object',
123
		'subtype' => 'event_calendar',
124
		'guid' => $guid
125
	));
126
	$event = json_decode($events)[0];
127
128
	$likes = elgg_get_annotations(array(
129
		'guid' => $event->guid,
130
		'annotation_name' => 'likes'
131
	));
132
	$event->likes = count($likes);
133
134
	$liked = elgg_get_annotations(array(
135
		'guid' => $event->guid,
136
		'annotation_owner_guid' => $user_entity->guid,
137
		'annotation_name' => 'likes'
138
	));
139
140
	$event->liked = count($liked) > 0;
141
142
	$event->title = gc_explode_translation($event->title, $lang);
143
	$event->description = gc_explode_translation($event->description, $lang);
144
145
	$event->userDetails = get_user_block($event->owner_guid, $lang);
146
	$eventObj = get_entity($event->guid);
147
	$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
148
	$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
149
	$event->organizer = $eventObj->contact;
150
	$event->phone = $eventObj->contact_phone;
151
	$event->email = $eventObj->contact_email;
152
	$event->fee = $eventObj->fees;
153
	$event->eventLang = $eventObj->language;
154
	$event->location = $eventObj->venue;
155
	if ($eventObj->group_guid){
156
		$group = get_entity($eventObj->group_guid);
157
		$event->group = gc_explode_translation($group->name, $lang);
158
		$event->groupGUID = $eventObj->group_guid;
159
	}
160
161
162
	return $event;
163
}
164
165
function get_events($user, $from, $to, $limit, $offset, $lang)
166
{
167
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
168
	if (!$user_entity) {
169
		return "User was not found. Please try a different GUID, username, or email address";
170
	}
171
	if (!$user_entity instanceof ElggUser) {
172
		return "Invalid user. Please try a different GUID, username, or email address";
173
	}
174
175
	if (!elgg_is_logged_in()) {
176
		login($user_entity);
177
	}
178
179
	$params = array(
180
		'type' => 'object',
181
		'subtype' => 'event_calendar',
182
		'limit' => $limit,
183
		'offset' => $offset,
184
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer'))
185
	);
186
187 View Code Duplication
	if ($from) {
188
		$params['metadata_name_value_pairs'][] = array(
189
			'name' => 'start_date',
190
			'value' => strtotime($from),
191
			'operand' => '>='
192
		);
193
	}
194 View Code Duplication
	if ($to) {
195
		$params['metadata_name_value_pairs'][] = array(
196
			'name' => 'end_date',
197
			'value' => strtotime($to),
198
			'operand' => '<='
199
		);
200
	}
201
202
	$all_events = elgg_list_entities_from_metadata($params);
203
	$events = json_decode($all_events);
204
	$now = time();
205
	$one_day = 60*60*24;
206
207
	foreach ($events as $event) {
208
209
		$eventObj = get_entity($event->guid);
210
		if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
211
			
212
			$options = array(
213
				'type' => 'user',
214
				'relationship' => 'personal_event',
215
				'relationship_guid' => $event->guid,
216
				'inverse_relationship' => true,
217
				'limit' => false,
218
				'count' => true,
219
			);
220
221
			$count = elgg_get_entities_from_relationship($options);
222
			if ($count == 1) {
223
				$event->in_calendar = elgg_echo('event_calendar:personal_event_calendars_link_one');
224
			} else {
225
				$event->in_calendar = elgg_echo('event_calendar:personal_event_calendars_link', array($count));
226
			}
227
228
			$likes = elgg_get_annotations(array(
229
				'guid' => $event->guid,
230
				'annotation_name' => 'likes'
231
			));
232
			$event->likes = count($likes);
233
234
			$liked = elgg_get_annotations(array(
235
				'guid' => $event->guid,
236
				'annotation_owner_guid' => $user_entity->guid,
237
				'annotation_name' => 'likes'
238
			));
239
			$event->liked = count($liked) > 0;
240
241
			$event->title = gc_explode_translation($event->title, $lang);
242
			$event->description = gc_explode_translation($event->description, $lang);
243
			$event->userDetails = get_user_block($event->owner_guid, $lang);
244
			$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
245
			$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
246
	
247
			$event->location = $eventObj->venue;
248
249
			if ($eventObj->group_guid){
250
				$group = get_entity($eventObj->group_guid);
251
				$event->group = gc_explode_translation($group->name, $lang);
252
				$event->groupGUID = $eventObj->group_guid;
253
			}
254
		}
255
	}
256
	return $events;
257
}
258
259
function get_events_by_owner($user, $from, $to, $limit, $lang)
260
{
261
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
262
	if (!$user_entity) {
263
		return "User was not found. Please try a different GUID, username, or email address";
264
	}
265
	if (!$user_entity instanceof ElggUser) {
266
		return "Invalid user. Please try a different GUID, username, or email address";
267
	}
268
269
	if (!elgg_is_logged_in()) {
270
		login($user_entity);
271
	}
272
273
	$params = array(
274
		'type' => 'object',
275
		'subtype' => 'event_calendar',
276
		'limit' => $limit,
277
		'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...
278
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer')),
279
		'filter' => 'mine',
280
		'relationship' => 'personal_event',
281
		'relationship_guid' => $user_entity->entity,
282
	);
283
284 View Code Duplication
	if ($from) {
285
		$params['metadata_name_value_pairs'][] = array(
286
			'name' => 'start_date',
287
			'value' => strtotime($from),
288
			'operand' => '>='
289
		);
290
	}
291 View Code Duplication
	if ($to) {
292
		$params['metadata_name_value_pairs'][] = array(
293
			'name' => 'end_date',
294
			'value' => strtotime($to),
295
			'operand' => '<='
296
		);
297
	}
298
299
	$all_events = elgg_list_entities_from_relationship($params);
300
301
	$events = json_decode($all_events);
302
	$now = time();
303
	$one_day = 60*60*24;
304 View Code Duplication
	foreach ($events as $event) {
305
306
		$eventObj = get_entity($event->guid);
307
		if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
308
		
309
			$likes = elgg_get_annotations(array(
310
				'guid' => $event->guid,
311
				'annotation_name' => 'likes'
312
			));
313
			$event->likes = count($likes);
314
315
			$liked = elgg_get_annotations(array(
316
				'guid' => $event->guid,
317
				'annotation_owner_guid' => $user_entity->guid,
318
				'annotation_name' => 'likes'
319
			));
320
			$event->liked = count($liked) > 0;
321
322
			$event->title = gc_explode_translation($event->title, $lang);
323
			$event->description = gc_explode_translation($event->description, $lang);
324
325
			$event->userDetails = get_user_block($event->owner_guid, $lang);
326
327
			$eventObj = get_entity($event->guid);
328
			$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
329
			$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
330
			$event->location = $eventObj->venue;
331
332
			if ($eventObj->group_guid){
333
				$group = get_entity($eventObj->group_guid);
334
				$event->group = gc_explode_translation($group->name, $lang);
335
				$event->groupGUID = $eventObj->group_guid;
336
			}		
337
		}
338
	}
339
	return $events;
340
}
341
342
function get_events_by_colleagues($user, $from, $to, $limit, $lang)
343
{
344
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
345
	if (!$user_entity) {
346
		return "User was not found. Please try a different GUID, username, or email address";
347
	}
348
	if (!$user_entity instanceof ElggUser) {
349
		return "Invalid user. Please try a different GUID, username, or email address";
350
	}
351
352
	if (!elgg_is_logged_in()) {
353
		login($user_entity);
354
	}
355
	$friends = $user_entity->getFriends(array('limit' => false));
356
	
357
	if ($friends) {
358
		$friend_guids = array();
359
360
		foreach($friends as $friend) {
361
			$friend_guids[] = $friend->getGUID();
362
		}
363
		$friend_list = implode(",", $friend_guids);
364
		$db_prefix = elgg_get_config('dbprefix');
365
		$params = array(
366
			'type' => 'object',
367
			'subtype' => 'event_calendar',
368
			'limit' => $limit,
369
			'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer')),
370
			'filter' => 'friends',
371
			'relationship' => 'personal_event',
372
			'relationship_guid' => $user_entity->entity,
373
			'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"),
374
			'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"),
375
		);
376
377 View Code Duplication
		if ($from) {
378
			$params['metadata_name_value_pairs'][] = array(
379
				'name' => 'start_date',
380
				'value' => strtotime($from),
381
				'operand' => '>='
382
			);
383
		}
384 View Code Duplication
		if ($to) {
385
			$params['metadata_name_value_pairs'][] = array(
386
				'name' => 'end_date',
387
				'value' => strtotime($to),
388
				'operand' => '<='
389
			);
390
		}
391
392
		$all_events = elgg_list_entities_from_metadata($params);
393
		$events = json_decode($all_events);
394
		$now = time();
395
		$one_day = 60*60*24;
396 View Code Duplication
		foreach ($events as $event) {
397
398
			$eventObj = get_entity($event->guid);
399
			if (($eventObj->start_date > $now-$one_day) || ($eventObj->end_date && ($eventObj->end_date > $now-$one_day))) {
400
			
401
				$likes = elgg_get_annotations(array(
402
					'guid' => $event->guid,
403
					'annotation_name' => 'likes'
404
				));
405
				$event->likes = count($likes);
406
407
				$liked = elgg_get_annotations(array(
408
					'guid' => $event->guid,
409
					'annotation_owner_guid' => $user_entity->guid,
410
					'annotation_name' => 'likes'
411
				));
412
				$event->liked = count($liked) > 0;
413
414
				$event->title = gc_explode_translation($event->title, $lang);
415
				$event->description = gc_explode_translation($event->description, $lang);
416
417
				$event->userDetails = get_user_block($event->owner_guid, $lang);
418
419
				$eventObj = get_entity($event->guid);
420
				$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
421
				$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
422
				$event->location = $eventObj->venue;
423
424
				if ($eventObj->group_guid){
425
					$group = get_entity($eventObj->group_guid);
426
					$event->group = gc_explode_translation($group->name, $lang);
427
					$event->groupGUID = $eventObj->group_guid;
428
				}
429
			}
430
		}
431
	}
432
	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...
433
}
434
435
function event_add_calendar($user, $guid, $lang)
436
{
437
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
438
	if (!$user_entity) {
439
		return "User was not found. Please try a different GUID, username, or email address";
440
	}
441
	if (!$user_entity instanceof ElggUser) {
442
		return "Invalid user. Please try a different GUID, username, or email address";
443
	}
444
445
	if (!elgg_is_logged_in()) {
446
		login($user_entity);
447
	}
448
449
	elgg_load_library('elgg:event_calendar');
450
451
	$event_guid = $guid;
452
	$event = get_entity($event_guid);
453
	if (elgg_instanceof($event, 'object', 'event_calendar')) {
454
455
		if (!event_calendar_has_personal_event($event_guid,$user_entity->guid)) {
456
			if (event_calendar_add_personal_event($event_guid,$user_entity->guid)) {
457
				return(elgg_echo('event_calendar:add_to_my_calendar_response'));
458
			} else {
459
				return(elgg_echo('event_calendar:add_to_my_calendar_error'));
460
			}
461
		}else{
462
			return elgg_echo('event_calendar:already_in');
463
464
		}
465
	}
466
}
467
468
function get_see_calendar($user, $guid, $lang)
469
{
470
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
471
	if (!$user_entity) {
472
		return "User was not found. Please try a different GUID, username, or email address";
473
	}
474
	if (!$user_entity instanceof ElggUser) {
475
		return "Invalid user. Please try a different GUID, username, or email address";
476
	}
477
478
	if (!elgg_is_logged_in()) {
479
		login($user_entity);
480
	}
481
482
	elgg_load_library('elgg:event_calendar');
483
484
	$limit = 12;
485
	$offset = get_input('offset', 0);
486
	$users = event_calendar_get_users_for_event($guid, $limit, $offset, false);
487
488
	return $users;
489
490
}