diff options
author | Arun Persaud <arun@nubati.net> | 2008-05-10 12:15:35 -0700 |
---|---|---|
committer | Arun Persaud <arun@nubati.net> | 2008-05-10 12:35:20 -0700 |
commit | 880dfb2e715a3770de56fb525f5c90d28a6ccb4c (patch) | |
tree | a96db91d27a2a6e9202902d11a72462192187fca | |
parent | 9239ba22c382383cd258ad3f36b2bc0dc99664b2 (diff) | |
download | e-DoKo-880dfb2e715a3770de56fb525f5c90d28a6ccb4c.tar.gz e-DoKo-880dfb2e715a3770de56fb525f5c90d28a6ccb4c.tar.bz2 e-DoKo-880dfb2e715a3770de56fb525f5c90d28a6ccb4c.zip |
NEW FEATURE: new settings page, user can now change timezone
rewrote the settings page, timezone can now be changed, the user menu
shows up on the left on the pref page. Added a link to the pref-page in the left menu.
Signed-off-by: Arun Persaud <arun@nubati.net>
-rw-r--r-- | include/db.php | 13 | ||||
-rw-r--r-- | include/functions.php | 2 | ||||
-rw-r--r-- | include/output.php | 47 | ||||
-rw-r--r-- | include/preferences.php | 177 | ||||
-rw-r--r-- | include/register.php | 10 | ||||
-rw-r--r-- | include/user.php | 211 | ||||
-rw-r--r-- | index.php | 3 |
7 files changed, 286 insertions, 177 deletions
diff --git a/include/db.php b/include/db.php index a9bdffd..208334f 100644 --- a/include/db.php +++ b/include/db.php @@ -95,6 +95,16 @@ function DB_get_passwd_by_name($name) return ""; } +function DB_get_passwd_by_userid($id) +{ + $r = DB_query_array("SELECT password FROM User WHERE id=".DB_quote_smart($id).""); + + if($r) + return $r[0]; + else + return ""; +} + function DB_check_recovery_passwords($password,$email) { $r = DB_query_array("SELECT User.id FROM User". @@ -673,7 +683,8 @@ function DB_get_PREF($myid) " WHERE user_id='$myid' AND pref_key='cardset'" ); if($r) { - if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */ + /* licence only valid until then */ + if($r[0]=="altenburg" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) $PREF["cardset"]="altenburg"; else $PREF["cardset"]="english"; diff --git a/include/functions.php b/include/functions.php index e60f69f..382b148 100644 --- a/include/functions.php +++ b/include/functions.php @@ -828,6 +828,8 @@ function display_user_menu() echo "<hr /> <a href=\"".$INDEX."?action=new\">Start a new game</a>\n"; + echo "<hr /> <a href=\"".$INDEX."?action=prefs\">Change settings</a>\n"; + echo "<hr /> <a href=\"".$INDEX."?action=stats\">Statistics</a>\n"; echo diff --git a/include/output.php b/include/output.php index 38356dd..397ed64 100644 --- a/include/output.php +++ b/include/output.php @@ -7,31 +7,6 @@ if(!isset($HOST)) /* functions which only ouput html */ -function output_user_settings() -{ - global $PREF; - - echo "<div class=\"useroptions\">\n"; - echo "<h4> Settings </h4>\n"; - echo "<a href=\"index.php?passwd=ask\">Change password</a><br />"; - - echo "<h5> Card set </h5>\n"; - if( $PREF["cardset"] == "english" ) - echo "<a href=\"index.php?setpref=germancards\">Change to German cards</a><br />"; - else - echo "<a href=\"index.php?setpref=englishcards\">Change to English cards</a> <br />"; - - echo "<h5> Email </h5>\n"; - if( $PREF["email"] == "emailaddict" ) - echo "<a href=\"index.php?setpref=emailnonaddict\">Change to non-addicted mode (emails for each move)</a><br />"; - else - echo "<a href=\"index.php?setpref=emailaddict\">Change to addicted mode (minimal amount of emails)</a> <br />"; - - echo "</div>\n"; - - return; -} - function output_ask_for_new_game($playerA,$playerB,$playerC,$playerD,$oldgameid) { global $RULES; @@ -342,6 +317,28 @@ function output_status() return; } +function output_select_timezone($name,$timezone="") +{ + $Tzone = array ( "Europe/London" => "London", + "Europe/Berlin" => "Berlin", + "America/Vancouver" => "Berkeley", + "Pacific/Auckland" => "Wellington" ); + + echo " <select id=\"$name\" name=\"$name\" size=\"1\">\n"; + + foreach($Tzone as $zone=>$city) + { + if($timezone==$zone) + echo " <option value=\"$zone\" selected=\"selected\">$city</option>\n"; + else + echo " <option value=\"$zone\">$city</option>\n"; + } + echo " </select>\n"; + + return; +} + + function output_password_recovery($email,$password) { diff --git a/include/preferences.php b/include/preferences.php new file mode 100644 index 0000000..fdb6a19 --- /dev/null +++ b/include/preferences.php @@ -0,0 +1,177 @@ +<?php +/* make sure that we are not called from outside the scripts, + * use a variable defined in config.php to check this + */ +if(!isset($HOST)) + exit; + +$name = $_SESSION["name"]; +$email = DB_get_email('name',$name); +$myid = DB_get_userid('email',$email); +if(!$myid) + return; + +/* track what got changed */ +$changed_notify = 0; +$changed_password = 0; +$changed_cards = 0; +$changed_timezone = 0; + +output_status(); +display_user_menu(); + +/* get old infos */ +$PREF = DB_get_PREF($myid); +$timezone = DB_get_user_timezone($myid); + +DB_update_user_timestamp($myid); + +/* does the user want to change some preferences? */ +if(myisset("timezone")) + { + $newtimezone=$_REQUEST['timezone']; + if($newtimezone != $timezone) + { + DB_query("UPDATE User SET timezone=".DB_quote_smart($newtimezone). + " WHERE id=".DB_quote_smart($myid)); + $changed_timezone = 1; + } + } + +if(myisset("cards")) + { + $cards=$_REQUEST['cards']; + if($cards != $PREF['cardset']) + { + /* check if we already have an entry for the user, if so change it, if not create new one */ + $result = DB_query("SELECT * from User_Prefs". + " WHERE user_id='$myid' AND pref_key='cardset'" ); + if( DB_fetch_array($result)) + $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($cards). + " WHERE user_id='$myid' AND pref_key='cardset'" ); + else + $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','cardset',". + DB_quote_smart($cards).")"); + $changed_cards = 1; + } + } + +if(myisset("notify")) + { + $notify=$_REQUEST['notify']; + if($notify != $PREF['email']) + { + /* check if we already have an entry for the user, if so change it, if not create new one */ + $result = DB_query("SELECT * from User_Prefs". + " WHERE user_id='$myid' AND pref_key='email'" ); + if( DB_fetch_array($result)) + $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($notify). + " WHERE user_id='$myid' AND pref_key='email'" ); + else + $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','email',". + DB_quote_smart($notify).")"); + $changed_notify=1; + } + } + +if(myisset("password0") && $_REQUEST["password0"]!="" ) + { + $changed_password = 1; + + /* check if old password matches */ + $oldpasswd = md5($_REQUEST["password0"]); + $password = DB_get_passwd_by_userid($myid); + if(!( ($password == $oldpasswd) || DB_check_recovery_passwords($oldpasswd,$email) )) + $changed_password = -1; + + /* check if new passwords are types the same twice */ + if($_REQUEST["password1"] != $_REQUEST["password2"] ) + $changed_password = -2; + + if($changed_password==1) + { + DB_query("UPDATE User SET password='".md5($_REQUEST["password1"]). + "' WHERE id=".DB_quote_smart($myid)); + } + /* error output below */ + } + +/* get infos again in case they have changed */ +$PREF = DB_get_PREF($myid); +$timezone = DB_get_user_timezone($myid); + +/* output settings */ + +echo "<div class=\"user\">\n"; +echo " <form action=\"index.php?action=prefs\" method=\"post\">\n"; +echo " <h2>Your settings are</h2>\n"; +echo " <table>\n"; +echo " <tr><td>Email: </td><td> $email </td></tr>\n"; +echo " <tr><td>Timezone: </td><td>"; +output_select_timezone("timezone",$timezone); +if($changed_timezone) echo "changed"; +echo "</td></tr>\n"; +echo " <tr><td>Notification: </td><td>"; + +echo " <select id=\"notify\" name=\"notify\" size=\"1\">\n"; + if($PREF['email']=="emailaddict") + { + echo " <option value=\"emailaddict\" selected=\"selected\">lots of emails</option>\n"; + echo " <option value=\"emailnonaddict\">less emails</option>\n"; + } + else + { + echo " <option value=\"emailaddict\">lots of email</option>\n"; + echo " <option value=\"emailnonaddict\" selected=\"selected\">less email</option>\n"; + } + echo " </select>\n"; +if($changed_notify) echo "changed"; +echo " </td></tr>\n"; +echo " <tr><td>Card set: </td><td>"; + +echo " <select id=\"cards\" name=\"cards\" size=\"1\">\n"; + if($PREF['cardset']=="altenburg") + { + echo " <option value=\"altenburg\" selected=\"selected\">German cards</option>\n"; + echo " <option value=\"english\">English cards</option>\n"; + } + else + { + echo " <option value=\"altenburg\">German cards</option>\n"; + echo " <option value=\"english\" selected=\"selected\">English cards</option>\n"; + } + echo " </select>\n"; +if($changed_cards) echo "changed"; +echo " </td></tr>\n"; +echo " <tr><td>Password(old): </td><td>", + "<input type=\"password\" id=\"password0\" name=\"password0\" size=\"20\" maxlength=\"30\" />"; +switch($changed_password) + { + case '-2': + echo "The new passwords don't match."; + break; + case '-1': + echo "The old password is not correct."; + break; + case '1': + echo "changed"; + break; + } +echo " </td></tr>\n"; +echo " <tr><td>Password(new): </td><td>", + "<input type=\"password\" id=\"password1\" name=\"password1\" size=\"20\" maxlength=\"30\" />", + " </td></tr>\n"; +echo " <tr><td>Password(new, retype): </td><td>", + "<input type=\"password\" id=\"password2\" name=\"password2\" size=\"20\" maxlength=\"30\" />", + " </td></tr>\n"; +echo " <tr><td><input type=\"submit\" class=\"submitbutton\" name=\"passwd\" value=\"set\" /></td>", + "<td></td></tr>\n"; +echo " </table>\n"; +echo " </form>\n"; +echo "</div>\n"; + +output_footer(); +DB_close(); +exit(); + +?>
\ No newline at end of file diff --git a/include/register.php b/include/register.php index 0dc204d..03be803 100644 --- a/include/register.php +++ b/include/register.php @@ -63,13 +63,9 @@ if(myisset("Rfullname","Remail","Rpassword","Rtimezone") ) </tr><tr> <td><label for="Rtimezone">Timezone:</label></td> <td> - <select id="Rtimezone" name="Rtimezone" size="1"> - <option value="Europe/London">Berlin</option> - <option value="Europe/Berlin">Berlin</option> - <option value="America/Vancouver">Berkeley</option> - <option value="Pacific/Auckland">Wellington</option> - </select> - (If your timezone is not listed, just select whatever you want and email the admin your correct time zone.) +<?php + output_select_timezone("Rtimezone"); +?> </td> </tr><tr> <td colspan="2"> <input type="submit" value="register" /></td> diff --git a/include/user.php b/include/user.php index 00426aa..7e8ef9e 100644 --- a/include/user.php +++ b/include/user.php @@ -84,7 +84,6 @@ if(myisset("forgot")) else { /* normal user page */ - /* verify password and email */ if(strlen($password)!=32) $password = md5($password); @@ -103,162 +102,86 @@ if(myisset("forgot")) $PREF = DB_get_PREF($myid); - /* does the user want to change some preferences? */ - if(myisset("setpref")) + DB_update_user_timestamp($myid); + + display_user_menu(); + + /* display all games the user has played */ + echo "<div class=\"user\">"; + echo "<h4>These are all your games:</h4>\n"; + echo "<p>Session: <br />\n"; + echo "<span class=\"gamestatuspre\"> p </span> = pre-game phase "; + echo "<span class=\"gamestatusplay\">P </span> = game in progess "; + echo "<span class=\"gamestatusover\">F </span> = game finished <br />"; + echo "</p>\n"; + + $output = array(); + $result = DB_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player,Game.status from Hand". + " LEFT JOIN Game ON Game.id=Hand.game_id". + " WHERE user_id='$myid'". + " ORDER BY Game.session,Game.create_date" ); + $gamenrold = -1; + echo "<table>\n <tr><td>\n"; + while( $r = DB_fetch_array($result)) { - $setpref=$_REQUEST["setpref"]; - switch($setpref) + $game = DB_format_gameid($r[1]); + $gamenr = (int) $game; + if($gamenrold < $gamenr) { - case "germancards": - case "englishcards": - $result = DB_query("SELECT * from User_Prefs". - " WHERE user_id='$myid' AND pref_key='cardset'" ); - if( DB_fetch_array($result)) - $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref). - " WHERE user_id='$myid' AND pref_key='cardset'" ); - else - $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','cardset',". - DB_quote_smart($setpref).")"); - echo "Ok, changed you preferences for the cards.\n"; - break; - case "emailaddict": - case "emailnonaddict": - $result = DB_query("SELECT * from User_Prefs". - " WHERE user_id='$myid' AND pref_key='email'" ); - if( DB_fetch_array($result)) - $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref). - " WHERE user_id='$myid' AND pref_key='email'" ); + if($gamenrold!=-1) + echo "</td></tr>\n <tr> <td>$gamenr:</td><td> "; else - $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','email',". - DB_quote_smart($setpref).")"); - echo "Ok, changed you preferences for sending out emails.\n"; - break; + echo "$gamenr:</td><td> "; + $gamenrold = $gamenr; } - } - /* user wants to change his password or request a temporary one */ - else if(myisset("passwd")) - { - if( $_REQUEST["passwd"]=="ask" ) + if($r[4]=='pre') { - /* reset password form*/ - output_password_recovery($email,$password); + echo "\n <span class=\"gamestatuspre\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">p </a></span> "; + } - else if($_REQUEST["passwd"]=="set") + else if ($r[4]=='gameover') + echo "\n <span class=\"gamestatusover\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">F </a></span> "; + else { - /* reset password */ - $ok = 1; - - /* check if old password matches */ - $oldpasswd = md5($_REQUEST["password0"]); - if(!( ($password == $oldpasswd) || DB_check_recovery_passwords($oldpasswd,$email) )) - $ok = -1; - /* check if new passwords are types the same twice */ - if($_REQUEST["password1"] != $_REQUEST["password2"] ) - $ok = -2; - - switch($ok) - { - case '-2': - echo "The new passwords don't match. <br />"; - break; - case '-1': - echo "The old password is not correct. <br />"; - break; - case '1': - echo "Changed the password.<br />"; - DB_query("UPDATE User SET password='".md5($_REQUEST["password1"]). - "' WHERE id=".DB_quote_smart($myid)); - break; - } - /* set password */ + echo "\n <span class=\"gamestatusplay\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">P </a></span> "; } - } - else /* output default user page */ - { - /* display links to settings */ - output_user_settings(); - - DB_update_user_timestamp($myid); - - display_user_menu(); - - /* display all games the user has played */ - echo "<div class=\"user\">"; - echo "<h4>These are all your games:</h4>\n"; - echo "<p>Session: <br />\n"; - echo "<span class=\"gamestatuspre\"> p </span> = pre-game phase "; - echo "<span class=\"gamestatusplay\">P </span> = game in progess "; - echo "<span class=\"gamestatusover\">F </span> = game finished <br />"; - echo "</p>\n"; - - $output = array(); - $result = DB_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player,Game.status from Hand". - " LEFT JOIN Game ON Game.id=Hand.game_id". - " WHERE user_id='$myid'". - " ORDER BY Game.session,Game.create_date" ); - $gamenrold = -1; - echo "<table>\n <tr><td>\n"; - while( $r = DB_fetch_array($result)) + if($r[4] != 'gameover') { - $game = DB_format_gameid($r[1]); - $gamenr = (int) $game; - if($gamenrold < $gamenr) - { - if($gamenrold!=-1) - echo "</td></tr>\n <tr> <td>$gamenr:</td><td> "; - else - echo "$gamenr:</td><td> "; - $gamenrold = $gamenr; - } - if($r[4]=='pre') - { - echo "\n <span class=\"gamestatuspre\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">p </a></span> "; - - } - else if ($r[4]=='gameover') - echo "\n <span class=\"gamestatusover\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">F </a></span> "; + echo "</td><td>\n "; + if($r[3]==$myid || !$r[3]) + echo "(it's <strong>your</strong> turn)\n"; else { - echo "\n <span class=\"gamestatusplay\"><a href=\"".$INDEX."?action=game&me=".$r[0]."\">P </a></span> "; - } - if($r[4] != 'gameover') - { - echo "</td><td>\n "; - if($r[3]==$myid || !$r[3]) - echo "(it's <strong>your</strong> turn)\n"; - else - { - $name = DB_get_name('userid',$r[3]); - $gameid = $r[1]; - if(DB_get_reminder($r[3],$gameid)==0) - if(time()-strtotime($r[2]) > 60*60*24*7) - echo "". - "<a href=\"$INDEX?action=reminder&me=".$r[0]."\">Send a reminder.</a>"; - echo "(it's $name's turn)\n"; - }; - if(time()-strtotime($r[2]) > 60*60*24*30) - echo "". - "<a href=\"$INDEX?action=cancel&me=".$r[0]."\">Cancel?</a>". - " (clicking here is final and can't be restored)"; - - } + $name = DB_get_name('userid',$r[3]); + $gameid = $r[1]; + if(DB_get_reminder($r[3],$gameid)==0) + if(time()-strtotime($r[2]) > 60*60*24*7) + echo "". + "<a href=\"$INDEX?action=reminder&me=".$r[0]."\">Send a reminder.</a>"; + echo "(it's $name's turn)\n"; + }; + if(time()-strtotime($r[2]) > 60*60*24*30) + echo "". + "<a href=\"$INDEX?action=cancel&me=".$r[0]."\">Cancel?</a>". + " (clicking here is final and can't be restored)"; + } - echo "</td></tr>\n</table>\n"; - - /* display last 5 users that have signed up to e-DoKo */ - $names = DB_get_names_of_new_logins(5); - echo "<h4>New Players:</h4>\n<p>\n"; - echo implode(", ",$names).",...\n"; - echo "</p>\n"; - - /* display last 5 users that logged on */ - $names = DB_get_names_of_last_logins(5); - echo "<h4>Players last logged in:</h4>\n<p>\n"; - echo implode(", ",$names).",...\n"; - echo "</p>\n"; - - echo "</div>\n"; } + echo "</td></tr>\n</table>\n"; + + /* display last 5 users that have signed up to e-DoKo */ + $names = DB_get_names_of_new_logins(5); + echo "<h4>New Players:</h4>\n<p>\n"; + echo implode(", ",$names).",...\n"; + echo "</p>\n"; + + /* display last 5 users that logged on */ + $names = DB_get_names_of_last_logins(5); + echo "<h4>Players last logged in:</h4>\n<p>\n"; + echo implode(", ",$names).",...\n"; + echo "</p>\n"; + + echo "</div>\n"; } else { @@ -62,6 +62,9 @@ switch($action) case 'register': require './include/register.php'; break; + case 'prefs': + require './include/preferences.php'; + break; case 'game': require './include/game.php'; break; |