public function processRequest($action, array $params) { empty($action) and $action = $this->default_action; if (!$this->isMethodCallable($action)) { Template::show404Page(); return; } $request_result = $this->{$action}($params); $class = strtolower(get_class($this)); if (!empty($request_result['redirect'])) { header("location: /{$class}/{$request_result['redirect']}"); empty($request_result['data']) or User::storeFormData($request_result['data']); die; } $template_name = !empty($request_result['template']) ? $request_result['template'] : $class . '_' . $action; Template::showPage($template_name, $request_result['data']); }
ob_start(); session_start(); include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'configure.php'; define('FULL_REQUEST', (empty($_SERVER["HTTPS"]) ? 'http' : 'https') . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); $module = 'files'; $action = ''; $params = array(); if (!empty($_SERVER["PATH_INFO"]) && preg_match('!/(\\w+)/?(\\w+)?/?(.*)/?!', $_SERVER["PATH_INFO"], $chunks)) { list(, $module, $action, $params_str) = $chunks; if ($params_str) { $keys = array(); $values = array(); foreach (explode('/', $params_str) as $i => $str) { if ($i & 1) { $values[] = $str; } else { $keys[] = $str; } } if (count($keys) == count($values)) { $params = array_combine($keys, $values); } } } if (class_exists($module)) { $handler = new $module(); $handler->processRequest($action, $params); } else { Template::show404Page(); }
/** * @request_handler * @return array */ public function download($params) { empty($params['name']) and Template::show404Page(); $db = DB::getInstance(); $file = $db->query(SqlBuilder::newQuery()->from('file')->select('*')->where('file_name', $db->quote($params['name']))->limit(1)->getSql())->fetch() or Template::show404Page(); $dir = rtrim(Config::getConfig('repository'), '\\/') . DIRECTORY_SEPARATOR; ob_end_clean(); header("Content-Type: {$file['type']}"); header("Accept-Ranges: bytes"); header("Content-Length: {$file['size']}"); header("Content-Disposition: attachment; filename={$file['original_name']}"); header("Content-Transfer-Encoding: binary"); readfile($dir . $file['file_name']); }