1<?php 2/** 3 * Loads common functions used in the administration panel. 4 * 5 * @copyright (C) 2008-2012 PunBB, partially based on code (C) 2008-2009 FluxBB.org 6 * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher 7 * @package PunBB 8 */ 9 10// Make sure no one attempts to run this script "directly" 11if (!defined('FORUM')) 12 exit; 13 14 15// 16// Display the admin navigation menu 17// 18function generate_admin_menu($submenu) 19{ 20 global $forum_config, $forum_url, $forum_user, $lang_admin_common, $db_type; 21 22 $return = ($hook = get_hook('ca_fn_generate_admin_menu_start')) ? eval($hook) : null; 23 if ($return !== null) 24 return $return; 25 26 if ($submenu) 27 { 28 $forum_page['admin_submenu'] = array(); 29 30 if ($forum_user['g_id'] != FORUM_ADMIN) 31 { 32 $forum_page['admin_submenu']['index'] = '<li class="'.((FORUM_PAGE == 'admin-information') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_index']).'">'.$lang_admin_common['Information'].'</span></a></li>'; 33 $forum_page['admin_submenu']['users'] = '<li class="'.((FORUM_PAGE == 'admin-users') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_users']).'">'.$lang_admin_common['Searches'].'</a></li>'; 34 35 if ($forum_config['o_censoring'] == '1') 36 $forum_page['admin_submenu']['censoring'] = '<li class="'.((FORUM_PAGE == 'admin-censoring') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_censoring']).'">'.$lang_admin_common['Censoring'].'</a></li>'; 37 38 $forum_page['admin_submenu']['reports'] = '<li class="'.((FORUM_PAGE == 'admin-reports') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_reports']).'">'.$lang_admin_common['Reports'].'</a></li>'; 39 40 if ($forum_user['g_mod_ban_users'] == '1') 41 $forum_page['admin_submenu']['bans'] = '<li class="'.((FORUM_PAGE == 'admin-bans') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_bans']).'">'.$lang_admin_common['Bans'].'</a></li>'; 42 } 43 else 44 { 45 if (FORUM_PAGE_SECTION == 'start') 46 { 47 $forum_page['admin_submenu']['index'] = '<li class="'.((FORUM_PAGE == 'admin-information') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_index']).'">'.$lang_admin_common['Information'].'</a></li>'; 48 $forum_page['admin_submenu']['categories'] = '<li class="'.((FORUM_PAGE == 'admin-categories') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_categories']).'">'.$lang_admin_common['Categories'].'</a></li>'; 49 $forum_page['admin_submenu']['forums'] = '<li class="'.((FORUM_PAGE == 'admin-forums') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_forums']).'">'.$lang_admin_common['Forums'].'</a></li>'; 50 } 51 else if (FORUM_PAGE_SECTION == 'users') 52 { 53 $forum_page['admin_submenu']['users'] = '<li class="'.((FORUM_PAGE == 'admin-users' || FORUM_PAGE == 'admin-uresults' || FORUM_PAGE == 'admin-iresults') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_users']).'">'.$lang_admin_common['Searches'].'</a></li>'; 54 $forum_page['admin_submenu']['groups'] = '<li class="'.((FORUM_PAGE == 'admin-groups') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_groups']).'">'.$lang_admin_common['Groups'].'</a></li>'; 55 $forum_page['admin_submenu']['ranks'] = '<li class="'.((FORUM_PAGE == 'admin-ranks') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_ranks']).'">'.$lang_admin_common['Ranks'].'</a></li>'; 56 $forum_page['admin_submenu']['bans'] = '<li class="'.((FORUM_PAGE == 'admin-bans') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_bans']).'">'.$lang_admin_common['Bans'].'</a></li>'; 57 } 58 else if (FORUM_PAGE_SECTION == 'settings') 59 { 60 $forum_page['admin_submenu']['settings_setup'] = '<li class="'.((FORUM_PAGE == 'admin-settings-setup') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_setup']).'">'.$lang_admin_common['Setup'].'</a></li>'; 61 $forum_page['admin_submenu']['settings_features'] = '<li class="'.((FORUM_PAGE == 'admin-settings-features') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_features']).'">'.$lang_admin_common['Features'].'</a></li>'; 62 $forum_page['admin_submenu']['settings-announcements'] = '<li class="'.((FORUM_PAGE == 'admin-settings-announcements') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_announcements']).'">'.$lang_admin_common['Announcements'].'</a></li>'; 63 $forum_page['admin_submenu']['settings-email'] = '<li class="'.((FORUM_PAGE == 'admin-settings-email') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_email']).'">'.$lang_admin_common['E-mail'].'</a></li>'; 64 $forum_page['admin_submenu']['settings-registration'] = '<li class="'.((FORUM_PAGE == 'admin-settings-registration') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_registration']).'">'.$lang_admin_common['Registration'].'</a></li>'; 65 $forum_page['admin_submenu']['censoring'] = '<li class="'.((FORUM_PAGE == 'admin-censoring') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_censoring']).'">'.$lang_admin_common['Censoring'].'</a></li>'; 66 } 67 else if (FORUM_PAGE_SECTION == 'management') 68 { 69 $forum_page['admin_submenu']['reports'] = '<li class="'.((FORUM_PAGE == 'admin-reports') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_reports']).'">'.$lang_admin_common['Reports'].'</a></li>'; 70 $forum_page['admin_submenu']['prune'] = '<li class="'.((FORUM_PAGE == 'admin-prune') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_prune']).'">'.$lang_admin_common['Prune topics'].'</a></li>'; 71 $forum_page['admin_submenu']['reindex'] = '<li class="'.((FORUM_PAGE == 'admin-reindex') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_reindex']).'">'.$lang_admin_common['Rebuild index'].'</a></li>'; 72 $forum_page['admin_submenu']['options-maintenance'] = '<li class="'.((FORUM_PAGE == 'admin-settings-maintenance') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_maintenance']).'">'.$lang_admin_common['Maintenance mode'].'</a></li>'; 73 } 74 else if (FORUM_PAGE_SECTION == 'extensions') 75 { 76 $forum_page['admin_submenu']['extensions-manage'] = '<li class="'.((FORUM_PAGE == 'admin-extensions-manage') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_extensions_manage']).'">'.$lang_admin_common['Manage extensions'].'</a></li>'; 77 $forum_page['admin_submenu']['extensions-hotfixes'] = '<li class="'.((FORUM_PAGE == 'admin-extensions-hotfixes') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_extensions_hotfixes']).'">'.$lang_admin_common['Manage hotfixes'].'</a></li>'; 78 } 79 } 80 81 ($hook = get_hook('ca_fn_generate_admin_menu_new_sublink')) ? eval($hook) : null; 82 83 return (!empty($forum_page['admin_submenu'])) ? implode("\n\t\t", $forum_page['admin_submenu']) : ''; 84 } 85 else 86 { 87 if ($forum_user['g_id'] != FORUM_ADMIN) 88 $forum_page['admin_menu']['index'] = '<li class="active first-item"><a href="'.forum_link($forum_url['admin_index']).'"><span>'.$lang_admin_common['Moderate'].'</span></a></li>'; 89 else 90 { 91 $forum_page['admin_menu']['index'] = '<li class="'.((FORUM_PAGE_SECTION == 'start') ? 'active' : 'normal').((empty($forum_page['admin_menu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_index']).'"><span>'.$lang_admin_common['Start'].'</span></a></li>'; 92 $forum_page['admin_menu']['settings_setup'] = '<li class="'.((FORUM_PAGE_SECTION == 'settings') ? 'active' : 'normal').((empty($forum_page['admin_menu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_settings_setup']).'"><span>'.$lang_admin_common['Settings'].'</span></a></li>'; 93 $forum_page['admin_menu']['users'] = '<li class="'.((FORUM_PAGE_SECTION == 'users') ? 'active' : 'normal').((empty($forum_page['admin_menu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_users']).'"><span>'.$lang_admin_common['Users'].'</span></a></li>'; 94 $forum_page['admin_menu']['reports'] = '<li class="'.((FORUM_PAGE_SECTION == 'management') ? 'active' : 'normal').((empty($forum_page['admin_menu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_reports']).'"><span>'.$lang_admin_common['Management'].'</span></a></li>'; 95 $forum_page['admin_menu']['extensions_manage'] = '<li class="'.((FORUM_PAGE_SECTION == 'extensions') ? 'active' : 'normal').((empty($forum_page['admin_menu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['admin_extensions_manage']).'"><span>'.$lang_admin_common['Extensions'].'</span></a></li>'; 96 } 97 98 ($hook = get_hook('ca_fn_generate_admin_menu_new_link')) ? eval($hook) : null; 99 100 return implode("\n\t\t", $forum_page['admin_menu']); 101 } 102} 103 104 105// 106// Delete topics from $forum_id that are "older than" $prune_date (if $prune_sticky is 1, sticky topics will also be deleted) 107// 108function prune($forum_id, $prune_sticky, $prune_date) 109{ 110 global $forum_db, $db_type; 111 112 $return = ($hook = get_hook('ca_fn_prune_start')) ? eval($hook) : null; 113 if ($return !== null) 114 return; 115 116 // Fetch topics to prune 117 $query = array( 118 'SELECT' => 't.id', 119 'FROM' => 'topics AS t', 120 'WHERE' => 't.forum_id='.$forum_id 121 ); 122 123 if ($prune_date != -1) 124 $query['WHERE'] .= ' AND last_post<'.$prune_date; 125 if (!$prune_sticky) 126 $query['WHERE'] .= ' AND sticky=\'0\''; 127 128 ($hook = get_hook('ca_fn_prune_qr_get_topics_to_prune')) ? eval($hook) : null; 129 $result = $forum_db->query_build($query) or error(__FILE__, __LINE__); 130 131 $topic_ids = array(); 132 while ($row = $forum_db->fetch_row($result)) 133 $topic_ids[] = $row[0]; 134 135 if (!empty($topic_ids)) 136 { 137 $topic_ids = implode(',', $topic_ids); 138 139 // Fetch posts to prune (used lated for updating the search index) 140 $query = array( 141 'SELECT' => 'p.id', 142 'FROM' => 'posts AS p', 143 'WHERE' => 'p.topic_id IN('.$topic_ids.')' 144 ); 145 146 ($hook = get_hook('ca_fn_prune_qr_get_posts_to_prune')) ? eval($hook) : null; 147 $result = $forum_db->query_build($query) or error(__FILE__, __LINE__); 148 149 $post_ids = array(); 150 while ($row = $forum_db->fetch_row($result)) 151 $post_ids[] = $row[0]; 152 153 // Delete topics 154 $query = array( 155 'DELETE' => 'topics', 156 'WHERE' => 'id IN('.$topic_ids.')' 157 ); 158 159 ($hook = get_hook('ca_fn_prune_qr_prune_topics')) ? eval($hook) : null; 160 $forum_db->query_build($query) or error(__FILE__, __LINE__); 161 162 // Delete posts 163 $query = array( 164 'DELETE' => 'posts', 165 'WHERE' => 'topic_id IN('.$topic_ids.')' 166 ); 167 168 ($hook = get_hook('ca_fn_prune_qr_prune_posts')) ? eval($hook) : null; 169 $forum_db->query_build($query) or error(__FILE__, __LINE__); 170 171 // Delete subscriptions 172 $query = array( 173 'DELETE' => 'subscriptions', 174 'WHERE' => 'topic_id IN('.$topic_ids.')' 175 ); 176 177 ($hook = get_hook('ca_fn_prune_qr_prune_subscriptions')) ? eval($hook) : null; 178 $forum_db->query_build($query) or error(__FILE__, __LINE__); 179 180 // We removed a bunch of posts, so now we have to update the search index 181 if (!defined('FORUM_SEARCH_IDX_FUNCTIONS_LOADED')) 182 require FORUM_ROOT.'include/search_idx.php'; 183 184 strip_search_index($post_ids); 185 } 186} 187 188 189// Add config value to forum config table 190// Warning! 191// This function dont refresh config cache - use "forum_clear_cache()" if 192// call this function outside install/uninstall extension manifest section 193function forum_config_add($name, $value) 194{ 195 global $forum_db, $forum_config; 196 197 if (!empty($name) && !isset($forum_config[$name])) 198 { 199 $query = array( 200 'INSERT' => 'conf_name, conf_value', 201 'INTO' => 'config', 202 'VALUES' => '\''.$name.'\', \''.$value.'\'' 203 ); 204 $forum_db->query_build($query) or error(__FILE__, __LINE__); 205 } 206} 207 208 209// Remove config value from forum config table 210// Warning! 211// This function dont refresh config cache - use "forum_clear_cache()" if 212// call this function outside install/uninstall extension manifest section 213function forum_config_remove($name) 214{ 215 global $forum_db; 216 217 if (is_array($name) && count($name) > 0) 218 { 219 if (!function_exists('clean_conf_names')) 220 { 221 function clean_conf_names($n) 222 { 223 global $forum_db; 224 return '\''.$forum_db->escape($n).'\''; 225 } 226 } 227 228 $name = array_map('clean_conf_names', $name); 229 230 $query = array( 231 'DELETE' => 'config', 232 'WHERE' => 'conf_name in ('.implode(',', $name).')', 233 ); 234 $forum_db->query_build($query) or error(__FILE__, __LINE__); 235 } 236 else if (!empty($name)) 237 { 238 $query = array( 239 'DELETE' => 'config', 240 'WHERE' => 'conf_name=\''.$forum_db->escape($name).'\'' 241 ); 242 $forum_db->query_build($query) or error(__FILE__, __LINE__); 243 } 244} 245 246 247($hook = get_hook('ca_new_function')) ? eval($hook) : null; 248