problem with sql syntax: used a reserverd word
[e-DoKo.git] / functions.php
1 <?php
2
3 function mymail($To,$Subject,$message)
4 {  
5   global $debug;
6
7   if($debug)
8     {
9       $message = str_replace("\n","<br />\n",$message);
10       $message = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
11                      "<a href=\"\\0\">\\0</a>", $message);
12       //$message = ereg_replace("(http.*)[ <>]","<a href=\"\\1\">\\1 </a>",$message);
13       
14       echo "<br />To: $To<br />Subject: $Subject <br />$message<br />\n";
15     }
16   else
17     mail($To,$Subject,$message);
18   return;
19 }
20
21 function myisset()
22 {
23   /* returns 1 if all names passed as args are defined by a GET or POST statement,
24    * else return 0
25    */
26
27   $ok   = 1;
28   $args = func_get_args();
29   
30   foreach($args as $arg)
31     {
32       $ok = $ok * isset($_REQUEST[$arg]);
33       /*echo "$arg: ok = $ok <br />";
34        */ 
35     }
36   return $ok;
37 }
38
39 function pos_array($c,$arr)
40 {
41   $ret = 0;
42
43   $i   = 0;
44   foreach($arr as $a)
45     {
46       $i++;
47       if($a == $c)
48         {
49           $ret = $i;
50           break;
51         }
52     }
53   return $ret;
54 }
55
56 function is_trump($c) 
57
58   global $CARDS;
59
60   if(in_array($c,$CARDS["trump"]))
61     return 1;
62   else 
63     return 0;
64 }
65
66 function is_same_suite($c1,$c2) 
67 {
68   global $CARDS;
69   
70   if(in_array($c1,$CARDS["trump"]   ) && in_array($c2,$CARDS["trump"]   ) ) return 1;
71   if(in_array($c1,$CARDS["clubs"]   ) && in_array($c2,$CARDS["clubs"]   ) ) return 1;
72   if(in_array($c1,$CARDS["hearts"]  ) && in_array($c2,$CARDS["hearts"]  ) ) return 1;
73   if(in_array($c1,$CARDS["spades"]  ) && in_array($c2,$CARDS["spades"]  ) ) return 1;
74   if(in_array($c1,$CARDS["diamonds"]) && in_array($c2,$CARDS["diamonds"]) ) return 1;
75   
76   return 0;
77 }
78
79 function compare_cards($a,$b,$game)
80 {
81   /* if "a" is higher than "b" return 1, else 0, "a" being the card first played */
82
83   global $CARDS;
84   global $RULES;
85   global $GAME;
86
87   /* first map all cards to the odd number, 
88    * this insure that the first card wins the trick 
89    * if they are the same card
90    */
91   if( $a/2 - (int)($a/2) != 0.5)
92     $a--;
93   if( $b/2 - (int)($b/2) != 0.5)
94     $b--;
95
96   /* some special cases */
97   switch($game)
98     {
99     case "normal":
100     case "silent":
101       if($RULES["schweinchen"]=="both" && $GAME["schweinchen"])
102         {
103           if($a == 19 || $a == 20 )
104             return 1;
105           if($b == 19 || $b == 20 )
106             return 0;
107         };
108       if($RULES["schweinchen"]=="second" && $GAME["schweinchen"]==3)
109         {
110           if($a == 19 || $a == 20 )
111             return 1;
112           if($b == 19 || $b == 20 )
113             return 0;
114         };
115     case "trump":
116     case "heart":
117     case "spade":
118     case "club":
119       if($RULES["dullen"]=="secondwins")
120         if($a==1 && $b==1) /* both 10 of hearts */
121           return 0;        /* second one wins.*/
122     }
123   
124   /* normal case */
125   if(is_trump($a) && is_trump($b) && $a<=$b)
126     return 1;
127   else if(is_trump($a) && is_trump($b) )
128     return 0;
129   else 
130     { /*$a is not a trump */
131       if(is_trump($b))
132         return 0;
133       else
134         { /* both no trump */
135
136           /* both clubs? */
137           $posA = pos_array($a,$CARDS["clubs"]);
138           $posB = pos_array($b,$CARDS["clubs"]);
139           if($posA && $posB)
140             if($posA <= $posB)
141               return 1;
142             else
143               return 0;
144
145           /* both spades? */
146           $posA = pos_array($a,$CARDS["spades"]);
147           $posB = pos_array($b,$CARDS["spades"]);
148           if($posA && $posB)
149             if($posA <= $posB)
150               return 1;
151             else
152               return 0;
153
154           /* both hearts? */
155           $posA = pos_array($a,$CARDS["hearts"]);
156           $posB = pos_array($b,$CARDS["hearts"]);
157           if($posA && $posB)
158             if($posA <= $posB)
159               return 1;
160             else
161               return 0;
162
163           /* both diamonds? */
164           $posA = pos_array($a,$CARDS["diamonds"]);
165           $posB = pos_array($b,$CARDS["diamonds"]);
166           if($posA && $posB)
167             if($posA <= $posB)
168               return 1;
169             else
170               return 0;
171           
172           /* not the same suit and no trump: a wins */
173           return 1;
174         }         
175     }
176
177
178 function get_winner($p,$mode)
179 {
180   /* get all 4 cards played in a trick, in the order they are played */
181   $tmp = $p[1];
182   $c1    = $tmp["card"];
183   $c1pos = $tmp["pos"]; 
184
185   $tmp = $p[2];
186   $c2    = $tmp["card"];
187   $c2pos = $tmp["pos"]; 
188
189   $tmp = $p[3];
190   $c3    = $tmp["card"];
191   $c3pos = $tmp["pos"]; 
192
193   $tmp = $p[4];
194   $c4    = $tmp["card"];
195   $c4pos = $tmp["pos"]; 
196
197   /* first card is better than all the rest */
198   if( compare_cards($c1,$c2,$mode) && compare_cards($c1,$c3,$mode) && compare_cards($c1,$c4,$mode) )
199     return $c1pos; 
200
201   /* second card is better than first and better than the rest */
202   if( !compare_cards($c1,$c2,$mode) &&  compare_cards($c2,$c3,$mode) && compare_cards($c2,$c4,$mode) )
203     return $c2pos;
204
205   /* third card is better than first card and better than last */
206   if( !compare_cards($c1,$c3,$mode) &&  compare_cards($c3,$c4,$mode) )
207     /* if second card is better than first, third card needs to be even better */
208     if( !compare_cards($c1,$c2,$mode) && !compare_cards($c2,$c3,$mode) )
209       return $c3pos;
210     /* second is worse than first, e.g. not following suite */
211     else if (compare_cards($c1,$c2,$mode) )
212       return $c3pos;
213
214   /* non of the above */
215   return $c4pos;
216 }
217
218 function count_nines($cards)
219 {
220   $nines = 0;
221
222   foreach($cards as $c)
223     {
224       if($c == "25" || $c == "26") $nines++;
225       else if($c == "33" || $c == "34") $nines++;
226       else if($c == "41" || $c == "42") $nines++;
227       else if($c == "47" || $c == "48") $nines++;
228     }
229   
230   return $nines;
231 }
232
233 function check_wedding($cards)
234 {
235
236   if( in_array("3",$cards) && in_array("4",$cards) )
237     return 1;
238
239   return 0;
240 }
241
242 function count_trump($cards)
243 {
244   global $RULES;
245
246   $trump = 0;
247
248   /* count each trump */
249   foreach($cards as $c)
250     if( (int)($c) <27) 
251       $trump++;
252
253   switch($RULES["schweinchen"])
254     {
255     case "none":
256       break;
257     case "second":
258     case "secondaftercall":
259       /* add one, in case the player has both foxes (schweinchen) */
260       if( in_array("19",$cards) && in_array("20",$cards) )
261         $trump++;
262     case "both":
263       /* subtract foxes */
264       if( in_array("19",$cards))
265         $trump--;
266       if( in_array("20",$cards) )
267         $trump--;
268       break;
269     }
270
271   return $trump;
272 }
273
274 function card_to_name($card)
275 {
276   switch($card)
277     {
278       case 1:
279       case 2:
280         return "ten of hearts";
281       case 3:
282       case 4:
283       return "queen of clubs";
284       case 5:
285       case 6:
286       return "queen of spades";
287       case 7:
288       case 8:
289       return "queen of hearts";
290       case 9:
291       case 10:
292       return "queen of diamonds";
293       case 11:
294       case 12:
295       return "jack of clubs";
296       case 13:
297       case 14:
298       return "jack of spades";
299       case 15:
300       case 16:
301       return "jack of hearts";
302       case 17:
303       case 18:
304       return "jack of diamonds";
305       case 19:
306       case 20:
307       return "ace of diamonds";
308       case 21:
309       case 22:
310       return "ten of diamonds";
311       case 23:
312       case 24:
313       return "king of diamonds";
314       case 25:
315       case 26:
316       return "nine of diamonds";;
317       case 27:
318       case 28:
319       return "ace of clubs";
320       case 29:
321       case 30:
322       return "ten of clubs";
323       case 31:
324       case 32:
325       return "king of clubs";
326       case 33:
327       case 34:
328       return "nine of clubs";
329       case 35:
330       case 36:
331       return "ace of spades";
332       case 37:
333       case 38:
334       return "ten of spades";
335       case 39:
336       case 40:
337       return "king of spades";
338       case 41:
339       case 42:
340       return "nine of spades";
341       case 43:
342       case 44:
343       return "ace of hearts";
344       case 45:
345       case 46:
346       return "king of hearts";
347       case 47:
348       case 48:
349       return "nine of hearts";
350       default:
351       return "something went wrong, please contact the admin. Error: code1. $card <br />";
352     }
353 }
354
355 function card_value($card)
356 {
357   switch($card)
358     {
359     case 3:     /* clubes */     
360     case 4:                      
361     case 5:     /* spades */     
362     case 6:                      
363     case 7:     /* hearts */     
364     case 8:                      
365     case 9:     /* diamonds */   
366     case 10:                     
367       return 3;
368     case 11:    /* clubes */     
369     case 12:                     
370     case 13:    /* spades */     
371     case 14:                     
372     case 15:    /* hearts */     
373     case 16:                     
374     case 17:    /* diamonds */   
375     case 18:
376       return 2;                  
377     case 19:    /* diamonds */ 
378     case 20:                   
379     case 27:    /* clubs */    
380     case 28:                   
381     case 35:    /* spades */   
382     case 36:                   
383     case 43:    /* hearts */   
384     case 44:                   
385       return 11;
386     case 1:      /* heart */
387     case 2:
388     case 21:    /* diamonds */    
389     case 22:
390     case 29:    /* clubs */
391     case 30:
392     case 37:    /* spades */
393     case 38:
394       return 10;
395     case 23:    /* diamonds */ 
396     case 24:                   
397     case 31:    /* clubs */    
398     case 32:                   
399     case 39:    /* spades */   
400     case 40:                   
401     case 45:    /* hearts */   
402     case 46:                   
403       return 4;
404     case 25:    /* diamonds */   
405     case 26:                   
406     case 33:    /* clubs */    
407     case 34:                   
408     case 41:    /* spades */   
409     case 42:                   
410     case 47:    /* hearts */   
411     case 48:                   
412       return 0;
413     default:
414       echo "something went wrong, please contact the admin. ErrorCode: 2 - $card<br>";
415       return 0;
416     }
417 }
418
419
420 function  create_array_of_random_numbers()
421 {
422   global $debug;
423
424   $r = array();
425   $a = array();
426   
427   if($debug)
428     {
429       $a[ 0]=1;     $a[12]=47;   $a[24]=13;       $a[36]=37;
430       $a[ 1]=2;     $a[13]=48;   $a[25]=14;       $a[37]=38;
431       $a[ 2]=3;     $a[14]=27;   $a[26]=15;       $a[38]=39;
432       $a[ 3]=4;     $a[15]=16;   $a[27]=28;       $a[39]=40;
433       $a[ 4]=5;     $a[16]=17;   $a[28]=29;       $a[40]=41;
434       $a[ 5]=18;    $a[17]=6;    $a[29]=30;       $a[41]=42;
435       $a[ 6]=19;    $a[18]=7;    $a[30]=31;       $a[42]=43;
436       $a[ 7]=20;    $a[19]=8;    $a[31]=32;       $a[43]=44;
437       $a[ 8]=45;    $a[20]=9;    $a[32]=21;       $a[44]=33;
438       $a[ 9]=46;    $a[21]=10;   $a[33]=22;       $a[45]=34;
439       $a[10]=35;    $a[22]=11;   $a[34]=23;       $a[46]=25;
440       $a[11]=36;    $a[23]=12;   $a[35]=24;       $a[47]=26;
441
442       $r = $a;              
443     }
444   else
445     {
446       for($i=0;$i<48;$i++)
447         $a[$i]=$i+1;
448       
449       $r = shuffle($a);
450     };
451
452   return $r;
453 }
454
455
456
457
458 function display_cards($me,$myturn)
459 {
460   return;
461 }
462
463 function return_timezone($offset)
464 {
465   switch($offset)
466     {
467     case '1':
468       $zone = "Europe/Berlin";
469       break;
470     case '-8':
471       $zone = "America/Vancouver";
472       break;
473     case '13':
474       $zone = "Pacific/Auckland";
475       break;
476     default:
477       $zone = "Europe/London";
478     }
479   
480   return $zone;
481 }
482
483 function have_suit($cards,$c)
484 {
485   global $CARDS;
486   $suite = array();
487
488   if(in_array($c,$CARDS["trump"]))
489     $suite = $CARDS["trump"];
490   else if(in_array($c,$CARDS["clubs"]))
491     $suite = $CARDS["clubs"];
492   else if(in_array($c,$CARDS["spades"]))
493     $suite = $CARDS["spades"];
494   else if(in_array($c,$CARDS["hearts"]))
495     $suite = $CARDS["hearts"];
496   else if(in_array($c,$CARDS["diamonds"]))
497     $suite = $CARDS["diamonds"];
498
499   foreach($cards as $card)
500     {
501       if(in_array($card,$suite))
502         return 1;
503     }
504
505   return 0;
506 }
507
508 function same_type($card,$c)
509 {
510   global $CARDS;
511   $suite = "";
512
513   /* figure out what kind of card c is */
514   if(in_array($c,$CARDS["trump"]))
515     $suite = $CARDS["trump"];
516   else if(in_array($c,$CARDS["clubs"]))
517     $suite = $CARDS["clubs"];
518   else if(in_array($c,$CARDS["spades"]))
519     $suite = $CARDS["spades"];
520   else if(in_array($c,$CARDS["hearts"]))
521     $suite = $CARDS["hearts"];
522   else if(in_array($c,$CARDS["diamonds"]))
523     $suite = $CARDS["diamonds"];
524
525   /* card is the same suid return 1 */ 
526   if(in_array($card,$suite))
527     return 1;
528   
529   return 0;
530 }
531
532 function set_gametype($gametype)
533 {
534   global $CARDS;
535   global $RULES;
536
537   switch($gametype)
538     {
539     case "normal":
540     case "wedding":
541     case "poverty":
542     case "dpoverty":
543     case "trump":
544     case "silent":
545       $CARDS["trump"]    = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
546                                  '17','18','19','20','21','22','23','24','25','26');
547       $CARDS["diamonds"] = array();
548       $CARDS["clubs"]    = array('27','28','29','30','31','32','33','34');
549       $CARDS["spades"]   = array('35','36','37','38','39','40','41','42');
550       $CARDS["hearts"]   = array('43','44','45','46','47','48');
551       $CARDS["foxes"]    = array('19','20');
552       if($RULES["dullen"]=='none')
553         {
554           $CARDS["trump"]    = array('3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
555                                      '17','18','19','20','21','22','23','24','25','26');
556           $CARDS["hearts"]   = array('43','44','1','2','45','46','47','48');
557         }
558       break;
559     case "queen":
560       $CARDS["trump"]    = array('3','4','5','6','7','8','9','10');
561       $CARDS["clubs"]    = array('27','28','29','30','31','32','11','12','33','34');
562       $CARDS["spades"]   = array('35','36','37','38','39','40','13','14','41','42');
563       $CARDS["hearts"]   = array('43','44', '1', '2','45','46','15','16','47','48');
564       $CARDS["diamonds"] = array('19','20','21','22','23','24','17','18','25','26');
565       $CARDS["foxes"]    = array();
566       break;
567     case "jack":
568       $CARDS["trump"]    = array('11','12','13','14','15','16','17','18');
569       $CARDS["clubs"]    = array('27','28','29','30','31','32','3', '4','33','34');
570       $CARDS["spades"]   = array('35','36','37','38','39','40','5', '6','41','42');
571       $CARDS["hearts"]   = array('43','44', '1', '2','45','46','7', '8','47','48');
572       $CARDS["diamonds"] = array('19','20','21','22','23','24','9','10','25','26');
573       $CARDS["foxes"]    = array();
574       break;
575     case "trumpless":
576       $CARDS["trump"]    = array();
577       $CARDS["clubs"]    = array('27','28','29','30','31','32','3', '4','11','12','33','34');
578       $CARDS["spades"]   = array('35','36','37','38','39','40','5', '6','13','14','41','42');
579       $CARDS["hearts"]   = array('43','44', '1', '2','45','46','7', '8','15','16','47','48');
580       $CARDS["diamonds"] = array('19','20','21','22','23','24','9','10','17','18','25','26');
581       $CARDS["foxes"]    = array();
582       break;
583     case "club":
584       $CARDS["trump"]    = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
585                                  '17','18','27','28','29','30','31','32','33','34');
586       $CARDS["clubs"]    = array();
587       $CARDS["spades"]   = array('35','36','37','38','39','40','41','42');
588       $CARDS["hearts"]   = array('43','44','45','46','47','48');
589       $CARDS["diamonds"] = array('19','20','21','22','23','24','25','26');
590       $CARDS["foxes"]    = array();
591       if($RULES["dullen"]=='none')
592         {
593           $CARDS["trump"]    = array('3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
594                                      '17','18','27','28','29','30','31','32','33','34');
595           $CARDS["hearts"]   = array('43','44','1','2','45','46','47','48');
596         }
597       break;
598     case "spade":
599       $CARDS["trump"]    = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
600                                  '17','18','35','36','37','38','39','40','41','42');
601       $CARDS["clubs"]    = array('27','28','29','30','31','32','33','34');
602       $CARDS["spades"]   = array();
603       $CARDS["hearts"]   = array('43','44','45','46','47','48');
604       $CARDS["diamonds"] = array('19','20','21','22','23','24','25','26');
605       $CARDS["foxes"]    = array();
606       if($RULES["dullen"]=='none')
607         {
608           $CARDS["trump"]    = array('3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
609                                      '17','18','35','36','37','38','39','40','41','42');
610           $CARDS["hearts"]   = array('43','44','1','2','45','46','47','48');
611         }
612       break;
613     case "heart":
614       $CARDS["trump"]    = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
615                                  '17','18','43','44','45','46','47','48');
616       $CARDS["clubs"]    = array('27','28','29','30','31','32','33','34');
617       $CARDS["spades"]   = array('35','36','37','38','39','40','41','42');
618       $CARDS["hearts"]   = array();
619       $CARDS["diamonds"] = array('19','20','21','22','23','24','25','26');
620       $CARDS["foxes"]    = array();
621       if($RULES["dullen"]=='none')
622         {
623           $CARDS["trump"]    = array('3','4','5','6','7','8','9','10','11','12','13','14','15','16', 
624                             '17','18','43','44','1','2','45','46','47','48');
625         }
626       break;
627     }
628 }
629
630 function mysort($cards,$gametype)
631 {
632   usort ( $cards, "sort_comp" );
633   return $cards;
634 }
635
636 function sort_comp($a,$b)
637 {
638   global $CARDS;
639
640   $ALL = array();
641   $ALL = array_merge($CARDS["trump"],$CARDS["diamonds"],$CARDS["clubs"],
642                      $CARDS["hearts"],$CARDS["spades"],$CARDS["diamonds"]);
643
644   return pos_array($a,$ALL)-pos_array($b,$ALL);
645 }
646
647 function can_call($what,$hash)
648 {
649   return 1;
650 }
651
652 ?>