public static function process() { if (array_key_exists('c', $_GET)) { $controller_name = $_GET['c']; } if (array_key_exists('a', $_GET)) { $action_name = $_GET['a']; } if (array_key_exists('v', $_GET)) { $value = $_GET['v']; } if (array_key_exists('sv', $_GET)) { $sub_value = $_GET['sv']; } // set default values if (!isset($controller_name)) { $controller_name = 'home'; } if (!isset($action_name)) { $action_name = 'index'; } if (!isset($value)) { $value = ''; } if (!isset($sub_value)) { $sub_value = ''; } $verb = strtoupper($_SERVER['REQUEST_METHOD']); $query_string_array = array(); if (array_key_exists('QUERY_STRING', $_SERVER)) { parse_str($_SERVER['QUERY_STRING'], $query_string_array); } $session_service = service_factory::get_session_service(); $session_service->set(); $session_service->extend(); switch ($controller_name) { case 'home': global $model; $controller = controller_factory::get_home_controller(); $model = $controller->index(); break; case 'account': global $model; $controller = controller_factory::get_account_controller(); switch ($action_name) { case 'signup': if ($verb === 'POST') { $model = $controller->do_signup($_POST['first-name'], $_POST['last-name'], $_POST['username'], $_POST['password']); } else { $model = $controller->show_signup(); } break; case 'signin': if ($verb === 'POST') { $model = $controller->do_signin($_POST['account-username'], $_POST['account-password']); if ($model->success) { dispatcher::redirect('/'); } } else { $url = ''; if (array_key_exists('url', $query_string_array)) { $url = $query_string_array['url']; } $model = $controller->show_signin($url); } break; case 'signout': $controller->signout(); dispatcher::redirect('/'); break; } break; case 'location': global $session; $controller = controller_factory::get_list_controller(); switch ($action_name) { case 'index': if ($session) { $data = $controller->get_locations($session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; case 'tracking': if ($session) { $data = $controller->get_trackings_by_location($value, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; case 'checkin': $data = $controller->get_trackings_by_location($value, 0); dispatcher::dispatch(200, count($data), 'application/json'); break; case 'report': if ($session) { $data = $controller->get_location_report_by_date($value); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; case 'status': if ($session) { $data = $controller->get_tracking_status($value, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; case 'join': if ($verb === 'POST') { if ($session) { $data = $controller->join_location($value, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } } break; case 'approve': if ($verb === 'POST') { if ($session) { $data = $controller->approve_user_at_location($value, $sub_value); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } } break; case 'deactivate': if ($verb === 'POST') { if ($session) { $data = $controller->deactivate_user_at_location($value, $sub_value); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } } break; case 'reactivate': if ($verb === 'POST') { if ($session) { $data = $controller->reactivate_user_at_location($value, $sub_value); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } } break; case 'show': if ($session) { $data = $controller->get_location($value, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; case 'member': if ($session) { $data = $controller->get_members($value); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { dispatcher::dispatch_error(401); } break; default: // do nothing } break; case 'list': global $model; global $session; if ($session) { $controller = controller_factory::get_list_controller(); $model = $controller->index(); } else { dispatcher::dispatch_error(401); } break; case 'tracking': if ($verb === 'POST') { global $session; if ($session) { $controller = controller_factory::get_list_controller(); $post_data = routing::parse_post_data(); if ($action_name === 'checkin') { $data = $controller->check_in($post_data->location_id, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } else { if ($action_name === 'checkout') { $data = $controller->check_out($post_data->location_id, $session->user_id); dispatcher::dispatch(200, json_encode($data), 'application/json'); } } } else { dispatcher::dispatch_error(401); } } break; default: // do nothing } // fallback if (dispatcher::load_view($controller_name, $action_name)) { exit; } else { // error dispatcher::dispatch_error(404); } }