Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] Option Types v2


Zappo

Recommended Posts

can anyone shed some light as how they got this to work on version 2.3.1? I´ve been trying for the past 5 hours, but no luck. Thanks!

 

 

I have this working on my 2.3.1 shop. What part of the installation are you having trouble with?

Rachel M.

Link to comment
Share on other sites

  • 2 weeks later...

Excellent update, but can you tell me how to get the attribute manager working for adding text boxes, text areas and check boxes as options? It would be SO NICE not to have to use the product_attributes when I want to use the Option Types features.

 

Thank you!!

 

I have updated this contribution for use with v2.3.1. The contribution can be downloaded here:

 

http://addons.oscommerce.com/info/8193

 

 

Chris

Rachel M.

Link to comment
Share on other sites

Excellent update, but can you tell me how to get the attribute manager working for adding text boxes, text areas and check boxes as options? It would be SO NICE not to have to use the product_attributes when I want to use the Option Types features.

 

Thank you!!

 

 

Rachel,

 

I did not re-write the Attribute Manager as it was not needed by my client. Only the option types contribution was changed to be compatible with v2.3.1.

 

Dino,

 

Same answer for your questions.

 

 

 

Chris

Link to comment
Share on other sites

Chris,

 

I have it without the attribute manager and still experiencing the same problem on fresh 2.3.1.

 

Run your SQL - add your drop over the top files - if I go into Admin -> Catalog -> Product Attributes -> add a new one as TEXT field add it to the product (CUSTOMER-INPUT as option value), go into product page and try to add it to cart, shopping carts empty...? Any thoughts? Am I missing something?

Link to comment
Share on other sites

I'm having the same issues as Dr_DK. I also tried to do the manual merge from the install.txt, as well as the dropping over the file package. Same problem, the new option type work except for the text and text area. I stepped through the php in a debugger and it looks like the add_cart method of /includes/classes/shopping_cart is where the problems start. The if block starting in line 12 ends up with attributes_pass_check as false, and that prevents the cart addition. Here's the code I pulled from the "drop in files" of the add on package.

 

 

if (is_array($attributes) && !empty($attributes)) {

reset($attributes);

while (list($option, $value) = each($attributes)) {

if (!is_numeric($option) || !is_numeric($value)) {

$attributes_pass_check = false;

break;

} else {

$check_query = tep_db_query("select products_attributes_id from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "' limit 1");

if (tep_db_num_rows($check_query) < 1) {

$attributes_pass_check = false;

break;

}

}

}

} elseif (tep_has_product_attributes($products_id)) {

$attributes_pass_check = false;

}

 

I tried bypassing that, but there are other problems through that method.

Also, you get a different file depending on if you do the manual merge, or what is in the "drop in" folder.

Edited by rknabe
Link to comment
Share on other sites

@rknabe - You are right. I had the same problem, I think DunWeb missed a few things. I had to download v2 of option types and look at their versions to compare.

 

In the includes/classes/shopping_cart.php make the following changes:

 

Comment out lines 103-109:

/*	    reset($attributes);
    while (list($option, $value) = each($attributes)) {
	  if (!is_numeric($option) || !is_numeric($value)) {
	    $attributes_pass_check = false;
	    break;
	  } else {
	    $check_query = tep_db_query("select products_attributes_id from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "' limit 1");
	    if (tep_db_num_rows($check_query) < 1) {
		  $attributes_pass_check = false;
		  break;
	    }
	  }
    }
  } elseif (tep_has_product_attributes($products_id)) {
    $attributes_pass_check = false;
  }
*/

 

Find lines 131-133:

$this->contents[$products_id_string]['attributes'][$option] = $value;
// insert into database
               if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$option . "', '" . (int)$value . "')");

 

Replace with:


//BOF - Zappo - Option Types v2 - Check options loop, and add attributes accordingly...
               $attr_value = NULL;
               $blank_value = FALSE;
               if (strstr($option, TEXT_PREFIX)) {  //Check for Text and Upload Options
                 if (trim($value) == NULL) { //Check if the Text Option has a value (Or is the value blank?)
                   $blank_value = TRUE;
                 } else {                               //Value is valid and contains data --> Add Text Option value
                   $option = str_replace(TEXT_PREFIX,'',$option);
                   $attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES);
                   $value = OPTIONS_VALUE_TEXT_ID;
                   $this->contents[$products_id_string]['attributes_values'][$option] = $attr_value;
                 }
               }

               if (!$blank_value) {  // If the Value is valid and Contains Data, add the option to the Cart....
                 $this->contents[$products_id_string]['attributes'][$option] = $value;
// insert into database
                 // - Zappo - Option Types v2 - Added products_options_value_text For saving Text and Upload Option Values
                 if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id, products_options_value_text) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . $option . "', '" . (int)$value . "', '" . tep_db_input($attr_value) . "')");
               }
