@ 2014-02-03T11:57:04Z <?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->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;
}
}
}
}
$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.3.12 0.009 0.003 17.15 7.3.11 0.003 0.010 17.15 7.3.10 0.006 0.009 17.15 7.3.9 0.004 0.011 17.15 7.3.8 0.010 0.003 17.15 7.3.7 0.011 0.004 17.15 7.3.6 0.006 0.009 17.15 7.3.5 0.005 0.005 17.15 7.3.4 0.006 0.012 17.15 7.3.3 0.007 0.010 17.15 7.3.2 0.007 0.007 17.15 7.3.1 0.003 0.015 17.15 7.3.0 0.007 0.007 17.15 7.2.24 0.010 0.003 17.15 7.2.23 0.011 0.000 17.15 7.2.22 0.006 0.009 17.15 7.2.21 0.012 0.006 17.15 7.2.20 0.007 0.011 17.15 7.2.19 0.010 0.006 17.15 7.2.18 0.000 0.019 17.15 7.2.17 0.006 0.007 17.15 7.2.16 0.006 0.011 17.15 7.2.15 0.006 0.010 17.15 7.2.14 0.011 0.007 17.15 7.2.13 0.006 0.010 17.15 7.2.12 0.007 0.003 17.15 7.2.11 0.000 0.016 17.15 7.2.10 0.003 0.013 17.15 7.2.9 0.009 0.003 17.15 7.2.8 0.012 0.003 17.15 7.2.7 0.004 0.008 17.15 7.2.6 0.010 0.007 17.15 7.2.5 0.007 0.007 17.15 7.2.4 0.007 0.011 17.15 7.2.3 0.007 0.010 17.15 7.2.2 0.009 0.006 17.15 7.2.1 0.012 0.006 17.15 7.2.0 0.006 0.010 18.38 7.1.33 0.004 0.008 17.15 7.1.32 0.000 0.013 17.15 7.1.31 0.003 0.010 17.15 7.1.30 0.007 0.010 17.15 7.1.29 0.007 0.010 17.15 7.1.28 0.007 0.011 17.15 7.1.27 0.006 0.009 17.15 7.1.26 0.003 0.010 17.15 7.1.25 0.003 0.009 17.15 7.1.10 0.010 0.007 18.09 7.1.7 0.009 0.006 16.93 7.1.6 0.010 0.016 19.43 7.1.5 0.004 0.018 16.62 7.1.0 0.003 0.070 22.36 7.0.20 0.008 0.004 16.56 7.0.14 0.013 0.063 22.07 7.0.10 0.003 0.083 20.14 7.0.9 0.007 0.077 20.13 7.0.8 0.017 0.067 20.06 7.0.7 0.010 0.077 20.16 7.0.6 0.010 0.083 20.16 7.0.5 0.013 0.073 20.46 7.0.4 0.010 0.080 20.11 7.0.3 0.010 0.077 20.04 7.0.2 0.010 0.087 20.00 7.0.1 0.007 0.087 20.10 7.0.0 0.003 0.093 20.07 5.6.28 0.003 0.077 21.16 5.6.25 0.007 0.053 20.84 5.6.24 0.007 0.080 20.70 5.6.23 0.017 0.070 20.70 5.6.22 0.007 0.083 20.67 5.6.21 0.007 0.053 20.64 5.6.20 0.020 0.070 21.04 5.6.19 0.003 0.083 21.04 5.6.18 0.013 0.077 21.14 5.6.17 0.003 0.073 21.00 5.6.16 0.003 0.053 21.11 5.6.15 0.000 0.090 21.13 5.6.14 0.003 0.087 21.26 5.6.13 0.013 0.073 21.23 5.6.12 0.013 0.077 21.12 5.6.11 0.010 0.077 21.10 5.6.10 0.020 0.067 21.21 5.6.9 0.010 0.083 20.96 5.6.8 0.007 0.073 20.52 5.6.7 0.010 0.077 20.52 5.6.6 0.010 0.070 20.55 5.6.5 0.007 0.073 20.48 5.6.4 0.013 0.073 20.51 5.6.3 0.000 0.070 20.41 5.6.2 0.010 0.073 20.52 5.6.1 0.010 0.073 20.56 5.6.0 0.010 0.083 20.61 5.5.38 0.007 0.053 20.64 5.5.37 0.003 0.087 20.67 5.5.36 0.010 0.080 20.50 5.5.35 0.007 0.080 20.52 5.5.34 0.013 0.077 20.96 5.5.33 0.007 0.077 20.86 5.5.32 0.010 0.077 20.73 5.5.31 0.010 0.080 20.95 5.5.30 0.010 0.073 20.89 5.5.29 0.010 0.053 21.00 5.5.28 0.013 0.070 20.93 5.5.27 0.010 0.077 20.88 5.5.26 0.010 0.077 21.02 5.5.25 0.010 0.080 20.70 5.5.24 0.007 0.080 20.28 5.5.23 0.010 0.073 20.39 5.5.22 0.000 0.073 20.35 5.5.21 0.007 0.073 20.38 5.5.20 0.010 0.070 20.28 5.5.19 0.007 0.063 20.23 5.5.18 0.000 0.067 20.20 5.5.16 0.010 0.063 20.27 5.5.15 0.010 0.043 20.36 5.5.14 0.020 0.060 20.32 5.5.13 0.010 0.077 20.24 5.5.12 0.010 0.083 20.25 5.5.11 0.013 0.080 20.27 5.5.10 0.017 0.067 20.17 5.5.9 0.010 0.070 20.25 5.5.8 0.010 0.077 20.18 5.5.7 0.003 0.083 20.24 5.5.6 0.007 0.073 20.17 5.5.5 0.007 0.083 20.26 5.5.4 0.013 0.070 20.26 5.5.3 0.003 0.067 20.04 5.5.2 0.010 0.073 20.14 5.5.1 0.007 0.080 20.21 5.5.0 0.007 0.077 20.22 5.4.45 0.010 0.070 19.50 5.4.44 0.007 0.073 19.47 5.4.43 0.000 0.047 19.46 5.4.42 0.007 0.053 19.23 5.4.41 0.017 0.067 19.44 5.4.40 0.017 0.067 18.88 5.4.39 0.000 0.073 19.13 5.4.38 0.013 0.033 19.22 5.4.37 0.010 0.077 19.23 5.4.36 0.007 0.073 19.13 5.4.35 0.010 0.077 19.09 5.4.34 0.010 0.073 18.94 5.4.32 0.007 0.070 19.04 5.4.31 0.007 0.077 19.15 5.4.30 0.007 0.073 19.17 5.4.29 0.007 0.077 18.98 5.4.28 0.007 0.043 19.12 5.4.27 0.003 0.057 19.11 5.4.26 0.010 0.077 18.91 5.4.25 0.013 0.067 19.23 5.4.24 0.013 0.070 18.91 5.4.23 0.013 0.067 18.96 5.4.22 0.003 0.080 19.23 5.4.21 0.007 0.077 18.97 5.4.20 0.007 0.073 19.15 5.4.19 0.007 0.073 19.06 5.4.18 0.013 0.073 19.12 5.4.17 0.007 0.073 19.06 5.4.16 0.007 0.073 19.04 5.4.15 0.003 0.083 18.88 5.4.14 0.003 0.070 16.52 5.4.13 0.007 0.070 16.51 5.4.12 0.010 0.070 16.52 5.4.11 0.007 0.077 16.45 5.4.10 0.007 0.053 16.54 5.4.9 0.010 0.063 16.57 5.4.8 0.013 0.060 16.38 5.4.7 0.010 0.067 16.55 5.4.6 0.010 0.070 16.37 5.4.5 0.010 0.073 16.54 5.4.4 0.010 0.070 16.54 5.4.3 0.003 0.057 16.47 5.4.2 0.007 0.060 16.54 5.4.1 0.010 0.040 16.47 5.4.0 0.010 0.070 15.85 5.3.29 0.007 0.053 14.86 5.3.28 0.013 0.070 14.78 5.3.27 0.013 0.060 14.66 5.3.26 0.003 0.050 14.85 5.3.25 0.013 0.057 14.79 5.3.24 0.007 0.077 14.84 5.3.23 0.007 0.070 14.67 5.3.22 0.003 0.077 14.67 5.3.21 0.010 0.073 14.63 5.3.20 0.017 0.063 14.68 5.3.19 0.000 0.083 14.71 5.3.18 0.000 0.083 14.72 5.3.17 0.007 0.077 14.61 5.3.16 0.000 0.083 14.72 5.3.15 0.007 0.063 14.61 5.3.14 0.003 0.067 14.79 5.3.13 0.010 0.070 14.73 5.3.12 0.010 0.070 14.67 5.3.11 0.007 0.070 14.74 5.3.10 0.010 0.070 14.15 5.3.9 0.003 0.050 14.26 5.3.8 0.007 0.070 14.20 5.3.7 0.013 0.063 14.03 5.3.6 0.013 0.063 14.16 5.3.5 0.013 0.070 14.20 5.3.4 0.013 0.063 14.13 5.3.3 0.007 0.070 14.13 5.3.2 0.003 0.070 13.75 5.3.1 0.010 0.070 13.89 5.3.0 0.017 0.060 13.75
preferences:dark mode live preview
40.91 ms | 400 KiB | 5 Q