@ 2014-02-03T12:00:13Z <?php
class Cache
{
public static function has( $name ){
return false;
}
public static function get( $name ){
return null;
}
public static function put( $name, $value, $time = 1440 ){
return true;
}
}
class Collivery
{
protected $token;
protected $client;
protected $config;
protected $errors = array();
protected $check_cache = 2;
protected $default_address_id;
protected $client_id;
protected $user_id;
/**
* Setup class with basic Config
*
* @param Array $config Configuration Array
*/
function __construct( array $config = array() )
{
$this->config = (object) array(
'app_name' => 'Default App Name', // Application Name
'app_version' => '0.0.1', // Application Version
'app_host' => '', // Framework/CMS name and version, eg 'Wordpress 3.8.1 WooCommerce 2.0.20' / 'Joomla! 2.5.17 VirtueMart 2.0.26d'
'app_url' => '', // URL your site is hosted on
'user_email' => 'demo@collivery.co.za',
'user_password' => 'demo',
'demo' => false,
);
foreach ( $config as $key => $value ) {
$this->config->$key = $value;
}
if ( $this->config->demo ){
$this->config->user_email = 'demo@collivery.co.za';
$this->config->user_password = 'demo';
}
$this->authenticate();
}
/**
* Setup the Soap Object
*
* @return SoapClient MDS Collivery Soap Client
*/
protected function init ()
{
if ( ! $this->client ){
try {
$this->client = new SoapClient( // Setup the soap client
'http://www.collivery.co.za/wsdl/v2', // URL to WSDL File
array( 'cache_wsdl' => WSDL_CACHE_NONE ) // Don't cache the WSDL file
);
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
}
return true;
}
/**
* Checks if the Soap Client has been set, and returns it.
*
* @return SoapClient Webserver Soap Client
*/
protected function client()
{
if ( ! $this->client ) {
$this->init();
}
if ( ! $this->token ) {
$this->authenticate();
}
return $this->client;
}
/**
* Authenticate and set the token
*
* @return string
*/
protected function authenticate()
{
if ( ( $this->check_cache == 2 ) && Cache::has('collivery.auth') ) {
$authenticate = Cache::get('collivery.auth');
$this->default_address_id = $authenticate['default_address_id'];
$this->client_id = $authenticate['client_id'];
$this->user_id = $authenticate['user_id'];
$this->token = $authenticate['token'];
return true;
} else {
if ( ! $this->init() ) return false;
$user_email = $this->config->user_email;
$user_password = $this->config->user_password;
try {
$authenticate = $this->client->authenticate($user_email, $user_password, $this->token,
array(
'name' => $this->config->app_name . ' mds/collivery/class',
'version' => $this->config->app_version,
'host' => $this->config->app_host,
'url' => $this->config->app_url,
'lang' => 'PHP '. phpversion(),
));
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( is_array( $authenticate ) && isset( $authenticate['token'] ) ){
if ( $this->check_cache != 0 ) Cache::put( 'collivery.auth', $authenticate, 50 );
$this->default_address_id = $authenticate['default_address_id'];
$this->client_id = $authenticate['client_id'];
$this->user_id = $authenticate['user_id'];
$this->token = $authenticate['token'];
return true;
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns a list of towns and their ID's for creating new addresses.
* Town can be filtered by country of province (ZAF Only).
*
* @param string $country Filter towns by Country
* @param string $province Filter towns by South African Provinces
* @return array List of towns and their ID's
*/
public function getTowns( $country = "ZAF", $province = null )
{
if ( ( $this->check_cache == 2 ) && is_null( $province ) && Cache::has( 'collivery.towns.'. $country ) ) {
return Cache::get( 'collivery.towns.'.$country );
} elseif ( ( $this->check_cache == 2 ) && ! is_null( $province ) && Cache::has( 'collivery.towns.'. $country .'.'. $province ) ) {
return Cache::get( 'collivery.towns.'.$country.'.'.$province );
} else {
try {
$result = $this->client()->get_towns( $this->token, $country, $province );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['towns'] ) ) {
if ( is_null( $province ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.towns.'. $country, $result['towns'], 60*24 );
} else {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.towns.'. $country .'.'. $province, $result['towns'], 60*24 );
}
return $result['towns'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Allows you to search for town and suburb names starting with the given string.
* The minimum string length to search is two characters.
* Returns a list of towns, suburbs, and the towns the suburbs belong to with their ID's for creating new addresses.
* The idea is that this could be used in an auto complete function.
*
* @param string $name Start of town/suburb name
* @return array List of towns and their ID's
*/
function searchTowns( $name )
{
if ( strlen( $name ) < 2 ) {
return $this->get_towns();
} elseif ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.search_towns.'. $name ) ) {
return Cache::get( 'collivery.search_towns.'. $name );
} else {
try {
$result = $this->client()->search_towns( $name, $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.search_towns.'. $name, $result, 60*24 );
return $result;
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns all the suburbs of a town.
*
* @param int $town_id ID of the Town to return suburbs for
* @return array
*/
public function getSuburbs( $town_id )
{
if ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.suburbs.'. $town_id ) ) {
return Cache::get( 'collivery.suburbs.'. $town_id );
} else {
try {
$result = $this->client()->get_suburbs( $town_id, $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['suburbs'] ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.suburbs.'. $town_id, $result['suburbs'], 60*24*7 );
return $result['suburbs'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns the type of Address Locations.
* Certain location type incur a surcharge due to time spent during
* delivery.
*
* @return array
*/
public function getLocationTypes()
{
if ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.location_types' ) ) {
return Cache::get( 'collivery.location_types' );
} else {
try {
$result = $this->client()->get_location_types( $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['results'] ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.location_types', $result['results'], 60*24*7 );
return $result['results'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns the available Collivery services types.
*
* @return array
*/
public function getServices()
{
if ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.services' ) ) {
return Cache::get( 'collivery.services' );
} else {
try {
$result = $this->client()->get_services( $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['results'] ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.services', $result['results'], 60*24*7 );
return $result['results'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns the available Parcel Type ID and value array for use in adding a collivery.
*
* @return array Parcel Types
*/
public function getParcelTypes()
{
if ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.parcel_types' ) ) {
return Cache::get( 'collivery.parcel_types' );
} else {
try {
$result = $this->client()->get_parcel_types( $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( is_array( $result ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.parcel_types', $result, 60*24*7 );
return $result;
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns the available Parcel Type ID and value array for use in adding a collivery.
*
* @param int $address_id The ID of the address you wish to retrieve.
* @return array Address
*/
public function getAddress( $address_id )
{
if ( ( $this->check_cache == 2 ) && Cache::has( 'collivery.address.'. $this->client_id .'.'. $address_id ) ) {
return Cache::get( 'collivery.address.'. $this->client_id .'.'. $address_id );
} else {
try {
$result = $this->client()->get_address( $address_id, $this->token );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['address'] ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.address.'. $this->client_id .'.'. $address_id, $result['address'], 60*24 );
return $result['address'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Returns all the addresses belonging to a client.
*
* @param array $filter Filter Addresses
* @return array
*/
public function getAddresses( array $filter = array() )
{
if ( ( $this->check_cache == 2 ) && empty( $filter ) && Cache::has( 'collivery.addresses.'. $this->client_id ) ) {
return Cache::get( 'collivery.addresses.'. $this->client_id );
} else {
try {
$result = $this->client()->get_addresses( $this->token, $filter );
} catch (SoapFault $e) {
$this->catchSoapFault( $e );
return false;
}
if ( isset( $result['addresses'] ) ) {
if ( $this->check_cache != 0 ) Cache::put( 'collivery.addresses.'. $this->client_id, $result['addresses'], 60*24 );
return $result['addresses'];
} else {
if ( isset( $result['error_id'] ) )
$this->setError( $result['error_id'], $result['error'] );
else
$this->setError( 'result_unexpected', 'No address_id returned.' );
return false;
}
}
}
/**
* Handle error messages in SoapFault
*
* @param SoapFault $e SoapFault Object
*/
protected function catchSoapFault( $e )
{
$this->setError( $e->faultcode, $e->faultstring );
}
/**
* Add a new error
*
* @param string $id Error ID
* @param string $text Error text
*/
protected function setError( $id, $text )
{
$this->errors[ $id ] = $text;
}
/**
* Retrieve errors
*/
public function getErrors()
{
return $this->errors;
}
/**
* Check if this instance has an error
*/
public function hasErrors()
{
return !empty($this->errors);
}
/**
* Clears all the Errors
*/
public function clearErrors()
{
$this->errors = array();
}
/**
* Disable Cached completely and retrieve data directly from the webservice
*/
public function disableCache()
{
$this->check_cache = 0;
}
/**
* Ignore Cached data and retrieve data directly from the webservice
* Save returned data to Cache
*/
public function ignoreCache()
{
$this->check_cache = 1;
}
/**
* Check if cache exists before querying the webservice
* If webservice was queried, save returned data to Cache
*/
public function enableCache()
{
$this->check_cache = 2;
}
}
$col = new Collivery;
print_r( $col->getErrors() );
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 7.3.1 0.007 0.011 16.58 7.3.0 0.004 0.012 16.61 7.2.13 0.010 0.008 16.79 7.2.12 0.008 0.009 16.94 7.2.11 0.008 0.013 16.78 7.2.10 0.006 0.010 16.82 7.2.9 0.009 0.007 16.78 7.2.8 0.004 0.008 16.88 7.2.7 0.007 0.010 16.84 7.2.6 0.010 0.009 16.86 7.2.5 0.012 0.004 16.74 7.2.4 0.008 0.009 16.83 7.2.3 0.007 0.009 16.63 7.2.2 0.012 0.006 16.74 7.2.1 0.009 0.006 16.75 7.2.0 0.007 0.009 17.45 7.1.25 0.006 0.005 15.54 7.1.24 0.007 0.008 15.50 7.1.23 0.002 0.013 15.69 7.1.22 0.007 0.005 15.46 7.1.21 0.007 0.010 15.66 7.1.20 0.009 0.003 15.82 7.1.19 0.012 0.003 15.51 7.1.18 0.008 0.008 15.88 7.1.17 0.004 0.009 15.50 7.1.16 0.005 0.006 15.65 7.1.15 0.009 0.005 15.54 7.1.14 0.004 0.009 15.47 7.1.13 0.005 0.005 15.59 7.1.12 0.011 0.006 15.64 7.1.11 0.003 0.006 15.73 7.1.10 0.010 0.008 16.50 7.1.9 0.002 0.011 15.77 7.1.8 0.004 0.009 15.73 7.1.7 0.005 0.008 16.13 7.1.6 0.010 0.008 16.88 7.1.5 0.001 0.012 16.02 7.1.4 0.005 0.007 15.66 7.1.3 0.007 0.004 15.48 7.1.2 0.005 0.006 15.71 7.1.1 0.006 0.011 15.67 7.1.0 0.007 0.016 17.68 7.0.33 0.004 0.007 15.33 7.0.32 0.002 0.011 15.31 7.0.31 0.008 0.006 15.30 7.0.30 0.004 0.012 15.20 7.0.29 0.008 0.006 15.42 7.0.28 0.006 0.007 15.28 7.0.27 0.003 0.008 15.32 7.0.26 0.002 0.010 15.19 7.0.25 0.003 0.010 15.28 7.0.24 0.007 0.004 15.37 7.0.23 0.005 0.008 15.40 7.0.22 0.005 0.009 15.28 7.0.21 0.004 0.007 15.37 7.0.20 0.006 0.008 15.84 7.0.19 0.007 0.010 15.28 7.0.18 0.000 0.010 15.28 7.0.17 0.007 0.007 15.29 7.0.16 0.005 0.007 15.33 7.0.15 0.002 0.010 15.44 7.0.14 0.007 0.025 17.57 7.0.13 0.005 0.007 15.29 7.0.12 0.006 0.005 15.32 7.0.11 0.008 0.035 16.96 7.0.10 0.007 0.017 16.96 7.0.9 0.006 0.021 17.00 7.0.8 0.008 0.017 17.07 7.0.7 0.008 0.019 17.03 7.0.6 0.009 0.021 16.94 7.0.5 0.006 0.020 17.13 7.0.4 0.010 0.017 15.58 7.0.3 0.007 0.020 15.72 7.0.2 0.004 0.021 15.65 7.0.1 0.007 0.017 15.50 7.0.0 0.008 0.022 15.59 5.6.38 0.006 0.007 14.41 5.6.37 0.003 0.011 14.50 5.6.36 0.003 0.008 14.27 5.6.35 0.005 0.008 14.40 5.6.34 0.006 0.011 14.26 5.6.33 0.006 0.006 14.19 5.6.32 0.008 0.008 14.31 5.6.31 0.005 0.008 14.23 5.6.30 0.008 0.005 14.54 5.6.29 0.010 0.007 14.37 5.6.28 0.006 0.027 16.49 5.6.27 0.011 0.003 14.23 5.6.26 0.005 0.033 16.39 5.6.25 0.006 0.022 16.57 5.6.24 0.000 0.025 16.38 5.6.23 0.008 0.018 16.36 5.6.22 0.006 0.024 16.47 5.6.21 0.003 0.017 16.50 5.6.20 0.004 0.018 16.59 5.6.19 0.004 0.027 16.60 5.6.18 0.005 0.019 16.61 5.6.17 0.008 0.016 16.72 5.6.16 0.010 0.016 16.77 5.6.15 0.010 0.018 16.66 5.6.14 0.005 0.024 16.60 5.6.13 0.002 0.021 16.54 5.6.12 0.004 0.020 16.56 5.6.11 0.002 0.024 16.62 5.6.10 0.007 0.022 16.57 5.6.9 0.005 0.019 16.48 5.6.8 0.005 0.017 16.29 5.6.7 0.005 0.024 16.42 5.6.6 0.007 0.029 16.21 5.6.5 0.007 0.023 16.46 5.6.4 0.012 0.028 16.36 5.6.3 0.008 0.020 16.32 5.6.2 0.008 0.030 16.33 5.6.1 0.007 0.030 16.27 5.6.0 0.009 0.021 16.37 5.5.38 0.005 0.021 14.19 5.5.37 0.002 0.021 14.22 5.5.36 0.001 0.020 14.47 5.5.35 0.003 0.024 14.27 5.5.34 0.006 0.016 14.41 5.5.33 0.011 0.027 14.25 5.5.32 0.009 0.019 14.30 5.5.31 0.007 0.016 14.41 5.5.30 0.007 0.016 14.62 5.5.29 0.004 0.020 14.47 5.5.28 0.006 0.019 14.40 5.5.27 0.005 0.018 14.36 5.5.26 0.009 0.020 14.53 5.5.25 0.005 0.016 14.44 5.5.24 0.007 0.017 14.22 5.5.23 0.006 0.015 14.03 5.5.22 0.006 0.030 14.13 5.5.21 0.007 0.026 14.20 5.5.20 0.008 0.030 14.17 5.5.19 0.005 0.030 14.15 5.5.18 0.005 0.032 14.24 5.5.17 0.003 0.008 11.18 5.5.16 0.005 0.029 14.29 5.5.15 0.010 0.028 14.23 5.5.14 0.003 0.035 14.19 5.5.13 0.005 0.031 14.32 5.5.12 0.006 0.031 14.29 5.5.11 0.006 0.029 14.32 5.5.10 0.004 0.029 14.30 5.5.9 0.009 0.021 14.23 5.5.8 0.006 0.018 14.07 5.5.7 0.002 0.026 14.09 5.5.6 0.009 0.026 14.17 5.5.5 0.005 0.029 14.13 5.5.4 0.002 0.035 14.22 5.5.3 0.006 0.027 13.96 5.5.2 0.007 0.029 14.22 5.5.1 0.005 0.030 14.09 5.5.0 0.005 0.029 14.06 5.4.45 0.001 0.019 13.89 5.4.44 0.008 0.029 13.89 5.4.43 0.003 0.018 13.92 5.4.42 0.006 0.029 13.65 5.4.41 0.004 0.017 13.73 5.4.40 0.003 0.020 13.77 5.4.39 0.004 0.030 13.67 5.4.38 0.005 0.019 13.49 5.4.37 0.007 0.014 13.82 5.4.36 0.004 0.026 13.71 5.4.35 0.006 0.028 13.74 5.4.34 0.004 0.033 13.81 5.4.33 0.003 0.007 11.17 5.4.32 0.003 0.032 13.74 5.4.31 0.009 0.027 13.72 5.4.30 0.006 0.028 13.76 5.4.29 0.007 0.022 13.75 5.4.28 0.002 0.030 13.79 5.4.27 0.003 0.030 13.59 5.4.26 0.002 0.030 13.74 5.4.25 0.003 0.031 13.89 5.4.24 0.007 0.025 13.77 5.4.23 0.001 0.032 13.68 5.4.22 0.009 0.024 13.81 5.4.21 0.010 0.016 13.51 5.4.20 0.005 0.031 13.63 5.4.19 0.008 0.020 13.66 5.4.18 0.008 0.025 13.74 5.4.17 0.009 0.022 13.62 5.4.16 0.004 0.021 13.74 5.4.15 0.009 0.028 13.61 5.4.14 0.003 0.029 12.92 5.4.13 0.008 0.027 12.76 5.4.12 0.007 0.027 12.79 5.4.11 0.006 0.015 12.76 5.4.10 0.005 0.029 12.92 5.4.9 0.003 0.027 12.73 5.4.8 0.009 0.025 12.93 5.4.7 0.001 0.030 12.90 5.4.6 0.005 0.030 12.97 5.4.5 0.008 0.024 12.95 5.4.4 0.006 0.020 12.91 5.4.3 0.015 0.022 12.90 5.4.2 0.007 0.019 12.93 5.4.1 0.009 0.024 12.89 5.4.0 0.006 0.029 12.67 5.3.29 0.007 0.027 12.45 5.3.28 0.001 0.027 12.18 5.3.27 0.004 0.032 12.36 5.3.26 0.008 0.028 12.29 5.3.25 0.005 0.029 12.36 5.3.24 0.005 0.019 12.29 5.3.23 0.008 0.027 12.27 5.3.22 0.005 0.031 12.25 5.3.21 0.004 0.027 12.34 5.3.20 0.007 0.024 12.35 5.3.19 0.008 0.029 12.23 5.3.18 0.004 0.032 12.47 5.3.17 0.002 0.030 12.42 5.3.16 0.003 0.032 12.50 5.3.15 0.005 0.030 12.44 5.3.14 0.003 0.031 12.42 5.3.13 0.006 0.028 12.37 5.3.12 0.004 0.031 12.43 5.3.11 0.010 0.022 12.38 5.3.10 0.006 0.029 12.25 5.3.9 0.003 0.030 12.26 5.3.8 0.006 0.030 12.06 5.3.7 0.005 0.030 12.20 5.3.6 0.003 0.029 12.11 5.3.5 0.008 0.030 12.13 5.3.4 0.013 0.027 12.09 5.3.3 0.008 0.031 11.98 5.3.2 0.006 0.030 11.87 5.3.1 0.010 0.025 11.77 5.3.0 0.004 0.029 11.83
preferences:dark mode live preview
35.29 ms | 400 KiB | 5 Q