home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / phpbb2plus / phpBB2_plus_1.52.exe / phpBB2 / shoutbox.php < prev    next >
PHP Script  |  2004-07-18  |  9KB  |  267 lines

  1. <?php
  2. /***************************************************************************
  3.  *                               shoutbox.php
  4.  *                            -------------------
  5.  *   begin                :  Feb, 2003
  6.  *   author               : Niels Chr. Denmark <ncr@db9.dk> (http://mods.db9.dk)
  7.  *
  8.  * version 1.1.0
  9.  *
  10.  * History:
  11.  *   0.9.0. - initial BETA
  12.  *   0.9.1. - header added
  13.  *   0.9.2. - shout can now be submitted by hitting enter
  14.  *   0.9.3. - now support view back in time, + maximized view
  15.  *   0.9.4. - now support preview in the maximized version
  16.  *   0.9.5. - corrected currupted message if special combination
  17.  *   0.9.6. - guest can't shout
  18.  *   0.9.7. - shoutbox.php no longer support maximazed versin, instead sepperate file is offered
  19.  *   1.0.0. - removed the DB stylesheet information, to speed up page load
  20.  *   1.0.1. - corrected that guests username is stored correctly,when submitting a shout
  21.  *   1.0.2. - corrected a bug regarding flood control
  22.  *   1.0.3. - corrected displaying flood error more correctly
  23.  *   1.1.0. - now include bbcode, in seperate js script
  24.  *
  25.  * a fully phpBB2 integrated shoutbox
  26.  *
  27.  ***************************************************************************/
  28.  
  29. /***************************************************************************
  30.  *
  31.  *   This program is free software; you can redistribute it and/or modify
  32.  *   it under the terms of the GNU General Public License as published by
  33.  *   the Free Software Foundation; either version 2 of the License, or
  34.  *   (at your option) any later version.
  35.  *
  36.  ***************************************************************************/
  37.  
  38. define('IN_PHPBB', true);
  39. $phpbb_root_path = './';
  40. include($phpbb_root_path . 'extension.inc');
  41. include($phpbb_root_path . 'common.'.$phpEx);
  42. include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
  43. define ('NUM_SHOUT', 20);
  44.  
  45. //
  46. // Start session management
  47. //
  48. $userdata = session_pagestart($user_ip, PAGE_SHOUTBOX_MAX);
  49. init_userprefs($userdata);
  50. //
  51. // End session management
  52. //
  53.  
  54. //
  55. // Start auth check
  56. //
  57. switch ($userdata['user_level'])
  58. {
  59.     case ADMIN : 
  60.     case MOD :    $is_auth['auth_mod'] = 1;
  61.     default:
  62.             $is_auth['auth_read'] = 1;
  63.             $is_auth['auth_view'] = 1;
  64.             if ($userdata['user_id']==ANONYMOUS)
  65.             {
  66.                 $is_auth['auth_delete'] = 0;
  67.                 $is_auth['auth_post'] = 0;
  68.             } else
  69.             {
  70.                 $is_auth['auth_delete'] = 1;
  71.                 $is_auth['auth_post'] = 1;
  72.             }
  73. }
  74.  
  75. if( !$is_auth['auth_read'] )
  76. {
  77.     message_die(GENERAL_MESSAGE, $lang['Not_Authorised']);
  78. }
  79.  
  80. //
  81. // End auth check
  82. //
  83.  
  84. $refresh = (isset($HTTP_POST_VARS['auto_refresh']) || isset($HTTP_POST_VARS['refresh'])) ? 1 : 0;
  85. $submit = (isset($HTTP_POST_VARS['shout']) && isset($HTTP_POST_VARS['message'])) ? 1 : 0;
  86. if ( !empty($HTTP_POST_VARS['mode']) || !empty($HTTP_GET_VARS['mode']) )
  87.     {
  88.         $mode = ( !empty($HTTP_POST_VARS['mode']) ) ? intval($HTTP_POST_VARS['mode']) : intval($HTTP_GET_VARS['mode']);
  89.     }
  90.     else
  91.     {
  92.         $mode = '';
  93.     }
  94.  
  95. //
  96. // Set toggles for various options
  97. //
  98. if ( !$board_config['allow_html'] )
  99. {
  100.     $html_on = 0;
  101. }
  102. else
  103. {
  104.     $html_on = ( $submit || $refresh || preview) ? ( ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_html'] : $userdata['user_allowhtml'] );
  105. }
  106. if ( !$board_config['allow_bbcode'] )
  107. {
  108.     $bbcode_on = 0;
  109. }
  110. else
  111. {
  112.     $bbcode_on = ( $submit || $refresh || preview) ? ( ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'] );
  113. }
  114.  
  115. if ( !$board_config['allow_smilies'] )
  116. {
  117.     $smilies_on = 0;
  118. }
  119. else
  120. {
  121.     $smilies_on = ( $submit || $refresh || preview) ? ( ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'] );
  122.     if ($smilies_on)
  123.     {
  124.         include($phpbb_root_path . 'includes/functions_post.'.$phpEx);
  125.         generate_smilies('inline', PAGE_SHOUTBOX_MAX);
  126.         if ($mode == 'smilies')
  127.         {
  128.             generate_smilies('window', PAGE_SHOUTBOX_MAX);
  129.             exit;
  130.         }
  131.         
  132.     }
  133. }
  134.  
  135. if ($refresh)
  136. {
  137.     $message = ( !empty($HTTP_POST_VARS['message']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['message']))) : '';
  138.     if (!empty($message))
  139.     {
  140.         $template->assign_var('MESSAGE',$message);
  141.     }
  142. } else
  143. if ($submit || isset($HTTP_POST_VARS['message']))
  144. {
  145.     $current_time = time();
  146.     //
  147.     // Flood control
  148.     //
  149.     $where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "shout_ip = '$user_ip'" : 'shout_user_id = ' . $userdata['user_id'];
  150.     $sql = "SELECT MAX(shout_session_time) AS last_post_time
  151.         FROM " . SHOUTBOX_TABLE . "
  152.         WHERE $where_sql";
  153.     if ( $result = $db->sql_query($sql) )
  154.     {
  155.         if ( $row = $db->sql_fetchrow($result) )
  156.         {
  157.             if ( $row['last_post_time'] > 0 && ( $current_time - $row['last_post_time'] ) < $board_config['flood_interval'] )
  158.             {
  159.                 $error = true;
  160.                 $error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Flood_Error'] : $lang['Flood_Error'];
  161.             }
  162.         }
  163.     }
  164.     // Check username
  165.     if ( !empty($username) )
  166.     {
  167.         $username = htmlspecialchars(trim(strip_tags($username)));
  168.  
  169.         if ( !$userdata['session_logged_in'] || ( $userdata['session_logged_in'] && $username != $userdata['username'] ) )
  170.         {
  171.             include($phpbb_root_path . 'includes/functions_validate.'.$phpEx);
  172.  
  173.             $result = validate_username($username);
  174.             if ( $result['error'] )
  175.             {
  176.                 $error_msg .= ( !empty($error_msg) ) ? '<br />' . $result['error_msg'] : $result['error_msg'];
  177.             }
  178.         }
  179.     }
  180.     $message = (isset($HTTP_POST_VARS['message'])) ? trim($HTTP_POST_VARS['message']) : '';
  181.     // insert shout !
  182.     if (!empty($message) && $is_auth['auth_post'] && !$error)
  183.     {
  184.         include_once($phpbb_root_path . 'includes/functions_post.'.$phpEx);
  185.         $bbcode_uid = ( $bbcode_on ) ? make_bbcode_uid() : '';
  186.         $message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid);
  187.         $sql = "INSERT INTO " . SHOUTBOX_TABLE. " (shout_text, shout_session_time, shout_user_id, shout_ip, shout_username, shout_bbcode_uid,enable_bbcode,enable_html,enable_smilies) 
  188.                 VALUES ('$message', '".time()."', '".$userdata['user_id']."', '$user_ip', '".$username."', '".$bbcode_uid."',$bbcode_on,$html_on,$smilies_on)";
  189.         if (!$result = $db->sql_query($sql)) 
  190.         {
  191.             message_die(GENERAL_ERROR, 'Error inserting shout.', '', __LINE__, __FILE__, $sql);
  192.         }
  193.         // auto prune
  194.         if ($board_config['prune_shouts'])
  195.         {
  196.             $sql = "DELETE FROM " . SHOUTBOX_TABLE. " WHERE shout_session_time<=".(time()-86400*$board_config['prune_shouts']);
  197.             if (!$result = $db->sql_query($sql)) 
  198.             {
  199.                 message_die(GENERAL_ERROR, 'Error autoprune shouts.', '', __LINE__, __FILE__, $sql);
  200.             }
  201.         }
  202.     }
  203.  
  204. // see if we need offset
  205. if ((isset($HTTP_POST_VARS['start']) || isset($HTTP_GET_VARS['start'])) && !$submit)
  206. {
  207.     $start=(isset($HTTP_POST_VARS['start'])) ? intval($HTTP_POST_VARS['start']) : intval($HTTP_GET_VARS['start']);
  208. } else $start=0;
  209.  
  210.     //
  211.     // Show simple shoutbox
  212.     //
  213.  
  214.     if ( $is_auth['auth_post'] )
  215.     {
  216.         $template->assign_block_vars('switch_auth_post', array());
  217.     }    
  218.     else
  219.     {    
  220.         $template->assign_block_vars('switch_auth_no_post', array());
  221.     }
  222.  
  223.     if ($bbcode_on)
  224.     {
  225.         $template->assign_block_vars('switch_auth_post.switch_bbcode', array());
  226.     }
  227.     $template->set_filenames(array( 
  228.              'body' => 'shoutbox_body.tpl'));
  229.  
  230.  
  231. $template->assign_vars(array( 
  232.     'U_SHOUTBOX' => append_sid("shoutbox.$phpEx?start=$start"),
  233.     'U_SHOUTBOX_VIEW' => append_sid("shoutbox_view.$phpEx?start=$start"),
  234.     'T_HEAD_STYLESHEET' => $theme['head_stylesheet'],
  235.     'T_NAME' => $theme['template_name'],
  236.  
  237.     'L_SHOUTBOX' => $lang['Shoutbox'],
  238.     'L_SHOUT_PREVIEW' => $lang['Preview'],
  239.     'L_SHOUT_SUBMIT' => $lang['Go'],
  240.     'L_SHOUT_TEXT' => $lang['Shout_text'],
  241.     'L_SHOUT_REFRESH' => $lang['Shout_refresh'],
  242. 'L_SMILIES' => $lang['Smilies'],
  243. 'T_URL' => "templates/".$theme['template_name'],
  244. 'S_CONTENT_ENCODING' => $lang['ENCODING'],
  245.     'L_BBCODE_CLOSE_TAGS' => $lang['Close_Tags'], 
  246.  
  247.     'SHOUT_VIEW_SIZE' => ($max) ? $max : 0,
  248.     'S_HIDDEN_FIELDS' => $s_hidden_fields
  249.     ));
  250.     if( $error_msg != '' )
  251.     {
  252.         $template->set_filenames(array(
  253.             'reg_header' => 'error_body.tpl')
  254.         );
  255.         $template->assign_vars(array(
  256.             'ERROR_MESSAGE' => $error_msg)
  257.         );
  258.         $template->assign_var_from_handle('ERROR_BOX', 'reg_header');
  259.         $message = ( !empty($HTTP_POST_VARS['message']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['message']))) : '';
  260.         $template->assign_var('MESSAGE',$message);
  261.     }
  262.  
  263. $template->pparse('body'); 
  264.  
  265. ?>
  266.