/**
  * Collects and renders user per group report data
  */
 public function user_per_group()
 {
     $myConfig = $this->getConfig();
     $oDb = oxDb::getDb();
     global $aTitles;
     $aDataX = array();
     $aDataY = array();
     $sSQL = "SELECT oxgroups.oxtitle,\n                        count(oxuser.oxid)\n                 FROM oxobject2group,\n                      oxuser,\n                      oxgroups\n                 WHERE oxobject2group.oxobjectid = oxuser.oxid  AND\n                       oxobject2group.oxgroupsid = oxgroups.oxid\n                 GROUP BY oxobject2group.oxgroupsid\n                 ORDER BY oxobject2group.oxgroupsid";
     $rs = $oDb->execute($sSQL);
     if ($rs != false && $rs->recordCount() > 0) {
         while (!$rs->EOF) {
             if ($rs->fields[1]) {
                 $aDataX[] = $rs->fields[1];
                 $aDataY[] = $rs->fields[0];
             }
             $rs->moveNext();
         }
     }
     header("Content-type: image/png");
     // New graph with a drop shadow
     if (count($aDataX) > 10) {
         $graph = new PieGraph(800, 830);
     } else {
         $graph = new PieGraph(600, 600);
     }
     $graph->setBackgroundImage($myConfig->getImageDir(true) . "/reportbgrnd.jpg", BGIMG_FILLFRAME);
     $graph->setShadow();
     // Set title and subtitle
     //$graph->title->set($this->aTitles[$myConfig->getConfigParam( 'iAdminLanguage' ) ]);
     $graph->title->set($this->aTitles[oxRegistry::getLang()->getObjectTplLanguage()]);
     // Use built in font
     $graph->title->setFont(FF_FONT1, FS_BOLD);
     // Create the bar plot
     $bplot = new PiePlot3D($aDataX);
     $bplot->setSize(0.4);
     $bplot->setCenter(0.5, 0.32);
     // explodes all chunks of Pie from center point
     $bplot->explodeAll(10);
     $iUserCount = 0;
     foreach ($aDataX as $iVal) {
         $iUserCount += $iVal;
     }
     for ($iCtr = 0; $iCtr < count($aDataX); $iCtr++) {
         $iSLeng = strlen($aDataY[$iCtr]);
         if ($iSLeng > 20) {
             if ($iSLeng > 23) {
                 $aDataY[$iCtr] = trim(substr($aDataY[$iCtr], 0, 20)) . "...";
             }
         }
         $aDataY[$iCtr] .= " - " . $aDataX[$iCtr] . " Kund.";
     }
     $bplot->setLegends($aDataY);
     if (count($aDataX) > 10) {
         $graph->legend->pos(0.49, 0.66, 'center');
         $graph->legend->setFont(FF_FONT0, FS_NORMAL);
         $graph->legend->setColumns(4);
     } else {
         $graph->legend->pos(0.49, 0.7, 'center');
         $graph->legend->setFont(FF_FONT1, FS_NORMAL);
         $graph->legend->setColumns(2);
     }
     $graph->add($bplot);
     // Finally output the  image
     $graph->stroke();
 }
