Changeset 6


Ignore:
Timestamp:
Jun 10, 2009, 4:57:51 PM (15 years ago)
Author:
george
Message:
  • Přidáno: Třída pro ladění chyb MaNGOSu.
  • Přidáno: Třída záznamu operací.
  • Opraveno: Zpracování více příkazů najednou v plánovaných úlohách.
  • Přidáno: Kostra třídy pro správu záloh.
  • Přidáno: Funkce pro prvotní import celé databáze mangosu.
  • Upraveno: Inicializace a zrušení databáze.
  • Přidáno: Funce pro stažení a kompilaci emulátoru.
Location:
trunk
Files:
7 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Readme.txt

    r3 r6  
    22==============================
    33
    4 1) Konfigurační soubory
     41) Popis složek
     5
     6  www - webové administrační rozhraní v PHP
     7  server - složka pro ukládání konfigurací a ladících záznamů vytvořených serverů
     8  emulator - složka obsahující dostupné emulátory
     9  database - složka obsahující zdrojové sql soubory pro nastavení databáze
     10  wowclient - složka obsahující datové soubory pro jednotlivé verze herního klienta
     11
     12
     132) Konfigurační soubory
    514
    615  Zkopírovat soubor www/config.sample.php na www/config.php a vyplnit údaje.
    716
    817
    9 2) Práva pro zápis
     183) Práva pro zápis
    1019
    1120  Nastavit práva pro zápis pro web server pro složku server.
    1221
     22
     234) Uživatel mangos
     24
     25  Z důvodu ochrany bezpečí vytvořte v systému uživatele mangos.
  • trunk/www/config.sample.php

    r3 r6  
    2828    'ErrorLogFile' => 'php_script_error.log',   
    2929  ),
     30  'BaseDir' => '/opt/wowhosting',
    3031);
    3132
  • trunk/www/database.php

    r3 r6  
    5454    {
    5555            if(!in_array($Value, $this->Functions)) $Value = '"'.$this->real_escape_string($Value).'"';
    56       $Values .= ', '.$Key.'='.$Value;
     56      $Values .= ', `'.$Key.'`='.$Value;
    5757    }
    5858    $Values = substr($Values, 2); 
  • trunk/www/emulator.php

    r5 r6  
    2323  function Add()
    2424  {
    25     $this->AddTask('Vytovření nového emulátoru', array(
    26       'ln -s wowclient/'.$this->Emulator['ClientVersion']['Version'].'/maps emu/mangos/'.$this->Emulator['Revision'].'/mangos/maps',
    27       'ln -s wowclient/'.$this->Emulator['ClientVersion']['Version'].'/dbc emu/mangos/'.$this->Emulator['Revision'].'/mangos/dbc',
    28     ));
     25    $EmulatorDir = '../emulator/'.$this->Id.'/';
     26    if(!file_exists($EmulatorDir)) mkdir($EmulatorDir, 0777, true);   
     27   
     28    //$this->AddTask('Vytvoření nového emulátoru', array(
     29    //  'ln -s wowclient/'.$this->Emulator['ClientVersion']['Version'].'/maps emulator/'.$this->Emulator['Id'].'/mangos/maps',
     30    //  'ln -s wowclient/'.$this->Emulator['ClientVersion']['Version'].'/dbc emulator/'.$this->Emulator['Id'].'/mangos/dbc',
     31    //));
     32    $this->Download();
     33    $this->Compile();
    2934  }
    3035 
     
    3540  function Download()
    3641  {
     42    global $Config;
     43   
     44    $this->AddTask('Stažení emulátoru', array(
     45      'cd '.$Config['BaseDir'].'emulator/'.$this->Id.'/',
     46      'git clone git://github.com/mangos/mangos.git source',
     47      'cd source',
     48      'git checkout '.$this->Emulator['CommitHash'],
     49      'mkdir src/bindings/ScriptDev2',
     50      'svn checkout -r '.$this->Emulator['ScriptDev2Revision'].' https://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2/ src/bindings/ScriptDev2',
     51      'git apply src/bindings/ScriptDev2/patches/'.$this->Emulator['ScriptDev2PatchFileName'],
     52    ));
    3753  }
    3854 
    3955  function Compile()
    4056  {
     57    global $Config;
     58   
     59    $this->AddTask('Překlad emulátoru', array(
     60      'cd '.$Config['BaseDir'].'emulator/'.$this->Id.'/source',
     61      'autoreconf -ifv',
     62      'mkdir objdir',
     63      'cd objdir',
     64      '../configure --prefix='.$Config['BaseDir'].'emulator/'.$this->Id.'/ --enable-cli --enable-ra',
     65      'make',
     66      'make install',
     67    ));
    4168  }
    4269}
  • trunk/www/form_classes.php

    r4 r6  
    22
    33$FormClasses = array(
    4   'NewPayment' => array(
    5     'Title' => 'Nová platba',
    6     'Items' => array(
    7       'Time' => array('Type' => 'Time', 'Caption' => 'Čas', 'Default' => 'Now'),
    8       'Subject' => array('Type' => 'TFinanceSubject', 'Caption' => 'Subjekt', 'Default' => 0),
    9       'Value' => array('Type' => 'Float', 'Caption' => 'Částka [Kč]', 'Default' => '0'),
    10       'Text' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'Přijatá záloha'),
    11       'Cash' => array('Type' => 'Boolean', 'Caption' => 'Hotovost', 'Default' => '1'),
    12       'Taxable' => array('Type' => 'Boolean', 'Caption' => 'Ovlivňující daňový základ', 'Default' => '1'),
    13     ),
    14   ),
    15   'NewInvoice' => array(
    16     'Title' => 'Nová faktura',
    17     'Items' => array(
    18       'Time' => array('Type' => 'Time', 'Caption' => 'Čas', 'Default' => 'Now'),
    19       'Contractor' => array('Type' => 'TFinanceSubject', 'Caption' => 'Dodavatel', 'Default' => 1),
    20       'Customer' => array('Type' => 'TFinanceSubject', 'Caption' => 'Odběratel', 'Default' => 0),
    21       'Items' => array('Type' => 'Array', 'Caption' => 'Položky', 'ItemClass' => 'FinanceInvoiceItem'),
    22     ),
    23   ),
    24   'FinanceInvoiceItem' => array(
    25     'Title' => 'Položka faktury',
    26     'Items' => array(
    27       'Value' => array('Type' => 'Float', 'Caption' => 'Částka [Kč]', 'Default' => '0'),
    28       'Text' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'Položka'),
    29       'Quantity' => array('Type' => 'Integer', 'Caption' => 'Množství', 'Default' => '1'),
    30       'Tax' => array('Type' => 'Integer', 'Caption' => 'Daň [%]', 'Default' => '19'),
    31     ),
    32   ),
    33   'Measure' => array(
    34     'Title' => 'Měření',
    35     'Table' => 'Measure',
    36     'Items' => array(
    37       'Name' => array('Type' => 'String', 'Caption' => 'Zkratka', 'Default' => 'measure'),
    38       'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => 'Měření'),
    39       'Description' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'Měření veličiny'),
    40       'Unit' => array('Type' => 'String', 'Caption' => 'Jednotka', 'Default' => ''),
    41       'Continuity' => array('Type' => 'Boolean', 'Caption' => 'Spojitost', 'Default' => '0'),
    42       'Period' => array('Type' => 'Integer', 'Caption' => 'Perioda měření', 'Default' => '60'),
    43       'PermissionAdd' => array('Type' => 'String', 'Caption' => 'Oprávnění k měření', 'Default' => 'localhost.localdomain'),
    44       'PermissionView' => array('Type' => 'String', 'Caption' => 'Oprávnění k prohlížení', 'Default' => 'all'),
    45       'Enabled' => array('Type' => 'Boolean', 'Caption' => 'Povolení', 'Default' => '1'),
    46       'DataType' => array('Type' => 'String', 'Caption' => 'Typ datových položek', 'Default' => 'int'),
    47       'DataTable' => array('Type' => 'String', 'Caption' => 'Tabulka měřených dat', 'Default' => 'data'),
    48     ),
    49   ),
    504  'UserOptions' => array(
    515    'Title' => 'Základní nastavení',
     
    5711      'Name' => array('Type' => 'String', 'Caption' => 'Zobrazované jméno', 'Default' => ''),
    5812      'Email' => array('Type' => 'String', 'Caption' => 'E-mail', 'Default' => ''),
    59       'PhoneNumber' => array('Type' => 'String', 'Caption' => 'Telefón', 'Default' => ''),
    60       'ICQ' => array('Type' => 'String', 'Caption' => 'ICQ', 'Default' => ''),
     13      //'PhoneNumber' => array('Type' => 'String', 'Caption' => 'Telefón', 'Default' => ''),
     14      //'ICQ' => array('Type' => 'String', 'Caption' => 'ICQ', 'Default' => ''),
    6115    ),
    6216  ),
     
    7125      'Name' => array('Type' => 'String', 'Caption' => 'Zobrazované jméno', 'Default' => ''),
    7226      'Email' => array('Type' => 'String', 'Caption' => 'E-mail', 'Default' => ''),
    73       'PhoneNumber' => array('Type' => 'String', 'Caption' => 'Telefón', 'Default' => ''),
    74       'ICQ' => array('Type' => 'String', 'Caption' => 'ICQ', 'Default' => ''),
    75     ),
    76   ),
    77   'MemberOptions' => array(
    78     'Title' => 'Nastavení domácnosti',
    79     'Table' => '(SELECT Member.Id, Member.InternetTariffNextMonth, Member.FamilyMemberCount, Subject.Name, Subject.AddressStreet, Subject.AddressTown, Subject.AddressPSC, Subject.IC, Subject.DIC FROM Member JOIN Subject ON Subject.Id = Member.Subject)',
    80     'Items' => array(
    81       'Name' => array('Type' => 'String', 'Caption' => 'Fakturační jméno', 'Default' => ''),
    82       'AddressStreet' => array('Type' => 'String', 'Caption' => 'Ulice', 'Default' => 'Zděchov'),
    83       'AddressTown' => array('Type' => 'String', 'Caption' => 'Město', 'Default' => 'Zděchov'),
    84       'AddressPSC' => array('Type' => 'String', 'Caption' => 'PSČ', 'Default' => '75607'),
    85       'IC' => array('Type' => 'String', 'Caption' => 'IČ', 'Default' => ''),
    86       'DIC' => array('Type' => 'String', 'Caption' => 'DIČ', 'Default' => ''),
    87       'FamilyMemberCount' => array('Type' => 'Integer', 'Caption' => 'Počet osob v domácnosti', 'Default' => ''),
    88       'BillingPeriodNext' => array('Type' => 'TFinanceBillingPeriod', 'Caption' => 'Požadované fakturované období', 'Default' => ''),
    89       'InternetTariffNextMonth' => array('Type' => 'TFinanceTariff', 'Caption' => 'Tarif internetu od dalšího období', 'Default' => 2),
    90     ),
    91   ),
    92   'PasswordRecovery' => array(
    93     'Title' => 'Obnova hesla',
    94     'SubmitText' => 'Obnovit',
    95     'Table' => '',
    96     'Items' => array(
    97       'Name' => array('Type' => 'String', 'Caption' => 'Přihlašovací jméno', 'Default' => ''),
    98       'Email' => array('Type' => 'String', 'Caption' => 'E-mail', 'Default' => ''),
     27      //'PhoneNumber' => array('Type' => 'String', 'Caption' => 'Telefón', 'Default' => ''),
     28      //'ICQ' => array('Type' => 'String', 'Caption' => 'ICQ', 'Default' => ''),
    9929    ),
    10030  ),
     
    10838    ),
    10939  ),
    110   'NewNetworkDevice' => array(
    111     'Title' => 'Vložit nové zařízení',
    112     'Table' => 'network_devices',
    113     'Items' => array(
    114       'name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),
    115       'price' => array('Type' => 'Float', 'Caption' => 'Cena', 'Default' => 0),
    116       'count' => array('Type' => 'Integer', 'Caption' => 'Počet', 'Default' => 1),
    117       'date' => array('Type' => 'Time', 'Caption' => 'Datum zakoupení', 'Default' => 'Now'),
    118       'segment' => array('Type' => 'TNetworkSegment', 'Caption' => 'Segment sítě', 'Default' => 0),
    119       'date' => array('Type' => 'Time', 'Caption' => 'Datum zakoupení', 'Default' => 'Now'),
    120       'used' => array('Type' => 'TNetworkDeviceState', 'Caption' => 'Stav', 'Default' => 0),
    121       'consumption' => array('Type' => 'Integer', 'Caption' => 'Spotřeba', 'Default' => 0),
    122       'user' => array('Type' => 'TFinanceSubject', 'Caption' => 'Subjekt', 'Default' => 0),
    123       'info' => array('Type' => 'String', 'Caption' => 'Poznámky', 'Default' => ''),
    124       'shop' => array('Type' => 'String', 'Caption' => 'Obchod', 'Default' => ''),
    125       'device_id' => array('Type' => 'String', 'Caption' => 'Sériové číslo', 'Default' => ''),
    126     ),
    127   ),
    128   'NewNetworkDeviceHistory' => array(
    129     'Title' => 'Vložit záznam historie zařízení',
    130     'Table' => 'NetworkDeviceHistory',
    131     'Items' => array(
    132       'Device' => array('Type' => 'TNetworkDevice', 'Caption' => 'Zařízení', 'Default' => 0),
    133       'Time' => array('Type' => 'Time', 'Caption' => 'Čas', 'Default' => 'Now'),
    134       'Action' => array('Type' => 'TNetworkDeviceAction', 'Caption' => 'Akce', 'Default' => 0),
    135       'Notice' => array('Type' => 'String', 'Caption' => 'Poznámka', 'Default' => ''),
    136     ),
    137   ),
    138   'News' => array(
    139     'Title' => 'Nová aktualita',
    140     'Table' => '',
    141     'SubmitText' => 'Vložit',
    142     'Items' => array(
    143       'Category' => array('Type' => 'TNewsCategory', 'Caption' => 'Kategorie', 'Default' => 0),
    144       'Title' => array('Type' => 'String', 'Caption' => 'Nadpis', 'Default' => ''),
    145       'Content' => array('Type' => 'Text', 'Caption' => 'Obsah', 'Default' => ''),
    146       'Enclosure1' => array('Type' => 'File', 'Caption' => 'Přílohy (Max. velikost souboru 1 MB)', 'Default' => ''),
    147       'Enclosure2' => array('Type' => 'File', 'Caption' => '', 'Default' => ''),
    148       'Enclosure3' => array('Type' => 'File', 'Caption' => '', 'Default' => ''),
    149     ),
    150   ),
    151   'Email' => array(
    152     'Title' => 'Nový email',
    153     'Table' => 'EmailQueue',
    154     'SubmitText' => 'Odeslat',
    155     'Items' => array(
    156       'Address' => array('Type' => 'String', 'Caption' => 'Adresa', 'Default' => ''),
    157       'Subject' => array('Type' => 'String', 'Caption' => 'Předmět', 'Default' => ''),
    158       'Content' => array('Type' => 'Text', 'Caption' => 'Obsah', 'Default' => ''),
    159     ),
    160   ),
    16140  'NewServer' => array(
    16241    'Title' => 'Nový server',
     
    16544    'Items' => array(
    16645      'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => 'WoW server'),
     46      'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),
     47      'Homepage' => array('Type' => 'String', 'Caption' => 'Webové stránky', 'Default' => ''),
     48      'Type' => array('Type' => 'TServerType', 'Caption' => 'Typ', 'Default' => 0),
     49      'Database' => array('Type' => 'TDatabase', 'Caption' => 'Databáze', 'Default' => 0),
     50      'Motd' => array('Type' => 'String', 'Caption' => 'Zpráva dne', 'Default' => 'Vítejte na free WoW serveru'),
    16751    ),
    16852  ),
     
    17357    'Items' => array(
    17458      'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => 'WoW server'),
     59      'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),
     60      'Homepage' => array('Type' => 'String', 'Caption' => 'Webové stránky', 'Default' => ''),
     61      'Type' => array('Type' => 'TServerType', 'Caption' => 'Typ', 'Default' => 0),
     62      'Database' => array('Type' => 'TDatabase', 'Caption' => 'Databáze', 'Default' => 0),
    17563      'Motd' => array('Type' => 'String', 'Caption' => 'Zpráva dne', 'Default' => 'Vítejte na free WoW serveru'),
    17664    ),
     
    17967
    18068$FormTypes = array(
    181   'TNetworkDeviceState' => array(
     69  'TServerType' => array(
    18270     'Type' => 'Enumeration',
    183      'States' => array('Vyřazeno', 'Použito', 'Na skladě'),
     71     'States' => array('Normální', 'PvP', 'RP', 'RPPvP'),
    18472  ),
    185   'TNetworkDeviceAction' => array(
    186      'Type' => 'Enumeration',
    187      'States' => array('Zakoupeno', 'Prodáno', 'Zařazeno do použití', 'Vyřazeno z použití', 'Zasláno do reklamace', 'Přijato z reklamace'),
    188   ),
    189   'TFinanceTariff' => array(
    190      'Type' => 'Enumeration',
    191      'States' => array(6 => 'Zdarma', 0 => 'Pomalejší', 1 => 'Pomalý', 2 => 'Střední', 3 => 'Rychlý', 4 => 'Rychlejší'),
    192   ),
    193   'TFinanceBillingPeriod' => array(
    194      'Type' => 'Enumeration',
    195      'States' => array(2 => 'Měsíčně', 3 => 'Čtvrtletně', 4 => 'Pololetně', 5 => 'Ročně'),
    196   ),
    197   'TFinanceSubject' => array(
     73  'TDatabase' => array(
    19874    'Type' => 'Reference',
    199     'Table' => 'Subject',
     75    'Table' => 'Database',
    20076    'Id' => 'Id',
    201     'Name' => 'Name',
    202     'Filter' => '1',
    203   ),
    204   'TNetworkDevice' => array(
    205     'Type' => 'Reference',
    206     'Table' => 'network_devices',
    207     'Id' => 'id',
    208     'Name' => 'name',
    209     'Filter' => '1',
    210   ),
    211   'TNetworkSegment' => array(
    212     'Type' => 'Reference',
    213     'Table' => 'network_segments',
    214     'Id' => 'id',
    215     'Name' => 'name',
    216     'Filter' => '1',
    217   ),
    218   'TNewsCategory' => array(
    219     'Type' => 'Reference',
    220     'Table' => 'NewsCategory',
    221     'Id' => 'Id',
    222     'Name' => 'Caption',
     77    'Name' => 'CONCAT(Name, " ", Version, " r", Revision)',
    22378    'Filter' => '1',
    22479  ),
  • trunk/www/global.php

    r3 r6  
    1717include('module.php');
    1818include('page.php');
     19include('log.php');
    1920include('forms.php');
    2021include('server.php');
     22include('emulator.php');
    2123include('mangos_configuration_file.php');
    2224
     
    177179$System->Config = $Config;
    178180$System->Database = &$Database;
     181include_once('log.php');
     182$System->AddModule(new Log());
    179183include_once('user.php');
    180184$System->AddModule(new User());
     
    251255
    252256// Zobrazení číselný seznamu stránek
    253 function PagesList($URL,$Page,$TotalCount,$CountPerPage)
    254 {
    255   $Count = ceil($TotalCount/$CountPerPage);
    256   $Around = 10;
     257function PagesList($URL, $Page, $TotalCount, $CountPerPage, $Around = 10)
     258{
     259  $Count = ceil($TotalCount / $CountPerPage);
    257260  $Result = '';
    258   if($Count>1)
    259   {
    260     if($Page>0)
    261     {
    262       $Result.= '<a href="'.$URL.'0">&lt;&lt;</a> ';
    263       $Result.= '<a href="'.$URL.($Page-1).'">&lt;</a> ';
    264     }
    265     $PagesMax = $Count-1;
     261  if($Count > 1)
     262  {
     263    if($Page > 0)
     264    {
     265      $Result .= '<a href="'.$URL.'0">&lt;&lt;</a> ';
     266      $Result .= '<a href="'.$URL.($Page - 1).'">&lt;</a> ';
     267    }
     268    $PagesMax = $Count - 1;
    266269    $PagesMin = 0;
    267     if($PagesMax>($Page+$Around)) $PagesMax = $Page+$Around;
    268     if($PagesMin<($Page-$Around))
     270    if($PagesMax > ($Page + $Around)) $PagesMax = $Page + $Around;
     271    if($PagesMin < ($Page - $Around))
    269272    {
    270273      $Result.= ' .. ';
    271       $PagesMin = $Page-$Around;
    272     }
    273     for($i=$PagesMin;$i<=$PagesMax;$i++)
    274     {
    275       if($i==$Page) $Result.= '<strong>';
    276       $Result.= '<a href="'.$URL.$i.'">'.($i+1).'</a> ';
    277       if($i==$Page) $Result.= '</strong>';
    278     } 
    279     if($PagesMax<($Count-1)) $Result .= ' .. ';
    280     if($Page<($Count-1))
    281     {
    282       $Result.= '<a href="'.$URL.($Page+1).'">&gt;</a> ';
    283       $Result.= '<a href="'.$URL.($Count-1).'">&gt;&gt;</a>';
     274      $PagesMin = $Page - $Around;
     275    }
     276    for($i = $PagesMin; $i <= $PagesMax; $i++)
     277    {
     278      if($i == $Page) $Result .= '<strong>';
     279      $Result .= '<a href="'.$URL.$i.'">'.($i + 1).'</a> ';
     280      if($i == $Page) $Result .= '</strong>';
     281    }
     282    if($PagesMax < ($Count - 1)) $Result .= ' .. ';
     283    if($Page < ($Count - 1))
     284    {
     285      $Result .= '<a href="'.$URL.($Page + 1).'">&gt;</a> ';
     286      $Result .= '<a href="'.$URL.($Count - 1).'">&gt;&gt;</a>';
    284287    }
    285288  }
    286289  return($Result);
    287 } 
     290}
    288291
    289292function GetRemoteAddress()
  • trunk/www/index.php

    r5 r6  
    1010  function ShowServerList()
    1111  {
     12    $OnlineState = array(false => 'Neaktivní', true => 'Aktivní');
    1213    $Output = '<h4>Seznam serverů</h4>';
    13     $Output .= '<table class="WideTable"><tr><th>Název</th><th>Uživatel</th><th>Realmd</th><th>Verze hry</th></tr>';
    14     $DbResult = $this->Database->query('SELECT `ClientVersion`.`Version`, `Server`.`Name`, `Server`.`NetworkPortRealmd`, `User`.`Name` AS `UserName` FROM `Server` JOIN `User` ON `User`.`Id` = `Server`.`User` JOIN `Database` ON `Database`.`Id` = `Server`.`Database` JOIN `Emulator` ON `Emulator`.`Id` = `Database`.`Emulator` JOIN `ClientVersion` ON `ClientVersion`.`Id` = `Emulator`.`ClientVersion`');
    15     while($Server = $DbResult->fetch_assoc())
     14    $Output .= '<table class="WideTable"><tr><th>Název</th><th>Uživatel</th><th>Realmd</th><th>Verze hry</th><th>Stav</th><th>Hráčů online</th><th>Účtů</th><th>Postav</th></tr>';
     15    $DbResult = $this->Database->query('SELECT `ClientVersion`.`Version`, `Server`.`Name`, `Server`.`Id`, `Server`.`NetworkPortRealmd`, `User`.`Name` AS `UserName` FROM `Server` JOIN `User` ON `User`.`Id` = `Server`.`User` JOIN `Database` ON `Database`.`Id` = `Server`.`Database` JOIN `Emulator` ON `Emulator`.`Id` = `Database`.`Emulator` JOIN `ClientVersion` ON `ClientVersion`.`Id` = `Emulator`.`ClientVersion`');
     16    while($DbRow = $DbResult->fetch_assoc())
    1617    {
    17       $Output .= '<tr><td>'.$Server['Name'].'</td><td>'.$Server['UserName'].'</td><td>'.$this->System->Config['Web']['Host'].':'.$Server['NetworkPortRealmd'].'</td><td>'.$Server['Version'].'</td></tr>';
     18      $Server = new Server($this->Database, $DbRow['Id']);
     19      $ServerState = $Server->GetState();
     20      $Output .= '<tr><td><a href="?Action=ServerShow&amp;Id='.$DbRow['Id'].'">'.$DbRow['Name'].'</a></td><td>'.$DbRow['UserName'].'</td><td>'.$this->System->Config['Web']['Host'].':'.$DbRow['NetworkPortRealmd'].'</td><td>'.$DbRow['Version'].'</td><td>'.$OnlineState[$ServerState['Online']].'</td><td>'.$ServerState['OnlinePlayerCount'].'</td><td>'.$ServerState['AccountCount'].'</td><td>'.$ServerState['CharacterCount'].'</td></tr>';
    1821    }
    1922    $Output .= '</table>';
     23    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER) $Output .= '<br /><div style="text-align: center;"><a href="?Action=ServerAdd">Vytvořit nový server</a></dev>';     
    2024    return($Output);
    2125  }
     
    2731    $Output .= '<table class="WideTable"><tr><th>Položka</th><th>Hodnota</th></tr>';
    2832    $Output .= '<tr><td>Jméno</td><td>'.$Server->Server['Name'].'</td></tr>'.
     33      '<tr><td>Webové stránky</td><td><a href="'.$Server->Server['Homepage'].'">'.$Server->Server['Homepage'].'</a></td></tr>'.
     34      '<tr><td>Popis</td><td>'.$Server->Server['Description'].'</td></tr>'.
    2935      '<tr><td>Zpráva dne</td><td>'.$Server->Server['Motd'].'</td></tr>'.
    3036      '<tr><td>Síťový port realmd</td><td>'.($Server->RealmdBaseNetworkPort + $Server->Id).'</td></tr>'.
    31       '<tr><td>Síťový port mangosd</td><td>'.($Server->WorlddBaseNetworkPort + $Server->Id).'</td></tr>'.
    32       '<tr><td>Emulátor</td><td>'.$Server->Server['Database']['Emulator']['Name'].'</td></tr>'.
    33       '<tr><td>Databáze</td><td>'.$Server->Server['Database']['Name'].'</td></tr>';
    34     $Output .= '</table>';
    35     $Output .= '<br /><a href="'.$this->System->Config['Web']['Host'].'/mysql/">Správa databáze</a> ';
    36     $ServerStatus = $Server->GetState();
    37     if($ServerStatus['RealmdPortState'] == true) $Output .= ' <a href="?Action=ServerStop">Zastavit server</a>  <a href="?Action=ServerRestart">RestartovatServer</a>';
    38       else $Output .= ' <a href="?Action=ServerStart">Spustit server</a>';
    39    
     37      '<tr><td>Síťový port mangosd</td><td>'.($Server->WorlddBaseNetworkPort + $Server->Id).'</td></tr>';
     38    $Output .= '</table><div style="text-align: center">';
     39    if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     40    {
     41      $Output .= '<br /><a href="'.$this->System->Config['Web']['Host'].'/mysql/">Správa databáze</a> ';
     42      if(array_key_exists('Id', $Server->Server['Database']))
     43      {
     44        $ServerStatus = $Server->GetState();
     45        if($ServerStatus['RealmdPortState'] == true) $Output .= ' <a href="?Action=ServerStop">Zastavit server</a>  <a href="?Action=ServerRestart">RestartovatServer</a>';
     46          else $Output .= ' <a href="?Action=ServerStart">Spustit server</a>';
     47      }
     48      $Output .= ' <a href="?Action=ServerEdit">Upravit server</a>';
     49      $Output .= ' <a href="?Action=ServerDatabaseImport">Načtení čisté databáze</a>';
     50    }
     51    $Output .= '</div>';
    4052    return($Output);
    4153  }
     
    127139        $Form = new Form('UserRegister', array());
    128140        $Form->LoadValuesFromForm();
    129         $Result = $this->System->Modules['User']->Register($Form->Values['Login'], $Form->Values['Password'], $Form->Values['Password2'], $Form->Values['Email'], $Form->Values['Name'], $Form->Values['PhoneNumber'], $Form->Values['ICQ']);
     141        $Result = $this->System->Modules['User']->Register($Form->Values['Login'], $Form->Values['Password'], $Form->Values['Password2'], $Form->Values['Email'], $Form->Values['Name']);
    130142        $Output .= $this->SystemMessage('Registrace nového účtu', $Result);
    131143        if($Result <> USER_REGISTRATED)
     
    173185      if($_GET['Action'] == 'ServerAdd')
    174186      {
    175         $Form = new Form('NewServer');
    176         $Form->LoadValuesFromForm();
    177         $Form->OnSubmit = '?Action=ServerCreate';
    178         $Output .= $Form->ShowEditForm();
     187        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     188        {
     189          $DbResult = $this->Database->query('SELECT COUNT(*) FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     190          $DbRow = $DbResult->fetch_row();
     191          if($DbRow[0] > 0) $Output .= $this->SystemMessage('Nový server', 'Lze vytvořit pouze jeden server pro každý uživatelský účet.');
     192          else
     193          {
     194            $Form = new Form('NewServer');
     195            $Form->LoadValuesFromForm();
     196            $Form->OnSubmit = '?Action=ServerCreate';
     197            $Output .= 'Tento formulář vám umožní si vytvořit nový server. Pečlivě vyplňte požadované údaje.';
     198            $Output .= $Form->ShowEditForm();
     199          }
     200        } else $Output .= USER_BAD_ROLE;
    179201      } else
    180202      if($_GET['Action'] == 'ServerCreate')
    181203      {
    182         $UserOptions = new Form('NewServer', array());
    183         $UserOptions->LoadValuesFromForm();
    184         $Output .= $this->SystemMessage('Nový server', 'Server vytvořen.');
    185         //$UserOptions->LoadValuesFromDatabase($this->System->Modules['User']->User['Id']);
    186         $UserOptions->OnSubmit = '?Action=ServerCreate';
    187         $Output .= $UserOptions->ShowEditForm();
     204        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     205        {
     206          $DbResult = $this->Database->query('SELECT COUNT(*) FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     207          $DbRow = $DbResult->fetch_row();
     208          if($DbRow[0] > 0) $Output .= $this->SystemMessage('Nový server', 'Lze vytvořit pouze jeden server pro každý uživatelský účet.');
     209          else
     210          {
     211            $Form = new Form('NewServer', array());
     212            $Form->LoadValuesFromForm();
     213            $this->Database->insert('Server', array('Name' => $Form->Values['Name'], 'Description' => $Form->Values['Description'], 'User' => $this->System->Modules['User']->User['Id'], 'Motd' => $Form->Values['Motd'], 'Homepage' => $Form->Values['Homepage'], 'Type' => $Form->Values['Type'], 'Database' => 1));
     214            $LastInsertId = $this->Database->insert_id;
     215            $Server = new Server($this->Database, $LastInsertId);
     216            $Server->CreateDatabase();
     217            $Output .= $this->SystemMessage('Nový server', 'Server vytvořen.');
     218            //$UserOptions->LoadValuesFromDatabase($this->System->Modules['User']->User['Id']);
     219            //$Form->OnSubmit = '?Action=ServerCreate';
     220            //$Output .= $Form->ShowEditForm();
     221          }
     222        } else $Output .= USER_BAD_ROLE;
    188223      } else
    189224      if($_GET['Action'] == 'ServerShow')
    190225      {
    191         $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
    192         $Server = $DbResult->fetch_assoc();
    193         $Output .= $this->ShowServer($Server['Id']);
     226        if(array_key_exists('Id', $_GET)) $Output .= $this->ShowServer($_GET['Id']);
     227          else
     228          {
     229            $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     230            $Server = $DbResult->fetch_assoc();
     231            $Output .= $this->ShowServer($Server['Id']);
     232          }
    194233      } else
    195234      if($_GET['Action'] == 'ServerEdit')
    196235      {
    197         $Form = new Form('EditServer');
    198         $Form->LoadValuesFromForm();
    199         $Form->OnSubmit = '?Action=ServerSave';
    200         $Output .= $Form->ShowEditForm();
     236        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     237        {
     238          $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     239          $Server = $DbResult->fetch_assoc();
     240          $Form = new Form('EditServer');
     241          $Form->LoadValuesFromDatabase($Server['Id']);
     242          $Form->OnSubmit = '?Action=ServerSave';
     243          $Output .= $Form->ShowEditForm();
     244        } else $Output .= USER_BAD_ROLE;
    201245      } else
    202246      if($_GET['Action'] == 'ServerSave')
    203247      {
    204         $UserOptions = new Form('EditServer', array());
    205         $UserOptions->LoadValuesFromForm();
    206         $Output .= $this->SystemMessage('Upravit server', 'Nastavení serveru uloženo.');
    207         $UserOptions->LoadValuesFromDatabase($this->System->Modules['User']->User['Id']);
    208         $UserOptions->OnSubmit = '?Action=ServerSave';
     248        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     249        {
     250          $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     251          $Server = $DbResult->fetch_assoc();
     252          $UserOptions = new Form('EditServer', array());
     253          $UserOptions->LoadValuesFromForm();
     254          $Output .= $this->SystemMessage('Upravit server', 'Nastavení serveru uloženo.');
     255          $UserOptions->SaveValuesToDatabase($Server['Id']);
     256          $UserOptions->OnSubmit = '?Action=ServerSave';
    209257       
    210         $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
    211         $Server = $DbResult->fetch_assoc();
    212         $Server = new Server($this->Database, $Server['Id']);
    213         $Server->SetupConfigurationFiles();
    214 
    215         $Output .= $UserOptions->ShowEditForm();
     258          $Server = new Server($this->Database, $Server['Id']);
     259          $Server->SaveConfiguration();
     260
     261          $Output .= $UserOptions->ShowEditForm();
     262        } else $Output .= USER_BAD_ROLE;
    216263      } else
    217264      if($_GET['Action'] == 'ServerStart')
    218265      {
    219         $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
    220         $Server = $DbResult->fetch_assoc();
    221         $Server = new Server($this->Database, $Server['Id']);
    222         $Output .= $this->SystemMessage('Spuštění serveru', $Server->Start());
     266        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     267        {
     268          $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     269          $Server = $DbResult->fetch_assoc();
     270          $Server = new Server($this->Database, $Server['Id']);
     271          $Output .= $this->SystemMessage('Spuštění serveru', $Server->Start());
     272        } else $Output .= USER_BAD_ROLE;
    223273      } else
    224274      if($_GET['Action'] == 'ServerStop')
    225275      {
    226         $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
    227         $Server = $DbResult->fetch_assoc();
    228         $Server = new Server($this->Database, $Server['Id']);
    229         $Output .= $this->SystemMessage('Zastavení serveru', $Server->Stop());
     276        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     277        {
     278          $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     279          $Server = $DbResult->fetch_assoc();
     280          $Server = new Server($this->Database, $Server['Id']);
     281          $Output .= $this->SystemMessage('Zastavení serveru', $Server->Stop());
     282        } else $Output .= USER_BAD_ROLE;
     283      } else
     284      if($_GET['Action'] == 'ServerDatabaseImport')
     285      {
     286        if($this->System->Modules['User']->User['Role'] >= USER_ROLE_USER)
     287        {
     288          $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     289          $Server = $DbResult->fetch_assoc();
     290          $Server = new Server($this->Database, $Server['Id']);
     291          $Server->ImportDatabase(true);
     292          $Output .= $this->SystemMessage('Import čisté databáze', 'Úloha zařazena do fronty');
     293        } else $Output .= USER_BAD_ROLE;
    230294      } else
    231295      if($_GET['Action'] == 'Test')
    232296      {
     297        $Emulator = new Emulator($this->Database, 2);
     298        $Emulator->Compile();
    233299        //$Server = new Server($this->Database, 1);
    234300        //$Output .= $Server->ImportDatabase();
    235         $Config = new MangosConfigurationFile($this->Database);
    236         $Config->Load('../emu/mangos/7681/etc/mangosd.conf');
    237         $Config->Save('../server/1/etc/mangosd.conf');
     301        //$Config = new MangosConfigurationFile($this->Database);
     302        //$Config->Load('../emu/mangos/7681/etc/mangosd.conf');
     303        //$Config->Save('../server/1/etc/mangosd.conf');
    238304      } else
    239305      {
    240306        $Output = $this->ShowServerList();
    241         $Output .= '<br /><a href="?Action=ServerAdd">Nový server</a>';     
    242307      }
    243308    } else
    244309    {
    245310      $Output = $this->ShowServerList();
    246       $Output .= '<br /><a href="?Action=ServerAdd">Nový server</a>';     
    247311    }
    248312    return($Output);
  • trunk/www/page.php

    r3 r6  
    2525    '<title>'.$this->System->Config['Web']['Title'].' - '.$Path.'</title>
    2626    </head><body'.$BodyParam.'>'.
    27     '<div class="Navigation"><div class="MenuItem2">';
     27    '<div class="Navigation"><span class="MenuItem"><a href="?">Seznam serverů</a>';
     28    if($this->System->Modules['User']->User['Id'] != $this->System->Modules['User']->AnonymousUserId)
     29    {
     30      $DbResult = $this->Database->query('SELECT COUNT(*) FROM Server WHERE User='.$this->System->Modules['User']->User['Id']);
     31      $DbRow = $DbResult->fetch_row();
     32      if($DbRow[0] > 0) $Output .= '<a href="?Action=ServerShow">Vlastní server</a>';
     33      else $Output .= '<a href="?Action=ServerAdd">Vytvořit vlastní server</a>';
     34    }
     35    $Output .= '</span><div class="MenuItem2">';
    2836    if($this->System->Modules['User']->User['Id'] == $this->System->Modules['User']->AnonymousUserId)
    2937      $Output .= '<a href="'.$this->System->Config['Web']['RootFolder'].'/?Action=LoginForm">Přihlášení</a> <a href="'.$this->System->Config['Web']['RootFolder'].'/?Action=UserRegister">Registrace</a>';
  • trunk/www/process_tasks.php

    r5 r6  
    55chdir('..');
    66
     7$Script = '/tmp/wowhosting_script.sh';
    78$DbResult = $Database->query('SELECT * FROM Task WHERE Executed = 0 ORDER BY Time ASC');
    89while($Task = $DbResult->fetch_assoc())
    910{
    1011  echo('Provádím '.$Task['Title']."...\n");
    11   foreach(explode("\n", $Task['CommandList']) as $Command)
    12   {
    13     $Output = array();
    14     echo($Command."\n");
    15     exec($Command, $Output);
    16     echo(implode("\n", $Output));
    17   }
    18   $Database->query('UPDATE Task SET Executed=1 WHERE Id='.$Task['Id']);
     12  $Task['CommandList'] = "#!/bin/sh\n".$Task['CommandList'];
     13  file_put_contents($Script, $Task['CommandList']);
     14  chmod($Script, 0755);
     15  passthru($Script, $Output);
     16  //exec($Script, $Output);
     17  $Output = ''; //implode("\n", $Output);
     18  //echo($Output);
     19  $Database->query('UPDATE Task SET Executed=1, Output="'.addslashes($Output).'" WHERE Id='.$Task['Id']);
    1920}
    2021
  • trunk/www/server.php

    r5 r6  
    11<?php
    22
     3function ErrorHandler()
     4{
     5}
     6 
    37class Server extends Module
    48{
     
    1519    $this->Server = $DbResult->fetch_assoc();
    1620    $DbResult = $this->Database->query('SELECT * FROM `Database` WHERE `Id`='.$this->Server['Database']);
    17     $this->Server['Database'] = $DbResult->fetch_assoc();
     21    if($DbResult->num_rows > 0) $this->Server['Database'] = $DbResult->fetch_assoc();
     22      else $this->Server['Database'] = array('Emulator' => 0);
    1823    $DbResult = $this->Database->query('SELECT * FROM `Emulator` WHERE `Id`='.$this->Server['Database']['Emulator']);
    19     $this->Server['Database']['Emulator'] = $DbResult->fetch_assoc();
     24    if($DbResult->num_rows > 0) $this->Server['Database']['Emulator'] = $DbResult->fetch_assoc();
     25      else $this->Server['Database']['Emulator'] = array('ClientVersion' => 0);
    2026    $DbResult = $this->Database->query('SELECT * FROM `ClientVersion` WHERE `Id`='.$this->Server['Database']['Emulator']['ClientVersion']);
    21     $this->Server['Database']['Emulator']['ClientVersion'] = $DbResult->fetch_assoc();
     27    if($DbResult->num_rows > 0) $this->Server['Database']['Emulator']['ClientVersion'] = $DbResult->fetch_assoc();
     28      else $this->Server['Database']['Emulator']['ClientVersion'] = array();
    2229  }
    2330 
     
    2734  }
    2835 
    29   function ImportDatabase()
     36  function CreateDatabase()
    3037  {
    31     $DbResult = $this->Database->query('SELECT * FROM `Database` WHERE `Id`='.$this->Server['Database']);
    32     $Database = $DbResult->fetch_assoc();
    33     $DbResult = $this->Database->query('SELECT `Revision` FROM `Emulator` WHERE `Id`='.$Database['Emulator']);
    34     $Emulator = $DbResult->fetch_assoc();
    35     $this->AddTask('Inicializace databáze', array(
    36       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_mangos < emu/mangos/'.$Emulator['Revision'].'/udb/'.$Database['SourceFileName'],
    37       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_scriptdev2 < emu/mangos/'.$Emulator['Revision'].'/source/src/bindings/ScriptDev2/sql/scriptdev2_create_structure.sql',
    38       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_scriptdev2 < emu/mangos/'.$Emulator['Revision'].'/source/src/bindings/ScriptDev2/sql/scriptdev2_script_full.sql',
    39       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_mangos < emu/mangos/'.$Emulator['Revision'].'/source/src/bindings/ScriptDev2/sql/mangos_scriptname_full.sql',
    40       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_realmd < emu/mangos/'.$Emulator['Revision'].'/mangos/sql/realmd.sql',
    41       'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_characters < emu/mangos/'.$Emulator['Revision'].'/mangos/sql/characters.sql'));
     38    $this->Database->query('CREATE DATABASE `server'.$this->Id.'_realmd`');
     39    $this->Database->query('CREATE DATABASE `server'.$this->Id.'_mangos`');
     40    $this->Database->query('CREATE DATABASE `server'.$this->Id.'_characters`');
     41    $this->Database->query('CREATE DATABASE `server'.$this->Id.'_scriptdev2`');
     42    $this->Database->query('CREATE USER "server'.$this->Id.'"@"localhost" IDENTIFIED BY "server'.$this->Id.'"');
     43    $this->Database->query('GRANT ALL PRIVILEGES ON `server'.$this->Id.'\_realmd` . * TO "server'.$this->Id.'"@"localhost" WITH GRANT OPTION');
     44    $this->Database->query('GRANT ALL PRIVILEGES ON `server'.$this->Id.'\_mangos` . * TO "server'.$this->Id.'"@"localhost" WITH GRANT OPTION');
     45    $this->Database->query('GRANT ALL PRIVILEGES ON `server'.$this->Id.'\_characters` . * TO "server'.$this->Id.'"@"localhost" WITH GRANT OPTION');
     46    $this->Database->query('GRANT ALL PRIVILEGES ON `server'.$this->Id.'\_scriptdev2` . * TO "server'.$this->Id.'"@"localhost" WITH GRANT OPTION');
     47  }
     48 
     49  function DeleteDatabase()
     50  {
     51    $this->Database->query('DROP DATABASE `server'.$this->Id.'_realmd`');
     52    $this->Database->query('DROP DATABASE `server'.$this->Id.'_mangos`');
     53    $this->Database->query('DROP DATABASE `server'.$this->Id.'_characters`');
     54    $this->Database->query('DROP DATABASE `server'.$this->Id.'_scriptdev2`');
     55    $this->Database->query('DROP USER "server'.$this->Id.'"@"localhost"');
     56  }
     57 
     58  function ImportDatabase($Delete = false)
     59  {
     60    $CommandList = array(
     61      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_mangos < database/'.$this->Server['Database']['Id'].'/'.$this->Server['Database']['SourceFileName'],
     62      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_scriptdev2 < emulator/'.$this->Server['Database']['Emulator']['Id'].'/source/src/bindings/ScriptDev2/sql/scriptdev2_create_structure.sql',
     63      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_scriptdev2 < emulator/'.$this->Server['Database']['Emulator']['Id'].'/source/src/bindings/ScriptDev2/sql/scriptdev2_script_full.sql',
     64      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_mangos < emulator/'.$this->Server['Database']['Emulator']['Id'].'/source/src/bindings/ScriptDev2/sql/mangos_scriptname_full.sql',
     65      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_realmd < emulator/'.$this->Server['Database']['Emulator']['Id'].'/mangos/sql/realmd.sql',
     66      'mysql --user=server'.$this->Id.' --password=server'.$this->Id.' server'.$this->Id.'_characters < emulator/'.$this->Server['Database']['Emulator']['Id'].'/mangos/sql/characters.sql',
     67    );
     68    if($Delete = true)
     69    {
     70      array_unshift($CommandList, 'mysql --silent --skip-column-names -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_mangos -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_mangos');
     71      array_unshift($CommandList, 'mysql --silent --skip-column-names -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_characters -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_characters');
     72      array_unshift($CommandList, 'mysql --silent --skip-column-names -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_realmd -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_realmd');
     73      array_unshift($CommandList, 'mysql --silent --skip-column-names -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_scriptdev2 -e "show tables" | gawk \'{print "drop table " $1 ";"}\' | mysql -u server'.$this->Id.' -pserver'.$this->Id.' server'.$this->Id.'_scriptdev2');
     74    }
     75    $this->AddTask('Inicializace databáze', $CommandList);
    4276  }
    4377 
     
    5084  {
    5185    $this->AddTask('Start emulátoru', array(
    52       'screen -A -m -d -S server'.$this->Id.'-realmd "emu/mangos/'.$this->Server['Database']['Emulator']['Revision'].'/bin/mangos-realmd -c server/'.$this->Id.'/etc/realmd.conf"',
    53       'screen -A -m -d -S server'.$this->Id.'-worldd emu/mangos/'.$this->Server['Database']['Emulator']['Revision'].'/bin/mangos-worldd -c server/'.$this->Id.'/etc/mangosd.conf',
     86      'screen -A -m -d -S server'.$this->Id.'-realmd "emulator/'.$this->Server['Database']['Emulator']['Id'].'/bin/mangos-realmd -c server/'.$this->Id.'/etc/realmd.conf"',
     87      'screen -A -m -d -S server'.$this->Id.'-worldd emulator/'.$this->Server['Database']['Emulator']['Id'].'/bin/mangos-worldd -c server/'.$this->Id.'/etc/mangosd.conf',
    5488    ));
    5589    return('Požadavek na start serveru zařazen.');
     
    67101  function NetworkPortState($Address, $Port, $Timeout = 1)
    68102  {
     103    set_error_handler('ErrorHandler');
    69104    if($Socket = @fsockopen($Address, $Port, $ERROR_NO, $ERROR_STR, (float)$Timeout))
    70105    {
    71106      fclose($Socket);
    72       return(true);
    73     } else return(false);
     107      $Result = true;
     108    } else $Result = false;
     109    restore_error_handler();
     110    return($Result);
    74111  }
    75112 
     
    79116    $State['RealmdPortState'] = $this->NetworkPortState('localhost', $this->RealmdBaseNetworkPort + $this->Server['Id']);
    80117    $State['WorlddPortState'] = $this->NetworkPortState('localhost', $this->WorlddBaseNetworkPort + $this->Server['Id']);
     118    $State['Online'] = $State['RealmdPortState'] and $State['WorlddPortState'];
     119    $DbResult = $this->Database->query('SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = "server'.$this->Id.'_characters"');
     120    $DbRow = $DbResult->fetch_row();
     121    if($DbRow[0] > 0)
     122    {
     123      $DbResult = $this->Database->query('SELECT COUNT(*) FROM server'.$this->Id.'_characters.characters AS T WHERE T.online = 1');
     124      $DbRow = $DbResult->fetch_row();
     125      $State['OnlinePlayerCount'] = $DbRow[0];
     126      $DbResult = $this->Database->query('SELECT COUNT(*) FROM server'.$this->Id.'_characters.characters AS T');
     127      $DbRow = $DbResult->fetch_row();
     128      $State['CharacterCount'] = $DbRow[0];
     129      $DbResult = $this->Database->query('SELECT COUNT(*) FROM server'.$this->Id.'_realmd.account AS T');
     130      $DbRow = $DbResult->fetch_row();
     131      $State['AccountCount'] = $DbRow[0];
     132    } else
     133    {
     134      $State['OnlinePlayerCount'] = 0;
     135      $State['CharacterCount'] = 0;
     136      $State['AccountCount'] = 0;
     137    }
    81138    return($State);
     139  }
     140 
     141  function UpdateRealmlist()
     142  {
     143    global $Config;
     144   
     145    $this->Database->query('UPDATE server'.$this->Id.'_realmd.realmlist SET name="'.addslashes($this->Server['Name']).'", address="'.$Config['Web']['Host'].'", port='.($this->WorlddBaseNetworkPort + $this->Id));
     146  }
     147 
     148  function SaveConfiguration()
     149  {
     150    $this->SetupConfigurationFiles();
     151    $this->UpdateRealmlist();
    82152  }
    83153 
    84154  function SetupConfigurationFiles()
    85155  {
     156    $EmulatorEtcDir = '../emulator/'.$this->Server['Database']['Emulator']['Id'].'/etc/';
     157    $ServerEtcDir = '../server/'.$this->Id.'/etc/';
     158    $ServerLogDir = '../server/'.$this->Id.'/log/';
     159    if(!file_exists($ServerEtcDir)) mkdir($ServerEtcDir, 0777, true);   
     160    if(!file_exists($ServerLogDir)) mkdir($ServerLogDir, 0777, true);   
     161   
    86162    // mangosd.conf
    87163    $Config = new MangosConfigurationFile($this->Database);
    88     $Config->Load('../emu/mangos/'.$this->Server['Database']['Emulator']['Revision'].'/etc/mangosd.conf');
     164    $Config->Load($EmulatorEtcDir.'mangosd.conf');
    89165    $Config->ParameterList['LoginDatabaseInfo'] = 'localhost;3306;server'.$this->Id.';server'.$this->Id.';server'.$this->Id.'_realmd';
    90166    $Config->ParameterList['WorldDatabaseInfo'] = 'localhost;3306;server'.$this->Id.';server'.$this->Id.';server'.$this->Id.'_mangos';
     
    94170    $Config->ParameterList['Motd'] = $this->Server['Motd'];
    95171    $Config->ParameterList['DataDir'] = 'wowclient/'.$this->Server['Database']['Emulator']['ClientVersion']['Version'];
    96     $Config->Save('../server/'.$this->Id.'/etc/mangosd.conf');
     172    $Config->ParameterList['LogsDir'] = 'server/'.$this->Id.'/log';
     173    $ServerTypes = array(0 => 0, 1 => 1, 2 => 6, 3 => 8);
     174    $Config->ParameterList['GameType'] = $ServerTypes[$this->Server['Type']];
     175    $Config->Save($ServerEtcDir.'mangosd.conf');
    97176   
    98177    // realmd.conf
    99178    $Config = new MangosConfigurationFile($this->Database);
    100     $Config->Load('../emu/mangos/'.$this->Server['Database']['Emulator']['Revision'].'/etc/realmd.conf');
     179    $Config->Load($EmulatorEtcDir.'realmd.conf');
    101180    $Config->ParameterList['LoginDatabaseInfo'] = 'localhost;3306;server'.$this->Id.';server'.$this->Id.';server'.$this->Id.'_realmd';
    102181    $Config->ParameterList['RealmServerPort'] = $this->RealmdBaseNetworkPort + $this->Id;
    103     $Config->Save('../server/'.$this->Id.'/etc/realmd.conf');
     182    $Config->ParameterList['LogsDir'] = 'server/'.$this->Id.'/log';
     183    $Config->Save($ServerEtcDir.'realmd.conf');
    104184   
    105185    // scriptdev2.conf
    106186    $Config = new MangosConfigurationFile($this->Database);
    107     $Config->Load('../emu/mangos/'.$this->Server['Database']['Emulator']['Revision'].'/etc/scriptdev2.conf');
     187    $Config->Load($EmulatorEtcDir.'scriptdev2.conf');
    108188    $Config->ParameterList['ScriptDev2DatabaseInfo'] = 'localhost;3306;server'.$this->Id.';server'.$this->Id.';server'.$this->Id.'_scriptdev2';
    109     $Config->Save('../server/'.$this->Id.'/etc/scriptdev2.conf'); 
     189    $Config->Save($ServerEtcDir.'scriptdev2.conf'); 
    110190  }
    111191}
  • trunk/www/style.css

    r3 r6  
    310310  margin-left: auto;
    311311  margin-right: auto; 
     312  border-collapse: collapse;
    312313}
    313314
  • trunk/www/user.php

    r4 r6  
    2121define('USER_PASSWORD_RECOVERY_CONFIRMED', 'Nové heslo bylo aktivováno.');
    2222
     23define('USER_BAD_ROLE', 'Nemáte dostatečná oprávnění');
     24
    2325define('USER_EVENT_REGISTER', 1);
    2426define('USER_EVENT_LOGIN', 2);
    2527define('USER_EVENT_LOGOUT', 3);
    2628define('USER_EVENT_OPTIONS_CHANGED', 4);
     29
     30define('USER_ROLE_ANONYMOUS', 1);
     31define('USER_ROLE_USER', 2);
     32define('USER_ROLE_ADMINISTRATOR', 3);
    2733
    2834class User extends Module
     
    7581  }
    7682
    77   function Register($Login, $Password, $Password2, $Email, $Name, $PhoneNumber, $ICQ)
     83  function Register($Login, $Password, $Password2, $Email, $Name)
    7884  {
    7985    global $Options, $Config;
     
    96102          else
    97103          {
    98             $this->Database->insert('User', array('Name' => $Name, 'Login' => $Login, 'Password' => sha1($Password), 'Email' => $Email, 'RegistrationTime' => 'NOW()', 'Locked' => 1, 'PhoneNumber' => $PhoneNumber, 'ICQ' => $ICQ));
    99             $UserId = $this->Database->insert_id;
    100                         $this->Database->insert('PermissionUserAssignment', array('User' => $UserId, 'GroupOrOperation' => 2, 'Type' => 'Group'));
    101          
     104            $this->Database->insert('User', array('Name' => $Name, 'Login' => $Login, 'Password' => sha1($Password), 'Email' => $Email, 'RegistrationTime' => 'NOW()', 'Locked' => 1, 'Role' => 2));
     105           
    102106            $Subject = FromUTF8('Registrace nového účtu', 'iso2');
    103107            $Message = 'Provedli jste registraci nového účtu na serveru <a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder']."</a>.<br>\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br><br>\n\nVáš účet je: ".$Login."\n<br>Pro dokončení registrace klikněte na tento odkaz: ".'<a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.sha1($Password).'">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.sha1($Password).'</a>.'."\n<br> \n\n<br><br>Na tento email neodpovídejte.";
     
    144148        // načtení stavu stromu
    145149        $Result = USER_LOGGED_IN;
    146         //$this->System->Modules['Log']->NewRecord('User', 'Login', 'Login='.$Login.',Host='.gethostbyaddr(GetRemoteAddress()));
     150        $this->System->Modules['Log']->NewRecord('User', 'Login', 'Login='.$Login.',Host='.gethostbyaddr(GetRemoteAddress()));
    147151      }
    148152    } else $Result = USER_NOT_REGISTRED;
Note: See TracChangeset for help on using the changeset viewer.