It's 2 files from zen-cart that are interfering with one another. The zen-cart writers say it's the space at the end problem causing the conflict. Apparently it's common in these two files.
The error message says:
Warning: Cannot modify header information - headers already sent by (output started at /home/fiberfa/public_html/eshop/includes/languages/english/header.php:46) in /home/fiberfa/public_html/eshop/includes/functions/functions_general.php on line 52
functions_general.php is as follows:
<?php
//
// +----------------------------------------------------------------------+
// |zen-cart Open Source E-commerce |
// +----------------------------------------------------------------------+
// | Copyright (c) 2003 The zen-cart developers |
// | |
// |
http://www.zen-cart.com/index.php |
// | |
// | Portions Copyright (c) 2003 osCommerce |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the GPL license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// |
http://www.zen-cart.com/license/2_0.txt. |
// | If you did not receive a copy of the zen-cart license and are unable |
// | to obtain it through the world-wide-web, please send a note to |
// |
license@zen-cart.com so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// $Id: functions_general.php 637 2004-11-22 15:11:37Z wilt $
//
/**
* General Function Repository.
* @package ZenCart_Functions
*/
/**
* 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) {
if ( (ENABLE_SSL == true) && ($_SERVER['HTTPS'] == 'on') ) { // 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) {
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;
}
////
// 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

S
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

S
// 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);
if (@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' ? '+' : '-') : '') . '</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];
}
////
//! Send email (text/html) using MIME
// This is the old central mail function. The SMTP Server should be configured correctly in php.ini
// Parameters:
// $to_name The name of the recipient, e.g. "Jan Wildeboer"
// $to_email_address The eMail address of the recipient,
// e.g.
jan.wildeboer@gmx.de
// $email_subject The subject of the eMail
// $email_text The text of the eMail, may contain HTML entities
// $from_email_name The name of the sender, e.g. Shop Administration
// $from_email_adress The eMail address of the sender,
// e.g.
info@myzenshop.com
// OLD FUNCTION:
function legacy_zen_mail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address) {
if (SEND_EMAILS != 'true') return false;
// Instantiate a new mail object
$message = new email(array('X-Mailer: Zen Cart Mailer'));
// bof: body of the email clean-up
// clean up & and && from email text
while (strstr($email_text, '&&')) $email_text = str_replace('&&', '&', $email_text);
while (strstr($email_text, '&')) $email_text = str_replace('&', '&', $email_text);
while (strstr($email_text, '&&')) $email_text = str_replace('&&', '&', $email_text);
// clean up money € to e
while (strstr($email_text, '€')) $email_text = str_replace('€', 'e', $email_text);
// fix double quotes
while (strstr($email_text, '"')) $email_text = str_replace('"', '"', $email_text);
// fix slashes
$email_text = stripslashes($email_text);
// eof: body of the email clean-up
// Build the text version
$text = strip_tags($email_text);
if (EMAIL_USE_HTML == 'true') {
$message->add_html($email_text, $text);
} else {
$message->add_text($text);
}
// Send message
$message->build_message();
$message->send($to_name, $to_email_address, $from_email_name, $from_email_address, $email_subject);
}
////
// 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();
$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 $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;
}
if ($coupons->RecordCount() == 0) return true;
$product_valid = true;
while (!$coupons->EOF) {
if (($coupons->fields['product_id'] != 0) && ($coupons->fields['product_id'] != $product_id)) {
$product_valid = false;
}
if (($coupons->fields['category_id'] !=0) && (!zen_product_in_category($product_id, $coupons->fields['category_id'])) && ($coupons->fields['coupon_restrict']=='N')) {
$product_valid = false;
}
if (($coupons->fields['product_id'] == (int)$product_id) && ($coupons->fields['coupon_restrict']=='N')) {
$product_valid = true;
}
if (($coupons->fields['category_id'] !=0) && (zen_product_in_category($product_id, $coupons->fields['category_id'])) && ($coupons->fields['coupon_restrict']=='N')) {
$product_valid = true;
}
if (($coupons->fields['product_id'] == (int)$product_id) && ($coupons->fields['coupon_restrict']=='Y')) {
$product_valid = false;
}
if (($coupons->fields['category_id'] !=0) && (zen_product_in_category($product_id, $coupons->fields['category_id'])) && ($coupons->fields['coupon_restrict']=='Y')) {
$product_valid = false;
}
if ($product_valid == true) break;
$coupons->MoveNext();
}
return $product_valid;
}
////
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 ($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 ($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 (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 $_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 != '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;
// 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);
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 (zen_not_null($_GET[$zp_filter_terms->fields['get_term_name']])) $zp_result = true;
$zp_filter_terms->MoveNext();
}
return $zp_result;
}
/////////////////////////////////////////////
////
// 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');
////
/////////////////////////////////////////////
?>
I appreciate any help if you can find something else causing a problem in this file! I'm banging my head against the wall here!
Kim