<?php

include_once('../Common/Global.php');


class PageIS extends Page
{
  var $FullTitle = 'Správa dat';
  var $ShortTitle = 'Správa dat';
  var $MenuItems = array();

  function Show()
  {
    global $FormClasses;
     
    if(!$this->System->Modules['User']->CheckPermission('IS', 'Manage')) 
      return('Nemáte oprávnění');

    $DbResult = $this->Database->select('ISMenuItem', '*');
    while($DbRow = $DbResult->fetch_assoc())
    {
      $this->MenuItems[$DbRow['Id']] = $DbRow;
    }
    
    $Output = '<table style="width: 100%"><tr><td style="width: 20%; vertical-align: top;">';
    $Output .= '<strong>Nabídka:</strong><br/>'.$this->ShowMenuItem(''); 
    $Output .= '</td><td style="width: 80%; vertical-align: top;">';
    
    if(array_key_exists('t', $_GET)) $_SESSION['Table'] = $_GET['t'];
    if(!array_key_exists('Table', $_SESSION)) $_SESSION['Table'] = '';
    if(array_key_exists('a', $_GET)) $_SESSION['Action'] = $_GET['a'];
    if(array_key_exists('id', $_GET)) $_SESSION['Id'] = $_GET['id'];
       
    if(!array_key_exists('Action', $_SESSION)) $_SESSION['Action'] = 'list';
    
    if($_SESSION['Action'] == 'list') $Output .= $this->ShowList($_SESSION['Table']);
    else if($_SESSION['Action'] == 'edit') $Output .= $this->ShowEdit($_SESSION['Table'], $_SESSION['Id']);
    else if($_SESSION['Action'] == 'add') $Output .= $this->ShowAdd($_SESSION['Table']);
    else if($_SESSION['Action'] == 'view') $Output .= $this->ShowView($_SESSION['Table'], $_SESSION['Id']);
    else if($_SESSION['Action'] == 'delete') $Output .= $this->ShowDelete($_SESSION['Table'], $_SESSION['Id']);
    $Output .= '</td></tr></table>';
    
    return($Output);
  }
  
  function ShowEdit($Table, $Id)
  {
    $Output = '';
    if(array_key_exists('o', $_GET))
    {
      if($_GET['o'] == 'save')
      {
        $Form = new Form($Table);
        $Form->LoadValuesFromForm();
        $Form->SaveValuesToDatabase($Id);
        $Output .= $this->SystemMessage('Úprava položky', 'Položka upravena');
        $_SESSION['Action'] = 'view';
        $Output .= $this->ShowView($Table, $Id);   
      }
    } else 
    {
      $Form = new Form($Table);
      $Form->LoadValuesFromDatabase($Id);
      $Form->OnSubmit = '?a=edit&amp;o=save';
      $Output .= $Form->ShowEditForm();
      $Output .= '<br/><div style="text-align: center;">';
      $Output .= '<a href="?a=view"><img alt="Prohlížet" title="Prohlížet" src="'.
      $this->System->Link('/images/view.png').'"/></a>';
      $Output .= '<a href="?a=list"><img alt="Seznam" title="Seznam" src="'.
        $this->System->Link('/images/list.png').'"/></a>';
      $Output .= '<a href="?a=delete" ><img alt="Odstranit" title="Odstranit" src="'.
        $this->System->Link('/images/delete.png').'" onclick="return confirmAction(\'Opravdu smazat položku?\');"/></a>';
      $Output .= '</div>';
    }
    return($Output);
  }
  
  function ShowDelete($Table, $Id)
  {
    $Output = '';
    $this->Database->delete($Table, 'Id='.$Id);
    $Output .= $this->SystemMessage('Odstranění položky', 'Položka odstraněna');
    $_SESSION['Action'] = 'list';
    $Output .= $this->ShowList($Table);   
    return($Output);
  }
  
