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

View | Annotate | Download (60.9 KB)

1 5330 acydburn
<?php
2 7736 acydburn
/**
3 5330 acydburn
*
4 5330 acydburn
* @package acp
5 5330 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 5330 acydburn
*
9 5330 acydburn
*/
10 5330 acydburn
11 5330 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 5330 acydburn
* @package acp
21 5330 acydburn
*/
22 5330 acydburn
class acp_forums
23 5330 acydburn
{
24 5558 acydburn
        var $u_action;
25 5330 acydburn
        var $parent_id = 0;
26 6015 acydburn
27 5330 acydburn
        function main($id, $mode)
28 5330 acydburn
        {
29 5643 acydburn
                global $db, $user, $auth, $template, $cache;
30 6015 acydburn
                global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
31 5330 acydburn
32 5330 acydburn
                $user->add_lang('acp/forums');
33 5330 acydburn
                $this->tpl_name = 'acp_forums';
34 5330 acydburn
                $this->page_title = 'ACP_MANAGE_FORUMS';
35 5330 acydburn
36 8120 kellanved
                $form_key = 'acp_forums';
37 8120 kellanved
                add_form_key($form_key);
38 8120 kellanved
39 5330 acydburn
                $action                = request_var('action', '');
40 5330 acydburn
                $update                = (isset($_POST['update'])) ? true : false;
41 5330 acydburn
                $forum_id        = request_var('f', 0);
42 5330 acydburn
43 5330 acydburn
                $this->parent_id        = request_var('parent_id', 0);
44 5330 acydburn
                $forum_data = $errors = array();
45 8120 kellanved
                if ($update && !check_form_key($form_key))
46 8120 kellanved
                {
47 8120 kellanved
                        $update = false;
48 8197 kellanved
                        $errors[] = $user->lang['FORM_INVALID'];
49 8120 kellanved
                }
50 8120 kellanved
51 5330 acydburn
                // Check additional permissions
52 5330 acydburn
                switch ($action)
53 5330 acydburn
                {
54 6419 acydburn
                        case 'progress_bar':
55 6419 acydburn
                                $start = request_var('start', 0);
56 6419 acydburn
                                $total = request_var('total', 0);
57 6419 acydburn
58 6419 acydburn
                                $this->display_progress_bar($start, $total);
59 8655 acydburn
                                exit;
60 6419 acydburn
                        break;
61 6419 acydburn
62 5330 acydburn
                        case 'delete':
63 5330 acydburn
64 5330 acydburn
                                if (!$auth->acl_get('a_forumdel'))
65 5330 acydburn
                                {
66 6320 acydburn
                                        trigger_error($user->lang['NO_PERMISSION_FORUM_DELETE'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
67 5330 acydburn
                                }
68 5330 acydburn
69 5330 acydburn
                        break;
70 5330 acydburn
71 5330 acydburn
                        case 'add':
72 5330 acydburn
73 5330 acydburn
                                if (!$auth->acl_get('a_forumadd'))
74 5330 acydburn
                                {
75 6320 acydburn
                                        trigger_error($user->lang['NO_PERMISSION_FORUM_ADD'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
76 5330 acydburn
                                }
77 9978 bantu
78 5330 acydburn
                        break;
79 5330 acydburn
                }
80 5330 acydburn
81 5330 acydburn
                // Major routines
82 5330 acydburn
                if ($update)
83 5330 acydburn
                {
84 5330 acydburn
                        switch ($action)
85 5330 acydburn
                        {
86 5330 acydburn
                                case 'delete':
87 5330 acydburn
                                        $action_subforums        = request_var('action_subforums', '');
88 5330 acydburn
                                        $subforums_to_id        = request_var('subforums_to_id', 0);
89 5330 acydburn
                                        $action_posts                = request_var('action_posts', '');
90 5330 acydburn
                                        $posts_to_id                = request_var('posts_to_id', 0);
91 5330 acydburn
92 5330 acydburn
                                        $errors = $this->delete_forum($forum_id, $action_posts, $action_subforums, $posts_to_id, $subforums_to_id);
93 5330 acydburn
94 5330 acydburn
                                        if (sizeof($errors))
95 5330 acydburn
                                        {
96 5330 acydburn
                                                break;
97 5330 acydburn
                                        }
98 5330 acydburn
99 5330 acydburn
                                        $auth->acl_clear_prefetch();
100 5633 acydburn
                                        $cache->destroy('sql', FORUMS_TABLE);
101 5633 acydburn
102 5330 acydburn
                                        trigger_error($user->lang['FORUM_DELETED'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
103 8655 acydburn
104 5330 acydburn
                                break;
105 5330 acydburn
106 5330 acydburn
                                case 'edit':
107 5330 acydburn
                                        $forum_data = array(
108 5330 acydburn
                                                'forum_id'                =>        $forum_id
109 5330 acydburn
                                        );
110 5330 acydburn
111 5995 acydburn
                                // No break here
112 5330 acydburn
113 5330 acydburn
                                case 'add':
114 5330 acydburn
115 5330 acydburn
                                        $forum_data += array(
116 5603 acydburn
                                                'parent_id'                                => request_var('forum_parent_id', $this->parent_id),
117 5330 acydburn
                                                'forum_type'                        => request_var('forum_type', FORUM_POST),
118 5330 acydburn
                                                'type_action'                        => request_var('type_action', ''),
119 5330 acydburn
                                                'forum_status'                        => request_var('forum_status', ITEM_UNLOCKED),
120 6524 davidmj
                                                'forum_parents'                        => '',
121 7920 acydburn
                                                'forum_name'                        => utf8_normalize_nfc(request_var('forum_name', '', true)),
122 5330 acydburn
                                                'forum_link'                        => request_var('forum_link', ''),
123 5330 acydburn
                                                'forum_link_track'                => request_var('forum_link_track', false),
124 7920 acydburn
                                                'forum_desc'                        => utf8_normalize_nfc(request_var('forum_desc', '', true)),
125 5709 acydburn
                                                'forum_desc_uid'                => '',
126 6383 acydburn
                                                'forum_desc_options'        => 7,
127 6239 davidmj
                                                'forum_desc_bitfield'        => '',
128 7920 acydburn
                                                'forum_rules'                        => utf8_normalize_nfc(request_var('forum_rules', '', true)),
129 5709 acydburn
                                                'forum_rules_uid'                => '',
130 6383 acydburn
                                                'forum_rules_options'        => 7,
131 6209 davidmj
                                                'forum_rules_bitfield'        => '',
132 5330 acydburn
                                                'forum_rules_link'                => request_var('forum_rules_link', ''),
133 5330 acydburn
                                                'forum_image'                        => request_var('forum_image', ''),
134 5330 acydburn
                                                'forum_style'                        => request_var('forum_style', 0),
135 8374 naderman
                                                'display_subforum_list'        => request_var('display_subforum_list', false),
136 5330 acydburn
                                                'display_on_index'                => request_var('display_on_index', false),
137 8147 acydburn
                                                'forum_topics_per_page'        => request_var('topics_per_page', 0),
138 8147 acydburn
                                                'enable_indexing'                => request_var('enable_indexing', true),
139 5330 acydburn
                                                'enable_icons'                        => request_var('enable_icons', false),
140 5330 acydburn
                                                'enable_prune'                        => request_var('enable_prune', false),
141 6161 acydburn
                                                'enable_post_review'        => request_var('enable_post_review', true),
142 9656 acydburn
                                                'enable_quick_reply'        => request_var('enable_quick_reply', false),
143 5330 acydburn
                                                'prune_days'                        => request_var('prune_days', 7),
144 5330 acydburn
                                                'prune_viewed'                        => request_var('prune_viewed', 7),
145 5330 acydburn
                                                'prune_freq'                        => request_var('prune_freq', 1),
146 5330 acydburn
                                                'prune_old_polls'                => request_var('prune_old_polls', false),
147 5330 acydburn
                                                'prune_announce'                => request_var('prune_announce', false),
148 5330 acydburn
                                                'prune_sticky'                        => request_var('prune_sticky', false),
149 7581 acydburn
                                                'forum_password'                => request_var('forum_password', '', true),
150 7581 acydburn
                                                'forum_password_confirm'=> request_var('forum_password_confirm', '', true),
151 8143 kellanved
                                                'forum_password_unset'        => request_var('forum_password_unset', false),
152 5330 acydburn
                                        );
153 5330 acydburn
154 10233 acydburn
                                        // On add, add empty forum_options... else do not consider it (not updating it)
155 10233 acydburn
                                        if ($action == 'add')
156 10233 acydburn
                                        {
157 10233 acydburn
                                                $forum_data['forum_options'] = 0;
158 10233 acydburn
                                        }
159 10233 acydburn
160 6829 acydburn
                                        // Use link_display_on_index setting if forum type is link
161 6829 acydburn
                                        if ($forum_data['forum_type'] == FORUM_LINK)
162 6829 acydburn
                                        {
163 6829 acydburn
                                                $forum_data['display_on_index'] = request_var('link_display_on_index', false);
164 8898 acydburn
                                        }
165 7652 acydburn
166 8898 acydburn
                                        // Linked forums and categories are not able to be locked...
167 8898 acydburn
                                        if ($forum_data['forum_type'] == FORUM_LINK || $forum_data['forum_type'] == FORUM_CAT)
168 8898 acydburn
                                        {
169 7652 acydburn
                                                $forum_data['forum_status'] = ITEM_UNLOCKED;
170 6829 acydburn
                                        }
171 6829 acydburn
172 10169 acydburn
                                        $forum_data['show_active'] = ($forum_data['forum_type'] == FORUM_POST) ? request_var('display_recent', true) : request_var('display_active', true);
173 5330 acydburn
174 5709 acydburn
                                        // Get data for forum rules if specified...
175 5330 acydburn
                                        if ($forum_data['forum_rules'])
176 5330 acydburn
                                        {
177 6188 davidmj
                                                generate_text_for_storage($forum_data['forum_rules'], $forum_data['forum_rules_uid'], $forum_data['forum_rules_bitfield'], $forum_data['forum_rules_options'], request_var('rules_parse_bbcode', false), request_var('rules_parse_urls', false), request_var('rules_parse_smilies', false));
178 5709 acydburn
                                        }
179 5330 acydburn
180 5709 acydburn
                                        // Get data for forum description if specified
181 5709 acydburn
                                        if ($forum_data['forum_desc'])
182 5709 acydburn
                                        {
183 6188 davidmj
                                                generate_text_for_storage($forum_data['forum_desc'], $forum_data['forum_desc_uid'], $forum_data['forum_desc_bitfield'], $forum_data['forum_desc_options'], request_var('desc_parse_bbcode', false), request_var('desc_parse_urls', false), request_var('desc_parse_smilies', false));
184 5330 acydburn
                                        }
185 5330 acydburn
186 5330 acydburn
                                        $errors = $this->update_forum_data($forum_data);
187 6015 acydburn
188 5330 acydburn
                                        if (!sizeof($errors))
189 5330 acydburn
                                        {
190 5574 acydburn
                                                $forum_perm_from = request_var('forum_perm_from', 0);
191 9977 nickvergessen
                                                $cache->destroy('sql', FORUMS_TABLE);
192 5574 acydburn
193 5574 acydburn
                                                // Copy permissions?
194 10198 acydburn
                                                if ($forum_perm_from && $forum_perm_from != $forum_data['forum_id'] &&
195 10198 acydburn
                                                        ($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))))
196 5574 acydburn
                                                {
197 9887 bantu
                                                        copy_forum_permissions($forum_perm_from, $forum_data['forum_id'], ($action == 'edit') ? true : false);
198 8253 kellanved
                                                        cache_moderators();
199 5574 acydburn
                                                }
200 10198 acydburn
/* Commented out because of questionable UI workflow - re-visit for 3.0.7
201 10198 acydburn
                                                else if (!$this->parent_id && $action != 'edit' && $auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))
202 9896 Kellanved
                                                {
203 9896 Kellanved
                                                        $this->copy_permission_page($forum_data);
204 9896 Kellanved
                                                        return;
205 9896 Kellanved
                                                }
206 10198 acydburn
*/
207 5330 acydburn
                                                $auth->acl_clear_prefetch();
208 8655 acydburn
209 6905 acydburn
                                                $acl_url = '&amp;mode=setting_forum_local&amp;forum_id[]=' . $forum_data['forum_id'];
210 5553 acydburn
211 5330 acydburn
                                                $message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED'];
212 5330 acydburn
213 6048 acydburn
                                                // Redirect to permissions
214 6048 acydburn
                                                if ($auth->acl_get('a_fauth'))
215 5709 acydburn
                                                {
216 6048 acydburn
                                                        $message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url) . '">', '</a>');
217 6048 acydburn
                                                }
218 6048 acydburn
219 6048 acydburn
                                                // redirect directly to permission settings screen if authed
220 6048 acydburn
                                                if ($action == 'add' && !$forum_perm_from && $auth->acl_get('a_fauth'))
221 6048 acydburn
                                                {
222 6015 acydburn
                                                        meta_refresh(4, append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url));
223 5709 acydburn
                                                }
224 5709 acydburn
225 5330 acydburn
                                                trigger_error($message . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
226 5330 acydburn
                                        }
227 5330 acydburn
228 5330 acydburn
                                break;
229 5330 acydburn
                        }
230 5330 acydburn
                }
231 5330 acydburn
232 5330 acydburn
                switch ($action)
233 5330 acydburn
                {
234 5330 acydburn
                        case 'move_up':
235 5330 acydburn
                        case 'move_down':
236 6015 acydburn
237 5330 acydburn
                                if (!$forum_id)
238 5330 acydburn
                                {
239 6320 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
240 5330 acydburn
                                }
241 6015 acydburn
242 6073 acydburn
                                $sql = 'SELECT *
243 5330 acydburn
                                        FROM ' . FORUMS_TABLE . "
244 5330 acydburn
                                        WHERE forum_id = $forum_id";
245 5330 acydburn
                                $result = $db->sql_query($sql);
246 5330 acydburn
                                $row = $db->sql_fetchrow($result);
247 5330 acydburn
                                $db->sql_freeresult($result);
248 5330 acydburn
249 5330 acydburn
                                if (!$row)
250 5330 acydburn
                                {
251 6320 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
252 5330 acydburn
                                }
253 5330 acydburn
254 6073 acydburn
                                $move_forum_name = $this->move_forum_by($row, $action, 1);
255 5330 acydburn
256 6073 acydburn
                                if ($move_forum_name !== false)
257 5330 acydburn
                                {
258 6073 acydburn
                                        add_log('admin', 'LOG_FORUM_' . strtoupper($action), $row['forum_name'], $move_forum_name);
259 6073 acydburn
                                        $cache->destroy('sql', FORUMS_TABLE);
260 5330 acydburn
                                }
261 5330 acydburn
262 5330 acydburn
                        break;
263 5330 acydburn
264 5330 acydburn
                        case 'sync':
265 5330 acydburn
                                if (!$forum_id)
266 5330 acydburn
                                {
267 6320 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
268 5330 acydburn
                                }
269 5330 acydburn
270 7517 acydburn
                                @set_time_limit(0);
271 7517 acydburn
272 7517 acydburn
                                $sql = 'SELECT forum_name, forum_topics_real
273 5330 acydburn
                                        FROM ' . FORUMS_TABLE . "
274 5330 acydburn
                                        WHERE forum_id = $forum_id";
275 5330 acydburn
                                $result = $db->sql_query($sql);
276 5330 acydburn
                                $row = $db->sql_fetchrow($result);
277 5330 acydburn
                                $db->sql_freeresult($result);
278 5330 acydburn
279 5330 acydburn
                                if (!$row)
280 5330 acydburn
                                {
281 6320 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
282 5330 acydburn
                                }
283 5330 acydburn
284 6419 acydburn
                                if ($row['forum_topics_real'])
285 6419 acydburn
                                {
286 7188 acydburn
                                        $sql = 'SELECT MIN(topic_id) as min_topic_id, MAX(topic_id) as max_topic_id
287 7188 acydburn
                                                FROM ' . TOPICS_TABLE . '
288 7188 acydburn
                                                WHERE forum_id = ' . $forum_id;
289 7188 acydburn
                                        $result = $db->sql_query($sql);
290 7188 acydburn
                                        $row2 = $db->sql_fetchrow($result);
291 7188 acydburn
                                        $db->sql_freeresult($result);
292 6419 acydburn
293 7517 acydburn
                                        // Typecast to int if there is no data available
294 7517 acydburn
                                        $row2['min_topic_id'] = (int) $row2['min_topic_id'];
295 7517 acydburn
                                        $row2['max_topic_id'] = (int) $row2['max_topic_id'];
296 7517 acydburn
297 7188 acydburn
                                        $start = request_var('start', $row2['min_topic_id']);
298 7188 acydburn
299 7456 acydburn
                                        $batch_size = 2000;
300 6419 acydburn
                                        $end = $start + $batch_size;
301 6419 acydburn
302 6419 acydburn
                                        // Sync all topics in batch mode...
303 6419 acydburn
                                        sync('topic_approved', 'range', 'topic_id BETWEEN ' . $start . ' AND ' . $end, true, false);
304 6419 acydburn
                                        sync('topic', 'range', 'topic_id BETWEEN ' . $start . ' AND ' . $end, true, true);
305 6419 acydburn
306 7188 acydburn
                                        if ($end < $row2['max_topic_id'])
307 6419 acydburn
                                        {
308 7188 acydburn
                                                // We really need to find a way of showing statistics... no progress here
309 7188 acydburn
                                                $sql = 'SELECT COUNT(topic_id) as num_topics
310 7188 acydburn
                                                        FROM ' . TOPICS_TABLE . '
311 7188 acydburn
                                                        WHERE forum_id = ' . $forum_id . '
312 7188 acydburn
                                                                AND topic_id BETWEEN ' . $start . ' AND ' . $end;
313 7188 acydburn
                                                $result = $db->sql_query($sql);
314 7188 acydburn
                                                $topics_done = request_var('topics_done', 0) + (int) $db->sql_fetchfield('num_topics');
315 7188 acydburn
                                                $db->sql_freeresult($result);
316 7188 acydburn
317 6419 acydburn
                                                $start += $batch_size;
318 6419 acydburn
319 7517 acydburn
                                                $url = $this->u_action . "&amp;parent_id={$this->parent_id}&amp;f=$forum_id&amp;action=sync&amp;start=$start&amp;topics_done=$topics_done&amp;total={$row['forum_topics_real']}";
320 6419 acydburn
321 6419 acydburn
                                                meta_refresh(0, $url);
322 6419 acydburn
323 6419 acydburn
                                                $template->assign_vars(array(
324 7456 acydburn
                                                        'U_PROGRESS_BAR'                => $this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['forum_topics_real']}",
325 8099 acydburn
                                                        'UA_PROGRESS_BAR'                => addslashes($this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['forum_topics_real']}"),
326 6419 acydburn
                                                        'S_CONTINUE_SYNC'                => true,
327 7188 acydburn
                                                        'L_PROGRESS_EXPLAIN'        => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], $topics_done, $row['forum_topics_real']))
328 6419 acydburn
                                                );
329 6419 acydburn
330 6419 acydburn
                                                return;
331 6419 acydburn
                                        }
332 6419 acydburn
                                }
333 6419 acydburn
334 7517 acydburn
                                $url = $this->u_action . "&amp;parent_id={$this->parent_id}&amp;f=$forum_id&amp;action=sync_forum";
335 7517 acydburn
                                meta_refresh(0, $url);
336 7517 acydburn
337 7517 acydburn
                                $template->assign_vars(array(
338 7517 acydburn
                                        'U_PROGRESS_BAR'                => $this->u_action . '&amp;action=progress_bar',
339 8099 acydburn
                                        'UA_PROGRESS_BAR'                => addslashes($this->u_action . '&amp;action=progress_bar'),
340 7517 acydburn
                                        'S_CONTINUE_SYNC'                => true,
341 7517 acydburn
                                        'L_PROGRESS_EXPLAIN'        => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], 0, $row['forum_topics_real']))
342 7517 acydburn
                                );
