3 # This form requires wfpl. See: http://sametwice.com/wfpl
5 define('ADMIN_PAGES_DB_FIELDS', 'title,filename,navbar,nav_title,layout,content,sidebar_content,description,keywords');
8 function format_cms_filename($str) {
9 $str = format_filename($str);
10 $str = str_replace('.', '_', $str);
15 function admin_pages_get_fields() {
18 $data['title'] = format_oneline(_REQUEST_cut('title'));
19 $data['filename'] = format_cms_filename(_REQUEST_cut('filename'));
20 $data['navbar'] = format_options(_REQUEST_cut('navbar'), 'navbar');
21 $data['nav_title'] = format_oneline(_REQUEST_cut('nav_title'));
22 $data['layout'] = format_options(_REQUEST_cut('layout'), 'layout');
23 $data['content'] = format_unix(_REQUEST_cut('content'));
24 if (isset($_REQUEST['sidebar_content'])) { // probs not needed
25 $data['sidebar_content'] = format_unix(_REQUEST_cut('sidebar_content'));
27 if (isset($_REQUEST['description'])) {
28 $data['description'] = format_unix(_REQUEST_cut('description'));
30 if (isset($_REQUEST['keywords'])) {
31 $data['keywords'] = format_unix(_REQUEST_cut('keywords'));
38 function admin_pages_main() {
39 session_auth_must('admin_pages');
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);
75 $GLOBALS['wfpl_main_template']->data['$admin_links']['$edit_page_id'] = $id;
78 function admin_pages_main_delete($id) {
79 db_delete('cms_pages', 'where id=%i', $id);
80 message('Page deleted.');
81 return './admin_pages';
84 # get all images from admin_images (for cms)
85 function admin_pages_get_images() {
87 $rows = db_get_assocs('cms_images', 'image,name,caption', "order by coalesce(nullif(name, ''), caption), created_at");
90 foreach($rows as &$row) { $id += 1;
91 $parts = explode(' ', $row['image'] . ' ', 7);
95 'aspect' => ''.(round(100000 * ((int)$parts[2]) / ((int)$parts[1]) / 1000)).'%',
96 'name' => $row['name'],
97 'caption' => $row['caption']
104 function admin_pages_main_listing() {
107 $sort = _REQUEST_cut('sort');
108 if ($sort && substr($sort, 0, 1) === '-') {
109 $sort = substr($sort, 1);
112 $data["sorting-by-$sort"] = '-';
114 $legal_sorts = explode(',', ADMIN_PAGES_DB_FIELDS);
115 if (!$sort || !in_array($sort, $legal_sorts)) {
119 $data['rows'] = db_get_assocs('cms_pages', 'id,coalesce(nullif(nav_title,\'\'), title) as title,filename', "order by $sort $desc limit 1000");
120 tem_set('listing', $data);
123 function admin_pages_main_form($id = false) {
128 tem_set('$basename', 'admin_pages');
131 ['0', "Full (no sidebar)"],
132 ['1', "With Plain Sidebar"],
133 ['2', "With Bordered Sidebar"]
136 $navbar_options = array(array('ignored', 'Not at all'), array('0', 'First'));
137 $rows = db_get_rows('cms_pages', 'id,coalesce(nullif(nav_title,\'\'), title) as title,navbar', 'where navbar != 0 order by navbar');
138 if($rows) for($i = 0; $i < count($rows); ++$i) {
139 list($other_id, $other_title, $other_ord) = $rows[$i];
140 if($other_id != $id) { # don't display ourselves
141 $navbar_options[] = array($i + 1, "After \"$other_title\"");
144 pulldown('navbar', $navbar_options, PULLDOWN_2D);
146 if(isset($_POST['title'])) {
147 $data = admin_pages_get_fields();
149 # We'll save anything (no required fields)
151 $data['navbar'] = db_reposition('cms_pages', $id, $data['navbar'], 'navbar', 'page');
153 if($data['navbar'] && $data['filename'] == '') {
154 message('This page was removed from the navigation column because it does not have a filename. (Pages without filenames are visible only to admins.)');
159 db_update_assoc('cms_pages', $data, 'where id=%i', $id);
161 message('Page updated.');
163 db_insert_assoc('cms_pages', $data);
165 message('Page saved.');
167 if($data['filename']) {
168 return "./$data[filename]";
170 return "./admin_pages?id=$id";
173 # we've recieved an edit id, but no data. So we grab the values to be edited from the database
174 $data = db_get_assoc('cms_pages', ADMIN_PAGES_DB_FIELDS, 'where id=%i', $id);
175 if($data['navbar']) {
176 $data['navbar'] = db_count('cms_pages', 'where navbar!=0 && navbar<%i', $data['navbar']);
178 $data['navbar'] = 'ignored';
181 # form not submitted, set default values:
182 $data = array('filename' => format_cms_filename($_REQUEST['new_filename']));
185 if (!isset($data['layout']) || $data['layout'] === '' || $data['layout'] === '0') {
186 $data['sidebar_editor_display'] = 'none';
188 $data['sidebar_editor_display'] = 'block';
191 tem_set('wfpl_images_json', json_encode(admin_pages_get_images()));
192 tem_set('wfpl_image_width_full', WFPL_IMAGE_WIDTH_FULL);
193 tem_set('wfpl_image_width_small', WFPL_IMAGE_WIDTH_SMALL);
194 tem_set('wfpl_image_width_thumb', WFPL_IMAGE_WIDTH_THUMB);
195 tem_set('form', $data);
196 tem_set('$head'); # wysiwyg init goes in <head>