<?php

// Pojmenování statistických kategorií
$StatCategory = array(
  'browser' => 'Prohlížeče',
  'referer' => 'Odkud přišli',
  'module' => 'Sekce webu',
  'host' => 'Adresy návštěvníků',
  'word' => 'Hledaná slova',
  'user' => 'Uživatelé',
  'action' => 'Akce',
);

$StatMonths = array('Leden','Únor','Březen','Duben','Květen','Červen','Červenec','Srpen','Září','Říjen','Listopad','Prosinec');

/*
if (!session_is_registered('Stat_Category')) {
  session_register('Stat_Category');
  $Stat_Category = 'module';
}
if (!session_is_registered('Stat_Name')) {
  session_register('Stat_Name');
  $Stat_Name = 'index';
}
*/

function System_Date()
{
  return(gmdate('Y-m-d'));
}

function StatUpdate($Cat, $Name)
{
  global $DB_Prefix, $Database;

  $Date = System_Date();
  $DbResult = $Database->select('stat', '*', "category='$Cat' AND name='$Name' AND date='$Date'");
  if($DbResult->num_rows > 0) $Database->query("UPDATE ".$DB_Prefix."stat SET hits=hits+1 WHERE category='$Cat' AND name='$Name' AND date='$Date'");
  else
  {
    $Data = array(
      'category' => $Cat,
      'name' => $Name,
      'date' => $Date,
      'hits' => 1,
    );
    $Database->insert('stat', $Data);
  }
}

function StatProcess()
{
  global $Options;
  // Zjistí zobrazený modul
  StatUpdate('module', substr($_SERVER['SCRIPT_NAME'], $Options['StatPathCut']));

  // Zjistí stránku odkud uzivatel přisel
  if(array_key_exists('HTTP_REFERER', $_SERVER))
  {
    $Url = explode('/',$_SERVER['HTTP_REFERER']);
    if(strpos($Url[2],':'))
    {
      $Hostname = explode(':',$Url[2]);
      $ServerIP = gethostbyname($HostName[0]);
    } else $ServerIP = gethostbyname($Url[2]);
    //echo($ServerIP.'-'.$_SERVER["SERVER_ADDR"]);
    if(($ServerIP != $_SERVER["SERVER_ADDR"]) && ($ServerIP!='127.0.0.1'))
      StatUpdate('referer', $_SERVER['HTTP_REFERER']);
  } else StatUpdate('referer', 'direct');

  // Zjistí typ prohlíľeče
  StatUpdate('browser', $_SERVER['HTTP_USER_AGENT']);
  // Zjistí DNS a IP adresu klienta
  StatUpdate('host', $_SERVER['REMOTE_ADDR']);
}

function StatShow()
{
  if(!array_key_exists('period', $_GET)) $Period = '';
  else $Period = $_GET['period'];
  switch($Period)
  {
    case 'years':
      $Out = StatShowYears();
      break;
    case 'months':
      $Out = StatShowMonths();
      break;
    case 'days':
      $Out = StatShowDays();
      break;
    default:
      $Out = StatShowMain();
  }
  return($Out);
}

