/** * Request data listener * * @param array $data * * @return void */ function listener_data_request(array &$data) : void { $data['host'] = $_SERVER['HTTP_HOST']; $data['scheme'] = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http'; $data['secure'] = $data['scheme'] === 'https'; $data['get'] = http_filter($_GET); $data['post'] = !empty($_POST['token']) && http_post_validate($_POST['token']) ? $_POST : []; $data['files'] = $_FILES ? http_files_convert($_FILES) : []; $url = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); $data['url'] = preg_replace('#^' . $_SERVER['SCRIPT_NAME'] . '#', '', $url); $data['path'] = url_rewrite($data['url'], true); $parts = explode('/', trim($data['path'], '/')); $data['entity'] = $parts[0] ?? $data['entity']; $data['action'] = $parts[1] ?? $data['action']; $data['id'] = $parts[2] ?? $data['id']; }
/** * Converts and validates uploaded files * * @param array $data * * @return array */ function http_files_convert(array $data) : array { $files = []; foreach ($data as $id => $item) { $files[$id] = is_array($item) ? http_files_fix($item) : $item; } $keys = ['error', 'name', 'size', 'tmp_name', 'type']; $exts = data('ext', 'file'); foreach ($files as $id => $item) { if (!is_array($item)) { continue; } $ids = array_keys($item); sort($ids); if ($ids != $keys) { $files[$id] = http_files_convert($item); } elseif ($item['error'] === UPLOAD_ERR_NO_FILE || !is_uploaded_file($item['tmp_name'])) { unset($files[$id]); } else { $files[$id]['ext'] = pathinfo($item['name'], PATHINFO_EXTENSION); if (empty($exts[$files[$id]['ext']])) { message(_('Invalid file %s', $item['name'])); unset($files[$id]); } } } return $files; }