343 7517 acydburn
344 7517 acydburn
                                return;
345 7517 acydburn
346 7517 acydburn
                        break;
347 7517 acydburn
348 7517 acydburn
                        case 'sync_forum':
349 7517 acydburn
350 7517 acydburn
                                $sql = 'SELECT forum_name, forum_type
351 7517 acydburn
                                        FROM ' . FORUMS_TABLE . "
352 7517 acydburn
                                        WHERE forum_id = $forum_id";
353 7517 acydburn
                                $result = $db->sql_query($sql);
354 7517 acydburn
                                $row = $db->sql_fetchrow($result);
355 7517 acydburn
                                $db->sql_freeresult($result);
356 7517 acydburn
357 7517 acydburn
                                if (!$row)
358 7517 acydburn
                                {
359 7517 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
360 7517 acydburn
                                }
361 7517 acydburn
362 7517 acydburn
                                sync('forum', 'forum_id', $forum_id, false, true);
363 7517 acydburn
364 5330 acydburn
                                add_log('admin', 'LOG_FORUM_SYNC', $row['forum_name']);
365 5633 acydburn
                                $cache->destroy('sql', FORUMS_TABLE);
366 5330 acydburn
367 5330 acydburn
                                $template->assign_var('L_FORUM_RESYNCED', sprintf($user->lang['FORUM_RESYNCED'], $row['forum_name']));
368 5330 acydburn
369 5330 acydburn
                        break;
370 5330 acydburn
371 5330 acydburn
                        case 'add':
372 5330 acydburn
                        case 'edit':
373 5330 acydburn
374 5330 acydburn
                                if ($update)
375 5330 acydburn
                                {
376 6161 acydburn
                                        $forum_data['forum_flags'] = 0;
377 6365 acydburn
                                        $forum_data['forum_flags'] += (request_var('forum_link_track', false)) ? FORUM_FLAG_LINK_TRACK : 0;
378 6365 acydburn
                                        $forum_data['forum_flags'] += (request_var('prune_old_polls', false)) ? FORUM_FLAG_PRUNE_POLL : 0;
379 6365 acydburn
                                        $forum_data['forum_flags'] += (request_var('prune_announce', false)) ? FORUM_FLAG_PRUNE_ANNOUNCE : 0;
380 6365 acydburn
                                        $forum_data['forum_flags'] += (request_var('prune_sticky', false)) ? FORUM_FLAG_PRUNE_STICKY : 0;
381 6365 acydburn
                                        $forum_data['forum_flags'] += ($forum_data['show_active']) ? FORUM_FLAG_ACTIVE_TOPICS : 0;
382 6365 acydburn
                                        $forum_data['forum_flags'] += (request_var('enable_post_review', true)) ? FORUM_FLAG_POST_REVIEW : 0;
383 9656 acydburn
                                        $forum_data['forum_flags'] += (request_var('enable_quick_reply', false)) ? FORUM_FLAG_QUICK_REPLY : 0;
384 5330 acydburn
                                }
385 5330 acydburn
386 5330 acydburn
                                // Show form to create/modify a forum
387 5330 acydburn
                                if ($action == 'edit')
388 5330 acydburn
                                {
389 5330 acydburn
                                        $this->page_title = 'EDIT_FORUM';
390 5330 acydburn
                                        $row = $this->get_forum_info($forum_id);
391 5330 acydburn
                                        $old_forum_type = $row['forum_type'];
392 5330 acydburn
393 5330 acydburn
                                        if (!$update)
394 5330 acydburn
                                        {
395 5330 acydburn
                                                $forum_data = $row;
396 5330 acydburn
                                        }
397 6818 acydburn
                                        else
398 6818 acydburn
                                        {
399 6818 acydburn
                                                $forum_data['left_id'] = $row['left_id'];
400 6818 acydburn
                                                $forum_data['right_id'] = $row['right_id'];
401 6818 acydburn
                                        }
402 5330 acydburn
403 6829 acydburn
                                        // Make sure no direct child forums are able to be selected as parents.
404 6829 acydburn
                                        $exclude_forums = array();
405 6915 acydburn
                                        foreach (get_forum_branch($forum_id, 'children') as $row)
406 6198 acydburn
                                        {
407 6198 acydburn
                                                $exclude_forums[] = $row['forum_id'];
408 6198 acydburn
                                        }
409 6198 acydburn
410 6198 acydburn
                                        $parents_list = make_forum_select($forum_data['parent_id'], $exclude_forums, false, false, false);
411 6198 acydburn
412 5330 acydburn
                                        $forum_data['forum_password_confirm'] = $forum_data['forum_password'];
413 5330 acydburn
                                }
414 5330 acydburn
                                else
415 5330 acydburn
                                {
416 5330 acydburn
                                        $this->page_title = 'CREATE_FORUM';
417 5330 acydburn
418 5330 acydburn
                                        $forum_id = $this->parent_id;
419 5330 acydburn
                                        $parents_list = make_forum_select($this->parent_id, false, false, false, false);
420 5330 acydburn
421 5330 acydburn
                                        // Fill forum data with default values
422 5330 acydburn
                                        if (!$update)
423 5330 acydburn
                                        {
424 5330 acydburn
                                                $forum_data = array(
425 5330 acydburn
                                                        'parent_id'                                => $this->parent_id,
426 5995 acydburn
                                                        'forum_type'                        => FORUM_POST,
427 5330 acydburn
                                                        'forum_status'                        => ITEM_UNLOCKED,
428 7920 acydburn
                                                        'forum_name'                        => utf8_normalize_nfc(request_var('forum_name', '', true)),
429 5330 acydburn
                                                        'forum_link'                        => '',
430 5330 acydburn
                                                        'forum_link_track'                => false,
431 5330 acydburn
                                                        'forum_desc'                        => '',
432 5330 acydburn
                                                        'forum_rules'                        => '',
433 5330 acydburn
                                                        'forum_rules_link'                => '',
434 5330 acydburn
                                                        'forum_image'                        => '',
435 5330 acydburn
                                                        'forum_style'                        => 0,
436 8374 naderman
                                                        'display_subforum_list'        => true,
437 5330 acydburn
                                                        'display_on_index'                => false,
438 8147 acydburn
                                                        'forum_topics_per_page'        => 0,
439 8147 acydburn
                                                        'enable_indexing'                => true,
440 5330 acydburn
                                                        'enable_icons'                        => false,
441 5330 acydburn
                                                        'enable_prune'                        => false,
442 5330 acydburn
                                                        'prune_days'                        => 7,
443 5330 acydburn
                                                        'prune_viewed'                        => 7,
444 5330 acydburn
                                                        'prune_freq'                        => 1,
445 10171 acydburn
                                                        'forum_flags'                        => FORUM_FLAG_POST_REVIEW + FORUM_FLAG_ACTIVE_TOPICS,
446 10024 acydburn
                                                        'forum_options'                        => 0,
447 5330 acydburn
                                                        'forum_password'                => '',
448 5330 acydburn
                                                        'forum_password_confirm'=> '',
449 5330 acydburn
                                                );
450 5330 acydburn
                                        }
451 5330 acydburn
                                }
452 5330 acydburn
453 5709 acydburn
                                $forum_rules_data = array(
454 5709 acydburn
                                        'text'                        => $forum_data['forum_rules'],
455 5709 acydburn
                                        'allow_bbcode'        => true,
456 5709 acydburn
                                        'allow_smilies'        => true,
457 5709 acydburn
                                        'allow_urls'        => true
458 5709 acydburn
                                );
459 5330 acydburn
460 5709 acydburn
                                $forum_desc_data = array(
461 5709 acydburn
                                        'text'                        => $forum_data['forum_desc'],
462 5709 acydburn
                                        'allow_bbcode'        => true,
463 5709 acydburn
                                        'allow_smilies'        => true,
464 5709 acydburn
                                        'allow_urls'        => true
465 5709 acydburn
                                );
466 5709 acydburn
467 5709 acydburn
                                $forum_rules_preview = '';
468 5709 acydburn
469 5709 acydburn
                                // Parse rules if specified
470 5330 acydburn
                                if ($forum_data['forum_rules'])
471 5330 acydburn
                                {
472 5709 acydburn
                                        if (!isset($forum_data['forum_rules_uid']))
473 5709 acydburn
                                        {
474 5709 acydburn
                                                // Before we are able to display the preview and plane text, we need to parse our request_var()'d value...
475 5709 acydburn
                                                $forum_data['forum_rules_uid'] = '';
476 6209 davidmj
                                                $forum_data['forum_rules_bitfield'] = '';
477 6188 davidmj
                                                $forum_data['forum_rules_options'] = 0;
478 5330 acydburn
479 6894 acydburn
                                                generate_text_for_storage($forum_data['forum_rules'], $forum_data['forum_rules_uid'], $forum_data['forum_rules_bitfield'], $forum_data['forum_rules_options'], request_var('rules_allow_bbcode', false), request_var('rules_allow_urls', false), request_var('rules_allow_smilies', false));
480 5330 acydburn
                                        }
481 5709 acydburn
482 5709 acydburn
                                        // Generate preview content
483 6188 davidmj
                                        $forum_rules_preview = generate_text_for_display($forum_data['forum_rules'], $forum_data['forum_rules_uid'], $forum_data['forum_rules_bitfield'], $forum_data['forum_rules_options']);
484 5709 acydburn
485 5709 acydburn
                                        // decode...
486 6188 davidmj
                                        $forum_rules_data = generate_text_for_edit($forum_data['forum_rules'], $forum_data['forum_rules_uid'], $forum_data['forum_rules_options']);
487 5709 acydburn
                                }
488 5709 acydburn
489 5709 acydburn
                                // Parse desciption if specified
490 5709 acydburn
                                if ($forum_data['forum_desc'])
491 5709 acydburn
                                {
492 5709 acydburn
                                        if (!isset($forum_data['forum_desc_uid']))
493 5330 acydburn
                                        {
494 5709 acydburn
                                                // Before we are able to display the preview and plane text, we need to parse our request_var()'d value...
495 5709 acydburn
                                                $forum_data['forum_desc_uid'] = '';
496 6209 davidmj
                                                $forum_data['forum_desc_bitfield'] = '';
497 6188 davidmj
                                                $forum_data['forum_desc_options'] = 0;
498 5709 acydburn
499 6894 acydburn
                                                generate_text_for_storage($forum_data['forum_desc'], $forum_data['forum_desc_uid'], $forum_data['forum_desc_bitfield'], $forum_data['forum_desc_options'], request_var('desc_allow_bbcode', false), request_var('desc_allow_urls', false), request_var('desc_allow_smilies', false));
500 5330 acydburn
                                        }
501 5330 acydburn
502 5709 acydburn
                                        // decode...
503 6188 davidmj
                                        $forum_desc_data = generate_text_for_edit($forum_data['forum_desc'], $forum_data['forum_desc_uid'], $forum_data['forum_desc_options']);
504 5330 acydburn
                                }
