/** * DELETE method: Delete user * * @param Request $request * @throws Exception * @return mixed */ public function delete($request) { switch (count($request->url_elements)) { case 2: // Don't have permissions - throw Exception if (!Application::isAdmin()) { throw new Exception("You don't have required permissions to update this user.", 403); } // Like success - delete user & return $user = User::find_by_id($request->url_elements[1]); if ($user) { $user->delete(); return json_decode($user->to_json(array('except' => 'password'))); } else { throw new Exception("User not found.", 404); } default: throw new Exception("Unknown request.", 500); } }
/** * General executor. * * @param array $options * @return string */ public function execute($options = array()) { // Init sessions. session_start(); // Apply application config. Application::$config = new Config(isset($options['config']) && is_array($options['config']) ? $options['config'] : null); // Init debug mode. error_reporting(Application::$config->debug->bool ? E_ALL : 0); // Init Active Record. ActiveRecord\Config::initialize(function ($cfg) { $cfg->set_connections(Application::$config->connections->value); $cfg->set_default_connection(Application::$config->connection->string); if (!Application::$config->directories->isEmpty() && isset(Application::$config->directories->value['models'])) { $base_dir = isset(Application::$config->directories->value['base']) ? Application::$config->directories->value['base'] : __DIR__; $cfg->set_model_directory(str_replace('{{base}}', $base_dir, Application::$config->directories->value['models'])); } }); // Parse only AJAX requests. if (Application::$config->ajax_only->bool && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) { header('HTTP/1.1 500 Internal server error'); $response_obj = ResponseBuilder::create(500, "This API allow only AJAX requests.", $_SERVER['HTTP_ACCEPT']); return $response_obj->render(); } // Parse incoming request info. $request = new Request(); // Parse request method & parameters $request->method = strtoupper(isset($options['method']) ? $options['method'] : $_SERVER['REQUEST_METHOD']); if (isset($options['parameters']) && is_array($options['parameters'])) { $request->parameters = new ParametersList($options['parameters']); } else { if (!isset($options['method'])) { switch ($request->method) { case 'GET': $request->parameters = new ParametersList($_GET); break; case 'POST': $request->parameters = new ParametersList($_POST); break; default: $request->parameters = new ParametersList(); break; } } else { $request->parameters = new ParametersList(); } } // Parse routes settings. if (isset($options['path']) || isset($_SERVER['PATH_INFO'])) { $path = trim(isset($options['path']) ? $options['path'] : $_SERVER['PATH_INFO'], '/'); if (!Application::$config->routes->isEmpty() && is_array(Application::$config->routes->value)) { $routes = Application::$config->routes->value; if (isset($routes['general']) && is_array($routes['general'])) { foreach ($routes['general'] as $key => $route) { $path = preg_replace($key, $route, $path); } } if (isset($routes[strtolower($request->method)]) && is_array($routes[strtolower($request->method)])) { foreach ($routes[strtolower($request->method)] as $key => $route) { $path = preg_replace($key, $route, $path); } } } $path_elements = explode('?', $path); if (count($path_elements) > 0) { $path = $path_elements[0]; if (count($path_elements) > 1) { $path_parameters = explode('&', $path_elements[1]); foreach ($path_parameters as $path_parameter) { $path_parameter_pair = explode('=', $path_parameter); switch (count($path_parameter_pair)) { case 1: $request->parameters->add($path_parameter_pair[0]); break; case 2: $request->parameters->add($path_parameter_pair[0], $path_parameter_pair[1]); break; } } } } $request->url_elements = explode('/', trim($path, '/')); } // Parse incoming data. if (isset($options['json'])) { $request->json = is_object($options['json']) ? $options['json'] : json_decode($options['json']); } else { $request_data = file_get_contents('php://input'); $request->json = json_decode($request_data); } // Route the request. if (!empty($request->url_elements) && !empty($request->url_elements[0])) { $controller_name = ucfirst($request->url_elements[0]); $controller_classname = ($this->__attachController($controller_name) ? $controller_name : 'Sija\\Controllers\\' . $controller_name) . 'Controller'; $controller_parents = class_parents($controller_classname); if (class_exists($controller_classname) && $controller_parents && is_array($controller_parents) && in_array("Sija\\Common\\AbstractController", $controller_parents)) { $controller = new $controller_classname(); $action_name = strtolower($request->method); try { $response_status = 200; $response_data = call_user_func_array(array($controller, $action_name), array($request)); } catch (Exception $e) { $response_status = $e->getCode(); $response_data = $e->getMessage(); } } else { header('HTTP/1.1 500 Internal server error'); $response_status = 500; $response_data = 'Unknown request: ' . $request->url_elements[0]; } } else { header('HTTP/1.1 500 Internal server error'); $response_status = 500; $response_data = 'Unknown request'; } // Return response $response_obj = ResponseBuilder::create($response_status, $response_data, $_SERVER['HTTP_ACCEPT']); return $response_obj->render(); }