English
Kamil Dudka

Drobné programy (C, C++, C#, ...)

Detail souboru

Jméno:Stáhnouttransporter.php [Stáhnout]
Detekovaná znaková sada:ISO-8859-2 - [Stáhnout jako UTF-8]
Umístění: tiny > IIS > proj
Velikost:11.8 KB
Poslední změna:2022-09-09 13:06

Zdrojový kód

<?php
include_once ('engine/ui.php');
 
// Check user authorization to access this page
UserAuth::singleton()-> tryAccess('transporter');
 
// Load design
HtStyleLink::linkUserStyle();
$layout= new BasicLayout;
$canvas= HtBlock::factory ('div', $layout, '#pageContent');
StupidIe::patchIfNeeded();
 
// menu initialization
$page= @$_GET['page'];
new MenuTransporter ($layout, 'routes');
pageRoutes();
/*new MenuTransporter ($layout, $page);
switch ($page) {
  default:
  case 'routes':
    pageRoutes();
    break;
}*/
$layout-> draw();
// end of main()
 
function pageRoutes() {
  $layout= $GLOBALS['layout'];
  $canvas= $GLOBALS['canvas'];
  $szHrefBase=  Page::linkToWebRoot()."/transporter".Page::phpFileExt()."?page=routes";
  $szUser= UserAuth::singleton()-> getUser();
  $q= new DbQuery ("SELECT ico FROM users WHERE user='$szUser'");
  $res= $q->fetchArray();
  $ico= $res['ico'];
 
  if (@$_GET['op']=='addRoute') {
    addRoute($ico, $szHrefBase);
    return;
  }
 
  if (isset ($_GET['route'])) {
    routeDetail ($ico, $szHrefBase);
    return;
  }
 
  define('TITLE', 'Přehled spojů');
  HtTitle::singleton()-> setTitle(TITLE);
  HtInline::factory ('h1', $canvas)-> addText(TITLE);
  $q= new DbQuery (
    "SELECT routes.route_id, UNIX_TIMESTAMP(route_date) AS route_date, UNIX_TIMESTAMP(route_date) AS route_time,".
    "route_from, route_to, duration, ".
    "COUNT(DISTINCT tickets.seat_id) AS cap, COUNT(DISTINCT order_items.seat_id) AS util, ".
    "SUM(IF(order_items.seat_id IS NOT NULL AND order_items.seat_id=tickets.seat_id, tickets.price, 0)) AS sale ".
    "FROM routes LEFT JOIN tickets USING (route_id) LEFT JOIN order_items USING (route_id) ".
    "WHERE ico='$ico' ".
    "GROUP BY routes.route_id ".
    "ORDER BY route_date"
    );
  define('ALIGN_RIGHT','text-align:right;');
  define('BOLD', 'font-weight:bold;');
  $resTable= new QueryResult ($canvas,
    Array ('č.','Datum','Odjezd','Z','Do','Doba jízdy','Kapacita','Vytížení','Tržba','Jízdenky',''),
    Array (ALIGN_RIGHT, ALIGN_RIGHT, ALIGN_RIGHT, 5=>ALIGN_RIGHT, ALIGN_RIGHT, ALIGN_RIGHT, ALIGN_RIGHT.BOLD)
    );
  for ($i=0; $i< $q->getNumRows(); $i++) {
    $row= $q->fetchArray();
    $row['route_date']= date ("j.n.Y", $row["route_date"]);
    $row['route_time']= date ("H:i", $row["route_time"]);
    if ($row['duration'])
      $row['duration'].= ' min';
    if ($row['cap'] && $row['util'])
      $row['util']= number_format((float)$row['util']/$row['cap']*100,2).' %';
    else
      $row['util']= '';
    if ($row['sale'])
      $row['sale']= number_format($row['sale'],0,'.',' ').'&nbsp;Kč';
    else
      $row['sale']= '';
    $row []= '<a href="'.$szHrefBase.'&amp;route='.$row['route_id'].'">zobrazit</a>';
    $row []= '<a href="'.$szHrefBase.'&amp;route='.$row['route_id'].'&amp;op=addTickets">přidat</a>';
    $resTable->addRow($row);
  }
  $menu= new Menu ('Spoje');
  $menu-> addItem ($szHrefBase.'&amp;op=addRoute', 'Přidat spoj');
  $layout-> addToBegin($menu);
}
 
function routeDetail($ico, $szHrefBase) {
  $route= $_GET['route'];
  if (!ini_get ("magic_quotes_gpc")) {
    // Security..
    $route= addslashes($route);
  }
 
  $q= new DbQuery (
    "SELECT route_id, UNIX_TIMESTAMP(route_date) AS route_date, route_from, route_to, duration ".
    "FROM routes WHERE ico='$ico' AND route_id='$route'"
    );
  if ($q->getNumRows() !=1) {
    // navigation error, possible attack
    Header ('Location: '.$szHrefBase);
    exit();
  }
 
  $bAddTickets= (@$_GET['op']=='addTickets');
 
  $layout= $GLOBALS['layout'];
  $canvas= $GLOBALS['canvas'];
  define('TITLE','Detail spoje');
  HtTitle::singleton()-> setTitle(TITLE);
  HtInline::factory ('h1', $canvas)-> addText(TITLE);
  $szHrefAddTickets= $szHrefBase.'&amp;route='.$route.'&amp;op=addTickets';
  $menu= new Menu('Jízdenky');
  $menu-> addItem ($szHrefAddTickets, 'Přidat jízdenky', $bAddTickets ? '.menuItemSelected':'');
  $menu-> addItem ($szHrefBase, 'Zpět na přehled spojů');
  $layout-> addToBegin($menu);
 
  $row= $q->fetchArray();
  $info= new SimpleInfoMulticol($canvas, 2);
  $info-> setStyle ('.infoFrame');
  $info-> addPair (0, 'Číslo spoje', $row['route_id']);
  $info-> addPair (0, 'Datum', date ('j.n.Y', $row['route_date']));
  $info-> addPair (0, 'Odjezd', date ('H:i', $row['route_date']));
  $info-> addPair (1, 'Z', $row['route_from']);
  $info-> addPair (1, 'Do', $row['route_to']);
  $info-> addPair (1, 'Doba jízdy', $row['duration'].' min');
 
  if ($bAddTickets) {
    HtInline::factory ('h2', $canvas)-> addText('Přidat jízdenky');
 
    $priceInput= new PriceInput ('price');
    $price= SimpleForm::lastValue('price');
    $count= SimpleForm::lastValue('count');
 
    $bErrCount= !CustomInput::chkNum ($count) || (!$count);
    $bErrPrice= !$priceInput->isValid();
    $bErr= $bErrCount || $bErrPrice;
    $state= @$_POST['addTickets'];
    if ($bErr && !empty ($state))
      $state='errInput';
    switch ($state) {
      case 'request':
        $block= HtBlock::factory ('div', $canvas, '.infoFrame');
        HtInline::factory ('p', $block)-> addText('Chcete přidat <b>'.$count.'</b> jízdenek, každou za <b>'.$price.'&nbsp;Kč</b>?');
        $yesno= HtBlock::factory ('div', $block, '.yesno');
        $form= HtInline::factory ('form', $yesno, '', Array(
          'method' => 'post',
          'action' => $szHrefAddTickets
          ));
        $div= HtInline::factory ('div', $form);
        HtSingle::factory ('input', $div, '', Array (
          'name'   => 'addTickets',
          'type'   => 'hidden',
          'value'  => 'confirmed'
          ));
        HtSingle::factory ('input', $div, '', Array (
          'name'   => 'price',
          'type'   => 'hidden',
          'value'  => $price
          ));
        HtSingle::factory ('input', $div, '', Array (
          'name'   => 'count',
          'type'   => 'hidden',
          'value'  => $count
          ));
        HtSingle::factory ('input', $div, '', Array (
          'type'   => 'submit',
          'value'  => 'Ano'
          ));
        $form= HtInline::factory ('form', $yesno, '', Array(
          'method' => 'post',
          'action' => $szHrefBase.'&amp;route='.$route
          ));
        $div= HtInline::factory ('div', $form);
        HtSingle::factory ('input', $div, '', Array (
          'type'   => 'submit',
          'value'  => 'Ne'
          ));
        break;
 
      case 'confirmed':
        $q= new DbQuery (
          "SELECT MAX(seat_id) AS last_id FROM tickets ".
          "WHERE route_id=$route"
          );
        $last_id=0;
        if ($q->getNumRows()) {
          $row= $q->fetchArray();
          $last_id= $row['last_id'];
        }
        for ($i=0, $last_id++; $i<$count; $i++, $last_id++) {
          new DbQuery (
            "INSERT INTO tickets SET ".
            "route_id=$route, seat_id=$last_id, price=$price"
            );
        }
        redirTo ($szHrefBase.'&route='.$route);
        //HtInline::factory ('p', $canvas)-> addText ('Bylo přidáno <b>'.$count.'</b> jízdenek za celkem <b>'.($count*$price).'&nbsp;Kč</b>.');
        break;
 
      default:
        $p= HtInline::factory ('p', $canvas, '')-> addText('[ <a href="'.$szHrefBase.'&amp;route='.$route.'">Zrušit</a> ]');
        $form= new SimpleForm ($canvas,
          $szHrefAddTickets,
          'Přidat jízdenky',
          Array ('addTickets'=>'request'),
          $bErr && !empty ($_POST['addTickets'])
          );
        $form-> addInput ('Počet', 'count', 'text', $count, 2, 'width:2em;', $bErrCount);
        $form-> addCustomInput ('Cena', $priceInput, $bErrPrice);
    }
  }
 
  $q= new DbQuery (
    "SELECT tickets.seat_id, price ".
    "FROM tickets LEFT JOIN order_items USING (route_id,seat_id) ".
    "WHERE tickets.route_id='$route' AND order_items.seat_id IS NOT NULL ".
    "ORDER BY tickets.seat_id"
    );
  if ($q->getNumRows()) {
    HtInline::factory ('h2', $canvas)-> addText('Objednané jízdenky');
    displayTickets ($canvas, $q);
  }
 
  $q= new DbQuery (
    "SELECT tickets.seat_id, price ".
    "FROM tickets LEFT JOIN order_items USING (route_id,seat_id) ".
    "WHERE tickets.route_id='$route' AND order_items.seat_id IS NULL ".
    "ORDER BY tickets.seat_id"
    );
  if ($q->getNumRows()) {
    HtInline::factory ('h2', $canvas)-> addText('Volné jízdenky');
    displayTickets ($canvas, $q);
  }
}
 
function displayTickets ($canvas, $q) {
  $numRows= $q->getNumRows();
  $resTable= new QueryResultMulticol ($canvas,
    Array('Číslo sedadla','Cena'),
    Array('text-align:right;','text-align:right'),
    $numRows, 3
    );
  for ($i=0; $i< $numRows; $i++) {
    $rowArray= $q->fetchArray();
    $rowArray['price'].= ' Kč';
    $resTable-> addRow($rowArray);
  }
}
 
function addRoute($ico, $szHrefBase) {
  $canvas= $GLOBALS['canvas'];
  $layout= $GLOBALS['layout'];
  define ('TITLE', 'Přidat spoj');
  HtTitle::singleton()-> setTitle(TITLE);
  HtInline::factory ('h1', $canvas)-> addText(TITLE);
 
  $dateInput= new DateInput ('date');
  $timeInput= new TimeInput ('time');
  $durationInput= new DurationInput ('duration');
 
  if (@$_POST['addRoute']=='true') {
    $route_from= addslashes(SimpleForm::lastValue ('from'));
    if (empty ($route_from))
      $bErrFrom= true;
    $route_from= strip_tags($route_from);
 
    $route_to= addslashes(SimpleForm::lastValue ('to'));
    if (empty ($route_to))
      $bErrTo= true;
    $route_to= strip_tags($route_to);
 
    $bErrTime= !$timeInput->isValid();
    $bErrDate= !$dateInput->isValid();
 
    $bErrDuration= !$durationInput->isValid();
    $duration= (SimpleForm::lastValue ('duration'));
    settype ($duration, 'int');
 
    $bErr= @$bErrFrom || @$bErrTo || @$bErrDuration || @$bErrDate || @$bErrTime;
 
    $hour= SimpleForm::lastValue ('time_hour');
    $min= SimpleForm::lastValue ('time_minutte');
    $month= SimpleForm::lastValue ('date_month');
    $day= SimpleForm::lastValue ('date_day');
    $year= SimpleForm::lastValue ('date_year');
    $route_date= @mktime($hour, $min, 0, $month, $day, $year);
    $bErrPast= $route_date < strtotime('+1 weeks');
 
    if (!$bErr && !$bErrPast) {
      //echo $route_from.', '.$route_to.', '.date ('d.m.Y H:i', $route_date).', '.$duration;
 
      new DbQuery (
        "INSERT INTO routes SET ".
        "ico=$ico, route_date=FROM_UNIXTIME($route_date), ".
        "route_from='$route_from', route_to='$route_to', ".
        "duration='$duration'"
        );
 
      $q= new DbQuery (
        "SELECT MAX(route_id) AS route_id ".
        "FROM routes WHERE ico='$ico'"
        );
      $row= $q->fetchArray();
      $route_id= $row['route_id'];
      /*HtInline::factory ('p', $canvas)-> addText('Přidání spoje proběhlo <b>úspěšně</b>.');
      $p= HtInline::factory ('p', $canvas);
      $p-> addText('Pokračujte, prosím, ');
      HtInline::factory ('a', $p, '',
        Array('href'=>$szHrefBase.'&amp;route='.$route_id.'&amp;op=addTickets')
        )-> addText ('přidáním jízdenek');
      $p-> addText('.');*/
      redirTo ($szHrefBase.'&route='.$route_id.'&op=addTickets');
      return;
    }
    if ($bErr)
      HtInline::factory ('p', $canvas)-> addText('Některá políčka formuláře jsou špatně zadána. Vyplňte je prosím znovu:');
    if ($bErrPast)
      HtInline::factory ('p', $canvas)-> addText('Spoje je potřeba zadávat <b>aspoň týden dopředu</b>. Děkujeme za pochopení.');
  }
 
  $form= new SimpleForm ($canvas,
    $szHrefBase.'&amp;op=addRoute',
    TITLE,
    Array('addRoute'=>'true'),
    @$bErr
    );
  $form-> addInput ('Z', 'from', 'text', NULL, 64, 'width:320px;', @$bErrFrom);
  $form-> addInput ('Do', 'to', 'text', NULL, 64, 'width:320px;', @$bErrTo);
  $form-> addCustomInput ('Datum', new DateInput ('date'), @$bErrDate);
  $form-> addCustomInput ('Odjezd', new TimeInput ('time'), @$bErrTime);
  $form-> addCustomInput ('Doba jízdy', new DurationInput ('duration'), @$bErrDuration);
 
  $menu= new Menu(TITLE);
  $menu-> addItem($szHrefBase, 'Storno');
  $layout-> addToBegin($menu);
}
 
function redirTo($to)
{
  Header ('Location: '.$to);
  exit();
}
?>