  function ShowAdd($Table)
  {
    $Output = '';
    if(array_key_exists('o', $_GET))
    {
      if($_GET['o'] == 'save')
      {
        $Form = new Form($Table);
        $Form->LoadValuesFromForm();
        $Form->SaveValuesToDatabase(0);
        $Output .= $this->SystemMessage('Přidání položky', 'Nová položka vytvořena');
        $_SESSION['Action'] = 'view';
        $Id = $this->Database->insert_id;
        $_SESSION['Id'] = $Id;
        $this->Database->update($Table, 'Id='.$Id, 
          array('UserCreate' => $this->System->Modules['User']->User['Id'], 
          'TimeCreate' => 'NOW()'));
        $Output .= $this->ShowView($Table, $Id);   
      }
    } else 
    {
      $Form = new Form($Table);
      $Form->OnSubmit = '?a=add&amp;o=save';
      $Output .= $Form->ShowEditForm();
      $Output .= '<br/><div style="text-align: center;">';
      $Output .= '<a href="?a=list"><img alt="Seznam" title="Seznam" src="'.
        $this->System->Link('/images/list.png').'"/></a>';
      $Output .= '</div>';
    }
    return($Output);
  }
  
  function ShowView($Table, $Id)
  {
    global $FormTypes;
    
    $Form = new Form($Table);
    $Form->LoadValuesFromDatabase($Id);
    $Form->OnSubmit = '?a=view';
    $Output = $Form->ShowViewForm();
    $Output .= '<br/><div style="text-align: center;">';
    $Output .= '<a href="?a=edit"><img alt="Upravit" title="Upravit" src="'.
      $this->System->Link('/images/edit.png').'"/></a>';
    $Output .= '<a href="?a=list"><img alt="Seznam" title="Seznam" src="'.
      $this->System->Link('/images/list.png').'"/></a>';
    $Output .= '<a href="?a=delete"><img alt="Odstranit" title="Odstranit" src="'.
      $this->System->Link('/images/delete.png').'" onclick="return confirmAction(\'Opravdu smazat položku?\');"/></a>';
    $Output .= '</div><br/>';
    
    // Show ManyToOne relations
    foreach($Form->Definition['Items'] as $Index => $Item)
    if((array_key_exists($Item['Type'], $FormTypes) and ($FormTypes[$Item['Type']]['Type'] == 'ManyToOne')))
    {
      $Output .= '<div style="text-align: center;">'.$Form->Definition['Title'].'</div>';
      $Output .= $this->ShowList($FormTypes[$Item['Type']]['Table'], '`'.$FormTypes[$Item['Type']]['Ref'].'`='.$Id).'<br/>';
    }    
    return($Output);
  }
  
