示例#1
0
 public static function parseHafasXml($serverData, $lang)
 {
     $xml = new SimpleXMLElement($serverData);
     $connection = array();
     $i = 0;
     //DEBUG: echo $serverData ;
     if (isset($xml->ConRes->ConnectionList->Connection)) {
         //get stations from & to once for all connections
         $fromstation = connections::getStationFromHafasLocation($xml->ConRes->ConnectionList->Connection[0]->Overview->Departure->BasicStop->Station['x'], $xml->ConRes->ConnectionList->Connection[0]->Overview->Departure->BasicStop->Station['y'], $lang);
         $tostation = connections::getStationFromHafasLocation($xml->ConRes->ConnectionList->Connection[0]->Overview->Arrival->BasicStop->Station['x'], $xml->ConRes->ConnectionList->Connection[0]->Overview->Arrival->BasicStop->Station['y'], $lang);
         foreach ($xml->ConRes->ConnectionList->Connection as $conn) {
             $connection[$i] = new Connection();
             $connection[$i]->departure = new DepartureArrival();
             $connection[$i]->arrival = new DepartureArrival();
             $connection[$i]->duration = tools::transformDuration($conn->Overview->Duration->Time);
             $connection[$i]->departure->station = $fromstation;
             $connection[$i]->departure->time = tools::transformTime($conn->Overview->Departure->BasicStop->Dep->Time, $conn->Overview->Date);
             $connection[$i]->departure->platform = new Platform();
             $connection[$i]->departure->direction = trim($conn->Overview->Departure->BasicStop->Dep->Platform->Text);
             $connection[$i]->departure->platform->name = trim($conn->Overview->Departure->BasicStop->Dep->Platform->Text);
             $connection[$i]->arrival->time = tools::transformTime($conn->Overview->Arrival->BasicStop->Arr->Time, $conn->Overview->Date);
             $connection[$i]->arrival->platform = new Platform();
             $connection[$i]->arrival->platform->name = trim($conn->Overview->Arrival->BasicStop->Arr->Platform->Text);
             $connection[$i]->arrival->station = $tostation;
             //Delay and platform changes //TODO: get Delay from railtime instead - much better information
             $delay0 = 0;
             $delay1 = 0;
             $platformNormal0 = true;
             $platformNormal1 = true;
             if ($conn->RtStateList->RtState["value"] == "HAS_DELAYINFO") {
                 $delay0 = tools::transformTime($conn->Overview->Departure->BasicStop->StopPrognosis->Dep->Time, $conn->Overview->Date) - $connection[$i]->departure->time;
                 if ($delay0 < 0) {
                     $delay0 = 0;
                 }
                 //echo "delay: " .$conn->Overview -> Departure -> BasicStop -> StopPrognosis -> Dep -> Time . "\n";
                 $delay1 = tools::transformTime($conn->Overview->Arrival->BasicStop->StopPrognosis->Arr->Time, $conn->Overview->Date) - $connection[$i]->arrival->time;
                 if ($delay1 < 0) {
                     $delay1 = 0;
                 }
                 if (isset($conn->Overview->Departure->BasicStop->StopPrognosis->Dep->Platform->Text)) {
                     $platform0 = trim($conn->Overview->Departure->BasicStop->StopPrognosis->Dep->Platform->Text);
                     $platformNormal0 = false;
                 }
                 if (isset($conn->Overview->Arrival->BasicStop->StopPrognosis->Arr->Platform->Text)) {
                     $platform1 = trim($conn->Overview->Arrival->BasicStop->StopPrognosis->Arr->Platform->Text);
                     $platformNormal1 = false;
                 }
             }
             $connection[$i]->departure->delay = $delay0;
             $connection[$i]->departure->platform->normal = $platformNormal0;
             $connection[$i]->arrival->delay = $delay1;
             $connection[$i]->arrival->platform->normal = $platformNormal1;
             $trains = array();
             $vias = array();
             $directions = array();
             $j = 0;
             $k = 0;
             $connectionindex = 0;
             //yay for spaghetti code.
             if (isset($conn->ConSectionList->ConSection)) {
                 foreach ($conn->ConSectionList->ConSection as $connsection) {
                     if (isset($connsection->Journey->JourneyAttributeList->JourneyAttribute)) {
                         foreach ($connsection->Journey->JourneyAttributeList->JourneyAttribute as $att) {
                             if ($att->Attribute["type"] == "NAME") {
                                 $trains[$j] = str_replace(" ", "", $att->Attribute->AttributeVariant->Text);
                                 $j++;
                             } else {
                                 if ($att->Attribute["type"] == "DIRECTION") {
                                     $directions[$k] = stations::getStationFromName(trim($att->Attribute->AttributeVariant->Text), $lang);
                                     $k++;
                                 }
                             }
                         }
                         if ($conn->Overview->Transfers > 0 && strcmp($connsection->Arrival->BasicStop->Station['name'], $conn->Overview->Arrival->BasicStop->Station['name']) != 0) {
                             //current index for the train: j-1
                             $departDelay = 0;
                             //Todo: NYImplemented
                             $connarray = $conn->ConSectionList->ConSection;
                             $departTime = tools::transformTime($connarray[$connectionindex + 1]->Departure->BasicStop->Dep->Time, $conn->Overview->Date);
                             $departPlatform = trim($connarray[$connectionindex + 1]->Departure->BasicStop->Dep->Platform->Text);
                             $arrivalTime = tools::transformTime($connsection->Arrival->BasicStop->Arr->Time, $conn->Overview->Date);
                             $arrivalPlatform = trim($connsection->Arrival->BasicStop->Arr->Platform->Text);
                             $arrivalDelay = 0;
                             //Todo: NYImplemented
                             $vias[$connectionindex] = new Via();
                             $vias[$connectionindex]->arrival = new ViaDepartureArrival();
                             $vias[$connectionindex]->arrival->time = $arrivalTime;
                             $vias[$connectionindex]->arrival->platform = new Platform();
                             $vias[$connectionindex]->arrival->platform->name = $arrivalPlatform;
                             $vias[$connectionindex]->arrival->platform->normal = 1;
                             $vias[$connectionindex]->departure = new ViaDepartureArrival();
                             $vias[$connectionindex]->departure->time = $departTime;
                             $vias[$connectionindex]->departure->platform = new Platform();
                             $vias[$connectionindex]->departure->platform->name = $departPlatform;
                             $vias[$connectionindex]->departure->platform->normal = 1;
                             $vias[$connectionindex]->timeBetween = $departTime - $arrivalTime;
                             $vias[$connectionindex]->direction = $directions[$k - 1];
                             $vias[$connectionindex]->vehicle = "BE.NMBS." . $trains[$j - 1];
                             $vias[$connectionindex]->station = connections::getStationFromHafasLocation($connsection->Arrival->BasicStop->Station['x'], $connsection->Arrival->BasicStop->Station['y'], $lang);
                             $connectionindex++;
                         }
                     }
                 }
                 if ($connectionindex != 0) {
                     $connection[$i]->via = $vias;
                 }
             }
             $connection[$i]->departure->vehicle = "BE.NMBS." . $trains[0];
             $connection[$i]->departure->direction = $directions[0];
             $connection[$i]->arrival->vehicle = "BE.NMBS." . $trains[sizeof($trains) - 1];
             $connection[$i]->arrival->direction = $directions[sizeof($directions) - 1];
             $i++;
         }
     } else {
         throw new Exception("We're sorry, we could not retrieve the correct data from our sources", 2);
     }
     return $connection;
 }