505 5330 acydburn
506 5330 acydburn
                                $forum_type_options = '';
507 5330 acydburn
                                $forum_type_ary = array(FORUM_CAT => 'CAT', FORUM_POST => 'FORUM', FORUM_LINK => 'LINK');
508 8655 acydburn
509 5330 acydburn
                                foreach ($forum_type_ary as $value => $lang)
510 5330 acydburn
                                {
511 5330 acydburn
                                        $forum_type_options .= '<option value="' . $value . '"' . (($value == $forum_data['forum_type']) ? ' selected="selected"' : '') . '>' . $user->lang['TYPE_' . $lang] . '</option>';
512 5330 acydburn
                                }
513 5330 acydburn
514 5330 acydburn
                                $styles_list = style_select($forum_data['forum_style'], true);
515 5330 acydburn
516 5330 acydburn
                                $statuslist = '<option value="' . ITEM_UNLOCKED . '"' . (($forum_data['forum_status'] == ITEM_UNLOCKED) ? ' selected="selected"' : '') . '>' . $user->lang['UNLOCKED'] . '</option><option value="' . ITEM_LOCKED . '"' . (($forum_data['forum_status'] == ITEM_LOCKED) ? ' selected="selected"' : '') . '>' . $user->lang['LOCKED'] . '</option>';
517 5330 acydburn
518 5330 acydburn
                                $sql = 'SELECT forum_id
519 5330 acydburn
                                        FROM ' . FORUMS_TABLE . '
520 5330 acydburn
                                        WHERE forum_type = ' . FORUM_POST . "
521 5330 acydburn
                                                AND forum_id <> $forum_id";
522 9344 toonarmy
                                $result = $db->sql_query_limit($sql, 1);
523 5330 acydburn
524 9344 toonarmy
                                $postable_forum_exists = false;
525 5330 acydburn
                                if ($db->sql_fetchrow($result))
526 5330 acydburn
                                {
527 9344 toonarmy
                                        $postable_forum_exists = true;
528 5330 acydburn
                                }
529 5330 acydburn
                                $db->sql_freeresult($result);
530 5330 acydburn
531 6601 acydburn
                                // Subforum move options
532 6601 acydburn
                                if ($action == 'edit' && $forum_data['forum_type'] == FORUM_CAT)
533 6601 acydburn
                                {
534 6601 acydburn
                                        $subforums_id = array();
535 6601 acydburn
                                        $subforums = get_forum_branch($forum_id, 'children');
536 6601 acydburn
537 6601 acydburn
                                        foreach ($subforums as $row)
538 6601 acydburn
                                        {
539 6601 acydburn
                                                $subforums_id[] = $row['forum_id'];
540 6601 acydburn
                                        }
541 6601 acydburn
542 6601 acydburn
                                        $forums_list = make_forum_select($forum_data['parent_id'], $subforums_id);
543 6601 acydburn
544 9344 toonarmy
                                        if ($postable_forum_exists)
545 6601 acydburn
                                        {
546 6601 acydburn
                                                $template->assign_vars(array(
547 6601 acydburn
                                                        'S_MOVE_FORUM_OPTIONS'                => make_forum_select($forum_data['parent_id'], $subforums_id)) // , false, true, false???
548 6601 acydburn
                                                );
549 6601 acydburn
                                        }
550 6601 acydburn
551 6601 acydburn
                                        $template->assign_vars(array(
552 6601 acydburn
                                                'S_HAS_SUBFORUMS'                => ($forum_data['right_id'] - $forum_data['left_id'] > 1) ? true : false,
553 6601 acydburn
                                                'S_FORUMS_LIST'                        => $forums_list)
554 6601 acydburn
                                        );
555 6601 acydburn
                                }
556 9344 toonarmy
                                else if ($postable_forum_exists)
557 9344 toonarmy
                                {
558 9344 toonarmy
                                        $template->assign_vars(array(
559 9344 toonarmy
                                                'S_MOVE_FORUM_OPTIONS'                => make_forum_select($forum_data['parent_id'], $forum_id, false, true, false))
560 9344 toonarmy
                                        );
561 9344 toonarmy
                                }
562 6601 acydburn
563 5330 acydburn
                                $s_show_display_on_index = false;
564 6015 acydburn
565 5784 acydburn
                                if ($forum_data['parent_id'] > 0)
566 5330 acydburn
                                {
567 5330 acydburn
                                        // if this forum is a subforum put the "display on index" checkbox
568 5603 acydburn
                                        if ($parent_info = $this->get_forum_info($forum_data['parent_id']))
569 5330 acydburn
                                        {
570 5330 acydburn
                                                if ($parent_info['parent_id'] > 0 || $parent_info['forum_type'] == FORUM_CAT)
571 5330 acydburn
                                                {
572 5330 acydburn
                                                        $s_show_display_on_index = true;
573 5330 acydburn
                                                }
574 5330 acydburn
                                        }
575 5330 acydburn
                                }
576 8655 acydburn
577 8143 kellanved
                                if (strlen($forum_data['forum_password']) == 32)
578 8143 kellanved
                                {
579 8186 acydburn
                                        $errors[] = $user->lang['FORUM_PASSWORD_OLD'];
580 8143 kellanved
                                }
581 5330 acydburn
582 5330 acydburn
                                $template->assign_vars(array(
583 5603 acydburn
                                        'S_EDIT_FORUM'                => true,
584 5603 acydburn
                                        'S_ERROR'                        => (sizeof($errors)) ? true : false,
585 5603 acydburn
                                        'S_PARENT_ID'                => $this->parent_id,
586 5603 acydburn
                                        'S_FORUM_PARENT_ID'        => $forum_data['parent_id'],
587 5603 acydburn
                                        'S_ADD_ACTION'                => ($action == 'add') ? true : false,
588 5330 acydburn
589 5330 acydburn
                                        'U_BACK'                => $this->u_action . '&amp;parent_id=' . $this->parent_id,
590 5330 acydburn
                                        'U_EDIT_ACTION'        => $this->u_action . "&amp;parent_id={$this->parent_id}&amp;action=$action&amp;f=$forum_id",
591 5330 acydburn
592 6107 naderman
                                        'L_COPY_PERMISSIONS_EXPLAIN'        => $user->lang['COPY_PERMISSIONS_' . strtoupper($action) . '_EXPLAIN'],
593 6107 naderman
                                        'L_TITLE'                                                => $user->lang[$this->page_title],
594 6107 naderman
                                        'ERROR_MSG'                                                => (sizeof($errors)) ? implode('<br />', $errors) : '',
595 5330 acydburn
596 5330 acydburn
                                        'FORUM_NAME'                                => $forum_data['forum_name'],
597 5330 acydburn
                                        'FORUM_DATA_LINK'                        => $forum_data['forum_link'],
598 5330 acydburn
                                        'FORUM_IMAGE'                                => $forum_data['forum_image'],
599 5330 acydburn
                                        'FORUM_IMAGE_SRC'                        => ($forum_data['forum_image']) ? $phpbb_root_path . $forum_data['forum_image'] : '',
600 5330 acydburn
                                        'FORUM_POST'                                => FORUM_POST,
601 5330 acydburn
                                        'FORUM_LINK'                                => FORUM_LINK,
602 5330 acydburn
                                        'FORUM_CAT'                                        => FORUM_CAT,
603 5330 acydburn
                                        'PRUNE_FREQ'                                => $forum_data['prune_freq'],
604 5330 acydburn
                                        'PRUNE_DAYS'                                => $forum_data['prune_days'],
605 5330 acydburn
                                        'PRUNE_VIEWED'                                => $forum_data['prune_viewed'],
606 5330 acydburn
                                        'TOPICS_PER_PAGE'                        => $forum_data['forum_topics_per_page'],
607 5330 acydburn
                                        'FORUM_RULES_LINK'                        => $forum_data['forum_rules_link'],
608 5330 acydburn
                                        'FORUM_RULES'                                => $forum_data['forum_rules'],
609 5330 acydburn
                                        'FORUM_RULES_PREVIEW'                => $forum_rules_preview,
610 5709 acydburn
                                        'FORUM_RULES_PLAIN'                        => $forum_rules_data['text'],
611 5709 acydburn
                                        'S_BBCODE_CHECKED'                        => ($forum_rules_data['allow_bbcode']) ? true : false,
612 5709 acydburn
                                        'S_SMILIES_CHECKED'                        => ($forum_rules_data['allow_smilies']) ? true : false,
613 5709 acydburn
                                        'S_URLS_CHECKED'                        => ($forum_rules_data['allow_urls']) ? true : false,
614 8143 kellanved
                                        'S_FORUM_PASSWORD_SET'                => (empty($forum_data['forum_password'])) ? false : true,
615 5330 acydburn
616 5709 acydburn
                                        'FORUM_DESC'                                => $forum_desc_data['text'],
617 5709 acydburn
                                        'S_DESC_BBCODE_CHECKED'                => ($forum_desc_data['allow_bbcode']) ? true : false,
618 5709 acydburn
                                        'S_DESC_SMILIES_CHECKED'        => ($forum_desc_data['allow_smilies']) ? true : false,
619 5709 acydburn
                                        'S_DESC_URLS_CHECKED'                => ($forum_desc_data['allow_urls']) ? true : false,
620 5709 acydburn
621 5330 acydburn
                                        'S_FORUM_TYPE_OPTIONS'                => $forum_type_options,
622 5330 acydburn
                                        'S_STATUS_OPTIONS'                        => $statuslist,
623 5330 acydburn
                                        'S_PARENT_OPTIONS'                        => $parents_list,
624 5330 acydburn
                                        'S_STYLES_OPTIONS'                        => $styles_list,
625 7915 kellanved
                                        'S_FORUM_OPTIONS'                        => make_forum_select(($action == 'add') ? $forum_data['parent_id'] : false, ($action == 'edit') ? $forum_data['forum_id'] : false, false, false, false),
626 5330 acydburn
                                        'S_SHOW_DISPLAY_ON_INDEX'        => $s_show_display_on_index,
627 5330 acydburn
                                        'S_FORUM_POST'                                => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
628 5330 acydburn
                                        'S_FORUM_ORIG_POST'                        => (isset($old_forum_type) && $old_forum_type == FORUM_POST) ? true : false,
629 6601 acydburn
                                        'S_FORUM_ORIG_CAT'                        => (isset($old_forum_type) && $old_forum_type == FORUM_CAT) ? true : false,
630 6601 acydburn
                                        'S_FORUM_ORIG_LINK'                        => (isset($old_forum_type) && $old_forum_type == FORUM_LINK) ? true : false,
631 5330 acydburn
                                        'S_FORUM_LINK'                                => ($forum_data['forum_type'] == FORUM_LINK) ? true : false,
632 5330 acydburn
                                        'S_FORUM_CAT'                                => ($forum_data['forum_type'] == FORUM_CAT) ? true : false,
633 5330 acydburn
                                        'S_ENABLE_INDEXING'                        => ($forum_data['enable_indexing']) ? true : false,
634 5330 acydburn
                                        'S_TOPIC_ICONS'                                => ($forum_data['enable_icons']) ? true : false,
635 8374 naderman
                                        'S_DISPLAY_SUBFORUM_LIST'        => ($forum_data['display_subforum_list']) ? true : false,
636 5330 acydburn
                                        'S_DISPLAY_ON_INDEX'                => ($forum_data['display_on_index']) ? true : false,
637 5330 acydburn
                                        'S_PRUNE_ENABLE'                        => ($forum_data['enable_prune']) ? true : false,
638 6364 acydburn
                                        'S_FORUM_LINK_TRACK'                => ($forum_data['forum_flags'] & FORUM_FLAG_LINK_TRACK) ? true : false,
639 6364 acydburn
                                        'S_PRUNE_OLD_POLLS'                        => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_POLL) ? true : false,
640 6364 acydburn
                                        'S_PRUNE_ANNOUNCE'                        => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_ANNOUNCE) ? true : false,
641 6364 acydburn
                                        'S_PRUNE_STICKY'                        => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_STICKY) ? true : false,
642 6364 acydburn
                                        'S_DISPLAY_ACTIVE_TOPICS'        => ($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) ? true : false,
643 6364 acydburn
                                        'S_ENABLE_POST_REVIEW'                => ($forum_data['forum_flags'] & FORUM_FLAG_POST_REVIEW) ? true : false,
644 9656 acydburn
                                        'S_ENABLE_QUICK_REPLY'                => ($forum_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) ? true : false,
645 8172 acydburn
                                        'S_CAN_COPY_PERMISSIONS'        => ($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))) ? true : false,
646 8172 acydburn
                                ));
647 5330 acydburn
648 8171 kellanved
                                return;
649 8171 kellanved
650 5330 acydburn
                        break;
651 5330 acydburn
652 5330 acydburn
                        case 'delete':
653 5330 acydburn
654 5330 acydburn
                                if (!$forum_id)
655 5330 acydburn
                                {
656 6320 acydburn
                                        trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
657 5330 acydburn
                                }
658 6015 acydburn
659 5330 acydburn
                                $forum_data = $this->get_forum_info($forum_id);
660 5330 acydburn
661 5330 acydburn
                                $subforums_id = array();
662 6584 acydburn
                                $subforums = get_forum_branch($forum_id, 'children');
663 5330 acydburn
664 5330 acydburn
                                foreach ($subforums as $row)
665 5330 acydburn
                                {
666 5330 acydburn
                                        $subforums_id[] = $row['forum_id'];
667 5330 acydburn
                                }
668 5330 acydburn
669 5603 acydburn
                                $forums_list = make_forum_select($forum_data['parent_id'], $subforums_id);
670 5330 acydburn
671 5330 acydburn
                                $sql = 'SELECT forum_id
672 5330 acydburn
                                        FROM ' . FORUMS_TABLE . '
673 5330 acydburn
                                        WHERE forum_type = ' . FORUM_POST . "
674 5330 acydburn
                                                AND forum_id <> $forum_id";
675 9344 toonarmy
                                $result = $db->sql_query_limit($sql, 1);
676 5330 acydburn
677 5330 acydburn
                                if ($db->sql_fetchrow($result))
678 5330 acydburn
                                {
679 5330 acydburn
                                        $template->assign_vars(array(
680 6816 acydburn
                                                'S_MOVE_FORUM_OPTIONS'                => make_forum_select($forum_data['parent_id'], $subforums_id, false, true)) // , false, true, false???
681 5330 acydburn
                                        );
682 5330 acydburn
                                }
683 5330 acydburn
                                $db->sql_freeresult($result);
684 5330 acydburn
685 5603 acydburn
                                $parent_id = ($this->parent_id == $forum_id) ? 0 : $this->parent_id;
