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