phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_styles.php

History | View | Annotate | Download (114.8 kB)

1 5388 acydburn
<?php
2 7736 acydburn
/**
3 5388 acydburn
*
4 5388 acydburn
* @package acp
5 5388 acydburn
* @version $Id$
6 7736 acydburn
* @copyright (c) 2005 phpBB Group
7 7736 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5388 acydburn
*
9 5388 acydburn
*/
10 5388 acydburn
11 5388 acydburn
/**
12 8147 acydburn
* @ignore
13 8147 acydburn
*/
14 8147 acydburn
if (!defined('IN_PHPBB'))
15 8147 acydburn
{
16 8147 acydburn
        exit;
17 8147 acydburn
}
18 8147 acydburn
19 8147 acydburn
/**
20 5388 acydburn
* @package acp
21 5388 acydburn
*/
22 5388 acydburn
class acp_styles
23 5388 acydburn
{
24 5388 acydburn
        var $u_action;
25 5388 acydburn
26 5388 acydburn
        var $style_cfg;
27 5388 acydburn
        var $template_cfg;
28 5388 acydburn
        var $theme_cfg;
29 5388 acydburn
        var $imageset_cfg;
30 5388 acydburn
        var $imageset_keys;
31 5388 acydburn
32 5388 acydburn
        function main($id, $mode)
33 5388 acydburn
        {
34 6007 naderman
                global $db, $user, $auth, $template, $cache;
35 6015 acydburn
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
36 5388 acydburn
37 5902 acydburn
                // Hardcoded template bitfield to add for new templates
38 6209 davidmj
                $bitfield = new bitfield();
39 6209 davidmj
                $bitfield->set(0);
40 9408 Kellanved
                $bitfield->set(1);
41 9408 Kellanved
                $bitfield->set(2);
42 6209 davidmj
                $bitfield->set(3);
43 9408 Kellanved
                $bitfield->set(4);
44 6209 davidmj
                $bitfield->set(8);
45 6209 davidmj
                $bitfield->set(9);
46 6209 davidmj
                $bitfield->set(11);
47 6209 davidmj
                $bitfield->set(12);
48 6280 davidmj
                define('TEMPLATE_BITFIELD', $bitfield->get_base64());
49 6921 davidmj
                unset($bitfield);
50 5902 acydburn
51 5388 acydburn
                $user->add_lang('acp/styles');
52 5388 acydburn
53 5388 acydburn
                $this->tpl_name = 'acp_styles';
54 5388 acydburn
                $this->page_title = 'ACP_CAT_STYLES';
55 5388 acydburn
56 5388 acydburn
                $action = request_var('action', '');
57 5388 acydburn
                $action = (isset($_POST['add'])) ? 'add' : $action;
58 5388 acydburn
                $style_id = request_var('id', 0);
59 5388 acydburn
60 5388 acydburn
                // Fill the configuration variables
61 5388 acydburn
                $this->style_cfg = $this->template_cfg = $this->theme_cfg = $this->imageset_cfg = '
62 5388 acydburn
#
63 5388 acydburn
# phpBB {MODE} configuration file
64 5388 acydburn
#
65 5388 acydburn
# @package phpBB3
66 7736 acydburn
# @copyright (c) 2005 phpBB Group
67 7736 acydburn
# @license http://opensource.org/licenses/gpl-license.php GNU Public License
68 5388 acydburn
#
69 5388 acydburn
#
70 5388 acydburn
# At the left is the name, please do not change this
71 5388 acydburn
# At the right the value is entered
72 5388 acydburn
# For on/off options the valid values are on, off, 1, 0, true and false
73 5388 acydburn
#
74 5388 acydburn
# Values get trimmed, if you want to add a space in front or at the end of
75 8147 acydburn
# the value, then enclose the value with single or double quotes.
76 5388 acydburn
# Single and double quotes do not need to be escaped.
77 5388 acydburn
#
78 8147 acydburn
#
79 5388 acydburn
80 5388 acydburn
# General Information about this {MODE}
81 5388 acydburn
name = {NAME}
82 5388 acydburn
copyright = {COPYRIGHT}
83 5388 acydburn
version = {VERSION}
84 5388 acydburn
';
85 5388 acydburn
86 5388 acydburn
                $this->theme_cfg .= '
87 5388 acydburn
# Some configuration options
88 5388 acydburn
89 5388 acydburn
#
90 8147 acydburn
# You have to turn this option on if you want to use the
91 5388 acydburn
# path template variables ({T_IMAGESET_PATH} for example) within
92 5388 acydburn
# your css file.
93 5388 acydburn
# This is mostly the case if you want to use language specific
94 5388 acydburn
# images within your css file.
95 5388 acydburn
#
96 5388 acydburn
parse_css_file = {PARSE_CSS_FILE}
97 5388 acydburn
';
98 5388 acydburn
99 8697 Kellanved
                $this->template_cfg .= '
100 8697 Kellanved
# Some configuration options
101 8697 Kellanved
102 11671 git-gate
# Template inheritance
103 11671 git-gate
# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/
104 11671 git-gate
# Set value to empty or this template name to ignore template inheritance.
105 11671 git-gate
inherit_from = {INHERIT_FROM}
106 11671 git-gate
';
107 8697 Kellanved
108 6237 acydburn
                $this->imageset_keys = array(
109 6237 acydburn
                        'logos' => array(
110 6237 acydburn
                                'site_logo',
111 6237 acydburn
                        ),
112 6237 acydburn
                        'buttons'        => array(
113 7304 davidmj
                                'icon_back_top', 'icon_contact_aim', 'icon_contact_email', 'icon_contact_icq', 'icon_contact_jabber', 'icon_contact_msnm', 'icon_contact_pm', 'icon_contact_yahoo', 'icon_contact_www', 'icon_post_delete', 'icon_post_edit', 'icon_post_info', 'icon_post_quote', 'icon_post_report', 'icon_user_online', 'icon_user_offline', 'icon_user_profile', 'icon_user_search', 'icon_user_warn', 'button_pm_forward', 'button_pm_new', 'button_pm_reply', 'button_topic_locked', 'button_topic_new', 'button_topic_reply',
114 6237 acydburn
                        ),
115 6237 acydburn
                        'icons'                => array(
116 6237 acydburn
                                'icon_post_target', 'icon_post_target_unread', 'icon_topic_attach', 'icon_topic_latest', 'icon_topic_newest', 'icon_topic_reported', 'icon_topic_unapproved', 'icon_friend', 'icon_foe',
117 6237 acydburn
                        ),
118 6237 acydburn
                        'forums'        => array(
119 7609 kellanved
                                'forum_link', 'forum_read', 'forum_read_locked', 'forum_read_subforum', 'forum_unread', 'forum_unread_locked', 'forum_unread_subforum', 'subforum_read', 'subforum_unread'
120 6237 acydburn
                        ),
121 6237 acydburn
                        'folders'        => array(
122 7630 kellanved
                                'topic_moved', 'topic_read', 'topic_read_mine', 'topic_read_hot', 'topic_read_hot_mine', 'topic_read_locked', 'topic_read_locked_mine', 'topic_unread', 'topic_unread_mine', 'topic_unread_hot', 'topic_unread_hot_mine', 'topic_unread_locked', 'topic_unread_locked_mine', 'sticky_read', 'sticky_read_mine', 'sticky_read_locked', 'sticky_read_locked_mine', 'sticky_unread', 'sticky_unread_mine', 'sticky_unread_locked', 'sticky_unread_locked_mine', 'announce_read', 'announce_read_mine', 'announce_read_locked', 'announce_read_locked_mine', 'announce_unread', 'announce_unread_mine', 'announce_unread_locked', 'announce_unread_locked_mine', 'global_read', 'global_read_mine', 'global_read_locked', 'global_read_locked_mine', 'global_unread', 'global_unread_mine', 'global_unread_locked', 'global_unread_locked_mine', 'pm_read', 'pm_unread',
123 6237 acydburn
                        ),
124 6237 acydburn
                        'polls'                => array(
125 6237 acydburn
                                'poll_left', 'poll_center', 'poll_right',
126 6237 acydburn
                        ),
127 6237 acydburn
                        'ui'                => array(
128 6237 acydburn
                                'upload_bar',
129 6237 acydburn
                        ),
130 6237 acydburn
                        'user'                => array(
131 6237 acydburn
                                'user_icon1', 'user_icon2', 'user_icon3', 'user_icon4', 'user_icon5', 'user_icon6', 'user_icon7', 'user_icon8', 'user_icon9', 'user_icon10',
132 6237 acydburn
                        ),
133 6237 acydburn
                );
134 5388 acydburn
135 5388 acydburn
                // Execute overall actions
136 5388 acydburn
                switch ($action)
137 5388 acydburn
                {
138 5388 acydburn
                        case 'delete':
139 5388 acydburn
                                if ($style_id)
140 5388 acydburn
                                {
141 5388 acydburn
                                        $this->remove($mode, $style_id);
142 5388 acydburn
                                        return;
143 5388 acydburn
                                }
144 5388 acydburn
                        break;
145 5388 acydburn
146 5388 acydburn
                        case 'export':
147 5388 acydburn
                                if ($style_id)
148 5388 acydburn
                                {
149 5388 acydburn
                                        $this->export($mode, $style_id);
150 5388 acydburn
                                        return;
151 5388 acydburn
                                }
152 5388 acydburn
                        break;
153 5953 naderman
154 5388 acydburn
                        case 'install':
155 5418 acydburn
                                $this->install($mode);
156 5416 acydburn
                                return;
157 5388 acydburn
                        break;
158 5388 acydburn
159 5416 acydburn
                        case 'add':
160 5418 acydburn
                                $this->add($mode);
161 5418 acydburn
                                return;
162 5416 acydburn
                        break;
163 5953 naderman
164 5388 acydburn
                        case 'details':
165 5388 acydburn
                                if ($style_id)
166 5388 acydburn
                                {
167 5388 acydburn
                                        $this->details($mode, $style_id);
168 5388 acydburn
                                        return;
169 5388 acydburn
                                }
170 5388 acydburn
                        break;
171 5953 naderman
172 5894 naderman
                        case 'edit':
173 5894 naderman
                                if ($style_id)
174 5894 naderman
                                {
175 5894 naderman
                                        switch ($mode)
176 5894 naderman
                                        {
177 5894 naderman
                                                case 'imageset':
178 5894 naderman
                                                        return $this->edit_imageset($style_id);
179 5894 naderman
                                                case 'template':
180 5894 naderman
                                                        return $this->edit_template($style_id);
181 5953 naderman
                                                case 'theme':
182 5953 naderman
                                                        return $this->edit_theme($style_id);
183 5894 naderman
                                        }
184 5894 naderman
                                }
185 5894 naderman
                        break;
186 6007 naderman
187 6007 naderman
                        case 'cache':
188 6007 naderman
                                if ($style_id)
189 6007 naderman
                                {
190 6007 naderman
                                        switch ($mode)
191 6007 naderman
                                        {
192 6007 naderman
                                                case 'template':
193 6007 naderman
                                                        return $this->template_cache($style_id);
194 6007 naderman
                                        }
195 6007 naderman
                                }
196 6007 naderman
                        break;
197 5388 acydburn
                }
198 5388 acydburn
199 5388 acydburn
                switch ($mode)
200 5388 acydburn
                {
201 5388 acydburn
                        case 'style':
202 5953 naderman
203 5388 acydburn
                                switch ($action)
204 5388 acydburn
                                {
205 5388 acydburn
                                        case 'activate':
206 5388 acydburn
                                        case 'deactivate':
207 5388 acydburn
208 5388 acydburn
                                                if ($style_id == $config['default_style'])
209 5388 acydburn
                                                {
210 6320 acydburn
                                                        trigger_error($user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING);
211 5388 acydburn
                                                }
212 5388 acydburn
213 9629 leviatan21
                                                if (($action == 'deactivate' && confirm_box(true)) || $action == 'activate')
214 5388 acydburn
                                                {
215 9629 leviatan21
                                                        $sql = 'UPDATE ' . STYLES_TABLE . '
216 9629 leviatan21
                                                                SET style_active = ' . (($action == 'activate') ? 1 : 0) . '
217 9629 leviatan21
                                                                WHERE style_id = ' . $style_id;
218 5388 acydburn
                                                        $db->sql_query($sql);
219 5551 acydburn
220 9629 leviatan21
                                                        // Set style to default for any member using deactivated style
221 9629 leviatan21
                                                        if ($action == 'deactivate')
222 9629 leviatan21
                                                        {
223 9629 leviatan21
                                                                $sql = 'UPDATE ' . USERS_TABLE . '
224 9629 leviatan21
                                                                        SET user_style = ' . $config['default_style'] . "
225 9629 leviatan21
                                                                        WHERE user_style = $style_id";
226 9629 leviatan21
                                                                $db->sql_query($sql);
227 9629 leviatan21
228 9629 leviatan21
                                                                $sql = 'UPDATE ' . FORUMS_TABLE . '
229 9629 leviatan21
                                                                        SET forum_style = 0
230 9629 leviatan21
                                                                        WHERE forum_style = ' . $style_id;
231 9629 leviatan21
                                                                $db->sql_query($sql);
232 9629 leviatan21
                                                        }
233 5388 acydburn
                                                }
234 9720 toonarmy
                                                else if ($action == 'deactivate')
235 9629 leviatan21
                                                {
236 9629 leviatan21
                                                        $s_hidden_fields = array(
237 9629 leviatan21
                                                                'i'                        => $id,
238 9629 leviatan21
                                                                'mode'                => $mode,
239 9629 leviatan21
                                                                'action'        => $action,
240 9629 leviatan21
                                                                'style_id'        => $style_id,
241 9629 leviatan21
                                                        );
242 9629 leviatan21
                                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields));
243 9629 leviatan21
                                                }
244 5388 acydburn
                                        break;
245 5388 acydburn
                                }
246 5388 acydburn
247 6161 acydburn
                                $this->frontend('style', array('details'), array('export', 'delete'));
248 5388 acydburn
                        break;
249 5388 acydburn
250 5388 acydburn
                        case 'template':
251 5388 acydburn
252 5416 acydburn
                                switch ($action)
253 5416 acydburn
                                {
254 6007 naderman
                                        // Refresh template data stored in db and clear cache
255 5416 acydburn
                                        case 'refresh':
256 5416 acydburn
257 5416 acydburn
                                                $sql = 'SELECT *
258 6021 acydburn
                                                        FROM ' . STYLES_TEMPLATE_TABLE . "
259 5416 acydburn
                                                        WHERE template_id = $style_id";
260 5416 acydburn
                                                $result = $db->sql_query($sql);
261 5416 acydburn
                                                $template_row = $db->sql_fetchrow($result);
262 5416 acydburn
                                                $db->sql_freeresult($result);
263 5416 acydburn
264 5416 acydburn
                                                if (!$template_row)
265 5416 acydburn
                                                {
266 6320 acydburn
                                                        trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
267 5416 acydburn
                                                }
268 5416 acydburn
269 6007 naderman
                                                if (confirm_box(true))
270 5416 acydburn
                                                {
271 6007 naderman
                                                        $template_refreshed = '';
272 5416 acydburn
273 6007 naderman
                                                        // Only refresh database if the template is stored in the database
274 6007 naderman
                                                        if ($template_row['template_storedb'] && file_exists("{$phpbb_root_path}styles/{$template_row['template_path']}/template/"))
275 6007 naderman
                                                        {
276 6007 naderman
                                                                $filelist = array('' => array());
277 5416 acydburn
278 6007 naderman
                                                                $sql = 'SELECT template_filename, template_mtime
279 6021 acydburn
                                                                        FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
280 6007 naderman
                                                                        WHERE template_id = $style_id";
281 6007 naderman
                                                                $result = $db->sql_query($sql);
282 6007 naderman
283 6007 naderman
                                                                while ($row = $db->sql_fetchrow($result))
284 5416 acydburn
                                                                {
285 7827 acydburn
//                                                                        if (@filemtime("{$phpbb_root_path}styles/{$template_row['template_path']}/template/" . $row['template_filename']) > $row['template_mtime'])
286 7827 acydburn
//                                                                        {
287 6007 naderman
                                                                                // get folder info from the filename
288 6007 naderman
                                                                                if (($slash_pos = strrpos($row['template_filename'], '/')) === false)
289 6007 naderman
                                                                                {
290 6007 naderman
                                                                                        $filelist[''][] = $row['template_filename'];
291 6007 naderman
                                                                                }
292 6007 naderman
                                                                                else
293 6007 naderman
                                                                                {
294 7813 acydburn
                                                                                        $filelist[substr($row['template_filename'], 0, $slash_pos + 1)][] = substr($row['template_filename'], $slash_pos + 1, strlen($row['template_filename']) - $slash_pos - 1);
295 6007 naderman
                                                                                }
296 7827 acydburn
//                                                                        }
297 5416 acydburn
                                                                }
298 6007 naderman
                                                                $db->sql_freeresult($result);
299 6007 naderman
300 6007 naderman
                                                                $this->store_templates('update', $style_id, $template_row['template_path'], $filelist);
301 6007 naderman
                                                                unset($filelist);
302 6007 naderman
303 6007 naderman
                                                                $template_refreshed = $user->lang['TEMPLATE_REFRESHED'] . '<br />';
304 6007 naderman
                                                                add_log('admin', 'LOG_TEMPLATE_REFRESHED', $template_row['template_name']);
305 5416 acydburn
                                                        }
306 5416 acydburn
307 6007 naderman
                                                        $this->clear_template_cache($template_row);
308 6007 naderman
309 6007 naderman
                                                        trigger_error($template_refreshed . $user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action));
310 5416 acydburn
                                                }
311 6007 naderman
                                                else
312 6007 naderman
                                                {
313 6007 naderman
                                                        confirm_box(false, ($template_row['template_storedb']) ? $user->lang['CONFIRM_TEMPLATE_REFRESH'] : $user->lang['CONFIRM_TEMPLATE_CLEAR_CACHE'], build_hidden_fields(array(
314 6007 naderman
                                                                'i'                        => $id,
315 6007 naderman
                                                                'mode'                => $mode,
316 6007 naderman
                                                                'action'        => $action,
317 6007 naderman
                                                                'id'                => $style_id
318 6007 naderman
                                                        )));
319 6007 naderman
                                                }
320 5953 naderman
321 5416 acydburn
                                        break;
322 5416 acydburn
                                }
323 5416 acydburn
324 6161 acydburn
                                $this->frontend('template', array('edit', 'cache', 'details'), array('refresh', 'export', 'delete'));
325 5388 acydburn
                        break;
326 5388 acydburn
327 5388 acydburn
                        case 'theme':
328 5388 acydburn
329 5416 acydburn
                                switch ($action)
330 5416 acydburn
                                {
331 6007 naderman
                                        // Refresh theme data stored in the database
332 5416 acydburn
                                        case 'refresh':
333 5953 naderman
334 5416 acydburn
                                                $sql = 'SELECT *
335 6021 acydburn
                                                        FROM ' . STYLES_THEME_TABLE . "
336 5416 acydburn
                                                        WHERE theme_id = $style_id";
337 5416 acydburn
                                                $result = $db->sql_query($sql);
338 5416 acydburn
                                                $theme_row = $db->sql_fetchrow($result);
339 5416 acydburn
                                                $db->sql_freeresult($result);
340 5416 acydburn
341 5416 acydburn
                                                if (!$theme_row)
342 5416 acydburn
                                                {
343 6320 acydburn
                                                        trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
344 5416 acydburn
                                                }
345 5416 acydburn
346 6007 naderman
                                                if (!$theme_row['theme_storedb'])
347 5416 acydburn
                                                {
348 6428 acydburn
                                                        trigger_error($user->lang['THEME_ERR_REFRESH_FS'] . adm_back_link($this->u_action), E_USER_WARNING);
349 6007 naderman
                                                }
350 5416 acydburn
351 6007 naderman
                                                if (confirm_box(true))
352 6007 naderman
                                                {
353 6007 naderman
                                                        if ($theme_row['theme_storedb'] && file_exists("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"))
354 5416 acydburn
                                                        {
355 6007 naderman
                                                                // Save CSS contents
356 6007 naderman
                                                                $sql_ary = array(
357 8168 acydburn
                                                                        'theme_mtime'        => (int) filemtime("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"),
358 6007 naderman
                                                                        'theme_data'        => $this->db_theme_data($theme_row)
359 6007 naderman
                                                                );
360 5953 naderman
361 6021 acydburn
                                                                $sql = 'UPDATE ' . STYLES_THEME_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
362 6007 naderman
                                                                        WHERE theme_id = $style_id";
363 6007 naderman
                                                                $db->sql_query($sql);
364 5416 acydburn
365 6021 acydburn
                                                                $cache->destroy('sql', STYLES_THEME_TABLE);
366 6007 naderman
367 6257 naderman
                                                                add_log('admin', 'LOG_THEME_REFRESHED', $theme_row['theme_name']);
368 6007 naderman
                                                                trigger_error($user->lang['THEME_REFRESHED'] . adm_back_link($this->u_action));
369 6007 naderman
                                                        }
370 5416 acydburn
                                                }
371 6007 naderman
                                                else
372 6007 naderman
                                                {
373 6007 naderman
                                                        confirm_box(false, $user->lang['CONFIRM_THEME_REFRESH'], build_hidden_fields(array(
374 6007 naderman
                                                                'i'                        => $id,
375 6007 naderman
                                                                'mode'                => $mode,
376 6007 naderman
                                                                'action'        => $action,
377 6007 naderman
                                                                'id'                => $style_id
378 6007 naderman
                                                        )));
379 6007 naderman
                                                }
380 5416 acydburn
                                        break;
381 5416 acydburn
                                }
382 5416 acydburn
383 6161 acydburn
                                $this->frontend('theme', array('edit', 'details'), array('refresh', 'export', 'delete'));
384 5388 acydburn
                        break;
385 5388 acydburn
386 5388 acydburn
                        case 'imageset':
387 6257 naderman
388 6257 naderman
                                switch ($action)
389 6257 naderman
                                {
390 6257 naderman
                                        case 'refresh':
391 6257 naderman
392 6257 naderman
                                                $sql = 'SELECT *
393 6257 naderman
                                                        FROM ' . STYLES_IMAGESET_TABLE . "
394 6257 naderman
                                                        WHERE imageset_id = $style_id";
395 6257 naderman
                                                $result = $db->sql_query($sql);
396 6257 naderman
                                                $imageset_row = $db->sql_fetchrow($result);
397 6257 naderman
                                                $db->sql_freeresult($result);
398 6257 naderman
399 6257 naderman
                                                if (!$imageset_row)
400 6257 naderman
                                                {
401 6320 acydburn
                                                        trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
402 6257 naderman
                                                }
403 6257 naderman
404 6257 naderman
                                                if (confirm_box(true))
405 6257 naderman
                                                {
406 6257 naderman
                                                        $sql_ary = array();
407 6257 naderman
408 6257 naderman
                                                        $imageset_definitions = array();
409 6257 naderman
                                                        foreach ($this->imageset_keys as $topic => $key_array)
410 6257 naderman
                                                        {
411 6257 naderman
                                                                $imageset_definitions = array_merge($imageset_definitions, $key_array);
412 6257 naderman
                                                        }
413 7304 davidmj
414 7304 davidmj
                                                        $cfg_data_imageset = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/imageset.cfg");
415 7304 davidmj
416 7304 davidmj
                                                        $db->sql_transaction('begin');
417 7304 davidmj
418 7304 davidmj
                                                        $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . '
419 7304 davidmj
                                                                WHERE imageset_id = ' . $style_id;
420 7304 davidmj
                                                        $result = $db->sql_query($sql);
421 7304 davidmj
422 7304 davidmj
                                                        foreach ($cfg_data_imageset as $image_name => $value)
423 6257 naderman
                                                        {
424 7304 davidmj
                                                                if (strpos($value, '*') !== false)
425 6257 naderman
                                                                {
426 7304 davidmj
                                                                        if (substr($value, -1, 1) === '*')
427 6257 naderman
                                                                        {
428 7304 davidmj
                                                                                list($image_filename, $image_height) = explode('*', $value);
429 7304 davidmj
                                                                                $image_width = 0;
430 6257 naderman
                                                                        }
431 7304 davidmj
                                                                        else
432 7304 davidmj
                                                                        {
433 7304 davidmj
                                                                                list($image_filename, $image_height, $image_width) = explode('*', $value);
434 7304 davidmj
                                                                        }
435 6257 naderman
                                                                }
436 7304 davidmj
                                                                else
437 7304 davidmj
                                                                {
438 7304 davidmj
                                                                        $image_filename = $value;
439 7304 davidmj
                                                                        $image_height = $image_width = 0;
440 7304 davidmj
                                                                }
441 7304 davidmj
442 7304 davidmj
                                                                if (strpos($image_name, 'img_') === 0 && $image_filename)
443 7304 davidmj
                                                                {
444 7304 davidmj
                                                                        $image_name = substr($image_name, 4);
445 7304 davidmj
                                                                        if (in_array($image_name, $imageset_definitions))
446 7304 davidmj
                                                                        {
447 7402 davidmj
                                                                                $sql_ary[] = array(
448 7961 acydburn
                                                                                        'image_name'                => (string) $image_name,
449 7961 acydburn
                                                                                        'image_filename'        => (string) $image_filename,
450 7304 davidmj
                                                                                        'image_height'                => (int) $image_height,
451 7304 davidmj
                                                                                        'image_width'                => (int) $image_width,
452 7961 acydburn
                                                                                        'imageset_id'                => (int) $style_id,
453 7304 davidmj
                                                                                        'image_lang'                => '',
454 7304 davidmj
                                                                                );
455 7304 davidmj
                                                                        }
456 7304 davidmj
                                                                }
457 6257 naderman
                                                        }
458 6257 naderman
459 7304 davidmj
                                                        $sql = 'SELECT lang_dir
460 7304 davidmj
                                                                FROM ' . LANG_TABLE;
461 7304 davidmj
                                                        $result = $db->sql_query($sql);
462 7304 davidmj
463 7304 davidmj
                                                        while ($row = $db->sql_fetchrow($result))
464 6511 acydburn
                                                        {
465 7304 davidmj
                                                                if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg"))
466 7304 davidmj
                                                                {
467 7304 davidmj
                                                                        $cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg");
468 7304 davidmj
                                                                        foreach ($cfg_data_imageset_data as $image_name => $value)
469 7304 davidmj
                                                                        {
470 7304 davidmj
                                                                                if (strpos($value, '*') !== false)
471 7304 davidmj
                                                                                {
472 7304 davidmj
                                                                                        if (substr($value, -1, 1) === '*')
473 7304 davidmj
                                                                                        {
474 7304 davidmj
                                                                                                list($image_filename, $image_height) = explode('*', $value);
475 7304 davidmj
                                                                                                $image_width = 0;
476 7304 davidmj
                                                                                        }
477 7304 davidmj
                                                                                        else
478 7304 davidmj
                                                                                        {
479 7304 davidmj
                                                                                                list($image_filename, $image_height, $image_width) = explode('*', $value);
480 7304 davidmj
                                                                                        }
481 7304 davidmj
                                                                                }
482 7304 davidmj
                                                                                else
483 7304 davidmj
                                                                                {
484 7304 davidmj
                                                                                        $image_filename = $value;
485 7304 davidmj
                                                                                        $image_height = $image_width = 0;
486 7304 davidmj
                                                                                }
487 7304 davidmj
488 7304 davidmj
                                                                                if (strpos($image_name, 'img_') === 0 && $image_filename)
489 7304 davidmj
                                                                                {
490 7304 davidmj
                                                                                        $image_name = substr($image_name, 4);
491 7304 davidmj
                                                                                        if (in_array($image_name, $imageset_definitions))
492 7304 davidmj
                                                                                        {
493 7402 davidmj
                                                                                                $sql_ary[] = array(
494 7961 acydburn
                                                                                                        'image_name'                => (string) $image_name,
495 7961 acydburn
                                                                                                        'image_filename'        => (string) $image_filename,
496 7961 acydburn
                                                                                                        'image_height'                => (int) $image_height,
497 7961 acydburn
                                                                                                        'image_width'                => (int) $image_width,
498 7961 acydburn
                                                                                                        'imageset_id'                => (int) $style_id,
499 7961 acydburn
                                                                                                        'image_lang'                => (string) $row['lang_dir'],
500 7304 davidmj
                                                                                                );
501 7304 davidmj
                                                                                        }
502 7304 davidmj
                                                                                }
503 7304 davidmj
                                                                        }
504 7304 davidmj
                                                                }
505 6511 acydburn
                                                        }
506 7304 davidmj
                                                        $db->sql_freeresult($result);
507 6257 naderman
508 7402 davidmj
                                                        $db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary);
509 7402 davidmj
510 7304 davidmj
                                                        $db->sql_transaction('commit');
511 6257 naderman
512 7304 davidmj
                                                        $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
513 11283 git-gate
                                                        $cache->destroy('imageset_site_logo_md5');
514 7304 davidmj
515 6257 naderman
                                                        add_log('admin', 'LOG_IMAGESET_REFRESHED', $imageset_row['imageset_name']);
516 6257 naderman
                                                        trigger_error($user->lang['IMAGESET_REFRESHED'] . adm_back_link($this->u_action));
517 6257 naderman
                                                }