686 5603 acydburn
687 5330 acydburn
                                $template->assign_vars(array(
688 5330 acydburn
                                        'S_DELETE_FORUM'                => true,
689 5603 acydburn
                                        'U_ACTION'                                => $this->u_action . "&amp;parent_id={$parent_id}&amp;action=delete&amp;f=$forum_id",
690 5330 acydburn
                                        'U_BACK'                                => $this->u_action . '&amp;parent_id=' . $this->parent_id,
691 5330 acydburn
692 5330 acydburn
                                        'FORUM_NAME'                        => $forum_data['forum_name'],
693 5330 acydburn
                                        'S_FORUM_POST'                        => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
694 6584 acydburn
                                        'S_FORUM_LINK'                        => ($forum_data['forum_type'] == FORUM_LINK) ? true : false,
695 5330 acydburn
                                        'S_HAS_SUBFORUMS'                => ($forum_data['right_id'] - $forum_data['left_id'] > 1) ? true : false,
696 5330 acydburn
                                        'S_FORUMS_LIST'                        => $forums_list,
697 5330 acydburn
                                        'S_ERROR'                                => (sizeof($errors)) ? true : false,
698 5330 acydburn
                                        'ERROR_MSG'                                => (sizeof($errors)) ? implode('<br />', $errors) : '')
699 5330 acydburn
                                );
700 5330 acydburn
701 5330 acydburn
                                return;
702 5330 acydburn
                        break;
703 10024 acydburn
704 10024 acydburn
                        case 'copy_perm':
705 9896 Kellanved
                                $forum_perm_from = request_var('forum_perm_from', 0);
706 9896 Kellanved
707 9896 Kellanved
                                // Copy permissions?
708 9896 Kellanved
                                if (!empty($forum_perm_from) && $forum_perm_from != $forum_id)
709 9896 Kellanved
                                {
710 9896 Kellanved
                                        copy_forum_permissions($forum_perm_from, $forum_id, true);
711 9896 Kellanved
                                        cache_moderators();
712 9896 Kellanved
                                        $auth->acl_clear_prefetch();
713 9896 Kellanved
                                        $cache->destroy('sql', FORUMS_TABLE);
714 9896 Kellanved
715 9896 Kellanved
                                        $acl_url = '&amp;mode=setting_forum_local&amp;forum_id[]=' . $forum_id;
716 9896 Kellanved
717 9896 Kellanved
                                        $message = $user->lang['FORUM_UPDATED'];
718 9896 Kellanved
719 9896 Kellanved
                                        // Redirect to permissions
720 9896 Kellanved
                                        if ($auth->acl_get('a_fauth'))
721 9896 Kellanved
                                        {
722 9896 Kellanved
                                                $message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url) . '">', '</a>');
723 9896 Kellanved
                                        }
724 9896 Kellanved
725 9896 Kellanved
                                        trigger_error($message . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
726 9896 Kellanved
                                }
727 9978 bantu
728 9978 bantu
                        break;
729 5330 acydburn
                }
730 5330 acydburn
731 5330 acydburn
                // Default management page
732 5330 acydburn
                if (!$this->parent_id)
733 5330 acydburn
                {
734 5330 acydburn
                        $navigation = $user->lang['FORUM_INDEX'];
735 5330 acydburn
                }
736 5330 acydburn
                else
737 5330 acydburn
                {
738 5330 acydburn
                        $navigation = '<a href="' . $this->u_action . '">' . $user->lang['FORUM_INDEX'] . '</a>';
739 5330 acydburn
740 5330 acydburn
                        $forums_nav = get_forum_branch($this->parent_id, 'parents', 'descending');
741 5330 acydburn
                        foreach ($forums_nav as $row)
742 5330 acydburn
                        {
743 5330 acydburn
                                if ($row['forum_id'] == $this->parent_id)
744 5330 acydburn
                                {
745 5330 acydburn
                                        $navigation .= ' -&gt; ' . $row['forum_name'];
746 5330 acydburn
                                }
747 5330 acydburn
                                else
748 5330 acydburn
                                {
749 5330 acydburn
                                        $navigation .= ' -&gt; <a href="' . $this->u_action . '&amp;parent_id=' . $row['forum_id'] . '">' . $row['forum_name'] . '</a>';
750 5330 acydburn
                                }
751 5330 acydburn
                        }
752 5330 acydburn
                }
753 5330 acydburn
754 5330 acydburn
                // Jumpbox
755 5330 acydburn
                $forum_box = make_forum_select($this->parent_id, false, false, false, false); //make_forum_select($this->parent_id);
756 5330 acydburn
757 7517 acydburn
                if ($action == 'sync' || $action == 'sync_forum')
758 5330 acydburn
                {
759 5330 acydburn
                        $template->assign_var('S_RESYNCED', true);
760 5330 acydburn
                }
761 5330 acydburn
762 5330 acydburn
                $sql = 'SELECT *
763 5330 acydburn
                        FROM ' . FORUMS_TABLE . "
764 5330 acydburn
                        WHERE parent_id = $this->parent_id
765 5330 acydburn
                        ORDER BY left_id";
766 5330 acydburn
                $result = $db->sql_query($sql);
767 5330 acydburn
768 5330 acydburn
                if ($row = $db->sql_fetchrow($result))
769 5330 acydburn
                {
770 5330 acydburn
                        do
771 5330 acydburn
                        {
772 5330 acydburn
                                $forum_type = $row['forum_type'];
773 5330 acydburn
774 5330 acydburn
                                if ($row['forum_status'] == ITEM_LOCKED)
775 5330 acydburn
                                {
776 7137 dhn2
                                        $folder_image = '<img src="images/icon_folder_lock.gif" alt="' . $user->lang['LOCKED'] . '" />';
777 5330 acydburn
                                }
778 5330 acydburn
                                else
779 5330 acydburn
                                {
780 5330 acydburn
                                        switch ($forum_type)
781 5330 acydburn
                                        {
782 5330 acydburn
                                                case FORUM_LINK:
783 7137 dhn2
                                                        $folder_image = '<img src="images/icon_folder_link.gif" alt="' . $user->lang['LINK'] . '" />';
784 5330 acydburn
                                                break;
785 5330 acydburn
786 5330 acydburn
                                                default:
787 7137 dhn2
                                                        $folder_image = ($row['left_id'] + 1 != $row['right_id']) ? '<img src="images/icon_subfolder.gif" alt="' . $user->lang['SUBFORUM'] . '" />' : '<img src="images/icon_folder.gif" alt="' . $user->lang['FOLDER'] . '" />';
788 6015 acydburn
                                                break;
789 5330 acydburn
                                        }
790 5330 acydburn
                                }
791 5330 acydburn
792 5330 acydburn
                                $url = $this->u_action . "&amp;parent_id=$this->parent_id&amp;f={$row['forum_id']}";
793 6015 acydburn
794 5330 acydburn
                                $template->assign_block_vars('forums', array(
795 5330 acydburn
                                        'FOLDER_IMAGE'                => $folder_image,
796 6470 acydburn
                                        'FORUM_IMAGE'                => ($row['forum_image']) ? '<img src="' . $phpbb_root_path . $row['forum_image'] . '" alt="" />' : '',
797 6470 acydburn
                                        'FORUM_IMAGE_SRC'        => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '',
798 5330 acydburn
                                        'FORUM_NAME'                => $row['forum_name'],
799 6188 davidmj
                                        'FORUM_DESCRIPTION'        => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield'], $row['forum_desc_options']),
800 5330 acydburn
                                        'FORUM_TOPICS'                => $row['forum_topics'],
801 5330 acydburn
                                        'FORUM_POSTS'                => $row['forum_posts'],
802 6015 acydburn
803 5330 acydburn
                                        'S_FORUM_LINK'                => ($forum_type == FORUM_LINK) ? true : false,
804 5330 acydburn
                                        'S_FORUM_POST'                => ($forum_type == FORUM_POST) ? true : false,
805 6015 acydburn
806 5330 acydburn
                                        'U_FORUM'                        => $this->u_action . '&amp;parent_id=' . $row['forum_id'],
807 5330 acydburn
                                        'U_MOVE_UP'                        => $url . '&amp;action=move_up',
808 5330 acydburn
                                        'U_MOVE_DOWN'                => $url . '&amp;action=move_down',
809 5330 acydburn
                                        'U_EDIT'                        => $url . '&amp;action=edit',
810 5330 acydburn
                                        'U_DELETE'                        => $url . '&amp;action=delete',
811 6015 acydburn
                                        'U_SYNC'                        => $url . '&amp;action=sync')
812 5330 acydburn
                                );
813 5330 acydburn
                        }
814 5330 acydburn
                        while ($row = $db->sql_fetchrow($result));
815 5330 acydburn
                }
816 5330 acydburn
                else if ($this->parent_id)
817 5330 acydburn
                {
818 5330 acydburn
                        $row = $this->get_forum_info($this->parent_id);
819 5330 acydburn
820 5330 acydburn
                        $url = $this->u_action . '&amp;parent_id=' . $this->parent_id . '&amp;f=' . $row['forum_id'];
821 5330 acydburn
822 5330 acydburn
                        $template->assign_vars(array(
823 5330 acydburn
                                'S_NO_FORUMS'                => true,
824 5330 acydburn
825 5330 acydburn
                                'U_EDIT'                        => $url . '&amp;action=edit',
826 5330 acydburn
                                'U_DELETE'                        => $url . '&amp;action=delete',
827 5330 acydburn
                                'U_SYNC'                        => $url . '&amp;action=sync')
828 5330 acydburn
                        );
829 5330 acydburn
                }
830 5330 acydburn
                $db->sql_freeresult($result);
831 5330 acydburn
832 5330 acydburn
                $template->assign_vars(array(
833 5330 acydburn
                        'ERROR_MSG'                => (sizeof($errors)) ? implode('<br />', $errors) : '',
834 5330 acydburn
                        'NAVIGATION'        => $navigation,
835 5330 acydburn
                        'FORUM_BOX'                => $forum_box,
836 5330 acydburn
                        'U_SEL_ACTION'        => $this->u_action,
837 6419 acydburn
                        'U_ACTION'                => $this->u_action . '&amp;parent_id=' . $this->parent_id,
838 6419 acydburn
839 6419 acydburn
                        'U_PROGRESS_BAR'        => $this->u_action . '&amp;action=progress_bar',
840 8099 acydburn
                        'UA_PROGRESS_BAR'        => addslashes($this->u_action . '&amp;action=progress_bar'),
841 8099 acydburn
                ));
842 5330 acydburn
        }
843 5330 acydburn
844 5330 acydburn
        /**
845 5330 acydburn
        * Get forum details
846 5330 acydburn
        */
847 5330 acydburn
        function get_forum_info($forum_id)
848 5330 acydburn
        {
849 5330 acydburn
                global $db;
850 5330 acydburn
851 5330 acydburn
                $sql = 'SELECT *
852 5330 acydburn
                        FROM ' . FORUMS_TABLE . "
853 5330 acydburn
                        WHERE forum_id = $forum_id";
854 5330 acydburn
                $result = $db->sql_query($sql);
855 5330 acydburn
                $row = $db->sql_fetchrow($result);
856 5330 acydburn
                $db->sql_freeresult($result);
857 5330 acydburn
858 5330 acydburn
                if (!$row)
859 5330 acydburn
                {
860 6015 acydburn
                        trigger_error("Forum #$forum_id does not exist", E_USER_ERROR);
861 5330 acydburn
                }
862 5330 acydburn
863 5330 acydburn
                return $row;
864 5330 acydburn
        }
865 5330 acydburn
866 5330 acydburn
        /**
867 5330 acydburn
        * Update forum data
868 5330 acydburn
        */
869 5330 acydburn
        function update_forum_data(&$forum_data)
870 5330 acydburn
        {
871 9309 terrafrost
                global $db, $user, $cache, $phpbb_root_path;
872 5330 acydburn
873 5330 acydburn
                $errors = array();
874 6015 acydburn
875 5330 acydburn
                if (!$forum_data['forum_name'])
876 5330 acydburn
                {
877 5330 acydburn
                        $errors[] = $user->lang['FORUM_NAME_EMPTY'];
878 5330 acydburn
                }
879 5330 acydburn
880 6880 davidmj
                if (utf8_strlen($forum_data['forum_desc']) > 4000)
881 6880 davidmj
                {
882 6880 davidmj
                        $errors[] = $user->lang['FORUM_DESC_TOO_LONG'];
883 6880 davidmj
                }
884 6880 davidmj
885 6880 davidmj
                if (utf8_strlen($forum_data['forum_rules']) > 4000)
886 6880 davidmj
                {
887 6880 davidmj
                        $errors[] = $user->lang['FORUM_RULES_TOO_LONG'];
888 6880 davidmj
                }
889 6880 davidmj
890 5330 acydburn
                if ($forum_data['forum_password'] || $forum_data['forum_password_confirm'])
891 5330 acydburn
                {
892 5330 acydburn
                        if ($forum_data['forum_password'] != $forum_data['forum_password_confirm'])
893 5330 acydburn
                        {
894 5330 acydburn
                                $forum_data['forum_password'] = $forum_data['forum_password_confirm'] = '';
895 5330 acydburn
                                $errors[] = $user->lang['FORUM_PASSWORD_MISMATCH'];
896 5330 acydburn
                        }
897 5330 acydburn
                }
898 5330 acydburn
899 5330 acydburn
                if ($forum_data['prune_days'] < 0 || $forum_data['prune_viewed'] < 0 || $forum_data['prune_freq'] < 0)
900 5330 acydburn
                {
901 5330 acydburn
                        $forum_data['prune_days'] = $forum_data['prune_viewed'] = $forum_data['prune_freq'] = 0;
902 5330 acydburn
                        $errors[] = $user->lang['FORUM_DATA_NEGATIVE'];
903 5330 acydburn
                }
904 8655 acydburn
905 8407 Kellanved
                $range_test_ary = array(
906 8407 Kellanved
                        array('lang' => 'FORUM_TOPICS_PAGE', 'value' => $forum_data['forum_topics_per_page'], 'column_type' => 'TINT:0'),
907 8407 Kellanved
                );
908 8870 acydburn
909 10184 bantu
                if (!empty($forum_data['forum_image']) && !file_exists($phpbb_root_path . $forum_data['forum_image']))
910 9309 terrafrost
                {
911 9309 terrafrost
                        $errors[] = $user->lang['FORUM_IMAGE_NO_EXIST'];
912 9309 terrafrost
                }
913 9309 terrafrost
914 8407 Kellanved
                validate_range($range_test_ary, $errors);
915 5330 acydburn
916 5330 acydburn
                // Set forum flags
917 5330 acydburn
                // 1 = link tracking
918 5330 acydburn
                // 2 = prune old polls
919 5330 acydburn
                // 4 = prune announcements
920 5330 acydburn
                // 8 = prune stickies
921 5330 acydburn
                // 16 = show active topics
922 6161 acydburn
                // 32 = enable post review
923 5330 acydburn
                $forum_data['forum_flags'] = 0;
924 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['forum_link_track']) ? FORUM_FLAG_LINK_TRACK : 0;
925 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['prune_old_polls']) ? FORUM_FLAG_PRUNE_POLL : 0;
926 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['prune_announce']) ? FORUM_FLAG_PRUNE_ANNOUNCE : 0;
927 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['prune_sticky']) ? FORUM_FLAG_PRUNE_STICKY : 0;
928 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['show_active']) ? FORUM_FLAG_ACTIVE_TOPICS : 0;
929 6365 acydburn
                $forum_data['forum_flags'] += ($forum_data['enable_post_review']) ? FORUM_FLAG_POST_REVIEW : 0;
