f5f6673cde706add1050d499f3e6a3bf08cc49e5
[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   /* Cardset */
796   $result = mysql_query("SELECT value from User_Prefs".
797                         " WHERE user_id='$myid' AND pref_key='cardset'" );
798   $r = mysql_fetch_array($result,MYSQL_NUM);
799   if($r)
800     {
801       if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
802         $PREF["cardset"]="altenburg";
803       else
804         $PREF["cardset"]="english";
805     }
806   else
807     $PREF["cardset"]="english";
808
809   /* Email */
810   $result = mysql_query("SELECT value FROM User_Prefs".
811                         " WHERE user_id='$myid' AND pref_key='email'" );
812   $r = mysql_fetch_array($result,MYSQL_NUM);
813   if($r)
814     {
815       if($r[0]=="emailaddict")
816         $PREF["email"]="emailaddict";
817       else
818         $PREF["email"]="emailnonaddict";
819     }
820   else
821     $PREF["email"]="emailnonaddict";
822
823   return;
824 }
825
826 function DB_get_email_pref_by_hash($hash)
827 {
828   $result = mysql_query("SELECT value FROM Hand".
829                         " LEFT JOIN User_Prefs ON Hand.user_id=User_Prefs.user_id".
830                         " WHERE hash='$hash' AND pref_key='email'" );
831   $r = mysql_fetch_array($result,MYSQL_NUM);
832   if($r)
833     {
834       if($r[0]=="emailaddict")
835         return "emailaddict";
836       else
837         return "emailnonaddict";
838     }
839   else
840     return "emailnonaddict";
841 }
842
843 function DB_get_email_pref_by_uid($uid)
844 {
845   $result = mysql_query("SELECT value FROM User_Prefs ".
846                         " WHERE user_id='$uid' AND pref_key='email'" );
847   $r = mysql_fetch_array($result,MYSQL_NUM);
848   if($r)
849     {
850       if($r[0]=="emailaddict")
851         return "emailaddict";
852       else
853         return "emailnonaddict";
854     }
855   else
856     return "emailnonaddict";
857 }
858
859 function DB_get_unused_randomnumbers($userstr)
860 {
861   $queryresult = mysql_query(" SELECT randomnumbers FROM Game".
862                              "   WHERE randomnumbers NOT IN".
863                              "           (SELECT randomnumbers FROM Game".
864                              "                LEFT JOIN Hand ON Game.id=Hand.game_id".
865                              "                WHERE user_id IN  (". $userstr .")".
866                              "                GROUP BY randomnumbers".
867                              "           )");
868
869
870   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
871   if($r)
872     return $r[0];
873   else
874     return "";
875 }
876
877 function DB_get_number_of_passwords_recovery($user)
878 {
879   $queryresult = mysql_query("SELECT COUNT(*) FROM Recovery ".
880                              "  WHERE user_id=$user ".
881                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
882                              "  GROUP BY user_id " );
883
884   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
885   if($r)
886     return $r[0];
887   else
888     return 0;
889 }
890
891 function DB_set_recovery_password($user,$newpw)
892 {
893   mysql_query("INSERT INTO Recovery VALUES(NULL,".DB_quote_smart($user).
894               ",".DB_quote_smart($newpw).",NULL)");
895
896   return;
897 }
898
899 function DB_get_card_name($card)
900 {
901   $queryresult = mysql_query("SELECT strength,suite FROM Card WHERE id='$card'");
902
903   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
904   if($r)
905     return $r[0]." of ".$r[1];
906   else
907     return "Error during get_card_name ".$card;
908 }
909
910 function DB_get_current_playid($gameid)
911 {
912   $trick = DB_get_max_trickid($gameid);
913
914   if(!$trick) return NULL;
915
916   $queryresult = mysql_query("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1");
917
918   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
919   if($r)
920     return $r[0];
921
922   return "";
923 }
924
925 function DB_get_call_by_hash($hash)
926 {
927   $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$hash'");
928
929   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
930   if($r)
931     return $r[0];
932
933   return NULL;
934 }
935
936 function DB_get_partner_call_by_hash($hash)
937 {
938   $partner = DB_get_partner_hash_by_hash($hash);
939
940   if($partner)
941     {
942       $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$partner'");
943
944       $r = mysql_fetch_array($queryresult,MYSQL_NUM);
945       if($r)
946         return $r[0];
947     }
948
949   return NULL;
950 }
951
952 function DB_get_partner_hash_by_hash($hash)
953 {
954   $gameid = DB_get_gameid_by_hash($hash);
955   $party  = DB_get_party_by_hash($hash);
956
957   $queryresult = mysql_query("SELECT hash FROM Hand WHERE game_id='$gameid' AND party='$party' AND hash<>'$hash'");
958
959   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
960   if($r)
961     return $r[0];
962
963   return NULL;
964 }
965
966 function DB_format_gameid($gameid)
967 {
968   $session = DB_get_session_by_gameid($gameid);
969
970   /* get number of game */
971   $result = mysql_query("SELECT COUNT(*),create_date FROM Game".
972                         " WHERE session='$session' ".
973                         " AND TIMEDIFF(create_date, (SELECT create_date FROM Game WHERE id='$gameid'))<=0 ".
974                         " GROUP by session");
975   $r = mysql_fetch_array($result,MYSQL_NUM);
976
977   return $session.".".$r[0];
978 }
979
980 function DB_get_reminder($user,$gameid)
981 {
982   $queryresult = mysql_query("SELECT COUNT(*) FROM Reminder ".
983                              "  WHERE user_id=$user ".
984                              "  AND game_id=$gameid ".
985                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
986                              "  GROUP BY user_id " );
987
988   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
989   if($r)
990     return $r[0];
991   else
992     return 0;
993 }
994
995 function DB_set_reminder($user,$gameid)
996 {
997   mysql_query("INSERT INTO Reminder ".
998               "  VALUES(NULL, ".DB_quote_smart($user).", ".DB_quote_smart($gameid).
999               ", NULL) ");
1000   return 0;
1001 }
1002
1003 function DB_is_session_active($session)
1004 {
1005   $queryresult = mysql_query("SELECT COUNT(*) FROM Game ".
1006                              "  WHERE session=$session ".
1007                              "  AND status<>'gameover' ");
1008
1009   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1010   if($r)
1011     return $r[0];
1012   else
1013     return -1;
1014 }
1015
1016 function DB_get_score_by_gameid($gameid)
1017 {
1018   /* returns the points of a game from the point of the re parth (<0 if they lost) */
1019   $queryresult = mysql_query("SELECT COUNT(*),party FROM Score ".
1020                              "  WHERE game_id=$gameid ".
1021                              "  GROUP BY party ");
1022
1023   $re     = 0;
1024   $contra = 0;
1025
1026   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1027     {
1028       if($r[1] == "re")
1029         $re += $r[0];
1030       else if ($r[1] == "contra")
1031         $contra += $r[0];
1032     };
1033
1034   return ($re - $contra);
1035 }
1036
1037 function DB_get_gameids_of_finished_games_by_session($session)
1038 {
1039   $ids = array ();
1040
1041   $queryresult = mysql_query("SELECT id FROM Game ".
1042                              "  WHERE session=$session ".
1043                              "   AND status='gameover' ".
1044                              " ORDER BY create_date ASC");
1045
1046   $i=0;
1047   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1048     {
1049       $ids[$i] = $r[0];
1050       $i++;
1051     }
1052
1053   return $ids;
1054 }
1055
1056 function DB_get_card_value_by_cardid($id)
1057 {
1058   $queryresult = mysql_query("SELECT points FROM Card ".
1059                              "  WHERE id=$id ");
1060
1061   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1062   if($r)
1063     return $r[0];
1064   else
1065     return NULL;
1066 }
1067
1068 ?>