<?php 
 | 
class Output { 
 | 
    private $db; 
 | 
    private $mapper; 
 | 
    private $vehicleTypes; 
 | 
     
 | 
    function __construct(Database $db, Mapper $mapper, VehicleTypes $vehicleTypes) { 
 | 
        $this->db = $db; 
 | 
        $this->mapper = $mapper; 
 | 
        $this->vehicleTypes = $vehicleTypes; 
 | 
    } 
 | 
     
 | 
    function createMapping($saveConfig = FALSE) { 
 | 
        $mapping = []; 
 | 
        foreach($this->db->getAllById() as $vehicle) { 
 | 
            $mapping[$vehicle['id']] = $this->vehicleTypes->getByNumber($vehicle['num']); 
 | 
        } 
 | 
         
 | 
        if($saveConfig) { 
 | 
            $json = json_encode($mapping); 
 | 
            if(!file_put_contents($saveConfig['result_temp'], $json)) { 
 | 
                throw new Exception('Result save failed'); 
 | 
            } 
 | 
            rename($saveConfig['result_temp'], $saveConfig['result']); 
 | 
        } 
 | 
         
 | 
        return $mapping; 
 | 
    } 
 | 
     
 | 
    function createVehiclesList($fullMapping, $saveConfig = FALSE) { 
 | 
        $trips = $this->mapper->getTTSSTrips(); 
 | 
         
 | 
        $lines = []; 
 | 
        $vehicles = []; 
 | 
        foreach($trips as $trip) { 
 | 
            $vehicle = $fullMapping[$trip['id']] ?? []; 
 | 
            $vehicle += ['trip' => $trip['id']]; 
 | 
            $lines[$trip['line']][] = [ 
 | 
                'trip' => $trip, 
 | 
                'vehicle' => $vehicle, 
 | 
            ]; 
 | 
            $vehicles[$vehicle['type'] ?? '?'][] = $vehicle; 
 | 
        } 
 | 
         
 | 
        foreach($lines as &$line) { 
 | 
            usort($line, function($a, $b) { 
 | 
                return (substr($a['vehicle']['num'] ?? '', 2) <=> substr($b['vehicle']['num'] ?? '', 2));  
 | 
            }); 
 | 
        } 
 | 
        unset($line); 
 | 
        ksort($lines); 
 | 
         
 | 
        foreach($vehicles as &$vehicle) { 
 | 
            usort($vehicle, function($a, $b) { 
 | 
                return (substr($a['num'] ?? '', 2) <=> substr($b['num'] ?? '', 2)); 
 | 
            }); 
 | 
        } 
 | 
        unset($vehicle); 
 | 
        ksort($vehicles); 
 | 
         
 | 
        $dbMapping = $this->db->getAllByNum(); 
 | 
        foreach($dbMapping as &$vehicle) { 
 | 
            $vehicle['vehicle'] = $this->vehicleTypes->getByNumber($vehicle['num']); 
 | 
        } 
 | 
        unset($vehicle); 
 | 
        ksort($dbMapping); 
 | 
         
 | 
        if($saveConfig) { 
 | 
            $twigLoader = new \Twig\Loader\FilesystemLoader(__DIR__.'/../templates'); 
 | 
            $twig = new \Twig\Environment($twigLoader); 
 | 
            $twig->addExtension(new Twig_Extensions_Extension_Date()); 
 | 
             
 | 
            $vehiclesHtml = $twig->render('vehicles.html', [ 
 | 
                'lines' => $lines, 
 | 
                'vehicles' => $vehicles, 
 | 
                'prefix' => $saveConfig['prefix'], 
 | 
                'mapping' => $dbMapping, 
 | 
            ]); 
 | 
            if(!file_put_contents($saveConfig['result_vehicles_temp'], $vehiclesHtml)) { 
 | 
                throw new Exception('Vehicles save failed'); 
 | 
            } 
 | 
            rename($saveConfig['result_vehicles_temp'], $saveConfig['result_vehicles']); 
 | 
        } 
 | 
         
 | 
        return $lines; 
 | 
    } 
 | 
} 
 |