[phpBB Debug] PHP Warning: in file [ROOT]/includes/crs/crs_misc_functions.php on line 37: mime_content_type(): Empty filename or path
[phpBB Debug] PHP Warning: in file [ROOT]/includes/crs/crs_misc_functions.php on line 37: mime_content_type(): Empty filename or path
Zen Cart 源代码 options_values_manager.php

Zen Cart 源代码 options_values_manager.php




下载文件

文件名: options_values_manager.php
文件类型: PHP文件
文件大小: 65.74 KiB
MD5: cb9d69763725998f8cfbc6c431078987

options_values_manager.php - 关闭高亮
  1. <?php
  2. /**
  3.  * @package admin
  4.  * @copyright Copyright 2003-2012 Zen Cart Development Team
  5.  * @copyright Portions Copyright 2003 osCommerce
  6.  * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
  7.  * @version GIT: $Id: Author: DrByte  Sat Jul 21 17:10:54 2012 -0400 Modified in v1.5.1 $
  8.  */
  9.  
  10.   require('includes/application_top.php');
  11.  
  12.   // verify option names and values
  13.   $chk_option_names = $db->Execute("select count(*) as count from " . TABLE_PRODUCTS_OPTIONS . " where language_id='" . (int)$_SESSION['languages_id'] . "' limit 1");
  14.   if ($chk_option_names->fields['count'] < 1) {
  15.     $messageStack->add_session(ERROR_DEFINE_OPTION_NAMES, 'caution');
  16.     zen_redirect(zen_href_link(FILENAME_OPTIONS_NAME_MANAGER));
  17.   }
  18.  
  19.   // check for damaged database, caused by users indiscriminately deleting table data
  20.   $ary = array();
  21. //  $chk_option_values = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_name = 'TEXT' and products_options_values_id=" . (int)PRODUCTS_OPTIONS_VALUES_TEXT_ID);
  22.   $chk_option_values = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id=" . (int)PRODUCTS_OPTIONS_VALUES_TEXT_ID);
  23.   while (!$chk_option_values->EOF) {
  24.     $ary[] = $chk_option_values->fields['language_id'];
  25.     $chk_option_values->MoveNext();
  26.   }
  27.   $languages = zen_get_languages();
  28.   for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
  29.     if ((int)$languages[$i]['id'] > 0 && !in_array((int)$languages[$i]['id'], $ary)) {
  30. //      $db->Execute("INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name) VALUES ((int)PRODUCTS_OPTIONS_VALUES_TEXT_ID, " . (int)$languages[$i]['id'] . ", 'TEXT')");
  31.       $db->Execute("INSERT INTO " . TABLE_PRODUCTS_OPTIONS_VALUES . " (products_options_values_id, language_id, products_options_values_name) VALUES (" . (int)PRODUCTS_OPTIONS_VALUES_TEXT_ID . ", " . (int)$languages[$i]['id'] . ", 'TEXT')");
  32.     }
  33.   }
  34.  
  35.   $action = (isset($_GET['action']) ? $_GET['action'] : '');
  36.  
  37. // display or hide copier features
  38.   if (!isset($_SESSION['option_names_values_copier'])) {
  39.     $_SESSION['option_names_values_copier'] = OPTION_NAMES_VALUES_GLOBAL_STATUS;
  40.   }
  41.   if (!isset($_GET['reset_option_names_values_copier'])) {
  42.     $reset_option_names_values_copier = $_SESSION['option_names_values_copier'];
  43.   }
  44.  
  45.   if (zen_not_null($action)) {
  46.     $_SESSION['page_info'] = '';
  47.     if (isset($_GET['option_page'])) $_SESSION['page_info'] .= 'option_page=' . $_GET['option_page'] . '&';
  48.     if (isset($_GET['value_page'])) $_SESSION['page_info'] .= 'value_page=' . $_GET['value_page'] . '&';
  49.     if (isset($_GET['attribute_page'])) $_SESSION['page_info'] .= 'attribute_page=' . $_GET['attribute_page'] . '&';
  50.     if (zen_not_null($_SESSION['page_info'])) {
  51.       $_SESSION['page_info'] = substr($_SESSION['page_info'], 0, -1);
  52.     }
  53.  
  54.     switch ($action) {
  55.       case 'set_option_names_values_copier':
  56.         $_SESSION['option_names_values_copier'] = $_GET['reset_option_names_values_copier'];
  57.         $action='';
  58.         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER));
  59.         break;
  60.       case 'add_product_option_values':
  61.         $value_name_array = $_POST['value_name'];
  62.         $value_id = zen_db_prepare_input($_POST['value_id']);
  63.         $option_id = zen_db_prepare_input($_POST['option_id']);
  64.         $products_options_values_sort_order = zen_db_prepare_input($_POST['products_options_values_sort_order']);
  65.  
  66.         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
  67.           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
  68.  
  69.           $db->Execute("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES . "
  70.                      (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order)
  71.                      values ('" . (int)$value_id . "',
  72.                              '" . (int)$languages[$i]['id'] . "',
  73.                              '" . zen_db_input($value_name) . "',
  74.                              '" . (int)$products_options_values_sort_order . "')");
  75.         }
  76.  
  77.         $db->Execute("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
  78.                    (products_options_id, products_options_values_id)
  79.                    values ('" . (int)$option_id . "', '" . (int)$value_id . "')");
  80.  
  81. // alert if possible duplicate
  82.         $duplicate_option_values= '';
  83.         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
  84.           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
  85.  
  86.           if (!empty($value_name)) {
  87.             $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
  88.                                from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
  89.                                left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
  90.                                where pov.language_id= '" . (int)$languages[$i]['id'] . "'
  91.                                and pov.products_options_values_name='" . zen_db_input($value_name) . "'
  92.                                and pov2po.products_options_id ='" . (int)$option_id .
  93.                                 "'");
  94.             if ($check->RecordCount() > 1) {
  95.               while (!$check->EOF) {
  96.                 $check_dups .= ' - ' . $check->fields['products_options_values_id'];
  97.                 $check->MoveNext();
  98.               }
  99. // BOM by zen-cart.cn
  100.               $duplicate_option_values .= ' <b>' . GBcase(zen_get_language_name($languages[$i]['id']),"upper") . '</b> : ' . $check_dups;
  101. // EOM by zen-cart.cn
  102.             }
  103.           }
  104.         }
  105.         if (!empty($duplicate_option_values)) {
  106.           $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
  107.         }
  108.  
  109.         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
  110.         break;
  111.       case 'update_value':
  112.         $value_name_array = $_POST['value_name'];
  113.         $value_id = zen_db_prepare_input($_POST['value_id']);
  114.         $option_id = zen_db_prepare_input($_POST['option_id']);
  115.         $products_options_values_sort_order = zen_db_prepare_input($_POST['products_options_values_sort_order']);
  116.  
  117.         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
  118.           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
  119.  
  120.           $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES . "
  121.                        set products_options_values_name = '" . zen_db_input($value_name) . "', products_options_values_sort_order = '" . (int)$products_options_values_sort_order . "'
  122.                        where products_options_values_id = '" . zen_db_input($value_id) . "'
  123.                        and language_id = '" . (int)$languages[$i]['id'] . "'");
  124.  
  125.         }
  126.  
  127.         $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
  128.                      set products_options_id = '" . (int)$option_id . "'
  129.                      where products_options_values_id = '" . (int)$value_id . "'");
  130.  
  131.  
  132. // alert if possible duplicate
  133.         $duplicate_option_values= '';
  134.         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
  135.           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
  136.  
  137.           if (!empty($value_name)) {
  138.             $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
  139.                                from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
  140.                                left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
  141.                                where pov.language_id= '" . (int)$languages[$i]['id'] . "'
  142.                                and pov.products_options_values_name='" . zen_db_input($value_name) . "'
  143.                                and pov2po.products_options_id ='" . (int)$option_id .
  144.                                 "'");
  145.  
  146.             if ($check->RecordCount() > 1) {
  147.               while (!$check->EOF) {
  148.                 $check_dups .= ' - ' . $check->fields['products_options_values_id'];
  149.                 $check->MoveNext();
  150.               }
  151. // BOM by zen-cart.cn
  152.               $duplicate_option_values .= ' <b>' . GBcase(zen_get_language_name($languages[$i]['id']),"upper") . '</b> : ' . $check_dups;
  153. // EOM by zen-cart.cn
  154.             }
  155.           }
  156.         }
  157.         if (!empty($duplicate_option_values)) {
  158.           $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
  159.         }
  160.  
  161.         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
  162.         break;
  163.       case 'delete_value':
  164.         // demo active test
  165.         if (zen_admin_demo()) {
  166.           $_GET['action']= '';
  167.           $messageStack->add_session(ERROR_ADMIN_DEMO, 'caution');
  168.           zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
  169.         }
  170.         $value_id = zen_db_prepare_input($_GET['value_id']);
  171.  
  172. // remove all attributes from products with value
  173.         $remove_attributes_query = $db->Execute("select products_attributes_id, options_id, options_values_id from " . TABLE_PRODUCTS_ATTRIBUTES . " where options_values_id ='" . (int)$value_id . "'");
  174.         if ($remove_attributes_query->RecordCount() > 0) {
  175.           // clean all tables of option value
  176.           while (!$remove_attributes_query->EOF) {
  177.  
  178.             $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
  179.                          where products_attributes_id='" . $remove_attributes_query->fields['products_attributes_id'] . "'");
  180.  
  181.             $remove_attributes_query->MoveNext();
  182.           }
  183.           $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES . "
  184.                        where options_values_id='" . (int)$value_id . "'");
  185.         }
  186.  
  187.         $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
  188.                      where products_options_values_id = '" . (int)$value_id . "'");
  189.  
  190.         $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
  191.                      where products_options_values_id = '" . (int)$value_id . "'");
  192.  
  193.         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
  194.         break;
  195.  
  196. ////////////////////////////////////////////////////
  197. // copy option values based on existance of another option value
  198.     case 'copy_options_values_one_to_another':
  199.  
  200.       $options_id_from = (int)$_POST['options_id_from'];
  201.       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
  202.  
  203.       $options_id_to = (int)$_POST['options_id_to'];
  204.       $options_values_values_id_to = (int)$_POST['options_values_values_id_to'];
  205.  
  206.       // one category of products or all products
  207.       if ($_POST['copy_to_categories_id'] != '') {
  208.         $products_only = $db->Execute("select ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . (int)$options_id_from . "' and pa.options_values_id='" . (int)$options_values_values_id_from . "')");
  209.       } else {
  210.         $products_only = $db->Execute("select pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . (int)$options_id_from . "' and pa.options_values_id='" . (int)$options_values_values_id_from . "'");
  211.       }
  212.  
  213. /*
  214. // debug code
  215.             while(!$products_only->EOF) {
  216.               echo 'Product ' . $products_only->fields['products_id'] . '<br>';
  217.               $products_only->MoveNext();
  218.             }
  219.  
  220.  
  221. die('I SEE match from: ' . $options_id_from . '-' . $options_values_values_id_from . ' add to: ' . $options_id_to . ' -' . $options_values_values_id_to . ' | only for cat ' . $_POST['copy_to_categories_id'] . ' | found matches ' . $products_only->RecordCount());
  222. */
  223.  
  224.  
  225.       if ($_POST['copy_to_categories_id'] == '') {
  226.         $zc_categories = ' All Products ';
  227.       } else {
  228.         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
  229.       }
  230.  
  231.       $new_attribute=0;
  232.  
  233.       if ($options_values_values_id_from == $options_values_values_id_to) {
  234.         // cannot copy to self
  235.         $messageStack->add(ERROR_OPTION_VALUES_COPIED . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to), 'warning');
  236.       } else {
  237.         if (!zen_validate_options_to_options_value($options_id_from, $options_values_values_id_from) or !zen_validate_options_to_options_value($options_id_to, $options_values_values_id_to)) {
  238.           $messageStack->add(ERROR_OPTION_VALUES_COPIED_MISMATCH . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to), 'warning');
  239.         } else {
  240.           // check for existing combination
  241.           if ($products_only->RecordCount() > 0) {
  242.             // check existing matching products and add new attributes
  243.             while(!$products_only->EOF) {
  244.               $current_products_id = $products_only->fields['products_id'];
  245.               $sql = "insert into " . TABLE_PRODUCTS_ATTRIBUTES . " (products_id, options_id, options_values_id) values('" . $current_products_id . "', '" . $options_id_to . "', '" . $options_values_values_id_to . "')";
  246.               $check_previous = $db->Execute("select count(*) as count from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id='" . $current_products_id . "' and options_id='" . $options_id_to . "' and options_values_id='" . $options_values_values_id_to . "' limit 1");
  247.               // do not add duplicate attributes
  248.               if ($check_previous->fields['count'] < 1) {
  249.                 $db->Execute($sql);
  250.                 $new_attribute++;
  251.               }
  252.               $products_only->MoveNext();
  253.             }
  254.  
  255.             // display how many products were updated
  256.             if ($new_attribute < 1) {
  257.               // nothing was added due to duplicates
  258.               $messageStack->add(SUCCESS_OPTION_VALUES_COPIED . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'caution');
  259.             } else {
  260.               // successful addition of new attributes that were not duplicates
  261.               $messageStack->add(SUCCESS_OPTION_VALUES_COPIED . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'success');
  262.             }
  263.           } else {
  264.             // warning nothing to copy
  265.             $messageStack->add(ERROR_OPTION_VALUES_NONE . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to) . $zc_categories, 'warning');
  266.           }
  267.         } // mismatch
  268.       } // same option value
  269.     break;
  270. ////////////////////////////////////
  271.  
  272. // fix here copy_options_values_one_to_another_options_id
  273.  
  274. ////////////////////////////////////////////////////
  275. // copy option values based on existance of another option value
  276.     case 'copy_options_values_one_to_another_options_id':
  277.  
  278.       $options_id_from = (int)$_POST['options_id_from'];
  279.       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
  280.       $copy_from_products_id = (int)$_POST['copy_from_products_id'];
  281.  
  282.       $options_id_to = (int)$_POST['options_id_to'];
  283.       $options_values_values_id_to = (int)$_POST['options_values_values_id_to'];
  284.  
  285.       // one category of products or all products
  286.       if ($_POST['copy_to_categories_id'] != '') {
  287.         $products_only = $db->Execute("select distinct ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . $options_id_to . "')");
  288.       } else {
  289.         $products_only = $db->Execute("select distinct pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . $options_id_to . "'");
  290.       }
  291.  
  292.       $products_attributes_defaults = $db->Execute("select pa.* from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.products_id = '" . $copy_from_products_id . "' and options_id='" . $options_id_from . "' and pa.options_values_id='" . $options_values_values_id_from . "'");
  293.  
  294.       $options_id = zen_db_prepare_input($options_id_from);
  295.       $values_id = zen_db_prepare_input($options_values_values_id_from);
  296.  
  297.       if (!$products_attributes_defaults->EOF) {
  298.         $options_values_price = zen_db_prepare_input($products_attributes_defaults->fields['options_values_price']);
  299.         $price_prefix = zen_db_prepare_input($products_attributes_defaults->fields['price_prefix']);
  300.  
  301.         $products_options_sort_order = zen_db_prepare_input($products_attributes_defaults->fields['products_options_sort_order']);
  302.         $product_attribute_is_free = zen_db_prepare_input($products_attributes_defaults->fields['product_attribute_is_free']);
  303.         $products_attributes_weight = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight']);
  304.         $products_attributes_weight_prefix = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight_prefix']);
  305.         $attributes_display_only = zen_db_prepare_input($products_attributes_defaults->fields['attributes_display_only']);
  306.         $attributes_default = zen_db_prepare_input($products_attributes_defaults->fields['attributes_default']);
  307.         $attributes_discounted = zen_db_prepare_input($products_attributes_defaults->fields['attributes_discounted']);
  308.         $attributes_price_base_included = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_base_included']);
  309.  
  310.         $attributes_price_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_onetime']);
  311.         $attributes_price_factor = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor']);
  312.         $attributes_price_factor_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_offset']);
  313.         $attributes_price_factor_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime']);
  314.         $attributes_price_factor_onetime_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime_offset']);
  315.         $attributes_qty_prices = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices']);
  316.         $attributes_qty_prices_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices_onetime']);
  317.  
  318.         $attributes_price_words = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words']);
  319.         $attributes_price_words_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words_free']);
  320.         $attributes_price_letters = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters']);
  321.         $attributes_price_letters_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters_free']);
  322.         $attributes_required = zen_db_prepare_input($products_attributes_defaults->fields['attributes_required']);
  323.       }
  324.  
  325. /*
  326. /////
  327. // debug code
  328.             while(!$products_only->EOF) {
  329.               echo 'Product ' . $products_only->fields['products_id'] . '<br>';
  330.               $products_only->MoveNext();
  331.             }
  332.  
  333.  
  334. die('I SEE match from products_id:' . $copy_from_products_id . ' options_id_from: ' . $options_id_from . '-' . $options_values_values_id_from . ' add to: ' . $options_id_to . ' | only for cat ' . $_POST['copy_to_categories_id'] . ' | found matches ' . $products_only->RecordCount() . '<br>' .
  335. 'from products_id: ' . $products_attributes_defaults->fields['products_id'] . ' option_id: ' . $products_attributes_defaults->fields['options_id'] . ' options_values_id: ' . $products_attributes_defaults->fields['options_values_id']
  336. );
  337. /////
  338. */
  339.  
  340.       if ($_POST['copy_to_categories_id'] == '') {
  341.         $zc_categories = ' All Products ';
  342.       } else {
  343.         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
  344.       }
  345.  
  346.       $new_attribute=0;
  347.  
  348.         if (!zen_validate_options_to_options_value($options_id_from, $options_values_values_id_from) or ($products_attributes_defaults->EOF and $copy_from_products_id != '')) {
  349.           if ($products_attributes_defaults->EOF and $copy_from_products_id != '') {
  350.           // bad product_id with no match
  351.             $messageStack->add(ERROR_OPTION_VALUES_COPIED_MISMATCH_PRODUCTS_ID . $copy_from_products_id . ': ' . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from), 'warning');
  352.           } else {
  353.           // mismatched Option Name/Value
  354.             $messageStack->add(ERROR_OPTION_VALUES_COPIED_MISMATCH . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from), 'warning');
  355.           }
  356.         } else {
  357.           // check for existing combination
  358.           if ($products_only->RecordCount() > 0) {
  359.             // check existing matching products and add new attributes
  360.  
  361.             while(!$products_only->EOF) {
  362.               $current_products_id = $products_only->fields['products_id'];
  363.  
  364. //              $sql = "insert into " . TABLE_PRODUCTS_ATTRIBUTES . "(products_id, options_id, options_values_id) values('" . $current_products_id . "', '" . $options_id_from . "', '" . $options_values_values_id_from . "')";
  365.                 $sql = "insert into " . TABLE_PRODUCTS_ATTRIBUTES . " (products_attributes_id, products_id, options_id, options_values_id, options_values_price, price_prefix, products_options_sort_order, product_attribute_is_free, products_attributes_weight, products_attributes_weight_prefix, attributes_display_only, attributes_default, attributes_discounted, attributes_image, attributes_price_base_included, attributes_price_onetime, attributes_price_factor, attributes_price_factor_offset, attributes_price_factor_onetime, attributes_price_factor_onetime_offset, attributes_qty_prices, attributes_qty_prices_onetime, attributes_price_words, attributes_price_words_free, attributes_price_letters, attributes_price_letters_free, attributes_required)
  366.                          values (0,
  367.                                  '" . (int)$current_products_id . "',
  368.                                  '" . (int)$options_id . "',
  369.                                  '" . (int)$values_id . "',
  370.                                  '" . zen_db_input($options_values_price) . "',
  371.                                  '" . zen_db_input($price_prefix) . "',
  372.                                  '" . (int)zen_db_input($products_options_sort_order) . "',
  373.                                  '" . (int)zen_db_input($product_attribute_is_free) . "',
  374.                                  '" . (float)zen_db_input($products_attributes_weight) . "',
  375.                                  '" . zen_db_input($products_attributes_weight_prefix) . "',
  376.                                  '" . (int)zen_db_input($attributes_display_only) . "',
  377.                                  '" . (int)zen_db_input($attributes_default) . "',
  378.                                  '" . (int)zen_db_input($attributes_discounted) . "',
  379.                                  '" . zen_db_input($attributes_image_name) . "',
  380.                                  '" . (int)zen_db_input($attributes_price_base_included) . "',
  381.                                  '" . (float)zen_db_input($attributes_price_onetime) . "',
  382.                                  '" . (float)zen_db_input($attributes_price_factor) . "',
  383.                                  '" . (float)zen_db_input($attributes_price_factor_offset) . "',
  384.                                  '" . (float)zen_db_input($attributes_price_factor_onetime) . "',
  385.                                  '" . (float)zen_db_input($attributes_price_factor_onetime_offset) . "',
  386.                                  '" . zen_db_input($attributes_qty_prices) . "',
  387.                                  '" . zen_db_input($attributes_qty_prices_onetime) . "',
  388.                                  '" . (float)zen_db_input($attributes_price_words) . "',
  389.                                  '" . (int)zen_db_input($attributes_price_words_free) . "',
  390.                                  '" . (float)zen_db_input($attributes_price_letters) . "',
  391.                                  '" . (int)zen_db_input($attributes_price_letters_free) . "',
  392.                                  '" . (int)zen_db_input($attributes_required) . "')";
  393.  
  394.               $check_previous = $db->Execute("select count(*) as count from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id='" . $current_products_id . "' and options_id='" . $options_id_from . "' and options_values_id='" . $options_values_values_id_from . "' limit 1");
  395.               // do not add duplicate attributes
  396.               if ($check_previous->fields['count'] < 1) {
  397.               // add new attribute
  398.                 $db->Execute($sql);
  399.                 //echo $sql . '<br>';
  400.                 $new_attribute++;
  401.               } else {
  402.                 // ignore
  403.                 if ($_POST['copy_attributes'] == 'copy_attributes_ignore') {
  404.                   //echo 'skipped already exists: ' . $current_products_id . '<br>';
  405.                 } else {
  406.                 // delete old and add new
  407.                 //echo 'delete old and add new: ' . $current_products_id . '<br>';
  408.                   $db->Execute("DELETE from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id='" . $current_products_id . "' and options_id='" . $options_id_from . "' and options_values_id='" . $options_values_values_id_from . "'");
  409.                   $db->Execute($sql);
  410.                   $new_attribute++;
  411.                 }
  412.               }
  413.               $products_only->MoveNext();
  414.             }
  415.  
  416.             // display how many products were updated
  417.             if ($new_attribute < 1) {
  418.               // nothing was added
  419.               $messageStack->add(ERROR_OPTION_VALUES_NONE . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'warning');
  420.             } else {
  421.               // successful addition of new attributes that were not duplicates
  422.               $messageStack->add(SUCCESS_OPTION_VALUES_COPIED . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'success');
  423.             }
  424.           } else {
  425.             // warning nothing to copy
  426.             $messageStack->add(ERROR_OPTION_VALUES_NONE . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' for: ' . $zc_categories, 'warning');
  427.           }
  428.         } // mismatch
  429.     break;
  430. ////////////////////////////////////
  431.  
  432.  
  433.  
  434.  
  435.     case ('delete_options_values_of_option_name'):
  436.  
  437.       $options_id_from = (int)$_POST['options_id_from'];
  438.       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
  439.  
  440.       // one category of products or all products
  441.       if ($_POST['copy_to_categories_id'] != '') {
  442.         $products_only = $db->Execute("select ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . $options_id_from . "' and pa.options_values_id='" . $options_values_values_id_from . "')");
  443.       } else {
  444.         $products_only = $db->Execute("select pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . $options_id_from . "' and pa.options_values_id='" . $options_values_values_id_from . "'");
  445.       }
  446.  
  447.       if ($_POST['copy_to_categories_id'] == '') {
  448.         $zc_categories = ' All Products ';
  449.       } else {
  450.         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
  451.       }
  452.  
  453.       $new_attribute=0;
  454.  
  455.       if (!zen_validate_options_to_options_value($options_id_from, $options_values_values_id_from)) {
  456.         $messageStack->add(ERROR_OPTION_VALUES_DELETE_MISMATCH . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from), 'warning');
  457.       } else {
  458.         // check for existing combination
  459.         if ($products_only->RecordCount() > 0) {
  460.           // check existing matching products and add new attributes
  461.           while(!$products_only->EOF) {
  462.             $current_products_id = $products_only->fields['products_id'];
  463.  
  464.             // check for associated downloads
  465.             $downloads_remove_query = "select products_attributes_id from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id='" . $current_products_id . "' and options_id='" . $options_id_from . "' and options_values_id='" . $options_values_values_id_from . "'";
  466.             $downloads_remove = $db->Execute($downloads_remove_query);
  467.  
  468.             $sql = "delete from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id='" . $current_products_id . "' and options_id='" . $options_id_from . "' and options_values_id='" . $options_values_values_id_from . "'";
  469.             $delete_selected = $db->Execute($sql);
  470.  
  471.             // delete associated downloads
  472.             while (!$downloads_remove->EOF) {
  473.               $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
  474.                            where products_attributes_id='" . $downloads_remove->fields['products_attributes_id'] . "'");
  475.               $downloads_remove->MoveNext();
  476.             }
  477.             // count deleted attribute
  478.             $new_attribute++;
  479.             $products_only->MoveNext();
  480.           }
  481.  
  482.           // display how many products were updated
  483.           if ($new_attribute < 1) {
  484.             // nothing was added due to duplicates
  485.             $messageStack->add(ERROR_OPTION_VALUES_NONE . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'caution');
  486.           } else {
  487.             // successful addition of new attributes that were not duplicates
  488.             $messageStack->add(SUCCESS_OPTION_VALUES_DELETE . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . ' for: ' . $zc_categories . ' ' . $new_attribute . ' products', 'success');
  489.           }
  490.         } else {
  491.           // warning nothing to copy
  492.           $messageStack->add(ERROR_OPTION_VALUES_NONE . TEXT_INFO_FROM . zen_options_name($options_id_from) . ' ' . zen_values_name($options_values_values_id_from) . TEXT_INFO_TO . zen_options_name($options_id_to) . ' ' . zen_values_name($options_values_values_id_to) . $zc_categories, 'warning');
  493.         }
  494.       } // mismatch
  495.  
  496.     break;
  497.     }
  498.  
  499.  
  500.   }
  501. ?>
  502. <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
  503. <html <?php echo HTML_PARAMS; ?>>
  504. <head>
  505. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
  506. <title><?php echo TITLE; ?></title>
  507. <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
  508. <link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
  509. <script language="javascript" src="includes/menu.js"></script>
  510. <script language="javascript"><!--
  511. function go_option() {
  512.   if (document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value != "none") {
  513.     location = "<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'option_page=' . ($_GET['option_page'] ? $_GET['option_page'] : 1)); ?>&option_order_by="+document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value;
  514.   }
  515. }
  516. //--></script>
  517. <script type="text/javascript">
  518.   <!--
  519.   function init()
  520.   {
  521.     cssjsmenu('navbar');
  522.     if (document.getElementById)
  523.     {
  524.       var kill = document.getElementById('hoverJS');
  525.       kill.disabled = true;
  526.     }
  527.   }
  528.   // -->
  529. </script>
  530. </head>
  531. <body onLoad="init()">
  532. <!-- header //-->
  533. <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
  534.   <table border="0" width="75%" cellspacing="0" cellpadding="0" align="center">
  535.       <tr>
  536.         <td width="100%">
  537.            <table width="100%" border="0" cellspacing="0" cellpadding="2">
  538.              <tr>
  539.                <td height="40" valign="bottom">
  540.                  <a href="<?php echo  zen_href_link(FILENAME_ATTRIBUTES_CONTROLLER, '', 'NONSSL') ?>"><?php echo zen_image_button('button_edit_attribs.gif', IMAGE_EDIT_ATTRIBUTES); ?></a> &nbsp;
  541.                  <a href="<?php echo  zen_href_link(FILENAME_OPTIONS_NAME_MANAGER, '', 'NONSSL') ?>"><?php echo zen_image_button('button_option_names.gif', IMAGE_OPTION_NAMES); ?></a>
  542.                </td>
  543.               <td class="main" height="40" valign="bottom">
  544.                 <?php
  545. // toggle switch for show copier features
  546.                   $option_names_values_copier_array = array(array('id' => '0', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_OFF),
  547.                                         array('id' => '1', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_ON),
  548.                                         );
  549.                   echo zen_draw_form('set_option_names_values_copier_form', FILENAME_OPTIONS_VALUES_MANAGER, '', 'get') . '&nbsp;&nbsp;' . zen_draw_pull_down_menu('reset_option_names_values_copier', $option_names_values_copier_array, $reset_option_names_values_copier, 'onChange="this.form.submit();"') .
  550.                   zen_hide_session_id() .
  551.                   zen_draw_hidden_field('action', 'set_option_names_values_copier') .
  552.                   '</form>';
  553.                 ?>
  554.               </td>
  555.                <td class="main" align="right" valign="bottom"><?php echo TEXT_PRODUCT_OPTIONS_INFO; ?></td>
  556.              </tr>
  557.           </table>
  558.        </td>
  559.      </tr>
  560.      <tr>
  561.         <td valign="top" width="50%">
  562.            <table width="100%" border="0" cellspacing="0" cellpadding="2">
  563. <!-- value //-->
  564. <?php
  565.   if ($action == 'delete_option_value') { // delete product option value
  566.     $values_values = $db->Execute("select products_options_values_id, products_options_values_name
  567.                                   from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
  568.                                   where products_options_values_id = '" . (int)$_GET['value_id'] . "'
  569.                                   and language_id = '" . (int)$_SESSION['languages_id'] . "'");
  570.  
  571. ?>
  572.               <tr>
  573.                 <td colspan="3" class="pageHeading">&nbsp;<?php echo $values_values->fields['products_options_values_name']; ?>&nbsp;</td>
  574.               </tr>
  575.               <tr>
  576.                 <td colspan="4"><?php echo zen_black_line(); ?></td>
  577.               </tr>
  578. <?php
  579.     $products_values = $db->Execute("select p.products_id, pd.products_name, po.products_options_name, pa.options_id
  580.                              from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_ATTRIBUTES . " pa, "
  581.                                      . TABLE_PRODUCTS_OPTIONS . " po, " . TABLE_PRODUCTS_DESCRIPTION . " pd
  582.                              where pd.products_id = p.products_id
  583.                              and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
  584.                              and po.language_id = '" . (int)$_SESSION['languages_id'] . "'
  585.                              and pa.products_id = p.products_id
  586.                              and pa.options_values_id='" . (int)$_GET['value_id'] . "'
  587.                              and po.products_options_id = pa.options_id
  588.                              order by pd.products_name");
  589.  
  590.     if ($products_values->RecordCount() > 0) {
  591. ?>
  592. <?php
  593. // extra cancel button
  594.     if ($products_values->RecordCount() > 10) {
  595. ?>
  596.                   <tr>
  597.                     <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
  598.                     <td class="main" align="right"><br /><?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_value&value_id=' . $_GET['value_id'] . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_delete.gif', ' delete '); ?></a>&nbsp;&nbsp;&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_cancel.gif', ' cancel '); ?></a>&nbsp;</td>
  599.                   </tr>
  600. <?php
  601.   } // extra cancel
  602. ?>
  603.                   <tr class="dataTableHeadingRow">
  604.                     <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
  605.                     <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_PRODUCT; ?>&nbsp;</td>
  606.                     <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_SORT_ORDER; ?>&nbsp;</td>
  607.                     <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
  608.                   </tr>
  609.                   <tr>
  610.                     <td colspan="4"><?php echo zen_black_line(); ?></td>
  611.                   </tr>
  612.  
  613. <?php
  614.       while (!$products_values->EOF) {
  615.         $rows++;
  616. ?>
  617.                   <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
  618.                     <td align="center" class="smallText">&nbsp;<?php echo $products_values->fields['products_id']; ?>&nbsp;</td>
  619.                     <td class="smallText">&nbsp;<?php echo $products_values->fields['products_name']; ?>&nbsp;</td>
  620.                     <td class="smallText" align="right">&nbsp;<?php echo $options_values->fields["products_options_sort_order"]; ?>&nbsp;</td>
  621.                     <td class="smallText">&nbsp;<?php echo $products_values->fields['products_options_name']; ?>&nbsp;</td>
  622.                   </tr>
  623. <?php
  624.         $products_values->MoveNext();
  625.       }
  626. ?>
  627.                   <tr>
  628.                     <td colspan="4"><?php echo zen_black_line(); ?></td>
  629.                   </tr>
  630.                   <tr>
  631.                     <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
  632.                     <td class="main" align="right"><br /><?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_value&value_id=' . $_GET['value_id'] . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_delete.gif', ' delete '); ?></a>&nbsp;&nbsp;&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_cancel.gif', ' cancel '); ?></a>&nbsp;</td>
  633.                   </tr>
  634. <?php
  635.     } else {
  636. ?>
  637.                   <tr>
  638.                     <td class="main" colspan="3"><br /><?php echo TEXT_OK_TO_DELETE; ?></td>
  639.                   </tr>
  640.                   <tr>
  641.                     <td class="main" align="right" colspan="3"><br /><?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_value&value_id=' . $_GET['value_id'] . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_delete.gif', ' delete '); ?></a>&nbsp;&nbsp;&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_cancel.gif', ' cancel '); ?></a>&nbsp;</td>
  642.                   </tr>
  643. <?php
  644.     }
  645. ?>
  646.                 </table></td>
  647.               </tr>
  648. <?php
  649.   } else {
  650. ?>
  651.               <tr>
  652.                 <td colspan="3" class="pageHeading">&nbsp;<?php echo HEADING_TITLE_VAL; ?>&nbsp;</td>
  653.               </tr>
  654.               <tr>
  655.                 <td colspan="5" class="smallText">
  656. <?php
  657. //    $values = "select pov.products_options_values_id, pov.products_options_values_name, pov2po.products_options_id, pov.products_options_values_sort_order 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)$_SESSION['languages_id'] . "' and pov2po.products_options_values_id !='" . PRODUCTS_OPTIONS_VALUES_TEXT_ID . "' order by LPAD(pov2po.products_options_id,11,'0'), LPAD(pov.products_options_values_sort_order,11,'0'), pov.products_options_values_name";
  658.     $values = "select pov.products_options_values_id, pov.products_options_values_name, pov2po.products_options_id, pov.products_options_values_sort_order 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     left join " . TABLE_PRODUCTS_OPTIONS . " po on pov2po.products_options_id = po.products_options_id where pov.language_id = '" . (int)$_SESSION['languages_id'] . "' and po.language_id = '" . (int)$_SESSION['languages_id'] . "' and po.language_id = pov.language_id and pov2po.products_options_values_id !='" . PRODUCTS_OPTIONS_VALUES_TEXT_ID . "' order by  po.products_options_name, LPAD(pov.products_options_values_sort_order,11,'0'), pov.products_options_values_name";
  659.     if (!isset($_GET['value_page'])) {
  660.       $_GET['value_page'] = 1;
  661.     }
  662.     $prev_value_page = $_GET['value_page'] - 1;
  663.     $next_value_page = $_GET['value_page'] + 1;
  664.  
  665.     $value_query = $db->Execute($values);
  666.     $num_rows = $value_query->RecordCount();
  667.  
  668.     $per_page = (MAX_ROW_LISTS_OPTIONS == '') ? $num_rows : (int)MAX_ROW_LISTS_OPTIONS;
  669.     $value_page_start = ($per_page * $_GET['value_page']) - $per_page;
  670.  
  671.     if ($num_rows <= $per_page) {
  672.       $num_pages = 1;
  673.     } else if (($num_rows % $per_page) == 0) {
  674.       $num_pages = ($num_rows / $per_page);
  675.     } else {
  676.       $num_pages = ($num_rows / $per_page) + 1;
  677.     }
  678.     $num_pages = (int) $num_pages;
  679.  
  680. // fix limit error on some versions
  681.     if ($value_page_start < 0) { $value_page_start = 0; }
  682.  
  683.     $values = $values . " LIMIT $value_page_start, $per_page";
  684.  
  685.     // Previous
  686.     if ($prev_value_page)  {
  687.       echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'option_order_by=' . $option_order_by . '&value_page=' . $prev_value_page) . '"> &lt;&lt; </a> | ';
  688.     }
  689.  
  690.     for ($i = 1; $i <= $num_pages; $i++) {
  691.       if ($i != $_GET['value_page']) {
  692.          echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($option_order_by) ? 'option_order_by=' . $option_order_by . '&' : '') . 'value_page=' . $i) . '">' . $i . '</a> | ';
  693.       } else {
  694.          echo '<b><font color=red>' . $i . '</font></b> | ';
  695.       }
  696.     }
  697.  
  698.     // Next
  699.     if ($_GET['value_page'] != $num_pages) {
  700.       echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($option_order_by) ? 'option_order_by=' . $option_order_by . '&' : '') . 'value_page=' . $next_value_page) . '"> &gt;&gt;</a> ';
  701.     }
  702. ?>
  703.                 </td>
  704.               </tr>
  705.               <tr>
  706.                 <td colspan="6"><?php echo zen_black_line(); ?></td>
  707.               </tr>
  708.               <tr class="dataTableHeadingRow">
  709.                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
  710.                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
  711.                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_VALUE; ?>&nbsp;</td>
  712.                 <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_VALUE_SORT_ORDER; ?></td>
  713.                 <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td>
  714.               </tr>
  715.               <tr>
  716.                 <td colspan="6"><?php echo zen_black_line(); ?></td>
  717.               </tr>
  718. <?php
  719.     $next_id = 1;
  720.     $rows = 0;
  721.     $values_values = $db->Execute($values);
  722.     while (!$values_values->EOF) {
  723.       $options_name = zen_options_name($values_values->fields['products_options_id']);
  724. // iii 030813 added: Option Type Feature and File Uploading
  725. // fetch products_options_id for use if the option value is deleted
  726. // with TEXT and FILE Options, there are multiple options for the single TEXT
  727. // value and only the single reference should be deleted
  728.       $option_id = $values_values->fields['products_options_id'];
  729.  
  730.       $values_name = $values_values->fields['products_options_values_name'];
  731.       $products_options_values_sort_order = $values_values->fields['products_options_values_sort_order'];
  732.       $rows++;
  733. ?>
  734.               <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
  735. <?php
  736. // FIX HERE
  737. // edit option values
  738.       if (($action == 'update_option_value') && ($_GET['value_id'] == $values_values->fields['products_options_values_id'])) {
  739.         echo '<form name="values" action="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=update_value' . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '" method="post">';
  740.         echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']);
  741.         $inputs = '';
  742.         for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
  743.           $value_name = $db->Execute("select products_options_values_name
  744.                                      from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
  745.                                      where products_options_values_id = '" . (int)$values_values->fields['products_options_values_id'] . "' and language_id = '" . (int)$languages[$i]['id'] . "'");
  746.           $inputs .= $languages[$i]['code'] . ':&nbsp;<input type="text" name="value_name[' . $languages[$i]['id'] . ']" ' . zen_set_field_length(TABLE_PRODUCTS_OPTIONS_VALUES, 'products_options_values_name', 50) . ' value="' . zen_output_string($value_name->fields['products_options_values_name']) . '">&nbsp;<br />';
  747.         }
  748.           $products_options_values_sort_order = $db->Execute("select distinct products_options_values_sort_order from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$values_values->fields['products_options_values_id'] . "'");
  749.           $inputs2 .= '&nbsp;<input type="text" name="products_options_values_sort_order" size="4" value="' . $products_options_values_sort_order->fields['products_options_values_sort_order'] . '">&nbsp;';
  750. ?>
  751.                 <td align="center" class="attributeBoxContent">&nbsp;<?php echo $values_values->fields['products_options_values_id']; ?><input type="hidden" name="value_id" value="<?php echo $values_values->fields['products_options_values_id']; ?>">&nbsp;</td>
  752.                 <td align="center" class="attributeBoxContent">&nbsp;<?php echo "\n"; ?><select name="option_id">
  753. <?php
  754.         $options_values = $db->Execute("select products_options_id, products_options_name, products_options_type
  755.                                       from " . TABLE_PRODUCTS_OPTIONS . "
  756.                                       where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "'
  757.                                       order by products_options_name");
  758.  
  759.         while (!$options_values->EOF) {
  760.           echo "\n" . '<option name="' . $options_values->fields['products_options_name'] . '" value="' . $options_values->fields['products_options_id'] . '"';
  761.           if ($values_values->fields['products_options_id'] == $options_values->fields['products_options_id']) {
  762.             echo ' selected';
  763.           }
  764.           echo '>' . $options_values->fields['products_options_name'] . '</option>';
  765.           $options_values->MoveNext();
  766.         }
  767. ?>
  768.                 </select>&nbsp;</td>
  769.                 <td height="50" class="attributeBoxContent"><?php echo $inputs; ?></td>
  770.                 <td class="attributeBoxContent" align="right"><?php echo $inputs2; ?></td>
  771.                 <td align="center" class="attributeBoxContent">&nbsp;<?php echo zen_image_submit('button_update.gif', IMAGE_UPDATE); ?>&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_cancel.gif', IMAGE_CANCEL); ?></a>&nbsp;</td>
  772. <?php
  773.         echo '</form>';
  774.       } else {
  775. // iii 030813 added:  option ID to parameter list of delete button's href
  776. // allows delete to specify just that option/value pair when deleting from
  777. // the TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS table
  778. ?>
  779.                 <td align="center" class="smallText">&nbsp;<?php echo $values_values->fields["products_options_values_id"]; ?>&nbsp;</td>
  780.                 <td align="center" class="smallText">&nbsp;<?php echo $options_name; ?>&nbsp;</td>
  781.                 <td class="smallText">&nbsp;<?php echo $values_name; ?>&nbsp;</td>
  782.                 <td class="smallText" align="right"><?php echo $values_values->fields['products_options_values_sort_order']; ?></td>
  783. <?php
  784. // hide buttons when editing
  785.   if ($action== 'update_option_value') {
  786. ?>
  787.             <td width='120' align="center" class="smallText">&nbsp;</td>
  788. <?php
  789.   } else {
  790. ?>
  791. <!--                <td align="center" class="smallText">&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=update_option_value&value_id=' . $values_values->fields['products_options_values_id'] . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] : ''), 'NONSSL') . '">'; ?><?php echo zen_image_button('button_edit.gif', IMAGE_UPDATE); ?></a>&nbsp;&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_option_value&value_id=' . $values_values->fields['products_options_values_id'] . '&option_id=' . $option_id, 'NONSSL') , '">'; ?><?php echo zen_image_button('button_delete.gif', IMAGE_DELETE); ?></a>&nbsp;</td> -->
  792.                 <td align="center" class="smallText">&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=update_option_value&value_id=' . $values_values->fields['products_options_values_id'] . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '">'; ?><?php echo zen_image_button('button_edit.gif', IMAGE_UPDATE); ?></a>&nbsp;&nbsp;<?php echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_option_value&value_id=' . $values_values->fields['products_options_values_id'] . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) , '">'; ?><?php echo zen_image_button('button_delete.gif', IMAGE_DELETE); ?></a>&nbsp;</td>
  793. <?php
  794. //    $values_values->MoveNext();
  795.   }
  796. ?>
  797. <?php
  798.       }
  799.       $max_values_id_values = $db->Execute("select max(products_options_values_id) + 1
  800.                                           as next_id from " . TABLE_PRODUCTS_OPTIONS_VALUES);
  801.  
  802.       $next_id = $max_values_id_values->fields['next_id'];
  803. // good one
  804.       $values_values->MoveNext();
  805.     }
  806. ?>
  807.               </tr>
  808.               <tr>
  809.                 <td colspan="5"><?php echo zen_black_line(); ?></td>
  810.               </tr>
  811. <?php
  812.     if ($action != 'update_option_value') {
  813. ?>
  814.               <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
  815. <?php
  816.       echo '<form name="values" action="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=add_product_option_values' . (isset($_GET['option_page']) ? '&option_page=' . $_GET['option_page'] . '&' : '') . (isset($_GET['value_page']) ? '&value_page=' . $_GET['value_page'] . '&' : '') . (isset($_GET['attribute_page']) ? '&attribute_page=' . $_GET['attribute_page'] : '') ) . '" method="post">';echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']);
  817. ?>
  818.                 <td align="center" class="smallText">&nbsp;<?php echo $next_id; ?>&nbsp;</td>
  819.                 <td align="center" class="smallText">&nbsp;<select name="option_id">
  820. <?php
  821.       $options_values = $db->Execute("select products_options_id, products_options_name, products_options_type
  822.                                      from " . TABLE_PRODUCTS_OPTIONS . "
  823.                                      where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "'
  824.                                      order by products_options_name");
  825.  
  826.       while (!$options_values->EOF) {
  827.         echo '<option name="' . $options_values->fields['products_options_name'] . '" value="' . $options_values->fields['products_options_id'] . '">' . $options_values->fields['products_options_name'] . '</option>';
  828.         $options_values->MoveNext();
  829.       }
  830.  
  831.       $inputs = '';
  832.       $inputs = '';
  833.       for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
  834.         $inputs .= $languages[$i]['code'] . ':&nbsp;<input type="text" name="value_name[' . $languages[$i]['id'] . ']" ' . zen_set_field_length(TABLE_PRODUCTS_OPTIONS_VALUES, 'products_options_values_name', 50) . '>&nbsp;<br />';
  835.       }
  836.         $inputs2 .= TEXT_SORT . '<input type="text" name="products_options_values_sort_order" size="4">&nbsp;';
  837. ?>
  838.                 </select>&nbsp;</td>
  839.                 <td class="smallText"><input type="hidden" name="value_id" value="<?php echo $next_id; ?>"><?php echo $inputs; ?></td>
  840.                 <td colspan="1" class="smallText"><input type="hidden" name="value_id" value="<?php echo $next_id; ?>"><?php echo $inputs2; ?></td>
  841.                 <td align="center" class="smallText">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
  842. <?php
  843.       echo '</form>';
  844. ?>
  845.               </tr>
  846.               <tr>
  847.                 <td colspan="5"><?php echo zen_black_line(); ?></td>
  848.               </tr>
  849. <?php
  850.     }
  851.   }
  852. ?>
  853.             </td>
  854.           </tr>
  855.  
  856.  
  857. <?php if ($_SESSION['option_names_values_copier'] == '0') { ?>
  858.   <table align="center" width="90%">
  859.     <tr>
  860.       <td><?php echo zen_draw_separator('pixel_trans.gif', '100%', '5'); ?></td>
  861.     </tr>
  862.     <tr>
  863.       <td class="pageHeading" align="center"><?php echo TEXT_INFO_OPTION_NAMES_VALUES_COPIER_STATUS; ?></td>
  864.     </tr>
  865.     <tr>
  866.       <td><?php echo zen_draw_separator('pixel_trans.gif', '100%', '5'); ?></td>
  867.     </tr>
  868.   </table>
  869. <?php } else { ?>
  870.  
  871. <?php
  872.   // bof: build dropdowns for delete and add
  873.  
  874. /*
  875.   this builds the resulting values for use in the case statements above
  876.       $options_id_from = $_POST['options_id_from'];
  877.       $options_values_values_id_from = $_POST['options_values_values_id_from'];
  878.  
  879.       $options_id_to = $_POST['options_id_to'];
  880.       $options_values_values_id_to = $_POST['options_values_values_id_to'];
  881. */
  882.  
  883.   // build dropdown for option_name from
  884.   $options_values_from = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_name !='' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "' order by products_options_name");
  885.   while(!$options_values_from->EOF) {
  886.     $option_from_dropdown .= "\n" . '  <option name="' . $options_values_from->fields['products_options_name'] . '" value="' . $options_values_from->fields['products_options_id'] . '">' . $options_values_from->fields['products_options_name'] . '</option>';
  887.     $options_values_from->MoveNext();
  888.   }
  889.  
  890.   $option_to_dropdown= $option_from_dropdown;
  891.  
  892.   $option_from_dropdown = "\n" . '<select name="options_id_from">' . $option_from_dropdown;
  893.   $option_from_dropdown.= "\n" . '</select>';
  894.  
  895.   $option_to_dropdown = "\n" . '<select name="options_id_to">' . $option_to_dropdown;
  896.   $option_to_dropdown.= "\n" . '</select>';
  897.  
  898.   // build dropdown for option_values from
  899.   $options_values_values_from = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_values_id !='0' order by products_options_values_name");
  900.   while(!$options_values_values_from->EOF) {
  901. // BOM by zen-cart.cn
  902.     $show_option_name= '&nbsp;&nbsp;&nbsp;[' . GBcase(zen_get_products_options_name_from_value($options_values_values_from->fields['products_options_values_id']),"upper") . ']';
  903. // EOM by zen-cart.cn
  904.     $option_values_from_dropdown .= "\n" . '  <option name="' . $options_values_values_from->fields['products_options_values_name'] . '" value="' . $options_values_values_from->fields['products_options_values_id'] . '">' . $options_values_values_from->fields['products_options_values_name'] . $show_option_name . '</option>'; echo zen_draw_hidden_field('option_value_from_filter', $_GET['options_id_from']);
  905.     $options_values_values_from->MoveNext();
  906.   }
  907.  
  908.   $option_values_to_dropdown = $option_values_from_dropdown;
  909.  
  910.   $option_values_from_dropdown = "\n" . '<select name="options_values_values_id_from">' . $option_values_from_dropdown;
  911.   $option_values_from_dropdown .= "\n" . '</select>';
  912.  
  913.   $option_values_to_dropdown = "\n" . '<select name="options_values_values_id_to">' . $option_values_to_dropdown;
  914.   $option_values_to_dropdown .= "\n" . '</select>';
  915.  
  916.   $to_categories_id = TEXT_SELECT_OPTION_VALUES_TO_CATEGORIES_ID . '<br />&nbsp;<input type="text" name="copy_to_categories_id" size="4">&nbsp;';
  917.  
  918.   $options_id_from_products_id = TEXT_SELECT_OPTION_FROM_PRODUCTS_ID . '&nbsp;<input type="text" name="copy_from_products_id" size="4">&nbsp;';
  919.  
  920.   // eof: build dropdowns for delete and add
  921. ?>
  922.  
  923. <!--
  924. bof: copy Option Name and Value From to Option Name and Value to - all products
  925. example: Copy Color Red to products with Size Small
  926. -->
  927.  
  928.             <tr>
  929.               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
  930.             </tr>
  931.             <tr>
  932.               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_ALL; ?></td>
  933.               <td class="main" colspan="1"> </td>
  934.             </tr>
  935.             <tr>
  936.               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_ALL; ?></td>
  937.               <td class="main" colspan="1"> </td>
  938.             </tr>
  939.             <tr class="dataTableHeadingRow">
  940.               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
  941.                 <tr class="dataTableHeadingRow">
  942.                   <form name="quick_jump" method="post" action="<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=copy_options_values_one_to_another', 'NONSSL'); ?>"><?php echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']); ?>
  943.                   <td class="dataTableHeadingContent">
  944.                   <?php echo
  945.                   TEXT_SELECT_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
  946.                   TEXT_SELECT_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
  947.                   </td>
  948.                   <td class="dataTableHeadingContent">
  949.                   <?php echo
  950.                   TEXT_SELECT_OPTION_TO . '<br />' . $option_to_dropdown . '&nbsp<br />' .
  951.                   TEXT_SELECT_OPTION_VALUES_TO . '<br />' . $option_values_to_dropdown;?>&nbsp;
  952.                   </td>
  953.                   <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
  954.                   <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
  955.                   </form>
  956.                 </tr>
  957.               </table></td>
  958.             </tr>
  959. <!-- eof: copy all option values to another Option Name -->
  960.  
  961.  
  962. <!--
  963. bof: delete all Option Name for an Value
  964. example: Delete Color Red
  965. -->
  966.  
  967.             <tr>
  968.               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
  969.             </tr>
  970.             <tr>
  971.               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_DELETE_ALL; ?></td>
  972.               <td class="main" colspan="1"> </td>
  973.             </tr>
  974.             <tr>
  975.               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_DELETE_ALL; ?></td>
  976.               <td class="main" colspan="1"> </td>
  977.             </tr>
  978.             <tr class="dataTableHeadingRow">
  979.               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
  980.                 <tr class="dataTableHeadingRow">
  981.                   <form name="quick_jump" method="post" action="<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_options_values_of_option_name', 'NONSSL'); ?>"><?php echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']); ?>
  982.                   <td class="dataTableHeadingContent">
  983.                   <?php echo
  984.                   TEXT_SELECT_DELETE_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
  985.                   TEXT_SELECT_DELETE_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
  986.                   </td>
  987.                   <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
  988.                   <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_delete.gif', IMAGE_DELETE); ?>&nbsp;</td>
  989.                   </form>
  990.                 </tr>
  991.               </table></td>
  992.             </tr>
  993. <!-- eof: delete all matching option name for option values -->
  994.  
  995.  
  996. <!--
  997. bof: copy Option Name and Value From to Option Name and Value to - all products
  998. example: Copy Color Red to products with Size Small
  999. -->
  1000.  
  1001.             <tr>
  1002.               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
  1003.             </tr>
  1004.             <tr>
  1005.               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
  1006.               <td class="main" colspan="1"> </td>
  1007.             </tr>
  1008.             <tr>
  1009.               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
  1010.               <td class="main" colspan="1"> </td>
  1011.             </tr>
  1012.             <tr class="dataTableHeadingRow">
  1013.               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
  1014.                 <tr class="dataTableHeadingRow">
  1015.                   <form name="quick_jump" method="post" action="<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=copy_options_values_one_to_another_options_id', 'NONSSL'); ?>"><?php echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']); ?>
  1016.                   <td class="dataTableHeadingContent" valign="top">
  1017.                   <?php echo
  1018.                   TEXT_SELECT_OPTION_FROM_ADD . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
  1019.                   TEXT_SELECT_OPTION_VALUES_FROM_ADD . '<br />' . $option_values_from_dropdown . '&nbsp;<br /><br />' .
  1020.                   $options_id_from_products_id; ?>&nbsp;
  1021.                   </td>
  1022.                   <td class="dataTableHeadingContent" valign="top">
  1023.                   <?php echo
  1024.                   TEXT_SELECT_OPTION_TO_ADD_TO . '<br />' . $option_to_dropdown;?>&nbsp;
  1025.                   </td>
  1026.                   <td class="dataTableHeadingContent" valign="top">
  1027.                   <?php
  1028.                   echo $to_categories_id . '<br />' .
  1029.                   TEXT_COPY_ATTRIBUTES_CONDITIONS . '<br />' . zen_draw_radio_field('copy_attributes', 'copy_attributes_update') . ' ' . TEXT_COPY_ATTRIBUTES_UPDATE . '<br />' . zen_draw_radio_field('copy_attributes', 'copy_attributes_ignore', true) . ' ' . TEXT_COPY_ATTRIBUTES_IGNORE;
  1030.                   ?>&nbsp;</td>
  1031.                   <td align="center" class="dataTableHeadingContent" valign="top">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
  1032.                   </form>
  1033.                 </tr>
  1034.               </table></td>
  1035.             </tr>
  1036. <!-- eof: copy all option values to another Option Name -->
  1037. <?php } // show copier features ?>
  1038.  
  1039.         </table>
  1040. </td></tr></table>
  1041. <!-- option value eof //-->
  1042.  
  1043. <!-- body_text_eof //-->
  1044. <!-- footer //-->
  1045. <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
  1046. <!-- footer_eof //-->
  1047. </body>
  1048. </html>
  1049. <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
  1050.  


cron