// dispatcher //error_reporting(E_ALL); //ini_set('display_errors', 0); //ini_set('log_errors', 1); define('SE_PAGE', true); include "header.php"; include_once "header_forum.php"; // make sure forum header is loaded, even if plugin is disabled if(SEP_Forum_SE_Version == 3 && $setting['setting_username'] == 1) { define('SEP_Forum_use_usernames', true); $smarty->assign('SEP_Forum_use_usernames', true); } else { define('SEP_Forum_use_usernames', false); $smarty->assign('SEP_Forum_use_usernames', false); } // parse mod_rewrite urls and make sure, standard urls are redirecting to topic, too if($url_style == 'mod_rewrite' && !isset($_GET['c']) && $_GET['c'] != 'topic') { /* * BASE URL SUPPORT * If no images or stylesheets are loading, please uncomment * the lines below and check the base url setting in your admin panel. * * NOTE: Uncommenting the lines below may cause php session troubles though */ $_url_base = SEP_Forum_Models::get_forum_setting('url_base'); if(substr($_url_base, -1) != '/') { $_url_base .= '/'; } $url->url_base = $_url_base; unset($_url_base); // END BASE URL SUPPORT /* * Delegate Controller/Action with mod_rewrite query * * Possible routes: * * Forum Controller * /forum[/instance_id][/action][/category_id][/page] * PARAMS: instance_id, action, category_id, page * * Category Controller: * /forum[/instance_id]/category/category_id[/action][/topic_id][/page] * PARAMS: instance_id, category_id, action, topic_id, page * * Topic Controller: * /forum[/instance_id]/topic/category_id/action/topic_id[/page][#jump_to_post_id] * PARAMS: instance_id, category_id, action, topic_id, page * * Post Controller: * /forum[/instance_id]/post/category_id/action/post_id * PARAMS: instance_id, category_id, action, post_id * * Attachment Controller: * /forum[/instance_id]/attachment/category_id/post_id/attachment_id * PARAMS: instance_id, category_id, post_id, attachment_id * * SEO URL (redirects to topic controller with topic_id and page) * /forum/category/sub_category/title-topic_id-page.html * */ $category_id = null; $topic_id = null; $post_id = null; $attachment_id = null; $action = null; $controller = null; $_forum_controller_actions = array('bookmarks', 'browse', 'subindex', 'index', 'my_posts', 'search', 'settings'); $_controllers = array('category', 'topic', 'post', 'attachment'); // except for forum $requested_url = strip_tags($_SERVER['REQUEST_URI']); // fix for PHPSESSID or what ever is added at the end, after ? or & $_sign_break = strpos($requested_url, '?'); if($_sign_break !== false) { $requested_url = substr($requested_url, 0, $_sign_break); trigger_error('Forum Plugin: Client does not accept cookies. Session was killed.', E_USER_NOTICE); } $_sign_break = strpos($requested_url, '&'); if($_sign_break !== false) { $requested_url = substr($requested_url, 0, $_sign_break); trigger_error('Forum Plugin: Client does not accept cookies. Session was killed.', E_USER_NOTICE); } // subdirectory support $requested_uri = explode('/', strip_tags($requested_url)); $_uri_sub = array(); $i=0; $_requested_uri = @array_shift($requested_uri); while($_requested_uri != $SEPFURL->instance_mode_options['mod_rewrite']['group'] && $_requested_uri != $SEPFURL->instance_mode_options['mod_rewrite']['forum']) { $i++; if($i > 10) { break; } if(!empty($_requested_uri) && $_requested_uri != 'http:') { // http: without //, since this was exploded above! $_uri_sub[] = $_requested_uri; } $_requested_uri = @array_shift($requested_uri); } unset($_requested_uri); $mode_search_forum = strpos($requested_url, $SEPFURL->instance_mode_options['mod_rewrite']['forum']); $mode_search_group = strpos($requested_url, $SEPFURL->instance_mode_options['mod_rewrite']['group']); if($mode_search_forum === false) { $sep_forum_mode_detect = 'group'; } elseif($mode_search_group === false) { $sep_forum_mode_detect = 'forum'; } elseif($mode_search_group <= $mode_search_forum) { $sep_forum_mode_detect = 'group'; } else { $sep_forum_mode_detect = 'forum'; } // set prefix for subdirectories $url_sub = implode('/', $_uri_sub); // parse requested_uri... $req_uri_part = array_shift($requested_uri); if(!empty($req_uri_part)) { if(is_numeric($req_uri_part)) { $instance_id = $req_uri_part; unset($req_uri_part);$req_uri_part = @array_shift($requested_uri); } if(in_array($req_uri_part, $_forum_controller_actions)) { // forum controller $controller = 'forum'; $action = $req_uri_part; $category_id = @array_shift($requested_uri); $page_id = @array_shift($requested_uri); } elseif(in_array($req_uri_part, $_controllers)) { // other controller $controller = $req_uri_part; $category_id = @array_shift($requested_uri); $action = @array_shift($requested_uri); if($controller == 'post') { $post_id = @array_shift($requested_uri); } elseif($controller == 'attachment') { $post_id = $action; $action = 'download'; $attachment_id = @array_shift($requested_uri); } else { $topic_id = @array_shift($requested_uri); $page_id = @array_shift($requested_uri); } } if(empty($controller)) { // SEO url? // get topic_id and page_id $matches = array(); preg_match("/([0-9]*?)\-([0-9|LP]*?)\.html$/", $requested_uri[1], $matches); if(!empty($matches[1]) && !empty($matches[2])) { $topic_id = $matches[1]; $page_id = $matches[2]; // get category_id and instance_id $_post_item = $SEPFSQL->find('first', array('model' => 'Post', 'fields' => array('id', 'instance_id', 'category_id'), 'conditions' => array('Post.id=?', array($topic_id)))); if(!empty($_post_item['Post']['id'])) { if($sep_forum_mode_detect == 'forum') { $instance_id = $_post_item['Post']['instance_id']; } $category_id = $_post_item['Post']['category_id']; $controller = 'topic'; $action = 'index'; } } } } if(empty($controller)) { $controller = 'forum'; } if(empty($action)) { $action = 'index'; } $params = array('params' => array('instance_id' => $instance_id, 'category_id' => $category_id, 'topic_id' => $topic_id, 'post_id' => $post_id, 'page' => $page_id, 'attachment_id' => $attachment_id, 'action' => $action, 'controller' => $controller)); // add raw requested uri to params $params['requested_uri'] = $requested_uri; } else { /* * Delegate Controller/Action with normal url query * * $controller = [category|topic|post|attachment] (becomes 'forum' if empty) * */ $instance_id = $multi_instances && !empty($_GET['iid']) ? $_GET['iid'] : $instance_id; $category_id = !empty($_GET['cid']) ? $_GET['cid'] : null; $topic_id = !empty($_GET['tid']) ? $_GET['tid'] : null; $post_id = !empty($_GET['pid']) ? $_GET['pid'] : null; $page_id = !empty($_GET['page']) ? $_GET['page'] : null; $attachment_id = !empty($_GET['aid']) ? $_GET['aid'] : null; $action = !empty($_GET['op']) ? $_GET['op'] : 'browse'; $controller = !empty($_GET['c']) ? $_GET['c'] : 'forum'; $params = array('params' => array('instance_id' => $instance_id, 'category_id' => $category_id, 'topic_id' => $topic_id, 'post_id' => $post_id, 'page' => $page_id, 'attachment_id' => $attachment_id, 'action' => $action, 'controller' => $controller)); // subdirectory support $requested_url = strip_tags($_SERVER['REQUEST_URI']); $_sub_dir = dirname($requested_url); $url_sub = null; if(!empty($_sub_dir) && $_sub_dir != '.' && $_sub_dir != '/') { $url_sub = $_sub_dir; } $mode_search_forum = strpos($requested_url, $SEPFURL->instance_mode_options['default']['forum']); $mode_search_group = strpos($requested_url, $SEPFURL->instance_mode_options['default']['group']); if($mode_search_forum === false) { $sep_forum_mode_detect = 'group'; } elseif($mode_search_group === false) { $sep_forum_mode_detect = 'forum'; } elseif($mode_search_group <= $mode_search_forum) { $sep_forum_mode_detect = 'group'; } else { $sep_forum_mode_detect = 'forum'; } } if($sep_forum_mode_detect == 'group' && empty($setting['setting_sep_group_integration_enable_forum'])) { $smarty->assign('show_header_and_footer', true); $smarty->assign('prepare_group_template', false); SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('Invalid request!')); exit; } // Set to true for debugging! $enable_dispatcher_debug = false; if($enable_dispatcher_debug) { echo "