Esempio n. 2
0
 public function generateLog($winner = false)
 {
     $gameid = strtotime('now');
     $template = file_get_contents('data/log.html');
     $fp = fopen(sprintf('logs/log_%d.html', $gameid), 'a');
     $htplayers = array();
     foreach ($this->players as $pl) {
         $htplayers[] = sprintf('<li>%s</li>', htmlspecialchars(parent::playerName($pl)));
     }
     $players = implode("\n", $htplayers);
     if ($winner) {
         $data = sprintf("After %d hands played, the player <strong>%s</strong> won the total pot of <strong>\$%0.2f</strong>", $this->game, parent::playerName($winner), $winner->money);
     } else {
         $htplayers = array();
         foreach ($this->players as $pl) {
             $htplayers[] = sprintf('<li>%s ($%0.2f)</li>', htmlspecialchars(parent::playerName($pl)), $pl->money);
         }
         $htplayers = implode("\n", $htplayers);
         $data = sprintf("After %d hands no winner was determined a summary of each individual player's money follows:<ol>%s</ol>", $this->game, $htplayers);
     }
     $template = str_replace("{players}", $players, $template);
     $template = str_replace("{gameid}", $gameid, $template);
     $template = str_replace("{winner}", $data, $template);
     $template = str_replace("{version}", parent::$version, $template);
     $template = str_replace("{date}", date('d-m-Y h:i', $gameid), $template);
     $template = str_replace("{startmoney}", sprintf('%0.2f', $this->playermoney), $template);
     $template = str_replace("{bigblind}", sprintf('%0.2f', $this->bigblind), $template);
     $template = str_replace("{smallblind}", sprintf('%0.2f', $this->smallblind), $template);
     $template = str_replace("{maxgames}", $this->totalgames, $template);
     $template = str_replace("{winner}", $data, $template, $template);
     fputs($fp, $template);
     fclose($fp);
     require_once 'data/jpgraph.php';
     require_once 'data/jpgraph_line.php';
     $width = 900;
     $height = 300;
     $graph = new Graph($width, $height);
     $graph->img->SetMargin(40, 40, 40, 40);
     $graph->SetShadow();
     $graph->setScale('intlin');
     $graph->title->Set('Amount of money per player, per hand');
     $graph->xaxis->title->Set('Hand');
     $graph->yaxis->title->Set('Money');
     foreach ($this->moneylog as $id => $data) {
         $p = $this->players[$id];
         $lineplot = new LinePlot($data);
         $lineplot->setweight($id);
         $lineplot->SetLegend(parent::playerName($p));
         $graph->add($lineplot);
     }
     $graph->stroke(sprintf('logs/playermoney_%d.jpg', $gameid));
     // Pie graph, showing checks, folds, bets, wins, calls and raises
     require_once "data/jpgraph_pie.php";
     // Create the Pie Graph.
     $height = ceil(count($this->players) / 2) * 440;
     $graph = new PieGraph($width, $height);
     $graph->SetShadow();
     // Set A title for the plot
     $graph->title->Set("Moves per user");
     // Create plots
     $size = 0.2;
     $x = array(0.25, 0.75);
     $y = 220;
     $i = 1;
     $legend = array("Check", "Call", "Bet", "Raise", "Fold");
     foreach ($this->players as $id => $player) {
         $plot = new PiePlot(array($player->checks, $player->calls, $player->bets, $player->raises, $player->folds));
         if ($player->id == 1) {
             $plot->SetLegends($legend);
         }
         $plot->SetLabelType(PIE_VALUE_ADJPERCENTAGE);
         $plot->SetSize($size);
         $plot->SetCenter($x[$i - 1], $y);
         if ($i == 2) {
             $i = 0;
             $y += 420;
         }
         $i++;
         $plot->title->Set(parent::playerName($player));
         $graph->add($plot);
     }
     $graph->stroke(sprintf('logs/playermoves_%d.jpg', $gameid));
     // Bargraph containing each player's wins
     $height = 70 * count($this->players);
     require_once "data/jpgraph_bar.php";
     $graph = new Graph($width, $height);
     $graph->SetScale('textlin');
     $graph->SetShadow();
     $lbl = array();
     $data = array();
     foreach ($this->players as $pl) {
         $lbl[] = parent::PlayerName($pl);
         $data[] = $pl->wins;
     }
     $top = 60;
     $bottom = 30;
     $left = 80;
     $right = 30;
     $graph->Set90AndMargin($left, $right, $top, $bottom);
     $graph->xaxis->SetTickLabels($lbl);
     $graph->xaxis->SetLabelAlign('right', 'center', 'right');
     $graph->yaxis->SetLabelAlign('center', 'bottom');
     $graph->title->Set('Amount of hands won by individual players');
     $bplot = new BarPlot($data);
     $bplot->SetFillGradient("navy", "lightsteelblue", GRAD_HOR);
     $bplot->SetWidth(0.5);
     $bplot->SetYMin(0);
     $graph->Add($bplot);
     $graph->Stroke(sprintf('logs/playerwins_%d.jpg', $gameid));
     $this->newgame = false;
     // Remove the clients from the server
     $this->broadcast("[SERVER] Thank you for playing Texas Hold`em (LIMIT)\n[SERVER] If you want to play another game, just reconnect to the server!");
     $this->return = true;
     foreach ($this->players as $player) {
         $this->disconnect($player);
     }
     $this->return = true;
     $this->restore();
 }