3 # This form requires wfpl. See: http://jasonwoof.org/wfpl
5 define('ADMIN_PAGES_DB_FIELDS', 'title,filename,navbar,nav_title,content,description,keywords');
8 require_once('code/wfpl/format.php');
9 require_once('code/wfpl/email.php');
11 function format_cms_filename($str) {
12 $str = format_filename($str);
13 $str = str_replace('.', '_', $str);
18 function admin_pages_get_fields() {
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'));
33 function admin_pages_main() {
34 if(!logged_in_as_admin()) {
35 $_REQUEST['url'] = this_url();
39 tem_set('this_host', this_host());
41 $id = _REQUEST_cut('edit_id');
43 return admin_pages_main_form($id);
46 $id = _REQUEST_cut('admin_pages_delete_id');
48 return admin_pages_main_delete($id);
51 if(_REQUEST_cut('new')) {
52 return admin_pages_main_form();
55 if(_REQUEST_cut('list')) {
56 return admin_pages_main_listing();
59 $id = _REQUEST_cut('id');
61 return admin_pages_main_display($id);
64 if(isset($_POST['title'])) {
65 return admin_pages_main_form();
69 return admin_pages_main_listing();
72 # admin-only access to view pages with no filename
73 function admin_pages_main_display($id) {
74 cms_display_content($GLOBALS['wfpl_main_template'], 'where id=%i', $id);
77 function admin_pages_main_delete($id) {
78 db_delete('cms_pages', 'where id=%i', $id);
79 message('Page deleted.');
80 return './admin_pages';
83 function admin_pages_main_listing() {
84 $listing_rows = db_get_assocs('cms_pages', 'id,filename,coalesce(nullif(nav_title,\'\'), title) as title', 'order by concat(nav_title,title)');
85 tem_set('listings', $listing_rows);
88 function admin_pages_main_form($id = false) {
94 $navbar_options = array(array('ignored', 'Not at all'), array('0', 'First'));
95 $rows = db_get_rows('cms_pages', 'id,coalesce(nullif(nav_title,\'\'), title) as title,navbar', 'where navbar != 0 order by navbar');
96 if($rows) for($i = 0; $i < count($rows); ++$i) {
97 list($other_id, $other_title, $other_ord) = $rows[$i];
98 if($other_id != $id) { # don't display ourselves
99 $navbar_options[] = array($i + 1, "After \"$other_title\"");
102 pulldown('navbar', $navbar_options, PULLDOWN_2D);
104 if(isset($_POST['title'])) {
105 $data = admin_pages_get_fields();
107 # We'll save anything (no required fields)
109 $data['navbar'] = db_reposition('cms_pages', $id, $data['navbar'], 'navbar', 'page');
111 if($data['navbar'] && $data['filename'] == '') {
112 message('This page was removed from the navigation column because it does not have a filename. (Pages without filenames are visible only to admins.)');
117 db_update_assoc('cms_pages', $data, 'where id=%i', $id);
119 message('Page updated.');
121 db_insert_assoc('cms_pages', $data);
123 message('Page saved.');
125 if($data['filename']) {
126 return "./$data[filename]";
128 return "./admin_pages?id=$id";
131 # we've recieved an edit id, but no data. So we grab the values to be edited from the database
132 $data = db_get_assoc('cms_pages', ADMIN_PAGES_DB_FIELDS, 'where id=%i', $id);
133 if($data['navbar']) {
134 $data['navbar'] = db_count('cms_pages', 'where navbar!=0 && navbar<%i', $data['navbar']);
136 $data['navbar'] = 'ignored';
139 # form not submitted, set default values:
140 $data = array('filename' => format_cms_filename($_REQUEST['new_filename']));
143 tem_set('form', $data);
144 tem_set('$head'); # wysiwyg init goes in <head>