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