518 6257 naderman
                                                else
519 6257 naderman
                                                {
520 6257 naderman
                                                        confirm_box(false, $user->lang['CONFIRM_IMAGESET_REFRESH'], build_hidden_fields(array(
521 6257 naderman
                                                                'i'                        => $id,
522 6257 naderman
                                                                'mode'                => $mode,
523 6257 naderman
                                                                'action'        => $action,
524 6257 naderman
                                                                'id'                => $style_id
525 6257 naderman
                                                        )));
526 6257 naderman
                                                }
527 6257 naderman
                                        break;
528 6257 naderman
                                }
529 6257 naderman
530 6257 naderman
                                $this->frontend('imageset', array('edit', 'details'), array('refresh', 'export', 'delete'));
531 5388 acydburn
                        break;
532 5388 acydburn
                }
533 5388 acydburn
        }
534 5388 acydburn
535 5388 acydburn
        /**
536 5388 acydburn
        * Build Frontend with supplied options
537 5388 acydburn
        */
538 6161 acydburn
        function frontend($mode, $options, $actions)
539 5388 acydburn
        {
540 6015 acydburn
                global $user, $template, $db, $config, $phpbb_root_path, $phpEx;
541 5388 acydburn
542 5388 acydburn
                $sql_from = '';
543 11638 git-gate
                $sql_sort = 'LOWER(' . $mode . '_name)';
544 5388 acydburn
                $style_count = array();
545 5388 acydburn
546 5388 acydburn
                switch ($mode)
547 5388 acydburn
                {
548 5388 acydburn
                        case 'style':
549 5388 acydburn
                                $sql_from = STYLES_TABLE;
550 11658 git-gate
                                $sql_sort = 'style_active DESC, ' . $sql_sort;
551 5388 acydburn
552 5388 acydburn
                                $sql = 'SELECT user_style, COUNT(user_style) AS style_count
553 5953 naderman
                                        FROM ' . USERS_TABLE . '
554 5388 acydburn
                                        GROUP BY user_style';
555 5388 acydburn
                                $result = $db->sql_query($sql);
556 5388 acydburn
557 5388 acydburn
                                while ($row = $db->sql_fetchrow($result))
558 5388 acydburn
                                {
559 5388 acydburn
                                        $style_count[$row['user_style']] = $row['style_count'];
560 5388 acydburn
                                }
561 5388 acydburn
                                $db->sql_freeresult($result);
562 5388 acydburn
563 5388 acydburn
                        break;
564 5953 naderman
565 5388 acydburn
                        case 'template':
566 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
567 5388 acydburn
                        break;
568 5388 acydburn
569 5388 acydburn
                        case 'theme':
570 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
571 5388 acydburn
                        break;
572 5388 acydburn
573 5388 acydburn
                        case 'imageset':
574 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
575 5388 acydburn
                        break;
576 11638 git-gate
577 11638 git-gate
                        default:
578 11638 git-gate
                                trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
579 5388 acydburn
                }
580 5388 acydburn
581 5388 acydburn
                $l_prefix = strtoupper($mode);
582 5388 acydburn
583 5388 acydburn
                $this->page_title = 'ACP_' . $l_prefix . 'S';
584 5388 acydburn
585 5388 acydburn
                $template->assign_vars(array(
586 5388 acydburn
                        'S_FRONTEND'                => true,
587 5388 acydburn
                        'S_STYLE'                        => ($mode == 'style') ? true : false,
588 5388 acydburn
589 5388 acydburn
                        'L_TITLE'                        => $user->lang[$this->page_title],
590 5388 acydburn
                        'L_EXPLAIN'                        => $user->lang[$this->page_title . '_EXPLAIN'],
591 5388 acydburn
                        'L_NAME'                        => $user->lang[$l_prefix . '_NAME'],
592 5388 acydburn
                        'L_INSTALLED'                => $user->lang['INSTALLED_' . $l_prefix],
593 5388 acydburn
                        'L_UNINSTALLED'                => $user->lang['UNINSTALLED_' . $l_prefix],
594 5388 acydburn
                        'L_NO_UNINSTALLED'        => $user->lang['NO_UNINSTALLED_' . $l_prefix],
595 5388 acydburn
                        'L_CREATE'                        => $user->lang['CREATE_' . $l_prefix],
596 5388 acydburn
597 5388 acydburn
                        'U_ACTION'                        => $this->u_action,
598 5388 acydburn
                        )
599 5388 acydburn
                );
600 5388 acydburn
601 5953 naderman
                $sql = "SELECT *
602 11638 git-gate
                        FROM $sql_from
603 11638 git-gate
                        ORDER BY $sql_sort ASC";
604 5388 acydburn
                $result = $db->sql_query($sql);
605 5388 acydburn
606 5388 acydburn
                $installed = array();
607 5388 acydburn
608 5388 acydburn
                $basis_options = '<option class="sep" value="">' . $user->lang['OPTIONAL_BASIS'] . '</option>';
609 5388 acydburn
                while ($row = $db->sql_fetchrow($result))
610 5388 acydburn
                {
611 5388 acydburn
                        $installed[] = $row[$mode . '_name'];
612 5388 acydburn
                        $basis_options .= '<option value="' . $row[$mode . '_id'] . '">' . $row[$mode . '_name'] . '</option>';
613 5953 naderman
614 5388 acydburn
                        $stylevis = ($mode == 'style' && !$row['style_active']) ? 'activate' : 'deactivate';
615 5388 acydburn
616 5388 acydburn
                        $s_options = array();
617 5388 acydburn
                        foreach ($options as $option)
618 5388 acydburn
                        {
619 5388 acydburn
                                $s_options[] = '<a href="' . $this->u_action . "&amp;action=$option&amp;id=" . $row[$mode . '_id'] . '">' . $user->lang[strtoupper($option)] . '</a>';
620 5388 acydburn
                        }
621 5953 naderman
622 6161 acydburn
                        $s_actions = array();
623 6161 acydburn
                        foreach ($actions as $option)
624 6161 acydburn
                        {
625 6161 acydburn
                                $s_actions[] = '<a href="' . $this->u_action . "&amp;action=$option&amp;id=" . $row[$mode . '_id'] . '">' . $user->lang[strtoupper($option)] . '</a>';
626 6161 acydburn
                        }
627 6161 acydburn
628 5388 acydburn
                        $template->assign_block_vars('installed', array(
629 5388 acydburn
                                'S_DEFAULT_STYLE'                => ($mode == 'style' && $row['style_id'] == $config['default_style']) ? true : false,
630 5388 acydburn
                                'U_EDIT'                                => $this->u_action . '&amp;action=' . (($mode == 'style') ? 'details' : 'edit') . '&amp;id=' . $row[$mode . '_id'],
631 5388 acydburn
                                'U_STYLE_ACT_DEACT'                => $this->u_action . '&amp;action=' . $stylevis . '&amp;id=' . $row[$mode . '_id'],
632 5388 acydburn
                                'L_STYLE_ACT_DEACT'                => $user->lang['STYLE_' . strtoupper($stylevis)],
633 5388 acydburn
                                'S_OPTIONS'                                => implode(' | ', $s_options),
634 6161 acydburn
                                'S_ACTIONS'                                => implode(' | ', $s_actions),
635 6015 acydburn
                                'U_PREVIEW'                                => ($mode == 'style') ? append_sid("{$phpbb_root_path}index.$phpEx", "$mode=" . $row[$mode . '_id']) : '',
636 5388 acydburn
637 5388 acydburn
                                'NAME'                                        => $row[$mode . '_name'],
638 5388 acydburn
                                'STYLE_COUNT'                        => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0,
639 11658 git-gate
640 11658 git-gate
                                'S_INACTIVE'                        => ($mode == 'style' && !$row['style_active']) ? true : false,
641 5388 acydburn
                                )
642 5388 acydburn
                        );
643 5388 acydburn
                }
644 5388 acydburn
                $db->sql_freeresult($result);
645 5388 acydburn
646 5388 acydburn
                // Grab uninstalled items
647 5388 acydburn
                $new_ary = $cfg = array();
648 5953 naderman
649 6912 acydburn
                $dp = @opendir("{$phpbb_root_path}styles");
650 6912 acydburn
651 6912 acydburn
                if ($dp)
652 5388 acydburn
                {
653 6912 acydburn
                        while (($file = readdir($dp)) !== false)
654 5388 acydburn
                        {
655 10587 git-gate
                                if ($file[0] == '.' || !is_dir($phpbb_root_path . 'styles/' . $file))
656 10360 nickvergessen
                                {
657 10360 nickvergessen
                                        continue;
658 10360 nickvergessen
                                }
659 10361 bantu
660 6912 acydburn
                                $subpath = ($mode != 'style') ? "$mode/" : '';
661 10587 git-gate
                                if (file_exists("{$phpbb_root_path}styles/$file/$subpath$mode.cfg"))
662 5388 acydburn
                                {
663 6912 acydburn
                                        if ($cfg = file("{$phpbb_root_path}styles/$file/$subpath$mode.cfg"))
664 6912 acydburn
                                        {
665 6912 acydburn
                                                $items = parse_cfg_file('', $cfg);
666 6912 acydburn
                                                $name = (isset($items['name'])) ? trim($items['name']) : false;
667 5388 acydburn
668 6912 acydburn
                                                if ($name && !in_array($name, $installed))
669 6912 acydburn
                                                {
670 6912 acydburn
                                                        $new_ary[] = array(
671 6912 acydburn
                                                                'path'                => $file,
672 6912 acydburn
                                                                'name'                => $name,
673 6912 acydburn
                                                                'copyright'        => $items['copyright'],
674 6912 acydburn
                                                        );
675 6912 acydburn
                                                }
676 5388 acydburn
                                        }
677 5388 acydburn
                                }
678 5388 acydburn
                        }
679 8211 acydburn
                        closedir($dp);
680 5388 acydburn
                }
681 6912 acydburn
682 5388 acydburn
                unset($installed);
683 5388 acydburn
684 5388 acydburn
                if (sizeof($new_ary))
685 5388 acydburn
                {
686 5388 acydburn
                        foreach ($new_ary as $cfg)
687 5388 acydburn
                        {
688 5388 acydburn
                                $template->assign_block_vars('uninstalled', array(
689 5388 acydburn
                                        'NAME'                        => $cfg['name'],
690 5388 acydburn
                                        'COPYRIGHT'                => $cfg['copyright'],
691 5388 acydburn
                                        'U_INSTALL'                => $this->u_action . '&amp;action=install&amp;path=' . urlencode($cfg['path']))
692 5388 acydburn
                                );
693 5388 acydburn
                        }
694 5388 acydburn
                }
695 5388 acydburn
                unset($new_ary);
696 5388 acydburn
697 5388 acydburn
                $template->assign_vars(array(
698 5388 acydburn
                        'S_BASIS_OPTIONS'                => $basis_options)
699 5388 acydburn
                );
700 5388 acydburn
701 5388 acydburn
        }
702 5388 acydburn
703 5388 acydburn
        /**
704 5894 naderman
        * Provides a template editor which allows saving changes to template files on the filesystem or in the database.
705 5894 naderman
        *
706 5894 naderman
        * @param int $template_id specifies which template set is being edited
707 5894 naderman
        */
708 5894 naderman
        function edit_template($template_id)
709 5894 naderman
        {
710 6015 acydburn
                global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
711 5894 naderman
712 9056 toonarmy
                if (defined('PHPBB_DISABLE_ACP_EDITOR'))
713 8697 Kellanved
                {
714 8697 Kellanved
                        trigger_error($user->lang['EDITOR_DISABLED'] . adm_back_link($this->u_action));
715 8697 Kellanved
                }
716 8783 acydburn
717 5894 naderman
                $this->page_title = 'EDIT_TEMPLATE';
718 5894 naderman
719 5894 naderman
                $filelist = $filelist_cats = array();
720 5894 naderman
721 8033 acydburn
                $template_data        = utf8_normalize_nfc(request_var('template_data', '', true));
722 8033 acydburn
                $template_data        = htmlspecialchars_decode($template_data);
723 7920 acydburn
                $template_file        = utf8_normalize_nfc(request_var('template_file', '', true));
724 5894 naderman
                $text_rows                = max(5, min(999, request_var('text_rows', 20)));
725 5894 naderman
                $save_changes        = (isset($_POST['save'])) ? true : false;
726 5894 naderman
727 5953 naderman
                // make sure template_file path doesn't go upwards
728 11042 git-gate
                $template_file = preg_replace('#\.{2,}#', '.', $template_file);
729 8783 acydburn
730 5894 naderman
                // Retrieve some information about the template
731 5894 naderman
                $sql = 'SELECT template_storedb, template_path, template_name
732 6021 acydburn
                        FROM ' . STYLES_TEMPLATE_TABLE . "
733 5894 naderman
                        WHERE template_id = $template_id";
734 5894 naderman
                $result = $db->sql_query($sql);
735 6428 acydburn
                $template_info = $db->sql_fetchrow($result);
736 6428 acydburn
                $db->sql_freeresult($result);
737 5894 naderman
738 6428 acydburn
                if (!$template_info)
739 5894 naderman
                {
740 6428 acydburn
                        trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
741 5894 naderman
                }
742 8783 acydburn
743 8530 Kellanved
                if ($save_changes && !check_form_key('acp_styles'))
744 8530 Kellanved
                {
745 8530 Kellanved
                        trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
746 8530 Kellanved
                }
747 8530 Kellanved
                else if (!$save_changes)
748 8530 Kellanved
                {
749 8530 Kellanved
                        add_form_key('acp_styles');
750 8530 Kellanved
                }
751 5894 naderman
752 5894 naderman
                // save changes to the template if the user submitted any
753 5894 naderman
                if ($save_changes && $template_file)
754 5894 naderman
                {
755 5894 naderman
                        // Get the filesystem location of the current file
756 5894 naderman
                        $file = "{$phpbb_root_path}styles/{$template_info['template_path']}/template/$template_file";
757 5894 naderman
                        $additional = '';
758 5894 naderman
759 5894 naderman
                        // If the template is stored on the filesystem try to write the file else store it in the database
760 10757 git-gate
                        if (!$safe_mode && !$template_info['template_storedb'] && file_exists($file) && phpbb_is_writable($file))
761 5894 naderman
                        {
762 7872 acydburn
                                if (!($fp = @fopen($file, 'wb')))
763 5894 naderman
                                {
764 10074 acydburn
                                        // File exists and is writeable, but still not able to be written to
765 10074 acydburn
                                        trigger_error(sprintf($user->lang['TEMPLATE_FILE_NOT_WRITABLE'], htmlspecialchars($template_file)) . adm_back_link($this->u_action), E_USER_WARNING);
766 5894 naderman
                                }
767 5894 naderman
                                fwrite($fp, $template_data);
768 5894 naderman
                                fclose($fp);
769 5894 naderman
                        }
770 5894 naderman
                        else
771 5894 naderman
                        {
772 5894 naderman
                                $db->sql_transaction('begin');
773 5894 naderman
774 5894 naderman
                                // If it's not stored in the db yet, then update the template setting and store all template files in the db
775 5894 naderman
                                if (!$template_info['template_storedb'])
776 5894 naderman
                                {
777 9458 acydburn
                                        if ($super = $this->get_super('template', $template_id))
778 8697 Kellanved
                                        {
779 8697 Kellanved
                                                $this->store_in_db('template', $super['template_id']);
780 8697 Kellanved
                                        }
781 8697 Kellanved
                                        else
782 8697 Kellanved
                                        {
783 8697 Kellanved
                                                $this->store_in_db('template', $template_id);
784 8697 Kellanved
                                        }
785 5894 naderman
786 5894 naderman
                                        add_log('admin', 'LOG_TEMPLATE_EDIT_DETAILS', $template_info['template_name']);
787 5894 naderman
                                        $additional .= '<br />' . $user->lang['EDIT_TEMPLATE_STORED_DB'];
788 5894 naderman
                                }
789 5894 naderman
790 5894 naderman
                                // Update the template_data table entry for this template file
791 6021 acydburn
                                $sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . "
792 5953 naderman
                                        SET template_data = '" . $db->sql_escape($template_data) . "', template_mtime = " . time() . "
793 5953 naderman
                                        WHERE template_id = $template_id
794 5894 naderman
                                                AND template_filename = '" . $db->sql_escape($template_file) . "'";
795 5894 naderman
                                $db->sql_query($sql);
796 5894 naderman
797 5894 naderman
                                $db->sql_transaction('commit');
798 5894 naderman
                        }
799 5894 naderman
800 6007 naderman
                        // destroy the cached version of the template (filename without extension)
801 6007 naderman
                        $this->clear_template_cache($template_info, array(substr($template_file, 0, -5)));
802 5894 naderman
803 7816 acydburn
                        $cache->destroy('sql', STYLES_TABLE);
804 7816 acydburn
805 5953 naderman
                        add_log('admin', 'LOG_TEMPLATE_EDIT', $template_info['template_name'], $template_file);
806 5894 naderman
                        trigger_error($user->lang['TEMPLATE_FILE_UPDATED'] . $additional . adm_back_link($this->u_action . "&amp;action=edit&amp;id=$template_id&amp;text_rows=$text_rows&amp;template_file=$template_file"));
807 5894 naderman
                }
808 5894 naderman
809 5894 naderman
                // Generate a category array containing template filenames
810 5894 naderman
                if (!$template_info['template_storedb'])
811 5894 naderman
                {
812 5894 naderman
                        $template_path = "{$phpbb_root_path}styles/{$template_info['template_path']}/template";
813 5894 naderman
814 5894 naderman
                        $filelist = filelist($template_path, '', 'html');
815 5894 naderman
                        $filelist[''] = array_diff($filelist[''], array('bbcode.html'));
816 5894 naderman
817 5894 naderman
                        if ($template_file)
818 5894 naderman
                        {
819 5894 naderman
                                if (!file_exists($template_path . "/$template_file") || !($template_data = file_get_contents($template_path . "/$template_file")))
820 5894 naderman
                                {
821 6428 acydburn
                                        trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
822 5894 naderman
                                }
823 5894 naderman
                        }
824 5894 naderman
                }
825 5894 naderman
                else
826 5894 naderman
                {
827 5953 naderman
                        $sql = 'SELECT *
828 6021 acydburn
                                FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
829 5894 naderman
                                WHERE template_id = $template_id";
830 5894 naderman
                        $result = $db->sql_query($sql);
831 5894 naderman
832 5894 naderman
                        $filelist = array('' => array());
833 5894 naderman
                        while ($row = $db->sql_fetchrow($result))
834 5894 naderman
                        {
835 5894 naderman
                                $file_info = pathinfo($row['template_filename']);
836 5894 naderman
837 5894 naderman
                                if (($file_info['basename'] != 'bbcode') && ($file_info['extension'] == 'html'))
838 5894 naderman
                                {
839 5894 naderman
                                        if (($file_info['dirname'] == '.') || empty($file_info['dirname']))
840 5894 naderman
                                        {
841 5894 naderman
                                                $filelist[''][] = $row['template_filename'];
842 5894 naderman
                                        }
843 5894 naderman
                                        else
844 5894 naderman
                                        {
845 7813 acydburn
                                                $filelist[$file_info['dirname'] . '/'][] = $file_info['basename'];
846 5894 naderman
                                        }
847 5894 naderman
                                }
848 5894 naderman
849 5894 naderman
                                if ($row['template_filename'] == $template_file)
850 5894 naderman
                                {
851 5894 naderman
                                        $template_data = $row['template_data'];
852 5894 naderman
                                }
853 5894 naderman
                        }
854 5894 naderman
                        $db->sql_freeresult($result);
855 5894 naderman
                        unset($file_info);
856 5894 naderman
                }
857 5894 naderman
858 9565 bantu
                if (empty($filelist['']))
859 9565 bantu
                {
860 9565 bantu
                        trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
861 9565 bantu
                }
862 9565 bantu
863 5894 naderman
                // Now create the categories
864 5894 naderman
                $filelist_cats[''] = array();
865 5894 naderman
                foreach ($filelist as $pathfile => $file_ary)
866 5894 naderman
                {
867 5894 naderman
                        // Use the directory name as category name
868 5894 naderman
                        if (!empty($pathfile))
869 5894 naderman
                        {
870 5894 naderman
                                $filelist_cats[$pathfile] = array();
871 5894 naderman
                                foreach ($file_ary as $file)
872 5894 naderman
                                {
873 5894 naderman
                                        $filelist_cats[$pathfile][$pathfile . $file] = $file;
874 5894 naderman
                                }
875 5894 naderman
                        }
876 5894 naderman
                        // or if it's in the main category use the word before the first underscore to group files
877 5894 naderman
                        else
878 5894 naderman
                        {
879 5894 naderman
                                $cats = array();
880 5894 naderman
                                foreach ($file_ary as $file)
881 5894 naderman
                                {
882 5894 naderman
                                        $cats[] = substr($file, 0, strpos($file, '_'));
883 5894 naderman
                                        $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file;
884 5894 naderman
                                }
885 5894 naderman
886 5894 naderman
                                $cats = array_values(array_unique($cats));
887 5894 naderman
888 5894 naderman
                                // we don't need any single element categories so put them into the misc '' category
889 5894 naderman
                                for ($i = 0, $n = sizeof($cats); $i < $n; $i++)
890 5894 naderman
                                {
891 7562 davidmj
                                        if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '')
892 5894 naderman
                                        {
893 5894 naderman
                                                $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]);
894 5894 naderman
                                                unset($filelist_cats[$cats[$i]]);
895 5894 naderman
                                        }
896 5894 naderman
                                }
897 5894 naderman
                                unset($cats);
898 5894 naderman
                        }
899 5894 naderman
                }
900 5894 naderman
                unset($filelist);
901 5894 naderman
902 5894 naderman
                // Generate list of categorised template files
903 5894 naderman
                $tpl_options = '';
904 5894 naderman
                ksort($filelist_cats);
905 5894 naderman
                foreach ($filelist_cats as $category => $tpl_ary)
906 5894 naderman
                {
907 5894 naderman
                        ksort($tpl_ary);
908 5894 naderman
909 5894 naderman
                        if (!empty($category))
910 5894 naderman
                        {
911 5894 naderman
                                $tpl_options .= '<option class="sep" value="">' . $category . '</option>';
912 5894 naderman
                        }
913 5894 naderman
914 5894 naderman
                        foreach ($tpl_ary as $filename => $file)
915 5894 naderman
                        {
916 5894 naderman
                                $selected = ($template_file == $filename) ? ' selected="selected"' : '';
917 5894 naderman
                                $tpl_options .= '<option value="' . $filename . '"' . $selected . '>' . $file . '</option>';
918 5894 naderman
                        }
919 5894 naderman
                }
920 5894 naderman
921 5894 naderman
                $template->assign_vars(array(
922 5894 naderman
                        'S_EDIT_TEMPLATE'        => true,
923 5894 naderman
                        'S_HIDDEN_FIELDS'        => build_hidden_fields(array('template_file' => $template_file)),
924 5894 naderman
                        'S_TEMPLATES'                => $tpl_options,
925 5894 naderman
926 5894 naderman
                        'U_ACTION'                        => $this->u_action . "&amp;action=edit&amp;id=$template_id&amp;text_rows=$text_rows",
927 5894 naderman
                        'U_BACK'                        => $this->u_action,
928 5894 naderman
929 7562 davidmj
                        'L_EDIT'                        => $user->lang['EDIT_TEMPLATE'],
930 7562 davidmj
                        'L_EDIT_EXPLAIN'        => $user->lang['EDIT_TEMPLATE_EXPLAIN'],
931 7562 davidmj
                        'L_EDITOR'                        => $user->lang['TEMPLATE_EDITOR'],
932 7562 davidmj
                        'L_EDITOR_HEIGHT'        => $user->lang['TEMPLATE_EDITOR_HEIGHT'],
933 7562 davidmj
                        'L_FILE'                        => $user->lang['TEMPLATE_FILE'],
934 7562 davidmj
                        'L_SELECT'                        => $user->lang['SELECT_TEMPLATE'],
935 7562 davidmj
                        'L_SELECTED'                => $user->lang['SELECTED_TEMPLATE'],
936 7562 davidmj
                        'L_SELECTED_FILE'        => $user->lang['SELECTED_TEMPLATE_FILE'],
937 7562 davidmj
938 5953 naderman
                        'SELECTED_TEMPLATE'        => $template_info['template_name'],
939 5894 naderman
                        'TEMPLATE_FILE'                => $template_file,
940 8033 acydburn
                        'TEMPLATE_DATA'                => utf8_htmlspecialchars($template_data),
941 5894 naderman
                        'TEXT_ROWS'                        => $text_rows)
942 5894 naderman
                );
943 5894 naderman
        }
944 5894 naderman
945 5894 naderman
        /**
946 6007 naderman
        * Allows the admin to view cached versions of template files and clear single template cache files
947 6007 naderman
        *
948 6007 naderman
        * @param int $template_id specifies which template's cache is shown
949 6007 naderman
        */
950 6007 naderman
        function template_cache($template_id)
951 6007 naderman
        {
952 6015 acydburn
                global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
953 6007 naderman
954 6007 naderman
                $source                = str_replace('/', '.', request_var('source', ''));
955 6007 naderman
                $file_ary        = array_diff(request_var('delete', array('')), array(''));
956 6007 naderman
                $submit                = isset($_POST['submit']) ? true : false;
957 6007 naderman
958 6007 naderman
                $sql = 'SELECT *
959 6021 acydburn
                        FROM ' . STYLES_TEMPLATE_TABLE . "
960 6007 naderman
                        WHERE template_id = $template_id";
961 6007 naderman
                $result = $db->sql_query($sql);
962 6428 acydburn
                $template_row = $db->sql_fetchrow($result);
963 6428 acydburn
                $db->sql_freeresult($result);
964 6007 naderman
965 6428 acydburn
                if (!$template_row)
966 6007 naderman
                {
967 6428 acydburn
                        trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
968 6007 naderman
                }
969 6007 naderman
970 6007 naderman
                // User wants to delete one or more files ...
971 6007 naderman
                if ($submit && $file_ary)
972 6007 naderman
                {
973 6007 naderman
                        $this->clear_template_cache($template_row, $file_ary);
974 6007 naderman
                        trigger_error($user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action . "&amp;action=cache&amp;id=$template_id"));
975 6007 naderman
                }
976 6007 naderman
977 8943 acydburn
                $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']);
978 6007 naderman
979 6007 naderman
                // Someone wants to see the cached source ... so we'll highlight it,
980 6007 naderman
                // add line numbers and indent it appropriately. This could be nasty
981 6007 naderman
                // on larger source files ...
982 6007 naderman
                if ($source && file_exists("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx"))
983 6007 naderman
                {
984 6007 naderman
                        adm_page_header($user->lang['TEMPLATE_CACHE']);
985 6007 naderman
986 6007 naderman
                        $template->set_filenames(array(
987 6007 naderman
                                'body'        => 'viewsource.html')
988 6007 naderman
                        );
989 6007 naderman
990 6007 naderman
                        $template->assign_vars(array(
991 6007 naderman
                                'FILENAME'        => str_replace('.', '/', $source) . '.html')
992 6007 naderman
                        );
993 6007 naderman
994 6175 naderman
                        $code = str_replace(array("\r\n", "\r"), array("\n", "\n"), file_get_contents("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx"));
995 6007 naderman
996 6007 naderman
                        $conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string');
997 6007 naderman
                        foreach ($conf as $ini_var)
998 6007 naderman
                        {
999 6007 naderman
                                @ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var));
1000 6007 naderman
                        }
1001 6007 naderman
1002 6007 naderman
                        $marker = 'MARKER' . time();
1003 6007 naderman
                        $code = highlight_string(str_replace("\n", $marker, $code), true);
1004 6007 naderman
                        $code = str_replace($marker, "\n", $code);
1005 6028 naderman
                        $str_from = array('<span style="color: ', '<font color="syntax', '</font>', '<code>', '</code>','[', ']', '.', ':');
1006 6028 naderman
                        $str_to = array('<span class="', '<span class="syntax', '</span>', '', '', '&#91;', '&#93;', '&#46;', '&#58;');
1007 6007 naderman
1008 6007 naderman
                        $code = str_replace($str_from, $str_to, $code);
1009 6921 davidmj
                        $code = preg_replace('#^(<span class="[a-z_]+">)\n?(.*?)\n?(</span>)$#ism', '$1$2$3', $code);
1010 7607 kellanved
                        $code = substr($code, strlen('<span class="syntaxhtml">'));
