]>
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 $template_variables['page_number'] = 0;
70 } else if (count($path_components) >= 1 && $path_components[0] == 'feed') {
71 header('Content-type: application/atom+xml;');
73 } else if (count($path_components) >= 1 && $path_components[0] == 'cx') {
74 if (count($path_components) >= 2 && $path_components[1] == 'login') {
75 if (cx_admin_logged_in()) {
76 cx_http_redirect(cx_url_admin('/'));
79 $username = cx_form_input_sanitized('id');
80 $password = cx_form_input_sanitized('password');
82 if ($username != null && $password != null && cx_admin_login($username, $password)) {
83 cx_http_redirect(cx_url_admin('/'));
87 $template_class = 'admin';
91 if (cx_admin_logged_in() == false) {
92 cx_http_redirect(cx_url_admin('/login/'));
95 if (count($path_components) >= 2 && $path_components[1] == 'logout') {
97 cx_http_redirect(cx_url_admin('/'));
99 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'add') {
100 $template_variables['post_id'] = '0';
101 $template_variables['post_title'] = '';
102 $template_variables['post_slug'] = '';
103 $template_variables['post_date'] = '';
104 $template_variables['post_data'] = '';
105 $template_variables['post_is_draft'] = true;
108 $template_class = 'admin';
110 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'edit') {
111 $post = cx_posts_find_post($_GET['id']);
113 $template_variables['post_id'] = $post->id
;
114 $template_variables['post_title'] = $post->title
;
115 $template_variables['post_slug'] = $post->slug
;
116 $template_variables['post_date'] = $post->date
;
117 $template_variables['post_data'] = $post->data
;
118 $template_variables['post_is_draft'] = $post->is_draft
;
120 $template_class = 'admin';
122 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'update') {
123 $title = cx_form_input_sanitized('post_title');
124 $slug = cx_form_input_sanitized('post_slug');
125 if (isset($slug) == false) $slug = null;
126 $date = cx_form_input_sanitized_date_time('post_date');
127 if (isset($date) == false) $date = null;
128 $draft = cx_form_input_sanitized('post_is_draft') == 'draft';
129 $data = cx_form_input_sanitized_allowing_html('post_data');
131 if (isset($_GET['id']) == false or $_GET['id'] == 0) {
132 cx_posts_add_post(1, $title, $slug, $date, $draft, $data);
135 cx_posts_update_post($id, $title, $slug, $date, $draft, $data);
138 cx_http_redirect(cx_url_admin('/'));
140 } else if (count($path_components) >= 3 && $path_components[1] == 'posts' && $path_components[2] == 'delete') {
141 cx_posts_delete_post($_GET['id']);
142 cx_http_redirect(cx_url_admin('/'));
144 } else if (count($path_components) >= 3 && $path_components[1] == 'images' && $path_components[2] == 'add') {
145 $template_variables['image_id'] = '0';
146 $template_variables['image_alt_text'] = '';
148 $template_class = 'admin';
150 } else if (count($path_components) >= 3 && $path_components[1] == 'images' && $path_components[2] == 'update') {
151 $alt_text = cx_form_input_sanitized('image_alt_text');
153 $filename = $_FILES['image_file']['tmp_name'];
154 $original_filename = $_FILES['image_file']['name'];
156 cx_images_add_image(1, $alt_text, $filename, $original_filename);
158 cx_http_redirect(cx_url_admin('/'));
161 $template_class = 'admin';
166 } else if (count($path_components) >= 2 && $path_components[0] == 'page') { // FIXME sometime, needs more flexibility...
167 $page_number = $path_components[1];
170 $template_variables['page_number'] = $page_number;
171 } else if (count($path_components) >= 3) { // FIXME sometime, needs more flexibility...
172 $year = $path_components[0];
173 $month = $path_components[1];
174 $slug = $path_components[2];
177 $template_variables['post_id'] = cx_posts_find_post_id($slug);
180 if ($template != null) {
181 $output = cx_template_render($template_class, $template, $template_variables);
184 http_response_code(404);