BUGFIX: added a config.php template to the repository and updated the INSTALL files
[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 0;
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   while($t = mysql_fetch_array($result,MYSQL_NUM))
728     $r[] = $t[0];
729
730   return $r;
731 }
732
733 function DB_get_ruleset($dullen,$schweinchen,$call)
734 {
735   $r = array();
736
737   $result = mysql_query("SELECT id FROM Rulesets WHERE".
738                         " dullen=".DB_quote_smart($dullen)." AND ".
739                         " call=".DB_quote_smart($call)." AND ".
740                         " schweinchen=".DB_quote_smart($schweinchen));
741   if($result)
742     $r    = mysql_fetch_array($result,MYSQL_NUM);
743
744   if($r)
745     return $r[0]; /* found ruleset */
746   else
747     {
748       /* create new one */
749       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
750                             DB_quote_smart($dullen).",".
751                             DB_quote_smart($schweinchen).",".
752                             DB_quote_smart($call).
753                             ", NULL)");
754       if($result)
755         return mysql_insert_id();
756     };
757
758   return -1; /* something went wrong */
759 }
760
761 function DB_get_party_by_hash($hash)
762 {
763   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
764   $r      = mysql_fetch_array($result,MYSQL_NUM);
765
766   if($r)
767     return $r[0];
768   else
769     return NULL;
770 }
771
772 function DB_get_party_by_gameid_and_userid($gameid,$userid)
773 {
774   $result = mysql_query("SELECT party FROM Hand".
775                         " WHERE game_id=".DB_quote_smart($gameid).
776                         "  AND user_id=".DB_quote_smart($userid));
777   $r      = mysql_fetch_array($result,MYSQL_NUM);
778
779   if($r)
780     return $r[0];
781   else
782     return NULL;
783 }
784
785 function DB_set_party_by_hash($hash,$party)
786 {
787   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
788   return;
789 }
790
791 function DB_get_PREF($myid)
792 {
793   global $PREF;
794
795     $result = mysql_query("SELECT value from User_Prefs".
796                           " WHERE user_id='$myid' AND pref_key='cardset'" );
797     $r = mysql_fetch_array($result,MYSQL_NUM);
798     if($r)
799       {
800         if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
801           $PREF["cardset"]="altenburg";
802         else
803           $PREF["cardset"]="english";
804       }
805     else
806       $PREF["cardset"]="english";
807
808     return;
809 }
810
811 function DB_get_unused_randomnumbers($userstr)
812 {
813   $queryresult = mysql_query(" SELECT randomnumbers FROM Game".
814                              "   WHERE randomnumbers NOT IN".
815                              "           (SELECT randomnumbers FROM Game".
816                              "                LEFT JOIN Hand ON Game.id=Hand.game_id".
817                              "                WHERE user_id IN  (". $userstr .")".
818                              "                GROUP BY randomnumbers".
819                              "           )");
820
821
822   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
823   if($r)
824     return $r[0];
825   else
826     return "";
827 }
828
829 function DB_get_number_of_passwords_recovery($user)
830 {
831   $queryresult = mysql_query("SELECT COUNT(*) FROM Recovery ".
832                              "  WHERE user_id=$user ".
833                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
834                              "  GROUP BY user_id " );
835
836   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
837   if($r)
838     return $r[0];
839   else
840     return 0;
841 }
842
843 function DB_set_recovery_password($user,$newpw)
844 {
845   mysql_query("INSERT INTO Recovery VALUES(NULL,".DB_quote_smart($user).
846               ",".DB_quote_smart($newpw).",NULL)");
847
848   return;
849 }
850
851 function DB_get_card_name($card)
852 {
853   $queryresult = mysql_query("SELECT strength,suite FROM Card WHERE id='$card'");
854
855   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
856   if($r)
857     return $r[0]." of ".$r[1];
858   else
859     return "Error during get_card_name ".$card;
860 }
861
862 function DB_get_current_playid($gameid)
863 {
864   $trick = DB_get_max_trickid($gameid);
865
866   if(!$trick) return NULL;
867
868   $queryresult = mysql_query("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1");
869
870   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
871   if($r)
872     return $r[0];
873
874   return "";
875 }
876
877 function DB_get_call_by_hash($hash)
878 {
879   $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$hash'");
880
881   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
882   if($r)
883     return $r[0];
884
885   return NULL;
886 }
887
888 function DB_get_partner_call_by_hash($hash)
889 {
890   $partner = DB_get_partner_hash_by_hash($hash);
891
892   if($partner)
893     {
894       $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$partner'");
895
896       $r = mysql_fetch_array($queryresult,MYSQL_NUM);
897       if($r)
898         return $r[0];
899     }
900
901   return NULL;
902 }
903
904 function DB_get_partner_hash_by_hash($hash)
905 {
906   $gameid = DB_get_gameid_by_hash($hash);
907   $party  = DB_get_party_by_hash($hash);
908
909   $queryresult = mysql_query("SELECT hash FROM Hand WHERE game_id='$gameid' AND party='$party' AND hash<>'$hash'");
910
911   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
912   if($r)
913     return $r[0];
914
915   return NULL;
916 }
917
918 function DB_format_gameid($gameid)
919 {
920   $session = DB_get_session_by_gameid($gameid);
921
922   /* get number of game */
923   $result = mysql_query("SELECT COUNT(*),create_date FROM Game".
924                         " WHERE session='$session' ".
925                         " AND TIMEDIFF(create_date, (SELECT create_date FROM Game WHERE id='$gameid'))<=0 ".
926                         " GROUP by session");
927   $r = mysql_fetch_array($result,MYSQL_NUM);
928
929   return $session.".".$r[0];
930 }
931
932 function DB_get_reminder($user,$gameid)
933 {
934   $queryresult = mysql_query("SELECT COUNT(*) FROM Reminder ".
935                              "  WHERE user_id=$user ".
936                              "  AND game_id=$gameid ".
937                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
938                              "  GROUP BY user_id " );
939
940   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
941   if($r)
942     return $r[0];
943   else
944     return 0;
945 }
946
947 function DB_set_reminder($user,$gameid)
948 {
949   mysql_query("INSERT INTO Reminder ".
950               "  VALUES(NULL, ".DB_quote_smart($user).", ".DB_quote_smart($gameid).
951               ", NULL) ");
952   return 0;
953 }
954
955 function DB_is_session_active($session)
956 {
957   $queryresult = mysql_query("SELECT COUNT(*) FROM Game ".
958                              "  WHERE session=$session ".
959                              "  AND status<>'gameover' ");
960
961   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
962   if($r)
963     return $r[0];
964   else
965     return -1;
966 }
967
968 function DB_get_score_by_gameid($gameid)
969 {
970   /* returns the points of a game from the point of the re parth (<0 if they lost) */
971   $queryresult = mysql_query("SELECT COUNT(*),party FROM Score ".
972                              "  WHERE game_id=$gameid ".
973                              "  GROUP BY party ");
974
975   $re     = 0;
976   $contra = 0;
977
978   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
979     {
980       if($r[1] == "re")
981         $re += $r[0];
982       else if ($r[1] == "contra")
983         $contra += $r[0];
984     };
985
986   return ($re - $contra);
987 }
988
989 function DB_get_gameids_of_finished_games_by_session($session)
990 {
991   $ids = array ();
992
993   $queryresult = mysql_query("SELECT id FROM Game ".
994                              "  WHERE session=$session ".
995                              "   AND status='gameover' ".
996                              " ORDER BY create_date ASC");
997
998   $i=0;
999   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1000     {
1001       $ids[$i] = $r[0];
1002       $i++;
1003     }
1004
1005   return $ids;
1006 }
1007
1008 function DB_get_card_value_by_cardid($id)
1009 {
1010   $queryresult = mysql_query("SELECT points FROM Card ".
1011                              "  WHERE id=$id ");
1012
1013   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1014   if($r)
1015     return $r[0];
1016   else
1017     return NULL;
1018 }
1019
1020 ?>