lots of small fixes and 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   if ( $DB = mysql_connect($DB_host,$DB_user, $DB_password) )
11     mysql_select_db($DB_database) or die('Could not select database'); 
12   else
13     die (mysql_error());
14   
15   return;
16 }
17
18 function DB_close()
19 {
20   global $DB;
21   mysql_close($DB);
22   return;
23 }
24
25 function DB_quote_smart($value)
26 {
27     /* Stripslashes */
28     if (get_magic_quotes_gpc()) {
29         $value = stripslashes($value);
30     }
31     /* Quote if not a number or a numeric string */
32     if (!is_numeric($value)) {
33         $value = "'" . mysql_real_escape_string($value) . "'";
34     }
35     return $value;
36 }
37
38
39 function DB_test()
40 {
41   $result = mysql_query("SELECT * FROM User");
42   while($r = mysql_fetch_array($result,MYSQL_NUM))
43     {
44       foreach($r as $thing)
45         echo "  $thing ";
46       echo "<br />\n";
47     }
48   return;
49 }
50
51 function DB_get_email_by_name($name)
52 {
53   $result = mysql_query("SELECT email FROM User WHERE fullname=".DB_quote_smart($name)."");
54   $r      = mysql_fetch_array($result,MYSQL_NUM);
55   
56   if($r)
57     return $r[0];
58   else
59     return "";
60 }
61
62 function DB_get_email_by_userid($id)
63 {
64   $result = mysql_query("SELECT email FROM User WHERE id=".DB_quote_smart($id)."");
65   $r      = mysql_fetch_array($result,MYSQL_NUM);
66   
67   if($r)
68     return $r[0];
69   else
70     return "";
71 }
72
73 function DB_get_email_by_pos_and_gameid($pos,$gameid)
74 {
75   $result = mysql_query("SELECT email FROM User ".
76                         "LEFT JOIN Hand ON User.id=Hand.user_id ".
77                         "LEFT JOIN Game ON Game.id=Hand.game_id ". 
78                         "WHERE Game.id=".DB_quote_smart($gameid)." ".
79                         "AND Hand.position=".DB_quote_smart($pos)."");
80   $r      = mysql_fetch_array($result,MYSQL_NUM);
81   
82   if($r)
83     return $r[0];
84   else
85     return "";
86 }
87
88 function DB_get_email_by_hash($hash)
89 {
90   $result = mysql_query("SELECT User.email FROM User LEFT JOIN Hand ON Hand.user_id=User.id WHERE Hand.hash=".DB_quote_smart($hash)."");
91   $r      = mysql_fetch_array($result,MYSQL_NUM);
92   
93   if($r)
94     return $r[0];
95   else
96     return "";
97 }
98
99 function DB_get_userid_by_name($name)
100 {
101   $result = mysql_query("SELECT id FROM User WHERE fullname=".DB_quote_smart($name));
102   $r      = mysql_fetch_array($result,MYSQL_NUM);
103   
104   if($r)
105     return $r[0];
106   else
107     return 0;
108 }
109 function DB_get_userid_by_passwd($passwd)
110 {
111   $result = mysql_query("SELECT id FROM User WHERE password=".DB_quote_smart($passwd));
112   $r      = mysql_fetch_array($result,MYSQL_NUM);
113   
114   if($r)
115     return $r[0];
116   else
117     return 0;
118 }
119 function DB_get_userid_by_email($email)
120 {
121   $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($email));
122   $r      = mysql_fetch_array($result,MYSQL_NUM);
123   
124   if($r)
125     return $r[0];
126   else
127     return 0;
128 }
129 function DB_get_userid_by_email_and_password($email,$password)
130 {
131   $result = mysql_query("SELECT id FROM User WHERE email=".DB_quote_smart($email)." AND password=".DB_quote_smart($password));
132   $r      = mysql_fetch_array($result,MYSQL_NUM);
133   
134   if($r)
135     return $r[0];
136   else
137     return 0;
138 }
139
140 function DB_get_handid_by_hash($hash)
141 {
142   $result = mysql_query("SELECT id FROM Hand WHERE hash=".DB_quote_smart($hash));
143   $r      = mysql_fetch_array($result,MYSQL_NUM);
144   
145   if($r)
146     return $r[0];
147   else
148     return 0;
149 }
150
151 function DB_get_handid_by_gameid_and_position($gameid,$pos)
152 {
153   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".
154                         DB_quote_smart($gameid)." AND position=".
155                         DB_quote_smart($pos));
156   $r      = mysql_fetch_array($result,MYSQL_NUM);
157   
158   if($r)
159     return $r[0];
160   else
161     return -1;
162 }
163
164 function DB_get_userid_by_hash($hash)
165 {
166   $result = mysql_query("SELECT user_id FROM Hand WHERE hash=".DB_quote_smart($hash));
167   $r      = mysql_fetch_array($result,MYSQL_NUM);
168   
169   if($r)
170     return $r[0];
171   else
172     return 0;
173 }
174
175 function DB_get_pos_by_hash($hash)
176 {
177   $result = mysql_query("SELECT position FROM Hand WHERE hash=".DB_quote_smart($hash));
178   $r      = mysql_fetch_array($result,MYSQL_NUM);
179   
180   if($r)
181     return $r[0];
182   else
183     return 0;
184 }
185
186 function DB_get_name_by_hash($hash)
187 {
188   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($hash));
189   $r      = mysql_fetch_array($result,MYSQL_NUM);
190   
191   if($r)
192     return $r[0];
193   else
194     return "";
195 }
196
197 function DB_get_name_by_email($email)
198 {
199   $result = mysql_query("SELECT fullname FROM User WHERE email=".DB_quote_smart($email));
200   $r      = mysql_fetch_array($result,MYSQL_NUM);
201   
202   if($r)
203     return $r[0];
204   else
205     return "";
206 }
207
208 function DB_get_name_by_userid($id)
209 {
210   $result = mysql_query("SELECT fullname FROM User  WHERE id=".DB_quote_smart($id));
211   $r      = mysql_fetch_array($result,MYSQL_NUM);
212   
213   if($r)
214     return $r[0];
215   else
216     return "";
217 }
218
219 function DB_get_status_by_hash($hash)
220 {
221   $result = mysql_query("SELECT status FROM Hand WHERE hash=".DB_quote_smart($hash));
222   $r      = mysql_fetch_array($result,MYSQL_NUM);
223   
224   if($r)
225     return $r[0];
226   else
227     return 0;
228 }
229
230 function DB_set_game_status_by_gameid($id,$status)
231 {
232   mysql_query("UPDATE Game SET status='".$status."' WHERE id=".DB_quote_smart($id));
233   return;
234 }
235
236 function DB_get_game_status_by_gameid($id)
237 {
238   $result = mysql_query("SELECT status FROM Game WHERE id=".DB_quote_smart($id));
239   $r      = mysql_fetch_array($result,MYSQL_NUM);
240   
241   if($r)
242     return $r[0];
243   else
244     return NULL;
245 }
246
247 function DB_set_hand_status_by_hash($hash,$status)
248 {
249   mysql_query("UPDATE Hand SET status='".$status."' WHERE hash=".DB_quote_smart($hash));
250   return;
251 }
252
253 function DB_get_hand_status_by_userid_and_gameid($uid,$gid)
254 {
255   $result = mysql_query("SELECT status FROM Hand WHERE user_id=".DB_quote_smart($uid).
256                         " AND game_id=".DB_quote_smart($gid));
257   $r      = mysql_fetch_array($result,MYSQL_NUM);
258   
259   if($r)
260     return $r[0];
261   else
262     return 0;
263 }
264
265 function DB_get_sickness_by_userid_and_gameid($uid,$gid)
266 {
267   $result = mysql_query("SELECT sickness FROM Hand WHERE user_id=".DB_quote_smart($uid).
268                         " AND game_id=".DB_quote_smart($gid));
269   $r      = mysql_fetch_array($result,MYSQL_NUM);
270   
271   if($r)
272     return $r[0];
273   else
274     return 0;
275 }
276
277 function DB_get_gameid_by_hash($hash)
278 {
279   $result = mysql_query("SELECT game_id FROM Hand WHERE hash=".DB_quote_smart($hash));
280   $r      = mysql_fetch_array($result,MYSQL_NUM);
281   
282   if($r)
283     return $r[0];
284   else
285     return 0;
286 }
287
288 function DB_cancel_game($hash)
289 {
290   $gameid = DB_get_gameid_by_hash($hash);
291
292   if(!$gameid)
293     return;
294
295   /* get the IDs of all players */
296   $result = mysql_query("SELECT id FROM Hand WHERE game_id=".DB_quote_smart($gameid));
297   while($r = mysql_fetch_array($result,MYSQL_NUM))
298     {
299       $id = $r[0];
300       
301       $tmp = mysql_query("SELECT id  FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
302       $tmp = mysql_fetch_array($tmp,MYSQL_NUM);
303       mysql_query("DELETE FROM Play WHERE hand_card_id=".DB_quote_smart($tmp[0]));
304
305       
306       mysql_query("DELETE FROM Hand_Card WHERE hand_id=".DB_quote_smart($id));
307       mysql_query("DELETE FROM Score WHERE hand_id=".DB_quote_smart($id));
308       mysql_query("DELETE FROM Hand WHERE id=".DB_quote_smart($id));
309     }
310   
311   /* delete game */
312   mysql_query("DELETE FROM User_Game_Prefs WHERE game_id=".DB_quote_smart($gameid));
313   mysql_query("DELETE FROM Trick WHERE game_id=".DB_quote_smart($gameid));
314   mysql_query("DELETE FROM Game WHERE id=".DB_quote_smart($gameid));
315   
316   return;
317 }
318
319 function DB_get_hand($me)
320 {
321   $cards = array();
322
323   $handid = DB_get_handid_by_hash($me);
324
325   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid)." and played='false' ");
326   while($r = mysql_fetch_array($result,MYSQL_NUM))
327     $cards[]=$r[0];
328
329   return $cards;
330 }
331
332 function DB_get_all_hand($me)
333 {
334   $cards = array();
335
336   $handid = DB_get_handid_by_hash($me);
337
338   $result = mysql_query("SELECT card_id FROM Hand_Card WHERE hand_id=".DB_quote_smart($handid));
339   while($r = mysql_fetch_array($result,MYSQL_NUM))
340     $cards[]=$r[0];
341
342   return $cards;
343 }
344
345 function DB_get_cards_by_trick($id)
346 {
347   $cards = array();
348   $i     = 1;
349   
350   $result = mysql_query("SELECT card_id,position FROM Play LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id ".
351                         "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ".
352                         "WHERE trick_id=".
353                         DB_quote_smart($id)." ORDER BY sequence ASC");
354   while($r = mysql_fetch_array($result,MYSQL_NUM))
355     {
356       $cards[$i]=array("card"=>$r[0],"pos"=>$r[1]);
357       $i++;
358     }
359
360   return $cards;
361 }
362
363
364 function DB_set_solo_by_hash($hash,$solo)
365 {
366   mysql_query("UPDATE Hand SET solo=".DB_quote_smart($solo)." WHERE hash=".DB_quote_smart($hash));
367   return;
368 }
369
370 function DB_set_solo_by_gameid($id,$solo)
371 {
372   mysql_query("UPDATE Game SET solo=".DB_quote_smart($solo)." WHERE id=".DB_quote_smart($id));
373   return;
374 }
375
376 function DB_set_sickness_by_hash($hash,$sickness)
377 {
378   mysql_query("UPDATE Hand SET sickness=".DB_quote_smart($sickness)." WHERE hash=".DB_quote_smart($hash));
379   return;
380 }
381
382 function DB_get_current_trickid($gameid)
383 {
384   $trickid  = NULL;
385   $sequence = NULL;
386
387   $result = mysql_query("SELECT Trick.id,MAX(Play.sequence) FROM Play ".
388                         "LEFT JOIN Trick ON Play.trick_id=Trick.id ".
389                         "WHERE Trick.game_id=".DB_quote_smart($gameid)." ".
390                         "GROUP BY Trick.id");
391   while( $r = mysql_fetch_array($result,MYSQL_NUM) )
392     {
393       $trickid  = $r[0];
394       $sequence = $r[1];
395     };
396   
397   if(!$sequence || $sequence==4)
398     {
399       mysql_query("INSERT INTO Trick VALUES (NULL,NULL,NULL, ".DB_quote_smart($gameid).")");
400       $trickid  = mysql_insert_id();
401       $sequence = 1;
402     }
403   else
404     {
405       $sequence++;
406     }
407
408   return array($trickid,$sequence);
409 }
410
411 function DB_get_max_trickid($gameid)
412 {
413   $result = mysql_query("SELECT MAX(id) FROM Trick WHERE game_id=".DB_quote_smart($gameid));
414   $r = mysql_fetch_array($result,MYSQL_NUM) ;
415   
416   
417   return ($r?$r[0]:NULL);
418 }
419
420 function DB_play_card($trickid,$handcardid,$sequence)
421 {
422   mysql_query("INSERT INTO Play VALUES(NULL,NULL,NULL,".DB_quote_smart($trickid).
423               ",".DB_quote_smart($handcardid).",".DB_quote_smart($sequence).")");
424       
425   $playid = mysql_insert_id();
426   return $playid;
427 }
428
429 function DB_get_all_names_by_gameid($id)
430 {
431   $names = array();
432   
433   $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE game_id=".
434                         DB_quote_smart($id)." ORDER BY position ASC");
435   while($r = mysql_fetch_array($result,MYSQL_NUM))
436     $names[] = $r[0];
437
438   return $names;
439 }
440
441 function DB_get_all_userid_by_gameid($id)
442 {
443   $names = array();
444   
445   $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=".
446                         DB_quote_smart($id)." ORDER BY position ");
447   while($r = mysql_fetch_array($result,MYSQL_NUM))
448     $names[] = $r[0];
449
450   return $names;
451 }
452
453 function DB_get_hash_from_game_and_pos($id,$pos)
454 {
455   $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and position=".DB_quote_smart($pos));
456   $r      = mysql_fetch_array($result,MYSQL_NUM);
457   
458   if($r)
459     return $r[0];
460   else
461     return "";
462 }
463
464 function DB_get_all_names()
465 {
466   $names  = array();
467
468   $result = mysql_query("SELECT fullname FROM User");
469   while($r = mysql_fetch_array($result,MYSQL_NUM))
470     $names[] = $r[0];
471
472   return $names;
473 }
474
475 function DB_update_game_timestamp($gameid)
476 {
477   mysql_query("UPDATE Game SET mod_date = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($gameid));
478   return;
479 }
480
481
482 function DB_update_user_timestamp($userid)
483 {
484   mysql_query("UPDATE User SET last_login = CURRENT_TIMESTAMP WHERE id=".DB_quote_smart($userid));
485   return;
486 }
487
488 function DB_get_user_timestamp($userid)
489 {
490   $result = mysql_query("SELECT last_login FROM User WHERE id=".DB_quote_smart($userid));
491   $r      = mysql_fetch_array($result,MYSQL_NUM);
492   
493   if($r)
494     return $r[0];
495   else
496     return NULL;
497 }
498 function DB_get_user_timezone($userid)
499 {
500   $result = mysql_query("SELECT timezone FROM User WHERE id=".DB_quote_smart($userid));
501   $r      = mysql_fetch_array($result,MYSQL_NUM);
502   
503   if($r)
504     return $r[0];
505   else
506     return 0;
507 }
508
509 function DB_insert_comment($comment,$playid,$userid)
510 {
511   mysql_query("INSERT INTO Comment VALUES (NULL,NULL,NULL,$userid,$playid, ".DB_quote_smart($comment).")");
512   return;
513 }
514
515 function DB_get_gametype_by_gameid($id)
516 {
517   $result = mysql_query("SELECT type FROM Game WHERE id=".DB_quote_smart($id));
518   $r      = mysql_fetch_array($result,MYSQL_NUM);
519   
520   if($r)
521     return $r[0]."";
522   else
523     return "";
524 }
525
526 function DB_set_gametype_by_gameid($id,$p)
527 {
528   mysql_query("UPDATE Game SET type='".$p."' WHERE id=".DB_quote_smart($id));
529   return;
530 }
531
532 function DB_get_solo_by_gameid($id)
533 {
534   $result = mysql_query("SELECT solo FROM Game WHERE id=".DB_quote_smart($id));
535   $r      = mysql_fetch_array($result,MYSQL_NUM);
536   
537   if($r)
538     return $r[0]."";
539   else
540     return "";
541 }
542
543
544 function DB_get_startplayer_by_gameid($id)
545 {
546   $result = mysql_query("SELECT startplayer FROM Game WHERE id=".DB_quote_smart($id));
547   $r      = mysql_fetch_array($result,MYSQL_NUM);
548   
549   if($r)
550     return $r[0];
551   else
552     return 0;
553 }
554
555 function DB_set_startplayer_by_gameid($id,$p)
556 {
557   mysql_query("UPDATE Game SET startplayer='".$p."' WHERE id=".DB_quote_smart($id));
558   return;
559 }
560
561 function DB_get_ruleset_by_gameid($id)
562 {
563   $result = mysql_query("SELECT ruleset FROM Game WHERE id=".DB_quote_smart($id));
564   $r      = mysql_fetch_array($result,MYSQL_NUM);
565   
566   if($r)
567     return $r[0];
568   else
569     return NULL;
570 }
571
572 function DB_get_session_by_gameid($id)
573 {
574   $result = mysql_query("SELECT session FROM Game WHERE id=".DB_quote_smart($id));
575   $r      = mysql_fetch_array($result,MYSQL_NUM);
576   
577   if($r)
578     return $r[0];
579   else
580     return NULL;
581 }
582
583 function DB_get_max_session()
584 {
585   $result = mysql_query("SELECT MAX(session) FROM Game");
586   $r      = mysql_fetch_array($result,MYSQL_NUM);
587   
588   if($r)
589     return $r[0];
590   else
591     return 0;
592 }
593
594 function DB_get_ruleset($dullen,$schweinchen)
595 {
596   $r = array();
597   
598   $result = mysql_query("SELECT id FROM Rulesets WHERE".
599                         " dullen=".DB_quote_smart($dullen)." AND ".
600                         " schweinchen=".DB_quote_smart($schweinchen));
601   if($result)
602     $r    = mysql_fetch_array($result,MYSQL_NUM);
603   
604   if($r)
605     return $r[0]; /* found ruleset */
606   else
607     {
608       /* create new one */
609       $result = mysql_query("INSERT INTO Rulesets VALUES (NULL, NULL, ".
610                             DB_quote_smart($dullen).",".
611                             DB_quote_smart($schweinchen).
612                             ", NULL)");
613       if($result)
614         return mysql_insert_id();
615     };
616
617   return -1; /* something went wrong */
618 }
619
620 function DB_get_party_by_hash($hash)
621 {
622   $result = mysql_query("SELECT party FROM Hand WHERE hash=".DB_quote_smart($hash));
623   $r      = mysql_fetch_array($result,MYSQL_NUM);
624   
625   if($r)
626     return $r[0];
627   else
628     return NULL;
629 }
630 function DB_set_party_by_hash($hash,$party)
631 {
632   mysql_query("UPDATE Hand SET party=".DB_quote_smart($party)." WHERE hash=".DB_quote_smart($hash));
633   return;
634 }
635
636
637 ?>