Jump to content
Sign in to follow this  
surfalot

[Contribution] Open Featured Sets Support

Recommended Posts

Quick question, is the patch for "register globals" a MUST HAVE to implement the OFS ??

I mean, do I have to turn the register_global = OFF in order to get the OFS running ?

I don't believe there are any register globals issues with this contribution. Should work either way.

Share this post


Link to post
Share on other sites

I just installed this contribution. It is great. It is what I want to setup in my page.

 

But I have one question.

 

Is it possible to show featured boxes for each category.

 

For example, if I have categories such as hardware and software.

 

I want to show separate boxes which has products of their own category.

 

 

Hardware - just lists hardwares......

Software - just lists softwares................

 

 

I really want to do it ....................... Help me, please....

Edited by netspee

Share this post


Link to post
Share on other sites

I have a same querry,

 

at Present I am using Featured Products by bkellum released 15 Jul 07. This system allow me to add feature product, and displaying in on home page and on all other category.

 

It will be great if we get option to display feature products on specific category only and can be dispaly on homepage if we want it to be.

 

Thanks

 

Zee

Share this post


Link to post
Share on other sites

Hi Zee,

 

Thank you so much for your reply.

 

But I really like this contribution except not existing option of featured boxes for each cateory.

 

IS THERE ANYBODY USING THIS OPTION ? or IS THERE SOMEBODY ABLE TO MODIFY?

 

 

 

Zee... can you upload the screenshot for the main page which you applied with bkellum released 15 Jul 07.

 

I do not know how it looks like.

 

thanks,

 

netspee

Edited by netspee

Share this post


Link to post
Share on other sites
I don't believe there are any register globals issues with this contribution. Should work either way.

 

Thanks for pointing that out. Then I'm ready to implement this great contrib !!

Share this post


Link to post
Share on other sites
I just installed this contribution. It is great. It is what I want to setup in my page.

 

But I have one question.

 

Is it possible to show featured boxes for each category.

 

For example, if I have categories such as hardware and software.

 

I want to show separate boxes which has products of their own category.

 

 

Hardware - just lists hardwares......

Software - just lists softwares................

 

 

I really want to do it ....................... Help me, please....

if your question is that you want to display featured items in each category, only from that category, then yes. look over the configuration options for "Limit Category Features Focus"

if your question is you want to show other category featured in a different category, but in separate boxes, no. Maybe in the next version.

Share this post


Link to post
Share on other sites

I to all.

 

I've installed this contrib and works great for me, I've modified the layout of the mainpage, so now I've one box that display the featured product and one box that display the other product unless the featured product :D

 

to do this I've modified the new products query and I've added

and p.products_featured = '0'

so in this way only the unfeatured products is showing.

 

so far so good

 

Now I've one problem, in the product info the layout show as well as the info about the selected product the module of the featured products, but:

If the product selected is one of the featured products, the module of the featured products is populate

If the product selected is not one of the featured products, the module of the featured products is empty

 

Looks like the entire query of the featured prooducts is skipped, only the code of the table is reported

 

I don't kow how to start to find the error

 

Anyone can help me?

 

Tnx in advance.

 

Jo.

Share this post


Link to post
Share on other sites

Nevermind, I've found the problem, only one bad configuration on admin side

 

Limit Product Features Focus was true, I set it false and this resolve my little problem

 

Jo

Share this post


Link to post
Share on other sites

I'm installed the "enable & disable categories" and now I need to modify the query

 

	$the_products_catagory_query = tep_db_query("select products_id, categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . $product_info['products_id'] . "'" . " order by products_id,categories_id");
$the_products_catagory = tep_db_fetch_array($the_products_catagory_query);
$featured_product_category_id = $the_products_catagory['categories_id'];

 

in order to make it works whit the contrib

 

Any way to insert "c.categories_status='1'"???

 

I don't know how to modify the query because I need to take the c.categories_status from another table and I don't know how I can do this :-"

 

Many tnx in advance.

 

Cry

Share this post


Link to post
Share on other sites

"select ptc.products_id, ptc.categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc, " . TABLE_CATEGORIES . " c where ptc.categories_id = c.categories_id and c.categories_status = 1 and ptc.products_id = '" . $product_info['products_id'] . "'" . " order by ptc.products_id, ptc.categories_id"

maybe?

Edited by surfalot

Share this post


Link to post
Share on other sites

Could anybody can help me out of this problem. Thanks in advance!

 

After install this contribution "Open_Featured_Sets_v1.14_for_osCommerce_2.2_MS2_Update_051113" in 2.2 RC2, the admin part is fine, but the index page get error message:

 

1054 - Unknown column 'p.products_id' in 'on clause'

 

select p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, pd.products_name, pd.products_description, pd.products_short, p.products_image, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price, m.manufacturers_id, m.manufacturers_name, m.manufacturers_image, m.manufacturer_featured_until, mi.manufacturers_id, mi.languages_id, mi.manufacturers_url from products p, products_description pd, manufacturers m, manufacturers_info mi left join specials s on p.products_id = s.products_id where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = mi.manufacturers_id and mi.languages_id = '1' and m.manufacturer_featured = '1' order by rand() DESC limit 3

 

[TEP STOP]

 

when i get back to use the original catalog/index.php, it work again.

 

Is it possible to go out this problem?

Share this post


Link to post
Share on other sites

hi surfalot

 

i'm trying to install your contrib to my MS2.2

i got 2 errors already mentionned in that thread but mike25 didn't tell how he resolved them so ...

 

in front page i have :

Fatal error: Call to undefined function: tep_set_categories_featured() in /*****/*****/*****/boutique/admin/categories.php on line 56

 

in admin when i try to set as "true" some products or any categories :

Fatal error: Cannot redeclare tep_set_featured_status() (previously declared in /home.10.17/neoayato/www/boutique/includes/functions/featured.php:16) in /home.10.17/neoayato/www/boutique/includes/functions/featured_sets.php on line 30

 

you said to check if we have declare the fucntion in admin/includes/functions/general.php and i check twice and yes i pasted everything from your package.

so here my general.php :

<?php
/*
 $Id: general.php,v 1.160 2003/07/12 08:32:47 hpdl Exp $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/
//Admin begin
////
//Check login and file access
function tep_admin_check_login() {
 global $PHP_SELF, $login_groups_id;
 if (!tep_session_is_registered('login_id')) {
tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
 } else {
$filename = basename( $PHP_SELF );
if ($filename != FILENAME_DEFAULT && $filename != FILENAME_FORBIDEN && $filename != FILENAME_LOGOFF && $filename != FILENAME_ADMIN_ACCOUNT && $filename != FILENAME_POPUP_IMAGE && $filename != 'packingslip.php' && $filename != 'invoice.php') {
  $db_file_query = tep_db_query("select admin_files_name from " . TABLE_ADMIN_FILES . " where FIND_IN_SET( '" . $login_groups_id . "', admin_groups_id) and admin_files_name = '" . $filename . "'");
  if (!tep_db_num_rows($db_file_query)) {
	tep_redirect(tep_href_link(FILENAME_FORBIDEN));
  }
}
 }  
}

////
//Return 'true' or 'false' value to display boxes and files in index.php and column_left.php
function tep_admin_check_boxes($filename, $boxes='') {
 global $login_groups_id;

 $is_boxes = 1;
 if ($boxes == 'sub_boxes') {
$is_boxes = 0;
 }
 $dbquery = tep_db_query("select admin_files_id from " . TABLE_ADMIN_FILES . " where FIND_IN_SET( '" . $login_groups_id . "', admin_groups_id) and admin_files_is_boxes = '" . $is_boxes . "' and admin_files_name = '" . $filename . "'");

 $return_value = false;
 if (tep_db_num_rows($dbquery)) {
$return_value = true;
 }
 return $return_value;
}

////
//Return files stored in box that can be accessed by user
function tep_admin_files_boxes($filename, $sub_box_name) {
 global $login_groups_id;
 $sub_boxes = '';

 $dbquery = tep_db_query("select admin_files_name from " . TABLE_ADMIN_FILES . " where FIND_IN_SET( '" . $login_groups_id . "', admin_groups_id) and admin_files_is_boxes = '0' and admin_files_name = '" . $filename . "'");
 if (tep_db_num_rows($dbquery)) {
$sub_boxes = '<a href="' . tep_href_link($filename) . '" class="menuBoxContentLink">' . $sub_box_name . '</a><br>';
 }
 return $sub_boxes;
}

////
//Get selected file for index.php
function tep_selected_file($filename) {
 global $login_groups_id;
 $randomize = FILENAME_ADMIN_ACCOUNT;

 $dbquery = tep_db_query("select admin_files_id as boxes_id from " . TABLE_ADMIN_FILES . " where FIND_IN_SET( '" . $login_groups_id . "', admin_groups_id) and admin_files_is_boxes = '1' and admin_files_name = '" . $filename . "'");
 if (tep_db_num_rows($dbquery)) {
$boxes_id = tep_db_fetch_array($dbquery);
$randomize_query = tep_db_query("select admin_files_name from " . TABLE_ADMIN_FILES . " where FIND_IN_SET( '" . $login_groups_id . "', admin_groups_id) and admin_files_is_boxes = '0' and admin_files_to_boxes = '" . $boxes_id['boxes_id'] . "'");
if (tep_db_num_rows($randomize_query)) {
  $file_selected = tep_db_fetch_array($randomize_query);
  $randomize = $file_selected['admin_files_name'];
}
 }
 return $randomize;
}
//Admin end

////
// Redirect to another page or site
 function tep_redirect($url) {
global $logger;

if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {
  tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
}

header('Location: ' . $url);

if (STORE_PAGE_PARSE_TIME == 'true') {
  if (!is_object($logger)) $logger = new logger;
  $logger->timer_stop();
}

exit;
 }

////
// Parse the data used in the html tags to ensure the tags will not break
 function tep_parse_input_field_data($data, $parse) {
return strtr(trim($data), $parse);
 }

 function tep_output_string($string, $translate = false, $protected = false) {
if ($protected == true) {
  return htmlspecialchars($string);
} else {
  if ($translate == false) {
	return tep_parse_input_field_data($string, array('"' => '"'));
  } else {
	return tep_parse_input_field_data($string, $translate);
  }
}
 }

 function tep_output_string_protected($string) {
return tep_output_string($string, false, true);
 }

 function tep_sanitize_string($string) {
$string = ereg_replace(' +', ' ', $string);

return preg_replace("/[<>]/", '_', $string);
 }

 function tep_customers_name($customers_id) {
$customers = tep_db_query("select customers_firstname, customers_lastname from " . TABLE_CUSTOMERS . " where customers_id = '" . (int)$customers_id . "'");
$customers_values = tep_db_fetch_array($customers);

return $customers_values['customers_firstname'] . ' ' . $customers_values['customers_lastname'];
 }

 function tep_get_path($current_category_id = '') {
global $cPath_array;

if ($current_category_id == '') {
  $cPath_new = implode('_', $cPath_array);
} else {
  if (sizeof($cPath_array) == 0) {
	$cPath_new = $current_category_id;
  } else {
	$cPath_new = '';
	$last_category_query = tep_db_query("select parent_id from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$cPath_array[(sizeof($cPath_array)-1)] . "'");
	$last_category = tep_db_fetch_array($last_category_query);

	$current_category_query = tep_db_query("select parent_id from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$current_category_id . "'");
	$current_category = tep_db_fetch_array($current_category_query);

	if ($last_category['parent_id'] == $current_category['parent_id']) {
	  for ($i = 0, $n = sizeof($cPath_array) - 1; $i < $n; $i++) {
		$cPath_new .= '_' . $cPath_array[$i];
	  }
	} else {
	  for ($i = 0, $n = sizeof($cPath_array); $i < $n; $i++) {
		$cPath_new .= '_' . $cPath_array[$i];
	  }
	}

	$cPath_new .= '_' . $current_category_id;

	if (substr($cPath_new, 0, 1) == '_') {
	  $cPath_new = substr($cPath_new, 1);
	}
  }
}

return 'cPath=' . $cPath_new;
 }

 function tep_get_all_get_params($exclude_array = '') {
global $HTTP_GET_VARS;

if ($exclude_array == '') $exclude_array = array();

$get_url = '';

reset($HTTP_GET_VARS);
while (list($key, $value) = each($HTTP_GET_VARS)) {
  if (($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array))) $get_url .= $key . '=' . $value . '&';
}

return $get_url;
 }

 function tep_date_long($raw_date) {
if ( ($raw_date == '0000-00-00 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 tep_date_short($raw_date) {
if ( ($raw_date == '0000-00-00 00:00:00') || ($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)));
}

 }

 function tep_datetime_short($raw_datetime) {
if ( ($raw_datetime == '0000-00-00 00:00:00') || ($raw_datetime == '') ) return false;

$year = (int)substr($raw_datetime, 0, 4);
$month = (int)substr($raw_datetime, 5, 2);
$day = (int)substr($raw_datetime, 8, 2);
$hour = (int)substr($raw_datetime, 11, 2);
$minute = (int)substr($raw_datetime, 14, 2);
$second = (int)substr($raw_datetime, 17, 2);

return strftime(DATE_TIME_FORMAT, mktime($hour, $minute, $second, $month, $day, $year));
 }

 function tep_get_category_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) {
global $languages_id;

if (!is_array($category_tree_array)) $category_tree_array = array();
if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'text' => TEXT_TOP);

if ($include_itself) {
  $category_query = tep_db_query("select cd.categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " cd where cd.language_id = '" . (int)$languages_id . "' and cd.categories_id = '" . (int)$parent_id . "'");
  $category = tep_db_fetch_array($category_query);
  $category_tree_array[] = array('id' => $parent_id, 'text' => $category['categories_name']);
}

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and c.parent_id = '" . (int)$parent_id . "' order by c.sort_order, cd.categories_name");
while ($categories = tep_db_fetch_array($categories_query)) {
  if ($exclude != $categories['categories_id']) $category_tree_array[] = array('id' => $categories['categories_id'], 'text' => $spacing . $categories['categories_name']);
  $category_tree_array = tep_get_category_tree($categories['categories_id'], $spacing . '   ', $exclude, $category_tree_array);
}

return $category_tree_array;
 }

 function tep_draw_products_pull_down($name, $parameters = '', $exclude = '') {
global $currencies, $languages_id;

if ($exclude == '') {
  $exclude = array();
}

$select_string = '<select name="' . $name . '"';

if ($parameters) {
  $select_string .= ' ' . $parameters;
}

$select_string .= '>';

$products_query = tep_db_query("select p.products_id, pd.products_name, p.products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' order by products_name");
while ($products = tep_db_fetch_array($products_query)) {
  if (!in_array($products['products_id'], $exclude)) {
	$select_string .= '<option value="' . $products['products_id'] . '">' . $products['products_name'] . ' (' . $currencies->format($products['products_price']) . ')</option>';
  }
}

$select_string .= '</select>';

return $select_string;
 }

 function tep_options_name($options_id) {
global $languages_id;

$options = tep_db_query("select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$options_id . "' and language_id = '" . (int)$languages_id . "'");
$options_values = tep_db_fetch_array($options);

return $options_values['products_options_name'];
 }

 function tep_values_name($values_id) {
global $languages_id;

$values = tep_db_query("select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$values_id . "' and language_id = '" . (int)$languages_id . "'");
$values_values = tep_db_fetch_array($values);

return $values_values['products_options_values_name'];
 }

 function tep_info_image($image, $alt, $width = '', $height = '') {
if (tep_not_null($image) && (file_exists(DIR_FS_CATALOG_IMAGES . $image)) ) {
  $image = tep_image(DIR_WS_CATALOG_IMAGES . $image, $alt, $width, $height);
} else {
  $image = TEXT_IMAGE_NONEXISTENT;
}

return $image;
 }

 function tep_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;
 }

 function tep_get_country_name($country_id) {
$country_query = tep_db_query("select countries_name from " . TABLE_COUNTRIES . " where countries_id = '" . (int)$country_id . "'");

if (!tep_db_num_rows($country_query)) {
  return $country_id;
} else {
  $country = tep_db_fetch_array($country_query);
  return $country['countries_name'];
}
 }

 function tep_get_zone_name($country_id, $zone_id, $default_zone) {
$zone_query = tep_db_query("select zone_name from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country_id . "' and zone_id = '" . (int)$zone_id . "'");
if (tep_db_num_rows($zone_query)) {
  $zone = tep_db_fetch_array($zone_query);
  return $zone['zone_name'];
} else {
  return $default_zone;
}
 }

 function tep_not_null($value) {
if (is_array($value)) {
  if (sizeof($value) > 0) {
	return true;
  } else {
	return false;
  }
} else {
  if ( (is_string($value) || is_int($value)) && ($value != '') && ($value != 'NULL') && (strlen(trim($value)) > 0)) {
	return true;
  } else {
	return false;
  }
}
 }

 function tep_browser_detect($component) {
global $HTTP_USER_AGENT;

return stristr($HTTP_USER_AGENT, $component);
 }

 function tep_tax_classes_pull_down($parameters, $selected = '') {
$select_string = '<select ' . $parameters . '>';
$classes_query = tep_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title");
while ($classes = tep_db_fetch_array($classes_query)) {
  $select_string .= '<option value="' . $classes['tax_class_id'] . '"';
  if ($selected == $classes['tax_class_id']) $select_string .= ' SELECTED';
  $select_string .= '>' . $classes['tax_class_title'] . '</option>';
}
$select_string .= '</select>';

return $select_string;
 }

 function tep_geo_zones_pull_down($parameters, $selected = '') {
$select_string = '<select ' . $parameters . '>';
$zones_query = tep_db_query("select geo_zone_id, geo_zone_name from " . TABLE_GEO_ZONES . " order by geo_zone_name");
while ($zones = tep_db_fetch_array($zones_query)) {
  $select_string .= '<option value="' . $zones['geo_zone_id'] . '"';
  if ($selected == $zones['geo_zone_id']) $select_string .= ' SELECTED';
  $select_string .= '>' . $zones['geo_zone_name'] . '</option>';
}
$select_string .= '</select>';

return $select_string;
 }

 function tep_get_geo_zone_name($geo_zone_id) {
$zones_query = tep_db_query("select geo_zone_name from " . TABLE_GEO_ZONES . " where geo_zone_id = '" . (int)$geo_zone_id . "'");

if (!tep_db_num_rows($zones_query)) {
  $geo_zone_name = $geo_zone_id;
} else {
  $zones = tep_db_fetch_array($zones_query);
  $geo_zone_name = $zones['geo_zone_name'];
}

return $geo_zone_name;
 }

 function tep_address_format($address_format_id, $address, $html, $boln, $eoln) {
$address_format_query = tep_db_query("select address_format as format from " . TABLE_ADDRESS_FORMAT . " where address_format_id = '" . (int)$address_format_id . "'");
$address_format = tep_db_fetch_array($address_format_query);

$company = tep_output_string_protected($address['company']);
if (isset($address['firstname']) && tep_not_null($address['firstname'])) {
  $firstname = tep_output_string_protected($address['firstname']);
  $lastname = tep_output_string_protected($address['lastname']);
} elseif (isset($address['name']) && tep_not_null($address['name'])) {
  $firstname = tep_output_string_protected($address['name']);
  $lastname = '';
} else {
  $firstname = '';
  $lastname = '';
}
$street = tep_output_string_protected($address['street_address']);
$suburb = tep_output_string_protected($address['suburb']);
$city = tep_output_string_protected($address['city']);
$state = tep_output_string_protected($address['state']);
if (isset($address['country_id']) && tep_not_null($address['country_id'])) {
  $country = tep_get_country_name($address['country_id']);

  if (isset($address['zone_id']) && tep_not_null($address['zone_id'])) {
	$state = tep_get_zone_code($address['country_id'], $address['zone_id'], $state);
  }
} elseif (isset($address['country']) && tep_not_null($address['country'])) {
  $country = tep_output_string_protected($address['country']);
} else {
  $country = '';
}
$postcode = tep_output_string_protected($address['postcode']);
$zip = $postcode;

if ($html) {
// HTML Mode
  $HR = '<hr>';
  $hr = '<hr>';
  if ( ($boln == '') && ($eoln == "\n") ) { // Values not specified, use rational defaults
	$CR = '<br>';
	$cr = '<br>';
	$eoln = $cr;
  } else { // Use values supplied
	$CR = $eoln . $boln;
	$cr = $CR;
  }
} else {
// Text Mode
  $CR = $eoln;
  $cr = $CR;
  $HR = '----------------------------------------';
  $hr = '----------------------------------------';
}

$statecomma = '';
$streets = $street;
if ($suburb != '') $streets = $street . $cr . $suburb;
if ($country == '') $country = tep_output_string_protected($address['country']);
if ($state != '') $statecomma = $state . ', ';

$fmt = $address_format['format'];
eval("\$address = \"$fmt\";");

if ( (ACCOUNT_COMPANY == 'true') && (tep_not_null($company)) ) {
  $address = $company . $cr . $address;
}

return $address;
 }

 ////////////////////////////////////////////////////////////////////////////////////////////////
 //
 // Function	: tep_get_zone_code
 //
 // Arguments   : country		   country code string
 //			   zone			  state/province zone_id
 //			   def_state		 default string if zone==0
 //
 // Return	  : state_prov_code   state/province code
 //
 // Description : Function to retrieve the state/province code (as in FL for Florida etc)
 //
 ////////////////////////////////////////////////////////////////////////////////////////////////
 function tep_get_zone_code($country, $zone, $def_state) {

$state_prov_query = tep_db_query("select zone_code from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and zone_id = '" . (int)$zone . "'");

if (!tep_db_num_rows($state_prov_query)) {
  $state_prov_code = $def_state;
}
else {
  $state_prov_values = tep_db_fetch_array($state_prov_query);
  $state_prov_code = $state_prov_values['zone_code'];
}

return $state_prov_code;
 }

 function tep_get_uprid($prid, $params) {
$uprid = $prid;
if ( (is_array($params)) && (!strstr($prid, '{')) ) {
  while (list($option, $value) = each($params)) {
	$uprid = $uprid . '{' . $option . '}' . $value;
  }
}

return $uprid;
 }

 function tep_get_prid($uprid) {
$pieces = explode('{', $uprid);

return $pieces[0];
 }

 function tep_get_languages() {
$languages_query = tep_db_query("select languages_id, name, code, image, directory from " . TABLE_LANGUAGES . " order by sort_order");
while ($languages = tep_db_fetch_array($languages_query)) {
  $languages_array[] = array('id' => $languages['languages_id'],
							 'name' => $languages['name'],
							 'code' => $languages['code'],
							 'image' => $languages['image'],
							 'directory' => $languages['directory']);
}

return $languages_array;
 }

 function tep_get_category_name($category_id, $language_id) {
$category_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");
$category = tep_db_fetch_array($category_query);

return $category['categories_name'];
 }

 function tep_get_orders_status_name($orders_status_id, $language_id = '') {
global $languages_id;

if (!$language_id) $language_id = $languages_id;
$orders_status_query = tep_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . (int)$orders_status_id . "' and language_id = '" . (int)$language_id . "'");
$orders_status = tep_db_fetch_array($orders_status_query);

return $orders_status['orders_status_name'];
 }

 function tep_get_orders_status() {
global $languages_id;

$orders_status_array = array();
$orders_status_query = tep_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "' order by orders_status_id");
while ($orders_status = tep_db_fetch_array($orders_status_query)) {
  $orders_status_array[] = array('id' => $orders_status['orders_status_id'],
								 'text' => $orders_status['orders_status_name']);
}

return $orders_status_array;
 }

 function tep_get_products_name($product_id, $language_id = 0) {
global $languages_id;

if ($language_id == 0) $language_id = $languages_id;
$product_query = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
$product = tep_db_fetch_array($product_query);

return $product['products_name'];
 }

 function tep_get_products_description($product_id, $language_id) {
$product_query = tep_db_query("select products_description from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
$product = tep_db_fetch_array($product_query);

return $product['products_description'];
 }

	// BOF Open Featured Sets
 function tep_get_products_short($product_id, $language_id) {
$product_query = tep_db_query("select products_short from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . $product_id . "' and language_id = '" . $language_id . "'");
$product = tep_db_fetch_array($product_query);

return $product['products_short'];
 }
	// EOF Open Featured Sets

 function tep_get_products_url($product_id, $language_id) {
$product_query = tep_db_query("select products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
$product = tep_db_fetch_array($product_query);

return $product['products_url'];
 }

////
// Return the manufacturers URL in the needed language
// TABLES: manufacturers_info
 function tep_get_manufacturer_url($manufacturer_id, $language_id) {
$manufacturer_query = tep_db_query("select manufacturers_url from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");
$manufacturer = tep_db_fetch_array($manufacturer_query);

return $manufacturer['manufacturers_url'];
 }

////
// Wrapper for class_exists() function
// This function is not available in all PHP versions so we test it before using it.
 function tep_class_exists($class_name) {
if (function_exists('class_exists')) {
  return class_exists($class_name);
} else {
  return true;
}
 }

////
// Count how many products exist in a category
// TABLES: products, products_to_categories, categories
 function tep_products_in_category_count($categories_id, $include_deactivated = false) {
$products_count = 0;

if ($include_deactivated) {
  $products_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$categories_id . "'");
} else {
  $products_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_id = p2c.products_id and p.products_status = '1' and p2c.categories_id = '" . (int)$categories_id . "'");
}

$products = tep_db_fetch_array($products_query);

$products_count += $products['total'];

$childs_query = tep_db_query("select categories_id from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$categories_id . "'");
if (tep_db_num_rows($childs_query)) {
  while ($childs = tep_db_fetch_array($childs_query)) {
	$products_count += tep_products_in_category_count($childs['categories_id'], $include_deactivated);
  }
}

return $products_count;
 }

////
// Count how many subcategories exist in a category
// TABLES: categories
 function tep_childs_in_category_count($categories_id) {
$categories_count = 0;

$categories_query = tep_db_query("select categories_id from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$categories_id . "'");
while ($categories = tep_db_fetch_array($categories_query)) {
  $categories_count++;
  $categories_count += tep_childs_in_category_count($categories['categories_id']);
}

return $categories_count;
 }

////
// Returns an array with countries
// TABLES: countries
 function tep_get_countries($default = '') {
$countries_array = array();
if ($default) {
  $countries_array[] = array('id' => '',
							 'text' => $default);
}
$countries_query = tep_db_query("select countries_id, countries_name from " . TABLE_COUNTRIES . " order by countries_name");
while ($countries = tep_db_fetch_array($countries_query)) {
  $countries_array[] = array('id' => $countries['countries_id'],
							 'text' => $countries['countries_name']);
}

return $countries_array;
 }

////
// return an array with country zones
 function tep_get_country_zones($country_id) {
$zones_array = array();
$zones_query = tep_db_query("select zone_id, zone_name from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country_id . "' order by zone_name");
while ($zones = tep_db_fetch_array($zones_query)) {
  $zones_array[] = array('id' => $zones['zone_id'],
						 'text' => $zones['zone_name']);
}

return $zones_array;
 }

 function tep_prepare_country_zones_pull_down($country_id = '') {
// preset the width of the drop-down for Netscape
$pre = '';
if ( (!tep_browser_detect('MSIE')) && (tep_browser_detect('Mozilla/4')) ) {
  for ($i=0; $i<45; $i++) $pre .= ' ';
}

$zones = tep_get_country_zones($country_id);

if (sizeof($zones) > 0) {
  $zones_select = array(array('id' => '', 'text' => PLEASE_SELECT));
  $zones = array_merge($zones_select, $zones);
} else {
  $zones = array(array('id' => '', 'text' => TYPE_BELOW));
// create dummy options for Netscape to preset the height of the drop-down
  if ( (!tep_browser_detect('MSIE')) && (tep_browser_detect('Mozilla/4')) ) {
	for ($i=0; $i<9; $i++) {
	  $zones[] = array('id' => '', 'text' => $pre);
	}
  }
}

return $zones;
 }

////
// Get list of address_format_id's
 function tep_get_address_formats() {
$address_format_query = tep_db_query("select address_format_id from " . TABLE_ADDRESS_FORMAT . " order by address_format_id");
$address_format_array = array();
while ($address_format_values = tep_db_fetch_array($address_format_query)) {
  $address_format_array[] = array('id' => $address_format_values['address_format_id'],
								  'text' => $address_format_values['address_format_id']);
}
return $address_format_array;
 }

////
// Alias function for Store configuration values in the Administration Tool
 function tep_cfg_pull_down_country_list($country_id) {
return tep_draw_pull_down_menu('configuration_value', tep_get_countries(), $country_id);
 }

 function tep_cfg_pull_down_zone_list($zone_id) {
return tep_draw_pull_down_menu('configuration_value', tep_get_country_zones(STORE_COUNTRY), $zone_id);
 }

 function tep_cfg_pull_down_tax_classes($tax_class_id, $key = '') {
$name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

$tax_class_array = array(array('id' => '0', 'text' => TEXT_NONE));
$tax_class_query = tep_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title");
while ($tax_class = tep_db_fetch_array($tax_class_query)) {
  $tax_class_array[] = array('id' => $tax_class['tax_class_id'],
							 'text' => $tax_class['tax_class_title']);
}

return tep_draw_pull_down_menu($name, $tax_class_array, $tax_class_id);
 }

////
// Function to read in text area in admin
function tep_cfg_textarea($text) {
return tep_draw_textarea_field('configuration_value', false, 35, 5, $text);
 }

 function tep_cfg_get_zone_name($zone_id) {
$zone_query = tep_db_query("select zone_name from " . TABLE_ZONES . " where zone_id = '" . (int)$zone_id . "'");

if (!tep_db_num_rows($zone_query)) {
  return $zone_id;
} else {
  $zone = tep_db_fetch_array($zone_query);
  return $zone['zone_name'];
}
 }

////
// Sets the status of a banner
 function tep_set_banner_status($banners_id, $status) {
if ($status == '1') {
  return tep_db_query("update " . TABLE_BANNERS . " set status = '1', expires_impressions = NULL, expires_date = NULL, date_status_change = NULL where banners_id = '" . $banners_id . "'");
} elseif ($status == '0') {
  return tep_db_query("update " . TABLE_BANNERS . " set status = '0', date_status_change = now() where banners_id = '" . $banners_id . "'");
} else {
  return -1;
}
 }

////
// Sets the status of a product
 function tep_set_product_status($products_id, $status) {
if ($status == '1') {
  return tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '1', products_last_modified = now() where products_id = '" . (int)$products_id . "'");
} elseif ($status == '0') {
  return tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0', products_featured = '0', products_last_modified = now() where products_id = '" . (int)$products_id . "'");
} else {
  return -1;
}
 }

////
// Sets the status of a product on special
 function tep_set_specials_status($specials_id, $status) {
if ($status == '1') {
  return tep_db_query("update " . TABLE_SPECIALS . " set status = '1', expires_date = NULL, date_status_change = NULL where specials_id = '" . (int)$specials_id . "'");
} elseif ($status == '0') {
  return tep_db_query("update " . TABLE_SPECIALS . " set status = '0', date_status_change = now() where specials_id = '" . (int)$specials_id . "'");
} else {
  return -1;
}
 }

////
// Sets timeout for the current script.
// Cant be used in safe mode.
 function tep_set_time_limit($limit) {
if (!get_cfg_var('safe_mode')) {
  set_time_limit($limit);
}
 }

////
// Alias function for Store configuration values in the Administration Tool
 function tep_cfg_select_option($select_array, $key_value, $key = '') {
$string = '';

for ($i=0, $n=sizeof($select_array); $i<$n; $i++) {
  $name = ((tep_not_null($key)) ? 'configuration[' . $key . ']' : 'configuration_value');

  $string .= '<br><input type="radio" name="' . $name . '" value="' . $select_array[$i] . '"';

  if ($key_value == $select_array[$i]) $string .= ' CHECKED';

  $string .= '> ' . $select_array[$i];
}

return $string;
 }

////
// Alias function for module configuration keys
 function tep_mod_select_option($select_array, $key_name, $key_value) {
reset($select_array);
while (list($key, $value) = each($select_array)) {
  if (is_int($key)) $key = $value;
  $string .= '<br><input type="radio" name="configuration[' . $key_name . ']" value="' . $key . '"';
  if ($key_value == $key) $string .= ' CHECKED';
  $string .= '> ' . $value;
}

return $string;
 }

////
// Retreive server information
 function tep_get_system_information() {
global $HTTP_SERVER_VARS;

$db_query = tep_db_query("select now() as datetime");
$db = tep_db_fetch_array($db_query);

list($system, $host, $kernel) = preg_split('/[\s,]+/', @exec('uname -a'), 5);

return array('date' => tep_datetime_short(date('Y-m-d H:i:s')),
			 'system' => $system,
			 'kernel' => $kernel,
			 'host' => $host,
			 'ip' => gethostbyname($host),
			 'uptime' => @exec('uptime'),
			 'http_server' => $HTTP_SERVER_VARS['SERVER_SOFTWARE'],
			 'php' => PHP_VERSION,
			 'zend' => (function_exists('zend_version') ? zend_version() : ''),
			 'db_server' => DB_SERVER,
			 'db_ip' => gethostbyname(DB_SERVER),
			 'db_version' => 'MySQL ' . (function_exists('mysql_get_server_info') ? mysql_get_server_info() : ''),
			 'db_date' => tep_datetime_short($db['datetime']));
 }

 function tep_generate_category_path($id, $from = 'category', $categories_array = '', $index = 0) {
global $languages_id;

if (!is_array($categories_array)) $categories_array = array();

if ($from == 'product') {
  $categories_query = tep_db_query("select categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$id . "'");
  while ($categories = tep_db_fetch_array($categories_query)) {
	if ($categories['categories_id'] == '0') {
	  $categories_array[$index][] = array('id' => '0', 'text' => TEXT_TOP);
	} else {
	  $category_query = tep_db_query("select cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . (int)$categories['categories_id'] . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "'");
	  $category = tep_db_fetch_array($category_query);
	  $categories_array[$index][] = array('id' => $categories['categories_id'], 'text' => $category['categories_name']);
	  if ( (tep_not_null($category['parent_id'])) && ($category['parent_id'] != '0') ) $categories_array = tep_generate_category_path($category['parent_id'], 'category', $categories_array, $index);
	  $categories_array[$index] = array_reverse($categories_array[$index]);
	}
	$index++;
  }
} elseif ($from == 'category') {
  $category_query = tep_db_query("select cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . (int)$id . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "'");
  $category = tep_db_fetch_array($category_query);
  $categories_array[$index][] = array('id' => $id, 'text' => $category['categories_name']);
  if ( (tep_not_null($category['parent_id'])) && ($category['parent_id'] != '0') ) $categories_array = tep_generate_category_path($category['parent_id'], 'category', $categories_array, $index);
}

return $categories_array;
 }

 function tep_output_generated_category_path($id, $from = 'category') {
$calculated_category_path_string = '';
$calculated_category_path = tep_generate_category_path($id, $from);
for ($i=0, $n=sizeof($calculated_category_path); $i<$n; $i++) {
  for ($j=0, $k=sizeof($calculated_category_path[$i]); $j<$k; $j++) {
	$calculated_category_path_string .= $calculated_category_path[$i][$j]['text'] . ' > ';
  }
  $calculated_category_path_string = substr($calculated_category_path_string, 0, -16) . '<br>';
}
$calculated_category_path_string = substr($calculated_category_path_string, 0, -4);

if (strlen($calculated_category_path_string) < 1) $calculated_category_path_string = TEXT_TOP;

return $calculated_category_path_string;
 }

 function tep_get_generated_category_path_ids($id, $from = 'category') {
$calculated_category_path_string = '';
$calculated_category_path = tep_generate_category_path($id, $from);
for ($i=0, $n=sizeof($calculated_category_path); $i<$n; $i++) {
  for ($j=0, $k=sizeof($calculated_category_path[$i]); $j<$k; $j++) {
	$calculated_category_path_string .= $calculated_category_path[$i][$j]['id'] . '_';
  }
  $calculated_category_path_string = substr($calculated_category_path_string, 0, -1) . '<br>';
}
$calculated_category_path_string = substr($calculated_category_path_string, 0, -4);

if (strlen($calculated_category_path_string) < 1) $calculated_category_path_string = TEXT_TOP;

return $calculated_category_path_string;
 }

 function tep_remove_category($category_id) {
$category_image_query = tep_db_query("select categories_image from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");
$category_image = tep_db_fetch_array($category_image_query);

$duplicate_image_query = tep_db_query("select count(*) as total from " . TABLE_CATEGORIES . " where categories_image = '" . tep_db_input($category_image['categories_image']) . "'");
$duplicate_image = tep_db_fetch_array($duplicate_image_query);

if ($duplicate_image['total'] < 2) {
  if (file_exists(DIR_FS_CATALOG_IMAGES . $category_image['categories_image'])) {
	@unlink(DIR_FS_CATALOG_IMAGES . $category_image['categories_image']);
  }
}

tep_db_query("delete from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");
tep_db_query("delete from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "'");
tep_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");

if (USE_CACHE == 'true') {
  tep_reset_cache_block('categories');
  tep_reset_cache_block('also_purchased');
}
 }

 function tep_remove_product($product_id) {

 // BOF: More Pics 6
$product_subimage1_query = tep_db_query("select products_subimage1 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage1 = tep_db_fetch_array($product_subimage1_query);

	$duplicate_subimage1_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage1 = '" . tep_db_input($product_subimage1['products_subimage1']) . "'");
	$duplicate_subimage1 = tep_db_fetch_array($duplicate_subimage1_query);

	if ($duplicate_subimage1['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage1['products_subimage1'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage1['products_subimage1']);
	  }
}

$product_subimage2_query = tep_db_query("select products_subimage2 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage2 = tep_db_fetch_array($product_subimage2_query);

	$duplicate_subimage2_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage2 = '" . tep_db_input($product_subimage2['products_subimage2']) . "'");
	$duplicate_subimage2 = tep_db_fetch_array($duplicate_subimage2_query);

	if ($duplicate_subimage2['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage2['products_subimage2'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage2['products_subimage2']);
	  }
}

$product_subimage3_query = tep_db_query("select products_subimage3 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage3 = tep_db_fetch_array($product_subimage3_query);

	$duplicate_subimage3_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage3 = '" . tep_db_input($product_subimage3['products_subimage3']) . "'");
	$duplicate_subimage3 = tep_db_fetch_array($duplicate_subimage3_query);

	if ($duplicate_subimage3['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage3['products_subimage3'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage3['products_subimage3']);
	  }
}

$product_subimage4_query = tep_db_query("select products_subimage4 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage4 = tep_db_fetch_array($product_subimage4_query);

	$duplicate_subimage4_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage4 = '" . tep_db_input($product_subimage4['products_subimage4']) . "'");
	$duplicate_subimage4 = tep_db_fetch_array($duplicate_subimage4_query);

	if ($duplicate_subimage4['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage4['products_subimage4'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage4['products_subimage4']);
	  }
}

$product_subimage5_query = tep_db_query("select products_subimage5 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage5 = tep_db_fetch_array($product_subimage5_query);

	$duplicate_subimage5_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage5 = '" . tep_db_input($product_subimage5['products_subimage5']) . "'");
	$duplicate_subimage5 = tep_db_fetch_array($duplicate_subimage5_query);

	if ($duplicate_subimage5['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage5['products_subimage5'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage5['products_subimage5']);
	  }
}

$product_subimage6_query = tep_db_query("select products_subimage6 from " . TABLE_PRODUCTS . " where products_id = '" . tep_db_input($product_id) . "'");
	$product_subimage6 = tep_db_fetch_array($product_subimage6_query);

	$duplicate_subimage6_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_subimage6 = '" . tep_db_input($product_subimage6['products_subimage6']) . "'");
	$duplicate_subimage6 = tep_db_fetch_array($duplicate_subimage6_query);

	if ($duplicate_subimage6['total'] < 2) {
	  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_subimage6['products_subimage6'])) {
		@unlink(DIR_FS_CATALOG_IMAGES . $product_subimage6['products_subimage6']);
	  }
}
 // EOF: More Pics 6

$product_image_query = tep_db_query("select products_image from " . TABLE_PRODUCTS . " where products_id = '" . (int)$product_id . "'");
$product_image = tep_db_fetch_array($product_image_query);

$duplicate_image_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_image = '" . tep_db_input($product_image['products_image']) . "'");
$duplicate_image = tep_db_fetch_array($duplicate_image_query);

if ($duplicate_image['total'] < 2) {
  if (file_exists(DIR_FS_CATALOG_IMAGES . $product_image['products_image'])) {
	@unlink(DIR_FS_CATALOG_IMAGES . $product_image['products_image']);
  }
}

tep_db_query("delete from " . TABLE_SPECIALS . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_PRODUCTS . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where products_id = '" . (int)$product_id . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where products_id = '" . (int)$product_id . "'");

$product_reviews_query = tep_db_query("select reviews_id from " . TABLE_REVIEWS . " where products_id = '" . (int)$product_id . "'");
while ($product_reviews = tep_db_fetch_array($product_reviews_query)) {
  tep_db_query("delete from " . TABLE_REVIEWS_DESCRIPTION . " where reviews_id = '" . (int)$product_reviews['reviews_id'] . "'");
}
tep_db_query("delete from " . TABLE_REVIEWS . " where products_id = '" . (int)$product_id . "'");

if (USE_CACHE == 'true') {
  tep_reset_cache_block('categories');
  tep_reset_cache_block('also_purchased');
}
 }

 function tep_remove_order($order_id, $restock = false) {
if ($restock == 'on') {
  $order_query = tep_db_query("select products_id, products_quantity from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
  while ($order = tep_db_fetch_array($order_query)) {
	tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = products_quantity + " . $order['products_quantity'] . ", products_ordered = products_ordered - " . $order['products_quantity'] . " where products_id = '" . (int)$order['products_id'] . "'");
  }
}

tep_db_query("delete from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "'");
tep_db_query("delete from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '" . (int)$order_id . "'");
tep_db_query("delete from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "'");
 }

 function tep_reset_cache_block($cache_block) {
global $cache_blocks;

for ($i=0, $n=sizeof($cache_blocks); $i<$n; $i++) {
  if ($cache_blocks[$i]['code'] == $cache_block) {
	if ($cache_blocks[$i]['multiple']) {
	  if ($dir = @opendir(DIR_FS_CACHE)) {
		while ($cache_file = readdir($dir)) {
		  $cached_file = $cache_blocks[$i]['file'];
		  $languages = tep_get_languages();
		  for ($j=0, $k=sizeof($languages); $j<$k; $j++) {
			$cached_file_unlink = ereg_replace('-language', '-' . $languages[$j]['directory'], $cached_file);
			if (ereg('^' . $cached_file_unlink, $cache_file)) {
			  @unlink(DIR_FS_CACHE . $cache_file);
			}
		  }
		}
		closedir($dir);
	  }
	} else {
	  $cached_file = $cache_blocks[$i]['file'];
	  $languages = tep_get_languages();
	  for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
		$cached_file = ereg_replace('-language', '-' . $languages[$i]['directory'], $cached_file);
		@unlink(DIR_FS_CACHE . $cached_file);
	  }
	}
	break;
  }
}
 }

 function tep_get_file_permissions($mode) {
// determine type
if ( ($mode & 0xC000) == 0xC000) { // unix domain socket
  $type = 's';
} elseif ( ($mode & 0x4000) == 0x4000) { // directory
  $type = 'd';
} elseif ( ($mode & 0xA000) == 0xA000) { // symbolic link
  $type = 'l';
} elseif ( ($mode & 0x8000) == 0x8000) { // regular file
  $type = '-';
} elseif ( ($mode & 0x6000) == 0x6000) { //bBlock special file
  $type = 'b';
} elseif ( ($mode & 0x2000) == 0x2000) { // character special file
  $type = 'c';
} elseif ( ($mode & 0x1000) == 0x1000) { // named pipe
  $type = 'p';
} else { // unknown
  $type = '?';
}

// determine permissions
$owner['read']	= ($mode & 00400) ? 'r' : '-';
$owner['write']   = ($mode & 00200) ? 'w' : '-';
$owner['execute'] = ($mode & 00100) ? 'x' : '-';
$group['read']	= ($mode & 00040) ? 'r' : '-';
$group['write']   = ($mode & 00020) ? 'w' : '-';
$group['execute'] = ($mode & 00010) ? 'x' : '-';
$world['read']	= ($mode & 00004) ? 'r' : '-';
$world['write']   = ($mode & 00002) ? 'w' : '-';
$world['execute'] = ($mode & 00001) ? 'x' : '-';

// adjust for SUID, SGID and sticky bit
if ($mode & 0x800 ) $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
if ($mode & 0x400 ) $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
if ($mode & 0x200 ) $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';

return $type .
	   $owner['read'] . $owner['write'] . $owner['execute'] .
	   $group['read'] . $group['write'] . $group['execute'] .
	   $world['read'] . $world['write'] . $world['execute'];
 }

 function tep_remove($source) {
global $messageStack, $tep_remove_error;

if (isset($tep_remove_error)) $tep_remove_error = false;

if (is_dir($source)) {
  $dir = dir($source);
  while ($file = $dir->read()) {
	if ( ($file != '.') && ($file != '..') ) {
	  if (is_writeable($source . '/' . $file)) {
		tep_remove($source . '/' . $file);
	  } else {
		$messageStack->add(sprintf(ERROR_FILE_NOT_REMOVEABLE, $source . '/' . $file), 'error');
		$tep_remove_error = true;
	  }
	}
  }
  $dir->close();

  if (is_writeable($source)) {
	rmdir($source);
  } else {
	$messageStack->add(sprintf(ERROR_DIRECTORY_NOT_REMOVEABLE, $source), 'error');
	$tep_remove_error = true;
  }
} else {
  if (is_writeable($source)) {
	unlink($source);
  } else {
	$messageStack->add(sprintf(ERROR_FILE_NOT_REMOVEABLE, $source), 'error');
	$tep_remove_error = true;
  }
}
 }

////
// Output the tax percentage with optional padded decimals
 function tep_display_tax_value($value, $padding = TAX_DECIMAL_PLACES) {
if (strpos($value, '.')) {
  $loop = true;
  while ($loop) {
	if (substr($value, -1) == '0') {
	  $value = substr($value, 0, -1);
	} else {
	  $loop = false;
	  if (substr($value, -1) == '.') {
		$value = substr($value, 0, -1);
	  }
	}
  }
}

if ($padding > 0) {
  if ($decimal_pos = strpos($value, '.')) {
	$decimals = strlen(substr($value, ($decimal_pos+1)));
	for ($i=$decimals; $i<$padding; $i++) {
	  $value .= '0';
	}
  } else {
	$value .= '.';
	for ($i=0; $i<$padding; $i++) {
	  $value .= '0';
	}
  }
}

return $value;
 }

 function tep_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: osCommerce'));

// 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);
 }

 function tep_get_tax_class_title($tax_class_id) {
if ($tax_class_id == '0') {
  return TEXT_NONE;
} else {
  $classes_query = tep_db_query("select tax_class_title from " . TABLE_TAX_CLASS . " where tax_class_id = '" . (int)$tax_class_id . "'");
  $classes = tep_db_fetch_array($classes_query);

  return $classes['tax_class_title'];
}
 }

 function tep_banner_image_extension() {
if (function_exists('imagetypes')) {
  if (imagetypes() & IMG_PNG) {
	return 'png';
  } elseif (imagetypes() & IMG_JPG) {
	return 'jpg';
  } elseif (imagetypes() & IMG_GIF) {
	return 'gif';
  }
} elseif (function_exists('imagecreatefrompng') && function_exists('imagepng')) {
  return 'png';
} elseif (function_exists('imagecreatefromjpeg') && function_exists('imagejpeg')) {
  return 'jpg';
} elseif (function_exists('imagecreatefromgif') && function_exists('imagegif')) {
  return 'gif';
}

return false;
 }

////
// Wrapper function for round() for php3 compatibility
 function tep_round($value, $precision) {
if (PHP_VERSION < 4) {
  $exp = pow(10, $precision);
  return round($value * $exp) / $exp;
} else {
  return round($value, $precision);
}
 }

////
// Add tax to a products price
 function tep_add_tax($price, $tax) {
global $currencies;

if (DISPLAY_PRICE_WITH_TAX == 'true') {
  return tep_round($price, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']) + tep_calculate_tax($price, $tax);
} else {
  return tep_round($price, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);
}
 }

// Calculates Tax rounding the result
 function tep_calculate_tax($price, $tax) {
global $currencies;

return tep_round($price * $tax / 100, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);
 }

////
// Returns the tax rate for a zone / class
// TABLES: tax_rates, zones_to_geo_zones
 function tep_get_tax_rate($class_id, $country_id = -1, $zone_id = -1) {
global $customer_zone_id, $customer_country_id;

if ( ($country_id == -1) && ($zone_id == -1) ) {
  if (!tep_session_is_registered('customer_id')) {
	$country_id = STORE_COUNTRY;
	$zone_id = STORE_ZONE;
  } else {
	$country_id = $customer_country_id;
	$zone_id = $customer_zone_id;
  }
}

$tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za ON tr.tax_zone_id = za.geo_zone_id left join " . TABLE_GEO_ZONES . " 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 = '" . (int)$country_id . "') AND (za.zone_id IS NULL OR za.zone_id = '0' OR za.zone_id = '" . (int)$zone_id . "') AND tr.tax_class_id = '" . (int)$class_id . "' GROUP BY tr.tax_priority");
if (tep_db_num_rows($tax_query)) {
  $tax_multiplier = 0;
  while ($tax = tep_db_fetch_array($tax_query)) {
	$tax_multiplier += $tax['tax_rate'];
  }
  return $tax_multiplier;
} else {
  return 0;
}
 }

////
// Returns the tax rate for a tax class
// TABLES: tax_rates
 function tep_get_tax_rate_value($class_id) {
$tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " where tax_class_id = '" . (int)$class_id . "' group by tax_priority");
if (tep_db_num_rows($tax_query)) {
  $tax_multiplier = 0;
  while ($tax = tep_db_fetch_array($tax_query)) {
	$tax_multiplier += $tax['tax_rate'];
  }
  return $tax_multiplier;
} else {
  return 0;
}
 }

 function tep_call_function($function, $parameter, $object = '') {
if ($object == '') {
  return call_user_func($function, $parameter);
} elseif (PHP_VERSION < 4) {
  return call_user_method($function, $object, $parameter);
} else {
  return call_user_func(array($object, $function), $parameter);
}
 }

 function tep_get_zone_class_title($zone_class_id) {
if ($zone_class_id == '0') {
  return TEXT_NONE;
} else {
  $classes_query = tep_db_query("select geo_zone_name from " . TABLE_GEO_ZONES . " where geo_zone_id = '" . (int)$zone_class_id . "'");
  $classes = tep_db_fetch_array($classes_query);

  return $classes['geo_zone_name'];
}
 }

 function tep_cfg_pull_down_zone_classes($zone_class_id, $key = '') {
$name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

$zone_class_array = array(array('id' => '0', 'text' => TEXT_NONE));
$zone_class_query = tep_db_query("select geo_zone_id, geo_zone_name from " . TABLE_GEO_ZONES . " order by geo_zone_name");
while ($zone_class = tep_db_fetch_array($zone_class_query)) {
  $zone_class_array[] = array('id' => $zone_class['geo_zone_id'],
							  'text' => $zone_class['geo_zone_name']);
}

return tep_draw_pull_down_menu($name, $zone_class_array, $zone_class_id);
 }

 function tep_cfg_pull_down_order_statuses($order_status_id, $key = '') {
global $languages_id;

$name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

$statuses_array = array(array('id' => '0', 'text' => TEXT_DEFAULT));
$statuses_query = tep_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "' order by orders_status_name");
while ($statuses = tep_db_fetch_array($statuses_query)) {
  $statuses_array[] = array('id' => $statuses['orders_status_id'],
							'text' => $statuses['orders_status_name']);
}

return tep_draw_pull_down_menu($name, $statuses_array, $order_status_id);
 }

 function tep_get_order_status_name($order_status_id, $language_id = '') {
global $languages_id;

if ($order_status_id < 1) return TEXT_DEFAULT;

if (!is_numeric($language_id)) $language_id = $languages_id;

$status_query = tep_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . (int)$order_status_id . "' and language_id = '" . (int)$language_id . "'");
$status = tep_db_fetch_array($status_query);

return $status['orders_status_name'];
 }

////
// Return a random value
 function tep_rand($min = null, $max = null) {
static $seeded;

if (!$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();
}
 }

// nl2br() prior PHP 4.2.0 did not convert linefeeds on all OSs (it only converted \n)
 function tep_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 tep_string_to_int($string) {
return (int)$string;
 }

////
// Parse and secure the cPath parameter values
 function tep_parse_category_path($cPath) {
// make sure the category IDs are integers
$cPath_array = array_map('tep_string_to_int', explode('_', $cPath));

// make sure no duplicate category IDs exist which could lock the server in a loop
$tmp_array = array();
$n = sizeof($cPath_array);
for ($i=0; $i<$n; $i++) {
  if (!in_array($cPath_array[$i], $tmp_array)) {
	$tmp_array[] = $cPath_array[$i];
  }
}

return $tmp_array;
 }



 function tep_cfg_select_featured($select_array, $key_value, $key = '') {
$string = '';

for ($i=0, $n=sizeof($select_array); $i<$n; $i++) {
  $name = ((tep_not_null($key)) ? 'configuration[' . $key . ']' : 'configuration_value');

  $string .= '<input type="radio" name="' . $name . '" value="' . $select_array[$i] . '"';

  if ($key_value == $select_array[$i]) $string .= ' CHECKED';

  $string .= '> ' . $select_array[$i];
}

return $string;
 }

 function tep_cfg_select_color($key_value, $key = '') {
$string = '';

$name = ((tep_not_null($key)) ? 'configuration[' . $key . ']' : 'configuration_value');

$string .= '<script LANGUAGE="JavaScript"> var cp = new ColorPicker(\'window\'); </SCRIPT>';
$string .= '<br><table border="0" cellspacing="0" cellpadding="0"><tr><td><input type="text" name="' . $name . '" id="' . $name . '" value="' . $key_value . '" size="6"></td><td> </td>';
$string .= '<td><a href="java script:;" onclick="cp.select(document.configuration.'.$name.',\'pick\');return false;" name="pick" id="pick">'.tep_image_button('button_pick_color.gif', IMAGE_PICK_COLOR).'</a></td></tr></table><br>';

return $string;
 }

?>

 

hope you could help me

thanks in advance.

Share this post


Link to post
Share on other sites

ok i manage to get the admin work

but i still the problem in the front

so if you have any clue...

Thx

Share this post


Link to post
Share on other sites
ok i manage to get the admin work

but i still the problem in the front

so if you have any clue...

Thx

 

ok what i've done :

edit includes/functions/featured_sets.php

remove those lines :

////
// Sets the status of a featured product
 function tep_set_featured_status($products_id, $featured) {
return tep_db_query("update " . TABLE_PRODUCTS . " set products_featured = '" . $featured . "', products_last_modified = now() where products_id = '" . (int)$products_id . "'");
 }

////
// Auto expire products on special
 function tep_expire_featured() {
$featured_query = tep_db_query("SELECT products_id from " . TABLE_PRODUCTS . " where products_featured = '1' and now() >= products_featured_until and products_featured_until > 0");
if (tep_db_num_rows($featured_query)) {
  while ($featured = tep_db_fetch_array($featured_query)) {
	tep_set_featured_status($featured['products_id'], '0');
  }
}
 }

 

that's it!

it works now.

 

surfalot : do you have any idea why i have to do this to get it working? Thx

Share this post


Link to post
Share on other sites
for Quick :

it's a mysql 5.0 error :

http://www.oscommerce.com/ext/update-20051...l#_Toc119473702

update your oscommerce

 

 

Thanks SambaMambo for your kindly reply.

 

The oscommerce version i am using is 2.2RC2, it is the latest one.

 

Anyway, I did try the modify according your advice even the original code is not exactly the same as in 2.2 RC2. The result is still the same, have the same error in index.php.

 

I also have tried the contribute"http://www.oscommerce.com/community/contributions,4654". It didnot work either.

 

Anyway, thank you very much!

Share this post


Link to post
Share on other sites

to quick : scroll this thred

i saw someone with the same error you get

and i saw an answer from surfalot with all codes to change ...

Share this post


Link to post
Share on other sites
to quick : scroll this thred

i saw someone with the same error you get

and i saw an answer from surfalot with all codes to change ...

 

I don't know how to thank you SambaMambo, It work! Perfect!

 

Your tip let me know to go thought the relevant topic to get answer should be the first step to ask question.

 

My solution is by #44 on page #3. #57 dosen't work for me.

 

The only question is just the "New product come from April is disappeared in index page when I enable featured sets. If this box is still there, it will be all i wish to have. :-)

Share this post


Link to post
Share on other sites

Hi all,

 

I love what this contribution does.

 

However I already installed a bunch of other add-ons before I discovered this one... (MVS, extra fields, add short description etc, etc)

 

On the admin site it works well, on the shop site I get this error:

Fatal error: Call to undefined function: tep_get_sub_categories() in /catalog/includes/modules/featured_sets.php on line 32

(http://www.foodinnovation.biz/catalog/index.php?cPath=21_22)

 

I don't get it...

 

Can someone out there help me?

 

Thanks!

Share this post


Link to post
Share on other sites

Hi,

 

Im a newbie to Oscommerce. Can someone help me out. I want the functionality of Featured Products being displayed corresponding to its category only. For Example:Assume, We have a Main Category, under which thEIR are 2 SUB CATEGORIES.

 

Each Subcategory has 2 FEATURED PRODUCTS.

 

1. When I go to Main Category page, all the FEATURED PRODUCTS of the Main Cateogry and its Branched Subcategories have to display in a box.

2. When I go to individual Sub category Page, ONLY THE FEATURED PRODUCTS of the selected Sub Category has to get displayed.

 

Thanx in Adance@!!

Share this post


Link to post
Share on other sites

When i try to add products i get this message.

 

Fatal error: Call to undefined function tep_get_products_short() in /home/ajcards/public_html/admin/categories.php on line 584

 

Please advise.

 

Chris.

Share this post


Link to post
Share on other sites

I would like to add the (top) category to the featured listings in ADMIN and sorted by top category

 

Can anyone assist me with this or point me in the right directions ?

Share this post


Link to post
Share on other sites
Hi,

 

Im a newbie to Oscommerce. Can someone help me out. I want the functionality of Featured Products being displayed corresponding to its category only. For Example:Assume, We have a Main Category, under which thEIR are 2 SUB CATEGORIES.

 

Each Subcategory has 2 FEATURED PRODUCTS.

 

1. When I go to Main Category page, all the FEATURED PRODUCTS of the Main Cateogry and its Branched Subcategories have to display in a box.

2. When I go to individual Sub category Page, ONLY THE FEATURED PRODUCTS of the selected Sub Category has to get displayed.

 

Thanx in Adance@!!

that is in the settings.

Share this post


Link to post
Share on other sites
When i try to add products i get this message.

 

Fatal error: Call to undefined function tep_get_products_short() in /home/ajcards/public_html/admin/categories.php on line 584

 

Please advise.

 

Chris.

you missed some additions to this file:

/catalog/includes/functions/general.php

search for "// BOF Open Featured Sets"

Share this post


Link to post
Share on other sites
I would like to add the (top) category to the featured listings in ADMIN and sorted by top category

 

Can anyone assist me with this or point me in the right directions ?

 

If I understand you correctly, neither option is available.

 

To choose categories to be featured, select the green button in the category list in the admin. If you want THE top (default unnamed category), you would have to select each top category individually. should be the same thing.

 

I'm not sure what you mean sort by top category. You can choose to sort by category name in the options. But not by Category Sort Order.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×