BUGFIX: fixed a typo in the text for poverty
[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   /* Autosetup */
709   $r = DB_query_array("SELECT value FROM User_Prefs".
710                       " WHERE user_id='$myid' AND pref_key='autosetup'" );
711   if($r)
712     {
713       if($r[0]=='yes')
714         $PREF['autosetup']='yes';
715       else
716         $PREF['autosetup']='no';
717     }
718   else
719     $PREF['autosetup']='no';
720
721   return $PREF;
722 }
723
724 function DB_get_RULES($gameid)
725 {
726   $r = DB_query_array("SELECT * FROM Rulesets".
727                       " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
728                       " WHERE Game.id='$gameid'" );
729   
730   $RULES["dullen"]      = $r[2];
731   $RULES["schweinchen"] = $r[3];
732   $RULES["call"]        = $r[4];
733   
734   return $RULES;
735 }
736
737 function DB_get_email_pref_by_hash($hash)
738 {
739   $r = DB_query_array("SELECT value FROM Hand".
740                       " LEFT JOIN User_Prefs ON Hand.user_id=User_Prefs.user_id".
741                       " WHERE hash='$hash' AND pref_key='email'" );
742   if($r)
743     {
744       if($r[0]=="emailaddict")
745         return "emailaddict";
746       else
747         return "emailnonaddict";
748     }
749   else
750     return "emailnonaddict";
751 }
752
753 function DB_get_email_pref_by_uid($uid)
754 {
755   $r = DB_query_array("SELECT value FROM User_Prefs ".
756                       " WHERE user_id='$uid' AND pref_key='email'" );
757   if($r)
758     {
759       if($r[0]=="emailaddict")
760         return "emailaddict";
761       else
762         return "emailnonaddict";
763     }
764   else
765     return "emailnonaddict";
766 }
767
768 function DB_get_unused_randomnumbers($userstr)
769 {
770   $r = DB_query_array(" SELECT randomnumbers FROM Game".
771                       "   WHERE randomnumbers NOT IN".
772                       "           (SELECT randomnumbers FROM Game".
773                       "                LEFT JOIN Hand ON Game.id=Hand.game_id".
774                       "                WHERE user_id IN  (". $userstr .")".
775                       "                GROUP BY randomnumbers".
776                       "           )");
777   if($r)
778     return $r[0];
779   else
780     return "";
781 }
782
783 function DB_get_number_of_passwords_recovery($user)
784 {
785   $r = DB_query_array("SELECT COUNT(*) FROM Recovery ".
786                       "  WHERE user_id=$user ".
787                       "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
788                       "  GROUP BY user_id " );
789   if($r)
790     return $r[0];
791   else
792     return 0;
793 }
794
795 function DB_set_recovery_password($user,$newpw)
796 {
797   DB_query("INSERT INTO Recovery VALUES(NULL,".DB_quote_smart($user).
798            ",".DB_quote_smart($newpw).",NULL)");
799   return;
800 }
801
802 function DB_get_card_name($card)
803 {
804   $r = DB_query_array("SELECT strength,suite FROM Card WHERE id='$card'");
805
806   if($r)
807     return $r[0]." of ".$r[1];
808   else
809     return "Error during get_card_name ".$card;
810 }
811
812 function DB_get_current_playid($gameid)
813 {
814   $trick = DB_get_max_trickid($gameid);
815
816   if(!$trick) return NULL;
817
818   $r = DB_query_array("SELECT id FROM Play WHERE trick_id='$trick' ORDER BY create_date DESC LIMIT 1");
819
820   if($r)
821     return $r[0];
822
823   return "";
824 }
825
826 function DB_get_call_by_hash($hash)
827 {
828   $r = DB_query_array("SELECT point_call FROM Hand WHERE hash='$hash'");
829
830   if($r)
831     return $r[0];
832
833   return NULL;
834 }
835
836 function DB_get_partner_call_by_hash($hash)
837 {
838   $partner = DB_get_partner_hash_by_hash($hash);
839
840   if($partner)
841     {
842       $r = DB_query_array("SELECT point_call FROM Hand WHERE hash='$partner'");
843
844       if($r)
845         return $r[0];
846     }
847
848   return NULL;
849 }
850
851 function DB_get_partner_hash_by_hash($hash)
852 {
853   $gameid = DB_get_gameid_by_hash($hash);
854   $party  = DB_get_party_by_hash($hash);
855
856   $r = DB_query_array("SELECT hash FROM Hand WHERE game_id='$gameid' AND party='$party' AND hash<>'$hash'");
857
858   if($r)
859     return $r[0];
860
861   return NULL;
862 }
863
864 function DB_format_gameid($gameid)
865 {
866   $session = DB_get_session_by_gameid($gameid);
867
868   /* get number of game */
869   $r = DB_query_array("SELECT COUNT(*),create_date FROM Game".
870                       " WHERE session='$session' ".
871                       " AND TIMEDIFF(create_date, (SELECT create_date FROM Game WHERE id='$gameid'))<=0 ".
872                       " GROUP by session");
873   return $session.".".$r[0];
874 }
875
876 function DB_get_reminder($user,$gameid)
877 {
878   $r = DB_query_array("SELECT COUNT(*) FROM Reminder ".
879                       "  WHERE user_id=$user ".
880                       "  AND game_id=$gameid ".
881                       "  AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= create_date".
882                       "  GROUP BY user_id " );
883   if($r)
884     return $r[0];
885   else
886     return 0;
887 }
888
889 function DB_set_reminder($user,$gameid)
890 {
891   DB_query("INSERT INTO Reminder ".
892            "  VALUES(NULL, ".DB_quote_smart($user).", ".DB_quote_smart($gameid).
893            ", NULL) ");
894   return 0;
895 }
896
897 function DB_is_session_active($session)
898 {
899   $r = DB_query_array("SELECT COUNT(*) FROM Game ".
900                       "  WHERE session=$session ".
901                       "  AND status<>'gameover' ");
902   if($r)
903     return $r[0];
904   else
905     return -1;
906 }
907
908 function DB_get_score_by_gameid($gameid)
909 {
910   /* returns the points of a game from the point of the re parth (<0 if they lost) */
911   $queryresult = DB_query("SELECT COUNT(*),party FROM Score ".
912                           "  WHERE game_id=$gameid ".
913                           "  GROUP BY party ");
914   $re     = 0;
915   $contra = 0;
916
917   while($r = DB_fetch_array($queryresult) )
918     {
919       if($r[1] == "re")
920         $re += $r[0];
921       else if ($r[1] == "contra")
922         $contra += $r[0];
923     };
924
925   return ($re - $contra);
926 }
927
928 function DB_get_gameids_of_finished_games_by_session($session)
929 {
930   $ids = array ();
931
932   if($session==0) /* return all games */
933     $queryresult = DB_query("SELECT id FROM Game ".
934                             " WHERE status='gameover' ".
935                             " ORDER BY create_date ASC");
936   else   /* return games in a session */
937     $queryresult = DB_query("SELECT id FROM Game ".
938                             "  WHERE session=$session ".
939                             "   AND status='gameover' ".
940                             " ORDER BY create_date ASC");
941
942   $i=0;
943   while($r = DB_fetch_array($queryresult) )
944     {
945       $ids[$i] = $r[0];
946       $i++;
947     }
948
949   return $ids;
950 }
951
952 function DB_get_card_value_by_cardid($id)
953 {
954   $r = DB_query_array("SELECT points FROM Card ".
955                       "  WHERE id=$id ");
956
957   if($r)
958     return $r[0];
959   else
960     return NULL;
961 }
962
963 function DB_get_userid($type,$var1="",$var2="")
964 {
965   /* get the userid of a user
966    * this can be done several ways, which are all handled below
967    * if a email/password combination is given and it doesn't work, we also
968    * need to check the recovery table for additional passwords
969    */
970
971   $r = NULL;
972   
973   switch($type)
974     {
975     case 'name':
976       $result = DB_query("SELECT id FROM User WHERE fullname=".DB_quote_smart($var1));
977       break;
978     case 'hash':
979       $result = DB_query("SELECT user_id FROM Hand WHERE hash=".DB_quote_smart($var1));
980       break;
981     case 'password':
982       $result = DB_query("SELECT id FROM User WHERE password=".DB_quote_smart($var1));
983       break;
984     case 'email':
985       $result = DB_query("SELECT id FROM User WHERE email=".DB_quote_smart($var1));
986       break;
987     case 'email-password':
988       $result = DB_query("SELECT id FROM User WHERE email=".DB_quote_smart($var1)." AND password=".DB_quote_smart($var2));
989       $r = DB_fetch_array($result);
990       /* test if a recovery password has been set */
991       if(!$r)
992         {
993           echo "testing alternative password";
994           $result = DB_query("SELECT User.id FROM User".
995                              " LEFT JOIN Recovery ON User.id=Recovery.user_id".
996                              " WHERE email=".DB_quote_smart($var1).
997                              " AND Recovery.password=".DB_quote_smart($var2).
998                              " AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= Recovery.create_date");
999         }
1000       break;
1001     case 'gameid-position':
1002       $result = DB_query("SELECT user_id FROM Hand WHERE game_id=".
1003                          DB_quote_smart($var1)." AND position=".
1004                          DB_quote_smart($var2));
1005       break;
1006     }
1007
1008   if(!$r)
1009     $r = DB_fetch_array($result);
1010
1011   if($r)
1012     return $r[0];
1013   else
1014     return 0;
1015 }
1016
1017 function DB_get_email($type,$var1='',$var2='')
1018 {
1019   /* return the email of a user
1020    * this is used for sending out emails, but also for
1021    * testing the login for example
1022    */
1023   switch($type)
1024     {
1025     case 'name':
1026       $result = DB_query("SELECT email FROM User WHERE fullname=".DB_quote_smart($var1)."");
1027       break;
1028     case 'userid':
1029       $result = DB_query("SELECT email FROM User WHERE id=".DB_quote_smart($var1)."");
1030       break;
1031     case 'hash':
1032       $result = DB_query("SELECT User.email FROM User ".
1033                          "LEFT JOIN Hand ON Hand.user_id=User.id ".
1034                          "WHERE Hand.hash=".DB_quote_smart($var1)."");
1035       break;
1036     case 'position-gameid':
1037       $result = DB_query("SELECT email FROM User ".
1038                          "LEFT JOIN Hand ON User.id=Hand.user_id ".
1039                          "LEFT JOIN Game ON Game.id=Hand.game_id ".
1040                          "WHERE Game.id=".DB_quote_smart($var2)." ".
1041                          "AND Hand.position=".DB_quote_smart($var1)."");
1042       break;
1043     }
1044   
1045   $r = DB_fetch_array($result);
1046
1047   if($r)
1048     return $r[0];
1049   else
1050     return "";
1051 }
1052
1053 function DB_get_name($type,$var1='')
1054 {
1055   /* get the full name of a user
1056    * a user can be uniquely identified several ways
1057    */
1058   switch($type)
1059     {
1060     case 'hash':
1061       $r = DB_query_array("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($var1));
1062       break;
1063     case 'email':
1064       $r = DB_query_array("SELECT fullname FROM User WHERE email=".DB_quote_smart($var1));
1065       break;
1066     case 'userid':
1067       $r = DB_query_array("SELECT fullname FROM User  WHERE id=".DB_quote_smart($var1));
1068     }
1069
1070   if($r)
1071     return $r[0];
1072   else
1073     return "";
1074 }
1075
1076 ?>