aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2007-05-11 12:25:28 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2007-05-11 12:25:28 +0000
commit9e270489eb1dfbb59f176dd2abdb10f94055265a (patch)
treeeb39a1017598e6eaa239ad5a391559e78045ddf3 /phpBB/includes
parentecaeeff5dffb94be405f5d1517bd5e561b4ac458 (diff)
downloadforums-9e270489eb1dfbb59f176dd2abdb10f94055265a.tar
forums-9e270489eb1dfbb59f176dd2abdb10f94055265a.tar.gz
forums-9e270489eb1dfbb59f176dd2abdb10f94055265a.tar.bz2
forums-9e270489eb1dfbb59f176dd2abdb10f94055265a.tar.xz
forums-9e270489eb1dfbb59f176dd2abdb10f94055265a.zip
We do not support nesting code tags - #10763
#10741 Confirm box on pruning forums - #10619 Not stripping empty lines on parsing messages - #10579 Remove reports alongside with users - #10501 git-svn-id: file:///svn/phpbb/trunk@7527 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes')
-rw-r--r--phpBB/includes/acp/acp_prune.php151
-rw-r--r--phpBB/includes/acp/acp_styles.php1
-rw-r--r--phpBB/includes/functions_user.php59
-rw-r--r--phpBB/includes/message_parser.php134
4 files changed, 194 insertions, 151 deletions
diff --git a/phpBB/includes/acp/acp_prune.php b/phpBB/includes/acp/acp_prune.php
index 97d452a400..e4defd9d42 100644
--- a/phpBB/includes/acp/acp_prune.php
+++ b/phpBB/includes/acp/acp_prune.php
@@ -67,87 +67,106 @@ class acp_prune
if ($submit)
{
- $prune_posted = request_var('prune_days', 0);
- $prune_viewed = request_var('prune_vieweddays', 0);
- $prune_all = (!$prune_posted && !$prune_viewed) ? true : false;
-
- $prune_flags = 0;
- $prune_flags += (request_var('prune_old_polls', 0)) ? 2 : 0;
- $prune_flags += (request_var('prune_announce', 0)) ? 4 : 0;
- $prune_flags += (request_var('prune_sticky', 0)) ? 8 : 0;
-
- // Convert days to seconds for timestamp functions...
- $prunedate_posted = time() - ($prune_posted * 86400);
- $prunedate_viewed = time() - ($prune_viewed * 86400);
+ if (confirm_box(true))
+ {
+ $prune_posted = request_var('prune_days', 0);
+ $prune_viewed = request_var('prune_vieweddays', 0);
+ $prune_all = (!$prune_posted && !$prune_viewed) ? true : false;
+
+ $prune_flags = 0;
+ $prune_flags += (request_var('prune_old_polls', 0)) ? 2 : 0;
+ $prune_flags += (request_var('prune_announce', 0)) ? 4 : 0;
+ $prune_flags += (request_var('prune_sticky', 0)) ? 8 : 0;
- $template->assign_vars(array(
- 'S_PRUNED' => true)
- );
+ // Convert days to seconds for timestamp functions...
+ $prunedate_posted = time() - ($prune_posted * 86400);
+ $prunedate_viewed = time() - ($prune_viewed * 86400);
- $sql_forum = (sizeof($forum_id)) ? ' AND ' . $db->sql_in_set('forum_id', $forum_id) : '';
+ $template->assign_vars(array(
+ 'S_PRUNED' => true)
+ );
- // Get a list of forum's or the data for the forum that we are pruning.
- $sql = 'SELECT forum_id, forum_name
- FROM ' . FORUMS_TABLE . '
- WHERE forum_type = ' . FORUM_POST . "
- $sql_forum
- ORDER BY left_id ASC";
- $result = $db->sql_query($sql);
+ $sql_forum = (sizeof($forum_id)) ? ' AND ' . $db->sql_in_set('forum_id', $forum_id) : '';
- if ($row = $db->sql_fetchrow($result))
- {
- $prune_ids = array();
- $p_result['topics'] = 0;
- $p_result['posts'] = 0;
- $log_data = '';
-
- do
+ // Get a list of forum's or the data for the forum that we are pruning.
+ $sql = 'SELECT forum_id, forum_name
+ FROM ' . FORUMS_TABLE . '
+ WHERE forum_type = ' . FORUM_POST . "
+ $sql_forum
+ ORDER BY left_id ASC";
+ $result = $db->sql_query($sql);
+
+ if ($row = $db->sql_fetchrow($result))
{
- if (!$auth->acl_get('f_list', $row['forum_id']))
+ $prune_ids = array();
+ $p_result['topics'] = 0;
+ $p_result['posts'] = 0;
+ $log_data = '';
+
+ do
{
- continue;
- }
+ if (!$auth->acl_get('f_list', $row['forum_id']))
+ {
+ continue;
+ }
- if ($prune_all)
- {
- $p_result = prune($row['forum_id'], 'posted', time(), $prune_flags, false);
- }
- else
- {
- if ($prune_posted)
+ if ($prune_all)
{
- $return = prune($row['forum_id'], 'posted', $prunedate_posted, $prune_flags, false);
- $p_result['topics'] += $return['topics'];
- $p_result['posts'] += $return['posts'];
+ $p_result = prune($row['forum_id'], 'posted', time(), $prune_flags, false);
}
-
- if ($prune_viewed)
+ else
{
- $return = prune($row['forum_id'], 'viewed', $prunedate_viewed, $prune_flags, false);
- $p_result['topics'] += $return['topics'];
- $p_result['posts'] += $return['posts'];
+ if ($prune_posted)
+ {
+ $return = prune($row['forum_id'], 'posted', $prunedate_posted, $prune_flags, false);
+ $p_result['topics'] += $return['topics'];
+ $p_result['posts'] += $return['posts'];
+ }
+
+ if ($prune_viewed)
+ {
+ $return = prune($row['forum_id'], 'viewed', $prunedate_viewed, $prune_flags, false);
+ $p_result['topics'] += $return['topics'];
+ $p_result['posts'] += $return['posts'];
+ }
}
- }
- $prune_ids[] = $row['forum_id'];
+ $prune_ids[] = $row['forum_id'];
- $template->assign_block_vars('pruned', array(
- 'FORUM_NAME' => $row['forum_name'],
- 'NUM_TOPICS' => $p_result['topics'],
- 'NUM_POSTS' => $p_result['posts'])
- );
-
- $log_data .= (($log_data != '') ? ', ' : '') . $row['forum_name'];
+ $template->assign_block_vars('pruned', array(
+ 'FORUM_NAME' => $row['forum_name'],
+ 'NUM_TOPICS' => $p_result['topics'],
+ 'NUM_POSTS' => $p_result['posts'])
+ );
+
+ $log_data .= (($log_data != '') ? ', ' : '') . $row['forum_name'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
+ // Sync all pruned forums at once
+ sync('forum', 'forum_id', $prune_ids, true, true);
+ add_log('admin', 'LOG_PRUNE', $log_data);
}
- while ($row = $db->sql_fetchrow($result));
-
- // Sync all pruned forums at once
- sync('forum', 'forum_id', $prune_ids, true, true);
- add_log('admin', 'LOG_PRUNE', $log_data);
- }
- $db->sql_freeresult($result);
+ $db->sql_freeresult($result);
- return;
+ return;
+ }
+ else
+ {
+ confirm_box(false, $user->lang['PRUNE_FORUM_CONFIRM'], build_hidden_fields(array(
+ 'i' => $id,
+ 'mode' => $mode,
+ 'submit' => 1,
+ 'all_forums' => $all_forums,
+ 'f' => $forum_id,
+
+ 'prune_days' => request_var('prune_days', 0),
+ 'prune_vieweddays' => request_var('prune_vieweddays', 0),
+ 'prune_old_polls' => request_var('prune_old_polls', 0),
+ 'prune_announce' => request_var('prune_announce', 0),
+ 'prune_sticky' => request_var('prune_sticky', 0),
+ )));
+ }
}
// If they haven't selected a forum for pruning yet then
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 12b1507b01..61d7d51efc 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -967,6 +967,7 @@ parse_css_file = {PARSE_CSS_FILE}
foreach ($file_ary as $file)
{
+ $file = str_replace('/', '.', $file);
$filename = "{$cache_prefix}_$file.html.$phpEx";
$template->assign_block_vars('file', array(
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php
index 0dab76e7c0..87e88f5ac2 100644
--- a/phpBB/includes/functions_user.php
+++ b/phpBB/includes/functions_user.php
@@ -293,6 +293,65 @@ function user_delete($mode, $user_id, $post_username = false)
$db->sql_transaction('begin');
+ // Before we begin, we will remove the reports the user issued.
+ $sql = 'SELECT r.post_id, p.topic_id
+ FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . ' p
+ WHERE r.user_id = ' . $user_id . '
+ AND p.post_id = r.post_id';
+ $result = $db->sql_query($sql);
+
+ $report_posts = $report_topics = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $report_posts[] = $row['post_id'];
+ $report_topics[] = $row['topic_id'];
+ }
+ $db->sql_freeresult($result);
+
+ if (sizeof($report_posts))
+ {
+ $report_posts = array_unique($report_posts);
+ $report_topics = array_unique($report_topics);
+
+ // Get a list of topics that still contain reported posts
+ $sql = 'SELECT DISTINCT topic_id
+ FROM ' . POSTS_TABLE . '
+ WHERE ' . $db->sql_in_set('topic_id', $report_topics) . '
+ AND post_reported = 1
+ AND ' . $db->sql_in_set('post_id', $report_posts, true);
+ $result = $db->sql_query($sql);
+
+ $keep_report_topics = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $keep_report_topics[] = $row['topic_id'];
+ }
+ $db->sql_freeresult($result);
+
+ if (sizeof($keep_report_topics))
+ {
+ $report_topics = array_diff($report_topics, $keep_report_topics);
+ }
+ unset($keep_report_topics);
+
+ // Now set the flags back
+ $sql = 'UPDATE ' . POSTS_TABLE . '
+ SET post_reported = 0
+ WHERE ' . $db->sql_in_set('post_id', $report_posts);
+ $db->sql_query($sql);
+
+ if (sizeof($report_topics))
+ {
+ $sql = 'UPDATE ' . TOPICS_TABLE . '
+ SET topic_reported = 0
+ WHERE ' . $db->sql_in_set('topic_id', $report_topics);
+ $db->sql_query($sql);
+ }
+ }
+
+ // Remove reports
+ $db->sql_query('DELETE FROM ' . REPORTS_TABLE . ' WHERE user_id = ' . $user_id);
+
switch ($mode)
{
case 'retain':
diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php
index fee8b88d8c..39489250d7 100644
--- a/phpBB/includes/message_parser.php
+++ b/phpBB/includes/message_parser.php
@@ -374,107 +374,73 @@ class bbcode_firstpass extends bbcode
// Having it here saves us one preg_replace per message containing [code] blocks
// Additionally, magic url parsing should go after parsing bbcodes, but for safety those are stripped out too...
$htm_match = get_preg_expression('bbcode_htm');
-// $htm_match[3] = '/&#([0-9]+);/';
unset($htm_match[4], $htm_match[5]);
-
- $htm_replace = array('\1', '\1', '\2', '\1'); //, '&amp;#\1;');
+ $htm_replace = array('\1', '\1', '\2', '\1');
$out = '';
- do
+ // Strip the last [/code] block from $in
+ $code = substr($in, 0, -7);
+ $code = preg_replace($htm_match, $htm_replace, $code);
+
+ switch (strtolower($stx))
{
- $pos = stripos($in, '[/code]') + 7;
- $code = substr($in, 0, $pos);
- $in = substr($in, $pos);
-
- // $code contains everything that was between code tags (including the ending tag) but we're trying to grab as much extra text as possible, as long as it does not contain open [code] tags
- while ($in)
- {
- $pos = stripos($in, '[/code]') + 7;
- $buffer = substr($in, 0, $pos);
+ case 'php':
+
+ $remove_tags = false;
+ $code = str_replace(array('&lt;', '&gt;'), array('<', '>'), $code);
- if (preg_match('#\[code(?:=([a-z]+))?\]#i', $buffer))
+ if (!preg_match('/\<\?.*?\?\>/is', $code))
{
- break;
+ $remove_tags = true;
+ $code = "<?php $code ?>";
}
- else
+
+ $conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string');
+ foreach ($conf as $ini_var)
{
- $in = substr($in, $pos);
- $code .= $buffer;
+ @ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var));
}
- }
-
- $code = substr($code, 0, -7);
-// $code = preg_replace('#^[\r\n]*(.*?)[\n\r\s\t]*$#s', '$1', $code);
- $code = preg_replace($htm_match, $htm_replace, $code);
-
- switch (strtolower($stx))
- {
- case 'php':
-
- $remove_tags = false;
- $code = str_replace(array('&lt;', '&gt;'), array('<', '>'), $code);
-
- if (!preg_match('/\<\?.*?\?\>/is', $code))
- {
- $remove_tags = true;
- $code = "<?php $code ?>";
- }
-
- $conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string');
- foreach ($conf as $ini_var)
- {
- @ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var));
- }
-
- // Because highlight_string is specialcharing the text (but we already did this before), we have to reverse this in order to get correct results
- $code = htmlspecialchars_decode($code);
- $code = highlight_string($code, true);
- $str_from = array('<span style="color: ', '<font color="syntax', '</font>', '<code>', '</code>','[', ']', '.', ':');
- $str_to = array('<span class="', '<span class="syntax', '</span>', '', '', '&#91;', '&#93;', '&#46;', '&#58;');
+ // Because highlight_string is specialcharing the text (but we already did this before), we have to reverse this in order to get correct results
+ $code = htmlspecialchars_decode($code);
+ $code = highlight_string($code, true);
- if ($remove_tags)
- {
- $str_from[] = '<span class="syntaxdefault">&lt;?php </span>';
- $str_to[] = '';
- $str_from[] = '<span class="syntaxdefault">&lt;?php&nbsp;';
- $str_to[] = '<span class="syntaxdefault">';
- }
+ $str_from = array('<span style="color: ', '<font color="syntax', '</font>', '<code>', '</code>','[', ']', '.', ':');
+ $str_to = array('<span class="', '<span class="syntax', '</span>', '', '', '&#91;', '&#93;', '&#46;', '&#58;');
- $code = str_replace($str_from, $str_to, $code);
- $code = preg_replace('#^(<span class="[a-z_]+">)\n?(.*?)\n?(</span>)$#is', '$1$2$3', $code);
+ if ($remove_tags)
+ {
+ $str_from[] = '<span class="syntaxdefault">&lt;?php </span>';
+ $str_to[] = '';
+ $str_from[] = '<span class="syntaxdefault">&lt;?php&nbsp;';
+ $str_to[] = '<span class="syntaxdefault">';
+ }
- if ($remove_tags)
- {
- $code = preg_replace('#(<span class="[a-z]+">)?\?&gt;</span>#', '', $code);
- }
+ $code = str_replace($str_from, $str_to, $code);
+ $code = preg_replace('#^(<span class="[a-z_]+">)\n?(.*?)\n?(</span>)$#is', '$1$2$3', $code);
- $code = preg_replace('#^<span class="[a-z]+"><span class="([a-z]+)">(.*)</span></span>#s', '<span class="$1">$2</span>', $code);
- $code = preg_replace('#(?:[\n\r\s\t]|&nbsp;)*</span>$#u', '</span>', $code);
+ if ($remove_tags)
+ {
+ $code = preg_replace('#(<span class="[a-z]+">)?\?&gt;</span>#', '', $code);
+ }
- // remove newline at the end
- if (!empty($code) && $code[strlen($code) - 1] == "\n")
- {
- $code = substr($code, 0, -1);
- }
+ $code = preg_replace('#^<span class="[a-z]+"><span class="([a-z]+)">(.*)</span></span>#s', '<span class="$1">$2</span>', $code);
+ $code = preg_replace('#(?:[\n\r\s\t]|&nbsp;)*</span>$#u', '</span>', $code);
- $out .= "[code=$stx:" . $this->bbcode_uid . ']' . $code . '[/code:' . $this->bbcode_uid . ']';
- break;
+ // remove newline at the end
+ if (!empty($code) && $code[strlen($code) - 1] == "\n")
+ {
+ $code = substr($code, 0, -1);
+ }
- default:
- $out .= '[code:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($code) . '[/code:' . $this->bbcode_uid . ']';
- break;
- }
+ $out .= "[code=$stx:" . $this->bbcode_uid . ']' . $code . '[/code:' . $this->bbcode_uid . ']';
+ break;
- if (preg_match('#(.*?)\[code(?:=([a-z]+))?\](.+)#is', $in, $m))
- {
- $out .= $m[1];
- $stx = $m[2];
- $in = $m[3];
- }
+ default:
+ $out .= '[code:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($code) . '[/code:' . $this->bbcode_uid . ']';
+ break;
}
- while ($in);
return $out;
}
@@ -979,10 +945,8 @@ class parse_message extends bbcode_firstpass
// Do some general 'cleanup' first before processing message,
// e.g. remove excessive newlines(?), smilies(?)
- // Transform \r\n and \r into \n
- // TODO: Second regex looks wrong...
- $match = array('#\r\n?#', "#(\n\s+){3,}#u", '#(script|about|applet|activex|chrome):#i');
- $replace = array("\n", "\n\n", "\\1&#058;");
+ $match = array('#(script|about|applet|activex|chrome):#i');
+ $replace = array("\\1&#058;");
$this->message = preg_replace($match, $replace, trim($this->message));
// Message length check. -1 disables this check completely.