static function perform_controller_action($class_path, $action, $objects, $parameters) { //We treat 'new' the same as 'edit', since they generally contain a lot of the same code if ($action == "new") { $action = "edit"; } //Let's look for a controller $controller_path = App::$site . "/controllers/" . $class_path . "_controller.php"; if (file_exists($controller_path)) { require_once $controller_path; $class_path_components = explode("/", $class_path); $class = $class_path_components[count($class_path_components) - 1]; $class[0] = strtoupper($class[0]); $class = preg_replace_callback('/_([a-z])/', create_function('$c', 'return strtoupper($c[1]);'), $class); $controller_class = $class . "Controller"; if (!method_exists($controller_class, $action)) { if (Router::render_view($class_path, $action)) { exit; } else { fatal_error("{$controller_class} does not respond to {$action}"); } } $controller = new $controller_class(); $controller->parameters = $parameters; call_user_func_array(array($controller, $action), $objects); exit; } //If no controller was found, we'll look for a view if (Router::render_view($class_path, $action)) { exit; } }