|
ZenCart_Documentation
1.5.0
http://www.collinsharper.com
|
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> 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') . ' ' . 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"> <?php echo $values_values->fields['products_options_values_name']; ?> </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> <?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> </td> 00581 </tr> 00582 <?php 00583 } // extra cancel 00584 ?> 00585 <tr class="dataTableHeadingRow"> 00586 <td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ID; ?> </td> 00587 <td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_PRODUCT; ?> </td> 00588 <td class="dataTableHeadingContent" align="right"> <?php echo TABLE_HEADING_OPTION_SORT_ORDER; ?> </td> 00589 <td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </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"> <?php echo $products_values->fields['products_id']; ?> </td> 00601 <td class="smallText"> <?php echo $products_values->fields['products_name']; ?> </td> 00602 <td class="smallText" align="right"> <?php echo $options_values->fields["products_options_sort_order"]; ?> </td> 00603 <td class="smallText"> <?php echo $products_values->fields['products_options_name']; ?> </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> <?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> </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> <?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> </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"> <?php echo HEADING_TITLE_VAL; ?> </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) . '"> << </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) . '"> >></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"> <?php echo TABLE_HEADING_ID; ?> </td> 00692 <td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_NAME; ?> </td> 00693 <td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_OPT_VALUE; ?> </td> 00694 <td class="dataTableHeadingContent" align="right"> <?php echo TABLE_HEADING_OPTION_VALUE_SORT_ORDER; ?></td> 00695 <td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ACTION; ?> </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'] . ': <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']) . '"> <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 .= ' <input type="text" name="products_options_values_sort_order" size="4" value="' . $products_options_values_sort_order->fields['products_options_values_sort_order'] . '"> '; 00732 ?> 00733 <td align="center" class="attributeBoxContent"> <?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']; ?>"> </td> 00734 <td align="center" class="attributeBoxContent"> <?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> </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"> <?php echo zen_image_submit('button_update.gif', IMAGE_UPDATE); ?> <?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> </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"> <?php echo $values_values->fields["products_options_values_id"]; ?> </td> 00762 <td align="center" class="smallText"> <?php echo $options_name; ?> </td> 00763 <td class="smallText"> <?php echo $values_name; ?> </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"> </td> 00770 <?php 00771 } else { 00772 ?> 00773 <!-- <td align="center" class="smallText"> <?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> <?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> </td> --> 00774 <td align="center" class="smallText"> <?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> <?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> </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"> <?php echo $next_id; ?> </td> 00801 <td align="center" class="smallText"> <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'] . ': <input type="text" name="value_name[' . $languages[$i]['id'] . ']" ' . zen_set_field_length(TABLE_PRODUCTS_OPTIONS_VALUES, 'products_options_values_name', 50) . '> <br />'; 00817 } 00818 $inputs2 .= TEXT_SORT . '<input type="text" name="products_options_values_sort_order" size="4"> '; 00819 ?> 00820 </select> </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"> <?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?> </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= ' [' . 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 /> <input type="text" name="copy_to_categories_id" size="4"> '; 00897 00898 $options_id_from_products_id = TEXT_SELECT_OPTION_FROM_PRODUCTS_ID . ' <input type="text" name="copy_from_products_id" size="4"> '; 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 . ' <br />' . 00926 TEXT_SELECT_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?> 00927 </td> 00928 <td class="dataTableHeadingContent"> 00929 <?php echo 00930 TEXT_SELECT_OPTION_TO . '<br />' . $option_to_dropdown . ' <br />' . 00931 TEXT_SELECT_OPTION_VALUES_TO . '<br />' . $option_values_to_dropdown;?> 00932 </td> 00933 <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?> </td> 00934 <td align="center" class="dataTableHeadingContent"> <?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?> </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 . ' <br />' . 00965 TEXT_SELECT_DELETE_OPTION_VALUES_FROM . '<br />' . $option_values_from_dropdown; ?> 00966 </td> 00967 <td class="dataTableHeadingContent"><?php echo $to_categories_id; ?> </td> 00968 <td align="center" class="dataTableHeadingContent"> <?php echo zen_image_submit('button_delete.gif', IMAGE_DELETE); ?> </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 . ' <br />' . 00999 TEXT_SELECT_OPTION_VALUES_FROM_ADD . '<br />' . $option_values_from_dropdown . ' <br /><br />' . 01000 $options_id_from_products_id; ?> 01001 </td> 01002 <td class="dataTableHeadingContent" valign="top"> 01003 <?php echo 01004 TEXT_SELECT_OPTION_TO_ADD_TO . '<br />' . $option_to_dropdown;?> 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 ?> </td> 01011 <td align="center" class="dataTableHeadingContent" valign="top"> <?php echo zen_image_submit('button_insert.gif', IMAGE_INSERT); ?> </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'); ?>