930 9656 acydburn
                $forum_data['forum_flags'] += ($forum_data['enable_quick_reply']) ? FORUM_FLAG_QUICK_REPLY : 0;
931 5330 acydburn
932 5330 acydburn
                // Unset data that are not database fields
933 6022 acydburn
                $forum_data_sql = $forum_data;
934 5330 acydburn
935 6022 acydburn
                unset($forum_data_sql['forum_link_track']);
936 6022 acydburn
                unset($forum_data_sql['prune_old_polls']);
937 6022 acydburn
                unset($forum_data_sql['prune_announce']);
938 6022 acydburn
                unset($forum_data_sql['prune_sticky']);
939 6022 acydburn
                unset($forum_data_sql['show_active']);
940 6161 acydburn
                unset($forum_data_sql['enable_post_review']);
941 9656 acydburn
                unset($forum_data_sql['enable_quick_reply']);
942 6022 acydburn
                unset($forum_data_sql['forum_password_confirm']);
943 6022 acydburn
944 5330 acydburn
                // What are we going to do tonight Brain? The same thing we do everynight,
945 5330 acydburn
                // try to take over the world ... or decide whether to continue update
946 5330 acydburn
                // and if so, whether it's a new forum/cat/link or an existing one
947 5330 acydburn
                if (sizeof($errors))
948 5330 acydburn
                {
949 5330 acydburn
                        return $errors;
950 5330 acydburn
                }
951 8194 acydburn
952 8194 acydburn
                // As we don't know the old password, it's kinda tricky to detect changes
953 8143 kellanved
                if ($forum_data_sql['forum_password_unset'])
954 8143 kellanved
                {
955 8143 kellanved
                        $forum_data_sql['forum_password'] = '';
956 8143 kellanved
                }
957 8143 kellanved
                else if (empty($forum_data_sql['forum_password']))
958 8143 kellanved
                {
959 8143 kellanved
                        unset($forum_data_sql['forum_password']);
960 8143 kellanved
                }
961 8143 kellanved
                else
962 8143 kellanved
                {
963 8143 kellanved
                        $forum_data_sql['forum_password'] = phpbb_hash($forum_data_sql['forum_password']);
964 8143 kellanved
                }
965 8143 kellanved
                unset($forum_data_sql['forum_password_unset']);
966 8655 acydburn
967 6022 acydburn
                if (!isset($forum_data_sql['forum_id']))
968 5330 acydburn
                {
969 5330 acydburn
                        // no forum_id means we're creating a new forum
970 6022 acydburn
                        unset($forum_data_sql['type_action']);
971 5330 acydburn
972 6022 acydburn
                        if ($forum_data_sql['parent_id'])
973 5330 acydburn
                        {
974 7456 acydburn
                                $sql = 'SELECT left_id, right_id, forum_type
975 5330 acydburn
                                        FROM ' . FORUMS_TABLE . '
976 6022 acydburn
                                        WHERE forum_id = ' . $forum_data_sql['parent_id'];
977 5330 acydburn
                                $result = $db->sql_query($sql);
978 6015 acydburn
                                $row = $db->sql_fetchrow($result);
979 6015 acydburn
                                $db->sql_freeresult($result);
980 5330 acydburn
981 6015 acydburn
                                if (!$row)
982 5330 acydburn
                                {
983 6320 acydburn
                                        trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&amp;' . $this->parent_id), E_USER_WARNING);
984 5330 acydburn
                                }
985 5330 acydburn
986 7456 acydburn
                                if ($row['forum_type'] == FORUM_LINK)
987 7456 acydburn
                                {
988 7456 acydburn
                                        $errors[] = $user->lang['PARENT_IS_LINK_FORUM'];
989 7456 acydburn
                                        return $errors;
990 7456 acydburn
                                }
991 7456 acydburn
992 5330 acydburn
                                $sql = 'UPDATE ' . FORUMS_TABLE . '
993 5330 acydburn
                                        SET left_id = left_id + 2, right_id = right_id + 2
994 5330 acydburn
                                        WHERE left_id > ' . $row['right_id'];
995 5330 acydburn
                                $db->sql_query($sql);
996 5330 acydburn
997 5330 acydburn
                                $sql = 'UPDATE ' . FORUMS_TABLE . '
998 5330 acydburn
                                        SET right_id = right_id + 2
999 5330 acydburn
                                        WHERE ' . $row['left_id'] . ' BETWEEN left_id AND right_id';
1000 5330 acydburn
                                $db->sql_query($sql);
1001 5330 acydburn
1002 6022 acydburn
                                $forum_data_sql['left_id'] = $row['right_id'];
1003 6022 acydburn
                                $forum_data_sql['right_id'] = $row['right_id'] + 1;
1004 5330 acydburn
                        }
1005 5330 acydburn
                        else
1006 5330 acydburn
                        {
1007 5330 acydburn
                                $sql = 'SELECT MAX(right_id) AS right_id
1008 5330 acydburn
                                        FROM ' . FORUMS_TABLE;
1009 5330 acydburn
                                $result = $db->sql_query($sql);
1010 5330 acydburn
                                $row = $db->sql_fetchrow($result);
1011 5330 acydburn
                                $db->sql_freeresult($result);
1012 5330 acydburn
1013 6022 acydburn
                                $forum_data_sql['left_id'] = $row['right_id'] + 1;
1014 6022 acydburn
                                $forum_data_sql['right_id'] = $row['right_id'] + 2;
1015 5330 acydburn
                        }
1016 5330 acydburn
1017 6022 acydburn
                        $sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT', $forum_data_sql);
1018 5330 acydburn
                        $db->sql_query($sql);
1019 5330 acydburn
1020 5330 acydburn
                        $forum_data['forum_id'] = $db->sql_nextid();
1021 6015 acydburn
1022 5330 acydburn
                        add_log('admin', 'LOG_FORUM_ADD', $forum_data['forum_name']);
1023 5330 acydburn
                }
1024 5330 acydburn
                else
1025 5330 acydburn
                {
1026 6022 acydburn
                        $row = $this->get_forum_info($forum_data_sql['forum_id']);
1027 5330 acydburn
1028 6022 acydburn
                        if ($row['forum_type'] == FORUM_POST && $row['forum_type'] != $forum_data_sql['forum_type'])
1029 5330 acydburn
                        {
1030 7895 acydburn
                                // Has subforums and want to change into a link?
1031 7895 acydburn
                                if ($row['right_id'] - $row['left_id'] > 1 && $forum_data_sql['forum_type'] == FORUM_LINK)
1032 7895 acydburn
                                {
1033 7895 acydburn
                                        $errors[] = $user->lang['FORUM_WITH_SUBFORUMS_NOT_TO_LINK'];
1034 7895 acydburn
                                        return $errors;
1035 7895 acydburn
                                }
1036 7895 acydburn
1037 5330 acydburn
                                // we're turning a postable forum into a non-postable forum
1038 6022 acydburn
                                if ($forum_data_sql['type_action'] == 'move')
1039 5330 acydburn
                                {
1040 6022 acydburn
                                        $to_forum_id = request_var('to_forum_id', 0);
1041 6022 acydburn
1042 6022 acydburn
                                        if ($to_forum_id)
1043 5330 acydburn
                                        {
1044 6022 acydburn
                                                $errors = $this->move_forum_content($forum_data_sql['forum_id'], $to_forum_id);
1045 5330 acydburn
                                        }
1046 5330 acydburn
                                        else
1047 5330 acydburn
                                        {
1048 5330 acydburn
                                                return array($user->lang['NO_DESTINATION_FORUM']);
1049 5330 acydburn
                                        }
1050 5330 acydburn
                                }
1051 6022 acydburn
                                else if ($forum_data_sql['type_action'] == 'delete')
1052 5330 acydburn
                                {
1053 6022 acydburn
                                        $errors = $this->delete_forum_content($forum_data_sql['forum_id']);
1054 5330 acydburn
                                }
1055 5330 acydburn
                                else
1056 5330 acydburn
                                {
1057 5330 acydburn
                                        return array($user->lang['NO_FORUM_ACTION']);
1058 5330 acydburn
                                }
1059 5330 acydburn
1060 6320 acydburn
                                $forum_data_sql['forum_posts'] = $forum_data_sql['forum_topics'] = $forum_data_sql['forum_topics_real'] = $forum_data_sql['forum_last_post_id'] = $forum_data_sql['forum_last_poster_id'] = $forum_data_sql['forum_last_post_time'] = 0;
1061 6320 acydburn
                                $forum_data_sql['forum_last_poster_name'] = $forum_data_sql['forum_last_poster_colour'] = '';
1062 5330 acydburn
                        }
1063 6601 acydburn
                        else if ($row['forum_type'] == FORUM_CAT && $forum_data_sql['forum_type'] == FORUM_LINK)
1064 6601 acydburn
                        {
1065 6601 acydburn
                                // Has subforums?
1066 6601 acydburn
                                if ($row['right_id'] - $row['left_id'] > 1)
1067 6601 acydburn
                                {
1068 6601 acydburn
                                        // We are turning a category into a link - but need to decide what to do with the subforums.
1069 6601 acydburn
                                        $action_subforums = request_var('action_subforums', '');
1070 6601 acydburn
                                        $subforums_to_id = request_var('subforums_to_id', 0);
1071 5330 acydburn
1072 6601 acydburn
                                        if ($action_subforums == 'delete')
1073 6601 acydburn
                                        {
1074 6601 acydburn
                                                $rows = get_forum_branch($row['forum_id'], 'children', 'descending', false);
1075 6601 acydburn
1076 6601 acydburn
                                                foreach ($rows as $_row)
1077 6601 acydburn
                                                {
1078 6601 acydburn
                                                        // Do not remove the forum id we are about to change. ;)
1079 6601 acydburn
                                                        if ($_row['forum_id'] == $row['forum_id'])
1080 6601 acydburn
                                                        {
1081 6601 acydburn
                                                                continue;
1082 6601 acydburn
                                                        }
1083 6601 acydburn
1084 6601 acydburn
                                                        $forum_ids[] = $_row['forum_id'];
1085 6601 acydburn
                                                        $errors = array_merge($errors, $this->delete_forum_content($_row['forum_id']));
1086 6601 acydburn
                                                }
1087 6601 acydburn
1088 6601 acydburn
                                                if (sizeof($errors))
1089 6601 acydburn
                                                {
1090 6601 acydburn
                                                        return $errors;
1091 6601 acydburn
                                                }
1092 6601 acydburn
1093 6601 acydburn
                                                if (sizeof($forum_ids))
1094 6601 acydburn
                                                {
1095 6601 acydburn
                                                        $sql = 'DELETE FROM ' . FORUMS_TABLE . '
1096 6601 acydburn
                                                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1097 6601 acydburn
                                                        $db->sql_query($sql);
1098 6601 acydburn
1099 6601 acydburn
                                                        $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
1100 6601 acydburn
                                                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1101 6601 acydburn
                                                        $db->sql_query($sql);
1102 6601 acydburn
1103 6601 acydburn
                                                        $sql = 'DELETE FROM ' . ACL_USERS_TABLE . '
1104 6601 acydburn
                                                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1105 6601 acydburn
                                                        $db->sql_query($sql);
1106 6601 acydburn
1107 6601 acydburn
                                                        // Delete forum ids from extension groups table
1108 8147 acydburn
                                                        $sql = 'SELECT group_id, allowed_forums
1109 6601 acydburn
                                                                FROM ' . EXTENSION_GROUPS_TABLE;
1110 6601 acydburn
                                                        $result = $db->sql_query($sql);
1111 6601 acydburn
1112 6601 acydburn
                                                        while ($_row = $db->sql_fetchrow($result))
1113 6601 acydburn
                                                        {
1114 6601 acydburn
                                                                if (!$_row['allowed_forums'])
1115 6601 acydburn
                                                                {
1116 6601 acydburn
                                                                        continue;
1117 6601 acydburn
                                                                }
1118 6601 acydburn
1119 6601 acydburn
                                                                $allowed_forums = unserialize(trim($_row['allowed_forums']));
1120 6601 acydburn
                                                                $allowed_forums = array_diff($allowed_forums, $forum_ids);
1121 6601 acydburn
1122 8147 acydburn
                                                                $sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . "
1123 6601 acydburn
                                                                        SET allowed_forums = '" . ((sizeof($allowed_forums)) ? serialize($allowed_forums) : '') . "'
1124 6601 acydburn
                                                                        WHERE group_id = {$_row['group_id']}";
1125 6601 acydburn
                                                                $db->sql_query($sql);
1126 6601 acydburn
                                                        }
1127 6601 acydburn
                                                        $db->sql_freeresult($result);
1128 6601 acydburn
1129 6601 acydburn
                                                        $cache->destroy('_extensions');
1130 6601 acydburn
                                                }
1131 6601 acydburn
                                        }
1132 6601 acydburn
                                        else if ($action_subforums == 'move')
1133 6601 acydburn
                                        {
1134 6601 acydburn
                                                if (!$subforums_to_id)
1135 6601 acydburn
                                                {
1136 6601 acydburn
                                                        return array($user->lang['NO_DESTINATION_FORUM']);
1137 6601 acydburn
                                                }
1138 6601 acydburn
1139 8147 acydburn
                                                $sql = 'SELECT forum_name
1140 6601 acydburn
                                                        FROM ' . FORUMS_TABLE . '
1141 6601 acydburn
                                                        WHERE forum_id = ' . $subforums_to_id;
1142 6601 acydburn
                                                $result = $db->sql_query($sql);
1143 6601 acydburn
                                                $_row = $db->sql_fetchrow($result);
1144 6601 acydburn
                                                $db->sql_freeresult($result);
1145 6601 acydburn
1146 6601 acydburn
                                                if (!$_row)
1147 6601 acydburn
                                                {
1148 6601 acydburn
                                                        return array($user->lang['NO_FORUM']);
1149 6601 acydburn
                                                }
1150 6601 acydburn
1151 6601 acydburn
                                                $subforums_to_name = $_row['forum_name'];
1152 6601 acydburn
1153 6601 acydburn
                                                $sql = 'SELECT forum_id
1154 6601 acydburn
                                                        FROM ' . FORUMS_TABLE . "
1155 6601 acydburn
                                                        WHERE parent_id = {$row['forum_id']}";
1156 6601 acydburn
                                                $result = $db->sql_query($sql);
1157 6601 acydburn
1158 6601 acydburn
                                                while ($_row = $db->sql_fetchrow($result))
1159 6601 acydburn
                                                {
1160 6601 acydburn
                                                        $this->move_forum($_row['forum_id'], $subforums_to_id);
1161 6601 acydburn
                                                }
1162 6601 acydburn
                                                $db->sql_freeresult($result);
1163 6601 acydburn
1164 6601 acydburn
                                                $sql = 'UPDATE ' . FORUMS_TABLE . "
1165 6601 acydburn
                                                        SET parent_id = $subforums_to_id
1166 6601 acydburn
                                                        WHERE parent_id = {$row['forum_id']}";
1167 6601 acydburn
                                                $db->sql_query($sql);
1168 6601 acydburn
                                        }
1169 6601 acydburn
1170 6601 acydburn
                                        // Adjust the left/right id
1171 6601 acydburn
                                        $sql = 'UPDATE ' . FORUMS_TABLE . '
1172 6601 acydburn
                                                SET right_id = left_id + 1
1173 6601 acydburn
                                                WHERE forum_id = ' . $row['forum_id'];
1174 6601 acydburn
                                        $db->sql_query($sql);
1175 6601 acydburn
                                }
1176 6601 acydburn
                        }
1177 7318 davidmj
                        else if ($row['forum_type'] == FORUM_CAT && $forum_data_sql['forum_type'] == FORUM_POST)
1178 7318 davidmj
                        {
1179 7318 davidmj
                                // Changing a category to a forum? Reset the data (you can't post directly in a cat, you must use a forum)
1180 7318 davidmj
                                $forum_data_sql['forum_posts'] = 0;
1181 7318 davidmj
                                $forum_data_sql['forum_topics'] = 0;
1182 7318 davidmj
                                $forum_data_sql['forum_topics_real'] = 0;
1183 7318 davidmj
                                $forum_data_sql['forum_last_post_id'] = 0;
1184 7318 davidmj
                                $forum_data_sql['forum_last_post_subject'] = '';
1185 7318 davidmj
                                $forum_data_sql['forum_last_post_time'] = 0;
1186 7318 davidmj
                                $forum_data_sql['forum_last_poster_id'] = 0;
1187 7318 davidmj
                                $forum_data_sql['forum_last_poster_name'] = '';
1188 7318 davidmj
                                $forum_data_sql['forum_last_poster_colour'] = '';
1189 7318 davidmj
                        }
1190 6601 acydburn
1191 5330 acydburn
                        if (sizeof($errors))
1192 5330 acydburn
                        {
1193 5330 acydburn
                                return $errors;
1194 5330 acydburn
                        }
1195 6015 acydburn
1196 6022 acydburn
                        if ($row['parent_id'] != $forum_data_sql['parent_id'])
1197 5330 acydburn
                        {
1198 8870 acydburn
                                if ($row['forum_id'] != $forum_data_sql['parent_id'])
1199 8870 acydburn
                                {
1200 8870 acydburn
                                        $errors = $this->move_forum($forum_data_sql['forum_id'], $forum_data_sql['parent_id']);
1201 8870 acydburn
                                }
1202 8870 acydburn
                                else
1203 8870 acydburn
                                {
1204 8870 acydburn
                                        $forum_data_sql['parent_id'] = $row['parent_id'];
1205 8870 acydburn
                                }
1206 5330 acydburn
                        }
1207 6015 acydburn
1208 5330 acydburn
                        if (sizeof($errors))
1209 5330 acydburn
                        {
1210 5330 acydburn
                                return $errors;
1211 5330 acydburn
                        }
1212 5330 acydburn
1213 6022 acydburn
                        unset($forum_data_sql['type_action']);
1214 6015 acydburn
1215 6022 acydburn
                        if ($row['forum_name'] != $forum_data_sql['forum_name'])
1216 5330 acydburn
                        {
1217 6816 acydburn
                                // the forum name has changed, clear the parents list of all forums (for safety)
1218 5330 acydburn
                                $sql = 'UPDATE ' . FORUMS_TABLE . "
1219 6816 acydburn
                                        SET forum_parents = ''";
1220 5330 acydburn
                                $db->sql_query($sql);
1221 5330 acydburn
                        }
1222 5330 acydburn
1223 5940 acydburn
                        // Setting the forum id to the forum id is not really received well by some dbs. ;)
1224 6022 acydburn
                        $forum_id = $forum_data_sql['forum_id'];
1225 6022 acydburn
                        unset($forum_data_sql['forum_id']);
1226 5940 acydburn
1227 5330 acydburn
                        $sql = 'UPDATE ' . FORUMS_TABLE . '
1228 6238 davidmj
                                SET ' . $db->sql_build_array('UPDATE', $forum_data_sql) . '
1229 5940 acydburn
                                WHERE forum_id = ' . $forum_id;
1230 5330 acydburn
                        $db->sql_query($sql);
1231 5330 acydburn
1232 5940 acydburn
                        // Add it back
1233 5940 acydburn
                        $forum_data['forum_id'] = $forum_id;
1234 5940 acydburn
1235 5330 acydburn
                        add_log('admin', 'LOG_FORUM_EDIT', $forum_data['forum_name']);
1236 5330 acydburn
                }