1011 7607 kellanved
                        $code = substr($code, 0, -1 * strlen('</ span>'));
1012 6007 naderman
                        $code = explode("\n", $code);
1013 6007 naderman
1014 6007 naderman
                        foreach ($code as $key => $line)
1015 6007 naderman
                        {
1016 6007 naderman
                                $template->assign_block_vars('source', array(
1017 6007 naderman
                                        'LINENUM'        => $key + 1,
1018 6007 naderman
                                        'LINE'                => preg_replace('#([^ ;])&nbsp;([^ &])#', '$1 $2', $line))
1019 6007 naderman
                                );
1020 6007 naderman
                                unset($code[$key]);
1021 6007 naderman
                        }
1022 6007 naderman
1023 6007 naderman
                        adm_page_footer();
1024 6007 naderman
                }
1025 6007 naderman
1026 6007 naderman
                $filemtime = array();
1027 6007 naderman
                if ($template_row['template_storedb'])
1028 6007 naderman
                {
1029 8700 Kellanved
                        $ids = array();
1030 8700 Kellanved
                        if (isset($template_row['template_inherits_id']) && $template_row['template_inherits_id'])
1031 6007 naderman
                        {
1032 8697 Kellanved
                                $ids[] = $template_row['template_inherits_id'];
1033 6007 naderman
                        }
1034 8697 Kellanved
                        $ids[] = $template_row['template_id'];
1035 8783 acydburn
1036 8697 Kellanved
                        $filemtime                         = array();
1037 8697 Kellanved
                        $file_template_db        = array();
1038 8783 acydburn
1039 8697 Kellanved
                        foreach ($ids as $id)
1040 8697 Kellanved
                        {
1041 8697 Kellanved
                                $sql = 'SELECT template_filename, template_mtime
1042 8697 Kellanved
                                        FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
1043 8697 Kellanved
                                        WHERE template_id = $id";
1044 8697 Kellanved
                                $result = $db->sql_query($sql);
1045 8783 acydburn
1046 8697 Kellanved
                                while ($row = $db->sql_fetchrow($result))
1047 8697 Kellanved
                                {
1048 8697 Kellanved
                                        $filemtime[$row['template_filename']] = $row['template_mtime'];
1049 8697 Kellanved
                                        $file_template_db[$row['template_filename']] = $id;
1050 8697 Kellanved
                                }
1051 8697 Kellanved
                                $db->sql_freeresult($result);
1052 8697 Kellanved
                        }
1053 6007 naderman
                }
1054 6007 naderman
1055 6007 naderman
                // Get a list of cached template files and then retrieve additional information about them
1056 6007 naderman
                $file_ary = $this->template_cache_filelist($template_row['template_path']);
1057 6007 naderman
1058 6007 naderman
                foreach ($file_ary as $file)
1059 6007 naderman
                {
1060 9600 nickvergessen
                        $file                = str_replace('/', '.', $file);
1061 8783 acydburn
1062 8147 acydburn
                        // perform some dirty guessing to get the path right.
1063 7607 kellanved
                        // We assume that three dots in a row were '../'
1064 9600 nickvergessen
                        $tpl_file        = str_replace('.', '/', $file);
1065 9600 nickvergessen
                        $tpl_file        = str_replace('///', '../', $tpl_file);
1066 8783 acydburn
1067 6007 naderman
                        $filename = "{$cache_prefix}_$file.html.$phpEx";
1068 6007 naderman
1069 8207 acydburn
                        if (!file_exists("{$phpbb_root_path}cache/$filename"))
1070 8207 acydburn
                        {
1071 8207 acydburn
                                continue;
1072 8207 acydburn
                        }
1073 8783 acydburn
1074 8697 Kellanved
                        $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_path']}/template/$tpl_file.html";
1075 8697 Kellanved
                        $inherited = false;
1076 8783 acydburn
1077 8700 Kellanved
                        if (isset($template_row['template_inherits_id']) && $template_row['template_inherits_id'])
1078 8697 Kellanved
                        {
1079 8697 Kellanved
                                if (!$template_row['template_storedb'])
1080 8697 Kellanved
                                {
1081 8733 Kellanved
                                        if (!file_exists($file_tpl))
1082 8697 Kellanved
                                        {
1083 8697 Kellanved
                                                $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_inherit_path']}/template/$tpl_file.html";
1084 8697 Kellanved
                                                $inherited = true;
1085 8697 Kellanved
                                        }
1086 8697 Kellanved
                                }
1087 8697 Kellanved
                                else
1088 8697 Kellanved
                                {
1089 8697 Kellanved
                                        if ($file_template_db[$file . '.html'] == $template_row['template_inherits_id'])
1090 8697 Kellanved
                                        {
1091 8697 Kellanved
                                                $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_inherit_path']}/template/$tpl_file.html";
1092 8697 Kellanved
                                                $inherited = true;
1093 8697 Kellanved
                                        }
1094 8697 Kellanved
                                }
1095 8697 Kellanved
                        }
1096 8207 acydburn
1097 9600 nickvergessen
                        // Correct the filename if it is stored in database and the file is in a subfolder.
1098 9600 nickvergessen
                        if ($template_row['template_storedb'])
1099 9600 nickvergessen
                        {
1100 9600 nickvergessen
                                $file = str_replace('.', '/', $file);
1101 9600 nickvergessen
                        }
1102 8783 acydburn
1103 6007 naderman
                        $template->assign_block_vars('file', array(
1104 6007 naderman
                                'U_VIEWSOURCE'        => $this->u_action . "&amp;action=cache&amp;id=$template_id&amp;source=$file",
1105 6007 naderman
1106 6007 naderman
                                'CACHED'                => $user->format_date(filemtime("{$phpbb_root_path}cache/$filename")),
1107 6007 naderman
                                'FILENAME'                => $file,
1108 8697 Kellanved
                                'FILENAME_PATH'        => $file_tpl,
1109 9600 nickvergessen
                                'FILESIZE'                => get_formatted_filesize(filesize("{$phpbb_root_path}cache/$filename")),
1110 8697 Kellanved
                                'MODIFIED'                => $user->format_date((!$template_row['template_storedb']) ? filemtime($file_tpl) : $filemtime[$file . '.html']))
1111 6007 naderman
                        );
1112 6007 naderman
                }
1113 6007 naderman
                unset($filemtime);
1114 6007 naderman
1115 6007 naderman
                $template->assign_vars(array(
1116 6007 naderman
                        'S_CACHE'                        => true,
1117 6007 naderman
                        'S_TEMPLATE'                => true,
1118 6007 naderman
1119 6007 naderman
                        'U_ACTION'                        => $this->u_action . "&amp;action=cache&amp;id=$template_id",
1120 6007 naderman
                        'U_BACK'                        => $this->u_action)
1121 6007 naderman
                );
1122 6007 naderman
        }
1123 6007 naderman
1124 6007 naderman
        /**
1125 5953 naderman
        * Provides a css editor and a basic easier to use stylesheet editing tool for less experienced (or lazy) users
1126 5953 naderman
        *
1127 5953 naderman
        * @param int $theme_id specifies which theme is being edited
1128 5953 naderman
        */
1129 5953 naderman
        function edit_theme($theme_id)
1130 5953 naderman
        {
1131 7562 davidmj
                global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
1132 5953 naderman
1133 5953 naderman
                $this->page_title = 'EDIT_THEME';
1134 5953 naderman
1135 7562 davidmj
                $filelist = $filelist_cats = array();
1136 7562 davidmj
1137 8033 acydburn
                $theme_data                = utf8_normalize_nfc(request_var('template_data', '', true));
1138 8033 acydburn
                $theme_data                = htmlspecialchars_decode($theme_data);
1139 8033 acydburn
                $theme_file                = utf8_normalize_nfc(request_var('template_file', '', true));
1140 5953 naderman
                $text_rows                = max(5, min(999, request_var('text_rows', 20)));
1141 7562 davidmj
                $save_changes        = (isset($_POST['save'])) ? true : false;
1142 5953 naderman
1143 7562 davidmj
                // make sure theme_file path doesn't go upwards
1144 7562 davidmj
                $theme_file = str_replace('..', '.', $theme_file);
1145 8783 acydburn
1146 5953 naderman
                // Retrieve some information about the theme
1147 5953 naderman
                $sql = 'SELECT theme_storedb, theme_path, theme_name, theme_data
1148 6021 acydburn
                        FROM ' . STYLES_THEME_TABLE . "
1149 5953 naderman
                        WHERE theme_id = $theme_id";
1150 5953 naderman
                $result = $db->sql_query($sql);
1151 5953 naderman
1152 5953 naderman
                if (!($theme_info = $db->sql_fetchrow($result)))
1153 5953 naderman
                {
1154 8033 acydburn
                        trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
1155 5953 naderman
                }
1156 5953 naderman
                $db->sql_freeresult($result);
1157 5953 naderman
1158 7562 davidmj
                // save changes to the theme if the user submitted any
1159 7562 davidmj
                if ($save_changes)
1160 5953 naderman
                {
1161 7562 davidmj
                        // Get the filesystem location of the current file
1162 7562 davidmj
                        $file = "{$phpbb_root_path}styles/{$theme_info['theme_path']}/theme/$theme_file";
1163 7562 davidmj
                        $additional = '';
1164 7562 davidmj
                        $message = $user->lang['THEME_UPDATED'];
1165 5953 naderman
1166 7562 davidmj
                        // If the theme is stored on the filesystem try to write the file else store it in the database
1167 10757 git-gate
                        if (!$safe_mode && !$theme_info['theme_storedb'] && file_exists($file) && phpbb_is_writable($file))
1168 5953 naderman
                        {
1169 7872 acydburn
                                if (!($fp = @fopen($file, 'wb')))
1170 7562 davidmj
                                {
1171 7562 davidmj
                                        trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
1172 7562 davidmj
                                }
1173 7562 davidmj
                                fwrite($fp, $theme_data);
1174 7562 davidmj
                                fclose($fp);
1175 5953 naderman
                        }
1176 7562 davidmj
                        else
1177 5953 naderman
                        {
1178 7562 davidmj
                                // Write stylesheet to db
1179 7562 davidmj
                                $sql_ary = array(
1180 7562 davidmj
                                        'theme_mtime'                => time(),
1181 7562 davidmj
                                        'theme_storedb'                => 1,
1182 7562 davidmj
                                        'theme_data'                => $this->db_theme_data($theme_info, $theme_data),
1183 7562 davidmj
                                );
1184 7562 davidmj
                                $sql = 'UPDATE ' . STYLES_THEME_TABLE . '
1185 7562 davidmj
                                        SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
1186 7562 davidmj
                                        WHERE theme_id = ' . $theme_id;
1187 7562 davidmj
                                $db->sql_query($sql);
1188 5953 naderman
1189 7562 davidmj
                                $cache->destroy('sql', STYLES_THEME_TABLE);
1190 5953 naderman
1191 7562 davidmj
                                // notify the user if the theme was not stored in the db before his modification
1192 7562 davidmj
                                if (!$theme_info['theme_storedb'])
1193 5953 naderman
                                {
1194 7562 davidmj
                                        add_log('admin', 'LOG_THEME_EDIT_DETAILS', $theme_info['theme_name']);
1195 7562 davidmj
                                        $message .= '<br />' . $user->lang['EDIT_THEME_STORED_DB'];
1196 5953 naderman
                                }
1197 5953 naderman
                        }
1198 7562 davidmj
                        $cache->destroy('sql', STYLES_THEME_TABLE);
1199 7562 davidmj
                        add_log('admin', (!$theme_info['theme_storedb']) ? 'LOG_THEME_EDIT_FILE' : 'LOG_THEME_EDIT', $theme_info['theme_name'], (!$theme_info['theme_storedb']) ? $theme_file : '');
1200 5953 naderman
1201 7562 davidmj
                        trigger_error($message . adm_back_link($this->u_action . "&amp;action=edit&amp;id=$theme_id&amp;template_file=$theme_file&amp;text_rows=$text_rows"));
1202 5953 naderman
                }
1203 7562 davidmj
1204 7562 davidmj
                // Generate a category array containing theme filenames
1205 7562 davidmj
                if (!$theme_info['theme_storedb'])
1206 5953 naderman
                {
1207 7562 davidmj
                        $theme_path = "{$phpbb_root_path}styles/{$theme_info['theme_path']}/theme";
1208 5953 naderman
1209 7562 davidmj
                        $filelist = filelist($theme_path, '', 'css');
1210 5953 naderman
1211 7562 davidmj
                        if ($theme_file)
1212 7562 davidmj
                        {
1213 7562 davidmj
                                if (!file_exists($theme_path . "/$theme_file") || !($theme_data = file_get_contents($theme_path . "/$theme_file")))
1214 7562 davidmj
                                {
1215 7562 davidmj
                                        trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
1216 5953 naderman
                                }
1217 5953 naderman
                        }
1218 5953 naderman
                }
1219 7562 davidmj
                else
1220 5953 naderman
                {
1221 7562 davidmj
                        $theme_data = &$theme_info['theme_data'];
1222 5953 naderman
                }
1223 5953 naderman
1224 7562 davidmj
                // Now create the categories
1225 7562 davidmj
                $filelist_cats[''] = array();
1226 7562 davidmj
                foreach ($filelist as $pathfile => $file_ary)
1227 5953 naderman
                {
1228 7562 davidmj
                        // Use the directory name as category name
1229 7562 davidmj
                        if (!empty($pathfile))
1230 5953 naderman
                        {
1231 7562 davidmj
                                $filelist_cats[$pathfile] = array();
1232 7562 davidmj
                                foreach ($file_ary as $file)
1233 5953 naderman
                                {
1234 7562 davidmj
                                        $filelist_cats[$pathfile][$pathfile . $file] = $file;
1235 5953 naderman
                                }
1236 5953 naderman
                        }
1237 7562 davidmj
                        // or if it's in the main category use the word before the first underscore to group files
1238 5953 naderman
                        else
1239 5953 naderman
                        {
1240 7562 davidmj
                                $cats = array();
1241 7562 davidmj
                                foreach ($file_ary as $file)
1242 5953 naderman
                                {
1243 7562 davidmj
                                        $cats[] = substr($file, 0, strpos($file, '_'));
1244 7562 davidmj
                                        $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file;
1245 5953 naderman
                                }
1246 5953 naderman
1247 7562 davidmj
                                $cats = array_values(array_unique($cats));
1248 7562 davidmj
1249 7562 davidmj
                                // we don't need any single element categories so put them into the misc '' category
1250 7562 davidmj
                                for ($i = 0, $n = sizeof($cats); $i < $n; $i++)
1251 5953 naderman
                                {
1252 7562 davidmj
                                        if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '')
1253 7562 davidmj
                                        {
1254 7562 davidmj
                                                $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]);
1255 7562 davidmj
                                                unset($filelist_cats[$cats[$i]]);
1256 7562 davidmj
                                        }
1257 5953 naderman
                                }
1258 7562 davidmj
                                unset($cats);
1259 5953 naderman
                        }
1260 7562 davidmj
                }
1261 7562 davidmj
                unset($filelist);
1262 5953 naderman
1263 7562 davidmj
                // Generate list of categorised theme files
1264 7562 davidmj
                $tpl_options = '';
1265 7562 davidmj
                ksort($filelist_cats);
1266 7562 davidmj
                foreach ($filelist_cats as $category => $tpl_ary)
1267 7562 davidmj
                {
1268 7562 davidmj
                        ksort($tpl_ary);
1269 6007 naderman
1270 7562 davidmj
                        if (!empty($category))
1271 7562 davidmj
                        {
1272 7562 davidmj
                                $tpl_options .= '<option class="sep" value="">' . $category . '</option>';
1273 5953 naderman
                        }
1274 5953 naderman
1275 7562 davidmj
                        foreach ($tpl_ary as $filename => $file)
1276 7562 davidmj
                        {
1277 7562 davidmj
                                $selected = ($theme_file == $filename) ? ' selected="selected"' : '';
1278 7562 davidmj
                                $tpl_options .= '<option value="' . $filename . '"' . $selected . '>' . $file . '</option>';
1279 7562 davidmj
                        }
1280 5953 naderman
                }
1281 5953 naderman
1282 5953 naderman
                $template->assign_vars(array(
1283 7562 davidmj
                        'S_EDIT_THEME'                => true,
1284 7562 davidmj
                        'S_HIDDEN_FIELDS'        => build_hidden_fields(array('template_file' => $theme_file)),
1285 7562 davidmj
                        'S_THEME_IN_DB'                => $theme_info['theme_storedb'],
1286 7562 davidmj
                        'S_TEMPLATES'                => $tpl_options,
1287 5953 naderman
1288 7562 davidmj
                        'U_ACTION'                        => $this->u_action . "&amp;action=edit&amp;id=$theme_id&amp;text_rows=$text_rows",
1289 7562 davidmj
                        'U_BACK'                        => $this->u_action,
1290 5953 naderman
1291 7562 davidmj
                        'L_EDIT'                        => $user->lang['EDIT_THEME'],
1292 7562 davidmj
                        'L_EDIT_EXPLAIN'        => $user->lang['EDIT_THEME_EXPLAIN'],
1293 7562 davidmj
                        'L_EDITOR'                        => $user->lang['THEME_EDITOR'],
1294 7562 davidmj
                        'L_EDITOR_HEIGHT'        => $user->lang['THEME_EDITOR_HEIGHT'],
1295 7562 davidmj
                        'L_FILE'                        => $user->lang['THEME_FILE'],
1296 7562 davidmj
                        'L_SELECT'                        => $user->lang['SELECT_THEME'],
1297 7562 davidmj
                        'L_SELECTED'                => $user->lang['SELECTED_THEME'],
1298 7562 davidmj
                        'L_SELECTED_FILE'        => $user->lang['SELECTED_THEME_FILE'],
1299 7562 davidmj
1300 7562 davidmj
                        'SELECTED_TEMPLATE'        => $theme_info['theme_name'],
1301 7562 davidmj
                        'TEMPLATE_FILE'                => $theme_file,
1302 8033 acydburn
                        'TEMPLATE_DATA'                => utf8_htmlspecialchars($theme_data),
1303 7562 davidmj
                        'TEXT_ROWS'                        => $text_rows)
1304 5953 naderman
                );
1305 5953 naderman
        }
1306 5953 naderman
1307 5953 naderman
        /**
1308 5483 davidmj
        * Edit imagesets
1309 5953 naderman
        *
1310 5953 naderman
        * @param int $imageset_id specifies which imageset is being edited
1311 5483 davidmj
        */
1312 5953 naderman
        function edit_imageset($imageset_id)
