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