  function ShowList($Table, $Filter = '')
  {   
    global $Type, $FormTypes, $FormClasses;
    
    if($Table != '') $FormClass = $FormClasses[$Table];
      else return($this->SystemMessage('Chyba', 'Tabulka nenalezena'));
    if($Filter != '') $Filter = ' WHERE '.$Filter;
    $DbResult = $this->Database->query('SELECT COUNT(*) FROM `'.$FormClass['Table'].'`'.$Filter);
    $DbRow = $DbResult->fetch_row();
    $PageList = GetPageList($DbRow[0]);    

    $Output = $PageList['Output'];
    $Output .= '<table class="WideTable" style="font-size: small;">';
   
    foreach($FormClass['Items'] as $ItemIndex => $FormItem)
    if(!array_key_exists($FormItem['Type'], $FormTypes) or 
      (array_key_exists($FormItem['Type'], $FormTypes) and ($FormTypes[$FormItem['Type']]['Type'] != 'ManyToOne')))
      $TableColumns[] = array('Name' => $ItemIndex, 'Title' => $FormItem['Caption']);
    $TableColumns[] = array('Name' => '', 'Title' => 'Akce');
    if(!array_key_exists('DefaultSortColumn', $FormClass))
      $FormClass['DefaultSortColumn'] = 'Id';
    $Order = GetOrderTableHeader($TableColumns, $FormClass['DefaultSortColumn'], 0);
    $Output .= $Order['Output'];

    $Query = 'SELECT * FROM `'.$FormClass['Table'].'`'.$Filter.' '.$Order['SQL'].$PageList['SQLLimit'];
    
    $DbResult = $this->Database->query($Query);
    while($Row = $DbResult->fetch_assoc()) 
    { 
      $Output .= '<tr>';
      foreach($FormClass['Items'] as $ItemIndex => $FormItem)
      if(!array_key_exists($FormItem['Type'], $FormTypes) or 
      (array_key_exists($FormItem['Type'], $FormTypes) and ($FormTypes[$FormItem['Type']]['Type'] != 'ManyToOne')))
      {
        //$Output .= '<td>'.$Row[$ItemIndex].'</td>';
        $UseType = $UseType = $FormItem['Type'];
        if(array_key_exists($FormItem['Type'], $FormTypes))
        {
          if(!array_key_exists($FormItem['Type'], $this->System->Type->TypeDefinitionList)) 
            $this->System->Type->RegisterType($FormItem['Type'], '', 
              $FormTypes[$FormItem['Type']]);
          if($FormTypes[$FormItem['Type']]['Type'] == 'Reference') 
          $UseType = 'OneToMany';
          else 
          if($FormTypes[$FormItem['Type']]['Type'] == 'Enumeration') 
          $UseType = 'Enumeration';
        }
        $Row[$ItemIndex] = $this->System->Type->ExecuteTypeEvent($UseType, 'OnLoadDb', 
          array('Value' => $Row[$ItemIndex], 'Name' => $ItemIndex, 
          'Type' => $FormItem['Type']));
        $Value = $this->System->Type->ExecuteTypeEvent($UseType, 'OnView', 
          array('Value' => $Row[$ItemIndex], 'Name' => $ItemIndex, 
          'Type' => $FormItem['Type']));
        if($Value == '') $Value = '&nbsp;';
        $Output .= '<td>'.$Value.'</td>';
      }
      $Output .= '<td><a href="?a=view&amp;t='.$Table.'&amp;id='.$Row['Id'].'"><img alt="Ukázat" title="Ukázat" src="'.
        $this->System->Link('/images/view.png').'"/></a>'.
        '<a href="?a=edit&amp;t='.$Table.'&amp;id='.$Row['Id'].'"><img alt="Upravit" title="Upravit" src="'.
        $this->System->Link('/images/edit.png').'"/></a>'.
        '<a href="?a=delete&amp;t='.$Table.'&amp;id='.$Row['Id'].'"><img alt="Smazat" title="Smazat" src="'.
        $this->System->Link('/images/delete.png').'" onclick="return confirmAction(\'Opravdu smazat položku?\');"/></a></td>';
      $Output .= '</tr>';
    }
    $Output .= '</table>';
    $Output .= $PageList['Output'];
    $Output .= '<br/><div style="text-align: center;">';
    $Output .= '<a href="?a=add"><img alt="Přidat" title="Přidat" src="'.
        $this->System->Link('/images/add.png').'"/></a>';
    $Output .= '</div>';
    return($Output);
  }
  
  function ShowMenuItem($Parent)
  {
    $Output = '<ul style="list-style: none; margin-left:1em; padding-left:0em;">';
    foreach($this->MenuItems as $MenuItem)
    if($MenuItem['Parent'] == $Parent)
    {
      $LinkTitle = $MenuItem['Name'];
      if($MenuItem['Table'] != '') $LinkTitle = MakeLink('?t='.$MenuItem['Table'].'&amp;a=list', $LinkTitle);
      $Output .= '<li>'.$LinkTitle.'</li>';
      $Output .= $this->ShowMenuItem($MenuItem['Id']);
    }
    $Output .= '</ul>';
    return($Output);
  }
}

$System->AddModule(new PageIS());
$System->Modules['PageIS']->GetOutput();

?>
