1355 lines
43 KiB
PHP
Executable File
1355 lines
43 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* functions_general.php
|
|
* General functions used throughout Zen Cart
|
|
*
|
|
* @package functions
|
|
* @copyright Copyright 2003-2005 Zen Cart Development Team
|
|
* @copyright Portions Copyright 2003 osCommerce
|
|
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
|
|
* @version $Id: functions_general.php 3670 2006-05-29 20:24:28Z wilt $
|
|
*/
|
|
if (!defined('IS_ADMIN_FLAG')) {
|
|
die('Illegal Access');
|
|
}
|
|
/**
|
|
* Stop from parsing any further PHP code
|
|
*/
|
|
function zen_exit() {
|
|
zen_session_close();
|
|
exit();
|
|
}
|
|
|
|
/**
|
|
* Redirect to another page or site
|
|
* @param string The url to redirect to
|
|
*/
|
|
function zen_redirect($url) {
|
|
global $request_type;
|
|
if ( (ENABLE_SSL == true) && ($request_type == 'SSL') ) { // We are loading an SSL page
|
|
if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url
|
|
$url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL
|
|
}
|
|
}
|
|
|
|
// clean up URL before executing it
|
|
while (strstr($url, '&&')) $url = str_replace('&&', '&', $url);
|
|
while (strstr($url, '&&')) $url = str_replace('&&', '&', $url);
|
|
// header locates should not have the & in the address it breaks things
|
|
while (strstr($url, '&')) $url = str_replace('&', '&', $url);
|
|
|
|
header('Location: ' . $url);
|
|
|
|
zen_exit();
|
|
}
|
|
|
|
/**
|
|
* Parse the data used in the html tags to ensure the tags will not break.
|
|
* Basically just an extension to the php strstr function
|
|
* @param string The string to be parsed
|
|
* @param string The needle to find
|
|
*/
|
|
// Parse the data used in the html tags to ensure the tags will not break
|
|
function zen_parse_input_field_data($data, $parse) {
|
|
return strtr(trim($data), $parse);
|
|
}
|
|
|
|
/**
|
|
* Returns a string with conversions for security.
|
|
* @param string The string to be parsed
|
|
* @param string contains a string to be translated, otherwise just quote is translated
|
|
* @param boolean Do we run htmlspecialchars over the string
|
|
*/
|
|
function zen_output_string($string, $translate = false, $protected = false) {
|
|
if ($protected == true) {
|
|
return htmlspecialchars($string);
|
|
} else {
|
|
if ($translate == false) {
|
|
return zen_parse_input_field_data($string, array('"' => '"'));
|
|
} else {
|
|
return zen_parse_input_field_data($string, $translate);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a string with conversions for security.
|
|
*
|
|
* Simply calls the zen_ouput_string function
|
|
* with parameters that run htmlspecialchars over the string
|
|
* and converts quotes to html entities
|
|
*
|
|
* @param string The string to be parsed
|
|
*/
|
|
function zen_output_string_protected($string) {
|
|
return zen_output_string($string, false, true);
|
|
}
|
|
|
|
/**
|
|
* Returns a string with conversions for security.
|
|
*
|
|
* @param string The string to be parsed
|
|
*/
|
|
|
|
function zen_sanitize_string($string) {
|
|
$string = ereg_replace(' +', ' ', $string);
|
|
return preg_replace("/[<>]/", '_', $string);
|
|
}
|
|
|
|
|
|
/**
|
|
* Break a word in a string if it is longer than a specified length ($len)
|
|
*
|
|
* @param string The string to be broken up
|
|
* @param int The maximum length allowed
|
|
* @param string The character to use at the end of the broken line
|
|
*/
|
|
function zen_break_string($string, $len, $break_char = '-') {
|
|
$l = 0;
|
|
$output = '';
|
|
for ($i=0, $n=strlen($string); $i<$n; $i++) {
|
|
$char = substr($string, $i, 1);
|
|
if ($char != ' ') {
|
|
$l++;
|
|
} else {
|
|
$l = 0;
|
|
}
|
|
if ($l > $len) {
|
|
$l = 1;
|
|
$output .= $break_char;
|
|
}
|
|
$output .= $char;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Return all HTTP GET variables, except those passed as a parameter
|
|
*
|
|
* The return is a urlencoded string
|
|
*
|
|
* @param mixed either a single or array of parameter names to be excluded from output
|
|
*/
|
|
// Return all HTTP GET variables, except those passed as a parameter
|
|
function zen_get_all_get_params($exclude_array = '', $search_engine_safe = true) {
|
|
|
|
if (!is_array($exclude_array)) $exclude_array = array();
|
|
|
|
$get_url = '';
|
|
if (is_array($_GET) && (sizeof($_GET) > 0)) {
|
|
reset($_GET);
|
|
while (list($key, $value) = each($_GET)) {
|
|
if ( (strlen($value) > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) {
|
|
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
|
|
// die ('here');
|
|
$get_url .= $key . '/' . rawurlencode(stripslashes($value)) . '/';
|
|
} else {
|
|
$get_url .= $key . '=' . rawurlencode(stripslashes($value)) . '&';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
while (strstr($get_url, '&&')) $get_url = str_replace('&&', '&', $get_url);
|
|
while (strstr($get_url, '&&')) $get_url = str_replace('&&', '&', $get_url);
|
|
|
|
return $get_url;
|
|
}
|
|
|
|
|
|
////
|
|
// Returns the clients browser
|
|
function zen_browser_detect($component) {
|
|
global $HTTP_USER_AGENT;
|
|
|
|
return stristr($HTTP_USER_AGENT, $component);
|
|
}
|
|
|
|
|
|
////
|
|
// Wrapper function for round()
|
|
function zen_round($number, $precision) {
|
|
/// fix rounding error on GVs etc.
|
|
$number = round($number, $precision);
|
|
|
|
return $number;
|
|
}
|
|
|
|
|
|
////
|
|
// default filler is a 0 or pass filler to be used
|
|
function zen_row_number_format($number, $filler='0') {
|
|
if ( ($number < 10) && (substr($number, 0, 1) != '0') ) $number = $filler . $number;
|
|
|
|
return $number;
|
|
}
|
|
|
|
|
|
// Output a raw date string in the selected locale date format
|
|
// $raw_date needs to be in this format: YYYY-MM-DD HH:MM:SS
|
|
function zen_date_long($raw_date) {
|
|
if ( ($raw_date == '0001-01-01 00:00:00') || ($raw_date == '') ) return false;
|
|
|
|
$year = (int)substr($raw_date, 0, 4);
|
|
$month = (int)substr($raw_date, 5, 2);
|
|
$day = (int)substr($raw_date, 8, 2);
|
|
$hour = (int)substr($raw_date, 11, 2);
|
|
$minute = (int)substr($raw_date, 14, 2);
|
|
$second = (int)substr($raw_date, 17, 2);
|
|
|
|
return strftime(DATE_FORMAT_LONG, mktime($hour,$minute,$second,$month,$day,$year));
|
|
}
|
|
|
|
|
|
////
|
|
// Output a raw date string in the selected locale date format
|
|
// $raw_date needs to be in this format: YYYY-MM-DD HH:MM:SS
|
|
// NOTE: Includes a workaround for dates before 01/01/1970 that fail on windows servers
|
|
function zen_date_short($raw_date) {
|
|
if ( ($raw_date == '0001-01-01 00:00:00') || empty($raw_date) ) return false;
|
|
|
|
$year = substr($raw_date, 0, 4);
|
|
$month = (int)substr($raw_date, 5, 2);
|
|
$day = (int)substr($raw_date, 8, 2);
|
|
$hour = (int)substr($raw_date, 11, 2);
|
|
$minute = (int)substr($raw_date, 14, 2);
|
|
$second = (int)substr($raw_date, 17, 2);
|
|
|
|
// error on 1969 only allows for leap year
|
|
if ($year != 1969 && @date('Y', mktime($hour, $minute, $second, $month, $day, $year)) == $year) {
|
|
return date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, $year));
|
|
} else {
|
|
return ereg_replace('2037' . '$', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));
|
|
}
|
|
}
|
|
|
|
////
|
|
// Parse search string into indivual objects
|
|
function zen_parse_search_string($search_str = '', &$objects) {
|
|
$search_str = trim(strtolower($search_str));
|
|
|
|
// Break up $search_str on whitespace; quoted string will be reconstructed later
|
|
$pieces = split('[[:space:]]+', $search_str);
|
|
$objects = array();
|
|
$tmpstring = '';
|
|
$flag = '';
|
|
|
|
for ($k=0; $k<count($pieces); $k++) {
|
|
while (substr($pieces[$k], 0, 1) == '(') {
|
|
$objects[] = '(';
|
|
if (strlen($pieces[$k]) > 1) {
|
|
$pieces[$k] = substr($pieces[$k], 1);
|
|
} else {
|
|
$pieces[$k] = '';
|
|
}
|
|
}
|
|
|
|
$post_objects = array();
|
|
|
|
while (substr($pieces[$k], -1) == ')') {
|
|
$post_objects[] = ')';
|
|
if (strlen($pieces[$k]) > 1) {
|
|
$pieces[$k] = substr($pieces[$k], 0, -1);
|
|
} else {
|
|
$pieces[$k] = '';
|
|
}
|
|
}
|
|
|
|
// Check individual words
|
|
|
|
if ( (substr($pieces[$k], -1) != '"') && (substr($pieces[$k], 0, 1) != '"') ) {
|
|
$objects[] = trim($pieces[$k]);
|
|
|
|
for ($j=0; $j<count($post_objects); $j++) {
|
|
$objects[] = $post_objects[$j];
|
|
}
|
|
} else {
|
|
/* This means that the $piece is either the beginning or the end of a string.
|
|
So, we'll slurp up the $pieces and stick them together until we get to the
|
|
end of the string or run out of pieces.
|
|
*/
|
|
|
|
// Add this word to the $tmpstring, starting the $tmpstring
|
|
$tmpstring = trim(ereg_replace('"', ' ', $pieces[$k]));
|
|
|
|
// Check for one possible exception to the rule. That there is a single quoted word.
|
|
if (substr($pieces[$k], -1 ) == '"') {
|
|
// Turn the flag off for future iterations
|
|
$flag = 'off';
|
|
|
|
$objects[] = trim($pieces[$k]);
|
|
|
|
for ($j=0; $j<count($post_objects); $j++) {
|
|
$objects[] = $post_objects[$j];
|
|
}
|
|
|
|
unset($tmpstring);
|
|
|
|
// Stop looking for the end of the string and move onto the next word.
|
|
continue;
|
|
}
|
|
|
|
// Otherwise, turn on the flag to indicate no quotes have been found attached to this word in the string.
|
|
$flag = 'on';
|
|
|
|
// Move on to the next word
|
|
$k++;
|
|
|
|
// Keep reading until the end of the string as long as the $flag is on
|
|
|
|
while ( ($flag == 'on') && ($k < count($pieces)) ) {
|
|
while (substr($pieces[$k], -1) == ')') {
|
|
$post_objects[] = ')';
|
|
if (strlen($pieces[$k]) > 1) {
|
|
$pieces[$k] = substr($pieces[$k], 0, -1);
|
|
} else {
|
|
$pieces[$k] = '';
|
|
}
|
|
}
|
|
|
|
// If the word doesn't end in double quotes, append it to the $tmpstring.
|
|
if (substr($pieces[$k], -1) != '"') {
|
|
// Tack this word onto the current string entity
|
|
$tmpstring .= ' ' . $pieces[$k];
|
|
|
|
// Move on to the next word
|
|
$k++;
|
|
continue;
|
|
} else {
|
|
/* If the $piece ends in double quotes, strip the double quotes, tack the
|
|
$piece onto the tail of the string, push the $tmpstring onto the $haves,
|
|
kill the $tmpstring, turn the $flag "off", and return.
|
|
*/
|
|
$tmpstring .= ' ' . trim(ereg_replace('"', ' ', $pieces[$k]));
|
|
|
|
// Push the $tmpstring onto the array of stuff to search for
|
|
$objects[] = trim($tmpstring);
|
|
|
|
for ($j=0; $j<count($post_objects); $j++) {
|
|
$objects[] = $post_objects[$j];
|
|
}
|
|
|
|
unset($tmpstring);
|
|
|
|
// Turn off the flag to exit the loop
|
|
$flag = 'off';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// add default logical operators if needed
|
|
$temp = array();
|
|
for($i=0; $i<(count($objects)-1); $i++) {
|
|
$temp[] = $objects[$i];
|
|
if ( ($objects[$i] != 'and') &&
|
|
($objects[$i] != 'or') &&
|
|
($objects[$i] != '(') &&
|
|
($objects[$i+1] != 'and') &&
|
|
($objects[$i+1] != 'or') &&
|
|
($objects[$i+1] != ')') ) {
|
|
$temp[] = ADVANCED_SEARCH_DEFAULT_OPERATOR;
|
|
}
|
|
}
|
|
$temp[] = $objects[$i];
|
|
$objects = $temp;
|
|
|
|
$keyword_count = 0;
|
|
$operator_count = 0;
|
|
$balance = 0;
|
|
for($i=0; $i<count($objects); $i++) {
|
|
if ($objects[$i] == '(') $balance --;
|
|
if ($objects[$i] == ')') $balance ++;
|
|
if ( ($objects[$i] == 'and') || ($objects[$i] == 'or') ) {
|
|
$operator_count ++;
|
|
} elseif ( ($objects[$i]) && ($objects[$i] != '(') && ($objects[$i] != ')') ) {
|
|
$keyword_count ++;
|
|
}
|
|
}
|
|
|
|
if ( ($operator_count < $keyword_count) && ($balance == 0) ) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
// Check date
|
|
function zen_checkdate($date_to_check, $format_string, &$date_array) {
|
|
$separator_idx = -1;
|
|
|
|
$separators = array('-', ' ', '/', '.');
|
|
$month_abbr = array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');
|
|
$no_of_days = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
|
|
|
|
$format_string = strtolower($format_string);
|
|
|
|
if (strlen($date_to_check) != strlen($format_string)) {
|
|
return false;
|
|
}
|
|
|
|
$size = sizeof($separators);
|
|
for ($i=0; $i<$size; $i++) {
|
|
$pos_separator = strpos($date_to_check, $separators[$i]);
|
|
if ($pos_separator != false) {
|
|
$date_separator_idx = $i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for ($i=0; $i<$size; $i++) {
|
|
$pos_separator = strpos($format_string, $separators[$i]);
|
|
if ($pos_separator != false) {
|
|
$format_separator_idx = $i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($date_separator_idx != $format_separator_idx) {
|
|
return false;
|
|
}
|
|
|
|
if ($date_separator_idx != -1) {
|
|
$format_string_array = explode( $separators[$date_separator_idx], $format_string );
|
|
if (sizeof($format_string_array) != 3) {
|
|
return false;
|
|
}
|
|
|
|
$date_to_check_array = explode( $separators[$date_separator_idx], $date_to_check );
|
|
if (sizeof($date_to_check_array) != 3) {
|
|
return false;
|
|
}
|
|
|
|
$size = sizeof($format_string_array);
|
|
for ($i=0; $i<$size; $i++) {
|
|
if ($format_string_array[$i] == 'mm' || $format_string_array[$i] == 'mmm') $month = $date_to_check_array[$i];
|
|
if ($format_string_array[$i] == 'dd') $day = $date_to_check_array[$i];
|
|
if ( ($format_string_array[$i] == 'yyyy') || ($format_string_array[$i] == 'aaaa') ) $year = $date_to_check_array[$i];
|
|
}
|
|
} else {
|
|
if (strlen($format_string) == 8 || strlen($format_string) == 9) {
|
|
$pos_month = strpos($format_string, 'mmm');
|
|
if ($pos_month != false) {
|
|
$month = substr( $date_to_check, $pos_month, 3 );
|
|
$size = sizeof($month_abbr);
|
|
for ($i=0; $i<$size; $i++) {
|
|
if ($month == $month_abbr[$i]) {
|
|
$month = $i;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
$month = substr($date_to_check, strpos($format_string, 'mm'), 2);
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$day = substr($date_to_check, strpos($format_string, 'dd'), 2);
|
|
$year = substr($date_to_check, strpos($format_string, 'yyyy'), 4);
|
|
}
|
|
|
|
if (strlen($year) != 4) {
|
|
return false;
|
|
}
|
|
|
|
if (!settype($year, 'integer') || !settype($month, 'integer') || !settype($day, 'integer')) {
|
|
return false;
|
|
}
|
|
|
|
if ($month > 12 || $month < 1) {
|
|
return false;
|
|
}
|
|
|
|
if ($day < 1) {
|
|
return false;
|
|
}
|
|
|
|
if (zen_is_leap_year($year)) {
|
|
$no_of_days[1] = 29;
|
|
}
|
|
|
|
if ($day > $no_of_days[$month - 1]) {
|
|
return false;
|
|
}
|
|
|
|
$date_array = array($year, $month, $day);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
////
|
|
// Check if year is a leap year
|
|
function zen_is_leap_year($year) {
|
|
if ($year % 100 == 0) {
|
|
if ($year % 400 == 0) return true;
|
|
} else {
|
|
if (($year % 4) == 0) return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
////
|
|
// Return table heading with sorting capabilities
|
|
function zen_create_sort_heading($sortby, $colnum, $heading) {
|
|
global $PHP_SELF;
|
|
|
|
$sort_prefix = '';
|
|
$sort_suffix = '';
|
|
|
|
if ($sortby) {
|
|
$sort_prefix = '<a href="' . zen_href_link($_GET['main_page'], zen_get_all_get_params(array('page', 'info', 'sort')) . 'page=1&sort=' . $colnum . ($sortby == $colnum . 'a' ? 'd' : 'a')) . '" title="' . zen_output_string(TEXT_SORT_PRODUCTS . ($sortby == $colnum . 'd' || substr($sortby, 0, 1) != $colnum ? TEXT_ASCENDINGLY : TEXT_DESCENDINGLY) . TEXT_BY . $heading) . '" class="productListing-heading">' ;
|
|
$sort_suffix = (substr($sortby, 0, 1) == $colnum ? (substr($sortby, 1, 1) == 'a' ? PRODUCT_LIST_SORT_ORDER_ASCENDING : PRODUCT_LIST_SORT_ORDER_DESCENDING) : '') . '</a>';
|
|
}
|
|
|
|
return $sort_prefix . $heading . $sort_suffix;
|
|
}
|
|
|
|
|
|
////
|
|
// Return a product ID with attributes
|
|
/*
|
|
function zen_get_uprid_OLD($prid, $params) {
|
|
$uprid = $prid;
|
|
if ( (is_array($params)) && (!strstr($prid, '{')) ) {
|
|
while (list($option, $value) = each($params)) {
|
|
$uprid = $uprid . '{' . $option . '}' . $value;
|
|
}
|
|
}
|
|
|
|
return $uprid;
|
|
}
|
|
*/
|
|
|
|
|
|
////
|
|
// Return a product ID with attributes
|
|
function zen_get_uprid($prid, $params) {
|
|
//print_r($params);
|
|
$uprid = $prid;
|
|
if ( (is_array($params)) && (!strstr($prid, ':')) ) {
|
|
while (list($option, $value) = each($params)) {
|
|
if (is_array($value)) {
|
|
while (list($opt, $val) = each($value)) {
|
|
$uprid = $uprid . '{' . $option . '}' . trim($opt);
|
|
}
|
|
break;
|
|
}
|
|
//CLR 030714 Add processing around $value. This is needed for text attributes.
|
|
$uprid = $uprid . '{' . $option . '}' . trim($value);
|
|
}
|
|
//CLR 030228 Add else stmt to process product ids passed in by other routines.
|
|
$md_uprid = '';
|
|
|
|
$md_uprid = md5($uprid);
|
|
return $prid . ':' . $md_uprid;
|
|
} else {
|
|
return $prid;
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
// Return a product ID from a product ID with attributes
|
|
function zen_get_prid($uprid) {
|
|
$pieces = explode(':', $uprid);
|
|
|
|
return $pieces[0];
|
|
}
|
|
|
|
|
|
|
|
////
|
|
// Get the number of times a word/character is present in a string
|
|
function zen_word_count($string, $needle) {
|
|
$temp_array = split($needle, $string);
|
|
|
|
return sizeof($temp_array);
|
|
}
|
|
|
|
|
|
////
|
|
function zen_count_modules($modules = '') {
|
|
$count = 0;
|
|
|
|
if (empty($modules)) return $count;
|
|
|
|
$modules_array = split(';', $modules);
|
|
|
|
for ($i=0, $n=sizeof($modules_array); $i<$n; $i++) {
|
|
$class = substr($modules_array[$i], 0, strrpos($modules_array[$i], '.'));
|
|
|
|
if (is_object($GLOBALS[$class])) {
|
|
if ($GLOBALS[$class]->enabled) {
|
|
$count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $count;
|
|
}
|
|
|
|
////
|
|
function zen_count_payment_modules() {
|
|
return zen_count_modules(MODULE_PAYMENT_INSTALLED);
|
|
}
|
|
|
|
////
|
|
function zen_count_shipping_modules() {
|
|
return zen_count_modules(MODULE_SHIPPING_INSTALLED);
|
|
}
|
|
|
|
////
|
|
function zen_create_random_value($length, $type = 'mixed') {
|
|
if ( ($type != 'mixed') && ($type != 'chars') && ($type != 'digits')) return false;
|
|
|
|
$rand_value = '';
|
|
while (strlen($rand_value) < $length) {
|
|
if ($type == 'digits') {
|
|
$char = zen_rand(0,9);
|
|
} else {
|
|
$char = chr(zen_rand(0,255));
|
|
}
|
|
if ($type == 'mixed') {
|
|
if (eregi('^[a-z0-9]$', $char)) $rand_value .= $char;
|
|
} elseif ($type == 'chars') {
|
|
if (eregi('^[a-z]$', $char)) $rand_value .= $char;
|
|
} elseif ($type == 'digits') {
|
|
if (ereg('^[0-9]$', $char)) $rand_value .= $char;
|
|
}
|
|
}
|
|
|
|
return $rand_value;
|
|
}
|
|
|
|
////
|
|
function zen_array_to_string($array, $exclude = '', $equals = '=', $separator = '&') {
|
|
if (!is_array($exclude)) $exclude = array();
|
|
if (!is_array($array)) $array = array();
|
|
|
|
$get_string = '';
|
|
if (sizeof($array) > 0) {
|
|
while (list($key, $value) = each($array)) {
|
|
if ( (!in_array($key, $exclude)) && ($key != 'x') && ($key != 'y') ) {
|
|
$get_string .= $key . $equals . $value . $separator;
|
|
}
|
|
}
|
|
$remove_chars = strlen($separator);
|
|
$get_string = substr($get_string, 0, -$remove_chars);
|
|
}
|
|
|
|
return $get_string;
|
|
}
|
|
|
|
////
|
|
function zen_not_null($value) {
|
|
if (is_array($value)) {
|
|
if (sizeof($value) > 0) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
// Checks to see if the currency code exists as a currency
|
|
// TABLES: currencies
|
|
function zen_currency_exists($code) {
|
|
global $db;
|
|
$code = zen_db_prepare_input($code);
|
|
|
|
$currency_code = "select currencies_id
|
|
from " . TABLE_CURRENCIES . "
|
|
where code = '" . zen_db_input($code) . "'";
|
|
|
|
$currency = $db->Execute($currency_code);
|
|
|
|
if ($currency->RecordCount()) {
|
|
return strtoupper($code);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
////
|
|
function zen_string_to_int($string) {
|
|
return (int)$string;
|
|
}
|
|
|
|
////
|
|
// Return a random value
|
|
function zen_rand($min = null, $max = null) {
|
|
static $seeded;
|
|
|
|
if (!isset($seeded)) {
|
|
mt_srand((double)microtime()*1000000);
|
|
$seeded = true;
|
|
}
|
|
|
|
if (isset($min) && isset($max)) {
|
|
if ($min >= $max) {
|
|
return $min;
|
|
} else {
|
|
return mt_rand($min, $max);
|
|
}
|
|
} else {
|
|
return mt_rand();
|
|
}
|
|
}
|
|
|
|
////
|
|
function zen_get_top_level_domain($url) {
|
|
if (strpos($url, '://')) {
|
|
$url = parse_url($url);
|
|
$url = $url['host'];
|
|
}
|
|
//echo $url;
|
|
|
|
$domain_array = explode('.', $url);
|
|
$domain_size = sizeof($domain_array);
|
|
if ($domain_size > 1) {
|
|
if (SESSION_USE_FQDN == 'True') return $url;
|
|
if (is_numeric($domain_array[$domain_size-2]) && is_numeric($domain_array[$domain_size-1])) {
|
|
return false;
|
|
} else {
|
|
if ($domain_size > 3) {
|
|
return $domain_array[$domain_size-3] . '.' . $domain_array[$domain_size-2] . '.' . $domain_array[$domain_size-1];
|
|
} else {
|
|
return $domain_array[$domain_size-2] . '.' . $domain_array[$domain_size-1];
|
|
}
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
////
|
|
function zen_setcookie($name, $value = '', $expire = 0, $path = '/', $domain = '', $secure = 0) {
|
|
setcookie($name, $value, $expire, $path, $domain, $secure);
|
|
}
|
|
|
|
////
|
|
function zen_get_ip_address() {
|
|
if (isset($_SERVER)) {
|
|
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
|
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
|
|
$ip = $_SERVER['HTTP_CLIENT_IP'];
|
|
} else {
|
|
$ip = $_SERVER['REMOTE_ADDR'];
|
|
}
|
|
} else {
|
|
if (getenv('HTTP_X_FORWARDED_FOR')) {
|
|
$ip = getenv('HTTP_X_FORWARDED_FOR');
|
|
} elseif (getenv('HTTP_CLIENT_IP')) {
|
|
$ip = getenv('HTTP_CLIENT_IP');
|
|
} else {
|
|
$ip = getenv('REMOTE_ADDR');
|
|
}
|
|
}
|
|
|
|
return $ip;
|
|
}
|
|
|
|
|
|
// nl2br() prior PHP 4.2.0 did not convert linefeeds on all OSs (it only converted \n)
|
|
function zen_convert_linefeeds($from, $to, $string) {
|
|
if ((PHP_VERSION < "4.0.5") && is_array($from)) {
|
|
return ereg_replace('(' . implode('|', $from) . ')', $to, $string);
|
|
} else {
|
|
return str_replace($from, $to, $string);
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
function is_product_valid($product_id, $coupon_id) {
|
|
global $db;
|
|
$coupons_query = "SELECT * FROM " . TABLE_COUPON_RESTRICT . "
|
|
WHERE coupon_id = '" . $coupon_id . "'
|
|
ORDER BY coupon_restrict ASC";
|
|
|
|
$coupons = $db->Execute($coupons_query);
|
|
|
|
$product_query = "SELECT products_model FROM " . TABLE_PRODUCTS . "
|
|
WHERE products_id = '" . (int)$product_id . "'";
|
|
|
|
$product = $db->Execute($product_query);
|
|
|
|
if (ereg('^GIFT', $product->fields['products_model'])) {
|
|
return false;
|
|
}
|
|
|
|
// modified to manage restrictions better - leave commented for now
|
|
if ($coupons->RecordCount() == 0) return true;
|
|
if ($coupons->RecordCount() == 1) {
|
|
// If product is restricted(deny) and is same as tested prodcut deny
|
|
if (($coupons->fields['product_id'] != 0) && $coupons->fields['product_id'] == (int)$product_id && $coupons->fields['coupon_restrict']=='Y') return false;
|
|
// If product is not restricted(allow) and is not same as tested prodcut deny
|
|
if (($coupons->fields['product_id'] != 0) && $coupons->fields['product_id'] != (int)$product_id && $coupons->fields['coupon_restrict']=='N') return false;
|
|
// if category is restricted(deny) and product in category deny
|
|
if (($coupons->fields['category_id'] !=0) && (zen_product_in_category($product_id, $coupons->fields['category_id'])) && ($coupons->fields['coupon_restrict']=='Y')) return false;
|
|
// if category is not restricted(allow) and product not in category deny
|
|
if (($coupons->fields['category_id'] !=0) && (!zen_product_in_category($product_id, $coupons->fields['category_id'])) && ($coupons->fields['coupon_restrict']=='N')) return false;
|
|
return true;
|
|
}
|
|
$allow_for_category = validate_for_category($product_id, $coupon_id);
|
|
$allow_for_product = validate_for_product($product_id, $coupon_id);
|
|
// echo '#'.$product_id . '#' . $allow_for_category;
|
|
// echo '#'.$product_id . '#' . $allow_for_product;
|
|
if ($allow_for_category == 'none') {
|
|
if ($allow_for_product === 'none') return true;
|
|
if ($allow_for_product === true) return true;
|
|
if ($allow_for_product === false) return false;
|
|
}
|
|
if ($allow_for_category === true) {
|
|
if ($allow_for_product === 'none') return true;
|
|
if ($allow_for_product === true) return true;
|
|
if ($allow_for_product === false) return false;
|
|
}
|
|
if ($allow_for_category === false) {
|
|
if ($allow_for_product === 'none') return false;
|
|
if ($allow_for_product === true) return true;
|
|
if ($allow_for_product === false) return false;
|
|
}
|
|
return false; //should never get here
|
|
}
|
|
function validate_for_category($product_id, $coupon_id) {
|
|
global $db;
|
|
$retVal = 'none';
|
|
$productCatPath = zen_get_product_path($product_id);
|
|
$catPathArray = array_reverse(explode('_', $productCatPath));
|
|
$sql = "SELECT count(*) AS total
|
|
FROM " . TABLE_COUPON_RESTRICT . "
|
|
WHERE category_id = -1
|
|
AND coupon_restrict = 'Y'";
|
|
$checkQuery = $db->execute($sql);
|
|
foreach ($catPathArray as $catPath) {
|
|
$sql = "SELECT * FROM " . TABLE_COUPON_RESTRICT . "
|
|
WHERE category_id = " . $catPath . "
|
|
AND coupon_id = " . $coupon_id;
|
|
$result = $db->execute($sql);
|
|
if ($result->recordCount() > 0 && $result->fields['coupon_restrict'] == 'N') return true;
|
|
if ($result->recordCount() > 0 && $result->fields['coupon_restrict'] == 'Y') return false;
|
|
}
|
|
if ($checkQuery->fields['total'] > 0) {
|
|
return false;
|
|
} else {
|
|
return 'none';
|
|
}
|
|
}
|
|
function validate_for_product($product_id, $coupon_id) {
|
|
global $db;
|
|
$sql = "SELECT * FROM " . TABLE_COUPON_RESTRICT . "
|
|
WHERE product_id = " . (int)$product_id . "
|
|
AND coupon_id = " . $coupon_id . " LIMIT 1";
|
|
$result = $db->execute($sql);
|
|
if ($result->recordCount() > 0) {
|
|
if ($result->fields['coupon_restrict'] == 'N') return true;
|
|
if ($result->fields['coupon_restrict'] == 'Y') return false;
|
|
} else {
|
|
return 'none';
|
|
}
|
|
}
|
|
|
|
////
|
|
function zen_db_input($string) {
|
|
return addslashes($string);
|
|
}
|
|
|
|
////
|
|
function zen_db_prepare_input($string) {
|
|
if (is_string($string)) {
|
|
return trim(zen_sanitize_string(stripslashes($string)));
|
|
} elseif (is_array($string)) {
|
|
reset($string);
|
|
while (list($key, $value) = each($string)) {
|
|
$string[$key] = zen_db_prepare_input($value);
|
|
}
|
|
return $string;
|
|
} else {
|
|
return $string;
|
|
}
|
|
}
|
|
|
|
////
|
|
function zen_db_perform($table, $data, $action = 'insert', $parameters = '', $link = 'db_link') {
|
|
global $db;
|
|
reset($data);
|
|
if (strtolower($action) == 'insert') {
|
|
$query = 'INSERT INTO ' . $table . ' (';
|
|
while (list($columns, ) = each($data)) {
|
|
$query .= $columns . ', ';
|
|
}
|
|
$query = substr($query, 0, -2) . ') VALUES (';
|
|
reset($data);
|
|
while (list(, $value) = each($data)) {
|
|
switch ((string)$value) {
|
|
case 'now()':
|
|
$query .= 'now(), ';
|
|
break;
|
|
case 'null':
|
|
$query .= 'null, ';
|
|
break;
|
|
default:
|
|
$query .= '\'' . zen_db_input($value) . '\', ';
|
|
break;
|
|
}
|
|
}
|
|
$query = substr($query, 0, -2) . ')';
|
|
} elseif (strtolower($action) == 'update') {
|
|
$query = 'UPDATE ' . $table . ' SET ';
|
|
while (list($columns, $value) = each($data)) {
|
|
switch ((string)$value) {
|
|
case 'now()':
|
|
$query .= $columns . ' = now(), ';
|
|
break;
|
|
case 'null':
|
|
$query .= $columns .= ' = null, ';
|
|
break;
|
|
default:
|
|
$query .= $columns . ' = \'' . zen_db_input($value) . '\', ';
|
|
break;
|
|
}
|
|
}
|
|
$query = substr($query, 0, -2) . ' WHERE ' . $parameters;
|
|
}
|
|
|
|
return $db->Execute($query);
|
|
}
|
|
|
|
////
|
|
function zen_db_output($string) {
|
|
return htmlspecialchars($string);
|
|
}
|
|
|
|
|
|
// function to return field type
|
|
// uses $tbl = table name, $fld = field name
|
|
|
|
function zen_field_type($tbl, $fld) {
|
|
global $db;
|
|
$rs = $db->MetaColumns($tbl);
|
|
$type = $rs[strtoupper($fld)]->type;
|
|
return $type;
|
|
}
|
|
|
|
// function to return field length
|
|
// uses $tbl = table name, $fld = field name
|
|
function zen_field_length($tbl, $fld) {
|
|
global $db;
|
|
$rs = $db->MetaColumns($tbl);
|
|
$length = $rs[strtoupper($fld)]->max_length;
|
|
return $length;
|
|
}
|
|
|
|
////
|
|
// return the size and maxlength settings in the form size="blah" maxlength="blah" based on maximum size being 70
|
|
// uses $tbl = table name, $fld = field name
|
|
// example: zen_set_field_length(TABLE_CATEGORIES_DESCRIPTION, 'categories_name')
|
|
function zen_set_field_length($tbl, $fld, $max=70) {
|
|
$field_length= zen_field_length($tbl, $fld);
|
|
switch (true) {
|
|
case ($field_length > $max):
|
|
$length= 'size = "' . ($max+1) . '" maxlength= "' . $field_length . '"';
|
|
break;
|
|
default:
|
|
$length= 'size = "' . ($field_length+1) . '" maxlength = "' . $field_length . '"';
|
|
break;
|
|
}
|
|
return $length;
|
|
}
|
|
|
|
|
|
////
|
|
// Set back button
|
|
function zen_back_link() {
|
|
if (sizeof($_SESSION['navigation']->path)-2 > 0) {
|
|
$back = sizeof($_SESSION['navigation']->path)-2;
|
|
$link = '<a href="' . zen_href_link($_SESSION['navigation']->path[$back]['page'], zen_array_to_string($_SESSION['navigation']->path[$back]['get'], array('action')), $_SESSION['navigation']->path[$back]['mode']) . '">';
|
|
} else {
|
|
if (isset($_SERVER['HTTP_REFERER']) && strstr(HTTP_SERVER, $_SERVER['HTTP_REFERER'])) {
|
|
$link= $_SERVER['HTTP_REFERER'];
|
|
} else {
|
|
$link = '<a href="' . zen_href_link(FILENAME_DEFAULT) . '">';
|
|
}
|
|
$_SESSION['navigation'] = new navigationHistory;
|
|
}
|
|
return $link;
|
|
}
|
|
|
|
|
|
////
|
|
// Set back link only
|
|
function zen_back_link_only($link_only = false) {
|
|
if (sizeof($_SESSION['navigation']->path)-2 > 0) {
|
|
$back = sizeof($_SESSION['navigation']->path)-2;
|
|
$link = zen_href_link($_SESSION['navigation']->path[$back]['page'], zen_array_to_string($_SESSION['navigation']->path[$back]['get'], array('action')), $_SESSION['navigation']->path[$back]['mode']);
|
|
} else {
|
|
if (strstr(HTTP_SERVER, $_SERVER['HTTP_REFERER'])) {
|
|
$link= $_SERVER['HTTP_REFERER'];
|
|
} else {
|
|
$link = zen_href_link(FILENAME_DEFAULT);
|
|
}
|
|
$_SESSION['navigation'] = new navigationHistory;
|
|
}
|
|
|
|
if ($link_only == true) {
|
|
return $link;
|
|
} else {
|
|
return '<a href="' . $link . '">';
|
|
}
|
|
}
|
|
|
|
////
|
|
// Return a random row from a database query
|
|
function zen_random_select($query) {
|
|
global $db;
|
|
$random_product = '';
|
|
$random_query = $db->Execute($query);
|
|
$num_rows = $random_query->RecordCount();
|
|
if ($num_rows > 1) {
|
|
$random_row = zen_rand(0, ($num_rows - 1));
|
|
$random_query->Move($random_row);
|
|
}
|
|
return $random_query;
|
|
}
|
|
|
|
|
|
////
|
|
// Truncate a string
|
|
function zen_trunc_string($str = "", $len = 150, $more = 'true') {
|
|
if ($str == "") return $str;
|
|
if (is_array($str)) return $str;
|
|
$str = trim($str);
|
|
// if it's les than the size given, then return it
|
|
if (strlen($str) <= $len) return $str;
|
|
// else get that size of text
|
|
$str = substr($str, 0, $len);
|
|
// backtrack to the end of a word
|
|
if ($str != "") {
|
|
// check to see if there are any spaces left
|
|
if (!substr_count($str , " ")) {
|
|
if ($more == 'true') $str .= "...";
|
|
return $str;
|
|
}
|
|
// backtrack
|
|
while(strlen($str) && ($str[strlen($str)-1] != " ")) {
|
|
$str = substr($str, 0, -1);
|
|
}
|
|
$str = substr($str, 0, -1);
|
|
if ($more == 'true') $str .= "...";
|
|
if ($more != 'true' and $more != 'false') $str .= $more;
|
|
}
|
|
return $str;
|
|
}
|
|
|
|
|
|
|
|
////
|
|
// set current box id
|
|
function zen_get_box_id($box_id) {
|
|
while (strstr($box_id, '_')) $box_id = str_replace('_', '', $box_id);
|
|
$box_id = str_replace('.php', '', $box_id);
|
|
return $box_id;
|
|
}
|
|
|
|
|
|
////
|
|
// Switch buy now button based on call for price sold out etc.
|
|
function zen_get_buy_now_button($product_id, $link, $additional_link = false) {
|
|
global $db;
|
|
|
|
|
|
// 0 = normal shopping
|
|
// 1 = Login to shop
|
|
// 2 = Can browse but no prices
|
|
// verify display of prices
|
|
switch (true) {
|
|
case (CUSTOMERS_APPROVAL == '1' and $_SESSION['customer_id'] == ''):
|
|
// customer must be logged in to browse
|
|
$login_for_price = '<a href="' . zen_href_link(FILENAME_LOGIN, '', 'SSL') . '">' . TEXT_LOGIN_FOR_PRICE_BUTTON_REPLACE . '</a>';
|
|
return $login_for_price;
|
|
break;
|
|
case (CUSTOMERS_APPROVAL == '2' and $_SESSION['customer_id'] == ''):
|
|
if (TEXT_LOGIN_FOR_PRICE_PRICE == '') {
|
|
// show room only
|
|
return TEXT_LOGIN_FOR_PRICE_BUTTON_REPLACE;
|
|
} else {
|
|
// customer may browse but no prices
|
|
$login_for_price = '<a href="' . zen_href_link(FILENAME_LOGIN, '', 'SSL') . '">' . TEXT_LOGIN_FOR_PRICE_BUTTON_REPLACE . '</a>';
|
|
}
|
|
return $login_for_price;
|
|
break;
|
|
// show room only
|
|
case (CUSTOMERS_APPROVAL == '3'):
|
|
$login_for_price = TEXT_LOGIN_FOR_PRICE_BUTTON_REPLACE_SHOWROOM;
|
|
return $login_for_price;
|
|
break;
|
|
case ((CUSTOMERS_APPROVAL_AUTHORIZATION != '0' and CUSTOMERS_APPROVAL_AUTHORIZATION != '3') and $_SESSION['customer_id'] == ''):
|
|
// customer must be logged in to browse
|
|
$login_for_price = TEXT_AUTHORIZATION_PENDING_BUTTON_REPLACE;
|
|
return $login_for_price;
|
|
break;
|
|
case ((CUSTOMERS_APPROVAL_AUTHORIZATION == '3') and $_SESSION['customer_id'] == ''):
|
|
// customer must be logged in and approved to add to cart
|
|
$login_for_price = '<a href="' . zen_href_link(FILENAME_LOGIN, '', 'SSL') . '">' . TEXT_LOGIN_TO_SHOP_BUTTON_REPLACE . '</a>';
|
|
return $login_for_price;
|
|
break;
|
|
case (CUSTOMERS_APPROVAL_AUTHORIZATION != '0' and $_SESSION['customers_authorization'] > '0'):
|
|
// customer must be logged in to browse
|
|
$login_for_price = TEXT_AUTHORIZATION_PENDING_BUTTON_REPLACE;
|
|
return $login_for_price;
|
|
break;
|
|
default:
|
|
// proceed normally
|
|
break;
|
|
}
|
|
|
|
// show case only
|
|
if (STORE_STATUS != '0') {
|
|
return '<a href="' . zen_href_link(FILENAME_CONTACT_US) . '">' . TEXT_SHOWCASE_ONLY . '</a>';
|
|
}
|
|
|
|
$button_check = $db->Execute("select product_is_call, products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . $product_id . "'");
|
|
switch (true) {
|
|
// cannot be added to the cart
|
|
case (zen_get_products_allow_add_to_cart($product_id) == 'N'):
|
|
return $additional_link;
|
|
break;
|
|
case ($button_check->fields['product_is_call'] == '1'):
|
|
$return_button = '<a href="' . zen_href_link(FILENAME_CONTACT_US) . '">' . TEXT_CALL_FOR_PRICE . '</a>';
|
|
break;
|
|
case ($button_check->fields['products_quantity'] <= 0 and SHOW_PRODUCTS_SOLD_OUT_IMAGE == '1'):
|
|
if ($_GET['main_page'] == zen_get_info_page($product_id)) {
|
|
$return_button = zen_image_button(BUTTON_IMAGE_SOLD_OUT, BUTTON_SOLD_OUT_ALT);
|
|
} else {
|
|
$return_button = zen_image_button(BUTTON_IMAGE_SOLD_OUT_SMALL, BUTTON_SOLD_OUT_SMALL_ALT);
|
|
}
|
|
break;
|
|
default:
|
|
$return_button = $link;
|
|
break;
|
|
}
|
|
if ($return_button != $link and $additional_link != false) {
|
|
return $additional_link . '<br />' . $return_button;
|
|
} else {
|
|
return $return_button;
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
// enable shipping
|
|
function zen_get_shipping_enabled($shipping_module) {
|
|
global $PHP_SELF, $cart, $order;
|
|
|
|
// for admin always true if installed
|
|
if (strstr($PHP_SELF, FILENAME_MODULES)) {
|
|
return true;
|
|
}
|
|
|
|
$check_cart_free = $_SESSION['cart']->in_cart_check('product_is_always_free_shipping','1');
|
|
$check_cart_cnt = $_SESSION['cart']->count_contents();
|
|
$check_cart_weight = $_SESSION['cart']->show_weight();
|
|
|
|
switch(true) {
|
|
// for admin always true if installed
|
|
case (strstr($PHP_SELF, FILENAME_MODULES)):
|
|
return true;
|
|
break;
|
|
// Free Shipping when 0 weight - enable freeshipper - ORDER_WEIGHT_ZERO_STATUS must be on
|
|
case (ORDER_WEIGHT_ZERO_STATUS == '1' and ($check_cart_weight == 0 and $shipping_module == 'freeshipper')):
|
|
return true;
|
|
break;
|
|
// Free Shipping when 0 weight - disable everyone - ORDER_WEIGHT_ZERO_STATUS must be on
|
|
case (ORDER_WEIGHT_ZERO_STATUS == '1' and ($check_cart_weight == 0 and $shipping_module != 'freeshipper')):
|
|
return false;
|
|
break;
|
|
case (($_SESSION['cart']->free_shipping_items() == $check_cart_cnt) and $shipping_module == 'freeshipper'):
|
|
return true;
|
|
break;
|
|
case (($_SESSION['cart']->free_shipping_items() == $check_cart_cnt) and $shipping_module != 'freeshipper'):
|
|
return false;
|
|
break;
|
|
// Always free shipping only true - enable freeshipper
|
|
case (($check_cart_free == $check_cart_cnt) and $shipping_module == 'freeshipper'):
|
|
return true;
|
|
break;
|
|
// Always free shipping only true - disable everyone
|
|
case (($check_cart_free == $check_cart_cnt) and $shipping_module != 'freeshipper'):
|
|
return false;
|
|
break;
|
|
// Always free shipping only is false - disable freeshipper
|
|
case (($check_cart_free != $check_cart_cnt) and $shipping_module == 'freeshipper'):
|
|
return false;
|
|
break;
|
|
default:
|
|
return true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
function zen_html_entity_decode($given_html, $quote_style = ENT_QUOTES) {
|
|
$trans_table = array_flip(get_html_translation_table( HTML_SPECIALCHARS, $quote_style ));
|
|
$trans_table['''] = "'";
|
|
return ( strtr( $given_html, $trans_table ) );
|
|
}
|
|
|
|
////
|
|
//CLR 030228 Add function zen_decode_specialchars
|
|
// Decode string encoded with htmlspecialchars()
|
|
function zen_decode_specialchars($string){
|
|
$string=str_replace('>', '>', $string);
|
|
$string=str_replace('<', '<', $string);
|
|
$string=str_replace(''', "'", $string);
|
|
$string=str_replace('"', "\"", $string);
|
|
$string=str_replace('&', '&', $string);
|
|
|
|
return $string;
|
|
}
|
|
|
|
////
|
|
// remove common HTML from text for display as paragraph
|
|
function zen_clean_html($clean_it) {
|
|
|
|
$clean_it = preg_replace('/\r/', ' ', $clean_it);
|
|
$clean_it = preg_replace('/\t/', ' ', $clean_it);
|
|
$clean_it = preg_replace('/\n/', ' ', $clean_it);
|
|
|
|
$clean_it= nl2br($clean_it);
|
|
|
|
// update breaks with a space for text displays in all listings with descriptions
|
|
while (strstr($clean_it, '<br>')) $clean_it = str_replace('<br>', ' ', $clean_it);
|
|
while (strstr($clean_it, '<br />')) $clean_it = str_replace('<br />', ' ', $clean_it);
|
|
while (strstr($clean_it, '<br/>')) $clean_it = str_replace('<br/>', ' ', $clean_it);
|
|
while (strstr($clean_it, '<p>')) $clean_it = str_replace('<p>', ' ', $clean_it);
|
|
while (strstr($clean_it, '</p>')) $clean_it = str_replace('</p>', ' ', $clean_it);
|
|
|
|
// temporary fix more for reviews than anything else
|
|
while (strstr($clean_it, '<span class="smallText">')) $clean_it = str_replace('<span class="smallText">', ' ', $clean_it);
|
|
while (strstr($clean_it, '</span>')) $clean_it = str_replace('</span>', ' ', $clean_it);
|
|
|
|
while (strstr($clean_it, ' ')) $clean_it = str_replace(' ', ' ', $clean_it);
|
|
|
|
// remove other html code to prevent problems on display of text
|
|
$clean_it = strip_tags($clean_it);
|
|
return $clean_it;
|
|
}
|
|
|
|
|
|
////
|
|
// find module directory
|
|
// include template specific immediate /modules files
|
|
// new_products, products_new_listing, featured_products, featured_products_listing, product_listing, specials_index, upcoming,
|
|
// products_all_listing, products_discount_prices, also_purchased_products
|
|
function zen_get_module_directory($check_file, $dir_only = 'false') {
|
|
global $template_dir;
|
|
|
|
$zv_filename = $check_file;
|
|
if (!strstr($zv_filename, '.php')) $zv_filename .= '.php';
|
|
|
|
if (file_exists(DIR_WS_MODULES . $template_dir . '/' . $zv_filename)) {
|
|
$template_dir_select = $template_dir . '/';
|
|
} else {
|
|
$template_dir_select = '';
|
|
}
|
|
|
|
if ($dir_only == 'true') {
|
|
return $template_dir_select;
|
|
} else {
|
|
return $template_dir_select . $zv_filename;
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
// find template or default file
|
|
function zen_get_file_directory($check_directory, $check_file, $dir_only = 'false') {
|
|
global $template_dir;
|
|
|
|
$zv_filename = $check_file;
|
|
if (!strstr($zv_filename, '.php')) $zv_filename .= '.php';
|
|
|
|
if (file_exists($check_directory . $template_dir . '/' . $zv_filename)) {
|
|
$zv_directory = $check_directory . $template_dir . '/';
|
|
} else {
|
|
$zv_directory = $check_directory;
|
|
}
|
|
|
|
if ($dir_only == 'true') {
|
|
return $zv_directory;
|
|
} else {
|
|
return $zv_directory . $zv_filename;
|
|
}
|
|
}
|
|
|
|
// check to see if database stored GET terms are in the URL as $_GET parameters
|
|
function zen_check_url_get_terms() {
|
|
global $db;
|
|
$zp_sql = "select * from " . TABLE_GET_TERMS_TO_FILTER;
|
|
$zp_filter_terms = $db->Execute($zp_sql);
|
|
$zp_result = false;
|
|
while (!$zp_filter_terms->EOF) {
|
|
if (isset($_GET[$zp_filter_terms->fields['get_term_name']]) && zen_not_null($_GET[$zp_filter_terms->fields['get_term_name']])) $zp_result = true;
|
|
$zp_filter_terms->MoveNext();
|
|
}
|
|
return $zp_result;
|
|
}
|
|
|
|
// replacement for fmod to manage values < 1
|
|
function fmod_round($x, $y) {
|
|
$i = fmod($x*1000,$y*1000);
|
|
return $i;
|
|
}
|
|
|
|
////
|
|
// return truncated paragraph
|
|
function zen_truncate_paragraph($paragraph, $size = 100, $word = ' ') {
|
|
$zv_paragraph = "";
|
|
$word = explode(" ", $paragraph);
|
|
$zv_total = count($word);
|
|
if ($zv_total > $size) {
|
|
for ($x=0; $x < $size; $x++) {
|
|
$zv_paragraph = $zv_paragraph . $word[$x] . " ";
|
|
}
|
|
$zv_paragraph = trim($zv_paragraph);
|
|
} else {
|
|
$zv_paragraph = trim($paragraph);
|
|
}
|
|
return $zv_paragraph;
|
|
}
|
|
|
|
/////////////////////////////////////////////
|
|
////
|
|
// call additional function files
|
|
// prices and quantities
|
|
require(DIR_WS_FUNCTIONS . 'functions_prices.php');
|
|
// taxes
|
|
require(DIR_WS_FUNCTIONS . 'functions_taxes.php');
|
|
// gv and coupons
|
|
require(DIR_WS_FUNCTIONS . 'functions_gvcoupons.php');
|
|
// categories, paths, pulldowns
|
|
require(DIR_WS_FUNCTIONS . 'functions_categories.php');
|
|
// customers and addresses
|
|
require(DIR_WS_FUNCTIONS . 'functions_customers.php');
|
|
// lookup information
|
|
require(DIR_WS_FUNCTIONS . 'functions_lookups.php');
|
|
////
|
|
/////////////////////////////////////////////
|
|
?>
|