LAYOUT: fixed overflow of comment area (issue #28)
[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,Game.mod_date,Game.player,Game.status from Hand".
119                            " LEFT JOIN Game ON Game.id=Hand.game_id".
120                            " WHERE user_id='$myid'".
121                            " ORDER BY Game.session,Game.create_date" );
122         $gamenrold = -1;
123         echo "<table>\n <tr><td>\n";
124         while( $r = DB_fetch_array($result))
125           {
126             $game = DB_format_gameid($r[1]);
127             $gamenr = (int) $game;
128             if($gamenrold < $gamenr)
129               {
130                 if($gamenrold!=-1)
131                   echo "</td></tr>\n <tr> <td>$gamenr:</td>\n";
132                 else
133                   echo "$gamenr:</td>\n";
134                 $gamenrold = $gamenr;
135                 echo "<td class=\"usergames\">\n";
136               }
137             if($r[4]=='pre')
138               echo "   <span class=\"gamestatuspre\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">p </a></span>\n";
139             else if ($r[4]=='gameover')
140               echo "   <span class=\"gamestatusover\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">F </a></span>\n";
141             else
142               echo "   <span class=\"gamestatusplay\"><a href=\"".$INDEX."?action=game&amp;me=".$r[0]."\">P </a></span>\n";
143             if($r[4] != 'gameover')
144               {
145                 echo "</td>\n<td>\n    ";
146                 if($r[3]==$myid || !$r[3])
147                   echo "(it's <strong>your</strong> turn)\n";
148                 else
149                   {
150                     $name = DB_get_name('userid',$r[3]);
151                     $gameid = $r[1];
152                     if(DB_get_reminder($r[3],$gameid)==0)
153                       if(time()-strtotime($r[2]) > 60*60*24*7)
154                         echo "<a href=\"$INDEX?action=reminder&amp;me=".$r[0]."\">Send a reminder.</a>";
155                     echo "(it's $name's turn)\n";
156                   };
157                 if(time()-strtotime($r[2]) > 60*60*24*30)
158                   echo "<a href=\"$INDEX?action=cancel&amp;me=".$r[0]."\">Cancel?</a>".
159                     " (clicking here is final and can't be restored)";
160               }
161           }
162         echo "</td></tr>\n</table>\n";
163         
164         /* display last 5 users that have signed up to e-DoKo */
165         $names = DB_get_names_of_new_logins(5);
166         echo "<h4>New Players:</h4>\n<p>\n";
167         echo implode(", ",$names).",...\n";
168         echo "</p>\n";
169         
170         /* display last 5 users that logged on */
171         $names = DB_get_names_of_last_logins(5);
172         echo "<h4>Players last logged in:</h4>\n<p>\n";
173         echo implode(", ",$names).",...\n";
174         echo "</p>\n";
175         
176         echo "</div>\n";
177       }
178     else
179       {
180         echo "<div class=\"message\">Sorry email and password don't match. Please <a href=\"$INDEX\">try again</a>. </div>";
181       }
182   };
183 ?>