Page MenuHomeIn-Portal Phabricator

product_options_helper.php
No OneTemporary

File Metadata

Created
Sat, Sep 20, 3:57 PM

product_options_helper.php

<?php
/**
* @version $Id: product_options_helper.php 15244 2012-03-27 11:48:38Z alex $
* @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 kProductOptionsHelper extends kHelper {
function ExplodeOptionValues($option_row)
{
$values = getArrayValue($option_row, 'Values');
if (!$values) return false;
$values = explode(',', $values);
$prices = preg_split('/(?<!\\\)\|/', getArrayValue($option_row, 'Prices'));
foreach ($prices as $a_price) {
list($id, $price) = preg_split('/(?<!\\\)=/', $a_price);
$conv_prices[$id] = $price;
}
$price_types = preg_split('/(?<!\\\)\|/', getArrayValue($option_row, 'PriceTypes'));
foreach ($price_types as $a_price_type) {
list($id, $price_type) = preg_split('/(?<!\\\)=/', $a_price_type);
$conv_price_types[$id] = $price_type;
}
$conv_prices = $this->UnEscape($conv_prices);
$conv_price_types = $this->UnEscape($conv_price_types);
return array('Values'=>$values, 'Prices'=>$conv_prices, 'PriceTypes'=>$conv_price_types);
}
function UnEscape($data)
{
$res = array();
foreach ($data as $key=>$val)
{
$n_key = str_replace('\\|', '|', $key);
$n_key = str_replace('\\=', '=', $n_key);
$n_val = str_replace('\\|', '|', $val);
$n_val = str_replace('\\=', '=', $n_val);
$res[$n_key] = $n_val;
}
return $res;
}
function ConvertKey($key, $product_id, $use_temp=0)
{
static $mapping = null;
if (is_null($mapping) || !isset($mapping[$product_id])) {
$table = TABLE_PREFIX.'ProductOptions';
if ($use_temp) $table = $this->Application->GetTempName($table, 'prefix:p');
$sql = 'SELECT * FROM '.$table.' WHERE ProductId = '.$product_id;
$mapping[$product_id] = $this->Conn->Query($sql, 'ProductOptionId');
}
return $mapping[$product_id][$key];
}
function OptionsSalt($options, $comb_only=false)
{
if ( !is_array($options) ) {
return 0;
}
if ( !$comb_only ) {
ksort($options);
return kUtil::crc32(serialize($options));
}
$option_keys = array_keys($options);
if ( !$option_keys ) {
return '';
}
$sql = 'SELECT ProductOptionId
FROM ' . TABLE_PREFIX . 'ProductOptions
WHERE ProductOptionId IN (' . join(',', $option_keys) . ') AND OptionType IN (1,3,6)';
$included = $this->Conn->GetCol($sql);
foreach ($option_keys as $key) {
if ( !in_array($key, $included) ) {
unset($options[$key]);
}
}
return $this->OptionsSalt($options);
}
}

Event Timeline