Jump to content
Zappo

[Contribution] Option Types v2

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.

Share this post


Link to post
Share on other sites

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

 

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

 

 

Chris


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
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!!

 

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.

Share this post


Link to post
Share on other sites

Installed the v2.3.1 on a fresh OsC but when adding a product with TEXT attribute to the cart, shopping cart is empty... Any thoughts?

Share this post


Link to post
Share on other sites

I've tried both the drop over the top files and doing step by step as per instructions and neither one works with the fresh osc 2.3.1. Anyone else having the same problem?

Share this post


Link to post
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


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
Share on other sites

Hi Chris,

 

Thanks for the quick reply. Going to give it a spin without the attribute manager, didn't know it's the attribute manager that's causing it. :-) Thank you.

Share this post


Link to post
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?

Share this post


Link to post
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

Share this post


Link to post
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! :-)

Share this post


Link to post
Share on other sites

hi, newbie here, i am trying to get a file upload box in the cart process so as to upload artwork with their orders for imagesetting film, i have had to reload oscommerce about 20 times since i first tried this, can anyone help me please?

Share this post


Link to post
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...

Share this post


Link to post
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 :-(

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
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...

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Does anyone have Option Type 231 running on 2.3.1? Anyone care to upload a working version?

Share this post


Link to post
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"...

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Is there a working model for osC 2.31

Could someone post a link for it?

Thanks


"Do what I'm thinking Not what I said." https:windowanddoorparts.us

Share this post


Link to post
Share on other sites

Well maybe I should of said is there a working site.

Thanks


"Do what I'm thinking Not what I said." https:windowanddoorparts.us

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

×