//EOF - Zappo - Option Types v2 - Check options loop, and add attributes accordingly...

 

Comment out line 175-184:

/*      if (is_array($attributes)) {
       reset($attributes);
       while (list($option, $value) = each($attributes)) {
         if (!is_numeric($option) || !is_numeric($value)) {
           $attributes_pass_check = false;
           break;
         }
       }
     }
*/

 

Find around lines 193-195:

$this->contents[$products_id_string]['attributes'][$option] = $value;
// update database
           if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "' and products_options_id = '" . (int)$option . "'");

 

Replace it with:

//BOF - Zappo - Option Types v2 - Check options loop for Text & Uploads, and add attributes accordingly...
           $attr_value = NULL;
    $blank_value = FALSE;
           if (strstr($option, TEXT_PREFIX)) {  //Check for Text and Upload Options
             if (trim($value) == NULL) { //Check if the Text Option has a value (Or is the value blank?)
               $blank_value = TRUE;
             } else {                               //Value is valid and contains data --> Prepare for database
               $option = str_replace(TEXT_PREFIX,'',$option);
               $attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES);
               $value = OPTIONS_VALUE_TEXT_ID;
               $this->contents[$products_id_string]['attributes_values'][$option] = $attr_value;
             }
           } 
           if (!$blank_value) {
             $this->contents[$products_id_string]['attributes'][$option] = $value;
// update database
             if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "', products_options_value_text = '" . tep_db_input($attr_value) . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "' and products_options_id = '" . (int)$option . "'");
           }
//EOF - Zappo - Option Types v2 - Check options loop for Text & Uploads, and add attributes accordingly...

 

Find around line 356:

global $customer_id;

Add below it:

//BOF - Zappo - Option Types v2 - ONE LINE - Add call to tep_get_uprid to correctly format product ids containing quotes
     $products_id = tep_get_uprid($products_id, $attributes);

 

Find around line 378:

'image' => $products['products_image'],

Add below it:

'attributes_values' => (isset($this->contents[$products_id]['attributes_values']) ? $this->contents[$products_id]['attributes_values'] : ''),

 

 

Hope that helps. Share if you find something else that needs modifying! :-)

Link to comment
Share on other sites

@Brian - i haven't tried upload option. Do other types work for you? Have you created all the image folders? Download option types v2 and compare their install to see if you've missed something as OT231 seems to be buggy...

Link to comment
Share on other sites

@Brian - i haven't tried upload option. Do other types work for you? Have you created all the image folders? Download option types v2 and compare their install to see if you've missed something as OT231 seems to be buggy...

No, i cant seem to get anything working, not sure how i go about installing it :-(

Link to comment
Share on other sites

Hi,

 

I've almost got this working but am getting a blank page when the mods to application_top,php are applied. The PHP errors log shows: PHP Parse error: syntax error, unexpected T_CASE in [server absolute path]/includes/application_top.php on line 434, referer: https://www.gfccnet....rthex/index.php

 

Line 434 reads

case 'buy_now' :		if (isset($HTTP_GET_VARS['products_id'])) {

 

The complete modded code is:

 

<?php
/*
 $Id: application_top.php 1833 2008-01-30 22:03:30Z hpdl $
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2008 osCommerce
 Released under the GNU General Public License
*/
// start the timer for the page parse time log
 define('PAGE_PARSE_START_TIME', microtime());
// set the level of error reporting
 error_reporting(E_ALL & ~E_NOTICE);
// check support for register_globals
 if (function_exists('ini_get') && (ini_get('register_globals') == false) && (PHP_VERSION < 4.3) ) {
exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory. Please use PHP 4.3+ if register_globals cannot be enabled on the server.');
 }
// Set the local configuration parameters - mainly for developers
 if (file_exists('includes/local/configure.php')) include('includes/local/configure.php');
// include server parameters
 require('includes/configure.php');
 if (strlen(DB_SERVER) < 1) {
if (is_dir('install')) {
  header('Location: install/index.php');
}
 }
// define the project version
 define('PROJECT_VERSION', 'osCommerce Online Merchant v2.2 RC2a');
// some code to solve compatibility issues
 require(DIR_WS_FUNCTIONS . 'compatibility.php');
// set the type of request (secure or not)
 $request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
// set php_self in the local scope
 if (!isset($PHP_SELF)) $PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'];
 if ($request_type == 'NONSSL') {
define('DIR_WS_CATALOG', DIR_WS_HTTP_CATALOG);
 } else {
define('DIR_WS_CATALOG', DIR_WS_HTTPS_CATALOG);
 }
// include the list of project filenames
 require(DIR_WS_INCLUDES . 'filenames.php');
// include the list of project database tables
 require(DIR_WS_INCLUDES . 'database_tables.php');
// customization for the design layout
 define('BOX_WIDTH', 190); // how wide the boxes should be in pixels (default: 125)
// include the database functions
 require(DIR_WS_FUNCTIONS . 'database.php');
// make a connection to the database... now
 tep_db_connect() or die('Unable to connect to database server!');
// set the application parameters
 $configuration_query = tep_db_query('select configuration_key as cfgKey, configuration_value as cfgValue from ' . TABLE_CONFIGURATION);
 while ($configuration = tep_db_fetch_array($configuration_query)) {
define($configuration['cfgKey'], $configuration['cfgValue']);
 }
// if gzip_compression is enabled, start to buffer the output
 if ( (GZIP_COMPRESSION == 'true') && ($ext_zlib_loaded = extension_loaded('zlib')) && (PHP_VERSION >= '4') ) {
if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) < 1) {
  if (PHP_VERSION >= '4.0.4') {
	ob_start('ob_gzhandler');
  } else {
	include(DIR_WS_FUNCTIONS . 'gzip_compression.php');
	ob_start();
	ob_implicit_flush();
  }
} else {
  ini_set('zlib.output_compression_level', GZIP_LEVEL);
}
 }
