JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
db_upgrade rework, admin_header, cleanup
[wfpl-cms.git] / inc / cms.php
1 <?php
2
3 # This function (which loads the navbar and page content from the database) is
4 # called automatically by wfpl_main()
5
6 function enc_css_str($str) {
7         $str = str_replace("\\", "\\00005c", $str);
8         return str_replace("\"", "\\000022", $str);
9 }
10
11 function cms_display($basename, &$tem) {
12         if(preg_match('/([.]l(ocal)?$)|^192[.]168[.]|^127.0.0.1$|^10[.]/', $_SERVER['HTTP_HOST'])) {
13                 $GLOBALS['wfpl_main_template']->set('$running_locally');
14         }
15         $tem->set('$host', this_host());
16         $nav_items = db_get_assocs('cms_pages', "coalesce(nullif(nav_title,''), title) as title,filename", 'where navbar!=0 order by navbar');
17         if($nav_items) {
18                 foreach($nav_items as &$item) {
19                         $item['basename'] = $item['filename']; # for nav-links as images
20                         if($item['filename'] == $basename) {
21                                 $item['current'] = true;
22                         }
23                         if($item['filename'] == 'index') {
24                                 $item['filename'] = './';
25                         }
26                         if($item['title'] == '') {
27                                 $item['title'] = '(untitled)';
28                         }
29                 }
30                 $tem->set('$navbar_items', $nav_items);
31         }
32
33         $header_image = persistent_get('wfplcms_header_image');
34         if ($header_image) {
35                 $hi_css  = "\n<style>\n";
36                 if ($header_image['width'] != WFPL_SITE_WIDTH) {
37                         $hi_css .= "#site_header {\n";
38                         $hi_css .=   'width: ' . $header_image['width'] . "px;\n";
39                         $hi_css .= "}\n";
40                 }
41                 $hi_css .= "#site_header:before {\n";
42                 $hi_css .=   "content: \"\";\n";
43                 $hi_css .=   'background-image: url(' . $header_image['url'] . ");\n";
44                 $hi_css .=   'padding-top: ' . ($header_image['height'] / $header_image['width'] * 100) . "%;\n";
45                 $hi_css .= "}\n";
46                 if ($header_image['caption']) {
47                         $hi_css .= "#site_header:after {\n";
48                         $hi_css .=   "content: \"" . enc_css_str($header_image['caption']) . "\";\n";
49                         $hi_css .= "}\n";
50                 }
51                 $hi_css .= "</style>\n";
52
53                 $tem->set('$cms_css', $hi_css);
54         }
55
56         $cms_page_id = cms_display_content($tem, 'where filename=%"', $basename);
57
58         $footer = db_get_value('cms_pages', 'content', 'where filename="_footer"');
59         if ($footer) {
60                 $tem->set('$cms_footer', $footer);
61         }
62
63         if(session_auth_can('admin_links')) {
64                 $admin_links = array();
65                 if($cms_page_id) {
66                         $admin_links['$edit_page_id'] = $cms_page_id;
67                 }
68                 $tem->set('$admin_links', $admin_links);
69         }
70
71         if($cms_page_id) {
72                 return true;
73         } else {
74                 return false;
75         }
76 }
77
78 function cms_display_content(&$tem /*, 'where clause %", %i', string, int */) {
79         $args = array_slice(func_get_args(), 1);
80         $args = array_merge(array('cms_pages', 'id,title,keywords,description,layout,content,sidebar_content'), $args);
81         $row = call_user_func_array('db_get_assoc', $args);
82         if($row) {
83                 $tem->set('$cms_title', $row['title']);
84                 $tem->set('$meta_keywords', $row['keywords']);
85                 $tem->set('$meta_description', $row['description']);
86                 $tem->set('$cms_body', $row['content']);
87                 if ($row['layout'] === '' || $row['layout'] === '0') {
88                         $tem->set('$layout_centerer_class', 'full');
89                 } else {
90                         $tem->set('$layout_centerer_class', 'with_sidebar');
91                         if ($row['layout'] === '1') {
92                                 $tem->set('$layout_sidebar_class', 'plain');
93                         } else {
94                                 $tem->set('$layout_sidebar_class', 'bordered');
95                         }
96                         $tem->set('$cms_sidebar', $row['sidebar_content']);
97                 }
98                 return $row['id'];
99         } else {
100                 $tem->set('$layout_centerer_class', 'full');
101         }
102         return false;
103 }