@ 2014-02-03T11:59:33Z <?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;
}
}
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.2.11 0.014 0.007 16.20 7.2.10 0.031 0.007 16.57 7.2.9 0.018 0.003 16.38 7.2.8 0.022 0.004 16.63 7.2.7 0.023 0.005 16.87 7.2.6 0.013 0.004 16.76 7.2.5 0.018 0.006 16.95 7.2.4 0.033 0.011 16.48 7.2.3 0.022 0.009 16.82 7.2.2 0.019 0.010 16.58 7.2.1 0.008 0.012 16.42 7.2.0 0.025 0.006 16.71 7.1.23 0.079 0.000 15.71 7.1.22 0.032 0.009 15.49 7.1.21 0.015 0.006 15.31 7.1.20 0.020 0.006 15.53 7.1.19 0.020 0.010 15.43 7.1.18 0.029 0.010 15.49 7.1.17 0.028 0.006 15.70 7.1.16 0.030 0.006 15.64 7.1.15 0.017 0.014 15.41 7.1.14 0.025 0.003 15.71 7.1.13 0.015 0.009 15.36 7.1.12 0.016 0.006 15.61 7.1.11 0.010 0.009 15.67 7.1.10 0.013 0.010 15.61 7.1.9 0.025 0.004 15.64 7.1.8 0.024 0.003 15.70 7.1.7 0.011 0.006 16.21 7.1.6 0.011 0.012 17.62 7.1.5 0.032 0.012 25.11 7.1.4 0.021 0.009 15.80 7.1.3 0.035 0.006 15.62 7.1.2 0.020 0.006 15.64 7.1.1 0.029 0.017 15.44 7.1.0 0.024 0.023 19.07 7.0.31 0.018 0.006 15.37 7.0.30 0.026 0.010 15.13 7.0.29 0.030 0.003 15.18 7.0.28 0.023 0.004 14.95 7.0.27 0.033 0.004 15.23 7.0.26 0.020 0.007 15.10 7.0.25 0.015 0.009 15.30 7.0.24 0.017 0.008 15.28 7.0.23 0.062 0.010 15.20 7.0.22 0.009 0.006 15.17 7.0.21 0.014 0.007 15.32 7.0.20 0.015 0.005 15.74 7.0.19 0.015 0.005 15.07 7.0.18 0.014 0.007 15.16 7.0.17 0.017 0.007 15.14 7.0.16 0.017 0.007 15.00 7.0.15 0.031 0.000 15.25 7.0.14 0.020 0.035 18.59 7.0.13 0.030 0.003 15.16 7.0.12 0.045 0.003 14.90 7.0.11 0.032 0.009 15.44 7.0.10 0.021 0.018 17.64 7.0.9 0.019 0.023 17.65 7.0.8 0.015 0.027 17.54 7.0.7 0.017 0.024 17.60 7.0.6 0.017 0.020 17.52 7.0.5 0.025 0.027 17.94 7.0.4 0.005 0.024 16.68 7.0.3 0.009 0.022 16.69 7.0.2 0.006 0.025 16.75 7.0.1 0.012 0.024 16.80 7.0.0 0.010 0.037 16.65 5.6.38 0.015 0.003 13.99 5.6.37 0.011 0.006 14.35 5.6.36 0.008 0.005 14.20 5.6.35 0.006 0.012 13.95 5.6.34 0.008 0.012 14.41 5.6.33 0.009 0.009 14.17 5.6.32 0.006 0.011 14.11 5.6.31 0.011 0.008 14.21 5.6.30 0.011 0.004 14.30 5.6.29 0.007 0.007 14.43 5.6.28 0.012 0.033 17.61 5.6.27 0.006 0.010 14.35 5.6.26 0.009 0.009 14.30 5.6.25 0.008 0.022 17.41 5.6.24 0.008 0.022 17.38 5.6.23 0.007 0.026 17.47 5.6.22 0.005 0.022 17.64 5.6.21 0.004 0.022 17.51 5.6.20 0.012 0.016 17.48 5.6.19 0.008 0.024 17.80 5.6.18 0.008 0.022 17.70 5.6.17 0.007 0.030 17.47 5.6.16 0.010 0.040 17.70 5.6.15 0.010 0.045 17.75 5.6.14 0.008 0.027 17.69 5.6.13 0.018 0.042 17.75 5.6.12 0.010 0.041 17.81 5.6.11 0.010 0.031 17.71 5.6.10 0.011 0.038 17.70 5.6.9 0.015 0.023 17.67 5.6.8 0.008 0.028 17.29 5.6.7 0.006 0.029 17.38 5.6.6 0.011 0.037 17.22 5.6.5 0.006 0.046 17.34 5.6.4 0.009 0.027 17.26 5.6.3 0.011 0.029 17.25 5.6.2 0.014 0.032 17.29 5.6.1 0.007 0.044 17.32 5.6.0 0.010 0.042 17.24 5.5.38 0.006 0.021 16.65 5.5.37 0.006 0.019 16.64 5.5.36 0.011 0.019 16.61 5.5.35 0.005 0.022 16.68 5.5.34 0.006 0.025 16.87 5.5.33 0.007 0.023 16.76 5.5.32 0.006 0.023 16.76 5.5.31 0.003 0.025 16.90 5.5.30 0.012 0.030 16.81 5.5.29 0.014 0.040 16.76 5.5.28 0.004 0.043 16.86 5.5.27 0.008 0.043 16.90 5.5.26 0.014 0.032 16.88 5.5.25 0.011 0.037 16.67 5.5.24 0.003 0.043 16.60 5.5.23 0.013 0.018 16.56 5.5.22 0.007 0.042 16.58 5.5.21 0.002 0.047 16.51 5.5.20 0.008 0.042 16.50 5.5.19 0.007 0.042 16.55 5.5.18 0.008 0.042 16.52 5.5.17 0.016 0.003 14.23 5.5.16 0.010 0.032 16.52 5.5.15 0.020 0.025 16.57 5.5.14 0.006 0.046 16.58 5.5.13 0.012 0.038 16.57 5.5.12 0.008 0.040 16.48 5.5.11 0.004 0.047 16.56 5.5.10 0.010 0.040 16.48 5.5.9 0.010 0.038 16.52 5.5.8 0.010 0.033 16.47 5.5.7 0.010 0.036 16.47 5.5.6 0.008 0.031 16.52 5.5.5 0.004 0.039 16.50 5.5.4 0.008 0.026 16.52 5.5.3 0.005 0.045 16.51 5.5.2 0.011 0.022 16.51 5.5.1 0.009 0.039 16.51 5.5.0 0.011 0.046 16.45 5.4.45 0.011 0.036 16.09 5.4.44 0.005 0.041 16.02 5.4.43 0.011 0.028 16.01 5.4.42 0.009 0.031 16.18 5.4.41 0.012 0.038 16.07 5.4.40 0.011 0.036 16.02 5.4.39 0.007 0.040 16.01 5.4.38 0.008 0.025 15.94 5.4.37 0.011 0.039 15.93 5.4.36 0.007 0.043 15.93 5.4.35 0.007 0.043 15.97 5.4.34 0.006 0.034 15.96 5.4.33 0.006 0.009 12.79 5.4.32 0.010 0.042 15.93 5.4.31 0.010 0.033 15.93 5.4.30 0.009 0.035 15.92 5.4.29 0.008 0.041 15.93 5.4.28 0.008 0.040 15.93 5.4.27 0.009 0.038 16.00 5.4.26 0.008 0.040 15.83 5.4.25 0.011 0.038 15.92 5.4.24 0.000 0.047 15.96 5.4.23 0.012 0.038 15.96 5.4.22 0.005 0.034 15.91 5.4.21 0.013 0.031 15.92 5.4.20 0.010 0.033 16.02 5.4.19 0.004 0.039 16.02 5.4.18 0.011 0.030 15.93 5.4.17 0.013 0.040 15.88 5.4.16 0.008 0.037 15.96 5.4.15 0.009 0.037 15.93 5.4.14 0.007 0.038 14.63 5.4.13 0.005 0.037 14.65 5.4.12 0.004 0.034 14.63 5.4.11 0.007 0.038 14.60 5.4.10 0.011 0.035 14.62 5.4.9 0.012 0.038 14.65 5.4.8 0.012 0.037 14.68 5.4.7 0.003 0.037 14.65 5.4.6 0.006 0.038 14.67 5.4.5 0.014 0.033 14.58 5.4.4 0.008 0.039 14.66 5.4.3 0.007 0.024 14.60 5.4.2 0.002 0.038 14.66 5.4.1 0.010 0.035 14.58 5.4.0 0.006 0.031 14.37 5.3.29 0.005 0.028 13.85 5.3.28 0.006 0.036 13.79 5.3.27 0.006 0.023 13.78 5.3.26 0.008 0.026 13.77 5.3.25 0.011 0.035 13.81 5.3.24 0.005 0.042 13.73 5.3.23 0.006 0.039 13.74 5.3.22 0.006 0.029 13.81 5.3.21 0.009 0.039 13.74 5.3.20 0.010 0.025 13.77 5.3.19 0.014 0.033 13.72 5.3.18 0.008 0.030 13.73 5.3.17 0.008 0.037 13.73 5.3.16 0.007 0.030 13.73 5.3.15 0.006 0.034 13.78 5.3.14 0.009 0.031 13.73 5.3.13 0.007 0.041 13.72 5.3.12 0.002 0.044 13.75 5.3.11 0.008 0.035 13.72 5.3.10 0.006 0.041 13.47 5.3.9 0.009 0.033 13.52 5.3.8 0.015 0.033 13.51 5.3.7 0.007 0.040 13.53 5.3.6 0.010 0.025 13.41 5.3.5 0.002 0.045 13.40 5.3.4 0.005 0.039 13.46 5.3.3 0.009 0.035 13.44 5.3.2 0.010 0.037 13.25 5.3.1 0.008 0.029 13.32 5.3.0 0.005 0.035 13.32
preferences:dark mode live preview
36.39 ms | 400 KiB | 5 Q