Changes go downward, months go upward. Please scroll to the bottom for a legend.
Changelog started January 1, 2004; Currently at $Revision: 1.1040.2.310 $.
Changes go downward, months go upward. Please scroll to the bottom for a legend.
Changelog started January 1, 2004; Currently at $Revision: 1.1040.2.323 $.
SMF 1.0.3 March 28, 2005
================================================================================
March 2005:
--------------------------------------------------------------------------------
! Fix lacnic whois server link. (ManageMembers.php)
! Sometimes (much of the time), using multiple search conditions could cause your add code to be miffed up. (Subs-Package.php)
! The RSS feeds were using overly unique links. (News.php)
! Try to parse blank URLs and a few other things more correctly. (Subs-Post.php)
! Don't give an error when you try to delete nothing from the news. (Admin.php)
* Fixed a small HTML typo. (Search template)
! Don't kill the installer if session.save_handler is set strangely. (install.php)
! The database error email message just wasn't sending. (Subs-Auth.php)
! Clean up better after multiple spaces/etc. in usernames. (Register.php)
! Handle single quotes in email addresses from the profile better. (Profile.php)
! Fixed a case where calendar events wouldn't be handled properly. (Calendar.php)
February 2005:
--------------------------------------------------------------------------------
! Fixed new poll choices sometimes getting messed up after editing polls. (Poll.php)
! Send the automatically generated password properly on administrative registrations. (Register.php)
! Validate any choices for lngfile on registration. (Register.php)
* When editing polls, the choice ordering could be messed up. (Poll template)
* Automatic notification was still being turned off sometimes on replies with quick reply. (Display template)
$allyear_part = "birthdate BETWEEN '0000-" . substr($low_date, 4) . "' AND '0000-12-31'
OR birthdate BETWEEN '0000-01-01' AND '0000-" . substr($high_date, 4) . "'";
$allyear_part = "birthdate BETWEEN '0000" . substr($low_date, 4) . "' AND '0000-12-31'
OR birthdate BETWEEN '0000-01-01' AND '0000" . substr($high_date, 4) . "'";
$allyear_part = "birthdate BETWEEN '0000-" . substr($low_date, 4) . "' AND '0000-" . substr($high_date, 4) . "'";
$allyear_part = "birthdate BETWEEN '0000" . substr($low_date, 4) . "' AND '0000" . substr($high_date, 4) . "'";
if (substr($low_date, 0, 4) != substr($high_date, 0, 4))
$allyear_part = "eventDate BETWEEN '0000-" . substr($low_date, 4) . "' AND '0000-12-31'
OR eventDate BETWEEN '0000-01-01' AND '0000-" . substr($high_date, 4) . "'";
else
$allyear_part = "eventDate BETWEEN '0000-" . substr($low_date, 4) . "' AND '0000-" . substr($high_date, 4) . "'";
if (substr($low_date, 0, 4) != substr($high_date, 0, 4))
$allyear_part = "eventDate BETWEEN '0000" . substr($low_date, 4) . "' AND '0000-12-31'
OR eventDate BETWEEN '0000-01-01' AND '0000" . substr($high_date, 4) . "'";
else
$allyear_part = "eventDate BETWEEN '0000" . substr($low_date, 4) . "' AND '0000" . substr($high_date, 4) . "'";
'title' => '<![CDATA[' . $row['subject'] . ']]>',
'link' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.' . $row['numReplies'] . '#msg' . $row['ID_MSG'],
'description' => "<![CDATA[\n" . $row['body'] . ']]>',
'title' => '<![CDATA[' . $row['subject'] . ']]>',
'link' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'],
'description' => "<![CDATA[\n" . $row['body'] . ']]>',
* Software Version: SMF 1.0 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2004 by: Lewis Media (http://www.lewismedia.com) *
* Software Version: SMF 1.0.3 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2005 by: Lewis Media (http://www.lewismedia.com) *
* Software Version: SMF 1.0 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2004 by: Lewis Media (http://www.lewismedia.com) *
* Software Version: SMF 1.0.3 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2005 by: Lewis Media (http://www.lewismedia.com) *
// Trim any whitespace from the username.
$_POST['user'] = trim($_POST['user']);
// Trim any whitespace from the username.
$_POST['user'] = trim(preg_replace('~[\t\n\r\x0B\0\xA0]+~', ' ', $_POST['user']));
if (strlen($_POST['user']) > 25)
$_POST['user'] = substr($_POST['user'], 0, 25);
if (strlen($_POST['user']) > 25)
$_POST['user'] = trim(substr($_POST['user'], 0, 25));
foreach ($possible_strings as $var)
if (isset($_POST['lngfile']) && !empty($modSettings['userLanguage']))
{
$language_directories = array(
$settings['default_theme_dir'] . '/languages',
$settings['actual_theme_dir'] . '/languages',
);
if (!empty($settings['base_theme_dir']))
$language_directories[] = $settings['base_theme_dir'] . '/languages';
$language_directories = array_unique($language_directories);
foreach ($language_directories as $language_dir)
{
if (!file_exists($language_dir))
continue;
$dir = dir($language_dir);
while ($entry = $dir->read())
if (preg_match('~^index\.(.+)\.php$~', $entry, $matches) && $matches[1] == $_POST['lngfile'])
{
$found = true;
$_SESSION['language'] = $_POST['lngfile'];
break;
}
$dir->close();
}
if (empty($found))
unset($_POST['lngfile']);
}
else
unset($_POST['lngfile']);
foreach ($possible_strings as $var)
$working_search = '';
$replace_with = $operation->exists('add') ? $operation->fetch('add') : '';
$temp_searches = $operation->set('search');
if (count($temp_searches) > 1)
{
// Resort the list so replace comes first - it must.
$searches = array();
foreach ($temp_searches as $i => $v)
if (!$v->exists('@position') || ($v->fetch('@position') != 'before' && $v->fetch('@position') != 'after'))
{
$searches[] = $v;
unset($temp_searches[$i]);
}
// Add on the rest, in the order they were in.
$searches = array_merge($searches, $temp_searches);
}
else
$searches = $temp_searches;
// Go through all the search conditions.
foreach ($searches as $search)
$working_search = '';
$replace_with = $operation->exists('add') ? $operation->fetch('add') : '';
// Are we doing a fancy-shmancy regexp search?
$regexp = false;
$temp_searches = $operation->set('search');
if (count($temp_searches) > 1)
{
// Resort the list so replace comes first - it must.
$searches = array();
foreach ($temp_searches as $i => $v)
{
// A quick check on whether it's a regular expression search...
if (!$undo && $temp_searches[$i]->exists('@regexp') && trim($temp_searches[$i]->fetch('@regexp')) == 'true')
$regexp = true;
if (!$v->exists('@position') || ($v->fetch('@position') != 'before' && $v->fetch('@position') != 'after'))
{
$searches[] = $v;
unset($temp_searches[$i]);
}
}
// Add on the rest, in the order they were in.
$searches = array_merge($searches, $temp_searches);
}
else
{
$searches = $temp_searches;
$regexp = !$undo && $searches[0]->exists('@regexp') && trim($searches[0]->fetch('@regexp')) == 'true';
}
// If we're not using regular expression search, replace out any $'s and \'s!
if (!$regexp)
{
// Shuzzup. This is done so we can safely use a regular expression. ($0 is bad!!)
if (!$undo)
$replace_with = strtr($replace_with, array('$' => '[$PACK' . 'AGE1$]', '\\' => '[$PACK' . 'AGE2$]'));
else
$replace_with = preg_quote($replace_with, '~');
}
// Go through all the search conditions.
foreach ($searches as $search)
$this_clean_search = $search->fetch('.');
// Are we not using regular expressions explicitly?
if (!$search->exists('@regexp') || trim($search->fetch('@regexp') != 'true') && !$undo)
{
$this_search = preg_quote($this_clean_search, '~');
// Remember, can't have whitespace correction and regexp on at the same time.
if ($search->exists('@whitespace') && trim($search->fetch('@whitespace') != 'loose'))
$this_search = preg_replace('~[ \t]+~', '[ \t]+', $this_search);
// Shuzzup. This is done so we can safely use a regular expression. ($0 is bad!!)
if (!$undo)
$replace_with = strtr($replace_with, array('$' => '[$PACK' . 'AGE1$]', '\\' => '[$PACK' . 'AGE2$]'));
else
{
$replace_with = preg_quote($replace_with, '~');
$working_search = strtr($working_search, array('$' => '[$PACK' . 'AGE1$]', '\\' => '[$PACK' . 'AGE2$]'));
}
}
else
$this_search = $this_clean_search;
$this_clean_search = $search->fetch('.');
// Are we not using regular expressions explicitly?
if (!$regexp)
{
$this_search = preg_quote($this_clean_search, '~');
// Remember, can't have whitespace correction and regexp on at the same time.
if ($search->exists('@whitespace') && trim($search->fetch('@whitespace')) != 'loose')
$this_search = preg_replace('~[ \t]+~', '[ \t]+', $this_search);
// Shuzzup again. Read the comment above a few lines where this is done to $replace_with...
if ($undo)
$working_search = strtr($working_search, array('$' => '[$PACK' . 'AGE1$]', '\\' => '[$PACK' . 'AGE2$]'));
}
else
$this_search = $this_clean_search;
if ($position == 'before')
{
if (!$search->exists('@regexp') || trim($search->fetch('@regexp') != 'true'))
{
if (!$undo)
{
if ($position == 'before')
{
if (!$regexp)
{
if (!$undo)
{
}
elseif ($position == 'after')
{
if (!$search->exists('@regexp') || trim($search->fetch('@regexp') != 'true'))
{
if (!$undo)
{
}
elseif ($position == 'after')
{
if (!$regexp)
{
if (!$undo)
{
$working_data = strtr($working_data, array('[$PACK' . 'AGE1$]' => '$', '[$PACK' . 'AGE2$]' => '\\'));
if (file_exists($working_file) && !is_writable($working_file))
@chmod($working_file, 0777);
elseif (!file_exists($working_file) && !is_writable(dirname($working_file)))
@chmod(dirname($working_file), 0777);
if ((file_exists($working_file) && !is_writable($working_file)) || !is_writable(dirname($working_file)))
$working_data = strtr($working_data, array('[$PACK' . 'AGE1$]' => '$', '[$PACK' . 'AGE2$]' => '\\'));
if (file_exists($working_file) && !is_writable($working_file))
@chmod($working_file, 0755);
if (file_exists($working_file) && !is_writable($working_file))
@chmod($working_file, 0777);
if (!file_exists($working_file) && !is_writable(dirname($working_file)))
@chmod(dirname($working_file), 0755);
if (!file_exists($working_file) && !is_writable(dirname($working_file)))
@chmod(dirname($working_file), 0777);
if ((file_exists($working_file) && !is_writable($working_file)) || !is_writable(dirname($working_file)))
* Software Version: SMF 1.0 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2004 by: Lewis Media (http://www.lewismedia.com) *
* Software Version: SMF 1.0.3 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2005 by: Lewis Media (http://www.lewismedia.com) *
{
while (preg_match('/\[(' . $myTag . ($hasExtra ? '(?:[^\]]*?)' : '') . ')' . ($hasEqualSign ? '(=(.+?))' : '(())') . '\](.+?)\[\/(' . $myTag . ')\]/is', $message, $matches))
{
{
while (preg_match('/\[(' . $myTag . ($hasExtra ? '(?:[^\]]*?)' : '') . ')' . ($hasEqualSign ? '(=([^\]]*?))' : '(())') . '\](.+?)\[\/(' . $myTag . ')\]/is', $message, $matches))
{
* Software Version: SMF 1.0 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2004 by: Lewis Media (http://www.lewismedia.com) *
* Software Version: SMF 1.0.3 *
* Software by: Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2005 by: Lewis Media (http://www.lewismedia.com) *
if ($output_method != 'echo' || empty($return))
return $return;
foreach ($return as $mday => $array)
$return[$mday][count($array) - 1]['is_last'] = true;
foreach ($return as $mday => $array)
$return[$mday][count($array) - 1]['is_last'] = true;
if ($output_method != 'echo' || empty($return))
return $return;
<input type="hidden" name="icon" value="xx" />
<input type="hidden" name="notify" value="', $context['is_marked_notify'] || empty($options['auto_notify']) ? '0' : '1', '" />
<input type="hidden" name="goback" value="', empty($options['return_to_post']) ? '0' : '1', '" />
<input type="hidden" name="icon" value="xx" />
<input type="hidden" name="notify" value="', $context['is_marked_notify'] || !empty($options['auto_notify']) ? '1' : '0', '" />
<input type="hidden" name="goback" value="', empty($options['return_to_post']) ? '0' : '1', '" />
<input type="hidden" name="icon" value="xx" />
<input type="hidden" name="notify" value="', $context['is_marked_notify'] || empty($options['auto_notify']) ? '0' : '1', '" />
<input type="hidden" name="goback" value="', empty($options['return_to_post']) ? '0' : '1', '" />
<input type="hidden" name="icon" value="xx" />
<input type="hidden" name="notify" value="', $context['is_marked_notify'] || !empty($options['auto_notify']) ? '1' : '0', '" />
<input type="hidden" name="goback" value="', empty($options['return_to_post']) ? '0' : '1', '" />
setOuterHTML(document.getElementById("pollMoreOptions"), \'<br /><label for="options[\' + pollOptionNum + \']">', $txt['smf22'], ' \' + pollOptionNum + \'</label>: <input type="text" name="options[\' + pollOptionNum + \']" id="options[\' + pollOptionNum + \']" value="" size="25" /><span id="pollMoreOptions"></span>\');
}
setOuterHTML(document.getElementById("pollMoreOptions"), \'<br /><label for="options[\' + pollOptionNum + \']">', $txt['smf22'], ' \' + pollOptionNum + \'</label>: <input type="text" name="options[\' + (pollOptionNum - 1) + \']" id="options[\' + (pollOptionNum - 1) + \']" value="" size="25" /><span id="pollMoreOptions"></span>\');
}