1313 5483 davidmj
        {
1314 5544 davidmj
                global $db, $user, $phpbb_root_path, $cache, $template;
1315 5483 davidmj
1316 5544 davidmj
                $this->page_title = 'EDIT_IMAGESET';
1317 7384 acydburn
1318 9360 acydburn
                if (!$imageset_id)
1319 9360 acydburn
                {
1320 9360 acydburn
                        trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
1321 9360 acydburn
                }
1322 9360 acydburn
1323 6080 naderman
                $update                = (isset($_POST['update'])) ? true : false;
1324 7384 acydburn
1325 9360 acydburn
                $imgname        = request_var('imgname', 'site_logo');
1326 6080 naderman
                $imgname        = preg_replace('#[^a-z0-9\-+_]#i', '', $imgname);
1327 9360 acydburn
                $sql_extra = $imgnamelang = '';
1328 6080 naderman
1329 9360 acydburn
                $sql = 'SELECT imageset_path, imageset_name
1330 9360 acydburn
                        FROM ' . STYLES_IMAGESET_TABLE . "
1331 9360 acydburn
                        WHERE imageset_id = $imageset_id";
1332 9360 acydburn
                $result = $db->sql_query($sql);
1333 9360 acydburn
                $imageset_row = $db->sql_fetchrow($result);
1334 9360 acydburn
                $db->sql_freeresult($result);
1335 9360 acydburn
1336 9360 acydburn
                if (!$imageset_row)
1337 5483 davidmj
                {
1338 9360 acydburn
                        trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
1339 9360 acydburn
                }
1340 5483 davidmj
1341 9360 acydburn
                $imageset_path                = $imageset_row['imageset_path'];
1342 9360 acydburn
                $imageset_name                = $imageset_row['imageset_name'];
1343 7304 davidmj
1344 9360 acydburn
                if (strpos($imgname, '-') !== false)
1345 9360 acydburn
                {
1346 9360 acydburn
                        list($imgname, $imgnamelang) = explode('-', $imgname);
1347 9360 acydburn
                        $sql_extra = " AND image_lang IN ('" . $db->sql_escape($imgnamelang) . "', '')";
1348 9360 acydburn
                }
1349 9360 acydburn
1350 9360 acydburn
                $sql = 'SELECT image_filename, image_width, image_height, image_lang, image_id
1351 9360 acydburn
                        FROM ' . STYLES_IMAGESET_DATA_TABLE . "
1352 9360 acydburn
                        WHERE imageset_id = $imageset_id
1353 9360 acydburn
                                AND image_name = '" . $db->sql_escape($imgname) . "'$sql_extra";
1354 9360 acydburn
                $result = $db->sql_query($sql);
1355 9360 acydburn
                $imageset_data_row = $db->sql_fetchrow($result);
1356 9360 acydburn
                $db->sql_freeresult($result);
1357 9360 acydburn
1358 9360 acydburn
                $image_filename        = $imageset_data_row['image_filename'];
1359 9360 acydburn
                $image_width        = $imageset_data_row['image_width'];
1360 9360 acydburn
                $image_height        = $imageset_data_row['image_height'];
1361 9360 acydburn
                $image_lang                = $imageset_data_row['image_lang'];
1362 9360 acydburn
                $image_id                = $imageset_data_row['image_id'];
1363 9360 acydburn
                $imgsize                = ($imageset_data_row['image_width'] && $imageset_data_row['image_height']) ? 1 : 0;
1364 9360 acydburn
1365 9360 acydburn
                // Check to see whether the selected image exists in the table
1366 9360 acydburn
                $valid_name = ($update) ? false : true;
1367 9360 acydburn
1368 9360 acydburn
                foreach ($this->imageset_keys as $category => $img_ary)
1369 9360 acydburn
                {
1370 9360 acydburn
                        if (in_array($imgname, $img_ary))
1371 7304 davidmj
                        {
1372 9360 acydburn
                                $valid_name = true;
1373 9360 acydburn
                                break;
1374 7304 davidmj
                        }
1375 9360 acydburn
                }
1376 7304 davidmj
1377 9360 acydburn
                if ($update && isset($_POST['imgpath']) && $valid_name)
1378 9360 acydburn
                {
1379 9360 acydburn
                        // If imgwidth and imgheight are non-zero grab the actual size
1380 9360 acydburn
                        // from the image itself ... we ignore width settings for the poll center image
1381 9360 acydburn
                        $imgwidth        = request_var('imgwidth', 0);
1382 9360 acydburn
                        $imgheight        = request_var('imgheight', 0);
1383 9360 acydburn
                        $imgsize        = request_var('imgsize', 0);
1384 9360 acydburn
                        $imgpath        = request_var('imgpath', '');
1385 9360 acydburn
                        $imgpath        = str_replace('..', '.', $imgpath);
1386 7384 acydburn
1387 9360 acydburn
                        // If no dimensions selected, we reset width and height to 0 ;)
1388 9360 acydburn
                        if (!$imgsize)
1389 5544 davidmj
                        {
1390 9360 acydburn
                                $imgwidth = $imgheight = 0;
1391 5544 davidmj
                        }
1392 5483 davidmj
1393 9360 acydburn
                        $imglang = '';
1394 5678 acydburn
1395 9360 acydburn
                        if ($imgpath && !file_exists("{$phpbb_root_path}styles/$imageset_path/imageset/$imgpath"))
1396 5483 davidmj
                        {
1397 9360 acydburn
                                trigger_error($user->lang['NO_IMAGE_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING);
1398 9360 acydburn
                        }
1399 9360 acydburn
1400 9360 acydburn
                        // Determine width/height. If dimensions included and no width/height given, we detect them automatically...
1401 9360 acydburn
                        if ($imgsize && $imgpath)
1402 9360 acydburn
                        {
1403 9360 acydburn
                                if (!$imgwidth || !$imgheight)
1404 5483 davidmj
                                {
1405 9360 acydburn
                                        list($imgwidth_file, $imgheight_file) = getimagesize("{$phpbb_root_path}styles/$imageset_path/imageset/$imgpath");
1406 9360 acydburn
                                        $imgwidth = ($imgwidth) ? $imgwidth : $imgwidth_file;
1407 9360 acydburn
                                        $imgheight = ($imgheight) ? $imgheight : $imgheight_file;
1408 5483 davidmj
                                }
1409 9360 acydburn
                                $imgwidth        = ($imgname != 'poll_center') ? (int) $imgwidth : 0;
1410 9360 acydburn
                                $imgheight        = (int) $imgheight;
1411 5483 davidmj
                        }
1412 5483 davidmj
1413 9360 acydburn
                        if (strpos($imgpath, '/') !== false)
1414 5544 davidmj
                        {
1415 9360 acydburn
                                list($imglang, $imgfilename) = explode('/', $imgpath);
1416 9360 acydburn
                        }
1417 9360 acydburn
                        else
1418 9360 acydburn
                        {
1419 9360 acydburn
                                $imgfilename = $imgpath;
1420 9360 acydburn
                        }
1421 7250 naderman
1422 9360 acydburn
                        $sql_ary = array(
1423 9360 acydburn
                                'image_filename'        => (string) $imgfilename,
1424 9360 acydburn
                                'image_width'                => (int) $imgwidth,
1425 9360 acydburn
                                'image_height'                => (int) $imgheight,
1426 9360 acydburn
                                'image_lang'                => (string) $imglang,
1427 9360 acydburn
                        );
1428 7250 naderman
1429 9360 acydburn
                        // already exists
1430 9360 acydburn
                        if ($imageset_data_row)
1431 9360 acydburn
                        {
1432 9360 acydburn
                                $sql = 'UPDATE ' . STYLES_IMAGESET_DATA_TABLE . '
1433 9360 acydburn
                                        SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
1434 9360 acydburn
                                        WHERE image_id = $image_id";
1435 9360 acydburn
                                $db->sql_query($sql);
1436 9360 acydburn
                        }
1437 9360 acydburn
                        // does not exist
1438 9360 acydburn
                        else if (!$imageset_data_row)
1439 9360 acydburn
                        {
1440 9360 acydburn
                                $sql_ary['image_name']        = $imgname;
1441 9360 acydburn
                                $sql_ary['imageset_id']        = (int) $imageset_id;
1442 9360 acydburn
                                $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
1443 9360 acydburn
                        }
1444 5483 davidmj
1445 9360 acydburn
                        $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
1446 7750 kellanved
1447 9360 acydburn
                        add_log('admin', 'LOG_IMAGESET_EDIT', $imageset_name);
1448 5483 davidmj
1449 9360 acydburn
                        $template->assign_var('SUCCESS', true);
1450 5544 davidmj
1451 9360 acydburn
                        $image_filename = $imgfilename;
1452 9360 acydburn
                        $image_width        = $imgwidth;
1453 9360 acydburn
                        $image_height        = $imgheight;
1454 9360 acydburn
                        $image_lang                = $imglang;
1455 5483 davidmj
                }
1456 5483 davidmj
1457 5544 davidmj
                $imglang = '';
1458 5544 davidmj
                $imagesetlist = array('nolang' => array(), 'lang' => array());
1459 7304 davidmj
                $langs = array();
1460 5550 davidmj
1461 5550 davidmj
                $dir = "{$phpbb_root_path}styles/$imageset_path/imageset";
1462 6912 acydburn
                $dp = @opendir($dir);
1463 6912 acydburn
1464 6912 acydburn
                if ($dp)
1465 5483 davidmj
                {
1466 6912 acydburn
                        while (($file = readdir($dp)) !== false)
1467 5483 davidmj
                        {
1468 7909 acydburn
                                if ($file[0] != '.' && strtoupper($file) != 'CVS' && !is_file($dir . '/' . $file) && !is_link($dir . '/' . $file))
1469 5544 davidmj
                                {
1470 7304 davidmj
                                        $langs[] = $file;
1471 5544 davidmj
                                }
1472 6912 acydburn
                                else if (preg_match('#\.(?:gif|jpg|png)$#', $file))
1473 6912 acydburn
                                {
1474 6912 acydburn
                                        $imagesetlist['nolang'][] = $file;
1475 6912 acydburn
                                }
1476 5483 davidmj
                        }
1477 7304 davidmj
1478 7304 davidmj
                        if ($sql_extra)
1479 7304 davidmj
                        {
1480 7304 davidmj
                                $dp2 = @opendir("$dir/$imgnamelang");
1481 7304 davidmj
1482 7663 davidmj
                                if ($dp2)
1483 7304 davidmj
                                {
1484 7663 davidmj
                                        while (($file2 = readdir($dp2)) !== false)
1485 7304 davidmj
                                        {
1486 7663 davidmj
                                                if (preg_match('#\.(?:gif|jpg|png)$#', $file2))
1487 7663 davidmj
                                                {
1488 7663 davidmj
                                                        $imagesetlist['lang'][] = "$imgnamelang/$file2";
1489 7663 davidmj
                                                }
1490 7304 davidmj
                                        }
1491 7663 davidmj
                                        closedir($dp2);
1492 7304 davidmj
                                }
1493 7304 davidmj
                        }
1494 6912 acydburn
                        closedir($dp);
1495 5544 davidmj
                }
1496 5483 davidmj
1497 7304 davidmj
                // Generate list of image options
1498 7304 davidmj
                $img_options = '';
1499 7304 davidmj
                foreach ($this->imageset_keys as $category => $img_ary)
1500 7287 davidmj
                {
1501 7304 davidmj
                        $template->assign_block_vars('category', array(
1502 7304 davidmj
                                'NAME'                        => $user->lang['IMG_CAT_' . strtoupper($category)]
1503 7304 davidmj
                        ));
1504 6196 grahamje
1505 7304 davidmj
                        foreach ($img_ary as $img)
1506 7287 davidmj
                        {
1507 7304 davidmj
                                if ($category == 'buttons')
1508 7287 davidmj
                                {
1509 7304 davidmj
                                        foreach ($langs as $language)
1510 7304 davidmj
                                        {
1511 7304 davidmj
                                                $template->assign_block_vars('category.images', array(
1512 7402 davidmj
                                                        'SELECTED'                        => ($img == $imgname && $language == $imgnamelang),
1513 7304 davidmj
                                                        'VALUE'                                => $img . '-' . $language,
1514 7304 davidmj
                                                        'TEXT'                                => $user->lang['IMG_' . strtoupper($img)] . ' [ ' . $language . ' ]'
1515 7304 davidmj
                                                ));
1516 7304 davidmj
                                        }
1517 7287 davidmj
                                }
1518 7304 davidmj
                                else
1519 7304 davidmj
                                {
1520 7304 davidmj
                                        $template->assign_block_vars('category.images', array(
1521 7304 davidmj
                                                'SELECTED'                        => ($img == $imgname),
1522 7304 davidmj
                                                'VALUE'                                => $img,
1523 7304 davidmj
                                                'TEXT'                                => (($category == 'custom') ? $img : $user->lang['IMG_' . strtoupper($img)])
1524 7304 davidmj
                                        ));
1525 7304 davidmj
                                }
1526 7287 davidmj
                        }
1527 7287 davidmj
                }
1528 7287 davidmj
1529 7304 davidmj
                // Make sure the list of possible images is sorted alphabetically
1530 7304 davidmj
                sort($imagesetlist['lang']);
1531 7304 davidmj
                sort($imagesetlist['nolang']);
1532 7304 davidmj
1533 7663 davidmj
                $image_found = false;
1534 7663 davidmj
                $img_val = '';
1535 5544 davidmj
                foreach ($imagesetlist as $type => $img_ary)
1536 5544 davidmj
                {
1537 7304 davidmj
                        if ($type !== 'lang' || $sql_extra)
1538 7304 davidmj
                        {
1539 7304 davidmj
                                $template->assign_block_vars('imagesetlist', array(
1540 7304 davidmj
                                        'TYPE'        => ($type == 'lang')
1541 7304 davidmj
                                ));
1542 7304 davidmj
                        }
1543 7304 davidmj
1544 5544 davidmj
                        foreach ($img_ary as $img)
1545 5544 davidmj
                        {
1546 5544 davidmj
                                $imgtext = preg_replace('/^([^\/]+\/)/', '', $img);
1547 7304 davidmj
                                $selected = (!empty($imgname) && strpos($image_filename, $imgtext) !== false);
1548 5544 davidmj
                                if ($selected)
1549 5544 davidmj
                                {
1550 7663 davidmj
                                        $image_found = true;
1551 7663 davidmj
                                        $img_val = htmlspecialchars($img);
1552 5544 davidmj
                                }
1553 5544 davidmj
                                $template->assign_block_vars('imagesetlist.images', array(
1554 5544 davidmj
                                        'SELECTED'                        => $selected,
1555 5544 davidmj
                                        'TEXT'                                => $imgtext,
1556 5544 davidmj
                                        'VALUE'                                => htmlspecialchars($img)
1557 5544 davidmj
                                ));
1558 5544 davidmj
                        }
1559 5483 davidmj
                }
1560 5483 davidmj
1561 7304 davidmj
                $imgsize_bool = (!empty($imgname) && $image_width && $image_height) ? true : false;
1562 7304 davidmj
                $image_request = '../styles/' . $imageset_path . '/imageset/' . ($image_lang ? $imgnamelang . '/' : '') . $image_filename;
1563 6028 naderman
1564 5483 davidmj
                $template->assign_vars(array(
1565 5483 davidmj
                        'S_EDIT_IMAGESET'        => true,
1566 5483 davidmj
                        'L_TITLE'                        => $user->lang[$this->page_title],
1567 5483 davidmj
                        'L_EXPLAIN'                        => $user->lang[$this->page_title . '_EXPLAIN'],
1568 5544 davidmj
                        'IMAGE_OPTIONS'                => $img_options,
1569 7750 kellanved
                        'IMAGE_SIZE'                => $image_width,
1570 7750 kellanved
                        'IMAGE_HEIGHT'                => $image_height,
1571 7759 kellanved
                        'IMAGE_REQUEST'                => (empty($image_filename)) ? 'images/no_image.png' : $image_request,
1572 5953 naderman
                        'U_ACTION'                        => $this->u_action . "&amp;action=edit&amp;id=$imageset_id",
1573 5544 davidmj
                        'U_BACK'                        => $this->u_action,
1574 5544 davidmj
                        'NAME'                                => $imageset_name,
1575 8099 acydburn
                        'A_NAME'                        => addslashes($imageset_name),
1576 9381 acydburn
                        'PATH'                                => $imageset_path,
1577 9381 acydburn
                        'A_PATH'                        => addslashes($imageset_path),
1578 7663 davidmj
                        'ERROR'                                => !$valid_name,
1579 7663 davidmj
                        'IMG_SRC'                        => ($image_found) ? '../styles/' . $imageset_path . '/imageset/' . $img_val : 'images/no_image.png',
1580 7663 davidmj
                        'IMAGE_SELECT'                => $image_found
1581 5544 davidmj
                ));
1582 5483 davidmj
        }
1583 5483 davidmj
1584 5483 davidmj
        /**
1585 5388 acydburn
        * Remove style/template/theme/imageset
1586 5388 acydburn
        */
1587 5388 acydburn
        function remove($mode, $style_id)
1588 5388 acydburn
        {
1589 6284 naderman
                global $db, $template, $user, $phpbb_root_path, $cache, $config;
1590 5953 naderman
1591 5388 acydburn
                $new_id = request_var('new_id', 0);
1592 5388 acydburn
                $update = (isset($_POST['update'])) ? true : false;
1593 7713 kellanved
                $sql_where = '';
1594 5388 acydburn
1595 5388 acydburn
                switch ($mode)
1596 5388 acydburn
                {
1597 5388 acydburn
                        case 'style':
1598 5388 acydburn
                                $sql_from = STYLES_TABLE;
1599 10980 git-gate
                                $sql_select = 'style_id, style_name, template_id, theme_id, imageset_id';
1600 7713 kellanved
                                $sql_where = 'AND style_active = 1';
1601 5388 acydburn
                        break;
1602 5388 acydburn
1603 5388 acydburn
                        case 'template':
1604 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
1605 10980 git-gate
                                $sql_select = 'template_id, template_name, template_path, template_storedb';
1606 5388 acydburn
                        break;
1607 5388 acydburn
1608 5388 acydburn
                        case 'theme':
1609 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
1610 10980 git-gate
                                $sql_select = 'theme_id, theme_name, theme_path, theme_storedb';
1611 5388 acydburn
                        break;
1612 5388 acydburn
1613 5388 acydburn
                        case 'imageset':
1614 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
1615 10980 git-gate
                                $sql_select = 'imageset_id, imageset_name, imageset_path';
1616 5388 acydburn
                        break;
1617 5388 acydburn
                }
1618 5388 acydburn
1619 8697 Kellanved
                if ($mode === 'template' && ($conflicts = $this->check_inheritance($mode, $style_id)))
1620 8697 Kellanved
                {
1621 8697 Kellanved
                        $l_type = strtoupper($mode);
1622 8697 Kellanved
                        $msg = $user->lang[$l_type . '_DELETE_DEPENDENT'];
1623 8697 Kellanved
                        foreach ($conflicts as $id => $values)
1624 8697 Kellanved
                        {
1625 8697 Kellanved
                                $msg .= '<br />' . $values['template_name'];
1626 8697 Kellanved
                        }
1627 8783 acydburn
1628 8697 Kellanved
                        trigger_error($msg . adm_back_link($this->u_action), E_USER_WARNING);
1629 8697 Kellanved
                }
1630 8697 Kellanved
1631 5388 acydburn
                $l_prefix = strtoupper($mode);
1632 5953 naderman
1633 5388 acydburn
                $sql = "SELECT $sql_select
1634 5953 naderman
                        FROM $sql_from
1635 5388 acydburn
                        WHERE {$mode}_id = $style_id";
1636 5388 acydburn
                $result = $db->sql_query($sql);
1637 5388 acydburn
                $style_row = $db->sql_fetchrow($result);
1638 5388 acydburn
                $db->sql_freeresult($result);
1639 5388 acydburn
1640 5388 acydburn
                if (!$style_row)
1641 5388 acydburn
                {
1642 6320 acydburn
                        trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
1643 5388 acydburn
                }
1644 5953 naderman
1645 11626 git-gate
                $s_only_component = $this->display_component_options($mode, $style_row[$mode . '_id'], $style_row);
1646 11626 git-gate
1647 11626 git-gate
                if ($s_only_component)
1648 11626 git-gate
                {
1649 11626 git-gate
                        trigger_error($user->lang['ONLY_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
1650 11626 git-gate
                }
1651 11626 git-gate
1652 5388 acydburn
                if ($update)
1653 5388 acydburn
                {
1654 5388 acydburn
                        if ($mode == 'style')
1655 5388 acydburn
                        {
1656 10980 git-gate
                                $sql = "DELETE FROM $sql_from
1657 10980 git-gate
                                        WHERE {$mode}_id = $style_id";
1658 10980 git-gate
                                $db->sql_query($sql);
1659 10980 git-gate
1660 5953 naderman
                                $sql = 'UPDATE ' . USERS_TABLE . "
1661 5388 acydburn
                                        SET user_style = $new_id
1662 5388 acydburn
                                        WHERE user_style = $style_id";
1663 5388 acydburn
                                $db->sql_query($sql);
1664 5551 acydburn
1665 5953 naderman
                                $sql = 'UPDATE ' . FORUMS_TABLE . "
1666 5551 acydburn
                                        SET forum_style = $new_id
1667 5551 acydburn
                                        WHERE forum_style = $style_id";
1668 5551 acydburn
                                $db->sql_query($sql);
1669 6284 naderman
1670 6284 naderman
                                if ($style_id == $config['default_style'])
1671 6284 naderman
                                {
1672 6284 naderman
                                        set_config('default_style', $new_id);
1673 6284 naderman
                                }
1674 10980 git-gate
1675 10980 git-gate
                                // Remove the components
1676 10980 git-gate
                                $components = array('template', 'theme', 'imageset');
1677 10980 git-gate
                                foreach ($components as $component)
1678 10980 git-gate
                                {
1679 10980 git-gate
                                        $new_id = request_var('new_' . $component . '_id', 0);
1680 10980 git-gate
                                        $component_id = $style_row[$component . '_id'];
1681 10980 git-gate
                                        $this->remove_component($component, $component_id, $new_id, $style_id);
1682 10980 git-gate
                                }
1683 5388 acydburn
                        }
1684 5388 acydburn
                        else
1685 5388 acydburn
                        {
1686 10980 git-gate
                                $this->remove_component($mode, $style_id, $new_id);
1687 5388 acydburn
                        }
1688 5388 acydburn
1689 5388 acydburn
                        $cache->destroy('sql', STYLES_TABLE);
1690 5388 acydburn
1691 5388 acydburn
                        add_log('admin', 'LOG_' . $l_prefix . '_DELETE', $style_row[$mode . '_name']);
1692 5388 acydburn
                        $message = ($mode != 'style') ? $l_prefix . '_DELETED_FS' : $l_prefix . '_DELETED';
1693 5388 acydburn
                        trigger_error($user->lang[$message] . adm_back_link($this->u_action));
1694 5388 acydburn
                }
1695 5388 acydburn
1696 5388 acydburn
                $this->page_title = 'DELETE_' . $l_prefix;
1697 5388 acydburn
1698 5388 acydburn
                $template->assign_vars(array(
1699 5388 acydburn
                        'S_DELETE'                        => true,
1700 5388 acydburn
1701 5388 acydburn
                        'L_TITLE'                        => $user->lang[$this->page_title],
1702 5388 acydburn
                        'L_EXPLAIN'                        => $user->lang[$this->page_title . '_EXPLAIN'],
1703 5388 acydburn
                        'L_NAME'                        => $user->lang[$l_prefix . '_NAME'],
1704 5388 acydburn
                        'L_REPLACE'                        => $user->lang['REPLACE_' . $l_prefix],
1705 5388 acydburn
                        'L_REPLACE_EXPLAIN'        => $user->lang['REPLACE_' . $l_prefix . '_EXPLAIN'],
1706 5388 acydburn
1707 5388 acydburn
                        'U_ACTION'                => $this->u_action . "&amp;action=delete&amp;id=$style_id",
1708 5388 acydburn
                        'U_BACK'                => $this->u_action,
1709 5953 naderman
1710 5388 acydburn
                        'NAME'                        => $style_row[$mode . '_name'],
1711 5388 acydburn
                        )
1712 5388 acydburn
                );
1713 10980 git-gate
1714 10980 git-gate
                if ($mode == 'style')
1715 10980 git-gate
                {
1716 10980 git-gate
                        $template->assign_vars(array(
1717 10980 git-gate
                                'S_DELETE_STYLE'                => true,
1718 10980 git-gate
                        ));
1719 10980 git-gate
                }
1720 5388 acydburn
        }
1721 5388 acydburn
1722 5388 acydburn
        /**
1723 10980 git-gate
        * Remove template/theme/imageset entry from the database
1724 10980 git-gate
        */
1725 10980 git-gate
        function remove_component($component, $component_id, $new_id, $style_id = false)
1726 10980 git-gate
        {
1727 10980 git-gate
                global $db;
1728 10980 git-gate
1729 10980 git-gate
                if (($new_id == 0) || ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id))))
1730 10980 git-gate
                {
1731 10980 git-gate
                        // We can not delete the template, as the user wants to keep the component or an other template is inheriting from this one.
1732 10980 git-gate
                        return;
1733 10980 git-gate
                }
1734 10980 git-gate
1735 10980 git-gate
                $component_in_use = array();
1736 10980 git-gate
                if ($component != 'style')
1737 10980 git-gate
                {
1738 10980 git-gate
                        $component_in_use = $this->component_in_use($component, $component_id, $style_id);
1739 10980 git-gate
                }
1740 10980 git-gate
1741 10980 git-gate
                if (($new_id == -1) && !empty($component_in_use))
1742 10980 git-gate
                {
1743 10980 git-gate
                        // We can not delete the component, as it is still in use
1744 10980 git-gate
                        return;
1745 10980 git-gate
                }
1746 10980 git-gate
1747 10980 git-gate
                if ($component == 'imageset')
1748 10980 git-gate
                {
1749 10980 git-gate
                        $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . "
1750 10980 git-gate
                                WHERE imageset_id = $component_id";
1751 10980 git-gate
                        $db->sql_query($sql);
1752 10980 git-gate
                }
1753 10980 git-gate
1754 10980 git-gate
                switch ($component)
1755 10980 git-gate
                {
1756 10980 git-gate
                        case 'template':
1757 10980 git-gate
                                $sql_from = STYLES_TEMPLATE_TABLE;
1758 10980 git-gate
                        break;
1759 10980 git-gate
1760 10980 git-gate
                        case 'theme':
1761 10980 git-gate
                                $sql_from = STYLES_THEME_TABLE;
1762 10980 git-gate
                        break;
1763 10980 git-gate
1764 10980 git-gate
                        case 'imageset':
1765 10980 git-gate
                                $sql_from = STYLES_IMAGESET_TABLE;;
1766 10980 git-gate
                        break;
1767 10980 git-gate
                }
1768 10980 git-gate
1769 10980 git-gate
                $sql = "DELETE FROM $sql_from
1770 10980 git-gate
                        WHERE {$component}_id = $component_id";
1771 10980 git-gate
                $db->sql_query($sql);
1772 10980 git-gate
1773 10980 git-gate
                $sql = 'UPDATE ' . STYLES_TABLE . "
1774 10980 git-gate
                        SET {$component}_id = $new_id
1775 10980 git-gate
                        WHERE {$component}_id = $component_id";
1776 10980 git-gate
                $db->sql_query($sql);
1777 10980 git-gate
        }
1778 10980 git-gate
1779 10980 git-gate
        /**
1780 10980 git-gate
        * Display the options which can be used to replace a style/template/theme/imageset
1781 11626 git-gate
        *
1782 11626 git-gate
        * @return boolean Returns true if the component is the only component and can not be deleted.
1783 10980 git-gate
        */
1784 10980 git-gate
        function display_component_options($component, $component_id, $style_row = false, $style_id = false)
1785 10980 git-gate
        {
1786 10980 git-gate
                global $db, $template, $user;
1787 10980 git-gate
1788 11626 git-gate
                $is_only_component = true;
1789 10980 git-gate
                $component_in_use = array();
1790 10980 git-gate
                if ($component != 'style')
1791 10980 git-gate
                {
1792 10980 git-gate
                        $component_in_use = $this->component_in_use($component, $component_id, $style_id);
1793 10980 git-gate
                }
1794 10980 git-gate
1795 10980 git-gate
                $sql_where = '';
1796 10980 git-gate
                switch ($component)
1797 10980 git-gate
                {
1798 10980 git-gate
                        case 'style':
1799 10980 git-gate
                                $sql_from = STYLES_TABLE;
1800 10980 git-gate
                                $sql_where = 'WHERE style_active = 1';
1801 10980 git-gate
                        break;
1802 10980 git-gate
1803 10980 git-gate
                        case 'template':
1804 10980 git-gate
                                $sql_from = STYLES_TEMPLATE_TABLE;
1805 10980 git-gate
                                $sql_where = 'WHERE template_inherits_id <> ' . $component_id;
1806 10980 git-gate
                        break;
1807 10980 git-gate
1808 10980 git-gate
                        case 'theme':
1809 10980 git-gate
                                $sql_from = STYLES_THEME_TABLE;
1810 10980 git-gate
                        break;
1811 10980 git-gate
1812 10980 git-gate
                        case 'imageset':
1813 10980 git-gate
                                $sql_from = STYLES_IMAGESET_TABLE;
1814 10980 git-gate
                        break;
1815 10980 git-gate
                }
1816 10980 git-gate
1817 10980 git-gate
                $s_options = '';
1818 10980 git-gate
                if (($component != 'style') && empty($component_in_use))
1819 10980 git-gate
                {
1820 11626 git-gate
                        // If it is not in use, there must be another component
1821 11626 git-gate
                        $is_only_component = false;
1822 11626 git-gate
1823 10980 git-gate
                        $sql = "SELECT {$component}_id, {$component}_name
1824 10980 git-gate
                                FROM $sql_from
1825 10980 git-gate
                                WHERE {$component}_id = {$component_id}";
1826 10980 git-gate
                        $result = $db->sql_query($sql);
1827 10980 git-gate
                        $row = $db->sql_fetchrow($result);
1828 10980 git-gate
                        $db->sql_freeresult($result);
1829 10980 git-gate
1830 10980 git-gate
                        $s_options .= '<option value="-1" selected="selected">' . $user->lang['DELETE_' . strtoupper($component)] . '</option>';
1831 10980 git-gate
                        $s_options .= '<option value="0">' . sprintf($user->lang['KEEP_' . strtoupper($component)], $row[$component . '_name']) . '</option>';
1832 10980 git-gate
                }
1833 10980 git-gate
                else
1834 10980 git-gate
                {
1835 10980 git-gate
                        $sql = "SELECT {$component}_id, {$component}_name
1836 10980 git-gate
                                FROM $sql_from
1837 10980 git-gate
                                $sql_where
1838 10980 git-gate
                                ORDER BY {$component}_name ASC";
1839 10980 git-gate
                        $result = $db->sql_query($sql);
1840 10980 git-gate
1841 10980 git-gate
                        $s_keep_option = $s_options = '';
1842 10980 git-gate
                        while ($row = $db->sql_fetchrow($result))
1843 10980 git-gate
                        {
1844 10980 git-gate
                                if ($row[$component . '_id'] != $component_id)
1845 10980 git-gate
                                {
1846 11626 git-gate
                                        $is_only_component = false;
1847 10980 git-gate
                                        $s_options .= '<option value="' . $row[$component . '_id'] . '">' . sprintf($user->lang['REPLACE_WITH_OPTION'], $row[$component . '_name']) . '</option>';
1848 10980 git-gate
                                }
1849 10980 git-gate
                                else if ($component != 'style')
1850 10980 git-gate
                                {
1851 10980 git-gate
                                        $s_keep_option = '<option value="0" selected="selected">' . sprintf($user->lang['KEEP_' . strtoupper($component)], $row[$component . '_name']) . '</option>';
1852 10980 git-gate
                                }
1853 10980 git-gate
                        }
1854 10980 git-gate
                        $db->sql_freeresult($result);
1855 10980 git-gate
                        $s_options = $s_keep_option . $s_options;
1856 10980 git-gate
                }
1857 10980 git-gate
1858 10980 git-gate
                if (!$style_row)
1859 10980 git-gate
                {
1860 10980 git-gate
                        $template->assign_var('S_REPLACE_' . strtoupper($component) . '_OPTIONS', $s_options);
1861 10980 git-gate
                }
1862 10980 git-gate
                else
1863 10980 git-gate
                {
1864 10980 git-gate
                        $template->assign_var('S_REPLACE_OPTIONS', $s_options);
1865 10980 git-gate
                        if ($component == 'style')
1866 10980 git-gate
                        {
1867 10980 git-gate
                                $components = array('template', 'theme', 'imageset');
1868 10980 git-gate
                                foreach ($components as $component)
1869 10980 git-gate
                                {
1870 10980 git-gate
                                        $this->display_component_options($component, $style_row[$component . '_id'], false, $component_id, true);
1871 10980 git-gate
                                }
1872 10980 git-gate
                        }
1873 10980 git-gate
                }
1874 11626 git-gate
1875 11626 git-gate
                return $is_only_component;
1876 10980 git-gate
        }
1877 10980 git-gate
1878 10980 git-gate
        /**
1879 10980 git-gate
        * Check whether the component is still used by another style or component
1880 10980 git-gate
        */
1881 10980 git-gate
        function component_in_use($component, $component_id, $style_id = false)
1882 10980 git-gate
        {
1883 10980 git-gate
                global $db;
1884 10980 git-gate
1885 10980 git-gate
                $component_in_use = array();
1886 10980 git-gate
1887 10980 git-gate
                if ($style_id)
1888 10980 git-gate
                {
1889 10980 git-gate
                        $sql = 'SELECT style_id, style_name
1890 10980 git-gate
                                FROM ' . STYLES_TABLE . "
1891 10980 git-gate
                                WHERE {$component}_id = {$component_id}
1892 10980 git-gate
                                        AND style_id <> {$style_id}
1893 10980 git-gate
                                ORDER BY style_name ASC";
1894 10980 git-gate
                }
1895 10980 git-gate
                else
1896 10980 git-gate
                {
1897 10980 git-gate
                        $sql = 'SELECT style_id, style_name
1898 10980 git-gate
                                FROM ' . STYLES_TABLE . "
1899 10980 git-gate
                                WHERE {$component}_id = {$component_id}
1900 10980 git-gate
                                ORDER BY style_name ASC";
1901 10980 git-gate
                }
1902 10980 git-gate
                $result = $db->sql_query($sql);
1903 10980 git-gate
                while ($row = $db->sql_fetchrow($result))
1904 10980 git-gate
                {
1905 10980 git-gate
                        $component_in_use[] = $row['style_name'];
1906 10980 git-gate
                }
1907 10980 git-gate
                $db->sql_freeresult($result);
1908 10980 git-gate
1909 10980 git-gate
                if ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id)))
1910 10980 git-gate
                {
1911 10980 git-gate
                        foreach ($conflicts as $temp_id => $conflict_data)
1912 10980 git-gate
                        {
1913 10980 git-gate
                                $component_in_use[] = $conflict_data['template_name'];
1914 10980 git-gate
                        }
1915 10980 git-gate
                }
1916 10980 git-gate
1917 10980 git-gate
                return $component_in_use;
1918 10980 git-gate
        }
1919 10980 git-gate
1920 10980 git-gate
        /**
1921 5388 acydburn
        * Export style or style elements
1922 5388 acydburn
        */
1923 5388 acydburn
        function export($mode, $style_id)
1924 5388 acydburn
        {
1925 5388 acydburn
                global $db, $template, $user, $phpbb_root_path, $cache, $phpEx, $config;
1926 5388 acydburn
1927 5388 acydburn
                $update = (isset($_POST['update'])) ? true : false;
1928 5388 acydburn
1929 5388 acydburn
                $inc_template = request_var('inc_template', 0);
1930 5388 acydburn
                $inc_theme = request_var('inc_theme', 0);
1931 5388 acydburn
                $inc_imageset = request_var('inc_imageset', 0);
1932 5388 acydburn
                $store = request_var('store', 0);
1933 5388 acydburn
                $format = request_var('format', '');
1934 5388 acydburn
1935 5388 acydburn
                $error = array();
1936 5388 acydburn
                $methods = array('tar');
1937 5388 acydburn
1938 5388 acydburn
                $available_methods = array('tar.gz' => 'zlib', 'tar.bz2' => 'bz2', 'zip' => 'zlib');
1939 5388 acydburn
                foreach ($available_methods as $type => $module)
1940 5388 acydburn
                {
1941 5388 acydburn
                        if (!@extension_loaded($module))
1942 5388 acydburn
                        {
1943 5388 acydburn
                                continue;
1944 5388 acydburn
                        }
1945 5388 acydburn
1946 5388 acydburn
                        $methods[] = $type;
1947 5388 acydburn
                }
1948 5388 acydburn
1949 5388 acydburn
                if (!in_array($format, $methods))
1950 5388 acydburn
                {
1951 5388 acydburn
                        $format = 'tar';
1952 5388 acydburn
                }
1953 5388 acydburn
1954 5388 acydburn
                switch ($mode)
1955 5388 acydburn
                {
1956 5388 acydburn
                        case 'style':
1957 5388 acydburn
                                if ($update && ($inc_template + $inc_theme + $inc_imageset) < 1)
1958 5388 acydburn
                                {
1959 5388 acydburn
                                        $error[] = $user->lang['STYLE_ERR_MORE_ELEMENTS'];
1960 5388 acydburn
                                }
1961 5388 acydburn
1962 5388 acydburn
                                $name = 'style_name';
1963 5388 acydburn
1964 5388 acydburn
                                $sql_select = 's.style_id, s.style_name, s.style_copyright';
1965 5388 acydburn
                                $sql_select .= ($inc_template) ? ', t.*' : ', t.template_name';
1966 5388 acydburn
                                $sql_select .= ($inc_theme) ? ', c.*' : ', c.theme_name';
1967 5388 acydburn
                                $sql_select .= ($inc_imageset) ? ', i.*' : ', i.imageset_name';
1968 6021 acydburn
                                $sql_from = STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . ' c, ' . STYLES_IMAGESET_TABLE . ' i';
1969 5388 acydburn
                                $sql_where = "s.style_id = $style_id AND t.template_id = s.template_id AND c.theme_id = s.theme_id AND i.imageset_id = s.imageset_id";
1970 5388 acydburn
1971 5388 acydburn
                                $l_prefix = 'STYLE';
1972 5388 acydburn
                        break;
1973 5388 acydburn
1974 5388 acydburn
                        case 'template':
1975 5388 acydburn
                                $name = 'template_name';
1976 5388 acydburn
1977 5388 acydburn
                                $sql_select = '*';
1978 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
1979 5388 acydburn
                                $sql_where = "template_id = $style_id";
1980 5388 acydburn
1981 5388 acydburn
                                $l_prefix = 'TEMPLATE';
1982 5388 acydburn
                        break;
1983 5388 acydburn
1984 5388 acydburn
                        case 'theme':
1985 5388 acydburn
                                $name = 'theme_name';
1986 5388 acydburn
1987 5388 acydburn
                                $sql_select = '*';
1988 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
1989 5388 acydburn
                                $sql_where = "theme_id = $style_id";
1990 5388 acydburn
1991 5388 acydburn
                                $l_prefix = 'THEME';
1992 5388 acydburn
                        break;
1993 5388 acydburn
1994 5388 acydburn
                        case 'imageset':
1995 5388 acydburn
                                $name = 'imageset_name';
1996 5388 acydburn
1997 5388 acydburn
                                $sql_select = '*';
1998 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
1999 5388 acydburn
                                $sql_where = "imageset_id = $style_id";
2000 5388 acydburn
2001 5388 acydburn
                                $l_prefix = 'IMAGESET';
2002 5388 acydburn
                        break;
2003 5388 acydburn
                }
2004 5953 naderman
2005 5388 acydburn
                if ($update && !sizeof($error))
2006 5388 acydburn
                {
2007 5953 naderman
                        $sql = "SELECT $sql_select
2008 5953 naderman
                                FROM $sql_from
2009 5388 acydburn
                                WHERE $sql_where";
2010 5388 acydburn
                        $result = $db->sql_query($sql);
2011 5388 acydburn
                        $style_row = $db->sql_fetchrow($result);
2012 5388 acydburn
                        $db->sql_freeresult($result);
2013 5388 acydburn
2014 5388 acydburn
                        if (!$style_row)
2015 5388 acydburn
                        {
2016 6320 acydburn
                                trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
2017 5388 acydburn
                        }
2018 5388 acydburn
2019 8943 acydburn
                        $var_ary = array('style_id', 'style_name', 'style_copyright', 'template_id', 'template_name', 'template_path', 'template_copyright', 'template_storedb', 'template_inherits_id', 'bbcode_bitfield', 'theme_id', 'theme_name', 'theme_path', 'theme_copyright', 'theme_storedb', 'theme_mtime', 'theme_data', 'imageset_id', 'imageset_name', 'imageset_path', 'imageset_copyright');
2020 5388 acydburn
2021 5388 acydburn
                        foreach ($var_ary as $var)
2022 5388 acydburn
                        {
2023 5388 acydburn
                                if (!isset($style_row[$var]))
2024 5388 acydburn
                                {
2025 5388 acydburn
                                        $style_row[$var] = '';
2026 5388 acydburn
                                }
2027 5388 acydburn
                        }
2028 5953 naderman
2029 5388 acydburn
                        $files = $data = array();
2030 5388 acydburn
2031 5388 acydburn
                        if ($mode == 'style')
2032 5388 acydburn
                        {
2033 5388 acydburn
                                $style_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['style_name'], $style_row['style_copyright'], $config['version']), $this->style_cfg);
2034 5953 naderman
2035 7208 naderman
                                $style_cfg .= (!$inc_template) ? "\nrequired_template = {$style_row['template_name']}" : '';
2036 7208 naderman
                                $style_cfg .= (!$inc_theme) ? "\nrequired_theme = {$style_row['theme_name']}" : '';
2037 7208 naderman
                                $style_cfg .= (!$inc_imageset) ? "\nrequired_imageset = {$style_row['imageset_name']}" : '';
2038 5388 acydburn
2039 5388 acydburn
                                $data[] = array(
2040 5953 naderman
                                        'src'                => $style_cfg,
2041 5388 acydburn
                                        'prefix'        => 'style.cfg'
2042 5388 acydburn
                                );
2043 5388 acydburn
2044 5388 acydburn
                                unset($style_cfg);
2045 5388 acydburn
                        }
2046 5388 acydburn
2047 5388 acydburn
                        // Export template core code
2048 5388 acydburn
                        if ($mode == 'template' || $inc_template)
2049 5388 acydburn
                        {
2050 11671 git-gate
                                $use_template_name = $style_row['template_name'];
2051 5388 acydburn
2052 8943 acydburn
                                // Add the inherit from variable, depending on it's use...
2053 8943 acydburn
                                if ($style_row['template_inherits_id'])
2054 8943 acydburn
                                {
2055 8943 acydburn
                                        // Get the template name
2056 8943 acydburn
                                        $sql = 'SELECT template_name
2057 8943 acydburn
                                                FROM ' . STYLES_TEMPLATE_TABLE . '
2058 8943 acydburn
                                                WHERE template_id = ' . (int) $style_row['template_inherits_id'];
2059 8943 acydburn
                                        $result = $db->sql_query($sql);
2060 8943 acydburn
                                        $use_template_name = (string) $db->sql_fetchfield('template_name');
2061 8943 acydburn
                                        $db->sql_freeresult($result);
2062 8943 acydburn
                                }
2063 8943 acydburn
2064 11671 git-gate
                                $template_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}', '{INHERIT_FROM}'), array($mode, $style_row['template_name'], $style_row['template_copyright'], $config['version'], $use_template_name), $this->template_cfg);
2065 11671 git-gate
2066 8943 acydburn
                                $template_cfg .= "\n\nbbcode_bitfield = {$style_row['bbcode_bitfield']}";
2067 8943 acydburn
2068 5388 acydburn
                                $data[] = array(
2069 5953 naderman
                                        'src'                => $template_cfg,
2070 5388 acydburn
                                        'prefix'        => 'template/template.cfg'
2071 5388 acydburn
                                );
2072 5388 acydburn
2073 5388 acydburn
                                // This is potentially nasty memory-wise ...
2074 5388 acydburn
                                if (!$style_row['template_storedb'])
2075 5388 acydburn
                                {
2076 5388 acydburn
                                        $files[] = array(
2077 5953 naderman
                                                'src'                => "styles/{$style_row['template_path']}/template/",
2078 5953 naderman
                                                'prefix-'        => "styles/{$style_row['template_path']}/",
2079 5953 naderman
                                                'prefix+'        => false,
2080 5388 acydburn
                                                'exclude'        => 'template.cfg'
2081 5388 acydburn
                                        );
2082 5388 acydburn
                                }
2083 5388 acydburn
                                else
2084 5388 acydburn
                                {
2085 5953 naderman
                                        $sql = 'SELECT template_filename, template_data
2086 6021 acydburn
                                                FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
2087 5388 acydburn
                                                WHERE template_id = {$style_row['template_id']}";
2088 5388 acydburn
                                        $result = $db->sql_query($sql);
2089 5388 acydburn
2090 5388 acydburn
                                        while ($row = $db->sql_fetchrow($result))
2091 5388 acydburn
                                        {
2092 5388 acydburn
                                                $data[] = array(
2093 5953 naderman
                                                        'src' => $row['template_data'],
2094 5388 acydburn
                                                        'prefix' => 'template/' . $row['template_filename']
2095 5388 acydburn
                                                );
2096 5388 acydburn
                                        }
2097 5388 acydburn
                                        $db->sql_freeresult($result);
2098 5388 acydburn
                                }
2099 5388 acydburn
                                unset($template_cfg);
2100 5388 acydburn
                        }
2101 5388 acydburn
2102 5388 acydburn
                        // Export theme core code
2103 5388 acydburn
                        if ($mode == 'theme' || $inc_theme)
2104 5388 acydburn
                        {
2105 5388 acydburn
                                $theme_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['theme_name'], $style_row['theme_copyright'], $config['version']), $this->theme_cfg);
2106 5953 naderman
2107 5388 acydburn
                                // Read old cfg file
2108 5388 acydburn
                                $items = $cache->obtain_cfg_items($style_row);
2109 5388 acydburn
                                $items = $items['theme'];
2110 5388 acydburn
2111 5388 acydburn
                                if (!isset($items['parse_css_file']))
2112 5388 acydburn
                                {
2113 5388 acydburn
                                        $items['parse_css_file'] = 'off';
2114 5388 acydburn
                                }
2115 5388 acydburn
2116 6862 naderman
                                $theme_cfg = str_replace(array('{PARSE_CSS_FILE}'), array($items['parse_css_file']), $theme_cfg);
2117 5388 acydburn
2118 5388 acydburn
                                $files[] = array(
2119 5953 naderman
                                        'src'                => "styles/{$style_row['theme_path']}/theme/",
2120 5953 naderman
                                        'prefix-'        => "styles/{$style_row['theme_path']}/",
2121 5953 naderman
                                        'prefix+'        => false,
2122 5953 naderman
                                        'exclude'        => ($style_row['theme_storedb']) ? 'stylesheet.css,theme.cfg' : 'theme.cfg'
2123 5388 acydburn
                                );
2124 5388 acydburn
2125 5388 acydburn
                                $data[] = array(
2126 5953 naderman
                                        'src'                => $theme_cfg,
2127 5388 acydburn
                                        'prefix'        => 'theme/theme.cfg'
2128 5388 acydburn
                                );
2129 5388 acydburn
2130 5388 acydburn
                                if ($style_row['theme_storedb'])
2131 5388 acydburn
                                {
2132 5388 acydburn
                                        $data[] = array(
2133 5953 naderman
                                                'src'                => $style_row['theme_data'],
2134 5388 acydburn
                                                'prefix'        => 'theme/stylesheet.css'
2135 5388 acydburn
                                        );
2136 5388 acydburn
                                }
2137 5388 acydburn
2138 5388 acydburn
                                unset($items, $theme_cfg);
2139 5388 acydburn
                        }
2140 5388 acydburn
2141 5388 acydburn
                        // Export imageset core code
2142 5388 acydburn
                        if ($mode == 'imageset' || $inc_imageset)
2143 5388 acydburn
                        {
2144 5388 acydburn
                                $imageset_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['imageset_name'], $style_row['imageset_copyright'], $config['version']), $this->imageset_cfg);
2145 5388 acydburn
2146 7304 davidmj
                                $imageset_main = array();
2147 7304 davidmj
2148 7304 davidmj
                                $sql = 'SELECT image_filename, image_name, image_height, image_width
2149 7304 davidmj
                                        FROM ' . STYLES_IMAGESET_DATA_TABLE . "
2150 7304 davidmj
                                        WHERE imageset_id = $style_id
2151 7304 davidmj
                                                AND image_lang = ''";
2152 7304 davidmj
                                $result = $db->sql_query($sql);
2153 7304 davidmj
                                while ($row = $db->sql_fetchrow($result))
2154 7304 davidmj
                                {
2155 7304 davidmj
                                        $imageset_main[$row['image_name']] = $row['image_filename'] . ($row['image_height'] ? '*' . $row['image_height']: '') . ($row['image_width'] ? '*' . $row['image_width']: '');
2156 7304 davidmj
                                }
2157 7304 davidmj
                                $db->sql_freeresult($result);
2158 7304 davidmj
2159 6237 acydburn
                                foreach ($this->imageset_keys as $topic => $key_array)
2160 5388 acydburn
                                {
2161 6237 acydburn
                                        foreach ($key_array as $key)
2162 6237 acydburn
                                        {
2163 7304 davidmj
                                                if (isset($imageset_main[$key]))
2164 7304 davidmj
                                                {
2165 7304 davidmj
                                                        $imageset_cfg .= "\nimg_" . $key . ' = ' . str_replace("styles/{$style_row['imageset_path']}/imageset/", '{PATH}', $imageset_main[$key]);
2166 7304 davidmj
                                                }
2167 6237 acydburn
                                        }
2168 5388 acydburn
                                }
2169 5388 acydburn
2170 5388 acydburn
                                $files[] = array(
2171 5953 naderman
                                        'src'                => "styles/{$style_row['imageset_path']}/imageset/",
2172 5953 naderman
                                        'prefix-'        => "styles/{$style_row['imageset_path']}/",
2173 5953 naderman
                                        'prefix+'        => false,
2174 5388 acydburn
                                        'exclude'        => 'imageset.cfg'
2175 5388 acydburn
                                );
2176 5388 acydburn
2177 5388 acydburn
                                $data[] = array(
2178 5953 naderman
                                        'src'                => trim($imageset_cfg),
2179 5388 acydburn
                                        'prefix'        => 'imageset/imageset.cfg'
2180 5388 acydburn
                                );
2181 5953 naderman
2182 7964 davidmj
                                end($data);
2183 7964 davidmj
2184 7964 davidmj
                                $imageset_root = "{$phpbb_root_path}styles/{$style_row['imageset_path']}/imageset/";
2185 7964 davidmj
2186 8211 acydburn
                                if ($dh = @opendir($imageset_root))
2187 7964 davidmj
                                {
2188 8211 acydburn
                                        while (($fname = readdir($dh)) !== false)
2189 7964 davidmj
                                        {
2190 8211 acydburn
                                                if ($fname[0] != '.' && $fname != 'CVS' && is_dir("$imageset_root$fname"))
2191 8211 acydburn
                                                {
2192 8211 acydburn
                                                        $files[key($files)]['exclude'] .= ',' . $fname . '/imageset.cfg';
2193 8211 acydburn
                                                }
2194 7964 davidmj
                                        }
2195 8211 acydburn
                                        closedir($dh);
2196 7964 davidmj
                                }
2197 7964 davidmj
2198 7964 davidmj
                                $imageset_lang = array();
2199 7964 davidmj
2200 7964 davidmj
                                $sql = 'SELECT image_filename, image_name, image_height, image_width, image_lang
2201 7964 davidmj
                                        FROM ' . STYLES_IMAGESET_DATA_TABLE . "
2202 7964 davidmj
                                        WHERE imageset_id = $style_id
2203 7964 davidmj
                                                AND image_lang <> ''";
2204 7964 davidmj
                                $result = $db->sql_query($sql);
2205 7964 davidmj
                                while ($row = $db->sql_fetchrow($result))
2206 7964 davidmj
                                {
2207 7964 davidmj
                                        $imageset_lang[$row['image_lang']][$row['image_name']] = $row['image_filename'] . ($row['image_height'] ? '*' . $row['image_height']: '') . ($row['image_width'] ? '*' . $row['image_width']: '');
2208 7964 davidmj
                                }
2209 7964 davidmj
                                $db->sql_freeresult($result);
2210 7964 davidmj
2211 7964 davidmj
                                foreach ($imageset_lang as $lang => $imageset_localized)
2212 7964 davidmj
                                {
2213 7964 davidmj
                                        $imageset_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['imageset_name'], $style_row['imageset_copyright'], $config['version']), $this->imageset_cfg);
2214 7964 davidmj
2215 7964 davidmj
                                        foreach ($this->imageset_keys as $topic => $key_array)
2216 7964 davidmj
                                        {
2217 7964 davidmj
                                                foreach ($key_array as $key)
2218 7964 davidmj
                                                {
2219 7964 davidmj
                                                        if (isset($imageset_localized[$key]))
2220 7964 davidmj
                                                        {
2221 7964 davidmj
                                                                $imageset_cfg .= "\nimg_" . $key . ' = ' . str_replace("styles/{$style_row['imageset_path']}/imageset/", '{PATH}', $imageset_localized[$key]);
2222 7964 davidmj
                                                        }
2223 7964 davidmj
                                                }
2224 7964 davidmj
                                        }
2225 7964 davidmj
2226 7964 davidmj
                                        $data[] = array(
2227 7964 davidmj
                                                'src'                => trim($imageset_cfg),
2228 7964 davidmj
                                                'prefix'        => 'imageset/' . $lang . '/imageset.cfg'
2229 7964 davidmj
                                        );
2230 7964 davidmj
                                }
2231 7964 davidmj
2232 5388 acydburn
                                unset($imageset_cfg);
2233 5388 acydburn
                        }
2234 5388 acydburn
2235 5388 acydburn
                        switch ($format)
2236 5388 acydburn
                        {
2237 5388 acydburn
                                case 'tar':
2238 5422 davidmj
                                        $ext = '.tar';
2239 5388 acydburn
                                break;
2240 5388 acydburn
2241 5388 acydburn
                                case 'zip':
2242 5422 davidmj
                                        $ext = '.zip';
2243 5388 acydburn
                                break;
2244 5388 acydburn
2245 5388 acydburn
                                case 'tar.gz':
2246 5422 davidmj
                                        $ext = '.tar.gz';
2247 5388 acydburn
                                break;
2248 5388 acydburn
2249 5388 acydburn
                                case 'tar.bz2':
2250 5422 davidmj
                                        $ext = '.tar.bz2';
2251 5388 acydburn
                                break;
2252 5388 acydburn
2253 5388 acydburn
                                default:
2254 5388 acydburn
                                        $error[] = $user->lang[$l_prefix . '_ERR_ARCHIVE'];
2255 5388 acydburn
                        }
2256 5388 acydburn
2257 5388 acydburn
                        if (!sizeof($error))
2258 5388 acydburn
                        {
2259 5388 acydburn
                                include($phpbb_root_path . 'includes/functions_compress.' . $phpEx);
2260 5388 acydburn
2261 6216 naderman
                                if ($mode == 'style')
2262 6216 naderman
                                {
2263 6216 naderman
                                        $path = preg_replace('#[^\w-]+#', '_', $style_row['style_name']);
2264 6216 naderman
                                }
2265 6216 naderman
                                else
2266 6216 naderman
                                {
2267 6216 naderman
                                        $path = $style_row[$mode . '_path'];
2268 6216 naderman
                                }
2269 5388 acydburn
2270 5388 acydburn
                                if ($format == 'zip')
2271 5388 acydburn
                                {
2272 5422 davidmj
                                        $compress = new compress_zip('w', $phpbb_root_path . "store/$path$ext");
2273 5388 acydburn
                                }
2274 5388 acydburn
                                else
2275 5388 acydburn
                                {
2276 5422 davidmj
                                        $compress = new compress_tar('w', $phpbb_root_path . "store/$path$ext", $ext);
2277 5388 acydburn
                                }
2278 5953 naderman
2279 5388 acydburn
                                if (sizeof($files))
2280 5388 acydburn
                                {
2281 5388 acydburn
                                        foreach ($files as $file_ary)
2282 5388 acydburn
                                        {
2283 5388 acydburn
                                                $compress->add_file($file_ary['src'], $file_ary['prefix-'], $file_ary['prefix+'], $file_ary['exclude']);
2284 5388 acydburn
                                        }
2285 5388 acydburn
                                }
2286 5388 acydburn
2287 5388 acydburn
                                if (sizeof($data))
2288 5388 acydburn
                                {
2289 5388 acydburn
                                        foreach ($data as $data_ary)
2290 5388 acydburn
                                        {
2291 5388 acydburn
                                                $compress->add_data($data_ary['src'], $data_ary['prefix']);
2292 5388 acydburn
                                        }
2293 5388 acydburn
                                }
2294 5388 acydburn
2295 5388 acydburn
                                $compress->close();
2296 5388 acydburn
2297 5388 acydburn
                                add_log('admin', 'LOG_' . $l_prefix . '_EXPORT', $style_row[$mode . '_name']);
2298 5388 acydburn
2299 5388 acydburn
                                if (!$store)
2300 5388 acydburn
                                {
2301 5388 acydburn
                                        $compress->download($path);
2302 5422 davidmj
                                        @unlink("{$phpbb_root_path}store/$path$ext");
2303 5388 acydburn
                                        exit;
2304 5388 acydburn
                                }
2305 5388 acydburn
2306 5422 davidmj
                                trigger_error(sprintf($user->lang[$l_prefix . '_EXPORTED'], "store/$path$ext") . adm_back_link($this->u_action));
2307 5388 acydburn
                        }
2308 5388 acydburn
                }
2309 5388 acydburn
2310 5953 naderman
                $sql = "SELECT {$mode}_id, {$mode}_name
2311 5388 acydburn
                        FROM " . (($mode == 'style') ? STYLES_TABLE : $sql_from) . "
2312 5388 acydburn
                        WHERE {$mode}_id = $style_id";
2313 5388 acydburn
                $result = $db->sql_query($sql);
2314 5388 acydburn
                $style_row = $db->sql_fetchrow($result);
2315 5388 acydburn
                $db->sql_freeresult($result);
2316 5953 naderman
2317 5388 acydburn
                if (!$style_row)
2318 5388 acydburn
                {
2319 6320 acydburn
                        trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
2320 5388 acydburn
                }
2321 5388 acydburn
2322 5388 acydburn
                $this->page_title = $l_prefix . '_EXPORT';
2323 5388 acydburn
2324 5388 acydburn
                $format_buttons = '';
2325 5388 acydburn
                foreach ($methods as $method)
2326 5388 acydburn
                {
2327 7469 acydburn
                        $format_buttons .= '<label><input type="radio"' . ((!$format_buttons) ? ' id="format"' : '') . ' class="radio" value="' . $method . '" name="format"' . (($method == $format) ? ' checked="checked"' : '') . ' /> ' . $method . '</label>';
2328 5388 acydburn
                }
2329 5388 acydburn
2330 5388 acydburn
                $template->assign_vars(array(
2331 5388 acydburn
                        'S_EXPORT'                => true,
2332 5388 acydburn
                        'S_ERROR_MSG'        => (sizeof($error)) ? true : false,
2333 5388 acydburn
                        'S_STYLE'                => ($mode == 'style') ? true : false,
2334 5388 acydburn
2335 5388 acydburn
                        'L_TITLE'                => $user->lang[$this->page_title],
2336 5388 acydburn
                        'L_EXPLAIN'                => $user->lang[$this->page_title . '_EXPLAIN'],
2337 5388 acydburn
                        'L_NAME'                => $user->lang[$l_prefix . '_NAME'],
2338 5388 acydburn
2339 5388 acydburn
                        'U_ACTION'                => $this->u_action . '&amp;action=export&amp;id=' . $style_id,
2340 5388 acydburn
                        'U_BACK'                => $this->u_action,
2341 5388 acydburn
2342 5388 acydburn
                        'ERROR_MSG'                        => (sizeof($error)) ? implode('<br />', $error) : '',
2343 5388 acydburn
                        'NAME'                                => $style_row[$mode . '_name'],
2344 5388 acydburn
                        'FORMAT_BUTTONS'        => $format_buttons)
2345 5388 acydburn
                );
2346 5388 acydburn
        }
2347 5388 acydburn
2348 5388 acydburn
        /**
2349 5388 acydburn
        * Display details
2350 5388 acydburn
        */
2351 5388 acydburn
        function details($mode, $style_id)
2352 5388 acydburn
        {
2353 7630 kellanved
                global $template, $db, $config, $user, $safe_mode, $cache, $phpbb_root_path;
2354 5388 acydburn
2355 5388 acydburn
                $update = (isset($_POST['update'])) ? true : false;
2356 5388 acydburn
                $l_type = strtoupper($mode);
2357 5388 acydburn
2358 5388 acydburn
                $error = array();
2359 6021 acydburn
                $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
2360 5388 acydburn
2361 5388 acydburn
                switch ($mode)
2362 5388 acydburn
                {
2363 5388 acydburn
                        case 'style':
2364 5388 acydburn
                                $sql_from = STYLES_TABLE;
2365 5388 acydburn
                        break;
2366 5953 naderman
2367 5388 acydburn
                        case 'template':
2368 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
2369 5388 acydburn
                        break;
2370 5388 acydburn
2371 5388 acydburn
                        case 'theme':
2372 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
2373 5388 acydburn
                        break;
2374 5388 acydburn
2375 5388 acydburn
                        case 'imageset':
2376 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
2377 5388 acydburn
                        break;
2378 5388 acydburn
                }
2379 5388 acydburn
2380 5953 naderman
                $sql = "SELECT *
2381 5388 acydburn
                        FROM $sql_from
2382 5388 acydburn
                        WHERE {$mode}_id = $style_id";
2383 5388 acydburn
                $result = $db->sql_query($sql);
2384 5388 acydburn
                $style_row = $db->sql_fetchrow($result);
2385 5388 acydburn
                $db->sql_freeresult($result);
2386 5388 acydburn
2387 5388 acydburn
                if (!$style_row)
2388 5388 acydburn
                {
2389 6320 acydburn
                        trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING);
2390 5388 acydburn
                }
2391 5388 acydburn
2392 5388 acydburn
                $style_row['style_default'] = ($mode == 'style' && $config['default_style'] == $style_id) ? 1 : 0;
2393 5388 acydburn
2394 5388 acydburn
                if ($update)
2395 5388 acydburn
                {
2396 7920 acydburn
                        $name = utf8_normalize_nfc(request_var('name', '', true));
2397 7920 acydburn
                        $copyright = utf8_normalize_nfc(request_var('copyright', '', true));
2398 5388 acydburn
2399 5388 acydburn
                        $template_id = request_var('template_id', 0);
2400 5388 acydburn
                        $theme_id = request_var('theme_id', 0);
2401 5388 acydburn
                        $imageset_id = request_var('imageset_id', 0);
2402 5388 acydburn
2403 5388 acydburn
                        $style_active = request_var('style_active', 0);
2404 5388 acydburn
                        $style_default = request_var('style_default', 0);
2405 5388 acydburn
                        $store_db = request_var('store_db', 0);
2406 5388 acydburn
2407 9152 acydburn
                        // If the admin selected the style to be the default style, but forgot to activate it... we will do it for him
2408 9152 acydburn
                        if ($style_default)
2409 9152 acydburn
                        {
2410 9152 acydburn
                                $style_active = 1;
2411 9152 acydburn
                        }
2412 9152 acydburn
2413 9063 Kellanved
                        $sql = "SELECT {$mode}_id, {$mode}_name
2414 8700 Kellanved
                                FROM $sql_from
2415 8783 acydburn
                                WHERE {$mode}_id <> $style_id
2416 9063 Kellanved
                                AND LOWER({$mode}_name) = '" . $db->sql_escape(strtolower($name)) . "'";
2417 8700 Kellanved
                        $result = $db->sql_query($sql);
2418 8700 Kellanved
                        $conflict = $db->sql_fetchrow($result);
2419 8700 Kellanved
                        $db->sql_freeresult($result);
2420 8783 acydburn
2421 5388 acydburn
                        if ($mode == 'style' && (!$template_id || !$theme_id || !$imageset_id))
2422 5388 acydburn
                        {
2423 5388 acydburn
                                $error[] = $user->lang['STYLE_ERR_NO_IDS'];
2424 5388 acydburn
                        }
2425 5388 acydburn
2426 5388 acydburn
                        if ($mode == 'style' && $style_row['style_active'] && !$style_active && $config['default_style'] == $style_id)
2427 5388 acydburn
                        {
2428 5388 acydburn
                                $error[] = $user->lang['DEACTIVATE_DEFAULT'];
2429 5388 acydburn
                        }
2430 5388 acydburn
2431 8700 Kellanved
                        if (!$name || $conflict)
2432 5388 acydburn
                        {
2433 5388 acydburn
                                $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME'];
2434 5388 acydburn
                        }
2435 5388 acydburn
2436 7629 kellanved
                        if ($mode === 'theme' || $mode === 'template')
2437 7629 kellanved
                        {
2438 7629 kellanved
                                // a rather elaborate check we have to do here once to avoid trouble later
2439 7629 kellanved
                                $check = "{$phpbb_root_path}styles/" . $style_row["{$mode}_path"] . (($mode === 'theme') ? '/theme/stylesheet.css' : '/template');
2440 10757 git-gate
                                if (($style_row["{$mode}_storedb"] != $store_db) && !$store_db && ($safe_mode || !phpbb_is_writable($check)))
2441 7629 kellanved
                                {
2442 7629 kellanved
                                        $error[] = $user->lang['EDIT_' . strtoupper($mode) . '_STORED_DB'];
2443 7629 kellanved
                                        $store_db = 1;
2444 7629 kellanved
                                }
2445 7890 naderman
2446 7890 naderman
                                // themes which have to be parsed have to go into db
2447 7890 naderman
                                if ($mode == 'theme')
2448 7890 naderman
                                {
2449 7890 naderman
                                        $cfg = parse_cfg_file("{$phpbb_root_path}styles/" . $style_row["{$mode}_path"] . "/theme/theme.cfg");
2450 7890 naderman
2451 8092 acydburn
                                        if (isset($cfg['parse_css_file']) && $cfg['parse_css_file'] && !$store_db)
2452 7890 naderman
                                        {
2453 7890 naderman
                                                $error[] = $user->lang['EDIT_THEME_STORE_PARSED'];
2454 7890 naderman
                                                $store_db = 1;
2455 7890 naderman
                                        }
2456 7890 naderman
                                }
2457 7629 kellanved
                        }
2458 8783 acydburn
2459 5388 acydburn
                        if (!sizeof($error))
2460 5388 acydburn
                        {
2461 5388 acydburn
                                // Check length settings
2462 6452 acydburn
                                if (utf8_strlen($name) > 30)
2463 5388 acydburn
                                {
2464 5388 acydburn
                                        $error[] = $user->lang[$l_type . '_ERR_NAME_LONG'];
2465 5388 acydburn
                                }
2466 5388 acydburn
2467 6452 acydburn
                                if (utf8_strlen($copyright) > 60)
2468 5388 acydburn
                                {
2469 5388 acydburn
                                        $error[] = $user->lang[$l_type . '_ERR_COPY_LONG'];
2470 5388 acydburn
                                }
2471 5388 acydburn
                        }
2472 5388 acydburn
                }
2473 5953 naderman
2474 5388 acydburn
                if ($update && sizeof($error))
2475 5388 acydburn
                {
2476 5388 acydburn
                        $style_row = array_merge($style_row, array(
2477 5388 acydburn
                                'template_id'                        => $template_id,
2478 5388 acydburn
                                'theme_id'                                => $theme_id,
2479 5388 acydburn
                                'imageset_id'                        => $imageset_id,
2480 5388 acydburn
                                'style_active'                        => $style_active,
2481 5388 acydburn
                                $mode . '_storedb'                => $store_db,
2482 5388 acydburn
                                $mode . '_name'                        => $name,
2483 5388 acydburn
                                $mode . '_copyright'        => $copyright)
2484 5388 acydburn
                        );
2485 5388 acydburn
                }
2486 7630 kellanved
2487 6915 acydburn
                // User has submitted form and no errors have occurred
2488 5388 acydburn
                if ($update && !sizeof($error))
2489 5388 acydburn
                {
2490 5388 acydburn
                        $sql_ary = array(
2491 5388 acydburn
                                $mode . '_name'                        => $name,
2492 5388 acydburn
                                $mode . '_copyright'        => $copyright
2493 5388 acydburn
                        );
2494 5388 acydburn
2495 5388 acydburn
                        switch ($mode)
2496 5388 acydburn
                        {
2497 5388 acydburn
                                case 'style':
2498 5388 acydburn
2499 5388 acydburn
                                        $sql_ary += array(
2500 8168 acydburn
                                                'template_id'                => (int) $template_id,
2501 8168 acydburn
                                                'theme_id'                        => (int) $theme_id,
2502 8168 acydburn
                                                'imageset_id'                => (int) $imageset_id,
2503 8168 acydburn
                                                'style_active'                => (int) $style_active,
2504 5388 acydburn
                                        );
2505 5388 acydburn
                                break;
2506 5388 acydburn
2507 5388 acydburn
                                case 'imageset':
2508 5388 acydburn
                                break;
2509 5388 acydburn
2510 5388 acydburn
                                case 'theme':
2511 5388 acydburn
2512 5388 acydburn
                                        if ($style_row['theme_storedb'] != $store_db)
2513 5388 acydburn
                                        {
2514 5388 acydburn
                                                $theme_data = '';
2515 5388 acydburn
2516 5953 naderman
                                                if (!$style_row['theme_storedb'])
2517 5388 acydburn
                                                {
2518 6007 naderman
                                                        $theme_data = $this->db_theme_data($style_row);
2519 5388 acydburn
                                                }
2520 10757 git-gate
                                                else if (!$store_db && !$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css"))
2521 5388 acydburn
                                                {
2522 5388 acydburn
                                                        $store_db = 1;
2523 6007 naderman
                                                        $theme_data = $style_row['theme_data'];
2524 5953 naderman
2525 5388 acydburn
                                                        if ($fp = @fopen("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css", 'wb'))
2526 5388 acydburn
                                                        {
2527 5388 acydburn
                                                                $store_db = (@fwrite($fp, str_replace("styles/{$style_row['theme_path']}/theme/", './', $theme_data))) ? 0 : 1;
2528 5388 acydburn
                                                        }
2529 5388 acydburn
                                                        fclose($fp);
2530 5388 acydburn
                                                }
2531 5388 acydburn
2532 5388 acydburn
                                                $sql_ary += array(
2533 5953 naderman
                                                        'theme_mtime'        => ($store_db) ? filemtime("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css") : 0,
2534 5953 naderman
                                                        'theme_storedb'        => $store_db,
2535 5388 acydburn
                                                        'theme_data'        => ($store_db) ? $theme_data : '',
2536 5388 acydburn
                                                );
2537 5388 acydburn
                                        }
2538 5388 acydburn
                                break;
2539 5953 naderman
2540 5388 acydburn
                                case 'template':
2541 5388 acydburn
2542 5388 acydburn
                                        if ($style_row['template_storedb'] != $store_db)
2543 5388 acydburn
                                        {
2544 8697 Kellanved
                                                if ($super = $this->get_super($mode, $style_row['template_id']))
2545 5388 acydburn
                                                {
2546 8697 Kellanved
                                                        $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
2547 8697 Kellanved
                                                        $sql_ary = array();
2548 8697 Kellanved
                                                }
2549 8697 Kellanved
                                                else
2550 8697 Kellanved
                                                {
2551 10757 git-gate
                                                        if (!$store_db && !$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$style_row['template_path']}/template"))
2552 5388 acydburn
                                                        {
2553 8697 Kellanved
                                                                $err = $this->store_in_fs('template', $style_row['template_id']);
2554 8697 Kellanved
                                                                if ($err)
2555 5388 acydburn
                                                                {
2556 8697 Kellanved
                                                                        $error += $err;
2557 5388 acydburn
                                                                }
2558 5388 acydburn
                                                        }
2559 8697 Kellanved
                                                        else if ($store_db)
2560 5388 acydburn
                                                        {
2561 8697 Kellanved
                                                                $this->store_in_db('template', $style_row['template_id']);
2562 8697 Kellanved
                                                        }
2563 8697 Kellanved
                                                        else
2564 8697 Kellanved
                                                        {
2565 8697 Kellanved
                                                                // We no longer store within the db, but are also not able to update the file structure
2566 8697 Kellanved
                                                                // Since the admin want to switch this, we adhere to his decision. But we also need to remove the cache
2567 6021 acydburn
                                                                $sql = 'DELETE FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
2568 5388 acydburn
                                                                        WHERE template_id = $style_id";
2569 5388 acydburn
                                                                $db->sql_query($sql);
2570 5388 acydburn
                                                        }
2571 8697 Kellanved
2572 8697 Kellanved
                                                        $sql_ary += array(
2573 8697 Kellanved
                                                                'template_storedb'        => $store_db,
2574 8697 Kellanved
                                                        );
2575 5388 acydburn
                                                }
2576 5388 acydburn
                                        }
2577 5388 acydburn
                                break;
2578 5388 acydburn
                        }
2579 5388 acydburn
2580 5388 acydburn
                        if (sizeof($sql_ary))
2581 5388 acydburn
                        {
2582 5953 naderman
                                $sql = "UPDATE $sql_from
2583 5953 naderman
                                        SET " . $db->sql_build_array('UPDATE', $sql_ary) . "
2584 5388 acydburn
                                        WHERE {$mode}_id = $style_id";
2585 5388 acydburn
                                $db->sql_query($sql);
2586 5388 acydburn
2587 5388 acydburn
                                // Making this the default style?
2588 5388 acydburn
                                if ($mode == 'style' && $style_default)
2589 5388 acydburn
                                {
2590 5388 acydburn
                                        set_config('default_style', $style_id);
2591 5388 acydburn
                                }
2592 5388 acydburn
                        }
2593 5388 acydburn
2594 5388 acydburn
                        $cache->destroy('sql', STYLES_TABLE);
2595 5388 acydburn
2596 5388 acydburn
                        add_log('admin', 'LOG_' . $l_type . '_EDIT_DETAILS', $name);
2597 7629 kellanved
                        if (sizeof($error))
2598 7629 kellanved
                        {
2599 7629 kellanved
                                trigger_error(implode('<br />', $error) . adm_back_link($this->u_action), E_USER_WARNING);
2600 7629 kellanved
                        }
2601 7629 kellanved
                        else
2602 7629 kellanved
                        {
2603 7629 kellanved
                                trigger_error($user->lang[$l_type . '_DETAILS_UPDATED'] . adm_back_link($this->u_action));
2604 7629 kellanved
                        }
2605 5388 acydburn
                }
2606 5388 acydburn
2607 5388 acydburn
                if ($mode == 'style')
2608 5388 acydburn
                {
2609 5388 acydburn
                        foreach ($element_ary as $element => $table)
2610 5388 acydburn
                        {
2611 5388 acydburn
                                $sql = "SELECT {$element}_id, {$element}_name
2612 5953 naderman
                                        FROM $table
2613 5388 acydburn
                                        ORDER BY {$element}_id ASC";
2614 5388 acydburn
                                $result = $db->sql_query($sql);
2615 5388 acydburn
2616 5388 acydburn
                                ${$element . '_options'} = '';
2617 5388 acydburn
                                while ($row = $db->sql_fetchrow($result))
2618 5388 acydburn
                                {
2619 5388 acydburn
                                        $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : '';
2620 5388 acydburn
                                        ${$element . '_options'} .= '<option value="' . $row[$element . '_id'] . '"' . $selected . '>' . $row[$element . '_name'] . '</option>';
2621 5388 acydburn
                                }
2622 5388 acydburn
                                $db->sql_freeresult($result);
2623 5388 acydburn
                        }
2624 5388 acydburn
                }
2625 8783 acydburn
2626 8697 Kellanved
                if ($mode == 'template')
2627 8697 Kellanved
                {
2628 8697 Kellanved
                        $super = array();
2629 8697 Kellanved
                        if (isset($style_row[$mode . '_inherits_id']) && $style_row['template_inherits_id'])
2630 8697 Kellanved
                        {
2631 8697 Kellanved
                                $super = $this->get_super($mode, $style_row['template_id']);
2632 8697 Kellanved
                        }
2633 8697 Kellanved
                }
2634 5388 acydburn
2635 5388 acydburn
                $this->page_title = 'EDIT_DETAILS_' . $l_type;
2636 5388 acydburn
2637 5388 acydburn
                $template->assign_vars(array(
2638 5388 acydburn
                        'S_DETAILS'                                => true,
2639 5388 acydburn
                        'S_ERROR_MSG'                        => (sizeof($error)) ? true : false,
2640 5388 acydburn
                        'S_STYLE'                                => ($mode == 'style') ? true : false,
2641 5388 acydburn
                        'S_TEMPLATE'                        => ($mode == 'template') ? true : false,
2642 5388 acydburn
                        'S_THEME'                                => ($mode == 'theme') ? true : false,
2643 5388 acydburn
                        'S_IMAGESET'                        => ($mode == 'imageset') ? true : false,
2644 5388 acydburn
                        'S_STORE_DB'                        => (isset($style_row[$mode . '_storedb'])) ? $style_row[$mode . '_storedb'] : 0,
2645 8697 Kellanved
                        'S_STORE_DB_DISABLED'        => (isset($style_row[$mode . '_inherits_id'])) ? $style_row[$mode . '_inherits_id'] : 0,
2646 5388 acydburn
                        'S_STYLE_ACTIVE'                => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
2647 5388 acydburn
                        'S_STYLE_DEFAULT'                => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
2648 8697 Kellanved
                        'S_SUPERTEMPLATE'                => (isset($style_row[$mode . '_inherits_id']) && $style_row[$mode . '_inherits_id']) ? $super['template_name'] : 0,
2649 5388 acydburn
2650 5388 acydburn
                        'S_TEMPLATE_OPTIONS'        => ($mode == 'style') ? $template_options : '',
2651 5388 acydburn
                        'S_THEME_OPTIONS'                => ($mode == 'style') ? $theme_options : '',
2652 5388 acydburn
                        'S_IMAGESET_OPTIONS'        => ($mode == 'style') ? $imageset_options : '',
2653 5388 acydburn
2654 5388 acydburn
                        'U_ACTION'                => $this->u_action . '&amp;action=details&amp;id=' . $style_id,
2655 5388 acydburn
                        'U_BACK'                => $this->u_action,
2656 5388 acydburn
2657 5388 acydburn
                        'L_TITLE'                                => $user->lang[$this->page_title],
2658 5388 acydburn
                        'L_EXPLAIN'                                => $user->lang[$this->page_title . '_EXPLAIN'],
2659 5388 acydburn
                        'L_NAME'                                => $user->lang[$l_type . '_NAME'],
2660 5388 acydburn
                        'L_LOCATION'                        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
2661 5388 acydburn
                        'L_LOCATION_EXPLAIN'        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
2662 5388 acydburn
2663 5388 acydburn
                        'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
2664 5388 acydburn
                        'NAME'                        => $style_row[$mode . '_name'],
2665 5388 acydburn
                        'COPYRIGHT'                => $style_row[$mode . '_copyright'],
2666 5388 acydburn
                        )
2667 5388 acydburn
                );
2668 5388 acydburn
        }
2669 5388 acydburn
2670 5388 acydburn
        /**
2671 5388 acydburn
        * Load css file contents
2672 5388 acydburn
        */
2673 5388 acydburn
        function load_css_file($path, $filename)
2674 5388 acydburn
        {
2675 5388 acydburn
                global $phpbb_root_path;
2676 5953 naderman
2677 5953 naderman
                $file = "{$phpbb_root_path}styles/$path/theme/$filename";
2678 5953 naderman
2679 5953 naderman
                if (file_exists($file) && ($content = file_get_contents($file)))
2680 5388 acydburn
                {
2681 5953 naderman
                        $content = trim($content);
2682 5388 acydburn
                }
2683 5388 acydburn
                else
2684 5388 acydburn
                {
2685 5388 acydburn
                        $content = '';
2686 5388 acydburn
                }
2687 8754 Kellanved
                if (defined('DEBUG'))
2688 8754 Kellanved
                {
2689 8754 Kellanved
                        $content = "/* BEGIN @include $filename */ \n $content \n /* END @include $filename */ \n";
2690 8754 Kellanved
                }
2691 5953 naderman
2692 5388 acydburn
                return $content;
2693 5388 acydburn
        }
2694 5388 acydburn
2695 5416 acydburn
        /**
2696 6007 naderman
        * Returns a string containing the value that should be used for the theme_data column in the theme database table.
2697 6007 naderman
        * Includes contents of files loaded via @import
2698 6007 naderman
        *
2699 6007 naderman
        * @param array $theme_row is an associative array containing the theme's current database entry
2700 6007 naderman
        * @param mixed $stylesheet can either be the new content for the stylesheet or false to load from the standard file
2701 6007 naderman
        * @param string $root_path should only be used in case you want to use a different root path than "{$phpbb_root_path}styles/{$theme_row['theme_path']}"
2702 6007 naderman
        *
2703 6007 naderman
        * @return string Stylesheet data for theme_data column in the theme table
2704 6007 naderman
        */
2705 6007 naderman
        function db_theme_data($theme_row, $stylesheet = false, $root_path = '')
2706 6007 naderman
        {
2707 6007 naderman
                global $phpbb_root_path;
2708 6007 naderman
2709 6007 naderman
                if (!$root_path)
2710 6007 naderman
                {
2711 6007 naderman
                        $root_path = $phpbb_root_path . 'styles/' . $theme_row['theme_path'];
2712 6007 naderman
                }
2713 6007 naderman
2714 6007 naderman
                if (!$stylesheet)
2715 6007 naderman
                {
2716 6007 naderman
                        $stylesheet = '';
2717 6007 naderman
                        if (file_exists($root_path . '/theme/stylesheet.css'))
2718 6007 naderman
                        {
2719 6007 naderman
                                $stylesheet = file_get_contents($root_path . '/theme/stylesheet.css');
2720 6007 naderman
                        }
2721 6007 naderman
                }
2722 6007 naderman
2723 6007 naderman
                // Match CSS imports
2724 6007 naderman
                $matches = array();
2725 10755 git-gate
                preg_match_all('/@import url\((["\'])(.*)\1\);/i', $stylesheet, $matches);
2726 6007 naderman
2727 10755 git-gate
                // remove commented stylesheets (very simple parser, allows only whitespace
2728 10755 git-gate
                // around an @import statement)
2729 10755 git-gate
                preg_match_all('#/\*\s*@import url\((["\'])(.*)\1\);\s\*/#i', $stylesheet, $commented);
2730 10755 git-gate
                $matches[2] = array_diff($matches[2], $commented[2]);
2731 10755 git-gate
2732 6007 naderman
                if (sizeof($matches))
2733 6007 naderman
                {
2734 6007 naderman
                        foreach ($matches[0] as $idx => $match)
2735 6007 naderman
                        {
2736 10755 git-gate
                                if (isset($matches[2][$idx]))
2737 10755 git-gate
                                {
2738 10755 git-gate
                                        $stylesheet = str_replace($match, acp_styles::load_css_file($theme_row['theme_path'], $matches[2][$idx]), $stylesheet);
2739 10755 git-gate
                                }
2740 6007 naderman
                        }
2741 6007 naderman
                }
2742 6007 naderman
2743 6007 naderman
                // adjust paths
2744 6007 naderman
                return str_replace('./', 'styles/' . $theme_row['theme_path'] . '/theme/', $stylesheet);
2745 6007 naderman
        }
2746 6007 naderman
2747 6007 naderman
        /**
2748 5416 acydburn
        * Store template files into db
2749 5416 acydburn
        */
2750 6063 naderman
        function store_templates($mode, $style_id, $template_path, $filelist)
2751 5416 acydburn
        {
2752 5416 acydburn
                global $phpbb_root_path, $phpEx, $db;
2753 5416 acydburn
2754 6063 naderman
                $template_path = $template_path . '/template/';
2755 5416 acydburn
                $includes = array();
2756 5416 acydburn
                foreach ($filelist as $pathfile => $file_ary)
2757 5416 acydburn
                {
2758 5416 acydburn
                        foreach ($file_ary as $file)
2759 5416 acydburn
                        {
2760 7872 acydburn
                                if (!($fp = @fopen("{$phpbb_root_path}styles/$template_path$pathfile$file", 'r')))
2761 5416 acydburn
                                {
2762 6320 acydburn
                                        trigger_error("Could not open {$phpbb_root_path}styles/$template_path$pathfile$file", E_USER_ERROR);
2763 5416 acydburn
                                }
2764 9682 bantu
2765 9682 bantu
                                $filesize = filesize("{$phpbb_root_path}styles/$template_path$pathfile$file");
2766 9682 bantu
2767 9682 bantu
                                if ($filesize)
2768 9682 bantu
                                {
2769 9682 bantu
                                        $template_data = fread($fp, $filesize);
2770 9682 bantu
                                }
2771 9682 bantu
2772 5416 acydburn
                                fclose($fp);
2773 5416 acydburn
2774 9682 bantu
                                if (!$filesize)
2775 9682 bantu
                                {
2776 9682 bantu
                                        // File is empty
2777 9682 bantu
                                        continue;
2778 9682 bantu
                                }
2779 9682 bantu
2780 5416 acydburn
                                if (preg_match_all('#<!-- INCLUDE (.*?\.html) -->#is', $template_data, $matches))
2781 5416 acydburn
                                {
2782 5416 acydburn
                                        foreach ($matches[1] as $match)
2783 5416 acydburn
                                        {
2784 5416 acydburn
                                                $includes[trim($match)][] = $file;
2785 5416 acydburn
                                        }
2786 5416 acydburn
                                }
2787 5416 acydburn
                        }
2788 5416 acydburn
                }
2789 5416 acydburn
2790 5416 acydburn
                foreach ($filelist as $pathfile => $file_ary)
2791 5416 acydburn
                {
2792 5416 acydburn
                        foreach ($file_ary as $file)
2793 5416 acydburn
                        {
2794 5416 acydburn
                                // Skip index.
2795 5416 acydburn
                                if (strpos($file, 'index.') === 0)
2796 5416 acydburn
                                {
2797 5416 acydburn
                                        continue;
2798 5416 acydburn
                                }
2799 5416 acydburn
2800 5416 acydburn
                                // We could do this using extended inserts ... but that could be one
2801 5416 acydburn
                                // heck of a lot of data ...
2802 5416 acydburn
                                $sql_ary = array(
2803 8168 acydburn
                                        'template_id'                        => (int) $style_id,
2804 6266 naderman
                                        'template_filename'                => "$pathfile$file",
2805 5416 acydburn
                                        'template_included'                => (isset($includes[$file])) ? implode(':', $includes[$file]) . ':' : '',
2806 8168 acydburn
                                        'template_mtime'                => (int) filemtime("{$phpbb_root_path}styles/$template_path$pathfile$file"),
2807 8168 acydburn
                                        'template_data'                        => (string) file_get_contents("{$phpbb_root_path}styles/$template_path$pathfile$file"),
2808 5416 acydburn
                                );
2809 5416 acydburn
2810 5416 acydburn
                                if ($mode == 'insert')
2811 5416 acydburn
                                {
2812 6021 acydburn
                                        $sql = 'INSERT INTO ' . STYLES_TEMPLATE_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
2813 5416 acydburn
                                }
2814 5416 acydburn
                                else
2815 5416 acydburn
                                {
2816 6021 acydburn
                                        $sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
2817 5953 naderman
                                                WHERE template_id = $style_id
2818 5894 naderman
                                                        AND template_filename = '" . $db->sql_escape("$pathfile$file") . "'";
2819 5416 acydburn
                                }
2820 5416 acydburn
                                $db->sql_query($sql);
2821 5416 acydburn
                        }
2822 5416 acydburn
                }
2823 5416 acydburn
        }
2824 5416 acydburn
2825 5416 acydburn
        /**
2826 6007 naderman
        * Returns an array containing all template filenames for one template that are currently cached.
2827 6007 naderman
        *
2828 6007 naderman
        * @param string $template_path contains the name of the template's folder in /styles/
2829 6007 naderman
        *
2830 6007 naderman
        * @return array of filenames that exist in /styles/$template_path/template/ (without extension!)
2831 6007 naderman
        */
2832 6007 naderman
        function template_cache_filelist($template_path)
2833 6007 naderman
        {
2834 6007 naderman
                global $phpbb_root_path, $phpEx, $user;
2835 6007 naderman
2836 8943 acydburn
                $cache_prefix = 'tpl_' . str_replace('_', '-', $template_path);
2837 6007 naderman
2838 6007 naderman
                if (!($dp = @opendir("{$phpbb_root_path}cache")))
2839 6007 naderman
                {
2840 6428 acydburn
                        trigger_error($user->lang['TEMPLATE_ERR_CACHE_READ'] . adm_back_link($this->u_action), E_USER_WARNING);
2841 6007 naderman
                }
2842 6007 naderman
2843 6007 naderman
                $file_ary = array();
2844 6007 naderman
                while ($file = readdir($dp))
2845 6007 naderman
                {
2846 7909 acydburn
                        if ($file[0] == '.')
2847 7909 acydburn
                        {
2848 7909 acydburn
                                continue;
2849 7909 acydburn
                        }
2850 7909 acydburn
2851 6007 naderman
                        if (is_file($phpbb_root_path . 'cache/' . $file) && (strpos($file, $cache_prefix) === 0))
2852 6007 naderman
                        {
2853 6007 naderman
                                $file_ary[] = str_replace('.', '/', preg_replace('#^' . preg_quote($cache_prefix, '#') . '_(.*?)\.html\.' . $phpEx . '$#i', '\1', $file));
2854 6007 naderman
                        }
2855 6007 naderman
                }
2856 6007 naderman
                closedir($dp);
2857 6007 naderman
2858 6007 naderman
                return $file_ary;
2859 6007 naderman
        }
2860 6007 naderman
2861 6007 naderman
        /**
2862 6007 naderman
        * Destroys cached versions of template files
2863 6007 naderman
        *
2864 6021 acydburn
        * @param array $template_row contains the template's row in the STYLES_TEMPLATE_TABLE database table
2865 6007 naderman
        * @param mixed $file_ary is optional and may contain an array of template file names which should be refreshed in the cache.
2866 6007 naderman
        *        The file names should be the original template file names and not the cache file names.
2867 6007 naderman
        */
2868 6007 naderman
        function clear_template_cache($template_row, $file_ary = false)
2869 6007 naderman
        {
2870 6007 naderman
                global $phpbb_root_path, $phpEx, $user;
2871 6007 naderman
2872 8943 acydburn
                $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']);
2873 6007 naderman
2874 6007 naderman
                if (!$file_ary || !is_array($file_ary))
2875 6007 naderman
                {
2876 6007 naderman
                        $file_ary = $this->template_cache_filelist($template_row['template_path']);
2877 6007 naderman
                        $log_file_list = $user->lang['ALL_FILES'];
2878 6007 naderman
                }
2879 6007 naderman
                else
2880 6007 naderman
                {
2881 6007 naderman
                        $log_file_list = implode(', ', $file_ary);
2882 6007 naderman
                }
2883 6007 naderman
2884 6007 naderman
                foreach ($file_ary as $file)
2885 6007 naderman
                {
2886 6007 naderman
                        $file = str_replace('/', '.', $file);
2887 6007 naderman
2888 6007 naderman
                        $file = "{$phpbb_root_path}cache/{$cache_prefix}_$file.html.$phpEx";
2889 6007 naderman
                        if (file_exists($file) && is_file($file))
2890 6007 naderman
                        {
2891 6007 naderman
                                @unlink($file);
2892 6007 naderman
                        }
2893 6007 naderman
                }
2894 6007 naderman
                unset($file_ary);
2895 6007 naderman
2896 6007 naderman
                add_log('admin', 'LOG_TEMPLATE_CACHE_CLEARED', $template_row['template_name'], $log_file_list);
2897 6007 naderman
        }
2898 6007 naderman
2899 6007 naderman
        /**
2900 5416 acydburn
        * Install Style/Template/Theme/Imageset
2901 5416 acydburn
        */
2902 5418 acydburn
        function install($mode)
2903 5416 acydburn
        {
2904 6015 acydburn
                global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
2905 5416 acydburn
2906 5416 acydburn
                $l_type = strtoupper($mode);
2907 5416 acydburn
2908 5416 acydburn
                $error = $installcfg = $style_row = array();
2909 5416 acydburn
                $root_path = $cfg_file = '';
2910 6021 acydburn
                $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
2911 5416 acydburn
2912 5416 acydburn
                $install_path = request_var('path', '');
2913 5416 acydburn
                $update = (isset($_POST['update'])) ? true : false;
2914 5416 acydburn
2915 5416 acydburn
                // Installing, obtain cfg file contents
2916 5418 acydburn
                if ($install_path)
2917 5416 acydburn
                {
2918 5416 acydburn
                        $root_path = $phpbb_root_path . 'styles/' . $install_path . '/';
2919 5416 acydburn
                        $cfg_file = ($mode == 'style') ? "$root_path$mode.cfg" : "$root_path$mode/$mode.cfg";
2920 5416 acydburn
2921 5416 acydburn
                        if (!file_exists($cfg_file))
2922 5416 acydburn
                        {
2923 5416 acydburn
                                $error[] = $user->lang[$l_type . '_ERR_NOT_' . $l_type];
2924 5416 acydburn
                        }
2925 5416 acydburn
                        else
2926 5416 acydburn
                        {
2927 5416 acydburn
                                $installcfg = parse_cfg_file($cfg_file);
2928 5416 acydburn
                        }
2929 5416 acydburn
                }
2930 5416 acydburn
2931 5416 acydburn
                // Installing
2932 5416 acydburn
                if (sizeof($installcfg))
2933 5416 acydburn
                {
2934 5416 acydburn
                        $name                = $installcfg['name'];
2935 5416 acydburn
                        $copyright        = $installcfg['copyright'];
2936 5416 acydburn
                        $version        = $installcfg['version'];
2937 5416 acydburn
2938 5416 acydburn
                        $style_row = array(
2939 5416 acydburn
                                $mode . '_id'                        => 0,
2940 5416 acydburn
                                $mode . '_name'                        => '',
2941 5416 acydburn
                                $mode . '_copyright'        => ''
2942 5416 acydburn
                        );
2943 5416 acydburn
2944 5416 acydburn
                        switch ($mode)
2945 5416 acydburn
                        {
2946 5416 acydburn
                                case 'style':
2947 5416 acydburn
2948 5416 acydburn
                                        $style_row = array(
2949 5416 acydburn
                                                'style_id'                        => 0,
2950 5416 acydburn
                                                'style_name'                => $installcfg['name'],
2951 5416 acydburn
                                                'style_copyright'        => $installcfg['copyright']
2952 5416 acydburn
                                        );
2953 5416 acydburn
2954 7208 naderman
                                        $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false;
2955 7208 naderman
                                        $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false;
2956 7208 naderman
                                        $reqd_imageset = (isset($installcfg['required_imageset'])) ? $installcfg['required_imageset'] : false;
2957 5416 acydburn
2958 5416 acydburn
                                        // Check to see if each element is already installed, if it is grab the id
2959 5416 acydburn
                                        foreach ($element_ary as $element => $table)
2960 5416 acydburn
                                        {
2961 5416 acydburn
                                                $style_row = array_merge($style_row, array(
2962 5416 acydburn
                                                        $element . '_id'                        => 0,
2963 5416 acydburn
                                                        $element . '_name'                        => '',
2964 5416 acydburn
                                                        $element . '_copyright'                => '')
2965 5416 acydburn
                                                );
2966 5416 acydburn
2967 7208 naderman
                                                 $this->test_installed($element, $error, (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . $reqd_template . '/' : $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']);
2968 7208 naderman
2969 7208 naderman
                                                if (!$style_row[$element . '_name'])
2970 7208 naderman
                                                {
2971 7208 naderman
                                                        $style_row[$element . '_name'] = $reqd_template;
2972 7208 naderman
                                                }
2973 8943 acydburn
2974 8943 acydburn
                                                // Merge other information to installcfg... if present
2975 8943 acydburn
                                                $cfg_file = $phpbb_root_path . 'styles/' . $install_path . '/' . $element . '/' . $element . '.cfg';
2976 8943 acydburn
2977 8943 acydburn
                                                if (file_exists($cfg_file))
2978 8943 acydburn
                                                {
2979 8943 acydburn
                                                        $cfg_contents = parse_cfg_file($cfg_file);
2980 8943 acydburn
2981 8943 acydburn
                                                        // Merge only specific things. We may need them later.
2982 8943 acydburn
                                                        foreach (array('inherit_from', 'parse_css_file') as $key)
2983 8943 acydburn
                                                        {
2984 8943 acydburn
                                                                if (!empty($cfg_contents[$key]) && !isset($installcfg[$key]))
2985 8943 acydburn
                                                                {
2986 8943 acydburn
                                                                        $installcfg[$key] = $cfg_contents[$key];
2987 8943 acydburn
                                                                }
2988 8943 acydburn
                                                        }
2989 8943 acydburn
                                                }
2990 5416 acydburn
                                        }
2991 5953 naderman
2992 5416 acydburn
                                break;
2993 5416 acydburn
2994 5416 acydburn
                                case 'template':
2995 5416 acydburn
                                        $this->test_installed('template', $error, $root_path, false, $style_row['template_id'], $style_row['template_name'], $style_row['template_copyright']);
2996 5416 acydburn
                                break;
2997 5416 acydburn
2998 5416 acydburn
                                case 'theme':
2999 5416 acydburn
                                        $this->test_installed('theme', $error, $root_path, false, $style_row['theme_id'], $style_row['theme_name'], $style_row['theme_copyright']);
3000 5416 acydburn
                                break;
3001 5416 acydburn
3002 5416 acydburn
                                case 'imageset':
3003 5416 acydburn
                                        $this->test_installed('imageset', $error, $root_path, false, $style_row['imageset_id'], $style_row['imageset_name'], $style_row['imageset_copyright']);
3004 5416 acydburn
                                break;
3005 5416 acydburn
                        }
3006 5416 acydburn
                }
3007 5416 acydburn
                else
3008 5416 acydburn
                {
3009 6320 acydburn
                        trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING);
3010 5416 acydburn
                }
3011 5416 acydburn
3012 5416 acydburn
                $style_row['store_db'] = request_var('store_db', 0);
3013 5416 acydburn
                $style_row['style_active'] = request_var('style_active', 1);
3014 5416 acydburn
                $style_row['style_default'] = request_var('style_default', 0);
3015 5953 naderman
3016 6915 acydburn
                // User has submitted form and no errors have occurred
3017 5416 acydburn
                if ($update && !sizeof($error))
3018 5416 acydburn
                {
3019 5416 acydburn
                        if ($mode == 'style')
3020 5416 acydburn
                        {
3021 7208 naderman
                                foreach ($element_ary as $element => $table)
3022 7208 naderman
                                {
3023 7208 naderman
                                        ${$element . '_root_path'} = (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . ${'reqd_' . $element} . '/' : false;
3024 7208 naderman
                                        ${$element . '_path'} = (${'reqd_' . $element}) ? ${'reqd_' . $element} : false;
3025 7208 naderman
                                }
3026 7208 naderman
                                $this->install_style($error, 'install', $root_path, $style_row['style_id'], $style_row['style_name'], $install_path, $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row, $template_root_path, $template_path, $theme_root_path, $theme_path, $imageset_root_path, $imageset_path);
3027 5416 acydburn
                        }
3028 5416 acydburn
                        else
3029 5416 acydburn
                        {
3030 6063 naderman
                                $style_row['store_db'] = $this->install_element($mode, $error, 'install', $root_path, $style_row[$mode . '_id'], $style_row[$mode . '_name'], $install_path, $style_row[$mode . '_copyright'], $style_row['store_db']);
3031 5416 acydburn
                        }
3032 5416 acydburn
3033 5416 acydburn
                        if (!sizeof($error))
3034 5416 acydburn
                        {
3035 5416 acydburn
                                $cache->destroy('sql', STYLES_TABLE);
3036 5416 acydburn
3037 5416 acydburn
                                $message = ($style_row['store_db']) ? '_ADDED_DB' : '_ADDED';
3038 5416 acydburn
                                trigger_error($user->lang[$l_type . $message] . adm_back_link($this->u_action));
3039 5416 acydburn
                        }
3040 5416 acydburn
                }
3041 5416 acydburn
3042 5416 acydburn
                $this->page_title = 'INSTALL_' . $l_type;
3043 5416 acydburn
3044 5416 acydburn
                $template->assign_vars(array(
3045 5416 acydburn
                        'S_DETAILS'                        => true,
3046 5416 acydburn
                        'S_INSTALL'                        => true,
3047 5416 acydburn
                        'S_ERROR_MSG'                => (sizeof($error)) ? true : false,
3048 8697 Kellanved
                        'S_LOCATION'                => (isset($installcfg['inherit_from']) && $installcfg['inherit_from']) ? false : true,
3049 5416 acydburn
                        'S_STYLE'                        => ($mode == 'style') ? true : false,
3050 5416 acydburn
                        'S_TEMPLATE'                => ($mode == 'template') ? true : false,
3051 8733 Kellanved
                        'S_SUPERTEMPLATE'        => (isset($installcfg['inherit_from'])) ? $installcfg['inherit_from'] : '',
3052 5416 acydburn
                        'S_THEME'                        => ($mode == 'theme') ? true : false,
3053 5416 acydburn
3054 5416 acydburn
                        'S_STORE_DB'                        => (isset($style_row[$mode . '_storedb'])) ? $style_row[$mode . '_storedb'] : 0,
3055 5416 acydburn
                        'S_STYLE_ACTIVE'                => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
3056 5416 acydburn
                        'S_STYLE_DEFAULT'                => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
3057 5953 naderman
3058 5418 acydburn
                        'U_ACTION'                        => $this->u_action . "&amp;action=install&amp;path=" . urlencode($install_path),
3059 5416 acydburn
                        'U_BACK'                        => $this->u_action,
3060 5416 acydburn
3061 5416 acydburn
                        'L_TITLE'                                => $user->lang[$this->page_title],
3062 5416 acydburn
                        'L_EXPLAIN'                                => $user->lang[$this->page_title . '_EXPLAIN'],
3063 5416 acydburn
                        'L_NAME'                                => $user->lang[$l_type . '_NAME'],
3064 5416 acydburn
                        'L_LOCATION'                        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
3065 5416 acydburn
                        'L_LOCATION_EXPLAIN'        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
3066 5416 acydburn
3067 5416 acydburn
                        'ERROR_MSG'                        => (sizeof($error)) ? implode('<br />', $error) : '',
3068 5416 acydburn
                        'NAME'                                => $style_row[$mode . '_name'],
3069 5416 acydburn
                        'COPYRIGHT'                        => $style_row[$mode . '_copyright'],
3070 5416 acydburn
                        'TEMPLATE_NAME'                => ($mode == 'style') ? $style_row['template_name'] : '',
3071 5416 acydburn
                        'THEME_NAME'                => ($mode == 'style') ? $style_row['theme_name'] : '',
3072 5416 acydburn
                        'IMAGESET_NAME'                => ($mode == 'style') ? $style_row['imageset_name'] : '')
3073 5416 acydburn
                );
3074 5416 acydburn
        }
3075 5416 acydburn
3076 5416 acydburn
        /**
3077 5418 acydburn
        * Add new style
3078 5418 acydburn
        */
3079 5418 acydburn
        function add($mode)
3080 5418 acydburn
        {
3081 6015 acydburn
                global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
3082 5418 acydburn
3083 5418 acydburn
                $l_type = strtoupper($mode);
3084 6021 acydburn
                $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
3085 5418 acydburn
                $error = array();
3086 5418 acydburn
3087 5418 acydburn
                $style_row = array(
3088 7920 acydburn
                        $mode . '_name'                        => utf8_normalize_nfc(request_var('name', '', true)),
3089 7920 acydburn
                        $mode . '_copyright'        => utf8_normalize_nfc(request_var('copyright', '', true)),
3090 5418 acydburn
                        'template_id'                        => 0,
3091 5418 acydburn
                        'theme_id'                                => 0,
3092 5418 acydburn
                        'imageset_id'                        => 0,
3093 5418 acydburn
                        'store_db'                                => request_var('store_db', 0),
3094 5418 acydburn
                        'style_active'                        => request_var('style_active', 1),
3095 5418 acydburn
                        'style_default'                        => request_var('style_default', 0),
3096 5418 acydburn
                );
3097 5418 acydburn
3098 5418 acydburn
                $basis = request_var('basis', 0);
3099 5418 acydburn
                $update = (isset($_POST['update'])) ? true : false;
3100 5418 acydburn
3101 5418 acydburn
                if ($basis)
3102 5418 acydburn
                {
3103 5418 acydburn
                        switch ($mode)
3104 5418 acydburn
                        {
3105 5418 acydburn
                                case 'style':
3106 5418 acydburn
                                        $sql_select = 'template_id, theme_id, imageset_id';
3107 5418 acydburn
                                        $sql_from = STYLES_TABLE;
3108 5418 acydburn
                                break;
3109 5418 acydburn
3110 5418 acydburn
                                case 'template':
3111 5418 acydburn
                                        $sql_select = 'template_id';
3112 6021 acydburn
                                        $sql_from = STYLES_TEMPLATE_TABLE;
3113 5418 acydburn
                                break;
3114 5418 acydburn
3115 5418 acydburn
                                case 'theme':
3116 5418 acydburn
                                        $sql_select = 'theme_id';
3117 6021 acydburn
                                        $sql_from = STYLES_THEME_TABLE;
3118 5418 acydburn
                                break;
3119 5418 acydburn
3120 5418 acydburn
                                case 'imageset':
3121 5418 acydburn
                                        $sql_select = 'imageset_id';
3122 6021 acydburn
                                        $sql_from = STYLES_IMAGESET_TABLE;
3123 5418 acydburn
                                break;
3124 5418 acydburn
                        }
3125 5418 acydburn
3126 5953 naderman
                        $sql = "SELECT $sql_select
3127 5953 naderman
                                FROM $sql_from
3128 5418 acydburn
                                WHERE {$mode}_id = $basis";
3129 5418 acydburn
                        $result = $db->sql_query($sql);
3130 5418 acydburn
                        $row = $db->sql_fetchrow($result);
3131 5418 acydburn
                        $db->sql_freeresult($result);
3132 5418 acydburn
3133 5953 naderman
                        if (!$row)
3134 5418 acydburn
                        {
3135 5418 acydburn
                                $error[] = $user->lang['NO_' . $l_type];
3136 5418 acydburn
                        }
3137 5418 acydburn
3138 5418 acydburn
                        if (!sizeof($error))
3139 5418 acydburn
                        {
3140 5418 acydburn
                                $style_row['template_id']        = (isset($row['template_id'])) ? $row['template_id'] : $style_row['template_id'];
3141 5418 acydburn
                                $style_row['theme_id']                = (isset($row['theme_id'])) ? $row['theme_id'] : $style_row['theme_id'];
3142 5418 acydburn
                                $style_row['imageset_id']        = (isset($row['imageset_id'])) ? $row['imageset_id'] : $style_row['imageset_id'];
3143 5418 acydburn
                        }
3144 5418 acydburn
                }
3145 5418 acydburn
3146 5418 acydburn
                if ($update)
3147 5418 acydburn
                {
3148 5418 acydburn
                        $style_row['template_id'] = request_var('template_id', $style_row['template_id']);
3149 5418 acydburn
                        $style_row['theme_id'] = request_var('theme_id', $style_row['theme_id']);
3150 5418 acydburn
                        $style_row['imageset_id'] = request_var('imageset_id', $style_row['imageset_id']);
3151 5418 acydburn
3152 5418 acydburn
                        if ($mode == 'style' && (!$style_row['template_id'] || !$style_row['theme_id'] || !$style_row['imageset_id']))
3153 5418 acydburn
                        {
3154 5418 acydburn
                                $error[] = $user->lang['STYLE_ERR_NO_IDS'];
3155 5418 acydburn
                        }
3156 5418 acydburn
                }
3157 5418 acydburn
3158 6915 acydburn
                // User has submitted form and no errors have occurred
3159 5418 acydburn
                if ($update && !sizeof($error))
3160 5418 acydburn
                {
3161 5418 acydburn
                        if ($mode == 'style')
3162 5418 acydburn
                        {
3163 5418 acydburn
                                $style_row['style_id'] = 0;
3164 5418 acydburn
3165 6216 naderman
                                $this->install_style($error, 'add', '', $style_row['style_id'], $style_row['style_name'], '', $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row);
3166 5418 acydburn
                        }
3167 5418 acydburn
3168 5418 acydburn
                        if (!sizeof($error))
3169 5418 acydburn
                        {
3170 5418 acydburn
                                $cache->destroy('sql', STYLES_TABLE);
3171 5418 acydburn
3172 5418 acydburn
                                $message = ($style_row['store_db']) ? '_ADDED_DB' : '_ADDED';
3173 5418 acydburn
                                trigger_error($user->lang[$l_type . $message] . adm_back_link($this->u_action));
3174 5418 acydburn
                        }
3175 5418 acydburn
                }
3176 5418 acydburn
3177 5418 acydburn
                if ($mode == 'style')
3178 5418 acydburn
                {
3179 5418 acydburn
                        foreach ($element_ary as $element => $table)
3180 5418 acydburn
                        {
3181 5418 acydburn
                                $sql = "SELECT {$element}_id, {$element}_name
3182 5953 naderman
                                        FROM $table
3183 5418 acydburn
                                        ORDER BY {$element}_id ASC";
3184 5418 acydburn
                                $result = $db->sql_query($sql);
3185 5418 acydburn
3186 5418 acydburn
                                ${$element . '_options'} = '';
3187 5418 acydburn
                                while ($row = $db->sql_fetchrow($result))
3188 5418 acydburn
                                {
3189 5418 acydburn
                                        $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : '';
3190 5418 acydburn
                                        ${$element . '_options'} .= '<option value="' . $row[$element . '_id'] . '"' . $selected . '>' . $row[$element . '_name'] . '</option>';
3191 5418 acydburn
                                }
3192 5418 acydburn
                                $db->sql_freeresult($result);
3193 5418 acydburn
                        }
3194 5418 acydburn
                }
3195 5418 acydburn
3196 5418 acydburn
                $this->page_title = 'ADD_' . $l_type;
3197 5418 acydburn
3198 5418 acydburn
                $template->assign_vars(array(
3199 5418 acydburn
                        'S_DETAILS'                        => true,
3200 5418 acydburn
                        'S_ADD'                                => true,
3201 5418 acydburn
                        'S_ERROR_MSG'                => (sizeof($error)) ? true : false,
3202 5418 acydburn
                        'S_STYLE'                        => ($mode == 'style') ? true : false,
3203 5418 acydburn
                        'S_TEMPLATE'                => ($mode == 'template') ? true : false,
3204 5418 acydburn
                        'S_THEME'                        => ($mode == 'theme') ? true : false,
3205 5418 acydburn
                        'S_BASIS'                        => ($basis) ? true : false,
3206 5418 acydburn
3207 5418 acydburn
                        'S_STORE_DB'                        => (isset($style_row['storedb'])) ? $style_row['storedb'] : 0,
3208 5418 acydburn
                        'S_STYLE_ACTIVE'                => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
3209 5418 acydburn
                        'S_STYLE_DEFAULT'                => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
3210 5418 acydburn
                        'S_TEMPLATE_OPTIONS'        => ($mode == 'style') ? $template_options : '',
3211 5418 acydburn
                        'S_THEME_OPTIONS'                => ($mode == 'style') ? $theme_options : '',
3212 5418 acydburn
                        'S_IMAGESET_OPTIONS'        => ($mode == 'style') ? $imageset_options : '',
3213 5418 acydburn
3214 5418 acydburn
                        'U_ACTION'                        => $this->u_action . '&amp;action=add&amp;basis=' . $basis,
3215 5418 acydburn
                        'U_BACK'                        => $this->u_action,
3216 5418 acydburn
3217 5418 acydburn
                        'L_TITLE'                                => $user->lang[$this->page_title],
3218 5418 acydburn
                        'L_EXPLAIN'                                => $user->lang[$this->page_title . '_EXPLAIN'],
3219 5418 acydburn
                        'L_NAME'                                => $user->lang[$l_type . '_NAME'],
3220 5418 acydburn
                        'L_LOCATION'                        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
3221 5418 acydburn
                        'L_LOCATION_EXPLAIN'        => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
3222 5418 acydburn
3223 5418 acydburn
                        'ERROR_MSG'                        => (sizeof($error)) ? implode('<br />', $error) : '',
3224 5418 acydburn
                        'NAME'                                => $style_row[$mode . '_name'],
3225 5418 acydburn
                        'COPYRIGHT'                        => $style_row[$mode . '_copyright'])
3226 5418 acydburn
                );
3227 5418 acydburn
3228 5418 acydburn
        }
3229 5953 naderman
3230 5418 acydburn
        /**
3231 7208 naderman
3232 7208 naderman
                                        $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false;
3233 7208 naderman
                                        $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false;
3234 7208 naderman
                                        $reqd_imageset = (isset($installcfg['required_imageset'])) ? $installcfg['required_imageset'] : false;
3235 7208 naderman
3236 7208 naderman
                                        // Check to see if each element is already installed, if it is grab the id
3237 7208 naderman
                                        foreach ($element_ary as $element => $table)
3238 7208 naderman
                                        {
3239 7208 naderman
                                                $style_row = array_merge($style_row, array(
3240 7208 naderman
                                                        $element . '_id'                        => 0,
3241 7208 naderman
                                                        $element . '_name'                        => '',
3242 7208 naderman
                                                        $element . '_copyright'                => '')
3243 7208 naderman
                                                );
3244 7208 naderman
3245 7208 naderman
                                                 $this->test_installed($element, $error, $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']);
3246 5416 acydburn
        * Is this element installed? If not, grab its cfg details
3247 5416 acydburn
        */
3248 5416 acydburn
        function test_installed($element, &$error, $root_path, $reqd_name, &$id, &$name, &$copyright)
3249 5416 acydburn
        {
3250 5416 acydburn
                global $db, $user;
3251 5416 acydburn
3252 5416 acydburn
                switch ($element)
3253 5416 acydburn
                {
3254 5416 acydburn
                        case 'template':
3255 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
3256 5416 acydburn
                        break;
3257 5953 naderman
3258 5416 acydburn
                        case 'theme':
3259 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
3260 5416 acydburn
                        break;
3261 5416 acydburn
3262 5416 acydburn
                        case 'imageset':
3263 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
3264 5416 acydburn
                        break;
3265 5416 acydburn
                }
3266 5416 acydburn
3267 5416 acydburn
                $l_element = strtoupper($element);
3268 5416 acydburn
3269 5416 acydburn
                $chk_name = ($reqd_name !== false) ? $reqd_name : $name;
3270 5416 acydburn
3271 5953 naderman
                $sql = "SELECT {$element}_id, {$element}_name
3272 5416 acydburn
                        FROM $sql_from
3273 5416 acydburn
                        WHERE {$element}_name = '" . $db->sql_escape($chk_name) . "'";
3274 5416 acydburn
                $result = $db->sql_query($sql);
3275 5416 acydburn
3276 5416 acydburn
                if ($row = $db->sql_fetchrow($result))
3277 5416 acydburn
                {
3278 5416 acydburn
                        $name = $row[$element . '_name'];
3279 5416 acydburn
                        $id = $row[$element . '_id'];
3280 5416 acydburn
                }
3281 5416 acydburn
                else
3282 5416 acydburn
                {
3283 5416 acydburn
                        if (!($cfg = @file("$root_path$element/$element.cfg")))
3284 5416 acydburn
                        {
3285 5416 acydburn
                                $error[] = sprintf($user->lang['REQUIRES_' . $l_element], $reqd_name);
3286 5416 acydburn
                                return false;
3287 5416 acydburn
                        }
3288 5416 acydburn
3289 5416 acydburn
                        $cfg = parse_cfg_file("$root_path$element/$element.cfg", $cfg);
3290 5953 naderman
3291 5416 acydburn
                        $name = $cfg['name'];
3292 5416 acydburn
                        $copyright = $cfg['copyright'];
3293 5416 acydburn
                        $id = 0;
3294 5416 acydburn
3295 5416 acydburn
                        unset($cfg);
3296 5416 acydburn
                }
3297 5416 acydburn
                $db->sql_freeresult($result);
3298 5416 acydburn
        }
3299 5416 acydburn
3300 5416 acydburn
        /**
3301 5416 acydburn
        * Install/Add style
3302 5416 acydburn
        */
3303 7208 naderman
        function install_style(&$error, $action, $root_path, &$id, $name, $path, $copyright, $active, $default, &$style_row, $template_root_path = false, $template_path = false, $theme_root_path = false, $theme_path = false, $imageset_root_path = false, $imageset_path = false)
3304 5416 acydburn
        {
3305 5416 acydburn
                global $config, $db, $user;
3306 5416 acydburn
3307 5416 acydburn
                $element_ary = array('template', 'theme', 'imageset');
3308 5678 acydburn
3309 5416 acydburn
                if (!$name)
3310 5416 acydburn
                {
3311 5678 acydburn
                        $error[] = $user->lang['STYLE_ERR_STYLE_NAME'];
3312 5416 acydburn
                }
3313 5416 acydburn
3314 5416 acydburn
                // Check length settings
3315 6452 acydburn
                if (utf8_strlen($name) > 30)
3316 5416 acydburn
                {
3317 5678 acydburn
                        $error[] = $user->lang['STYLE_ERR_NAME_LONG'];
3318 5416 acydburn
                }
3319 5416 acydburn
3320 6452 acydburn
                if (utf8_strlen($copyright) > 60)
3321 5416 acydburn
                {
3322 5678 acydburn
                        $error[] = $user->lang['STYLE_ERR_COPY_LONG'];
3323 5416 acydburn
                }
3324 5416 acydburn
3325 5416 acydburn
                // Check if the name already exist
3326 5416 acydburn
                $sql = 'SELECT style_id
3327 5416 acydburn
                        FROM ' . STYLES_TABLE . "
3328 5416 acydburn
                        WHERE style_name = '" . $db->sql_escape($name) . "'";
3329 5416 acydburn
                $result = $db->sql_query($sql);
3330 5416 acydburn
                $row = $db->sql_fetchrow($result);
3331 5416 acydburn
                $db->sql_freeresult($result);
3332 5416 acydburn
3333 5416 acydburn
                if ($row)
3334 5416 acydburn
                {
3335 5678 acydburn
                        $error[] = $user->lang['STYLE_ERR_NAME_EXIST'];
3336 5416 acydburn
                }
3337 5416 acydburn
3338 5416 acydburn
                if (sizeof($error))
3339 5416 acydburn
                {
3340 5416 acydburn
                        return false;
3341 5416 acydburn
                }
3342 5416 acydburn
3343 5416 acydburn
                foreach ($element_ary as $element)
3344 5416 acydburn
                {
3345 5416 acydburn
                        // Zero id value ... need to install element ... run usual checks
3346 5416 acydburn
                        // and do the install if necessary
3347 5416 acydburn
                        if (!$style_row[$element . '_id'])
3348 5416 acydburn
                        {
3349 7208 naderman
                                $this->install_element($element, $error, $action, (${$element . '_root_path'}) ? ${$element . '_root_path'} : $root_path, $style_row[$element . '_id'], $style_row[$element . '_name'], (${$element . '_path'}) ? ${$element . '_path'} : $path, $style_row[$element . '_copyright']);
3350 5416 acydburn
                        }
3351 5416 acydburn
                }
3352 5416 acydburn
3353 5416 acydburn
                if (!$style_row['template_id'] || !$style_row['theme_id'] || !$style_row['imageset_id'])
3354 5416 acydburn
                {
3355 5416 acydburn
                        $error[] = $user->lang['STYLE_ERR_NO_IDS'];
3356 5416 acydburn
                }
3357 5416 acydburn
3358 5416 acydburn
                if (sizeof($error))
3359 5416 acydburn
                {
3360 5416 acydburn
                        return false;
3361 5416 acydburn
                }
3362 5416 acydburn
3363 5416 acydburn
                $db->sql_transaction('begin');
3364 5416 acydburn
3365 5416 acydburn
                $sql_ary = array(
3366 5953 naderman
                        'style_name'                => $name,
3367 5953 naderman
                        'style_copyright'        => $copyright,
3368 8168 acydburn
                        'style_active'                => (int) $active,
3369 8168 acydburn
                        'template_id'                => (int) $style_row['template_id'],
3370 8168 acydburn
                        'theme_id'                        => (int) $style_row['theme_id'],
3371 8168 acydburn
                        'imageset_id'                => (int) $style_row['imageset_id'],
3372 5416 acydburn
                );
3373 5416 acydburn
3374 5953 naderman
                $sql = 'INSERT INTO ' . STYLES_TABLE . '
3375 6930 acydburn
                        ' . $db->sql_build_array('INSERT', $sql_ary);
3376 5416 acydburn
                $db->sql_query($sql);
3377 5416 acydburn
3378 5416 acydburn
                $id = $db->sql_nextid();
3379 5416 acydburn
3380 5416 acydburn
                if ($default)
3381 5416 acydburn
                {
3382 5953 naderman
                        $sql = 'UPDATE ' . USERS_TABLE . "
3383 5953 naderman
                                SET user_style = $id
3384 5416 acydburn
                                WHERE user_style = " . $config['default_style'];
3385 5416 acydburn
                        $db->sql_query($sql);
3386 5416 acydburn
3387 5416 acydburn
                        set_config('default_style', $id);
3388 5416 acydburn
                }
3389 5416 acydburn
3390 5416 acydburn
                $db->sql_transaction('commit');
3391 5416 acydburn
3392 5416 acydburn
                add_log('admin', 'LOG_STYLE_ADD', $name);
3393 5416 acydburn
        }
3394 5416 acydburn
3395 5416 acydburn
        /**
3396 5416 acydburn
        * Install/add an element, doing various checks as we go
3397 5416 acydburn
        */
3398 6063 naderman
        function install_element($mode, &$error, $action, $root_path, &$id, $name, $path, $copyright, $store_db = 0)
3399 5416 acydburn
        {
3400 5416 acydburn
                global $phpbb_root_path, $db, $user;
3401 5416 acydburn
3402 8697 Kellanved
                // we parse the cfg here (again)
3403 8697 Kellanved
                $cfg_data = parse_cfg_file("$root_path$mode/$mode.cfg");
3404 8783 acydburn
3405 5416 acydburn
                switch ($mode)
3406 5416 acydburn
                {
3407 5416 acydburn
                        case 'template':
3408 6021 acydburn
                                $sql_from = STYLES_TEMPLATE_TABLE;
3409 5416 acydburn
                        break;
3410 5416 acydburn
3411 5416 acydburn
                        case 'theme':
3412 6021 acydburn
                                $sql_from = STYLES_THEME_TABLE;
3413 5416 acydburn
                        break;
3414 5953 naderman
3415 5416 acydburn
                        case 'imageset':
3416 6021 acydburn
                                $sql_from = STYLES_IMAGESET_TABLE;
3417 5416 acydburn
                        break;
3418 5416 acydburn
                }
3419 5416 acydburn
3420 5416 acydburn
                $l_type = strtoupper($mode);
3421 5416 acydburn
3422 5416 acydburn
                if (!$name)
3423 5416 acydburn
                {
3424 5416 acydburn
                        $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME'];
3425 5416 acydburn
                }
3426 5416 acydburn
3427 5416 acydburn
                // Check length settings
3428 6452 acydburn
                if (utf8_strlen($name) > 30)
3429 5416 acydburn
                {
3430 5416 acydburn
                        $error[] = $user->lang[$l_type . '_ERR_NAME_LONG'];
3431 5416 acydburn
                }
3432 5416 acydburn
3433 6452 acydburn
                if (utf8_strlen($copyright) > 60)
3434 5416 acydburn
                {
3435 5416 acydburn
                        $error[] = $user->lang[$l_type . '_ERR_COPY_LONG'];
3436 5416 acydburn
                }
3437 5416 acydburn
3438 5416 acydburn
                // Check if the name already exist
3439 5416 acydburn
                $sql = "SELECT {$mode}_id
3440 5416 acydburn
                        FROM $sql_from
3441 5416 acydburn
                        WHERE {$mode}_name = '" . $db->sql_escape($name) . "'";
3442 5416 acydburn
                $result = $db->sql_query($sql);
3443 5416 acydburn
                $row = $db->sql_fetchrow($result);
3444 5416 acydburn
                $db->sql_freeresult($result);
3445 5416 acydburn
3446 5416 acydburn
                if ($row)
3447 5416 acydburn
                {
3448 7304 davidmj
                        // If it exist, we just use the style on installation
3449 5416 acydburn
                        if ($action == 'install')
3450 5416 acydburn
                        {
3451 5416 acydburn
                                $id = $row[$mode . '_id'];
3452 5416 acydburn
                                return false;
3453 5416 acydburn
                        }
3454 5416 acydburn
3455 5416 acydburn
                        $error[] = $user->lang[$l_type . '_ERR_NAME_EXIST'];
3456 5416 acydburn
                }
3457 5416 acydburn
3458 8697 Kellanved
                if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from'])
3459 8697 Kellanved
                {
3460 9408 Kellanved
                        if ($mode === 'template')
3461 9408 Kellanved
                        {
3462 9514 Kellanved
                                $select_bf = ', bbcode_bitfield';
3463 9408 Kellanved
                        }
3464 9408 Kellanved
                        else
3465 9408 Kellanved
                        {
3466 9408 Kellanved
                                $select_bf = '';
3467 9408 Kellanved
                        }
3468 9458 acydburn
3469 9446 Kellanved
                        $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path, {$mode}_storedb $select_bf
3470 8697 Kellanved
                                FROM $sql_from
3471 9063 Kellanved
                                WHERE {$mode}_name = '" . $db->sql_escape($cfg_data['inherit_from']) . "'
3472 8697 Kellanved
                                        AND {$mode}_inherits_id = 0";
3473 8697 Kellanved
                        $result = $db->sql_query($sql);
3474 8697 Kellanved
                        $row = $db->sql_fetchrow($result);
3475 8697 Kellanved
                        $db->sql_freeresult($result);
3476 8697 Kellanved
                        if (!$row)
3477 8697 Kellanved
                        {
3478 8943 acydburn
                                $error[] = sprintf($user->lang[$l_type . '_ERR_REQUIRED_OR_INCOMPLETE'], $cfg_data['inherit_from']);
3479 8697 Kellanved
                        }
3480 8697 Kellanved
                        else
3481 8697 Kellanved
                        {
3482 8697 Kellanved
                                $inherit_id = $row["{$mode}_id"];
3483 8697 Kellanved
                                $inherit_path = $row["{$mode}_path"];
3484 9514 Kellanved
                                $inherit_bf = ($mode === 'template') ? $row["bbcode_bitfield"] : false;
3485 8697 Kellanved
                                $cfg_data['store_db'] = $row["{$mode}_storedb"];
3486 8697 Kellanved
                                $store_db = $row["{$mode}_storedb"];
3487 8697 Kellanved
                        }
3488 8697 Kellanved
                }
3489 8697 Kellanved
                else
3490 8697 Kellanved
                {
3491 8697 Kellanved
                        $inherit_id = 0;
3492 8697 Kellanved
                        $inherit_path = '';
3493 9447 Kellanved
                        $inherit_bf = false;
3494 8697 Kellanved
                }
3495 8697 Kellanved
3496 5416 acydburn
                if (sizeof($error))
3497 5416 acydburn
                {
3498 5416 acydburn
                        return false;
3499 5416 acydburn
                }
3500 5953 naderman
3501 5416 acydburn
                $sql_ary = array(
3502 5416 acydburn
                        $mode . '_name'                        => $name,
3503 5953 naderman
                        $mode . '_copyright'        => $copyright,
3504 5416 acydburn
                        $mode . '_path'                        => $path,
3505 5416 acydburn
                );
3506 5416 acydburn
3507 6254 naderman
                switch ($mode)
3508 5416 acydburn
                {
3509 6254 naderman
                        case 'template':
3510 7158 acydburn
                                // We check if the template author defined a different bitfield
3511 7158 acydburn
                                if (!empty($cfg_data['template_bitfield']))
3512 7158 acydburn
                                {
3513 7158 acydburn
                                        $sql_ary['bbcode_bitfield'] = $cfg_data['template_bitfield'];
3514 7158 acydburn
                                }
3515 9408 Kellanved
                                else if ($inherit_bf)
3516 9408 Kellanved
                                {
3517 9408 Kellanved
                                        $sql_ary['bbcode_bitfield'] = $inherit_bf;
3518 9408 Kellanved
                                }
3519 7158 acydburn
                                else
3520 7158 acydburn
                                {
3521 7158 acydburn
                                        $sql_ary['bbcode_bitfield'] = TEMPLATE_BITFIELD;
3522 7158 acydburn
                                }
3523 7158 acydburn
3524 6254 naderman
                                // We set a pre-defined bitfield here which we may use further in 3.2
3525 6254 naderman
                                $sql_ary += array(
3526 8697 Kellanved
                                        'template_storedb'                => $store_db,
3527 6254 naderman
                                );
3528 8697 Kellanved
                                if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from'])
3529 8697 Kellanved
                                {
3530 8697 Kellanved
                                        $sql_ary += array(
3531 8697 Kellanved
                                                'template_inherits_id'        => $inherit_id,
3532 8697 Kellanved
                                                'template_inherit_path' => $inherit_path,
3533 8697 Kellanved
                                        );
3534 8697 Kellanved
                                }
3535 6254 naderman
                        break;
3536 5416 acydburn
3537 6254 naderman
                        case 'theme':
3538 6254 naderman
                                // We are only interested in the theme configuration for now
3539 5416 acydburn
3540 8697 Kellanved
                                if (isset($cfg_data['parse_css_file']) && $cfg_data['parse_css_file'])
3541 6254 naderman
                                {
3542 6254 naderman
                                        $store_db = 1;
3543 6254 naderman
                                }
3544 6237 acydburn
3545 6254 naderman
                                $sql_ary += array(
3546 6254 naderman
                                        'theme_storedb'        => $store_db,
3547 6254 naderman
                                        'theme_data'        => ($store_db) ? $this->db_theme_data($sql_ary, false, $root_path) : '',
3548 8168 acydburn
                                        'theme_mtime'        => (int) filemtime("{$phpbb_root_path}styles/$path/theme/stylesheet.css")
3549 6254 naderman
                                );
3550 6254 naderman
                        break;
3551 6254 naderman
3552 7304 davidmj
                        // all the heavy lifting is done later
3553 6254 naderman
                        case 'imageset':
3554 6254 naderman
                        break;
3555 5416 acydburn
                }
3556 5416 acydburn
3557 5416 acydburn
                $db->sql_transaction('begin');
3558 5416 acydburn
3559 5953 naderman
                $sql = "INSERT INTO $sql_from
3560 6238 davidmj
                        " . $db->sql_build_array('INSERT', $sql_ary);
3561 5416 acydburn
                $db->sql_query($sql);
3562 5416 acydburn
3563 5416 acydburn
                $id = $db->sql_nextid();
3564 5416 acydburn
3565 5953 naderman
                if ($mode == 'template' && $store_db)
3566 5416 acydburn
                {
3567 5416 acydburn
                        $filelist = filelist("{$root_path}template", '', 'html');
3568 6063 naderman
                        $this->store_templates('insert', $id, $path, $filelist);
3569 5416 acydburn
                }
3570 7304 davidmj
                else if ($mode == 'imageset')
3571 7304 davidmj
                {
3572 7304 davidmj
                        $cfg_data = parse_cfg_file("$root_path$mode/imageset.cfg");
3573 5416 acydburn
3574 7304 davidmj
                        $imageset_definitions = array();
3575 7304 davidmj
                        foreach ($this->imageset_keys as $topic => $key_array)
3576 7304 davidmj
                        {
3577 7304 davidmj
                                $imageset_definitions = array_merge($imageset_definitions, $key_array);
3578 7304 davidmj
                        }
3579 7304 davidmj
3580 7304 davidmj
                        foreach ($cfg_data as $key => $value)
3581 7304 davidmj
                        {
3582 7304 davidmj
                                if (strpos($value, '*') !== false)
3583 7304 davidmj
                                {
3584 7304 davidmj
                                        if (substr($value, -1, 1) === '*')
3585 7304 davidmj
                                        {
3586 7304 davidmj
                                                list($image_filename, $image_height) = explode('*', $value);
3587 7304 davidmj
                                                $image_width = 0;
3588 7304 davidmj
                                        }
3589 7304 davidmj
                                        else
3590 7304 davidmj
                                        {
3591 7304 davidmj
                                                list($image_filename, $image_height, $image_width) = explode('*', $value);
3592 7304 davidmj
                                        }
3593 7304 davidmj
                                }
3594 7304 davidmj
                                else
3595 7304 davidmj
                                {
3596 7304 davidmj
                                        $image_filename = $value;
3597 7304 davidmj
                                        $image_height = $image_width = 0;
3598 7304 davidmj
                                }
3599 7304 davidmj
3600 8168 acydburn
                                if (strpos($key, 'img_') === 0 && $image_filename)
3601 7304 davidmj
                                {
3602 7304 davidmj
                                        $key = substr($key, 4);
3603 7304 davidmj
                                        if (in_array($key, $imageset_definitions))
3604 7304 davidmj
                                        {
3605 7304 davidmj
                                                $sql_ary = array(
3606 7304 davidmj
                                                        'image_name'                => $key,
3607 7304 davidmj
                                                        'image_filename'        => str_replace('{PATH}', "styles/$path/imageset/", trim($image_filename)),
3608 8168 acydburn
                                                        'image_height'                => (int) $image_height,
3609 8168 acydburn
                                                        'image_width'                => (int) $image_width,
3610 8168 acydburn
                                                        'imageset_id'                => (int) $id,
3611 7304 davidmj
                                                        'image_lang'                => '',
3612 7304 davidmj
                                                );
3613 7304 davidmj
                                                $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
3614 7304 davidmj
                                        }
3615 7304 davidmj
                                }
3616 7304 davidmj
                        }
3617 7304 davidmj
                        unset($cfg_data);
3618 7304 davidmj
3619 7304 davidmj
                        $sql = 'SELECT lang_dir
3620 7304 davidmj
                                FROM ' . LANG_TABLE;
3621 7304 davidmj
                        $result = $db->sql_query($sql);
3622 7304 davidmj
3623 7304 davidmj
                        while ($row = $db->sql_fetchrow($result))
3624 7304 davidmj
                        {
3625 7304 davidmj
                                if (@file_exists("$root_path$mode/{$row['lang_dir']}/imageset.cfg"))
3626 7304 davidmj
                                {
3627 7304 davidmj
                                        $cfg_data_imageset_data = parse_cfg_file("$root_path$mode/{$row['lang_dir']}/imageset.cfg");
3628 7304 davidmj
                                        foreach ($cfg_data_imageset_data as $image_name => $value)
3629 7304 davidmj
                                        {
3630 7304 davidmj
                                                if (strpos($value, '*') !== false)
3631 7304 davidmj
                                                {
3632 7304 davidmj
                                                        if (substr($value, -1, 1) === '*')
3633 7304 davidmj
                                                        {
3634 7304 davidmj
                                                                list($image_filename, $image_height) = explode('*', $value);
3635 7304 davidmj
                                                                $image_width = 0;
3636 7304 davidmj
                                                        }
3637 7304 davidmj
                                                        else
3638 7304 davidmj
                                                        {
3639 7304 davidmj
                                                                list($image_filename, $image_height, $image_width) = explode('*', $value);
3640 7304 davidmj
                                                        }
3641 7304 davidmj
                                                }
3642 7304 davidmj
                                                else
3643 7304 davidmj
                                                {
3644 7304 davidmj
                                                        $image_filename = $value;
3645 7304 davidmj
                                                        $image_height = $image_width = 0;
3646 7304 davidmj
                                                }
3647 7304 davidmj
3648 7304 davidmj
                                                if (strpos($image_name, 'img_') === 0 && $image_filename)
3649 7304 davidmj
                                                {
3650 7304 davidmj
                                                        $image_name = substr($image_name, 4);
3651 7304 davidmj
                                                        if (in_array($image_name, $imageset_definitions))
3652 7304 davidmj
                                                        {
3653 7304 davidmj
                                                                $sql_ary = array(
3654 7304 davidmj
                                                                        'image_name'                => $image_name,
3655 7304 davidmj
                                                                        'image_filename'        => $image_filename,
3656 8168 acydburn
                                                                        'image_height'                => (int) $image_height,
3657 8168 acydburn
                                                                        'image_width'                => (int) $image_width,
3658 8168 acydburn
                                                                        'imageset_id'                => (int) $id,
3659 7304 davidmj
                                                                        'image_lang'                => $row['lang_dir'],
3660 7304 davidmj
                                                                );
3661 7304 davidmj
                                                                $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
3662 7304 davidmj
                                                        }
3663 7304 davidmj
                                                }
3664 7304 davidmj
                                        }
3665 7304 davidmj
                                        unset($cfg_data_imageset_data);
3666 7304 davidmj
                                }
3667 7304 davidmj
                        }
3668 7304 davidmj
                        $db->sql_freeresult($result);
3669 7304 davidmj
                }
3670 7304 davidmj
3671 5416 acydburn
                $db->sql_transaction('commit');
3672 5416 acydburn
3673 5416 acydburn
                $log = ($store_db) ? 'LOG_' . $l_type . '_ADD_DB' : 'LOG_' . $l_type . '_ADD_FS';
3674 5416 acydburn
                add_log('admin', $log, $name);
3675 6007 naderman
3676 6007 naderman
                // Return store_db in case it had to be altered
3677 6007 naderman
                return $store_db;
3678 5416 acydburn
        }
3679 8783 acydburn
3680 8697 Kellanved
        /**
3681 8697 Kellanved
        * Checks downwards dependencies
3682 8697 Kellanved
        *
3683 8783 acydburn
        * @access public
3684 8697 Kellanved
        * @param string $mode The element type to check - only template is supported
3685 8697 Kellanved
        * @param int $id The template id
3686 8700 Kellanved
        * @returns false if no component inherits, array with name, path and id for each subtemplate otherwise
3687 8697 Kellanved
        */
3688 8697 Kellanved
        function check_inheritance($mode, $id)
3689 8697 Kellanved
        {
3690 8697 Kellanved
                global $db;
3691 8783 acydburn
3692 8697 Kellanved
                $l_type = strtoupper($mode);
3693 5418 acydburn
3694 8697 Kellanved
                switch ($mode)
3695 8697 Kellanved
                {
3696 8697 Kellanved
                        case 'template':
3697 8697 Kellanved
                                $sql_from = STYLES_TEMPLATE_TABLE;
3698 8697 Kellanved
                        break;
3699 8697 Kellanved
3700 8697 Kellanved
                        case 'theme':
3701 8697 Kellanved
                                $sql_from = STYLES_THEME_TABLE;
3702 8697 Kellanved
                        break;
3703 8697 Kellanved
3704 8697 Kellanved
                        case 'imageset':
3705 8697 Kellanved
                                $sql_from = STYLES_IMAGESET_TABLE;
3706 8697 Kellanved
                        break;
3707 8697 Kellanved
                }
3708 8697 Kellanved
3709 8697 Kellanved
                $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
3710 8697 Kellanved
                        FROM $sql_from
3711 8697 Kellanved
                        WHERE {$mode}_inherits_id = " . (int) $id;
3712 8697 Kellanved
                $result = $db->sql_query($sql);
3713 8697 Kellanved
3714 8783 acydburn
                $names = array();
3715 8697 Kellanved
                while ($row = $db->sql_fetchrow($result))
3716 8697 Kellanved
                {
3717 8783 acydburn
3718 8697 Kellanved
                        $names[$row["{$mode}_id"]] = array(
3719 8697 Kellanved
                                "{$mode}_id" => $row["{$mode}_id"],
3720 8697 Kellanved
                                "{$mode}_name" => $row["{$mode}_name"],
3721 8697 Kellanved
                                "{$mode}_path" => $row["{$mode}_path"],
3722 8697 Kellanved
                        );
3723 8697 Kellanved
                }
3724 8697 Kellanved
                $db->sql_freeresult($result);
3725 8697 Kellanved
3726 8697 Kellanved
                if (sizeof($names))
3727 8697 Kellanved
                {
3728 8697 Kellanved
                        return $names;
3729 8697 Kellanved
                }
3730 8697 Kellanved
                else
3731 8697 Kellanved
                {
3732 8697 Kellanved
                        return false;
3733 8697 Kellanved
                }
3734 8697 Kellanved
        }
3735 8783 acydburn
3736 8697 Kellanved
        /**
3737 8697 Kellanved
        * Checks upwards dependencies
3738 8697 Kellanved
        *
3739 8783 acydburn
        * @access public
3740 8697 Kellanved
        * @param string $mode The element type to check - only template is supported
3741 8697 Kellanved
        * @param int $id The template id
3742 8697 Kellanved
        * @returns false if the component does not inherit, array with name, path and id otherwise
3743 8697 Kellanved
        */
3744 8697 Kellanved
        function get_super($mode, $id)
3745 8697 Kellanved
        {
3746 8697 Kellanved
                global $db;
3747 8783 acydburn
3748 8697 Kellanved
                $l_type = strtoupper($mode);
3749 8697 Kellanved
3750 8697 Kellanved
                switch ($mode)
3751 8697 Kellanved
                {
3752 8697 Kellanved
                        case 'template':
3753 8697 Kellanved
                                $sql_from = STYLES_TEMPLATE_TABLE;
3754 8697 Kellanved
                        break;
3755 8697 Kellanved
3756 8697 Kellanved
                        case 'theme':
3757 8697 Kellanved
                                $sql_from = STYLES_THEME_TABLE;
3758 8697 Kellanved
                        break;
3759 8697 Kellanved
3760 8697 Kellanved
                        case 'imageset':
3761 8697 Kellanved
                                $sql_from = STYLES_IMAGESET_TABLE;
3762 8697 Kellanved
                        break;
3763 8697 Kellanved
                }
3764 8783 acydburn
3765 8783 acydburn
                $sql = "SELECT {$mode}_inherits_id
3766 8697 Kellanved
                        FROM $sql_from
3767 8697 Kellanved
                        WHERE {$mode}_id = " . (int) $id;
3768 8697 Kellanved
                $result = $db->sql_query_limit($sql, 1);
3769 8783 acydburn
3770 8697 Kellanved
                if ($row = $db->sql_fetchrow($result))
3771 8697 Kellanved
                {
3772 8697 Kellanved
                        $db->sql_freeresult($result);
3773 8697 Kellanved
                }
3774 8697 Kellanved
                else
3775 8697 Kellanved
                {
3776 8697 Kellanved
                        return false;
3777 8697 Kellanved
                }
3778 8783 acydburn
3779 8697 Kellanved
                $super_id = $row["{$mode}_inherits_id"];
3780 8783 acydburn
3781 8783 acydburn
                $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
3782 8697 Kellanved
                        FROM $sql_from
3783 8697 Kellanved
                        WHERE {$mode}_id = " . (int) $super_id;
3784 8697 Kellanved
3785 8697 Kellanved
                $result = $db->sql_query_limit($sql, 1);
3786 8697 Kellanved
                if ($row = $db->sql_fetchrow($result))
3787 8697 Kellanved
                {
3788 8697 Kellanved
                        $db->sql_freeresult($result);
3789 8697 Kellanved
                        return $row;
3790 8697 Kellanved
                }
3791 8783 acydburn
3792 8697 Kellanved
                return false;
3793 8697 Kellanved
        }
3794 8783 acydburn
3795 8697 Kellanved
        /**
3796 8697 Kellanved
        * Moves a template set and its subtemplates to the database
3797 8697 Kellanved
        *
3798 8783 acydburn
        * @access public
3799 8697 Kellanved
        * @param string $mode The component to move - only template is supported
3800 8697 Kellanved
        * @param int $id The template id
3801 8697 Kellanved
        */
3802 8697 Kellanved
        function store_in_db($mode, $id)
3803 8697 Kellanved
        {
3804 8697 Kellanved
                global $db, $user;
3805 8783 acydburn
3806 8697 Kellanved
                $error = array();
3807 8697 Kellanved
                $l_type = strtoupper($mode);
3808 8697 Kellanved
                if ($super = $this->get_super($mode, $id))
3809 8697 Kellanved
                {
3810 8697 Kellanved
                        $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
3811 8697 Kellanved
                        return $error;
3812 8697 Kellanved
                }
3813 8783 acydburn
3814 8697 Kellanved
                $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
3815 8783 acydburn
                        FROM " . STYLES_TEMPLATE_TABLE . '
3816 8697 Kellanved
                        WHERE template_id = ' . (int) $id;
3817 8697 Kellanved
3818 8697 Kellanved
                $result = $db->sql_query_limit($sql, 1);
3819 8697 Kellanved
                if ($row = $db->sql_fetchrow($result))
3820 8697 Kellanved
                {
3821 8697 Kellanved
                        $db->sql_freeresult($result);
3822 8697 Kellanved
                        $subs = $this->check_inheritance($mode, $id);
3823 8697 Kellanved
3824 8697 Kellanved
                        $this->_store_in_db($mode, $id, $row["{$mode}_path"]);
3825 8697 Kellanved
                        if ($subs && sizeof($subs))
3826 8697 Kellanved
                        {
3827 8697 Kellanved
                                foreach ($subs as $sub_id => $sub)
3828 8697 Kellanved
                                {
3829 8697 Kellanved
                                        if ($err = $this->_store_in_db($mode, $sub["{$mode}_id"], $sub["{$mode}_path"]))
3830 8697 Kellanved
                                        {
3831 8697 Kellanved
                                                $error[] = $err;
3832 8697 Kellanved
                                        }
3833 8697 Kellanved
                                }
3834 8697 Kellanved
                        }
3835 8697 Kellanved
                }
3836 8697 Kellanved
                if (sizeof($error))
3837 8697 Kellanved
                {
3838 8697 Kellanved
                        return $error;
3839 8697 Kellanved
                }
3840 8783 acydburn
3841 8697 Kellanved
                return false;
3842 8697 Kellanved
        }
3843 8783 acydburn
3844 8697 Kellanved
        /**
3845 8697 Kellanved
        * Moves a template set to the database
3846 8697 Kellanved
        *
3847 8783 acydburn
        * @access private
3848 8697 Kellanved
        * @param string $mode The component to move - only template is supported
3849 8697 Kellanved
        * @param int $id The template id
3850 8697 Kellanved
        * @param string $path TThe path to the template files
3851 8697 Kellanved
        */
3852 8697 Kellanved
        function _store_in_db($mode, $id, $path)
3853 8697 Kellanved
        {
3854 8697 Kellanved
                global $phpbb_root_path, $db;
3855 8783 acydburn
3856 8697 Kellanved
                $filelist = filelist("{$phpbb_root_path}styles/{$path}/template", '', 'html');
3857 8697 Kellanved
                $this->store_templates('insert', $id, $path, $filelist);
3858 8783 acydburn
3859 8697 Kellanved
                // Okay, we do the query here -shouldn't be triggered often.
3860 8697 Kellanved
                $sql = 'UPDATE ' . STYLES_TEMPLATE_TABLE . '
3861 8697 Kellanved
                                                SET template_storedb = 1
3862 8697 Kellanved
                                                WHERE template_id = ' . $id;
3863 8697 Kellanved
                $db->sql_query($sql);
3864 8697 Kellanved
        }
3865 8783 acydburn
3866 8697 Kellanved
        /**
3867 8697 Kellanved
        * Moves a template set and its subtemplates to the filesystem
3868 8697 Kellanved
        *
3869 8783 acydburn
        * @access public
3870 8697 Kellanved
        * @param string $mode The component to move - only template is supported
3871 8697 Kellanved
        * @param int $id The template id
3872 8697 Kellanved
        */
3873 8697 Kellanved
        function store_in_fs($mode, $id)
3874 8697 Kellanved
        {
3875 8697 Kellanved
                global $db, $user;
3876 8783 acydburn
3877 8697 Kellanved
                $error = array();
3878 8697 Kellanved
                $l_type = strtoupper($mode);
3879 8697 Kellanved
                if ($super = $this->get_super($mode, $id))
3880 8697 Kellanved
                {
3881 8697 Kellanved
                        $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
3882 8697 Kellanved
                        return($error);
3883 8697 Kellanved
                }
3884 8783 acydburn
3885 8697 Kellanved
                $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
3886 8697 Kellanved
                        FROM " . STYLES_TEMPLATE_TABLE . '
3887 8697 Kellanved
                        WHERE template_id = ' . (int) $id;
3888 8697 Kellanved
3889 8697 Kellanved
                $result = $db->sql_query_limit($sql, 1);
3890 8697 Kellanved
                if ($row = $db->sql_fetchrow($result))
3891 8697 Kellanved
                {
3892 8697 Kellanved
                        $db->sql_freeresult($result);
3893 8697 Kellanved
                        if (!sizeof($error))
3894 8697 Kellanved
                        {
3895 8697 Kellanved
                                $subs = $this->check_inheritance($mode, $id);
3896 8783 acydburn
3897 8697 Kellanved
                                $this->_store_in_fs($mode, $id, $row["{$mode}_path"]);
3898 8783 acydburn
3899 8697 Kellanved
                                if ($subs && sizeof($subs))
3900 8697 Kellanved
                                {
3901 8697 Kellanved
                                        foreach ($subs as $sub_id => $sub)
3902 8697 Kellanved
                                        {
3903 8697 Kellanved
                                                $this->_store_in_fs($mode, $sub["{$mode}_id"], $sub["{$mode}_path"]);
3904 8697 Kellanved
                                        }
3905 8697 Kellanved
                                }
3906 8697 Kellanved
                        }
3907 8697 Kellanved
                        if (sizeof($error))
3908 8697 Kellanved
                        {
3909 8697 Kellanved
                                $this->store_in_db($id, $mode);
3910 8697 Kellanved
                                return $error;
3911 8697 Kellanved
                        }
3912 8697 Kellanved
                }
3913 8697 Kellanved
                return false;
3914 8697 Kellanved
        }
3915 8783 acydburn
3916 8697 Kellanved
        /**
3917 8697 Kellanved
        * Moves a template set to the filesystem
3918 8697 Kellanved
        *
3919 8783 acydburn
        * @access private
3920 8697 Kellanved
        * @param string $mode The component to move - only template is supported
3921 8697 Kellanved
        * @param int $id The template id
3922 8697 Kellanved
        * @param string $path The path to the template
3923 8697 Kellanved
        */
3924 8697 Kellanved
        function _store_in_fs($mode, $id, $path)
3925 8697 Kellanved
        {
3926 8697 Kellanved
                global $phpbb_root_path, $db, $user, $safe_mode;
3927 8783 acydburn
3928 8697 Kellanved
                $store_db = 0;
3929 8697 Kellanved
                $error = array();
3930 10757 git-gate
                if (!$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$path}/template"))
3931 8697 Kellanved
                {
3932 8697 Kellanved
                        $sql = 'SELECT *
3933 8697 Kellanved
                                        FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
3934 8697 Kellanved
                                        WHERE template_id = $id";
3935 8697 Kellanved
                        $result = $db->sql_query($sql);
3936 8697 Kellanved
3937 8697 Kellanved
                        while ($row = $db->sql_fetchrow($result))
3938 8697 Kellanved
                        {
3939 8697 Kellanved
                                if (!($fp = @fopen("{$phpbb_root_path}styles/{$path}/template/" . $row['template_filename'], 'wb')))
3940 8697 Kellanved
                                {
3941 8697 Kellanved
                                        $store_db = 1;
3942 8697 Kellanved
                                        $error[] = $user->lang['EDIT_TEMPLATE_STORED_DB'];
3943 8697 Kellanved
                                        break;
3944 8697 Kellanved
                                }
3945 8697 Kellanved
3946 8697 Kellanved
                                fwrite($fp, $row['template_data']);
3947 8697 Kellanved
                                fclose($fp);
3948 8697 Kellanved
                        }
3949 8697 Kellanved
                        $db->sql_freeresult($result);
3950 8697 Kellanved
3951 8697 Kellanved
                        if (!$store_db)
3952 8697 Kellanved
                        {
3953 8697 Kellanved
                                $sql = 'DELETE FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
3954 8697 Kellanved
                                                WHERE template_id = $id";
3955 8697 Kellanved
                                $db->sql_query($sql);
3956 8697 Kellanved
                        }
3957 8697 Kellanved
                }
3958 8697 Kellanved
                if (sizeof($error))
3959 8697 Kellanved
                {
3960 8697 Kellanved
                        return $error;
3961 8697 Kellanved
                }
3962 8697 Kellanved
                $sql = 'UPDATE ' . STYLES_TEMPLATE_TABLE . '
3963 8697 Kellanved
                                SET template_storedb = 0
3964 8697 Kellanved
                                WHERE template_id = ' . $id;
3965 8697 Kellanved
                $db->sql_query($sql);
3966 8783 acydburn
3967 8697 Kellanved
                return false;
3968 8697 Kellanved
        }
3969 8697 Kellanved
3970 5388 acydburn
}
3971 5388 acydburn
3972 5388 acydburn
?>