1237 5967 acydburn
1238 5967 acydburn
                return $errors;
1239 5330 acydburn
        }
1240 5330 acydburn
1241 5330 acydburn
        /**
1242 5330 acydburn
        * Move forum
1243 5330 acydburn
        */
1244 5330 acydburn
        function move_forum($from_id, $to_id)
1245 5330 acydburn
        {
1246 7456 acydburn
                global $db, $user;
1247 5330 acydburn
1248 7456 acydburn
                $to_data = $moved_ids = $errors = array();
1249 7456 acydburn
1250 7456 acydburn
                // Check if we want to move to a parent with link type
1251 7456 acydburn
                if ($to_id > 0)
1252 7456 acydburn
                {
1253 7456 acydburn
                        $to_data = $this->get_forum_info($to_id);
1254 7456 acydburn
1255 7456 acydburn
                        if ($to_data['forum_type'] == FORUM_LINK)
1256 7456 acydburn
                        {
1257 7456 acydburn
                                $errors[] = $user->lang['PARENT_IS_LINK_FORUM'];
1258 7456 acydburn
                                return $errors;
1259 7456 acydburn
                        }
1260 7456 acydburn
                }
1261 7456 acydburn
1262 5330 acydburn
                $moved_forums = get_forum_branch($from_id, 'children', 'descending');
1263 5330 acydburn
                $from_data = $moved_forums[0];
1264 5330 acydburn
                $diff = sizeof($moved_forums) * 2;
1265 5330 acydburn
1266 5330 acydburn
                $moved_ids = array();
1267 5330 acydburn
                for ($i = 0; $i < sizeof($moved_forums); ++$i)
1268 5330 acydburn
                {
1269 5330 acydburn
                        $moved_ids[] = $moved_forums[$i]['forum_id'];
1270 5330 acydburn
                }
1271 5330 acydburn
1272 5330 acydburn
                // Resync parents
1273 5330 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1274 5330 acydburn
                        SET right_id = right_id - $diff, forum_parents = ''
1275 5330 acydburn
                        WHERE left_id < " . $from_data['right_id'] . "
1276 5330 acydburn
                                AND right_id > " . $from_data['right_id'];
1277 5330 acydburn
                $db->sql_query($sql);
1278 5330 acydburn
1279 5330 acydburn
                // Resync righthand side of tree
1280 5330 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1281 5330 acydburn
                        SET left_id = left_id - $diff, right_id = right_id - $diff, forum_parents = ''
1282 5330 acydburn
                        WHERE left_id > " . $from_data['right_id'];
1283 5330 acydburn
                $db->sql_query($sql);
1284 5330 acydburn
1285 5330 acydburn
                if ($to_id > 0)
1286 5330 acydburn
                {
1287 7498 acydburn
                        // Retrieve $to_data again, it may have been changed...
1288 7498 acydburn
                        $to_data = $this->get_forum_info($to_id);
1289 7498 acydburn
1290 5330 acydburn
                        // Resync new parents
1291 5330 acydburn
                        $sql = 'UPDATE ' . FORUMS_TABLE . "
1292 5330 acydburn
                                SET right_id = right_id + $diff, forum_parents = ''
1293 5330 acydburn
                                WHERE " . $to_data['right_id'] . ' BETWEEN left_id AND right_id
1294 6271 acydburn
                                        AND ' . $db->sql_in_set('forum_id', $moved_ids, true);
1295 5330 acydburn
                        $db->sql_query($sql);
1296 5330 acydburn
1297 5330 acydburn
                        // Resync the righthand side of the tree
1298 5330 acydburn
                        $sql = 'UPDATE ' . FORUMS_TABLE . "
1299 5330 acydburn
                                SET left_id = left_id + $diff, right_id = right_id + $diff, forum_parents = ''
1300 5330 acydburn
                                WHERE left_id > " . $to_data['right_id'] . '
1301 6271 acydburn
                                        AND ' . $db->sql_in_set('forum_id', $moved_ids, true);
1302 5330 acydburn
                        $db->sql_query($sql);
1303 5330 acydburn
1304 5330 acydburn
                        // Resync moved branch
1305 5330 acydburn
                        $to_data['right_id'] += $diff;
1306 6015 acydburn
1307 5330 acydburn
                        if ($to_data['right_id'] > $from_data['right_id'])
1308 5330 acydburn
                        {
1309 5330 acydburn
                                $diff = '+ ' . ($to_data['right_id'] - $from_data['right_id'] - 1);
1310 5330 acydburn
                        }
1311 5330 acydburn
                        else
1312 5330 acydburn
                        {
1313 5330 acydburn
                                $diff = '- ' . abs($to_data['right_id'] - $from_data['right_id'] - 1);
1314 5330 acydburn
                        }
1315 5330 acydburn
                }
1316 5330 acydburn
                else
1317 5330 acydburn
                {
1318 5330 acydburn
                        $sql = 'SELECT MAX(right_id) AS right_id
1319 5330 acydburn
                                FROM ' . FORUMS_TABLE . '
1320 6271 acydburn
                                WHERE ' . $db->sql_in_set('forum_id', $moved_ids, true);
1321 5330 acydburn
                        $result = $db->sql_query($sql);
1322 5330 acydburn
                        $row = $db->sql_fetchrow($result);
1323 5330 acydburn
                        $db->sql_freeresult($result);
1324 5330 acydburn
1325 5330 acydburn
                        $diff = '+ ' . ($row['right_id'] - $from_data['left_id'] + 1);
1326 5330 acydburn
                }
1327 5330 acydburn
1328 5330 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1329 5330 acydburn
                        SET left_id = left_id $diff, right_id = right_id $diff, forum_parents = ''
1330 6271 acydburn
                        WHERE " . $db->sql_in_set('forum_id', $moved_ids);
1331 5330 acydburn
                $db->sql_query($sql);
1332 7456 acydburn
1333 7456 acydburn
                return $errors;
1334 5330 acydburn
        }
1335 5330 acydburn
1336 5330 acydburn
        /**
1337 5330 acydburn
        * Move forum content from one to another forum
1338 5330 acydburn
        */
1339 5330 acydburn
        function move_forum_content($from_id, $to_id, $sync = true)
1340 5330 acydburn
        {
1341 5330 acydburn
                global $db;
1342 5330 acydburn
1343 6320 acydburn
                $table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
1344 6015 acydburn
1345 5330 acydburn
                foreach ($table_ary as $table)
1346 5330 acydburn
                {
1347 5330 acydburn
                        $sql = "UPDATE $table
1348 5330 acydburn
                                SET forum_id = $to_id
1349 5330 acydburn
                                WHERE forum_id = $from_id";
1350 5330 acydburn
                        $db->sql_query($sql);
1351 5330 acydburn
                }
1352 5330 acydburn
                unset($table_ary);
1353 5330 acydburn
1354 6021 acydburn
                $table_ary = array(FORUMS_ACCESS_TABLE, FORUMS_TRACK_TABLE, FORUMS_WATCH_TABLE, MODERATOR_CACHE_TABLE);
1355 5330 acydburn
1356 5330 acydburn
                foreach ($table_ary as $table)
1357 5330 acydburn
                {
1358 5330 acydburn
                        $sql = "DELETE FROM $table
1359 5330 acydburn
                                WHERE forum_id = $from_id";
1360 5330 acydburn
                        $db->sql_query($sql);
1361 5330 acydburn
                }
1362 5330 acydburn
1363 5330 acydburn
                if ($sync)
1364 5330 acydburn
                {
1365 6015 acydburn
                        // Delete ghost topics that link back to the same forum then resync counters
1366 5330 acydburn
                        sync('topic_moved');
1367 7466 davidmj
                        sync('forum', 'forum_id', $to_id, false, true);
1368 5330 acydburn
                }
1369 5330 acydburn
1370 5330 acydburn
                return array();
1371 5330 acydburn
        }
1372 5330 acydburn
1373 5330 acydburn
        /**
1374 5330 acydburn
        * Remove complete forum
1375 5330 acydburn
        */
1376 5330 acydburn
        function delete_forum($forum_id, $action_posts = 'delete', $action_subforums = 'delete', $posts_to_id = 0, $subforums_to_id = 0)
