annotate .cms/mod/template.mod.php @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 <?php
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 $cms["modules"]["template.mod.php"] = array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 "name" => "template_module_name",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 "description" => "template_module_description",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 "files" => array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 ".cms/mod/template.mod.php",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 ".cms/css/template.css",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 ".cms/js/template.js",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 ".cms/lang/ru_RU.UTF-8/template.mod.php",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 ".cms/lang/en_US.UTF-8/template.mod.php",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 ".cms/lang/uk_UA.UTF-8/template.mod.php",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 // Return if module disabled
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 if ( ! empty( $cms["config"]["template.mod.php"]["disabled"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 // Install
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 if ( empty( $cms["config"]["template.mod.php"]["template"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 $cms["config"]["template.mod.php"]["template"] = "mini";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 if ( empty( $cms["config"]["template.mod.php"]["scripts"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 $cms["config"]["template.mod.php"]["scripts"] = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 $cms["template"] = $cms["config"]["template.mod.php"]["template"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 if ( ! isset( $cms["config"]["template.mod.php"]["disable_write_to_disk"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 $cms["config"]["template.mod.php"]["disable_write_to_disk"] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 if ( ! isset( $cms["config"]["template.mod.php"]["headers"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 $cms["config"]["template.mod.php"]["headers"] = "cache-control: max-age=0";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if ( is_admin() ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 hook_add_fn( "admin", "cms_template_admin" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 hook_add_fn( "admin_header", "cms_template_admin_header" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 hook_add_fn( "api", "cms_template_api" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 // Вызов функции cms_template_template сделаем пораньше,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 // чтобы в других модулях не нужно было ставить 20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 hook_add_fn( "template", "cms_template_template", 5 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 hook_add_fn( "echo", "cms_template_echo" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 hook_add_fn( "write", "cms_template_write" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 function cms_template_admin_header() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 $conf = $cms["config"]["template.mod.php"]["menu"]["template"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 if ( empty( $conf["hide"] ) && empty( $cms["config"]["admin_sections"][ $conf["section"] ]["hide"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 echo "<link rel=stylesheet href='{$cms['base_path']}css/template.css'>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 echo "<script src='{$cms['base_path']}js/template.js'></script>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 function cms_template_admin() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 $conf = $cms["config"]["template.mod.php"]["menu"]["template"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 if ( empty( $conf["hide"] ) && empty( $cms["config"]["admin_sections"][ $conf["section"] ]["hide"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 // Save settings
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 if ( ! empty( $_POST["save_template"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 $cms["config"]["template.mod.php"]["template"] = $_POST["template"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 $cms["config"]["template.mod.php"]["disable_write_to_disk"] = empty( $_POST["enable_cache"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 cms_save_config();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 cms_clear_cache();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 header( "Location: {$cms['base_path']}{$cms['config']['admin.mod.php']['admin_url']}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 $cms["hooks"]["admin"]["next"] = ""; // Предотвратить выдачу админки
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 // Save template headers
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 if ( ! empty( $_POST["save_template_headers"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 $cms["config"]["template.mod.php"]["headers"] = $_POST["template_headers"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 cms_save_config();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 header( "Location: {$cms['base_path']}{$cms['config']['admin.mod.php']['admin_url']}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 $cms["hooks"]["admin"]["next"] = ""; // Предотвратить выдачу админки
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 // Create menu item
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 if ( empty( $cms["config"]["template.mod.php"]["menu"]["template"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 $cms["config"]["template.mod.php"]["menu"]["template"] = array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 "title" => "template_module_name",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 "sort" => 70,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 "section" => "settings",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 cms_save_config();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 $options = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 foreach( glob( "{$cms['cms_dir']}/*/html.php" ) as $path_html_php ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 $template = preg_replace( "/.*\/([^\/]+)\/html\.php/u", "$1", $path_html_php );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 if ( substr( $template, 0, 6 ) !== "admin." ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 $options .= "<div class=option value='{$template}'>{$template}</div>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 cms_template_load_settings();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 $template_files_title = "<div class=title>" . __( "editable_files" ) . "</div>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 $template_files = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 if ( isset( $cms["templates"] ) && is_array( $cms["templates"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 foreach( $cms["templates"][ $cms["config"]["template.mod.php"]["template"] ]["files"] as $file ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 $template_files .= "<div class=file>{$file}</div>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 if ( empty( $template_files ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 $template_files = "<div class=no-files>" . __( "no_editable_files" ) . "</div>";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 $tr_title = __( "help" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 $tr_current = __( "current_template" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 $tr_save = __( "save" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 $tr_upl = __( "install_template" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if ( $cms["config"]["template.mod.php"]["disable_write_to_disk"] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 $enable_cache = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 $enable_cache = "checked";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 $headers_title = __( "headers_title" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 // Справка для шаблона определяется в файле template.settings.php
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 $help = __( "help", $cms["config"]["template.mod.php"]["template"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 if ( $help === "help" ) $help = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 // Display settings
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 $page = "
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 <div class=settings>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 <div class=template-install>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 <div class=upload_dnd>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 <input id=template-upload type=file name='myfile[]' multiple class=files>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 {$tr_upl}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 <div class=template>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 <form method=post>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 <div>{$tr_current}</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 <input name=template autocomplete=off type=hidden value='{$cms["config"]["template.mod.php"]["template"]}'>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 <div class=template-select-grid>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 <div class=field-select>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 <div class=value>{$cms["config"]["template.mod.php"]["template"]}</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 <div class=icon></div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 <div class=field-options>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 {$options}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 <label>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 <input type=checkbox name=enable_cache {$enable_cache}>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 <span class=enable-cache>" . __( "enable_cache" ) . "</span>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 </label>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 <button name=save_template value=save>{$tr_save}</button>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 </form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 <form method=post class=template-headers>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 <div class=template-headers-title>{$headers_title}</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 <textarea name=template_headers>{$cms['config']['template.mod.php']['headers']}</textarea>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 <button name=save_template_headers value=save>{$tr_save}</button>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 </form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 <div class=template-manual>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 <div>{$tr_title}</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 {$help}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 <div class=template-files>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 {$template_files_title}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 {$template_files}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 <div class='template-editor-bg hidden'>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 <div class=template-editor-grid>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 <div class=template-editor-header>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 <div class=close-template-button></div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 <div class=save-template-button></div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186 <span class=template-editor-title></span>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 <div class=template-editor>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 <textarea></textarea>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 <div class=snip-grid>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 <div class=css>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 <div data-type=snip data-otag='@media (min-width: px) and (max-width: px) {\n' data-ctag='\n}'>@media (min) and (max)</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 <div data-type=snip data-otag='/* ' data-ctag=' */'>/* comment */</div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 <a href='{$cms['base_path']}man/{$cms['config']['locale']}/hint_css.html' target=_blank>" . __( "hint_css" ) . "</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 <div class=php>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 <a href='{$cms['base_path']}man/{$cms['config']['locale']}/hint_php.html' target=_blank>" . __( "hint_php" ) . "</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 <div class=html>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 <a href='{$cms['base_path']}man/{$cms['config']['locale']}/hint_html.html' target=_blank>" . __( "hint_html" ) . "</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 ";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 $cms["admin_pages"]["template"] = $page;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 // Load template settings
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 function cms_template_load_settings() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 $settings = "{$cms['cms_dir']}/{$cms['config']['template.mod.php']['template']}/template.settings.php";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 if ( file_exists( $settings ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 include( $settings );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 function cms_template_api() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 if ( ! empty( $_POST["fn"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 switch ( $_POST["fn"] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 case "clear_cache":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 cms_clear_cache();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 echo( json_encode( array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 "info_text" => __( "cache_cleared" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 "info_class" => "info-success",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 "info_time" => 5000,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 case "get_template_file":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 $file = file_get_contents( $cms["site_dir"] . "/" . $_POST["file"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 if ( $file !== false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 $ok = "true";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 $ok = "false";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 echo( json_encode( array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 "ok" => $ok,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 "file" => $file,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 case "save_template_file":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 $file = file_put_contents( $cms["site_dir"] . "/" . $_POST["file"], $_POST["content"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 if ( $file !== false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 $ok = "true";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 $msg = __( "saved" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 $class = "info-success";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 $ok = "false";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 $msg = __( "save_error" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 $class = "info-error";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 cms_clear_cache();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 echo( json_encode( array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 "ok" => $ok,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 "info_text" => $msg,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 "info_class" => $class,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 "info_time" => 5000,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 case "install_template":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 $success = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 //$text = "dev.coffee-cms.ru";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 //if ( $cms["url"]["host"] !== $text )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 foreach ( $_FILES["myfile"]["name"] as $n => $name ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 if ( $_FILES["myfile"]["error"][$n] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 $success = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 $text = str_replace( "xxx", $name, __( "upload_error_xxx" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 // Unpack Template
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 // Object Oriented Style for future compability with PHP 8
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 $zip = new ZipArchive;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 if ( $zip->open( $_FILES["myfile"]["tmp_name"][$n] ) === TRUE ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 $zip->extractTo( $cms["site_dir"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 $zip->close();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 $text = __( "install_success" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 $success = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 $text = str_replace( "xxx", $name, __( "cant_unzip_xxx" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 if ( $success ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 echo( json_encode( array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 "info_text" => $text,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 "info_class" => "info-success",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 "info_time" => 5000,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 echo( json_encode( array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 "info_text" => $text,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 "info_class" => "info-error",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 "info_time" => 10000,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 function cms_template_template() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 if ( is_file( $cms["cms_file"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 if ( substr( $cms["cms_file"], -4 ) === ".php" || strpos( substr( $cms["cms_file"], strlen( $cms["cms_dir"] ) ), "/." ) !== false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 $cms["status"] = "404";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 $cms["output"]["from"] = $cms["cms_file"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 $cms["output"]["to"] = $cms["site_dir"] . "/" . $cms["url"]["path"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 $cms["status"] = "200";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 ob_start();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 include( "{$cms['cms_dir']}/{$cms['template']}/html.php" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 $cms["output"] = ob_get_clean();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 function cms_template_echo() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 $headers = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 if ( substr( $cms["template"], 0, 6 ) !== "admin." ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 $lines = explode( "\n", $cms["config"]["template.mod.php"]["headers"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347 foreach ( $lines as $line ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 $line = trim( $line );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 if ( ! empty( $line ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 $headers[] = $line;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 if ( is_array( $cms["output"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 if ( $cms["status"] === "200" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357 $types = array(
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 "css" => "text/css",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 "js" => "application/javascript",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360 "svg" => "image/svg+xml",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 $ext = preg_replace( "/.*\./u", "", $cms["output"]["to"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363 if ( isset( $types[$ext] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 $mime = $types[$ext];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 $mime = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 header( "Content-Type: {$mime}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 header( "{$_SERVER['SERVER_PROTOCOL']} 200 OK" ); // fix server 404
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 foreach ( $headers as $header ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 header( $header );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 cms_readfile( $cms["output"]["from"], false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 header( "{$_SERVER['SERVER_PROTOCOL']} 404 Not Found" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 switch ( $cms["status"] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 case "200":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 header( "{$_SERVER['SERVER_PROTOCOL']} 200 OK" ); // fix server 404
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381 foreach ( $headers as $header ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382 header( $header );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 echo $cms["output"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386 case "404":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 header( "{$_SERVER['SERVER_PROTOCOL']} 404 Not Found" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 echo $cms["output"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 // Для админа выводится текст страницы
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390 // а для анонима сообщение что не найдена
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 case "301":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 header( "Location: {$cms['status_301_location']}", true, 301 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 case "302":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 header( "Location: {$cms['status_302_location']}", true, 302 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 function cms_template_write() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406 if ( ! empty( $cms["config"]["template.mod.php"]["disable_write_to_disk"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 if ( $cms["status"] !== "200" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 // write to disk
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 umask( 0 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 if ( is_array( $cms["output"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 $dirs = explode( "/", str_replace( $cms["site_dir"] . "/", "", $cms["output"]["to"] ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 $dir = $cms["site_dir"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 $file_name = array_pop( $dirs );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 foreach ( $dirs as $path ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423 $dir .= "/" . $path;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 if ( ! is_dir( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425 mkdir( $dir, 0777, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 } elseif( is_file( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427 unlink( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 mkdir( $dir, 0777, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 if ( ! file_exists( $cms["output"]["to"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 $tmp_name = $cms["site_dir"] . "/uploads/.tmp_" . cms_uid() . "_" . pathinfo( $cms["output"]["to"], PATHINFO_BASENAME );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434 copy( $cms["output"]["from"], $tmp_name );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 rename( $tmp_name, $cms["output"]["to"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 // create dirs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 $dirs = explode( "/", $cms["url"]["path"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 $dir = $cms["site_dir"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 $file_name = array_pop( $dirs );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 foreach ( $dirs as $path ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445 $dir .= "/" . $path;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446 if ( ! file_exists( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 mkdir( $dir, 0777, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 } elseif( is_file( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 unlink( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 mkdir( $dir, 0777, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454 if ( ! $file_name ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 $file = $dir . "/index.html";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 $file = $dir . "/" . $file_name;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
460 if ( ! file_exists( $file ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
461 $tmp_name = $cms["site_dir"] . "/uploads/.tmp_" . cms_uid() . "_" . pathinfo( $file, PATHINFO_BASENAME );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
462 file_put_contents( $tmp_name, $cms["output"], LOCK_EX );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 chmod( $tmp_name, 0666 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464 rename( $tmp_name, $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
470
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
471 function cms_clear_cache() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
472 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
473
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
474 do_hook( "clear_cache" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
475
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
476 // array for delete dirs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
477 $dirs = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
478
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
479 // search all pages in database
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
480 if ( ! empty( $cms["base"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
481 if ( $res = mysqli_query( $cms["base"], "SELECT `url` FROM `pages`" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
482 while ( $page = mysqli_fetch_assoc( $res ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
483 if ( $page["url"] === "/" ) $page["url"] = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
484 $file = $cms["site_dir"] . "/" . $page["url"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
485 if ( substr( $file, -1 ) === "/" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
486 $file .= "index.html";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
487 } elseif ( is_dir( $file ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
488 // for
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
489 // /parent/child
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
490 // /parent
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
491 $file .= "/index.html";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
492 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
493 if ( is_file( $file ) ) unlink( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
494 // Add dirs to remove queue
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
495 $dir = "/" . $page["url"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
496 while ( $dir && $dir !== "/" && $dir !== "\\" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
497 $new_dir = $cms["site_dir"] . $dir;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
498 if ( ! in_array( $new_dir, $dirs ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
499 $dirs[] = $new_dir;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
500 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
501 $dir = dirname( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
502 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
503 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
504 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
505 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
506
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
507 // delete template files
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
508 $queue[] = $cms["cms_dir"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
509 while ( $cur = array_shift( $queue ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
510 if ( is_dir( $cur ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
511 // add current dir to array for delete
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
512 array_push( $dirs, str_replace( ".cms/", "", $cur ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
513 // search children files and dirs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
514 $queue = array_merge( $queue, glob( $cur . "/*" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
515 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
516 $file = str_replace( ".cms/", "", $cur );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
517 if ( is_file( $file ) ) unlink( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
518 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
519 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
520
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
521 // delete dirs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
522 rsort( $dirs );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
523 foreach ( $dirs as $dir ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
524 if ( is_dir( $dir ) && $dir !== $cms["cms_dir"] && $dir !== $cms["site_dir"] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
525 if ( is_dir_and_empty( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
526 rmdir( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
527 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
528 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
529 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
530
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
531 }