added some more hints for what kind of game is happening at the table; cleanup
[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
65 function DB_get_email_by_userid($id)
66 {
67   $result = mysql_query("SELECT email FROM User WHERE id=".DB_quote_smart($id)."");
68   $r      = mysql_fetch_array($result,MYSQL_NUM);
69   
70   if($r)
71     return $r[0];
72   else
73     return "";
74 }
75
76 function DB_get_email_by_pos_and_gameid($pos,$gameid)
77 {
78   $result = mysql_query("SELECT email FROM User ".
79                         "LEFT JOIN Hand ON User.id=Hand.user_id ".
80                         "LEFT JOIN Game ON Game.id=Hand.game_id ". 
81                         "WHERE Game.id=".DB_quote_smart($gameid)." ".
82                         "AND Hand.position=".DB_quote_smart($pos)."");
83   $r      = mysql_fetch_array($result,MYSQL_NUM);
84   
85   if($r)
86     return $r[0];
87   else
88     return "";
89 }
90
91 function DB_get_email_by_hash($hash)
92 {
93   $result = mysql_query("SELECT User.email FROM User LEFT JOIN Hand ON Hand.user_id=User.id WHERE Hand.hash=".DB_quote_smart($hash)."");
94   $r      = mysql_fetch_array($result,MYSQL_NUM);
95   
96   if($r)
97     return $r[0];
98   else
99     return "";
100 }
101
102 function DB_get_userid_by_name($name)
103 {
104   $result = mysql_query("SELECT id FROM User WHERE fullname=".DB_quote_smart($name));
105   $r      = mysql_fetch_array($result,MYSQL_NUM);
106   
107   if($r)
108     return $r[0];
109   else
110     return 0;
111 }
112 function DB_get_userid_by_passwd($passwd)
113 {
114   $result = mysql_query("SELECT id FROM User WHERE password=".DB_quote_smart($passwd));
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_email($email)
123 {
124   $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($email));
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_and_password($email,$password)
133 {
134   $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($email)." AND password=".DB_quote_smart($password));
135   $r      = mysql_fetch_array($result,MYSQL_NUM);
136   
137   if($r)
138     return $r[0];
139   else
140     return 0;
141 }
142
143 function DB_get_handid_by_hash($hash)
144 {
145   $result = mysql_query("SELECT id FROM Hand WHERE hash=".DB_quote_smart($hash));
146   $r      = mysql_fetch_array($result,MYSQL_NUM);
147   
148   if($r)
149     return $r[0];
150   else
151     return 0;
152 }
153
154 function DB_get_handid_by_gameid_and_position($gameid,$pos)
155 {
156   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
157                         DB_quote_smart($gameid)." AND position=".
158                         DB_quote_smart($pos));
159   $r      = mysql_fetch_array($result,MYSQL_NUM);
160   
161   if($r)
162     return $r[0];
163   else
164     return -1;
165 }
166 function DB_get_userid_by_gameid_and_position($gameid,$pos)
167 {
168   $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
169                         DB_quote_smart($gameid)." AND position=".
170                         DB_quote_smart($pos));
171   $r      = mysql_fetch_array($result,MYSQL_NUM);
172   
173   if($r)
174     return $r[0];
175   else
176     return -1;
177 }
178
179
180 function DB_get_handid_by_gameid_and_userid($gameid,$userid)
181 {
182   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
183                         DB_quote_smart($gameid)." AND user_id=".
184                         DB_quote_smart($userid));
185   $r      = mysql_fetch_array($result,MYSQL_NUM);
186   
187   if($r)
188     return $r[0];
189   else
190     return -1;
191 }
192
193 function DB_get_userid_by_hash($hash)
194 {
195   $result = mysql_query("SELECT user_id FROM Hand WHERE hash=".DB_quote_smart($hash));
196   $r      = mysql_fetch_array($result,MYSQL_NUM);
197   
198   if($r)
199     return $r[0];
200   else
201     return 0;
202 }
203
204 function DB_get_pos_by_hash($hash)
205 {
206   $result = mysql_query("SELECT position FROM Hand WHERE hash=".DB_quote_smart($hash));
207   $r      = mysql_fetch_array($result,MYSQL_NUM);
208   
209   if($r)
210     return $r[0];
211   else
212     return 0;
213 }
214
215 function DB_get_name_by_hash($hash)
216 {
217   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($hash));
218   $r      = mysql_fetch_array($result,MYSQL_NUM);
219   
220   if($r)
221     return $r[0];
222   else
223     return "";
224 }
225
226 function DB_get_name_by_email($email)
227 {
228   $result = mysql_query("SELECT fullname FROM User WHERE email=".DB_quote_smart($email));
229   $r      = mysql_fetch_array($result,MYSQL_NUM);
230   
231   if($r)
232     return $r[0];
233   else
234     return "";
235 }
236
237 function DB_get_name_by_userid($id)
238 {
239   $result = mysql_query("SELECT fullname FROM User  WHERE id=".DB_quote_smart($id));
240   $r      = mysql_fetch_array($result,MYSQL_NUM);
241   
242   if($r)
243     return $r[0];
244   else
245     return "";
246 }
247
248 function DB_get_status_by_hash($hash)
249 {
250   $result = mysql_query("SELECT status FROM Hand WHERE hash=".DB_quote_smart($hash));
251   $r      = mysql_fetch_array($result,MYSQL_NUM);
252   
253   if($r)
254     return $r[0];
255   else
256     return 0;
257 }
258
259 function DB_set_game_status_by_gameid($id,$status)
260 {
261   mysql_query("UPDATE Game SET status='".$status."' WHERE id=".DB_quote_smart($id));
262   return;
263 }
264
265 function DB_set_sickness_by_gameid($id,$status)
266 {
267   mysql_query("UPDATE Game SET sickness='".$status."' WHERE id=".DB_quote_smart($id));
268   return;
269 }
270 function DB_get_sickness_by_gameid($id)
271 {
272   $result = mysql_query("SELECT sickness FROM Game WHERE id=".DB_quote_smart($id));
273   $r      = mysql_fetch_array($result,MYSQL_NUM);
274   
275   if($r)
276     return $r[0];
277   else
278     return NULL;
279 }
280
281 function DB_get_game_status_by_gameid($id)
282 {
283   $result = mysql_query("SELECT status FROM Game WHERE id=".DB_quote_smart($id));
284   $r      = mysql_fetch_array($result,MYSQL_NUM);
285   
286   if($r)
287     return $r[0];
288   else
289     return NULL;
290 }
291
292 function DB_set_hand_status_by_hash($hash,$status)
293 {
294   mysql_query("UPDATE Hand SET status='".$status."' WHERE hash=".DB_quote_smart($hash));
295   return;
296 }
297
298 function DB_get_hand_status_by_userid_and_gameid($uid,$gid)
299 {
300   $result = mysql_query("SELECT status FROM Hand WHERE user_id=".DB_quote_smart($uid).
301                         " AND game_id=".DB_quote_smart($gid));
302   $r      = mysql_fetch_array($result,MYSQL_NUM);
303   
304   if($r)
305     return $r[0];
306   else
307     return 0;
308 }
309
310 function DB_get_sickness_by_userid_and_gameid($uid,$gid)
311 {
312   $result = mysql_query("SELECT sickness FROM Hand WHERE user_id=".DB_quote_smart($uid).
313                         " AND game_id=".DB_quote_smart($gid));
314   $r      = mysql_fetch_array($result,MYSQL_NUM);
315   
316   if($r)
317     return $r[0];
318   else
319     return 0;
320 }
321
322 function DB_get_sickness_by_pos_and_gameid($pos,$gid)
323 {
324   $result = mysql_query("SELECT sickness FROM Hand WHERE position=".DB_quote_smart($pos).
325                         " AND game_id=".DB_quote_smart($gid));
326   $r      = mysql_fetch_array($result,MYSQL_NUM);
327   
328   if($r)
329     return $r[0];
330   else
331     return 0;
332 }
333
334 function DB_get_gameid_by_hash($hash)
335 {
336   $result = mysql_query("SELECT game_id FROM Hand WHERE hash=".DB_quote_smart($hash));
337   $r      = mysql_fetch_array($result,MYSQL_NUM);
338   
339   if($r)
340     return $r[0];
341   else
342     return 0;
343 }
344
345 function DB_cancel_game($hash)
346 {
347   $gameid = DB_get_gameid_by_hash($hash);
348
349   if(!$gameid)
350     return;
351
352   /* get the IDs of all players */
353   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid));
354   while($r = mysql_fetch_array($result,MYSQL_NUM))
355     {
356       $id = $r[0];
357       
358       $tmp = mysql_query("SELECT id  FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
359       $tmp = mysql_fetch_array($tmp,MYSQL_NUM);
360       mysql_query("DELETE FROM Play WHERE hand_card_id=".DB_quote_smart($tmp[0]));
361
362       
363       mysql_query("DELETE FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
364       mysql_query("DELETE FROM Score WHERE hand_id=".DB_quote_smart($id));
365       mysql_query("DELETE FROM Hand WHERE id=".DB_quote_smart($id));
366     }
367   
368   /* delete game */
369   mysql_query("DELETE FROM User_Game_Prefs WHERE game_id=".DB_quote_smart($gameid));
370   mysql_query("DELETE FROM Trick WHERE game_id=".DB_quote_smart($gameid));
371   mysql_query("DELETE FROM Game WHERE id=".DB_quote_smart($gameid));
372   
373   return;
374 }
375
376 function DB_get_hand($me)
377 {
378   $cards = array();
379
380   $handid = DB_get_handid_by_hash($me);
381
382   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid)." and played='false' ");
383   while($r = mysql_fetch_array($result,MYSQL_NUM))
384     $cards[]=$r[0];
385
386   return $cards;
387 }
388
389 function DB_get_all_hand($me)
390 {
391   $cards = array();
392
393   $handid = DB_get_handid_by_hash($me);
394
395   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid));
396   while($r = mysql_fetch_array($result,MYSQL_NUM))
397     $cards[]=$r[0];
398
399   return $cards;
400 }
401
402 function DB_get_cards_by_trick($id)
403 {
404   $cards = array();
405   $i     = 1;
406   
407   $result = mysql_query("SELECT card_id,position FROM Play LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id ".
408                         "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
409                         "WHERE trick_id=".
410                         DB_quote_smart($id)." ORDER BY sequence ASC");
411   while($r = mysql_fetch_array($result,MYSQL_NUM))
412     {
413       $cards[$i]=array("card"=>$r[0],"pos"=>$r[1]);
414       $i++;
415     }
416
417   return $cards;
418 }
419
420
421 function DB_set_solo_by_hash($hash,$solo)
422 {
423   mysql_query("UPDATE Hand SET solo=".DB_quote_smart($solo)." WHERE hash=".DB_quote_smart($hash));
424   return;
425 }
426
427 function DB_set_solo_by_gameid($id,$solo)
428 {
429   mysql_query("UPDATE Game SET solo=".DB_quote_smart($solo)." WHERE id=".DB_quote_smart($id));
430   return;
431 }
432
433 function DB_set_sickness_by_hash($hash,$sickness)
434 {
435   mysql_query("UPDATE Hand SET sickness=".DB_quote_smart($sickness)." WHERE hash=".DB_quote_smart($hash));
436   return;
437 }
438
439 function DB_get_current_trickid($gameid)
440 {
441   $trickid  = NULL;
442   $sequence = NULL;
443   $number   = 0;
444
445   $result = mysql_query("SELECT Trick.id,MAX(Play.sequence) FROM Play ".
446                         "LEFT JOIN Trick ON Play.trick_id=Trick.id ".
447                         "WHERE Trick.game_id=".DB_quote_smart($gameid)." ".
448                         "GROUP BY Trick.id");
449   while( $r = mysql_fetch_array($result,MYSQL_NUM) )
450     {
451       $trickid  = $r[0];
452       $sequence = $r[1];
453       $number++;
454     };
455   
456   if(!$sequence || $sequence==4)
457     {
458       mysql_query("INSERT INTO Trick VALUES (NULL,NULL,NULL, ".DB_quote_smart($gameid).")");
459       $trickid  = mysql_insert_id();
460       $sequence = 1;
461       $number++;
462     }
463   else
464     {
465       $sequence++;
466     }
467
468   return array($trickid,$sequence,$number);
469 }
470
471 function DB_get_max_trickid($gameid)
472 {
473   $result = mysql_query("SELECT MAX(id) FROM Trick WHERE game_id=".DB_quote_smart($gameid));
474   $r = mysql_fetch_array($result,MYSQL_NUM) ;
475   
476   
477   return ($r?$r[0]:NULL);
478 }
479
480 function DB_play_card($trickid,$handcardid,$sequence)
481 {
482   mysql_query("INSERT INTO Play VALUES(NULL,NULL,NULL,".DB_quote_smart($trickid).
483               ",".DB_quote_smart($handcardid).",".DB_quote_smart($sequence).")");
484       
485   $playid = mysql_insert_id();
486   return $playid;
487 }
488
489 function DB_get_all_names_by_gameid($id)
490 {
491   $names = array();
492   
493   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE game_id=".
494                         DB_quote_smart($id)." ORDER BY position ASC");
495   while($r = mysql_fetch_array($result,MYSQL_NUM))
496     $names[] = $r[0];
497
498   return $names;
499 }
500
501 function DB_get_all_userid_by_gameid($id)
502 {
503   $names = array();
504   
505   $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
506                         DB_quote_smart($id)." ORDER BY position ");
507   while($r = mysql_fetch_array($result,MYSQL_NUM))
508     $names[] = $r[0];
509
510   return $names;
511 }
512
513 function DB_get_hash_from_game_and_pos($id,$pos)
514 {
515   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and position=".DB_quote_smart($pos));
516   $r      = mysql_fetch_array($result,MYSQL_NUM);
517   
518   if($r)
519     return $r[0];
520   else
521     return "";
522 }
523
524 function DB_get_hash_from_gameid_and_userid($id,$user)
525 {
526   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and user_id=".DB_quote_smart($user));
527   $r      = mysql_fetch_array($result,MYSQL_NUM);
528   
529   if($r)
530     return $r[0];
531   else
532     return "";
533 }
534
535 function DB_get_all_names()
536 {
537   $names  = array();
538
539   $result = mysql_query("SELECT fullname FROM User");
540   while($r = mysql_fetch_array($result,MYSQL_NUM))
541     $names[] = $r[0];
542
543   return $names;
544 }
545
546 function DB_update_game_timestamp($gameid)
547 {
548   mysql_query("UPDATE Game SET mod_date = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($gameid));
549   return;
550 }
551
552
553 function DB_update_user_timestamp($userid)
554 {
555   mysql_query("UPDATE User SET last_login = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($userid));
556   return;
557 }
558
559 function DB_get_user_timestamp($userid)
560 {
561   $result = mysql_query("SELECT last_login FROM User WHERE id=".DB_quote_smart($userid));
562   $r      = mysql_fetch_array($result,MYSQL_NUM);
563   
564   if($r)
565     return $r[0];
566   else
567     return NULL;
568 }
569 function DB_get_user_timezone($userid)
570 {
571   $result = mysql_query("SELECT timezone FROM User WHERE id=".DB_quote_smart($userid));
572   $r      = mysql_fetch_array($result,MYSQL_NUM);
573   
574   if($r)
575     return $r[0];
576   else
577     return 0;
578 }
579
580 function DB_insert_comment($comment,$playid,$userid)
581 {
582   mysql_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")");
583   return;
584 }
585
586 function DB_get_gametype_by_gameid($id)
587 {
588   $result = mysql_query("SELECT type FROM Game WHERE id=".DB_quote_smart($id));
589   $r      = mysql_fetch_array($result,MYSQL_NUM);
590   
591   if($r)
592     return $r[0]."";
593   else
594     return "";
595 }
596
597 function DB_set_gametype_by_gameid($id,$p)
598 {
599   mysql_query("UPDATE Game SET type='".$p."' WHERE id=".DB_quote_smart($id));
600   return;
601 }
602
603 function DB_get_solo_by_gameid($id)
604 {
605   $result = mysql_query("SELECT solo FROM Game WHERE id=".DB_quote_smart($id));
606   $r      = mysql_fetch_array($result,MYSQL_NUM);
607   
608   if($r)
609     return $r[0]."";
610   else
611     return "";
612 }
613
614
615 function DB_get_startplayer_by_gameid($id)
616 {
617   $result = mysql_query("SELECT startplayer FROM Game WHERE id=".DB_quote_smart($id));
618   $r      = mysql_fetch_array($result,MYSQL_NUM);
619   
620   if($r)
621     return $r[0];
622   else
623     return 0;
624 }
625
626 function DB_set_startplayer_by_gameid($id,$p)
627 {
628   mysql_query("UPDATE Game SET startplayer='".$p."' WHERE id=".DB_quote_smart($id));
629   return;
630 }
631
632 function DB_get_ruleset_by_gameid($id)
633 {
634   $result = mysql_query("SELECT ruleset FROM Game WHERE id=".DB_quote_smart($id));
635   $r      = mysql_fetch_array($result,MYSQL_NUM);
636   
637   if($r)
638     return $r[0];
639   else
640     return NULL;
641 }
642
643 function DB_get_session_by_gameid($id)
644 {
645   $result = mysql_query("SELECT session FROM Game WHERE id=".DB_quote_smart($id));
646   $r      = mysql_fetch_array($result,MYSQL_NUM);
647   
648   if($r)
649     return $r[0];
650   else
651     return NULL;
652 }
653
654 function DB_get_max_session()
655 {
656   $result = mysql_query("SELECT MAX(session) FROM Game");
657   $r      = mysql_fetch_array($result,MYSQL_NUM);
658   
659   if($r)
660     return $r[0];
661   else
662     return 0;
663 }
664
665 function DB_get_ruleset($dullen,$schweinchen)
666 {
667   $r = array();
668   
669   $result = mysql_query("SELECT id FROM Rulesets WHERE".
670                         " dullen=".DB_quote_smart($dullen)." AND ".
671                         " schweinchen=".DB_quote_smart($schweinchen));
672   if($result)
673     $r    = mysql_fetch_array($result,MYSQL_NUM);
674   
675   if($r)
676     return $r[0]; /* found ruleset */
677   else
678     {
679       /* create new one */
680       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
681                             DB_quote_smart($dullen).",".
682                             DB_quote_smart($schweinchen).
683                             ", NULL)");
684       if($result)
685         return mysql_insert_id();
686     };
687
688   return -1; /* something went wrong */
689 }
690
691 function DB_get_party_by_hash($hash)
692 {
693   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
694   $r      = mysql_fetch_array($result,MYSQL_NUM);
695   
696   if($r)
697     return $r[0];
698   else
699     return NULL;
700 }
701 function DB_set_party_by_hash($hash,$party)
702 {
703   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
704   return;
705 }
706
707 function DB_get_PREF($myid)
708 {
709   global $PREF;
710
711     $result = mysql_query("SELECT value from User_Prefs".
712                           " WHERE user_id='$myid' AND pref_key='cardset'" );
713     $r = mysql_fetch_array($result,MYSQL_NUM);
714     if($r)
715       {
716         if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
717           $PREF["cardset"]="altenburg";
718       else
719         $PREF["cardset"]="english";
720       }
721     else
722       $PREF["cardset"]="english";
723
724     $result = mysql_query("SELECT value from User_Prefs".
725                           " WHERE user_id='$myid' AND pref_key='ccemail'" );
726     $r = mysql_fetch_array($result,MYSQL_NUM);
727     if($r)
728       $PREF["ccemail"]=$r[0];
729     else
730       $PREF["ccemail"]="no";
731
732     return;
733 }
734
735 ?>