Changeset 8 for trunk/Modules/Ride
- Timestamp:
- Jun 1, 2023, 12:18:18 AM (19 months ago)
- Location:
- trunk/Modules/Ride
- Files:
-
- 5 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Modules/Ride/Ride.php
r7 r8 1 1 <?php 2 2 3 include_once(dirname(__FILE__).'/RideModel.php'); 3 class Ride extends Model 4 { 5 function Add($Track, $SeatCount, $Car, $Details) 6 { 7 $this->Database->insert('Ride', array('SeatCount' => $SeatCount, 'Details' => $Details, 8 'Car' => $Car, 'Driver' => $this->System->ModuleManager->Modules['User']->User['Id'])); 9 $RideId = $this->Database->insert_id; 4 10 5 class ModuleRide extends AppModule 6 { 7 function __construct($System) 8 { 9 parent::__construct($System); 10 $this->Name = 'Ride'; 11 $this->Version = '1.0'; 12 $this->Creator = 'Chronos'; 13 $this->License = 'GNU/GPL'; 14 $this->Description = 'Ride management'; 15 $this->Dependencies = array('User', 'Map'); 16 } 17 18 function DoStart() 19 { 20 $this->System->RegisterPage('', 'PageMain'); 21 $this->System->RegisterPage('nova-jizda', 'PageNewRide'); 22 $this->System->RegisterPage('jizda', 'PageRideDetail'); 23 $this->System->RegisterPage('jizdy', 'PageRideList'); 24 $this->System->RegisterPageBarItem('TopLeft', 'Logo', array($this, 'ShowLogo')); 25 } 26 27 function DoInstall() 28 { 29 $this->Database->query('CREATE TABLE `CarManufacturer` ( 30 `Id` int(11) NOT NULL AUTO_INCREMENT, 31 `Name` varchar(255) NOT NULL, 32 PRIMARY KEY (`Id`) 33 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 34 $this->Database->query('CREATE TABLE `CarModel` ( 35 `Id` int(11) NOT NULL AUTO_INCREMENT, 36 `Name` varchar(255) NOT NULL, 37 `Manufacturer` int(11) NOT NULL, 38 PRIMARY KEY (`Id`), 39 KEY `Manufacturer` (`Manufacturer`) 40 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 41 $this->Database->query('ALTER TABLE `CarModel` 42 ADD CONSTRAINT `CarModel_ibfk_1` FOREIGN KEY (`Manufacturer`) REFERENCES `CarManufacturer` (`Id`);'); 43 $this->Database->query('CREATE TABLE `Car` ( 44 `Id` int(11) NOT NULL AUTO_INCREMENT, 45 `Owner` int(11) NOT NULL, 46 `Photo` int(11) DEFAULT NULL, 47 `Model` int(11) NOT NULL, 48 PRIMARY KEY (`Id`), 49 KEY `Owner` (`Owner`), 50 KEY `Model` (`Model`) 51 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 52 $this->Database->query('ALTER TABLE `Car` 53 ADD CONSTRAINT `Car_ibfk_1` FOREIGN KEY (`Owner`) REFERENCES `User` (`Id`), 54 ADD CONSTRAINT `Car_ibfk_2` FOREIGN KEY (`Model`) REFERENCES `CarModel` (`Id`);'); 55 $this->Database->query('CREATE TABLE `Ride` ( 56 `Id` int(11) NOT NULL AUTO_INCREMENT, 57 `Driver` int(11) NOT NULL, 58 `SeatCount` int(11) NOT NULL, 59 `Car` int(11) NOT NULL, 60 `Details` text NOT NULL, 61 PRIMARY KEY (`Id`), 62 KEY `Driver` (`Driver`), 63 KEY `Car` (`Car`) 64 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 65 $this->Database->query('ALTER TABLE `Ride` 66 ADD CONSTRAINT `Ride_ibfk_1` FOREIGN KEY (`Driver`) REFERENCES `User` (`Id`), 67 ADD CONSTRAINT `Ride_ibfk_2` FOREIGN KEY (`Car`) REFERENCES `Car` (`Id`);'); 68 $this->Database->query('CREATE TABLE `RideStop` ( 69 `Id` int(11) NOT NULL AUTO_INCREMENT, 70 `Ride` int(11) NOT NULL, 71 `Time` datetime NOT NULL, 72 `Place` varchar(255) NOT NULL, 73 `Sequence` int(11) NOT NULL, 74 `Price` int(11) NOT NULL, 75 `PassengerCount` int(11) NOT NULL, 76 PRIMARY KEY (`Id`), 77 KEY `Ride` (`Ride`) 78 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 79 $this->Database->query('ALTER TABLE `RideStop` 80 ADD CONSTRAINT `RideStop_ibfk_1` FOREIGN KEY (`Ride`) REFERENCES `Ride` (`Id`);'); 81 $this->Database->query('CREATE TABLE `Passenger` ( 82 `Id` int(11) NOT NULL AUTO_INCREMENT, 83 `Ride` int(11) NOT NULL, 84 `User` int(11) NOT NULL, 85 `SeatCount` int(11) NOT NULL, 86 `RideStopFrom` int(11) NOT NULL, 87 `RideStopTo` int(11) NOT NULL, 88 PRIMARY KEY (`Id`), 89 KEY `User` (`User`), 90 KEY `Ride` (`Ride`), 91 KEY `RideStopFrom` (`RideStopFrom`), 92 KEY `RideStopTo` (`RideStopTo`) 93 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); 94 $this->Database->query('ALTER TABLE `Passenger` 95 ADD CONSTRAINT `Passenger_ibfk_1` FOREIGN KEY (`Ride`) REFERENCES `Ride` (`Id`), 96 ADD CONSTRAINT `Passenger_ibfk_2` FOREIGN KEY (`User`) REFERENCES `User` (`Id`), 97 ADD CONSTRAINT `Passenger_ibfk_3` FOREIGN KEY (`RideStopFrom`) REFERENCES `RideStop` (`Id`), 98 ADD CONSTRAINT `Passenger_ibfk_4` FOREIGN KEY (`RideStopTo`) REFERENCES `RideStop` (`Id`);'); 99 $this->InsertData(); 100 } 101 102 function InsertData() 103 { 104 $this->Database->query('INSERT INTO `CarManufacturer` (`Id`, `Name`) VALUES '. 105 '(NULL, "Škoda"), (NULL, "Nissan"), (NULL, "Mitsubishi"), (NULL, "Fiat"), '. 106 '(NULL, "Dacia"), (NULL, "KIA"), (NULL, "Hyundai"), (NULL, "Ford"), '. 107 '(NULL, "Opel"), (NULL, "Volkswagen"), (NULL, "Citroen"), (NULL, "Peugeot"), '. 108 '(NULL, "Tesla"), (NULL, "Audi"), (NULL, "BMW"), (NULL, "Chevrolet"), '. 109 '(NULL, "Suzuki"), (NULL, "Toyota"), (NULL, "Mercedes-benz"), (NULL, "Seat"),'. 110 '(NULL, "Volvo"), (NULL, "Renault"), (NULL, "Mazda");'); 111 $this->Database->query('INSERT INTO `CarModel` (`Id`, `Name`, `Manufacturer`) VALUES '. 112 '(NULL, "Rapid", 1), (NULL, "Octavia", 1), (NULL, "Fabia", 1), (NULL, "Felicia", 1), '. 113 '(NULL, "Superb", 1);'); 114 } 115 116 function DoUninstall() 117 { 118 $this->Database->query('DROP TABLE IF EXISTS `Passenger`'); 119 $this->Database->query('DROP TABLE IF EXISTS `RideStop`'); 120 $this->Database->query('DROP TABLE IF EXISTS `Ride`'); 121 $this->Database->query('DROP TABLE IF EXISTS `Car`'); 122 $this->Database->query('DROP TABLE IF EXISTS `CarModel`'); 123 $this->Database->query('DROP TABLE IF EXISTS `CarManufacturer`'); 124 } 125 126 function DoUpgrade() 127 { 128 129 } 130 131 function InsertSampleData() 132 { 133 $Cities = array('Praha', 'Brno', 'Ostrava', 'Olomouc', 'Liberec', 'Plzeň', 134 'Humpolec', 'Zlín', 'Přerov', 'České Budějovice', 'Jihlava', 'Ústí nad Labem', 135 'Hradec Králové', 'Pardubice', 'Mohelnice', 'Břeclav', 'Znojmo', 'Semily', 136 'Tábor', 'Opava', 'Karviná', 'Pelhřimov', 'Osoblaha', 'Broumov', 'Jirkov', 137 'Aš', 'Kutná Hora', 'Kolín', 'Strakonice', 'Tachov', 'Domažlice', 'Beroun', 138 'Most', 'Chomutov', 'Mělník', 'Mladá Boleslav', 'Svitavy', 'Šumperk', 139 'Litomyšl', 'Chrudim', 'Blansko', 'Hodonín', 'Rosice', 'Uherský Brod', 140 'Vsetín', 'Nový Jičín', 'Prostějov', 'Vyškov', 'Mohelnice', 'Ústí nad Orlicí'); 141 142 for ($I = 0; $I < 100; $I++) 11 foreach($_SESSION['Track'] as $Index => $TrackItem) 143 12 { 144 $ Stops = array_fill(0, random(5), '');145 for ($J = 0; $J < count($Stops); $J++)146 $Stops[$J] = $Cities[random(count($Cities))];147 148 $Ride = new Ride();149 $StartTime = time() - random(60*60*24*365);150 $StopCount = random(5);151 $Ride->Add($Stops, $StartTime, $SeatCount);13 $this->Database->insert('RideStop', array( 14 'Ride' => $RideId, 15 'Place' => $TrackItem['Destination'], 16 'Time' => TimeToMysqlDateTime($TrackItem['Time']), 17 'Price' => $TrackItem['Price'], 18 'Sequence' => $Index, 19 'PassengerCount' => 0, 20 )); 152 21 } 153 22 } 154 23 155 function ShowLogo()24 function GetTrack() 156 25 { 157 $Output = '<img src="" width="200" height="50" alt="Logo"/> '. 158 '<a href="'.$this->System->Link('/jizdy/').'">Hledat jízdu</a> nebo '. 159 '<a href="'.$this->System->Link('/nova-jizda/').'">Nabídnout jízdu</a>'; 160 return $Output; 26 return($Track); 161 27 } 162 28 163 function UpdatePassengerCount($RideId)29 function Remove($Id) 164 30 { 165 $DbResult = $this->System->Database->select('RideStop', 'COUNT(*) AS RideStopCount', 'Ride='.$RideId); 166 $DbRow = $DbResult->fetch_assoc(); 167 168 $Stops = array_fill(0, $DbRow['RideStopCount'], 0); 169 $this->System->Database->update('RideStop', 'Ride='.$RideId, array('PassengerCount' => 0)); 170 $DbResult = $this->System->Database->query('SELECT PassengerRideStopFrom.Sequence AS SequenceFrom, '. 171 'PassengerRideStopTo.Sequence AS SequenceTo, Passenger.SeatCount FROM Passenger '. 172 'LEFT JOIN RideStop AS PassengerRideStopFrom ON PassengerRideStopFrom.Id=Passenger.RideStopFrom '. 173 'LEFT JOIN RideStop AS PassengerRideStopTo ON PassengerRideStopTo.Id=Passenger.RideStopTo '. 174 'WHERE Passenger.Ride='.$RideId); 175 while ($DbRow = $DbResult->fetch_assoc()) 176 { 177 for ($I = $DbRow['SequenceFrom'] + 1; $I <= $DbRow['SequenceTo']; $I++) 178 { 179 $Stops[$I] = $Stops[$I] + $DbRow['SeatCount']; 180 } 181 } 182 foreach ($Stops as $Index => $Stop) 183 { 184 $this->System->Database->update('RideStop', 'Ride='.$RideId.' AND Sequence='.$Index, array('PassengerCount' => $Stop)); 185 } 31 $this->Database->delete('Passenger', 'Ride='.$Id); 32 $this->Database->delete('RideStop', 'Ride='.$Id); 33 $this->Database->delete('Ride', 'Id='.$Id); 186 34 } 187 35 } 188 189 class PageRideDetail extends Page190 {191 function ShowDetail()192 {193 $RideId = $_GET['id'];194 $DbResult = $this->Database->query('SELECT Ride.Details, Ride.Id, Ride.SeatCount, '.195 'RideStopFrom.Id AS RideStopFromId, RideStopTo.Id AS RideStopToId, '.196 '(SELECT Name FROM User WHERE User.Id=Ride.Driver) AS DriverName, '.197 'CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS CarName FROM Ride '.198 'JOIN RideStop AS RideStopFrom ON (RideStopFrom.Ride = Ride.Id) AND (RideStopFrom.Place LIKE "%'.$_GET['from'].'%") '.199 'JOIN RideStop AS RideStopTo ON (RideStopTo.Ride = Ride.Id) AND (RideStopTo.Place LIKE "%'.$_GET['to'].'%") '.200 'LEFT JOIN Car ON Car.Id = Ride.Car '.201 'LEFT JOIN CarModel ON CarModel.Id = Car.Model '.202 'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.203 'WHERE Ride.Id='.$RideId);204 $DbRow = $DbResult->fetch_assoc();205 $Track = array();206 $Stops = array();207 $DbResult2 = $this->Database->query('SELECT * FROM RideStop WHERE Ride='.$DbRow['Id'].' ORDER BY Sequence');208 while ($DbRow2 = $DbResult2->fetch_assoc())209 {210 $Track[] = $DbRow2;211 $Stops[] = $DbRow2['Place'];212 }213 214 $Output = '<h3>Detail jízdy</h3><table>'.215 '<tr><td>Trasa:</td><td>'.implode(' → ', $Stops).'</td></tr>'.216 '<tr><td>Odjezd z:</td><td>'.$Track[0]['Place'].'</td></tr>'.217 '<tr><td>Příjezd do:</td><td>'.$Track[count($Track) - 1]['Place'].'</td></tr>'.218 '<tr><td>Čas odjezdu:</td><td>'.$Track[0]['Time'].'</td></tr>'.219 '<tr><td>Podrobnosti:</td><td>'.$DbRow['Details'].'</td></tr>';220 $Output .= '</table>';221 $Output .= '<form action="?step=2" method="post">'.222 'Počet míst: <input type="text" name="seats" value="1"/>'.223 '<input type="hidden" name="id" value="'.$RideId.'"/>'.224 '<input type="hidden" name="fromid" value="'.$DbRow['RideStopFromId'].'"/>'.225 '<input type="hidden" name="toid" value="'.$DbRow['RideStopToId'].'"/>'.226 '<input type="submit" value="Rezervovat"/>'.227 '</form>';228 229 $Output .= '<h3>Cestující</h3>'.230 '<table class="WideTable">';231 232 // Load passengers table233 $Table = array_fill(0, count($Track), array_fill(0, $DbRow['SeatCount'], NULL));234 $Passengers = array();235 $DbResult = $this->System->Database->query('SELECT User.Name AS UserName, PassengerRideStopFrom.Sequence AS SequenceFrom, '.236 'PassengerRideStopTo.Sequence AS SequenceTo FROM Passenger '.237 'LEFT JOIN RideStop AS PassengerRideStopFrom ON PassengerRideStopFrom.Id=Passenger.RideStopFrom '.238 'LEFT JOIN RideStop AS PassengerRideStopTo ON PassengerRideStopTo.Id=Passenger.RideStopTo '.239 'LEFT JOIN User ON User.Id=Passenger.User '.240 'WHERE Passenger.Ride='.$RideId);241 while ($Passenger = $DbResult->fetch_assoc())242 {243 $Passengers[] = $Passenger;244 $Seat = 0;245 do {246 $Check = true;247 for ($I = $Passenger['SequenceFrom']; $I < $Passenger['SequenceTo']; $I++)248 {249 if ($Table[$I][$Seat] != 0) $Check = false;250 }251 if (!$Check) $Seat++;252 } while (!$Check);253 for ($I = $Passenger['SequenceFrom']; $I < $Passenger['SequenceTo']; $I++)254 $Table[$I][$Seat] = count($Passengers) - 1;255 }256 257 $Output .= '<tr><th>Zastávka / Čas</th><th style="width: 80px">Řidič</th>';258 for ($I = 0; $I < $DbRow['SeatCount']; $I++)259 $Output .= '<th style="width: 80px">Cestující</th>';260 $Output .= '</tr>';261 foreach ($Track as $Index => $TrackItem)262 {263 $Output .= '<tr><td style="height: 100px">'.$TrackItem['Place'].'<br/>'.$TrackItem['Time'].'</td>';264 if ($Index == 0) $Output .= '<td rowspan="'.count($Track).'">Řidič</td>';265 for ($I = 0; $I < $DbRow['SeatCount']; $I++)266 {267 if (!is_null($Table[$Index][$I])) {268 $Passenger = $Passengers[$Table[$Index][$I]];269 if ($Index == $Passenger['SequenceFrom'])270 $Output .= '<td rowspan="'.($Passenger['SequenceTo'] - $Passenger['SequenceFrom']).'">'.$Passenger['UserName'].'</td>';271 } else {272 // Show unused space273 if (($Index == 0) or ((($Index - 1) >= 0) and (!is_null($Table[$Index - 1][$I]))))274 {275 $J = 1;276 while ((($Index + $J) < count($Table)) and is_null($Table[$Index + $J][$I])) $J++;277 $Output .= '<td rowspan="'.$J.'"> </td>';278 }279 }280 }281 $Output .= '</tr>';282 }283 $Output .= '</table>';284 285 286 return $Output;287 }288 289 function Show()290 {291 if (!array_key_exists('step', $_GET)) $Output = $this->ShowDetail();292 else {293 if ($_GET['step'] == 2) {294 $this->System->Database->insert('Passenger', array(295 'Ride' => $_POST['id'],296 'User' => $this->System->User->User['Id'],297 'SeatCount' => $_POST['seats'],298 'RideStopFrom' => $_POST['fromid'],299 'RideStopTo' => $_POST['toid'],300 ));301 $this->System->ModuleManager->Modules['Ride']->UpdatePassengerCount($_POST['id']);302 $Output = 'Rezervace dokončena';303 }304 }305 return $Output;306 }307 }308 309 class PageMain extends Page310 {311 function Show()312 {313 if (array_key_exists('from', $_GET)) $PlaceFrom = $_GET['from'];314 else $PlaceFrom = '';315 if (array_key_exists('to', $_GET)) $PlaceTo = $_GET['to'];316 else $PlaceTo = '';317 if (array_key_exists('time', $_GET)) $Time = $_GET['time'];318 else $Time = '';319 $Output = '<table style="width: 100%; margin-top: 100px; margin-bottom: 100px;"><tr><td style="text-align: center">'.320 '<div><h3>Vyhledat jízdu</h3>'.321 '<form style="display: inline;" method="get" action="'.$this->System->Link('/jizdy/').'">'.322 'Odkud: <input type="text" name="from" value="'.$PlaceFrom.'"/> '.323 'Kam: <input type="text" name="to" value="'.$PlaceTo.'"/> '.324 'Čas: <input type="text" name="time" value="'.$Time.'"/> '.325 '<input type="submit" value="Hledat"/>'.326 '</form></div></td></tr></table>';327 return $Output;328 }329 }330 331 class PageRideList extends Page332 {333 function Show()334 {335 if (array_key_exists('from', $_GET)) $PlaceFrom = $_GET['from'];336 else $PlaceFrom = '';337 if (array_key_exists('to', $_GET)) $PlaceTo = $_GET['to'];338 else $PlaceTo = '';339 if (array_key_exists('time', $_GET)) $Time = $_GET['time'];340 else $Time = '';341 $Output = '<table style="width: 100%"><tr><td style="text-align: center;">'.342 '<form style="display: inline;" method="get" action="'.$this->System->Link('/').'">'.343 'Odkud: <input type="text" name="from" value="'.$PlaceFrom.'"/> '.344 'Kam: <input type="text" name="to" value="'.$PlaceTo.'"/> '.345 'Čas: <input type="text" name="time" value="'.$Time.'"/> '.346 '<input type="submit" value="Hledat"/>'.347 '</form></td></tr></table>';348 if (array_key_exists('from', $_GET) and array_key_exists('to', $_GET)) {349 $Output .= $this->ShowRides($_GET['from'], $_GET['to']);350 } else $Output .= $this->ShowRides('', '');351 return $Output;352 }353 354 function ShowRides($PlaceFrom, $PlaceTo)355 {356 $Output = '<h3>Jízdy:</h3>';357 $Output .= '<table>';358 $Query = 'SELECT Ride.Id, Ride.SeatCount, User.Name AS DriverName, User.BirthDate, '.359 'CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS CarName ';360 if ((trim($PlaceFrom) != '') and (trim($PlaceTo != '')))361 $Query .= ', (SELECT COALESCE(MAX(RideStop.PassengerCount), 0) FROM RideStop '.362 'WHERE (RideStop.Ride=Ride.Id) AND (RideStop.Sequence > RideStopFrom.Sequence) AND '.363 '(RideStop.Sequence <= RideStopTo.Sequence)) AS PassengerCount ';364 else365 $Query .= ', (SELECT COALESCE(MAX(RideStop.PassengerCount), 0) FROM RideStop '.366 'WHERE (RideStop.Ride=Ride.Id)) AS PassengerCount ';367 368 $Query .= 'FROM Ride '.369 'LEFT JOIN Car ON Car.Id = Ride.Car '.370 'LEFT JOIN CarModel ON CarModel.Id = Car.Model '.371 'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.372 'LEFT JOIN User ON User.Id=Ride.Driver ';373 if ((trim($PlaceFrom) != '') and (trim($PlaceTo != '')))374 $Query .= 'JOIN RideStop AS RideStopFrom ON (RideStopFrom.Ride = Ride.Id) AND (RideStopFrom.Place LIKE "%'.$PlaceFrom.'%") '.375 'JOIN RideStop AS RideStopTo ON (RideStopTo.Ride = Ride.Id) AND (RideStopTo.Place LIKE "%'.$PlaceTo.'%") '.376 'WHERE (RideStopFrom.Sequence < RideStopTo.Sequence)';377 $Query .= 'LIMIT 10';378 $DbResult = $this->Database->query($Query);379 while ($DbRow = $DbResult->fetch_assoc())380 {381 $Stops = array();382 $Price = 0;383 $DbResult2 = $this->Database->query('SELECT * FROM RideStop WHERE Ride='.$DbRow['Id'].' ORDER BY Sequence');384 while ($DbRow2 = $DbResult2->fetch_assoc())385 {386 $Stops[] = $DbRow2['Place'];387 $Price += $DbRow2['Price'];388 }389 390 if ($DbRow['BirthDate'] != '') $Age = ' ('.round((time() - MysqlDateToTime($DbRow['BirthDate'])) / (3600*24*364.25)).' let)';391 else $Age = '';392 $Output .= '<tr><td>Řidič:</td><td>'.$DbRow['DriverName'].$Age.'</td>'.393 '<td colspan="4"><a href="'.$this->System->Link('/jizda/?id='.$DbRow['Id'].'&from='.$PlaceFrom.'&to='.$PlaceTo).'">Ukázat</a></td></tr>'.394 '<tr><td>Trasa:</td><td>'.implode(' → ', $Stops).'</td></tr>'.395 '<tr><td>Cena:</td><td>'.$Price.' Kč</td></tr>'.396 '<tr><td>Volných míst:</td><td>'.($DbRow['SeatCount'] - $DbRow['PassengerCount']).'</td></tr>'.397 '<tr><td>Auto:</td><td>'.$DbRow['CarName'].'</td></tr>'.398 '<tr><td> </td></tr>';399 }400 $Output .= '</table>';401 402 return $Output;403 }404 }405 406 function time_elapsed($secs)407 {408 $bit = array(409 'y' => $secs / 31556926 % 12,410 'w' => $secs / 604800 % 52,411 'd' => $secs / 86400 % 7,412 'h' => $secs / 3600 % 24,413 'm' => $secs / 60 % 60,414 's' => $secs % 60415 );416 417 $ret = array();418 foreach ($bit as $k => $v)419 if ($v > 0)$ret[] = $v . $k;420 421 return join(' ', $ret);422 }423 424 class PageNewRide extends Page425 {426 function Show()427 {428 if (!array_key_exists('step', $_GET))429 {430 $Output = '<script>431 function insertAfter(referenceNode, newNode)432 {433 referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);434 }435 436 function add_before(name)437 {438 var objTo = document.getElementById(name)439 var divtest = document.createElement("div");440 divtest.innerHTML = \'<tr><td>Zastávka:</td><td><input type="text" name="ridestop1"/></td></tr>\';441 442 objTo.parentNode.insertBefore(divtest, objTo.childNodes[0])443 }444 445 function add_after(name)446 {447 var objTo = document.getElementById(name)448 var divtest = document.createElement("div");449 divtest.innerHTML = \'<tr><td>Zastávka:</td><td><input type="text" name="ridestop1"/></td></tr>\';450 451 insertAfter(objTo, divtest)452 }453 </script>'.454 '<form method="get" action="'.$this->System->Link('/nova-jizda/').'">'.455 '<table>'.456 '<tr><td colspan="2"><strong>Trasa:</strong></td></tr>'.457 458 '<tr><td>Počátek:</td><td><input type="text" name="from"/></td></tr>'.459 '<tr><td>Zastávka:</td><td><input type="text" name="middle"/></td></tr>'.460 '<tr><td>Konec:</td><td><input type="text" name="to"/></td></tr>'.461 462 '<tr><td colspan="2"><br><strong>Parametry jízdy:</strong></td></tr>'.463 '<tr><td>Čas odjezdu:</td><td><input type="text" name="time-from"/></td></tr>'.464 '<tr><td>Počet míst pro cestující:</td><td><input type="text" name="seats"/></td></tr>'.465 '</table>'.466 '<input type="hidden" name="step" value="2"/><br/>'.467 '<input type="submit" value="Pokračovat"/>'.468 '</form>';469 } else {470 if ($_GET['step'] == '2') {471 $TimeFrom = strtotime($_GET['time-from']);472 $Output = '<table style="width: 100%"><tr><td>';473 $Output .= '<form method="post" action="'.$this->System->Link('/nova-jizda/?step=3').'">'.474 '<input type="hidden" name="from" value="'.$_GET['from'].'"/><br/>'.475 '<input type="hidden" name="to" value="'.$_GET['to'].'"/><br/>'.476 '<input type="hidden" name="time-from" value="'.$_GET['time-from'].'"/><br/>'.477 '<input type="hidden" name="seats" value="'.$_GET['seats'].'"/><br/>'.478 '<input type="hidden" name="step" value="3"/><br/>'.479 'Popis:<br/><textarea name="desc"></textarea><br/>'.480 'Auto: <select name="car">';481 $DbResult = $this->Database->query('SELECT Car.Id, CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS ModelName FROM Car '.482 'LEFT JOIN CarModel ON CarModel.Id=Car.Model '.483 'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.484 'WHERE Car.Owner='.$this->System->User->User['Id']);485 while ($DbRow = $DbResult->fetch_assoc())486 {487 $Output .= '<option value="'.$DbRow['Id'].'"/>'.$DbRow['ModelName'].'</option>';488 }489 $Output .= '</select>'.490 '<input type="submit" value="Vytvořit"/>'.491 '</form>';492 $Map = new MapGoogle($this->System);493 $Map->Key = 'AIzaSyDQ-tOjP9mO8ZpSEuBc5_oCRg30rpQZiBI';494 $Map->Width = 400;495 $Map->Height = 300;496 $Map->Path = array($_GET['from'], $_GET['to']);497 //$Map->Path = array('Praha', 'Brno', 'Zlín', 'Vsetín');498 $Track = $Map->Route();499 $Output .= '<h3>Trasa</h3>';500 $PricePerKm = 0.8;501 $Output .= '<table class="WideTable"><tr><th>Úsek</th><th>Odjezd</th><th>Trvání</th><th>Vzdálenost [km]</th><th>Cena [Kč]</th></tr>';502 foreach ($Track as $Index => $TrackItem)503 {504 if ($Index > 0)505 {506 $Track[$Index]['Time'] = $TimeFrom + $Track[$Index - 1]['Duration'];507 $RelDistance = $TrackItem['Distance'] - $Track[$Index - 1]['Distance'];508 $RelDuration = $TrackItem['Duration'] - $Track[$Index - 1]['Duration'];509 $Track[$Index]['Price'] = round($PricePerKm * $RelDistance / 1000);510 $Output .= '<tr><td>'.$Map->Path[$Index - 1].' → '.$TrackItem['Destination'].'</td>'.511 '<td>'.TimeToMysqlDateTime($Track[$Index]['Time']).'</td>'.512 '<td>'.time_elapsed($RelDuration).'</td>'.513 '<td>'.round($RelDistance / 1000).'</td>'.514 '<td>'.$Track[$Index]['Price'].'</td></tr>';515 516 } else {517 $Track[$Index]['Time'] = $TimeFrom;518 $Track[$Index]['Price'] = 0;519 }520 }521 $Output .= '<tr><td>'.$Map->Path[0].' → '.$Map->Path[count($Map->Path) - 1].'</td>'.522 '<td>'.TimeToMysqlDateTime($Track[0]['Time']).'</td>'.523 '<td>'.time_elapsed($Track[count($Track) - 1]['Duration']).'</td>'.524 '<td>'.round($Track[count($Track) - 1]['Distance'] / 1000).'</td>'.525 '<td>'.round($PricePerKm * $Track[count($Track) - 1]['Distance'] / 1000).'</td></tr>';526 $Output .= '</table><br/>';527 $Output .= 'Vzdálenost: '.round($Track[count($Track) - 1]['Distance'] / 1000, 1).' km<br/>';528 $Output .= 'Délka jízdy: '.time_elapsed($Track[count($Track) - 1]['Duration']).'<br/>';529 $Output .= '</td><td>';530 $Map->Key = 'AIzaSyDwKYuEdkXAl9Y2RyDLf5m03n-ItHaqdKs';531 $Output .= $Map->Show();532 $Output .= '</td></tr></table>';533 $_SESSION['Track'] = $Track;534 $_SESSION['SeatCount'] = $_GET['seats'];535 } else536 if ($_GET['step'] == '3') {537 $this->Database->insert('Ride', array(538 'Driver' => $this->System->User->User['Id'],539 'SeatCount' => $_POST['seats'],540 'Car' => $_POST['car'],541 'Details' => $_POST['desc'],542 ));543 $RideId = $this->Database->insert_id;544 foreach ($_SESSION['Track'] as $Index => $TrackItem)545 {546 $this->Database->insert('RideStop', array(547 'Ride' => $RideId,548 'Place' => $TrackItem['Destination'],549 'Time' => TimeToMysqlDateTime($TrackItem['Time']),550 'Price' => $TrackItem['Price'],551 'Sequence' => $Index,552 'PassengerCount' => 0,553 ));554 }555 $Output = 'Nová jízda přidána.';556 }557 }558 return $Output;559 }560 }561
Note:
See TracChangeset
for help on using the changeset viewer.