PunBB 1.3.5 to 1.3.6 changes | Legend | |
---|---|---|
Lines removed | ||
Lines changed | ||
Lines added |
punbb-1.3.5/admin/bans.php | punbb-1.3.6/admin/bans.php |
---|---|
383: | 383: |
384: // Setup the form | 384: // Setup the form |
385: $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0; | 385: $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0; |
386: $forum_page['form_action'] = forum_link($forum_url['admin_bans']).'?action=more'; | 386: $forum_page['form_action'] = forum_link($forum_url['admin_bans']).'&action=more'; |
387: | 387: |
388: $forum_page['hidden_fields'] = array( | 388: $forum_page['hidden_fields'] = array( |
389: 'csrf_token' => '<input type="hidden" name="csrf_token" value="'.generate_form_token($forum_page['form_action']).'" />' | 389: 'csrf_token' => '<input type="hidden" name="csrf_token" value="'.generate_form_token($forum_page['form_action']).'" />' |
527: <div class="ct-box"> | 527: <div class="ct-box"> |
528: <div class="ct-legend"> | 528: <div class="ct-legend"> |
529: <h3 class=""><span><?php printf($lang_admin_bans['Current ban head'], $forum_page['ban_creator']) ?></span></h3> | 529: <h3 class=""><span><?php printf($lang_admin_bans['Current ban head'], $forum_page['ban_creator']) ?></span></h3> |
530: <p><?php printf($lang_admin_bans['Edit or remove'], '<a href="'.forum_link($forum_url['admin_bans']).'?edit_ban='.$cur_ban['id'].'">'.$lang_admin_bans['Edit ban'].'</a>', '<a href="'.forum_link($forum_url['admin_bans']).'?del_ban='.$cur_ban['id'].'&csrf_token='.generate_form_token('del_ban'.$cur_ban['id']).'">'.$lang_admin_bans['Remove ban'].'</a>') ?></p> | 530: <p><?php printf($lang_admin_bans['Edit or remove'], '<a href="'.forum_link($forum_url['admin_bans']).'&edit_ban='.$cur_ban['id'].'">'.$lang_admin_bans['Edit ban'].'</a>', '<a href="'.forum_link($forum_url['admin_bans']).'&del_ban='.$cur_ban['id'].'&csrf_token='.generate_form_token('del_ban'.$cur_ban['id']).'">'.$lang_admin_bans['Remove ban'].'</a>') ?></p> |
531: </div> | 531: </div> |
532: <?php if (!empty($forum_page['ban_info'])): ?> | 532: <?php if (!empty($forum_page['ban_info'])): ?> |
533: <ul> | 533: <ul> |
punbb-1.3.5/admin/db_update.php | punbb-1.3.6/admin/db_update.php |
---|---|
4: * | 4: * |
5: * Updates the database to the latest version. | 5: * Updates the database to the latest version. |
6: * | 6: * |
7: * @copyright (C) 2008-2009 PunBB, partially based on code (C) 2008-2009 FluxBB.org | 7: * @copyright (C) 2008-2011 PunBB, partially based on code (C) 2008-2009 FluxBB.org |
8: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher | 8: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher |
9: * @package PunBB | 9: * @package PunBB |
10: */ | 10: */ |
11: | 11: |
12: | 12: |
13: define('UPDATE_TO', '1.3.5'); | 13: define('UPDATE_TO', '1.3.6'); |
14: define('UPDATE_TO_DB_REVISION', 4); | 14: define('UPDATE_TO_DB_REVISION', 4); |
15: | 15: |
16: // The number of items to process per pageview (lower this if the update script times out during UTF-8 conversion) | 16: // The number of items to process per pageview (lower this if the update script times out during UTF-8 conversion) |
punbb-1.3.5/admin/install.php | punbb-1.3.6/admin/install.php |
---|---|
10: */ | 10: */ |
11: | 11: |
12: | 12: |
13: define('FORUM_VERSION', '1.3.5'); | 13: define('FORUM_VERSION', '1.3.6'); |
14: define('FORUM_DB_REVISION', 4); | 14: define('FORUM_DB_REVISION', 4); |
15: define('MIN_PHP_VERSION', '4.3.0'); | 15: define('MIN_PHP_VERSION', '4.3.0'); |
16: define('MIN_MYSQL_VERSION', '4.1.2'); | 16: define('MIN_MYSQL_VERSION', '4.1.2'); |
punbb-1.3.5/include/dblayer/mysqli_innodb.php | punbb-1.3.6/include/dblayer/mysqli_innodb.php |
---|---|
1: <?php | |
2: /** | |
3: * A database layer class supporting transactions that relies on the MySQLi PHP extension. | |
4: * | |
5: * @copyright (C) 2008-2009 PunBB, partially based on code (C) 2008-2009 FluxBB.org | |
6: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher | |
7: * @package PunBB | |
8: */ | |
9: | |
10: | |
11: // Make sure we have built in support for MySQL | |
12: if (!function_exists('mysqli_connect')) | |
13: exit('This PHP environment doesn\'t have Improved MySQL (mysqli) support built in. Improved MySQL support is required if you want to use a MySQL 4.1 (or later) database to run this forum. Consult the PHP documentation for further assistance.'); | |
14: | |
15: | |
16: class DBLayer | |
17: { | |
18: var $prefix; | |
19: var $link_id; | |
20: var $query_result; | |
21: | |
22: var $saved_queries = array(); | |
23: var $num_queries = 0; | |
24: var $in_transaction = 0; | |
25: | |
26: var $datatype_transformations = array( | |
27: '/^SERIAL$/' => 'INT(10) UNSIGNED AUTO_INCREMENT' | |
28: ); | |
29: | |
30: | |
31: function DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, $foo) | |
32: { | |
33: $this->prefix = $db_prefix; | |
34: | |
35: // Was a custom port supplied with $db_host? | |
36: if (strpos($db_host, ':') !== false) | |
37: list($db_host, $db_port) = explode(':', $db_host); | |
38: | |
39: if (isset($db_port)) | |
40: $this->link_id = @mysqli_connect($db_host, $db_username, $db_password, $db_name, $db_port); | |
41: else | |
42: $this->link_id = @mysqli_connect($db_host, $db_username, $db_password, $db_name); | |
43: | |
44: if (!$this->link_id) | |
45: error('Unable to connect to MySQL and select database. MySQL reported: '.mysqli_connect_error(), __FILE__, __LINE__); | |
46: | |
47: // Setup the client-server character set (UTF-8) | |
48: if (!defined('FORUM_NO_SET_NAMES')) | |
49: $this->set_names('utf8'); | |
50: | |
51: return $this->link_id; | |
52: } | |
53: | |
54: | |
55: function start_transaction() | |
56: { | |
57: ++$this->in_transaction; | |
58: | |
59: mysqli_query($this->link_id, 'START TRANSACTION'); | |
60: return; | |
61: } | |
62: | |
63: | |
64: function end_transaction() | |
65: { | |
66: --$this->in_transaction; | |
67: | |
68: mysqli_query($this->link_id, 'COMMIT'); | |
69: return; | |
70: } | |
71: | |
72: | |
73: function query($sql, $unbuffered = false) | |
74: { | |
75: if (strlen($sql) > 140000) | |
76: exit('Insane query. Aborting.'); | |
77: | |
78: if (defined('FORUM_SHOW_QUERIES')) | |
79: $q_start = get_microtime(); | |
80: | |
81: $this->query_result = @mysqli_query($this->link_id, $sql); | |
82: | |
83: if ($this->query_result) | |
84: { | |
85: if (defined('FORUM_SHOW_QUERIES')) | |
86: $this->saved_queries[] = array($sql, sprintf('%.5f', get_microtime() - $q_start)); | |
87: | |
88: ++$this->num_queries; | |
89: | |
90: return $this->query_result; | |
91: } | |
92: else | |
93: { | |
94: if (defined('FORUM_SHOW_QUERIES')) | |
95: $this->saved_queries[] = array($sql, 0); | |
96: | |
97: // Rollback transaction | |
98: if ($this->in_transaction) | |
99: mysqli_query($this->link_id, 'ROLLBACK'); | |
100: | |
101: --$this->in_transaction; | |
102: | |
103: return false; | |
104: } | |
105: } | |
106: | |
107: | |
108: function result($query_id = 0, $row = 0, $col = 0) | |
109: { | |
110: if ($query_id) | |
111: { | |
112: if ($row) | |
113: @mysqli_data_seek($query_id, $row); | |
114: | |
115: $cur_row = @mysqli_fetch_row($query_id); | |
116: return $cur_row[$col]; | |
117: } | |
118: else | |
119: return false; | |
120: } | |
121: | |
122: | |
123: function fetch_assoc($query_id = 0) | |
124: { | |
125: return ($query_id) ? @mysqli_fetch_assoc($query_id) : false; | |
126: } | |
127: | |
128: | |
129: function fetch_row($query_id = 0) | |
130: { | |
131: return ($query_id) ? @mysqli_fetch_row($query_id) : false; | |
132: } | |
133: | |
134: | |
135: function num_rows($query_id = 0) | |
136: { | |
137: return ($query_id) ? @mysqli_num_rows($query_id) : false; | |
138: } | |
139: | |
140: | |
141: function affected_rows() | |
142: { | |
143: return ($this->link_id) ? @mysqli_affected_rows($this->link_id) : false; | |
144: } | |
145: | |
146: | |
147: function insert_id() | |
148: { | |
149: return ($this->link_id) ? @mysqli_insert_id($this->link_id) : false; | |
150: } | |
151: | |
152: | |
153: function get_num_queries() | |
154: { | |
155: return $this->num_queries; | |
156: } | |
157: | |
158: | |
159: function get_saved_queries() | |
160: { | |
161: return $this->saved_queries; | |
162: } | |
163: | |
164: | |
165: function free_result($query_id = false) | |
166: { | |
167: return ($query_id) ? @mysqli_free_result($query_id) : false; | |
168: } | |
169: | |
170: | |
171: function escape($str) | |
172: { | |
173: return is_array($str) ? '' : mysqli_real_escape_string($this->link_id, $str); | |
174: } | |
175: | |
176: | |
177: function error() | |
178: { | |
179: $result['error_sql'] = @current(@end($this->saved_queries)); | |
180: $result['error_no'] = @mysqli_errno($this->link_id); | |
181: $result['error_msg'] = @mysqli_error($this->link_id); | |
182: | |
183: return $result; | |
184: } | |
185: | |
186: | |
187: function close() | |
188: { | |
189: if ($this->link_id) | |
190: { | |
191: if ($this->query_result) | |
192: @mysqli_free_result($this->query_result); | |
193: | |
194: return @mysqli_close($this->link_id); | |
195: } | |
196: else | |
197: return false; | |
198: } | |
199: | |
200: | |
201: function set_names($names) | |
202: { | |
203: return $this->query('SET NAMES \''.$this->escape($names).'\''); | |
204: } | |
205: | |
206: | |
207: function get_version() | |
208: { | |
209: $result = $this->query('SELECT VERSION()'); | |
210: | |
211: return array( | |
212: 'name' => 'MySQL Improved (InnoDB)', | |
213: 'version' => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result)) | |
214: ); | |
215: } | |
216: | |
217: | |
218: function table_exists($table_name, $no_prefix = false) | |
219: { | |
220: $result = $this->query('SHOW TABLES LIKE \''.($no_prefix ? '' : $this->prefix).$this->escape($table_name).'\''); | |
221: return $this->num_rows($result) > 0; | |
222: } | |
223: | |
224: | |
225: function field_exists($table_name, $field_name, $no_prefix = false) | |
226: { | |
227: $result = $this->query('SHOW COLUMNS FROM '.($no_prefix ? '' : $this->prefix).$table_name.' LIKE \''.$this->escape($field_name).'\''); | |
228: return $this->num_rows($result) > 0; | |
229: } | |
230: | |
231: | |
232: function index_exists($table_name, $index_name, $no_prefix = false) | |
233: { | |
234: $exists = false; | |
235: | |
236: $result = $this->query('SHOW INDEX FROM '.($no_prefix ? '' : $this->prefix).$table_name); | |
237: while ($cur_index = $this->fetch_assoc($result)) | |
238: { | |
239: if ($cur_index['Key_name'] == ($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name) | |
240: { | |
241: $exists = true; | |
242: break; | |
243: } | |
244: } | |
245: | |
246: return $exists; | |
247: } | |
248: | |
249: | |
250: function create_table($table_name, $schema, $no_prefix = false) | |
251: { | |
252: if ($this->table_exists($table_name, $no_prefix)) | |
253: return; | |
254: | |
255: $query = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$table_name." (\n"; | |
256: | |
257: // Go through every schema element and add it to the query | |
258: foreach ($schema['FIELDS'] as $field_name => $field_data) | |
259: { | |
260: $field_data['datatype'] = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_data['datatype']); | |
261: | |
262: $query .= $field_name.' '.$field_data['datatype']; | |
263: | |
264: if (isset($field_data['collation'])) | |
265: $query .= 'CHARACTER SET utf8 COLLATE utf8_'.$field_data['collation']; | |
266: | |
267: if (!$field_data['allow_null']) | |
268: $query .= ' NOT NULL'; | |
269: | |
270: if (isset($field_data['default'])) | |
271: $query .= ' DEFAULT '.$field_data['default']; | |
272: | |
273: $query .= ",\n"; | |
274: } | |
275: | |
276: // If we have a primary key, add it | |
277: if (isset($schema['PRIMARY KEY'])) | |
278: $query .= 'PRIMARY KEY ('.implode(',', $schema['PRIMARY KEY']).'),'."\n"; | |
279: | |
280: // Add unique keys | |
281: if (isset($schema['UNIQUE KEYS'])) | |
282: { | |
283: foreach ($schema['UNIQUE KEYS'] as $key_name => $key_fields) | |
284: $query .= 'UNIQUE KEY '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$key_name.'('.implode(',', $key_fields).'),'."\n"; | |
285: } | |
286: | |
287: // Add indexes | |
288: if (isset($schema['INDEXES'])) | |
289: { | |
290: foreach ($schema['INDEXES'] as $index_name => $index_fields) | |
291: $query .= 'KEY '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name.'('.implode(',', $index_fields).'),'."\n"; | |
292: } | |
293: | |
294: // We remove the last two characters (a newline and a comma) and add on the ending | |
295: $query = substr($query, 0, strlen($query) - 2)."\n".') ENGINE = '.(isset($schema['ENGINE']) ? $schema['ENGINE'] : 'InnoDB').' CHARACTER SET utf8'; | |
296: | |
297: $this->query($query) or error(__FILE__, __LINE__); | |
298: } | |
299: | |
300: | |
301: function drop_table($table_name, $no_prefix = false) | |
302: { | |
303: if (!$this->table_exists($table_name, $no_prefix)) | |
304: return; | |
305: | |
306: $this->query('DROP TABLE '.($no_prefix ? '' : $this->prefix).$table_name) or error(__FILE__, __LINE__); | |
307: } | |
308: | |
309: | |
310: function add_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = null, $no_prefix = false) | |
311: { | |
312: if ($this->field_exists($table_name, $field_name, $no_prefix)) | |
313: return; | |
314: | |
315: $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type); | |
316: | |
317: if ($default_value !== null && !is_int($default_value) && !is_float($default_value)) | |
318: $default_value = '\''.$this->escape($default_value).'\''; | |
319: | |
320: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').($default_value !== null ? ' DEFAULT '.$default_value : ' ').($after_field != null ? ' AFTER '.$after_field : '')) or error(__FILE__, __LINE__); | |
321: } | |
322: | |
323: | |
324: function alter_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = null, $no_prefix = false) | |
325: { | |
326: if (!$this->field_exists($table_name, $field_name, $no_prefix)) | |
327: return; | |
328: | |
329: $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type); | |
330: | |
331: if ($default_value !== null && !is_int($default_value) && !is_float($default_value)) | |
332: $default_value = '\''.$this->escape($default_value).'\''; | |
333: | |
334: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').($default_value !== null ? ' DEFAULT '.$default_value : ' ').($after_field != null ? ' AFTER '.$after_field : '')) or error(__FILE__, __LINE__); | |
335: } | |
336: | |
337: | |
338: function drop_field($table_name, $field_name, $no_prefix = false) | |
339: { | |
340: if (!$this->field_exists($table_name, $field_name, $no_prefix)) | |
341: return; | |
342: | |
343: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' DROP '.$field_name) or error(__FILE__, __LINE__); | |
344: } | |
345: | |
346: | |
347: function add_index($table_name, $index_name, $index_fields, $unique = false, $no_prefix = false) | |
348: { | |
349: if ($this->index_exists($table_name, $index_name, $no_prefix)) | |
350: return; | |
351: | |
352: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.($unique ? 'UNIQUE ' : '').'INDEX '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name.' ('.implode(',', $index_fields).')') or error(__FILE__, __LINE__); | |
353: } | |
354: | |
355: | |
356: function drop_index($table_name, $index_name, $no_prefix = false) | |
357: { | |
358: if (!$this->index_exists($table_name, $index_name, $no_prefix)) | |
359: return; | |
360: | |
361: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' DROP INDEX '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name) or error(__FILE__, __LINE__); | |
362: } | |
363: } |
punbb-1.3.5/include/dblayer/mysql_innodb.php | punbb-1.3.6/include/dblayer/mysql_innodb.php |
---|---|
1: <?php | |
2: /** | |
3: * A database layer class supporting transactions that relies on the MySQL PHP extension. | |
4: * | |
5: * @copyright (C) 2008-2009 PunBB, partially based on code (C) 2008-2009 FluxBB.org | |
6: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher | |
7: * @package PunBB | |
8: */ | |
9: | |
10: | |
11: // Make sure we have built in support for MySQL | |
12: if (!function_exists('mysql_connect')) | |
13: exit('This PHP environment doesn\'t have MySQL support built in. MySQL support is required if you want to use a MySQL database to run this forum. Consult the PHP documentation for further assistance.'); | |
14: | |
15: | |
16: class DBLayer | |
17: { | |
18: var $prefix; | |
19: var $link_id; | |
20: var $query_result; | |
21: var $in_transaction = 0; | |
22: | |
23: var $saved_queries = array(); | |
24: var $num_queries = 0; | |
25: | |
26: var $datatype_transformations = array( | |
27: '/^SERIAL$/' => 'INT(10) UNSIGNED AUTO_INCREMENT' | |
28: ); | |
29: | |
30: | |
31: function DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, $p_connect) | |
32: { | |
33: $this->prefix = $db_prefix; | |
34: | |
35: if ($p_connect) | |
36: $this->link_id = @mysql_pconnect($db_host, $db_username, $db_password); | |
37: else | |
38: $this->link_id = @mysql_connect($db_host, $db_username, $db_password); | |
39: | |
40: if ($this->link_id) | |
41: { | |
42: if (!@mysql_select_db($db_name, $this->link_id)) | |
43: error('Unable to select database. MySQL reported: '.mysql_error(), __FILE__, __LINE__); | |
44: } | |
45: else | |
46: error('Unable to connect to MySQL server. MySQL reported: '.mysql_error(), __FILE__, __LINE__); | |
47: | |
48: // Setup the client-server character set (UTF-8) | |
49: if (!defined('FORUM_NO_SET_NAMES')) | |
50: $this->set_names('utf8'); | |
51: | |
52: return $this->link_id; | |
53: } | |
54: | |
55: | |
56: function start_transaction() | |
57: { | |
58: ++$this->in_transaction; | |
59: | |
60: mysql_query('START TRANSACTION', $this->link_id); | |
61: return; | |
62: } | |
63: | |
64: | |
65: function end_transaction() | |
66: { | |
67: --$this->in_transaction; | |
68: | |
69: mysql_query('COMMIT', $this->link_id); | |
70: return; | |
71: } | |
72: | |
73: | |
74: function query($sql, $unbuffered = false) | |
75: { | |
76: if (strlen($sql) > 140000) | |
77: exit('Insane query. Aborting.'); | |
78: | |
79: if (defined('FORUM_SHOW_QUERIES')) | |
80: $q_start = get_microtime(); | |
81: | |
82: if ($unbuffered) | |
83: $this->query_result = @mysql_unbuffered_query($sql, $this->link_id); | |
84: else | |
85: $this->query_result = @mysql_query($sql, $this->link_id); | |
86: | |
87: if ($this->query_result) | |
88: { | |
89: if (defined('FORUM_SHOW_QUERIES')) | |
90: $this->saved_queries[] = array($sql, sprintf('%.5f', get_microtime() - $q_start)); | |
91: | |
92: ++$this->num_queries; | |
93: | |
94: return $this->query_result; | |
95: } | |
96: else | |
97: { | |
98: if (defined('FORUM_SHOW_QUERIES')) | |
99: $this->saved_queries[] = array($sql, 0); | |
100: | |
101: // Rollback transaction | |
102: if ($this->in_transaction) | |
103: mysql_query('ROLLBACK', $this->link_id); | |
104: | |
105: --$this->in_transaction; | |
106: | |
107: return false; | |
108: } | |
109: } | |
110: | |
111: | |
112: function result($query_id = 0, $row = 0, $col = 0) | |
113: { | |
114: return ($query_id) ? @mysql_result($query_id, $row, $col) : false; | |
115: } | |
116: | |
117: | |
118: function fetch_assoc($query_id = 0) | |
119: { | |
120: return ($query_id) ? @mysql_fetch_assoc($query_id) : false; | |
121: } | |
122: | |
123: | |
124: function fetch_row($query_id = 0) | |
125: { | |
126: return ($query_id) ? @mysql_fetch_row($query_id) : false; | |
127: } | |
128: | |
129: | |
130: function num_rows($query_id = 0) | |
131: { | |
132: return ($query_id) ? @mysql_num_rows($query_id) : false; | |
133: } | |
134: | |
135: | |
136: function affected_rows() | |
137: { | |
138: return ($this->link_id) ? @mysql_affected_rows($this->link_id) : false; | |
139: } | |
140: | |
141: | |
142: function insert_id() | |
143: { | |
144: return ($this->link_id) ? @mysql_insert_id($this->link_id) : false; | |
145: } | |
146: | |
147: | |
148: function get_num_queries() | |
149: { | |
150: return $this->num_queries; | |
151: } | |
152: | |
153: | |
154: function get_saved_queries() | |
155: { | |
156: return $this->saved_queries; | |
157: } | |
158: | |
159: | |
160: function free_result($query_id = false) | |
161: { | |
162: return ($query_id) ? @mysql_free_result($query_id) : false; | |
163: } | |
164: | |
165: | |
166: function escape($str) | |
167: { | |
168: if (is_array($str)) | |
169: return ''; | |
170: else if (function_exists('mysql_real_escape_string')) | |
171: return mysql_real_escape_string($str, $this->link_id); | |
172: else | |
173: return mysql_escape_string($str); | |
174: } | |
175: | |
176: | |
177: function error() | |
178: { | |
179: $result['error_sql'] = @current(@end($this->saved_queries)); | |
180: $result['error_no'] = @mysql_errno($this->link_id); | |
181: $result['error_msg'] = @mysql_error($this->link_id); | |
182: | |
183: return $result; | |
184: } | |
185: | |
186: | |
187: function close() | |
188: { | |
189: if ($this->link_id) | |
190: { | |
191: if ($this->query_result) | |
192: @mysql_free_result($this->query_result); | |
193: | |
194: return @mysql_close($this->link_id); | |
195: } | |
196: else | |
197: return false; | |
198: } | |
199: | |
200: | |
201: function set_names($names) | |
202: { | |
203: return $this->query('SET NAMES \''.$this->escape($names).'\''); | |
204: } | |
205: | |
206: | |
207: function get_version() | |
208: { | |
209: $result = $this->query('SELECT VERSION()'); | |
210: | |
211: return array( | |
212: 'name' => 'MySQL Standard (InnoDB)', | |
213: 'version' => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result)) | |
214: ); | |
215: } | |
216: | |
217: | |
218: function table_exists($table_name, $no_prefix = false) | |
219: { | |
220: $result = $this->query('SHOW TABLES LIKE \''.($no_prefix ? '' : $this->prefix).$this->escape($table_name).'\''); | |
221: return $this->num_rows($result) > 0; | |
222: } | |
223: | |
224: | |
225: function field_exists($table_name, $field_name, $no_prefix = false) | |
226: { | |
227: $result = $this->query('SHOW COLUMNS FROM '.($no_prefix ? '' : $this->prefix).$table_name.' LIKE \''.$this->escape($field_name).'\''); | |
228: return $this->num_rows($result) > 0; | |
229: } | |
230: | |
231: | |
232: function index_exists($table_name, $index_name, $no_prefix = false) | |
233: { | |
234: $exists = false; | |
235: | |
236: $result = $this->query('SHOW INDEX FROM '.($no_prefix ? '' : $this->prefix).$table_name); | |
237: while ($cur_index = $this->fetch_assoc($result)) | |
238: { | |
239: if ($cur_index['Key_name'] == ($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name) | |
240: { | |
241: $exists = true; | |
242: break; | |
243: } | |
244: } | |
245: | |
246: return $exists; | |
247: } | |
248: | |
249: | |
250: function create_table($table_name, $schema, $no_prefix = false) | |
251: { | |
252: if ($this->table_exists($table_name, $no_prefix)) | |
253: return; | |
254: | |
255: $query = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$table_name." (\n"; | |
256: | |
257: // Go through every schema element and add it to the query | |
258: foreach ($schema['FIELDS'] as $field_name => $field_data) | |
259: { | |
260: $field_data['datatype'] = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_data['datatype']); | |
261: | |
262: $query .= $field_name.' '.$field_data['datatype']; | |
263: | |
264: if (isset($field_data['collation'])) | |
265: $query .= 'CHARACTER SET utf8 COLLATE utf8_'.$field_data['collation']; | |
266: | |
267: if (!$field_data['allow_null']) | |
268: $query .= ' NOT NULL'; | |
269: | |
270: if (isset($field_data['default'])) | |
271: $query .= ' DEFAULT '.$field_data['default']; | |
272: | |
273: $query .= ",\n"; | |
274: } | |
275: | |
276: // If we have a primary key, add it | |
277: if (isset($schema['PRIMARY KEY'])) | |
278: $query .= 'PRIMARY KEY ('.implode(',', $schema['PRIMARY KEY']).'),'."\n"; | |
279: | |
280: // Add unique keys | |
281: if (isset($schema['UNIQUE KEYS'])) | |
282: { | |
283: foreach ($schema['UNIQUE KEYS'] as $key_name => $key_fields) | |
284: $query .= 'UNIQUE KEY '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$key_name.'('.implode(',', $key_fields).'),'."\n"; | |
285: } | |
286: | |
287: // Add indexes | |
288: if (isset($schema['INDEXES'])) | |
289: { | |
290: foreach ($schema['INDEXES'] as $index_name => $index_fields) | |
291: $query .= 'KEY '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name.'('.implode(',', $index_fields).'),'."\n"; | |
292: } | |
293: | |
294: // We remove the last two characters (a newline and a comma) and add on the ending | |
295: $query = substr($query, 0, strlen($query) - 2)."\n".') ENGINE = '.(isset($schema['ENGINE']) ? $schema['ENGINE'] : 'InnoDB').' CHARACTER SET utf8'; | |
296: | |
297: $this->query($query) or error(__FILE__, __LINE__); | |
298: } | |
299: | |
300: | |
301: function drop_table($table_name, $no_prefix = false) | |
302: { | |
303: if (!$this->table_exists($table_name, $no_prefix)) | |
304: return; | |
305: | |
306: $this->query('DROP TABLE '.($no_prefix ? '' : $this->prefix).$table_name) or error(__FILE__, __LINE__); | |
307: } | |
308: | |
309: | |
310: function add_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = null, $no_prefix = false) | |
311: { | |
312: if ($this->field_exists($table_name, $field_name, $no_prefix)) | |
313: return; | |
314: | |
315: $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type); | |
316: | |
317: if ($default_value !== null && !is_int($default_value) && !is_float($default_value)) | |
318: $default_value = '\''.$this->escape($default_value).'\''; | |
319: | |
320: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').($default_value !== null ? ' DEFAULT '.$default_value : ' ').($after_field != null ? ' AFTER '.$after_field : '')) or error(__FILE__, __LINE__); | |
321: } | |
322: | |
323: | |
324: function alter_field($table_name, $field_name, $field_type, $allow_null, $default_value = null, $after_field = null, $no_prefix = false) | |
325: { | |
326: if (!$this->field_exists($table_name, $field_name, $no_prefix)) | |
327: return; | |
328: | |
329: $field_type = preg_replace(array_keys($this->datatype_transformations), array_values($this->datatype_transformations), $field_type); | |
330: | |
331: if ($default_value !== null && !is_int($default_value) && !is_float($default_value)) | |
332: $default_value = '\''.$this->escape($default_value).'\''; | |
333: | |
334: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' MODIFY '.$field_name.' '.$field_type.($allow_null ? ' ' : ' NOT NULL').($default_value !== null ? ' DEFAULT '.$default_value : ' ').($after_field != null ? ' AFTER '.$after_field : '')) or error(__FILE__, __LINE__); | |
335: } | |
336: | |
337: | |
338: function drop_field($table_name, $field_name, $no_prefix = false) | |
339: { | |
340: if (!$this->field_exists($table_name, $field_name, $no_prefix)) | |
341: return; | |
342: | |
343: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' DROP '.$field_name) or error(__FILE__, __LINE__); | |
344: } | |
345: | |
346: | |
347: function add_index($table_name, $index_name, $index_fields, $unique = false, $no_prefix = false) | |
348: { | |
349: if ($this->index_exists($table_name, $index_name, $no_prefix)) | |
350: return; | |
351: | |
352: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' ADD '.($unique ? 'UNIQUE ' : '').'INDEX '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name.' ('.implode(',', $index_fields).')') or error(__FILE__, __LINE__); | |
353: } | |
354: | |
355: | |
356: function drop_index($table_name, $index_name, $no_prefix = false) | |
357: { | |
358: if (!$this->index_exists($table_name, $index_name, $no_prefix)) | |
359: return; | |
360: | |
361: $this->query('ALTER TABLE '.($no_prefix ? '' : $this->prefix).$table_name.' DROP INDEX '.($no_prefix ? '' : $this->prefix).$table_name.'_'.$index_name) or error(__FILE__, __LINE__); | |
362: } | |
363: } |
punbb-1.3.5/include/functions.php | punbb-1.3.6/include/functions.php |
---|---|
2: /** | 2: /** |
3: * Loads common functions used throughout the site. | 3: * Loads common functions used throughout the site. |
4: * | 4: * |
5: * @copyright (C) 2008-2009 PunBB, partially based on code (C) 2008-2009 FluxBB.org | 5: * @copyright (C) 2008-2011 PunBB, partially based on code (C) 2008-2009 FluxBB.org |
6: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher | 6: * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher |
7: * @package PunBB | 7: * @package PunBB |
8: */ | 8: */ |
2672: <div class="ct-box info-box"> | 2672: <div class="ct-box info-box"> |
2673: <p><?php echo $lang_common['CSRF token mismatch'] ?></p> | 2673: <p><?php echo $lang_common['CSRF token mismatch'] ?></p> |
2674: </div> | 2674: </div> |
2675: <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo $forum_page['form_action'] ?>"> | 2675: <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo forum_htmlencode($forum_page['form_action']) ?>"> |
2676: <div class="hidden"> | 2676: <div class="hidden"> |
2677: <?php echo implode("\n\t\t\t\t", $forum_page['hidden_fields'])."\n" ?> | 2677: <?php echo implode("\n\t\t\t\t", $forum_page['hidden_fields'])."\n" ?> |
2678: </div> | 2678: </div> |
punbb-1.3.5/profile.php | punbb-1.3.6/profile.php |
---|---|
847: | 847: |
848: ($hook = get_hook('pf_ban_user_selected')) ? eval($hook) : null; | 848: ($hook = get_hook('pf_ban_user_selected')) ? eval($hook) : null; |
849: | 849: |
850: redirect(forum_link($forum_url['admin_bans']).'?add_ban='.$id, $lang_profile['Ban redirect']); | 850: redirect(forum_link($forum_url['admin_bans']).'&add_ban='.$id, $lang_profile['Ban redirect']); |
851: } | 851: } |
852: | 852: |
853: | 853: |
2314: | 2314: |
2315: ?> | 2315: ?> |
2316: <div class="ct-box error-box"> | 2316: <div class="ct-box error-box"> |
2317: <h2 class="warn hn"><?php echo $lang_profile['Profile update errors'] ?></h3> | 2317: <h2 class="warn hn"><?php echo $lang_profile['Profile update errors'] ?></h2> |
2318: <ul class="error-list"> | 2318: <ul class="error-list"> |
2319: <?php echo implode("\n\t\t\t\t\t", $forum_page['errors'])."\n" ?> | 2319: <?php echo implode("\n\t\t\t\t\t", $forum_page['errors'])."\n" ?> |
2320: </ul> | 2320: </ul> |
2519: $forum_page['user_management'] = array(); | 2519: $forum_page['user_management'] = array(); |
2520: | 2520: |
2521: if ($forum_user['g_moderator'] == '1') | 2521: if ($forum_user['g_moderator'] == '1') |
2522: $forum_page['user_management']['ban'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Ban user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['admin_bans']).'?add_ban='.$id.'">'.$lang_profile['Ban user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; | 2522: $forum_page['user_management']['ban'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Ban user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['admin_bans']).'&add_ban='.$id.'">'.$lang_profile['Ban user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; |
2523: else if ($forum_user['g_moderator'] != '1' && $user['g_id'] != FORUM_ADMIN ) | 2523: else if ($forum_user['g_moderator'] != '1' && $user['g_id'] != FORUM_ADMIN ) |
2524: { | 2524: { |
2525: $forum_page['user_management']['ban'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Ban user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['admin_bans']).'?add_ban='.$id.'">'.$lang_profile['Ban user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; | 2525: $forum_page['user_management']['ban'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Ban user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['admin_bans']).'&add_ban='.$id.'">'.$lang_profile['Ban user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; |
2526: $forum_page['user_management']['delete'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Delete user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['delete_user'], $id).'">'.$lang_profile['Delete user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; | 2526: $forum_page['user_management']['delete'] = '<div class="ct-set set'.++$forum_page['item_count'].'">'."\n\t\t\t\t".'<div class="ct-box">'."\n\t\t\t\t\t".'<h3 class="ct-legend hn">'.$lang_profile['Delete user'].'</h3>'."\n\t\t\t\t".'<p><a href="'.forum_link($forum_url['delete_user'], $id).'">'.$lang_profile['Delete user info'].'</a></p>'."\n\t\t\t\t".'</div>'."\n\t\t\t".'</div>'; |
2527: } | 2527: } |
2528: | 2528: |