* @version $Id$ * @license http://opensource.org/licenses/gpl-2.0.php GNU GPL 2 */ define('PHPEXT', substr(strrchr(__FILE__,'.'), 1)); define('ROOT', ''); define('FORUM', true); include(ROOT . 'main/start.' . PHPEXT); /** * Gestion de la pseudo frame du forum * */ class Fsb_frame extends Fsb_model { /** * Page du fils * * @var string */ protected $frame_page = 'index'; /** * Activation du GET automatique dans le lien de connexion * * @var bool */ protected $frame_get_url = true; /** * Recupere la page demandee pour la pseudo frame * * @return string */ public static function frame_request_page() { $page = Http::request('p'); if (!preg_match('#^[a-z0-9_]*?$#i', $page) || !file_exists(ROOT . 'main/forum/forum_' . $page . '.' . PHPEXT)) { $page = 'index'; } // Si on est sur la page de connexion, on ne peut pas desactiver le forum if (in_array($page, array('login', 'logout'))) { define('CANT_DISABLE_BOARD', true); } return ($page); } /** * Constructeur * * @param string $page */ public function __construct($page) { $this->frame_page = $page; Fsb::$frame = &$this; $this->frame_header(); $this->main(); $this->frame_footer(); } /** * Affiche le header du forum, avec le logo, menu, etc ... * */ public function frame_header() { if (defined('HEADER_EXISTS')) { return ; } define('HEADER_EXISTS', true); // Gestion UTF-8 pour les serveurs qui font n'importe quoi Http::header('Content-Type', 'text/html; charset=UTF-8'); // Compression GZIP ? Http::check_gzip(); // Session du membre Fsb::$session->start('lg_forum_' . $this->frame_page, Http::request('frame') ? false : true); // Support du forum if (Fsb::$mods->is_active('root_support') && $root_support = Http::request('root_support')) { Fsb::$session->log_root_support($root_support); } // Acces a la page de debugage interdite au membre if (Fsb::$session->auth() < MODOSUP) { Fsb::$debug->debug_query = false; Fsb::$debug->show_output = true; } // On empeche la mise en cache des pages. Http::no_cache(); // Ajoute les relations vers les pages du forum Http::add_meta('link', array('rel' => 'index', 'href' => sid(ROOT . 'index.' . PHPEXT))); Http::add_meta('link', array('rel' => 'help', 'href' => sid(ROOT . 'index.' . PHPEXT . '?p=faq'))); Http::add_meta('link', array('rel' => 'search', 'href' => sid(ROOT . 'index.' . PHPEXT . '?p=search'))); Http::add_meta('link', array('rel' => 'copyright', 'href' => 'http://www.fire-soft-board.com')); // On empeche le prefetch des pages (extension Fasterfox pour le navigateur Firefox notament) pour la survie du serveur :=) Sauf pour les flux RSS if (isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] == 'prefetch' && $this->frame_page != 'rss') { Display::message('cant_prefetch_page'); } // Si le membre a recu un nouveau message prive on repasse le flag a false if (Fsb::$session->data['u_new_mp']) { Fsb::$db->update('users', array( 'u_new_mp' => false, ), 'WHERE u_id = ' . Fsb::$session->id()); Fsb::$tpl->set_vars(array( 'HAVE_NEW_MP' => true, 'POPUP_CONTENT' => addslashes(sprintf(Fsb::$session->lang('mp_new_popup'), Fsb::$session->data['u_total_mp'])), 'U_REDIRECT_INBOX' => sid(ROOT . 'index.' . PHPEXT . '?p=mp&box=inbox'), )); } // Affichage de la navigation et des statistiques en fonction de la page if ($this->_get('_show_page_header_nav')) { Fsb::$tpl->set_switch('forum_link_header'); } if ($this->_get('_show_page_footer_nav')) { Fsb::$tpl->set_switch('forum_link_footer'); } if ($this->_get('_show_page_stats')) { fsb_import('online'); Fsb::$tpl->set_switch('forum_stat'); } Fsb::$tpl->set_vars(array( 'QUICKSEARCH_LANG' => Fsb::$session->lang('quicksearch'), 'U_INDEX' => sid(ROOT . 'index.' . PHPEXT), 'U_ADMIN' => sid(ROOT . 'admin/index.' . PHPEXT), 'U_MODO' => sid(ROOT . 'index.' . PHPEXT . '?p=modo'), 'U_PROFILE' => sid(ROOT . 'index.' . PHPEXT . '?p=profile'), 'U_CONTACT' => sid(ROOT . 'index.' . PHPEXT . '?p=contact'), 'U_MP' => sid(ROOT . 'index.' . PHPEXT . '?p=mp'), 'U_NOTIFICATION' => sid(ROOT . 'index.' . PHPEXT . '?p=search&mode=notification'), 'U_NOT_READ' => sid(ROOT . 'index.' . PHPEXT . '?p=search&mode=newposts'), 'U_OWN_POSTS' => sid(ROOT . 'index.' . PHPEXT . '?p=search&mode=ownposts'), 'U_FAQ' => sid(ROOT . 'index.' . PHPEXT . '?p=faq'), 'U_PORTAIL' => sid(ROOT . 'index.' . PHPEXT . '?p=portail'), 'U_SEARCH' => sid(ROOT . 'index.' . PHPEXT . '?p=search'), 'U_USERLIST' => sid(ROOT . 'index.' . PHPEXT . '?p=userlist&g_id=' . GROUP_SPECIAL_USER), 'U_CALENDAR' => sid(ROOT . 'index.' . PHPEXT . '?p=calendar'), 'U_MP_POPUP' => sid(ROOT . 'index.' . PHPEXT . '?p=mp&box=popup'), 'U_GROUPS_MODO' => sid(ROOT . 'index.' . PHPEXT . '?p=profile&module=groups'), 'U_FORUMINFO' => sid(ROOT . 'index.' . PHPEXT . '?p=info'), 'U_LOW_FORUM' => sid(ROOT . 'index.' . PHPEXT . '?p=low'), 'U_QUICKSEARCH' => sid(ROOT . 'index.' . PHPEXT . '?p=search&in[]=post&in%5B%5D=title&print=topic'), )); } /** * Affiche le bas du forum (fermeture des connexions, copyright, etc ...) * */ public function frame_footer() { // META description (sauf pour les sujets, car il y en a deja) if ($this->frame_page != 'topic') { Http::add_meta('meta', array( 'name' => 'Description', 'content' => htmlspecialchars(Fsb::$cfg->get('forum_name') . ', ' . Fsb::$cfg->get('forum_description')), )); } // Est connecte ? Fsb::$tpl->set_switch((!Fsb::$session->is_logged()) ? 'is_not_logged' : 'is_logged'); // Peut acceder au panneau de moderation / d'administration ? if (Fsb::$session->auth() >= MODO) { Fsb::$tpl->set_switch('modo_panel'); if (Fsb::$session->auth() >= MODOSUP) { Fsb::$tpl->set_switch('is_admin'); } } // Petit raccourci vers la liste des groupes du membre, s'il est moderateur if (Fsb::$session->data['groups_modo']) { Fsb::$tpl->set_switch('show_group_modo'); } // Generation des liens de navigation if (isset($this->nav) && is_array($this->nav) && $this->nav) { foreach ($this->nav AS $ary) { Fsb::$tpl->set_blocks('nav_link', array( 'NAME' => $ary['name'], 'URL' => $ary['url'], 'STYLE' => (isset($ary['style'])) ? $ary['style'] : '', )); } } else if (Fsb::$session->lang('nav_' . $this->frame_page)) { Fsb::$tpl->set_blocks('nav_link', array( 'NAME' => Fsb::$session->lang('nav_' . $this->frame_page), )); } // Petite phrase d'accueil if (!Fsb::$session->is_logged()) { $home_text = Fsb::$session->lang('home_not_logged'); } else { $home_nickname = Html::nickname(Fsb::$session->data['u_nickname'], Fsb::$session->id(), Fsb::$session->data['u_color']); if (Fsb::$session->data['u_total_mp'] == 1) { $home_text = sprintf(Fsb::$session->lang('home_new_mp'), $home_nickname); } else if (Fsb::$session->data['u_total_mp'] > 1) { $home_text = sprintf(Fsb::$session->lang('home_new_mps'), $home_nickname, Fsb::$session->data['u_total_mp']); } else { $home_text = sprintf(Fsb::$session->lang('home_no_new_mp'), $home_nickname); } } // On peut desactiver la recuperation automatique des donnees GET, avec la propriete $frame_get_url = false if (!$this->frame_get_url) { $get_url = ''; } else { // On recupere les donnees GET de la page $get_url = '&redirect=' . $this->frame_page; foreach ($_GET AS $key => $value) { if (!in_array($key, array('p', 'sid', 'redirect'))) { if (is_array($value)) { foreach ($value AS $subvalue) { if (preg_match('#^[a-z0-9_\-]*?$#i', $subvalue)) { $get_url .= '&' . $key . '[]=' . $subvalue; } } } else if (preg_match('#^[a-z0-9_\-]*?$#i', $value)) { $get_url .= '&' . $key . '=' . $value; } } } } // Affichage du debugage de requetes if (Fsb::$session->auth() >= ADMIN && Fsb::$debug->can_debug) { Fsb::$tpl->set_switch('show_debug_query'); } // Ajout du tag