X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Ffunctions.php;h=9103c6f517fc9e19501fc2364f1283315e66f582;hp=28e5937c5a1259f5c9841fcf16f8aa1ef2967789;hb=193099c75801f128beb8f3bb9541a3cb70f24002;hpb=924f395a39eeccbcd54d540613e440cbedd6ba3d diff --git a/include/functions.php b/include/functions.php index 28e5937..9103c6f 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,5 +1,5 @@ \n". " \"table\"\n"; - while($r = mysql_fetch_array($result,MYSQL_NUM)) + while($r = DB_fetch_array($result)) { $name = $r[0]; $pos = $r[1]; @@ -700,9 +765,13 @@ 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") + if( $RULES["schweinchen"]=="both" && $GAME["schweinchen-who"]==$hash ) + echo " Schweinchen.
"; + if($GT=="poverty" && $party=="re") if($sickness=="poverty") { @@ -710,12 +779,12 @@ function display_table () $cards = DB_get_all_hand($userhash); $trumpNR = count_trump($cards); if($trumpNR) - echo " \"poverty"; + echo " \"poverty"; else - echo " \"poverty"; + echo " \"poverty"; } else - echo " \"poverty\" />"; + echo " \"poverty\" title=\"poverty partner\" />"; if($GT=="dpoverty") if($party=="re") @@ -725,12 +794,12 @@ function display_table () $cards = DB_get_all_hand($userhash); $trumpNR = count_trump($cards); if($trumpNR) - echo " \"poverty"; + echo " \"poverty"; else - echo " \"poverty"; + echo " \"poverty"; } else - echo " \"poverty\" />"; + echo " \"poverty\" title=\"poverty partner\" />"; else if($sickness=="poverty") { @@ -738,64 +807,64 @@ function display_table () $cards = DB_get_all_hand($userhash); $trumpNR = count_trump($cards); if($trumpNR) - echo " \"poverty2"; + echo " \"poverty2"; else - echo " \"poverty2"; + echo " \"poverty2"; } else - echo " \"poverty2\" />"; + echo " \"poverty2\" title=\"poverty2 partner\" />"; if($GT=="wedding" && $party=="re") if($sickness=="wedding") - echo " \"wedding\""; + echo " \"wedding\""; else - echo " \"wedding"; + echo " \"wedding"; if(ereg("solo",$GT) && $party=="re") { if(ereg("queen",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("jack",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("club",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("spade",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("heart",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("trumpless",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; else if(ereg("trump",$GT)) - echo " \"$GT\""; + echo " \"$GT\""; } /* add point calls */ if($call!=NULL) { if($party=="re") - echo " \"re\""; + echo " \"re\""; else - echo " \"contra\""; + echo " \"contra\""; switch($call) { case "0": - echo " \"0\""; + echo " \"0\""; break; case "30": - echo " \"30\""; + echo " \"30\""; break; case "60": - echo " \"60\""; + echo " \"60\""; break; case "90": - echo " \"90\""; + echo " \"90\""; break; } } echo "
\n"; - echo " local time\n"; - echo " last login\n"; + echo " time info\n"; echo " \n"; } @@ -806,90 +875,287 @@ function display_table () } -function display_user_menu() +function display_user_menu($id) { - global $WIKI,$myid,$INDEX,$STATS; - echo "
\n". - " Go to my user page "; - - $result = mysql_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.status<>'gameover'". - " ORDER BY Game.session" ); - if(mysql_num_rows($result)) - echo "
It's your turn in these games:
\n"; - - while( $r = mysql_fetch_array($result,MYSQL_NUM)) - { - echo "game ".DB_format_gameid($r[1])."
\n"; - } + global $WIKI,$INDEX; - echo "
Start a new game\n"; + $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='$id'". + " AND ( Game.player='$id' OR ISNULL(Game.player) )". + " AND Game.status<>'gameover'". + " ORDER BY Game.session" ); + + $i=0; + while( $r = DB_fetch_array($result)) + { + if($i==0) + { + echo "
\n"; + echo "It's your turn in these games:
\n"; + } - echo "
Statistics\n"; + $i++; + echo "game ".DB_format_gameid($r[1])."
\n"; + if($i>4) + { + echo "...
\n"; + break; + } + } - echo - "
Report bugs in the wiki\n"; - echo "
\n"; + if($i) + echo "
\n"; return; } 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(); - $result = mysql_query("SELECT User.id, User.fullname from Hand". - " LEFT JOIN User On Hand.user_id=User.id". - " WHERE Hand.game_id=".$gameids[0]); - while( $r = mysql_fetch_array($result,MYSQL_NUM)) + $result = DB_query("SELECT User.id, User.fullname from Hand". + " LEFT JOIN User On Hand.user_id=User.id". + " WHERE Hand.game_id=".$gameids[0]); + while( $r = DB_fetch_array($result)) + $player[$r[0]] = 0; + + /* get points and generate table */ + foreach($gameids as $gameid) { - $player[] = array( 'id' => $r[0], 'points' => 0 ); - $output.= " \n"; + $re_score = DB_get_score_by_gameid($gameid); + $gametype = DB_get_gametype_by_gameid($gameid); + foreach($player as $id=>$points) + { + $party = DB_get_party_by_gameid_and_userid($gameid,$id); + if($party == "re") + if($gametype=="solo") + $player[$id] += 3*$re_score; + else + $player[$id] += $re_score; + else if ($party == "contra") + $player[$id] -= $re_score; + } + $score[$i]['gameid'] = $gameid ; + $score[$i]['players'] = $player; + $score[$i]['points'] = abs($re_score); + $score[$i]['solo'] = ($gametype=="solo"); + + $i++; } - $output.=" \n \n"; + + return $score; +} + +function generate_global_score_table() +{ + $return = array(); + + /* get all ids */ + $gameids = DB_get_gameids_of_finished_games_by_session(0); + + if($gameids == NULL) + return ""; + + /* get player id, names... from the User table */ + $player = array(); + $result = DB_query("SELECT User.id, User.fullname FROM User"); + + while( $r = DB_fetch_array($result)) + $player[] = array( 'id' => $r[0], 'name'=> $r[1], 'points' => 0 ,'nr' => 0); /* get points and generate table */ foreach($gameids as $gameid) { - $output.=" \n"; - $re_score = DB_get_score_by_gameid($gameid); + $gametype = DB_get_gametype_by_gameid($gameid); + + /* TODO: this shouldn't loop over all players, just the 4 players that are in the game */ foreach($player as $key=>$pl) { $party = DB_get_party_by_gameid_and_userid($gameid,$pl['id']); if($party == "re") - if(DB_get_gametype_by_gameid($gameid)=="solo") + if($gametype=="solo") $player[$key]['points'] += 3*$re_score; else $player[$key]['points'] += $re_score; else if ($party == "contra") $player[$key]['points'] -= $re_score; - - $output.=" \n"; + if($party) + $player[$key]['nr']+=1; } - $output.=" \n \n"; + 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.="
".substr($r[1],0,2)." P
".$player[$key]['points']."".abs($re_score); + } + + function cmp($a,$b) + { + if($a['nr']==0 ) return 1; + if($b['nr']==0) return 1; + + $a=$a['points']/$a['nr']; + $b=$b['points']/$b['nr']; + + if ($a == $b) + return 0; + return ($a > $b) ? -1 : 1; + } + usort($player,"cmp"); + + foreach($player as $pl) + { + /* limit to players with at least 10 games */ + if($pl['nr']>10) + $return[] = array( $pl['name'], round($pl['points']/$pl['nr'],3) ); + } + + return $return; +} + +function format_score_table_ascii($score) +{ + $output=""; + if(sizeof($score)==0) + return ""; + + /* truncate table if we have too many games */ + $max = sizeof($score); + if($max>6) $output.=" (table truncated to last 6 games)\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"; + + /* output score for each game */ + $i=0; + 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(DB_get_gametype_by_gameid($gameid)=="solo") - $output.= " S"; - $output.="
\n"; + $output = "
\n\n"; + + /* output header */ + $header = ""; + $header.= " \n \n"; + $header.= " "; + foreach($score[0]['players'] as $id=>$points) + { + $name = DB_get_name('userid',$id); /*TODO*/ + $header.= ""; + } + $header.="\n \n \n"; + + /* use the same as footer */ + $footer = ""; + $footer.= " \n \n"; + $footer.= " "; + foreach($score[0]['players'] as $id=>$points) + { + $name = DB_get_name('userid',$id); /*TODO*/ + $footer.= ""; + } + $footer.="\n \n \n"; + + /* body */ + $body = ""; + $body.= " \n"; + $i=0; + foreach($score as $game) + { + $i++; + $body.=" "; + $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) + $body.=" "; + else + $body.=" "; + + foreach($game['players'] as $id=>$points) + $body.=""; + $body.="\n"; + } + + $output.=$header; + if($i>12) + $output.=$footer; + $output.=$body; + + $output.=" \n
No ".substr($name,0,2)." P
No ".substr($name,0,2)." P
$i$i".$points."".$game['points']; + + /* check for solo */ + if($game['solo']) + $body.= " S"; + $body.="
\n
\n"; return $output; } +function createCache($content, $cacheFile) +{ + $fp = fopen($cacheFile,"w"); + if($fp) + { + fwrite($fp,$content); + fclose($fp); + } + 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; +} + + ?>