3 require_once('db.php');
5 header('Content-type: application/json');
6 $maxage = config('jsonCacheMaxAge');
7 header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $maxage) . ' GMT');
8 header("Cache-Control: maxage=$maxage");
10 function exit_with_error($status, $details = array()) {
11 $details['status'] = $status;
12 merge_additional_details($details);
14 echo json_encode($details);
18 function echo_success($details = array()) {
19 $details['status'] = 'OK';
20 merge_additional_details($details);
22 echo json_encode($details);
25 function exit_with_success($details = array()) {
26 echo_success($details);
30 $additional_exit_details = array();
32 function set_exit_detail($name, $value) {
33 global $additional_exit_details;
34 $additional_exit_details[$name] = $value;
37 function merge_additional_details(&$details) {
38 global $additional_exit_details;
39 foreach ($additional_exit_details as $name => $value) {
40 if (!array_key_exists($name, $details))
41 $details[$name] = $value;
48 exit_with_error('DatabaseConnectionError');
52 function camel_case_words_separated_by_underscore($name) {
53 return implode('', array_map('ucfirst', explode('_', $name)));
56 function require_format($key, $value, $pattern) {
57 if (!preg_match($pattern, $value))
58 exit_with_error('Invalid' . camel_case_words_separated_by_underscore($key), array('value' => $value));
61 function require_existence_of($array, $list_of_arguments, $prefix = '') {
64 foreach ($list_of_arguments as $key => $pattern) {
65 $name = camel_case_words_separated_by_underscore($prefix . $key);
66 if (!array_key_exists($key, $array))
67 exit_with_error($name . 'NotSpecified');
68 require_format($name, $array[$key], $pattern);