found a bug in the shuffling routine
[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_handid_by_gameid_and_userid($gameid,$userid)
167 {
168   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
169                         DB_quote_smart($gameid)." AND user_id=".
170                         DB_quote_smart($userid));
171   $r      = mysql_fetch_array($result,MYSQL_NUM);
172   
173   if($r)
174     return $r[0];
175   else
176     return -1;
177 }
178
179 function DB_get_userid_by_hash($hash)
180 {
181   $result = mysql_query("SELECT user_id FROM Hand WHERE hash=".DB_quote_smart($hash));
182   $r      = mysql_fetch_array($result,MYSQL_NUM);
183   
184   if($r)
185     return $r[0];
186   else
187     return 0;
188 }
189
190 function DB_get_pos_by_hash($hash)
191 {
192   $result = mysql_query("SELECT position FROM Hand WHERE hash=".DB_quote_smart($hash));
193   $r      = mysql_fetch_array($result,MYSQL_NUM);
194   
195   if($r)
196     return $r[0];
197   else
198     return 0;
199 }
200
201 function DB_get_name_by_hash($hash)
202 {
203   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($hash));
204   $r      = mysql_fetch_array($result,MYSQL_NUM);
205   
206   if($r)
207     return $r[0];
208   else
209     return "";
210 }
211
212 function DB_get_name_by_email($email)
213 {
214   $result = mysql_query("SELECT fullname FROM User WHERE email=".DB_quote_smart($email));
215   $r      = mysql_fetch_array($result,MYSQL_NUM);
216   
217   if($r)
218     return $r[0];
219   else
220     return "";
221 }
222
223 function DB_get_name_by_userid($id)
224 {
225   $result = mysql_query("SELECT fullname FROM User  WHERE id=".DB_quote_smart($id));
226   $r      = mysql_fetch_array($result,MYSQL_NUM);
227   
228   if($r)
229     return $r[0];
230   else
231     return "";
232 }
233
234 function DB_get_status_by_hash($hash)
235 {
236   $result = mysql_query("SELECT status FROM Hand WHERE hash=".DB_quote_smart($hash));
237   $r      = mysql_fetch_array($result,MYSQL_NUM);
238   
239   if($r)
240     return $r[0];
241   else
242     return 0;
243 }
244
245 function DB_set_game_status_by_gameid($id,$status)
246 {
247   mysql_query("UPDATE Game SET status='".$status."' WHERE id=".DB_quote_smart($id));
248   return;
249 }
250
251 function DB_set_sickness_by_gameid($id,$status)
252 {
253   mysql_query("UPDATE Game SET sickness='".$status."' WHERE id=".DB_quote_smart($id));
254   return;
255 }
256 function DB_get_sickness_by_gameid($id)
257 {
258   $result = mysql_query("SELECT sickness FROM Game WHERE id=".DB_quote_smart($id));
259   $r      = mysql_fetch_array($result,MYSQL_NUM);
260   
261   if($r)
262     return $r[0];
263   else
264     return NULL;
265 }
266
267 function DB_get_game_status_by_gameid($id)
268 {
269   $result = mysql_query("SELECT status FROM Game WHERE id=".DB_quote_smart($id));
270   $r      = mysql_fetch_array($result,MYSQL_NUM);
271   
272   if($r)
273     return $r[0];
274   else
275     return NULL;
276 }
277
278 function DB_set_hand_status_by_hash($hash,$status)
279 {
280   mysql_query("UPDATE Hand SET status='".$status."' WHERE hash=".DB_quote_smart($hash));
281   return;
282 }
283
284 function DB_get_hand_status_by_userid_and_gameid($uid,$gid)
285 {
286   $result = mysql_query("SELECT status FROM Hand WHERE user_id=".DB_quote_smart($uid).
287                         " AND game_id=".DB_quote_smart($gid));
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_get_sickness_by_userid_and_gameid($uid,$gid)
297 {
298   $result = mysql_query("SELECT sickness FROM Hand WHERE user_id=".DB_quote_smart($uid).
299                         " AND game_id=".DB_quote_smart($gid));
300   $r      = mysql_fetch_array($result,MYSQL_NUM);
301   
302   if($r)
303     return $r[0];
304   else
305     return 0;
306 }
307
308 function DB_get_sickness_by_pos_and_gameid($pos,$gid)
309 {
310   $result = mysql_query("SELECT sickness FROM Hand WHERE position=".DB_quote_smart($pos).
311                         " AND game_id=".DB_quote_smart($gid));
312   $r      = mysql_fetch_array($result,MYSQL_NUM);
313   
314   if($r)
315     return $r[0];
316   else
317     return 0;
318 }
319
320 function DB_get_gameid_by_hash($hash)
321 {
322   $result = mysql_query("SELECT game_id FROM Hand WHERE hash=".DB_quote_smart($hash));
323   $r      = mysql_fetch_array($result,MYSQL_NUM);
324   
325   if($r)
326     return $r[0];
327   else
328     return 0;
329 }
330
331 function DB_cancel_game($hash)
332 {
333   $gameid = DB_get_gameid_by_hash($hash);
334
335   if(!$gameid)
336     return;
337
338   /* get the IDs of all players */
339   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid));
340   while($r = mysql_fetch_array($result,MYSQL_NUM))
341     {
342       $id = $r[0];
343       
344       $tmp = mysql_query("SELECT id  FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
345       $tmp = mysql_fetch_array($tmp,MYSQL_NUM);
346       mysql_query("DELETE FROM Play WHERE hand_card_id=".DB_quote_smart($tmp[0]));
347
348       
349       mysql_query("DELETE FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
350       mysql_query("DELETE FROM Score WHERE hand_id=".DB_quote_smart($id));
351       mysql_query("DELETE FROM Hand WHERE id=".DB_quote_smart($id));
352     }
353   
354   /* delete game */
355   mysql_query("DELETE FROM User_Game_Prefs WHERE game_id=".DB_quote_smart($gameid));
356   mysql_query("DELETE FROM Trick WHERE game_id=".DB_quote_smart($gameid));
357   mysql_query("DELETE FROM Game WHERE id=".DB_quote_smart($gameid));
358   
359   return;
360 }
361
362 function DB_get_hand($me)
363 {
364   $cards = array();
365
366   $handid = DB_get_handid_by_hash($me);
367
368   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid)." and played='false' ");
369   while($r = mysql_fetch_array($result,MYSQL_NUM))
370     $cards[]=$r[0];
371
372   return $cards;
373 }
374
375 function DB_get_all_hand($me)
376 {
377   $cards = array();
378
379   $handid = DB_get_handid_by_hash($me);
380
381   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid));
382   while($r = mysql_fetch_array($result,MYSQL_NUM))
383     $cards[]=$r[0];
384
385   return $cards;
386 }
387
388 function DB_get_cards_by_trick($id)
389 {
390   $cards = array();
391   $i     = 1;
392   
393   $result = mysql_query("SELECT card_id,position FROM Play LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id ".
394                         "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
395                         "WHERE trick_id=".
396                         DB_quote_smart($id)." ORDER BY sequence ASC");
397   while($r = mysql_fetch_array($result,MYSQL_NUM))
398     {
399       $cards[$i]=array("card"=>$r[0],"pos"=>$r[1]);
400       $i++;
401     }
402
403   return $cards;
404 }
405
406
407 function DB_set_solo_by_hash($hash,$solo)
408 {
409   mysql_query("UPDATE Hand SET solo=".DB_quote_smart($solo)." WHERE hash=".DB_quote_smart($hash));
410   return;
411 }
412
413 function DB_set_solo_by_gameid($id,$solo)
414 {
415   mysql_query("UPDATE Game SET solo=".DB_quote_smart($solo)." WHERE id=".DB_quote_smart($id));
416   return;
417 }
418
419 function DB_set_sickness_by_hash($hash,$sickness)
420 {
421   mysql_query("UPDATE Hand SET sickness=".DB_quote_smart($sickness)." WHERE hash=".DB_quote_smart($hash));
422   return;
423 }
424
425 function DB_get_current_trickid($gameid)
426 {
427   $trickid  = NULL;
428   $sequence = NULL;
429
430   $result = mysql_query("SELECT Trick.id,MAX(Play.sequence) FROM Play ".
431                         "LEFT JOIN Trick ON Play.trick_id=Trick.id ".
432                         "WHERE Trick.game_id=".DB_quote_smart($gameid)." ".
433                         "GROUP BY Trick.id");
434   while( $r = mysql_fetch_array($result,MYSQL_NUM) )
435     {
436       $trickid  = $r[0];
437       $sequence = $r[1];
438     };
439   
440   if(!$sequence || $sequence==4)
441     {
442       mysql_query("INSERT INTO Trick VALUES (NULL,NULL,NULL, ".DB_quote_smart($gameid).")");
443       $trickid  = mysql_insert_id();
444       $sequence = 1;
445     }
446   else
447     {
448       $sequence++;
449     }
450
451   return array($trickid,$sequence);
452 }
453
454 function DB_get_max_trickid($gameid)
455 {
456   $result = mysql_query("SELECT MAX(id) FROM Trick WHERE game_id=".DB_quote_smart($gameid));
457   $r = mysql_fetch_array($result,MYSQL_NUM) ;
458   
459   
460   return ($r?$r[0]:NULL);
461 }
462
463 function DB_play_card($trickid,$handcardid,$sequence)
464 {
465   mysql_query("INSERT INTO Play VALUES(NULL,NULL,NULL,".DB_quote_smart($trickid).
466               ",".DB_quote_smart($handcardid).",".DB_quote_smart($sequence).")");
467       
468   $playid = mysql_insert_id();
469   return $playid;
470 }
471
472 function DB_get_all_names_by_gameid($id)
473 {
474   $names = array();
475   
476   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE game_id=".
477                         DB_quote_smart($id)." ORDER BY position ASC");
478   while($r = mysql_fetch_array($result,MYSQL_NUM))
479     $names[] = $r[0];
480
481   return $names;
482 }
483
484 function DB_get_all_userid_by_gameid($id)
485 {
486   $names = array();
487   
488   $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
489                         DB_quote_smart($id)." ORDER BY position ");
490   while($r = mysql_fetch_array($result,MYSQL_NUM))
491     $names[] = $r[0];
492
493   return $names;
494 }
495
496 function DB_get_hash_from_game_and_pos($id,$pos)
497 {
498   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and position=".DB_quote_smart($pos));
499   $r      = mysql_fetch_array($result,MYSQL_NUM);
500   
501   if($r)
502     return $r[0];
503   else
504     return "";
505 }
506
507 function DB_get_hash_from_gameid_and_userid($id,$user)
508 {
509   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and user_id=".DB_quote_smart($user));
510   $r      = mysql_fetch_array($result,MYSQL_NUM);
511   
512   if($r)
513     return $r[0];
514   else
515     return "";
516 }
517
518 function DB_get_all_names()
519 {
520   $names  = array();
521
522   $result = mysql_query("SELECT fullname FROM User");
523   while($r = mysql_fetch_array($result,MYSQL_NUM))
524     $names[] = $r[0];
525
526   return $names;
527 }
528
529 function DB_update_game_timestamp($gameid)
530 {
531   mysql_query("UPDATE Game SET mod_date = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($gameid));
532   return;
533 }
534
535
536 function DB_update_user_timestamp($userid)
537 {
538   mysql_query("UPDATE User SET last_login = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($userid));
539   return;
540 }
541
542 function DB_get_user_timestamp($userid)
543 {
544   $result = mysql_query("SELECT last_login FROM User WHERE id=".DB_quote_smart($userid));
545   $r      = mysql_fetch_array($result,MYSQL_NUM);
546   
547   if($r)
548     return $r[0];
549   else
550     return NULL;
551 }
552 function DB_get_user_timezone($userid)
553 {
554   $result = mysql_query("SELECT timezone FROM User WHERE id=".DB_quote_smart($userid));
555   $r      = mysql_fetch_array($result,MYSQL_NUM);
556   
557   if($r)
558     return $r[0];
559   else
560     return 0;
561 }
562
563 function DB_insert_comment($comment,$playid,$userid)
564 {
565   mysql_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")");
566   return;
567 }
568
569 function DB_get_gametype_by_gameid($id)
570 {
571   $result = mysql_query("SELECT type FROM Game WHERE id=".DB_quote_smart($id));
572   $r      = mysql_fetch_array($result,MYSQL_NUM);
573   
574   if($r)
575     return $r[0]."";
576   else
577     return "";
578 }
579
580 function DB_set_gametype_by_gameid($id,$p)
581 {
582   mysql_query("UPDATE Game SET type='".$p."' WHERE id=".DB_quote_smart($id));
583   return;
584 }
585
586 function DB_get_solo_by_gameid($id)
587 {
588   $result = mysql_query("SELECT solo 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
598 function DB_get_startplayer_by_gameid($id)
599 {
600   $result = mysql_query("SELECT startplayer FROM Game WHERE id=".DB_quote_smart($id));
601   $r      = mysql_fetch_array($result,MYSQL_NUM);
602   
603   if($r)
604     return $r[0];
605   else
606     return 0;
607 }
608
609 function DB_set_startplayer_by_gameid($id,$p)
610 {
611   mysql_query("UPDATE Game SET startplayer='".$p."' WHERE id=".DB_quote_smart($id));
612   return;
613 }
614
615 function DB_get_ruleset_by_gameid($id)
616 {
617   $result = mysql_query("SELECT ruleset 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 NULL;
624 }
625
626 function DB_get_session_by_gameid($id)
627 {
628   $result = mysql_query("SELECT session FROM Game WHERE id=".DB_quote_smart($id));
629   $r      = mysql_fetch_array($result,MYSQL_NUM);
630   
631   if($r)
632     return $r[0];
633   else
634     return NULL;
635 }
636
637 function DB_get_max_session()
638 {
639   $result = mysql_query("SELECT MAX(session) FROM Game");
640   $r      = mysql_fetch_array($result,MYSQL_NUM);
641   
642   if($r)
643     return $r[0];
644   else
645     return 0;
646 }
647
648 function DB_get_ruleset($dullen,$schweinchen)
649 {
650   $r = array();
651   
652   $result = mysql_query("SELECT id FROM Rulesets WHERE".
653                         " dullen=".DB_quote_smart($dullen)." AND ".
654                         " schweinchen=".DB_quote_smart($schweinchen));
655   if($result)
656     $r    = mysql_fetch_array($result,MYSQL_NUM);
657   
658   if($r)
659     return $r[0]; /* found ruleset */
660   else
661     {
662       /* create new one */
663       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
664                             DB_quote_smart($dullen).",".
665                             DB_quote_smart($schweinchen).
666                             ", NULL)");
667       if($result)
668         return mysql_insert_id();
669     };
670
671   return -1; /* something went wrong */
672 }
673
674 function DB_get_party_by_hash($hash)
675 {
676   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
677   $r      = mysql_fetch_array($result,MYSQL_NUM);
678   
679   if($r)
680     return $r[0];
681   else
682     return NULL;
683 }
684 function DB_set_party_by_hash($hash,$party)
685 {
686   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
687   return;
688 }
689
690
691 ?>