Changeset 538


Ignore:
Timestamp:
May 14, 2013, 9:21:06 PM (12 years ago)
Author:
chronos
Message:
  • Upraveno: Chybné SQL dotazy nyní vyvolávají výjimku.
  • Přidáno: Vlastní obsluha výjimek s záznamem hlaášení podobně jako při obsluze chyb.
  • Upravno: Abecední řazení seznamu překladových skupin v pravém panelu.
  • Upraveno: Zobrazování odřádkování při výpisu chybových záznamů.
  • Opraveno: Omezení přístupu ke zobrazení záznamu pouze na správce.
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/index.php

    r533 r538  
    66function ShowMenu()
    77{
    8   global $System;
     8  global $System, $Config;
    99 
    1010  $Output = '<h3>Volby pro správu</h3>'.
    11   '<a href="https://wowpreklad.zdechov.net/mysql/">Správa databáze</a><br/>'.
     11  '<a href="https://'.$Config['Web']['Host'].'/phpmyadmin/">Správa databáze</a><br/>'.
    1212  '<small>Rozhraní phpMyAdmin pro přímou správu databáze</small><br/><br/>'.
    1313  '<a href="'.$System->Link('/action.php?action=dbkit').'">DB opravy</a><br/>'.
     
    2323  '<a href="'.$System->Link('/admin/?action=addnew').'">Přidání aktuality</a><br/>'.
    2424  '<small>Přidá aktulitu na hlavní stranu projektu</small><br/><br/>'.   
    25   '<a href="'.$System->Link('/admin/?action=error').'">Testovací chyba</a><br/>'.
    26   '<small>Vyvolá testovací chybu</small><br/><br/>';   
     25  '<a href="'.$System->Link('/admin/?action=testing').'">Testování</a><br/>'.
     26  '<small>Testovací funkce</small><br/><br/>';   
    2727  return($Output);
    2828}
     
    6868}
    6969
    70 function TestError()
     70function TestError($P1, $P2)
    7171{
    7272  $s = $TT[0];
     73}
     74
     75function TestException($P1, $P2)
     76{
     77  throw new Exception('Test exception');
     78}
     79
     80function TestSQLError($Query)
     81{
     82  global $System;
     83 
     84  $DbResult = $System->Database->query($Query); 
     85}
     86
     87function Testing()
     88{
     89  global $System;
     90 
     91  $Output = '<a href="'.$System->Link('/admin/?action=error').'">Testovací chyba</a><br/>'.
     92  '<small>Vyvolá testovací chybu</small><br/><br/>'.
     93  '<a href="'.$System->Link('/admin/?action=exception').'">Testovací výjimka</a><br/>'.
     94  '<small>Vyvolá testovací chybu</small><br/><br/>'.
     95  '<a href="'.$System->Link('/admin/?action=sqlerror').'">Chybný SQL dotaz</a><br/>'.
     96  '<small>Vyvolá testovací chybu</small><br/><br/>';
     97  return($Output);
    7398}
    7499
     
    80105    if($_GET['action'] == 'img_level') $Output .= ImgLevelShow();
    81106    else if($_GET['action'] == 'delerrlog') $Output .= DeleteErrorLog();
    82     else if($_GET['action'] == 'error') $Output .= TestError();
     107    else if($_GET['action'] == 'error') $Output .= TestError(12, 'test');
     108    else if($_GET['action'] == 'exception') $Output .= TestException(12, 'test');
     109    else if($_GET['action'] == 'sqlerror') $Output .= TestSQLError('SELECT dads FROM sdas');
     110    else if($_GET['action'] == 'testing') $Output .= Testing();
    83111    else if($_GET['action'] == 'addnew')
    84112    {
  • trunk/dictionary.php

    r533 r538  
    130130  if($User->Licence(LICENCE_USER))
    131131  {
    132     $System->Database->query('DELETE FROM `Dictionary` WHERE (`User`='.$User->Id.') AND (`Id`='.$_GET['id'].')');
     132    $System->Database->query('DELETE FROM `Dictionary` WHERE (`User`='.$User->Id.') AND (`Id`='.($_GET['id'] * 1).')');
    133133    $Output = ShowMessage('Záznam odstraněn.');
    134134  } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
     
    142142  if($User->Licence(LICENCE_USER))
    143143  {
    144     $DbResult = $System->Database->query('SELECT * FROM `Dictionary` WHERE `Id`='.$_GET['id']);
    145     $DbRow = $DbResult->fetch_assoc();
    146     $DbResult = $System->Database->query('SELECT * FROM `Dictionary` WHERE (`User` IS NULL) '.
    147       'AND (`Entry`='.$DbRow['Entry'].') AND (`Language`= '.$Config['OriginalLanguage'].')');
    148     $DbRow2 = $DbResult->fetch_assoc();
    149     $Output = '<form action="dictionary.php?action=save" method="post">'.
     144    $DbResult = $System->Database->query('SELECT * FROM `Dictionary` WHERE `Id`='.($_GET['id'] * 1));
     145    if($DbResult->num_rows > 0)
     146    {
     147      $DbRow = $DbResult->fetch_assoc();
     148      $DbResult = $System->Database->query('SELECT * FROM `Dictionary` WHERE (`User` IS NULL) '.
     149        'AND (`Entry`='.$DbRow['Entry'].') AND (`Language`= '.$Config['OriginalLanguage'].')');
     150      $DbRow2 = $DbResult->fetch_assoc();
     151      $Output = '<form action="dictionary.php?action=save" method="post">'.
    150152        '<fieldset><legend>Upravení slova</legend>'.
    151153        '<input type="hidden" name="id"  value="'.$_GET['id'].'"/>'.
     
    159161        '</fieldset>'.
    160162        '</form>';
     163    } else $Output = ShowMessage('Položka nenalezena', MESSAGE_CRITICAL);
    161164  } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
    162165  return($Output);
  • trunk/includes/Database.php

    r525 r538  
    3838  var $ShowSQLQuery = false;
    3939 
    40   function __construct($Host, $User, $Password, $Database)
     40  function __construct()
     41  {   
     42  }
     43 
     44  function Connect($Host, $User, $Password, $Database)
    4145  {   
    4246    if($this->Type == 'mysql') $ConnectionString = 'mysql:host='.$Host.';dbname='.$Database;
     
    6165    {
    6266      $Result->num_rows = $Result->PDOStatement->rowCount();
     67      $this->insert_id = $this->PDO->lastInsertId();
    6368    } else
    6469    {
     
    6671      $this->Error = $this->Error[2];
    6772      if(($this->Error != '') and ($this->ShowSQLError == true))
    68       {
    6973        echo('<div><strong>SQL Error: </strong>'.$this->Error.'<br />'.$Query.'</div>');
    70         echo(debug_backtrace());
    71       }
     74        throw new Exception('SQL Error: '.$this->Error);
    7275    }
    73     $this->insert_id = $this->PDO->lastInsertId();
    7476    return($Result); 
    7577  }
  • trunk/includes/Page.php

    r536 r538  
    234234
    235235  $Output = '<strong>Překladové skupiny:</strong><br /><div id="TranslationMenu">';
    236   $DbResult = $System->Database->select('Group', 'Id, Name');
     236  $DbResult = $System->Database->select('Group', 'Id, Name', '1 ORDER BY Name');
    237237  while($Group = $DbResult->fetch_assoc())
    238238  {
  • trunk/includes/Version.php

    r537 r538  
    11<?php
    22
    3 $Revision = 537; // Subversion revision
     3$Revision = 538; // Subversion revision
    44$DatabaseRevision = 537; // Database structure revision
    5 $ReleaseTime = '2013-05-12';
     5$ReleaseTime = '2013-05-14';
    66
    77?>
  • trunk/includes/error.php

    r507 r538  
    11<?php
    22
    3 function EmptyErrorHandler($Number, $Message, $Filename, $LineNumber, $Variables)
    4 {
    5 }
    6 
    7 function CustomErrorHandler($Number, $Message, $Filename, $LineNumber, $Variables)
     3function Report($Backtrace)
    84{
    95  global $Config;
    106 
    11   set_error_handler('EmptyErrorHandler');
     7  $Error = '';
     8  $Date = date('Y-m-d H:i:s');     
     9  foreach($Backtrace as $Item)
     10  {
     11    if(!array_key_exists('line', $Item)) $Item['line'] = '';
     12    if(!array_key_exists('file', $Item)) $Item['file'] = '';
     13    if(!array_key_exists('function', $Item)) $Item['function'] = '';
     14    $Error .= ' '.$Item['file'].'('.$Item['line'].")\t".$Item['function'];
     15    $Arguments = '';
     16    if(array_key_exists('args', $Item) and is_array($Item['args']))
     17      foreach($Item['args'] as $Item)
     18      {
     19        if(is_array($Item)) $Arguments .= "'".serialize($Item)."',";
     20        else $Arguments .= "'".serialize($Item)."',";
     21      }
     22    if(strlen($Arguments) > 0) $Error .= '('.substr($Arguments, 0, -1).')';
     23    $Error .= "\n";
     24  }
     25  $Error .= "\n";
     26  //if($Config['Web']['ErrorLogFile'] != '')
     27    //error_log($Error, 3, $Config['Web']['ErrorLogFile']);
     28  // Pošli mi zprávu (pokud je to kritická chyba)
     29    //mail($Config['Web']['AdminEmail'], $Config['Web']['Title'].' - Chybové hlášení', $Error);
     30  // Show error message
     31  if($Config['Web']['ShowPHPError'] == true)
     32  {
     33    echo('<?xml version="1.0" encoding="utf-8"?>'."\n".
     34    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'.
     35    '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">'.
     36    '<head>'.
     37    '<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />'.
     38    '</head><body>'.   
     39    'Došlo k vnitřní chybě!<br /> O chybě byl uvědoměn správce webu a chybu brzy odstraní.<br /><br />');
     40    echo('<pre>'.$Error.'</pre><br />');
     41    echo('</body></html>');
     42  }
     43  WriteLog($Error, LOG_TYPE_ERROR);
     44}
    1245
    13   $Date = date('Y-m-d H:i:s');    // časové razítko položky
     46function ErrorHandler($Number, $Message, $FileName, $LineNumber, $Variables)
     47{
     48  $UserErrors = E_ALL;  //E_ERROR | E_WARNING | E_PARSE;
    1449  $ErrorType = array
    1550  (
     
    2661    1024 => 'User Notice'
    2762  );
    28   $UserErrors = E_ALL;  //E_ERROR | E_WARNING | E_PARSE;
    2963 
    3064  if(($UserErrors & $Number))
    3165  {
    32     $Error = '# '.$Date.' : '.$Message.' on line '.$LineNumber."\n";
    3366    $Backtrace = debug_backtrace();
    34     $Backtrace[0]['function'] = '';
     67    $Backtrace[0]['function'] = $Message;
    3568    $Backtrace[0]['args'] = '';
    36     //$First = array_shift($Backtrace);
    37     //print_r($First);
    38    
    39     //array_unshift($Backtrace, $First);
    40     //array_shift($Backtrace);
    41     //print_r($Backtrace);
    42     foreach($Backtrace as $Item)
    43     {
    44       //print_r($Item);
    45       if(!array_key_exists('line', $Item)) $Item['line'] = '';
    46       if(!array_key_exists('file', $Item)) $Item['file'] = '';
    47       if(!array_key_exists('function', $Item)) $Item['function'] = '';
    48       $Error .= ' '.$Item['file'].'('.$Item['line'].")\t".$Item['function'];
    49       $Arguments = '';
    50       if(array_key_exists('args', $Item) and is_array($Item['args']))
    51         foreach($Item['args'] as $Item)
    52         {
    53           if(is_array($Item)) $Arguments .= "'".serialize($Item)."',";
    54           else $Arguments .= "'".serialize($Item)."',";
    55         }
    56       if(strlen($Arguments) > 0) $Error .= '('.substr($Arguments, 0, -1).')';
    57       $Error .= "\n";
    58      
    59     }
    60     $Error .= "\n";
    61     //if($Config['Web']['ErrorLogFile'] != '')
    62       //error_log($Error, 3, $Config['Web']['ErrorLogFile']);
    63     // Pošli mi zprávu (pokud je to kritická chyba)
    64       //mail($Config['Web']['AdminEmail'], $Config['Web']['Title'].' - Chybové hlášení', $Error);
    65     // Show error message
    66     if($Config['Web']['ShowPHPError'] == true)
    67     {
    68       echo('<?xml version="1.0" encoding="utf-8"?>'."\n".
    69       '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'.
    70       '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">'.
    71       '<head>'.
    72       '<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />'.
    73       '</head><body>'.   
    74       'Došlo k vnitřní chybě!<br /> O chybě byl uvědoměn správce webu a chybu brzy odstraní.<br /><br />');
    75       echo('<pre>'.$Error.'</pre><br />');      // V případě ladění chybu i zobraz
    76       echo('</body></html>');
    77     }
    78     WriteLog($Error, LOG_TYPE_ERROR);
     69    $Backtrace[0]['file'] = $FileName;
     70    $Backtrace[0]['line'] = $LineNumber;
     71    Report($Backtrace);
    7972    if((E_ERROR | E_PARSE) & $Number) die();
    8073  }
    81   set_error_handler('CustomErrorHandler');
    8274}
    8375
    84 //set_error_handler('CustomErrorHandler');
     76function ExceptionHandler(Exception $Exception)
     77{
     78  $Backtrace = $Exception->getTrace();   
     79  array_unshift($Backtrace, array(
     80    'function' => $Exception->getMessage(),
     81    'file' => $Exception->getFile(),
     82    'line' => $Exception->getLine(),
     83  ));
     84  Report($Backtrace);
     85  die();
     86}
    8587
    8688?>
  • trunk/includes/global.php

    r536 r538  
    4747  $User = new User($System);
    4848 
    49   set_error_handler('CustomErrorHandler');
     49  set_error_handler('ErrorHandler');
     50  set_exception_handler('ExceptionHandler');
    5051
    5152  // TODO: Global initialized variable should be removed
  • trunk/includes/system.php

    r507 r538  
    3232           
    3333    $this->Config = $Config;
    34     $this->Database = new Database($this->Config['Database']['Host'],
     34    $this->Database = new Database();
     35    $this->Database->Connect($this->Config['Database']['Host'],
    3536      $this->Config['Database']['User'], $this->Config['Database']['Password'],
    3637      $this->Config['Database']['Database']);
  • trunk/log.php

    r536 r538  
    5757      $Output .= '<a href="log.php?type='.$LogType['Id'].'" style="color:'.$LogType['Color'].'" title="'.$LogType['Name'].'">'.$LogType['Name'].'</a> ';
    5858    }
    59   }
    6059  // echo ' Formát: datum: text zprávy (uživatel, IP)<br /><br />';
    6160  $Output .= '<br /><br />';
     
    9291  {
    9392        if($Line['Type'] == LOG_TYPE_ERROR) $Line['Text'] = htmlspecialchars($Line['Text']);
    94     $Output .= '<tr><td>'.$Line['Date'].'</td>'.
     93    $Line['Text'] = str_replace("\n", '<br>', $Line['Text']);
     94        $Output .= '<tr><td>'.$Line['Date'].'</td>'.
    9595    '<td>'.$Line['LogName'].'</td>'.
    9696    '<td><span style="color: '.$Line['LogColor'].'">'.$Line['Text'].'</span></td>'.
     
    100100  $Output .= '</table>'.
    101101    $PageList['Output'];
    102          
     102  } else $Output .= ShowMessage('Nemáte oprávnění.', MESSAGE_CRITICAL);
     103 
    103104  ShowPage($Output);     
    104105}
Note: See TracChangeset for help on using the changeset viewer.