<?php

include_once(dirname(__FILE__).'/module.php');

class Realm extends Module
{
  var $Id;

  function __construct($System, $Id) 
  {
    parent::__construct($System);
    $this->Id = $Id;
    $DbResult = $this->Database->query('SELECT * FROM Realm WHERE Id='.$Id.' AND Enabled=1');
    $this->Data = $DbResult->fetch_assoc();
    $this->CharactersDatabase = new Database();
    $this->CharactersDatabase->Connect($this->Data['DatabaseHost'], $this->Data['DatabaseUser'], $this->Data['DatabasePassword'], $this->Data['DatabaseCharacters']);
    $this->CharactersDatabase->select_db($this->Data['DatabaseCharacters']);
    //if($this->CharactersDatabase->connect_error) 
    //{
    //  die('Přihlášení k databázi realmu '.$this->Id.' selhalo: '.$this->Database->connect_error);
    //}
    $this->CharactersDatabase->charset($this->Config['Database']['Charset']);
    
    $this->MangosDatabase = new Database();
    $this->MangosDatabase->Connect($this->Data['DatabaseHost'], $this->Data['DatabaseUser'], $this->Data['DatabasePassword'], $this->Data['DatabaseMangos']);
    $this->MangosDatabase->select_db($this->Data['DatabaseMangos']);
    //if($this->MangosDatabase->connect_error) 
    //{
    //  die('Přihlášení k databázi realmu '.$this->Id.' selhalo: '.$this->MangosDatabase->connect_error);
    //}
    $this->MangosDatabase->charset($this->Config['Database']['Charset']);
  }
  
  function OnlineCharactersCount()
  {
    if($this->CharactersDatabase->connect_error) return(0);
    else {
      $DbResult = $this->CharactersDatabase->query('SELECT COUNT(*) FROM `characters` WHERE `online` = 1');
      $DbRow = $DbResult->fetch_row();
      return($DbRow[0]);
    }
  }

  function OnlineStateImage($Status)
  {
    global $html;
    
    if($Status) return('<img src="'.$html->Link('/imgs/inc/on.gif').'" alt="online" />&nbsp;<span style="text-color: #234303; text-size: 4;">Mimo provoz</span>');
      else return('<img src="'.$html->Link('/imgs/inc/off.gif').'" alt="offline" />&nbsp;<span style="text-color: #990000; text-size: 4;">V provozu</span>');
  }

  function Uptime()
  {
    $Database->OpenLogonServerDatabase();
    $row = $Database->query('SELECT `starttime`, `uptime` FROM `uptime` WHERE `realmid`='.$this->Id.' ORDER BY `starttime` DESC LIMIT 1')
  ->fetch_array();
    $uptime = round($row['uptime'] / 3600);
    return($uptime);
  }

  public function CharacterCount()
  {
    if($this->CharactersDatabase->connect_error) return('');
    else {
      $DbResult = $this->CharactersDatabase->query('SELECT COUNT(*) FROM `characters`');
      $DbRow = $DbResult->fetch_row();
      return($DbRow[0]);
    }
  }
  
  public function GuidToCharName($guid)
  {
    if($this->CharactersDatabase->connect_error) return(0);
    else {
      $row = $this->CharactersDatabase->query('SELECT `name` FROM `characters` WHERE `guid` = "'.$guid.'" LIMIT 1')->fetch_array();
      return($row['name']);
    }
  }
  
