Changeset 816 for trunk/includes


Ignore:
Timestamp:
Feb 22, 2015, 11:20:50 PM (10 years ago)
Author:
chronos
Message:
  • Modified: Tabs converted to spaces.
  • Modified: Remove spaces from end of lines.
  • Added: Code format script.
Location:
trunk/includes
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/Application.php

    r815 r816  
    33class Application
    44{
    5         var $Name;
    6         var $System;
     5  var $Name;
     6  var $System;
    77
    8         function Run()
    9         {
     8  function Run()
     9  {
    1010
    11         }
     11  }
    1212}
  • trunk/includes/Database.php

    r800 r816  
    4040  function __construct()
    4141  {
    42         $this->Functions = array('NOW()', 'CURDATE()', 'CURTIME()', 'UUID()');
    43         $this->Type = 'mysql'; // mysql, pgsql
    44         $this->ShowSQLError = false;
    45         $this->ShowSQLQuery = false;
    46         $this->LogSQLQuery = false;
    47         $this->LogFile = dirname(__FILE__).'/../Query.log';
     42    $this->Functions = array('NOW()', 'CURDATE()', 'CURTIME()', 'UUID()');
     43    $this->Type = 'mysql'; // mysql, pgsql
     44    $this->ShowSQLError = false;
     45    $this->ShowSQLQuery = false;
     46    $this->LogSQLQuery = false;
     47    $this->LogFile = dirname(__FILE__).'/../Query.log';
    4848  }
    4949
     
    6363  function query($Query)
    6464  {
    65         if(($this->ShowSQLQuery == true) or ($this->LogSQLQuery == true)) $QueryStartTime = microtime();
     65    if(($this->ShowSQLQuery == true) or ($this->LogSQLQuery == true)) $QueryStartTime = microtime();
    6666    $this->LastQuery = $Query;
    6767    $Result = new DatabaseResult();
     
    167167  function quote($Text)
    168168  {
    169         return($this->PDO->quote($Text));
     169    return($this->PDO->quote($Text));
    170170  }
    171171
  • trunk/includes/Locale.php

    r815 r816  
    33class LocaleText
    44{
    5         var $Data;
    6         var $Code;
    7         var $Title;
     5  var $Data;
     6  var $Code;
     7  var $Title;
    88
    99  function __construct()
    1010  {
    11         $this->Data = array();
    12         $this->Code = 'en';
    13         $this->Title = 'English';
    14   }
    15 
    16         function Load()
    17         {
    18         }
    19 
    20         function Translate($Text)
    21         {
    22                 if(array_key_exists($Text, $this->Data) and ($this->Data[$Text] != ''))
    23                   return($this->Data[$Text]);
    24                   else return($Text);
    25         }
     11    $this->Data = array();
     12    $this->Code = 'en';
     13    $this->Title = 'English';
     14  }
     15
     16  function Load()
     17  {
     18  }
     19
     20  function Translate($Text)
     21  {
     22    if(array_key_exists($Text, $this->Data) and ($this->Data[$Text] != ''))
     23      return($this->Data[$Text]);
     24      else return($Text);
     25  }
    2626}
    2727
    2828class LocaleFile extends Model
    2929{
    30         var $Texts;
    31         var $Dir;
    32 
    33         function __construct($System)
    34         {
    35                 parent::__construct($System);
    36                 $this->Texts = new LocaleText();
    37         }
    38 
    39         function Load($Language)
    40         {
    41                 $FileName = $this->Dir.'/'.$Language.'.php';
    42                 if(file_exists($FileName)) {
    43                         include_once($FileName);
    44                         $ClassName = 'LocaleText'.$Language;
    45                   $this->Texts = new $ClassName();
    46                 } else throw new Exception('Language file '.$FileName.' not found');
    47                 $this->Texts->Load();
    48         }
    49 
    50         function AnalyzeCode($Path)
    51   {
    52         // Search for php files
     30  var $Texts;
     31  var $Dir;
     32
     33  function __construct($System)
     34  {
     35    parent::__construct($System);
     36    $this->Texts = new LocaleText();
     37  }
     38
     39  function Load($Language)
     40  {
     41    $FileName = $this->Dir.'/'.$Language.'.php';
     42    if(file_exists($FileName)) {
     43      include_once($FileName);
     44      $ClassName = 'LocaleText'.$Language;
     45      $this->Texts = new $ClassName();
     46    } else throw new Exception('Language file '.$FileName.' not found');
     47    $this->Texts->Load();
     48  }
     49
     50  function AnalyzeCode($Path)
     51  {
     52    // Search for php files
    5353    $FileList = scandir($Path);
    5454    foreach($FileList as $FileName)
    5555    {
    56         $FullName = $Path.'/'.$FileName;
    57         if(($FileName == '.') or ($FileName == '..')) ; // Skip virtual items
    58         else if(substr($FileName, 0, 1) == '.') ; // Skip Linux hidden files
    59         else if(is_dir($FullName)) $this->AnalyzeCode($FullName);
     56      $FullName = $Path.'/'.$FileName;
     57      if(($FileName == '.') or ($FileName == '..')) ; // Skip virtual items
     58      else if(substr($FileName, 0, 1) == '.') ; // Skip Linux hidden files
     59      else if(is_dir($FullName)) $this->AnalyzeCode($FullName);
    6060      else if(file_exists($FullName))
    6161      {
    6262        if(substr($FullName, -4) == '.php')
    6363        {
    64                 $Content = file_get_contents($FullName);
    65                 // Search occurence of T() function
    66                 while(strpos($Content, 'T(') !== false)
    67                 {
    68                         $Previous = strtolower(substr($Content, strpos($Content, 'T(') - 1, 1));
    69                         $Content = substr($Content, strpos($Content, 'T(') + 2);
    70                         $Ord = ord($Previous);
    71                         //echo($Ord.',');
    72                         if(!(($Ord >= ord('a')) and ($Ord <= ord('z'))))
    73                         {
    74                                 // Do for non-alpha previous character
    75                           $Original = substr($Content, 0, strpos($Content, ')'));
    76                           $Original2 = '';
    77                           if((substr($Original, 0, 1) == "'") and (substr($Original, -1, 1) == "'"))
    78                             $Original2 = substr($Original, 1, -1);
    79                           if((substr($Original, 0, 1) == '"') and (substr($Original, -1, 1) == '"'))
    80                             $Original2 = substr($Original, 1, -1);
    81                           if($Original2 != '')
    82                           {
    83                                 if(!array_key_exists($Original2, $this->Texts->Data))
    84                                   $this->Texts->Data[$Original2] = '';
    85                           }
    86                         }
    87                 }
     64          $Content = file_get_contents($FullName);
     65          // Search occurence of T() function
     66          while(strpos($Content, 'T(') !== false)
     67          {
     68            $Previous = strtolower(substr($Content, strpos($Content, 'T(') - 1, 1));
     69            $Content = substr($Content, strpos($Content, 'T(') + 2);
     70            $Ord = ord($Previous);
     71            //echo($Ord.',');
     72            if(!(($Ord >= ord('a')) and ($Ord <= ord('z'))))
     73            {
     74              // Do for non-alpha previous character
     75              $Original = substr($Content, 0, strpos($Content, ')'));
     76              $Original2 = '';
     77              if((substr($Original, 0, 1) == "'") and (substr($Original, -1, 1) == "'"))
     78                $Original2 = substr($Original, 1, -1);
     79              if((substr($Original, 0, 1) == '"') and (substr($Original, -1, 1) == '"'))
     80                $Original2 = substr($Original, 1, -1);
     81              if($Original2 != '')
     82              {
     83                if(!array_key_exists($Original2, $this->Texts->Data))
     84                  $this->Texts->Data[$Original2] = '';
     85              }
     86            }
     87          }
    8888        }
    8989      }
     
    9393  function SaveToFile($FileName)
    9494  {
    95         $Content = '<?php'."\n".
     95    $Content = '<?php'."\n".
    9696    ''."\n".
    9797    'class LocaleText'.$this->Texts->Code.' extends LocaleText'."\n".
    9898    '{'."\n".
    99           '  function Load()'."\n".
    100           '  {'."\n".
    101           '    $this->Code = \''.$this->Texts->Code.'\';'."\n".
    102           '    $this->Title = \''.$this->Texts->Title.'\';'."\n".
    103                 '    $this->Data = array('."\n";
    104                 foreach($this->Texts->Data as $Index => $Item)
    105                 {
    106                         $Content .= "      '".$Index."' => '".$Item."',\n";
    107                 }
    108                 $Content .= '    );'."\n".
    109           '  }'."\n".
     99    '  function Load()'."\n".
     100    '  {'."\n".
     101    '    $this->Code = \''.$this->Texts->Code.'\';'."\n".
     102    '    $this->Title = \''.$this->Texts->Title.'\';'."\n".
     103    '    $this->Data = array('."\n";
     104    foreach($this->Texts->Data as $Index => $Item)
     105    {
     106      $Content .= "      '".$Index."' => '".$Item."',\n";
     107    }
     108    $Content .= '    );'."\n".
     109    '  }'."\n".
    110110    '}'."\n";
    111111    file_put_contents($FileName, $Content);
     
    114114  function LoadFromDatabase($Database, $LangCode)
    115115  {
    116         $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
    117         if($DbResult->num_rows > 0)
    118         {
    119           $Language = $DbResult->fetch_assoc();
    120         $this->Texts->Data = array();
    121         $DbResult = $Database->select('Locale', '`Original`, `Translated`', '`Language`='.$Language['Id']);
    122           while($DbRow = $DbResult->fetch_assoc())
    123             $this->Texts->Data[$DbRow['Original']] = $DbRow['Translated'];
    124         }
     116    $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
     117    if($DbResult->num_rows > 0)
     118    {
     119      $Language = $DbResult->fetch_assoc();
     120      $this->Texts->Data = array();
     121      $DbResult = $Database->select('Locale', '`Original`, `Translated`', '`Language`='.$Language['Id']);
     122      while($DbRow = $DbResult->fetch_assoc())
     123        $this->Texts->Data[$DbRow['Original']] = $DbRow['Translated'];
     124    }
    125125  }
    126126
    127127  function SaveToDatabase(Database $Database, $LangCode)
    128128  {
    129         $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
    130         if($DbResult->num_rows > 0)
    131         {
    132           $Language = $DbResult->fetch_assoc();
    133           $Database->delete('Locale', '`Language`='.$Language['Id']);
    134           foreach($this->Texts->Data as $Index => $Item)
    135           $Database->query('INSERT INTO `Locale` (`Language`,`Original`,`Translated`) '.
    136             'VALUES('.$Language['Id'].','.$Database->quote($Index).','.$Database->quote($Item).')');
    137         }
     129    $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
     130    if($DbResult->num_rows > 0)
     131    {
     132      $Language = $DbResult->fetch_assoc();
     133      $Database->delete('Locale', '`Language`='.$Language['Id']);
     134      foreach($this->Texts->Data as $Index => $Item)
     135        $Database->query('INSERT INTO `Locale` (`Language`,`Original`,`Translated`) '.
     136        'VALUES('.$Language['Id'].','.$Database->quote($Index).','.$Database->quote($Item).')');
     137    }
    138138  }
    139139
    140140  function UpdateToDatabase(Database $Database, $LangCode)
    141141  {
    142         $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
    143         if($DbResult->num_rows > 0)
    144         {
    145           $Language = $DbResult->fetch_assoc();
    146         foreach($this->Texts->Data as $Index => $Item)
    147       {
    148             $DbResult = $Database->select('Locale', '*', '(`Original` ='.$Database->quote($Index).') AND (`Language`='.($Language['Id']).')');
    149           if($DbResult->num_rows > 0)
    150           $Database->update('Locale', '(`Language`='.($Language['Id']).') AND '.
     142    $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
     143    if($DbResult->num_rows > 0)
     144    {
     145      $Language = $DbResult->fetch_assoc();
     146      foreach($this->Texts->Data as $Index => $Item)
     147      {
     148        $DbResult = $Database->select('Locale', '*', '(`Original` ='.$Database->quote($Index).') AND (`Language`='.($Language['Id']).')');
     149        if($DbResult->num_rows > 0)
     150        $Database->update('Locale', '(`Language`='.($Language['Id']).') AND '.
    151151          '(`Original` ='.$Database->quote($Index).')', array('Translated' => $Item));
    152           else $Database->insert('Locale', array('Language' => $Language['Id'],
     152        else $Database->insert('Locale', array('Language' => $Language['Id'],
    153153         'Original' => $Index, 'Translated' => $Item));
    154154      }
    155         }
     155    }
    156156  }
    157157}
     
    159159class LocaleManager extends Model
    160160{
    161         var $CurrentLocale;
    162         var $Codes;
    163         var $Dir;
    164 
    165         function __construct($System)
    166         {
    167                 parent::__construct($System);
    168                 $this->Codes = array('en');
    169                 $this->CurrentLocale = new LocaleFile($System);
    170         }
    171 
    172         function LoadAvailable()
    173         {
    174                 $this->Available = array();
    175         $FileList = scandir($this->Dir);
     161  var $CurrentLocale;
     162  var $Codes;
     163  var $Dir;
     164
     165  function __construct($System)
     166  {
     167    parent::__construct($System);
     168    $this->Codes = array('en');
     169    $this->CurrentLocale = new LocaleFile($System);
     170  }
     171
     172  function LoadAvailable()
     173  {
     174    $this->Available = array();
     175    $FileList = scandir($this->Dir);
    176176    foreach($FileList as $FileName)
    177177    {
    178           if(substr($FileName, -4) == '.php')
    179           {
    180                 $Code = substr($FileName, 0, -4);
    181                 $Locale = new LocaleFile($this->System);
    182                 $Locale->Dir = $this->Dir;
    183                 $Locale->Load($Code);
    184                 $this->Available['Code'] = array('Code' => $Code, 'Title' => $Locale->Texts->Title);
    185           }
    186           }
    187   }
    188 
    189         function UpdateAll($Directory)
    190         {
    191                 $Locale = new LocaleFile($this->System);
    192                 $Locale->AnalyzeCode($Directory);
    193           $FileList = scandir($this->Dir);
     178      if(substr($FileName, -4) == '.php')
     179      {
     180        $Code = substr($FileName, 0, -4);
     181        $Locale = new LocaleFile($this->System);
     182        $Locale->Dir = $this->Dir;
     183        $Locale->Load($Code);
     184        $this->Available['Code'] = array('Code' => $Code, 'Title' => $Locale->Texts->Title);
     185      }
     186    }
     187  }
     188
     189  function UpdateAll($Directory)
     190  {
     191    $Locale = new LocaleFile($this->System);
     192    $Locale->AnalyzeCode($Directory);
     193    $FileList = scandir($this->Dir);
    194194    foreach($FileList as $FileName)
    195195    {
    196           if(substr($FileName, -4) == '.php')
    197           {
    198                   $FileLocale = new LocaleFile($this->System);
    199                   $FileLocale->Dir = $this->Dir;
    200                   $FileLocale->Load(substr($FileName, 0, -4));
    201 
    202                   // Add new
    203                   foreach($Locale->Texts->Data as $Index => $Item)
    204                     if(!array_key_exists($Index, $FileLocale->Texts->Data))
    205                       $FileLocale->Texts->Data[$Index] = $Item;
    206                   // Remove old
    207                   foreach($FileLocale->Texts->Data as $Index => $Item)
    208                     if(!array_key_exists($Index, $Locale->Texts->Data))
    209                       unset($FileLocale->Texts->Data[$Index]);
    210               $FileLocale->UpdateToDatabase($this->System->Database, $FileLocale->Texts->Code);
    211               $FileName = $this->Dir.'/'.$FileLocale->Texts->Code.'.php';
    212             $FileLocale->SaveToFile($FileName);
    213           }
    214         }
    215         $this->CurrentLocale->Load($this->CurrentLocale->Texts->Code);
    216         }
    217 
    218         function LoadLocale($Code)
    219         {
     196      if(substr($FileName, -4) == '.php')
     197      {
     198        $FileLocale = new LocaleFile($this->System);
     199        $FileLocale->Dir = $this->Dir;
     200        $FileLocale->Load(substr($FileName, 0, -4));
     201
     202        // Add new
     203        foreach($Locale->Texts->Data as $Index => $Item)
     204          if(!array_key_exists($Index, $FileLocale->Texts->Data))
     205            $FileLocale->Texts->Data[$Index] = $Item;
     206        // Remove old
     207        foreach($FileLocale->Texts->Data as $Index => $Item)
     208          if(!array_key_exists($Index, $Locale->Texts->Data))
     209            unset($FileLocale->Texts->Data[$Index]);
     210        $FileLocale->UpdateToDatabase($this->System->Database, $FileLocale->Texts->Code);
     211        $FileName = $this->Dir.'/'.$FileLocale->Texts->Code.'.php';
     212        $FileLocale->SaveToFile($FileName);
     213      }
     214    }
     215    $this->CurrentLocale->Load($this->CurrentLocale->Texts->Code);
     216  }
     217
     218  function LoadLocale($Code)
     219  {
    220220    $this->CurrentLocale->Dir = $this->Dir;
    221           $this->CurrentLocale->Load($Code);
    222         }
     221    $this->CurrentLocale->Load($Code);
     222  }
    223223}
    224224
     
    226226function T($Text)
    227227{
    228         global $LocaleManager;
    229 
    230         if(isset($LocaleManager)) return($LocaleManager->CurrentLocale->Texts->Translate($Text));
    231           else return($Text);
    232 }
     228  global $LocaleManager;
     229
     230  if(isset($LocaleManager)) return($LocaleManager->CurrentLocale->Texts->Translate($Text));
     231    else return($Text);
     232}
  • trunk/includes/Page.php

    r768 r816  
    77  var $RawPage;
    88  var $Title;
    9  
     9
    1010  function __construct($System)
    1111  {
     
    1414    $this->RawPage = false;
    1515  }
    16        
    17         function Show()
    18         {
    19                 return('');
    20   } 
    21  
     16
     17  function Show()
     18  {
     19    return('');
     20  }
     21
    2222  function GetOutput()
    23   {     
    24         $Output = $this->Show();
    25         return($Output);
     23  {
     24    $Output = $this->Show();
     25    return($Output);
    2626  }
    2727}
     
    2929class PageEdit extends Page
    3030{
    31         var $Table;
    32         var $Definition;
    33         var $ItemActions;
    34        
    35         function __construct($System)
    36         {
     31  var $Table;
     32  var $Definition;
     33  var $ItemActions;
     34
     35  function __construct($System)
     36  {
    3737    parent::__construct($System);
    3838    $this->Table = '';
     
    4141      array('Name' => T('View'), 'URL' => '?action=view&amp;id=#Id'),
    4242    );
    43     $this->AllowEdit = false;   
     43    $this->AllowEdit = false;
    4444    if($this->AllowEdit) $this->ItemActions[] = array('Name' => T('Delete'), 'URL' => '?action=remove&amp;id=#Id');
    45         }
    46        
    47         function Show()
    48         {
    49                 $Output = '';
    50         if(array_key_exists('action', $_GET))
     45  }
     46
     47  function Show()
     48  {
     49    $Output = '';
     50    if(array_key_exists('action', $_GET))
    5151    {
    52       if($_GET['action'] == 'add') $Output .= $this->AddItem(); 
     52      if($_GET['action'] == 'add') $Output .= $this->AddItem();
    5353      else if($_GET['action'] == 'view') $Output .= $this->ViewItem();
    5454      else if($_GET['action'] == 'edit') $Output .= $this->ModifyItem();
     
    5656      else if($_GET['action'] == 'delete') $Output .= $this->DeleteItem();
    5757      else $Output .= ShowMessage(T('Unknown action'), MESSAGE_CRITICAL);
    58     } else $Output .= $this->ViewList();       
    59     return($Output); 
     58    } else $Output .= $this->ViewList();
     59    return($Output);
    6060  }
    61  
     61
    6262  function ViewItem()
    6363  {
    64                 $DbResult = $this->Database->query('SELECT * FROM ('.$this->TableSQL.') AS `T` WHERE `Id`='.$_GET['id']);
    65                 if($DbResult->num_rows > 0)
    66                 {
    67                   $DbRow = $DbResult->fetch_assoc();
     64    $DbResult = $this->Database->query('SELECT * FROM ('.$this->TableSQL.') AS `T` WHERE `Id`='.$_GET['id']);
     65    if($DbResult->num_rows > 0)
     66    {
     67      $DbRow = $DbResult->fetch_assoc();
    6868
    6969      $Output = T('Item').
     
    7171      foreach($this->Definition as $DefIndex => $Def)
    7272      {
    73           $Output .= '<tr><td>'.$Def['Title'].':</td><td>'.$this->ViewControl($Def['Type'], $DefIndex, $DbRow[$DefIndex]).'</tr>';
    74       }       
     73        $Output .= '<tr><td>'.$Def['Title'].':</td><td>'.$this->ViewControl($Def['Type'], $DefIndex, $DbRow[$DefIndex]).'</tr>';
     74      }
    7575      $Output .= '<tr>'.
    7676        '</table>';
    77                 } else $Output = ShowMessage(T('Item not found'), MESSAGE_CRITICAL);
    78                 if($this->AllowEdit)
    79                 {
    80                   $Output .= '<a href="?action=add">'.T('Add').'</a> ';
    81                   $Output .= '<a href="?action=edit&amp;id='.$_GET['id'].'">'.T('Edit').'</a> ';
    82                   $Output .= '<a href="?action=delete&amp;id='.$_GET['id'].'">'.T('Add').'</a> ';
    83                 }
    84                 $Output .= '<a href="?">'.T('List').'</a><br/>';
    85     return($Output); 
     77    } else $Output = ShowMessage(T('Item not found'), MESSAGE_CRITICAL);
     78    if($this->AllowEdit)
     79    {
     80      $Output .= '<a href="?action=add">'.T('Add').'</a> ';
     81      $Output .= '<a href="?action=edit&amp;id='.$_GET['id'].'">'.T('Edit').'</a> ';
     82      $Output .= '<a href="?action=delete&amp;id='.$_GET['id'].'">'.T('Add').'</a> ';
     83    }
     84    $Output .= '<a href="?">'.T('List').'</a><br/>';
     85    return($Output);
    8686  }
    8787
    8888  function ViewList()
    8989  {
    90                 $DbResult = $this->Database->query('SELECT COUNT(*) FROM ('.$this->TableSQL.') AS `T`');
    91                 $DbRow = $DbResult->fetch_row();
    92                 $PageList = GetPageList($DbRow[0]);
    93                 $Output = $PageList['Output'];
    94        
    95                 $Output .= '<table class="BaseTable">';
    96                 $TableColumns = array();
    97                 foreach($this->Definition as $Index => $Def)
    98                   if($Def['InList'])
    99                     $TableColumns[] = array('Name' => $Index, 'Title' => $Def['Title']);
    100                 if(count($this->ItemActions) > 0)
    101                   $TableColumns[] = array('Name' => '', 'Title' => 'Akce');
    102        
    103                 $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
    104                 $Output .= $Order['Output'];
    105        
    106                 $DbResult = $this->Database->query('SELECT * FROM ('.$this->Table.') '.$Order['SQL'].$PageList['SQLLimit']);
    107                 while($Item = $DbResult->fetch_assoc())
    108                 {
    109                         $Output .= '<tr>';
     90    $DbResult = $this->Database->query('SELECT COUNT(*) FROM ('.$this->TableSQL.') AS `T`');
     91    $DbRow = $DbResult->fetch_row();
     92    $PageList = GetPageList($DbRow[0]);
     93    $Output = $PageList['Output'];
     94
     95    $Output .= '<table class="BaseTable">';
     96    $TableColumns = array();
     97    foreach($this->Definition as $Index => $Def)
     98      if($Def['InList'])
     99        $TableColumns[] = array('Name' => $Index, 'Title' => $Def['Title']);
     100    if(count($this->ItemActions) > 0)
     101      $TableColumns[] = array('Name' => '', 'Title' => 'Akce');
     102
     103    $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
     104    $Output .= $Order['Output'];
     105
     106    $DbResult = $this->Database->query('SELECT * FROM ('.$this->Table.') '.$Order['SQL'].$PageList['SQLLimit']);
     107    while($Item = $DbResult->fetch_assoc())
     108    {
     109      $Output .= '<tr>';
    110110      foreach($this->Definition as $Index => $Def)
    111111      if($Def['InList'])
    112112      {
    113         if($Def['Type'] == 'URL') $Output .= '<td><a href="'.$Item[$Index].'">'.$Item[$Index].'</a></td>';
    114                 else $Output .= '<td>'.$Item[$Index].'</td>';
     113        if($Def['Type'] == 'URL') $Output .= '<td><a href="'.$Item[$Index].'">'.$Item[$Index].'</a></td>';
     114          else $Output .= '<td>'.$Item[$Index].'</td>';
    115115      }
    116116      if(count($this->ItemActions) > 0)
    117       {         
    118         $Output .= '<td>';
    119         foreach($this->ItemActions as $Index => $Action)
    120         {
    121                 $URL = $Action['URL'];
    122                 if(strpos($URL, '#Id')) $URL = str_replace('#Id', $Item['Id'], $URL);
     117      {
     118        $Output .= '<td>';
     119        foreach($this->ItemActions as $Index => $Action)
     120        {
     121          $URL = $Action['URL'];
     122          if(strpos($URL, '#Id')) $URL = str_replace('#Id', $Item['Id'], $URL);
    123123          $Output .= '<a href="'.$URL.'">'.$Action['Name'].'</a> ';
    124         }       
     124        }
    125125        $Output .= '</td>';
    126126      }
    127                   $Output .= '</tr>';   
    128                 }
    129                 $Output .= '</table>';
    130                 if($this->AllowEdit) $Output .= '<a href="?action=add">'.T('Add').'</a><br/>';
    131                 return($Output);
     127      $Output .= '</tr>';
     128    }
     129    $Output .= '</table>';
     130    if($this->AllowEdit) $Output .= '<a href="?action=add">'.T('Add').'</a><br/>';
     131    return($Output);
    132132  }
    133        
    134         function AddItem()
     133
     134  function AddItem()
    135135  {
    136136    $Output = '';
    137137    if($this->System->User->Licence(LICENCE_USER))
    138138    {
    139         if(array_key_exists('finish', $_GET))
    140         {
    141                 $Items = array();
    142                 foreach($this->Definition as $Index => $Def)
    143                 {
    144                         $Items[$Index] = $_POST[$Index];
    145                 }
    146                 $this->Database->insert($this->Table, $Items);
    147           $Output = ShowMessage(T('Item added'), MESSAGE_INFORMATION); 
    148         } else
    149         {
     139      if(array_key_exists('finish', $_GET))
     140      {
     141        $Items = array();
     142        foreach($this->Definition as $Index => $Def)
     143        {
     144          $Items[$Index] = $_POST[$Index];
     145        }
     146        $this->Database->insert($this->Table, $Items);
     147        $Output = ShowMessage(T('Item added'), MESSAGE_INFORMATION);
     148      } else
     149      {
    150150        $Output .= '<form action="?action=add&amp;finish=1" method="post">'.
    151151          '<fieldset><legend>'.T('New item').'</legend>'.
     
    153153        foreach($this->Definition as $DefIndex => $Def)
    154154        {
    155               $Output .= '<tr><td>'.$Def['Title'].':</td><td>'.$this->GetControl($Def['Type'], $DefIndex, '').'</tr>';
    156         }       
     155          $Output .= '<tr><td>'.$Def['Title'].':</td><td>'.$this->GetControl($Def['Type'], $DefIndex, '').'</tr>';
     156        }
    157157        $Output .= '<tr><td colspan="2"><input type="submit" value="'.T('Add').'" /></td></tr>'.
    158158          '</table>'.
    159159          '</fieldset>'.
    160160          '</form>';
    161         }
     161      }
    162162    } else $Output .= ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
    163     return($Output); 
    164   }     
    165        
    166         function DeleteItem()
     163    return($Output);
     164  }
     165
     166  function DeleteItem()
    167167  {
    168168    if($this->System->User->Licence(LICENCE_USER))
     
    173173    return($Output);
    174174  }
    175  
     175
    176176  function GetControl($Type, $Name, $Value)
    177177  {
    178         if($Type == 'Text') $Output = '<input type="text" name="'.$Name.'" value="'.$Value.'"/>';
    179         else if($Type == 'Boolean') $Output = '<input type="checkbox" name="'.$Name.'"/>';
    180         else $Output = '<input type="text" name="'.$Name.'" value="'.$Value.'"/>';
    181         return($Output);
    182   }     
     178    if($Type == 'Text') $Output = '<input type="text" name="'.$Name.'" value="'.$Value.'"/>';
     179    else if($Type == 'Boolean') $Output = '<input type="checkbox" name="'.$Name.'"/>';
     180    else $Output = '<input type="text" name="'.$Name.'" value="'.$Value.'"/>';
     181    return($Output);
     182  }
    183183
    184184  function ViewControl($Type, $Name, $Value)
    185185  {
    186         if($Type == 'Text') $Output = $Value;
    187         else if($Type == 'URL') $Output = '<a href="'.$Value.'">'.$Value.'</a>';
    188         else if($Type == 'Boolean') $Output = $Value;
    189         else $Output = $Value;
    190         return($Output);
    191   }     
     186    if($Type == 'Text') $Output = $Value;
     187    else if($Type == 'URL') $Output = '<a href="'.$Value.'">'.$Value.'</a>';
     188    else if($Type == 'Boolean') $Output = $Value;
     189    else $Output = $Value;
     190    return($Output);
     191  }
    192192}
  • trunk/includes/Update.php

    r815 r816  
    1111  function __construct()
    1212  {
    13           $this->Revision = 0;
    14           $this->Trace = array();
    15           $this->VersionTable = 'DbVersion';
     13    $this->Revision = 0;
     14    $this->Trace = array();
     15    $this->VersionTable = 'DbVersion';
    1616  }
    1717
    1818  function GetDbVersion()
    1919  {
    20           $DbResult = $this->Database->select('DbVersion', '*', 'Id=1');
    21           $Version = $DbResult->fetch_assoc();
     20    $DbResult = $this->Database->select('DbVersion', '*', 'Id=1');
     21    $Version = $DbResult->fetch_assoc();
    2222    return($Version['Revision']);
    2323  }
     
    2525  function IsInstalled()
    2626  {
    27           $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->VersionTable.'"');
     27    $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->VersionTable.'"');
    2828    return($DbResult->num_rows > 0);
    2929  }
     
    3131  function IsUpToDate()
    3232  {
    33           return($this->Revision <= $this->GetDbVersion());
     33    return($this->Revision <= $this->GetDbVersion());
    3434  }
    3535
    3636  function Update()
    3737  {
    38           $DbRevision = $this->GetDbVersion();
    39         $Output = 'Počáteční revize databáze: '.$DbRevision.'<br/>';
    40           while($this->Revision > $DbRevision)
     38    $DbRevision = $this->GetDbVersion();
     39    $Output = 'Počáteční revize databáze: '.$DbRevision.'<br/>';
     40    while($this->Revision > $DbRevision)
    4141    {
    42             $TraceItem = $this->Trace[$DbRevision];
    43             $Output .= 'Aktualizace na verzi: '.$TraceItem['Revision'].'<br/>';
    44             $RevUpdate = $TraceItem['Function'];
    45             $RevUpdate($this);
    46             $DbRevision = $TraceItem['Revision'];
    47             $this->Database->query('UPDATE `DbVersion` SET `Revision`= '.$TraceItem['Revision'].' WHERE `Id`=1');
    48           }
    49           return($Output);
     42      $TraceItem = $this->Trace[$DbRevision];
     43      $Output .= 'Aktualizace na verzi: '.$TraceItem['Revision'].'<br/>';
     44      $RevUpdate = $TraceItem['Function'];
     45      $RevUpdate($this);
     46      $DbRevision = $TraceItem['Revision'];
     47      $this->Database->query('UPDATE `DbVersion` SET `Revision`= '.$TraceItem['Revision'].' WHERE `Id`=1');
     48    }
     49    return($Output);
    5050  }
    5151
    5252  function Install()
    5353  {
    54         $InstallMethod = $this->InstallMethod;
    55         $InstallMethod($this);
    56         $this->Update();
     54    $InstallMethod = $this->InstallMethod;
     55    $InstallMethod($this);
     56    $this->Update();
    5757  }
    5858
     
    6464  function Execute($Query)
    6565  {
    66           echo($Query.'<br/>');
    67           flush();
    68           return($this->Database->query($Query));
     66    echo($Query.'<br/>');
     67    flush();
     68    return($this->Database->query($Query));
    6969  }
    7070}
  • trunk/includes/Version.php

    r815 r816  
    66// and system will need database update.
    77
    8 $Revision = 815; // Subversion revision
     8$Revision = 816; // Subversion revision
    99$DatabaseRevision = 811; // Database structure revision
    1010$ReleaseTime = '2015-02-22';
  • trunk/includes/global.php

    r806 r816  
    4242  $System = new System();
    4343  $System->DoNotShowPage = true;
    44         $System->Run();
     44  $System->Run();
    4545  $User = $System->User; // Back compatibility, will be removed
    4646}
     
    4848class TempPage extends Page
    4949{
    50         function Show()
    51         {
    52                 global $TempPageContent;
    53                 return($TempPageContent);
    54         }
     50  function Show()
     51  {
     52    global $TempPageContent;
     53    return($TempPageContent);
     54  }
    5555}
    5656
    5757function ShowPageClass($Page)
    5858{
    59         global $TempPageContent, $System;
     59  global $TempPageContent, $System;
    6060
    6161  $System->Pages['temporary-page'] = get_class($Page);
    62         $_SERVER['REDIRECT_QUERY_STRING'] = 'temporary-page';
     62  $_SERVER['REDIRECT_QUERY_STRING'] = 'temporary-page';
    6363  $System->PathItems = ProcessURL();
    64         $System->ShowPage();
     64  $System->ShowPage();
    6565}
    6666
    6767function ShowPage($Content)
    6868{
    69         global $TempPageContent, $System;
     69  global $TempPageContent, $System;
    7070
    7171  $TempPage = new TempPage($System);
    7272  $System->Pages['temporary-page'] = 'TempPage';
    73         $_SERVER['REDIRECT_QUERY_STRING'] = 'temporary-page';
    74         $TempPageContent = $Content;
     73  $_SERVER['REDIRECT_QUERY_STRING'] = 'temporary-page';
     74  $TempPageContent = $Content;
    7575  $System->PathItems = ProcessURL();
    76         $System->ShowPage();
     76  $System->ShowPage();
    7777}
    7878
     
    260260  if(array_key_exists('OrderCol', $_GET)) $_SESSION['OrderCol'] = $_GET['OrderCol'];
    261261  if(array_key_exists('OrderDir', $_GET) and (array_key_exists($_GET['OrderDir'], $OrderArrowImage)))
    262         $_SESSION['OrderDir'] = $_GET['OrderDir'];
     262    $_SESSION['OrderDir'] = $_GET['OrderDir'];
    263263  if(!array_key_exists('OrderCol', $_SESSION)) $_SESSION['OrderCol'] = $DefaultColumn;
    264264  if(!array_key_exists('OrderDir', $_SESSION)) $_SESSION['OrderDir'] = $DefaultOrder;
     
    557557}
    558558
    559 function GetTranslatNamesArray() 
     559function GetTranslatNamesArray()
    560560{
    561561  $TablesColumn = array
     
    733733
    734734  $IconName = array(
    735           MESSAGE_INFORMATION => 'information',
     735    MESSAGE_INFORMATION => 'information',
    736736    MESSAGE_WARNING => 'warning',
    737737    MESSAGE_CRITICAL => 'critical'
    738738  );
    739739  $BackgroundColor = array(
    740         MESSAGE_INFORMATION => '#e0e0ff',
     740    MESSAGE_INFORMATION => '#e0e0ff',
    741741    MESSAGE_WARNING => '#ffffe0',
    742         MESSAGE_CRITICAL => '#ffe0e0'
     742    MESSAGE_CRITICAL => '#ffe0e0'
    743743  );
    744744
    745745  return('<div class="message" style="background-color: '.$BackgroundColor[$Type].
    746         ';"><table><tr><td class="icon"><img src="'.
    747         $System->Link('/images/message/'.$IconName[$Type].'.png').'" alt="'.
    748         $IconName[$Type].'"><td>'.$Text.'</td></tr></table></div>');
     746    ';"><table><tr><td class="icon"><img src="'.
     747    $System->Link('/images/message/'.$IconName[$Type].'.png').'" alt="'.
     748    $IconName[$Type].'"><td>'.$Text.'</td></tr></table></div>');
    749749}
    750750
    751751function ProcessURL()
    752752{
    753         if(array_key_exists('REDIRECT_QUERY_STRING', $_SERVER))
    754                 $PathString = $_SERVER['REDIRECT_QUERY_STRING'];
    755         else $PathString = '';
    756         if(substr($PathString, -1, 1) == '/') $PathString = substr($PathString, 0, -1);
    757         $PathItems = explode('/', $PathString);
    758         if(strpos(GetRequestURI(), '?') !== false)
    759                 $_SERVER['QUERY_STRING'] = substr(GetRequestURI(), strpos(GetRequestURI(), '?') + 1);
    760         else $_SERVER['QUERY_STRING'] = '';
    761         parse_str($_SERVER['QUERY_STRING'], $_GET);
     753  if(array_key_exists('REDIRECT_QUERY_STRING', $_SERVER))
     754    $PathString = $_SERVER['REDIRECT_QUERY_STRING'];
     755  else $PathString = '';
     756  if(substr($PathString, -1, 1) == '/') $PathString = substr($PathString, 0, -1);
     757  $PathItems = explode('/', $PathString);
     758  if(strpos(GetRequestURI(), '?') !== false)
     759    $_SERVER['QUERY_STRING'] = substr(GetRequestURI(), strpos(GetRequestURI(), '?') + 1);
     760  else $_SERVER['QUERY_STRING'] = '';
     761  parse_str($_SERVER['QUERY_STRING'], $_GET);
    762762  // SQL injection hack protection
    763763  foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($_GET[$Index]);
    764         return($PathItems);
     764  return($PathItems);
    765765}
    766766
    767767function WriteLanguages($Selected)
    768768{
    769         global $System;
    770 
    771         $Output = '<select name="Language">';
    772         $DbResult = $System->Database->select('Language', '`Id`, `Name`', '`Enabled` = 1');
    773         while($Language = $DbResult->fetch_assoc())
    774         {
    775                 $Output .= '<option value="'.$Language['Id'].'"';
    776                 if($Selected == $Language['Id'])
    777                         $Output .= ' selected="selected"';
    778                 $Output .= '>'.$Language['Name'].'</option>';
    779         }
    780         $Output .= '</select>';
    781         return($Output);
     769  global $System;
     770
     771  $Output = '<select name="Language">';
     772  $DbResult = $System->Database->select('Language', '`Id`, `Name`', '`Enabled` = 1');
     773  while($Language = $DbResult->fetch_assoc())
     774  {
     775    $Output .= '<option value="'.$Language['Id'].'"';
     776    if($Selected == $Language['Id'])
     777      $Output .= ' selected="selected"';
     778    $Output .= '>'.$Language['Name'].'</option>';
     779  }
     780  $Output .= '</select>';
     781  return($Output);
    782782}
    783783
  • trunk/includes/system.php

    r812 r816  
    2525  function Init()
    2626  {
    27         global $Config, $LocaleManager;
     27    global $Config, $LocaleManager;
    2828
    2929    $this->Config = $Config;
     
    5959    $this->Menu = array
    6060    (
    61    /*           array(
    62                                 'Title' => T('Files'),
    63                                 'Hint' => 'Stahování různých pomocných souborů a programů',
    64                                 'Link' => $this->Link('/download.php'),
    65                                 'Permission' => LICENCE_ANONYMOUS,
    66                                 'Icon' => '',
    67                 ),
    68                 */
    69                 array(
    70                                 'Title' => T('Instructions'),
    71                                 'Hint' => 'Informace k překladu hry',
    72                                 'Link' => $this->Link('/info.php'),
    73                                 'Permission' => LICENCE_ANONYMOUS,
    74                                 'Icon' => '',
    75                 ),
    76                 array(
    77                                 'Title' => T('Data source'),
    78                                 'Hint' => 'Informace o překladových skupinách',
    79                                 'Link' => $this->Link('/TranslationList.php?action=grouplist'),
    80                                 'Permission' => LICENCE_ANONYMOUS,
    81                                 'Icon' => '',
    82                 ),
    83                 array(
    84                                 'Title' => T('Presentation'),
    85                                 'Hint' => 'Prezentace a motivace překladu',
    86                                 'Link' => $this->Link('/promotion.php'),
    87                                 'Permission' => LICENCE_ANONYMOUS,
    88                                 'Icon' => '',
    89                 ),
    90                 array(
    91                                 'Title' => T('IRC chat'),
    92                                 'Hint' => 'IRC chat pro překladatele',
    93                                 'Link' => 'http://embed.mibbit.com/?server=game.zdechov.net%3A6667&amp;channel=%23wowpreklad&amp;forcePrompt=true&amp;charset=utf-8',
    94                                 'Permission' => LICENCE_ANONYMOUS,
    95                                 'Icon' => '',
    96                 ),
    97                 array(
    98                                 'Title' => T('Administration'),
    99                                 'Hint' => 'Volby pro správu',
    100                                 'Link' => $this->Link('/admin/'),
    101                                 'Permission' => LICENCE_ADMIN,
    102                                 'Icon' => '',
    103                 ),
     61   /*     array(
     62            'Title' => T('Files'),
     63            'Hint' => 'Stahování různých pomocných souborů a programů',
     64            'Link' => $this->Link('/download.php'),
     65            'Permission' => LICENCE_ANONYMOUS,
     66            'Icon' => '',
     67        ),
     68        */
     69        array(
     70            'Title' => T('Instructions'),
     71            'Hint' => 'Informace k překladu hry',
     72            'Link' => $this->Link('/info.php'),
     73            'Permission' => LICENCE_ANONYMOUS,
     74            'Icon' => '',
     75        ),
     76        array(
     77            'Title' => T('Data source'),
     78            'Hint' => 'Informace o překladových skupinách',
     79            'Link' => $this->Link('/TranslationList.php?action=grouplist'),
     80            'Permission' => LICENCE_ANONYMOUS,
     81            'Icon' => '',
     82        ),
     83        array(
     84            'Title' => T('Presentation'),
     85            'Hint' => 'Prezentace a motivace překladu',
     86            'Link' => $this->Link('/promotion.php'),
     87            'Permission' => LICENCE_ANONYMOUS,
     88            'Icon' => '',
     89        ),
     90        array(
     91            'Title' => T('IRC chat'),
     92            'Hint' => 'IRC chat pro překladatele',
     93            'Link' => 'http://embed.mibbit.com/?server=game.zdechov.net%3A6667&amp;channel=%23wowpreklad&amp;forcePrompt=true&amp;charset=utf-8',
     94            'Permission' => LICENCE_ANONYMOUS,
     95            'Icon' => '',
     96        ),
     97        array(
     98            'Title' => T('Administration'),
     99            'Hint' => 'Volby pro správu',
     100            'Link' => $this->Link('/admin/'),
     101            'Permission' => LICENCE_ADMIN,
     102            'Icon' => '',
     103        ),
    104104    );
    105105  }
     
    108108  {
    109109    global $System, $ScriptStartTime, $TranslationTree, $User, $StopAfterUpdateManager,
    110             $UpdateManager, $Config, $DatabaseRevision;
     110      $UpdateManager, $Config, $DatabaseRevision;
    111111
    112112    $ScriptStartTime = GetMicrotime();
     
    129129    foreach($_POST as $Index => $Item)
    130130    {
    131           if(is_array($_POST[$Index]))
    132                   foreach($_POST[$Index] as $Index2 => $Item2) $_POST[$Index][$Index2] = addslashes($Item2);
    133         else $_POST[$Index] = addslashes($_POST[$Index]);
     131      if(is_array($_POST[$Index]))
     132        foreach($_POST[$Index] as $Index2 => $Item2) $_POST[$Index][$Index2] = addslashes($Item2);
     133      else $_POST[$Index] = addslashes($_POST[$Index]);
    134134    }
    135135    foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($_GET[$Index]);
     
    166166    if($this->DoNotShowPage == false)
    167167    {
    168           $this->ShowPage();
     168      $this->ShowPage();
    169169    }
    170170  }
     
    183183  function RegisterPage($Path, $Handler)
    184184  {
    185         if(is_array($Path))
     185    if(is_array($Path))
    186186    {
    187187      $Page = &$this->Pages;
     
    198198  function RegisterMenuItem($MenuItem, $Pos = NULL)
    199199  {
    200         if(is_null($Pos)) $this->Menu[] = $MenuItem;
    201           else {
    202                 array_splice($this->Menu, $Pos, 0, array($MenuItem));
    203           }
     200    if(is_null($Pos)) $this->Menu[] = $MenuItem;
     201      else {
     202        array_splice($this->Menu, $Pos, 0, array($MenuItem));
     203      }
    204204  }
    205205
     
    216216      } else
    217217      {
    218         if(count($PathItems) == 1) return($Pages[$PathItem]);
    219           else return(''); // Unexpected subpages
     218        if(count($PathItems) == 1) return($Pages[$PathItem]);
     219          else return(''); // Unexpected subpages
    220220      }
    221221    } else return('');
     
    224224  function PageNotFound()
    225225  {
    226         // Send correct HTTP status code to signal unknown page
    227         if(array_key_exists('SERVER_PROTOCOL', $_SERVER))
    228           Header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
    229         if(array_key_exists('HTTP_REFERER', $_SERVER)) $Referer = ' Referer: '.$_SERVER['HTTP_REFERER'];
    230           else $Referer = '';
    231         if(isset($this->ModuleManager->Modules['Log']))
    232           $this->ModuleManager->Modules['Log']->WriteLog('Stránka "'.
    233           implode('/', $this->PathItems).'" nenalezena'.$Referer, LOG_TYPE_PAGE_NOT_FOUND);
     226    // Send correct HTTP status code to signal unknown page
     227    if(array_key_exists('SERVER_PROTOCOL', $_SERVER))
     228      Header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
     229    if(array_key_exists('HTTP_REFERER', $_SERVER)) $Referer = ' Referer: '.$_SERVER['HTTP_REFERER'];
     230      else $Referer = '';
     231    if(isset($this->ModuleManager->Modules['Log']))
     232      $this->ModuleManager->Modules['Log']->WriteLog('Stránka "'.
     233        implode('/', $this->PathItems).'" nenalezena'.$Referer, LOG_TYPE_PAGE_NOT_FOUND);
    234234    return(ShowMessage(sprintf(T('Page "%s" not found'), implode('/', $this->PathItems)), MESSAGE_CRITICAL));
    235235  }
     
    237237  function ShowPage()
    238238  {
    239         $Output = '';
     239    $Output = '';
    240240    /* @var $Page Page */
    241241    $ClassName = $this->SearchPage($this->PathItems, $this->Pages);
     
    248248    } else {
    249249      $Output2 = '';
    250         if((count($this->OnPageNotFound) == 2)
     250      if((count($this->OnPageNotFound) == 2)
    251251  and method_exists($this->OnPageNotFound[0], $this->OnPageNotFound[1]))
    252           $Output2 = call_user_func_array($this->OnPageNotFound, array());
     252        $Output2 = call_user_func_array($this->OnPageNotFound, array());
    253253     if($Output2 != '') $Output .= $this->BaseView->ShowPage($Output2);
    254                 else {
    255                         $Output = $this->PageNotFound();
    256           $this->BaseView->Title = T('Page not found');
     254      else {
     255        $Output = $this->PageNotFound();
     256        $this->BaseView->Title = T('Page not found');
    257257        $Output = $this->BaseView->ShowPage($Output);
    258                 }
    259         }
     258      }
     259    }
    260260    echo($Output);
    261261  }
     
    264264class BaseView extends View
    265265{
    266         var $Title;
    267 
    268         function ShowTopBar()
    269         {
    270                 global $LocaleManager;
    271 
    272                 $Output = '<div class="Menu">';
    273                 if(!$this->System->User->Licence(LICENCE_USER))
    274                         $Output .= '<div class="advert">'.$this->System->Config['Web']['Advertisement'].'</div>';
    275                 $Output .= '<span class="MenuItem"></span><span class="MenuItem2">';
    276                 if($this->System->User->Licence(LICENCE_USER))
    277                 {
    278                         //$DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `Team` WHERE `Id`='.$this->System->User->Team);
    279                         //$Team = $DbResult->fetch_assoc();
    280                         //$Output .= ''<span class="MenuItem">Moje překlady: <a href="">Dokončené</a> <a href="">Rozpracované</a> <a href="">Exporty</a> Tým: <a href="">'.$Team['name'].'</a></span>';
    281                         $Output .= $this->System->User->Name.' <a href="'.$this->System->Link('/?action=logout').'">'.T('Logout').'</a>'.
    282                                         ' <a href="'.$this->System->Link('/user.php?user='.$this->System->User->Id).'">'.T('My page').'</a>'.
    283                                         ' <a href="'.$this->System->Link('/Options.php').'">'.T('Options').'</a>'.
    284                                         ' <a title="Vámi přeložené texty" href="'.$this->System->Link('/TranslationList.php?user='.
    285                                         $this->System->User->Id.'&amp;group=0&amp;state=2&amp;text=&amp;entry=').'">'.T('Translated').'</a>'.
    286                                         ' <a title="Vaše rozpracované text" href="'.$this->System->Link('/TranslationList.php?user='.
    287                                         $this->System->User->Id.'&amp;group=0&amp;state=3&amp;text=&amp;entry=').'">'.T('Unfinished').'</a>'.
    288                                         ' <a title="Nikým nepřeložené texty" href="'.
    289                                         $this->System->Link('/TranslationList.php?user=0&amp;group=0&amp;state=1&amp;text=&amp;entry=').'">'.T('Untranslated').'</a>';
    290                 } else
    291                 {
    292                         $Output .= '<a href="'.$this->System->Link('/login/').'">'.T('Login').'</a>&nbsp;'.
    293                                         '<a href="'.$this->System->Link('/registrace.php').'">'.T('Registration').'</a>';
    294                 }
    295                 //$Output .= ' <form action="?setlocale" method="get">';
    296                 $Output .= ' <select onchange="window.location=\'?locale=\'+this.value">';
    297                 foreach($LocaleManager->Available as $Locale)
    298                 {
    299                         if($Locale['Code'] == $LocaleManager->CurrentLocale->Texts->Code) $Selected = ' selected="selected"';
    300                           else $Selected = '';
    301                         $Output .= '<option title="" value="'.$Locale['Code'].'"'.$Selected.' onchange="this.form.submit()">'.$Locale['Title'].'</option>';
    302                 }
    303                 $Output .= '</select><noscript><span><input type="submit" value="Submit"/></span></noscript>';
    304                 //$Output .= '</form>';
    305                 $Output .= '</span></div>';
    306                 return($Output);
    307         }
    308 
    309         function ShowLoginBox()
    310         {
    311                 $Output = '';
    312                 if($this->System->User->Licence(LICENCE_USER))
    313                 {
    314                         // $Output .= 'Jste přihlášen jako: <b>'.$tUser->Id.'</b> <a href="index.php?Logout">Odhlásit</a>';
    315                 } else
    316                 {
    317                         $Output .= '<strong>'.T('Login').':</strong>
    318                         <form action="" method="post">
    319                         <table>
    320                         <tr>
    321                         <td><input type="text" name="LoginUser" size="13" /></td>
    322                         </tr>
    323                         <tr>
    324                         <td><input type="password" name="LoginPass" size="13" /></td>
    325                         </tr>
    326                         <tr>
    327                         <th><input type="submit" value="'.T('Do login').'" /></th>
    328                         </tr>
    329                         </table>
    330                         </form>';
    331                 }
    332                 return($Output);
    333         }
    334 
    335         function ShowSearchBox()
    336         {
    337                 $Output = '<strong>'.T('Search').':</strong>'.
    338                                 '<form action="'.$this->System->Link('/search/').'" method="get"><div>'.
    339                                 '<table>'.
    340                                 '<tr>'.
    341                                 '<td><input type="text" name="text" size="13" /></td>'.
    342                                 '</tr>'.
    343                                 '<tr>'.
    344                                 '<th><input type="submit" value="'.T('Do search').'" /></th>'.
    345                                 '</tr>'.
    346                                 '</table></div>'.
    347                                 '</form>';
    348                 return($Output);
    349         }
    350 
    351         function ShowMainMenu()
    352         {
    353                 $Output = '<strong>'.T('Menu').':</strong>'.
    354                                 '<div class="verticalmenu"><ul>';
    355                 foreach($this->System->Menu as $MenuItem)
    356                         if($this->System->User->Licence($MenuItem['Permission']))
    357                         {
    358                                 if(isset($MenuItem['Click'])) $OnClick = ' onclick="'.$MenuItem['Click'].'"';
    359                                 else $OnClick = '';
    360                                 if($MenuItem['Icon'] != '') $Icon = '<img src="'.$this->System->Link('/images/menu/'.$MenuItem['Icon']).'"/>';
    361                                 else $Icon = '';
    362                                 $Output .= '<li>'.$Icon.'<a class="verticalmenua" title="'.$MenuItem['Hint'].'" href="'.
    363                                         $MenuItem['Link'].'"'.$OnClick.'>'.$MenuItem['Title'].'</a></li>';
    364                         }
    365                         $Output .= '</ul></div>';
    366                         return($Output);
    367         }
    368 
    369         function ShowTranslatedMenu()
    370         {
    371                 global $TranslationTree;
    372 
    373                 $Output = '<strong>'.T('Translate groups').':</strong><br /><div id="TranslationMenu">';
    374                 $DbResult = $this->System->Database->select('Group', '`Id`, `Name`', '1 ORDER BY `Name`');
    375                 while($Group = $DbResult->fetch_assoc())
    376                 {
    377                         $Output .= '<div id="menuitem-group'.$Group['Id'].'" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">'.
    378                                         '<a href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">'.str_replace(' ','&nbsp;',$Group['Name']).'</a></div>'.
    379                                         '<div id="group'.$Group['Id'].'" class="hidden-menu-item" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">';
    380                         $Output .= '&nbsp;<a title="Zde můžete začít překládat" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user=0&amp;entry=&amp;text=').'">Nepřeložené</a><br />'.
    381                                         '&nbsp;<a title="Přeložené texty, můžete zde hlasovat, nebo opravovat překlady" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=2&amp;user=0&amp;entry=&amp;text=').'">Přeložené</a><br />';
    382                         if($this->System->User->Licence(LICENCE_USER))
    383                         {
    384                                 $Output .= '&nbsp;<a title="Nedokončené překlady" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=3').'">Rozepsané</a><br />
    385                                 &nbsp;<a title="Všechny překlady, které jste přeložil" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user='.$this->System->User->Id).'&amp;entry=&amp;text=">Vlastní</a><br />';
    386                         }
    387                         $Output .= '&nbsp;<a title="Sestavit speciální filtr" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">Filtr</a><br />';
    388                         $Output .= '</div>';
    389                 }
    390                 $Output .= '</div>';
    391                 return($Output);
    392         }
    393 
    394         function ShowHeader()
    395         {
    396                 $Output = ''.
    397                 '<!DOCTYPE html>'.
    398                 '<html>'.
    399                 '<head>'.
    400                 '<meta http-equiv="content-type" content="text/html; charset='.$this->System->Config['Web']['Charset'].'" />'.
    401                 '<meta name="keywords" content="wow, quest, questy, questů, preklad, mangos, překlad, překládání, přeložený, přeložení, čeština, world of warcraft, open source, free, addon" />'.
    402                 '<meta name="description" content="'.$this->System->Config['Web']['Description'].'" />'.
    403                 '<meta name="robots" content="all" />'.
    404                 '<link rel="stylesheet" href="'.$this->System->Link('/style/style.css').'" type="text/css" media="all" />'.
    405                 '<script type="text/javascript" src="'.$this->System->Link('/style/global.js').'"></script>'.
    406                 '<link rel="shortcut icon" href="'.$this->System->Link('/images/favicon.ico').'" />';
    407                 $Output .= $this->System->ModuleManager->Modules['News']->ShowRSSHeader();
    408                 $Title = $this->System->Config['Web']['Title'];
    409                 if($this->Title != '') $Title = $this->Title.' - '.$Title;
    410                 $Output .= '<title>'.$Title.'</title>'.
    411                 '</head><body>';
    412 
    413                 $Output .= $this->ShowTopBar();
    414                 $Output .= '<table class="page"><tr><td class="menu">';
    415                 $Output .= $this->ShowMainMenu();
    416                 $Output .= $this->System->ModuleManager->Modules['User']->ShowOnlineList();
    417                 $Output .= '<br />';
    418                 $Output .= $this->ShowSearchBox();
    419 
    420                 $Output .= '</td><td id="border-left"></td><td class="content">';
    421                 return($Output);
    422         }
    423 
    424         function ShowFooter()
    425         {
    426                 global $ScriptStartTime, $Revision, $ReleaseTime;
    427 
    428                 $ScriptGenerateDuration = round(GetMicrotime() - $ScriptStartTime, 2);
    429 
    430                 $Output = '</td>'.
     266  var $Title;
     267
     268  function ShowTopBar()
     269  {
     270    global $LocaleManager;
     271
     272    $Output = '<div class="Menu">';
     273    if(!$this->System->User->Licence(LICENCE_USER))
     274      $Output .= '<div class="advert">'.$this->System->Config['Web']['Advertisement'].'</div>';
     275    $Output .= '<span class="MenuItem"></span><span class="MenuItem2">';
     276    if($this->System->User->Licence(LICENCE_USER))
     277    {
     278      //$DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `Team` WHERE `Id`='.$this->System->User->Team);
     279      //$Team = $DbResult->fetch_assoc();
     280      //$Output .= ''<span class="MenuItem">Moje překlady: <a href="">Dokončené</a> <a href="">Rozpracované</a> <a href="">Exporty</a> Tým: <a href="">'.$Team['name'].'</a></span>';
     281      $Output .= $this->System->User->Name.' <a href="'.$this->System->Link('/?action=logout').'">'.T('Logout').'</a>'.
     282          ' <a href="'.$this->System->Link('/user.php?user='.$this->System->User->Id).'">'.T('My page').'</a>'.
     283          ' <a href="'.$this->System->Link('/Options.php').'">'.T('Options').'</a>'.
     284          ' <a title="Vámi přeložené texty" href="'.$this->System->Link('/TranslationList.php?user='.
     285          $this->System->User->Id.'&amp;group=0&amp;state=2&amp;text=&amp;entry=').'">'.T('Translated').'</a>'.
     286          ' <a title="Vaše rozpracované text" href="'.$this->System->Link('/TranslationList.php?user='.
     287          $this->System->User->Id.'&amp;group=0&amp;state=3&amp;text=&amp;entry=').'">'.T('Unfinished').'</a>'.
     288          ' <a title="Nikým nepřeložené texty" href="'.
     289          $this->System->Link('/TranslationList.php?user=0&amp;group=0&amp;state=1&amp;text=&amp;entry=').'">'.T('Untranslated').'</a>';
     290    } else
     291    {
     292      $Output .= '<a href="'.$this->System->Link('/login/').'">'.T('Login').'</a>&nbsp;'.
     293          '<a href="'.$this->System->Link('/registrace.php').'">'.T('Registration').'</a>';
     294    }
     295    //$Output .= ' <form action="?setlocale" method="get">';
     296    $Output .= ' <select onchange="window.location=\'?locale=\'+this.value">';
     297    foreach($LocaleManager->Available as $Locale)
     298    {
     299      if($Locale['Code'] == $LocaleManager->CurrentLocale->Texts->Code) $Selected = ' selected="selected"';
     300        else $Selected = '';
     301      $Output .= '<option title="" value="'.$Locale['Code'].'"'.$Selected.' onchange="this.form.submit()">'.$Locale['Title'].'</option>';
     302    }
     303    $Output .= '</select><noscript><span><input type="submit" value="Submit"/></span></noscript>';
     304    //$Output .= '</form>';
     305    $Output .= '</span></div>';
     306    return($Output);
     307  }
     308
     309  function ShowLoginBox()
     310  {
     311    $Output = '';
     312    if($this->System->User->Licence(LICENCE_USER))
     313    {
     314      // $Output .= 'Jste přihlášen jako: <b>'.$tUser->Id.'</b> <a href="index.php?Logout">Odhlásit</a>';
     315    } else
     316    {
     317      $Output .= '<strong>'.T('Login').':</strong>
     318      <form action="" method="post">
     319      <table>
     320      <tr>
     321      <td><input type="text" name="LoginUser" size="13" /></td>
     322      </tr>
     323      <tr>
     324      <td><input type="password" name="LoginPass" size="13" /></td>
     325      </tr>
     326      <tr>
     327      <th><input type="submit" value="'.T('Do login').'" /></th>
     328      </tr>
     329      </table>
     330      </form>';
     331    }
     332    return($Output);
     333  }
     334
     335  function ShowSearchBox()
     336  {
     337    $Output = '<strong>'.T('Search').':</strong>'.
     338        '<form action="'.$this->System->Link('/search/').'" method="get"><div>'.
     339        '<table>'.
     340        '<tr>'.
     341        '<td><input type="text" name="text" size="13" /></td>'.
     342        '</tr>'.
     343        '<tr>'.
     344        '<th><input type="submit" value="'.T('Do search').'" /></th>'.
     345        '</tr>'.
     346        '</table></div>'.
     347        '</form>';
     348    return($Output);
     349  }
     350
     351  function ShowMainMenu()
     352  {
     353    $Output = '<strong>'.T('Menu').':</strong>'.
     354        '<div class="verticalmenu"><ul>';
     355    foreach($this->System->Menu as $MenuItem)
     356      if($this->System->User->Licence($MenuItem['Permission']))
     357      {
     358        if(isset($MenuItem['Click'])) $OnClick = ' onclick="'.$MenuItem['Click'].'"';
     359        else $OnClick = '';
     360        if($MenuItem['Icon'] != '') $Icon = '<img src="'.$this->System->Link('/images/menu/'.$MenuItem['Icon']).'"/>';
     361        else $Icon = '';
     362        $Output .= '<li>'.$Icon.'<a class="verticalmenua" title="'.$MenuItem['Hint'].'" href="'.
     363          $MenuItem['Link'].'"'.$OnClick.'>'.$MenuItem['Title'].'</a></li>';
     364      }
     365      $Output .= '</ul></div>';
     366      return($Output);
     367  }
     368
     369  function ShowTranslatedMenu()
     370  {
     371    global $TranslationTree;
     372
     373    $Output = '<strong>'.T('Translate groups').':</strong><br /><div id="TranslationMenu">';
     374    $DbResult = $this->System->Database->select('Group', '`Id`, `Name`', '1 ORDER BY `Name`');
     375    while($Group = $DbResult->fetch_assoc())
     376    {
     377      $Output .= '<div id="menuitem-group'.$Group['Id'].'" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">'.
     378          '<a href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">'.str_replace(' ','&nbsp;',$Group['Name']).'</a></div>'.
     379          '<div id="group'.$Group['Id'].'" class="hidden-menu-item" onmouseover="show(\'group'.$Group['Id'].'\')" onmouseout="hide(\'group'.$Group['Id'].'\')">';
     380      $Output .= '&nbsp;<a title="Zde můžete začít překládat" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user=0&amp;entry=&amp;text=').'">Nepřeložené</a><br />'.
     381          '&nbsp;<a title="Přeložené texty, můžete zde hlasovat, nebo opravovat překlady" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=2&amp;user=0&amp;entry=&amp;text=').'">Přeložené</a><br />';
     382      if($this->System->User->Licence(LICENCE_USER))
     383      {
     384        $Output .= '&nbsp;<a title="Nedokončené překlady" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=3').'">Rozepsané</a><br />
     385        &nbsp;<a title="Všechny překlady, které jste přeložil" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;state=1&amp;user='.$this->System->User->Id).'&amp;entry=&amp;text=">Vlastní</a><br />';
     386      }
     387      $Output .= '&nbsp;<a title="Sestavit speciální filtr" href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&amp;action=filter').'">Filtr</a><br />';
     388      $Output .= '</div>';
     389    }
     390    $Output .= '</div>';
     391    return($Output);
     392  }
     393
     394  function ShowHeader()
     395  {
     396    $Output = ''.
     397    '<!DOCTYPE html>'.
     398    '<html>'.
     399    '<head>'.
     400    '<meta http-equiv="content-type" content="text/html; charset='.$this->System->Config['Web']['Charset'].'" />'.
     401    '<meta name="keywords" content="wow, quest, questy, questů, preklad, mangos, překlad, překládání, přeložený, přeložení, čeština, world of warcraft, open source, free, addon" />'.
     402    '<meta name="description" content="'.$this->System->Config['Web']['Description'].'" />'.
     403    '<meta name="robots" content="all" />'.
     404    '<link rel="stylesheet" href="'.$this->System->Link('/style/style.css').'" type="text/css" media="all" />'.
     405    '<script type="text/javascript" src="'.$this->System->Link('/style/global.js').'"></script>'.
     406    '<link rel="shortcut icon" href="'.$this->System->Link('/images/favicon.ico').'" />';
     407    $Output .= $this->System->ModuleManager->Modules['News']->ShowRSSHeader();
     408    $Title = $this->System->Config['Web']['Title'];
     409    if($this->Title != '') $Title = $this->Title.' - '.$Title;
     410    $Output .= '<title>'.$Title.'</title>'.
     411    '</head><body>';
     412
     413    $Output .= $this->ShowTopBar();
     414    $Output .= '<table class="page"><tr><td class="menu">';
     415    $Output .= $this->ShowMainMenu();
     416    $Output .= $this->System->ModuleManager->Modules['User']->ShowOnlineList();
     417    $Output .= '<br />';
     418    $Output .= $this->ShowSearchBox();
     419
     420    $Output .= '</td><td id="border-left"></td><td class="content">';
     421    return($Output);
     422  }
     423
     424  function ShowFooter()
     425  {
     426    global $ScriptStartTime, $Revision, $ReleaseTime;
     427
     428    $ScriptGenerateDuration = round(GetMicrotime() - $ScriptStartTime, 2);
     429
     430    $Output = '</td>'.
    431431      '<td class="menu2">';
    432                 $Output .= $this->ShowTranslatedMenu();
    433                 $Output .= '</td>'.
     432    $Output .= $this->ShowTranslatedMenu();
     433    $Output .= '</td>'.
    434434      '</tr><tr>'.
    435435      '<td colspan="4" class="page-bottom">'.T('Version').': '.$Revision.' ('.HumanDate($ReleaseTime).')'.
     
    438438      $this->System->Config['Web']['WebCounter'];
    439439
    440                 $Output .= '</td></tr>';
    441                 if($this->System->Config['Web']['ShowRuntimeInfo'] == true)
    442                         $Output .= '<tr><td colspan="3" style="text-align: center;">'.T('Generating duration').': '.
    443                 $ScriptGenerateDuration.' s / '.ini_get('max_execution_time').' s &nbsp;&nbsp; '.T('Used memory').': '.
    444                 HumanSize(memory_get_peak_usage(FALSE)).' / '.ini_get('memory_limit').'B &nbsp;&nbsp; <a href="http://validator.w3.org/check?uri='.
    445                 htmlentities('http://'.$_SERVER['HTTP_HOST'].GetRequestURI().'?'.$_SERVER['QUERY_STRING']).'">HTML validator</a></td></tr>';
    446                 $Output .= '</table>'.
     440    $Output .= '</td></tr>';
     441    if($this->System->Config['Web']['ShowRuntimeInfo'] == true)
     442      $Output .= '<tr><td colspan="3" style="text-align: center;">'.T('Generating duration').': '.
     443    $ScriptGenerateDuration.' s / '.ini_get('max_execution_time').' s &nbsp;&nbsp; '.T('Used memory').': '.
     444    HumanSize(memory_get_peak_usage(FALSE)).' / '.ini_get('memory_limit').'B &nbsp;&nbsp; <a href="http://validator.w3.org/check?uri='.
     445    htmlentities('http://'.$_SERVER['HTTP_HOST'].GetRequestURI().'?'.$_SERVER['QUERY_STRING']).'">HTML validator</a></td></tr>';
     446    $Output .= '</table>'.
    447447      '</body>'.
    448448      '</html>';
    449                 return($Output);
    450         }
    451 
    452         function ShowPage($Content)
    453         {
    454                 $Output = $this->ShowHeader().$Content.$this->ShowFooter();
    455                 if($this->System->Config['Web']['FormatOutput'])
    456               $Output = $this->FormatOutput($Output);
    457                 return($Output);
    458         }
    459 
    460         function FormatOutput($s)
    461         {
    462                 $out = '';
    463                 $nn = 0;
    464                 $n = 0;
    465                 while($s != '')
    466                 {
    467                         $start = strpos($s, '<');
    468                         $end = strpos($s, '>');
    469                         if($start != 0)
    470                         {
    471                                 $end = $start - 1;
    472                                 $start = 0;
    473                         }
    474                         $line = trim(substr($s, $start, $end + 1));
    475                         if(strlen($line) > 0)
    476                                 if($line[0] == '<')
    477                                 {
    478                                         if($s[$start + 1] == '/')
    479                                         {
    480                                                 $n = $n - 2;
    481                                                 $nn = $n;
    482                                         } else
    483                                         {
    484                                                 if(strpos($line, ' ')) $cmd = substr($line, 1, strpos($line, ' ') - 1);
    485                                                 else $cmd = substr($line, 1, strlen($line) - 2);
    486                                                 //echo('['.$cmd.']');
    487                                                 if(strpos($s, '</'.$cmd.'>')) $n = $n + 2;
    488                                         }
    489                                 }// else $line = '['.$line.']';
    490                                 //if($line != '') echo(htmlspecialchars(str_repeat(' ',$nn).$line."\n"));
    491                                 if($line != '') $out .= (str_repeat(' ', $nn).$line."\n");
    492                                 $s = substr($s, $end + 1, strlen($s));
    493                                 $nn = $n;
    494                 }
    495                 return($out);
    496         }
     449    return($Output);
     450  }
     451
     452  function ShowPage($Content)
     453  {
     454    $Output = $this->ShowHeader().$Content.$this->ShowFooter();
     455    if($this->System->Config['Web']['FormatOutput'])
     456          $Output = $this->FormatOutput($Output);
     457    return($Output);
     458  }
     459
     460  function FormatOutput($s)
     461  {
     462    $out = '';
     463    $nn = 0;
     464    $n = 0;
     465    while($s != '')
     466    {
     467      $start = strpos($s, '<');
     468      $end = strpos($s, '>');
     469      if($start != 0)
     470      {
     471        $end = $start - 1;
     472        $start = 0;
     473      }
     474      $line = trim(substr($s, $start, $end + 1));
     475      if(strlen($line) > 0)
     476        if($line[0] == '<')
     477        {
     478          if($s[$start + 1] == '/')
     479          {
     480            $n = $n - 2;
     481            $nn = $n;
     482          } else
     483          {
     484            if(strpos($line, ' ')) $cmd = substr($line, 1, strpos($line, ' ') - 1);
     485            else $cmd = substr($line, 1, strlen($line) - 2);
     486            //echo('['.$cmd.']');
     487            if(strpos($s, '</'.$cmd.'>')) $n = $n + 2;
     488          }
     489        }// else $line = '['.$line.']';
     490        //if($line != '') echo(htmlspecialchars(str_repeat(' ',$nn).$line."\n"));
     491        if($line != '') $out .= (str_repeat(' ', $nn).$line."\n");
     492        $s = substr($s, $end + 1, strlen($s));
     493        $nn = $n;
     494    }
     495    return($out);
     496  }
    497497}
Note: See TracChangeset for help on using the changeset viewer.