// set the HTTP GET parameters manually if search_engine_friendly_urls is enabled
 if (SEARCH_ENGINE_FRIENDLY_URLS == 'true') {
if (strlen(getenv('PATH_INFO')) > 1) {
  $GET_array = array();
  $PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
  $vars = explode('/', substr(getenv('PATH_INFO'), 1));
  for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
	if (strpos($vars[$i], '[]')) {
	  $GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
	} else {
	  $HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
	}
	$i++;
  }
  if (sizeof($GET_array) > 0) {
	while (list($key, $value) = each($GET_array)) {
	  $HTTP_GET_VARS[$key] = $value;
	}
  }
}
 }
// define general functions used application-wide
 require(DIR_WS_FUNCTIONS . 'general.php');
 require(DIR_WS_FUNCTIONS . 'html_output.php');
// set the cookie domain
 $cookie_domain = (($request_type == 'NONSSL') ? HTTP_COOKIE_DOMAIN : HTTPS_COOKIE_DOMAIN);
 $cookie_path = (($request_type == 'NONSSL') ? HTTP_COOKIE_PATH : HTTPS_COOKIE_PATH);
// include cache functions if enabled
 if (USE_CACHE == 'true') include(DIR_WS_FUNCTIONS . 'cache.php');
// include shopping cart class
 require(DIR_WS_CLASSES . 'shopping_cart.php');
// include navigation history class
 require(DIR_WS_CLASSES . 'navigation_history.php');
// check if sessions are supported, otherwise use the php3 compatible session class
 if (!function_exists('session_start')) {
define('PHP_SESSION_NAME', 'osCsid');
define('PHP_SESSION_PATH', $cookie_path);
define('PHP_SESSION_DOMAIN', $cookie_domain);
define('PHP_SESSION_SAVE_PATH', SESSION_WRITE_DIRECTORY);
include(DIR_WS_CLASSES . 'sessions.php');
 }
// define how the session functions will be used
 require(DIR_WS_FUNCTIONS . 'sessions.php');
// set the session name and save path
 tep_session_name('osCsid');
 tep_session_save_path(SESSION_WRITE_DIRECTORY);
// set the session cookie parameters
  if (function_exists('session_set_cookie_params')) {
session_set_cookie_params(0, $cookie_path, $cookie_domain);
 } elseif (function_exists('ini_set')) {
ini_set('session.cookie_lifetime', '0');
ini_set('session.cookie_path', $cookie_path);
ini_set('session.cookie_domain', $cookie_domain);
 }
// set the session ID if it exists
  if (isset($HTTP_POST_VARS[tep_session_name()])) {
 tep_session_id($HTTP_POST_VARS[tep_session_name()]);
  } elseif ( ($request_type == 'SSL') && isset($HTTP_GET_VARS[tep_session_name()]) ) {
 tep_session_id($HTTP_GET_VARS[tep_session_name()]);
  }
// start the session
 $session_started = false;
 if (SESSION_FORCE_COOKIE_USE == 'True') {
tep_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, $cookie_path, $cookie_domain);
if (isset($HTTP_COOKIE_VARS['cookie_test'])) {
  tep_session_start();
  $session_started = true;
}
 } elseif (SESSION_BLOCK_SPIDERS == 'True') {
$user_agent = strtolower(getenv('HTTP_USER_AGENT'));
$spider_flag = false;
if (tep_not_null($user_agent)) {
  $spiders = file(DIR_WS_INCLUDES . 'spiders.txt');
  for ($i=0, $n=sizeof($spiders); $i<$n; $i++) {
	if (tep_not_null($spiders[$i])) {
	  if (is_integer(strpos($user_agent, trim($spiders[$i])))) {
		$spider_flag = true;
		break;
	  }
	}
  }
}
if ($spider_flag == false) {
  tep_session_start();
  $session_started = true;
}
 } else {
tep_session_start();
$session_started = true;
 }
 if ( ($session_started == true) && (PHP_VERSION >= 4.3) && function_exists('ini_get') && (ini_get('register_globals') == false) ) {
extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
 }