function StatShowYears()
{
  global $Options, $Database;

  if(array_key_exists('name', $_GET) and array_key_exists('category', $_GET))
  {
    $Output = '<div class="StatList"><strong>Roční statistika</strong><br><br>'.
    '<table class="StatTable"><tr><th>Rok</th><th>Prohlédnutých stránek</th></tr>';

    // Zjisti rozmezí roků
    $DbResult = $Database->select('stat', 'DISTINCT date', 'name="'.$_GET['name'].'" AND category="'.$_GET['category'].'"');
    while($Row = $DbResult->fetch_assoc())
    {
      $Year = substr($Row['date'],0,4);
      if(!isset($Min)) $Min = $Year;
      if(!isset($Max)) $Max = $Year;
	    if(($Year < $Min) or ($Min=='')) $Min = $Year;
	    if($Year > $Max) $Max = $Year;
    }
    // Načti body roků a body celkem
    for($I=$Min;$I<=$Max;$I++)
    {
	    $DateFrom = $I;
	    $DateTo = $DateFrom.'-12-31';
	    $DateFrom .= '-01-01';

      $DbResult = $Database->select('stat', 'SUM(hits)', 'name="'.$_GET['name'].'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
      $Total = $Row[0];

      $DbResult = $Database->select('stat', 'hits', 'name="'.$_GET['name'].'" AND date>="'.$DateFrom.'" AND date<="'.$DateTo.'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
	    $Percent = round($Row[0]/$Total*100,2);
	    if($Percent==0) $Percent = '0';
	    $Output .= '<tr><td><a href="?module=stat&amp;category='.$_GET['category'].'&amp;name='.$_GET['name'].'&amp;period=months&amp;year='.$I.'">'.$I.'</a></td>'.
      '<td><img src="images/leftbar.gif" width="7" height="15"><img src="images/mainbar.gif" width="'.round($Percent*2).'" height="15"><img src="images/rightbar.gif" width="7" height="15">&nbsp; '.$Percent.'% ('.$Row[0].')</td></tr>';
    }
    $Output .= '</table><a href="?module=stat&amp;category='.$_GET['category'].'">Zpátky přehled statistiky</a></div>';
  }
  return($Output);
}

// Zobrazí statistiku měsícu //
function StatShowMonths()
{
  global $StatMonths, $Database;
  if(array_key_exists('name', $_GET) and array_key_exists('category', $_GET) and array_key_exists('year', $_GET))
  {

    $Output = '<div class="StatList"><strong>Měsíční statistika pro rok '.$_GET['year'].'</strong><br><br>'.
    '<table class="StatTable" cellspacing="0"><tr><th>Měsíc</th><th>Prohlédnutých stránek</th></tr>';

    // Spočítej počty pro měsíce
    for($I=1;$I<13;$I++)
    {
	    $DateFrom = $_GET['year'].'-'.$I.'-';
	    $DateTo = $DateFrom.'31';
	    $DateFrom .= '01';

      $DbResult = $Database('stat', 'SUM(hits)', 'name="'.$_GET['name'].'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
      $Total = $Row[0];

      $DbResult = $Datbase->select('stat', 'hits', 'name="'.$_GET['name'].'" AND date>="'.$DateFrom.'" AND date<="'.$DateTo.'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
      $Percent = round($Row[0]/$Total*100,2);
	    if($Percent==0) $Percent = '0';
	    $Output .= '<tr><td><a href="?module=stat&category='.$_GET['category'].'&name='.$_GET['name'].'&period=days&year='.$_GET['year'].'&month='.$I.'">'.$StatMonths[$I-1].'</a></td>'.
      '<td><img src="images/leftbar.gif" width="7" height="15"><img src="images/mainbar.gif" width="'.round($Percent*2).'" height="15"><img src="images/rightbar.gif" width="7" height="15">&nbsp '.$Percent.'% ('.$Row[0].')</td></tr>';
    }
    $Output .= '</table><a href="?module=stat&amp;period=years&amp;category='.$_GET['category'].'&amp;name='.$_GET['name'].'">Zpátky na statistiku roků</a></div>';
    return($Output);
  }
  }

function StatShowDays()
{
  global $StatMonths, $Database;

  if(array_key_exists('name', $_GET) and array_key_exists('category', $_GET) and array_key_exists('year', $_GET) and array_key_exists('month', $_GET))
  {
    $Output = '<div class="StatList"><strong>Denní statistika pro měsic '.$StatMonths[$_GET['month']].'</strong><br><br>'.
    '<table class="StatTable" cellspacing="0"><tr><th>Den</th><th>Prohlédnutých stránek</th></tr>';
    for($I=1;$I<32;$I++)
    {
	    $DbResult = $Database->select('stat', 'SUM(hits)', 'name="'.$_GET['name'].'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
      $Total = $Row[0];

      $Date = $_GET['year'].'-'.$_GET['month'].'-'.$I;
      $DbResult = $Database->select('stat', 'hits', 'name="'.$_GET['name'].'" AND date="'.$Date.'" AND category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();

      $Percent = round($Row[0]/$Total*100,2);
	    if($Percent==0) $Percent = '0';
	    $Output .= '<tr><td>'.$I.'</td>'.
      '<td><img src="images/leftbar.gif" width="7" height="15"><img src="images/mainbar.gif" width="'.round($Percent*2).'" height="15"><img src="images/rightbar.gif" width="7" height="15">&nbsp '.$Percent.'% ('.$Row[0].')</td></tr>';
    }
    $Output .= '</table><a href="?module=stat&period=months&name='.$_GET['name'].'&category='.$_GET['category'].'&year='.$_GET['year'].'">Zpátky na statistiku měsíců</a></div>';
  }
  return($Output);
}

function StatShowMain()
{
    global $StatCategory, $Database;

    $DbResult = $Database->select('stat', 'DISTINCT category');
    $Output = '<div class="StatList"><strong>Seznam kategorií:</strong><br><br><table class="StatTable" cellspacing="0"><tr><th>Název</t></tr>';
    while($Row = $DbResult->fetch_assoc())
    {
      $Output .= '<tr><td><a href="?module=stat&category='.$Row['category'].'">'.$StatCategory[$Row['category']].'</a></td></tr>';
    }
    $Output .= '</table>';
    if(array_key_exists('category', $_GET))
    {
     $DbResult = $Database->select('stat', 'SUM(hits)', 'category="'.$_GET['category'].'"');
      $Row = $DbResult->fetch_row();
      $All = $Row[0];
      $Output .= '<br><strong>Výpis kategorie:</strong><br><br><table class="StatTable" cellspacing="0"><tr><th>Název</th><th>Stránek</th></tr>';
      $DbResult = $Database->select('stat', 'DISTINCT name', "category='".$_GET['category']."' ORDER BY 'name'");
      while($Row = $DbResult->fetch_assoc())
      {
        $DbResult2 = $Datbase->select('stat', 'SUM(hits)', "name='".$Row['name']."' AND category='".$_GET['category']."'");
        $Row2 = $DbResult2->fetch_array();
        if($Row['name'] == 'direct') $Nazev = 'Zadáno přímo'; else $Nazev = $Row['name'];
        if($_GET['category'] == 'host') $Nazev = gethostbyaddr($Nazev);
        $Output .= '<tr><td><a href="?module=stat&category='.$_GET['category'].'&period=years&name='.$Row['name'].'">'.$Nazev.'</a></td>'.
        '<td><img src="images/leftbar.gif" width="7" height="15"><img src="images/mainbar.gif" width="'.(round($Row2[0]/$All*100,2)).'" height="15"><img src="images/rightbar.gif" width="7" height="15">'.$Row2[0].'</td></tr>';
      }
      $Output .= '</table></div>';
    }
    return($Output);
  }

?>