1377 5330 acydburn
        {
1378 5330 acydburn
                global $db, $user, $cache;
1379 5330 acydburn
1380 5330 acydburn
                $forum_data = $this->get_forum_info($forum_id);
1381 5330 acydburn
1382 5330 acydburn
                $errors = array();
1383 5330 acydburn
                $log_action_posts = $log_action_forums = $posts_to_name = $subforums_to_name = '';
1384 6232 acydburn
                $forum_ids = array($forum_id);
1385 5330 acydburn
1386 5330 acydburn
                if ($action_posts == 'delete')
1387 5330 acydburn
                {
1388 5330 acydburn
                        $log_action_posts = 'POSTS';
1389 5330 acydburn
                        $errors = array_merge($errors, $this->delete_forum_content($forum_id));
1390 5330 acydburn
                }
1391 5330 acydburn
                else if ($action_posts == 'move')
1392 5330 acydburn
                {
1393 5330 acydburn
                        if (!$posts_to_id)
1394 5330 acydburn
                        {
1395 5330 acydburn
                                $errors[] = $user->lang['NO_DESTINATION_FORUM'];
1396 5330 acydburn
                        }
1397 5330 acydburn
                        else
1398 5330 acydburn
                        {
1399 5330 acydburn
                                $log_action_posts = 'MOVE_POSTS';
1400 5330 acydburn
1401 8147 acydburn
                                $sql = 'SELECT forum_name
1402 5330 acydburn
                                        FROM ' . FORUMS_TABLE . '
1403 5330 acydburn
                                        WHERE forum_id = ' . $posts_to_id;
1404 5330 acydburn
                                $result = $db->sql_query($sql);
1405 6015 acydburn
                                $row = $db->sql_fetchrow($result);
1406 6015 acydburn
                                $db->sql_freeresult($result);
1407 5330 acydburn
1408 6015 acydburn
                                if (!$row)
1409 5330 acydburn
                                {
1410 5330 acydburn
                                        $errors[] = $user->lang['NO_FORUM'];
1411 5330 acydburn
                                }
1412 5330 acydburn
                                else
1413 5330 acydburn
                                {
1414 5330 acydburn
                                        $posts_to_name = $row['forum_name'];
1415 6015 acydburn
                                        $errors = array_merge($errors, $this->move_forum_content($forum_id, $posts_to_id));
1416 5330 acydburn
                                }
1417 5330 acydburn
                        }
1418 5330 acydburn
                }
1419 5330 acydburn
1420 5330 acydburn
                if (sizeof($errors))
1421 5330 acydburn
                {
1422 5330 acydburn
                        return $errors;
1423 5330 acydburn
                }
1424 5330 acydburn
1425 5330 acydburn
                if ($action_subforums == 'delete')
1426 5330 acydburn
                {
1427 5330 acydburn
                        $log_action_forums = 'FORUMS';
1428 5330 acydburn
                        $rows = get_forum_branch($forum_id, 'children', 'descending', false);
1429 5330 acydburn
1430 5330 acydburn
                        foreach ($rows as $row)
1431 5330 acydburn
                        {
1432 5330 acydburn
                                $forum_ids[] = $row['forum_id'];
1433 5330 acydburn
                                $errors = array_merge($errors, $this->delete_forum_content($row['forum_id']));
1434 5330 acydburn
                        }
1435 5330 acydburn
1436 5330 acydburn
                        if (sizeof($errors))
1437 5330 acydburn
                        {
1438 5330 acydburn
                                return $errors;
1439 5330 acydburn
                        }
1440 5330 acydburn
1441 5330 acydburn
                        $diff = sizeof($forum_ids) * 2;
1442 5330 acydburn
1443 5330 acydburn
                        $sql = 'DELETE FROM ' . FORUMS_TABLE . '
1444 6271 acydburn
                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1445 5330 acydburn
                        $db->sql_query($sql);
1446 6320 acydburn
1447 6320 acydburn
                        $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
1448 6320 acydburn
                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1449 6320 acydburn
                        $db->sql_query($sql);
1450 6320 acydburn
1451 6320 acydburn
                        $sql = 'DELETE FROM ' . ACL_USERS_TABLE . '
1452 6320 acydburn
                                WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
1453 6320 acydburn
                        $db->sql_query($sql);
1454 5330 acydburn
                }
1455 5330 acydburn
                else if ($action_subforums == 'move')
1456 5330 acydburn
                {
1457 5330 acydburn
                        if (!$subforums_to_id)
1458 5330 acydburn
                        {
1459 5330 acydburn
                                $errors[] = $user->lang['NO_DESTINATION_FORUM'];
1460 5330 acydburn
                        }
1461 5330 acydburn
                        else
1462 5330 acydburn
                        {
1463 5330 acydburn
                                $log_action_forums = 'MOVE_FORUMS';
1464 5330 acydburn
1465 8147 acydburn
                                $sql = 'SELECT forum_name
1466 5330 acydburn
                                        FROM ' . FORUMS_TABLE . '
1467 5330 acydburn
                                        WHERE forum_id = ' . $subforums_to_id;
1468 5330 acydburn
                                $result = $db->sql_query($sql);
1469 6015 acydburn
                                $row = $db->sql_fetchrow($result);
1470 6015 acydburn
                                $db->sql_freeresult($result);
1471 5330 acydburn
1472 6015 acydburn
                                if (!$row)
1473 5330 acydburn
                                {
1474 5330 acydburn
                                        $errors[] = $user->lang['NO_FORUM'];
1475 5330 acydburn
                                }
1476 5330 acydburn
                                else
1477 5330 acydburn
                                {
1478 5330 acydburn
                                        $subforums_to_name = $row['forum_name'];
1479 5330 acydburn
1480 5330 acydburn
                                        $sql = 'SELECT forum_id
1481 5330 acydburn
                                                FROM ' . FORUMS_TABLE . "
1482 5330 acydburn
                                                WHERE parent_id = $forum_id";
1483 5330 acydburn
                                        $result = $db->sql_query($sql);
1484 5330 acydburn
1485 5330 acydburn
                                        while ($row = $db->sql_fetchrow($result))
1486 5330 acydburn
                                        {
1487 5330 acydburn
                                                $this->move_forum($row['forum_id'], $subforums_to_id);
1488 5330 acydburn
                                        }
1489 5330 acydburn
                                        $db->sql_freeresult($result);
1490 5330 acydburn
1491 6816 acydburn
                                        // Grab new forum data for correct tree updating later
1492 6816 acydburn
                                        $forum_data = $this->get_forum_info($forum_id);
1493 6816 acydburn
1494 5330 acydburn
                                        $sql = 'UPDATE ' . FORUMS_TABLE . "
1495 5330 acydburn
                                                SET parent_id = $subforums_to_id
1496 5330 acydburn
                                                WHERE parent_id = $forum_id";
1497 5330 acydburn
                                        $db->sql_query($sql);
1498 5330 acydburn
1499 5330 acydburn
                                        $diff = 2;
1500 5330 acydburn
                                        $sql = 'DELETE FROM ' . FORUMS_TABLE . "
1501 5330 acydburn
                                                WHERE forum_id = $forum_id";
1502 5330 acydburn
                                        $db->sql_query($sql);
1503 6320 acydburn
1504 6320 acydburn
                                        $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . "
1505 6320 acydburn
                                                WHERE forum_id = $forum_id";
1506 6320 acydburn
                                        $db->sql_query($sql);
1507 6320 acydburn
1508 6320 acydburn
                                        $sql = 'DELETE FROM ' . ACL_USERS_TABLE . "
1509 6320 acydburn
                                                WHERE forum_id = $forum_id";
1510 6320 acydburn
                                        $db->sql_query($sql);
1511 5330 acydburn
                                }
1512 5330 acydburn
                        }
1513 5330 acydburn
1514 5330 acydburn
                        if (sizeof($errors))
1515 5330 acydburn
                        {
1516 5330 acydburn
                                return $errors;
1517 5330 acydburn
                        }
1518 5330 acydburn
                }
1519 5330 acydburn
                else
1520 5330 acydburn
                {
1521 5330 acydburn
                        $diff = 2;
1522 5330 acydburn
                        $sql = 'DELETE FROM ' . FORUMS_TABLE . "
1523 5330 acydburn
                                WHERE forum_id = $forum_id";
1524 5330 acydburn
                        $db->sql_query($sql);
1525 6320 acydburn
1526 6320 acydburn
                        $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . "
1527 6320 acydburn
                                WHERE forum_id = $forum_id";
1528 6320 acydburn
                        $db->sql_query($sql);
1529 6320 acydburn
1530 6320 acydburn
                        $sql = 'DELETE FROM ' . ACL_USERS_TABLE . "
1531 6320 acydburn
                                WHERE forum_id = $forum_id";
1532 6320 acydburn
                        $db->sql_query($sql);
1533 5330 acydburn
                }
1534 5330 acydburn
1535 5330 acydburn
                // Resync tree
1536 5330 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1537 5330 acydburn
                        SET right_id = right_id - $diff
1538 5330 acydburn
                        WHERE left_id < {$forum_data['right_id']} AND right_id > {$forum_data['right_id']}";
1539 5330 acydburn
                $db->sql_query($sql);
1540 5330 acydburn
1541 5330 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1542 5330 acydburn
                        SET left_id = left_id - $diff, right_id = right_id - $diff
1543 5330 acydburn
                        WHERE left_id > {$forum_data['right_id']}";
1544 5330 acydburn
                $db->sql_query($sql);
1545 5330 acydburn
1546 5330 acydburn
                // Delete forum ids from extension groups table
1547 8147 acydburn
                $sql = 'SELECT group_id, allowed_forums
1548 6015 acydburn
                        FROM ' . EXTENSION_GROUPS_TABLE;
1549 5330 acydburn
                $result = $db->sql_query($sql);
1550 5330 acydburn
1551 5330 acydburn
                while ($row = $db->sql_fetchrow($result))
1552 5330 acydburn
                {
1553 6015 acydburn
                        if (!$row['allowed_forums'])
1554 6015 acydburn
                        {
1555 6015 acydburn
                                continue;
1556 6015 acydburn
                        }
1557 6015 acydburn
1558 5330 acydburn
                        $allowed_forums = unserialize(trim($row['allowed_forums']));
1559 5330 acydburn
                        $allowed_forums = array_diff($allowed_forums, $forum_ids);
1560 5330 acydburn
1561 8147 acydburn
                        $sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . "
1562 5330 acydburn
                                SET allowed_forums = '" . ((sizeof($allowed_forums)) ? serialize($allowed_forums) : '') . "'
1563 5330 acydburn
                                WHERE group_id = {$row['group_id']}";
1564 5330 acydburn
                        $db->sql_query($sql);
1565 5330 acydburn
                }
1566 6015 acydburn
                $db->sql_freeresult($result);
1567 6015 acydburn
1568 5494 acydburn
                $cache->destroy('_extensions');
1569 5330 acydburn
1570 5330 acydburn
                $log_action = implode('_', array($log_action_posts, $log_action_forums));
1571 5330 acydburn
1572 5330 acydburn
                switch ($log_action)
1573 5330 acydburn
                {
1574 5330 acydburn
                        case 'MOVE_POSTS_MOVE_FORUMS':
1575 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_MOVE_FORUMS', $posts_to_name, $subforums_to_name, $forum_data['forum_name']);
1576 5330 acydburn
                        break;
1577 6015 acydburn
1578 5330 acydburn
                        case 'MOVE_POSTS_FORUMS':
1579 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_FORUMS', $posts_to_name, $forum_data['forum_name']);
1580 5330 acydburn
                        break;
1581 6015 acydburn
1582 5330 acydburn
                        case 'POSTS_MOVE_FORUMS':
1583 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_POSTS_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']);
1584 5330 acydburn
                        break;
1585 6015 acydburn
1586 5330 acydburn
                        case '_MOVE_FORUMS':
1587 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']);
1588 5330 acydburn
                        break;
1589 6015 acydburn
1590 5330 acydburn
                        case 'MOVE_POSTS_':
1591 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS', $posts_to_name, $forum_data['forum_name']);
1592 5330 acydburn
                        break;
1593 5330 acydburn
1594 5330 acydburn
                        case 'POSTS_FORUMS':
1595 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_POSTS_FORUMS', $forum_data['forum_name']);
1596 5330 acydburn
                        break;
1597 6015 acydburn
1598 5330 acydburn
                        case '_FORUMS':
1599 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_FORUMS', $forum_data['forum_name']);
1600 5330 acydburn
                        break;
1601 6015 acydburn
1602 5330 acydburn
                        case 'POSTS_':
1603 5330 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_POSTS', $forum_data['forum_name']);
1604 5330 acydburn
                        break;
1605 5603 acydburn
1606 5603 acydburn
                        default:
1607 5603 acydburn
                                add_log('admin', 'LOG_FORUM_DEL_FORUM', $forum_data['forum_name']);
1608 5603 acydburn
                        break;
1609 5330 acydburn
                }
1610 5330 acydburn
1611 5330 acydburn
                return $errors;
1612 5330 acydburn
        }
1613 5330 acydburn
1614 5330 acydburn
        /**
1615 5330 acydburn
        * Delete forum content
1616 5330 acydburn
        */
1617 5330 acydburn
        function delete_forum_content($forum_id)
