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 "
CONTROLLER: $controller
";
echo "ACTION: $action
";
echo "INSTANCE_ID: $instance_id
";
echo "CATEGORY_ID: $category_id
";
echo "TOPIC_ID: $topic_id
";
echo "POST_ID: $post_id
";
echo "PAGE: $page_id
";
echo "ATTACHMENT_ID: $attachment_id
";
exit;
}
// clean controller
$controller = strtolower(preg_replace('/[^a-z0-9]/i', '', $controller));
// URL Helper Init
$SEPFURL->init($multi_instances, $instance_id, $url_style, $url_sub);
// Prepare user object
$params['user']['_object'] = $user;
$params['user']['logged_in'] = !empty($user->user_info['user_id']) ? true : false;
$params['user']['id'] = $user->user_info['user_id'];
$params['user']['photo'] = $user->user_info['user_photo'];
$params['user']['name'] = $user->user_info['user_username'];
$params['user']['display_name'] = !empty($user->user_displayname) ? $user->user_displayname : $user->user_info['user_username'];
$params['user']['email'] = $user->user_info['user_email'];
$params['user']['level_id'] = $user->user_info['user_level_id'];
$params['user']['subnet_id'] = $user->user_info['user_subnet_id'];
$params['user']['profilecat_id'] = $user->user_info['user_profilecat_id'];
// Assign user object
$smarty->assign('sep_forum_user', $params['user']);
$smarty->assign('_active_tab', '');
if($params['params']['controller'] == 'forum' && in_array($params['params']['action'], array('index', 'browse')) && empty($params['params']['instance_id'])) {
$params['params']['instance_id'] = $global_instance_id;
}
// check if there are any instances for forum?
$_get_param_group_id = null;
$show_header_and_footer = true;
$prepare_group_template = false;
if($SEPFSQL->find('count', array('model' => 'Instance', 'conditions' => array('mode=?', array('forum')), 'limit' => 1)) == 0) {
$smarty->assign('show_header_and_footer', $show_header_and_footer);
$smarty->assign('prepare_group_template', $prepare_group_template);
SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('There are no forums to access.'));
exit;
}
else {
if($multi_instances && $sep_forum_mode_detect == 'group') {
// check if this instance is a forum or a group
$_GET['group_id'] = $params['params']['instance_id']; // instance_id contains group_id! (in group mode)
// replace group_id and set it to instance_id for internal processes!
$params['params']['instance_id'] = $SEP_Group_Integration->groupId2InstanceId($params['params']['instance_id']);
$_instance_info = $SEPFSQL->find('first', array('model' => 'Instance', 'fields' => array('mode'), 'conditions' => array('id=?', array($params['params']['instance_id']))));
if($_instance_info['Instance']['mode'] == 'group') {
$show_header_and_footer = true;
$prepare_group_template = true;
$_GET['v'] = 'discussions'; // set tab to discussions
define('prepare_group_template', true);
require_once(getcwd().'/sep_group_integration_group_include.php');
$SEPFURL->set_instance_mode('group');
$_get_param_group_id = $_GET['group_id']*1;
if(empty($allowed_to_discuss) || $allowed_to_discuss == 0) {
$smarty->assign('show_header_and_footer', $show_header_and_footer);
$smarty->assign('prepare_group_template', $prepare_group_template);
SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('There are no forums to access.'));
exit;
}
$sep_group_integration_group_id = htmlspecialchars($_GET['group_id']*1);
$SEP_Group_Integration->set_group_id($sep_group_integration_group_id);
$instance_id = $params['params']['instance_id'];
}
}
}
$smarty->assign('show_header_and_footer', $show_header_and_footer);
$smarty->assign('prepare_group_template', $prepare_group_template);
/*
* Delegate controller/actions and pass params to action
*/
// whitelisting available controllers
if(!in_array($controller, array('category', 'forum', 'post', 'topic', 'attachment'))) {
SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('Invalid url request'));
exit;
}
$lk=SEP_Forum_Models::get_forum_setting("license_key");if(empty($lk)){SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('The forum is not available at the moment.'));}
function sepf_dummy() {}
$plugin_disabled = false;
$plugin_disabled = @mysql_query("SELECT 1 FROM se_plugins WHERE plugin_type='forum' AND plugin_disabled=1 LIMIT 1") OR sepf_dummy();
$plugin_disabled = @mysql_fetch_row($plugin_disabled);
if($plugin_disabled) {
SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('The forum is not available at the moment'));
exit;
}
require getcwd().'/include/forum/controllers/'.$controller.'_controller.php';
call_user_func_array(array('SEP_'.ucfirst($controller).'Controller', $action), array(&$params, &$SEPFSQL, &$SEPFLG, &$SEPFURL, &$smarty));
if(empty($params['layout'])) {
$page = 'forum/'.$controller.'_'.$action;
}
else {
$page = 'forum/'.$params['layout'];
}
// allow these pages/ templates only
$template_whitelist = array(
'forum/category_index',
'forum/forum_bookmarks',
'forum/forum_browse',
'forum/forum_index',
'forum/forum_my_posts',
'forum/forum_profile_posts',
'forum/forum_search',
'forum/forum_settings',
'forum/forum_subindex',
'forum/topic_form',
'forum/topic_index'
);
if(!in_array($page, $template_whitelist)) {
SEP_Forum_Helper::redirect_to_error($SEPFLG->getLang('This page does not exist'));
exit;
}
// Flash messages
$smarty->assign('sep_flash_error', SEP_Forum_Helper::getFlash('error'));
$smarty->assign('sep_flash_success', SEP_Forum_Helper::getFlash('success'));
$smarty->assign('sep_flash_info', SEP_Forum_Helper::getFlash('info'));
SEP_Forum_Helper::resetFlash();
include "footer.php";
?>