// set SID once, even if empty
 $SID = (defined('SID') ? SID : '');
// verify the ssl_session_id if the feature is enabled
 if ( ($request_type == 'SSL') && (SESSION_CHECK_SSL_SESSION_ID == 'True') && (ENABLE_SSL == true) && ($session_started == true) ) {
$ssl_session_id = getenv('SSL_SESSION_ID');
if (!tep_session_is_registered('SSL_SESSION_ID')) {
  $SESSION_SSL_ID = $ssl_session_id;
  tep_session_register('SESSION_SSL_ID');
}
if ($SESSION_SSL_ID != $ssl_session_id) {
  tep_session_destroy();
  tep_redirect(tep_href_link(FILENAME_SSL_CHECK));
}
 }
// verify the browser user agent if the feature is enabled
 if (SESSION_CHECK_USER_AGENT == 'True') {
$http_user_agent = getenv('HTTP_USER_AGENT');
if (!tep_session_is_registered('SESSION_USER_AGENT')) {
  $SESSION_USER_AGENT = $http_user_agent;
  tep_session_register('SESSION_USER_AGENT');
}
if ($SESSION_USER_AGENT != $http_user_agent) {
  tep_session_destroy();
  tep_redirect(tep_href_link(FILENAME_LOGIN));
}
 }
// verify the IP address if the feature is enabled
 if (SESSION_CHECK_IP_ADDRESS == 'True') {
$ip_address = tep_get_ip_address();
if (!tep_session_is_registered('SESSION_IP_ADDRESS')) {
  $SESSION_IP_ADDRESS = $ip_address;
  tep_session_register('SESSION_IP_ADDRESS');
}
if ($SESSION_IP_ADDRESS != $ip_address) {
  tep_session_destroy();
  tep_redirect(tep_href_link(FILENAME_LOGIN));
}
 }
// create the shopping cart & fix the cart if necesary
 if (tep_session_is_registered('cart') && is_object($cart)) {
if (PHP_VERSION < 4) {
  $broken_cart = $cart;
  $cart = new shoppingCart;
  $cart->unserialize($broken_cart);
}
 } else {
tep_session_register('cart');
$cart = new shoppingCart;
 }
// include currencies class and create an instance
 require(DIR_WS_CLASSES . 'currencies.php');
 $currencies = new currencies();
// include the mail classes
 require(DIR_WS_CLASSES . 'mime.php');
 require(DIR_WS_CLASSES . 'email.php');
// set the language
 if (!tep_session_is_registered('language') || isset($HTTP_GET_VARS['language'])) {
if (!tep_session_is_registered('language')) {
  tep_session_register('language');
  tep_session_register('languages_id');
}
include(DIR_WS_CLASSES . 'language.php');
$lng = new language();
if (isset($HTTP_GET_VARS['language']) && tep_not_null($HTTP_GET_VARS['language'])) {
  $lng->set_language($HTTP_GET_VARS['language']);
} else {
  $lng->get_browser_language();
}
$language = $lng->language['directory'];
$languages_id = $lng->language['id'];
 }
// include the language translations
 require(DIR_WS_LANGUAGES . $language . '.php');
// currency
 if (!tep_session_is_registered('currency') || isset($HTTP_GET_VARS['currency']) || ( (USE_DEFAULT_LANGUAGE_CURRENCY == 'true') && (LANGUAGE_CURRENCY != $currency) ) ) {
if (!tep_session_is_registered('currency')) tep_session_register('currency');
if (isset($HTTP_GET_VARS['currency']) && $currencies->is_set($HTTP_GET_VARS['currency'])) {
  $currency = $HTTP_GET_VARS['currency'];
} else {
  $currency = (USE_DEFAULT_LANGUAGE_CURRENCY == 'true') ? LANGUAGE_CURRENCY : DEFAULT_CURRENCY;
}
 }
// navigation history
 if (tep_session_is_registered('navigation')) {
if (PHP_VERSION < 4) {
  $broken_navigation = $navigation;
  $navigation = new navigationHistory;
  $navigation->unserialize($broken_navigation);
}
 } else {
tep_session_register('navigation');
$navigation = new navigationHistory;
 }
 $navigation->add_current_page();
 //BOF - Zappo - Option Types v2 - Moved infobox and messageStack here from below
