CLEANUP: clean up the preferences html output a bit
[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($myid);
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         /* output legend */
112         echo "<p>Session: <br />\n";
113         echo "<span class=\"gamestatuspre\"> p </span> =  pre-game phase ";
114         echo "<span class=\"gamestatusplay\">P </span> =  game in progess ";
115         echo "<span class=\"gamestatusover\">E </span> =  game ended ";
116         echo "<span class=\"gamestatusover multi\"><a>N</a> </span> =  N games with same hand <br />";
117         echo "</p>\n";
118
119         $output = array();
120         $result = DB_query("SELECT Hand.hash,Hand.game_id,G.mod_date,G.player,G.status, ".
121                            " (SELECT count(H.randomnumbers) FROM Game H WHERE H.randomnumbers=G.randomnumbers) AS count ".
122                            " FROM Hand".
123                            " LEFT JOIN Game G ON G.id=Hand.game_id".
124                            " WHERE user_id='$myid'".
125                            " ORDER BY G.session,G.create_date" );
126
127         $gamenrold = -1;
128         $count = 0;
129         echo "<table>\n <tr><td>\n";
130         while( $r = DB_fetch_array($result))
131           {
132             $count++;
133             $game = DB_format_gameid($r[1]);
134             $gamenr = (int) $game;
135             if($gamenrold < $gamenr)
136               {
137                 if($gamenrold!=-1)
138                   echo "</td></tr>\n <tr> <td>$gamenr:</td>\n";
139                 else
140                   echo "$gamenr:</td>\n";
141                 $gamenrold = $gamenr;
142                 echo "<td class=\"usergames\">\n";
143               }
144             $Multi = ($r[5]>1) ? "multi" : "";
145             if($r[4]=='pre')
146               echo "   <span class=\"gamestatuspre $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">p </a></span>\n";
147             else if ($r[4]=='gameover')
148             {
149               echo "   <span class=\"gamestatusover $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">";
150               if($r[5]<2)
151                 echo "E ";
152               else
153                 echo $r[5];
154               echo "</a></span>\n";
155             }
156             else
157               echo "   <span class=\"gamestatusplay $Multi\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">P </a></span>\n";
158             if($r[4] != 'gameover')
159               {
160                 echo "</td>\n<td>\n    ";
161                 if($r[3]==$myid || !$r[3])
162                   echo "(it's <strong>your</strong> turn)\n";
163                 else
164                   {
165                     $name = DB_get_name('userid',$r[3]);
166                     $gameid = $r[1];
167                     if(DB_get_reminder($r[3],$gameid)==0)
168                       if(time()-strtotime($r[2]) > 60*60*24*7)
169                         echo "<a href=\"$INDEX?action=reminder&amp;me=".$r[0]."\">Send a reminder.</a>";
170                     echo "(it's $name's turn)\n";
171                   };
172                 if(time()-strtotime($r[2]) > 60*60*24*30)
173                   echo "<a href=\"$INDEX?action=cancel&amp;me=".$r[0]."\">Cancel?</a>".
174                     " (clicking here is final and can't be restored)";
175               }
176           }
177         echo "</td></tr>\n</table>\n";
178
179         /* give a hint for new players */
180         if($count<10)
181           echo "<p class=\"newbiehint\">You can start new games using the link in the top right corner!</p>\n";
182
183         /* display last 5 users that have signed up to e-DoKo */
184         $names = DB_get_names_of_new_logins(5);
185         echo "<h4>New Players:</h4>\n<p>\n";
186         echo implode(", ",$names).",...\n";
187         echo "</p>\n";
188
189         /* display last 5 users that logged on */
190         $names = DB_get_names_of_last_logins(5);
191         echo "<h4>Players last logged in:</h4>\n<p>\n";
192         echo implode(", ",$names).",...\n";
193         echo "</p>\n";
194
195         echo "</div>\n";
196       }
197     else
198       {
199         echo "<div class=\"message\">Sorry email and password don't match. Please <a href=\"$INDEX\">try again</a>. </div>";
200       }
201   };
202 ?>