Zeile 322 | Zeile 322 |
---|
/** * Turn a unix timestamp in to a "friendly" date/time format for the user. *
|
/** * Turn a unix timestamp in to a "friendly" date/time format for the user. *
|
* @param string $format A date format according to PHP's date structure.
| * @param string $format A date format (either relative, normal or PHP's date() structure).
|
* @param int $stamp The unix timestamp the date should be generated for. * @param int|string $offset The offset in hours that should be applied to times. (timezones) Or an empty string to determine that automatically * @param int $ty Whether or not to use today/yesterday formatting.
| * @param int $stamp The unix timestamp the date should be generated for. * @param int|string $offset The offset in hours that should be applied to times. (timezones) Or an empty string to determine that automatically * @param int $ty Whether or not to use today/yesterday formatting.
|
Zeile 343 | Zeile 343 |
---|
{ if(isset($mybb->user['uid']) && $mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user)) {
|
{ if(isset($mybb->user['uid']) && $mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user)) {
|
$offset = $mybb->user['timezone'];
| $offset = (float)$mybb->user['timezone'];
|
$dstcorrection = $mybb->user['dst']; } elseif(defined("IN_ADMINCP")) {
|
$dstcorrection = $mybb->user['dst']; } elseif(defined("IN_ADMINCP")) {
|
$offset = $mybbadmin['timezone'];
| $offset = (float)$mybbadmin['timezone'];
|
$dstcorrection = $mybbadmin['dst']; } else {
|
$dstcorrection = $mybbadmin['dst']; } else {
|
$offset = $mybb->settings['timezoneoffset'];
| $offset = (float)$mybb->settings['timezoneoffset'];
|
$dstcorrection = $mybb->settings['dstcorrection']; }
| $dstcorrection = $mybb->settings['dstcorrection']; }
|
Zeile 380 | Zeile 380 |
---|
}
$todaysdate = $yesterdaysdate = '';
|
}
$todaysdate = $yesterdaysdate = '';
|
if($ty && ($format == $mybb->settings['dateformat'] || $format == 'relative'))
| if($ty && ($format == $mybb->settings['dateformat'] || $format == 'relative' || $format == 'normal'))
|
{ $_stamp = TIME_NOW; if($adodb == true)
| { $_stamp = TIME_NOW; if($adodb == true)
|
Zeile 400 | Zeile 400 |
---|
if($format == 'relative') { // Relative formats both date and time
|
if($format == 'relative') { // Relative formats both date and time
|
| $real_date = $real_time = ''; if($adodb == true) { $real_date = adodb_date($mybb->settings['dateformat'], $stamp + ($offset * 3600)); $real_time = $mybb->settings['datetimesep']; $real_time .= adodb_date($mybb->settings['timeformat'], $stamp + ($offset * 3600)); } else { $real_date = gmdate($mybb->settings['dateformat'], $stamp + ($offset * 3600)); $real_time = $mybb->settings['datetimesep']; $real_time .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600)); }
|
if($ty != 2 && abs(TIME_NOW - $stamp) < 3600) { $diff = TIME_NOW - $stamp; $relative = array('prefix' => '', 'minute' => 0, 'plural' => $lang->rel_minutes_plural, 'suffix' => $lang->rel_ago);
|
if($ty != 2 && abs(TIME_NOW - $stamp) < 3600) { $diff = TIME_NOW - $stamp; $relative = array('prefix' => '', 'minute' => 0, 'plural' => $lang->rel_minutes_plural, 'suffix' => $lang->rel_ago);
|
if($diff < 0) { $diff = abs($diff); $relative['suffix'] = '';
| if($diff < 0) { $diff = abs($diff); $relative['suffix'] = '';
|
$relative['prefix'] = $lang->rel_in; }
| $relative['prefix'] = $lang->rel_in; }
|
Zeile 423 | Zeile 437 |
---|
if($diff <= 60) { // Less than a minute
|
if($diff <= 60) { // Less than a minute
|
$relative['prefix'] = $lang->rel_less_than; }
$date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['minute'], $relative['plural'], $relative['suffix']);
| $relative['prefix'] = $lang->rel_less_than; }
$date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['minute'], $relative['plural'], $relative['suffix'], $real_date, $real_time);
|
} elseif($ty != 2 && abs(TIME_NOW - $stamp) < 43200) {
| } elseif($ty != 2 && abs(TIME_NOW - $stamp) < 43200) {
|
Zeile 448 | Zeile 462 |
---|
$relative['plural'] = $lang->rel_hours_single; }
|
$relative['plural'] = $lang->rel_hours_single; }
|
$date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['hour'], $relative['plural'], $relative['suffix']);
| $date = $lang->sprintf($lang->rel_time, $relative['prefix'], $relative['hour'], $relative['plural'], $relative['suffix'], $real_date, $real_time);
|
} else { if($ty)
|
} else { if($ty)
|
{
| {
|
if($todaysdate == $date) {
|
if($todaysdate == $date) {
|
$date = $lang->today;
| $date = $lang->sprintf($lang->today_rel, $real_date);
|
} else if($yesterdaysdate == $date) {
|
} else if($yesterdaysdate == $date) {
|
$date = $lang->yesterday;
| $date = $lang->sprintf($lang->yesterday_rel, $real_date);
|
} }
| } }
|
Zeile 473 | Zeile 487 |
---|
{ $date .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600)); }
|
{ $date .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600)); }
|
| } } elseif($format == 'normal') { // Normal format both date and time if($ty != 2) { if($todaysdate == $date) { $date = $lang->today; } else if($yesterdaysdate == $date) { $date = $lang->yesterday; } }
$date .= $mybb->settings['datetimesep']; if($adodb == true) { $date .= adodb_date($mybb->settings['timeformat'], $stamp + ($offset * 3600)); } else { $date .= gmdate($mybb->settings['timeformat'], $stamp + ($offset * 3600));
|
} } else
| } } else
|
Zeile 966 | Zeile 1005 |
---|
run_shutdown();
|
run_shutdown();
|
if(!my_validate_url($url, true))
| if(!my_validate_url($url, true, true))
|
{ header("Location: {$mybb->settings['bburl']}/{$url}"); }
| { header("Location: {$mybb->settings['bburl']}/{$url}"); }
|
Zeile 1179 | Zeile 1218 |
---|
if($uid != $mybb->user['uid']) { // We've already cached permissions for this user, return them.
|
if($uid != $mybb->user['uid']) { // We've already cached permissions for this user, return them.
|
if($user_cache[$uid]['permissions'])
| if(!empty($user_cache[$uid]['permissions']))
|
{ return $user_cache[$uid]['permissions']; }
// This user was not already cached, fetch their user information.
|
{ return $user_cache[$uid]['permissions']; }
// This user was not already cached, fetch their user information.
|
if(!$user_cache[$uid])
| if(empty($user_cache[$uid]))
|
{ $user_cache[$uid] = get_user($uid); }
| { $user_cache[$uid] = get_user($uid); }
|
Zeile 2406 | Zeile 2445 |
---|
elseif($new_stats[$counter] < 0) { $new_stats[$counter] = 0;
|
elseif($new_stats[$counter] < 0) { $new_stats[$counter] = 0;
|
} }
| } }
|
} else {
| } else {
|
Zeile 2441 | Zeile 2480 |
---|
if(is_array($stats)) { $stats = array_merge($stats, $new_stats); // Overwrite changed values
|
if(is_array($stats)) { $stats = array_merge($stats, $new_stats); // Overwrite changed values
|
}
| }
|
else { $stats = $new_stats;
| else { $stats = $new_stats;
|
Zeile 2478 | Zeile 2517 |
---|
// Fetch above counters for this forum $query = $db->simple_select("forums", implode(",", $counters), "fid='{$fid}'"); $forum = $db->fetch_array($query);
|
// Fetch above counters for this forum $query = $db->simple_select("forums", implode(",", $counters), "fid='{$fid}'"); $forum = $db->fetch_array($query);
|
foreach($counters as $counter) { if(array_key_exists($counter, $changes)) { if(substr($changes[$counter], 0, 2) == "+-") { $changes[$counter] = substr($changes[$counter], 1);
| foreach($counters as $counter) { if(array_key_exists($counter, $changes)) { if(substr($changes[$counter], 0, 2) == "+-") { $changes[$counter] = substr($changes[$counter], 1);
|
} // Adding or subtracting from previous value? if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-")
| } // Adding or subtracting from previous value? if(substr($changes[$counter], 0, 1) == "+" || substr($changes[$counter], 0, 1) == "-")
|
Zeile 2505 | Zeile 2544 |
---|
{ $update_query[$counter] = 0; }
|
{ $update_query[$counter] = 0; }
|
}
| }
|
}
// Only update if we're actually doing something
| }
// Only update if we're actually doing something
|
Zeile 2522 | Zeile 2561 |
---|
if($threads_diff > -1) { $new_stats['numthreads'] = "+{$threads_diff}";
|
if($threads_diff > -1) { $new_stats['numthreads'] = "+{$threads_diff}";
|
} else {
| } else {
|
$new_stats['numthreads'] = "{$threads_diff}"; } }
| $new_stats['numthreads'] = "{$threads_diff}"; } }
|
Zeile 2543 | Zeile 2582 |
---|
}
if(array_key_exists('posts', $update_query))
|
}
if(array_key_exists('posts', $update_query))
|
{
| {
|
$posts_diff = $update_query['posts'] - $forum['posts']; if($posts_diff > -1) {
| $posts_diff = $update_query['posts'] - $forum['posts']; if($posts_diff > -1) {
|
Zeile 2561 | Zeile 2600 |
---|
if($unapprovedposts_diff > -1) { $new_stats['numunapprovedposts'] = "+{$unapprovedposts_diff}";
|
if($unapprovedposts_diff > -1) { $new_stats['numunapprovedposts'] = "+{$unapprovedposts_diff}";
|
} else
| } else
|
{ $new_stats['numunapprovedposts'] = "{$unapprovedposts_diff}"; }
| { $new_stats['numunapprovedposts'] = "{$unapprovedposts_diff}"; }
|
Zeile 2578 | Zeile 2617 |
---|
else { $new_stats['numdeletedposts'] = "{$deletedposts_diff}";
|
else { $new_stats['numdeletedposts'] = "{$deletedposts_diff}";
|
} }
| } }
|
if(array_key_exists('deletedthreads', $update_query)) {
| if(array_key_exists('deletedthreads', $update_query)) {
|
Zeile 2598 | Zeile 2637 |
---|
{ update_stats($new_stats); }
|
{ update_stats($new_stats); }
|
}
| }
|
/** * Update the last post information for a specific forum * * @param int $fid The forum ID */ function update_forum_lastpost($fid)
|
/** * Update the last post information for a specific forum * * @param int $fid The forum ID */ function update_forum_lastpost($fid)
|
{ global $db;
| { global $db;
|
// Fetch the last post for this forum $query = $db->query(" SELECT tid, lastpost, lastposter, lastposteruid, subject
| // Fetch the last post for this forum $query = $db->query(" SELECT tid, lastpost, lastposter, lastposteruid, subject
|
Zeile 2637 | Zeile 2676 |
---|
* @param array $changes Array of items being updated (replies, unapprovedposts, deletedposts, attachmentcount) and their value (ex, 1, +1, -1) */ function update_thread_counters($tid, $changes=array())
|
* @param array $changes Array of items being updated (replies, unapprovedposts, deletedposts, attachmentcount) and their value (ex, 1, +1, -1) */ function update_thread_counters($tid, $changes=array())
|
{ global $db;
| { global $db;
|
$update_query = array(); $tid = (int)$tid;
| $update_query = array(); $tid = (int)$tid;
|
Zeile 2793 | Zeile 2832 |
---|
if((int)$changes[$counter] != 0) { $update_query[$counter] = $user[$counter] + $changes[$counter];
|
if((int)$changes[$counter] != 0) { $update_query[$counter] = $user[$counter] + $changes[$counter];
|
}
| }
|
} else {
| } else {
|
Zeile 2947 | Zeile 2986 |
---|
}
eval("\$forumjump = \"".$templates->get("forumjump_".$template)."\";");
|
}
eval("\$forumjump = \"".$templates->get("forumjump_".$template)."\";");
|
}
| }
|
return $forumjump; }
| return $forumjump; }
|
Zeile 2957 | Zeile 2996 |
---|
* * @param string $file The filename. * @return string The extension of the file.
|
* * @param string $file The filename. * @return string The extension of the file.
|
*/
| */
|
function get_extension($file) { return my_strtolower(my_substr(strrchr($file, "."), 1));
| function get_extension($file) { return my_strtolower(my_substr(strrchr($file, "."), 1));
|
Zeile 2986 | Zeile 3025 |
---|
// At least one small letter $str[] = $set[my_rand(36, 61)];
|
// At least one small letter $str[] = $set[my_rand(36, 61)];
|
|
|
$length -= 3; }
| $length -= 3; }
|
Zeile 3011 | Zeile 3050 |
---|
*/ function format_name($username, $usergroup, $displaygroup=0) {
|
*/ function format_name($username, $usergroup, $displaygroup=0) {
|
global $groupscache, $cache;
| global $groupscache, $cache, $plugins;
|
|
|
if(!is_array($groupscache))
| static $formattednames = array();
if(!isset($formattednames[$username]))
|
{
|
{
|
$groupscache = $cache->read("usergroups"); }
if($displaygroup != 0) { $usergroup = $displaygroup; }
| if(!is_array($groupscache)) { $groupscache = $cache->read("usergroups"); }
if($displaygroup != 0) { $usergroup = $displaygroup; }
$format = "{username}";
if(isset($groupscache[$usergroup])) { $ugroup = $groupscache[$usergroup];
if(strpos($ugroup['namestyle'], "{username}") !== false) { $format = $ugroup['namestyle']; } }
$format = stripslashes($format);
$parameters = compact('username', 'usergroup', 'displaygroup', 'format');
$parameters = $plugins->run_hooks('format_name', $parameters);
|
|
|
$ugroup = $groupscache[$usergroup]; $format = $ugroup['namestyle']; $userin = substr_count($format, "{username}");
| $format = $parameters['format'];
|
|
|
if($userin == 0) { $format = "{username}";
| $formattednames[$username] = str_replace("{username}", $username, $format);
|
}
|
}
|
$format = stripslashes($format);
return str_replace("{username}", $username, $format);
| return $formattednames[$username];
|
}
/**
| }
/**
|
Zeile 3781 | Zeile 3836 |
---|
{ $pid = (int)$data['pid']; unset($data['pid']);
|
{ $pid = (int)$data['pid']; unset($data['pid']);
|
| }
$tids = array(); if(isset($data['tids'])) { $tids = (array)$data['tids']; unset($data['tids']);
|
}
// Any remaining extra data - we my_serialize and insert in to its own column if(is_array($data)) { $data = my_serialize($data);
|
}
// Any remaining extra data - we my_serialize and insert in to its own column if(is_array($data)) { $data = my_serialize($data);
|
}
| }
|
$sql_array = array( "uid" => (int)$mybb->user['uid'], "dateline" => TIME_NOW,
| $sql_array = array( "uid" => (int)$mybb->user['uid'], "dateline" => TIME_NOW,
|
Zeile 3799 | Zeile 3861 |
---|
"data" => $db->escape_string($data), "ipaddress" => $db->escape_binary($session->packedip) );
|
"data" => $db->escape_string($data), "ipaddress" => $db->escape_binary($session->packedip) );
|
$db->insert_query("moderatorlog", $sql_array);
| if($tids) { $multiple_sql_array = array();
foreach($tids as $tid) { $sql_array['tid'] = (int)$tid; $multiple_sql_array[] = $sql_array; }
$db->insert_query_multiple("moderatorlog", $multiple_sql_array); } else { $db->insert_query("moderatorlog", $sql_array); }
|
}
/**
| }
/**
|
Zeile 4675 | Zeile 4753 |
---|
$stamp %= $msecs; $seconds = $stamp;
|
$stamp %= $msecs; $seconds = $stamp;
|
if($years == 1)
| // Prevent gross over accuracy ($options parameter will override these) if($years > 0)
|
{
|
{
|
$nicetime['years'] = "1".$lang_year;
| $options = array_merge(array( 'days' => false, 'hours' => false, 'minutes' => false, 'seconds' => false ), $options);
|
}
|
}
|
else if($years > 1)
| elseif($months > 0)
|
{
|
{
|
$nicetime['years'] = $years.$lang_years;
| $options = array_merge(array( 'hours' => false, 'minutes' => false, 'seconds' => false ), $options);
|
}
|
}
|
if($months == 1) { $nicetime['months'] = "1".$lang_month;
| elseif($weeks > 0) { $options = array_merge(array( 'minutes' => false, 'seconds' => false ), $options); } elseif($days > 0) { $options = array_merge(array( 'seconds' => false ), $options); }
if(!isset($options['years']) || $options['years'] !== false) { if($years == 1) { $nicetime['years'] = "1".$lang_year; } else if($years > 1) { $nicetime['years'] = $years.$lang_years; } }
if(!isset($options['months']) || $options['months'] !== false) { if($months == 1) { $nicetime['months'] = "1".$lang_month; } else if($months > 1) { $nicetime['months'] = $months.$lang_months; }
|
}
|
}
|
else if($months > 1)
| if(!isset($options['weeks']) || $options['weeks'] !== false)
|
{
|
{
|
$nicetime['months'] = $months.$lang_months;
| if($weeks == 1) { $nicetime['weeks'] = "1".$lang_week; } else if($weeks > 1) { $nicetime['weeks'] = $weeks.$lang_weeks; }
|
}
|
}
|
if($weeks == 1) { $nicetime['weeks'] = "1".$lang_week; } else if($weeks > 1) { $nicetime['weeks'] = $weeks.$lang_weeks; }
if($days == 1)
| if(!isset($options['days']) || $options['days'] !== false)
|
{
|
{
|
$nicetime['days'] = "1".$lang_day; } else if($days > 1) { $nicetime['days'] = $days.$lang_days;
| if($days == 1) { $nicetime['days'] = "1".$lang_day; } else if($days > 1) { $nicetime['days'] = $days.$lang_days; }
|
}
if(!isset($options['hours']) || $options['hours'] !== false)
| }
if(!isset($options['hours']) || $options['hours'] !== false)
|
Zeile 5669 | Zeile 5791 |
---|
function unhtmlentities($string) { // Replace numeric entities
|
function unhtmlentities($string) { // Replace numeric entities
|
$string = preg_replace_callback('~&#x([0-9a-f]+);~i', create_function('$matches', 'return unichr(hexdec($matches[1]));'), $string); $string = preg_replace_callback('~&#([0-9]+);~', create_function('$matches', 'return unichr($matches[1]);'), $string);
| $string = preg_replace_callback('~&#x([0-9a-f]+);~i', 'unichr_callback1', $string); $string = preg_replace_callback('~&#([0-9]+);~', 'unichr_callback2', $string);
|
// Replace literal entities $trans_tbl = get_html_translation_table(HTML_ENTITIES);
| // Replace literal entities $trans_tbl = get_html_translation_table(HTML_ENTITIES);
|
Zeile 5710 | Zeile 5832 |
---|
{ return false; }
|
{ return false; }
|
| }
/** * Returns any ascii to it's character (utf-8 safe). * * @param array $matches Matches. * @return string|bool The characterized ascii. False on failure */ function unichr_callback1($matches) { return unichr(hexdec($matches[1])); }
/** * Returns any ascii to it's character (utf-8 safe). * * @param array $matches Matches. * @return string|bool The characterized ascii. False on failure */ function unichr_callback2($matches) { return unichr($matches[1]);
|
}
/**
| }
/**
|
Zeile 5783 | Zeile 5927 |
---|
if(!$username && $uid == 0) { // Return Guest phrase for no UID, no guest nickname
|
if(!$username && $uid == 0) { // Return Guest phrase for no UID, no guest nickname
|
return $lang->guest;
| return htmlspecialchars_uni($lang->guest);
|
} elseif($uid == 0) {
| } elseif($uid == 0) {
|
Zeile 5953 | Zeile 6097 |
---|
if($week < 0) { $week = str_replace('-', "n", $week);
|
if($week < 0) { $week = str_replace('-', "n", $week);
|
}
| }
|
$link = str_replace("{week}", $week, CALENDAR_URL_WEEK); $link = str_replace("{calendar}", $calendar, $link); return htmlspecialchars_uni($link);
| $link = str_replace("{week}", $week, CALENDAR_URL_WEEK); $link = str_replace("{calendar}", $calendar, $link); return htmlspecialchars_uni($link);
|
Zeile 6002 | Zeile 6146 |
---|
global $mybb, $db;
$username = $db->escape_string(my_strtolower($username));
|
global $mybb, $db;
$username = $db->escape_string(my_strtolower($username));
|
|
|
if(!isset($options['username_method'])) { $options['username_method'] = 0;
| if(!isset($options['username_method'])) { $options['username_method'] = 0;
|
Zeile 6032 | Zeile 6176 |
---|
default: $sqlwhere = "{$field}='{$username}'"; break;
|
default: $sqlwhere = "{$field}='{$username}'"; break;
|
}
| }
|
$fields = array('uid'); if(isset($options['fields'])) {
| $fields = array('uid'); if(isset($options['fields'])) {
|
Zeile 6188 | Zeile 6332 |
---|
{ $inactive[] = $fid1; }
|
{ $inactive[] = $fid1; }
|
} } }
$inactiveforums = implode(",", $inactive);
| } } }
$inactiveforums = implode(",", $inactive);
|
return $inactiveforums; }
| return $inactiveforums; }
|
Zeile 6299 | Zeile 6443 |
---|
*/ function validate_email_format($email) {
|
*/ function validate_email_format($email) {
|
if(strpos($email, ' ') !== false) { return false; } // Valid local characters for email addresses: http://www.remote.org/jochen/mail/info/chars.html return preg_match("/^[a-zA-Z0-9&*+\-_.{}~^\?=\/]+@[a-zA-Z0-9-]+\.([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,}$/si", $email);
| return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
|
}
/**
| }
/**
|
Zeile 6322 | Zeile 6461 |
---|
if($uid) { $uid_string = " AND uid != '".(int)$uid."'";
|
if($uid) { $uid_string = " AND uid != '".(int)$uid."'";
|
}
| }
|
$query = $db->simple_select("users", "COUNT(email) as emails", "email = '".$db->escape_string($email)."'{$uid_string}");
if($db->fetch_field($query, "emails") > 0)
| $query = $db->simple_select("users", "COUNT(email) as emails", "email = '".$db->escape_string($email)."'{$uid_string}");
if($db->fetch_field($query, "emails") > 0)
|
Zeile 6341 | Zeile 6480 |
---|
{ global $db, $mybb;
|
{ global $db, $mybb;
|
if(!file_exists(MYBB_ROOT."inc/settings.php")) { $mode = "x"; } else { $mode = "w"; }
$options = array( "order_by" => "title", "order_dir" => "ASC" ); $query = $db->simple_select("settings", "value, name", "", $options);
| $query = $db->simple_select("settings", "value, name", "", array( 'order_by' => 'title', 'order_dir' => 'ASC', ));
|
|
|
$settings = null;
| $settings = '';
|
while($setting = $db->fetch_array($query)) { $mybb->settings[$setting['name']] = $setting['value'];
| while($setting = $db->fetch_array($query)) { $mybb->settings[$setting['name']] = $setting['value'];
|
Zeile 6365 | Zeile 6494 |
---|
}
$settings = "<"."?php\n/*********************************\ \n DO NOT EDIT THIS FILE, PLEASE USE\n THE SETTINGS EDITOR\n\*********************************/\n\n$settings\n";
|
}
$settings = "<"."?php\n/*********************************\ \n DO NOT EDIT THIS FILE, PLEASE USE\n THE SETTINGS EDITOR\n\*********************************/\n\n$settings\n";
|
$file = @fopen(MYBB_ROOT."inc/settings.php", $mode); @fwrite($file, $settings); @fclose($file);
| file_put_contents(MYBB_ROOT.'inc/settings.php', $settings, LOCK_EX);
|
$GLOBALS['settings'] = &$mybb->settings; }
| $GLOBALS['settings'] = &$mybb->settings; }
|
Zeile 6462 | Zeile 6590 |
---|
// Sort the word array by length. Largest terms go first and work their way down to the smallest term. // This resolves problems like "test tes" where "tes" will be highlighted first, then "test" can't be highlighted because of the changed html
|
// Sort the word array by length. Largest terms go first and work their way down to the smallest term. // This resolves problems like "test tes" where "tes" will be highlighted first, then "test" can't be highlighted because of the changed html
|
usort($words, create_function('$a,$b', 'return strlen($b) - strlen($a);'));
| usort($words, 'build_highlight_array_sort');
|
// Loop through our words to build the PREG compatible strings foreach($words as $word)
| // Loop through our words to build the PREG compatible strings foreach($words as $word)
|
Zeile 6484 | Zeile 6612 |
---|
}
return $highlight_cache;
|
}
return $highlight_cache;
|
| }
/** * Sort the word array by length. Largest terms go first and work their way down to the smallest term. * * @param string $a First word. * @param string $b Second word. * @return integer Result of comparison function. */ function build_highlight_array_sort($a, $b) { return strlen($b) - strlen($a);
|
}
/**
| }
/**
|
Zeile 6728 | Zeile 6868 |
---|
$selected = str_replace("+", "", $selected); foreach($timezones as $timezone => $label)
|
$selected = str_replace("+", "", $selected); foreach($timezones as $timezone => $label)
|
{
| {
|
$selected_add = ""; if($selected == $timezone) {
| $selected_add = ""; if($selected == $timezone) {
|
Zeile 6743 | Zeile 6883 |
---|
if($timezone > 0) { $label = "+{$label}";
|
if($timezone > 0) { $label = "+{$label}";
|
}
| }
|
if(strpos($timezone, ".") !== false) { $label = str_replace(".", ":", $label); $label = str_replace(":5", ":30", $label); $label = str_replace(":75", ":45", $label);
|
if(strpos($timezone, ".") !== false) { $label = str_replace(".", ":", $label); $label = str_replace(":5", ":30", $label); $label = str_replace(":75", ":45", $label);
|
}
| }
|
else { $label .= ":00";
| else { $label .= ":00";
|
Zeile 6757 | Zeile 6897 |
---|
} $time_in_zone = my_date($mybb->settings['timeformat'], TIME_NOW, $timezone); $label = $lang->sprintf($lang->timezone_gmt_short, $label." ", $time_in_zone);
|
} $time_in_zone = my_date($mybb->settings['timeformat'], TIME_NOW, $timezone); $label = $lang->sprintf($lang->timezone_gmt_short, $label." ", $time_in_zone);
|
}
| }
|
eval("\$timezone_option .= \"".$templates->get("usercp_options_timezone_option")."\";"); }
| eval("\$timezone_option .= \"".$templates->get("usercp_options_timezone_option")."\";"); }
|
Zeile 6777 | Zeile 6917 |
---|
function fetch_remote_file($url, $post_data=array(), $max_redirects=20) { global $mybb, $config;
|
function fetch_remote_file($url, $post_data=array(), $max_redirects=20) { global $mybb, $config;
|
| if(!my_validate_url($url, true)) { return false; }
|
$url_components = @parse_url($url);
|
$url_components = @parse_url($url);
|
| if(!isset($url_components['scheme'])) { $url_components['scheme'] = 'https'; } if(!isset($url_components['port'])) { $url_components['port'] = $url_components['scheme'] == 'https' ? 443 : 80; }
|
if( !$url_components || empty($url_components['host']) || (!empty($url_components['scheme']) && !in_array($url_components['scheme'], array('http', 'https'))) ||
|
if( !$url_components || empty($url_components['host']) || (!empty($url_components['scheme']) && !in_array($url_components['scheme'], array('http', 'https'))) ||
|
(!empty($url_components['port']) && !in_array($url_components['port'], array(80, 8080, 443))) ||
| (!in_array($url_components['port'], array(80, 8080, 443))) ||
|
(!empty($config['disallowed_remote_hosts']) && in_array($url_components['host'], $config['disallowed_remote_hosts'])) ) { return false;
|
(!empty($config['disallowed_remote_hosts']) && in_array($url_components['host'], $config['disallowed_remote_hosts'])) ) { return false;
|
}
| }
$addresses = get_ip_by_hostname($url_components['host']); $destination_address = $addresses[0];
|
if(!empty($config['disallowed_remote_addresses']))
|
if(!empty($config['disallowed_remote_addresses']))
|
{ $addresses = gethostbynamel($url_components['host']); if($addresses) { foreach($config['disallowed_remote_addresses'] as $disallowed_address) { $ip_range = fetch_ip_range($disallowed_address); foreach($addresses as $address) { $packed_address = my_inet_pton($address);
if(is_array($ip_range)) { if(strcmp($ip_range[0], $packed_address) <= 0 && strcmp($ip_range[1], $packed_address) >= 0) { return false; } } elseif($address == $disallowed_address) { return false; }
| { foreach($config['disallowed_remote_addresses'] as $disallowed_address) { $ip_range = fetch_ip_range($disallowed_address);
$packed_address = my_inet_pton($destination_address);
if(is_array($ip_range)) { if(strcmp($ip_range[0], $packed_address) <= 0 && strcmp($ip_range[1], $packed_address) >= 0) { return false;
|
} }
|
} }
|
} }
| elseif($destination_address == $disallowed_address) { return false; } } }
|
$post_body = ''; if(!empty($post_data))
| $post_body = ''; if(!empty($post_data))
|
Zeile 6828 | Zeile 6979 |
---|
} $post_body = ltrim($post_body, '&'); }
|
} $post_body = ltrim($post_body, '&'); }
|
|
|
if(function_exists("curl_init")) {
|
if(function_exists("curl_init")) {
|
$can_followlocation = @ini_get('open_basedir') === '' && !$mybb->safemode;
$request_header = $max_redirects != 0 && !$can_followlocation;
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $request_header); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
| $fetch_header = $max_redirects > 0;
|
|
|
if($max_redirects != 0 && $can_followlocation) { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_MAXREDIRS, $max_redirects); }
| $ch = curl_init();
$curlopt = array( CURLOPT_URL => $url, CURLOPT_HEADER => $fetch_header, CURLOPT_TIMEOUT => 10, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => 0, );
if($ca_bundle_path = get_ca_bundle_path()) { $curlopt[CURLOPT_SSL_VERIFYPEER] = 1; $curlopt[CURLOPT_CAINFO] = $ca_bundle_path; } else { $curlopt[CURLOPT_SSL_VERIFYPEER] = 0; }
$curl_version_info = curl_version(); $curl_version = $curl_version_info['version'];
if(version_compare(PHP_VERSION, '7.0.7', '>=') && version_compare($curl_version, '7.49', '>=')) { // CURLOPT_CONNECT_TO $curlopt[10243] = array( $url_components['host'].':'.$url_components['port'].':'.$destination_address ); } elseif(version_compare(PHP_VERSION, '5.5', '>=') && version_compare($curl_version, '7.21.3', '>=')) { // CURLOPT_RESOLVE $curlopt[10203] = array( $url_components['host'].':'.$url_components['port'].':'.$destination_address ); }
|
if(!empty($post_body)) {
|
if(!empty($post_body)) {
|
curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_body);
| $curlopt[CURLOPT_POST] = 1; $curlopt[CURLOPT_POSTFIELDS] = $post_body;
|
}
|
}
|
| curl_setopt_array($ch, $curlopt);
|
$response = curl_exec($ch);
|
$response = curl_exec($ch);
|
if($request_header)
| if($fetch_header)
|
{ $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size);
| { $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size);
|
Zeile 6869 | Zeile 7045 |
---|
if($matches) { $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects);
|
if($matches) { $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects);
|
} } else
| } } else
|
{ $data = $body; }
|
{ $data = $body; }
|
}
| }
|
else { $data = $response;
| else { $data = $response;
|
Zeile 6885 | Zeile 7061 |
---|
return $data; } else if(function_exists("fsockopen"))
|
return $data; } else if(function_exists("fsockopen"))
|
{ if(!isset($url_components['port'])) { $url_components['port'] = 80; }
| {
|
if(!isset($url_components['path']))
|
if(!isset($url_components['path']))
|
{
| {
|
$url_components['path'] = "/";
|
$url_components['path'] = "/";
|
}
| }
|
if(isset($url_components['query'])) { $url_components['path'] .= "?{$url_components['query']}";
|
if(isset($url_components['query'])) { $url_components['path'] .= "?{$url_components['query']}";
|
}
$scheme = '';
| }
$scheme = '';
|
if($url_components['scheme'] == 'https')
|
if($url_components['scheme'] == 'https')
|
{
| {
|
$scheme = 'ssl://'; if($url_components['port'] == 80) {
| $scheme = 'ssl://'; if($url_components['port'] == 80) {
|
Zeile 6910 | Zeile 7082 |
---|
} }
|
} }
|
$fp = @fsockopen($scheme.$url_components['host'], $url_components['port'], $error_no, $error, 10);
| if(function_exists('stream_context_create')) { if($url_components['scheme'] == 'https' && $ca_bundle_path = get_ca_bundle_path()) { $context = stream_context_create(array( 'ssl' => array( 'verify_peer' => true, 'verify_peer_name' => true, 'peer_name' => $url_components['host'], 'cafile' => $ca_bundle_path, ), )); } else { $context = stream_context_create(array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), )); }
$fp = @stream_socket_client($scheme.$destination_address.':'.(int)$url_components['port'], $error_no, $error, 10, STREAM_CLIENT_CONNECT, $context); } else { $fp = @fsockopen($scheme.$url_components['host'], (int)$url_components['port'], $error_no, $error, 10); }
|
@stream_set_timeout($fp, 10); if(!$fp)
|
@stream_set_timeout($fp, 10); if(!$fp)
|
{ return false; }
| { return false; }
|
$headers = array(); if(!empty($post_body)) {
| $headers = array(); if(!empty($post_body)) {
|
Zeile 6956 | Zeile 7157 |
---|
} fclose($fp);
|
} fclose($fp);
|
$data = explode("\r\n\r\n", $data, 2);
| $data = explode("\r\n\r\n", $data, 2);
|
$header = $data[0]; $status_line = current(explode("\n\n", $header, 1)); $body = $data[1];
|
$header = $data[0]; $status_line = current(explode("\n\n", $header, 1)); $body = $data[1];
|
if($max_redirects != 0 && (strstr($status_line, ' 301 ') || strstr($status_line, ' 302 ')))
| if($max_redirects > 0 && (strstr($status_line, ' 301 ') || strstr($status_line, ' 302 ')))
|
{ preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches);
| { preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches);
|
Zeile 6970 | Zeile 7171 |
---|
{ $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects); }
|
{ $data = fetch_remote_file(trim(array_pop($matches)), $post_data, --$max_redirects); }
|
}
| } else { $data = $body; }
return $data; } else { return false; } }
/** * Resolves a hostname into a set of IP addresses. * * @param string $hostname The hostname to be resolved * @return array|bool The resulting IP addresses. False on failure */ function get_ip_by_hostname($hostname) { $addresses = @gethostbynamel($hostname);
if(!$addresses) { $result_set = @dns_get_record($hostname, DNS_A | DNS_AAAA);
if($result_set) { $addresses = array_column($result_set, 'ip'); }
|
else {
|
else {
|
$data = $body;
| return false;
|
}
|
}
|
return $data; } else if(empty($post_data))
| }
return $addresses; }
/** * Returns the location of the CA bundle defined in the PHP configuration. * * @return string|bool The location of the CA bundle, false if not set */ function get_ca_bundle_path() { if($path = ini_get('openssl.cafile')) { return $path; } if($path = ini_get('curl.cainfo'))
|
{
|
{
|
return @implode("", @file($url)); } else { return false;
| return $path;
|
}
|
}
|
| return false;
|
}
/**
| }
/**
|
Zeile 7118 | Zeile 7361 |
---|
{ if($string == "") continue; $strings[] = trim($string);
|
{ if($string == "") continue; $strings[] = trim($string);
|
} }
| } }
|
} $in_escape = !$in_escape; }
| } $in_escape = !$in_escape; }
|
Zeile 7149 | Zeile 7392 |
---|
}
if(strpos($ip, ".*") === false)
|
}
if(strpos($ip, ".*") === false)
|
{
| {
|
$ip = str_replace("*", "", $ip); if(count($ip_bits) == 4) {
| $ip = str_replace("*", "", $ip); if(count($ip_bits) == 4) {
|
Zeile 7179 | Zeile 7422 |
---|
$sep = "."; } return array(ip2long($ip_string1), ip2long($ip_string2));
|
$sep = "."; } return array(ip2long($ip_string1), ip2long($ip_string2));
|
}
| }
|
}
/**
| }
/**
|
Zeile 7238 | Zeile 7481 |
---|
$n[2] += $d[1]; $n[3] += $d[2]; return mktime(date("G", $stamp), date("i", $stamp), 0, $n[2], $n[1], $n[3]);
|
$n[2] += $d[1]; $n[3] += $d[2]; return mktime(date("G", $stamp), date("i", $stamp), 0, $n[2], $n[1], $n[3]);
|
}
| }
|
/** * Expire old warnings in the database. *
| /** * Expire old warnings in the database. *
|
Zeile 7300 | Zeile 7543 |
---|
if(@is_dir($path) && !@is_link($path)) { if($dh = @opendir($path))
|
if(@is_dir($path) && !@is_link($path)) { if($dh = @opendir($path))
|
{
| {
|
while(($file = @readdir($dh)) !== false) { if($file == '.' || $file == '..' || $file == '.svn' || in_array($path.'/'.$file, $ignore) || !my_rmdir_recursive($path.'/'.$file))
| while(($file = @readdir($dh)) !== false) { if($file == '.' || $file == '..' || $file == '.svn' || in_array($path.'/'.$file, $ignore) || !my_rmdir_recursive($path.'/'.$file))
|
Zeile 7330 | Zeile 7573 |
---|
* @return integer The number of sub forums */ function subforums_count($array)
|
* @return integer The number of sub forums */ function subforums_count($array)
|
{
| {
|
$count = 0; foreach($array as $array2) {
| $count = 0; foreach($array as $array2) {
|
Zeile 7360 | Zeile 7603 |
---|
if(!$ip_long) { return 0;
|
if(!$ip_long) { return 0;
|
}
| }
|
}
if($ip_long >= 2147483648) // Won't occur on 32-bit PHP
| }
if($ip_long >= 2147483648) // Won't occur on 32-bit PHP
|
Zeile 7388 | Zeile 7631 |
---|
$long += 4294967296; } return long2ip($long);
|
$long += 4294967296; } return long2ip($long);
|
}
/**
| }
/**
|
* Converts a human readable IP address to its packed in_addr representation * * @param string $ip The IP to convert
| * Converts a human readable IP address to its packed in_addr representation * * @param string $ip The IP to convert
|
Zeile 7419 | Zeile 7662 |
---|
if($r !== false && $r != -1) { return pack('N', $r);
|
if($r !== false && $r != -1) { return pack('N', $r);
|
}
| }
|
$delim_count = substr_count($ip, ':'); if($delim_count < 1 || $delim_count > 7) {
| $delim_count = substr_count($ip, ':'); if($delim_count < 1 || $delim_count > 7) {
|
Zeile 7480 | Zeile 7723 |
---|
array('::', '(int)"$1"?"$1":"0$1"'), $r); return $r;
|
array('::', '(int)"$1"?"$1":"0$1"'), $r); return $r;
|
}
| }
|
return false; } }
| return false; } }
|
Zeile 7640 | Zeile 7883 |
---|
global $mybb, $checksums, $bad_verify_files;
// We don't need to check these types of files
|
global $mybb, $checksums, $bad_verify_files;
// We don't need to check these types of files
|
$ignore = array(".", "..", ".svn", "config.php", "settings.php", "Thumb.db", "config.default.php", "lock", "htaccess.txt", "logo.gif", "logo.png");
| $ignore = array(".", "..", ".svn", "config.php", "settings.php", "Thumb.db", "config.default.php", "lock", "htaccess.txt", "htaccess-nginx.txt", "logo.gif", "logo.png");
|
$ignore_ext = array("attach");
if(substr($path, -1, 1) == "/")
| $ignore_ext = array("attach");
if(substr($path, -1, 1) == "/")
|
Zeile 7681 | Zeile 7924 |
---|
{ $filename = $path."/".$file; $handle = fopen($filename, "rb");
|
{ $filename = $path."/".$file; $handle = fopen($filename, "rb");
|
$contents = '';
| $hashingContext = hash_init('sha512');
|
while(!feof($handle)) {
|
while(!feof($handle)) {
|
$contents .= fread($handle, 8192);
| hash_update($hashingContext, fread($handle, 8192));
|
} fclose($handle);
|
} fclose($handle);
|
$md5 = md5($contents);
| $checksum = hash_final($hashingContext);
|
// Does it match any of our hashes (unix/windows new lines taken into consideration with the hashes)
|
// Does it match any of our hashes (unix/windows new lines taken into consideration with the hashes)
|
if(!in_array($md5, $checksums[$file_path]))
| if(!in_array($checksum, $checksums[$file_path]))
|
{ $bad_verify_files[] = array("status" => "changed", "path" => $file_path); }
| { $bad_verify_files[] = array("status" => "changed", "path" => $file_path); }
|
Zeile 7735 | Zeile 7978 |
---|
if($int < 0) { return "$int";
|
if($int < 0) { return "$int";
|
}
| }
|
else { return "+$int";
| else { return "+$int";
|
Zeile 8235 | Zeile 8478 |
---|
* @return bool True if PM sent */ function send_pm($pm, $fromid = 0, $admin_override=false)
|
* @return bool True if PM sent */ function send_pm($pm, $fromid = 0, $admin_override=false)
|
{
| {
|
global $lang, $mybb, $db, $session;
if($mybb->settings['enablepms'] == 0)
| global $lang, $mybb, $db, $session;
if($mybb->settings['enablepms'] == 0)
|
Zeile 8265 | Zeile 8508 |
---|
{ $lang_string = $lang->{$pm[$key][0]}; $num_args = count($pm[$key]);
|
{ $lang_string = $lang->{$pm[$key][0]}; $num_args = count($pm[$key]);
|
|
|
for($i = 1; $i < $num_args; $i++) { $lang_string = str_replace('{'.$i.'}', $pm[$key][$i], $lang_string);
| for($i = 1; $i < $num_args; $i++) { $lang_string = str_replace('{'.$i.'}', $pm[$key][$i], $lang_string);
|
Zeile 8295 | Zeile 8538 |
---|
require_once MYBB_ROOT."inc/datahandlers/pm.php";
$pmhandler = new PMDataHandler();
|
require_once MYBB_ROOT."inc/datahandlers/pm.php";
$pmhandler = new PMDataHandler();
|
|
|
$subject = $pm['subject']; $message = $pm['message']; $toid = $pm['touid'];
|
$subject = $pm['subject']; $message = $pm['message']; $toid = $pm['touid'];
|
|
|
// Our recipients if(is_array($toid)) { $recipients_to = $toid;
|
// Our recipients if(is_array($toid)) { $recipients_to = $toid;
|
}
| }
|
else { $recipients_to = array($toid);
|
else { $recipients_to = array($toid);
|
}
$recipients_bcc = array();
| }
$recipients_bcc = array();
|
// Determine user ID if((int)$fromid == 0)
| // Determine user ID if((int)$fromid == 0)
|
Zeile 8356 | Zeile 8599 |
---|
if($pmhandler->validate_pm()) { $pmhandler->insert_pm();
|
if($pmhandler->validate_pm()) { $pmhandler->insert_pm();
|
return true; }
return false; }
| return true; }
return false; }
|
/** * Log a user spam block from StopForumSpam (or other spam service providers...)
| /** * Log a user spam block from StopForumSpam (or other spam service providers...)
|
Zeile 8376 | Zeile 8619 |
---|
global $db, $session;
if(!is_array($data))
|
global $db, $session;
if(!is_array($data))
|
{
| {
|
$data = array($data); }
| $data = array($data); }
|
Zeile 8439 | Zeile 8682 |
---|
if(!($dir_exists = is_dir($cdn_upload_path))) { $dir_exists = @mkdir($cdn_upload_path, 0777, true);
|
if(!($dir_exists = is_dir($cdn_upload_path))) { $dir_exists = @mkdir($cdn_upload_path, 0777, true);
|
}
| }
|
if($dir_exists) { if(($cdn_upload_path = realpath($cdn_upload_path)) !== false)
| if($dir_exists) { if(($cdn_upload_path = realpath($cdn_upload_path)) !== false)
|
Zeile 8452 | Zeile 8695 |
---|
$uploaded_path = $cdn_upload_path; } }
|
$uploaded_path = $cdn_upload_path; } }
|
} }
| } }
|
if(is_object($plugins)) { $hook_args = array(
| if(is_object($plugins)) { $hook_args = array(
|
Zeile 8464 | Zeile 8707 |
---|
'uploaded_path' => &$uploaded_path, 'success' => &$success, );
|
'uploaded_path' => &$uploaded_path, 'success' => &$success, );
|
|
|
$plugins->run_hooks('copy_file_to_cdn_end', $hook_args); } }
return $success;
|
$plugins->run_hooks('copy_file_to_cdn_end', $hook_args); } }
return $success;
|
}
/**
| }
/**
|
* Validate an url
|
* Validate an url
|
*
| *
|
* @param string $url The url to validate. * @param bool $relative_path Whether or not the url could be a relative path.
|
* @param string $url The url to validate. * @param bool $relative_path Whether or not the url could be a relative path.
|
| * @param bool $allow_local Whether or not the url could be pointing to local networks.
|
* * @return bool Whether this is a valid url. */
|
* * @return bool Whether this is a valid url. */
|
function my_validate_url($url, $relative_path=false)
| function my_validate_url($url, $relative_path=false, $allow_local=false)
|
{
|
{
|
if($relative_path && my_substr($url, 0, 1) == '/' || preg_match('_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$_iuS', $url))
| if($allow_local) { $regex = '_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:localhost|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,}))\.?))(?::\d{2,5})?(?:[/?#]\S*)?$_iuS'; } else { $regex = '_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$_iuS'; }
if($relative_path && my_substr($url, 0, 1) == '/' || preg_match($regex, $url)) { return true; } return false; }
/** * Strip html tags from string, also removes <script> and <style> contents. * * @param string $string String to stripe * @param string $allowable_tags Allowed html tags * * @return string Striped string */ function my_strip_tags($string, $allowable_tags = '') { $pattern = array( '@(<)style[^(>)]*?(>).*?(<)/style(>)@siu', '@(<)script[^(>)]*?.*?(<)/script(>)@siu', '@<style[^>]*?>.*?</style>@siu', '@<script[^>]*?.*?</script>@siu', ); $string = preg_replace($pattern, '', $string); return strip_tags($string, $allowable_tags); }
/** * Escapes a RFC 4180-compliant CSV string. * Based on https://github.com/Automattic/camptix/blob/f80725094440bf09861383b8f11e96c177c45789/camptix.php#L2867 * * @param string $string The string to be escaped * @param boolean $escape_active_content Whether or not to escape active content trigger characters * @return string The escaped string */ function my_escape_csv($string, $escape_active_content=true) { if($escape_active_content)
|
{
|
{
|
return true;
| $active_content_triggers = array('=', '+', '-', '@'); $delimiters = array(',', ';', ':', '|', '^', "\n", "\t", " ");
$first_character = mb_substr($string, 0, 1);
if( in_array($first_character, $active_content_triggers, true) || in_array($first_character, $delimiters, true) ) { $string = "'".$string; }
foreach($delimiters as $delimiter) { foreach($active_content_triggers as $trigger) { $string = str_replace($delimiter.$trigger, $delimiter."'".$trigger, $string); } }
|
}
|
}
|
return false;
| $string = str_replace('"', '""', $string);
return $string;
|
}
| }
|