Page MenuHomeIn-Portal Phabricator

in-commerce
No OneTemporary

File Metadata

Created
Tue, Feb 25, 11:53 AM

in-commerce

Index: branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php
===================================================================
--- branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php (revision 16526)
+++ branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php (revision 16527)
@@ -1,197 +1,196 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ShippingQuoteCollector extends ShippingQuoteEngine {
function GetShippingQuotes($params)
{
/** @var kCountryStatesHelper $cs_helper */
$cs_helper = $this->Application->recallObject('CountryStatesHelper');
-
- $has_states = $cs_helper->CountryHasStates( $cs_helper->getCountryIso($params['dest_country'], true) );
+ $has_states = $cs_helper->CountryHasStates($params['dest_country']);
if (
!$params['dest_city'] || !$params['dest_country'] ||
($has_states && !$params['dest_state']) ||
!$params['dest_postal'] || !$params['packages']
) {
return Array ();
}
$cached_var_name = 'ShippingQuotes' . crc32(serialize($params));
$shipping_types = $this->Application->getDBCache($cached_var_name);
if ($shipping_types) {
return unserialize($shipping_types);
}
$quotes_valid = true;
$shipping_types = Array();
$classes = $this->getEngineClasses();
foreach ($classes as $class) {
/** @var ShippingQuoteEngine $object */
$object = $this->Application->recallObject($class);
$new_shipping_types = $object->GetShippingQuotes($params);
if (is_array($new_shipping_types)) {
$shipping_types = array_merge($shipping_types, $new_shipping_types);
}
else {
$quotes_valid = false;
}
}
uasort($shipping_types, Array(&$this, 'price_sort'));
// exclude not available shipping quotes by products
$limit_types = unserialize($params['limit_types']);
if (is_array($limit_types) && !in_array('ANY', $limit_types)) {
if (count($limit_types) == 0) {
break;
}
$available_types = Array ();
foreach ($shipping_types as $a_type) {
$include = false; // exclude by default
foreach ($limit_types as $limit) {
$include = $include || preg_match("/^$limit/", $a_type['ShippingId']);
if ($include) {
break;
}
}
if (!$include) {
continue;
}
$available_types[ $a_type['ShippingId'] ] = $a_type;
}
$shipping_types = $available_types;
}
// exclude Selected Products Only shipping types, not matching products
$available_types = Array();
foreach ($shipping_types as $a_type) {
if (getArrayValue($a_type, 'SelectedOnly')) {
if (!is_array($limit_types) || !in_array($a_type['ShippingId'], $limit_types)) {
continue;
}
}
$available_types[ $a_type['ShippingId'] ] = $a_type;
}
$shipping_types = $available_types;
if ($quotes_valid) {
$this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
}
return $shipping_types;
}
function GetAvailableShippingTypes()
{
$shipping_types = Array ();
$classes = $this->getEngineClasses();
foreach ($classes as $class) {
/** @var ShippingQuoteEngine $object */
$object = $this->Application->recallObject($class);
$new_shipping_types = $object->GetAvailableTypes();
$shipping_types = array_merge($shipping_types, $new_shipping_types);
}
uasort($shipping_types, Array(&$this, 'SortShippingTypes'));
return $shipping_types;
}
/**
* Returns all enabled shipping quote engine classes
*
* @return Array
*/
function getEngineClasses()
{
$sql = 'SELECT Classname
FROM ' . $this->Application->getUnitOption('sqe', 'TableName') . '
WHERE Status = ' . STATUS_ACTIVE;
$classes = $this->Conn->GetCol($sql);
// always persists
$classes[] = 'CustomShippingQuoteEngine';
return $classes;
}
/**
* Returns shipping quote engine, that matches shipping type used in order
*
* @param Array $shipping_info
* @param int $package_num
* @return ShippingQuoteEngine
*/
function &GetClassByType($shipping_info, $package_num = 1)
{
if ( !$shipping_info || !array_key_exists($package_num, $shipping_info) ) {
return false;
}
$classes = $this->getEngineClasses();
$shipping_id = $shipping_info[$package_num]['ShippingId'];
foreach ($classes as $class) {
/** @var ShippingQuoteEngine $object */
$object = $this->Application->recallObject($class);
$shipping_types = $object->GetAvailableTypes();
foreach ($shipping_types as $index => $shipping_type) {
if ( preg_match('/^' . preg_quote($shipping_type['_Id'], '/') . '/', $shipping_id) ) {
return $class;
}
}
}
return false;
}
function SortShippingTypes($elem1, $elem2)
{
if ($elem1['_Name'] == $elem2['_Name']) {
return 0;
}
return $elem1['_Name'] < $elem2['_Name'] ? -1 : 1;
}
function price_sort($elem1, $elem2)
{
if ($elem1['TotalCost'] == $elem2['TotalCost']) {
return 0;
}
return $elem1['TotalCost'] < $elem2['TotalCost'] ? -1 : 1;
}
-}
\ No newline at end of file
+}

Event Timeline