Passed
Push — api_event_calendar ( 1b6b04 )
by
unknown
43:47 queued 16:55
created

event.php ➔ event_add_calendar()   D

Complexity

Conditions 9
Paths 40

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 19
nc 40
nop 3
dl 0
loc 31
rs 4.909
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
		"offset" => array('type' => 'int', 'required' => false, 'default' => 0),
43
		"lang" => array('type' => 'string', 'required' => false, 'default' => "en")
44
	),
45
	'Retrieves an event based on user id and event id',
46
	'POST',
47
	true,
48
	false
49
);
50
51
function get_event($user, $guid, $lang)
52
{
53
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
54
	if (!$user_entity) {
55
		return "User was not found. Please try a different GUID, username, or email address";
56
	}
57
	if (!$user_entity instanceof ElggUser) {
58
		return "Invalid user. Please try a different GUID, username, or email address";
59
	}
60
61
	if (!elgg_is_logged_in()) {
62
		login($user_entity);
63
	}
64
65
	$entity = get_entity($guid);
66
	if (!$entity) {
67
		return "Event was not found. Please try a different GUID";
68
	}
69
	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...
70
		//return "Invalid event. Please try a different GUID";
71
	}
72
73
	$events = elgg_list_entities(array(
74
		'type' => 'object',
75
		'subtype' => 'event_calendar',
76
		'guid' => $guid
77
	));
78
	$event = json_decode($events)[0];
79
80
	$likes = elgg_get_annotations(array(
81
		'guid' => $event->guid,
82
		'annotation_name' => 'likes'
83
	));
84
	$event->likes = count($likes);
85
86
	$liked = elgg_get_annotations(array(
87
		'guid' => $event->guid,
88
		'annotation_owner_guid' => $user_entity->guid,
89
		'annotation_name' => 'likes'
90
	));
91
92
	$event->liked = count($liked) > 0;
93
94
	$event->title = gc_explode_translation($event->title, $lang);
95
	$event->description = gc_explode_translation($event->description, $lang);
96
97
	$event->userDetails = get_user_block($event->owner_guid, $lang);
98
	$eventObj = get_entity($event->guid);
99
	$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
100
	$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
101
	$event->organizer = $eventObj->contact;
102
	$event->phone = $eventObj->contact_phone;
103
	$event->email = $eventObj->contact_email;
104
	$event->fee = $eventObj->fees;
105
	$event->eventLang = $eventObj->language;
106
	$event->location = $eventObj->venue;
107
	if ($eventObj->group_guid){
108
		$group = get_entity($eventObj->group_guid);
109
		$event->group = gc_explode_translation($group->name, $lang);
110
		$event->groupGUID = $eventObj->group_guid;
111
	}
112
113
114
	return $event;
115
}
116
117
function get_events($user, $from, $to, $limit, $offset, $lang)
118
{
119
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
120
	if (!$user_entity) {
121
		return "User was not found. Please try a different GUID, username, or email address";
122
	}
123
	if (!$user_entity instanceof ElggUser) {
124
		return "Invalid user. Please try a different GUID, username, or email address";
125
	}
126
127
	if (!elgg_is_logged_in()) {
128
		login($user_entity);
129
	}
130
131
	$params = array(
132
		'type' => 'object',
133
		'subtype' => 'event_calendar',
134
		'limit' => $limit,
135
		'offset' => $offset,
136
		'order_by_metadata' => array(array('name' => 'start_date', 'direction' => 'DESC', 'as' => 'integer'))
137
	);
138
139 View Code Duplication
	if ($from) {
140
		$params['metadata_name_value_pairs'][] = array(
141
			'name' => 'start_date',
142
			'value' => strtotime($from),
143
			'operand' => '>='
144
		);
145
	}
146 View Code Duplication
	if ($to) {
147
		$params['metadata_name_value_pairs'][] = array(
148
			'name' => 'end_date',
149
			'value' => strtotime($to),
150
			'operand' => '<='
151
		);
152
	}
153
154
	$all_events = elgg_list_entities_from_metadata($params);
155
	$events = json_decode($all_events);
156
157
	foreach ($events as $event) {
158
		$likes = elgg_get_annotations(array(
159
			'guid' => $event->guid,
160
			'annotation_name' => 'likes'
161
		));
162
		$event->likes = count($likes);
163
164
		$liked = elgg_get_annotations(array(
165
			'guid' => $event->guid,
166
			'annotation_owner_guid' => $user_entity->guid,
167
			'annotation_name' => 'likes'
168
		));
169
		$event->liked = count($liked) > 0;
170
171
		$event->title = gc_explode_translation($event->title, $lang);
172
		$event->description = gc_explode_translation($event->description, $lang);
173
174
		$event->userDetails = get_user_block($event->owner_guid, $lang);
175
176
		$eventObj = get_entity($event->guid);
177
		$event->startDate = date("Y-m-d H:i:s", $eventObj->start_date);
178
		$event->endDate = date("Y-m-d H:i:s", $eventObj->end_date);
179
		$event->location = $eventObj->venue;
180
181
		if ($eventObj->group_guid){
182
			$group = get_entity($eventObj->group_guid);
183
			$event->group = gc_explode_translation($group->name, $lang);
184
			$event->groupGUID = $eventObj->group_guid;
185
		}
186
		
187
	}
188
189
	return $events;
190
}
191
192
function event_add_calendar($user, $guid, $lang)
193
{
194
	$user_entity = is_numeric($user) ? get_user($user) : (strpos($user, '@') !== false ? get_user_by_email($user)[0] : get_user_by_username($user));
195
	if (!$user_entity) {
196
		return "User was not found. Please try a different GUID, username, or email address";
197
	}
198
	if (!$user_entity instanceof ElggUser) {
199
		return "Invalid user. Please try a different GUID, username, or email address";
200
	}
201
202
	if (!elgg_is_logged_in()) {
203
		login($user_entity);
204
	}
205
206
	elgg_load_library('elgg:event_calendar');
207
208
	$event_guid = $guid;
209
	$event = get_entity($event_guid);
210
	if (elgg_instanceof($event, 'object', 'event_calendar')) {
211
212
		if (!event_calendar_has_personal_event($event_guid,$user_entity->guid)) {
213
			if (event_calendar_add_personal_event($event_guid,$user_entity->guid)) {
214
				return(elgg_echo('event_calendar:add_to_my_calendar_response'));
215
			} else {
216
				return(elgg_echo('event_calendar:add_to_my_calendar_error'));
217
			}
218
		}else{
219
			return 'Already in your calendar';
220
		}
221
	}
222
}
223