]>
git.bts.cx Git - cx.git/blob - cx/cx.php
   3 function cx_require(...$segments) { 
   4         array_unshift($segments, CX_PATH
); 
   5         require_once(join(DIRECTORY_SEPARATOR
, $segments)); 
   8 define('CX_PATH', __DIR__
); 
  10 cx_require('lib', 'admin.php'); 
  11 cx_require('lib', 'form.php'); 
  12 cx_require('lib', 'http.php'); 
  13 cx_require('lib', 'images.php'); 
  14 cx_require('lib', 'posts.php'); 
  15 cx_require('lib', 'sessions.php'); 
  16 cx_require('lib', 'setup.php'); 
  17 cx_require('lib', 'site.php'); 
  18 cx_require('lib', 'system.php'); 
  19 cx_require('lib', 'template.php'); 
  20 cx_require('lib', 'url.php'); 
  21 cx_require('lib', 'user_data.php'); 
  22 cx_require('lib', 'users.php'); 
  24 function cx($db_path, $data_folder_path, $public_data_folder_path) { 
  25         define('CX_DATABASE_FILE', $db_path); 
  26         define('CX_USER_DATA_PATH', $data_folder_path); 
  27         define('CX_PUBLIC_USER_DATA_PATH', $public_data_folder_path); 
  29         if (cx_setup_required()) { 
  32                 require('../setup.php'); 
  33                 $new_author = cx_users_add_user(CX_SETUP_USER
, CX_SETUP_PASSWORD
); 
  34                 $new_site = cx_sites_add_site(CX_SETUP_URL
, CX_SETUP_TITLE
, CX_SETUP_BYLINE
, CX_SETUP_COPYRIGHT
); 
  35                 cx_sites_site_add_user($new_site, $new_author, true); 
  42         if (isset($_SERVER['REQUEST_URI'])) { 
  43                 $route_details = parse_url($_SERVER['REQUEST_URI']); 
  44                 if (isset($route_details['path'])) { 
  45                         $path = $route_details['path']; 
  49         $script_name = $_SERVER['SCRIPT_NAME']; 
  50         $script_name_len = strlen($script_name); 
  51         if (substr_compare($path, $script_name, 0, $script_name_len) == 0) { 
  52                 $path = substr($path, $script_name_len); 
  58 function cx_route($path) { 
  59         $path_components = explode('/', $path, 10); 
  60         $path_components = array_filter($path_components); 
  61         $path_components = array_values($path_components); // re-index 
  64         $template_class = 'public'; 
  65         $template_variables = []; 
  67         if (count($path_components) == 0) { 
  69         } else if (count($path_components) >= 1 && $path_components[0] == 'feed') { 
  70                 header('Content-type: application/atom+xml;'); 
  72         } else if (count($path_components) >= 1 && $path_components[0] == 'cx') { 
  73                 if (count($path_components) >= 2 && $path_components[1] == 'login') { 
  74                         if (cx_admin_logged_in()) { 
  75                                 cx_http_redirect(cx_url_admin('/')); 
  78                                 $username = cx_form_input_sanitized('id'); 
  79                                 $password = cx_form_input_sanitized('password'); 
  81                                 if ($username != null && $password != null && cx_admin_login($username, $password)) { 
  82                                         cx_http_redirect(cx_url_admin('/')); 
  86                                 $template_class = 'admin'; 
  90                         if (cx_admin_logged_in() == false) { 
  91                                 cx_http_redirect(cx_url_admin('/login/')); 
  94                                 if (count($path_components) >= 2 && $path_components[1] == 'logout') { 
  96                                         cx_http_redirect(cx_url_admin('/')); 
  98                                 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'add') { 
  99                                         $template_variables['post_id'] = '0'; 
 100                                         $template_variables['post_title'] = ''; 
 101                                         $template_variables['post_slug'] = ''; 
 102                                         $template_variables['post_date'] = ''; 
 103                                         $template_variables['post_data'] = ''; 
 104                                         $template_variables['post_is_draft'] = true; 
 107                                         $template_class = 'admin'; 
 109                                 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'edit') { 
 110                                         $post = cx_posts_find_post($_GET['id']); 
 112                                         $template_variables['post_id'] = $post->id
; 
 113                                         $template_variables['post_title'] = $post->title
; 
 114                                         $template_variables['post_slug'] = $post->slug
; 
 115                                         $template_variables['post_date'] = $post->date
; 
 116                                         $template_variables['post_data'] = $post->data
; 
 117                                         $template_variables['post_is_draft'] = $post->is_draft
; 
 119                                         $template_class = 'admin'; 
 121                                 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'update') { 
 122                                         $title = cx_form_input_sanitized('post_title'); 
 123                                         $slug = cx_form_input_sanitized('post_slug'); 
 124                                         if (isset($slug) == false) $slug = null; 
 125                                         $date = cx_form_input_sanitized_date_time('post_date'); 
 126                                         if (isset($date) == false) $date = null; 
 127                                         $draft = cx_form_input_sanitized('post_is_draft') == 'draft'; 
 128                                         $data = cx_form_input_sanitized('post_data'); 
 130                                         if (isset($_GET['id']) == false or $_GET['id'] == 0) { 
 131                                                 cx_posts_add_post(1, $title, $slug, $date, $draft, $data); 
 134                                                 cx_posts_update_post($id, $title, $slug, $date, $draft, $data); 
 137                                         cx_http_redirect(cx_url_admin('/')); 
 139                                 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'delete') { 
 140                                         cx_posts_delete_post($_GET['id']); 
 141                                         cx_http_redirect(cx_url_admin('/')); 
 143                                 } else if (count($path_components) >= 3 && $path_components[1] == 'images' && $path_components[2] == 'add') { 
 144                                         $template_variables['image_id'] = '0'; 
 145                                         $template_variables['image_alt_text'] = ''; 
 147                                         $template_class = 'admin'; 
 149                                 } else if (count($path_components) >= 3 && $path_components[1] == 'images' && $path_components[2] == 'update') { 
 150                                         $alt_text = cx_form_input_sanitized('image_alt_text'); 
 152                                         $filename = $_FILES['image_file']['tmp_name']; 
 153                                         $original_filename = $_FILES['image_file']['name']; 
 155                                         cx_images_add_image(1, $alt_text, $filename, $original_filename); 
 157                                         cx_http_redirect(cx_url_admin('/')); 
 160                                         $template_class = 'admin'; 
 165         } else if (count($path_components) >= 3) { // FIXME sometime, needs more flexibility... 
 166                 $year = $path_components[0]; 
 167                 $month = $path_components[1]; 
 168                 $slug = $path_components[2]; 
 171                 $template_variables['post_id'] = cx_posts_find_post_id($slug); 
 174         if ($template != null) { 
 175                 $output = cx_template_render($template_class, $template, $template_variables); 
 178                 http_response_code(404);