ZenCart_Documentation  1.5.0
http://www.collinsharper.com
C:/xampp/htdocs/zen-cart/admin/options_values_manager.php
Go to the documentation of this file.
00001 <?php
00010   require('includes/application_top.php');
00011 
00012   // verify option names and values
00013   $chk_option_names = $db->Execute("select count(*) as count from " . TABLE_PRODUCTS_OPTIONS . " where language_id='" . (int)$_SESSION['languages_id'] . "' limit 1");
00014   if ($chk_option_names->fields['count'] < 1) {
00015     $messageStack->add_session(ERROR_DEFINE_OPTION_NAMES, 'caution');
00016     zen_redirect(zen_href_link(FILENAME_OPTIONS_NAME_MANAGER));
00017   }
00018 
00019   $languages = zen_get_languages();
00020 
00021   $action = (isset($_GET['action']) ? $_GET['action'] : '');
00022 
00023 // display or hide copier features
00024   if (!isset($_SESSION['option_names_values_copier'])) {
00025     $_SESSION['option_names_values_copier'] = OPTION_NAMES_VALUES_GLOBAL_STATUS;
00026   }
00027   if (!isset($_GET['reset_option_names_values_copier'])) {
00028     $reset_option_names_values_copier = $_SESSION['option_names_values_copier'];
00029   }
00030 
00031   if (zen_not_null($action)) {
00032     $_SESSION['page_info'] = '';
00033     if (isset($_GET['option_page'])) $_SESSION['page_info'] .= 'option_page=' . $_GET['option_page'] . '&';
00034     if (isset($_GET['value_page'])) $_SESSION['page_info'] .= 'value_page=' . $_GET['value_page'] . '&';
00035     if (isset($_GET['attribute_page'])) $_SESSION['page_info'] .= 'attribute_page=' . $_GET['attribute_page'] . '&';
00036     if (zen_not_null($_SESSION['page_info'])) {
00037       $_SESSION['page_info'] = substr($_SESSION['page_info'], 0, -1);
00038     }
00039 
00040     switch ($action) {
00041       case 'set_option_names_values_copier':
00042         $_SESSION['option_names_values_copier'] = $_GET['reset_option_names_values_copier'];
00043         $action='';
00044         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER));
00045         break;
00046       case 'add_product_option_values':
00047         $value_name_array = $_POST['value_name'];
00048         $value_id = zen_db_prepare_input($_POST['value_id']);
00049         $option_id = zen_db_prepare_input($_POST['option_id']);
00050         $products_options_values_sort_order = zen_db_prepare_input($_POST['products_options_values_sort_order']);
00051 
00052         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
00053           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
00054 
00055           $db->Execute("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES . "
00056                       (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order)
00057                       values ('" . (int)$value_id . "',
00058                               '" . (int)$languages[$i]['id'] . "',
00059                               '" . zen_db_input($value_name) . "',
00060                               '" . (int)$products_options_values_sort_order . "')");
00061         }
00062 
00063         $db->Execute("insert into " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
00064                     (products_options_id, products_options_values_id)
00065                     values ('" . (int)$option_id . "', '" . (int)$value_id . "')");
00066 
00067 // alert if possible duplicate
00068         $duplicate_option_values= '';
00069         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
00070           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
00071 
00072           if (!empty($value_name)) {
00073             $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
00074                                 from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
00075                                 left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
00076                                 where pov.language_id= '" . (int)$languages[$i]['id'] . "'
00077                                 and pov.products_options_values_name='" . zen_db_input($value_name) . "'
00078                                 and pov2po.products_options_id ='" . (int)$option_id .
00079                                 "'");
00080             if ($check->RecordCount() > 1) {
00081               while (!$check->EOF) {
00082                 $check_dups .= ' - ' . $check->fields['products_options_values_id'];
00083                 $check->MoveNext();
00084               }
00085               $duplicate_option_values .= ' <b>' . strtoupper(zen_get_language_name($languages[$i]['id'])) . '</b> : ' . $check_dups;
00086             }
00087           }
00088         }
00089         if (!empty($duplicate_option_values)) {
00090           $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
00091         }
00092 
00093         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
00094         break;
00095       case 'update_value':
00096         $value_name_array = $_POST['value_name'];
00097         $value_id = zen_db_prepare_input($_POST['value_id']);
00098         $option_id = zen_db_prepare_input($_POST['option_id']);
00099         $products_options_values_sort_order = zen_db_prepare_input($_POST['products_options_values_sort_order']);
00100 
00101         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
00102           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
00103 
00104           $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES . "
00105                         set products_options_values_name = '" . zen_db_input($value_name) . "', products_options_values_sort_order = '" . (int)$products_options_values_sort_order . "'
00106                         where products_options_values_id = '" . zen_db_input($value_id) . "'
00107                         and language_id = '" . (int)$languages[$i]['id'] . "'");
00108 
00109         }
00110 
00111         $db->Execute("update " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
00112                       set products_options_id = '" . (int)$option_id . "'
00113                       where products_options_values_id = '" . (int)$value_id . "'");
00114 
00115 
00116 // alert if possible duplicate
00117         $duplicate_option_values= '';
00118         for ($i=0, $n=sizeof($languages); $i<$n; $i ++) {
00119           $value_name = zen_db_prepare_input($value_name_array[$languages[$i]['id']]);
00120 
00121           if (!empty($value_name)) {
00122             $check= $db->Execute("select pov.products_options_values_id, pov.products_options_values_name, pov.language_id
00123                                 from " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
00124                                 left join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " pov2po on pov.products_options_values_id = pov2po.products_options_values_id
00125                                 where pov.language_id= '" . (int)$languages[$i]['id'] . "'
00126                                 and pov.products_options_values_name='" . zen_db_input($value_name) . "'
00127                                 and pov2po.products_options_id ='" . (int)$option_id .
00128                                 "'");
00129 
00130             if ($check->RecordCount() > 1) {
00131               while (!$check->EOF) {
00132                 $check_dups .= ' - ' . $check->fields['products_options_values_id'];
00133                 $check->MoveNext();
00134               }
00135               $duplicate_option_values .= ' <b>' . strtoupper(zen_get_language_name($languages[$i]['id'])) . '</b> : ' . $check_dups;
00136             }
00137           }
00138         }
00139         if (!empty($duplicate_option_values)) {
00140           $messageStack->add_session(ATTRIBUTE_POSSIBLE_OPTIONS_VALUE_WARNING_DUPLICATE . ' ' . $duplicate_option_values, 'caution');
00141         }
00142 
00143         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
00144         break;
00145       case 'delete_value':
00146         // demo active test
00147         if (zen_admin_demo()) {
00148           $_GET['action']= '';
00149           $messageStack->add_session(ERROR_ADMIN_DEMO, 'caution');
00150           zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
00151         }
00152         $value_id = zen_db_prepare_input($_GET['value_id']);
00153 
00154 // remove all attributes from products with value
00155         $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 . "'");
00156         if ($remove_attributes_query->RecordCount() > 0) {
00157           // clean all tables of option value
00158           while (!$remove_attributes_query->EOF) {
00159 
00160             $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
00161                           where products_attributes_id='" . $remove_attributes_query->fields['products_attributes_id'] . "'");
00162 
00163             $remove_attributes_query->MoveNext();
00164           }
00165           $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES . "
00166                         where options_values_id='" . (int)$value_id . "'");
00167         }
00168 
00169         $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
00170                       where products_options_values_id = '" . (int)$value_id . "'");
00171 
00172         $db->Execute("delete from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . "
00173                       where products_options_values_id = '" . (int)$value_id . "'");
00174 
00175         zen_redirect(zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, $_SESSION['page_info']));
00176         break;
00177 
00179 // copy option values based on existance of another option value
00180     case 'copy_options_values_one_to_another':
00181 
00182       $options_id_from = (int)$_POST['options_id_from'];
00183       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
00184 
00185       $options_id_to = (int)$_POST['options_id_to'];
00186       $options_values_values_id_to = (int)$_POST['options_values_values_id_to'];
00187 
00188       // one category of products or all products
00189       if ($_POST['copy_to_categories_id'] != '') {
00190         $products_only = $db->Execute("select ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . (int)$options_id_from . "' and pa.options_values_id='" . (int)$options_values_values_id_from . "')");
00191       } else {
00192         $products_only = $db->Execute("select pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . (int)$options_id_from . "' and pa.options_values_id='" . (int)$options_values_values_id_from . "'");
00193       }
00194 
00195 /*
00196 // debug code
00197             while(!$products_only->EOF) {
00198               echo 'Product ' . $products_only->fields['products_id'] . '<br>';
00199               $products_only->MoveNext();
00200             }
00201 
00202 
00203 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());
00204 */
00205 
00206 
00207       if ($_POST['copy_to_categories_id'] == '') {
00208         $zc_categories = ' All Products ';
00209       } else {
00210         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
00211       }
00212 
00213       $new_attribute=0;
00214 
00215       if ($options_values_values_id_from == $options_values_values_id_to) {
00216         // cannot copy to self
00217         $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');
00218       } else {
00219         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)) {
00220           $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');
00221         } else {
00222           // check for existing combination
00223           if ($products_only->RecordCount() > 0) {
00224             // check existing matching products and add new attributes
00225             while(!$products_only->EOF) {
00226               $current_products_id = $products_only->fields['products_id'];
00227               $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 . "')";
00228               $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");
00229               // do not add duplicate attributes
00230               if ($check_previous->fields['count'] < 1) {
00231                 $db->Execute($sql);
00232                 $new_attribute++;
00233               }
00234               $products_only->MoveNext();
00235             }
00236 
00237             // display how many products were updated
00238             if ($new_attribute < 1) {
00239               // nothing was added due to duplicates
00240               $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');
00241             } else {
00242               // successful addition of new attributes that were not duplicates
00243               $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');
00244             }
00245           } else {
00246             // warning nothing to copy
00247             $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');
00248           }
00249         } // mismatch
00250       } // same option value
00251     break;
00253 
00254 // fix here copy_options_values_one_to_another_options_id
00255 
00257 // copy option values based on existance of another option value
00258     case 'copy_options_values_one_to_another_options_id':
00259 
00260       $options_id_from = (int)$_POST['options_id_from'];
00261       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
00262       $copy_from_products_id = (int)$_POST['copy_from_products_id'];
00263 
00264       $options_id_to = (int)$_POST['options_id_to'];
00265       $options_values_values_id_to = (int)$_POST['options_values_values_id_to'];
00266 
00267       // one category of products or all products
00268       if ($_POST['copy_to_categories_id'] != '') {
00269         $products_only = $db->Execute("select distinct ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . $options_id_to . "')");
00270       } else {
00271         $products_only = $db->Execute("select distinct pa.products_id from " . TABLE_PRODUCTS_ATTRIBUTES  . " pa where pa.options_id='" . $options_id_to . "'");
00272       }
00273 
00274       $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 . "'");
00275 
00276       $options_id = zen_db_prepare_input($options_id_from);
00277       $values_id = zen_db_prepare_input($options_values_values_id_from);
00278 
00279       if (!$products_attributes_defaults->EOF) {
00280         $options_values_price = zen_db_prepare_input($products_attributes_defaults->fields['options_values_price']);
00281         $price_prefix = zen_db_prepare_input($products_attributes_defaults->fields['price_prefix']);
00282 
00283         $products_options_sort_order = zen_db_prepare_input($products_attributes_defaults->fields['products_options_sort_order']);
00284         $product_attribute_is_free = zen_db_prepare_input($products_attributes_defaults->fields['product_attribute_is_free']);
00285         $products_attributes_weight = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight']);
00286         $products_attributes_weight_prefix = zen_db_prepare_input($products_attributes_defaults->fields['products_attributes_weight_prefix']);
00287         $attributes_display_only = zen_db_prepare_input($products_attributes_defaults->fields['attributes_display_only']);
00288         $attributes_default = zen_db_prepare_input($products_attributes_defaults->fields['attributes_default']);
00289         $attributes_discounted = zen_db_prepare_input($products_attributes_defaults->fields['attributes_discounted']);
00290         $attributes_price_base_included = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_base_included']);
00291 
00292         $attributes_price_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_onetime']);
00293         $attributes_price_factor = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor']);
00294         $attributes_price_factor_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_offset']);
00295         $attributes_price_factor_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime']);
00296         $attributes_price_factor_onetime_offset = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_factor_onetime_offset']);
00297         $attributes_qty_prices = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices']);
00298         $attributes_qty_prices_onetime = zen_db_prepare_input($products_attributes_defaults->fields['attributes_qty_prices_onetime']);
00299 
00300         $attributes_price_words = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words']);
00301         $attributes_price_words_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_words_free']);
00302         $attributes_price_letters = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters']);
00303         $attributes_price_letters_free = zen_db_prepare_input($products_attributes_defaults->fields['attributes_price_letters_free']);
00304         $attributes_required = zen_db_prepare_input($products_attributes_defaults->fields['attributes_required']);
00305       }
00306 
00307 /*
00309 // debug code
00310             while(!$products_only->EOF) {
00311               echo 'Product ' . $products_only->fields['products_id'] . '<br>';
00312               $products_only->MoveNext();
00313             }
00314 
00315 
00316 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>' .
00317 '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']
00318 );
00320 */
00321 
00322       if ($_POST['copy_to_categories_id'] == '') {
00323         $zc_categories = ' All Products ';
00324       } else {
00325         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
00326       }
00327 
00328       $new_attribute=0;
00329 
00330         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 != '')) {
00331           if ($products_attributes_defaults->EOF and $copy_from_products_id != '') {
00332           // bad product_id with no match
00333             $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');
00334           } else {
00335           // mismatched Option Name/Value
00336             $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');
00337           }
00338         } else {
00339           // check for existing combination
00340           if ($products_only->RecordCount() > 0) {
00341             // check existing matching products and add new attributes
00342 
00343             while(!$products_only->EOF) {
00344               $current_products_id = $products_only->fields['products_id'];
00345 
00346 //              $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 . "')";
00347                 $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)
00348                           values (0,
00349                                   '" . (int)$current_products_id . "',
00350                                   '" . (int)$options_id . "',
00351                                   '" . (int)$values_id . "',
00352                                   '" . zen_db_input($options_values_price) . "',
00353                                   '" . zen_db_input($price_prefix) . "',
00354                                   '" . (int)zen_db_input($products_options_sort_order) . "',
00355                                   '" . (int)zen_db_input($product_attribute_is_free) . "',
00356                                   '" . (float)zen_db_input($products_attributes_weight) . "',
00357                                   '" . zen_db_input($products_attributes_weight_prefix) . "',
00358                                   '" . (int)zen_db_input($attributes_display_only) . "',
00359                                   '" . (int)zen_db_input($attributes_default) . "',
00360                                   '" . (int)zen_db_input($attributes_discounted) . "',
00361                                   '" . zen_db_input($attributes_image_name) . "',
00362                                   '" . (int)zen_db_input($attributes_price_base_included) . "',
00363                                   '" . (float)zen_db_input($attributes_price_onetime) . "',
00364                                   '" . (float)zen_db_input($attributes_price_factor) . "',
00365                                   '" . (float)zen_db_input($attributes_price_factor_offset) . "',
00366                                   '" . (float)zen_db_input($attributes_price_factor_onetime) . "',
00367                                   '" . (float)zen_db_input($attributes_price_factor_onetime_offset) . "',
00368                                   '" . zen_db_input($attributes_qty_prices) . "',
00369                                   '" . zen_db_input($attributes_qty_prices_onetime) . "',
00370                                   '" . (float)zen_db_input($attributes_price_words) . "',
00371                                   '" . (int)zen_db_input($attributes_price_words_free) . "',
00372                                   '" . (float)zen_db_input($attributes_price_letters) . "',
00373                                   '" . (int)zen_db_input($attributes_price_letters_free) . "',
00374                                   '" . (int)zen_db_input($attributes_required) . "')";
00375 
00376               $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");
00377               // do not add duplicate attributes
00378               if ($check_previous->fields['count'] < 1) {
00379               // add new attribute
00380                 $db->Execute($sql);
00381                 //echo $sql . '<br>';
00382                 $new_attribute++;
00383               } else {
00384                 // ignore
00385                 if ($_POST['copy_attributes'] == 'copy_attributes_ignore') {
00386                   //echo 'skipped already exists: ' . $current_products_id . '<br>';
00387                 } else {
00388                 // delete old and add new
00389                 //echo 'delete old and add new: ' . $current_products_id . '<br>';
00390                   $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 . "'");
00391                   $db->Execute($sql);
00392                   $new_attribute++;
00393                 }
00394               }
00395               $products_only->MoveNext();
00396             }
00397 
00398             // display how many products were updated
00399             if ($new_attribute < 1) {
00400               // nothing was added
00401               $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');
00402             } else {
00403               // successful addition of new attributes that were not duplicates
00404               $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');
00405             }
00406           } else {
00407             // warning nothing to copy
00408             $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');
00409           }
00410         } // mismatch
00411     break;
00413 
00414 
00415 
00416 
00417     case ('delete_options_values_of_option_name'):
00418 
00419       $options_id_from = (int)$_POST['options_id_from'];
00420       $options_values_values_id_from = (int)$_POST['options_values_values_id_from'];
00421 
00422       // one category of products or all products
00423       if ($_POST['copy_to_categories_id'] != '') {
00424         $products_only = $db->Execute("select ptc.products_id from " . TABLE_PRODUCTS_TO_CATEGORIES  . " ptc left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa on pa.products_id=ptc.products_id where ptc.categories_id='" . (int)$_POST['copy_to_categories_id'] . "' and (pa.options_id='" . $options_id_from . "' and pa.options_values_id='" . $options_values_values_id_from . "')");
00425       } else {
00426         $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 . "'");
00427       }
00428 
00429       if ($_POST['copy_to_categories_id'] == '') {
00430         $zc_categories = ' All Products ';
00431       } else {
00432         $zc_categories = ' Category: ' . (int)$_POST['copy_to_categories_id'];
00433       }
00434 
00435       $new_attribute=0;
00436 
00437       if (!zen_validate_options_to_options_value($options_id_from, $options_values_values_id_from)) {
00438         $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');
00439       } else {
00440         // check for existing combination
00441         if ($products_only->RecordCount() > 0) {
00442           // check existing matching products and add new attributes
00443           while(!$products_only->EOF) {
00444             $current_products_id = $products_only->fields['products_id'];
00445 
00446             // check for associated downloads
00447             $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 . "'";
00448             $downloads_remove = $db->Execute($downloads_remove_query);
00449 
00450             $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 . "'";
00451             $delete_selected = $db->Execute($sql);
00452 
00453             // delete associated downloads
00454             while (!$downloads_remove->EOF) {
00455               $db->Execute("delete from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . "
00456                             where products_attributes_id='" . $downloads_remove->fields['products_attributes_id'] . "'");
00457               $downloads_remove->MoveNext();
00458             }
00459             // count deleted attribute
00460             $new_attribute++;
00461             $products_only->MoveNext();
00462           }
00463 
00464           // display how many products were updated
00465           if ($new_attribute < 1) {
00466             // nothing was added due to duplicates
00467             $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');
00468           } else {
00469             // successful addition of new attributes that were not duplicates
00470             $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');
00471           }
00472         } else {
00473           // warning nothing to copy
00474           $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');
00475         }
00476       } // mismatch
00477 
00478     break;
00479     }
00480 
00481 
00482   }
00483 ?>
00484 <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
00485 <html <?php echo HTML_PARAMS; ?>>
00486 <head>
00487 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
00488 <title><?php echo TITLE; ?></title>
00489 <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
00490 <link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
00491 <script language="javascript" src="includes/menu.js"></script>
00492 <script language="javascript"><!--
00493 function go_option() {
00494   if (document.option_order_by.selected.options[document.option_order_by.selected.selectedIndex].value != "none") {
00495     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;
00496   }
00497 }
00498 //--></script>
00499 <script type="text/javascript">
00500   <!--
00501   function init()
00502   {
00503     cssjsmenu('navbar');
00504     if (document.getElementById)
00505     {
00506       var kill = document.getElementById('hoverJS');
00507       kill.disabled = true;
00508     }
00509   }
00510   // -->
00511 </script>
00512 </head>
00513 <body onLoad="init()">
00514 <!-- header //-->
00515 <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
00516   <table border="0" width="75%" cellspacing="0" cellpadding="0" align="center">
00517       <tr>
00518         <td width="100%">
00519            <table width="100%" border="0" cellspacing="0" cellpadding="2">
00520              <tr>
00521                <td height="40" valign="bottom">
00522                  <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;
00523                  <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>
00524                </td>
00525               <td class="main" height="40" valign="bottom">
00526                 <?php
00527 // toggle switch for show copier features
00528                   $option_names_values_copier_array = array(array('id' => '0', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_OFF),
00529                                         array('id' => '1', 'text' => TEXT_SHOW_OPTION_NAMES_VALUES_COPIER_ON),
00530                                         );
00531                   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();"') .
00532                   zen_hide_session_id() .
00533                   zen_draw_hidden_field('action', 'set_option_names_values_copier') .
00534                   '</form>';
00535                 ?>
00536               </td>
00537                <td class="main" align="right" valign="bottom"><?php echo TEXT_PRODUCT_OPTIONS_INFO; ?></td>
00538              </tr>
00539           </table>
00540        </td>
00541      </tr>
00542      <tr>
00543         <td valign="top" width="50%">
00544            <table width="100%" border="0" cellspacing="0" cellpadding="2">
00545 <!-- value //-->
00546 <?php
00547   if ($action == 'delete_option_value') { // delete product option value
00548     $values_values = $db->Execute("select products_options_values_id, products_options_values_name
00549                                    from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
00550                                    where products_options_values_id = '" . (int)$_GET['value_id'] . "'
00551                                    and language_id = '" . (int)$_SESSION['languages_id'] . "'");
00552 
00553 ?>
00554               <tr>
00555                 <td colspan="3" class="pageHeading">&nbsp;<?php echo $values_values->fields['products_options_values_name']; ?>&nbsp;</td>
00556               </tr>
00557               <tr>
00558                 <td colspan="4"><?php echo zen_black_line(); ?></td>
00559               </tr>
00560 <?php
00561     $products_values = $db->Execute("select p.products_id, pd.products_name, po.products_options_name, pa.options_id
00562                               from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_ATTRIBUTES . " pa, "
00563                                      . TABLE_PRODUCTS_OPTIONS . " po, " . TABLE_PRODUCTS_DESCRIPTION . " pd
00564                               where pd.products_id = p.products_id
00565                               and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
00566                               and po.language_id = '" . (int)$_SESSION['languages_id'] . "'
00567                               and pa.products_id = p.products_id
00568                               and pa.options_values_id='" . (int)$_GET['value_id'] . "'
00569                               and po.products_options_id = pa.options_id
00570                               order by pd.products_name");
00571 
00572     if ($products_values->RecordCount() > 0) {
00573 ?>
00574 <?php
00575 // extra cancel button
00576     if ($products_values->RecordCount() > 10) {
00577 ?>
00578                   <tr>
00579                     <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
00580                     <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>
00581                   </tr>
00582 <?php
00583   } // extra cancel
00584 ?>
00585                   <tr class="dataTableHeadingRow">
00586                     <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
00587                     <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_PRODUCT; ?>&nbsp;</td>
00588                     <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_SORT_ORDER; ?>&nbsp;</td>
00589                     <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
00590                   </tr>
00591                   <tr>
00592                     <td colspan="4"><?php echo zen_black_line(); ?></td>
00593                   </tr>
00594 
00595 <?php
00596       while (!$products_values->EOF) {
00597         $rows++;
00598 ?>
00599                   <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
00600                     <td align="center" class="smallText">&nbsp;<?php echo $products_values->fields['products_id']; ?>&nbsp;</td>
00601                     <td class="smallText">&nbsp;<?php echo $products_values->fields['products_name']; ?>&nbsp;</td>
00602                     <td class="smallText" align="right">&nbsp;<?php echo $options_values->fields["products_options_sort_order"]; ?>&nbsp;</td>
00603                     <td class="smallText">&nbsp;<?php echo $products_values->fields['products_options_name']; ?>&nbsp;</td>
00604                   </tr>
00605 <?php
00606         $products_values->MoveNext();
00607       }
00608 ?>
00609                   <tr>
00610                     <td colspan="4"><?php echo zen_black_line(); ?></td>
00611                   </tr>
00612                   <tr>
00613                     <td class="main" colspan="3"><br /><?php echo TEXT_WARNING_OF_DELETE; ?></td>
00614                     <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>
00615                   </tr>
00616 <?php
00617     } else {
00618 ?>
00619                   <tr>
00620                     <td class="main" colspan="3"><br /><?php echo TEXT_OK_TO_DELETE; ?></td>
00621                   </tr>
00622                   <tr>
00623                     <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>
00624                   </tr>
00625 <?php
00626     }
00627 ?>
00628                 </table></td>
00629               </tr>
00630 <?php
00631   } else {
00632 ?>
00633               <tr>
00634                 <td colspan="3" class="pageHeading">&nbsp;<?php echo HEADING_TITLE_VAL; ?>&nbsp;</td>
00635               </tr>
00636               <tr>
00637                 <td colspan="5" class="smallText">
00638 <?php
00639 //    $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";
00640     $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";
00641     if (!isset($_GET['value_page'])) {
00642       $_GET['value_page'] = 1;
00643     }
00644     $prev_value_page = $_GET['value_page'] - 1;
00645     $next_value_page = $_GET['value_page'] + 1;
00646 
00647     $value_query = $db->Execute($values);
00648     $num_rows = $value_query->RecordCount();
00649 
00650     $per_page = (MAX_ROW_LISTS_OPTIONS == '') ? $num_rows : (int)MAX_ROW_LISTS_OPTIONS;
00651     $value_page_start = ($per_page * $_GET['value_page']) - $per_page;
00652 
00653     if ($num_rows <= $per_page) {
00654       $num_pages = 1;
00655     } else if (($num_rows % $per_page) == 0) {
00656       $num_pages = ($num_rows / $per_page);
00657     } else {
00658       $num_pages = ($num_rows / $per_page) + 1;
00659     }
00660     $num_pages = (int) $num_pages;
00661 
00662 // fix limit error on some versions
00663     if ($value_page_start < 0) { $value_page_start = 0; }
00664 
00665     $values = $values . " LIMIT $value_page_start, $per_page";
00666 
00667     // Previous
00668     if ($prev_value_page)  {
00669       echo '<a href="' . zen_href_link(FILENAME_OPTIONS_VALUES_MANAGER, 'option_order_by=' . $option_order_by . '&value_page=' . $prev_value_page) . '"> &lt;&lt; </a> | ';
00670     }
00671 
00672     for ($i = 1; $i <= $num_pages; $i++) {
00673       if ($i != $_GET['value_page']) {
00674          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> | ';
00675       } else {
00676          echo '<b><font color=red>' . $i . '</font></b> | ';
00677       }
00678     }
00679 
00680     // Next
00681     if ($_GET['value_page'] != $num_pages) {
00682       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> ';
00683     }
00684 ?>
00685                 </td>
00686               </tr>
00687               <tr>
00688                 <td colspan="6"><?php echo zen_black_line(); ?></td>
00689               </tr>
00690               <tr class="dataTableHeadingRow">
00691                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_ID; ?>&nbsp;</td>
00692                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_NAME; ?>&nbsp;</td>
00693                 <td class="dataTableHeadingContent">&nbsp;<?php echo TABLE_HEADING_OPT_VALUE; ?>&nbsp;</td>
00694                 <td class="dataTableHeadingContent" align="right">&nbsp;<?php echo TABLE_HEADING_OPTION_VALUE_SORT_ORDER; ?></td>
00695                 <td class="dataTableHeadingContent" align="center">&nbsp;<?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td>
00696               </tr>
00697               <tr>
00698                 <td colspan="6"><?php echo zen_black_line(); ?></td>
00699               </tr>
00700 <?php
00701     $next_id = 1;
00702     $rows = 0;
00703     $values_values = $db->Execute($values);
00704     while (!$values_values->EOF) {
00705       $options_name = zen_options_name($values_values->fields['products_options_id']);
00706 // iii 030813 added: Option Type Feature and File Uploading
00707 // fetch products_options_id for use if the option value is deleted
00708 // with TEXT and FILE Options, there are multiple options for the single TEXT
00709 // value and only the single reference should be deleted
00710       $option_id = $values_values->fields['products_options_id'];
00711 
00712       $values_name = $values_values->fields['products_options_values_name'];
00713       $products_options_values_sort_order = $values_values->fields['products_options_values_sort_order'];
00714       $rows++;
00715 ?>
00716               <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
00717 <?php
00718 // FIX HERE
00719 // edit option values
00720       if (($action == 'update_option_value') && ($_GET['value_id'] == $values_values->fields['products_options_values_id'])) {
00721         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">';
00722         echo zen_draw_hidden_field('securityToken', $_SESSION['securityToken']);
00723         $inputs = '';
00724         for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
00725           $value_name = $db->Execute("select products_options_values_name
00726                                       from " . TABLE_PRODUCTS_OPTIONS_VALUES . "
00727                                       where products_options_values_id = '" . (int)$values_values->fields['products_options_values_id'] . "' and language_id = '" . (int)$languages[$i]['id'] . "'");
00728           $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 />';
00729         }
00730           $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'] . "'");
00731           $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;';
00732 ?>
00733                 <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>
00734                 <td align="center" class="attributeBoxContent">&nbsp;<?php echo "\n"; ?><select name="option_id">
00735 <?php
00736         $options_values = $db->Execute("select products_options_id, products_options_name, products_options_type
00737                                        from " . TABLE_PRODUCTS_OPTIONS . "
00738                                        where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "'
00739                                        order by products_options_name");
00740 
00741         while (!$options_values->EOF) {
00742           echo "\n" . '<option name="' . $options_values->fields['products_options_name'] . '" value="' . $options_values->fields['products_options_id'] . '"';
00743           if ($values_values->fields['products_options_id'] == $options_values->fields['products_options_id']) {
00744             echo ' selected';
00745           }
00746           echo '>' . $options_values->fields['products_options_name'] . '</option>';
00747           $options_values->MoveNext();
00748         }
00749 ?>
00750                 </select>&nbsp;</td>
00751                 <td height="50" class="attributeBoxContent"><?php echo $inputs; ?></td>
00752                 <td class="attributeBoxContent" align="right"><?php echo $inputs2; ?></td>
00753                 <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>
00754 <?php
00755         echo '</form>';
00756       } else {
00757 // iii 030813 added:  option ID to parameter list of delete button's href
00758 // allows delete to specify just that option/value pair when deleting from
00759 // the TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS table
00760 ?>
00761                 <td align="center" class="smallText">&nbsp;<?php echo $values_values->fields["products_options_values_id"]; ?>&nbsp;</td>
00762                 <td align="center" class="smallText">&nbsp;<?php echo $options_name; ?>&nbsp;</td>
00763                 <td class="smallText">&nbsp;<?php echo $values_name; ?>&nbsp;</td>
00764                 <td class="smallText" align="right"><?php echo $values_values->fields['products_options_values_sort_order']; ?></td>
00765 <?php
00766 // hide buttons when editing
00767   if ($action== 'update_option_value') {
00768 ?>
00769             <td width='120' align="center" class="smallText">&nbsp;</td>
00770 <?php
00771   } else {
00772 ?>
00773 <!--                <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> -->
00774                 <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>
00775 <?php
00776 //    $values_values->MoveNext();
00777   }
00778 ?>
00779 <?php
00780       }
00781       $max_values_id_values = $db->Execute("select max(products_options_values_id) + 1
00782                                            as next_id from " . TABLE_PRODUCTS_OPTIONS_VALUES);
00783 
00784       $next_id = $max_values_id_values->fields['next_id'];
00785 // good one
00786       $values_values->MoveNext();
00787     }
00788 ?>
00789               </tr>
00790               <tr>
00791                 <td colspan="5"><?php echo zen_black_line(); ?></td>
00792               </tr>
00793 <?php
00794     if ($action != 'update_option_value') {
00795 ?>
00796               <tr class="<?php echo (floor($rows/2) == ($rows/2) ? 'attributes-even' : 'attributes-odd'); ?>">
00797 <?php
00798       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']);
00799 ?>
00800                 <td align="center" class="smallText">&nbsp;<?php echo $next_id; ?>&nbsp;</td>
00801                 <td align="center" class="smallText">&nbsp;<select name="option_id">
00802 <?php
00803       $options_values = $db->Execute("select products_options_id, products_options_name, products_options_type
00804                                       from " . TABLE_PRODUCTS_OPTIONS . "
00805                                       where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "'
00806                                       order by products_options_name");
00807 
00808       while (!$options_values->EOF) {
00809         echo '<option name="' . $options_values->fields['products_options_name'] . '" value="' . $options_values->fields['products_options_id'] . '">' . $options_values->fields['products_options_name'] . '</option>';
00810         $options_values->MoveNext();
00811       }
00812 
00813       $inputs = '';
00814       $inputs = '';
00815       for ($i = 0, $n = sizeof($languages); $i < $n; $i ++) {
00816         $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 />';
00817       }
00818         $inputs2 .= TEXT_SORT . '<input type="text" name="products_options_values_sort_order" size="4">&nbsp;';
00819 ?>
00820                 </select>&nbsp;</td>
00821                 <td class="smallText"><input type="hidden" name="value_id" value="<?php echo $next_id; ?>"><?php echo $inputs; ?></td>
00822                 <td colspan="1" class="smallText"><input type="hidden" name="value_id" value="<?php echo $next_id; ?>"><?php echo $inputs2; ?></td>
00823                 <td align="center" class="smallText">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
00824 <?php
00825       echo '</form>';
00826 ?>
00827               </tr>
00828               <tr>
00829                 <td colspan="5"><?php echo zen_black_line(); ?></td>
00830               </tr>
00831 <?php
00832     }
00833   }
00834 ?>
00835             </td>
00836           </tr>
00837 
00838 
00839 <?php if ($_SESSION['option_names_values_copier'] == '0') { ?>
00840   <table align="center" width="90%">
00841     <tr>
00842       <td><?php echo zen_draw_separator('pixel_trans.gif', '100%', '5'); ?></td>
00843     </tr>
00844     <tr>
00845       <td class="pageHeading" align="center"><?php echo TEXT_INFO_OPTION_NAMES_VALUES_COPIER_STATUS; ?></td>
00846     </tr>
00847     <tr>
00848       <td><?php echo zen_draw_separator('pixel_trans.gif', '100%', '5'); ?></td>
00849     </tr>
00850   </table>
00851 <?php } else { ?>
00852 
00853 <?php
00854   // bof: build dropdowns for delete and add
00855 
00856 /*
00857   this builds the resulting values for use in the case statements above
00858       $options_id_from = $_POST['options_id_from'];
00859       $options_values_values_id_from = $_POST['options_values_values_id_from'];
00860 
00861       $options_id_to = $_POST['options_id_to'];
00862       $options_values_values_id_to = $_POST['options_values_values_id_to'];
00863 */
00864 
00865   // build dropdown for option_name from
00866   $options_values_from = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_name !='' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_TEXT . "' and products_options_type !='" . (int)PRODUCTS_OPTIONS_TYPE_FILE . "' order by products_options_name");
00867   while(!$options_values_from->EOF) {
00868     $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>';
00869     $options_values_from->MoveNext();
00870   }
00871 
00872   $option_to_dropdown= $option_from_dropdown;
00873 
00874   $option_from_dropdown = "\n" . '<select name="options_id_from">' . $option_from_dropdown;
00875   $option_from_dropdown.= "\n" . '</select>';
00876 
00877   $option_to_dropdown = "\n" . '<select name="options_id_to">' . $option_to_dropdown;
00878   $option_to_dropdown.= "\n" . '</select>';
00879 
00880   // build dropdown for option_values from
00881   $options_values_values_from = $db->Execute("select * from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where language_id = '" . (int)$_SESSION['languages_id'] . "' and products_options_values_id !='0' order by products_options_values_name");
00882   while(!$options_values_values_from->EOF) {
00883     $show_option_name= '&nbsp;&nbsp;&nbsp;[' . strtoupper(zen_get_products_options_name_from_value($options_values_values_from->fields['products_options_values_id'])) . ']';
00884     $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']);
00885     $options_values_values_from->MoveNext();
00886   }
00887 
00888   $option_values_to_dropdown = $option_values_from_dropdown;
00889 
00890   $option_values_from_dropdown = "\n" . '<select name="options_values_values_id_from">' . $option_values_from_dropdown;
00891   $option_values_from_dropdown .= "\n" . '</select>';
00892 
00893   $option_values_to_dropdown = "\n" . '<select name="options_values_values_id_to">' . $option_values_to_dropdown;
00894   $option_values_to_dropdown .= "\n" . '</select>';
00895 
00896   $to_categories_id = TEXT_SELECT_OPTION_VALUES_TO_CATEGORIES_ID . '<br />&nbsp;<input type="text" name="copy_to_categories_id" size="4">&nbsp;';
00897 
00898   $options_id_from_products_id = TEXT_SELECT_OPTION_FROM_PRODUCTS_ID . '&nbsp;<input type="text" name="copy_from_products_id" size="4">&nbsp;';
00899 
00900   // eof: build dropdowns for delete and add
00901 ?>
00902 
00903 <!--
00904 bof: copy Option Name and Value From to Option Name and Value to - all products
00905 example: Copy Color Red to products with Size Small
00906 -->
00907 
00908             <tr>
00909               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
00910             </tr>
00911             <tr>
00912               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_ALL; ?></td>
00913               <td class="main" colspan="1"> </td>
00914             </tr>
00915             <tr>
00916               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_ALL; ?></td>
00917               <td class="main" colspan="1"> </td>
00918             </tr>
00919             <tr class="dataTableHeadingRow">
00920               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
00921                 <tr class="dataTableHeadingRow">
00922                   <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']); ?>
00923                   <td class="dataTableHeadingContent">
00924                   <?php echo
00925                   TEXT_SELECT_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
00926                   TEXT_SELECT_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
00927                   </td>
00928                   <td class="dataTableHeadingContent">
00929                   <?php echo
00930                   TEXT_SELECT_OPTION_TO . '<br />' . $option_to_dropdown . '&nbsp<br />' .
00931                   TEXT_SELECT_OPTION_VALUES_TO . '<br />' . $option_values_to_dropdown;?>&nbsp;
00932                   </td>
00933                   <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
00934                   <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
00935                   </form>
00936                 </tr>
00937               </table></td>
00938             </tr>
00939 <!-- eof: copy all option values to another Option Name -->
00940 
00941 
00942 <!--
00943 bof: delete all Option Name for an Value
00944 example: Delete Color Red
00945 -->
00946 
00947             <tr>
00948               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
00949             </tr>
00950             <tr>
00951               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_DELETE_ALL; ?></td>
00952               <td class="main" colspan="1"> </td>
00953             </tr>
00954             <tr>
00955               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_DELETE_ALL; ?></td>
00956               <td class="main" colspan="1"> </td>
00957             </tr>
00958             <tr class="dataTableHeadingRow">
00959               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
00960                 <tr class="dataTableHeadingRow">
00961                   <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']); ?>
00962                   <td class="dataTableHeadingContent">
00963                   <?php echo
00964                   TEXT_SELECT_DELETE_OPTION_FROM . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
00965                   TEXT_SELECT_DELETE_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?>&nbsp;
00966                   </td>
00967                   <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?>&nbsp;</td>
00968                   <td align="center" class="dataTableHeadingContent">&nbsp;<?php echo zen_image_submit('button_delete.gif', IMAGE_DELETE); ?>&nbsp;</td>
00969                   </form>
00970                 </tr>
00971               </table></td>
00972             </tr>
00973 <!-- eof: delete all matching option name for option values -->
00974 
00975 
00976 <!--
00977 bof: copy Option Name and Value From to Option Name and Value to - all products
00978 example: Copy Color Red to products with Size Small
00979 -->
00980 
00981             <tr>
00982               <td colspan="5"><?php echo zen_draw_separator('pixel_black.gif', '100%', '10'); ?></td>
00983             </tr>
00984             <tr>
00985               <td class="main" colspan="4"><?php echo TEXT_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
00986               <td class="main" colspan="1"> </td>
00987             </tr>
00988             <tr>
00989               <td class="main" colspan="4"><?php echo TEXT_INFO_OPTION_VALUE_COPY_OPTIONS_TO; ?></td>
00990               <td class="main" colspan="1"> </td>
00991             </tr>
00992             <tr class="dataTableHeadingRow">
00993               <td colspan="5"><table border="1" cellspacing="0" cellpadding="2" width="100%">
00994                 <tr class="dataTableHeadingRow">
00995                   <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']); ?>
00996                   <td class="dataTableHeadingContent" valign="top">
00997                   <?php echo
00998                   TEXT_SELECT_OPTION_FROM_ADD . '<br />' . $option_from_dropdown . '&nbsp;<br />' .
00999                   TEXT_SELECT_OPTION_VALUES_FROM_ADD . '<br />' . $option_values_from_dropdown . '&nbsp;<br /><br />' .
01000                   $options_id_from_products_id; ?>&nbsp;
01001                   </td>
01002                   <td class="dataTableHeadingContent" valign="top">
01003                   <?php echo
01004                   TEXT_SELECT_OPTION_TO_ADD_TO . '<br />' . $option_to_dropdown;?>&nbsp;
01005                   </td>
01006                   <td class="dataTableHeadingContent" valign="top">
01007                   <?php
01008                   echo $to_categories_id . '<br />' .
01009                   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;
01010                   ?>&nbsp;</td>
01011                   <td align="center" class="dataTableHeadingContent" valign="top">&nbsp;<?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?>&nbsp;</td>
01012                   </form>
01013                 </tr>
01014               </table></td>
01015             </tr>
01016 <!-- eof: copy all option values to another Option Name -->
01017 <?php } // show copier features ?>
01018 
01019         </table>
01020 </td></tr></table>
01021 <!-- option value eof //-->
01022 
01023 <!-- body_text_eof //-->
01024 <!-- footer //-->
01025 <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
01026 <!-- footer_eof //-->
01027 </body>
01028 </html>
01029 <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
 All Data Structures Namespaces Files Functions Variables Enumerations