CLEANUP: reduced emails at the end of the game
[e-DoKo.git] / include / user.php
1 <?php
2 /* make sure that we are not called from outside the scripts,
3  * use a variable defined in config.php to check this
4  */
5 if(!isset($HOST))
6   exit;
7
8 /* test id and password, should really be done in one step */
9 if(!isset($_SESSION["name"]))
10   {
11     $email     = $_REQUEST["email"];
12     $password  = $_REQUEST["password"];
13   }
14 else
15   {
16     $name = $_SESSION["name"];
17     $email     = DB_get_email('name',$name);
18     $password  = DB_get_passwd_by_name($name);
19   };
20
21 /* user has forgotten his password */
22 if(myisset("forgot"))
23   {
24     /* check if player is in the database */
25     $ok = 1;
26
27     $myid = DB_get_userid('email',$email);
28     if(!$myid)
29       $ok = 0;
30
31     if($ok)
32       {
33         /* check how many entries in recovery table */
34         $number = DB_get_number_of_passwords_recovery($myid);
35
36         /* if less than N recent ones, add a new one and send out email */
37         if( $number < 5 )
38           {
39             echo "Ok, I send you a new password. <br />";
40             if($number >1)
41               echo "N.B. You tried this already $number times during the last day and it will only work ".
42                 " 5 times during a day.<br />";
43             echo "The new password will be valid for one day, make sure you reset it to something else.<br />";
44             echo "Back to the  <a href=\"$INDEX\">main page</a>.";
45
46             /* create temporary password, use the fist 8 letters of a md5 hash */
47             $TIME  = (string) time(); /* to avoid collisions */
48             $hash  = md5("Anewpassword".$email.$TIME);
49             $newpw = substr($hash,1,8);
50
51             $message = "Someone (hopefully you) requested a new password. \n".
52               "You can use this email and the following password: \n".
53               "   $newpw    \n".
54               "to log into the server. The new password is valid for 24h, so make\n".
55               "sure you reset your password to something new. Your old password will\n".
56               " also still be valid until you set a new one\n";
57             mymail($email,$EmailName."recovery ",$message);
58
59             /* we save these in the database */
60             DB_set_recovery_password($myid,md5($newpw));
61           }
62         else
63           {
64             /* make it so that people (or a robot) can request thousands of passwords within a short time
65              * and spam a user this way */
66             echo "Sorry you already tried 5 times during the last 24h.<br />".
67               "You need to use one of those passwords or wait to get a new one.<br />";
68             echo "Back to the <a href=\"$INDEX\">main page</a>.";
69           }
70       }
71     else
72       {/* can't find user id in the database */
73
74         /* no email given? */
75         if($email=="")
76           echo "You need to give me an email address! <br />".
77             "Please try <a href=\"$INDEX\">again</a>.";
78         else /* default error message */
79           echo "Couldn't find a player with this email! <br />".
80             "Please contact Arun, if you think this is a mistake <br />".
81             "or else try <a href=\"$INDEX\">again</a>.";
82       }
83   }
84 else
85   { /* normal user page */
86
87     /* verify password and email */
88     if(strlen($password)!=32)
89       $password = md5($password);
90
91     $ok  = 1;
92     $myid = DB_get_userid('email-password',$email,$password);
93     if(!$myid)
94       $ok = 0;
95
96     if($ok)
97       {
98         /* user information is ok */
99         $myname = DB_get_name('email',$email);
100         $_SESSION["name"] = $myname;
101
102         $PREF = DB_get_PREF($myid);
103
104         DB_update_user_timestamp($myid);
105
106         display_user_menu();
107
108         /* display all games the user has played */
109         echo "<div class=\"user\">";
110         echo "<h4>These are all your games:</h4>\n";
111         echo "<p>Session: <br />\n";
112         echo "<span class=\"gamestatuspre\"> p </span> =  pre-game phase ";
113         echo "<span class=\"gamestatusplay\">P </span> =  game in progess ";
114         echo "<span class=\"gamestatusover\">F </span> =  game finished <br />";
115         echo "</p>\n";
116
117         $output = array();
118         $result = DB_query("SELECT Hand.hash,Hand.game_id,G.mod_date,G.player,G.status, ".
119                            " (SELECT count(H.randomnumbers) FROM Game H WHERE H.randomnumbers=G.randomnumbers) AS count ".
120                            " FROM Hand".
121                            " LEFT JOIN Game G ON G.id=Hand.game_id".
122                            " WHERE user_id='$myid'".
123                            " ORDER BY G.session,G.create_date" );
124
125         $gamenrold = -1;
126         echo "<table>\n <tr><td>\n";
127         while( $r = DB_fetch_array($result))
128           {
129             $game = DB_format_gameid($r[1]);
130             $gamenr = (int) $game;
131             if($gamenrold < $gamenr)
132               {
133                 if($gamenrold!=-1)
134                   echo "</td></tr>\n <tr> <td>$gamenr:</td>\n";
135                 else
136                   echo "$gamenr:</td>\n";
137                 $gamenrold = $gamenr;
138                 echo "<td class=\"usergames\">\n";
139               }
140             $Multi = ($r[5]>1) ? "multi" : "";
141             if($r[4]=='pre')
142               echo "   <span class=\"gamestatuspre $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">p </a></span>\n";
143             else if ($r[4]=='gameover')
144               echo "   <span class=\"gamestatusover $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">F </a></span>\n";
145             else
146               echo "   <span class=\"gamestatusplay $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">P </a></span>\n";
147             if($r[4] != 'gameover')
148               {
149                 echo "</td>\n<td>\n    ";
150                 if($r[3]==$myid || !$r[3])
151                   echo "(it's <strong>your</strong> turn)\n";
152                 else
153                   {
154                     $name = DB_get_name('userid',$r[3]);
155                     $gameid = $r[1];
156                     if(DB_get_reminder($r[3],$gameid)==0)
157                       if(time()-strtotime($r[2]) > 60*60*24*7)
158                         echo "<a href=\"$INDEX?action=reminder&amp;me=".$r[0]."\">Send a reminder.</a>";
159                     echo "(it's $name's turn)\n";
160                   };
161                 if(time()-strtotime($r[2]) > 60*60*24*30)
162                   echo "<a href=\"$INDEX?action=cancel&amp;me=".$r[0]."\">Cancel?</a>".
163                     " (clicking here is final and can't be restored)";
164               }
165           }
166         echo "</td></tr>\n</table>\n";
167
168         /* display last 5 users that have signed up to e-DoKo */
169         $names = DB_get_names_of_new_logins(5);
170         echo "<h4>New Players:</h4>\n<p>\n";
171         echo implode(", ",$names).",...\n";
172         echo "</p>\n";
173
174         /* display last 5 users that logged on */
175         $names = DB_get_names_of_last_logins(5);
176         echo "<h4>Players last logged in:</h4>\n<p>\n";
177         echo implode(", ",$names).",...\n";
178         echo "</p>\n";
179
180         echo "</div>\n";
181       }
182     else
183       {
184         echo "<div class=\"message\">Sorry email and password don't match. Please <a href=\"$INDEX\">try again</a>. </div>";
185       }
186   };
187 ?>