This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
1
Bug reports / No referral to the secure connection https://wedge.org/
« on March 19th, 2017, 10:49 AM »
#Who.english.php <->Website credits page
No referral to the secure connection (SSL server certificate) wedge.org and this also applies to the license and authors reference
$txt['credits_wedge'] = 'Wedge is copyright © %5$s by %1$s, all rights reserved. It is distributed under the Wedge license.';
When for example change the link into:
$txt['credits_wedge'] = '<a href="https://wedge.org/"target="_blank">Wedge is copyright © %5$s by %1$s,all rights reserved. It is distributed under the Wedge license.';
Referral to the secure connection https://wedge.org/ is then oké.
:edit: Also includes almost all links in Homepage Wedge.org
No referral to the secure connection (SSL server certificate) wedge.org and this also applies to the license and authors reference
$txt['credits_wedge'] = 'Wedge is copyright © %5$s by %1$s, all rights reserved. It is distributed under the Wedge license.';
When for example change the link into:
$txt['credits_wedge'] = '<a href="https://wedge.org/"target="_blank">Wedge is copyright © %5$s by %1$s,all rights reserved. It is distributed under the Wedge license.';
Referral to the secure connection https://wedge.org/ is then oké.
:edit: Also includes almost all links in Homepage Wedge.org
2
Archived fixes / Error Subs-Template.php
« on December 24th, 2016, 11:31 AM »
This error appears when guests or members select and view Post Feed,is there something wrong in line 166.
[Commit revision ff49935]
[Commit revision ff49935]
3
Support / Fatal Error index.php
« on October 9th, 2016, 11:46 AM »
Howto handle on this one
Fatal error: Call to undefined function checkUserBehavior() in /home/*******/domains/*******/public_html/forum/******/index.php on line 105
:edit:
Web error log:
(click to show/hide)
Fatal error: Call to undefined function checkUserBehavior() in /home/*******/domains/*******/public_html/forum/******/index.php on line 105
104 // Check the request for anything hinky.
105 checkUserBehavior();
:edit:
Web error log:
[Sun Oct 09 11:26:16.648877 2016] [autoindex:error] [pid 17939] [client 5*************] AH01276: Cannot serve directory /home/*******/domains/******/public_html/: No matching DirectoryIndex (index.html,index.htm,index.shtml,index.php,index.php5,index.php4,index.php3,index.phtml,index.cgi) found, and server-generated directory index forbidden by Options directive
4
Support / Class-DB changes?
« on September 18th, 2016, 11:44 AM »
core/app/Class-DB.php and Load.php
Had to replace an older saved Class-DB.php and Load.php (see attachment) because with this new revs it is not possible to connect to forum database (host provider)
Edit:As soon as i upload both revisions (Class-DB.php and Load.php) try this on Main Forum and testing Forum there is no connection to both databases (no errors just not possible to connect to databases)
Check databases on MySQL Management all statuses are oké.
Edit:As soon as i upload both revisions (Class-DB.php and Load.php) try this on Main Forum and testing Forum there is no connection to both databases (no errors just not possible to connect to databases)
Check databases on MySQL Management all statuses are oké.
Edit2:Keeps getting worse. Also had to replace Subs-BoardIndex.php and Subs-Editor.php because it was not possible to reply or start an new topic
Had to replace an older saved Class-DB.php and Load.php (see attachment) because with this new revs it is not possible to connect to forum database (host provider)
<?php
/**
* The general database singleton with query parametrization.
*
* Wedge (http://wedge.org)
* Copyright © 2010 René-Gilles Deberdt, wedge.org
* Portions are © 2011 Simple Machines.
* License: http://wedge.org/license/
*/
if (!defined('WEDGE'))
die('Hacking attempt...');
class wesql
{
protected static $instance; // container for self
protected static $_db_con; // store the database connection (normally)
protected static $callback_values; // store the special replacements for we::$user items
// What kind of class are you, anyway? One of a kind!
private function __clone()
{
return false;
}
protected function __construct()
{
global $db_prefix;
self::$callback_values = array(
'db_prefix' => $db_prefix
);
}
// Bootstrap's bootstraps
public static function getInstance()
{
// Quero ergo sum
if (self::$instance == null)
self::$instance = new self();
return self::$instance;
}
public static function is_connected()
{
return (bool) self::$_db_con;
}
public static function connect($db_server, $db_name, $db_user, $db_passwd, $db_prefix, $db_options = array())
{
global $mysql_set_mode;
// Attempt to connect. (And in non SSI mode, also select the database)
$connection = mysqli_connect((!empty($db_options['persist']) ? 'p:' : '') . $db_server, $db_user, $db_passwd, empty($db_options['dont_select_db']) ? $db_name : '') or die(mysqli_connect_error());
// Ooops, couldn't connect. See whether that should be a fatal or silent error.
if (!$connection)
{
if (!empty($db_options['non_fatal']))
return null;
else
show_db_error();
}
if (isset($mysql_set_mode) && $mysql_set_mode === true)
wesql::query('SET sql_mode = \'\', AUTOCOMMIT = 1',
array(),
false
);
// Otherwise set, and return true so that we can tell we did manage a connection.
return self::$_db_con = $connection;
}
public static function fix_prefix(&$db_prefix, $db_name)
{
$db_prefix = is_numeric($db_prefix[0]) ? $db_name . '.' . $db_prefix : '`' . $db_name . '`.' . $db_prefix;
self::register_replacement('db_prefix', $db_prefix);
}
public static function quote($db_string, $db_values, $connection = null)
{
global $db_callback;
// Only bother if there's something to replace.
if (strpos($db_string, '{') !== false)
{
// This is needed by the callback function.
$db_callback = array($db_values, $connection == null ? self::$_db_con : $connection);
// Do the quoting and escaping
$db_string = preg_replace_callback('~{([a-z_]+)(?::([a-zA-Z0-9_-]+))?}~', 'wesql::replace_value', $db_string);
// Clear this global variable.
$db_callback = array();
}
return $db_string;
}
public static function query($db_string, $db_values = array(), $connection = null)
{
global $db_cache, $db_count, $db_show_debug, $time_start;
global $db_unbuffered, $db_callback, $settings;
// Comments that are allowed in a query are preg_removed.
static $allowed_comments_from = array(
'~\s+~s',
'~/\*!40001 SQL_NO_CACHE \*/~',
'~/\*!40000 USE INDEX \([A-Za-z\_]+?\) \*/~',
'~/\*!40100 ON DUPLICATE KEY UPDATE id_msg = \d+ \*/~',
);
static $allowed_comments_to = array(
' ',
'',
'',
'',
);
// Decide which connection to use.
$connection = $connection === null ? self::$_db_con : $connection;
// One more query....
$db_count = !isset($db_count) ? 1 : $db_count + 1;
if (empty($settings['disableQueryCheck']) && strpos($db_string, '\'') !== false && empty($db_values['security_override']))
wesql::error_backtrace('Hacking attempt...', 'Illegal character (\') used in query...', true);
// Use "ORDER BY null" to prevent Mysql doing filesorts for Group By clauses without an Order By
if (strpos($db_string, 'GROUP BY') !== false && strpos($db_string, 'ORDER BY') === false && strpos($db_string, 'INSERT') === false && strpos($db_string, 'REPLACE') === false)
{
// Add before LIMIT
if ($pos = strpos($db_string, 'LIMIT '))
$db_string = substr($db_string, 0, $pos) . "\t\t\tORDER BY null\n" . substr($db_string, $pos, strlen($db_string));
else
// Append it.
$db_string .= "\n\t\t\tORDER BY null";
}
if (empty($db_values['security_override']) && (!empty($db_values) || strpos($db_string, '{db_prefix}') !== false))
{
// Pass some values to the global space for use in the callback function.
$db_callback = array($db_values, $connection);
// Inject the values passed to this function.
$db_string = preg_replace_callback('~{([a-z_]+)(?::([a-zA-Z0-9_-]+))?}~', 'wesql::replace_value', $db_string);
// This shouldn't be residing in global space any longer.
$db_callback = array();
}
// Debugging.
if (!empty($db_show_debug))
{
// Get the file and line number this function was called.
list ($file, $line) = self::error_backtrace('', '', 'return');
// Initialize $db_cache if not already initialized.
if (!isset($db_cache))
$db_cache = array();
if (!empty($_SESSION['debug_redirect']))
{
$db_cache = array_merge($_SESSION['debug_redirect'], $db_cache);
$db_count = count($db_cache) + 1;
$_SESSION['debug_redirect'] = array();
}
$st = microtime(true);
// Don't overload it.
$db_cache[$db_count]['q'] = $db_count < 50 ? $db_string : '...';
$db_cache[$db_count]['f'] = $file;
$db_cache[$db_count]['l'] = $line;
$db_cache[$db_count]['s'] = $st - $time_start;
}
// First, we clean strings out of the query, reduce whitespace, lowercase, and trim - so we can check it over.
if (empty($settings['disableQueryCheck']))
{
$clean = '';
$old_pos = 0;
$pos = -1;
while (true)
{
$pos = strpos($db_string, '\'', $pos + 1);
if ($pos === false)
break;
$clean .= substr($db_string, $old_pos, $pos - $old_pos);
while (true)
{
$pos1 = strpos($db_string, '\'', $pos + 1);
$pos2 = strpos($db_string, '\\', $pos + 1);
if ($pos1 === false)
break;
elseif ($pos2 == false || $pos2 > $pos1)
{
$pos = $pos1;
break;
}
$pos = $pos2 + 1;
}
$clean .= ' %s ';
$old_pos = $pos + 1;
}
$clean .= substr($db_string, $old_pos);
$clean = trim(strtolower(preg_replace($allowed_comments_from, $allowed_comments_to, $clean)));
// Comments? We don't use comments in our queries, we leave 'em outside!
if (strpos($clean, '/*') > 2 || strhas($clean, array('--', ';')))
$fail = true;
// Trying to change passwords, slow us down, or something?
elseif (strpos($clean, 'sleep') !== false && preg_match('~(^|[^a-z])sleep($|[^[_a-z])~s', $clean) != 0)
$fail = true;
elseif (strpos($clean, 'benchmark') !== false && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0)
$fail = true;
if (!empty($fail) && function_exists('log_error'))
self::error_backtrace('Hacking attempt...', 'Hacking attempt...' . "\n" . $db_string, E_USER_ERROR);
}
$ret = @mysqli_query($connection, $db_string, empty($db_unbuffered) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
if ($ret === false && empty($db_values['db_error_skip']))
$ret = self::serious_error($db_string, $connection);
// Debugging.
if (!empty($db_show_debug))
$db_cache[$db_count]['t'] = microtime(true) - $st;
return $ret;
}
public static function affected_rows($connection = null)
{
return mysqli_affected_rows($connection === null ? self::$_db_con : $connection);
}
public static function insert_id($connection = null)
{
$connection = $connection === null ? self::$_db_con : $connection;
return mysqli_insert_id($connection);
}
public static function transaction($operation = 'commit', $connection = null)
{
// Determine whether to use the known connection or not.
$connection = $connection === null ? self::$_db_con : $connection;
switch ($operation)
{
case 'begin':
case 'rollback':
case 'commit':
return @mysqli_query($connection, strtoupper($operation));
default:
return false;
}
}
public static function error($connection = null)
{
return mysqli_error($connection === null ? self::$_db_con : $connection);
}
public static function serious_error($db_string, $connection = null)
{
global $txt, $context, $webmaster_email, $settings, $db_last_error, $db_persist;
global $db_server, $db_user, $db_passwd, $db_name, $db_show_debug, $ssi_db_user, $ssi_db_passwd;
if (isset($txt) && !isset($txt['mysql_error_space'], $txt['file']))
loadLanguage(array('index', 'Errors'), '', false, true);
if (!isset($txt['lang_name'])) // Still nothing?
$txt = array();
// Get the file and line numbers.
list ($file, $line) = self::error_backtrace('', '', 'return');
// Decide which connection to use.
$connection = $connection === null ? self::$_db_con : $connection;
// This is the error message...
$query_error = mysqli_error($connection);
$query_errno = mysqli_errno($connection);
// Error numbers:
// 1016: Can't open file '....MYI'
// 1030: Got error ??? from table handler.
// 1034: Incorrect key file for table.
// 1035: Old key file for table.
// 1205: Lock wait timeout exceeded.
// 1213: Deadlock found.
// 2006: Server has gone away.
// 2013: Lost connection to server during query.
// Log the error.
if ($query_errno != 1213 && $query_errno != 1205 && function_exists('log_error'))
log_error((empty($txt) ? 'Database error' : $txt['database_error']) . ': ' . $query_error . (!empty($settings['enableErrorQueryLogging']) ? "\n\n$db_string" : ''), 'database', $file, $line);
// Database error auto fixing ;)
if (function_exists('cache_get_data') && (!isset($settings['autoFixDatabase']) || $settings['autoFixDatabase'] == '1'))
{
// Force caching on, just for the error checking.
$old_cache = @$settings['cache_enable'];
$settings['cache_enable'] = '1';
if (($temp = cache_get_data('db_last_error', 600)) !== null)
$db_last_error = max(@$db_last_error, $temp);
if (@$db_last_error < time() - 3600 * 24 * 3)
{
// We know there's a problem... but what? Try to auto detect.
if ($query_errno == 1030 && strpos($query_error, ' 127 ') !== false)
{
preg_match_all('~(?:[\n\r]|^)[^\']+?(?:FROM|JOIN|UPDATE|TABLE) ((?:[^\n\r(]+?(?:, )?)*)~s', $db_string, $matches);
$fix_tables = array();
foreach ($matches[1] as $tables)
{
$tables = array_unique(explode(',', $tables));
// Now, it's still theoretically possible this could be an injection. So backtick it!
foreach ($tables as $table)
if (trim($table) != '')
$fix_tables[] = '`' . strtr(trim($table), array('`' => '')) . '`';
}
$fix_tables = array_unique($fix_tables);
}
// Table crashed. Let's try to fix it.
elseif ($query_errno == 1016)
{
if (preg_match('~\'([^.\']+)~', $query_error, $match) != 0)
$fix_tables = array('`' . $match[1] . '`');
}
// Indexes crashed. Should be easy to fix!
elseif ($query_errno == 1034 || $query_errno == 1035)
{
preg_match('~\'([^\']+?)\'~', $query_error, $match);
$fix_tables = array('`' . $match[1] . '`');
}
}
// Check for errors like 145... only fix it once every three days, and send an email. (can't use empty because it might not be set yet...)
if (!empty($fix_tables))
{
// Subs-Post.php for sendmail().
loadSource('Subs-Post');
// Make a note of the REPAIR...
@touch(CACHE_DIR . '/error.lock');
// Attempt to find and repair the broken table.
foreach ($fix_tables as $table)
wesql::query("
REPAIR TABLE $table", false, false);
// And send off an email!
sendmail($webmaster_email, empty($txt) ? 'Database error' : $txt['database_error'], empty($txt) ? 'Please try again.' : $txt['tried_to_repair']);
$settings['cache_enable'] = $old_cache;
// Try the query again...?
$ret = self::query($db_string, false, false);
if ($ret !== false)
return $ret;
}
else
$settings['cache_enable'] = $old_cache;
// Check for the "lost connection" or "deadlock found" errors - and try it just one more time.
if (in_array($query_errno, array(1205, 1213, 2006, 2013)))
{
if (in_array($query_errno, array(2006, 2013)) && self::$_db_con == $connection)
{
// Are we in SSI mode? If so try that username and password first
if (WEDGE == 'SSI' && !empty($ssi_db_user) && !empty($ssi_db_passwd))
self::$_db_con = @mysqli_connect((!empty($db_persist) ? 'p:' : '') . $db_server, $ssi_db_user, $ssi_db_passwd);
// Fall back to the regular username and password if need be
if (!self::$_db_con)
self::$_db_con = @mysqli_connect((!empty($db_persist) ? 'p:' : '') . $db_server, $db_user, $db_passwd);
if (!self::$_db_con || !@mysqli_select_db(self::$_db_con, $db_name))
self::$_db_con = false;
}
if (self::$_db_con)
{
// Try a deadlock more than once more.
for ($n = 0; $n < 4; $n++)
{
$ret = self::query($db_string, false, false);
$new_errno = mysqli_errno(self::$_db_con);
if ($ret !== false || in_array($new_errno, array(1205, 1213)))
break;
}
// If it failed again, shucks to be you... we're not trying it over and over.
if ($ret !== false)
return $ret;
}
}
// Are they out of space, perhaps?
elseif ($query_errno == 1030 && strhas($query_error, array(' -1 ', ' 28 ', ' 12 ')))
$query_error .= !isset($txt, $txt['mysql_error_space']) ? ' - check database storage space.' : $txt['mysql_error_space'];
}
// Nothing's defined yet... just die with it.
if (empty($context) || empty($txt))
exit($db_string . '<br><br>' . $query_error);
// Show an error message, if possible.
$context['error_title'] = $txt['database_error'];
if (allowedTo('admin_forum'))
$context['error_message'] = nl2br($query_error, false) . '<br>' . $txt['file'] . ': ' . $file . '<br>' . $txt['line'] . ': ' . $line;
else
$context['error_message'] = $txt['try_again'];
if (allowedTo('admin_forum') && !empty($db_show_debug))
$context['error_message'] .= '<br><br>' . nl2br($db_string, false);
// It's already been logged... don't log it again.
fatal_error($context['error_message'], false);
}
public static function insert($method, $table, $columns, $data)
{
global $db_prefix;
$connection = self::$_db_con;
// With nothing to insert, simply return.
if (empty($data))
return false;
// Replace the prefix holder with the actual prefix.
$table = str_replace('{db_prefix}', $db_prefix, $table);
// Inserting data as a single row can be done as a single array.
if (!is_array($data[array_rand($data)]))
$data = array($data);
// Should we assume the data is most likely to exist..? If yes, we'll use an UPDATE call.
// The first entry in the column list then becomes the condition.
if ($method === 'update')
{
foreach ($data as $id => $row)
{
$set = '';
$where_val = reset($columns);
$where_key = key($columns);
foreach ($columns as $key => $val)
if ($key !== $where_key)
$set[] = $key . ' = {' . $val . ':' . $key . '}';
self::query('
UPDATE ' . $table . '
SET ' . implode(', ', $set) . '
WHERE ' . $where_key . ' = {' . $where_val . ':' . $where_key . '}',
array_combine(array_keys($columns), $row)
);
if (self::affected_rows() > 0)
unset($data[$id]);
}
if (empty($data))
return true;
// Anything left to update? Do a regular insert, then.
$method = 'ignore';
}
// Create the mold for a single row insert.
$insertData = '(';
// Didn't we bother to specify column types?
if (isset($columns[0]))
{
$columns = array_flip($columns);
foreach ($columns as $k => &$v)
$v = is_int($k) ? 'int' : 'string';
}
foreach ($columns as $columnName => $type)
{
// Are we restricting the length?
if (strpos($type, 'string-') !== false)
$insertData .= sprintf('SUBSTRING({string:%1$s}, 1, ' . substr($type, 7) . '), ', $columnName);
else
$insertData .= sprintf('{%1$s:%2$s}, ', $type, $columnName);
}
$insertData = substr($insertData, 0, -2) . ')';
// Create an array consisting of only the columns.
$indexed_columns = array_keys($columns);
// Here's where the variables are injected to the query.
$insertRows = array();
foreach ($data as $dataRow)
$insertRows[] = self::quote($insertData, array_combine($indexed_columns, $dataRow), $connection);
// Determine the method.
$queryTitle = $method === 'replace' ? 'REPLACE' : ($method === 'ignore' ? 'INSERT IGNORE' : 'INSERT');
// Do the insert, and return a success bool.
return !!self::query('
' . $queryTitle . ' INTO ' . $table . '(`' . implode('`, `', $indexed_columns) . '`)
VALUES
' . implode(',
', $insertRows),
array(
'security_override' => true,
'db_error_skip' => $table === $db_prefix . 'log_errors',
),
$connection
);
}
public static function register_replacement($match, $value)
{
self::$callback_values[$match] = $value;
}
public static function replace_value($matches)
{
global $db_callback;
list ($values, $connection) = $db_callback;
if ($connection === null)
$connection = self::$_db_con;
if (!is_object($connection))
show_db_error();
if (isset(self::$callback_values[$matches[1]]))
return self::$callback_values[$matches[1]];
if (!isset($matches[2]))
{
if (in_array($matches[1], array('literal', 'int', 'string', 'array_int', 'array_string', 'date', 'float', 'raw')))
self::error_backtrace('Invalid value inserted into database, {' . $matches[1] . ':???}.', '', E_USER_ERROR);
else
self::error_backtrace('Invalid database variable, {' . $matches[1] . '}.', '', E_USER_ERROR);
}
if ($matches[1] == 'literal')
return sprintf('\'%1$s\'', mysqli_real_escape_string($connection, $matches[2]));
if (!isset($values[$matches[2]]))
self::error_backtrace('The database value you\'re trying to insert does not exist: ' . htmlspecialchars($matches[2]), '', E_USER_ERROR);
$replacement = $values[$matches[2]];
switch ($matches[1])
{
case 'int':
if (!is_numeric($replacement) || (string) $replacement !== (string) (int) $replacement)
self::error_backtrace('Wrong value type sent to the database. Integer expected. (' . $matches[2] . ')', '', E_USER_ERROR);
return (string) (int) $replacement;
case 'string':
return sprintf('\'%1$s\'', mysqli_real_escape_string($connection, $replacement));
case 'array_int':
if (is_array($replacement))
{
if (empty($replacement))
self::error_backtrace('Database error, given array of integer values is empty. (' . $matches[2] . ')', '', E_USER_ERROR);
foreach ($replacement as $key => $value)
{
if (!is_numeric($value) || (string) $value !== (string) (int) $value)
self::error_backtrace('Wrong value type sent to the database. Array of integers expected. (' . $matches[2] . ')', '', E_USER_ERROR);
$replacement[$key] = (string) (int) $value;
}
return implode(', ', $replacement);
}
else
self::error_backtrace('Wrong value type sent to the database. Array of integers expected. (' . $matches[2] . ')', '', E_USER_ERROR);
case 'array_string':
if (is_array($replacement))
{
if (empty($replacement))
self::error_backtrace('Database error, given array of string values is empty. (' . $matches[2] . ')', '', E_USER_ERROR);
foreach ($replacement as $key => $value)
$replacement[$key] = sprintf('\'%1$s\'', mysqli_real_escape_string($connection, $value));
return implode(', ', $replacement);
}
else
self::error_backtrace('Wrong value type sent to the database. Array of strings expected. (' . $matches[2] . ')', '', E_USER_ERROR);
case 'date':
if (preg_match('~^(\d{4})-([0-1]?\d)-([0-3]?\d)$~', $replacement, $date_matches) === 1)
return sprintf('\'%04d-%02d-%02d\'', $date_matches[1], $date_matches[2], $date_matches[3]);
else
self::error_backtrace('Wrong value type sent to the database. Date expected. (' . $matches[2] . ')', '', E_USER_ERROR);
case 'float':
if (!is_numeric($replacement))
self::error_backtrace('Wrong value type sent to the database. Floating point number expected. (' . $matches[2] . ')', '', E_USER_ERROR);
return (string) (float) $replacement;
case 'raw':
return $replacement;
default:
self::error_backtrace('Undefined type used in the database query. (' . $matches[1] . ':' . $matches[2] . ')');
}
}
public static function error_backtrace($error_message, $log_message = '', $error_type = false, $file = null, $line = null)
{
if (empty($log_message))
$log_message = $error_message;
$trace_log = debug_backtrace(version_compare(PHP_VERSION, '5.3.6') < 0 ? false : DEBUG_BACKTRACE_IGNORE_ARGS);
foreach ($trace_log as $step)
{
// Found it?
if ((!isset($step['class']) || $step['class'] !== 'wesql') && strpos($step['function'], 'query') === false && (!in_array(substr($step['function'], 0, 5), array('preg_', 'mysql'))))
{
$log_message .= '<br>Function: ' . $step['function'];
break;
}
if (isset($step['line']))
{
$file = $step['file'];
$line = $step['line'];
}
}
// A special case - we want the file and line numbers for debugging.
if ($error_type == 'return')
return array($file, $line);
// Is always a critical error.
if (function_exists('log_error'))
log_error($log_message, 'critical', $file, $line);
if (function_exists('fatal_error'))
{
fatal_error($error_message, false);
// Cannot continue...
exit;
}
elseif ($error_type)
trigger_error($error_message . ($line !== null ? '<em>(' . basename($file) . '-' . $line . ')</em>' : ''), $error_type);
else
trigger_error($error_message . ($line !== null ? '<em>(' . basename($file) . '-' . $line . ')</em>' : ''));
}
public static function escape_wildcard_string($string, $translate_human_wildcards = false)
{
$replacements = array(
'%' => '\%',
'_' => '\_',
'\\' => '\\\\',
);
if ($translate_human_wildcards)
$replacements += array(
'*' => '%',
);
return strtr($string, $replacements);
}
public static function fetch_assoc($result)
{
return mysqli_fetch_assoc($result);
}
public static function fetch_row($result)
{
return mysqli_fetch_row($result);
}
public static function fetch_all($result, $type = MYSQLI_ASSOC)
{
if ($result === false)
return array();
if (function_exists('mysqli_fetch_all')) // mysqlnd enabled, valid request?
return (array) mysqli_fetch_all($result, $type);
$arr = array();
$func_name = $type === MYSQLI_ASSOC ? 'mysqli_fetch_assoc' : 'mysqli_fetch_row';
while ($row = $func_name($result))
$arr[] = $row;
return $arr;
}
public static function fetch_rows($result)
{
return self::fetch_all($result, MYSQLI_NUM);
}
public static function free_result($result)
{
return mysqli_free_result($result);
}
public static function query_get($db_string, $db_values = array(), $connection = null, $job = 'assoc')
{
$request = self::query($db_string, $db_values, $connection);
$results = call_user_func('self::fetch_' . $job, $request);
wesql::free_result($request);
return $results;
}
public static function query_assoc($db_string, $db_values = array(), $connection = null)
{
return self::query_get($db_string, $db_values, $connection, 'assoc');
}
public static function query_row($db_string, $db_values = array(), $connection = null)
{
return self::query_get($db_string, $db_values, $connection, 'row');
}
public static function query_all($db_string, $db_values = array(), $connection = null)
{
return self::query_get($db_string, $db_values, $connection, 'all');
}
public static function query_rows($db_string, $db_values = array(), $connection = null)
{
return self::query_get($db_string, $db_values, $connection, 'rows');
}
public static function data_seek($result, $row_num)
{
return mysqli_data_seek($result, $row_num);
}
public static function num_fields($result)
{
return mysqli_num_fields($result);
}
public static function num_rows($result)
{
return mysqli_num_rows($result);
}
public static function escape_string($string)
{
return addslashes($string);
}
public static function unescape_string($string)
{
return stripslashes($string);
}
public static function server_info($connection = null)
{
return mysqli_get_server_info($connection === null ? self::$_db_con : $connection);
}
public static function select_db($db_name, $connection = null)
{
$connection = $connection === null ? self::$_db_con : $connection;
return mysqli_select_db($connection, $db_name);
}
}
Edit:As soon as i upload both revisions (Class-DB.php and Load.php) try this on Main Forum and testing Forum there is no connection to both databases (no errors just not possible to connect to databases)
Check databases on MySQL Management all statuses are oké.
Edit:As soon as i upload both revisions (Class-DB.php and Load.php) try this on Main Forum and testing Forum there is no connection to both databases (no errors just not possible to connect to databases)
Check databases on MySQL Management all statuses are oké.
Edit2:Keeps getting worse. Also had to replace Subs-BoardIndex.php and Subs-Editor.php because it was not possible to reply or start an new topic
5
The Pub / Donators group showing up on Website Credits page
« on August 26th, 2016, 11:28 AM »
Wanted to give our donators an more prominent place on our Website Credits page,in the same way as moderators are shown up.
So far did these two adjustments, but still no luck,do I forget something or doing something wrong.
Who.template.php
Who.dutch.php
So far did these two adjustments, but still no luck,do I forget something or doing something wrong.
Who.template.php
if (!empty($context['site_credits']['donations']))
{
echo '
<section>
<h6>', number_context('credits_donateurs', count($context['site_credits']['donations'])), '</h6>
<ul class="last">';
foreach ($context['site_credits']['donations'] as $donation)
echo '
<li', strpos($donation['real_name'], '<img') !== false ? ' class="witha"' : '', '><a href="<URL>?action=profile;u=', $donation['id_member'], '">', $donation['real_name'], '</a></li>';
echo '
</ul>
</section>';
}
Who.dutch.php
// Credits text
$txt['credits_site'] = 'Team-leden';
$txt['credits_admins'] = array(1 => 'Administrator', 'n' => 'Beheerders');
$txt['credits_moderators'] = array(1 => 'Moderator', 'n' => 'Moderators');
$txt['credits_donations'] = array(1 => 'Donation', 'n' => 'Donateurs');
6
The Pub / Wedge&PHP 7
« on July 16th, 2016, 10:17 AM »The developers worked very hard to refactor the PHP7 codebase in order to reduce memory consumption and increase performance.
My server does supports PHP7 so it is very interesting to see these improvements reflected in Wedge
PHP info on my local server:
PHP info Forum Website (Hosted):
7
Support / Upgrading Server PHP Version
« on March 29th, 2015, 11:00 AM »
I intend to perform an Server upgrade from PHP 5.3.27 to PHP 5.5,can this be done without a hitch Forum technically
8
Archived fixes / Top header
« on January 6th, 2015, 10:01 AM »
A very tiny small issue in the top section (square instead of well rounded corners)
core/skins/index.css
core/skins/index.css
9
Off-topic / Happy New Year
« on January 1st, 2015, 11:26 AM »
Video recording made with smartphone .... fireworks 16 stories high on the balcony
11
Support / Warning mysqli_connect
« on November 27th, 2014, 07:14 AM »
Error connecting to MySQL: Too many connectionsQuote class-DB.php line 55Quote Is this an server issue or something else,how to tackle or fix this. Forum and MySQL through Control Panel are unattainable
Too many connections in /home/vsbwepmf/domains/linuxmintusers.be/public_html/forum/MintWedge/gz/app/Class-DB.php on line 55
Too many connections
$connection = mysqli_connect((!empty($db_options['persist']) ? 'p:' : '') . $db_server, $db_user, $db_passwd, empty($db_options['dont_select_db']) ? $db_name : '') or die(mysqli_connect_error());
12
Off-topic / SMF«»Wedge
« on October 25th, 2014, 06:57 PM »
Finally had the guts to do it.
Linux Mint Users Forum is now running on Wedge,decided today our Forum is better off with Wedge :).....till now every member is excited and full of compliments about Wedge.
Linux Mint Users Forum
Linux Mint Users Forum is now running on Wedge,decided today our Forum is better off with Wedge :).....till now every member is excited and full of compliments about Wedge.
Linux Mint Users Forum
13
Support / How to disable option print topics for non logged in users
« on October 16th, 2014, 12:02 AM »
Prevent not logged in users are able to print topics.I would like to have this option for logged in users only
14
Off-topic / Copyright disclaimer
« on October 12th, 2014, 08:50 AM »
Small issue might not be worth mentioning............
The copyright line is out of date,i did changed the copyright line myself in credits.php.Perhaps it's easier to automatically changes the copyright to the current year every year so that it never goes out of date.
The copyright line is out of date,i did changed the copyright line myself in credits.php.Perhaps it's easier to automatically changes the copyright to the current year every year so that it never goes out of date.
15
Support / Website Credits
« on October 7th, 2014, 07:49 PM »
Something I do not understand how to fix this,the text employees/contributors., How do I get it to the desired position
Who.dutch.php
Code: [Select]
Who.dutch.php
$txt['credits_site'] = 'Het Team';
$txt['credits_admins'] = array(1 => 'Administrator', 'n' => 'Administrators');
$txt['credits_moderators'] = array(1 => 'Moderator', 'n' => 'Moderators');
$txt['credits_software'] = 'Wedge Team (Forum Software)';
$txt['credits_wedge'] = 'Wedge is copyright © %3$d by %1$s, all rights reserved. It is distributed under the <a href="%2$s">Wedge license</a>.';
$txt['credits_aeme'] = 'Gebruik delen van <a href="%s">Aeva Media</a>.';
$txt['credits_copyright'] = 'Copyrights';
$txt['credits_plugins'] = 'Plugins';
$txt['credits_groups_ps'] = 'Oprichters Wedge';
$txt['credits_groups_dev'] = 'Ontwikkelaars';
$txt['credits_groups_contributors'] = 'Medewerkers';
// Uncomment the following string, and replace English with the name of your language.
$txt['credits_groups_language'] = 'Nederlandse Versie';
// List of people who have made more than a token contribution to this translation. (See Who.french.php for an example.)
$txt['translation_credits'] = array('Nederlandse vertaling Wedge:<a href="https://github.com/French77"target="_blank">Freñçh</a>.',
$txt['credits_translator'] = 'Medevertaalster:Anika.',
);