  public function ShowGmLog($log)
  {
    echo('<table border="1" width="540">'.
      '<tr>
            <th>Čas</th>
            <th>GM</th>
            <th>Příkaz</th>
            <th>Vybrán</th>
          </tr>');
    $gm_log = ereg_replace("\n",";",$log);
    $gm_log = explode(";",$gm_log);
    $gm_log = array_reverse($gm_log);
    foreach($gm_log as $row)
    {
      if (strpos($row,"Command:") == true)
      {
        $edited = str_replace(" Command: ", ";", $row);     // 0 - time
        $edited = str_replace(" (Account: ", ";", $edited); // 1 - command
        $edited = str_replace(" [Player: ", ";", $edited);  // 2 - gm
        $edited = str_replace(" Selected: ", ";", $edited); // 3 - position
        $edited = str_replace(" (GUID: ", ";", $edited);    // 4 - selected
        $edited = str_replace(")]", ";", $edited);          // 5 - selected guid
        $edited_arr = explode(";",$edited);
        if($edited_arr[4] == "player") $sel_name = " - ".$this->GuidToCharName($edited_arr[5]);
          else $sel_name = '';
        $human_date = $this -> HumanDate($edited_arr[0]);
        echo('<tr>
            <td><font size="2">'.$human_date.'</font></td>
            <td>'.$edited_arr[2].'</td>
            <td>'.$edited_arr[1].'</td>
            <td>'.$edited_arr[4].$sel_name.'</td>
          </tr>');
      }
      if(strpos($row, 'mail item:') == true)
      {
        $edited = str_replace(" GM ", ";", $row);
        $edited = str_replace(" (Account: ", ";", $edited);
        $edited = str_replace(") mail item: ", ";", $edited);
        $edited = str_replace(" (Account: ", ";", $edited);
        $edited = str_replace(")", "", $edited);
        $edited_arr = explode(";",$edited);
        $human_date = $this -> HumanDate($edited_arr[0]);
        echo('<tr>
            <td><font size="2">'.$human_date.'</font></td>
            <td>'.$edited_arr[1].'</td>
            <td>Send : '.$edited_arr[3].')</td>
            <td>-</td>
          </tr>');
      }
      if(strpos($row,"trade:") == true)
      {
        $edited = str_replace(" GM ", ";", $row);
        $edited = str_replace(" (Account: ", ";", $edited);
        $edited = str_replace(") trade: ", ";", $edited);
        $edited = str_replace(" (Account: ", ";", $edited);
        $edited = str_replace(")", "", $edited);
        $edited_arr = explode(";",$edited);
            
        $human_date = $this -> HumanDate ($edited_arr[0]);
        echo('<tr>
            <td><font size="2">'.$human_date.'</font></td>
            <td>'.$edited_arr[1].'</td>
            <td>Trade : '.$edited_arr[3].')</td>
            <td>-</td>
          </tr>');
      }
    }
    echo('</table>'); 
  }
  
  function WoWEmuStat()
  {
    global $Config;
    
    $Result = 
'<?xml version="1.0" encoding="UTF-8"'."?>\r\n".
"  <stats>\r\n".
"    <server>\r\n".
"      <version>0.16</version>\r\n".
"      <owner>Admin</owner>\r\n".
"      <servername>Server</servername>\r\n".
"      <uptime>0 weeks 1 days 0 hours 0 mins</uptime>\r\n".
"    </server>\r\n".
"    <serverload>\r\n".
"      <network>\r\n".
"        <configsleep>200</configsleep>\r\n".
"        <loops>0</loops>\r\n".
"        <totaltime>0</totaltime>\r\n".
"        <load>0.00%</load>\r\n".
"      </network>\r\n".
"      <world>\r\n".
"        <configsleep>600</configsleep>\r\n".
"        <loops>95222</loops>\r\n".
"        <totaltime>7594525</totaltime>\r\n".
"        <load>1.50%</load>\r\n".
"      </world>\r\n".
"    </serverload>\r\n".
"    <players>\r\n";
    if($this->CharactersDatabase->connect_error) return(0);
    else {
      $DbResult = $this->CharactersDatabase->query('SELECT *, CAST( SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, " ", '.$Config['Mangos']['CharacterDataOffset']['Level'].' + 1), " ", -1) AS UNSIGNED) AS level FROM `characters` WHERE `online` = 1');
      while($DbRow = $DbResult->fetch_assoc())
      {
         $Result .= "      <player>\r\n".
    "        <name>".$DbRow['name']."</name>\r\n".
    "        <race>".$DbRow['race']."</race>\r\n".
    "        <class>".$DbRow['class']."</class>\r\n".
    "        <level>".$DbRow['level']."</level>\r\n".
    "        <map>".$DbRow['map']."</map>\r\n".
    "        <zone>xxx</zone>\r\n".
    "        <ping>10</ping>\r\n".
    "        <plevel>0</plevel>\r\n".
    "        <ip>178.12.14.2</ip>\r\n".
    "      </player>\r\n";
      }
    }
    $Result .= "    </players>\r\n".
     "  </stats>\r\n";
    return($Result);
  }
}

?>
