|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** |
|
4
|
|
|
* Catch calls to forward() in ajax request and force an exit. |
|
5
|
|
|
* |
|
6
|
|
|
* Forces response is json of the following form: |
|
7
|
|
|
* <pre> |
|
8
|
|
|
* { |
|
9
|
|
|
* "current_url": "the.url.we/were/coming/from", |
|
10
|
|
|
* "forward_url": "the.url.we/were/going/to", |
|
11
|
|
|
* "system_messages": { |
|
12
|
|
|
* "messages": ["msg1", "msg2", ...], |
|
13
|
|
|
* "errors": ["err1", "err2", ...] |
|
14
|
|
|
* }, |
|
15
|
|
|
* "status": -1 //or 0 for success if there are no error messages present |
|
16
|
|
|
* } |
|
17
|
|
|
* </pre> |
|
18
|
|
|
* where "system_messages" is all message registers at the point of forwarding |
|
19
|
|
|
* |
|
20
|
|
|
* @internal registered for the 'forward', 'all' plugin hook |
|
21
|
|
|
* |
|
22
|
|
|
* @param string $hook |
|
23
|
|
|
* @param string $type |
|
24
|
|
|
* @param string $forward_url |
|
25
|
|
|
* @param array $params |
|
26
|
|
|
* @return void |
|
27
|
|
|
* @access private |
|
28
|
|
|
* @deprecated 2.3 |
|
29
|
|
|
*/ |
|
30
|
|
|
function ajax_forward_hook($hook, $type, $forward_url, $params) { |
|
|
|
|
|
|
31
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' is deprecated and is no longer used as a plugin hook handler', '2.3'); |
|
32
|
|
|
|
|
33
|
|
|
if (!elgg_is_xhr()) { |
|
34
|
|
|
return; |
|
35
|
|
|
} |
|
36
|
|
|
|
|
37
|
|
|
// grab any data echo'd in the action |
|
38
|
|
|
$output = ob_get_clean(); |
|
39
|
|
|
|
|
40
|
|
|
if ($type == 'walled_garden' || $type == 'csrf') { |
|
41
|
|
|
$type = '403'; |
|
42
|
|
|
} |
|
43
|
|
|
|
|
44
|
|
|
$status_code = (int) $type; |
|
45
|
|
|
if ($status_code < 100 || ($status_code > 299 && $status_code < 400) || $status_code > 599) { |
|
46
|
|
|
// We only want to preserve OK and error codes |
|
47
|
|
|
// Redirect responses should be converted to OK responses as this is an XHR request |
|
48
|
|
|
$status_code = ELGG_HTTP_OK; |
|
49
|
|
|
} |
|
50
|
|
|
|
|
51
|
|
|
$response = elgg_ok_response($output, '', $forward_url, $status_code); |
|
52
|
|
|
|
|
53
|
|
|
$headers = $response->getHeaders(); |
|
54
|
|
|
$headers['Content-Type'] = 'application/json; charset=UTF-8'; |
|
55
|
|
|
$response->setHeaders($headers); |
|
56
|
|
|
|
|
57
|
|
|
_elgg_services()->responseFactory->respond($response); |
|
58
|
|
|
exit; |
|
|
|
|
|
|
59
|
|
|
} |
|
60
|
|
|
|
|
61
|
|
|
/** |
|
62
|
|
|
* Buffer all output echo'd directly in the action for inclusion in the returned JSON. |
|
63
|
|
|
* @return void |
|
64
|
|
|
* @access private |
|
65
|
|
|
* @deprecated 2.3 |
|
66
|
|
|
*/ |
|
67
|
|
|
function ajax_action_hook() { |
|
68
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' is deprecated and is no longer used as a plugin hook handler', '2.3'); |
|
69
|
|
|
|
|
70
|
|
|
if (elgg_is_xhr()) { |
|
71
|
|
|
ob_start(); |
|
72
|
|
|
} |
|
73
|
|
|
} |
|
74
|
|
|
|
|
75
|
|
|
/** |
|
76
|
|
|
* Get the contents of an uploaded file. |
|
77
|
|
|
* (Returns false if there was an issue.) |
|
78
|
|
|
* |
|
79
|
|
|
* @param string $input_name The name of the file input field on the submission form |
|
80
|
|
|
* |
|
81
|
|
|
* @return mixed|false The contents of the file, or false on failure. |
|
82
|
|
|
* @deprecated 2.3 |
|
83
|
|
|
*/ |
|
84
|
|
|
function get_uploaded_file($input_name) { |
|
85
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated and will be removed', '2.3'); |
|
86
|
|
|
$inputs = elgg_get_uploaded_files($input_name); |
|
87
|
|
|
$input = array_shift($inputs); |
|
88
|
|
|
if (!$input || !$input->isValid()) { |
|
89
|
|
|
return false; |
|
90
|
|
|
} |
|
91
|
|
|
return file_get_contents($input->getPathname()); |
|
92
|
|
|
} |
|
93
|
|
|
|
|
94
|
|
|
/** |
|
95
|
|
|
* Gets the jpeg contents of the resized version of an uploaded image |
|
96
|
|
|
* (Returns false if the uploaded file was not an image) |
|
97
|
|
|
* |
|
98
|
|
|
* @param string $input_name The name of the file input field on the submission form |
|
99
|
|
|
* @param int $maxwidth The maximum width of the resized image |
|
100
|
|
|
* @param int $maxheight The maximum height of the resized image |
|
101
|
|
|
* @param bool $square If set to true, will take the smallest |
|
102
|
|
|
* of maxwidth and maxheight and use it to set the |
|
103
|
|
|
* dimensions on all size; the image will be cropped. |
|
104
|
|
|
* @param bool $upscale Resize images smaller than $maxwidth x $maxheight? |
|
105
|
|
|
* |
|
106
|
|
|
* @return false|mixed The contents of the resized image, or false on failure |
|
107
|
|
|
* @deprecated 2.3 |
|
108
|
|
|
*/ |
|
109
|
|
|
function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, |
|
110
|
|
|
$square = false, $upscale = false) { |
|
111
|
|
|
|
|
112
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated. Use elgg_save_resized_image()', '2.3'); |
|
113
|
|
|
|
|
114
|
|
|
$file = _elgg_services()->request->getFile($input_name); |
|
115
|
|
|
if (empty($file)) { |
|
116
|
|
|
return false; |
|
117
|
|
|
} |
|
118
|
|
|
|
|
119
|
|
|
return get_resized_image_from_existing_file($file->getPathname(), $maxwidth, $maxheight, $square, 0, 0, 0, 0, $upscale); |
|
|
|
|
|
|
120
|
|
|
} |
|
121
|
|
|
|
|
122
|
|
|
/** |
|
123
|
|
|
* Gets the jpeg contents of the resized version of an already uploaded image |
|
124
|
|
|
* (Returns false if the file was not an image) |
|
125
|
|
|
* |
|
126
|
|
|
* @param string $input_name The name of the file on the disk |
|
127
|
|
|
* @param int $maxwidth The desired width of the resized image |
|
128
|
|
|
* @param int $maxheight The desired height of the resized image |
|
129
|
|
|
* @param bool $square If set to true, takes the smallest of maxwidth and |
|
130
|
|
|
* maxheight and use it to set the dimensions on the new image. |
|
131
|
|
|
* If no crop parameters are set, the largest square that fits |
|
132
|
|
|
* in the image centered will be used for the resize. If square, |
|
133
|
|
|
* the crop must be a square region. |
|
134
|
|
|
* @param int $x1 x coordinate for top, left corner |
|
135
|
|
|
* @param int $y1 y coordinate for top, left corner |
|
136
|
|
|
* @param int $x2 x coordinate for bottom, right corner |
|
137
|
|
|
* @param int $y2 y coordinate for bottom, right corner |
|
138
|
|
|
* @param bool $upscale Resize images smaller than $maxwidth x $maxheight? |
|
139
|
|
|
* |
|
140
|
|
|
* @return false|mixed The contents of the resized image, or false on failure |
|
141
|
|
|
* @deprecated 2.3 |
|
142
|
|
|
*/ |
|
143
|
|
|
function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, |
|
144
|
|
|
$square = false, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = false) { |
|
145
|
|
|
|
|
146
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated. Use elgg_save_resized_image()', '2.3'); |
|
147
|
|
|
|
|
148
|
|
|
if (!is_readable($input_name)) { |
|
149
|
|
|
return false; |
|
150
|
|
|
} |
|
151
|
|
|
|
|
152
|
|
|
// we will write resized image to a temporary file and then delete it |
|
153
|
|
|
// need to add a valid image extension otherwise resizing fails |
|
154
|
|
|
$tmp_filename = tempnam(sys_get_temp_dir(), 'icon_resize'); |
|
155
|
|
|
|
|
156
|
|
|
$params = [ |
|
157
|
|
|
'w' => $maxwidth, |
|
158
|
|
|
'h' => $maxheight, |
|
159
|
|
|
'x1' => $x1, |
|
160
|
|
|
'y1' => $y1, |
|
161
|
|
|
'x2' => $x2, |
|
162
|
|
|
'y2' => $y2, |
|
163
|
|
|
'square' => $square, |
|
164
|
|
|
'upscale' => $upscale, |
|
165
|
|
|
]; |
|
166
|
|
|
|
|
167
|
|
|
$image_bytes = false; |
|
168
|
|
|
if (elgg_save_resized_image($input_name, $tmp_filename, $params)) { |
|
169
|
|
|
$image_bytes = file_get_contents($tmp_filename); |
|
170
|
|
|
} |
|
171
|
|
|
|
|
172
|
|
|
unlink($tmp_filename); |
|
173
|
|
|
|
|
174
|
|
|
return $image_bytes; |
|
175
|
|
|
} |
|
176
|
|
|
|
|
177
|
|
|
/** |
|
178
|
|
|
* Calculate the parameters for resizing an image |
|
179
|
|
|
* |
|
180
|
|
|
* @param int $width Natural width of the image |
|
181
|
|
|
* @param int $height Natural height of the image |
|
182
|
|
|
* @param array $params Resize parameters |
|
183
|
|
|
* - 'maxwidth' maximum width of the resized image |
|
184
|
|
|
* - 'maxheight' maximum height of the resized image |
|
185
|
|
|
* - 'upscale' allow upscaling |
|
186
|
|
|
* - 'square' constrain to a square |
|
187
|
|
|
* - 'x1', 'y1', 'x2', 'y2' cropping coordinates |
|
188
|
|
|
* |
|
189
|
|
|
* @return array|false |
|
190
|
|
|
* @since 1.7.2 |
|
191
|
|
|
* @deprecated 2.3 |
|
192
|
|
|
*/ |
|
193
|
|
|
function get_image_resize_parameters($width, $height, array $params = []) { |
|
194
|
|
|
|
|
195
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated and will be removed from public API', '2.3'); |
|
196
|
|
|
|
|
197
|
|
|
try { |
|
198
|
|
|
$params['w'] = elgg_extract('maxwidth', $params); |
|
199
|
|
|
$params['h'] = elgg_extract('maxheight', $params); |
|
200
|
|
|
unset($params['maxwidth']); |
|
201
|
|
|
unset($params['maxheight']); |
|
202
|
|
|
$params = _elgg_services()->imageService->normalizeResizeParameters($width, $height, $params); |
|
203
|
|
|
return [ |
|
204
|
|
|
'newwidth' => $params['w'], |
|
205
|
|
|
'newheight' => $params['h'], |
|
206
|
|
|
'selectionwidth' => $params['x2'] - $params['x1'], |
|
207
|
|
|
'selectionheight' => $params['y2'] - $params['y1'], |
|
208
|
|
|
'xoffset' => $params['x1'], |
|
209
|
|
|
'yoffset' => $params['y1'], |
|
210
|
|
|
]; |
|
211
|
|
|
} catch (\LogicException $ex) { |
|
212
|
|
|
elgg_log($ex->getMessage(), 'ERROR'); |
|
213
|
|
|
return false; |
|
214
|
|
|
} |
|
215
|
|
|
} |
|
216
|
|
|
|
|
217
|
|
|
/** |
|
218
|
|
|
* Update the last_action column in the entities table for $guid. |
|
219
|
|
|
* |
|
220
|
|
|
* @warning This is different to time_updated. Time_updated is automatically set, |
|
221
|
|
|
* while last_action is only set when explicitly called. |
|
222
|
|
|
* |
|
223
|
|
|
* @param int $guid Entity annotation|relationship action carried out on |
|
224
|
|
|
* @param int $posted Timestamp of last action |
|
225
|
|
|
* |
|
226
|
|
|
* @return int|false Timestamp or false on failure |
|
227
|
|
|
* @access private |
|
228
|
|
|
* @deprecated 2.3 |
|
229
|
|
|
*/ |
|
230
|
|
|
function update_entity_last_action($guid, $posted = null) { |
|
231
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated. Refrain from updating last action timestamp manually', '2.3'); |
|
232
|
|
|
|
|
233
|
|
|
$result = false; |
|
234
|
|
|
$ia = elgg_set_ignore_access(true); |
|
235
|
|
|
$entity = get_entity($guid); |
|
236
|
|
|
if ($entity) { |
|
237
|
|
|
$result = $entity->updateLastAction($posted); |
|
238
|
|
|
} |
|
239
|
|
|
elgg_set_ignore_access($ia); |
|
240
|
|
|
return $result; |
|
241
|
|
|
} |
|
242
|
|
|
|
|
243
|
|
|
/** |
|
244
|
|
|
* Get the notification settings for a given user. |
|
245
|
|
|
* |
|
246
|
|
|
* @param int $user_guid The user id |
|
247
|
|
|
* |
|
248
|
|
|
* @return \stdClass|false |
|
249
|
|
|
* @deprecated 2.3 |
|
250
|
|
|
*/ |
|
251
|
|
|
function get_user_notification_settings($user_guid = 0) { |
|
252
|
|
|
|
|
253
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated by ElggUser::getNotificationSettings()', '2.3'); |
|
254
|
|
|
|
|
255
|
|
|
if ((int) $user_guid == 0) { |
|
256
|
|
|
$user_guid = elgg_get_logged_in_user_guid(); |
|
257
|
|
|
} |
|
258
|
|
|
|
|
259
|
|
|
$user = get_entity($user_guid); |
|
260
|
|
|
if (!$user instanceof \ElggUser) { |
|
261
|
|
|
return false; |
|
262
|
|
|
} |
|
263
|
|
|
|
|
264
|
|
|
return (object) $user->getNotificationSettings(); |
|
265
|
|
|
} |
|
266
|
|
|
|
|
267
|
|
|
/** |
|
268
|
|
|
* Set a user notification pref. |
|
269
|
|
|
* |
|
270
|
|
|
* @param int $user_guid The user id. |
|
271
|
|
|
* @param string $method The delivery method (eg. email) |
|
272
|
|
|
* @param bool $value On(true) or off(false). |
|
273
|
|
|
* |
|
274
|
|
|
* @return bool |
|
275
|
|
|
* @deprecated 2.3 |
|
276
|
|
|
*/ |
|
277
|
|
|
function set_user_notification_setting($user_guid, $method, $value) { |
|
278
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' has been deprecated by ElggUser::setNotificationSetting()', '2.3'); |
|
279
|
|
|
|
|
280
|
|
|
if (!$user_guid) { |
|
281
|
|
|
$user_guid = elgg_get_logged_in_user_guid(); |
|
282
|
|
|
} |
|
283
|
|
|
$user = get_entity($user_guid); |
|
284
|
|
|
if (!$user instanceof \ElggUser) { |
|
285
|
|
|
return false; |
|
286
|
|
|
} |
|
287
|
|
|
|
|
288
|
|
|
if (is_string($value)) { |
|
289
|
|
|
$value = strtolower($value); |
|
290
|
|
|
} |
|
291
|
|
|
if ($value == 'yes' || $value == 'on' || $value == 'enabled') { |
|
292
|
|
|
$value = true; |
|
293
|
|
|
} else if ($value == 'no' || $value == 'off' || $value == 'disabled') { |
|
294
|
|
|
$value = false; |
|
295
|
|
|
} |
|
296
|
|
|
|
|
297
|
|
|
return $user->setNotificationSetting($method, (bool) $value); |
|
298
|
|
|
} |
|
299
|
|
|
|
|
300
|
|
|
/** |
|
301
|
|
|
* Serve an error page |
|
302
|
|
|
* |
|
303
|
|
|
* This is registered by Elgg for the 'forward', '404' plugin hook. It can |
|
304
|
|
|
* registered for other hooks by plugins or called directly to display an |
|
305
|
|
|
* error page. |
|
306
|
|
|
* |
|
307
|
|
|
* @param string $hook The name of the hook |
|
308
|
|
|
* @param string $type Http error code |
|
309
|
|
|
* @param bool $result The current value of the hook |
|
310
|
|
|
* @param array $params Parameters related to the hook |
|
311
|
|
|
* @return void |
|
312
|
|
|
* @deprecated 2.3 |
|
313
|
|
|
*/ |
|
314
|
|
|
function elgg_error_page_handler($hook, $type, $result, $params) { |
|
|
|
|
|
|
315
|
|
|
elgg_deprecated_notice(__FUNCTION__ . ' is deprecated. Error pages are drawn by resource views without "forward" hook.', '2.3'); |
|
316
|
|
|
|
|
317
|
|
|
// This draws an error page, and sometimes there's another 40* forward() call made during that process. |
|
318
|
|
|
// We want to allow the 2nd call to pass through, but draw the appropriate page for the first call. |
|
319
|
|
|
|
|
320
|
|
|
static $vars; |
|
321
|
|
|
if ($vars === null) { |
|
322
|
|
|
// keep first vars for error page |
|
323
|
|
|
$vars = [ |
|
324
|
|
|
'type' => $type, |
|
325
|
|
|
'params' => $params, |
|
326
|
|
|
]; |
|
327
|
|
|
} |
|
328
|
|
|
|
|
329
|
|
|
static $calls = 0; |
|
330
|
|
|
$calls++; |
|
331
|
|
|
if ($calls < 3) { |
|
332
|
|
|
echo elgg_view_resource('error', $vars); |
|
333
|
|
|
exit; |
|
|
|
|
|
|
334
|
|
|
} |
|
335
|
|
|
|
|
336
|
|
|
// uh oh, may be infinite loop |
|
337
|
|
|
register_error(elgg_echo('error:404:content')); |
|
338
|
|
|
header('Location: ' . elgg_get_site_url()); |
|
339
|
|
|
exit; |
|
|
|
|
|
|
340
|
|
|
} |
|
341
|
|
|
|
|
342
|
|
|
/** |
|
343
|
|
|
* Renders a form field |
|
344
|
|
|
* |
|
345
|
|
|
* @param string $input_type Input type, used to generate an input view ("input/$input_type") |
|
346
|
|
|
* @param array $vars Fields and input vars. |
|
347
|
|
|
* Field vars contain both field and input params. 'label', 'help', |
|
348
|
|
|
* and 'field_class' params will not be passed on to the input view. |
|
349
|
|
|
* Others, including 'required' and 'id', will be available to the |
|
350
|
|
|
* input view. Both 'label' and 'help' params accept HTML, and |
|
351
|
|
|
* will be printed unescaped within their wrapper element. |
|
352
|
|
|
* @return string |
|
353
|
|
|
* |
|
354
|
|
|
* @since 2.1 |
|
355
|
|
|
* @deprecated 2.3 Use elgg_view_field() |
|
356
|
|
|
*/ |
|
357
|
|
|
function elgg_view_input($input_type, array $vars = []) { |
|
358
|
|
|
|
|
359
|
|
|
elgg_deprecated_notice(__FUNCTION__ . '() is deprecated. Use elgg_view_field()', '2.3'); |
|
360
|
|
|
|
|
361
|
|
|
$vars['#type'] = $input_type; |
|
362
|
|
|
|
|
363
|
|
|
if (isset($vars['label']) && $input_type !== 'checkbox') { |
|
364
|
|
|
$vars['#label'] = $vars['label']; |
|
365
|
|
|
unset($vars['label']); |
|
366
|
|
|
} |
|
367
|
|
|
if (isset($vars['help'])) { |
|
368
|
|
|
$vars['#help'] = $vars['help']; |
|
369
|
|
|
unset($vars['help']); |
|
370
|
|
|
} |
|
371
|
|
|
if (isset($vars['field_class'])) { |
|
372
|
|
|
$vars['#class'] = $vars['field_class']; |
|
373
|
|
|
unset($vars['field_class']); |
|
374
|
|
|
} |
|
375
|
|
|
|
|
376
|
|
|
return elgg_view_field($vars); |
|
377
|
|
|
} |
|
378
|
|
|
|
|
379
|
|
|
/** |
|
380
|
|
|
* Sanitizes a string for use in a query |
|
381
|
|
|
* |
|
382
|
|
|
* @see Elgg\Database::sanitizeString |
|
383
|
|
|
* |
|
384
|
|
|
* @param string $string The string to sanitize |
|
385
|
|
|
* @return string |
|
386
|
|
|
* @deprecated Use query parameters where possible |
|
387
|
|
|
*/ |
|
388
|
|
|
function sanitize_string($string) { |
|
389
|
|
|
return _elgg_services()->db->sanitizeString($string); |
|
|
|
|
|
|
390
|
|
|
} |
|
391
|
|
|
|
|
392
|
|
|
/** |
|
393
|
|
|
* Alias of sanitize_string |
|
394
|
|
|
* |
|
395
|
|
|
* @see Elgg\Database::sanitizeString |
|
396
|
|
|
* |
|
397
|
|
|
* @param string $string The string to sanitize |
|
398
|
|
|
* @return string |
|
399
|
|
|
* @deprecated Use query parameters where possible |
|
400
|
|
|
*/ |
|
401
|
|
|
function sanitise_string($string) { |
|
402
|
|
|
return _elgg_services()->db->sanitizeString($string); |
|
|
|
|
|
|
403
|
|
|
} |
|
404
|
|
|
|
|
405
|
|
|
/** |
|
406
|
|
|
* Sanitizes an integer for database use. |
|
407
|
|
|
* |
|
408
|
|
|
* @see Elgg\Database::sanitizeInt |
|
409
|
|
|
* |
|
410
|
|
|
* @param int $int Value to be sanitized |
|
411
|
|
|
* @param bool $signed Whether negative values should be allowed (true) |
|
412
|
|
|
* @return int |
|
413
|
|
|
* @deprecated Use query parameters where possible |
|
414
|
|
|
*/ |
|
415
|
|
|
function sanitize_int($int, $signed = true) { |
|
416
|
|
|
return _elgg_services()->db->sanitizeInt($int, $signed); |
|
|
|
|
|
|
417
|
|
|
} |
|
418
|
|
|
|
|
419
|
|
|
/** |
|
420
|
|
|
* Alias of sanitize_int |
|
421
|
|
|
* |
|
422
|
|
|
* @see sanitize_int |
|
423
|
|
|
* |
|
424
|
|
|
* @param int $int Value to be sanitized |
|
425
|
|
|
* @param bool $signed Whether negative values should be allowed (true) |
|
426
|
|
|
* @return int |
|
427
|
|
|
* @deprecated Use query parameters where possible |
|
428
|
|
|
*/ |
|
429
|
|
|
function sanitise_int($int, $signed = true) { |
|
430
|
|
|
return sanitize_int($int, $signed); |
|
|
|
|
|
|
431
|
|
|
} |
|
432
|
|
|
|
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.