// infobox
require(DIR_WS_CLASSES . 'boxes.php');
// initialize the message stack for output messages
 require(DIR_WS_CLASSES . 'message_stack.php');
 $messageStack = new messageStack;
//EOF - Zappo - Option Types v2 - Moved infobox and messageStack here from below
// Shopping cart actions
 if (isset($HTTP_GET_VARS['action'])) {
// redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled
if ($session_started == false) {
  tep_redirect(tep_href_link(FILENAME_COOKIE_USAGE));
}
if (DISPLAY_CART == 'true') {
  $goto =  FILENAME_SHOPPING_CART;
  $parameters = array('action', 'cPath', 'products_id', 'pid');
} else {
  $goto = basename($PHP_SELF);
  if ($HTTP_GET_VARS['action'] == 'buy_now') {
	$parameters = array('action', 'pid', 'products_id');
  } else {
	$parameters = array('action', 'pid');
  }
}
switch ($HTTP_GET_VARS['action']) {
  // customer wants to update the product quantity in their shopping cart
  case 'update_product' : for ($i=0, $n=sizeof($HTTP_POST_VARS['products_id']); $i<$n; $i++) {
							if (in_array($HTTP_POST_VARS['products_id'][$i], (is_array($HTTP_POST_VARS['cart_delete']) ? $HTTP_POST_VARS['cart_delete'] : array()))) {
							  $cart->remove($HTTP_POST_VARS['products_id'][$i]);
							} else {
							  if (PHP_VERSION < 4) {
								// if PHP3, make correction for lack of multidimensional array.
								reset($HTTP_POST_VARS);
								while (list($key, $value) = each($HTTP_POST_VARS)) {
								  if (is_array($value)) {
									while (list($key2, $value2) = each($value)) {
									  if (ereg ("(.*)\]\[(.*)", $key2, $var)) {
										$id2[$var[1]][$var[2]] = $value2;
									  }
									}
								  }
								}
								$attributes = ($id2[$HTTP_POST_VARS['products_id'][$i]]) ? $id2[$HTTP_POST_VARS['products_id'][$i]] : '';
							  } else {
								$attributes = ($HTTP_POST_VARS['id'][$HTTP_POST_VARS['products_id'][$i]]) ? $HTTP_POST_VARS['id'][$HTTP_POST_VARS['products_id'][$i]] : '';
							  }
							  $cart->add_cart($HTTP_POST_VARS['products_id'][$i], $HTTP_POST_VARS['cart_quantity'][$i], $attributes, false);
							}
						  }
						  tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
						  break;
  // customer adds a product from the products page
  //BOF - Zappo - Option Types v2 - File uploading: Purge the Temporary Upload Dir
							$purgeDir = opendir(TMP_DIR) or die ('Could not open '.TMP_DIR);
							while ($file = readdir($purgeDir)) {
							  if ($file != ('.htaccess') && $file != ('.') && $file != ('..') && filemtime(TMP_DIR . $file) < strtotime(OPTIONS_TYPE_PURGETIME)) {
								unlink(TMP_DIR . $file);  // Delete file from server...
								tep_db_query("delete from " . TABLE_FILES_UPLOADED . " where files_uploaded_name = '" . $file . "'"); // Remove File's database entry....
							  }
							}
							closedir($purgeDir);
							//EOF - Zappo - Option Types v2 - File uploading: Purge the Temporary Upload Dir
							//BOF - Zappo - Option Types v2 - ONE LINE - Set real_ids for processing
							$real_ids = $HTTP_POST_VARS['id'];
							//BOF - Zappo - Option Types v2 - File uploading: save uploaded files with unique file names, in the proper folder
							if ($HTTP_POST_VARS['number_of_uploads'] > 0) {
							  require(DIR_WS_CLASSES . 'upload.php');
							  for ($i = 1; $i <= $HTTP_POST_VARS['number_of_uploads']; $i++) {
								$TEMP_FILE = $_FILES['id']['tmp_name'][TEXT_PREFIX . $HTTP_POST_VARS[uPLOAD_PREFIX . $i]];
								if (tep_not_null($TEMP_FILE) && $TEMP_FILE != 'none') {
								  $products_options_file = new upload('id');
								  //BOF - Zappo - Option Types v2 - Set Upload directory (Registered customers in Uploads, other in Temporary folder)
								  if (tep_session_is_registered('customer_id')) {  // IF the customer is registered, use Upload Dir
									$products_options_file->set_destination(UPL_DIR);
								  } else { // If the customer is not registered, use Temporary Dir
									$products_options_file->set_destination(TMP_DIR);
								  }
								  //EOF - Zappo - Option Types v2 - Set Upload directory (Registered customers in Uploads, other in Temporary folder)
								  if ($products_options_file->parse(TEXT_PREFIX . $HTTP_POST_VARS[uPLOAD_PREFIX . $i])) {
									if (tep_session_is_registered('customer_id')) {
									  tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, customers_id, files_uploaded_name, date) values('" . tep_session_id() . "', '" . $customer_id . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
									} else {
									  tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, files_uploaded_name, date) values('" . tep_session_id() . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
									}
									//BOF - Zappo - Option Types v2 - Set File Prefix
									if (OPTIONS_TYPE_FILEPREFIX == 'Database') {  //  Database ID as File prefix
									  $insert_id = tep_db_insert_id() . '_';
									} else {  //  Date, time or both as File prefix (Change date formatting here)
									  if (OPTIONS_TYPE_FILEPREFIX == 'Date' || OPTIONS_TYPE_FILEPREFIX == 'DateTime') {
										$insert_id = 'D'.date("d-m-y_");
									  }
									  $insert_id .= (OPTIONS_TYPE_FILEPREFIX == 'DateTime' || OPTIONS_TYPE_FILEPREFIX == 'Time') ? 'T'.date("H-i_") : '';
									}
									//EOF - Zappo - Option Types v2 - Set File Prefix
									// Update filename in Database with correct prefix (For comparing database names with real files)
									tep_db_query("update " . TABLE_FILES_UPLOADED . " set files_uploaded_name = '" . tep_db_input($insert_id . $products_options_file->filename) . "' where sesskey = '" . tep_session_id() . "' and files_uploaded_name = '" . tep_db_input($products_options_file->filename) . "' and date = '" . date("d-m-y") . "'");
									$real_ids[TEXT_PREFIX . $HTTP_POST_VARS[uPLOAD_PREFIX . $i]] = $insert_id . $products_options_file->filename;
									$products_options_file->set_filename($insert_id . $products_options_file->filename);
									if (!($products_options_file->save())) {
									  break 2;
									}
								  } else {
									break 2;
								  }
								} else { // No file uploaded -- use previously uploaded file (From Dropdown)
								  $real_ids[TEXT_PREFIX . $HTTP_POST_VARS[uPLOAD_PREFIX . $i]] = $HTTP_POST_VARS[TEXT_PREFIX . UPLOAD_PREFIX . $i];
								}
							  }
							}
							//EOF - Zappo - Option Types v2 - File uploading: save uploaded files with unique file names, in the proper folder
							//BOF - Zappo - Option Types v2 - ONE LINE - Replace the posted array with the processed one.
							$cart->add_cart($HTTP_POST_VARS['products_id'], $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['products_id'], $real_ids))+1, $real_ids);
						  }
						  tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
						  break;
  // performed by the 'buy now' button in product listings and review page
*** LINE 434 >>> 	 case 'buy_now' :		if (isset($HTTP_GET_VARS['products_id'])) {
							if (tep_has_product_attributes($HTTP_GET_VARS['products_id'])) {
							  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id']));
							} else {
							  $cart->add_cart($HTTP_GET_VARS['products_id'], $cart->get_quantity($HTTP_GET_VARS['products_id'])+1);
							}
						  }
						  tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
						  break;
  case 'notify' :		 if (tep_session_is_registered('customer_id')) {
							if (isset($HTTP_GET_VARS['products_id'])) {
							  $notify = $HTTP_GET_VARS['products_id'];
							} elseif (isset($HTTP_GET_VARS['notify'])) {
							  $notify = $HTTP_GET_VARS['notify'];
							} elseif (isset($HTTP_POST_VARS['notify'])) {
							  $notify = $HTTP_POST_VARS['notify'];
							} else {
							  tep_redirect(tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action', 'notify'))));
							}
							if (!is_array($notify)) $notify = array($notify);
							for ($i=0, $n=sizeof($notify); $i<$n; $i++) {
							  $check_query = tep_db_query("select count(*) as count from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . $notify[$i] . "' and customers_id = '" . $customer_id . "'");
							  $check = tep_db_fetch_array($check_query);
							  if ($check['count'] < 1) {
								tep_db_query("insert into " . TABLE_PRODUCTS_NOTIFICATIONS . " (products_id, customers_id, date_added) values ('" . $notify[$i] . "', '" . $customer_id . "', now())");
							  }
							}
							tep_redirect(tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action', 'notify'))));
						  } else {
							$navigation->set_snapshot();
							tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
						  }
						  break;
  case 'notify_remove' :  if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['products_id'])) {
							$check_query = tep_db_query("select count(*) as count from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . $HTTP_GET_VARS['products_id'] . "' and customers_id = '" . $customer_id . "'");
							$check = tep_db_fetch_array($check_query);
							if ($check['count'] > 0) {
							  tep_db_query("delete from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . $HTTP_GET_VARS['products_id'] . "' and customers_id = '" . $customer_id . "'");
							}
							tep_redirect(tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action'))));
						  } else {
							$navigation->set_snapshot();
							tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
						  }
						  break;
  case 'cust_order' :	 if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['pid'])) {
							if (tep_has_product_attributes($HTTP_GET_VARS['pid'])) {
							  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['pid']));
							} else {
							  $cart->add_cart($HTTP_GET_VARS['pid'], $cart->get_quantity($HTTP_GET_VARS['pid'])+1);
							}
						  }
						  tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
						  break;
}
 }
