1: <?php
2: /**
3: * LICENSE (BSD)
4: *
5: * Copyright (c) 2013, Gerd Christian Kunze
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions are
10: * met:
11: *
12: * * Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * * Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * * Neither the name of Gerd Christian Kunze nor the names of the
20: * contributors may be used to endorse or promote products derived from
21: * this software without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24: * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34: *
35: * Carrier
36: * 30.01.2013 10:09
37: */
38: namespace MOC\Module\Network\ParcelTracker;
39: use MOC\Api;
40: use MOC\Generic\Package;
41:
42: /**
43: *
44: */
45: abstract class Carrier implements Package {
46: /**
47: * Get Dependencies
48: *
49: * @static
50: * @return \MOC\Core\Depending
51: */
52: public static function InterfaceDepending() {
53: return Api::Core()->Depending();
54: }
55:
56: /**
57: * Get Changelog
58: *
59: * @static
60: * @return \MOC\Core\Changelog
61: */
62: public static function InterfaceChangelog() {
63: return Api::Core()->Changelog()->Create( __CLASS__ );
64: }
65:
66: const TRANSPORT_DEFAULT = 1;
67: const TRANSPORT_CURL = 2;
68:
69: private $DataTarget = 'http://';
70: private $DataTransport = self::TRANSPORT_DEFAULT;
71:
72: /**
73: * @param int $TrackingNumber
74: *
75: * @return Parcel
76: */
77: abstract function GetStatus( $TrackingNumber );
78:
79: /**
80: * @param int $TrackingNumber
81: * @param string $Status
82: * @param null|string $Recipient
83: * @param array $TrackingList
84: *
85: * @return Parcel
86: */
87: protected function GetParcel( $TrackingNumber, $Status, $Recipient = null, $TrackingList = array() ) {
88: return new Parcel( $TrackingNumber, $Status, $Recipient, $TrackingList );
89: }
90:
91: /**
92: * @param $Target
93: */
94: protected function SetTarget( $Target ) {
95: $this->DataTarget = $Target;
96: }
97:
98: /**
99: * @return string
100: */
101: protected function GetTarget() {
102: return $this->DataTarget;
103: }
104:
105: /**
106: * @param int $Transport
107: */
108: protected function SetTransport( $Transport = self::TRANSPORT_DEFAULT ) {
109: $this->DataTransport = $Transport;
110: }
111:
112: /**
113: * @param bool $RawPayload
114: *
115: * @return \DOMDocument|string
116: */
117: protected function GetData( $RawPayload = false ) {
118: switch( $this->DataTransport ) {
119: case self::TRANSPORT_CURL: {
120: $Transport = curl_init();
121: curl_setopt( $Transport, CURLOPT_URL, $this->DataTarget );
122: curl_setopt( $Transport, CURLOPT_HEADER, false );
123: curl_setopt( $Transport, CURLOPT_RETURNTRANSFER, true );
124: $Payload = curl_exec( $Transport );
125: curl_close( $Transport );
126: $Payload = utf8_decode( $Payload );
127: break;
128: }
129: default: {
130: $Payload = file_get_contents( $this->DataTarget );
131: }
132: }
133:
134: if( $RawPayload ) {
135: return $Payload;
136: }
137:
138: $DisplayErrors = ini_get('display_errors');
139: Api::Core()->Error()->Reporting()->Display( false )->Apply();
140: $DOM = new \DOMDocument();
141: $DOM->loadHTML( $Payload );
142: $DOM->preserveWhiteSpace = false;
143: Api::Core()->Error()->Reporting()->Display( $DisplayErrors )->Apply();
144:
145: return $DOM;
146: }
147:
148: /**
149: * @param $Value
150: *
151: * @return mixed
152: */
153: protected function NodeValue( $Value ) {
154: return preg_replace('/\s+/', ' ', trim( htmlspecialchars_decode( strip_tags( $Value ) ), chr(0xC2).chr(0xA0)."\xA0 " ) );
155: }
156: }
157: