[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文件
文件大小: 64.32 KiB
MD5: 0ba84b7c12ff338269ec90cd1bfebac9

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


cron