aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes')
-rw-r--r--phpBB/includes/acp/acp_bbcodes.php2
-rw-r--r--phpBB/includes/acp/acp_database.php6
-rw-r--r--phpBB/includes/acp/acp_forums.php72
-rw-r--r--phpBB/includes/acp/acp_styles.php79
-rw-r--r--phpBB/includes/bbcode.php57
-rw-r--r--phpBB/includes/db/mssql.php2
-rw-r--r--phpBB/includes/db/sqlite.php27
-rw-r--r--phpBB/includes/functions.php96
-rw-r--r--phpBB/includes/functions_posting.php140
-rw-r--r--phpBB/includes/functions_privmsgs.php134
-rw-r--r--phpBB/includes/functions_user.php207
-rw-r--r--phpBB/includes/message_parser.php16
-rw-r--r--phpBB/includes/ucp/ucp_groups.php2
-rw-r--r--phpBB/includes/ucp/ucp_pm_compose.php2
-rw-r--r--phpBB/includes/ucp/ucp_pm_viewmessage.php4
-rw-r--r--phpBB/includes/ucp/ucp_profile.php70
16 files changed, 854 insertions, 62 deletions
diff --git a/phpBB/includes/acp/acp_bbcodes.php b/phpBB/includes/acp/acp_bbcodes.php
index 675048327a..cdb6fce1f8 100644
--- a/phpBB/includes/acp/acp_bbcodes.php
+++ b/phpBB/includes/acp/acp_bbcodes.php
@@ -164,7 +164,7 @@ class acp_bbcodes
$bbcode_id = NUM_CORE_BBCODES + 1;
}
- if ($bbcode_id > 31)
+ if ($bbcode_id > 2039)
{
trigger_error('TOO_MANY_BBCODES');
}
diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php
index 52a9732e82..7fd959b104 100644
--- a/phpBB/includes/acp/acp_database.php
+++ b/phpBB/includes/acp/acp_database.php
@@ -210,11 +210,11 @@ class acp_database
case 'oracle':
case 'postgres':
case 'firebird':
- $sql_data .= 'TRUNCATE TABLE ' . $table_name . "\n";
+ $sql_data .= 'TRUNCATE TABLE ' . $table_name . ";\n";
break;
case 'sqlite':
- $sql_data .= 'DELETE FROM ' . $table_name . "\n";
+ $sql_data .= 'DELETE FROM ' . $table_name . ";\n";
break;
}
}
@@ -1686,7 +1686,7 @@ class acp_database
if ($row['COLUMN_DEFAULT'])
{
- $line .= ' CONSTRAINT [DF_' . $table_name . '_' . $row['COLUMN_NAME'] . '] DEFAULT ' . $row['COLUMN_DEFAULT'];
+ $line .= ' DEFAULT ' . $row['COLUMN_DEFAULT'];
}
$rows[] = $line;
diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php
index 21f633f4f6..8542d44301 100644
--- a/phpBB/includes/acp/acp_forums.php
+++ b/phpBB/includes/acp/acp_forums.php
@@ -104,7 +104,7 @@ class acp_forums
'forum_rules' => request_var('forum_rules', '', true),
'forum_rules_uid' => '',
'forum_rules_options' => 0,
- 'forum_rules_bitfield' => 0,
+ 'forum_rules_bitfield' => '',
'forum_rules_link' => request_var('forum_rules_link', ''),
'forum_image' => request_var('forum_image', ''),
'forum_style' => request_var('forum_style', 0),
@@ -419,7 +419,7 @@ class acp_forums
{
// Before we are able to display the preview and plane text, we need to parse our request_var()'d value...
$forum_data['forum_rules_uid'] = '';
- $forum_data['forum_rules_bitfield'] = 0;
+ $forum_data['forum_rules_bitfield'] = '';
$forum_data['forum_rules_options'] = 0;
generate_text_for_storage($forum_data['forum_rules'], $forum_data['forum_rules_uid'], $forum_data['forum_rules_bitfield'], $forum_data['forum_rules_options'], request_var('rules_allow_bbcode', false), request_var('rules_allow_urls', false), request_var('rules_allow_smiliess', false));
@@ -439,7 +439,7 @@ class acp_forums
{
// Before we are able to display the preview and plane text, we need to parse our request_var()'d value...
$forum_data['forum_desc_uid'] = '';
- $forum_data['forum_desc_bitfield'] = 0;
+ $forum_data['forum_desc_bitfield'] = '';
$forum_data['forum_desc_options'] = 0;
generate_text_for_storage($forum_data['forum_desc'], $forum_data['forum_desc_uid'], $forum_data['forum_desc_bitfield'], $forum_data['forum_desc_options'], request_var('desc_allow_bbcode', false), request_var('desc_allow_urls', false), request_var('desc_allow_smiliess', false));
@@ -919,8 +919,72 @@ class acp_forums
$forum_id = $forum_data_sql['forum_id'];
unset($forum_data_sql['forum_id']);
+ $query = '';
+
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $values = array();
+ foreach ($forum_data_sql as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'forum_desc_bitfield' && $key != 'forum_rules_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ case 'sqlite':
+ $values = array();
+ foreach ($forum_data_sql as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'forum_desc_bitfield' && $key != 'forum_rules_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = '" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ default:
+ $query = $db->sql_build_array('UPDATE', $forum_data_sql);
+ break;
+ }
+
$sql = 'UPDATE ' . FORUMS_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $forum_data_sql) . '
+ SET ' . $query . '
WHERE forum_id = ' . $forum_id;
$db->sql_query($sql);
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 92bd515f98..2e27995a81 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -27,7 +27,14 @@ class acp_styles
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
// Hardcoded template bitfield to add for new templates
- define('TEMPLATE_BITFIELD', 6921);
+ $bitfield = new bitfield();
+ $bitfield->set(0);
+ $bitfield->set(3);
+ $bitfield->set(8);
+ $bitfield->set(9);
+ $bitfield->set(11);
+ $bitfield->set(12);
+ define('TEMPLATE_BITFIELD', $bitfield->data);
$user->add_lang('acp/styles');
@@ -2917,10 +2924,78 @@ pagination_sep = \'{PAGINATION_SEP}\'
unset($cfg_data);
}
+ $query = '';
+
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ case 'sqlite':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "'" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ default:
+ $query = $db->sql_build_array('INSERT', $sql_ary);
+ break;
+ }
+
$db->sql_transaction('begin');
$sql = "INSERT INTO $sql_from
- " . $db->sql_build_array('INSERT', $sql_ary);
+ " . $query;
$db->sql_query($sql);
$id = $db->sql_nextid();
diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php
index 680d17dd20..96efad10f8 100644
--- a/phpBB/includes/bbcode.php
+++ b/phpBB/includes/bbcode.php
@@ -15,7 +15,7 @@
class bbcode
{
var $bbcode_uid = '';
- var $bbcode_bitfield = 0;
+ var $bbcode_bitfield = '';
var $bbcode_cache = array();
var $bbcode_template = array();
@@ -69,32 +69,31 @@ class bbcode
$str = array('search' => array(), 'replace' => array());
$preg = array('search' => array(), 'replace' => array());
- $bitlen = strlen(decbin($this->bbcode_bitfield));
- for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
+ $bitfield = new bitfield($this->bbcode_bitfield);
+ $bbcodes_set = $bitfield->get_all_set();
+
+ foreach ($bbcodes_set as $bbcode_id)
{
- if ($this->bbcode_bitfield & (1 << $bbcode_id))
+ if (!empty($this->bbcode_cache[$bbcode_id]))
{
- if (!empty($this->bbcode_cache[$bbcode_id]))
+ foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
{
- foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
+ foreach ($array as $search => $replace)
{
- foreach ($array as $search => $replace)
- {
- ${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search);
- ${$type}['replace'][] = $replace;
- }
+ ${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search);
+ ${$type}['replace'][] = $replace;
+ }
- if (sizeof($str['search']))
- {
- $message = str_replace($str['search'], $str['replace'], $message);
- $str = array('search' => array(), 'replace' => array());
- }
+ if (sizeof($str['search']))
+ {
+ $message = str_replace($str['search'], $str['replace'], $message);
+ $str = array('search' => array(), 'replace' => array());
+ }
- if (sizeof($preg['search']))
- {
- $message = preg_replace($preg['search'], $preg['replace'], $message);
- $preg = array('search' => array(), 'replace' => array());
- }
+ if (sizeof($preg['search']))
+ {
+ $message = preg_replace($preg['search'], $preg['replace'], $message);
+ $preg = array('search' => array(), 'replace' => array());
}
}
}
@@ -129,9 +128,12 @@ class bbcode
$bbcode_ids = $rowset = array();
$bitlen = strlen(decbin($this->bbcode_bitfield));
- for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
+ $bitfield = new bitfield($this->bbcode_bitfield);
+ $bbcodes_set = $bitfield->get_all_set();
+
+ foreach ($bbcodes_set as $bbcode_id)
{
- if (isset($this->bbcode_cache[$bbcode_id]) || !($this->bbcode_bitfield & (1 << $bbcode_id)))
+ if (isset($this->bbcode_cache[$bbcode_id]))
{
// do not try to re-cache it if it's already in
continue;
@@ -312,9 +314,13 @@ class bbcode
break;
default:
+ if (!isset($template_bitfield))
+ {
+ $template_bitfield = new bitfield($this->template_bitfield);
+ }
if (isset($rowset[$bbcode_id]))
{
- if ($this->template_bitfield & (1 << $bbcode_id))
+ if ($template_bitfield->get($bbcode_id))
{
// The bbcode requires a custom template to be loaded
if (!$bbcode_tpl = $this->bbcode_tpl($rowset[$bbcode_id]['bbcode_tag'], $bbcode_id))
@@ -390,9 +396,10 @@ class bbcode
'color' => '<span style="color: $1">$2</span>',
'email' => '<a href="mailto:$1">$2</a>'
);
+ $template_bitfield = new bitfield($this->template_bitfield);
}
- if ($bbcode_id != -1 && !($this->template_bitfield & (1 << $bbcode_id)))
+ if ($bbcode_id != -1 && !$template_bitfield->get($bbcode_id))
{
return (isset($bbcode_hardtpl[$tpl_name])) ? $bbcode_hardtpl[$tpl_name] : false;
}
diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php
index efe0b4333d..6ef8597c18 100644
--- a/phpBB/includes/db/mssql.php
+++ b/phpBB/includes/db/mssql.php
@@ -243,7 +243,7 @@ class dbal_mssql extends dbal
{
foreach ($row as $key => $value)
{
- $row[$key] = ($value === ' ') ? '' : $value;
+ $row[$key] = ($value === ' ' && strpos($key, 'bitfield') === false) ? '' : $value;
}
}
diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php
index 7b23171187..95f12175c3 100644
--- a/phpBB/includes/db/sqlite.php
+++ b/phpBB/includes/db/sqlite.php
@@ -47,6 +47,8 @@ class dbal_sqlite extends dbal
{
@sqlite_query('PRAGMA short_column_names = 1', $this->db_connect_id);
}
+
+ sqlite_create_function($this->db_connect_id, 'binary_insert', array('dbal_sqlite', '_sql_insert'), 1);
return ($this->db_connect_id) ? true : array('message' => $error);
}
@@ -328,6 +330,31 @@ class dbal_sqlite extends dbal
}
}
+ /**
+ * Build the proper binary string used for the default
+ * @access: private
+ */
+ function _sql_insert($mode)
+ {
+ if ($mode == 1)
+ {
+ $bitfield = new bitfield();
+ $bitfield->set(0);
+ $bitfield->set(3);
+ $bitfield->set(8);
+ $bitfield->set(9);
+ $bitfield->set(11);
+ $bitfield->set(12);
+ return sqlite_udf_encode_binary($bitfield->data);
+ }
+ /*
+ else
+ {
+ return sqlite_udf_encode_binary("\0");
+ }
+ */
+ }
+
}
} // if ... define
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index c5d5b2f2a3..d5355ca600 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1857,7 +1857,7 @@ function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bb
global $phpbb_root_path, $phpEx;
$uid = '';
- $bitfield = 0;
+ $bitfield = '';
if (!$text)
{
@@ -2863,4 +2863,98 @@ function garbage_collection()
$db->sql_close();
}
+class bitfield
+{
+ var $data;
+
+ function bitfield($bitfield = '')
+ {
+ $this->data = $bitfield;
+ }
+
+ function get($n)
+ {
+ /**
+ * Get the ($n / 8)th char
+ */
+ $byte = $n >> 3;
+
+ if (!isset($this->data[$byte]))
+ {
+ /**
+ * Of course, if it doesn't exist then the result if FALSE
+ */
+ return FALSE;
+ }
+
+ $c = $this->data[$byte];
+
+ /**
+ * Lookup the ($n % 8)th bit of the byte
+ */
+ $bit = 7 - ($n & 7);
+ return (bool) (ord($c) & (1 << $bit));
+ }
+
+ function set($n)
+ {
+ $byte = $n >> 3;
+ $bit = 7 - ($n & 7);
+
+ if (isset($this->data[$byte]))
+ {
+ $this->data[$byte] = $this->data[$byte] | chr(1 << $bit);
+ }
+ else
+ {
+ if ($byte - strlen($this->data) > 0)
+ {
+ $this->data .= str_repeat("\0", $byte - strlen($this->data));
+ }
+ $this->data .= chr(1 << $bit);
+ }
+ }
+
+ function clear($n)
+ {
+ $byte = $n >> 3;
+
+ if (!isset($this->data[$byte]))
+ {
+ return;
+ }
+
+ $bit = 7 - ($n & 7);
+ $this->data[$byte] = $this->data[$byte] &~ chr(1 << $bit);
+ }
+
+ function get_blob()
+ {
+ return $this->data;
+ }
+
+ function get_bin()
+ {
+ $bin = '';
+ $len = strlen($this->data);
+
+ for ($i = 0; $i < $len; ++$i)
+ {
+ $bin .= str_pad(decbin(ord($this->data[$i])), 8, '0', STR_PAD_LEFT);
+ }
+
+ return $bin;
+ }
+
+ function get_all_set()
+ {
+ return array_keys(array_filter(str_split($this->get_bin())));
+ }
+
+ function merge($bitfield)
+ {
+ $this->data = $this->data | $bitfield->get_blob();
+ }
+}
+
?> \ No newline at end of file
diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php
index d2ee32969b..d0567f5e76 100644
--- a/phpBB/includes/functions_posting.php
+++ b/phpBB/includes/functions_posting.php
@@ -832,11 +832,11 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
return false;
}
- $bbcode_bitfield = 0;
+ $bbcode_bitfield = '';
do
{
$rowset[] = $row;
- $bbcode_bitfield |= $row['bbcode_bitfield'];
+ $bbcode_bitfield = $bbcode_bitfield | $row['bbcode_bitfield'];
}
while ($row = $db->sql_fetchrow($result));
$db->sql_freeresult($result);
@@ -1537,8 +1537,76 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
);
}
- $sql = 'INSERT INTO ' . POSTS_TABLE . ' ' .
- $db->sql_build_array('INSERT', $sql_data[POSTS_TABLE]['sql']);
+ $query = '';
+
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $fields = array();
+ foreach ($sql_data[POSTS_TABLE]['sql'] as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ case 'sqlite':
+ $fields = array();
+ foreach ($sql_data[POSTS_TABLE]['sql'] as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "'" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ default:
+ $query = $db->sql_build_array('INSERT', $sql_data[POSTS_TABLE]['sql']);
+ break;
+ }
+
+
+ $sql = 'INSERT INTO ' . POSTS_TABLE . ' ' . $query;
$db->sql_query($sql);
$data['post_id'] = $db->sql_nextid();
@@ -1614,8 +1682,70 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
// Update the posts table
if (isset($sql_data[POSTS_TABLE]['sql']))
{
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $values = array();
+ foreach ($sql_data as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ case 'sqlite':
+ $values = array();
+ foreach ($sql_data as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key ='" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ default:
+ $query = $db->sql_build_array('UPDATE', $sql_data);
+ break;
+ }
+
$sql = 'UPDATE ' . POSTS_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql_data[POSTS_TABLE]['sql']) . '
+ SET ' . $query . '
WHERE post_id = ' . $data['post_id'];
$db->sql_query($sql);
}
diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php
index 238ac76cb5..dde811c3f3 100644
--- a/phpBB/includes/functions_privmsgs.php
+++ b/phpBB/includes/functions_privmsgs.php
@@ -1302,15 +1302,145 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
if (sizeof($sql_data))
{
+ $query = '';
+
if ($mode == 'post' || $mode == 'reply' || $mode == 'quote' || $mode == 'quotepost' || $mode == 'forward')
{
- $db->sql_query('INSERT INTO ' . PRIVMSGS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_data));
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $fields = array();
+ foreach ($sql_data as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ case 'sqlite':
+ $fields = array();
+ foreach ($sql_data as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "'" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ default:
+ $query = $db->sql_build_array('INSERT', $sql_data);
+ break;
+ }
+
+ $db->sql_query('INSERT INTO ' . PRIVMSGS_TABLE . ' ' . $query);
$data['msg_id'] = $db->sql_nextid();
}
else if ($mode == 'edit')
{
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $values = array();
+ foreach ($sql_data as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'forum_desc_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ case 'sqlite':
+ $values = array();
+ foreach ($sql_data as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'forum_desc_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = '" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ default:
+ $query = $db->sql_build_array('UPDATE', $sql_data);
+ break;
+ }
+
$sql = 'UPDATE ' . PRIVMSGS_TABLE . '
- SET message_edit_count = message_edit_count + 1, ' . $db->sql_build_array('UPDATE', $sql_data) . '
+ SET message_edit_count = message_edit_count + 1, ' . $query . '
WHERE msg_id = ' . $data['msg_id'];
$db->sql_query($sql);
}
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php
index 72383c1501..b0c2d4a2b7 100644
--- a/phpBB/includes/functions_user.php
+++ b/phpBB/includes/functions_user.php
@@ -186,7 +186,7 @@ function user_add($user_row, $cp_data = false)
'user_sig' => '',
'user_sig_bbcode_uid' => '',
- 'user_sig_bbcode_bitfield' => 0,
+ 'user_sig_bbcode_bitfield' => '',
);
// Now fill the sql array with not required variables
@@ -207,7 +207,75 @@ function user_add($user_row, $cp_data = false)
}
}
- $sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
+ $query = '';
+
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'user_sig_bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ case 'sqlite':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'user_sig_bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "'" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ default:
+ $query = $db->sql_build_array('INSERT', $sql_ary);
+ break;
+ }
+
+ $sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $query;
$db->sql_query($sql);
$user_id = $db->sql_nextid();
@@ -1388,7 +1456,7 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
'group_name' => (string) $name,
'group_desc' => (string) $desc,
'group_desc_uid' => '',
- 'group_desc_bitfield' => 0,
+ 'group_desc_bitfield' => '',
'group_type' => (int) $type,
);
@@ -1413,15 +1481,144 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
// Setting the log message before we set the group id (if group gets added)
$log = ($group_id) ? 'LOG_GROUP_UPDATED' : 'LOG_GROUP_CREATED';
+ $query = '';
+
if ($group_id)
{
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $values = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'group_desc_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ case 'sqlite':
+ $values = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'group_desc_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = '" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ default:
+ $query = $db->sql_build_array('UPDATE', $sql_ary);
+ break;
+ }
+
$sql = 'UPDATE ' . GROUPS_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
+ SET ' . $query . "
WHERE group_id = $group_id";
}
else
{
- $sql = 'INSERT INTO ' . GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ case 'sqlite':
+ $fields = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ $fields[] = $key;
+
+ if (is_null($var))
+ {
+ $values[] = 'NULL';
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'bbcode_bitfield')
+ {
+ $values[] = "'" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "'" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? intval($var) : $var;
+ }
+ }
+ $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
+ break;
+
+ default:
+ $query = $db->sql_build_array('INSERT', $sql_ary);
+ break;
+ }
+ $sql = 'INSERT INTO ' . GROUPS_TABLE . ' ' . $query;
}
$db->sql_query($sql);
diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php
index a44a11d566..37376c17e8 100644
--- a/phpBB/includes/message_parser.php
+++ b/phpBB/includes/message_parser.php
@@ -43,7 +43,9 @@ class bbcode_firstpass extends bbcode
}
global $user;
- $this->bbcode_bitfield = 0;
+
+ $this->bbcode_bitfield = '';
+ $bitfield = new bitfield();
$size = strlen($this->message);
foreach ($this->bbcodes as $bbcode_name => $bbcode_data)
@@ -72,10 +74,12 @@ class bbcode_firstpass extends bbcode
$new_size = strlen($this->message);
if ($size != $new_size)
{
- $this->bbcode_bitfield |= (1 << $bbcode_data['bbcode_id']);
+ $bitfield->set($bbcode_data['bbcode_id']);
$size = $new_size;
}
}
+
+ $this->bbcode_bitfield = $bitfield->get_blob();
}
/**
@@ -1376,21 +1380,21 @@ class parse_message extends bbcode_firstpass
// Parse Poll Option text ;)
$tmp_message = $this->message;
$this->message = $poll['poll_option_text'];
- $bbcode_bitfield = $this->bbcode_bitfield;
+
$poll['poll_option_text'] = $this->parse($poll['enable_bbcode'], $poll['enable_urls'], $poll['enable_smilies'], $poll['img_status'], false, false, false);
- $this->bbcode_bitfield |= $bbcode_bitfield;
+
$this->message = $tmp_message;
// Parse Poll Title
$tmp_message = $this->message;
$this->message = $poll['poll_title'];
- $bbcode_bitfield = $this->bbcode_bitfield;
+
$poll['poll_title'] = $this->parse($poll['enable_bbcode'], $poll['enable_urls'], $poll['enable_smilies'], $poll['img_status'], false, false, false);
- $this->bbcode_bitfield |= $bbcode_bitfield;
+
$this->message = $tmp_message;
unset($tmp_message);
diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php
index a9fb0444f5..4dcacdc575 100644
--- a/phpBB/includes/ucp/ucp_groups.php
+++ b/phpBB/includes/ucp/ucp_groups.php
@@ -316,7 +316,7 @@ class ucp_groups
// Hide hidden groups unless user is an admin with group privileges
$sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
- $sql = 'SELECT group_id, group_name, group_desc, group_desc_uid, group_desc_bitfield, group_type
+ $sql = 'SELECT group_id, group_name, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type
FROM ' . GROUPS_TABLE . '
WHERE group_id NOT IN (' . implode(', ', $group_id_ary) . ")
AND group_type $sql_and
diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php
index 272b93af55..8ba12650c1 100644
--- a/phpBB/includes/ucp/ucp_pm_compose.php
+++ b/phpBB/includes/ucp/ucp_pm_compose.php
@@ -520,7 +520,7 @@ function compose_pm($id, $mode, $action)
'enable_bbcode' => (bool) $enable_bbcode,
'enable_smilies' => (bool) $enable_smilies,
'enable_urls' => (bool) $enable_urls,
- 'bbcode_bitfield' => (int) $message_parser->bbcode_bitfield,
+ 'bbcode_bitfield' => $message_parser->bbcode_bitfield,
'bbcode_uid' => $message_parser->bbcode_uid,
'message' => $message_parser->message,
'attachment_data' => $message_parser->attachment_data,
diff --git a/phpBB/includes/ucp/ucp_pm_viewmessage.php b/phpBB/includes/ucp/ucp_pm_viewmessage.php
index 8e1b580571..3df09a4a0c 100644
--- a/phpBB/includes/ucp/ucp_pm_viewmessage.php
+++ b/phpBB/includes/ucp/ucp_pm_viewmessage.php
@@ -264,7 +264,7 @@ function message_history($msg_id, $user_id, $message_row, $folder)
}
$rowset = array();
- $bbcode_bitfield = 0;
+ $bbcode_bitfield = '';
$folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm') . '&amp;folder=';
$title = ($sort_dir == 'd') ? $row['message_subject'] : '';
@@ -281,7 +281,7 @@ function message_history($msg_id, $user_id, $message_row, $folder)
else
{
$rowset[$row['msg_id']] = $row;
- $bbcode_bitfield |= $row['bbcode_bitfield'];
+ $bbcode_bitfield = $bbcode_bitfield | $row['bbcode_bitfield'];
}
}
while ($row = $db->sql_fetchrow($result));
diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php
index c529e55223..522aa29723 100644
--- a/phpBB/includes/ucp/ucp_profile.php
+++ b/phpBB/includes/ucp/ucp_profile.php
@@ -431,17 +431,81 @@ class ucp_profile
{
$error[] = implode('<br />', $message_parser->warn_msg);
}
-
+
if (!sizeof($error) && $submit)
{
$sql_ary = array(
'user_sig' => (string) $message_parser->message,
'user_sig_bbcode_uid' => (string) $message_parser->bbcode_uid,
- 'user_sig_bbcode_bitfield' => (int) $message_parser->bbcode_bitfield
+ 'user_sig_bbcode_bitfield' => $message_parser->bbcode_bitfield
);
+ $query = '';
+
+ switch (SQL_LAYER)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $values = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'user_sig_bbcode_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = CAST('" . $var . "' AS varbinary)";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ case 'sqlite':
+ $values = array();
+ foreach ($sql_ary as $key => $var)
+ {
+ if (is_null($var))
+ {
+ $values[] = "$key = NULL";
+ }
+ else if (is_string($var))
+ {
+ if ($key !== 'user_sig_bbcode_bitfield')
+ {
+ $values[] = "$key = '" . $db->sql_escape($var) . "'";
+ }
+ else
+ {
+ $values[] = "$key = '" . sqlite_udf_encode_binary($var) . "'";
+ }
+ }
+ else
+ {
+ $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var";
+ }
+ }
+ $query = implode(', ', $values);
+ break;
+
+ default:
+ $query = $db->sql_build_array('UPDATE', $sql_ary);
+ break;
+ }
+
$sql = 'UPDATE ' . USERS_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
+ SET ' . $query . '
WHERE user_id = ' . $user->data['user_id'];
$db->sql_query($sql);