[ Index ]
 

Code source de Zen Cart E-Commerce Shopping Cart 1.3.7.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/admin/ -> options_values_manager.php (source)

   1  <?php
   2  /**

   3   * @package admin

   4   * @copyright Copyright 2003-2006 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 4280 2006-08-26 03:32:55Z drbyte $

   8   */
   9  
  10    require ('includes/application_top.php');
  11  
  12    // verify option names and values

  13    $chk_option_names = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id='" . $_SESSION['languages_id'] . "' limit 1");
  14    if ($chk_option_names->RecordCount() < 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            $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
  73                                  from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
  74                                  left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
  75                                  where pov.language_id= '" . $languages[$i]['id'] . "'
  76                                  and pov.products_options_values_name='" . zen_db_input($value_name) . "'
  77                                  and pov2po.products_options_id ='" . (int)$option_id .
  78                                  "'");
  79  
  80            if ($check->RecordCount() > 1 and !empty($value_name)) {
  81              while (!$check->EOF) {
  82                $check_dups .= ' - ' . $check->fields['products_options_values_id'];
  83                $check->MoveNext();
  84              }
  85              $duplicate_option_values .= ' <b>' . strtoupper(zen_get_language_name($languages[$i]['id'])) . '</b> : ' . $check_dups;
  86            }
  87          }
  88          if (!empty($duplicate_option_values)) {
  89            $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
  90          }
  91  
  92          zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
  93          break;
  94        case 'update_value':
  95          $value_name_array = $_POST['value_name'];
  96          $value_id = zen_db_prepare_input($_POST['value_id']);
  97          $option_id = zen_db_prepare_input($_POST['option_id']);
  98          $products_options_values_sort_order = zen_db_prepare_input($_POST['products_options_values_sort_order']);
  99  
 100          for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
 101            $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
 102  
 103            $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES . "
 104                          set products_options_values_name = '" . zen_db_input($value_name) . "', products_options_values_sort_order = '" . (int)$products_options_values_sort_order . "'
 105                          where products_options_values_id = '" . zen_db_input($value_id) . "'
 106                          and language_id = '" . (int)$languages[$i]['id'] . "'");
 107  
 108          }
 109  
 110          $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
 111                        set products_options_id = '" . (int)$option_id . "'
 112                        where products_options_values_id = '" . (int)$value_id . "'");
 113  
 114  
 115  // alert if possible duplicate

 116          $duplicate_option_values= '';
 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            $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
 121                                  from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
 122                                  left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
 123                                  where pov.language_id= '" . $languages[$i]['id'] . "'
 124                                  and pov.products_options_values_name='" . zen_db_input($value_name) . "'
 125                                  and pov2po.products_options_id ='" . (int)$option_id .
 126                                  "'");
 127  
 128            if ($check->RecordCount() > 1 and !empty($value_name)) {
 129              while (!$check->EOF) {
 130                $check_dups .= ' - ' . $check->fields['products_options_values_id'];
 131                $check->MoveNext();
 132              }
 133              $duplicate_option_values .= ' <b>' . strtoupper(zen_get_language_name($languages[$i]['id'])) . '</b> : ' . $check_dups;
 134            }
 135          }
 136          if (!empty($duplicate_option_values)) {
 137            $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
 138          }
 139  
 140          zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
 141          break;
 142        case 'delete_value':
 143          // demo active test

 144          if (zen_admin_demo()) {
 145            $_GET['action']= '';
 146            $messageStack->add_session(ERROR_ADMIN_DEMO, 'caution');
 147            zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
 148          }
 149          $value_id = zen_db_prepare_input($_GET['value_id']);
 150  
 151  // remove all attributes from products with value

 152          $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 . "'");
 153          if ($remove_attributes_query->RecordCount() > 0) {
 154            // clean all tables of option value

 155            While (!$remove_attributes_query->EOF) {
 156  
 157              $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
 158                            where products_attributes_id='" . $remove_attributes_query->fields['products_attributes_id'] . "'");
 159  
 160              $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES . "
 161                            where options_values_id='" . $remove_attributes_query->fields['options_values_id'] . "'");
 162  
 163              $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
 164                            where products_options_values_id = '" . $remove_attributes_query->fields['options_values_id'] . "'");
 165  
 166              $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
 167                            where products_options_values_id = '" . $remove_attributes_query->fields['options_values_id'] . "'");
 168  
 169              $remove_attributes_query->MoveNext();
 170            }
 171          } else {
 172            // remove option value only

 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          }
 180          zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
 181          break;
 182  
 183  ////////////////////////////////////////////////////

 184  // copy option values based on existance of another option value

 185      case 'copy_options_values_one_to_another':
 186  
 187        $options_id_from = $_POST['options_id_from'];
 188        $options_values_values_id_from = $_POST['options_values_values_id_from'];
 189  
 190        $options_id_to = $_POST['options_id_to'];
 191        $options_values_values_id_to = $_POST['options_values_values_id_to'];
 192  
 193        // one category of products or all products

 194        if ($_POST['copy_to_categories_id'] != '') {
 195          $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 . "')");
 196        } else {
 197          $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 . "'");
 198        }
 199  
 200  /*

 201  // debug code

 202              while(!$products_only->EOF) {

 203                echo 'Product ' . $products_only->fields['products_id'] . '<br>';

 204                $products_only->MoveNext();

 205              }

 206  

 207  

 208  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());

 209  */
 210  
 211  
 212        if ($_POST['copy_to_categories_id'] == '') {
 213          $zc_categories = ' All Products ';
 214        } else {
 215          $zc_categories = ' Category: ' . $_POST['copy_to_categories_id'];
 216        }
 217  
 218        $new_attribute=0;
 219  
 220        if ($options_values_values_id_from == $options_values_values_id_to) {
 221          // cannot copy to self

 222          $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');
 223        } else {
 224          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)) {
 225            $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');
 226          } else {
 227            // check for existing combination

 228            if ($products_only->RecordCount() > 0) {
 229              // check existing matching products and add new attributes

 230              while(!$products_only->EOF) {
 231                $current_products_id = $products_only->fields['products_id'];
 232                $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 . "')";
 233                $check_previous = $db->Execute("select * 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");
 234                // do not add duplicate attributes

 235                if ($check_previous->RecordCount() < 1) {
 236                  $db->Execute($sql);
 237                  $new_attribute++;
 238                }
 239                $products_only->MoveNext();
 240              }
 241  
 242              // display how many products were updated

 243              if ($new_attribute < 1) {
 244                // nothing was added due to duplicates

 245                $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');
 246              } else {
 247                // successful addition of new attributes that were not duplicates

 248                $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');
 249              }
 250            } else {
 251              // warning nothing to copy

 252              $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');
 253            }
 254          } // mismatch

 255        } // same option value

 256      break;
 257  ////////////////////////////////////

 258  
 259  // fix here copy_options_values_one_to_another_options_id

 260  
 261  ////////////////////////////////////////////////////

 262  // copy option values based on existance of another option value

 263      case 'copy_options_values_one_to_another_options_id':
 264  
 265        $options_id_from = $_POST['options_id_from'];
 266        $options_values_values_id_from = $_POST['options_values_values_id_from'];
 267        $copy_from_products_id = $_POST['copy_from_products_id'];
 268  
 269        $options_id_to = $_POST['options_id_to'];
 270        $options_values_values_id_to = $_POST['options_values_values_id_to'];
 271  
 272        // one category of products or all products

 273        if ($_POST['copy_to_categories_id'] != '') {
 274          $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 . "')");
 275        } else {
 276          $products_only = $db->Execute("select distinct pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . $options_id_to . "'");
 277        }
 278  
 279        $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 . "'");
 280  
 281        $options_id = zen_db_prepare_input($options_id_from);
 282        $values_id = zen_db_prepare_input($options_values_values_id_from);
 283  
 284        if (!$products_attributes_defaults->EOF) {
 285          $options_values_price = zen_db_prepare_input($products_attributes_defaults->fields['options_values_price']);
 286          $price_prefix = zen_db_prepare_input($products_attributes_defaults->fields['price_prefix']);
 287  
 288          $products_options_sort_order = zen_db_prepare_input($products_attributes_defaults->fields['products_options_sort_order']);
 289          $product_attribute_is_free = zen_db_prepare_input($products_attributes_defaults->fields['product_attribute_is_free']);
 290          $products_attributes_weight = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight']);
 291          $products_attributes_weight_prefix = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight_prefix']);
 292          $attributes_display_only = zen_db_prepare_input($products_attributes_defaults->fields['attributes_display_only']);
 293          $attributes_default = zen_db_prepare_input($products_attributes_defaults->fields['attributes_default']);
 294          $attributes_discounted = zen_db_prepare_input($products_attributes_defaults->fields['attributes_discounted']);
 295          $attributes_price_base_included = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_base_included']);
 296  
 297          $attributes_price_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_onetime']);
 298          $attributes_price_factor = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor']);
 299          $attributes_price_factor_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_offset']);
 300          $attributes_price_factor_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime']);
 301          $attributes_price_factor_onetime_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime_offset']);
 302          $attributes_qty_prices = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices']);
 303          $attributes_qty_prices_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices_onetime']);
 304  
 305          $attributes_price_words = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words']);
 306          $attributes_price_words_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words_free']);
 307          $attributes_price_letters = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters']);
 308          $attributes_price_letters_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters_free']);
 309          $attributes_required = zen_db_prepare_input($products_attributes_defaults->fields['attributes_required']);
 310        }
 311  
 312  /*

 313  /////

 314  // debug code

 315              while(!$products_only->EOF) {

 316                echo 'Product ' . $products_only->fields['products_id'] . '<br>';

 317                $products_only->MoveNext();

 318              }

 319  

 320  

 321  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>' .

 322  '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']

 323  );

 324  /////

 325  */
 326  
 327        if ($_POST['copy_to_categories_id'] == '') {
 328          $zc_categories = ' All Products ';
 329        } else {
 330          $zc_categories = ' Category: ' . $_POST['copy_to_categories_id'];
 331        }
 332  
 333        $new_attribute=0;
 334  
 335          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 != '')) {
 336            if ($products_attributes_defaults->EOF and $copy_from_products_id != '') {
 337            // bad product_id with no match

 338              $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');
 339            } else {
 340            // mismatched Option Name/Value

 341              $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');
 342            }
 343          } else {
 344            // check for existing combination

 345            if ($products_only->RecordCount() > 0) {
 346              // check existing matching products and add new attributes

 347  
 348              while(!$products_only->EOF) {
 349                $current_products_id = $products_only->fields['products_id'];
 350  
 351  //              $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 . "')";

 352                  $sql = "insert into " . TABLE_PRODUCTS_ATTRIBUTES . "
 353                            values (0,
 354                                    '" . (int)$current_products_id . "',
 355                                    '" . (int)$options_id . "',
 356                                    '" . (int)$values_id . "',
 357                                    '" . zen_db_input($options_values_price) . "',
 358                                    '" . zen_db_input($price_prefix) . "',
 359                                    '" . (int)zen_db_input($products_options_sort_order) . "',
 360                                    '" . (int)zen_db_input($product_attribute_is_free) . "',
 361                                    '" . (float)zen_db_input($products_attributes_weight) . "',
 362                                    '" . zen_db_input($products_attributes_weight_prefix) . "',
 363                                    '" . (int)zen_db_input($attributes_display_only) . "',
 364                                    '" . (int)zen_db_input($attributes_default) . "',
 365                                    '" . (int)zen_db_input($attributes_discounted) . "',
 366                                    '" . zen_db_input($attributes_image_name) . "',
 367                                    '" . (int)zen_db_input($attributes_price_base_included) . "',
 368                                    '" . (float)zen_db_input($attributes_price_onetime) . "',
 369                                    '" . (float)zen_db_input($attributes_price_factor) . "',
 370                                    '" . (float)zen_db_input($attributes_price_factor_offset) . "',
 371                                    '" . (float)zen_db_input($attributes_price_factor_onetime) . "',
 372                                    '" . (float)zen_db_input($attributes_price_factor_onetime_offset) . "',
 373                                    '" . zen_db_input($attributes_qty_prices) . "',
 374                                    '" . zen_db_input($attributes_qty_prices_onetime) . "',
 375                                    '" . (float)zen_db_input($attributes_price_words) . "',
 376                                    '" . (int)zen_db_input($attributes_price_words_free) . "',
 377                                    '" . (float)zen_db_input($attributes_price_letters) . "',
 378                                    '" . (int)zen_db_input($attributes_price_letters_free) . "',
 379                                    '" . (int)zen_db_input($attributes_required) . "')";
 380  
 381                $check_previous = $db->Execute("select * 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");
 382                // do not add duplicate attributes

 383                if ($check_previous->RecordCount() < 1) {
 384                // add new attribute

 385                  $db->Execute($sql);
 386                  //echo $sql . '<br>';

 387                  $new_attribute++;
 388                } else {
 389                  // ignore

 390                  if ($_POST['copy_attributes'] == 'copy_attributes_ignore') {
 391                    //echo 'skipped already exists: ' . $current_products_id . '<br>';

 392                  } else {
 393                  // delete old and add new

 394                  //echo 'delete old and add new: ' . $current_products_id . '<br>';

 395                    $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 . "'");
 396                    $db->Execute($sql);
 397                    $new_attribute++;
 398                  }
 399                }
 400                $products_only->MoveNext();
 401              }
 402  
 403              // display how many products were updated

 404              if ($new_attribute < 1) {
 405                // nothing was added

 406                $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');
 407              } else {
 408                // successful addition of new attributes that were not duplicates

 409                $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');
 410              }
 411            } else {
 412              // warning nothing to copy

 413              $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');
 414            }
 415          } // mismatch

 416      break;
 417  ////////////////////////////////////

 418  
 419  
 420  
 421  
 422      case ('delete_options_values_of_option_name'):
 423  
 424        $options_id_from = $_POST['options_id_from'];
 425        $options_values_values_id_from = $_POST['options_values_values_id_from'];
 426  
 427        // one category of products or all products

 428        if ($_POST['copy_to_categories_id'] != '') {
 429          $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 . "')");
 430        } else {
 431          $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 . "'");
 432        }
 433  
 434        if ($_POST['copy_to_categories_id'] == '') {
 435          $zc_categories = ' All Products ';
 436        } else {
 437          $zc_categories = ' Category: ' . $_POST['copy_to_categories_id'];
 438        }
 439  
 440        $new_attribute=0;
 441  
 442        if (!zen_validate_options_to_options_value($options_id_from, $options_values_values_id_from)) {
 443          $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');
 444        } else {
 445          // check for existing combination

 446          if ($products_only->RecordCount() > 0) {
 447            // check existing matching products and add new attributes

 448            while(!$products_only->EOF) {
 449              $current_products_id = $products_only->fields['products_id'];
 450  
 451              // check for associated downloads

 452              $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 . "'";
 453              $downloads_remove = $db->Execute($downloads_remove_query);
 454  
 455              $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 . "'";
 456              $delete_selected = $db->Execute($sql);
 457  
 458              // delete associated downloads

 459              while (!$downloads_remove->EOF) {
 460                $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
 461                              where products_attributes_id='" . $downloads_remove->fields['products_attributes_id'] . "'");
 462                $downloads_remove->MoveNext();
 463              }
 464              // count deleted attribute

 465              $new_attribute++;
 466              $products_only->MoveNext();
 467            }
 468  
 469            // display how many products were updated

 470            if ($new_attribute < 1) {
 471              // nothing was added due to duplicates

 472              $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');
 473            } else {
 474              // successful addition of new attributes that were not duplicates

 475              $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');
 476            }
 477          } else {
 478            // warning nothing to copy

 479            $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');
 480          }
 481        } // mismatch

 482  
 483      break;
 484      }
 485  
 486  
 487    }
 488  ?>
 489  <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
 490  <html <?php echo HTML_PARAMS; ?>>
 491  <head>
 492  <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
 493  <title><?php echo TITLE; ?></title>
 494  <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
 495  <link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
 496  <script language="javascript" src="includes/menu.js"></script>
 497  <script language="javascript"><!--
 498  function go_option() {
 499    if (document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value != "none") {
 500      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;
 501    }
 502  }
 503  //--></script>

 504  <script type="text/javascript">
 505    <!--
 506    function init()
 507    {
 508      cssjsmenu('navbar');
 509      if (document.getElementById)
 510      {
 511        var kill = document.getElementById('hoverJS');
 512        kill.disabled = true;
 513      }
 514    }
 515    // -->

 516  </script>
 517  </head>
 518  <body onload="init()">
 519  <!-- header //-->
 520  <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
 521    <table border="0" width="75%" cellspacing="0" cellpadding="0" align="center">
 522        <tr>
 523          <td width="100%">
 524             <table width="100%" border="0" cellspacing="0" cellpadding="2">
 525               <tr>
 526                 <td height="40" valign="bottom">
 527                   <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;
 528                     <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>
 529                   </td>
 530                  <td class="main" height="40" valign="bottom">
 531                  <?php
 532  // toggle switch for show copier features

 533                    $option_names_values_copier_array = array(array('id' => '0', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_OFF),
 534                                          array('id' => '1', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_ON),
 535                                          );
 536                    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();"') .
 537                    zen_hide_session_id() . 
 538                    zen_draw_hidden_field('action', 'set_option_names_values_copier') .
 539                    '</form>';
 540                  ?>
 541                </td>
 542                 <td class="main" align="right" valign="bottom"><?php echo TEXT_PRODUCT_OPTIONS_INFO; ?></td>
 543               </tr>
 544            </table>
 545         </td>
 546       </tr>
 547       <tr>
 548          <td valign="top" width="50%">
 549             <table width="100%" border="0" cellspacing="0" cellpadding="2">
 550  <!-- value //-->
 551  <?php
 552    if ($action == 'delete_option_value') { // delete product option value
 553      $values_values = $db->Execute("select products_options_values_id, products_options_values_name
 554                                     from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
 555                                     where products_options_values_id = '" . (int)$_GET['value_id'] . "'
 556                                     and language_id = '" . (int)$_SESSION['languages_id'] . "'");
 557  
 558  ?>
 559                <tr>
 560                  <td colspan="3" class="pageHeading">&nbsp;<?php echo $values_values->fields['products_options_values_name']; ?>&nbsp;</td>
 561                </tr>
 562                <tr>
 563                  <td colspan="4"><?php echo zen_black_line(); ?></td>
 564                </tr>
 565  <?php
 566      $products_values = $db->Execute("select p.products_id, pd.products_name, po.products_options_name, pa.options_id
 567                                from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_ATTRIBUTES . " pa, "
 568                                       . TABLE_PRODUCTS_OPTIONS . " po, " . TABLE_PRODUCTS_DESCRIPTION . " pd
 569                                where pd.products_id = p.products_id
 570                                and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
 571                                and po.language_id = '" . (int)$_SESSION['languages_id'] . "'
 572                                and pa.products_id = p.products_id
 573                                and pa.options_values_id='" . (int)$_GET['value_id'] . "'
 574                                and po.products_options_id = pa.options_id
 575                                order by pd.products_name");
 576  
 577      if ($products_values->RecordCount() > 0) {
 578  ?>
 579  <?php
 580  // extra cancel button

 581      if ($products_values->RecordCount() > 10) {
 582  ?>
 583                    <tr>
 584                      <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
 585                      <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>
 586                    </tr>
 587  <?php
 588    } // extra cancel

 589  ?>
 590                    <tr class="dataTableHeadingRow">
 591                      <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
 592                      <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_PRODUCT; ?>&nbsp;</td>
 593                      <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_SORT_ORDER; ?>&nbsp;</td>
 594                      <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
 595                    </tr>
 596                    <tr>
 597                      <td colspan="4"><?php echo zen_black_line(); ?></td>
 598                    </tr>
 599  
 600  <?php
 601        while (!$products_values->EOF) {
 602          $rows++;
 603  ?>
 604                    <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
 605                      <td align="center" class="smallText">&nbsp;<?php echo $products_values->fields['products_id']; ?>&nbsp;</td>
 606                      <td class="smallText">&nbsp;<?php echo $products_values->fields['products_name']; ?>&nbsp;</td>
 607                      <td class="smallText" align="right">&nbsp;<?php echo $options_values->fields["products_options_sort_order"]; ?>&nbsp;</td>
 608                      <td class="smallText">&nbsp;<?php echo $products_values->fields['products_options_name']; ?>&nbsp;</td>
 609                    </tr>
 610  <?php
 611          $products_values->MoveNext();
 612        }
 613  ?>
 614                    <tr>
 615                      <td colspan="4"><?php echo zen_black_line(); ?></td>
 616                    </tr>
 617                    <tr>
 618                      <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
 619                      <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>
 620                    </tr>
 621  <?php
 622      } else {
 623  ?>
 624                    <tr>
 625                      <td class="main" colspan="3"><br /><?php echo TEXT_OK_TO_DELETE; ?></td>
 626                    </tr>
 627                    <tr>
 628                      <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>
 629                    </tr>
 630  <?php
 631      }
 632  ?>
 633                  </table></td>
 634                </tr>
 635  <?php
 636    } else {
 637  ?>
 638                <tr>
 639                  <td colspan="3" class="pageHeading">&nbsp;<?php echo HEADING_TITLE_VAL; ?>&nbsp;</td>
 640                </tr>
 641                <tr>
 642                  <td colspan="5" class="smallText">
 643  <?php
 644      $per_page = MAX_ROW_LISTS_OPTIONS;
 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 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";

 646      $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 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";
 647      if (!isset($_GET['value_page'])) {
 648        $_GET['value_page'] = 1;
 649      }
 650      $prev_value_page = $_GET['value_page'] - 1;
 651      $next_value_page = $_GET['value_page'] + 1;
 652  
 653      $value_query = $db->Execute($values);
 654  
 655      $value_page_start = ($per_page * $_GET['value_page']) - $per_page;
 656      $num_rows = $value_query->RecordCount();
 657  
 658      if ($num_rows <= $per_page) {
 659        $num_pages = 1;
 660      } else if (($num_rows % $per_page) == 0) {
 661        $num_pages = ($num_rows / $per_page);
 662      } else {
 663        $num_pages = ($num_rows / $per_page) + 1;
 664      }
 665      $num_pages = (int) $num_pages;
 666  
 667  // fix limit error on some versions

 668      if ($value_page_start < 0) { $value_page_start = 0; }
 669  
 670      $values = $values . " LIMIT $value_page_start, $per_page";
 671  
 672      // Previous

 673      if ($prev_value_page)  {
 674        echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'option_order_by=' . $option_order_by . '&value_page=' . $prev_value_page) . '"> &lt;&lt; </a> | ';
 675      }
 676  
 677      for ($i = 1; $i <= $num_pages; $i++) {
 678        if ($i != $_GET['value_page']) {
 679           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> | ';
 680        } else {
 681           echo '<b><font color=red>' . $i . '</font></b> | ';
 682        }
 683      }
 684  
 685      // Next

 686      if ($_GET['value_page'] != $num_pages) {
 687        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> ';
 688      }
 689  ?>
 690                  </td>
 691                </tr>
 692                <tr>
 693                  <td colspan="6"><?php echo zen_black_line(); ?></td>
 694                </tr>
 695                <tr class="dataTableHeadingRow">
 696                  <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
 697                  <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
 698                  <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_VALUE; ?>&nbsp;</td>
 699                  <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_VALUE_SORT_ORDER; ?></td>
 700                  <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td>
 701                </tr>
 702                <tr>
 703                  <td colspan="6"><?php echo zen_black_line(); ?></td>
 704                </tr>
 705  <?php
 706      $next_id = 1;
 707      $rows = 0;
 708      $values_values = $db->Execute($values);
 709      while (!$values_values->EOF) {
 710        $options_name = zen_options_name($values_values->fields['products_options_id']);
 711  // iii 030813 added: Option Type Feature and File Uploading

 712  // fetch products_options_id for use if the option value is deleted

 713  // with TEXT and FILE Options, there are multiple options for the single TEXT

 714  // value and only the single reference should be deleted

 715        $option_id = $values_values->fields['products_options_id'];
 716  
 717        $values_name = $values_values->fields['products_options_values_name'];
 718        $products_options_values_sort_order = $values_values->fields['products_options_values_sort_order'];
 719        $rows++;
 720  ?>
 721                <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
 722  <?php
 723  // FIX HERE

 724  // edit option values

 725        if (($action == 'update_option_value') && ($_GET['value_id'] == $values_values->fields['products_options_values_id'])) {
 726          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">';
 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', 25) . ' value="' . $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"><?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">';
 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', 25) . '>&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      $show_option_name= '&nbsp;&nbsp;&nbsp;[' . strtoupper(zen_get_products_options_name_from_value($options_values_values_from->fields['products_options_values_id'])) . ']';
 888      $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']);
 889      $options_values_values_from->MoveNext();
 890    }
 891  
 892    $option_values_to_dropdown = $option_values_from_dropdown;
 893  
 894    $option_values_from_dropdown = "\n" . '<select name="options_values_values_id_from">' . $option_values_from_dropdown;
 895    $option_values_from_dropdown .= "\n" . '</select>';
 896  
 897    $option_values_to_dropdown = "\n" . '<select name="options_values_values_id_to">' . $option_values_to_dropdown;
 898    $option_values_to_dropdown .= "\n" . '</select>';
 899  
 900    $to_categories_id = TEXT_SELECT_OPTION_VALUES_TO_CATEGORIES_ID . '<br />&nbsp;<input type="text" name="copy_to_categories_id" size="4">&nbsp;';
 901  
 902    $options_id_from_products_id = TEXT_SELECT_OPTION_FROM_PRODUCTS_ID . '&nbsp;<input type="text" name="copy_from_products_id" size="4">&nbsp;';
 903  
 904    // eof: build dropdowns for delete and add

 905  ?>
 906  
 907  <!--
 908  bof: copy Option Name and Value From to Option Name and Value to - all products
 909  example: Copy Color Red to products with Size Small
 910  -->
 911  
 912              <tr>
 913                <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
 914              </tr>
 915              <tr>
 916                <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_ALL; ?></td>
 917                <td class="main" colspan="1"> </td>
 918              </tr>
 919              <tr>
 920                <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_ALL; ?></td>
 921                <td class="main" colspan="1"> </td>
 922              </tr>
 923              <tr class="dataTableHeadingRow">
 924                <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
 925                  <tr class="dataTableHeadingRow">
 926                    <form name="quick_jump" method="post" action="<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=copy_options_values_one_to_another', 'NONSSL'); ?>">
 927                    <td class="dataTableHeadingContent">
 928                    <?php echo
 929                    TEXT_SELECT_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
 930                    TEXT_SELECT_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
 931                    </td>
 932                    <td class="dataTableHeadingContent">
 933                    <?php echo
 934                    TEXT_SELECT_OPTION_TO . '<br />' . $option_to_dropdown . '&nbsp<br />' .
 935                    TEXT_SELECT_OPTION_VALUES_TO . '<br />' . $option_values_to_dropdown;?>&nbsp;
 936                    </td>
 937                    <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
 938                    <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
 939                    </form>
 940                  </tr>
 941                </table></td>
 942              </tr>
 943  <!-- eof: copy all option values to another Option Name -->
 944  
 945  
 946  <!--
 947  bof: delete all Option Name for an Value
 948  example: Delete Color Red
 949  -->
 950  
 951              <tr>
 952                <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
 953              </tr>
 954              <tr>
 955                <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_DELETE_ALL; ?></td>
 956                <td class="main" colspan="1"> </td>
 957              </tr>
 958              <tr>
 959                <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_DELETE_ALL; ?></td>
 960                <td class="main" colspan="1"> </td>
 961              </tr>
 962              <tr class="dataTableHeadingRow">
 963                <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
 964                  <tr class="dataTableHeadingRow">
 965                    <form name="quick_jump" method="post" action="<?php echo zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'action=delete_options_values_of_option_name', 'NONSSL'); ?>">
 966                    <td class="dataTableHeadingContent">
 967                    <?php echo
 968                    TEXT_SELECT_DELETE_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
 969                    TEXT_SELECT_DELETE_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
 970                    </td>
 971                    <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
 972                    <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_delete.gif', IMAGE_DELETE); ?>&nbsp;</td>
 973                    </form>
 974                  </tr>
 975                </table></td>
 976              </tr>
 977  <!-- eof: delete all matching option name for option values -->
 978  
 979  
 980  <!--
 981  bof: copy Option Name and Value From to Option Name and Value to - all products
 982  example: Copy Color Red to products with Size Small
 983  -->
 984  
 985              <tr>
 986                <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
 987              </tr>
 988              <tr>
 989                <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
 990                <td class="main" colspan="1"> </td>
 991              </tr>
 992              <tr>
 993                <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
 994                <td class="main" colspan="1"> </td>
 995              </tr>
 996              <tr class="dataTableHeadingRow">
 997                <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
 998                  <tr class="dataTableHeadingRow">
 999                    <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'); ?>">
1000                    <td class="dataTableHeadingContent" valign="top">
1001                    <?php echo
1002                    TEXT_SELECT_OPTION_FROM_ADD . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
1003                    TEXT_SELECT_OPTION_VALUES_FROM_ADD . '<br />' . $option_values_from_dropdown . '&nbsp;<br /><br />' .
1004                    $options_id_from_products_id; ?>&nbsp;
1005                    </td>
1006                    <td class="dataTableHeadingContent" valign="top">
1007                    <?php echo
1008                    TEXT_SELECT_OPTION_TO_ADD_TO . '<br />' . $option_to_dropdown;?>&nbsp;
1009                    </td>
1010                    <td class="dataTableHeadingContent" valign="top">
1011                    <?php
1012                    echo $to_categories_id . '<br />' .
1013                    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;
1014                    ?>&nbsp;</td>
1015                    <td align="center" class="dataTableHeadingContent" valign="top">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
1016                    </form>
1017                  </tr>
1018                </table></td>
1019              </tr>
1020  <!-- eof: copy all option values to another Option Name -->
1021  <?php } // show copier features ?>

1022  
1023          </table>
1024  </td></tr></table>
1025  <!-- option value eof //-->
1026  
1027  <!-- body_text_eof //-->
1028  <!-- footer //-->
1029  <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
1030  <!-- footer_eof //-->
1031  </body>
1032  </html>
1033  <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>


Généré le : Mon Nov 26 16:45:43 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics