Index: branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php =================================================================== --- branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php (revision 16776) +++ branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php (revision 16777) @@ -1,209 +1,226 @@ initProperties(); } /** * $params = Array( * 'AccountLogin' => 'login', * 'AccountPassword' => 'pass', * 'carriers' => Array( * Array( * 'name' => 'UPS', * 'account' => '', * 'invoiced' => '0' * ), * Array( * 'name' => 'DHL', * 'account' => '', * 'invoiced' => '0' * ), * Array( * 'name' => 'FDX', * 'account' => '', * 'invoiced' => '0' * ), * Array( * 'name' => 'USP', * 'account' => '', * 'invoiced' => '0' * ), * Array( * 'name' => 'ARB', * 'account' => '', * 'invoiced' => '0' * ), * ), * 'classes' => Array('1DY', '2DY', '3DY', 'GND'), * * 'ShipMethod' => 'DRP', * * 'orig_name' => 'John%20Smith', * 'orig_addr1' => '2275%20Union%20Road', * 'orig_city' => 'Cheektowaga', * 'orig_state' => 'NY', * 'orig_postal' => '14227', * 'orig_country' => 'US', * * // this section is required * 'dest_name' => 'Vasya%20Pupkin', * 'dest_addr1' => '175%20E.Hawthorn%20pkwy.', * 'dest_city' => 'Vernon%20Hills', * 'dest_state' => 'IL', * 'dest_postal' => '60061', * 'dest_country' => 'US', * * // this section is required * 'packages' => Array( * Array( * 'package_key' => 'package1', * 'weight' => '50', * 'weight_unit' => 'LB', * 'length' => '25', * 'width' => '15', * 'height' => '15', * 'dim_unit' => 'IN', * 'packaging' => 'BOX', * 'contents' => 'OTR', * 'insurance' => '0' * ), * Array( * 'package_key' => 'package2', * 'weight' => '50', * 'weight_unit' => 'LB', * 'length' => '25', * 'width' => '15', * 'height' => '15', * 'dim_unit' => 'IN', * 'packaging' => 'BOX', * 'contents' => 'OTR', * 'insurance' => '0' * ), * ), * * 'shipment_id' => 1234; * ); * * * Returns: * * $quotes = Array( * 'package1' => * Array( * Array( * 'id' => 'INTSH_FDX_2DY', * 'type' => 'FDX', * .. * 'amount' => 24.24, * ) * Array( * 'type' => 'FDX', * .. * 'amount' => 24.24, * ) * ), * 'package2' => * Array( * Array( * 'id' => 'INTSH_FDX_3DY', * 'type' => 'FDX', * .. * 'amount' => 24.24, * ) * Array( * 'type' => 'FDX', * .. * 'amount' => 24.24, * ) * ), * ) * * @param Array $params */ function GetShippingQuotes($params) { } /** * Returns list of shipping types, that can be selected on product editing page * * @return Array */ function GetAvailableTypes() { return Array (); } /** * Returns virtual field names, that will be saved as properties * * @return Array */ function GetEngineFields() { return Array (); } /** * Sends order to shipping quote engine * * @param OrdersItem $object * @param bool $dry_run * @return Array */ function MakeOrder(&$object, $dry_run = false) { return Array (); } /** * Loads properties of shipping quote engine * + * @return void */ - function initProperties() + protected function initProperties() { - $sql = 'SELECT Properties, FlatSurcharge, PercentSurcharge - FROM ' . $this->Application->getUnitOption('sqe', 'TableName') . ' - WHERE LOWER(ClassName) = ' . $this->Conn->qstr( strtolower( get_class($this) ) ); - $data = $this->Conn->GetRow($sql); - - if (is_array($data)) { - $properties = $data['Properties'] ? unserialize($data['Properties']) : Array (); - $properties['FlatSurcharge'] = $data['FlatSurcharge']; - $properties['PercentSurcharge'] = $data['PercentSurcharge']; + $cache_key = 'shipping_quote_engines_data[%SqeSerial%]'; + $cache_value = $this->Application->getCache($cache_key); - $this->properties = $properties; + if ( $cache_value === false ) { + $this->Conn->nextQueryCachable = true; + $sql = 'SELECT Properties, FlatSurcharge, PercentSurcharge, LOWER(ClassName) AS SQEKey + FROM ' . $this->Application->getUnitOption('sqe', 'TableName') . ' + WHERE Status = ' . STATUS_ACTIVE; + $cache_value = $this->Conn->Query($sql, 'SQEKey'); + + foreach ( $cache_value as $sqe_key => $sqe_data ) { + $properties = $sqe_data['Properties'] ? unserialize($sqe_data['Properties']) : array(); + $properties['FlatSurcharge'] = $sqe_data['FlatSurcharge']; + $properties['PercentSurcharge'] = $sqe_data['PercentSurcharge']; + + $cache_value[$sqe_key]['Properties'] = $properties; + unset($cache_value[$sqe_key]['FlatSurcharge'], $cache_value[$sqe_key]['PercentSurcharge']); + } + + $this->Application->setCache($cache_key, $cache_value); + } + + $sqe_key = strtolower(get_class($this)); + + if ( array_key_exists($sqe_key, $cache_value) ) { + $this->properties = $cache_value[$sqe_key]['Properties']; } else { - $this->properties = Array (); + $this->properties = array(); } } -} \ No newline at end of file + +}