CLEANUP: moved the statistics page into the include directory
[e-DoKo.git] / include / db.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 /*
9  * open database
10  */
11
12 function DB_open()
13 {
14   global $DB,$DB_user,$DB_host,$DB_database,$DB_password;
15   $DB = @mysql_connect($DB_host,$DB_user, $DB_password);
16   if ( $DB )
17     {
18       mysql_select_db($DB_database) or die('Could not select database');
19     }
20   else
21     return -1;
22
23   return 0;
24 }
25
26 function DB_close()
27 {
28   global $DB;
29   mysql_close($DB);
30   return;
31 }
32
33 function DB_quote_smart($value)
34 {
35     /* Stripslashes */
36     if (get_magic_quotes_gpc()) {
37         $value = stripslashes($value);
38     }
39     /* Quote if not a number or a numeric string */
40     if (!is_numeric($value)) {
41         $value = "'" . mysql_real_escape_string($value) . "'";
42     }
43     return $value;
44 }
45
46 function DB_test()
47 {
48   $result = mysql_query("SELECT * FROM User");
49   while($r = mysql_fetch_array($result,MYSQL_NUM))
50     {
51       foreach($r as $thing)
52         echo "  $thing ";
53       echo "<br />\n";
54     }
55   return;
56 }
57
58 function DB_get_passwd_by_name($name)
59 {
60   $result = mysql_query("SELECT password FROM User WHERE fullname=".DB_quote_smart($name)."");
61   $r      = mysql_fetch_array($result,MYSQL_NUM);
62
63   if($r)
64     return $r[0];
65   else
66     return "";
67 }
68
69 function DB_check_recovery_passwords($password,$email)
70 {
71   $result = mysql_query("SELECT User.id FROM User".
72                         " LEFT JOIN Recovery ON User.id=Recovery.user_id".
73                         " WHERE email=".DB_quote_smart($email).
74                         " AND Recovery.password=".DB_quote_smart($password).
75                         " AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= Recovery.create_date");
76   $r      = mysql_fetch_array($result,MYSQL_NUM);
77
78   if($r)
79     return 1;
80   else
81     return 0;
82 }
83
84 function DB_get_handid($type,$var1='',$var2='')
85 {
86   switch($type)
87     {
88     case 'hash':
89       $result = mysql_query("SELECT id FROM Hand WHERE hash=".DB_quote_smart($var1));
90       break;
91     case 'gameid-position':
92       $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
93                             DB_quote_smart($var1)." AND position=".
94                             DB_quote_smart($var2));
95       break;
96     case 'gameid-userid':
97       $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
98                             DB_quote_smart($var1)." AND user_id=".
99                             DB_quote_smart($var2));
100       break;
101     }
102
103   $r = mysql_fetch_array($result,MYSQL_NUM);
104
105   if($r)
106     return $r[0];
107   else
108     return 0;
109 }
110
111 function DB_get_pos_by_hash($hash)
112 {
113   $result = mysql_query("SELECT position FROM Hand WHERE hash=".DB_quote_smart($hash));
114   $r      = mysql_fetch_array($result,MYSQL_NUM);
115
116   if($r)
117     return $r[0];
118   else
119     return 0;
120 }
121
122 function DB_get_status_by_hash($hash)
123 {
124   $result = mysql_query("SELECT status FROM Hand WHERE hash=".DB_quote_smart($hash));
125   $r      = mysql_fetch_array($result,MYSQL_NUM);
126
127   if($r)
128     return $r[0];
129   else
130     return 0;
131 }
132
133 function DB_set_game_status_by_gameid($id,$status)
134 {
135   mysql_query("UPDATE Game SET status='".$status."' WHERE id=".DB_quote_smart($id));
136   return;
137 }
138
139 function DB_set_sickness_by_gameid($id,$status)
140 {
141   mysql_query("UPDATE Game SET sickness='".$status."' WHERE id=".DB_quote_smart($id));
142   return;
143 }
144 function DB_get_sickness_by_gameid($id)
145 {
146   $result = mysql_query("SELECT sickness FROM Game WHERE id=".DB_quote_smart($id));
147   $r      = mysql_fetch_array($result,MYSQL_NUM);
148
149   if($r)
150     return $r[0];
151   else
152     return NULL;
153 }
154
155 function DB_get_game_status_by_gameid($id)
156 {
157   $result = mysql_query("SELECT status FROM Game WHERE id=".DB_quote_smart($id));
158   $r      = mysql_fetch_array($result,MYSQL_NUM);
159
160   if($r)
161     return $r[0];
162   else
163     return NULL;
164 }
165
166 function DB_set_hand_status_by_hash($hash,$status)
167 {
168   mysql_query("UPDATE Hand SET status='".$status."' WHERE hash=".DB_quote_smart($hash));
169   return;
170 }
171
172 function DB_get_hand_status_by_userid_and_gameid($uid,$gid)
173 {
174   $result = mysql_query("SELECT status FROM Hand WHERE user_id=".DB_quote_smart($uid).
175                         " AND game_id=".DB_quote_smart($gid));
176   $r      = mysql_fetch_array($result,MYSQL_NUM);
177
178   if($r)
179     return $r[0];
180   else
181     return 0;
182 }
183
184 function DB_get_sickness_by_userid_and_gameid($uid,$gid)
185 {
186   $result = mysql_query("SELECT sickness FROM Hand WHERE user_id=".DB_quote_smart($uid).
187                         " AND game_id=".DB_quote_smart($gid));
188   $r      = mysql_fetch_array($result,MYSQL_NUM);
189
190   if($r)
191     return $r[0];
192   else
193     return 0;
194 }
195
196 function DB_get_sickness_by_pos_and_gameid($pos,$gid)
197 {
198   $result = mysql_query("SELECT sickness FROM Hand WHERE position=".DB_quote_smart($pos).
199                         " AND game_id=".DB_quote_smart($gid));
200   $r      = mysql_fetch_array($result,MYSQL_NUM);
201
202   if($r)
203     return $r[0];
204   else
205     return 0;
206 }
207
208 function DB_get_gameid_by_hash($hash)
209 {
210   $result = mysql_query("SELECT game_id FROM Hand WHERE hash=".DB_quote_smart($hash));
211   $r      = mysql_fetch_array($result,MYSQL_NUM);
212
213   if($r)
214     return $r[0];
215   else
216     return 0;
217 }
218
219 function DB_cancel_game($hash)
220 {
221   $gameid = DB_get_gameid_by_hash($hash);
222
223   if(!$gameid)
224     return;
225
226   /* get the IDs of all players */
227   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid));
228   while($r = mysql_fetch_array($result,MYSQL_NUM))
229     {
230       $id = $r[0];
231
232       $tmp = mysql_query("SELECT id  FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
233       $tmp = mysql_fetch_array($tmp,MYSQL_NUM);
234       mysql_query("DELETE FROM Play WHERE hand_card_id=".DB_quote_smart($tmp[0]));
235
236
237       mysql_query("DELETE FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
238       mysql_query("DELETE FROM Hand WHERE id=".DB_quote_smart($id));
239     }
240
241   /* delete game */
242   mysql_query("DELETE FROM User_Game_Prefs WHERE game_id=".DB_quote_smart($gameid));
243   mysql_query("DELETE FROM Trick WHERE game_id=".DB_quote_smart($gameid));
244   mysql_query("DELETE FROM Game WHERE id=".DB_quote_smart($gameid));
245
246   return;
247 }
248
249 function DB_get_hand($me)
250 {
251   $cards = array();
252
253   $handid = DB_get_handid('hash',$me);
254
255   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid)." and played='false' ");
256   while($r = mysql_fetch_array($result,MYSQL_NUM))
257     $cards[]=$r[0];
258
259   return $cards;
260 }
261
262 function DB_get_all_hand($me)
263 {
264   $cards = array();
265
266   $handid = DB_get_handid('hash',$me);
267
268   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid));
269   while($r = mysql_fetch_array($result,MYSQL_NUM))
270     $cards[]=$r[0];
271
272   return $cards;
273 }
274
275 function DB_get_cards_by_trick($id)
276 {
277   $cards = array();
278   $i     = 1;
279
280   $result = mysql_query("SELECT card_id,position FROM Play LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id ".
281                         "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
282                         "WHERE trick_id=".
283                         DB_quote_smart($id)." ORDER BY sequence ASC");
284   while($r = mysql_fetch_array($result,MYSQL_NUM))
285     {
286       $cards[$i]=array("card"=>$r[0],"pos"=>$r[1]);
287       $i++;
288     }
289
290   return $cards;
291 }
292
293
294 function DB_set_solo_by_hash($hash,$solo)
295 {
296   mysql_query("UPDATE Hand SET solo=".DB_quote_smart($solo)." WHERE hash=".DB_quote_smart($hash));
297   return;
298 }
299
300 function DB_set_solo_by_gameid($id,$solo)
301 {
302   mysql_query("UPDATE Game SET solo=".DB_quote_smart($solo)." WHERE id=".DB_quote_smart($id));
303   return;
304 }
305
306 function DB_set_sickness_by_hash($hash,$sickness)
307 {
308   mysql_query("UPDATE Hand SET sickness=".DB_quote_smart($sickness)." WHERE hash=".DB_quote_smart($hash));
309   return;
310 }
311
312 function DB_get_current_trickid($gameid)
313 {
314   $trickid  = NULL;
315   $sequence = NULL;
316   $number   = 0;
317
318   $result = mysql_query("SELECT Trick.id,MAX(Play.sequence) FROM Play ".
319                         "LEFT JOIN Trick ON Play.trick_id=Trick.id ".
320                         "WHERE Trick.game_id=".DB_quote_smart($gameid)." ".
321                         "GROUP BY Trick.id");
322   while( $r = mysql_fetch_array($result,MYSQL_NUM) )
323     {
324       $trickid  = $r[0];
325       $sequence = $r[1];
326       $number++;
327     };
328
329   if(!$sequence || $sequence==4)
330     {
331       mysql_query("INSERT INTO Trick VALUES (NULL,NULL,NULL, ".DB_quote_smart($gameid).",NULL)");
332       $trickid  = mysql_insert_id();
333       $sequence = 1;
334       $number++;
335     }
336   else
337     {
338       $sequence++;
339     }
340
341   return array($trickid,$sequence,$number);
342 }
343
344 function DB_get_max_trickid($gameid)
345 {
346   $result = mysql_query("SELECT MAX(id) FROM Trick WHERE game_id=".DB_quote_smart($gameid));
347   $r = mysql_fetch_array($result,MYSQL_NUM) ;
348
349   return ($r?$r[0]:NULL);
350 }
351
352 function DB_play_card($trickid,$handcardid,$sequence)
353 {
354   mysql_query("INSERT INTO Play VALUES(NULL,NULL,NULL,".DB_quote_smart($trickid).
355               ",".DB_quote_smart($handcardid).",".DB_quote_smart($sequence).")");
356
357   $playid = mysql_insert_id();
358   return $playid;
359 }
360
361 function DB_get_all_names_by_gameid($id)
362 {
363   $names = array();
364
365   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE game_id=".
366                         DB_quote_smart($id)." ORDER BY position ASC");
367   while($r = mysql_fetch_array($result,MYSQL_NUM))
368     $names[] = $r[0];
369
370   return $names;
371 }
372
373 function DB_get_all_userid_by_gameid($id)
374 {
375   $names = array();
376
377   $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
378                         DB_quote_smart($id)." ORDER BY position ");
379   while($r = mysql_fetch_array($result,MYSQL_NUM))
380     $names[] = $r[0];
381
382   return $names;
383 }
384
385 function DB_get_hash_from_game_and_pos($id,$pos)
386 {
387   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and position=".DB_quote_smart($pos));
388   $r      = mysql_fetch_array($result,MYSQL_NUM);
389
390   if($r)
391     return $r[0];
392   else
393     return "";
394 }
395
396 function DB_get_hash_from_gameid_and_userid($id,$user)
397 {
398   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and user_id=".DB_quote_smart($user));
399   $r      = mysql_fetch_array($result,MYSQL_NUM);
400
401   if($r)
402     return $r[0];
403   else
404     return "";
405 }
406
407 function DB_get_all_names()
408 {
409   $names  = array();
410
411   $result = mysql_query("SELECT fullname FROM User");
412   while($r = mysql_fetch_array($result,MYSQL_NUM))
413     $names[] = $r[0];
414
415   return $names;
416 }
417
418 function DB_get_names_of_last_logins($N)
419 {
420   $names  = array();
421
422   $result = mysql_query("SELECT fullname FROM User ORDER BY last_login DESC LIMIT $N");
423   while($r = mysql_fetch_array($result,MYSQL_NUM))
424     $names[] = $r[0];
425
426   return $names;
427 }
428
429 function DB_get_names_of_new_logins($N)
430 {
431   $names  = array();
432
433   $result = mysql_query("SELECT fullname FROM User ORDER BY create_date DESC, id DESC LIMIT $N");
434   while($r = mysql_fetch_array($result,MYSQL_NUM))
435     $names[] = $r[0];
436
437   return $names;
438 }
439
440 function DB_update_game_timestamp($gameid)
441 {
442   mysql_query("UPDATE Game SET mod_date = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($gameid));
443   return;
444 }
445
446
447 function DB_update_user_timestamp($userid)
448 {
449   mysql_query("UPDATE User SET last_login = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($userid));
450   return;
451 }
452
453 function DB_get_user_timestamp($userid)
454 {
455   $result = mysql_query("SELECT last_login FROM User WHERE id=".DB_quote_smart($userid));
456   $r      = mysql_fetch_array($result,MYSQL_NUM);
457
458   if($r)
459     return $r[0];
460   else
461     return NULL;
462 }
463 function DB_get_user_timezone($userid)
464 {
465   $result = mysql_query("SELECT timezone FROM User WHERE id=".DB_quote_smart($userid));
466   $r      = mysql_fetch_array($result,MYSQL_NUM);
467
468   if($r)
469     return $r[0];
470   else
471     return "Europe/London";
472 }
473
474 function DB_insert_comment($comment,$playid,$userid)
475 {
476   mysql_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")");
477
478   return;
479 }
480
481 function DB_insert_note($comment,$gameid,$userid)
482 {
483   mysql_query("INSERT INTO Notes VALUES (NULL,NULL,NULL,$userid,$gameid, ".DB_quote_smart($comment).")");
484
485   return;
486 }
487
488 function DB_get_notes_by_userid_and_gameid($userid,$gameid)
489 {
490   $notes = array();
491
492   $result = mysql_query("SELECT comment FROM Notes WHERE user_id=".DB_quote_smart($userid) .
493                         " AND game_id=".DB_quote_smart($gameid));
494
495   while($r = mysql_fetch_array($result,MYSQL_NUM))
496     $notes[] = $r[0];
497
498   return $notes;
499 }
500
501
502 function DB_get_gametype_by_gameid($id)
503 {
504   $result = mysql_query("SELECT type FROM Game WHERE id=".DB_quote_smart($id));
505   $r      = mysql_fetch_array($result,MYSQL_NUM);
506
507   if($r)
508     return $r[0]."";
509   else
510     return "";
511 }
512
513 function DB_set_gametype_by_gameid($id,$p)
514 {
515   mysql_query("UPDATE Game SET type='".$p."' WHERE id=".DB_quote_smart($id));
516   return;
517 }
518
519 function DB_get_solo_by_gameid($id)
520 {
521   $result = mysql_query("SELECT solo FROM Game WHERE id=".DB_quote_smart($id));
522   $r      = mysql_fetch_array($result,MYSQL_NUM);
523
524   if($r)
525     return $r[0]."";
526   else
527     return "";
528 }
529
530
531 function DB_get_startplayer_by_gameid($id)
532 {
533   $result = mysql_query("SELECT startplayer FROM Game WHERE id=".DB_quote_smart($id));
534   $r      = mysql_fetch_array($result,MYSQL_NUM);
535
536   if($r)
537     return $r[0];
538   else
539     return 0;
540 }
541
542 function DB_set_startplayer_by_gameid($id,$p)
543 {
544   mysql_query("UPDATE Game SET startplayer='".$p."' WHERE id=".DB_quote_smart($id));
545   return;
546 }
547
548 function DB_get_player_by_gameid($id)
549 {
550   $result = mysql_query("SELECT player FROM Game WHERE id=".DB_quote_smart($id));
551   $r      = mysql_fetch_array($result,MYSQL_NUM);
552
553   if($r)
554     return $r[0];
555   else
556     return 0;
557 }
558 function DB_set_player_by_gameid($id,$p)
559 {
560   mysql_query("UPDATE Game SET player='".DB_quote_smart($p)."' WHERE id=".DB_quote_smart($id));
561   return;
562 }
563
564
565
566 function DB_get_ruleset_by_gameid($id)
567 {
568   $result = mysql_query("SELECT ruleset FROM Game WHERE id=".DB_quote_smart($id));
569   $r      = mysql_fetch_array($result,MYSQL_NUM);
570
571   if($r)
572     return $r[0];
573   else
574     return NULL;
575 }
576
577 function DB_get_session_by_gameid($id)
578 {
579   $result = mysql_query("SELECT session FROM Game WHERE id=".DB_quote_smart($id));
580   $r      = mysql_fetch_array($result,MYSQL_NUM);
581
582   if($r)
583     return $r[0];
584   else
585     return NULL;
586 }
587
588 function DB_get_max_session()
589 {
590   $result = mysql_query("SELECT MAX(session) FROM Game");
591   $r      = mysql_fetch_array($result,MYSQL_NUM);
592
593   if($r)
594     return $r[0];
595   else
596     return 0;
597 }
598
599 function DB_get_hashes_by_session($session,$user)
600 {
601   $r = array();
602
603   $result = mysql_query("SELECT Hand.hash FROM Hand".
604                         " LEFT JOIN Game ON Game.id=Hand.game_id ".
605                         " WHERE Game.session=".DB_quote_smart($session).
606                         " AND Hand.user_id=".DB_quote_smart($user).
607                         " ORDER BY Game.create_date ASC");
608   while($t = mysql_fetch_array($result,MYSQL_NUM))
609     $r[] = $t[0];
610
611   return $r;
612 }
613
614 function DB_get_ruleset($dullen,$schweinchen,$call)
615 {
616   $r = array();
617
618   $result = mysql_query("SELECT id FROM Rulesets WHERE".
619                         " dullen=".DB_quote_smart($dullen)." AND ".
620                         " call=".DB_quote_smart($call)." AND ".
621                         " schweinchen=".DB_quote_smart($schweinchen));
622   if($result)
623     $r    = mysql_fetch_array($result,MYSQL_NUM);
624
625   if($r)
626     return $r[0]; /* found ruleset */
627   else
628     {
629       /* create new one */
630       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
631                             DB_quote_smart($dullen).",".
632                             DB_quote_smart($schweinchen).",".
633                             DB_quote_smart($call).
634                             ", NULL)");
635       if($result)
636         return mysql_insert_id();
637     };
638
639   return -1; /* something went wrong */
640 }
641
642 function DB_get_party_by_hash($hash)
643 {
644   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
645   $r      = mysql_fetch_array($result,MYSQL_NUM);
646
647   if($r)
648     return $r[0];
649   else
650     return NULL;
651 }
652
653 function DB_get_party_by_gameid_and_userid($gameid,$userid)
654 {
655   $result = mysql_query("SELECT party FROM Hand".
656                         " WHERE game_id=".DB_quote_smart($gameid).
657                         "  AND user_id=".DB_quote_smart($userid));
658   $r      = mysql_fetch_array($result,MYSQL_NUM);
659
660   if($r)
661     return $r[0];
662   else
663     return NULL;
664 }
665
666 function DB_set_party_by_hash($hash,$party)
667 {
668   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
669   return;
670 }
671
672 function DB_get_PREF($myid)
673 {
674   global $PREF;
675
676   /* Cardset */
677   $result = mysql_query("SELECT value from User_Prefs".
678                         " WHERE user_id='$myid' AND pref_key='cardset'" );
679   $r = mysql_fetch_array($result,MYSQL_NUM);
680   if($r)
681     {
682       if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
683         $PREF["cardset"]="altenburg";
684       else
685         $PREF["cardset"]="english";
686     }
687   else
688     $PREF["cardset"]="english";
689
690   /* Email */
691   $result = mysql_query("SELECT value FROM User_Prefs".
692                         " WHERE user_id='$myid' AND pref_key='email'" );
693   $r = mysql_fetch_array($result,MYSQL_NUM);
694   if($r)
695     {
696       if($r[0]=="emailaddict")
697         $PREF["email"]="emailaddict";
698       else
699         $PREF["email"]="emailnonaddict";
700     }
701   else
702     $PREF["email"]="emailnonaddict";
703
704   return;
705 }
706
707 function DB_get_email_pref_by_hash($hash)
708 {
709   $result = mysql_query("SELECT value FROM Hand".
710                         " LEFT JOIN User_Prefs ON Hand.user_id=User_Prefs.user_id".
711                         " WHERE hash='$hash' AND pref_key='email'" );
712   $r = mysql_fetch_array($result,MYSQL_NUM);
713   if($r)
714     {
715       if($r[0]=="emailaddict")
716         return "emailaddict";
717       else
718         return "emailnonaddict";
719     }
720   else
721     return "emailnonaddict";
722 }
723
724 function DB_get_email_pref_by_uid($uid)
725 {
726   $result = mysql_query("SELECT value FROM User_Prefs ".
727                         " WHERE user_id='$uid' AND pref_key='email'" );
728   $r = mysql_fetch_array($result,MYSQL_NUM);
729   if($r)
730     {
731       if($r[0]=="emailaddict")
732         return "emailaddict";
733       else
734         return "emailnonaddict";
735     }
736   else
737     return "emailnonaddict";
738 }
739
740 function DB_get_unused_randomnumbers($userstr)
741 {
742   $queryresult = mysql_query(" SELECT randomnumbers FROM Game".
743                              "   WHERE randomnumbers NOT IN".
744                              "           (SELECT randomnumbers FROM Game".
745                              "                LEFT JOIN Hand ON Game.id=Hand.game_id".
746                              "                WHERE user_id IN  (". $userstr .")".
747                              "                GROUP BY randomnumbers".
748                              "           )");
749
750
751   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
752   if($r)
753     return $r[0];
754   else
755     return "";
756 }
757
758 function DB_get_number_of_passwords_recovery($user)
759 {
760   $queryresult = mysql_query("SELECT COUNT(*) FROM Recovery ".
761                              "  WHERE user_id=$user ".
762                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
763                              "  GROUP BY user_id " );
764
765   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
766   if($r)
767     return $r[0];
768   else
769     return 0;
770 }
771
772 function DB_set_recovery_password($user,$newpw)
773 {
774   mysql_query("INSERT INTO Recovery VALUES(NULL,".DB_quote_smart($user).
775               ",".DB_quote_smart($newpw).",NULL)");
776
777   return;
778 }
779
780 function DB_get_card_name($card)
781 {
782   $queryresult = mysql_query("SELECT strength,suite FROM Card WHERE id='$card'");
783
784   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
785   if($r)
786     return $r[0]." of ".$r[1];
787   else
788     return "Error during get_card_name ".$card;
789 }
790
791 function DB_get_current_playid($gameid)
792 {
793   $trick = DB_get_max_trickid($gameid);
794
795   if(!$trick) return NULL;
796
797   $queryresult = mysql_query("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1");
798
799   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
800   if($r)
801     return $r[0];
802
803   return "";
804 }
805
806 function DB_get_call_by_hash($hash)
807 {
808   $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$hash'");
809
810   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
811   if($r)
812     return $r[0];
813
814   return NULL;
815 }
816
817 function DB_get_partner_call_by_hash($hash)
818 {
819   $partner = DB_get_partner_hash_by_hash($hash);
820
821   if($partner)
822     {
823       $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$partner'");
824
825       $r = mysql_fetch_array($queryresult,MYSQL_NUM);
826       if($r)
827         return $r[0];
828     }
829
830   return NULL;
831 }
832
833 function DB_get_partner_hash_by_hash($hash)
834 {
835   $gameid = DB_get_gameid_by_hash($hash);
836   $party  = DB_get_party_by_hash($hash);
837
838   $queryresult = mysql_query("SELECT hash FROM Hand WHERE game_id='$gameid' AND party='$party' AND hash<>'$hash'");
839
840   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
841   if($r)
842     return $r[0];
843
844   return NULL;
845 }
846
847 function DB_format_gameid($gameid)
848 {
849   $session = DB_get_session_by_gameid($gameid);
850
851   /* get number of game */
852   $result = mysql_query("SELECT COUNT(*),create_date FROM Game".
853                         " WHERE session='$session' ".
854                         " AND TIMEDIFF(create_date, (SELECT create_date FROM Game WHERE id='$gameid'))<=0 ".
855                         " GROUP by session");
856   $r = mysql_fetch_array($result,MYSQL_NUM);
857
858   return $session.".".$r[0];
859 }
860
861 function DB_get_reminder($user,$gameid)
862 {
863   $queryresult = mysql_query("SELECT COUNT(*) FROM Reminder ".
864                              "  WHERE user_id=$user ".
865                              "  AND game_id=$gameid ".
866                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
867                              "  GROUP BY user_id " );
868
869   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
870   if($r)
871     return $r[0];
872   else
873     return 0;
874 }
875
876 function DB_set_reminder($user,$gameid)
877 {
878   mysql_query("INSERT INTO Reminder ".
879               "  VALUES(NULL, ".DB_quote_smart($user).", ".DB_quote_smart($gameid).
880               ", NULL) ");
881   return 0;
882 }
883
884 function DB_is_session_active($session)
885 {
886   $queryresult = mysql_query("SELECT COUNT(*) FROM Game ".
887                              "  WHERE session=$session ".
888                              "  AND status<>'gameover' ");
889
890   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
891   if($r)
892     return $r[0];
893   else
894     return -1;
895 }
896
897 function DB_get_score_by_gameid($gameid)
898 {
899   /* returns the points of a game from the point of the re parth (<0 if they lost) */
900   $queryresult = mysql_query("SELECT COUNT(*),party FROM Score ".
901                              "  WHERE game_id=$gameid ".
902                              "  GROUP BY party ");
903
904   $re     = 0;
905   $contra = 0;
906
907   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
908     {
909       if($r[1] == "re")
910         $re += $r[0];
911       else if ($r[1] == "contra")
912         $contra += $r[0];
913     };
914
915   return ($re - $contra);
916 }
917
918 function DB_get_gameids_of_finished_games_by_session($session)
919 {
920   $ids = array ();
921
922   $queryresult = mysql_query("SELECT id FROM Game ".
923                              "  WHERE session=$session ".
924                              "   AND status='gameover' ".
925                              " ORDER BY create_date ASC");
926
927   $i=0;
928   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
929     {
930       $ids[$i] = $r[0];
931       $i++;
932     }
933
934   return $ids;
935 }
936
937 function DB_get_card_value_by_cardid($id)
938 {
939   $queryresult = mysql_query("SELECT points FROM Card ".
940                              "  WHERE id=$id ");
941
942   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
943   if($r)
944     return $r[0];
945   else
946     return NULL;
947 }
948
949 function DB_get_userid($type,$var1="",$var2="")
950 {
951   /* get the userid of a user
952    * this can be done several ways, which are all handled below
953    * if a email/password combination is given and it doesn't work, we also
954    * need to check the recovery table for additional passwords
955    */
956
957   $r = NULL;
958   
959   switch($type)
960     {
961     case 'name':
962       $result = mysql_query("SELECT id FROM User WHERE fullname=".DB_quote_smart($var1));
963       break;
964     case 'hash':
965       $result = mysql_query("SELECT user_id FROM Hand WHERE hash=".DB_quote_smart($var1));
966       break;
967     case 'password':
968       $result = mysql_query("SELECT id FROM User WHERE password=".DB_quote_smart($var1));
969       break;
970     case 'email':
971       $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($var1));
972       break;
973     case 'email-password':
974       $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($var1)." AND password=".DB_quote_smart($var2));
975       $r = mysql_fetch_array($result,MYSQL_NUM);
976       /* test if a recovery password has been set */
977       if(!$r)
978         {
979           echo "testing alternative password";
980           $result = mysql_query("SELECT User.id FROM User".
981                                 " LEFT JOIN Recovery ON User.id=Recovery.user_id".
982                                 " WHERE email=".DB_quote_smart($var1).
983                                 " AND Recovery.password=".DB_quote_smart($var2).
984                                 " AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= Recovery.create_date");
985         }
986       break;
987     case 'gameid-position':
988       $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
989                             DB_quote_smart($var1)." AND position=".
990                             DB_quote_smart($var2));
991       break;
992     }
993
994   if(!$r)
995     $r = mysql_fetch_array($result,MYSQL_NUM);
996
997   if($r)
998     return $r[0];
999   else
1000     return 0;
1001 }
1002
1003 function DB_get_email($type,$var1='',$var2='')
1004 {
1005   /* return the email of a user
1006    * this is used for sending out emails, but also for
1007    * testing the login for example
1008    */
1009   switch($type)
1010     {
1011     case 'name':
1012       $result = mysql_query("SELECT email FROM User WHERE fullname=".DB_quote_smart($var1)."");
1013       break;
1014     case 'userid':
1015       $result = mysql_query("SELECT email FROM User WHERE id=".DB_quote_smart($var1)."");
1016       break;
1017     case 'hash':
1018       $result = mysql_query("SELECT User.email FROM User ".
1019                             "LEFT JOIN Hand ON Hand.user_id=User.id ".
1020                             "WHERE Hand.hash=".DB_quote_smart($var1)."");
1021       break;
1022     case 'position-gameid':
1023       $result = mysql_query("SELECT email FROM User ".
1024                             "LEFT JOIN Hand ON User.id=Hand.user_id ".
1025                             "LEFT JOIN Game ON Game.id=Hand.game_id ".
1026                             "WHERE Game.id=".DB_quote_smart($var2)." ".
1027                             "AND Hand.position=".DB_quote_smart($var1)."");
1028       break;
1029     }
1030
1031   $r = mysql_fetch_array($result,MYSQL_NUM);
1032
1033   if($r)
1034     return $r[0];
1035   else
1036     return "";
1037 }
1038
1039 function DB_get_name($type,$var1='')
1040 {
1041   /* get the full name of a user
1042    * a user can be uniquely identified several ways
1043    */
1044   switch($type)
1045     {
1046     case 'hash':
1047       $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($var1));
1048       break;
1049     case 'email':
1050       $result = mysql_query("SELECT fullname FROM User WHERE email=".DB_quote_smart($var1));
1051       break;
1052     case 'userid':
1053       $result = mysql_query("SELECT fullname FROM User  WHERE id=".DB_quote_smart($var1));
1054     }
1055
1056   $r = mysql_fetch_array($result,MYSQL_NUM);
1057
1058   if($r)
1059     return $r[0];
1060   else
1061     return "";
1062 }
1063
1064 ?>