sub upgrade43 {
	
	# Since this is the first version of SimpleForum to support built-in upgrades
	# we need to perform all the former upgrades to SimpleForum
	
	# sf lite -> pro
	&upgrade_topics;
	&upgrade_forum_dirs;
	&upgrade_reset_statistics;
	&upgrade_modify_attachments_url;
	&set_admin_account;
	
	# sf 4.0 -> 4.2
	&fix_occupation_bug;
	
	# sf 4.2 -> 4.3
	# Create config dir
	$config_dir = "$simpleforum_dir/config";
	if (!-e $config_dir) {mkdir($config_dir,0777) or return("Couldn't create the config directory $config_dir: $!");}
	else { unlink "$simpleforum_dir/stats.sf"; }
	
	# Move conf files to config dir
	@config_files = (	"simpleforum.conf",
						"banned.sf",
						"forum_agreement.sf",
						"forum_index.conf",
						"custom_header.sf",
						"custom_footer.sf",
						"viewcount.sf",
						"stats.sf");
	foreach $config_file (@config_files) {
		if (-e "$simpleforum_dir/$config_file") {
			rename("$simpleforum_dir/$config_file","$config_dir/$config_file");
		}
	}
	
	unlink "$simpleforum_dir/blocked_ips.conf";
	return "successful";
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

sub upgrade_topics {
	open_dir($simpleforum_dir);
	@simpleforum_dir_contents = @files;
	foreach $simpleforum_dir_content(@simpleforum_dir_contents) {
		if ($simpleforum_dir_content =~ /^forum_(\d*)$/s) {
			push @forum_dirs, $simpleforum_dir_content;
		}
	}
	foreach $forum_dir(@forum_dirs) {
		@files = ();
		open_dir("$simpleforum_dir/$forum_dir");
		@forum_dir_contents = @files;
		foreach $forum_dir_content(@forum_dir_contents) {
			if ($forum_dir_content =~ /^(\d*)\.topic$/s) {
				$changed = 1;
				open(TOPIC, "+>> $simpleforum_dir/$forum_dir/$forum_dir_content") or die "open $simpleforum_dir/$forum_dir/$forum_dir_content: $!";
				flock TOPIC, 2;
				seek TOPIC, 0, 0;
				$topic_content = join '', <TOPIC>;
				truncate TOPIC, 0;
				$topic_content =~ s/<br>\n/\n/sg;
				print TOPIC $topic_content;
				close TOPIC;
			}
		}
	}
}

sub upgrade_forum_dirs {
	for ($i = 1;$i < 10; $i++) {
		rename("$simpleforum_dir/forum_$i","$simpleforum_dir/forum_0$i"); 
	}
}

sub upgrade_reset_statistics {
	if (-e "$simpleforum_dir/stats.sf") {
			open(STATS, "< $simpleforum_dir/stats.sf");
				$stats_content = join '',<STATS>;
			close STATS;
			if ($stats_content =~ /<usr_amount>(\d*)<\/usr_amount>/s) {
				$usr_amount = $1;
			}
	}
	
	open_dir($simpleforum_dir);
	@sffiles = @files;
	foreach $sffile(@sffiles) {
		if ($sffile =~ /forum_(\d*)$/s) {
			open_dir("$simpleforum_dir/$sffile");
			@topics = @files;
			foreach $topic(@topics) {
				if ($topic =~ /(\d*).topic/s) {
					$tpc_amount++;
					open(TPC, "< $simpleforum_dir/$sffile/$topic") or dienice("Couldn't open topic: $!");
					$tpc_content = join '', <TPC>;
					while ($tpc_content =~ /<post>.*?<\/post>/sg) {
						$msg_amount++;
					}
					close TPC;
				}
			}
		}
	}
	if (!$usr_amount) { $usr_amount = 1; }
	if (!$tpc_amount) { $tpc_amount = 0; }
	if (!$msg_amount) { $msg_amount = 0; }
	open(STATS, "> $simpleforum_dir/stats.sf") or dienice("Couldn't create statistics file: $!");
	flock STATS, 2;
	print STATS <<STATS_CONTENT;
<tpc_amount>$tpc_amount</tpc_amount>
<msg_amount>$msg_amount</msg_amount>
<usr_amount>$usr_amount<\/usr_amount>
STATS_CONTENT
	close STATS;
}

sub upgrade_modify_attachments_url {
	if (!-e "$simpleforum_dir/simpleforum.conf") { return; }
	open(CONFIG, "+>> $simpleforum_dir/simpleforum.conf") or dienice("Couldn't open the simpleforum.conf file: $!");
	flock CONFIG, 2;
	seek CONFIG, 0, 0;
	$config_content = join '', <CONFIG>;
	seek CONFIG, 0, 0;
	truncate CONFIG, 0;
	$config_content =~ s/attachments_url:\/\/(.*?)\n/attachments_url:http:\/\/$1\n/s;
	print CONFIG $config_content;
	close CONFIG;
}

sub set_admin_account {
	# will set the admin account if none is present
	if (!-e "$simpleforum_dir/simpleforum.conf") { return; }
	open (CONF, "+>> $simpleforum_dir/simpleforum.conf");
	flock CONF, 2;
	seek CONF, 0, 0;
	$conf_content = join '', <CONF>;
	seek CONF, 0, 0;
	truncate CONF, 0;
	if ($conf_content =~ /admin_password\:.*?\n/s) {
		$conf_content =~ s/admin_password\:.*?\n/admin_account\:unknown_admin\n/s;
	}
	print CONF $conf_content;
	close CONF;
}

sub fix_occupation_bug {
	if (-e "$simpleforum_dir/users") {
		open_dir("$simpleforum_dir/users/");
		foreach $file(@files) {
			if ($file =~ /^.*?\.prf$/) {
				open(PRF, "+>> $simpleforum_dir/users/$file") or dienice("Failed to open a profile: $!");
				flock PRF, 2;
				seek PRF, 0, 0;
				$prf_content = join '', <PRF>;
				seek PRF, 0, 0;
				truncate PRF, 0;
				if ($prf_content =~ /<\/user_website><user_occupation>/sg) {
					$prf_content =~ s/<\/user_website><user_occupation>/<\/user_website>\n<user_occupation>/sg;
				}
				print PRF $prf_content;
				close PRF;
			}
		}
	}
}

1;