elkarte /
Elkarte
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * This, as you have probably guessed, is the crux for all functions. |
||
| 5 | * Everything should start here, so all the setup and security is done |
||
| 6 | * properly. |
||
| 7 | * |
||
| 8 | * @name ElkArte Forum |
||
| 9 | * @copyright ElkArte Forum contributors |
||
| 10 | * @license BSD http://opensource.org/licenses/BSD-3-Clause |
||
| 11 | * |
||
| 12 | * This software is a derived product, based on: |
||
| 13 | * |
||
| 14 | * Simple Machines Forum (SMF) |
||
| 15 | * copyright: 2011 Simple Machines (http://www.simplemachines.org) |
||
| 16 | * license: BSD, See included LICENSE.TXT for terms and conditions. |
||
| 17 | * |
||
| 18 | * @version 1.0.9 |
||
| 19 | * |
||
| 20 | */ |
||
| 21 | |||
| 22 | $forum_version = 'ElkArte 1.0.9'; |
||
| 23 | define('FORUM_VERSION', $forum_version); |
||
| 24 | |||
| 25 | // First things first, but not necessarily in that order. |
||
| 26 | define('ELK', 1); |
||
| 27 | |||
| 28 | // Shortcut for the browser cache stale |
||
| 29 | define('CACHE_STALE', '?109'); |
||
| 30 | |||
| 31 | if (function_exists('set_magic_quotes_runtime')) |
||
| 32 | @set_magic_quotes_runtime(0); |
||
|
0 ignored issues
–
show
Deprecated Code
introduced
by
Loading history...
|
|||
| 33 | error_reporting(E_ALL | E_STRICT); |
||
| 34 | $time_start = microtime(true); |
||
| 35 | |||
| 36 | // Turn on output buffering. |
||
| 37 | ob_start(); |
||
| 38 | |||
| 39 | // We don't need no globals. |
||
| 40 | foreach (array('db_character_set', 'cachedir') as $variable) |
||
| 41 | if (isset($GLOBALS[$variable])) |
||
| 42 | unset($GLOBALS[$variable], $GLOBALS[$variable]); |
||
| 43 | |||
| 44 | // Ready to load the site settings. |
||
| 45 | require_once(dirname(__FILE__) . '/Settings.php'); |
||
| 46 | |||
| 47 | // Directional only script time usage for display |
||
| 48 | if (!empty($db_show_debug) && function_exists('getrusage')) |
||
| 49 | $rusage_start = getrusage(); |
||
| 50 | |||
| 51 | // Make sure the paths are correct... at least try to fix them. |
||
| 52 | if (!file_exists($boarddir) && file_exists(dirname(__FILE__) . '/agreement.txt')) |
||
| 53 | $boarddir = dirname(__FILE__); |
||
| 54 | if (!file_exists($sourcedir . '/SiteDispatcher.class.php') && file_exists($boarddir . '/sources')) |
||
| 55 | $sourcedir = $boarddir . '/sources'; |
||
| 56 | |||
| 57 | // Check that directories which didn't exist in past releases are initialized. |
||
| 58 | if ((empty($cachedir) || !file_exists($cachedir)) && file_exists($boarddir . '/cache')) |
||
| 59 | $cachedir = $boarddir . '/cache'; |
||
| 60 | if ((empty($extdir) || !file_exists($extdir)) && file_exists($sourcedir . '/ext')) |
||
| 61 | $extdir = $sourcedir . '/ext'; |
||
| 62 | if ((empty($languagedir) || !file_exists($languagedir)) && file_exists($boarddir . '/themes/default/languages')) |
||
| 63 | $languagedir = $boarddir . '/themes/default/languages'; |
||
| 64 | |||
| 65 | // Time to forget about variables and go with constants! |
||
| 66 | DEFINE('BOARDDIR', $boarddir); |
||
|
0 ignored issues
–
show
|
|||
| 67 | DEFINE('CACHEDIR', $cachedir); |
||
|
0 ignored issues
–
show
|
|||
| 68 | DEFINE('EXTDIR', $extdir); |
||
|
0 ignored issues
–
show
|
|||
| 69 | DEFINE('LANGUAGEDIR', $languagedir); |
||
|
0 ignored issues
–
show
|
|||
| 70 | DEFINE('SOURCEDIR', $sourcedir); |
||
|
0 ignored issues
–
show
|
|||
| 71 | DEFINE('ADMINDIR', $sourcedir . '/admin'); |
||
|
0 ignored issues
–
show
|
|||
| 72 | DEFINE('CONTROLLERDIR', $sourcedir . '/controllers'); |
||
|
0 ignored issues
–
show
|
|||
| 73 | DEFINE('SUBSDIR', $sourcedir . '/subs'); |
||
|
0 ignored issues
–
show
|
|||
| 74 | unset($boarddir, $cachedir, $sourcedir, $languagedir, $extdir); |
||
| 75 | |||
| 76 | // Files we cannot live without. |
||
| 77 | require_once(SOURCEDIR . '/QueryString.php'); |
||
| 78 | require_once(SOURCEDIR . '/Session.php'); |
||
| 79 | require_once(SOURCEDIR . '/Subs.php'); |
||
| 80 | require_once(SOURCEDIR . '/Errors.php'); |
||
| 81 | require_once(SOURCEDIR . '/Logging.php'); |
||
| 82 | require_once(SOURCEDIR . '/Load.php'); |
||
| 83 | require_once(SUBSDIR . '/Cache.subs.php'); |
||
| 84 | require_once(SOURCEDIR . '/Security.php'); |
||
| 85 | require_once(SOURCEDIR . '/BrowserDetector.class.php'); |
||
| 86 | require_once(SOURCEDIR . '/ErrorContext.class.php'); |
||
| 87 | require_once(SUBSDIR . '/Util.class.php'); |
||
| 88 | require_once(SUBSDIR . '/TemplateLayers.class.php'); |
||
| 89 | require_once(SOURCEDIR . '/Action.controller.php'); |
||
| 90 | |||
| 91 | // Forum in extended maintenance mode? Our trip ends here with a bland message. |
||
| 92 | if (!empty($maintenance) && $maintenance == 2) |
||
| 93 | display_maintenance_message(); |
||
| 94 | |||
| 95 | // Clean the request. |
||
| 96 | cleanRequest(); |
||
| 97 | |||
| 98 | // Initiate the database connection and define some database functions to use. |
||
| 99 | loadDatabase(); |
||
| 100 | |||
| 101 | // It's time for settings loaded from the database. |
||
| 102 | reloadSettings(); |
||
| 103 | |||
| 104 | // Our good ole' contextual array, which will hold everything |
||
| 105 | $context = array(); |
||
| 106 | |||
| 107 | // Seed the random generator. |
||
| 108 | elk_seed_generator(); |
||
| 109 | |||
| 110 | // Before we get carried away, are we doing a scheduled task? If so save CPU cycles by jumping out! |
||
| 111 | if (isset($_GET['scheduled'])) |
||
| 112 | { |
||
| 113 | require_once(CONTROLLERDIR . '/ScheduledTasks.controller.php'); |
||
| 114 | $controller = new ScheduledTasks_Controller(); |
||
| 115 | $controller->action_autotask(); |
||
| 116 | } |
||
| 117 | |||
| 118 | // Check if compressed output is enabled, supported, and not already being done. |
||
| 119 | if (!empty($modSettings['enableCompressedOutput']) && !headers_sent()) |
||
| 120 | { |
||
| 121 | // If zlib is being used, turn off output compression. |
||
| 122 | if (ini_get('zlib.output_compression') >= 1 || ini_get('output_handler') == 'ob_gzhandler') |
||
| 123 | $modSettings['enableCompressedOutput'] = 0; |
||
| 124 | else |
||
| 125 | { |
||
| 126 | @ob_end_clean(); |
||
| 127 | ob_start('ob_gzhandler'); |
||
| 128 | } |
||
| 129 | } |
||
| 130 | |||
| 131 | // Register an error handler. |
||
| 132 | set_error_handler('error_handler'); |
||
| 133 | |||
| 134 | // Start the session. (assuming it hasn't already been.) |
||
| 135 | loadSession(); |
||
| 136 | |||
| 137 | // Restore post data if we are revalidating OpenID. |
||
| 138 | if (isset($_GET['openid_restore_post']) && !empty($_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]['post']) && empty($_POST)) |
||
| 139 | { |
||
| 140 | $_POST = $_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]['post']; |
||
| 141 | unset($_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]); |
||
| 142 | } |
||
| 143 | |||
| 144 | // Pre-dispatch |
||
| 145 | elk_main(); |
||
| 146 | |||
| 147 | // Call obExit specially; we're coming from the main area ;). |
||
| 148 | obExit(null, null, true); |
||
| 149 | |||
| 150 | /** |
||
| 151 | * The main dispatcher. |
||
| 152 | * This delegates to each area. |
||
| 153 | */ |
||
| 154 | function elk_main() |
||
| 155 | { |
||
| 156 | global $modSettings, $user_info, $topic, $board_info, $context; |
||
| 157 | |||
| 158 | // Special case: session keep-alive, output a transparent pixel. |
||
| 159 | if (isset($_GET['action']) && $_GET['action'] == 'keepalive') |
||
| 160 | { |
||
| 161 | header('Content-Type: image/gif'); |
||
| 162 | die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B"); |
||
|
0 ignored issues
–
show
The function elk_main() contains an exit expression.
An exit expression should only be used in rare cases. For example, if you write a short command line script. In most cases however, using an Loading history...
|
|||
| 163 | } |
||
| 164 | |||
| 165 | // We should set our security headers now. |
||
| 166 | frameOptionsHeader(); |
||
| 167 | securityOptionsHeader(); |
||
| 168 | |||
| 169 | // Load the user's cookie (or set as guest) and load their settings. |
||
| 170 | loadUserSettings(); |
||
| 171 | |||
| 172 | // Load the current board's information. |
||
| 173 | loadBoard(); |
||
| 174 | |||
| 175 | // Load the current user's permissions. |
||
| 176 | loadPermissions(); |
||
| 177 | |||
| 178 | // Load BadBehavior before we go much further |
||
| 179 | loadBadBehavior(); |
||
| 180 | |||
| 181 | // Attachments don't require the entire theme to be loaded. |
||
| 182 | if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'dlattach' && (!empty($modSettings['allow_guestAccess']) && $user_info['is_guest'])) |
||
| 183 | detectBrowser(); |
||
| 184 | // Load the current theme. (note that ?theme=1 will also work, may be used for guest theming.) |
||
| 185 | else |
||
| 186 | loadTheme(); |
||
| 187 | |||
| 188 | // Check if the user should be disallowed access. |
||
| 189 | is_not_banned(); |
||
| 190 | |||
| 191 | // If we are in a topic and don't have permission to approve it then duck out now. |
||
| 192 | if (!empty($topic) && empty($board_info['cur_topic_approved']) && !allowedTo('approve_posts') && ($user_info['id'] != $board_info['cur_topic_starter'] || $user_info['is_guest'])) |
||
| 193 | fatal_lang_error('not_a_topic', false); |
||
| 194 | |||
| 195 | $no_stat_actions = array('dlattach', 'findmember', 'jsoption', 'requestmembers', 'jslocale', 'xmlpreview', 'suggest', '.xml', 'xmlhttp', 'verificationcode', 'viewquery', 'viewadminfile'); |
||
| 196 | call_integration_hook('integrate_pre_log_stats', array(&$no_stat_actions)); |
||
| 197 | |||
| 198 | // Do some logging, unless this is an attachment, avatar, toggle of editor buttons, theme option, XML feed etc. |
||
| 199 | if (empty($_REQUEST['action']) || !in_array($_REQUEST['action'], $no_stat_actions)) |
||
| 200 | { |
||
| 201 | // I see you! |
||
| 202 | writeLog(); |
||
| 203 | |||
| 204 | // Track forum statistics and hits...? |
||
| 205 | if (!empty($modSettings['hitStats'])) |
||
| 206 | trackStats(array('hits' => '+')); |
||
| 207 | } |
||
| 208 | unset($no_stat_actions); |
||
| 209 | |||
| 210 | // What shall we do? |
||
| 211 | require_once(SOURCEDIR . '/SiteDispatcher.class.php'); |
||
| 212 | $dispatcher = new Site_Dispatcher(); |
||
| 213 | |||
| 214 | // Show where we came from, and go |
||
| 215 | $context['site_action'] = $dispatcher->site_action(); |
||
| 216 | $context['site_action'] = !empty($context['site_action']) ? $context['site_action'] : (isset($_REQUEST['action']) ? $_REQUEST['action'] : ''); |
||
| 217 | $dispatcher->dispatch(); |
||
| 218 | } |