1618 5330 acydburn
        {
1619 5330 acydburn
                global $db, $config, $phpbb_root_path, $phpEx;
1620 5330 acydburn
1621 5330 acydburn
                include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
1622 5330 acydburn
1623 5330 acydburn
                $db->sql_transaction('begin');
1624 5330 acydburn
1625 5330 acydburn
                // Select then delete all attachments
1626 5330 acydburn
                $sql = 'SELECT a.topic_id
1627 5330 acydburn
                        FROM ' . POSTS_TABLE . ' p, ' . ATTACHMENTS_TABLE . " a
1628 5330 acydburn
                        WHERE p.forum_id = $forum_id
1629 5330 acydburn
                                AND a.in_message = 0
1630 5330 acydburn
                                AND a.topic_id = p.topic_id";
1631 8655 acydburn
                $result = $db->sql_query($sql);
1632 6015 acydburn
1633 5330 acydburn
                $topic_ids = array();
1634 5330 acydburn
                while ($row = $db->sql_fetchrow($result))
1635 5330 acydburn
                {
1636 5330 acydburn
                        $topic_ids[] = $row['topic_id'];
1637 5330 acydburn
                }
1638 5330 acydburn
                $db->sql_freeresult($result);
1639 6015 acydburn
1640 5330 acydburn
                delete_attachments('topic', $topic_ids, false);
1641 5330 acydburn
1642 6342 acydburn
                // Before we remove anything we make sure we are able to adjust the post counts later. ;)
1643 6342 acydburn
                $sql = 'SELECT poster_id
1644 6342 acydburn
                        FROM ' . POSTS_TABLE . '
1645 6342 acydburn
                        WHERE forum_id = ' . $forum_id . '
1646 8805 acydburn
                                AND post_postcount = 1
1647 8805 acydburn
                                AND post_approved = 1';
1648 6342 acydburn
                $result = $db->sql_query($sql);
1649 6342 acydburn
1650 6342 acydburn
                $post_counts = array();
1651 6342 acydburn
                while ($row = $db->sql_fetchrow($result))
1652 6342 acydburn
                {
1653 6342 acydburn
                        $post_counts[$row['poster_id']] = (!empty($post_counts[$row['poster_id']])) ? $post_counts[$row['poster_id']] + 1 : 1;
1654 6342 acydburn
                }
1655 6342 acydburn
                $db->sql_freeresult($result);
1656 6342 acydburn
1657 6497 acydburn
                switch ($db->sql_layer)
1658 5330 acydburn
                {
1659 5330 acydburn
                        case 'mysql4':
1660 5330 acydburn
                        case 'mysqli':
1661 5330 acydburn
1662 5330 acydburn
                                // Delete everything else and thank MySQL for offering multi-table deletion
1663 5330 acydburn
                                $tables_ary = array(
1664 6021 acydburn
                                        SEARCH_WORDMATCH_TABLE        => 'post_id',
1665 5728 acydburn
                                        REPORTS_TABLE                        => 'post_id',
1666 5728 acydburn
                                        WARNINGS_TABLE                        => 'post_id',
1667 5728 acydburn
                                        BOOKMARKS_TABLE                        => 'topic_id',
1668 5728 acydburn
                                        TOPICS_WATCH_TABLE                => 'topic_id',
1669 5728 acydburn
                                        TOPICS_POSTED_TABLE                => 'topic_id',
1670 5728 acydburn
                                        POLL_OPTIONS_TABLE                => 'topic_id',
1671 5728 acydburn
                                        POLL_VOTES_TABLE                => 'topic_id',
1672 5330 acydburn
                                );
1673 5330 acydburn
1674 5728 acydburn
                                $sql = 'DELETE ' . POSTS_TABLE;
1675 5728 acydburn
                                $sql_using = "\nFROM " . POSTS_TABLE;
1676 5728 acydburn
                                $sql_where = "\nWHERE " . POSTS_TABLE . ".forum_id = $forum_id\n";
1677 5330 acydburn
1678 5330 acydburn
                                foreach ($tables_ary as $table => $field)
1679 5330 acydburn
                                {
1680 5728 acydburn
                                        $sql .= ", $table ";
1681 5728 acydburn
                                        $sql_using .= ", $table ";
1682 5728 acydburn
                                        $sql_where .= "\nAND $table.$field = " . POSTS_TABLE . ".$field";
1683 5330 acydburn
                                }
1684 5330 acydburn
1685 5330 acydburn
                                $db->sql_query($sql . $sql_using . $sql_where);
1686 5330 acydburn
1687 5330 acydburn
                        break;
1688 5330 acydburn
1689 5330 acydburn
                        default:
1690 8655 acydburn
1691 5330 acydburn
                                // Delete everything else and curse your DB for not offering multi-table deletion
1692 5330 acydburn
                                $tables_ary = array(
1693 5330 acydburn
                                        'post_id'        =>        array(
1694 6021 acydburn
                                                SEARCH_WORDMATCH_TABLE,
1695 5330 acydburn
                                                REPORTS_TABLE,
1696 5330 acydburn
                                                WARNINGS_TABLE,
1697 5330 acydburn
                                        ),
1698 6015 acydburn
1699 5330 acydburn
                                        'topic_id'        =>        array(
1700 5330 acydburn
                                                BOOKMARKS_TABLE,
1701 5330 acydburn
                                                TOPICS_WATCH_TABLE,
1702 5330 acydburn
                                                TOPICS_POSTED_TABLE,
1703 5330 acydburn
                                                POLL_OPTIONS_TABLE,
1704 5330 acydburn
                                                POLL_VOTES_TABLE,
1705 5330 acydburn
                                        )
1706 5330 acydburn
                                );
1707 5330 acydburn
1708 5330 acydburn
                                foreach ($tables_ary as $field => $tables)
1709 5330 acydburn
                                {
1710 5330 acydburn
                                        $start = 0;
1711 6015 acydburn
1712 5330 acydburn
                                        do
1713 5330 acydburn
                                        {
1714 5330 acydburn
                                                $sql = "SELECT $field
1715 5330 acydburn
                                                        FROM " . POSTS_TABLE . '
1716 5330 acydburn
                                                        WHERE forum_id = ' . $forum_id;
1717 5330 acydburn
                                                $result = $db->sql_query_limit($sql, 500, $start);
1718 5330 acydburn
1719 5330 acydburn
                                                $ids = array();
1720 5330 acydburn
                                                while ($row = $db->sql_fetchrow($result))
1721 5330 acydburn
                                                {
1722 5330 acydburn
                                                        $ids[] = $row[$field];
1723 5330 acydburn
                                                }
1724 5330 acydburn
                                                $db->sql_freeresult($result);
1725 5330 acydburn
1726 5330 acydburn
                                                if (sizeof($ids))
1727 5330 acydburn
                                                {
1728 5330 acydburn
                                                        $start += sizeof($ids);
1729 5330 acydburn
1730 5330 acydburn
                                                        foreach ($tables as $table)
1731 5330 acydburn
                                                        {
1732 6320 acydburn
                                                                $db->sql_query("DELETE FROM $table WHERE " . $db->sql_in_set($field, $ids));
1733 5330 acydburn
                                                        }
1734 5330 acydburn
                                                }
1735 5330 acydburn
                                        }
1736 5330 acydburn
                                        while ($row);
1737 5330 acydburn
                                }
1738 6320 acydburn
                                unset($ids);
1739 5330 acydburn
1740 5330 acydburn
                        break;
1741 5330 acydburn
                }
1742 5330 acydburn
1743 6320 acydburn
                $table_ary = array(FORUMS_ACCESS_TABLE, FORUMS_TRACK_TABLE, FORUMS_WATCH_TABLE, LOG_TABLE, MODERATOR_CACHE_TABLE, POSTS_TABLE, TOPICS_TABLE, TOPICS_TRACK_TABLE);
1744 5330 acydburn
1745 5330 acydburn
                foreach ($table_ary as $table)
1746 5330 acydburn
                {
1747 5330 acydburn
                        $db->sql_query("DELETE FROM $table WHERE forum_id = $forum_id");
1748 5330 acydburn
                }
1749 5330 acydburn
1750 5330 acydburn
                // Set forum ids to 0
1751 5330 acydburn
                $table_ary = array(DRAFTS_TABLE);
1752 5330 acydburn
1753 5574 acydburn
                foreach ($table_ary as $table)
1754 5330 acydburn
                {
1755 5330 acydburn
                        $db->sql_query("UPDATE $table SET forum_id = 0 WHERE forum_id = $forum_id");
1756 5330 acydburn
                }
1757 5330 acydburn
1758 6342 acydburn
                // Adjust users post counts
1759 6342 acydburn
                if (sizeof($post_counts))
1760 6342 acydburn
                {
1761 6342 acydburn
                        foreach ($post_counts as $poster_id => $substract)
1762 6342 acydburn
                        {
1763 6342 acydburn
                                $sql = 'UPDATE ' . USERS_TABLE . '
1764 7677 kellanved
                                        SET user_posts = 0
1765 8147 acydburn
                                        WHERE user_id = ' . $poster_id . '
1766 7677 kellanved
                                        AND user_posts < ' . $substract;
1767 7677 kellanved
                                $db->sql_query($sql);
1768 8805 acydburn
1769 7677 kellanved
                                $sql = 'UPDATE ' . USERS_TABLE . '
1770 6342 acydburn
                                        SET user_posts = user_posts - ' . $substract . '
1771 8147 acydburn
                                        WHERE user_id = ' . $poster_id . '
1772 7677 kellanved
                                        AND user_posts >= ' . $substract;
1773 6342 acydburn
                                $db->sql_query($sql);
1774 6342 acydburn
                        }
1775 6342 acydburn
                }
1776 6342 acydburn
1777 5330 acydburn
                $db->sql_transaction('commit');
1778 5330 acydburn
1779 6114 acydburn
                // Make sure the overall post/topic count is correct...
1780 8147 acydburn
                $sql = 'SELECT COUNT(post_id) AS stat
1781 6114 acydburn
                        FROM ' . POSTS_TABLE . '
1782 6114 acydburn
                        WHERE post_approved = 1';
1783 6114 acydburn
                $result = $db->sql_query($sql);
1784 6114 acydburn
                $row = $db->sql_fetchrow($result);
1785 6114 acydburn
                $db->sql_freeresult($result);
1786 6114 acydburn
1787 6114 acydburn
                set_config('num_posts', (int) $row['stat'], true);
1788 6114 acydburn
1789 6114 acydburn
                $sql = 'SELECT COUNT(topic_id) AS stat
1790 6114 acydburn
                        FROM ' . TOPICS_TABLE . '
1791 6114 acydburn
                        WHERE topic_approved = 1';
1792 6114 acydburn
                $result = $db->sql_query($sql);
1793 6114 acydburn
                $row = $db->sql_fetchrow($result);
1794 6114 acydburn
                $db->sql_freeresult($result);
1795 6114 acydburn
1796 6114 acydburn
                set_config('num_topics', (int) $row['stat'], true);
1797 6114 acydburn
1798 6114 acydburn
                $sql = 'SELECT COUNT(attach_id) as stat
1799 6114 acydburn
                        FROM ' . ATTACHMENTS_TABLE;
1800 6114 acydburn
                $result = $db->sql_query($sql);
1801 6114 acydburn
                $row = $db->sql_fetchrow($result);
1802 6114 acydburn
                $db->sql_freeresult($result);
1803 6114 acydburn
1804 6114 acydburn
                set_config('num_files', (int) $row['stat'], true);
1805 6114 acydburn
1806 6114 acydburn
                $sql = 'SELECT SUM(filesize) as stat
1807 6114 acydburn
                        FROM ' . ATTACHMENTS_TABLE;
1808 6114 acydburn
                $result = $db->sql_query($sql);
1809 6114 acydburn
                $row = $db->sql_fetchrow($result);
1810 6114 acydburn
                $db->sql_freeresult($result);
1811 6114 acydburn
1812 8876 acydburn
                set_config('upload_dir_size', (float) $row['stat'], true);
1813 6114 acydburn
1814 5330 acydburn
                return array();
1815 5330 acydburn
        }
1816 5330 acydburn
1817 6073 acydburn
        /**
1818 6073 acydburn
        * Move forum position by $steps up/down
1819 6073 acydburn
        */
1820 6073 acydburn
        function move_forum_by($forum_row, $action = 'move_up', $steps = 1)
1821 6073 acydburn
        {
1822 6073 acydburn
                global $db;
1823 6073 acydburn
1824 6073 acydburn
                /**
1825 6073 acydburn
                * Fetch all the siblings between the module's current spot
1826 6073 acydburn
                * and where we want to move it to. If there are less than $steps
1827 6073 acydburn
                * siblings between the current spot and the target then the
1828 6073 acydburn
                * module will move as far as possible
1829 6073 acydburn
                */
1830 6073 acydburn
                $sql = 'SELECT forum_id, forum_name, left_id, right_id
1831 6073 acydburn
                        FROM ' . FORUMS_TABLE . "
1832 6073 acydburn
                        WHERE parent_id = {$forum_row['parent_id']}
1833 6073 acydburn
                                AND " . (($action == 'move_up') ? "right_id < {$forum_row['right_id']} ORDER BY right_id DESC" : "left_id > {$forum_row['left_id']} ORDER BY left_id ASC");
1834 6073 acydburn
                $result = $db->sql_query_limit($sql, $steps);
1835 6073 acydburn
1836 6073 acydburn
                $target = array();
1837 6073 acydburn
                while ($row = $db->sql_fetchrow($result))
1838 6073 acydburn
                {
1839 6073 acydburn
                        $target = $row;
1840 6073 acydburn
                }
1841 6073 acydburn
                $db->sql_freeresult($result);
1842 6073 acydburn
1843 6073 acydburn
                if (!sizeof($target))
1844 6073 acydburn
                {
1845 6073 acydburn
                        // The forum is already on top or bottom
1846 6073 acydburn
                        return false;
1847 6073 acydburn
                }
1848 6073 acydburn
1849 6073 acydburn
                /**
1850 6073 acydburn
                * $left_id and $right_id define the scope of the nodes that are affected by the move.
1851 6073 acydburn
                * $diff_up and $diff_down are the values to substract or add to each node's left_id
1852 6073 acydburn
                * and right_id in order to move them up or down.
1853 6073 acydburn
                * $move_up_left and $move_up_right define the scope of the nodes that are moving
1854 6073 acydburn
                * up. Other nodes in the scope of ($left_id, $right_id) are considered to move down.
1855 6073 acydburn
                */
1856 6073 acydburn
                if ($action == 'move_up')
1857 6073 acydburn
                {
1858 6073 acydburn
                        $left_id = $target['left_id'];
1859 6073 acydburn
                        $right_id = $forum_row['right_id'];
1860 6073 acydburn
1861 6073 acydburn
                        $diff_up = $forum_row['left_id'] - $target['left_id'];
1862 6073 acydburn
                        $diff_down = $forum_row['right_id'] + 1 - $forum_row['left_id'];
1863 6073 acydburn
1864 6073 acydburn
                        $move_up_left = $forum_row['left_id'];
1865 6073 acydburn
                        $move_up_right = $forum_row['right_id'];
1866 6073 acydburn
                }
1867 6073 acydburn
                else
1868 6073 acydburn
                {
1869 6073 acydburn
                        $left_id = $forum_row['left_id'];
1870 6073 acydburn
                        $right_id = $target['right_id'];
1871 6073 acydburn
1872 6073 acydburn
                        $diff_up = $forum_row['right_id'] + 1 - $forum_row['left_id'];
1873 6073 acydburn
                        $diff_down = $target['right_id'] - $forum_row['right_id'];
1874 6073 acydburn
1875 6073 acydburn
                        $move_up_left = $forum_row['right_id'] + 1;
1876 6073 acydburn
                        $move_up_right = $target['right_id'];
1877 6073 acydburn
                }
1878 6073 acydburn
1879 6073 acydburn
                // Now do the dirty job
1880 6073 acydburn
                $sql = 'UPDATE ' . FORUMS_TABLE . "
1881 6073 acydburn
                        SET left_id = left_id + CASE
1882 6073 acydburn
                                WHEN left_id BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
1883 6073 acydburn
                                ELSE {$diff_down}
1884 6073 acydburn
                        END,
1885 6073 acydburn
                        right_id = right_id + CASE
1886 6073 acydburn
                                WHEN right_id BETWEEN {$move_up_left} AND {$move_up_right} THEN -{$diff_up}
1887 6073 acydburn
                                ELSE {$diff_down}
1888 6073 acydburn
                        END,
1889 6073 acydburn
                        forum_parents = ''
1890 8147 acydburn
                        WHERE
1891 6073 acydburn
                                left_id BETWEEN {$left_id} AND {$right_id}
1892 6073 acydburn
                                AND right_id BETWEEN {$left_id} AND {$right_id}";
1893 6073 acydburn
                $db->sql_query($sql);
1894 6073 acydburn
1895 6073 acydburn
                return $target['forum_name'];
1896 6073 acydburn
        }
1897 6419 acydburn
1898 6419 acydburn
        /**
1899 6419 acydburn
        * Display progress bar for syncinc forums
1900 6419 acydburn
        */
1901 6419 acydburn
        function display_progress_bar($start, $total)
1902 6419 acydburn
        {
1903 6419 acydburn
                global $template, $user;
1904 6419 acydburn
1905 6419 acydburn
                adm_page_header($user->lang['SYNC_IN_PROGRESS']);
1906 6419 acydburn
1907 6419 acydburn
                $template->set_filenames(array(
1908 6419 acydburn
                        'body'        => 'progress_bar.html')
1909 6419 acydburn
                );
1910 6419 acydburn
1911 6419 acydburn
                $template->assign_vars(array(
1912 6419 acydburn
                        'L_PROGRESS'                        => $user->lang['SYNC_IN_PROGRESS'],
1913 6419 acydburn
                        'L_PROGRESS_EXPLAIN'        => ($start && $total) ? sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], $start, $total) : $user->lang['SYNC_IN_PROGRESS'])
1914 6419 acydburn
                );
1915 6419 acydburn
1916 6419 acydburn
                adm_page_footer();
1917 6419 acydburn
        }
1918 9978 bantu
1919 9978 bantu
        /**
1920 9978 bantu
        * Display copy permission page
1921 10198 acydburn
        * Not used at the moment - we will have a look at it for 3.0.7
1922 9978 bantu
        */
1923 9896 Kellanved
        function copy_permission_page($forum_data)
1924 9896 Kellanved
        {
1925 9896 Kellanved
                global $phpEx, $phpbb_admin_path, $template, $user;
1926 10024 acydburn
1927 9896 Kellanved
                $acl_url = '&amp;mode=setting_forum_local&amp;forum_id[]=' . $forum_data['forum_id'];
1928 9896 Kellanved
                $action = append_sid($this->u_action . "&amp;parent_id={$this->parent_id}&amp;f={$forum_data['forum_id']}&amp;action=copy_perm");
1929 9896 Kellanved
1930 9896 Kellanved
                $l_acl = sprintf($user->lang['COPY_TO_ACL'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url) . '">', '</a>');
1931 9896 Kellanved
1932 9896 Kellanved
                $this->tpl_name = 'acp_forums_copy_perm';
1933 9896 Kellanved
1934 9896 Kellanved
                $template->assign_vars(array(
1935 9896 Kellanved
                        'U_ACL'                                => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url),
1936 9896 Kellanved
                        'L_ACL_LINK'                => $l_acl,
1937 9896 Kellanved
                        'L_BACK_LINK'                => adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id),
1938 9896 Kellanved
                        'S_COPY_ACTION'                => $action,
1939 10135 bantu
                        'S_FORUM_OPTIONS'        => make_forum_select($forum_data['parent_id'], $forum_data['forum_id'], false, false, false),
1940 9896 Kellanved
                ));
1941 9896 Kellanved
        }
1942 9896 Kellanved
1943 5330 acydburn
}
1944 5330 acydburn
1945 5330 acydburn
?>