CacheSelectLimit(15, $query, $limit);
} else {
$random_result = $dbconn->SelectLimit($query, $limit);
}
} else {
if (USE_CACHE == 'true') {
$random_result = $dbconn->CacheExecute(15, $query);
} else {
$random_result = $dbconn->Execute($query);
}
}
$num_rows = $random_result->RecordCount();
if ($num_rows > 0) {
$random_row = oos_rand(0, ($num_rows - 1));
$random_result->Move($random_row);
$random_product = $random_result->fields;
}
return $random_product;
}
function oos_prepare_input($sStr) {
if (!is_array($sStr)) {
if (get_magic_quotes_gpc()) {
$sStr = stripslashes($sStr);
}
$sStr = strip_tags($sStr);
$sStr = trim($sStr);
}
return $sStr;
}
/**
* strip slashes
*
* stripslashes on multidimensional arrays.
* Used in conjunction with pnVarCleanFromInput
* @author PostNuke Content Management System
* @copyright Copyright (C) 2001 by the Post-Nuke Development Team.
* @version Revision: 2.0 - changed by Author: r23 on Date: 2004/01/12 06:02:08
* @access private
* @param any variables or arrays to be stripslashed
*/
function oos_stripslashes (&$value) {
if (!is_array($value)) {
$value = stripslashes($value);
} else {
array_walk($value,'oos_stripslashes');
}
}
/**
* ready operating system output
*
* Gets a variable, cleaning it up such that any attempts
* to access files outside of the scope of the PostNuke
* system is not allowed
* @author PostNuke Content Management System
* @copyright Copyright (C) 2001 by the Post-Nuke Development Team.
* @version Revision: 2.0 - changed by Author: r23 on Date: 2004/01/12 06:02:08
* @access private
* @param var variable to prepare
* @param ...
* @returns string/array
* in, otherwise an array of prepared variables
*/
function oos_var_prep_for_os() {
static $search = array('!\.\./!si', // .. (directory traversal)
'!^.*://!si', // .*:// (start of URL)
'!/!si', // Forward slash (directory traversal)
'!\\\\!si'); // Backslash (directory traversal)
static $replace = array('',
'',
'_',
'_');
$resarray = array();
foreach (func_get_args() as $ourvar) {
// Parse out bad things
$ourvar = preg_replace($search, $replace, $ourvar);
// Prepare var
if (!get_magic_quotes_runtime()) {
$ourvar = addslashes($ourvar);
}
// Add to array
array_push($resarray, $ourvar);
}
// Return vars
if (func_num_args() == 1) {
return $resarray[0];
} else {
return $resarray;
}
}
/**
* Return Product's Name
*
* @param $nProductID
* @return string
*/
function oos_get_products_name($nProductID) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$nLanguageID = isset($_SESSION['language_id']) ? intval( $_SESSION['language_id'] ) : DEFAULT_LANGUAGE_ID;
$products_descriptiontable = $oostable['products_description'];
$query = "SELECT products_name
FROM $products_descriptiontable
WHERE products_id = '" . intval($nProductID) . "'
AND products_languages_id = '" . intval($nLanguageID) . "'";
$products_name = $dbconn->GetOne($query);
return $products_name;
}
/**
* Create a Wishlist Code. length may be between 1 and 16 Characters
*
* @param $salt
* @param $length
* @return string
*/
function oos_create_wishlist_code($salt="secret", $length = SECURITY_CODE_LENGTH) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$ccid = md5(uniqid("","salt"));
$ccid .= md5(uniqid("","salt"));
$ccid .= md5(uniqid("","salt"));
$ccid .= md5(uniqid("","salt"));
srand((double)microtime()*1000000); // seed the random number generator
$random_start = @rand(0, (128-$length));
$good_result = 0;
while ($good_result == 0) {
$id1 = substr($ccid, $random_start,$length);
$customerstable = $oostable['customers'];
$sql = "SELECT customers_wishlist_link_id
FROM $customerstable
WHERE customers_wishlist_link_id = '" . oos_db_input($id1) . "'";
$query = $dbconn->Execute($sql);
if ($query->RecordCount() == 0) $good_result = 1;
}
return $id1;
}
/**
* Return Wishlist Customer Name
*
* @param $wlid
* @return string
*/
function oos_get_wishlist_name($wlid) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$customerstable = $oostable['customers'];
$query = "SELECT customers_firstname, customers_lastname
FROM $customerstable
WHERE customers_wishlist_link_id = '" . oos_db_input($wlid) . "'";
$result = $dbconn->Execute($query);
$sCustomersName = $result->fields['customers_firstname'] . ' ' . $result->fields['customers_lastname'];
return $sCustomersName;
}
/**
* Return Products Special Price
*
* @param $nProductID
* @return string
*/
function oos_get_products_special_price($nProductID) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$specialstable = $oostable['specials'];
$query = "SELECT specials_new_products_price
FROM $specialstable
WHERE products_id = '" . intval($nProductID) . "'
AND status";
$specials_new_products_price = $dbconn->GetOne($query);
return $specials_new_products_price;
}
/**
* Return Products Quantity
*
* @param $sProductsId
* @return string
*/
// todo remove
function oos_get_products_stock($sProductsId) {
$nProductID = oos_get_product_id($sProductsId);
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$productstable = $oostable['products'];
$query = "SELECT products_quantity
FROM $productstable
WHERE products_id = '" . intval($nProductID) . "'";
$products_quantity = $dbconn->GetOne($query);
return $products_quantity;
}
/**
* Return a product's minimum quantity
*
* @param $sProductsId
* @return string
*/
function oos_get_products_quantity_order_min($sProductsId) {
$nProductID = oos_get_product_id($sProductsId);
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$productstable = $oostable['products'];
$query = "SELECT products_quantity_order_min
FROM $productstable
WHERE products_id = '" . intval($nProductID) . "'";
$products_quantity_order_min = $dbconn->GetOne($query);
return $products_quantity_order_min;
}
/**
* Return a product's minimum unit order
*
* @param $sProductsId
* @return string
*/
function oos_get_products_quantity_order_units($sProductsId) {
$nProductID = oos_get_product_id($sProductsId);
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$productstable = $oostable['products'];
$query = "SELECT products_quantity_order_units
FROM $productstable
WHERE products_id = '" . intval($nProductID) . "'";
$products_quantity_order_units = $dbconn->GetOne($query);
if ($products_quantity_order_units == 0) {
$productstable = $oostable['products'];
$dbconn->Execute("UPDATE $productstable
SET products_quantity_order_units = 1
WHERE products_id = '" . intval($nProductID) . "'");
$products_quantity_order_units = 1;
}
return $products_quantity_order_units;
}
/**
* Find quantity discount
*
* @param $product_id
* @param $qty
* @param $current_price
* @return string
*/
function oos_get_products_price_quantity_discount($product_id, $qty, $current_price = FALSE) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$productstable = $oostable['products'];
$query = "SELECT products_price, products_discount1, products_discount2, products_discount3,
products_discount4, products_discount1_qty, products_discount2_qty, products_discount3_qty,
products_discount4_qty
FROM $productstable
WHERE products_id = '" . intval($product_id) . "'";
$product_discounts = $dbconn->GetRow($query);
switch ( true ) {
case ( $qty==1 or ( $product_discounts['products_discount4_qty'] == 0 AND $product_discounts['products_discount3_qty'] == 0 AND $product_discounts['products_discount2_qty'] == 0 AND $product_discounts['products_discount1_qty'] == 0 ) ):
if ($current_price) {
$the_discount_price = $current_price;
} else {
$the_discount_price = $product_discounts['products_price'];
}
break;
case ($qty >= $product_discounts['products_discount4_qty'] AND $product_discounts['products_discount4_qty'] !=0):
$the_discount_price = $product_discounts['products_discount4'];
break;
case ($qty >= $product_discounts['products_discount3_qty'] AND $product_discounts['products_discount3_qty'] !=0 ):
$the_discount_price = $product_discounts['products_discount3'];
break;
case ($qty >= $product_discounts['products_discount2_qty'] AND $product_discounts['products_discount2_qty'] !=0 ):
$the_discount_price = $product_discounts['products_discount2'];
break;
case ($qty >= $product_discounts['products_discount1_qty'] AND $product_discounts['products_discount1_qty'] !=0 ):
$the_discount_price = $product_discounts['products_discount1'];
break;
default:
if ($current_price) {
$the_discount_price = $current_price;
} else {
$the_discount_price = $product_discounts['products_price'];
}
break;
}
return $the_discount_price;
}
/**
* Check if the required stock is available
* If insufficent stock is available return an out of stock message
*
* @param $sProductsId
* @param $nProductsQuantity
* @return boolean
*/
function oos_check_stock($sProductsId, $nProductsQuantity) {
$stock_left = oos_get_products_stock($sProductsId) - $nProductsQuantity;
$bOutOfStock = FALSE;
if ($stock_left < 0) {
$bOutOfStock = TRUE;
}
return $bOutOfStock;
}
/**
* Return all GET variables, except those passed as a parameter
*
* @param $aExclude
* @return string
*/
function oos_get_all_get_parameters($aExclude = '') {
global $session;
if (!is_array($aExclude)) $aExclude = array();
$aParameters = array('p', 'error', 'rewrite', 'c', 'm', 'content', 'infex.php', 'history_back', 'formid', 'gclid', 'x', 'y');
$urlValues = array();
if (is_array($_GET)
&& (count($_GET) > 0))
{
reset($_GET);
foreach($_GET as $key => $value)
{
if(empty($value)
|| $value === FALSE)
{
continue;
}
$urlValues[$key] = $value;
}
}
$sUrl = '';
if (is_array($urlValues) && (count($urlValues) > 0)) {
reset($urlValues);
foreach($urlValues as $sKey => $sValue) {
if (!empty($sValue)) {
if ( ($sKey != $session->getName()) && (!in_array($sKey, $aParameters)) && (!in_array($sKey, $aExclude)) ) {
$sUrl .= $sKey . '=' . rawurlencode($sValue) . '&';
}
}
}
}
return $sUrl;
}
/**
* Return all POST variables, except those passed as a parameter
*
* @param $aExclude
* @return string
*/
function oos_get_all_post_parameters($aExclude = '') {
global $session;
if (!is_array($aExclude)) $aExclude = array();
$aParameters = array('formid', 'content', 'x', 'y');
$sUrl = '';
if (is_array($_POST) && (count($_POST) > 0)) {
reset($_POST);
foreach($_POST as $sKey => $sValue) {
if ( (!empty($sValue)) && (!is_array($sValue)) ) {
if ( ($sKey != $session->getName()) && (!in_array($sKey, $aParameters)) && (!in_array($sKey, $aExclude)) ) {
$sUrl .= $sKey . '=' . rawurlencode($sValue) . '&';
}
}
}
}
return $sUrl;
}
/**
* Returns an array with countries
*
* @param $countries_id
* @param $bWithIsoCodes
* @return array
*/
function oos_get_countries($countries_id = '', $bWithIsoCodes = FALSE) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$aCountries = array();
if (!empty($countries_id)) {
if ($bWithIsoCodes == TRUE) {
$countriestable = $oostable['countries'];
$query = "SELECT countries_name, countries_iso_code_2, countries_iso_code_3
FROM $countriestable
WHERE countries_id = '" . intval($countries_id) . "'
ORDER BY countries_name";
$aCountries = $dbconn->GetRow($query);
} else {
$countriestable = $oostable['countries'];
$query = "SELECT countries_name
FROM $countriestable
WHERE countries_id = '" . intval($countries_id) . "'";
$aCountries = $dbconn->GetRow($query);
}
} else {
$countriestable = $oostable['countries'];
$query = "SELECT countries_id, countries_name
FROM $countriestable
ORDER BY countries_name";
$aCountries = $dbconn->GetAll($query);
}
return $aCountries;
}
/**
* Returns the country name
*
* @param $country_id
* @return string
*/
function oos_get_country_name($country_id) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$countriestable = $oostable['countries'];
$query = "SELECT countries_name
FROM $countriestable
WHERE countries_id = '" . intval($country_id) . "'";
$countries_name = $dbconn->GetOne($query);
return $countries_name;
}
/**
* Returns the zone (State/Province) name
*
* @param $country_id
* @param $zone_id
* @param $default_zone
* @return string
*/
function oos_get_zone_name($country_id, $zone_id, $default_zone) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$zonesstable = $oostable['zones'];
$query = "SELECT zone_name
FROM $zonesstable
WHERE zone_country_id = '" . intval($country_id) . "' AND
zone_id = '" . intval($zone_id) . "'";
$zone = $dbconn->Execute($query);
if ($zone->RecordCount() > 0) {
return $zone->fields['zone_name'];
} else {
return $default_zone;
}
}
/**
* Returns the tax rate for a zone / class
*
* @param $class_id
* @param $country_id
* @param $zone_id
*/
function oos_get_tax_rate($class_id, $country_id = -1, $zone_id = -1) {
if (isset($_SESSION['customers_vat_id_status']) && ($_SESSION['customers_vat_id_status'] == 1)) {
return 0;
}
static $tax_rates = array();
if ( ($country_id == -1) && ($zone_id == -1) ) {
if (!isset($_SESSION['customer_id'])) {
$country_id = STORE_COUNTRY;
$zone_id = STORE_ZONE;
} else {
$country_id = $_SESSION['customer_country_id'];
$zone_id = $_SESSION['customer_zone_id'];
}
}
if (!isset($tax_rates[$class_id][$country_id][$zone_id]['rate'])) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$tax_ratestable = $oostable['tax_rates'];
$geo_zonestable = $oostable['geo_zones'];
$zones_to_geo_zonestable = $oostable['zones_to_geo_zones'];
$query = "SELECT SUM(tax_rate) AS tax_rate
FROM $tax_ratestable tr LEFT JOIN
$zones_to_geo_zonestable za
ON (tr.tax_zone_id = za.geo_zone_id) LEFT JOIN
$geo_zonestable tz
ON (tz.geo_zone_id = tr.tax_zone_id)
WHERE (za.zone_country_id is null or za.zone_country_id = '0' OR
za.zone_country_id = '" . intval($country_id) . "') AND
(za.zone_id is null or za.zone_id = '0' or za.zone_id = '" . intval($zone_id) . "') AND
tr.tax_class_id = '" . intval($class_id) . "'
GROUP BY tr.tax_priority";
$tax_result = $dbconn->Execute($query);
if (!$tax_result) {return 0;}
if ($tax_result->RecordCount() > 0) {
$tax_multiplier = 1.0;
while ($tax = $tax_result->fields) {
$tax_multiplier *= 1.0 + ($tax['tax_rate'] / 100);
$tax_result->MoveNext();
}
$tax_rates[$class_id][$country_id][$zone_id]['rate'] = ($tax_multiplier - 1.0) * 100;
} else {
$tax_rates[$class_id][$country_id][$zone_id]['rate'] = 0;
}
}
return $tax_rates[$class_id][$country_id][$zone_id]['rate'];
}
/**
* Add tax to a products price
*
* @param $class_id
* @param $country_id
* @param $zone_id
*/
function oos_get_tax_description($class_id, $country_id, $zone_id) {
global $aLang;
static $tax_rates = array();
if (!isset($tax_rates[$class_id][$country_id][$zone_id]['description'])) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$tax_ratestable = $oostable['tax_rates'];
$geo_zonestable = $oostable['geo_zones'];
$zones_to_geo_zonestable = $oostable['zones_to_geo_zones'];
$query = "SELECT tax_description
FROM $tax_ratestable tr LEFT JOIN
$zones_to_geo_zonestable za
ON (tr.tax_zone_id = za.geo_zone_id) LEFT JOIN
$geo_zonestable tz
ON (tz.geo_zone_id = tr.tax_zone_id)
WHERE (za.zone_country_id is null or za.zone_country_id = '0' OR
za.zone_country_id = '" . intval($country_id) . "') AND
(za.zone_id is null or za.zone_id = '0' OR
za.zone_id = '" . intval($zone_id) . "') AND
tr.tax_class_id = '" . intval($class_id) . "'
ORDER BY tr.tax_priority";
$tax_result = $dbconn->Execute($query);
if ($tax_result->RecordCount() > 0) {
$tax_description = '';
while ($tax = $tax_result->fields) {
$tax_description .= $tax['tax_description'] . ' + ';
// Move that ADOdb pointer!
$tax_result->MoveNext();
}
$tax_description = substr($tax_description, 0, -3);
$tax_rates[$class_id][$country_id][$zone_id]['description'] = $tax_description;
} else {
$tax_rates[$class_id][$country_id][$zone_id]['description'] = $aLang['text_unknown_tax_rate'];
}
}
return $tax_rates[$class_id][$country_id][$zone_id]['description'];
}
/**
* Add tax to a products price
*
* @param $price
* @param $tax
*/
function oos_add_tax($price, $tax) {
global $aUser;
if( ($aUser['price_with_tax'] == 1) && ($tax > 0) ) {
return $price + oos_calculate_tax($price, $tax);
} else {
return $price;
}
}
/**
* Calculates Tax rounding the result
*
* @param $price
* @param $tax
*/
function oos_calculate_tax($price, $tax) {
return $price * $tax / 100;
}
/**
* rounding the price
*/
function oos_round($number, $precision) {
if (strpos($number, '.') && (strlen(substr($number, strpos($number, '.')+1)) > $precision)) {
$number = substr($number, 0, strpos($number, '.') + 1 + $precision + 1);
if (substr($number, -1) >= 5) {
if ($precision > 1) {
$number = substr($number, 0, -1) + ('0.' . str_repeat(0, $precision-1) . '1');
} elseif ($precision == 1) {
$number = substr($number, 0, -1) + 0.1;
} else {
$number = substr($number, 0, -1) + 1;
}
} else {
$number = substr($number, 0, -1);
}
}
return $number;
}
function oos_get_categories($aCategories = '', $parent_id = '0', $indent = '') {
$parent_id = oos_db_prepare_input($parent_id);
if (!is_array($aCategories)) $aCategories = array();
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$nLanguageID = isset($_SESSION['language_id']) ? intval( $_SESSION['language_id'] ) : DEFAULT_LANGUAGE_ID;
$categoriestable = $oostable['categories'];
$categories_descriptiontable = $oostable['categories_description'];
$query = "SELECT c.categories_id, c.categories_status, cd.categories_name
FROM $categoriestable c,
$categories_descriptiontable cd
WHERE c.categories_status = '2'
AND c.parent_id = '" . oos_db_input($parent_id) . "'
AND c.categories_id = cd.categories_id
AND cd.categories_languages_id = '" . intval($nLanguageID) . "'
ORDER BY sort_order, cd.categories_name";
$result = $dbconn->Execute($query);
while ($categories = $result->fields) {
$aCategories[] = array('id' => $categories['categories_id'],
'text' => $indent . $categories['categories_name']);
if ($categories['categories_id'] != $parent_id) {
$aCategories = oos_get_categories($aCategories, $categories['categories_id'], $indent . ' ');
}
// Move that ADOdb pointer!
$result->MoveNext();
}
return $aCategories;
}
/**
* Recursively go through the categories and retreive all parent categories IDs
*
* @param $categories
* @param $categories_id
*/
function oos_get_parent_categories(&$categories, $categories_id) {
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$categoriestable = $oostable['categories'];
$query = "SELECT parent_id
FROM $categoriestable
WHERE categories_id = '" . intval($categories_id) . "'";
$result = $dbconn->Execute($query);
while ($parent_categories = $result->fields) {
if ($parent_categories['parent_id'] == 0) return TRUE;
$categories[count($categories)] = $parent_categories['parent_id'];
if ($parent_categories['parent_id'] != $categories_id) {
oos_get_parent_categories($categories, $parent_categories['parent_id']);
}
// Move that ADOdb pointer!
$result->MoveNext();
}
}
/**
* Construct a category path to the product
*
* @param $products_id
* @return string
*/
function oos_get_product_path($products_id) {
$sCategory = '';
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$products_to_categoriestable = $oostable['products_to_categories'];
$query = "SELECT COUNT(*) AS total
FROM $products_to_categoriestable
WHERE products_id = '" . intval($products_id) . "'";
$cat_count_data = $dbconn->Execute($query);
if ($cat_count_data->fields['total'] > 0) {
$categories = array();
$products_to_categoriestable = $oostable['products_to_categories'];
$query = "SELECT categories_id
FROM $products_to_categoriestable
WHERE products_id = '" . intval($products_id) . "'";
$cat_id_sql = $dbconn->Execute($query);
$cat_id_data = $cat_id_sql->fields;
oos_get_parent_categories($categories, $cat_id_data['categories_id']);
$size = count($categories)-1;
for ($i = $size; $i >= 0; $i--) {
if ($sCategory != '') $sCategory .= '_';
$sCategory .= $categories[$i];
}
if ($sCategory != '') $sCategory .= '_';
$sCategory .= $cat_id_data['categories_id'];
}
return $sCategory;
}
/**
* Return string (without trailing & &)
*
* @param $sParameters
* @return string
*/
function oos_remove_trailing($sParameters) {
if (substr($sParameters, -5) == '&') $sParameters = substr($sParameters, 0, -5);
if (substr($sParameters, -1) == '&') $sParameters = substr($sParameters, 0, -1);
return $sParameters;
}
/**
* Return a product ID with attributes
*
* @param $prid
* @param $parameters
* @return string
*/
function oos_get_uprid($prid, $parameters) {
if (is_numeric($prid)) {
$uprid = $prid;
if (is_array($parameters) && (count($parameters) > 0)) {
$attributes_check = TRUE;
$attributes_ids = '';
foreach($parameters as $option => $sValue) {
if (is_numeric($option) && is_numeric($sValue)) {
$attributes_ids .= '{' . intval($option) . '}' . intval($sValue);
} elseif (strstr($option, TEXT_PREFIX)) {
$text_option = substr($option, strlen(TEXT_PREFIX));
$sLen = strlen($sValue);
$attributes_ids .= '{' . intval($text_option) . '}' . intval($sLen);
}
}
if ($attributes_check == TRUE) {
$uprid .= $attributes_ids;
}
}
} else {
$uprid = oos_get_product_id($prid);
if (is_numeric($uprid)) {
if (strpos($prid, '{') !== FALSE) {
$attributes_check = TRUE;
$attributes_ids = '';
// strpos()+1 to remove up to and including the first { which would create an empty array element in explode()
$attributes = explode('{', substr($prid, strpos($prid, '{')+1));
for ($i=0, $n=count($attributes); $i<$n; $i++) {
$pair = explode('}', $attributes[$i]);
if (is_numeric($pair[0]) && is_numeric($pair[1])) {
$attributes_ids .= '{' . intval($pair[0]) . '}' . intval($pair[1]);
} else {
$attributes_check = FALSE;
break;
}
}
if ($attributes_check == TRUE) {
$uprid .= $attributes_ids;
}
}
} else {
return FALSE;
}
}
return $uprid;
}
/**
* Check if product has attributes
*
* @param $products_id
* @return boolean
*/
function oos_has_product_attributes($products_id) {
$products_id = oos_get_product_id($products_id);
// Get database information
$dbconn =& oosDBGetConn();
$oostable =& oosDBGetTables();
$products_attributestable = $oostable['products_attributes'];
$query = "SELECT COUNT(*) AS total
FROM $products_attributestable
WHERE products_id = '" . intval($products_id) . "'";
$attributes = $dbconn->Execute($query);
if ($attributes->fields['total'] > 0) {
return TRUE;
} else {
return FALSE;
}
}
function oos_count_modules($modules = '') {
$nCount = 0;
if (empty($modules)) return $nCount;
$aModules = explode(';', $modules);
for ($i=0, $n=count($aModules); $i<$n; $i++) {
$class = substr($aModules[$i], 0, strrpos($aModules[$i], '.'));
if (is_object($GLOBALS[$class])) {
if ($GLOBALS[$class]->enabled) {
$nCount++;
}
}
}
return $nCount;
}
function oos_count_payment_modules() {
return oos_count_modules($_SESSION['user']->group['payment']);
}
function oos_count_shipping_modules() {
return oos_count_modules(MODULE_SHIPPING_INSTALLED);
}
/**
* Parse and output a user submited value
*
* @param string $sStr The string to parse and output
* @param array $aTranslate An array containing the characters to parse
* @access public
*/
function oos_output_string($sStr, $aTranslate = null) {
if (empty($aTranslate)) {
$aTranslate = array('"' => '"');
}
return strtr(trim($sStr), $aTranslate);
}
/**
* Strip forbidden tags
*
* @param string
* @return string
*/
function oos_remove_tags($source) {
$allowedTags = '
'; $source = strip_tags($source, $allowedTags); return $source; } /** * Replace international chars * * @param string * @return string */ function oos_replace_chars ($sStr) { return oos_make_filename($sStr); } /** * Checks to see if the currency code exists as a currency */ function oos_currency_exits($code) { // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $currenciestable = $oostable['currencies']; $query = "SELECT currencies_id FROM $currenciestable WHERE code = '" . oos_db_input($code) . "'"; $result = $dbconn->Execute($query); if ($result->RecordCount() > 0) { return $code; } else { return FALSE; } } /** * Return secure string * * @param $sStr * @return string */ function oos_string_to_int($sStr) { return intval($sStr); } /** * Return $aContents */ function oos_get_content() { GLOBAL $aContents; return $aContents; } /** * Parse and secure the cPath parameter values * * @param $sCategory * @return array */ function oos_parse_category_path($sCategory) { // make sure the category IDs are integers $aCategoryPath = array_map('oos_string_to_int', explode('_', $sCategory)); // make sure no duplicate category IDs exist which could lock the server in a loop $aTmp = array(); for ($i=0, $n=count($aCategoryPath); $i<$n; $i++) { if (!in_array($aCategoryPath[$i], $aTmp)) { $aTmp[] = $aCategoryPath[$i]; } } return $aTmp; } /** * Return File Extension * * @param $filename * @return string */ function oos_get_extension($filename) { $filename = strtolower($filename); $extension = explode("[/\\.]", $filename); $n = count($extension)-1; $extension = $extension[$n]; return $extension; } /** * Strip non-alpha & non-numeric except ._-: * * @param $sStr * @return string */ function oos_strip_all ($sStr) { $sStr = trim($sStr); $sStr = strtolower($sStr); return preg_match("/[^[:alnum:]._-]/", "", $sStr); } /** * Mail function (uses phpMailer) */ function oos_mail($to_name, $to_email_address, $subject, $email_text, $email_html, $from_email_name, $from_email_address, $attachments = array() ) { global $oEvent, $oEmail; if ( !is_object( $oEvent ) || (!$oEvent->installed_plugin('mail')) ) { return FALSE; } if (preg_match('~[\r\n]~', $to_name)) return FALSE; if (preg_match('~[\r\n]~', $to_email_address)) return FALSE; if (preg_match('~[\r\n]~', $subject)) return FALSE; if (preg_match('~[\r\n]~', $from_email_name)) return FALSE; if (preg_match('~[\r\n]~', $from_email_address)) return FALSE; if ( !is_array($attachments) ) { $attachments = explode( "\n", str_replace( "\r\n", "\n", $attachments ) ); } $sLang = (isset($_SESSION['iso_639_1']) ? $_SESSION['iso_639_1'] : 'en'); // (Re)create it, if it's gone missing if ( !is_object( $oEmail ) || !is_a( $oEmail, 'PHPMailer' ) ) { require_once MYOOS_INCLUDE_PATH . '/includes/lib/phpmailer/class.phpmailer.php'; require_once MYOOS_INCLUDE_PATH . '/includes/lib/phpmailer/class.smtp.php'; // Instantiate a new mail object $oEmail = new PHPMailer( true ); } // Empty out the values that may be set $oEmail->ClearAllRecipients(); $oEmail->ClearAttachments(); $oEmail->ClearCustomHeaders(); $oEmail->ClearReplyTos(); $oEmail->PluginDir = OOS_ABSOLUTE_PATH . 'includes/lib/phpmailer/'; $oEmail->SetLanguage( $sLang, OOS_ABSOLUTE_PATH . 'includes/lib/phpmailer/language/' ); $oEmail->CharSet = CHARSET; $oEmail->IsMail(); $oEmail->From = $from_email_address ? $from_email_address : STORE_OWNER_EMAIL_ADDRESS; $oEmail->FromName = $from_email_name ? $from_email_name : STORE_OWNER; $oEmail->Mailer = EMAIL_TRANSPORT; // Add smtp values if needed if ( EMAIL_TRANSPORT == 'smtp' ) { $oEmail->IsSMTP(); // set mailer to use SMTP $oEmail->SMTPAuth = OOS_SMTPAUTH; // turn on SMTP authentication $oEmail->Username = OOS_SMTPUSER; // SMTP username $oEmail->Password = OOS_SMTPPASS; // SMTP password $oEmail->Host = OOS_SMTPHOST; // specify main and backup server } elseif ( EMAIL_TRANSPORT == 'sendmail' ) { if (!oos_empty(OOS_SENDMAIL)) { $oEmail->Sendmail = OOS_SENDMAIL; $oEmail->IsSendmail(); } } $oEmail->AddAddress($to_email_address, $to_name); $oEmail->Subject = $subject; // Build the text version if (EMAIL_USE_HTML == 'true') { $oEmail->IsHTML(true); $oEmail->Body = $email_html; $oEmail->AltBody = $email_text; } else { $oEmail->IsHTML(false); $oEmail->Body = $email_text; } if ( !empty( $attachments ) ) { foreach ( $attachments as $attachment ) { try { $oEmail->AddAttachment($attachment); } catch ( phpmailerException $e ) { continue; } } } // Send! try { return $oEmail->Send(); } catch ( phpmailerException $e ) { return FALSE; } } function oos_newsletter_subscribe_mail ($email_address) { global $aLang, $sTheme; if (empty($email_address)) { return FALSE; } $sLanguage = isset($_SESSION['language']) ? $_SESSION['language'] : DEFAULT_LANGUAGE; if (oos_validate_is_email($email_address)) { $aContents = oos_get_content(); // Get database information $dbconn =& oosDBGetConn(); $oostable =& oosDBGetTables(); $newsletter_recipients = $oostable['newsletter_recipients']; $dbconn->Execute("DELETE FROM $newsletter_recipients WHERE customers_email_address = '" . oos_db_input($email_address) . "'"); $sRandom = oos_create_random_value(25); $sBefor = oos_create_random_value(4); $dbconn->Execute("INSERT INTO $newsletter_recipients (customers_email_address, mail_key, key_sent, status) VALUES ('" . oos_db_input($email_address) . "', '" . oos_db_input($sRandom) . "', now(), '0')"); $nInsert_ID = $dbconn->Insert_ID(); $newsletter_recipients = $oostable['newsletter_recipients_history']; $dbconn->Execute("INSERT INTO $newsletter_recipients (recipients_id, date_added) VALUES ('" . intval($nInsert_ID) . "', now())"); $sStr = $sBefor . $nInsert_ID . 'f00d'; $sSha1 = sha1($sStr); $newsletter_recipients = $oostable['newsletter_recipients']; $dbconn->Execute("UPDATE $newsletter_recipients SET mail_sha1 = '" . oos_db_input($sSha1) . "' WHERE recipients_id = '" . intval($nInsert_ID) . "'"); //smarty require_once MYOOS_INCLUDE_PATH . '/includes/classes/class_template.php'; $smarty = new myOOS_Smarty(); // dont allow cache $smarty->caching = FALSE; $smarty->assign( array( 'shop_name' => STORE_NAME, 'shop_url' => OOS_HTTPS_SERVER . OOS_SHOP, 'shop_logo' => STORE_LOGO, 'services_url' => COMMUNITY, 'blog_url' => BLOG_URL, 'imprint_url' => oos_href_link($aContents['information'], 'information_id=1', FALSE, TRUE), 'subscribe' => oos_href_link($aContents['newsletter'], 'action=lists&subscribe=confirm&u=' . $sSha1 . '&id=' . $sStr . '&e=' . $sRandom, FALSE, TRUE) ) ); // create mails $email_html = $smarty->fetch($sTheme . '/email/' . $sLanguage . '/newsletter_subscribe.html'); $email_txt = $smarty->fetch($sTheme . '/email/' . $sLanguage . '/newsletter_subscribe.tpl'); oos_mail('', $email_address, $aLang['newsletter_email_subject'], $email_txt, $email_html, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); } }