X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Ffunctions.php;h=d09408cd43094b0c0e4ca00b5b460b2442297fbb;hp=9f58f51f969fb610a024637213c5ff9cdd726d5a;hb=567f0d615194566c629887a315cd864bbe84fde9;hpb=671da1a387eb879aec526ea9b7614ff9381e7c0f diff --git a/include/functions.php b/include/functions.php index 9f58f51..d09408c 100644 --- a/include/functions.php +++ b/include/functions.php @@ -177,14 +177,27 @@ function compare_cards($a,$b,$game) return 1; if($b == 19 || $b == 20 ) return 0; - }; - if($RULES['schweinchen']=='second' && $GAME['schweinchen-second']) + } + else if($RULES['schweinchen']=='second' && $GAME['schweinchen-second']) { if($a == 19 || $a == 20 ) return 1; if($b == 19 || $b == 20 ) return 0; - }; + } + else if($RULES['schweinchen']=='secondaftercall' && $GAME['schweinchen-who'] && $GAME['schweinchen-second'] ) + { + /* check if a call was made either by the player or his partner. If so activate Schweinchen rule. */ + if(DB_get_call_by_hash($GAME['schweinchen-who']) || DB_get_partner_call_by_hash($GAME['schweinchen-who']) ) + { + if($a == 19 || $a == 20 ) + return 1; + if($b == 19 || $b == 20 ) + return 0; + } + /* if not, do nothing and the foxes are just handeled as normal trump */ + } + ; case "heart": case "spade": case "club": @@ -734,7 +747,7 @@ function display_table () if(!$debug) echo " $name \n"; else - echo " $name\n"; + echo " $name\n"; /* add hints for poverty, wedding, solo, etc */ if( $gametype != "solo") @@ -846,25 +859,32 @@ function display_table () function display_user_menu() { - global $WIKI,$myid,$INDEX; + global $WIKI,$INDEX; + + /* get the id we are looking for */ + if(isset($_SESSION['id'])) + $myid = $_SESSION['id']; + else + return; $result = DB_query("SELECT Hand.hash,Hand.game_id,Game.player from Hand". " LEFT JOIN Game On Hand.game_id=Game.id". " WHERE Hand.user_id='$myid'". - " AND Game.player='$myid'". + " AND ( Game.player='$myid' OR ISNULL(Game.player) )". " AND Game.status<>'gameover'". " ORDER BY Game.session" ); - if(DB_num_rows($result)) - echo "It's your turn in these games:
\n"; $i=0; while( $r = DB_fetch_array($result)) { if($i==0) - echo "
\n"; + { + echo "
\n"; + echo "It's your turn in these games:
\n"; + } $i++; - echo "game ".DB_format_gameid($r[1])."
\n"; + echo "game ".DB_format_gameid($r[1])."
\n"; if($i>4) { echo "...
\n"; @@ -879,14 +899,20 @@ function display_user_menu() function generate_score_table($session) { + /* returns an array with N entries + * $score[$i]["gameid"] = gameid + * $score[$i]["players"] = array (id=>total points) + * $score[$i]["points"] = points for this game + * $score[$i]["solo"] = 1 or 0 + */ + $score = array(); + $i=0; + /* get all ids */ $gameids = DB_get_gameids_of_finished_games_by_session($session); if($gameids == NULL) - return ""; - - $output = "
\n\n \n"; - + return $score; /* get player id, names... from the first game */ $player = array(); @@ -894,46 +920,38 @@ function generate_score_table($session) " LEFT JOIN User On Hand.user_id=User.id". " WHERE Hand.game_id=".$gameids[0]); while( $r = DB_fetch_array($result)) - { - $player[] = array( 'id' => $r[0], 'points' => 0 ); - $output.= " \n"; - } - $output.=" \n \n"; + $player[$r[0]] = 0; /* get points and generate table */ foreach($gameids as $gameid) { - $output.=" \n"; - $re_score = DB_get_score_by_gameid($gameid); - foreach($player as $key=>$pl) + foreach($player as $id=>$points) { - $party = DB_get_party_by_gameid_and_userid($gameid,$pl['id']); + $party = DB_get_party_by_gameid_and_userid($gameid,$id); if($party == "re") if(DB_get_gametype_by_gameid($gameid)=="solo") - $player[$key]['points'] += 3*$re_score; + $player[$id] += 3*$re_score; else - $player[$key]['points'] += $re_score; + $player[$id] += $re_score; else if ($party == "contra") - $player[$key]['points'] -= $re_score; - - $output.=" \n"; + $player[$id] -= $re_score; } - $output.=" \n \n"; + $i++; } - $output.="
".substr($r[1],0,2)." P
".$player[$key]['points']."".abs($re_score); + $score[$i]['gameid'] = $gameid ; + $score[$i]['players'] = $player; + $score[$i]['points'] = abs($re_score); + $score[$i]['solo'] = (DB_get_gametype_by_gameid($gameid)=="solo"); - /* check for solo */ - if(DB_get_gametype_by_gameid($gameid)=="solo") - $output.= " S"; - $output.="
\n"; - - return $output; + return $score; } function generate_global_score_table() { + $return = array(); + /* get all ids */ $gameids = DB_get_gameids_of_finished_games_by_session(0); @@ -967,7 +985,6 @@ function generate_global_score_table() } } - echo "\n \n"; function cmp($a,$b) { if($a['nr']==0 ) return 1; @@ -981,16 +998,127 @@ function generate_global_score_table() return ($a > $b) ? -1 : 1; } usort($player,"cmp"); + foreach($player as $pl) { + /* limit to players with at least 10 games */ if($pl['nr']>10) - echo " \n"; + $return[] = array( $pl['name'], round($pl['points']/$pl['nr'],3) ); + } + + return $return; +} + +function format_score_table_ascii($score) +{ + $output=""; + if(sizeof($score)==0) + return ""; + + // if(sizeof($score)>5) $header.= " ... \n"; + + /* output header */ + foreach($score[0]['players'] as $id=>$points) + { + $name = DB_get_name('userid',$id); /*TODO*/ + $output.= " ".substr($name,0,2)." |"; + } + $output.=" P |\n "; + $output.= "------+------+------+------+------+\n"; + + $max = sizeof($score); + $i=0; + + if($i<$max-6) $output.=" ...\n"; + + foreach($score as $game) + { + $i++; + if($i-1<$max-6) continue; + foreach($game['players'] as $id=>$points) + $output.=str_pad($points,6," ",STR_PAD_LEFT)."|"; + $output.=str_pad($game['points'],4," ",STR_PAD_LEFT); + + /* check for solo */ + if($game['solo']) + $output.= " S|"; + else + $output.= " |"; + + $output.="\n"; + } + return $output; +} + +function format_score_table_html($score,$userid) +{ + global $INDEX; + + if(sizeof($score)==0) + return ""; + + $output = "
\n
",$pl['name'],"",round($pl['points']/$pl['nr'],3),"
\n \n"; + + /* output header */ + $output.= " "; + foreach($score[0]['players'] as $id=>$points) + { + $name = DB_get_name('userid',$id); /*TODO*/ + $output.= ""; + } + $output.="\n \n\n\n"; + + $i=0; + foreach($score as $game) + { + $i++; + $output.=" "; + $userhash = DB_get_hash_from_gameid_and_userid($game['gameid'],$userid); + /* create link to old games only if you are logged in and its your game*/ + if(isset($_SESSION['id']) && $_SESSION['id']==$userid) + $output.=" "; + else + $output.=" "; + + foreach($game['players'] as $id=>$points) + $output.=""; + $output.="\n"; + } + + $output.="\n
No ".substr($name,0,2)." P
$i$i".$points."".$game['points']; + + /* check for solo */ + if($game['solo']) + $output.= " S"; + $output.="
\n"; + + return $output; +} + +function createCache($content, $cacheFile) +{ + $fp = fopen($cacheFile,"w"); + if($fp) + { + fwrite($fp,$content); + fclose($fp); } - echo "\n"; + else + echo "WARNING: couldn't create cache file"; return; } +function getCache($cacheFile, $expireTime) +{ + if( file_exists($cacheFile) && + filemtime($cacheFile )>( time() - $expireTime ) ) + { + return file_get_contents($cacheFile); + } + + return false; +} ?>