@ 2014-02-03T11:50:48Z <?php
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
[ '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->initSoap() ) 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;
}
}
}
}
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.1 0.007 0.010 14.80 7.4.0 0.010 0.010 15.09 7.3.13 0.008 0.008 15.05 7.3.12 0.014 0.004 14.83 7.3.11 0.007 0.011 14.73 7.3.10 0.006 0.006 15.05 7.3.9 0.011 0.007 14.86 7.3.8 0.007 0.003 14.52 7.3.7 0.004 0.007 14.85 7.3.6 0.003 0.009 14.66 7.3.5 0.004 0.011 14.86 7.3.4 0.006 0.006 14.81 7.3.3 0.003 0.007 14.65 7.3.2 0.006 0.010 16.70 7.3.1 0.004 0.011 16.54 7.3.0 0.004 0.008 16.50 7.2.26 0.007 0.011 14.68 7.2.25 0.007 0.014 14.86 7.2.24 0.006 0.010 14.89 7.2.23 0.010 0.003 14.91 7.2.22 0.000 0.016 15.23 7.2.21 0.003 0.010 14.82 7.2.20 0.004 0.011 14.88 7.2.19 0.009 0.006 15.13 7.2.18 0.006 0.009 15.13 7.2.17 0.005 0.005 14.82 7.2.16 0.009 0.003 14.87 7.2.15 0.007 0.011 16.72 7.2.14 0.004 0.015 16.64 7.2.13 0.006 0.006 16.92 7.2.12 0.003 0.013 16.60 7.2.11 0.003 0.011 16.52 7.2.10 0.008 0.006 16.53 7.2.9 0.005 0.007 16.56 7.2.8 0.011 0.005 16.47 7.2.7 0.005 0.008 16.76 7.2.6 0.009 0.006 16.47 7.2.5 0.008 0.003 16.68 7.2.4 0.003 0.009 16.63 7.2.3 0.006 0.009 16.73 7.2.2 0.008 0.006 16.68 7.2.1 0.007 0.008 16.79 7.2.0 0.005 0.006 16.42 7.1.33 0.010 0.003 15.81 7.1.32 0.004 0.015 15.28 7.1.31 0.003 0.010 15.31 7.1.30 0.004 0.007 15.34 7.1.29 0.003 0.006 15.63 7.1.28 0.004 0.004 15.55 7.1.27 0.006 0.009 15.67 7.1.26 0.007 0.007 15.61 7.1.25 0.000 0.009 15.57 7.1.24 0.010 0.003 15.39 7.1.23 0.005 0.007 15.57 7.1.22 0.005 0.006 15.67 7.1.21 0.005 0.010 15.47 7.1.20 0.007 0.007 15.63 7.1.19 0.002 0.010 15.56 7.1.18 0.008 0.005 15.36 7.1.17 0.002 0.011 15.43 7.1.16 0.005 0.009 15.61 7.1.15 0.008 0.005 15.46 7.1.14 0.007 0.005 15.49 7.1.13 0.009 0.006 15.59 7.1.12 0.008 0.006 15.47 7.1.11 0.009 0.002 15.39 7.1.10 0.003 0.007 15.68 7.1.9 0.010 0.005 15.63 7.1.8 0.006 0.009 15.47 7.1.7 0.005 0.007 16.04 7.1.6 0.009 0.008 17.00 7.1.5 0.011 0.005 16.02 7.1.4 0.007 0.007 15.81 7.1.3 0.011 0.003 15.62 7.1.2 0.011 0.008 15.58 7.1.1 0.005 0.007 15.67 7.1.0 0.002 0.033 17.79 7.0.33 0.000 0.014 14.84 7.0.32 0.007 0.003 15.27 7.0.31 0.002 0.009 15.34 7.0.30 0.006 0.005 15.23 7.0.29 0.005 0.005 14.98 7.0.28 0.007 0.007 15.44 7.0.27 0.003 0.009 15.27 7.0.26 0.002 0.012 15.25 7.0.25 0.007 0.006 15.33 7.0.24 0.003 0.010 15.19 7.0.23 0.006 0.005 15.24 7.0.22 0.003 0.007 15.10 7.0.21 0.008 0.006 15.06 7.0.20 0.006 0.005 15.66 7.0.19 0.004 0.006 15.13 7.0.18 0.007 0.006 15.07 7.0.17 0.005 0.009 15.27 7.0.16 0.006 0.008 15.18 7.0.15 0.007 0.008 15.27 7.0.14 0.006 0.028 17.48 7.0.13 0.006 0.006 15.20 7.0.12 0.000 0.015 15.39 7.0.11 0.008 0.017 16.92 7.0.10 0.009 0.024 16.79 7.0.9 0.010 0.032 16.86 7.0.8 0.008 0.022 16.97 7.0.7 0.007 0.023 16.79 7.0.6 0.003 0.021 16.89 7.0.5 0.004 0.019 17.13 7.0.4 0.006 0.018 15.59 7.0.3 0.008 0.024 15.71 7.0.2 0.006 0.019 15.65 7.0.1 0.006 0.023 15.59 7.0.0 0.001 0.023 15.61 5.6.40 0.009 0.003 14.39 5.6.39 0.000 0.013 14.34 5.6.38 0.003 0.008 14.44 5.6.37 0.005 0.007 14.20 5.6.36 0.004 0.009 14.24 5.6.35 0.008 0.007 14.27 5.6.34 0.003 0.007 14.48 5.6.33 0.007 0.008 14.25 5.6.32 0.007 0.008 14.34 5.6.31 0.002 0.009 14.40 5.6.30 0.009 0.005 14.17 5.6.29 0.005 0.007 14.02 5.6.28 0.002 0.032 16.41 5.6.27 0.008 0.007 14.07 5.6.26 0.009 0.005 14.01 5.6.25 0.005 0.019 16.45 5.6.24 0.007 0.025 16.19 5.6.23 0.010 0.029 16.45 5.6.22 0.002 0.020 16.32 5.6.21 0.002 0.022 16.21 5.6.20 0.008 0.016 16.52 5.6.19 0.007 0.027 16.45 5.6.18 0.003 0.020 16.39 5.6.17 0.007 0.028 16.52 5.6.16 0.003 0.021 16.55 5.6.15 0.005 0.022 16.45 5.6.14 0.008 0.015 16.57 5.6.13 0.003 0.024 16.38 5.6.12 0.005 0.017 16.50 5.6.11 0.002 0.020 16.41 5.6.10 0.006 0.018 16.48 5.6.9 0.003 0.020 16.60 5.6.8 0.004 0.021 16.38 5.6.7 0.006 0.021 16.33 5.6.6 0.003 0.018 16.13 5.6.5 0.007 0.030 16.09 5.6.4 0.008 0.030 16.26 5.6.3 0.007 0.030 16.25 5.6.2 0.011 0.025 16.25 5.6.1 0.004 0.030 16.15 5.6.0 0.005 0.032 16.19 5.5.38 0.006 0.018 15.91 5.5.37 0.007 0.024 15.84 5.5.36 0.006 0.017 15.85 5.5.35 0.004 0.023 15.84 5.5.34 0.006 0.017 15.93 5.5.33 0.004 0.022 15.96 5.5.32 0.005 0.015 15.95 5.5.31 0.003 0.023 15.86 5.5.30 0.005 0.020 15.93 5.5.29 0.003 0.020 15.98 5.5.28 0.007 0.016 16.00 5.5.27 0.006 0.018 15.99 5.5.26 0.007 0.017 15.89 5.5.25 0.005 0.017 15.94 5.5.24 0.006 0.019 15.68 5.5.23 0.010 0.024 15.72 5.5.22 0.005 0.031 15.66 5.5.21 0.007 0.030 15.72 5.5.20 0.012 0.025 15.78 5.5.19 0.009 0.028 15.66 5.5.18 0.010 0.028 15.53 5.5.17 0.002 0.011 14.15 5.5.16 0.007 0.017 15.68 5.5.15 0.004 0.031 15.69 5.5.14 0.006 0.018 15.56 5.5.13 0.006 0.018 15.67 5.5.12 0.004 0.032 15.63 5.5.11 0.010 0.029 15.64 5.5.10 0.007 0.030 15.68 5.5.9 0.005 0.030 15.67 5.5.8 0.006 0.023 15.56 5.5.7 0.007 0.019 15.70 5.5.6 0.006 0.018 15.57 5.5.5 0.007 0.030 15.69 5.5.4 0.004 0.030 15.56 5.5.3 0.005 0.019 15.62 5.5.2 0.009 0.025 15.64 5.5.1 0.003 0.033 15.75 5.5.0 0.005 0.029 15.68 5.4.45 0.007 0.026 15.13 5.4.44 0.006 0.018 15.17 5.4.43 0.007 0.018 15.18 5.4.42 0.003 0.020 15.15 5.4.41 0.004 0.018 15.05 5.4.40 0.004 0.019 15.05 5.4.39 0.007 0.020 15.06 5.4.38 0.007 0.016 14.99 5.4.37 0.008 0.019 15.07 5.4.36 0.009 0.027 15.06 5.4.35 0.007 0.029 14.99 5.4.34 0.008 0.028 15.03 5.4.33 0.003 0.007 12.97 5.4.32 0.005 0.030 15.09 5.4.31 0.006 0.027 15.00 5.4.30 0.007 0.028 14.99 5.4.29 0.004 0.029 15.00 5.4.28 0.004 0.031 15.07 5.4.27 0.006 0.027 15.07 5.4.26 0.007 0.030 14.98 5.4.25 0.006 0.019 15.04 5.4.24 0.007 0.028 14.97 5.4.23 0.012 0.023 15.09 5.4.22 0.007 0.028 15.03 5.4.21 0.009 0.024 14.97 5.4.20 0.004 0.033 15.01 5.4.19 0.006 0.018 15.01 5.4.18 0.009 0.024 15.09 5.4.17 0.009 0.025 14.99 5.4.16 0.005 0.032 15.05 5.4.15 0.010 0.027 14.97 5.4.14 0.009 0.016 14.09 5.4.13 0.005 0.027 14.11 5.4.12 0.007 0.028 14.14 5.4.11 0.008 0.027 14.11 5.4.10 0.007 0.025 14.15 5.4.9 0.009 0.024 14.15 5.4.8 0.008 0.027 14.14 5.4.7 0.009 0.023 14.16 5.4.6 0.004 0.031 14.13 5.4.5 0.008 0.025 14.07 5.4.4 0.007 0.019 14.07 5.4.3 0.009 0.022 14.09 5.4.2 0.008 0.028 14.09 5.4.1 0.006 0.029 14.17 5.4.0 0.004 0.029 13.92 5.3.29 0.004 0.021 13.59 5.3.28 0.003 0.030 13.52 5.3.27 0.004 0.030 13.51 5.3.26 0.010 0.027 13.56 5.3.25 0.004 0.031 13.52 5.3.24 0.004 0.031 13.51 5.3.23 0.008 0.024 13.52 5.3.22 0.009 0.018 13.51 5.3.21 0.008 0.024 13.50 5.3.20 0.008 0.017 13.52 5.3.19 0.005 0.034 13.50 5.3.18 0.006 0.030 13.50 5.3.17 0.007 0.025 13.46 5.3.16 0.009 0.027 13.51 5.3.15 0.004 0.019 13.52 5.3.14 0.006 0.030 13.53 5.3.13 0.006 0.026 13.45 5.3.12 0.004 0.020 13.53 5.3.11 0.006 0.027 13.54 5.3.10 0.009 0.023 13.33 5.3.9 0.005 0.027 13.35 5.3.8 0.006 0.028 13.33 5.3.7 0.005 0.024 13.32 5.3.6 0.007 0.025 13.32 5.3.5 0.008 0.027 13.32 5.3.4 0.007 0.028 13.38 5.3.3 0.010 0.025 13.28 5.3.2 0.009 0.022 13.22 5.3.1 0.003 0.019 13.28 5.3.0 0.007 0.015 13.20
preferences:dark mode live preview
42.03 ms | 401 KiB | 5 Q