Completed
Pull Request — gcconnex (#1509)
by Nick
18:12
created

event.php ➔ get_event()   B

Complexity

Conditions 8
Paths 24

Size

Total Lines 53
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 34
nc 24
nop 3
dl 0
loc 53
rs 7.1199
c 0
b 0
f 0

How to fix   Long Method   

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
	"get.events",
22
	"get_events",
23
	array(
24
		"user" => array('type' => 'string', 'required' => true),
25
		"from" => array('type' => 'string', 'required' => false, 'default' => ""),
26
		"to" => array('type' => 'string', 'required' => false, 'default' => ""),
27
		"limit" => array('type' => 'int', 'required' => false, 'default' => 10),
28
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
29
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
30
	),
31
	'Retrieves an event based on user id and event id',
32
	'POST',
33
	true,
34
	false
35
);
36
37
function get_event($user, $guid, $lang)
38
{
39
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
40
	if (!$user_entity) {
41
		return "User was not found. Please try a different GUID, username, or email address";
42
	}
43
	if (!$user_entity instanceof ElggUser) {
44
		return "Invalid user. Please try a different GUID, username, or email address";
45
	}
46
47
	$entity = get_entity($guid);
48
	if (!$entity) {
49
		return "Event was not found. Please try a different GUID";
50
	}
51
	if (!$entity->type !== "event_calendar") {
52
		return "Invalid event. Please try a different GUID";
53
	}
54
55
	if (!elgg_is_logged_in()) {
56
		login($user_entity);
57
	}
58
59
	$events = elgg_list_entities(array(
60
		'type' => 'object',
61
		'subtype' => 'event_calendar',
62
		'guid' => $guid
63
	));
64
	$event = json_decode($events)[0];
65
66
	$likes = elgg_get_annotations(array(
67
		'guid' => $event->guid,
68
		'annotation_name' => 'likes'
69
	));
70
	$event->likes = count($likes);
71
72
	$liked = elgg_get_annotations(array(
73
		'guid' => $event->guid,
74
		'annotation_owner_guid' => $user_entity->guid,
75
		'annotation_name' => 'likes'
76
	));
77
	$event->liked = count($liked) > 0;
78
79
	$event->title = gc_explode_translation($event->title, $lang);
80
	$event->description = gc_explode_translation($event->description, $lang);
81
82
	$event->userDetails = get_user_block($event->owner_guid, $lang);
83
84
	$eventObj = get_entity($event->guid);
85
	$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
86
	$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
87
88
	return $event;
89
}
90
91
function get_events($user, $from, $to, $limit, $offset, $lang)
92
{
93
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
94
	if (!$user_entity) {
95
		return "User was not found. Please try a different GUID, username, or email address";
96
	}
97
	if (!$user_entity instanceof ElggUser) {
98
		return "Invalid user. Please try a different GUID, username, or email address";
99
	}
100
101
	if (!elgg_is_logged_in()) {
102
		login($user_entity);
103
	}
104
105
	$params = array(
106
		'type' => 'object',
107
		'subtype' => 'event_calendar',
108
		'limit' => $limit,
109
		'offset' => $offset,
110
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'ASC', 'as' => 'integer'))
111
	);
112
113 View Code Duplication
	if ($from) {
114
		$params['metadata_name_value_pairs'][] = array(
115
			'name' => 'start_date',
116
			'value' => strtotime($from),
117
			'operand' => '>='
118
		);
119
	}
120 View Code Duplication
	if ($to) {
121
		$params['metadata_name_value_pairs'][] = array(
122
			'name' => 'end_date',
123
			'value' => strtotime($to),
124
			'operand' => '<='
125
		);
126
	}
127
128
	$all_events = elgg_list_entities_from_metadata($params);
129
	$events = json_decode($all_events);
130
131
	foreach ($events as $event) {
132
		$likes = elgg_get_annotations(array(
133
			'guid' => $event->guid,
134
			'annotation_name' => 'likes'
135
		));
136
		$event->likes = count($likes);
137
138
		$liked = elgg_get_annotations(array(
139
			'guid' => $event->guid,
140
			'annotation_owner_guid' => $user_entity->guid,
141
			'annotation_name' => 'likes'
142
		));
143
		$event->liked = count($liked) > 0;
144
145
		$event->title = gc_explode_translation($event->title, $lang);
146
		$event->description = gc_explode_translation($event->description, $lang);
147
148
		$event->userDetails = get_user_block($event->owner_guid, $lang);
149
150
		$eventObj = get_entity($event->guid);
151
		$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
152
		$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
153
	}
154
155
	return $events;
156
}
157