Здравейте, ползвам модулта Shoutbox за phpbb3, но в чата времето излиза с 4-5 часа преди реалното, някой ще може ли да помогне?
Колебаех се в кой раздел да пусна, извинявам се.
Код:
<?php
/**
*
* @package Ajax Shoutbox
* @version $Id: ajax.php 181 2007-11-10 11:30:53Z paul $
* @copyright (c) 2007 Paul Sohier
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include ($phpbb_root_path . 'common.' . $phpEx);
error_reporting(0);//Disable error reporting, can be bad for our headers ;)
// Start session management
$user->session_begin(false);
$auth->acl($user->data);
$user->setup('mods/shout');
include ($phpbb_root_path . 'includes/functions_shoutbox.' . $phpEx);
// Be sure $shout_number is set.
// This is done in includes/functions_shoutbox.php.
if (!isset($shout_number))
{
exit;
}
// We have our own error handling!
$db->sql_return_on_error(true);
$mode = request_var('m', 'index');
@ob_end_clean();
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header('Content-type: text/xml; charset=UTF-8');
echo '<' . '?xml version="1.0" encoding="UTF-8" ?' . '>
<xml>';
switch ($mode)
{
case 'smilies':
$sql = 'SELECT *
FROM ' . SMILIES_TABLE .
' WHERE display_on_posting = 1
ORDER BY smiley_order';
$result = $db->sql_query($sql);
if ($result)
{
$num_smilies = 0;
$rowset = array();
$last_url = '';
while ($row = $db->sql_fetchrow($result))
{
if ($row['smiley_url'] !== $last_url)
{
echo "<smilies>\n
<code>" . xml($row['code']) . "</code>\n
<img>" . xml($phpbb_root_path . $config['smilies_path'] . '/' . $row['smiley_url']) . "</img>\n
<alt>" . xml($row['emotion']) . "</alt>\n
</smilies>";
}
$last_url = $row['smiley_url'];
}
echo '</xml>';
exit;
}
else
{
sql_error($sql, __LINE__, __FILE__);
}
break;
case 'delete':
$id = request_var('id', 0);
if (!$id)
{
echo '<error>' . $user->lang['NO_SHOUT_ID'] . '</error></xml>';
exit;
}
else
{
// Lets delete this post :D
$sql = 'DELETE FROM ' . SHOUTBOX_TABLE . ' WHERE shout_id = ' . $id;
if (!$db->sql_query($sql))
{
sql_error($sql, __LINE__, __FILE__);
}
else
{
echo '<msg></msg></xml>';
exit;
}
}
break;
case 'add':
if ($user->data['user_type'] == USER_IGNORE )
{
echo '<error>' . $user->lang['NO_POST_GUEST'] . '</error></xml>';
exit;
}
else
{
// Remove all messages older as 2 weeks,
// Config option be a good thing for this?
$time = time() - (3600 * 24 * 14);//3600 seconds in 1 hour, 24 hours in a day, 14 days in 2 weeks.
$sql = 'DELETE FROM ' . SHOUTBOX_TABLE . " WHERE shout_time < $time";
if (!$db->sql_query($sql))
{
sql_error($sql, __LINE__, __FILE__);
}
$current_time = time();
//
// Flood control
//
if (!($auth->acl_get('a_') || $auth->acl_getf_global('m_')))
{
$sql = 'SELECT MAX(shout_time) AS last_post_time
FROM ' . SHOUTBOX_TABLE . '
WHERE shout_user_id = ' . $user->data['user_id'];
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
$db->sql_freeresult($result);
if ($row['last_post_time'] > 0 && ($current_time - $row['last_post_time'] ) < $config['flood_interval'])
{
echo '<error>' . $user->lang['FLOOD_ERROR'] . '</error></xml>';
exit;
}
}
}
else
{
sql_error($sql, __LINE__, __FILE__);
}
}
$message = utf8_normalize_nfc(request_var('chat_message', '', true));
if (empty($message))
{
echo '<error>' . $user->lang['MESSAGE_EMPTY'] . '</error></xml>';
exit;
}
else if (strpos($message, '[quote') !== false || strpos($message, '[code') !== false || strpos($message, '[list') !== false)
{
echo '<error>' . $user->lang['NO_QUOTE'] . '</error></xml>';
exit;
}
else
{
$uid = $bitfield = $options = ''; // will be modified by generate_text_for_storage
$allow_bbcode = $allow_urls = $allow_smilies = true;
generate_text_for_storage($message, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);
$sql_ary = array(
'shout_text' => $message,
'shout_bbcode_uid' => $uid,
'shout_bbcode_bitfield' => $bitfield,
'shout_bbcode_flags' => $options,
'shout_time' => time(),
'shout_user_id' => (int)$user->data['user_id'],
'shout_ip' => $user->ip,
);
$sql = 'INSERT INTO ' . SHOUTBOX_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
if (!$db->sql_query($sql))
{
sql_error($sql, __LINE__, __FILE__);
}
echo '<msg>' . $user->lang['POSTED'] . '</msg></xml>';
exit;
}
}
break;
case 'check':
$last = request_var('last', 1);
$sql = 'SELECT shout_time AS s FROM ' . SHOUTBOX_TABLE . '
ORDER BY shout_time DESC';
$result = $db->sql_query_limit($sql, 1);
if (!$result)
{
sql_error($sql, __LINE__, __FILE__);
}
else
{
$row = $db->sql_fetchrow($result);
$s = $row['s'];
echo "<last>$s</last><time>" . (int)($s != $last) . '</time></xml>';
exit;
}
break;
case 'number':
$sql = 'SELECT COUNT(shout_id) as nr FROM ' . SHOUTBOX_TABLE;
$result = $db->sql_query($sql);
if (!$result)
{
sql_error($sql, __LINE__, __FILE__);
}
$row = (int)$db->sql_fetchfield('nr');
echo "<nr>$row</nr></xml>";
exit;
break;
case 'view':
$start = request_var('start', 0);
$start = ($start < 0) ? 0 : $start;
$sql = 'SELECT s.*, u.user_colour, u.username, u.user_id FROM ' . SHOUTBOX_TABLE . ' s, ' . USERS_TABLE . ' u
WHERE
s.shout_user_id = u.user_id
ORDER BY s.shout_time DESC';
$result = $db->sql_query_limit($sql, $shout_number, $start);
if (!$result)
{
sql_error($sql, __LINE__, __FILE__);
}
else
{
$row = $db->sql_fetchrow($result);
if (!$row)
{
echo '<error>' . $user->lang['NO_MESSAGE'] . '</error></xml>';
exit;
}
do
{
echo "<posts>\n";
$row['username'] = get_username_string('full', $row['user_id'], xml(htmlspecialchars_decode($row['username'])), $row['user_colour']);
$row['shout_time'] = $user->format_date($row['shout_time']);
$row['shout_text'] = generate_text_for_display($row['shout_text'], $row['shout_bbcode_uid'], $row['shout_bbcode_bitfield'], $row['shout_bbcode_flags']);
$row['shout_text'] = str_replace(' ', '', $row['shout_text']);
// 5 is the length of <br /> - 1.
if (substr($row['shout_text'], 0, 5) == '<br />')
{
$row['shout_text'] = substr($row['shout_text'], 5);
}
// Next items aren't needed in XML.
unset($row['shout_bbcode_uid'], $row['user_allowsmile']);
if (!($auth->acl_get('a_') || $auth->acl_getf_global('m_')))
{
unset($row['shout_userip']);
}
foreach ($row as $key => $value)
{
if (is_numeric($key))
{
continue;
}
echo "\t<$key>$value</$key>\n";
}
echo "</posts>\n";
}
while ($row = $db->sql_fetchrow($result));
echo '</xml>';
exit;
}
break;
}
echo '<error></error></xml>';
?>