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: