322 lines
11 KiB
PHP
322 lines
11 KiB
PHP
|
<?php
|
|||
|
// addnews ready
|
|||
|
// mail ready
|
|||
|
// translator ready
|
|||
|
|
|||
|
require_once("lib/http.php");
|
|||
|
|
|||
|
$skin = httppost('template');
|
|||
|
if ($skin > "") {
|
|||
|
setcookie("template",$skin,strtotime("+45 days"));
|
|||
|
$_COOKIE['template']=$skin;
|
|||
|
}
|
|||
|
|
|||
|
require_once("lib/villagenav.php");
|
|||
|
require_once("common.php");
|
|||
|
|
|||
|
tlschema("prefs");
|
|||
|
|
|||
|
require_once("lib/is_email.php");
|
|||
|
require_once("lib/showform.php");
|
|||
|
require_once("lib/sanitize.php");
|
|||
|
|
|||
|
page_header("Preferences");
|
|||
|
|
|||
|
$op = httpget('op');
|
|||
|
|
|||
|
if ($op=="suicide" && getsetting("selfdelete",0)!=0) {
|
|||
|
$userid = httpget('userid');
|
|||
|
require_once("lib/charcleanup.php");
|
|||
|
char_cleanup($userid, CHAR_DELETE_SUICIDE);
|
|||
|
$sql = "DELETE FROM " . db_prefix("accounts") . " WHERE acctid='$userid'";
|
|||
|
db_query($sql);
|
|||
|
output("Your character has been deleted!");
|
|||
|
addnews("`#%s quietly passed from this world.",$session['user']['name']);
|
|||
|
addnav("Login Page", "index.php");
|
|||
|
$session=array();
|
|||
|
$session['user'] = array();
|
|||
|
$session['loggedin'] = false;
|
|||
|
$session['user']['loggedin'] = false;
|
|||
|
invalidatedatacache("charlisthomepage");
|
|||
|
invalidatedatacache("list.php-warsonline");
|
|||
|
} else {
|
|||
|
|
|||
|
checkday();
|
|||
|
if ($session['user']['alive']){
|
|||
|
villagenav();
|
|||
|
}else{
|
|||
|
addnav("Return to the news","news.php");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
$oldvalues = stripslashes(httppost('oldvalues'));
|
|||
|
$oldvalues = unserialize($oldvalues);
|
|||
|
|
|||
|
$post = httpallpost();
|
|||
|
unset($post['oldvalues']);
|
|||
|
|
|||
|
if (count($post)==0){
|
|||
|
}else{
|
|||
|
$pass1 = httppost('pass1');
|
|||
|
$pass2 = httppost('pass2');
|
|||
|
if ($pass1!=$pass2){
|
|||
|
output("`#Your passwords do not match.`n");
|
|||
|
}else{
|
|||
|
if ($pass1!=""){
|
|||
|
if (strlen($pass1)>3){
|
|||
|
if (substr($pass1,0,5)!="!md5!"){
|
|||
|
$pass1 = md5(md5($pass1));
|
|||
|
}else{
|
|||
|
$pass1 = md5(substr($pass1,5));
|
|||
|
}
|
|||
|
$session['user']['password']=$pass1;
|
|||
|
output("`#Your password has been changed.`n");
|
|||
|
}else{
|
|||
|
output("`#Your password is too short.");
|
|||
|
output("It must be at least 4 characters.`n");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
reset($post);
|
|||
|
$nonsettings = array(
|
|||
|
"pass1"=>1,
|
|||
|
"pass2"=>1,
|
|||
|
"email"=>1,
|
|||
|
"template"=>1,
|
|||
|
"bio"=>1
|
|||
|
);
|
|||
|
foreach($post as $key=>$val){
|
|||
|
// If this is one we don't save, skip
|
|||
|
if (isset($nonsettings[$key]) && $nonsettings[$key]) continue;
|
|||
|
if (isset($oldvalues[$key]) &&
|
|||
|
stripslashes($val) == $oldvalues[$key]) continue;
|
|||
|
// If this is a module userpref handle and skip
|
|||
|
debug("Setting $key to $val");
|
|||
|
if (strstr($key, "___")) {
|
|||
|
if (strpos($key, 'user_') === false && strpos($key, 'check_') === false) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
$val = httppost($key);
|
|||
|
$x = explode("___", $key);
|
|||
|
$module = $x[0];
|
|||
|
$key = $x[1];
|
|||
|
modulehook("notifyuserprefchange",
|
|||
|
array("name"=>$key,
|
|||
|
"old"=>$oldvalues[$module."___".$key],
|
|||
|
"new"=>$val));
|
|||
|
set_module_pref($key, $val, $module);
|
|||
|
continue;
|
|||
|
}
|
|||
|
$session['user']['prefs'][$key]=httppost($key);
|
|||
|
}
|
|||
|
$bio = stripslashes(httppost('bio'));
|
|||
|
$bio = comment_sanitize($bio);
|
|||
|
if ($bio!=comment_sanitize($session['user']['bio'])){
|
|||
|
if ($session['user']['biotime']>"9000-01-01") {
|
|||
|
output("`\$You cannot modify your bio.");
|
|||
|
output("It has been blocked by the administrators!`0`n");
|
|||
|
}else{
|
|||
|
$session['user']['bio']=$bio;
|
|||
|
$session['user']['biotime']=date("Y-m-d H:i:s");
|
|||
|
}
|
|||
|
}
|
|||
|
$email = httppost('email');
|
|||
|
if ($email!=$session['user']['emailaddress']){
|
|||
|
if (is_email($email)){
|
|||
|
if (getsetting("requirevalidemail",0)==1){
|
|||
|
output("`#Your email cannot be changed, system settings prohibit it.");
|
|||
|
output("(Emails may only be changed if the server allows more than one account per email.)");
|
|||
|
output("Use the Petition link to ask the server administrator to change your email address if this one is no longer valid.`n");
|
|||
|
}else{
|
|||
|
output("`#Your email address has been changed.`n");
|
|||
|
$session['user']['emailaddress']=$email;
|
|||
|
}
|
|||
|
}else{
|
|||
|
if (getsetting("requireemail",0)==1){
|
|||
|
output("`#That is not a valid email address.`n");
|
|||
|
}else{
|
|||
|
output("`#Your email address has been changed.`n");
|
|||
|
$session['user']['emailaddress']=$email;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
output("Settings Saved");
|
|||
|
}
|
|||
|
|
|||
|
if (!isset($session['user']['prefs']['timeformat'])) $session['user']['prefs']['timeformat'] = "[m/d h:ia]";
|
|||
|
|
|||
|
$form=array(
|
|||
|
"Account Preferences,title",
|
|||
|
"pass1"=>"Password,password",
|
|||
|
"pass2"=>"Retype,password",
|
|||
|
"email"=>"Email Address",
|
|||
|
"Display Preferences,title",
|
|||
|
"template"=>"Skin,theme",
|
|||
|
"language"=>"Language,enum,".getsetting("serverlanguages","en,English,de,Deutsch,fr,Fran<61>ais,dk,Danish,es,Espa<70>ol,it,Italian"),
|
|||
|
"tabconfig"=>"Show config sections in tabs,bool",
|
|||
|
"Game Behavior Preferences,title",
|
|||
|
"emailonmail"=>"Send email when you get new Ye Olde Mail?,bool",
|
|||
|
"systemmail"=>"Send email for system generated messages?,bool",
|
|||
|
"dirtyemail"=>"Allow profanity in received Ye Olde Poste messages?,bool",
|
|||
|
"timestamp"=>"Show timestamps in commentary?,enum,0,None,1,Real Time [12/25 1:27pm],2,Relative Time (1h35m)",
|
|||
|
"timeformat"=>array("Timestamp format (currently displaying time as %s whereas default format is \"[m/d h:ia]\"),string,20",
|
|||
|
date($session['user']['prefs']['timeformat'],
|
|||
|
strtotime("now") + ($session['user']['prefs']['timeoffset'] * 60 * 60))),
|
|||
|
"timeoffset"=>array("Hours to offset time displays (%s currently displays as %s)?,int",
|
|||
|
date($session['user']['prefs']['timeformat']),
|
|||
|
date($session['user']['prefs']['timeformat'],
|
|||
|
strtotime("now") + ($session['user']['prefs']['timeoffset'] * 60 * 60))),
|
|||
|
"ihavenocheer"=>"`0Always disable all holiday related text replacements (such as a`1`0l`1`0e => e`1`0g`1`0g n`1`0o`1`0g for December),bool",
|
|||
|
"bio"=>"Short Character Biography (255 chars max),string,255",
|
|||
|
"nojump"=>"Don't jump to comment areas after refreshing or posting a comment?,bool",
|
|||
|
);
|
|||
|
rawoutput("<script language='JavaScript' src='lib/md5.js'></script>");
|
|||
|
$warn = translate_inline("Your password is too short. It must be at least 4 characters long.");
|
|||
|
rawoutput("<script language='JavaScript'>
|
|||
|
<!--
|
|||
|
function md5pass(){
|
|||
|
//encode passwords before submission to protect them even from network sniffing attacks.
|
|||
|
var passbox = document.getElementById('pass1');
|
|||
|
if (passbox.value.len < 4 && passbox.value.len > 0){
|
|||
|
alert('$warn');
|
|||
|
return false;
|
|||
|
}else{
|
|||
|
var passbox2 = document.getElementById('pass2');
|
|||
|
if (passbox2.value.substring(0, 5) != '!md5!') {
|
|||
|
passbox2.value = '!md5!' + hex_md5(passbox2.value);
|
|||
|
}
|
|||
|
if (passbox.value.substring(0, 5) != '!md5!') {
|
|||
|
passbox.value = '!md5!' + hex_md5(passbox.value);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
//-->
|
|||
|
</script>");
|
|||
|
//
|
|||
|
$prefs = $session['user']['prefs'];
|
|||
|
$prefs['bio'] = $session['user']['bio'];
|
|||
|
$prefs['template'] = $_COOKIE['template'];
|
|||
|
if ($prefs['template'] == "")
|
|||
|
$prefs['template'] = getsetting("defaultskin", "jade.htm");
|
|||
|
$prefs['email'] = $session['user']['emailaddress'];
|
|||
|
// Default tabbed config to true
|
|||
|
if (!isset($prefs['tabconfig'])) $prefs['tabconfig'] = 1;
|
|||
|
|
|||
|
// Okay, allow modules to add prefs one at a time.
|
|||
|
// We are going to do it this way to *ensure* that modules don't conflict
|
|||
|
// in namespace.
|
|||
|
$sql = "SELECT modulename FROM " . db_prefix("modules") . " WHERE infokeys LIKE '%|prefs|%' AND active=1 ORDER BY modulename";
|
|||
|
$result = db_query($sql);
|
|||
|
$everfound = 0;
|
|||
|
$foundmodules = array();
|
|||
|
$msettings = array();
|
|||
|
$mdata = array();
|
|||
|
while ($row = db_fetch_assoc($result)) {
|
|||
|
$module = $row['modulename'];
|
|||
|
$info = get_module_info($module);
|
|||
|
if (count($info['prefs']) <= 0) continue;
|
|||
|
$tempsettings = array();
|
|||
|
$tempdata = array();
|
|||
|
$found = 0;
|
|||
|
while (list($key, $val) = each($info['prefs'])) {
|
|||
|
$isuser = preg_match("/^user_/", $key);
|
|||
|
$ischeck = preg_match("/^check_/", $key);
|
|||
|
|
|||
|
if (is_array($val)) {
|
|||
|
$v = $val[0];
|
|||
|
$x = explode("|", $v);
|
|||
|
$val[0] = $x[0];
|
|||
|
$x[0] = $val;
|
|||
|
} else {
|
|||
|
$x = explode("|", $val);
|
|||
|
}
|
|||
|
|
|||
|
if(is_array($x[0])) $x[0] = call_user_func_array('sprintf', $x[0]);
|
|||
|
//$type = split(",", $x[0]);
|
|||
|
$type = explode(",", $x[0]);
|
|||
|
if (isset($type[1])) $type = trim($type[1]);
|
|||
|
else $type = "string";
|
|||
|
|
|||
|
// Okay, if we have a title section, let's copy over the last
|
|||
|
// title section
|
|||
|
if (strstr($type, "title")) {
|
|||
|
if ($found) {
|
|||
|
$everfound = 1;
|
|||
|
$found = 0;
|
|||
|
$msettings = array_merge($msettings, $tempsettings);
|
|||
|
$mdata = array_merge($mdata, $tempdata);
|
|||
|
}
|
|||
|
$tempsettings = array();
|
|||
|
$tempdata = array();
|
|||
|
}
|
|||
|
|
|||
|
if (!$isuser && !$ischeck && !strstr($type,"title") &&
|
|||
|
!strstr($type, "note"))
|
|||
|
continue;
|
|||
|
if ($isuser) {
|
|||
|
$found = 1;
|
|||
|
}
|
|||
|
// If this is a check preference, we need to call the modulehook
|
|||
|
// checkuserpref (requested by cortalUX)
|
|||
|
if ($ischeck) {
|
|||
|
$args = modulehook("checkuserpref",
|
|||
|
array("name"=>$key, "pref"=>$x[0], "default"=>$x[1]),
|
|||
|
false, $module);
|
|||
|
if (isset($args['allow']) && !$args['allow']) continue;
|
|||
|
$x[0] = $args['pref'];
|
|||
|
$x[1] = $args['default'];
|
|||
|
$found = 1;
|
|||
|
}
|
|||
|
|
|||
|
$tempsettings[$module."___".$key] = $x[0];
|
|||
|
if (array_key_exists(1, $x)) {
|
|||
|
$tempdata[$module."___".$key] = $x[1];
|
|||
|
}
|
|||
|
}
|
|||
|
if($found) {
|
|||
|
$msettings = array_merge($msettings, $tempsettings);
|
|||
|
$mdata = array_merge($mdata, $tempdata);
|
|||
|
$everfound = 1;
|
|||
|
}
|
|||
|
|
|||
|
// If we found a user editable one
|
|||
|
if ($everfound) {
|
|||
|
// Collect the values
|
|||
|
$foundmodules[]=$module;
|
|||
|
}
|
|||
|
}
|
|||
|
if ($foundmodules!=array()) {
|
|||
|
$sql = "SELECT * FROM " . db_prefix("module_userprefs") . " WHERE modulename IN ('".implode("','",$foundmodules)."') AND (setting LIKE 'user_%' OR setting LIKE 'check_%') AND userid='".$session['user']['acctid']."'";
|
|||
|
$result1 = db_query($sql);
|
|||
|
while($row1 = db_fetch_assoc($result1)) {
|
|||
|
$mdata[$row1['modulename']."___".$row1['setting']] = $row1['value'];
|
|||
|
}
|
|||
|
}
|
|||
|
addnav('View Bio','bio.php?char='.$session['user']['acctid'].'&ret='.urlencode($_SERVER['REQUEST_URI']));
|
|||
|
|
|||
|
$form = array_merge($form, $msettings);
|
|||
|
$prefs = array_merge($prefs, $mdata);
|
|||
|
rawoutput("<form action='prefs.php?op=save' method='POST' onSubmit='return(md5pass)'>");
|
|||
|
$info = showform($form,$prefs);
|
|||
|
rawoutput("<input type='hidden' value=\"" .
|
|||
|
htmlentities(serialize($info), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))."\" name='oldvalues'>");
|
|||
|
|
|||
|
rawoutput("</form><br />");
|
|||
|
addnav("","prefs.php?op=save");
|
|||
|
|
|||
|
// Stop clueless lusers from deleting their character just because a
|
|||
|
// monster killed them.
|
|||
|
if ($session['user']['alive'] && getsetting("selfdelete",0)!=0) {
|
|||
|
rawoutput("<form action='prefs.php?op=suicide&userid={$session['user']['acctid']}' method='POST'>");
|
|||
|
$deltext = translate_inline("Delete Character");
|
|||
|
$conf = translate_inline("Are you sure you wish to delete your character?");
|
|||
|
rawoutput("<table class='noborder' width='100%'><tr><td width='100%'></td><td style='background-color:#FF00FF' align='right'>");
|
|||
|
rawoutput("<input type='submit' class='button' value='$deltext' onClick='return confirm(\"$conf\");'>");
|
|||
|
rawoutput("</td></tr></table>");
|
|||
|
rawoutput("</form>");
|
|||
|
addnav("","prefs.php?op=suicide&userid={$session['user']['acctid']}");
|
|||
|
}
|
|||
|
}
|
|||
|
page_footer();
|
|||
|
?>
|