Completed
Push — api-test ( c6440b...e52d76 )
by
unknown
72:06 queued 45:47
created

event.php ➔ get_events_by_colleagues()   D

Complexity

Conditions 15
Paths 48

Size

Total Lines 92
Code Lines 63

Duplication

Lines 49
Ratio 53.26 %

Importance

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