1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37: 
 38: namespace MOC\Module\Network\ParcelTracker\Carrier;
 39: use MOC\Api;
 40: use MOC\Generic\Device\Module;
 41: use MOC\Module\Network\ParcelTracker\Carrier;
 42: use MOC\Module\Network\ParcelTracker\Parcel;
 43: 
 44:  45:  46: 
 47: class UPSGermany extends Carrier implements Module {
 48:      49:  50:  51:  52:  53: 
 54:     public static function InterfaceInstance() {
 55:         return new UPSGermany();
 56:     }
 57: 
 58:      59:  60:  61:  62:  63: 
 64:     public static function InterfaceDepending() {
 65:         return Api::Core()->Depending();
 66:     }
 67: 
 68:      69:  70:  71:  72:  73: 
 74:     public static function InterfaceChangelog() {
 75:         return Api::Core()->Changelog()->Create( __CLASS__ );
 76:     }
 77: 
 78:      79:  80:  81:  82: 
 83:     function GetStatus( $TrackingNumber ) {
 84: 
 85:         $this->SetTarget( 'http://wwwapps.ups.com/WebTracking/processRequest?loc=de_DE&tracknum='.$TrackingNumber );
 86:         $DOM = $this->GetData();
 87: 
 88:         
 89:         $DetailFormObject = null;
 90:         $DetailForm = $DOM->getElementsByTagName('form');
 91:         $DetailFormLength = $DetailForm->length;
 92:         for( $Run = 0; $Run < $DetailFormLength; $Run++ ) {
 93:             $FormItem = $DetailForm->item( $Run );
 94:             $FormAttributeList = $FormItem->attributes;
 95:             if( ($FormId = $FormAttributeList->getNamedItem('id')) ) {
 96:                 if( false !== strpos( $FormId->nodeValue, 'detailFormid' ) ) {
 97:                     $DetailFormObject = $FormItem;
 98:                     break;
 99:                 }
100:             }
101:         }
102: 
103:         if( $DetailFormObject ) {
104: 
105:             $Target = '';
106:             
107:             $FormElementList = $DetailFormObject->getElementsByTagName('input');
108:             $FormElementListLength = $FormElementList->length;
109:             for( $Run = 0; $Run < $FormElementListLength; $Run++ ) {
110:                 $FormElementAttributeList = $FormElementList->item( $Run )->attributes;
111:                 $FieldName = $FormElementAttributeList->getNamedItem('name')->nodeValue;
112:                 $FieldValue = $FormElementAttributeList->getNamedItem('value')->nodeValue;
113: 
114:                 if( $FieldName == 'showSpPkgProg1' ) {
115:                     $FieldValue = 'true';
116:                 }
117: 
118:                 if( !empty( $Target ) ) {
119:                     $Target .= '&';
120:                 }
121:                 $Target .= $FieldName.'='.urlencode( $FieldValue );
122:             }
123: 
124:             $this->SetTarget( 'http://wwwapps.ups.com/WebTracking/detail?'.$Target );
125:             $DOM = $this->GetData();
126:         }
127: 
128:         
129:         $StatusTableObject = null;
130:         $StatusTable = $DOM->getElementsByTagName('table');
131:         $StatusTableLength = $StatusTable->length;
132:         for( $Run = 0; $Run < $StatusTableLength; $Run++ ) {
133:             $TableItem = $StatusTable->item( $Run );
134:             $TableAttributeList = $TableItem->attributes;
135:             if( ($TableClassString = $TableAttributeList->getNamedItem('class')) ) {
136:                 if( false !== strpos( $TableClassString->nodeValue, 'dataTable' ) ) {
137:                     $StatusTableObject = $TableItem;
138:                     break;
139:                 }
140:             }
141:         }
142: 
143:         $Parcel = new Parcel( $TrackingNumber, $this->GetTarget() );
144: 
145:         if( $StatusTableObject ) {
146:             
147:             
148:             $StatusRow = $StatusTableObject->getElementsByTagName('tr');
149:             $StatusRowLength = $StatusTableObject->getElementsByTagName('tr')->length;
150:             for( $Run = 1; $Run < $StatusRowLength; $Run++ ) {
151:                 
152:                 $Row = $StatusRow->item( $Run );
153: 
154:                 
155:                 $TrackingLocation = $this->NodeValue( $Row->getElementsByTagName('td')->item(0)->nodeValue );
156:                 $TrackingTimestamp = strtotime(
157:                     $this->NodeValue( $Row->getElementsByTagName('td')->item(1)->nodeValue )
158:                         .$this->NodeValue( $Row->getElementsByTagName('td')->item(2)->nodeValue ) );
159:                 $TrackingMessage = $this->NodeValue( $Row->getElementsByTagName('td')->item(3)->nodeValue );
160: 
161:                 $Parcel->AddStatus( $TrackingTimestamp, $TrackingMessage, $TrackingLocation );
162:             }
163:         }
164: 
165:         return $Parcel;
166:     }
167: }
168: