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