Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

nikikelly

Archived
  • Posts

    44
  • Joined

  • Last visited

Posts posted by nikikelly

  1. I don't have an authorize.net account so I'm curious when a transaction posts to the authorize.net account, is there information from osC that can be used to tie back to the storefront and see what order the payment is associated with?

     

    Thanks in advance!

  2. I'm hoping someone can help me see the error of my ways. Let's say that I want to use this contribution but I don't need it to be as locked down as it is. So, I'd like to be able to get to the index page and set the customer_group_id there as the entry to the store. So, I'd be passing the customer_group_id via the URL and setting the session variable on that page to be carried throughout.

     

    Isn't it as simple as adding a line to index.php

     

    $_SESSION['sppc_customer_group_id'] = $HTTP_GET_VARS['gID'];

     

    where the URL is http://www.storeURL.com/index.php?gID=1 for customer group 1

    http://www.storeURL.com/index.php?gID=2 for customer group 2

     

    Forgive me for my ignorance! Any help is MUCH appreciated!

     

    I should have mentioned that I'm using SPPC with the "Hide Products & Categories" contribution so I basically want any group's view of the storefront to be easily accessible and not to require a login (as the SPPC contribution allows for the one designated admin email). Once they reach the point where they register, I'll automatically set a hidden field to specify their group based on the group's pricing that they're viewing.

  3. I'm hoping someone can help me see the error of my ways. Let's say that I want to use this contribution but I don't need it to be as locked down as it is. So, I'd like to be able to get to the index page and set the customer_group_id there as the entry to the store. So, I'd be passing the customer_group_id via the URL and setting the session variable on that page to be carried throughout.

     

    Isn't it as simple as adding a line to index.php

     

    $_SESSION['sppc_customer_group_id'] = $HTTP_GET_VARS['gID'];

     

    where the URL is http://www.storeURL.com/index.php?gID=1 for customer group 1

    http://www.storeURL.com/index.php?gID=2 for customer group 2

     

    Forgive me for my ignorance! Any help is MUCH appreciated!

  4. Oh boy! That's really not very pretty. Especially compared to your SPPC manual install instructions. I'm scared!

     

    I'd like to eat my words....this was not scary at all once I opened the text file in word....installation instructions were great! Thanks Jan! One thing I noticed with the "Hide Products" changes....should all instances of the following:

     

      if(!tep_session_is_registered('sppc_customer_group_id')) { 
     $customer_group_id = '0';
     } else {
      $customer_group_id = $sppc_customer_group_id;
     }

     

    be replaced now with:

     

      if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
    $customer_group_id = $_SESSION['sppc_customer_group_id'];
     } else {
    $customer_group_id = '0';
     }

     

    Thanks so much for all of your amazing contributions and the support that you continue to provide!

  5. The page shopping_cart.php gets it's prices from /includes/classes/shopping_cart.php and it involves the functions get_products.php and attributes_prices.

    I hope you added "Hide Products & Categories by Group for SPPC" manually because it is a lot older than RC2a. It needs updating. So you can't use the pre-modified files.

     

    No - sadly, I didn't see the manual instructions and just installed RC2 then SPPC4.2.1a then Hide Products & Categories.....of course then I continued to customize my installation so now if I go back and do it the way you're suggesting, I'll lose a day's work. Which I guess is what I need to do but I don't even see the manual instructions on that contribution....any advice?

  6. I was hoping someone else had the same issue I'm having - thought I saw mention of it somewhere. I installed the SPPC 4.2.1a contribution and then installed the "Hide Products & Categories by Group for SPPC" contribution. Pricing on product and attributes is fine throughout the process until I get to the shopping cart, at which point the total is the sum of the retail price.

     

    Here is the code on the preceding page (product_info.php)....can anyone see why the group price is not being calculated the right way?

    <?php
    /*
     $Id: product_info.php 1739 2007-12-20 00:52:16Z hpdl $
     adapted for Separate Pricing Per Customer v4.2 2007/06/23
    
     osCommerce, Open Source E-Commerce Solutions
     http://www.oscommerce.com
    
     Copyright (c) 2003 osCommerce
    
     Released under the GNU General Public License
    */
    
     require('includes/application_top.php');
    
     require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_PRODUCT_INFO);
    
     $product_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
     $product_check = tep_db_fetch_array($product_check_query);
    // BOF Separate Pricing per Customer
     if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
    $customer_group_id = $_SESSION['sppc_customer_group_id'];
     } else {
    //$customer_group_id = '0';
    $customer_group_id = $HTTP_GET_VARS['gID'];
     }
    // EOF Separate Pricing per Customer
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
    <title><?php echo TITLE; ?></title>
    <base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
    <link rel="stylesheet" type="text/css" href="stylesheet.css">
    <script language="javascript"><!--
    function popupWindow(url) {
     window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,res
    izable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,le
    ft=150')
    }
    //--></script>
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
    <!-- header //-->
    <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
    <!-- header_eof //-->
    
    <!-- body //-->
    <table border="0" width="100%" cellspacing="3" cellpadding="3">
     <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
    <!-- left_navigation //-->
    <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
    <!-- left_navigation_eof //-->
    </table></td>
    <!-- body_text //-->
    <td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
    <?php
     if ($product_check['total'] < 1) {
    ?>
      <tr>
    	<td><?php new infoBox(array(array('text' => TEXT_PRODUCT_NOT_FOUND))); ?></td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
    	<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
    	  <tr class="infoBoxContents">
    		<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
    		  <tr>
    			<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    			<td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
    			<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    		  </tr>
    		</table></td>
    	  </tr>
    	</table></td>
      </tr>
    <?php
     } else {
    $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
    $product_info = tep_db_fetch_array($product_info_query);
    
    tep_db_query("update " . TABLE_PRODUCTS_DESCRIPTION . " set products_viewed = products_viewed+1 where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)$languages_id . "'");
    
    if ($new_price = tep_get_products_special_price($product_info['products_id'])) {
    // BOF Separate Pricing per Customer
      if ($customer_group_id > 0) { // only need to check products_groups if customer is not retail
    	$scustomer_group_price_query = tep_db_query("select customers_group_price from " . TABLE_PRODUCTS_GROUPS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id']. "' and customers_group_id =  '" . $customer_group_id . "'");
    	if ($scustomer_group_price = tep_db_fetch_array($scustomer_group_price_query)) {
    	  $product_info['products_price']= $scustomer_group_price['customers_group_price'];
    	  }
      } // end if ($customer_group_id > 0)
    // EOF Separate Pricing per Customer
    
      $products_price = '<s>' . $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . $currencies->display_price($new_price, tep_get_tax_rate($product_info['products_tax_class_id'])) . '</span>';
    } else {
    // BOF Separate Pricing per Customer
      if ($customer_group_id > 0) { // only need to check products_groups if customer is not retail
    	$scustomer_group_price_query = tep_db_query("select customers_group_price from " . TABLE_PRODUCTS_GROUPS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id']. "' and customers_group_id =  '" . $customer_group_id . "'");
    	if ($scustomer_group_price = tep_db_fetch_array($scustomer_group_price_query)) {
    	$product_info['products_price']= $scustomer_group_price['customers_group_price'];
    	}
    } // end if ($customer_group_id > 0)
    // EOF Separate Pricing per Customer
      $products_price = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']));
    }
    
    if (tep_not_null($product_info['products_model'])) {
      $products_name = $product_info['products_name'] . '<br><span class="smallText">[' . $product_info['products_model'] . ']</span>';
    } else {
      $products_name = $product_info['products_name'];
    }
    ?>
      <tr>
    	<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
    	  <tr>
    		<td class="pageHeading" valign="top"><?php echo $products_name; ?></td>
    		<td class="pageHeading" align="right" valign="top"><?php echo $products_price; ?></td>
    	  </tr>
    	</table></td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
    	<td class="main">
    <?php
    if (tep_not_null($product_info['products_image'])) {
    ?>
    	  <table border="0" cellspacing="0" cellpadding="2" align="right">
    		<tr>
    		  <td align="center" class="smallText">
    <script language="javascript"><!--
    document.write('<?php echo '<a href="java script:popupWindow(\\\'' . tep_href_link(FILENAME_POPUP_IMAGE, 'pID=' . $product_info['products_id']) . '\\\')">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], addslashes($product_info['products_name']), SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>');
    //--></script>
    <noscript>
    <?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . $product_info['products_image']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], $product_info['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>
    </noscript>
    		  </td>
    		</tr>
    	  </table>
    <?php
    }
    ?>
    	  <p><?php echo stripslashes($product_info['products_description']); ?></p>
    <?php
    // BOF SPPC Hide attributes from customer groups
    $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' and find_in_set('".$customer_group_id."', attributes_hide_from_groups) = 0 ");
    $products_attributes = tep_db_fetch_array($products_attributes_query);
    if ($products_attributes['total'] > 0) {
    ?>
    	  <table border="0" cellspacing="0" cellpadding="2">
    		<tr>
    		  <td class="main" colspan="2"><?php echo TEXT_PRODUCT_OPTIONS; ?></td>
    		</tr>
    <?php
      $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' and find_in_set('".$customer_group_id."', attributes_hide_from_groups) = 0 order by popt.products_options_name");
      while ($products_options_name = tep_db_fetch_array($products_options_name_query)) {
    	$products_options_array = array();
    	$products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix, pa.products_attributes_id from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . (int)$products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)$languages_id . "' and find_in_set('".$customer_group_id."', attributes_hide_from_groups) = 0");
    	$list_of_prdcts_attributes_id = '';
    	$products_options = array(); // makes sure this array is empty again
    	while ($_products_options = tep_db_fetch_array($products_options_query)) {
    	$products_options[] = $_products_options;
    	$list_of_prdcts_attributes_id .= $_products_options['products_attributes_id'].",";
    }
    
      if (tep_not_null($list_of_prdcts_attributes_id) && $customer_group_id != '0') { 
    	 $select_list_of_prdcts_attributes_ids = "(" . substr($list_of_prdcts_attributes_id, 0 , -1) . ")";
     $pag_query = tep_db_query("select products_attributes_id, options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES_GROUPS . " where products_attributes_id IN " . $select_list_of_prdcts_attributes_ids . " AND customers_group_id = '" . $customer_group_id . "'");
     while ($pag_array = tep_db_fetch_array($pag_query)) {
    	 $cg_attr_prices[] = $pag_array;
     }
    
     // substitute options_values_price and prefix for those for the customer group (if available)
     if ($customer_group_id != '0' && tep_not_null($cg_attr_prices)) {
    	for ($n = 0; $n < count($products_options); $n++) {
    	 for ($i = 0; $i < count($cg_attr_prices); $i++) {
    		 if ($cg_attr_prices[$i]['products_attributes_id'] == $products_options[$n]['products_attributes_id']) {
    			$products_options[$n]['price_prefix'] = $cg_attr_prices[$i]['price_prefix'];
    			$products_options[$n]['options_values_price'] = $cg_attr_prices[$i]['options_values_price'];
    		 }
    	 } // end for ($i = 0; $i < count($cg_att_prices); $i++)
    	}
    	} // end if ($customer_group_id != '0' && (tep_not_null($cg_attr_prices))
      } // end if (tep_not_null($list_of_prdcts_attributes_id) && $customer_group_id != '0')
    
      for ($n = 0; $n < count($products_options); $n++) {
    	  $products_options_array[] = array('id' => $products_options[$n]['products_options_values_id'], 'text' => $products_options[$n]['products_options_values_name']);
    	  if ($products_options[$n]['options_values_price'] != '0') {
    		$products_options_array[sizeof($products_options_array)-1]['text'] .= ' (' . $products_options[$n]['price_prefix'] . $currencies->display_price($products_options[$n]['options_values_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) .') ';
    	  }
    	}
    // EOF SPPC attributes mod
    
    	if (isset($cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']])) {
    	  $selected_attribute = $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']];
    	} else {
    	  $selected_attribute = false;
    	}
    ?>
    		<tr>
    		  <td class="main"><?php echo $products_options_name['products_options_name'] . ':'; ?></td>
    		  <td class="main"><?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?></td>
    		</tr>
    <?php
      }
    ?>
    	  </table>
    <?php
    }
    ?>
    	</td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
    <?php
    $reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
    $reviews = tep_db_fetch_array($reviews_query);
    if ($reviews['count'] > 0) {
    ?>
      <tr>
    	<td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . $reviews['count']; ?></td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
    <?php
    }
    
    if (tep_not_null($product_info['products_url'])) {
    ?>
      <tr>
    	<td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode($product_info['products_url']), 'NONSSL', true, false)); ?></td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
    <?php
    }
    
    if ($product_info['products_date_available'] > date('Y-m-d H:i:s')) {
    ?>
      <tr>
    	<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long($product_info['products_date_available'])); ?></td>
      </tr>
    <?php
    } else {
    ?>
      <tr>
    	<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_ADDED, tep_date_long($product_info['products_date_added'])); ?></td>
      </tr>
    <?php
    }
    ?>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
    	<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
    	  <tr class="infoBoxContents">
    		<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
    		  <tr>
    			<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    			<td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>
    			<td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td>
    			<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    		  </tr>
    		</table></td>
    	  </tr>
    	</table></td>
      </tr>
      <tr>
    	<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
    	<td>
    <?php
    if ((USE_CACHE == 'true') && empty($SID)) {
      echo tep_cache_also_purchased(3600);
    } else {
      include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
    }
     }
    ?>
    	</td>
      </tr>
    </table></form></td>
    <!-- body_text_eof //-->
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
    <!-- right_navigation //-->
    <?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
    <!-- right_navigation_eof //-->
    </table></td>
     </tr>
    </table>
    <!-- body_eof //-->
    
    <!-- footer //-->
    <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
    <!-- footer_eof //-->
    <br>
    </body>
    </html>
    <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

  7.  

    Just wanted to thank you for directing me to the Hide Products (and categories) contribution. I've implemented it and am almost complete with what I need out of SPPC. The final step is getting to an index page that assumes a customer_group_id that is not 0 since all points of entry to this storefront will be from a given group and I really have no need for a "retail" view.

     

    You shouldn't change Retail to another value (unless you don't show any prices to visitors) because visitors are assumed to be customer_group_id zero in the code.

    In create_account.php no value for customer_group_id is inserted, so it always defaults to the default value in the table which is zero.

    Adding code to put customers in another customer_group based on something when creating an account is no problem. This has been discussed in this thread a number of times (with sample code). You just need to find it :)

     

    I actually already did modify the create_account.php page to pass a hidden $customer_group_id based on the group the user is entering the store through. So, from these "group" entry points, I'll be linking to the index page and passing a group ID (gID). Here is the code I changed in index.php:

     

    // BOF Separate Pricing Per Customer
    global $sppc_customer_group_id;
    if(!tep_session_is_registered('sppc_customer_group_id')) { 
    $customer_group_id = $HTTP_GET_VARS['gID'];
      } else {
    	$customer_group_id = $sppc_customer_group_id;
    }
    // EOF Separate Pricing Per Customer

     

    .... wondering if you could help me see why once I click on the category from the index page, I lose the $customer_group_id setting and it falls back to the default of 0.

     

    Thank you thank you for all of your help!

  8. I was under the impression that if left unchecked, said product would not show for that particular group.....is there a way to accomplish this?

     

    Thanks,

    NK

     

    Thought I'd expand on what I meant here....

    Just wondering if anyone has run across a need to extend this contribution to allow for pairing up categories/products with groups so that you are able to disable certain categories/products for a given group. Also, in the same vein, has anyone extended the groups so that more fields are included (such as image, description....).

     

    I love this contribution!

  9. Note that if a field is left empty, no price for that customer group will be inserted in the database.

    If a field is filled, but the checkbox is unchecked no price will be inserted either.

    If a price is already inserted in the database, but the checkbox unchecked it will be removed from the database.

     

    I was under the impression that if left unchecked, said product would not show for that particular group.....is there a way to accomplish this?

     

    Thanks,

    NK

  10. A bit risky if you ask me but I guess you could use a get variable in a link and depending on what the get variable is show a price list that corresponds to a certain customer group (if that is what you are after).

     

    I'm considering a different route now....can you advise me on changing the default customer_group_id in the create_account.php page. So, basically, a customer would be coming to the storefront from an affiliate website (a group website) and based on that group, I'd like to insert the customer_group_id in the registration process.....

     

    I see the default is "Retail" but that is simply because the default value in the database is 0, right?

     

    Thanks!

  11. Whew! Thanks Jan for looking into that products_attribute issue. I am MUCH relieved that it was a missing file and this contribution is really going to work for me after all. One quick question.....is it possible with the existing code to pass a "group" variable and get directly to a pricing page for that group without having the customer log in? I'm using this as a way to set up various affiliates who are all selling the same product but with variable pricing. I'd like to have an entry point for each affiliate to provide a product listing prior to the registration process. Along those same lines, I'd like to also have an image collected for each "customer group" but I'm sure I can figure that piece out. Any feedback is greatly appreciated!

     

    NK

  12. Hi Jan - thank you for your quick responses. I went ahead and reinstalled the newest version of osC (v2.2RC2). Then, I copied the "new installation" /catalog folder and ran the sql updates. Everything seems to be working well except that the product_attributes.php page does not show. Anyone else have this problem? What do you advise? I'm afraid to spend the effort manually making all of the changes across the 47 files if it's not going to work then either..... Any reason this contribution wouldn't work for RC2? I'm going to include the code for products_attributes.php just fyi...hope that's not too obnoxious of me....maybe something will jump out.....Thanks!

    <?php
    /*
     $Id: products_attributes.php,v 1.52 2003/07/10 20:46:01 dgw_ Exp $
     adapted for Separate Pricing Per Customer 2007/11/04 (attribute prices for groups, hide attributes from groups)
    
     osCommerce, Open Source E-Commerce Solutions
     http://www.oscommerce.com
    
     Copyright (c) 2003 osCommerce
    
     Released under the GNU General Public License
    */
    
     require('includes/application_top.php');
     $languages = tep_get_languages();
    
    // BOF bugfix for register globals issue in RC1
     $option_page = (isset($HTTP_GET_VARS['option_page']) ? $HTTP_GET_VARS['option_page'] : '1');
      $value_page = (isset($HTTP_GET_VARS['value_page']) ? $HTTP_GET_VARS['value_page'] : '1');
      $attribute_page = (isset($HTTP_GET_VARS['attribute_page']) ? $HTTP_GET_VARS['attribute_page'] : '1');
    // EOF bugfix for register globals issue in RC1
    
     $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');
    
     if (tep_not_null($action)) {
    $page_info = '';
    if (isset($HTTP_GET_VARS['option_page'])) $page_info .= 'option_page=' . $HTTP_GET_VARS['option_page'] . '&';
    if (isset($HTTP_GET_VARS['value_page'])) $page_info .= 'value_page=' . $HTTP_GET_VARS['value_page'] . '&';
    if (isset($HTTP_GET_VARS['attribute_page'])) $page_info .= 'attribute_page=' . $HTTP_GET_VARS['attribute_page'] . '&';
    if (tep_not_null($page_info)) {
      $page_info = substr($page_info, 0, -1);
    }
    
    switch ($action) {
      case 'add_product_options':
    	$products_options_id = tep_db_prepare_input($HTTP_POST_VARS['products_options_id']);
    	$option_name_array = $HTTP_POST_VARS['option_name'];
    
    	for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
    	  $option_name = tep_db_prepare_input($option_name_array[$languages[$i]['id']]);
    
    	  tep_db_query("insert into " . TABLE_PRODUCTS_OPTIONS . " (products_options_id, products_options_name, language_id) values ('" . (int)$products_options_id . "', '" . tep_db_input($option_name) . "', '" . (int)$languages[$i]['id'] . "')");
    	}
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'add_product_option_values':
    	$value_name_array = $HTTP_POST_VARS['value_name'];
    	$value_id = tep_db_prepare_input($HTTP_POST_VARS['value_id']);
    	$option_id = tep_db_prepare_input($HTTP_POST_VARS['option_id']);
    
    	for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
    	  $value_name = tep_db_prepare_input($value_name_array[$languages[$i]['id']]);
    
    	  tep_db_query("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES . " (products_options_values_id, language_id, products_options_values_name) values ('" . (int)$value_id . "', '" . (int)$languages[$i]['id'] . "', '" . tep_db_input($value_name) . "')");
    	}
    
    	tep_db_query("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " (products_options_id, products_options_values_id) values ('" . (int)$option_id . "', '" . (int)$value_id . "')");
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'add_product_attributes':
    	$products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']);
    	$options_id = tep_db_prepare_input($HTTP_POST_VARS['options_id']);
    	$values_id = tep_db_prepare_input($HTTP_POST_VARS['values_id']);
    	$value_price = tep_db_prepare_input($HTTP_POST_VARS['value_price']);
    	$price_prefix = tep_db_prepare_input($HTTP_POST_VARS['price_prefix']);
    
    // BOF change for SPPC attributes hide attributes from groups (added @ as value and changed '' 
    // to NULL for the id, tep_db_input($value_price) to floatval($value_price) [mysql5 strict issue])
    	tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values (NULL, '" . (int)$products_id . "', '" . (int)$options_id . "', '" . (int)$values_id . "', '" . floatval($value_price) . "', '" . tep_db_input($price_prefix) . "', '@')");
    // EOF change for SPPC attributes hide attributes from groups
    
    	if (DOWNLOAD_ENABLED == 'true') {
    	  $products_attributes_id = tep_db_insert_id();
    
    	  $products_attributes_filename = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_filename']);
    	  $products_attributes_maxdays = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_maxdays']);
    	  $products_attributes_maxcount = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_maxcount']);
    
    	  if (tep_not_null($products_attributes_filename)) {
    		tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " values (" . (int)$products_attributes_id . ", '" . tep_db_input($products_attributes_filename) . "', '" . tep_db_input($products_attributes_maxdays) . "', '" . tep_db_input($products_attributes_maxcount) . "')");
    	  }
    	}
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'update_option_name':
    	$option_name_array = $HTTP_POST_VARS['option_name'];
    	$option_id = tep_db_prepare_input($HTTP_POST_VARS['option_id']);
    
    	for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
    	  $option_name = tep_db_prepare_input($option_name_array[$languages[$i]['id']]);
    
    	  tep_db_query("update " . TABLE_PRODUCTS_OPTIONS . " set products_options_name = '" . tep_db_input($option_name) . "' where products_options_id = '" . (int)$option_id . "' and language_id = '" . (int)$languages[$i]['id'] . "'");
    	}
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'update_value':
    	$value_name_array = $HTTP_POST_VARS['value_name'];
    	$value_id = tep_db_prepare_input($HTTP_POST_VARS['value_id']);
    	$option_id = tep_db_prepare_input($HTTP_POST_VARS['option_id']);
    
    	for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
    	  $value_name = tep_db_prepare_input($value_name_array[$languages[$i]['id']]);
    
    	  tep_db_query("update " . TABLE_PRODUCTS_OPTIONS_VALUES . " set products_options_values_name = '" . tep_db_input($value_name) . "' where products_options_values_id = '" . tep_db_input($value_id) . "' and language_id = '" . (int)$languages[$i]['id'] . "'");
    	}
    
    	tep_db_query("update " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " set products_options_id = '" . (int)$option_id . "'  where products_options_values_id = '" . (int)$value_id . "'");
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'update_product_attribute':
    	$products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']);
    	$options_id = tep_db_prepare_input($HTTP_POST_VARS['options_id']);
    	$values_id = tep_db_prepare_input($HTTP_POST_VARS['values_id']);
    	$value_price = tep_db_prepare_input($HTTP_POST_VARS['value_price']);
    	$price_prefix = tep_db_prepare_input($HTTP_POST_VARS['price_prefix']);
    	$attribute_id = tep_db_prepare_input($HTTP_POST_VARS['attribute_id']);
    
    	tep_db_query("update " . TABLE_PRODUCTS_ATTRIBUTES . " set products_id = '" . (int)$products_id . "', options_id = '" . (int)$options_id . "', options_values_id = '" . (int)$values_id . "', options_values_price = '" . tep_db_input($value_price) . "', price_prefix = '" . tep_db_input($price_prefix) . "' where products_attributes_id = '" . (int)$attribute_id . "'");
    
    	if (DOWNLOAD_ENABLED == 'true') {
    	  $products_attributes_filename = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_filename']);
    	  $products_attributes_maxdays = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_maxdays']);
    	  $products_attributes_maxcount = tep_db_prepare_input($HTTP_POST_VARS['products_attributes_maxcount']);
    
    	  if (tep_not_null($products_attributes_filename)) {
    		tep_db_query("replace into " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " set products_attributes_id = '" . (int)$attribute_id . "', products_attributes_filename = '" . tep_db_input($products_attributes_filename) . "', products_attributes_maxdays = '" . tep_db_input($products_attributes_maxdays) . "', products_attributes_maxcount = '" . tep_db_input($products_attributes_maxcount) . "'");
    	  }
    	}
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'delete_option':
    	$option_id = tep_db_prepare_input($HTTP_GET_VARS['option_id']);
    
    	tep_db_query("delete from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$option_id . "'");
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'delete_value':
    	$value_id = tep_db_prepare_input($HTTP_GET_VARS['value_id']);
    
    	tep_db_query("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$value_id . "'");
    	tep_db_query("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$value_id . "'");
    	tep_db_query("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_values_id = '" . (int)$value_id . "'");
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
      case 'delete_attribute':
    	$attribute_id = tep_db_prepare_input($HTTP_GET_VARS['attribute_id']);
    
    	tep_db_query("delete from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_attributes_id = '" . (int)$attribute_id . "'");
    			// BOF SPPC attributes for groups
    			tep_db_query("delete from " . TABLE_PRODUCTS_ATTRIBUTES_GROUPS . " where products_attributes_id = '" . (int)$attribute_id . "'");
    			// EOF SPPC attributes for groups
    
    // added for DOWNLOAD_ENABLED. Always try to remove attributes, even if downloads are no longer enabled
    	tep_db_query("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " where products_attributes_id = '" . (int)$attribute_id . "'");
    
    	tep_redirect(tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, $page_info));
    	break;
    }
     }
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
    <title><?php echo TITLE; ?></title>
    <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
    <script language="javascript"><!--
    function go_option() {
     if (document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value != "none") {
    location = "<?php echo tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'option_page=' . ($HTTP_GET_VARS['option_page'] ? $HTTP_GET_VARS['option_page'] : 1)); ?>&option_order_by="+document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value;
     }
    }
    //--></script>
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
    <!-- header //-->
    <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
    <!-- header_eof //-->
    
    <!-- body //-->
    <table border="0" width="100%" cellspacing="2" cellpadding="2">
     <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
    <!-- left_navigation //-->
    <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
    <!-- left_navigation_eof //-->
    </table></td>
    <!-- body_text //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
    <!-- options and values//-->
      <tr>
    	<td width="100%"><table width="100%" border="0" cellspacing="0" cellpadding="0">
    	  <tr>
    		<td valign="top" width="50%"><table width="100%" border="0" cellspacing="0" cellpadding="2">
    <!-- options //-->
    <?php
     if ($action == 'delete_product_option') { // delete product option
    $options = tep_db_query("select products_options_id, products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$HTTP_GET_VARS['option_id'] . "' and language_id = '" . (int)$languages_id . "'");
    $options_values = tep_db_fetch_array($options);
    ?>
    		  <tr>
    			<td class="pageHeading"> <?php echo $options_values['products_options_name']; ?> </td>
    			<td> <?php echo tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', '', '1', '53'); ?> </td>
    		  </tr>
    		  <tr>
    			<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    <?php
    $products = tep_db_query("select p.products_id, pd.products_name, pov.products_options_values_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov, " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pov.language_id = '" . (int)$languages_id . "' and pd.language_id = '" . (int)$languages_id . "' and pa.products_id = p.products_id and pa.options_id='" . (int)$HTTP_GET_VARS['option_id'] . "' and pov.products_options_values_id = pa.options_values_id order by pd.products_name");
    if (tep_db_num_rows($products)) {
    ?>
    			  <tr class="dataTableHeadingRow">
    				<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ID; ?> </td>
    				<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_PRODUCT; ?> </td>
    				<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_VALUE; ?> </td>
    			  </tr>
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    <?php
      $rows = 0;
      while ($products_values = tep_db_fetch_array($products)) {
    	$rows++;
    ?>
    			  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    				<td align="center" class="smallText"> <?php echo $products_values['products_id']; ?> </td>
    				<td class="smallText"> <?php echo $products_values['products_name']; ?> </td>
    				<td class="smallText"> <?php echo $products_values['products_options_values_name']; ?> </td>
    			  </tr>
    <?php
      }
    ?>
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    			  <tr>
    				<td colspan="3" class="main"><br><?php echo TEXT_WARNING_OF_DELETE; ?></td>
    			  </tr>
    			  <tr>
    				<td align="right" colspan="3" class="main"><br><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, (isset($HTTP_GET_VARS['value_page']) ? 'value_page=' . $HTTP_GET_VARS['value_page'] . '&' : '') . (isset($HTTP_GET_VARS['attribute_page']) ? 'attribute_page=' . $HTTP_GET_VARS['attribute_page'] : ''), 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', ' cancel '); ?></a> </td>
    			  </tr>
    <?php
    } else {
    ?>
    			  <tr>
    				<td class="main" colspan="3"><br><?php echo TEXT_OK_TO_DELETE; ?></td>
    			  </tr>
    			  <tr>
    				<td class="main" align="right" colspan="3"><br><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_option&option_id=' . $HTTP_GET_VARS['option_id'], 'NONSSL') . '">'; ?><?php echo tep_image_button('button_delete.gif', ' delete '); ?></a>   <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, (isset($HTTP_GET_VARS['order_by']) ? 'order_by=' . $HTTP_GET_VARS['order_by'] . '&' : '') . (isset($HTTP_GET_VARS['page']) ? 'page=' . $HTTP_GET_VARS['page'] : ''), 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', ' cancel '); ?></a> </td>
    			  </tr>
    <?php
    }
    ?>
    			</table></td>
    		  </tr>
    <?php
     } else {
    if (isset($HTTP_GET_VARS['option_order_by'])) {
      $option_order_by = $HTTP_GET_VARS['option_order_by'];
    } else {
      $option_order_by = 'products_options_id';
    }
    ?>
    		  <tr>
    			<td colspan="2" class="pageHeading"> <?php echo HEADING_TITLE_OPT; ?> </td>
    			<td align="right"><br><form name="option_order_by" action="<?php echo FILENAME_PRODUCTS_ATTRIBUTES; ?>"><select name="selected" onChange="go_option()"><option value="products_options_id"<?php if ($option_order_by == 'products_options_id') { echo ' SELECTED'; } ?>><?php echo TEXT_OPTION_ID; ?></option><option value="products_options_name"<?php if ($option_order_by == 'products_options_name') { echo ' SELECTED'; } ?>><?php echo TEXT_OPTION_NAME; ?></option></select></form></td>
    		  </tr>
    		  <tr>
    			<td colspan="3" class="smallText">
    <?php
    $per_page = MAX_ROW_LISTS_OPTIONS;
    $options = "select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int)$languages_id . "' order by " . $option_order_by;
    if (!isset($option_page)) {
      $option_page = 1;
    }
    $prev_option_page = $option_page - 1;
    $next_option_page = $option_page + 1;
    
    $option_query = tep_db_query($options);
    
    $option_page_start = ($per_page * $option_page) - $per_page;
    $num_rows = tep_db_num_rows($option_query);
    
    if ($num_rows <= $per_page) {
      $num_pages = 1;
    } else if (($num_rows % $per_page) == 0) {
      $num_pages = ($num_rows / $per_page);
    } else {
      $num_pages = ($num_rows / $per_page) + 1;
    }
    $num_pages = (int) $num_pages;
    
    $options = $options . " LIMIT $option_page_start, $per_page";
    
    // Previous
    if ($prev_option_page)  {
      echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'option_page=' . $prev_option_page) . '"> << </a> | ';
    }
    
    for ($i = 1; $i <= $num_pages; $i++) {
      if ($i != $option_page) {
    	echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'option_page=' . $i) . '">' . $i . '</a> | ';
      } else {
    	echo '<b><font color=red>' . $i . '</font></b> | ';
      }
    }
    
    // Next
    if ($option_page != $num_pages) {
      echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'option_page=' . $next_option_page) . '"> >> </a>';
    }
    ?>
    			</td>
    		  </tr>
    		  <tr>
    			<td colspan="3"><?php echo tep_black_line(); ?></td>
    		  </tr>
    		  <tr class="dataTableHeadingRow">
    			<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_ID; ?> </td>
    			<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </td>
    			<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ACTION; ?> </td>
    		  </tr>
    		  <tr>
    			<td colspan="3"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    $next_id = 1;
    $rows = 0;
    $options = tep_db_query($options);
    while ($options_values = tep_db_fetch_array($options)) {
      $rows++;
    ?>
    		  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    <?php
      if (($action == 'update_option') && ($HTTP_GET_VARS['option_id'] == $options_values['products_options_id'])) {
    	echo '<form name="option" action="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=update_option_name', 'NONSSL') . '" method="post">';
    	$inputs = '';
    	for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
    	  $option_name = tep_db_query("select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . $options_values['products_options_id'] . "' and language_id = '" . $languages[$i]['id'] . "'");
    	  $option_name = tep_db_fetch_array($option_name);
    	  $inputs .= $languages[$i]['code'] . ': <input type="text" name="option_name[' . $languages[$i]['id'] . ']" size="20" value="' . $option_name['products_options_name'] . '"> <br>';
    	}
    ?>
    			<td align="center" class="smallText"> <?php echo $options_values['products_options_id']; ?><input type="hidden" name="option_id" value="<?php echo $options_values['products_options_id']; ?>"> </td>
    			<td class="smallText"><?php echo $inputs; ?></td>
    			<td align="center" class="smallText"> <?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '', 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', IMAGE_CANCEL); ?></a> </td>
    <?php
    	echo '</form>' . "\n";
      } else {
    ?>
    			<td align="center" class="smallText"> <?php echo $options_values["products_options_id"]; ?> </td>
    			<td class="smallText"> <?php echo $options_values["products_options_name"]; ?> </td>
    			<td align="center" class="smallText"> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=update_option&option_id=' . $options_values['products_options_id'] . '&option_order_by=' . $option_order_by . '&option_page=' . $option_page, 'NONSSL') . '">'; ?><?php echo tep_image_button('button_edit.gif', IMAGE_UPDATE); ?></a>  <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_product_option&option_id=' . $options_values['products_options_id'], 'NONSSL') , '">'; ?><?php echo tep_image_button('button_delete.gif', IMAGE_DELETE); ?></a> </td>
    <?php
      }
    ?>
    		  </tr>
    <?php
      $max_options_id_query = tep_db_query("select max(products_options_id) + 1 as next_id from " . TABLE_PRODUCTS_OPTIONS);
      $max_options_id_values = tep_db_fetch_array($max_options_id_query);
      $next_id = $max_options_id_values['next_id'];
    }
    ?>
    		  <tr>
    			<td colspan="3"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    if ($action != 'update_option') {
    ?>
    		  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    <?php
      echo '<form name="options" action="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=add_product_options&option_page=' . $option_page, 'NONSSL') . '" method="post"><input type="hidden" name="products_options_id" value="' . $next_id . '">';
      $inputs = '';
      for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
    	$inputs .= $languages[$i]['code'] . ': <input type="text" name="option_name[' . $languages[$i]['id'] . ']" size="20"> <br>';
      }
    ?>
    			<td align="center" class="smallText"> <?php echo $next_id; ?> </td>
    			<td class="smallText"><?php echo $inputs; ?></td>
    			<td align="center" class="smallText"> <?php echo tep_image_submit('button_insert.gif', IMAGE_INSERT); ?> </td>
    <?php
      echo '</form>';
    ?>
    		  </tr>
    		  <tr>
    			<td colspan="3"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    }
     }
    ?>
    		</table></td>
    <!-- options eof //-->
    		<td valign="top" width="50%"><table width="100%" border="0" cellspacing="0" cellpadding="2">
    <!-- value //-->
    <?php
     if ($action == 'delete_option_value') { // delete product option value
    $values = tep_db_query("select products_options_values_id, products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$HTTP_GET_VARS['value_id'] . "' and language_id = '" . (int)$languages_id . "'");
    $values_values = tep_db_fetch_array($values);
    ?>
    		  <tr>
    			<td colspan="3" class="pageHeading"> <?php echo $values_values['products_options_values_name']; ?> </td>
    			<td> <?php echo tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', '', '1', '53'); ?> </td>
    		  </tr>
    		  <tr>
    			<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    <?php
    $products = tep_db_query("select p.products_id, pd.products_name, po.products_options_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS . " po, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and po.language_id = '" . (int)$languages_id . "' and pa.products_id = p.products_id and pa.options_values_id='" . (int)$HTTP_GET_VARS['value_id'] . "' and po.products_options_id = pa.options_id order by pd.products_name");
    if (tep_db_num_rows($products)) {
    ?>
    			  <tr class="dataTableHeadingRow">
    				<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ID; ?> </td>
    				<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_PRODUCT; ?> </td>
    				<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </td>
    			  </tr>
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    <?php
      while ($products_values = tep_db_fetch_array($products)) {
    	$rows++;
    ?>
    			  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    				<td align="center" class="smallText"> <?php echo $products_values['products_id']; ?> </td>
    				<td class="smallText"> <?php echo $products_values['products_name']; ?> </td>
    				<td class="smallText"> <?php echo $products_values['products_options_name']; ?> </td>
    			  </tr>
    <?php
      }
    ?>
    			  <tr>
    				<td colspan="3"><?php echo tep_black_line(); ?></td>
    			  </tr>
    			  <tr>
    				<td class="main" colspan="3"><br><?php echo TEXT_WARNING_OF_DELETE; ?></td>
    			  </tr>
    			  <tr>
    				<td class="main" align="right" colspan="3"><br><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, (isset($HTTP_GET_VARS['value_page']) ? 'value_page=' . $HTTP_GET_VARS['value_page'] . '&' : '') . (isset($HTTP_GET_VARS['attribute_page']) ? 'attribute_page=' . $attribute_page : ''), 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', ' cancel '); ?></a> </td>
    			  </tr>
    <?php
    } else {
    ?>
    			  <tr>
    				<td class="main" colspan="3"><br><?php echo TEXT_OK_TO_DELETE; ?></td>
    			  </tr>
    			  <tr>
    				<td class="main" align="right" colspan="3"><br><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_value&value_id=' . $HTTP_GET_VARS['value_id'], 'NONSSL') . '">'; ?><?php echo tep_image_button('button_delete.gif', ' delete '); ?></a>   <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '&option_page=' . $option_page . (isset($HTTP_GET_VARS['value_page']) ? '&value_page=' . $value_page : '') . (isset($HTTP_GET_VARS['attribute_page']) ? '&attribute_page=' . $attribute_page : ''), 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', ' cancel '); ?></a> </td>
    			  </tr>
    <?php
    }
    ?>
    			  </table></td>
    		  </tr>
    <?php
     } else {
    ?>
    		  <tr>
    			<td colspan="3" class="pageHeading"> <?php echo HEADING_TITLE_VAL; ?> </td>
    			<td> <?php echo tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', '', '1', '53'); ?> </td>
    		  </tr>
    		  <tr>
    			<td colspan="4" class="smallText">
    <?php
    $per_page = MAX_ROW_LISTS_OPTIONS;
    $values = "select pov.products_options_values_id, pov.products_options_values_name, pov2po.products_options_id from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id where pov.language_id = '" . (int)$languages_id . "' order by pov.products_options_values_id";
    if (!isset($value_page)) {
      $value_page = 1;
    }
    $prev_value_page = $value_page - 1;
    $next_value_page = $value_page + 1;
    
    $value_query = tep_db_query($values);
    
    $value_page_start = ($per_page * $value_page) - $per_page;
    $num_rows = tep_db_num_rows($value_query);
    
    if ($num_rows <= $per_page) {
      $num_pages = 1;
    } else if (($num_rows % $per_page) == 0) {
      $num_pages = ($num_rows / $per_page);
    } else {
      $num_pages = ($num_rows / $per_page) + 1;
    }
    $num_pages = (int) $num_pages;
    
    $values = $values . " LIMIT $value_page_start, $per_page";
    
    // Previous
    if ($prev_value_page)  {
      echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'option_order_by=' . $option_order_by . '&value_page=' . $prev_value_page) . '"> << </a> | ';
    }
    
    for ($i = 1; $i <= $num_pages; $i++) {
      if ($i != $value_page) {
    	 echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, (isset($option_order_by) ? 'option_order_by=' . $option_order_by . '&' : '') . 'value_page=' . $i) . '">' . $i . '</a> | ';
      } else {
    	 echo '<b><font color=red>' . $i . '</font></b> | ';
      }
    }
    
    // Next
    if ($value_page != $num_pages) {
      echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, (isset($option_order_by) ? 'option_order_by=' . $option_order_by . '&' : '') . 'value_page=' . $next_value_page) . '"> >></a> ';
    }
    ?>
    			</td>
    		  </tr>
    		  <tr>
    			<td colspan="4"><?php echo tep_black_line(); ?></td>
    		  </tr>
    		  <tr class="dataTableHeadingRow">
    			<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_ID; ?> </td>
    			<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </td>
    			<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_VALUE; ?> </td>
    			<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ACTION; ?> </td>
    		  </tr>
    		  <tr>
    			<td colspan="4"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    $next_id = 1;
    $rows = 0;
    $values = tep_db_query($values);
    while ($values_values = tep_db_fetch_array($values)) {
      $options_name = tep_options_name($values_values['products_options_id']);
      $values_name = $values_values['products_options_values_name'];
      $rows++;
    ?>
    		  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    <?php
      if (($action == 'update_option_value') && ($HTTP_GET_VARS['value_id'] == $values_values['products_options_values_id'])) {
    	echo '<form name="values" action="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=update_value', 'NONSSL') . '" method="post">';
    	$inputs = '';
    	for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
    	  $value_name = tep_db_query("select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$values_values['products_options_values_id'] . "' and language_id = '" . (int)$languages[$i]['id'] . "'");
    	  $value_name = tep_db_fetch_array($value_name);
    	  $inputs .= $languages[$i]['code'] . ': <input type="text" name="value_name[' . $languages[$i]['id'] . ']" size="15" value="' . $value_name['products_options_values_name'] . '"> <br>';
    	}
    ?>
    			<td align="center" class="smallText"> <?php echo $values_values['products_options_values_id']; ?><input type="hidden" name="value_id" value="<?php echo $values_values['products_options_values_id']; ?>"> </td>
    			<td align="center" class="smallText"> <?php echo "\n"; ?><select name="option_id">
    <?php
    	$options = tep_db_query("select products_options_id, products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int)$languages_id . "' order by products_options_name");
    	while ($options_values = tep_db_fetch_array($options)) {
    	  echo "\n" . '<option name="' . $options_values['products_options_name'] . '" value="' . $options_values['products_options_id'] . '"';
    	  if ($values_values['products_options_id'] == $options_values['products_options_id']) { 
    		echo ' selected';
    	  }
    	  echo '>' . $options_values['products_options_name'] . '</option>';
    	} 
    ?>
    			</select> </td>
    			<td class="smallText"><?php echo $inputs; ?></td>
    			<td align="center" class="smallText"> <?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '', 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', IMAGE_CANCEL); ?></a> </td>
    <?php
    	echo '</form>';
      } else {
    ?>
    			<td align="center" class="smallText"> <?php echo $values_values["products_options_values_id"]; ?> </td>
    			<td align="center" class="smallText"> <?php echo $options_name; ?> </td>
    			<td class="smallText"> <?php echo $values_name; ?> </td>
    			<td align="center" class="smallText"> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=update_option_value&value_id=' . $values_values['products_options_values_id'] . (isset($HTTP_GET_VARS['value_page']) ? '&value_page=' . $HTTP_GET_VARS['value_page'] : ''), 'NONSSL') . '">'; ?><?php echo tep_image_button('button_edit.gif', IMAGE_UPDATE); ?></a>  <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_option_value&value_id=' . $values_values['products_options_values_id'], 'NONSSL') , '">'; ?><?php echo tep_image_button('button_delete.gif', IMAGE_DELETE); ?></a> </td>
    <?php
      }
      $max_values_id_query = tep_db_query("select max(products_options_values_id) + 1 as next_id from " . TABLE_PRODUCTS_OPTIONS_VALUES);
      $max_values_id_values = tep_db_fetch_array($max_values_id_query);
      $next_id = $max_values_id_values['next_id'];
    }
    ?>
    		  </tr>
    		  <tr>
    			<td colspan="4"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    if ($action != 'update_option_value') {
    ?>
    		  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    <?php
      echo '<form name="values" action="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=add_product_option_values&value_page=' . $value_page, 'NONSSL') . '" method="post">';
    ?>
    			<td align="center" class="smallText"> <?php echo $next_id; ?> </td>
    			<td align="center" class="smallText"> <select name="option_id">
    <?php
      $options = tep_db_query("select products_options_id, products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . $languages_id . "' order by products_options_name");
      while ($options_values = tep_db_fetch_array($options)) {
    	echo '<option name="' . $options_values['products_options_name'] . '" value="' . $options_values['products_options_id'] . '">' . $options_values['products_options_name'] . '</option>';
      }
    
      $inputs = '';
      for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
    	$inputs .= $languages[$i]['code'] . ': <input type="text" name="value_name[' . $languages[$i]['id'] . ']" size="15"> <br>';
      }
    ?>
    			</select> </td>
    			<td class="smallText"><input type="hidden" name="value_id" value="<?php echo $next_id; ?>"><?php echo $inputs; ?></td>
    			<td align="center" class="smallText"> <?php echo tep_image_submit('button_insert.gif', IMAGE_INSERT); ?> </td>
    <?php
      echo '</form>';
    ?>
    		  </tr>
    		  <tr>
    			<td colspan="4"><?php echo tep_black_line(); ?></td>
    		  </tr>
    <?php
    }
     }
    ?>
    		</table></td>
    	  </tr>
    	</table></td>
    <!-- option value eof //-->
      </tr> 
    <!-- products_attributes //-->  
      <tr>
    	<td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
    	  <tr>
    		<td class="pageHeading"> <?php echo HEADING_TITLE_ATRIB; ?> </td>
    		<td> <?php echo tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', '', '1', '53'); ?> </td>
    	  </tr>
    	</table></td>
      </tr>
      <tr>
    <?php
     if ($action == 'update_attribute') {
    $form_action = 'update_product_attribute';
     } else {
    $form_action = 'add_product_attributes';
     }
    
     if (!isset($attribute_page)) {
    $attribute_page = 1;
     }
     $prev_attribute_page = $attribute_page - 1;
     $next_attribute_page = $attribute_page + 1;
    // BOF  SPPC, attributes mod, colspan="7" => 8  for "hidden" information ?>
    	<td><form name="attributes" action="<?php echo tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=' . $form_action . '&option_page=' . $option_page . '&value_page=' . $value_page . '&attribute_page=' . $attribute_page); ?>" method="post"><table border="0" width="100%" cellspacing="0" cellpadding="2">
    	  <tr>
    		<td colspan="8" class="smallText">
    <?php
     $per_page = MAX_ROW_LISTS_OPTIONS;
    // BOF  SPPC, get products name from products_description now instead of doing a query with each attribute
     $attributes = "select pa.*, pd.products_name from " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_DESCRIPTION . " pd on pa.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' order by pd.products_name";
    // EOF  SPPC
     $attribute_query = tep_db_query($attributes);
    
     $attribute_page_start = ($per_page * $attribute_page) - $per_page;
     $num_rows = tep_db_num_rows($attribute_query);
    
     if ($num_rows <= $per_page) {
     $num_pages = 1;
     } else if (($num_rows % $per_page) == 0) {
     $num_pages = ($num_rows / $per_page);
     } else {
     $num_pages = ($num_rows / $per_page) + 1;
     }
     $num_pages = (int) $num_pages;
    
     $attributes = $attributes . " LIMIT $attribute_page_start, $per_page";
    
     // Previous
     if ($prev_attribute_page) {
    echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'attribute_page=' . $prev_attribute_page) . '"> << </a> | ';
     }
    
     for ($i = 1; $i <= $num_pages; $i++) {
    if ($i != $attribute_page) {
      echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'attribute_page=' . $i) . '">' . $i . '</a> | ';
    } else {
      echo '<b><font color="red">' . $i . '</font></b> | ';
    }
     }
    
     // Next
     if ($attribute_page != $num_pages) {
    echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'attribute_page=' . $next_attribute_page) . '"> >> </a>';
     }
    ?>
    		</td>
    	  </tr>
    	  <tr>
    		<td colspan="8"><?php echo tep_black_line(); ?></td>
    	  </tr>
    	  <tr class="dataTableHeadingRow">
    		<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_ID; ?> </td>
    		<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_PRODUCT; ?> </td>
    		<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </td>
    		<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_VALUE; ?> </td>
    		<td class="dataTableHeadingContent" align="right"> <?php echo TABLE_HEADING_OPT_PRICE; ?> </td>
    		<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_OPT_PRICE_PREFIX; ?> </td>
    <?php // BOF SPPC, attributes groups modification ?>
    					<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_HIDDEN; ?> </td>
    <?php // EOF SPPC, attributes groups modification ?>
    		<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ACTION; ?> </td>
    	  </tr>
    	  <tr>
    		<td colspan="8"><?php echo tep_black_line(); ?></td>
    	  </tr>
    <?php
     $next_id = 1;
    // BOF SPPC, attributes groups modification
     $customers_groups_query = tep_db_query("select customers_group_id, customers_group_name from " . TABLE_CUSTOMERS_GROUPS . "  order by customers_group_id");
    
     while ($_customers_groups = tep_db_fetch_array($customers_groups_query)) {
    	$customers_groups[] = $_customers_groups;
    }
    // EOF SPPC, attributes groups modification
     $attributes = tep_db_query($attributes);
     while ($attributes_values = tep_db_fetch_array($attributes)) {
    //	$products_name_only = tep_get_products_name($attributes_values['products_id']);
    $products_name_only = $attributes_values['products_name'];
    $options_name = tep_options_name($attributes_values['options_id']);
    $values_name = tep_values_name($attributes_values['options_values_id']);
    $rows++;
    ?>
    	  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    <?php
    if (($action == 'update_attribute') && ($HTTP_GET_VARS['attribute_id'] == $attributes_values['products_attributes_id'])) {
    ?>
    		<td class="smallText"> <?php echo $attributes_values['products_attributes_id']; ?><input type="hidden" name="attribute_id" value="<?php echo $attributes_values['products_attributes_id']; ?>"> </td>
    		<td class="smallText"> <select name="products_id">
    <?php
      $products = tep_db_query("select p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pd.language_id = '" . $languages_id . "' order by pd.products_name");
      while($products_values = tep_db_fetch_array($products)) {
    	if ($attributes_values['products_id'] == $products_values['products_id']) {
    	  echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '" SELECTED>' . $products_values['products_name'] . '</option>';
    	} else {
    	  echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>';
    	}
      } 
    ?>
    		</select> </td>
    		<td class="smallText"> <select name="options_id">
    <?php
      $options = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . $languages_id . "' order by products_options_name");
      while($options_values = tep_db_fetch_array($options)) {
    	if ($attributes_values['options_id'] == $options_values['products_options_id']) {
    	  echo "\n" . '<option name="' . $options_values['products_options_name'] . '" value="' . $options_values['products_options_id'] . '" SELECTED>' . $options_values['products_options_name'] . '</option>';
    	} else {
    	  echo "\n" . '<option name="' . $options_values['products_options_name'] . '" value="' . $options_values['products_options_id'] . '">' . $options_values['products_options_name'] . '</option>';
    	}
      } 
    ?>
    		</select> </td>
    		<td class="smallText"> <select name="values_id">
    <?php
      $values = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where language_id ='" . $languages_id . "' order by products_options_values_name");
      while($values_values = tep_db_fetch_array($values)) {
    	if ($attributes_values['options_values_id'] == $values_values['products_options_values_id']) {
    	  echo "\n" . '<option name="' . $values_values['products_options_values_name'] . '" value="' . $values_values['products_options_values_id'] . '" SELECTED>' . $values_values['products_options_values_name'] . '</option>';
    	} else {
    	  echo "\n" . '<option name="' . $values_values['products_options_values_name'] . '" value="' . $values_values['products_options_values_id'] . '">' . $values_values['products_options_values_name'] . '</option>';
    	}
      } 
    ?>		
    		</select> </td>
    		<td align="right" class="smallText"> <input type="text" name="value_price" value="<?php echo $attributes_values['options_values_price']; ?>" size="6"> </td>
    		<td align="center" class="smallText"> <input type="text" name="price_prefix" value="<?php echo $attributes_values['price_prefix']; ?>" size="2"> </td>
    <?php // BOF SPPC attributes hide for groups mod ?>
    		<td align="center" class="smallText"><?php echo $hide_info = tep_get_hide_info($customers_groups, $attributes_values['attributes_hide_from_groups']); ?></td>
    <?php // EOF SPPC attributes hide for groups mod ?>
    		<td align="center" class="smallText"> <?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '&attribute_page=' . $attribute_page, 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', IMAGE_CANCEL); ?></a> </td>
    <?php
      if (DOWNLOAD_ENABLED == 'true') {
    	$download_query_raw ="select products_attributes_filename, products_attributes_maxdays, products_attributes_maxcount 
    						  from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " 
    						  where products_attributes_id='" . $attributes_values['products_attributes_id'] . "'";
    	$download_query = tep_db_query($download_query_raw);
    	if (tep_db_num_rows($download_query) > 0) {
    	  $download = tep_db_fetch_array($download_query);
    	  $products_attributes_filename = $download['products_attributes_filename'];
    	  $products_attributes_maxdays  = $download['products_attributes_maxdays'];
    	  $products_attributes_maxcount = $download['products_attributes_maxcount'];
    	}
    ?>
    	  <tr class="<?php echo (!($rows % 2)? 'attributes-even' : 'attributes-odd');?>">
    		<td> </td>
    		<td colspan="5">
    		  <table>
    			<tr class="<?php echo (!($rows % 2)? 'attributes-even' : 'attributes-odd');?>">
    			  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_DOWNLOAD; ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_FILENAME; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_filename', $products_attributes_filename, 'size="15"'); ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_MAX_DAYS; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_maxdays', $products_attributes_maxdays, 'size="5"'); ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_MAX_COUNT; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_maxcount', $products_attributes_maxcount, 'size="5"'); ?> </td>
    			</tr>
    		  </table>
    		</td>
    		<td> </td>
    	  </tr>
    <?php
      }
    ?>
    <?php
    } elseif (($action == 'delete_product_attribute') && ($HTTP_GET_VARS['attribute_id'] == $attributes_values['products_attributes_id'])) {
    ?>
    		<td class="smallText"> <b><?php echo $attributes_values["products_attributes_id"]; ?></b> </td>
    		<td class="smallText"> <b><?php echo $products_name_only; ?></b> </td>
    		<td class="smallText"> <b><?php echo $options_name; ?></b> </td>
    		<td class="smallText"> <b><?php echo $values_name; ?></b> </td>
    		<td align="right" class="smallText"> <b><?php echo $attributes_values["options_values_price"]; ?></b> </td>
    		<td align="center" class="smallText"> <b><?php echo $attributes_values["price_prefix"]; ?></b> </td>
    <?php // BOF SPPC attributes hide for groups mod ?>
    		<td align="center" class="smallText"><?php echo $hide_info = tep_get_hide_info($customers_groups, $attributes_values['attributes_hide_from_groups']); ?></td>
    <?php // EOF SPPC attributes hide for groups mod ?>
    		<td align="center" class="smallText"> <b><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_attribute&attribute_id=' . $HTTP_GET_VARS['attribute_id']) . '">'; ?><?php echo tep_image_button('button_confirm.gif', IMAGE_CONFIRM); ?></a>  <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '&option_page=' . $option_page . '&value_page=' . $value_page . '&attribute_page=' . $attribute_page, 'NONSSL') . '">'; ?><?php echo tep_image_button('button_cancel.gif', IMAGE_CANCEL); ?></a> </b></td>
    <?php
    } else {
    ?>
    		<td class="smallText"> <?php echo $attributes_values["products_attributes_id"]; ?> </td>
    		<td class="smallText"> <?php echo $products_name_only; ?> </td>
    		<td class="smallText"> <?php echo $options_name; ?> </td>
    		<td class="smallText"> <?php echo $values_name; ?> </td>
    		<td align="right" class="smallText"> <?php echo $attributes_values["options_values_price"]; ?> </td>
    		<td align="center" class="smallText"> <?php echo $attributes_values["price_prefix"]; ?> </td>
    <?php // BOF SPPC attributes hide for groups mod with button for pop-up window for group prices and hide ?>
    		<td align="center" class="smallText"><?php echo $hide_info = tep_get_hide_info($customers_groups, $attributes_values['attributes_hide_from_groups']); ?></td>
    		<td align="center" class="smallText"> <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=update_attribute&attribute_id=' . $attributes_values['products_attributes_id'] . '&attribute_page=' . $attribute_page, 'NONSSL') . '">'; ?><?php echo tep_image_button('button_edit.gif', IMAGE_UPDATE); ?></a>  <?php echo '<a href="java script:void(0)" onmouseover="window.status=\'' . TEXT_MOUSE_OVER_GROUP_PRICES . '\';return true;" onmouseout="window.status=\'\'; return true;" onclick="window.open(\'' . tep_href_link(FILENAME_ATTRIBUTES_GROUPS, 'attribute_id=' . $attributes_values['products_attributes_id'], 'NONSSL') . '\',\'' . NAME_WINDOW_ATTRIBUTES_GROUPS_POPUP . '\',\'menubar=yes,resizable=yes,scrollbars=yes,status=no,location=no,width=500,hei
    ght=350\');return false">' . tep_image_button('button_group_prices.gif', TEXT_GROUP_PRICES); ?></a>  <?php echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'action=delete_product_attribute&attribute_id=' . $attributes_values['products_attributes_id'] . '&attribute_page=' . $attribute_page, 'NONSSL') , '">'; ?><?php echo tep_image_button('button_delete.gif', IMAGE_DELETE); // EOF SPPC attributes hide for groups mod
    					?></a> </td>
    <?php
    }
    $max_attributes_id_query = tep_db_query("select max(products_attributes_id) + 1 as next_id from " . TABLE_PRODUCTS_ATTRIBUTES);
    $max_attributes_id_values = tep_db_fetch_array($max_attributes_id_query);
    $next_id = $max_attributes_id_values['next_id'];
    ?>
    	  </tr>
    <?php
     }
     if ($action != 'update_attribute') {
    ?>
    	  <tr>
    		<td colspan="8"><?php echo tep_black_line(); ?></td>
    	  </tr>
    	  <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
    		<td class="smallText"> <?php echo $next_id; ?> </td>
    		  <td class="smallText"> <select name="products_id">
    <?php
    $products = tep_db_query("select p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pd.language_id = '" . $languages_id . "' order by pd.products_name");
    while ($products_values = tep_db_fetch_array($products)) {
      echo '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>';
    } 
    ?>
    		</select> </td>
    		<td class="smallText"> <select name="options_id">
    <?php
    $options = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . $languages_id . "' order by products_options_name");
    while ($options_values = tep_db_fetch_array($options)) {
      echo '<option name="' . $options_values['products_options_name'] . '" value="' . $options_values['products_options_id'] . '">' . $options_values['products_options_name'] . '</option>';
    } 
    ?>
    		</select> </td>
    		<td class="smallText"> <select name="values_id">
    <?php
    $values = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where language_id = '" . $languages_id . "' order by products_options_values_name");
    while ($values_values = tep_db_fetch_array($values)) {
      echo '<option name="' . $values_values['products_options_values_name'] . '" value="' . $values_values['products_options_values_id'] . '">' . $values_values['products_options_values_name'] . '</option>';
    } 
    ?>
    		</select> </td>
    		<td align="right" class="smallText"> <input type="text" name="value_price" size="6"> </td>
    		<td align="right" class="smallText"> <input type="text" name="price_prefix" size="2" value="+"> </td>
    <?php // BOF SPPC ?>
    					<td> </td>
    <?php // EOF SPPC ?>
    		<td align="center" class="smallText"> <?php echo tep_image_submit('button_insert.gif', IMAGE_INSERT); ?> </td>
    	  </tr>
    <?php
      if (DOWNLOAD_ENABLED == 'true') {
    	$products_attributes_maxdays  = DOWNLOAD_MAX_DAYS;
    	$products_attributes_maxcount = DOWNLOAD_MAX_COUNT;
    ?>
    	  <tr class="<?php echo (!($rows % 2)? 'attributes-even' : 'attributes-odd');?>">
    		<td> </td>
    		<td colspan="5">
    		  <table>
    			<tr class="<?php echo (!($rows % 2)? 'attributes-even' : 'attributes-odd');?>">
    			  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_DOWNLOAD; ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_FILENAME; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_filename', $products_attributes_filename, 'size="15"'); ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_MAX_DAYS; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_maxdays', $products_attributes_maxdays, 'size="5"'); ?> </td>
    			  <td class="smallText"><?php echo TABLE_TEXT_MAX_COUNT; ?></td>
    			  <td class="smallText"><?php echo tep_draw_input_field('products_attributes_maxcount', $products_attributes_maxcount, 'size="5"'); ?> </td>
    			</tr>
    		  </table>
    		</td>
    		<td> </td>
    	  </tr>
    <?php
      } // end of DOWNLOAD_ENABLED section
    ?>
    <?php
     }
    ?>
    	  <tr>
    		<td colspan="8"><?php echo tep_black_line(); ?></td><!-- EOF SPPC hide attributes from groups mod -->
    	  </tr>
    	</table></form></td>
      </tr>
    </table></td>
    <!-- products_attributes_eof //-->
     </tr>
    </table>
    <!-- body_text_eof //-->
    <!-- footer //-->
    <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
    <!-- footer_eof //-->
    </body>
    </html>
    <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
    <?php function tep_get_hide_info($customers_groups, $attributes_hide_from_groups) {
     $hide_attr_from_groups_array = explode(',', $attributes_hide_from_groups);
     $hide_attr_from_groups_array = array_slice($hide_attr_from_groups_array, 1); // remove "@" from the array
     $attribute_hidden_from_string = '';
    $hide_info = '';
    if (LAYOUT_HIDE_FROM == '1') {
    	  for ($i = 0; $i < count($customers_groups); $i++) {
    		  if (in_array($customers_groups[$i]['customers_group_id'], $hide_attr_from_groups_array)) {
    		$attribute_hidden_from_string .= $customers_groups[$i]['customers_group_name'] . ', '; 
    		  }
    		  } // end for ($i = 0; $i < count($customers_groups); $i++)
    	  $attribute_hidden_from_string = rtrim($attribute_hidden_from_string); // remove space on the right
    	  $attribute_hidden_from_string = substr($attribute_hidden_from_string,0,strlen($attribute_hidden_from_string) -1); // remove last comma
    	  if (!tep_not_null($attribute_hidden_from_string)) { 
    	  $attribute_hidden_from_string = TEXT_GROUPS_NONE; 
    	  }
    	  $attribute_hidden_from_string = TEXT_HIDDEN_FROM_GROUPS . $attribute_hidden_from_string;
    			// if the string in the database field is @, everything will work fine, however tep_not_null
    			// will not discover the associative array is empty therefore the second check on the value
    if (tep_not_null($hide_attr_from_groups_array) && tep_not_null($hide_attr_from_groups_array[0])) {
    	  $hide_info = tep_image(DIR_WS_ICONS . 'tick_black.gif', $attribute_hidden_from_string, 20, 16);
    	} else {
    	  $hide_info = tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', $attribute_hidden_from_string, 20, 16);
      }
    } else {
    	// default layout: icons for all groups
      for ($i = 0; $i < count($customers_groups); $i++) {
    	if (in_array($customers_groups[$i]['customers_group_id'], $hide_attr_from_groups_array)) {
    	  $hide_info .= tep_image(DIR_WS_ICONS . 'icon_tick.gif', $customers_groups[$i]['customers_group_name'], 11, 11) . '  ';
    	} else {
    	  $hide_info .= tep_image(DIR_WS_IMAGES . 'pixel_trans.gif', '', 11, 11) . '  ';
    	}
      }
    }
    return $hide_info;
    }
    ?>

    If you have an old version you can still manually add this contribution. But in your case I would make sure I use the latest osC and then first run the sql file (as you are instructed in the install.html in new_installations) and then add the files from the contribution to replace the osC ones (provided this is a new install with no other contributions installed yet).

     

    Otherwise using the diff's with a program I just saw mentioned in the contributions today might be something (www . sourcegear . com / diffmerge )

  13. WOnder if you can tell me - am I going to run into problems with osCommerce 2.2-MS2? REason I ask is - I set up a new installation along with your contribution and I'm getting a blank page on the categories/products page.....will try to reinstall but that's the first question I have......maybe my OS COmmerce version is conflicting?

  14. How exactly does one make use of a diff file? Do I need to use Beyond Compare or Diffdog or something? I can't for the life of me find any documentation on how to merge the changes found in a diff file with my current version of a page....anyone? Please help!

    Besides coding conventions, there is also an issue regarding how contributions should be packaged. Brad Waite and I have just had a private colloquy about this, on a contribution in which we collaborated. He preferred to post diff files, while I had posted replacement files in nested directories. Each package appeals to a different audience, so I proposed to release the contribution both ways simultaneously.

    Of course all contributions should be accompanied by a readme.txt or install.txt, which clearly describes the function, content and structure of the contribution, then lists steps for its installation. The contributor should also note the compatibility constraints (e.g., works only with checkout system post 20021101) or certification (e.g., tested with MS1).

    Let me take this opportunity to stimulate some discussion on conventions (or at least suggestions) for packaging contributions.

  15. Can someone point me in the right direction. I'd like to make use of the Separate Price Per Customer Contribution, which appears to make use of DIFF files.....understand the concept but not sure how to implement especially since I need to tread carefully as my installation has gone through several changes already. Is there a way to make use of Beyond Compare or some other Comparision tool for sifting through and applying these numerous changes to get the SPPC contribution added to my installation?

     

    Any advice much appreciated!

  16. Hi Jan - looks like this is a great contribution that I must have! One question before I start - am I able to set up an unlimited # of groups. I'd like to set up these "groups" for each of my affiliates. My store is selling one product and each affiliate has variable pricing on the same 2 products and their attributes. Is this the answer I've been searching for?

     

    Crossing my fingers in FL!

    NK

×
×
  • Create New...