@ 2014-02-03T11:57:36Z <?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;
}
}
}
}
$col = new Collivery;
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.4.0 0.013 0.006 15.12 7.3.12 0.009 0.006 15.03 7.3.11 0.007 0.007 15.18 7.3.10 0.004 0.012 15.04 7.3.9 0.004 0.011 15.17 7.3.8 0.006 0.013 15.05 7.3.7 0.007 0.010 15.09 7.3.6 0.003 0.010 14.60 7.3.5 0.014 0.003 15.16 7.3.4 0.006 0.012 15.05 7.3.3 0.000 0.013 14.86 7.3.2 0.003 0.010 16.78 7.3.1 0.007 0.012 16.64 7.3.0 0.011 0.012 16.67 7.2.25 0.000 0.018 14.93 7.2.24 0.007 0.013 15.41 7.2.23 0.003 0.012 15.43 7.2.22 0.007 0.007 15.00 7.2.21 0.010 0.007 15.40 7.2.20 0.016 0.003 15.20 7.2.19 0.004 0.007 15.44 7.2.18 0.003 0.013 15.24 7.2.17 0.003 0.012 15.13 7.2.16 0.008 0.004 15.28 7.2.15 0.007 0.007 17.06 7.2.14 0.004 0.011 16.95 7.2.13 0.008 0.011 16.54 7.2.12 0.009 0.009 16.63 7.2.11 0.009 0.005 16.60 7.2.10 0.006 0.009 16.52 7.2.9 0.009 0.008 16.62 7.2.8 0.014 0.003 16.47 7.2.7 0.014 0.007 16.48 7.2.6 0.006 0.011 16.62 7.2.5 0.014 0.005 16.65 7.2.4 0.006 0.010 16.49 7.2.3 0.008 0.014 16.61 7.2.2 0.011 0.010 17.04 7.2.1 0.014 0.004 16.77 7.2.0 0.011 0.005 16.93 7.1.33 0.007 0.010 15.72 7.1.32 0.003 0.011 15.87 7.1.31 0.007 0.010 15.82 7.1.30 0.010 0.007 15.72 7.1.29 0.003 0.013 15.73 7.1.28 0.003 0.010 15.86 7.1.27 0.010 0.003 15.69 7.1.26 0.008 0.008 15.90 7.1.25 0.012 0.005 15.26 7.1.24 0.008 0.004 15.91 7.1.23 0.007 0.007 15.70 7.1.22 0.007 0.011 15.70 7.1.21 0.006 0.003 15.91 7.1.20 0.007 0.007 15.80 7.1.19 0.010 0.010 15.91 7.1.18 0.006 0.009 15.92 7.1.17 0.003 0.016 15.83 7.1.16 0.003 0.013 15.73 7.1.15 0.003 0.010 15.84 7.1.14 0.003 0.010 15.51 7.1.13 0.014 0.003 15.69 7.1.12 0.003 0.013 15.88 7.1.11 0.003 0.012 15.69 7.1.10 0.007 0.011 15.51 7.1.9 0.004 0.004 15.53 7.1.8 0.006 0.006 15.89 7.1.7 0.002 0.010 16.31 7.1.6 0.008 0.010 17.64 7.1.5 0.013 0.013 25.01 7.1.4 0.008 0.004 15.59 7.1.3 0.004 0.011 15.82 7.1.2 0.006 0.006 15.88 7.1.1 0.000 0.017 15.42 7.1.0 0.003 0.043 19.02 7.0.33 0.003 0.013 15.42 7.0.32 0.009 0.003 15.36 7.0.31 0.007 0.003 15.21 7.0.30 0.009 0.006 15.65 7.0.29 0.004 0.011 15.64 7.0.28 0.008 0.008 15.48 7.0.27 0.006 0.006 15.44 7.0.26 0.011 0.007 15.35 7.0.25 0.006 0.009 15.52 7.0.24 0.003 0.006 15.47 7.0.23 0.000 0.008 15.50 7.0.22 0.004 0.011 15.42 7.0.21 0.009 0.003 15.40 7.0.20 0.010 0.003 15.96 7.0.19 0.008 0.000 15.53 7.0.18 0.000 0.012 15.19 7.0.17 0.011 0.003 15.14 7.0.16 0.008 0.003 15.55 7.0.15 0.003 0.010 15.54 7.0.14 0.010 0.039 18.80 7.0.13 0.011 0.000 15.32 7.0.12 0.003 0.013 15.38 7.0.11 0.010 0.006 15.36 7.0.10 0.016 0.033 17.75 7.0.9 0.033 0.045 17.73 7.0.8 0.029 0.043 17.82 7.0.7 0.035 0.040 17.74 7.0.6 0.033 0.035 17.79 7.0.5 0.035 0.043 18.00 7.0.4 0.008 0.045 16.80 7.0.3 0.007 0.030 16.71 7.0.2 0.005 0.023 16.78 7.0.1 0.005 0.027 16.74 7.0.0 0.008 0.025 16.77 5.6.40 0.011 0.004 14.69 5.6.39 0.000 0.015 14.49 5.6.38 0.004 0.011 14.80 5.6.37 0.004 0.012 14.37 5.6.36 0.004 0.012 14.35 5.6.35 0.007 0.014 14.48 5.6.34 0.003 0.010 14.47 5.6.33 0.000 0.009 14.40 5.6.32 0.014 0.000 14.64 5.6.31 0.000 0.011 14.36 5.6.30 0.004 0.004 14.55 5.6.29 0.006 0.003 14.67 5.6.28 0.003 0.042 17.76 5.6.27 0.011 0.007 14.60 5.6.26 0.000 0.011 14.61 5.6.25 0.008 0.043 17.45 5.6.24 0.008 0.043 17.59 5.6.23 0.012 0.040 17.56 5.6.22 0.006 0.044 17.42 5.6.21 0.007 0.037 17.71 5.6.20 0.003 0.050 17.86 5.6.19 0.005 0.047 17.72 5.6.18 0.006 0.035 17.71 5.6.17 0.006 0.030 17.70 5.6.16 0.010 0.023 17.76 5.6.15 0.004 0.025 17.81 5.6.14 0.003 0.035 17.72 5.6.13 0.000 0.032 17.72 5.6.12 0.007 0.036 17.89 5.6.11 0.005 0.039 17.76 5.6.10 0.002 0.049 17.71 5.6.9 0.006 0.043 17.80 5.6.8 0.003 0.039 17.48 5.6.7 0.003 0.029 17.48 5.6.6 0.004 0.032 17.53 5.6.5 0.007 0.020 17.24 5.6.4 0.003 0.024 17.55 5.6.3 0.003 0.025 17.28 5.6.2 0.000 0.026 17.45 5.6.1 0.006 0.020 17.45 5.6.0 0.000 0.029 17.42 5.5.38 0.005 0.050 17.33 5.5.37 0.007 0.040 17.30 5.5.36 0.005 0.047 17.32 5.5.35 0.010 0.048 17.27 5.5.34 0.008 0.045 17.68 5.5.33 0.003 0.050 17.60 5.5.32 0.008 0.022 17.45 5.5.31 0.006 0.024 17.62 5.5.30 0.011 0.023 17.64 5.5.29 0.010 0.018 17.66 5.5.28 0.007 0.023 17.45 5.5.27 0.006 0.041 17.67 5.5.26 0.008 0.037 17.68 5.5.25 0.007 0.041 17.43 5.5.24 0.003 0.036 17.24 5.5.23 0.010 0.027 17.38 5.5.22 0.004 0.022 17.19 5.5.21 0.007 0.026 17.32 5.5.20 0.005 0.021 17.29 5.5.19 0.003 0.027 17.19 5.5.18 0.003 0.026 17.32 5.5.17 0.003 0.009 14.40 5.5.16 0.005 0.026 17.23 5.5.15 0.007 0.022 17.27 5.5.14 0.010 0.036 17.30 5.5.13 0.008 0.020 17.33 5.5.12 0.011 0.019 17.08 5.5.11 0.003 0.030 17.41 5.5.10 0.006 0.022 17.05 5.5.9 0.002 0.024 17.15 5.5.8 0.005 0.024 17.35 5.5.7 0.005 0.024 17.21 5.5.6 0.005 0.020 17.29 5.5.5 0.006 0.023 17.17 5.5.4 0.005 0.038 17.14 5.5.3 0.008 0.032 17.19 5.5.2 0.008 0.020 17.26 5.5.1 0.007 0.042 17.34 5.5.0 0.013 0.037 17.11 5.4.45 0.007 0.025 16.26 5.4.44 0.003 0.030 16.28 5.4.43 0.012 0.030 16.24 5.4.42 0.005 0.038 16.27 5.4.41 0.004 0.023 16.22 5.4.40 0.003 0.020 16.14 5.4.39 0.003 0.032 16.03 5.4.38 0.005 0.023 16.13 5.4.37 0.002 0.033 16.00 5.4.36 0.002 0.022 16.17 5.4.35 0.007 0.035 16.09 5.4.34 0.003 0.022 16.13 5.4.33 0.000 0.010 13.13 5.4.32 0.005 0.018 16.02 5.4.31 0.008 0.036 16.10 5.4.30 0.003 0.030 16.14 5.4.29 0.005 0.022 16.02 5.4.28 0.007 0.021 16.11 5.4.27 0.003 0.026 16.11 5.4.26 0.003 0.022 16.10 5.4.25 0.003 0.031 16.09 5.4.24 0.007 0.025 16.13 5.4.23 0.002 0.029 16.15 5.4.22 0.002 0.029 16.02 5.4.21 0.005 0.033 16.16 5.4.20 0.005 0.023 16.10 5.4.19 0.005 0.020 16.17 5.4.18 0.005 0.028 16.14 5.4.17 0.007 0.040 16.01 5.4.16 0.006 0.039 16.01 5.4.15 0.008 0.032 16.07 5.4.14 0.002 0.045 14.70 5.4.13 0.007 0.029 14.77 5.4.12 0.002 0.031 14.82 5.4.11 0.004 0.044 14.74 5.4.10 0.003 0.046 14.74 5.4.9 0.003 0.026 14.85 5.4.8 0.008 0.038 14.84 5.4.7 0.002 0.037 14.76 5.4.6 0.003 0.038 14.82 5.4.5 0.008 0.035 14.81 5.4.4 0.005 0.039 14.82 5.4.3 0.008 0.025 14.83 5.4.2 0.003 0.039 14.83 5.4.1 0.003 0.042 14.80 5.4.0 0.004 0.037 14.52 5.3.29 0.005 0.020 14.13 5.3.28 0.005 0.020 14.06 5.3.27 0.007 0.035 14.09 5.3.26 0.002 0.047 14.07 5.3.25 0.003 0.042 14.08 5.3.24 0.005 0.035 14.10 5.3.23 0.008 0.045 14.09 5.3.22 0.011 0.038 14.03 5.3.21 0.003 0.035 14.04 5.3.20 0.003 0.049 14.04 5.3.19 0.003 0.044 14.00 5.3.18 0.005 0.042 14.03 5.3.17 0.003 0.044 14.08 5.3.16 0.003 0.029 14.07 5.3.15 0.009 0.035 14.07 5.3.14 0.007 0.038 14.06 5.3.13 0.008 0.038 14.07 5.3.12 0.008 0.038 14.05 5.3.11 0.007 0.041 14.03 5.3.10 0.008 0.039 13.77 5.3.9 0.003 0.043 13.76 5.3.8 0.010 0.033 13.80 5.3.7 0.002 0.045 13.76 5.3.6 0.013 0.031 13.79 5.3.5 0.008 0.039 13.73 5.3.4 0.003 0.042 13.71 5.3.3 0.005 0.030 13.71 5.3.2 0.006 0.036 13.65 5.3.1 0.007 0.039 13.60 5.3.0 0.003 0.030 13.57
preferences:dark mode live preview
38.23 ms | 400 KiB | 5 Q