JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
cke_cms_images: link/instructions to upload new
[wfpl-cms.git] / admin_pages.php
1 <?php
2
3 # This form requires wfpl. See: http://jasonwoof.org/wfpl
4
5 define('ADMIN_PAGES_DB_FIELDS', 'title,filename,navbar,nav_title,content,description,keywords');
6
7
8 require_once('code/wfpl/format.php');
9 require_once('code/wfpl/email.php');
10
11 function format_cms_filename($str) {
12         $str = format_filename($str);
13         $str = str_replace('.', '_', $str);
14         return $str;
15 }
16
17
18 function admin_pages_get_fields() {
19         $data = array();
20
21         $data['title'] = format_oneline(_REQUEST_cut('title'));
22         $data['filename'] = format_cms_filename(_REQUEST_cut('filename'));
23         $data['navbar'] = format_options(_REQUEST_cut('navbar'), 'navbar');
24         $data['nav_title'] = format_oneline(_REQUEST_cut('nav_title'));
25         $data['content'] = format_unix(_REQUEST_cut('content'));
26         $data['description'] = format_unix(_REQUEST_cut('description'));
27         $data['keywords'] = format_unix(_REQUEST_cut('keywords'));
28
29         return $data;
30 }
31
32
33 function admin_pages_main() {
34         if(!logged_in_as_admin()) {
35                 $_REQUEST['url'] = this_url();
36                 return 'admin_login';
37         }
38
39         $id = _REQUEST_cut('edit_id');
40         if($id) {
41                 return admin_pages_main_form($id);
42         }
43
44         $id = _REQUEST_cut('admin_pages_delete_id');
45         if($id) {
46                 return admin_pages_main_delete($id);
47         }
48
49         if(_REQUEST_cut('new')) {
50                 return admin_pages_main_form();
51         }
52
53         if(_REQUEST_cut('list')) {
54                 return admin_pages_main_listing();
55         }
56
57         $id = _REQUEST_cut('id');
58         if($id) {
59                 return admin_pages_main_display($id);
60         }
61
62         if(isset($_POST['title'])) {
63                 return admin_pages_main_form();
64         }
65
66         # default action:
67         return admin_pages_main_listing();
68 }
69
70 # admin-only access to view pages with no filename
71 function admin_pages_main_display($id) {
72         cms_display_content($GLOBALS['wfpl_main_template'], 'where id=%i', $id);
73 }
74
75 function admin_pages_main_delete($id) {
76         db_delete('cms_pages', 'where id=%i', $id);
77         message('Page deleted.');
78         return './admin_pages';
79 }
80
81 function admin_pages_get_images() {
82         $images = db_get_assocs('cms_images', 'image,name,caption,sizes', 'order by name, caption, image');
83         $id = 1;
84         foreach($images as &$image) {
85                 $image['id'] = '' . $id;
86                 $id += 1;
87         }
88         return $images;
89 }
90
91 function admin_pages_main_listing() {
92         $listing_rows = db_get_assocs('cms_pages', 'id,filename,coalesce(nullif(nav_title,\'\'), title) as title', 'order by concat(nav_title,title)');
93         tem_set('listings', $listing_rows);
94 }
95
96 function admin_pages_main_form($id = false) {
97         if($id) {
98                 tem_set('id', $id);
99         }
100
101
102         $navbar_options = array(array('ignored', 'Not at all'), array('0', 'First'));
103         $rows = db_get_rows('cms_pages', 'id,coalesce(nullif(nav_title,\'\'), title) as title,navbar', 'where navbar != 0 order by navbar');
104         if($rows) for($i = 0; $i < count($rows); ++$i) {
105                 list($other_id, $other_title, $other_ord) = $rows[$i];
106                 if($other_id != $id) { # don't display ourselves
107                         $navbar_options[] = array($i + 1, "After \"$other_title\"");
108                 }
109         }
110         pulldown('navbar', $navbar_options, PULLDOWN_2D);
111
112         if(isset($_POST['title'])) {
113                 $data = admin_pages_get_fields();
114
115                 # We'll save anything (no required fields)
116
117                 $data['navbar'] = db_reposition('cms_pages', $id, $data['navbar'], 'navbar', 'page');
118
119                 if($data['navbar'] && $data['filename'] == '') {
120                         message('This page was removed from the navigation column because it does not have a filename. (Pages without filenames are visible only to admins.)');
121                         $data['navbar'] = 0;
122                 }
123
124                 if($id) {
125                         db_update_assoc('cms_pages', $data, 'where id=%i', $id);
126                         $id = $id;
127                         message('Page updated.');
128                 } else {
129                         db_insert_assoc('cms_pages', $data);
130                         $id = db_auto_id();
131                         message('Page saved.');
132                 }
133                 if($data['filename']) {
134                         return "./$data[filename]";
135                 } else {
136                         return "./admin_pages?id=$id";
137                 }
138         } elseif($id) {
139                 # we've recieved an edit id, but no data. So we grab the values to be edited from the database
140                 $data = db_get_assoc('cms_pages', ADMIN_PAGES_DB_FIELDS, 'where id=%i', $id);
141                 if($data['navbar']) {
142                         $data['navbar'] = db_count('cms_pages', 'where navbar!=0 && navbar<%i', $data['navbar']);
143                 } else {
144                         $data['navbar'] = 'ignored';
145                 }
146         } else {
147                 # form not submitted, set default values:
148                 $data = array('filename' => format_cms_filename($_REQUEST['new_filename']));
149         }
150
151         tem_set('wfpl_images', admin_pages_get_images());
152         tem_set('form', $data);
153         tem_set('$head'); # wysiwyg init goes in <head>
154 }