// include the who's online functions
 require(DIR_WS_FUNCTIONS . 'whos_online.php');
 tep_update_whos_online();
// include the password crypto functions
 require(DIR_WS_FUNCTIONS . 'password_funcs.php');
// include validation functions (right now only email address)
 require(DIR_WS_FUNCTIONS . 'validations.php');
// split-page-results
 require(DIR_WS_CLASSES . 'split_page_results.php');
// infobox
//BOF - Zappo - Option Types v2 - ONE LINE - infobox moved up from here...
// auto activate and expire banners
 require(DIR_WS_FUNCTIONS . 'banner.php');
 tep_activate_banners();
 tep_expire_banners();
// auto expire special products
 require(DIR_WS_FUNCTIONS . 'specials.php');
 tep_expire_specials();
// calculate category path
 if (isset($HTTP_GET_VARS['cPath'])) {
$cPath = $HTTP_GET_VARS['cPath'];
 } elseif (isset($HTTP_GET_VARS['products_id']) && !isset($HTTP_GET_VARS['manufacturers_id'])) {
$cPath = tep_get_product_path($HTTP_GET_VARS['products_id']);
 } else {
$cPath = '';
 }
 if (tep_not_null($cPath)) {
$cPath_array = tep_parse_category_path($cPath);
$cPath = implode('_', $cPath_array);
$current_category_id = $cPath_array[(sizeof($cPath_array)-1)];
 } else {
$current_category_id = 0;
 }
// include the breadcrumb class and start the breadcrumb trail
 require(DIR_WS_CLASSES . 'breadcrumb.php');
 $breadcrumb = new breadcrumb;
 $breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER);
 $breadcrumb->add(HEADER_TITLE_CATALOG, tep_href_link(FILENAME_DEFAULT));
// add category names or the manufacturer name to the breadcrumb trail
 if (isset($cPath_array)) {
for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
  $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
  if (tep_db_num_rows($categories_query) > 0) {
	$categories = tep_db_fetch_array($categories_query);
	$breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
  } else {
	break;
  }
}
 } elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
$manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
if (tep_db_num_rows($manufacturers_query)) {
  $manufacturers = tep_db_fetch_array($manufacturers_query);
  $breadcrumb->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
}
 }
