Commit 18305fbe authored by Andreas Otto's avatar Andreas Otto
Browse files

This commit was manufactured by cvs2svn to create tag

'TYPO3_3-7-0RC2'.

git-svn-id: https://svn.typo3.org/TYPO3v4/Core/tags/TYPO3_3-7-0RC2@492 709f56b5-9817-0410-a4d7-c38de5d9e867
parent 8dcd23b7
2004-09-19 Michael Stucki <mundaun@gmx.ch>
* Release of TYPO3 3.7.0RC2
2004-09-19 Ingmar Schlecht <ingmars@web.de>
* Added option to set the PHP memory_limit with the install tool.
* Fixed bug #0000248: Highlighting color of BE module is now the same as highlighting color in the page tree
* Changed <meta name="generator" content="TYPO3 3.6 CMS" /> tag in class.tslib_pagegen.php to reflect version 3.7. Should be changed to something dynamic in the future! (see bug #0000318)
* Fixed bug #0000365: Made comparing md5 hashes of t3x files in mod/tools/em/index.php ignore leading whitespaces. Patch by Martin T. Kutschker <Martin-no5pam-Kutschker@blackbox.n0spam.net>
* Increasing version number to 3.7.0RC2
2004-09-19 Michael Stucki <mundaun@gmx.ch>
* A new warning message is displayed if the install tool password is still the default: "joh316"
* Replaced all (comments AND code!) occurences of "writeable" with "writable"
* Fixed bug #0000171: Displaying wrong filepermissions in filelist module
* Fixed bug #0000261: fileDenyPattern default does not include ".php4"
* Fixed bug #0000298: Browser client Konqueror not recognized
* Fixed bug #0000362: Changed field length of sys_log[IP] to 39 (IPv6 related, patch by Sven Wilhelm)
2004-09-17 Ingmar Schlecht <ingmars@web.de>
* Fixed bug #0000181: Added the word "JavaScript" to the note on the BE login page. It's now: "(Note: Cookies and JavaScript must be enabled!)"
2004-09-15 Ingmar Schlecht <ingmars@web.de>
* Fixed bug #0000353: In typo3/wizard_add.php removed call to non-existing printContent() method. It doesn't need to print anything.
2004-09-14 Michael Stucki <mundaun@gmx.ch>
* Release of TYPO3 3.7.0RC1
2004-09-14 Michael Stucki <mundaun@gmx.ch>
* Fixed bug #0000159: Logging did not work with absolute logfile_dir specified. However this will still work only if the specified path is within either PATH_site or lockRootPath.
......
......@@ -154,8 +154,8 @@ class t3lib_basicFileFunctions {
$info['type'] = @filetype($wholePath);
$info['owner'] = @fileowner($wholePath);
$info['perms'] = @fileperms($wholePath);
$info['writeable'] = ($info['perms']&2 || ($theuser==$info['owner'] && $info['perms']&128));
$info['readable'] = ($info['perms']&4 || ($theuser==$info['owner'] && $info['perms']&256));
$info['writable'] = !@is_writable($wholePath);
$info['readable'] = !@is_readable($wholePath);
return $info;
}
......
......@@ -1030,7 +1030,7 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
* @internal
*/
function isLocalconfWritable() {
return is_writeable(PATH_typo3conf) && is_writeable(PATH_typo3conf.'localconf.php');
return @is_writable(PATH_typo3conf) && @is_writable(PATH_typo3conf.'localconf.php');
}
/**
......@@ -1044,15 +1044,15 @@ $_EXTCONF = $TYPO3_CONF_VARS[\'EXT\'][\'extConf\'][$_EXTKEY];
*/
function cannotCacheFilesWritable($cacheFilePrefix) {
$error=array();
if (!@is_writeable(PATH_typo3conf)) {
if (!@is_writable(PATH_typo3conf)) {
$error[]=PATH_typo3conf;
}
if (@is_file(PATH_typo3conf.$cacheFilePrefix.'_ext_localconf.php') &&
!@is_writeable(PATH_typo3conf.$cacheFilePrefix.'_ext_localconf.php')) {
!@is_writable(PATH_typo3conf.$cacheFilePrefix.'_ext_localconf.php')) {
$error[]=PATH_typo3conf.$cacheFilePrefix.'_ext_localconf.php';
}
if (@is_file(PATH_typo3conf.$cacheFilePrefix.'_ext_tables.php') &&
!@is_writeable(PATH_typo3conf.$cacheFilePrefix.'_ext_tables.php')) {
!@is_writable(PATH_typo3conf.$cacheFilePrefix.'_ext_tables.php')) {
$error[]=PATH_typo3conf.$cacheFilePrefix.'_ext_tables.php';
}
return implode(', ',$error);
......
......@@ -188,8 +188,8 @@ class t3lib_install {
if (!$this->allowUpdateLocalConf) {
die("->allowUpdateLocalConf flag in the install object is not set and therefore 'localconf.php' cannot be altered.");
}
if (!@is_writeable($writeToLocalconf_dat['file'])) {
die($writeToLocalconf_dat['file'].' is not writeable!');
if (!@is_writable($writeToLocalconf_dat['file'])) {
die($writeToLocalconf_dat['file'].' is not writable!');
}
// Splitting localconf.php file into lines:
......
......@@ -418,6 +418,8 @@ class t3lib_matchCondition {
// browser
if (strstr($useragent,'MSIE')) {
$browserInfo['browser']='msie';
} elseif(strstr($useragent,'Konqueror')) {
$browserInfo['browser']='konqueror';
} elseif(strstr($useragent,'Opera')) {
$browserInfo['browser']='opera';
} elseif(strstr($useragent,'Lynx')) {
......@@ -461,15 +463,19 @@ class t3lib_matchCondition {
break;
case 'avantgo':
$tmp = strstr($useragent,'AvantGo');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,7));
break;
case 'acrobat':
$tmp = strstr($useragent,'WebCapture');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,10));
break;
case 'ibrowse':
$tmp = strstr($useragent,'IBrowse/');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,8));
break;
case 'konqueror':
$tmp = strstr($useragent,'Konqueror/');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,10));
break;
}
// system
......
......@@ -102,7 +102,7 @@ define ('T3_ERR_SV_NO_INPUT', -4); // passed subtype is not possible with this s
define ('T3_ERR_SV_FILE_NOT_FOUND', -20); // File not found which the service should process
define ('T3_ERR_SV_FILE_READ', -21); // File not readable
define ('T3_ERR_SV_FILE_WRITE', -22); // File not writeable
define ('T3_ERR_SV_FILE_WRITE', -22); // File not writable
define ('T3_ERR_SV_PROG_NOT_FOUND', -40); // passed subtype is not possible with this service
define ('T3_ERR_SV_PROG_FAILED', -41); // passed subtype is not possible with this service
......
......@@ -73,6 +73,7 @@ $TYPO3_CONF_VARS = Array(
't3lib_cs_utils' => '', // String (values: "iconv", "recode", "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various Charset processing functions in t3lib_cs. Will speed up charset functions radically.
'no_pconnect' => 0, // Boolean: If true, "connect" is used instead of "pconnect" when connecting to the database!
'multiplyDBfieldSize' => 1, // Double: 1-5: Amount used to multiply the DB field size when the install tool is evaluating the database size (eg. "2.5"). This is useful if you want to expand the size of fields for utf-8 etc. For western european sites using utf-8 the need should not be for more than twice the normal single-byte size (2) and for chinese / asian languages 3 should suffice.
'setMemoryLimit' => 0, // Integer, memory_limit in MB: If more than 16, TYPO3 will try to use ini_set() to set the memory limit of PHP to the value. This works only if the function ini_set() is not disabled by your sysadmin.
),
'EXT' => Array ( // Options related to the Extension Management
'noEdit' => 1, // Boolean: If set, the Extension Manager does NOT allow extension files to be edited! (Otherwise both local and global extensions can be edited.)
......@@ -136,13 +137,13 @@ $TYPO3_CONF_VARS = Array(
// If no fileextension, true is returned if 'allow' is '*', false if 'deny' is '*' and true if none of these matches
// This configuration below accepts everything in ftpspace and everything in webspace except php3 or php files
'fileExtensions' => array (
'webspace' => array('allow'=>'', 'deny'=>'php3,php'),
'webspace' => array('allow'=>'', 'deny'=>'php,php3,php4,php5'),
'ftpspace' => array('allow'=>'*', 'deny'=>'')
),
'customPermOptions' => array(), // Array with sets of custom permission options. Syntax is; 'key' => array('header' => 'header string, language splitted', 'items' => array('key' => array('label, language splitted', 'icon reference', 'Description text, language splitted'))). Keys cannot contain ":|," characters.
'fileDenyPattern' => '\.php\.|\.php3\.', // A regular expression that - if it matches a filename - will deny the file upload/rename or whatever in the webspace. Matching with eregi() (case-insensitive).
'fileDenyPattern' => '\.php$|\.php.$', // A regular expression that - if it matches a filename - will deny the file upload/rename or whatever in the webspace. Matching with eregi() (case-insensitive).
'interfaces' => 'backend', // This determines which interface options is available in the login prompt and in which order (All options: ",backend,frontend")
'loginLabels' => 'Username|Password|Interface|Log In|Log Out|Backend,Front End|Administration Login on ###SITENAME###|(Note: Cookies must be enabled!)|Important Messages:|Your login attempt did not succeed. Make sure to spell your username and password correctly, including upper/lowercase characters.', // Language labels of the login prompt.
'loginLabels' => 'Username|Password|Interface|Log In|Log Out|Backend,Front End|Administration Login on ###SITENAME###|(Note: Cookies and JavaScript must be enabled!)|Important Messages:|Your login attempt did not succeed. Make sure to spell your username and password correctly, including upper/lowercase characters.', // Language labels of the login prompt.
'loginNews' => array(), // In this array you can define news-items for the login screen. To this array, add arrays with assoc keys 'date', 'header', 'content' (HTML content) and for those appropriate value pairs
'XCLASS' => Array(), // See 'Inside TYPO3' document for more information.
'XLLfile' => Array(), // For extension/overriding of the arrays in 'locallang' files in the backend. See 'Inside TYPO3' for more information.
......@@ -206,7 +207,7 @@ $TYPO3_CONF_VARS = Array(
$T3_VAR = array(); // Initialize.
// TYPO3 version
$TYPO_VERSION = '3.7.0-dev';
$TYPO_VERSION = '3.7.0RC2';
define('TYPO3_version', $TYPO_VERSION);
// Database-variables are cleared!
......@@ -299,6 +300,13 @@ function debugEnd() {
$T3_SERVICES = array();
// Set PHP memory limit depending on value of $TYPO3_CONF_VARS["SYS"]["setMemoryLimit"]
if(intval($TYPO3_CONF_VARS["SYS"]["setMemoryLimit"])>16) {
@ini_set('memory_limit',intval($TYPO3_CONF_VARS["SYS"]["setMemoryLimit"]).'m');
}
// Load extensions:
if (TYPO3_MODE=='FE' && is_object($TT)) $TT->push('Loading localconf.php extensions','');
$TYPO3_LOADED_EXT = t3lib_extMgm::typo3_loadExtensions();
......
......@@ -225,7 +225,7 @@ CREATE TABLE sys_log (
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
type tinyint(3) unsigned DEFAULT '0' NOT NULL,
details_nr tinyint(3) unsigned DEFAULT '0' NOT NULL,
IP varchar(15) DEFAULT '' NOT NULL,
IP varchar(39) DEFAULT '' NOT NULL,
log_data tinyblob NOT NULL,
event_pid int(11) DEFAULT '-1' NOT NULL,
NEWid varchar(20) DEFAULT '' NOT NULL,
......
......@@ -108,11 +108,12 @@ class SC_alt_intro {
<h1>%s<br />%s</h1>
<p>%s</p>
<p>&nbsp;</p>
<p>&nbsp;%s</p>
<p>%s</p>',
'TYPO3 '.TYPO3_version,
$LANG->getLL('introtext'),
t3lib_BEfunc::TYPO3_copyRightNotice(),
$this->displayWarningIfPasswordIsDefault(),
$LANG->getLL('introtext2')
);
......@@ -150,6 +151,23 @@ class SC_alt_intro {
function printContent() {
echo $this->content;
}
/**
* Display a warning message if the Install Tool Password is still the default: joh316
* The warning is only displayed to admin users
*
* @return void
*/
function displayWarningIfPasswordIsDefault() {
if($GLOBALS['BE_USER']->isAdmin() && $GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']==md5('joh316')) {
return '&nbsp;</p>
<p class="typo3-red" style="font-weight: bold;">Security warning: The password of your install tool is still "joh316" which is the default.<br />
It is highly recommended to change this immediately.<br />
&nbsp;';
} else {
return '';
}
}
}
// Include extension?
......
......@@ -331,7 +331,7 @@ class fileList extends t3lib_recordList {
// $theData[$field]=t3lib_div::formatSize($theFile[$field]);
break;
case 'rw':
$theData[$field]= (($theFile['readable'])?'':'<span class="typo3-red"><b>R</b></span>').(($theFile['writeable'])?'':'<span class="typo3-red"><b>W</b></span>');
$theData[$field]= (($theFile['readable'])?'':'<span class="typo3-red"><b>R</b></span>').(($theFile['writable'])?'':'<span class="typo3-red"><b>W</b></span>');
break;
case 'fileext':
// $theData[$field]=strtoupper($theFile['fileext']);
......@@ -457,7 +457,7 @@ class fileList extends t3lib_recordList {
$theData[$field]=t3lib_div::formatSize($theFile[$field]);
break;
case 'rw':
$theData[$field]= (($theFile['readable'])?'':'<span class="typo3-red"><b>R</b></span>').(($theFile['writeable'])?'':'<span class="typo3-red"><b>W</b></span>');
$theData[$field]= (($theFile['readable'])?'':'<span class="typo3-red"><b>R</b></span>').(($theFile['writable'])?'':'<span class="typo3-red"><b>W</b></span>');
break;
case 'fileext':
$theData[$field]=strtoupper($theFile[$field]);
......
......@@ -291,8 +291,7 @@ class SC_index {
<td><input type="submit" name="commandLI" value="'.htmlspecialchars($this->L_vars[3]).'" class="c-submit" /></td>
</tr>
<tr class="c-info">
<td></td>
<td><p class="c-info">'.htmlspecialchars($this->L_vars[7]).'</p></td>
<td colspan="2"><p class="c-info">'.htmlspecialchars($this->L_vars[7]).'</p></td>
</tr>
</table>';
......@@ -565,7 +564,7 @@ class SC_index {
}
}
} else { // If no rotation folder configured, print default image:
$loginImage = 'loginbox_image_dev.png';
$loginImage = 'loginimage.jpg';
$imagecopy = $loginImage=='loginbox_image_dev.png' ? 'You are running the CVS version of TYPO3 '.$GLOBALS['TYPO_VERSION'] : 'Photo: &copy; 2004 Kasper Sk&#229;rh&#248;j'; // Directly outputted in image attributes...
$loginboxImage = '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/'.$loginImage,'width="200" height="133"').' id="loginbox-image" alt="'.$imagecopy.'" title="'.$imagecopy.'" />';
}
......
......@@ -3978,7 +3978,8 @@ EXTENSION KEYS:
function decodeServerData($externalData,$stat=array()) {
$parts = explode(':',$externalData,4);
$dat = base64_decode($parts[2]);
if ($parts[0]==md5($dat)) {
// compare hashes ignoring any leading whitespace (This makes it work for some broken .t3x files that have leading white space. See bug #0000365. Thanks to Martin T. Kutschker <Martin-no5pam-Kutschker@blackbox.n0spam.net>)
if (ereg_replace("^[\n\r\t ]+",'',$parts[0])==md5($dat)) {
if ($parts[1]=='gzcompress') {
if ($this->gzcompress) {
$dat = gzuncompress($dat);
......
......@@ -225,7 +225,7 @@ TABLE#typo3-vmenu TR.c-endrow TD {height: 5px;}
TABLE#typo3-vmenu TR.c-first TD {height: 2px;}
TABLE#typo3-vmenu TD.c-subitem-label A { display: block; width: 100%; }
TABLE#typo3-vmenu TR.c-subitem-row { }
TABLE#typo3-vmenu TR.c-subitem-row-HL { background-color: #D9D5C9; }
TABLE#typo3-vmenu TR.c-subitem-row-HL { background-color: #e3dfdb; }
DIV#typo3-alt-menu-php-logininfo { text-align: center; width: 90px; margin-top:15px; margin-bottom: 15px;}
DIV#typo3-alt-menu-php-logininfo P { margin-top:5px; }
......@@ -310,14 +310,12 @@ BODY#typo3-alt-doc-nodoc-php { margin-left: 5px; }
* According to the GPL license an interactive application must show such a notice on start-up ('If the program is interactive, make it output a short notice... ' - see GPL.txt)
* Therefore preventing this notice from being properly shown is a violation of the license, regardless of whether you remove it or use the stylesheet to obstruct the display.
RC1 color: #F2AC56
RC2 color: #8E9D3F / #62731A
Final color: #E09500 / #A34F00
dev color: #444444 / #222222
Color set: #A69E8D / #858585
*/
BODY#typo3-index-php { background-color: white; margin: 0px 0px 0px 0px; }
BODY#typo3-index-php TABLE#wrapper { width: 100%; height: 80%; margin-top: 30px; }
BODY#typo3-index-php TABLE#loginwrapper { width: 100%; background-color: #444444; text-align: left; }
BODY#typo3-index-php TABLE#loginwrapper { width: 100%; background-color: #A69E8D; text-align: left; }
BODY#typo3-index-php DIV#copyrightnotice { width: 70%; text-align: left; margin-top: 10px; }
BODY#typo3-index-php DIV#copyrightnotice IMG { margin-right:5px; margin-bottom:5px; }
BODY#typo3-index-php DIV#loginimage {text-align: right; padding-right: 30px; margin-bottom: 5px;}
......@@ -326,9 +324,9 @@ TABLE#logintable TR TD { padding: 1px 1px 1px 1px;}
TABLE#logintable H2 { background-color: transparent; font-size: 14px; color: white; text-align: left; }
TABLE#logintable P { font-size: 12px; color: white; font-weight: bold; }
TABLE#logintable P.c-info { font-size: 10px; font-weight: normal; }
TABLE#logintable P.c-wrong { font-size: 10px; width: 300px; border: #222222 solid 1px; margin: 5px 0px 5px 0px; padding: 5px 15px 5px 15px; }
TABLE#logintable P.c-wrong { font-size: 10px; width: 300px; border: #858585 solid 1px; margin: 5px 0px 5px 0px; padding: 5px 15px 5px 15px; }
TABLE#logintable INPUT.c-username, TABLE#logintable INPUT.c-password, TABLE#logintable SELECT.c-interfaceselector { width: 150px; }
TABLE#logintable INPUT { border: #222222 solid 1px; background-color: white; }
TABLE#logintable INPUT { border: #858585 solid 1px; background-color: white; }
DIV#loginNews { width: 70%; margin-top: 30px; }
DIV#loginNews H2 { background-color: #E26816; color: white; font-size: 12px; }
......
......@@ -1112,7 +1112,7 @@
if (gettype($code)=='boolean' || !strcmp($code,1)) {
$this->printError('The page did not exist or was inaccessible.'.($reason ? ' Reason: '.htmlspecialchars($reason) : ''));
exit;
} else if (t3lib_div::testInt($code)) {
} elseif (t3lib_div::testInt($code)) {
$this->printError('Error '.$code.($reason ? ' Reason: '.htmlspecialchars($reason) : ''));
exit;
} elseif (t3lib_div::isFirstPartOfStr($code,'READFILE:')) {
......@@ -1122,7 +1122,7 @@
$fileContent = str_replace('###CURRENT_URL###', t3lib_div::getIndpEnv('REQUEST_URI'), $fileContent);
$fileContent = str_replace('###REASON###', htmlspecialchars($reason), $fileContent);
echo $fileContent;
} else {
} else {
$this->printError('Configuration Error: 404 page "'.$readFile.'" could not be found.');
}
exit;
......@@ -1412,7 +1412,7 @@
if(!ereg("^/", $theLogFile)) $theLogFile = PATH_site.$theLogFile;
if ($this->config['config']['stat_apache'] && $this->config['config']['stat_apache_logfile'] && !strstr($this->config['config']['stat_apache_logfile'],'/')) {
if(t3lib_div::isAllowedAbsPath($theLogFile) && @is_file($theLogFile) && @is_writeable($theLogFile)) {
if(t3lib_div::isAllowedAbsPath($theLogFile) && @is_file($theLogFile) && @is_writable($theLogFile)) {
$this->config['stat_vars']['logFile'] = $theLogFile;
$shortTitle = substr(ereg_replace('[^\.[:alnum:]_-]','_',$this->page['title']),0,30);
$pageName = $this->config['config']['stat_apache_pagenames'] ? $this->config['config']['stat_apache_pagenames'] : '[path][title]--[uid].html';
......
......@@ -608,7 +608,7 @@ $GLOBALS['TSFE']->content.='
$GLOBALS['TSFE']->content.='
<title>'.htmlspecialchars($titleTagContent).'</title>';
$GLOBALS['TSFE']->content.='
<meta name="generator" content="TYPO3 3.6 CMS" />';
<meta name="generator" content="TYPO3 3.7 CMS" />';
$conf=$GLOBALS['TSFE']->pSetup['meta.'];
if (is_array($conf)) {
......
......@@ -1037,7 +1037,7 @@ th { font-family: verdana,arial, helvetica, sans-serif; font-size: 10pt; font-we
");
if (!$this->config_array["dir_typo3temp"]) {
$this->message("typo3temp/ directory","typo3temp/ not writeable!","
$this->message("typo3temp/ directory","typo3temp/ not writable!","
You must make typo3temp/ write enabled before you can proceed with this test.
",2);
echo $this->outputWrapper($this->printAll());
......@@ -1661,10 +1661,10 @@ From sub-directory:
$uniqueName = md5(uniqid(microtime()));
// The requirement level (the integer value, ie. the second value of the value array) has the following meanings:
// -1 = not required, but if it exists may be writeable or not
// 0 = not required, if it exists the dir should be writeable
// 1 = required, don't has to be writeable
// 2 = required, has to be writeable
// -1 = not required, but if it exists may be writable or not
// 0 = not required, if it exists the dir should be writable
// 1 = required, don't has to be writable
// 2 = required, has to be writable
$checkWrite=array(
"typo3temp/" => array("The folder is used by both the frontend (FE) and backend interface (TBE) for image manipulated files.",2,"dir_typo3temp"),
......@@ -1711,7 +1711,7 @@ From sub-directory:
if (@is_file($file)) {
unlink($file);
if ($descr[2]) { $this->config_array[$descr[2]]=1; }
$this->message($ext, $relpath." writeable","",-1);
$this->message($ext, $relpath." writable","",-1);
} else {
$severity = ($descr[1]==2 || $descr[1]==0) ? 3 : 2;
if ($descr[1] == 0 || $descr[1] == 2) {
......@@ -1719,7 +1719,7 @@ From sub-directory:
} elseif ($descr[1] == -1 || $descr[1] == 1) {
$msg = "The directory ".$relpath." does not neccesarily have to be writable.";
}
$this->message($ext, $relpath." directory not writeable","
$this->message($ext, $relpath." directory not writable","
<em>Full path: ".$file."</em>
".$general_message."
......@@ -2540,7 +2540,7 @@ From sub-directory:
return;
}
if (!$this->config_array["dir_typo3temp"]) {
$this->message("Image Processing","typo3temp/ not writeable!","
$this->message("Image Processing","typo3temp/ not writable!","
You must make typo3temp/ write enabled before you can proceed with this test.
",2);
echo $this->outputWrapper($this->printAll());
......
......@@ -224,5 +224,4 @@ $SOBE->init();
foreach($SOBE->include_once as $INC_FILE) include_once($INC_FILE);
$SOBE->main();
$SOBE->printContent();
?>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment