LAYOUT: keep notes area from overflowing
[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_get_names_of_last_logins($N)
582 {
583   $names  = array();
584
585   $result = mysql_query("SELECT fullname FROM User ORDER BY last_login DESC LIMIT $N");
586   while($r = mysql_fetch_array($result,MYSQL_NUM))
587     $names[] = $r[0];
588
589   return $names;
590 }
591
592 function DB_get_names_of_new_logins($N)
593 {
594   $names  = array();
595
596   $result = mysql_query("SELECT fullname FROM User ORDER BY create_date DESC, id DESC LIMIT $N");
597   while($r = mysql_fetch_array($result,MYSQL_NUM))
598     $names[] = $r[0];
599
600   return $names;
601 }
602
603 function DB_update_game_timestamp($gameid)
604 {
605   mysql_query("UPDATE Game SET mod_date = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($gameid));
606   return;
607 }
608
609
610 function DB_update_user_timestamp($userid)
611 {
612   mysql_query("UPDATE User SET last_login = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($userid));
613   return;
614 }
615
616 function DB_get_user_timestamp($userid)
617 {
618   $result = mysql_query("SELECT last_login FROM User WHERE id=".DB_quote_smart($userid));
619   $r      = mysql_fetch_array($result,MYSQL_NUM);
620
621   if($r)
622     return $r[0];
623   else
624     return NULL;
625 }
626 function DB_get_user_timezone($userid)
627 {
628   $result = mysql_query("SELECT timezone FROM User WHERE id=".DB_quote_smart($userid));
629   $r      = mysql_fetch_array($result,MYSQL_NUM);
630
631   if($r)
632     return $r[0];
633   else
634     return "Europe/London";
635 }
636
637 function DB_insert_comment($comment,$playid,$userid)
638 {
639   mysql_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")");
640
641   return;
642 }
643
644 function DB_insert_note($comment,$gameid,$userid)
645 {
646   mysql_query("INSERT INTO Notes VALUES (NULL,NULL,NULL,$userid,$gameid, ".DB_quote_smart($comment).")");
647
648   return;
649 }
650
651 function DB_get_notes_by_userid_and_gameid($userid,$gameid)
652 {
653   $notes = array();
654
655   $result = mysql_query("SELECT comment FROM Notes WHERE user_id=".DB_quote_smart($userid) .
656                         " AND game_id=".DB_quote_smart($gameid));
657
658   while($r = mysql_fetch_array($result,MYSQL_NUM))
659     $notes[] = $r[0];
660
661   return $notes;
662 }
663
664
665 function DB_get_gametype_by_gameid($id)
666 {
667   $result = mysql_query("SELECT type FROM Game WHERE id=".DB_quote_smart($id));
668   $r      = mysql_fetch_array($result,MYSQL_NUM);
669
670   if($r)
671     return $r[0]."";
672   else
673     return "";
674 }
675
676 function DB_set_gametype_by_gameid($id,$p)
677 {
678   mysql_query("UPDATE Game SET type='".$p."' WHERE id=".DB_quote_smart($id));
679   return;
680 }
681
682 function DB_get_solo_by_gameid($id)
683 {
684   $result = mysql_query("SELECT solo FROM Game WHERE id=".DB_quote_smart($id));
685   $r      = mysql_fetch_array($result,MYSQL_NUM);
686
687   if($r)
688     return $r[0]."";
689   else
690     return "";
691 }
692
693
694 function DB_get_startplayer_by_gameid($id)
695 {
696   $result = mysql_query("SELECT startplayer FROM Game WHERE id=".DB_quote_smart($id));
697   $r      = mysql_fetch_array($result,MYSQL_NUM);
698
699   if($r)
700     return $r[0];
701   else
702     return 0;
703 }
704
705 function DB_set_startplayer_by_gameid($id,$p)
706 {
707   mysql_query("UPDATE Game SET startplayer='".$p."' WHERE id=".DB_quote_smart($id));
708   return;
709 }
710
711 function DB_get_player_by_gameid($id)
712 {
713   $result = mysql_query("SELECT player FROM Game WHERE id=".DB_quote_smart($id));
714   $r      = mysql_fetch_array($result,MYSQL_NUM);
715
716   if($r)
717     return $r[0];
718   else
719     return 0;
720 }
721 function DB_set_player_by_gameid($id,$p)
722 {
723   mysql_query("UPDATE Game SET player='".DB_quote_smart($p)."' WHERE id=".DB_quote_smart($id));
724   return;
725 }
726
727
728
729 function DB_get_ruleset_by_gameid($id)
730 {
731   $result = mysql_query("SELECT ruleset FROM Game WHERE id=".DB_quote_smart($id));
732   $r      = mysql_fetch_array($result,MYSQL_NUM);
733
734   if($r)
735     return $r[0];
736   else
737     return NULL;
738 }
739
740 function DB_get_session_by_gameid($id)
741 {
742   $result = mysql_query("SELECT session FROM Game WHERE id=".DB_quote_smart($id));
743   $r      = mysql_fetch_array($result,MYSQL_NUM);
744
745   if($r)
746     return $r[0];
747   else
748     return NULL;
749 }
750
751 function DB_get_max_session()
752 {
753   $result = mysql_query("SELECT MAX(session) FROM Game");
754   $r      = mysql_fetch_array($result,MYSQL_NUM);
755
756   if($r)
757     return $r[0];
758   else
759     return 0;
760 }
761
762 function DB_get_hashes_by_session($session,$user)
763 {
764   $r = array();
765
766   $result = mysql_query("SELECT Hand.hash FROM Hand".
767                         " LEFT JOIN Game ON Game.id=Hand.game_id ".
768                         " WHERE Game.session=".DB_quote_smart($session).
769                         " AND Hand.user_id=".DB_quote_smart($user).
770                         " ORDER BY Game.create_date ASC");
771   while($t = mysql_fetch_array($result,MYSQL_NUM))
772     $r[] = $t[0];
773
774   return $r;
775 }
776
777 function DB_get_ruleset($dullen,$schweinchen,$call)
778 {
779   $r = array();
780
781   $result = mysql_query("SELECT id FROM Rulesets WHERE".
782                         " dullen=".DB_quote_smart($dullen)." AND ".
783                         " call=".DB_quote_smart($call)." AND ".
784                         " schweinchen=".DB_quote_smart($schweinchen));
785   if($result)
786     $r    = mysql_fetch_array($result,MYSQL_NUM);
787
788   if($r)
789     return $r[0]; /* found ruleset */
790   else
791     {
792       /* create new one */
793       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
794                             DB_quote_smart($dullen).",".
795                             DB_quote_smart($schweinchen).",".
796                             DB_quote_smart($call).
797                             ", NULL)");
798       if($result)
799         return mysql_insert_id();
800     };
801
802   return -1; /* something went wrong */
803 }
804
805 function DB_get_party_by_hash($hash)
806 {
807   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
808   $r      = mysql_fetch_array($result,MYSQL_NUM);
809
810   if($r)
811     return $r[0];
812   else
813     return NULL;
814 }
815
816 function DB_get_party_by_gameid_and_userid($gameid,$userid)
817 {
818   $result = mysql_query("SELECT party FROM Hand".
819                         " WHERE game_id=".DB_quote_smart($gameid).
820                         "  AND user_id=".DB_quote_smart($userid));
821   $r      = mysql_fetch_array($result,MYSQL_NUM);
822
823   if($r)
824     return $r[0];
825   else
826     return NULL;
827 }
828
829 function DB_set_party_by_hash($hash,$party)
830 {
831   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
832   return;
833 }
834
835 function DB_get_PREF($myid)
836 {
837   global $PREF;
838
839   /* Cardset */
840   $result = mysql_query("SELECT value from User_Prefs".
841                         " WHERE user_id='$myid' AND pref_key='cardset'" );
842   $r = mysql_fetch_array($result,MYSQL_NUM);
843   if($r)
844     {
845       if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
846         $PREF["cardset"]="altenburg";
847       else
848         $PREF["cardset"]="english";
849     }
850   else
851     $PREF["cardset"]="english";
852
853   /* Email */
854   $result = mysql_query("SELECT value FROM User_Prefs".
855                         " WHERE user_id='$myid' AND pref_key='email'" );
856   $r = mysql_fetch_array($result,MYSQL_NUM);
857   if($r)
858     {
859       if($r[0]=="emailaddict")
860         $PREF["email"]="emailaddict";
861       else
862         $PREF["email"]="emailnonaddict";
863     }
864   else
865     $PREF["email"]="emailnonaddict";
866
867   return;
868 }
869
870 function DB_get_email_pref_by_hash($hash)
871 {
872   $result = mysql_query("SELECT value FROM Hand".
873                         " LEFT JOIN User_Prefs ON Hand.user_id=User_Prefs.user_id".
874                         " WHERE hash='$hash' AND pref_key='email'" );
875   $r = mysql_fetch_array($result,MYSQL_NUM);
876   if($r)
877     {
878       if($r[0]=="emailaddict")
879         return "emailaddict";
880       else
881         return "emailnonaddict";
882     }
883   else
884     return "emailnonaddict";
885 }
886
887 function DB_get_email_pref_by_uid($uid)
888 {
889   $result = mysql_query("SELECT value FROM User_Prefs ".
890                         " WHERE user_id='$uid' AND pref_key='email'" );
891   $r = mysql_fetch_array($result,MYSQL_NUM);
892   if($r)
893     {
894       if($r[0]=="emailaddict")
895         return "emailaddict";
896       else
897         return "emailnonaddict";
898     }
899   else
900     return "emailnonaddict";
901 }
902
903 function DB_get_unused_randomnumbers($userstr)
904 {
905   $queryresult = mysql_query(" SELECT randomnumbers FROM Game".
906                              "   WHERE randomnumbers NOT IN".
907                              "           (SELECT randomnumbers FROM Game".
908                              "                LEFT JOIN Hand ON Game.id=Hand.game_id".
909                              "                WHERE user_id IN  (". $userstr .")".
910                              "                GROUP BY randomnumbers".
911                              "           )");
912
913
914   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
915   if($r)
916     return $r[0];
917   else
918     return "";
919 }
920
921 function DB_get_number_of_passwords_recovery($user)
922 {
923   $queryresult = mysql_query("SELECT COUNT(*) FROM Recovery ".
924                              "  WHERE user_id=$user ".
925                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
926                              "  GROUP BY user_id " );
927
928   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
929   if($r)
930     return $r[0];
931   else
932     return 0;
933 }
934
935 function DB_set_recovery_password($user,$newpw)
936 {
937   mysql_query("INSERT INTO Recovery VALUES(NULL,".DB_quote_smart($user).
938               ",".DB_quote_smart($newpw).",NULL)");
939
940   return;
941 }
942
943 function DB_get_card_name($card)
944 {
945   $queryresult = mysql_query("SELECT strength,suite FROM Card WHERE id='$card'");
946
947   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
948   if($r)
949     return $r[0]." of ".$r[1];
950   else
951     return "Error during get_card_name ".$card;
952 }
953
954 function DB_get_current_playid($gameid)
955 {
956   $trick = DB_get_max_trickid($gameid);
957
958   if(!$trick) return NULL;
959
960   $queryresult = mysql_query("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1");
961
962   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
963   if($r)
964     return $r[0];
965
966   return "";
967 }
968
969 function DB_get_call_by_hash($hash)
970 {
971   $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$hash'");
972
973   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
974   if($r)
975     return $r[0];
976
977   return NULL;
978 }
979
980 function DB_get_partner_call_by_hash($hash)
981 {
982   $partner = DB_get_partner_hash_by_hash($hash);
983
984   if($partner)
985     {
986       $queryresult = mysql_query("SELECT point_call FROM Hand WHERE hash='$partner'");
987
988       $r = mysql_fetch_array($queryresult,MYSQL_NUM);
989       if($r)
990         return $r[0];
991     }
992
993   return NULL;
994 }
995
996 function DB_get_partner_hash_by_hash($hash)
997 {
998   $gameid = DB_get_gameid_by_hash($hash);
999   $party  = DB_get_party_by_hash($hash);
1000
1001   $queryresult = mysql_query("SELECT hash FROM Hand WHERE game_id='$gameid' AND party='$party' AND hash<>'$hash'");
1002
1003   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1004   if($r)
1005     return $r[0];
1006
1007   return NULL;
1008 }
1009
1010 function DB_format_gameid($gameid)
1011 {
1012   $session = DB_get_session_by_gameid($gameid);
1013
1014   /* get number of game */
1015   $result = mysql_query("SELECT COUNT(*),create_date FROM Game".
1016                         " WHERE session='$session' ".
1017                         " AND TIMEDIFF(create_date, (SELECT create_date FROM Game WHERE id='$gameid'))<=0 ".
1018                         " GROUP by session");
1019   $r = mysql_fetch_array($result,MYSQL_NUM);
1020
1021   return $session.".".$r[0];
1022 }
1023
1024 function DB_get_reminder($user,$gameid)
1025 {
1026   $queryresult = mysql_query("SELECT COUNT(*) FROM Reminder ".
1027                              "  WHERE user_id=$user ".
1028                              "  AND game_id=$gameid ".
1029                              "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
1030                              "  GROUP BY user_id " );
1031
1032   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1033   if($r)
1034     return $r[0];
1035   else
1036     return 0;
1037 }
1038
1039 function DB_set_reminder($user,$gameid)
1040 {
1041   mysql_query("INSERT INTO Reminder ".
1042               "  VALUES(NULL, ".DB_quote_smart($user).", ".DB_quote_smart($gameid).
1043               ", NULL) ");
1044   return 0;
1045 }
1046
1047 function DB_is_session_active($session)
1048 {
1049   $queryresult = mysql_query("SELECT COUNT(*) FROM Game ".
1050                              "  WHERE session=$session ".
1051                              "  AND status<>'gameover' ");
1052
1053   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1054   if($r)
1055     return $r[0];
1056   else
1057     return -1;
1058 }
1059
1060 function DB_get_score_by_gameid($gameid)
1061 {
1062   /* returns the points of a game from the point of the re parth (<0 if they lost) */
1063   $queryresult = mysql_query("SELECT COUNT(*),party FROM Score ".
1064                              "  WHERE game_id=$gameid ".
1065                              "  GROUP BY party ");
1066
1067   $re     = 0;
1068   $contra = 0;
1069
1070   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1071     {
1072       if($r[1] == "re")
1073         $re += $r[0];
1074       else if ($r[1] == "contra")
1075         $contra += $r[0];
1076     };
1077
1078   return ($re - $contra);
1079 }
1080
1081 function DB_get_gameids_of_finished_games_by_session($session)
1082 {
1083   $ids = array ();
1084
1085   $queryresult = mysql_query("SELECT id FROM Game ".
1086                              "  WHERE session=$session ".
1087                              "   AND status='gameover' ".
1088                              " ORDER BY create_date ASC");
1089
1090   $i=0;
1091   while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
1092     {
1093       $ids[$i] = $r[0];
1094       $i++;
1095     }
1096
1097   return $ids;
1098 }
1099
1100 function DB_get_card_value_by_cardid($id)
1101 {
1102   $queryresult = mysql_query("SELECT points FROM Card ".
1103                              "  WHERE id=$id ");
1104
1105   $r = mysql_fetch_array($queryresult,MYSQL_NUM);
1106   if($r)
1107     return $r[0];
1108   else
1109     return NULL;
1110 }
1111
1112 ?>