// add the products model to the breadcrumb trail
 if (isset($HTTP_GET_VARS['products_id'])) {
$model_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
if (tep_db_num_rows($model_query)) {
  $model = tep_db_fetch_array($model_query);
  $breadcrumb->add($model['products_model'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']));
}
 }
//BOF - Zappo - Option Types v2 - ONE LINE - message stack moved up from here...
// set which precautions should be checked
 define('WARN_INSTALL_EXISTENCE', 'true');
 define('WARN_CONFIG_WRITEABLE', 'true');
 define('WARN_SESSION_DIRECTORY_NOT_WRITEABLE', 'true');
 define('WARN_SESSION_AUTO_START', 'true');
 define('WARN_DOWNLOAD_DIRECTORY_NOT_READABLE', 'true');
?>

 

I haven't been able to find the error and the un-modded page does load correctly. Any help is much appreciated.

Edited by Don Gawgon
Link to comment
Share on other sites

I didn't check the instructions pf the package uploaded by dunweb, maybe something is not clear there, but you have definitely a mistale in includes/application_top.php in case "add_product'

 

Here's the code as it should look like

  // customer adds a product from the products page
  case 'add_product' :    if (isset($HTTP_POST_VARS['products_id']) && is_numeric($HTTP_POST_VARS['products_id'])) {

						    // BOF Option Types v2
						    // File uploading: Purge the Temporary Upload Dir
						    $purgeDir = opendir(TMP_DIR) or die ('Could not open '.TMP_DIR);
						    while ($file = readdir($purgeDir)) {
							  if ($file != ('.htaccess') && $file != ('.') && $file != ('..') && filemtime(TMP_DIR . $file) < strtotime(OPTIONS_TYPE_PURGETIME)) {
							    unlink(TMP_DIR . $file);  // Delete file from server...
							    tep_db_query("delete from " . TABLE_FILES_UPLOADED . " where files_uploaded_name = '" . $file . "'"); // Remove File's database entry....
							  }
						    }
						    closedir($purgeDir);

						    // Set real_ids for processing
						    $real_ids = $_POST['id'];	   
						    // save uploaded files with unique file names, in the proper folder
						    if ($_POST['number_of_uploads'] > 0) {
							  require(DIR_WS_CLASSES . 'upload.php');
							  for ($i = 1; $i <= $_POST['number_of_uploads']; $i++) {
							    $TEMP_FILE = $_FILES['id']['tmp_name'][TEXT_PREFIX . $_POST[uPLOAD_PREFIX . $i]];
							    if (tep_not_null($TEMP_FILE) && $TEMP_FILE != 'none') {
								  $products_options_file = new upload('id');

								  // Set Upload directory (Registered customers in Uploads, other in Temporary folder)
								  if (tep_session_is_registered('customer_id')) {
								    $products_options_file->set_destination(UPL_DIR);
								  } else {
								    $products_options_file->set_destination(TMP_DIR);
								  }

								  if ($products_options_file->parse(TEXT_PREFIX . $_POST[uPLOAD_PREFIX . $i])) {
								    if (tep_session_is_registered('customer_id')) {
									  tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, customers_id, files_uploaded_name, date) values('" . tep_session_id() . "', '" . $customer_id . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
								    } else {
									  tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, files_uploaded_name, date) values('" . tep_session_id() . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
								    }				   
								    // Set File Prefix
								    if (OPTIONS_TYPE_FILEPREFIX == 'Database') {  //  Database ID as File prefix
									  $insert_id = tep_db_insert_id() . '_';
								    } else {  //  Date, time or both as File prefix (Change date formatting here)
									  if (OPTIONS_TYPE_FILEPREFIX == 'Date' || OPTIONS_TYPE_FILEPREFIX == 'DateTime') {
									    $insert_id = 'D'.date("d-m-y_");
									  }
									  $insert_id .= (OPTIONS_TYPE_FILEPREFIX == 'DateTime' || OPTIONS_TYPE_FILEPREFIX == 'Time') ? 'T'.date("H-i_") : '';
								    }

								    // Update filename in Database with correct prefix (For comparing database names with real files)
								    tep_db_query("update " . TABLE_FILES_UPLOADED . " set files_uploaded_name = '" . tep_db_input($insert_id . $products_options_file->filename) . "' where sesskey = '" . tep_session_id() . "' and files_uploaded_name = '" . tep_db_input($products_options_file->filename) . "' and date = '" . date("d-m-y") . "'");
								    $real_ids[TEXT_PREFIX . $_POST[uPLOAD_PREFIX . $i]] = $insert_id . $products_options_file->filename;
								    $products_options_file->set_filename($insert_id . $products_options_file->filename);
								    if (!($products_options_file->save())) {
									  break 2;
								    }
								  } else {
								    break 2;
								  }
							    } else { // No file uploaded -- use previously uploaded file (From Dropdown)
								  $real_ids[TEXT_PREFIX . $_POST[uPLOAD_PREFIX . $i]] = $_POST[TEXT_PREFIX . UPLOAD_PREFIX . $i];
							    }
							  }
						    }
						    $cart->add_cart($_POST['products_id'], $cart->get_quantity(tep_get_uprid($_POST['products_id'], $real_ids))+1, $real_ids);
						    // EOF Option Types v2
						  }
						  tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
						  break;

Edited by multimixer
Link to comment
Share on other sites

Don,

 

If you are trying to install this contribution into a v2.3.1 site, you have the wrong code for application_top.php. Check to ensure you have downloaded the proper version for v2.3.1.

 

 

 

Chris

Link to comment
Share on other sites

Hi. I'm running v2.2 RC2. Thanks for the advise. I'll try somethings out based on he advise and, hopefully, i won't have to upgrade OSC yet...

 

Option types v2 work perfectly fine with the version you have (rc2a)

 

Option types for osCommerce RC2a

Option types for osCommerce 231

Link to comment
Share on other sites

 

Option types v2 work perfectly fine with the version you have (rc2a)

 

Option types for osCommerce RC2a

Option types for osCommerce 231

 

Thanks. Multimixer's suggestion fixed that issue. I'm going to go back and re-mod my installation with the RC2a version. As it stands, everything seems to be working except that the customer text input is not being passed to PayPal, just "CUSTOMER-INPUT"...

Link to comment
Share on other sites

[...] the customer text input is not being passed to PayPal, just "CUSTOMER-INPUT"...

 

Some of the paypal modules use their "own" "checkout_process.php" file, that means that any changes tone to file catalog/checkout_process.php need to be repeatet accordingly for the paypal module you use, that will be located in catalog/includes/modules/payment/

 

The otion types v2 version for RC2a, has such a paypal file included, I don't know if this is the case also for the 231 update, anyway, you can check that file and do changes to your paypal file accordingly

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...