+ $output.="\n";
+ }
+ return $output;
+}
+
+function format_score_table_html($score,$userid)
+{
+ global $INDEX;
+
+ if(sizeof($score)==0)
+ return "";
+
+ $output = "<div class=\"scoretable\">\n<table class=\"score\">\n";
+
+ /* output header */
+ $header = "";
+ $header.= " <thead>\n <tr>\n";
+ $header.= " <th> No </th>";
+ foreach($score[0]['players'] as $id=>$points)
+ {
+ $name = DB_get_name('userid',$id); /*TODO*/
+ $header.= "<th> ".substr($name,0,2)." </th>";
+ }
+ $header.="<th>P</th>\n </tr>\n </thead>\n";
+
+ /* use the same as footer */
+ $footer = "";
+ $footer.= " <tfoot>\n <tr>\n";
+ $footer.= " <td> No </td>";
+ foreach($score[0]['players'] as $id=>$points)
+ {
+ $name = DB_get_name('userid',$id); /*TODO*/
+ $footer.= "<td> ".substr($name,0,2)." </td>";
+ }
+ $footer.="<td>P</td>\n </tr>\n </tfoot>\n";
+
+ /* body */
+ $body = "";
+ $body.= " <tbody>\n";
+ $i=0;
+ foreach($score as $game)
+ {
+ $i++;
+ $body.=" <tr>";
+ $userhash = DB_get_hash_from_gameid_and_userid($game['gameid'],$userid);
+ /* create link to old games only if you are logged in and its your game*/
+ if(isset($_SESSION['id']) && $_SESSION['id']==$userid)
+ $body.=" <td> <a href=\"".$INDEX."?action=game&me=".$userhash."\">$i</a></td>";
+ else
+ $body.=" <td>$i</td>";
+
+ foreach($game['players'] as $id=>$points)
+ $body.="<td>".$points."</td>";
+ $body.="<td>".$game['points'];
+
+ /* check for solo */
+ if($game['solo'])
+ $body.= " S";
+ $body.="</td></tr>\n";
+ }
+
+ $output.=$header;
+ if($i>12)
+ $output.=$footer;
+ $output.=$body;
+
+ $output.=" </tbody>\n</table>\n</div>\n";
+
+ return $output;
+}
+
+function createCache($content, $cacheFile)
+{
+ $fp = fopen($cacheFile,"w");
+ if($fp)
+ {
+ fwrite($fp,$content);
+ fclose($fp);
+ }
+ else
+ echo "WARNING: couldn't create cache file";
+
+ return;
+}
+
+function getCache($cacheFile, $expireTime)
+{
+ if( file_exists($cacheFile) &&
+ filemtime($cacheFile )>( time() - $expireTime ) )
+ {
+ return file_get_contents($cacheFile);
+ }
+
+ return false;
+}
+
+function check_vacation($userid)
+{
+ /* get start date */
+ $result = DB_query_array("SELECT value FROM User_Prefs".
+ " WHERE user_id='$userid' AND pref_key='vacation start'" );
+ if($result)
+ $start = $result[0];
+ else
+ return NULL;
+
+ /* get end date */
+ $result = DB_query_array("SELECT value FROM User_Prefs".
+ " WHERE user_id='$userid' AND pref_key='vacation stop'" );
+ if($result)
+ $stop = $result[0];
+ else
+ return NULL;
+
+ /* get comment */
+ $result = DB_query_array("SELECT value FROM User_Prefs".
+ " WHERE user_id='$userid' AND pref_key='vacation comment'" );
+ if($result)
+ $comment = $result[0];
+ else
+ $comment = '';
+
+ /* check if user is on vacation. TODO: use user's timezone */
+ if( (time() - strtotime($start) >0) &&
+ (strtotime($stop) - time() >0))
+ return array ($start,$stop,$comment);
+ else
+ return NULL;
+}
+
+function cancel_game($why,$gameid)
+{
+ $gameid = DB_quote_smart($gameid);
+
+ /* update the game table */
+ switch($why)
+ {
+ case 'timedout':
+ DB_query("UPDATE Game SET status='cancel-timedout' WHERE id=$gameid");
+ break;
+ case 'nines':
+ DB_query("UPDATE Game SET status='cancel-nines' WHERE id=$gameid");
+ break;
+ case 'trump':
+ DB_query("UPDATE Game SET status='cancel-trump' WHERE id=$gameid");
+ break;
+ case 'noplay':
+ DB_query("UPDATE Game SET status='cancel-noplay' WHERE id=$gameid");
+ break;
+ case 'lowtrump':
+ DB_query("UPDATE Game SET status='cancel-lowtrump' WHERE id=$gameid");
+ break;
+ }
+ /* set each player to gameover */
+ $result = DB_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid));
+ while($r = DB_fetch_array($result))
+ {
+ $id = $r[0];
+ DB_query("UPDATE Hand SET status='gameover' WHERE id=".DB_quote_smart($id));
+ }
+
+ return;
+}
+
+function get_user_token($userid)
+{
+
+ $token = NULL;
+
+ $date = DB_get_user_creation_date($userid);
+ $name = DB_get_name('userid',$userid);
+
+ if($date && $name)
+ $token = md5("token".$name.$date);
+
+ return $token;
+}
+
+function verify_password($email, $password)
+{
+ /* verify password, if old password has length 32 assume it's an old md5, else use new password scheme */
+ /* return 0 if verified, else return error code
+ * 1 can't find email
+ * 2 can't calculate correct hash
+ * 3 misc error
+ */
+
+ /* check user email by getting his id */
+ $userid = DB_get_userid('email',$email);
+ if(!$userid)
+ return 1;
+
+ /* test for temporary passwords, only valid for one date (tested in the DB) */
+ $tmppasswd = md5($password);
+ if(DB_check_recovery_passwords($tmppasswd,$email))
+ return 0;
+
+ /* get saved password */
+ $existingpassword = DB_get_passwd_by_userid($userid);
+
+ if(strlen($existingpassword)==32) /* old password type */
+ {
+ if ($existingpassword == md5($password))
+ {
+ /* update password to new crypt version */
+ // create a password hash using the crypt function, need php 5.3 for this
+ // create and random salt
+ $salt = substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 22);
+ // hash incoming password using 12 rounds of blowfish
+ $hash = crypt($password, '$2y$12$' . $salt);
+ if(strlen($hash)>13)
+ DB_query("UPDATE User SET password='$hash' where id='$userid'");
+ else
+ return 2;
+
+ return 0;
+ }
+ }
+ else
+ {
+ if ($existingpassword == crypt($password, $existingpassword))
+ return 0;
+ };
+
+ return 3;
+}