bobsi18 Posted May 8, 2006 Share Posted May 8, 2006 Hi there... I have just installed the New Attribute Manager (http://www.oscommerce.com/community/contributions,1119/category,all/search,attribute+manager) and have it all working correctly (I think...) Fantastic Contrib!!! My only problem is that I need to be able to set weights for each attribute. I previously had 'Add-Weight-To-Product' installed (http://www.oscommerce.com/community/contributions,1622/category,all/search,add+weight+attribute), and it worked well, however, I didn't know how to integrate it with New Attribute Manager. The manager is compatible with Linda's Sort & Copier, so I installed that (it has weight stuff in it) and that's where the problems begin... Originally, the weight wasn't working at all, but I found a fix on the forums (http://www.oscommerce.com/forums/index.php?showtopic=197173&hl=attributes++Sorter++Copier). Now if I go into the old (standard) 'Products Attributes', I can set an attributes weight, and it works. However, if I try to set a attribute's weight with the new manager, it doesn't work (no error messages, it just doesn't add the weight). Has anyone had any issues with combining these contributions? I'd really love to get them working together... Thanks for any help :) ~Barbara~ Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted May 9, 2006 Author Share Posted May 9, 2006 No ideas? Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted May 9, 2006 Author Share Posted May 9, 2006 No ideas? Success!!! I have it working with the 'add weight to product options' contribution - for now anyway!!! I'm just a novice, so the code's probably pretty uk, but if anyone's interested, let me know and I'll post the code I added. ~Barbara~ Quote Link to comment Share on other sites More sharing options...
Guest Posted May 10, 2006 Share Posted May 10, 2006 Well I am interested in getting the Add Weight To Product Attributes v0.1 contribution working with a base install. For some reason, no matter what weight I set the attribute to, the UPS module always displays "1 x 3lb" i.e. it's showing the weight as 3lbs. Anyone have any ideas? :-" Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted May 10, 2006 Author Share Posted May 10, 2006 Well I am interested in getting the Add Weight To Product Attributes v0.1 contribution working with a base install. For some reason, no matter what weight I set the attribute to, the UPS module always displays "1 x 3lb" i.e. it's showing the weight as 3lbs. Anyone have any ideas? :-" Hi... This might seem like a stupid question.. but have you tried the UPS fix on the contributions page? If not, I'd suggest trying that. If not, I'd suggest setting up a different module that displays shipping weights (I'm using the AusPost one cose I'm in australia, but there are others that are probably more relevant) and just test it to see if the problem's with the 'add-to-weight' contrib, or the UPS sontrib. ~Barbara~ Quote Link to comment Share on other sites More sharing options...
Guest Posted May 11, 2006 Share Posted May 11, 2006 Yes, I applied the UPS fix.... Quote Link to comment Share on other sites More sharing options...
Guest Posted June 1, 2006 Share Posted June 1, 2006 Ok..so I installed the New Product Attribute editor mod listed in your original post. What code did you end up using to get the Weights to appear in the Attribute Manager section? Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted June 2, 2006 Author Share Posted June 2, 2006 Ok..so I installed the New Product Attribute editor mod listed in your original post. What code did you end up using to get the Weights to appear in the Attribute Manager section? Ok... this is assuming you have both the New Attributes Manager and Add-Weight-To-Products installed correclty and they are working fine. A couple of warnings - I really am just beginning in php, and after looking through the files again, they look like they have some holes in them - the code hasn't been extensively tested, but it is working for me. I'm also not sure that it will still work with Linda McGrath's contribution, as I used some of that code to make it work for me. There is also a small bug that when I edit something, the price prefix changes to '-'. So BACK-UP EVERYTHING before you do the changes, in case it doesn't work for you... This is my new new_attributes_config.php <? /* $Id: new_attributes_config.php New Attribute Manager v4b, Author: Mike G. Updates for New Attribute Manager v.5.0 and multilanguage support by: Kiril Nedelchev - kikoleppard [email protected] Modified for Add-Weight-to-Products osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ // Change to your default language ID if it differs. $languageFilter = "1"; // If you have Options Type Feature ver. 2.02.MS1 by countezero installed - make this = "1" $optionTypeInstalled = "0"; // If you have "Attributes Sorter & Copier v5.1 with weight" or Forrest Miller's Product Attrib Sort // by Linda McGrath installed - make this = "1" $optionSortCopyInstalled = "0"; // If you have "Add Weight to Products Options" installed - make this = "1" $optionAddWeightInstalled = "1"; // If you have Option Type Feature v-1.4 by Chandra Roukema installed - make this = "1" $optionTypeTextInstalled = "1"; // If you have Option Type Feature v-1.4 by Chandra Roukema installed - set this to your // PRODUCTS_OPTIONS_VALUE_TEXT_ID value ( usually "0" ) $optionTypeTextInstalledID = "0"; ?> This is the new new_attributes_functions.php <? /* $Id: new_attributes_functions.php New Attribute Manager v4b, Author: Mike G. Updates for New Attribute Manager v.5.0 and multilanguage support by: Kiril Nedelchev - kikoleppard [email protected] Modified for Add-Weight-to-Products osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ // A simple little function to determine if the current value is already selected for the current product. function checkAttribute( $current_value_id, $current_product_id, $current_product_option_id ) { global $attribute_value_price, $attribute_value_prefix, /*KIKOLEPPARD zero prefix add*/$zeroCheck/*KIKOLEPPARD zero prefix add*/, $posCheck, $negCheck; $query = "SELECT * FROM products_attributes where options_values_id = '$current_value_id' AND products_id = '$current_product_id' AND options_id = '$current_product_option_id'"; $result = mysql_query($query) or die(mysql_error()); $isFound = mysql_num_rows($result); if ($isFound) { while($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $attribute_value_price = $line['options_values_price']; $attribute_value_prefix = $line['price_prefix']; //KIKOLEPPARD zero prefix start if ($attribute_value_prefix == " ") { $zeroCheck = "SELECTED"; $posCheck = ""; $negCheck = ""; } elseif ($attribute_value_prefix == "+") { $zeroCheck = ""; $posCheck = " SELECTED"; $negCheck = ""; } else { $zeroCheck = ""; $posCheck = ""; $negCheck = " SELECTED"; } } //KIKOLEPPARD zero prefix end return true; } else { $attribute_value_price = ""; $attribute_value_prefix = ""; //KIKOLEPPARD add $zeroCheck = ""; //KIKOLEPPARD add $posCheck = ""; $negCheck = ""; return false; } } function rowClass($i){ $class1 = "attributes-odd"; $class2 = "attributes-even"; if ( $i%2 ) { return $class1; } else { return $class2; } } // For Options Type Contribution function extraValues( $current_value_id, $current_product_id ) { global $attribute_qty, $attribute_order, $attribute_linked, $attribute_prefix, $attribute_type, $isSelected; if ( $isSelected ) { $query = "SELECT * FROM products_attributes where options_values_id = '$current_value_id' AND products_id = '$current_product_id'"; $result = mysql_query($query) or die(mysql_error()); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $attribute_qty = $line['options_values_qty']; $attribute_order = $line['attribute_order']; $attribute_linked = $line['collegamento']; $attribute_prefix = $line['price_prefix']; $attribute_type = $line['options_type_id']; } } else { $attribute_qty = "1"; $attribute_order = "100"; $attribute_linked = "0"; $attribute_prefix = ""; $attribute_type = ""; } } function displayOptionTypes( $attribute_type ) { global $isSelected; $availableTypes = array( 'Disabled' => '0', 'Select' => '1', 'Checkbox' => '2', 'Radio' => '3', 'Select Multiple' => '4', 'Text' => '5' ); foreach( $availableTypes as $name => $id ){ if ( $isSelected && $attribute_type == $id ) { $SELECT = " SELECTED"; } else { $SELECT = ""; } echo "<OPTION VALUE=\"" . $id . "\"" . $SELECT . ">" . $name; } } // Get values for Linda McGrath's contribution function getSortCopyValues( $current_value_id, $current_product_id ) { global $attribute_sort, $attribute_weight, $attribute_weight_prefix, $isSelected; if ( $isSelected ) { $query = "SELECT * FROM products_attributes where options_values_id = '$current_value_id' AND products_id = '$current_product_id'"; $result = mysql_query($query) or die(mysql_error()); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $attribute_sort = $line['products_options_sort_order']; $attribute_weight = $line['products_attributes_weight']; $attribute_weight_prefix = $line['products_attributes_weight_prefix']; } } else { $attribute_sort = "0"; $attribute_weight = ""; $attribute_weight_prefix = ""; } } function sortCopyWeightPrefix( $attribute_weight_prefix ) { global $isSelected; $availablePrefixes = array( /*KIKOLEPPARD add*/' ', /*KIKOLEPPARD add*/'+', /*KIKOLEPPARD add*/'-' ); foreach( $availablePrefixes as $prefix ) { if ( $isSelected && $prefix == $attribute_weight_prefix ) { $SELECT = " SELECTED"; } else { $SELECT = ""; } echo "<OPTION VALUE=\"" . $prefix . "\"" . $SELECT . ">" . $prefix; } } // Get values for Add Weight to Products Options function getAddWeightValues( $current_value_id, $current_product_id ) { global $adpa_attribute_weight, $isSelected; if ( $isSelected ) { $query = "SELECT * FROM products_attributes where options_values_id = '$current_value_id' AND products_id = '$current_product_id'"; $result = mysql_query($query) or die(mysql_error()); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $adpa_attribute_weight = $line['options_values_weight']; } } else { $adpa_attribute_weight = ""; } } ?> New new_attributes_include.php code: <?php /* $Id: new_attributes_include.php New Attribute Manager v4b, Author: Mike G. Updates for New Attribute Manager v.5.0 and multilanguage support by: Kiril Nedelchev - kikoleppard [email protected] Modified for Add-Weight-to-Products osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ ?> <TR> <TD class="pageHeading" colspan="3"><?=$pageTitle?></TD> </TR> <FORM ACTION="<?=$PHP_SELF?>" METHOD="POST" NAME="SUBMIT_ATTRIBUTES"> <INPUT TYPE="HIDDEN" NAME="current_product_id" VALUE="<?=$current_product_id?>"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="change"> <? if ( $cPath ) echo "<INPUT TYPE=\"HIDDEN\" NAME=\"cPathID\" VALUE=\"" . $cPath . "\">"; require( 'new_attributes_functions.php'); // Temp id for text input contribution.. I'll put them in a seperate array. $tempTextID= "1999043"; // Lets get all of the possible options $query = "SELECT * FROM products_options where products_options_id LIKE '%' AND language_id = '$languageFilter'"; $result = mysql_query($query) or die(mysql_error()); $matches = mysql_num_rows($result); if ($matches) { while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $current_product_option_name = $line['products_options_name']; $current_product_option_id = $line['products_options_id']; // Print the Option Name echo "<TR class=\"dataTableHeadingRow\">"; echo "<TD class=\"dataTableHeadingContent\"><B>" . $current_product_option_name . "</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_VALUE_PRICE."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_PRICE_PREFIX."</B></TD>"; if ( $optionTypeInstalled == "1" ) { echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_OPTION_TYPE."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_QUANTITY."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_ORDER."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_LINKED_ATTR."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_ID."</B></TD>"; } if ( $optionSortCopyInstalled == "1" ) { echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_WEIGHT."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_WEIGHT_PREFIX."</B></TD>"; echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_SORT_ORDER."</B></TD>"; } if ( $optionAddWeightInstalled == "1" ) { echo "<TD class=\"dataTableHeadingContent\"><B>".TABLE_HEADING_WEIGHT."</B></TD>"; } echo "</TR>"; // Find all of the Current Option's Available Values $query2 = "SELECT * FROM products_options_values_to_products_options WHERE products_options_id = '$current_product_option_id' ORDER BY products_options_values_id ASC"; $result2 = mysql_query($query2) or die(mysql_error()); $matches2 = mysql_num_rows($result2); if ($matches2) { $i = "0"; while ($line = mysql_fetch_array($result2, MYSQL_ASSOC)) { $i++; $rowClass = rowClass( $i ); $current_value_id = $line['products_options_values_id']; $isSelected = checkAttribute( $current_value_id, $current_product_id, $current_product_option_id ); if ($isSelected) { $CHECKED = " CHECKED"; } else { $CHECKED = ""; } $query3 = "SELECT * FROM products_options_values WHERE products_options_values_id = '$current_value_id' AND language_id = '$languageFilter'"; $result3 = mysql_query($query3) or die(mysql_error()); while($line = mysql_fetch_array($result3, MYSQL_ASSOC)) { $current_value_name = $line['products_options_values_name']; // Print the Current Value Name echo "<TR class=\"" . $rowClass . "\">"; echo "<TD class=\"main\">"; // Add Support for multiple text input option types (for Chandra's contribution).. and using ' to begin/end strings.. less of a mess. if ( $optionTypeTextInstalled == "1" && $current_value_id == $optionTypeTextInstalledID ) { $current_value_id_old = $current_value_id; $current_value_id = $tempTextID; echo '<input type="checkbox" name="optionValuesText[]" value="' . $current_value_id . '"' . $CHECKED . '> ' . $current_value_name . ' '; echo '<input type="hidden" name="' . $current_value_id . '_options_id" value="' . $current_product_option_id . '">'; } else { echo "<input type=\"checkbox\" name=\"optionValues[]\" value=\"" . $current_value_id . "\"" . $CHECKED . "> " . $current_value_name . " "; } echo "</TD>"; echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_price\" value=\"" . $attribute_value_price . "\" size=\"10\"></TD>"; if ( $optionTypeInstalled == "1" ) { extraValues( $current_value_id, $current_product_id ); echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_prefix\" value=\"" . $attribute_prefix . "\" size=\"4\"></TD>"; echo "<TD class=\"main\" align=\"left\"><SELECT name=\"" . $current_value_id . "_type\">"; displayOptionTypes( $attribute_type ); echo "</SELECT></TD>"; echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_qty\" value=\"" . $attribute_qty . "\" size=\"4\"></TD>"; echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_order\" value=\"" . $attribute_order . "\" size=\"4\"></TD>"; echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_linked\" value=\"" . $attribute_linked . "\" size=\"4\"></TD>"; echo "<TD class=\"main\" align=\"left\">" . $current_value_id . "</TD>"; } else { //KIKOLEPPARD zero prefix start echo "<TD class=\"main\" align=\"left\"><SELECT name=\"" . $current_value_id . "_prefix\"> <OPTION value=\" \"" . $zeroCheck . "> <OPTION value=\"+\"" . $posCheck . ">+<OPTION value=\"-\"" . $negCheck . ">-</SELECT></TD>"; //KIKOLEPPARD zero prefix end if ( $optionSortCopyInstalled == "1" ) { getSortCopyValues( $current_value_id, $current_product_id ); echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_weight\" value=\"" . $attribute_weight . "\" size=\"10\"></TD>"; echo "<TD class=\"main\" align=\"left\"><SELECT name=\"" . $current_value_id . "_weight_prefix\">"; sortCopyWeightPrefix( $attribute_weight_prefix ); echo "</SELECT></TD>"; echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_sort\" value=\"" . $attribute_sort . "\" size=\"4\"></TD>"; } //BOF Add-Weight-to-Products if ( $optionAddWeightInstalled == "1" ) { getAddWeightValues( $current_value_id, $current_product_id ); echo "<TD class=\"main\" align=\"left\"><input type=\"text\" name=\"" . $current_value_id . "_weight\" value=\"" . $adpa_attribute_weight . "\" size=\"10\"></TD>"; } } echo "</TR>"; if ( $optionTypeTextInstalled == "1" && $current_value_id_old == $optionTypeTextInstalledID ) { $tempTextID++; } } if( $i == $matches2 ) { $i = "0"; } } } else { echo "<TR>"; echo "<TD class=\"main\"><SMALL>".TABLE_HEADING_NO_VALUES."</SMALL></TD>"; echo "</TR>"; } } } ?> <TR> <TD colspan="10" class="main"><BR><INPUT TYPE="image" src="<?=$adminImages?>button_save.gif"> <?=$backLink?><img src="<?=$adminImages?>button_cancel.gif" border="0"></A></TD> </TR> </FORM> That's it, let me know how you go... ~barbara~ Quote Link to comment Share on other sites More sharing options...
Guest Posted June 2, 2006 Share Posted June 2, 2006 I had to modify the insertion statement in new_attributes_change.php (line 66) to include options_values_weight, but it works now. :) Thanks! Now I need to figure out why it still doesn't properly interface with UPS... Quote Link to comment Share on other sites More sharing options...
Guest Posted June 2, 2006 Share Posted June 2, 2006 Alrighty! All worked out, thanks for the help! Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted June 3, 2006 Author Share Posted June 3, 2006 Alrighty! All worked out, thanks for the help! great! good luck! ~bobsi18~ Quote Link to comment Share on other sites More sharing options...
bobsi18 Posted June 3, 2006 Author Share Posted June 3, 2006 (edited) I had to modify the insertion statement in new_attributes_change.php (line 66) to include options_values_weight, but it works now. :) Thanks! Now I need to figure out why it still doesn't properly interface with UPS... oops, soory, forgot to include! New new_attributes_change.php: <? /* $Id: new_attributes_change.php New Attribute Manager v4b, Author: Mike G. Updates for New Attribute Manager v.5.0 and multilanguage support by: Kiril Nedelchev - kikoleppard [email protected] Modified for Add-Weight-to-Products osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ // I found the easiest way to do this is just delete the current attributes & start over =) MYSQL_QUERY( "DELETE FROM products_attributes WHERE products_id = '$current_product_id'" ); // Simple, yet effective.. loop through the selected Option Values.. find the proper price & prefix.. insert.. yadda yadda yadda. for ($i = 0; $i < sizeof($optionValues); $i++) { $query = "SELECT * FROM products_options_values_to_products_options where products_options_values_id = '$optionValues[$i]'"; $result = mysql_query($query) or die(mysql_error()); $matches = mysql_num_rows($result); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $optionsID = $line['products_options_id']; } $value_price = $HTTP_POST_VARS[$optionValues[$i] . '_price']; $value_prefix = $HTTP_POST_VARS[$optionValues[$i] . '_prefix']; if ( $optionTypeInstalled == "1" ) { $value_type = $HTTP_POST_VARS[$optionValues[$i] . '_type']; $value_qty = $HTTP_POST_VARS[$optionValues[$i] . '_qty']; $value_order = $HTTP_POST_VARS[$optionValues[$i] . '_order']; $value_linked = $HTTP_POST_VARS[$optionValues[$i] . '_linked']; MYSQL_QUERY( "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix, options_type_id, options_values_qty, attribute_order, collegamento ) VALUES( '$current_product_id', '$optionsID', '$optionValues[$i]', '$value_price', '$value_prefix', '$value_type', '$value_qty', '$value_order', '$value_linked' )" ) or die(mysql_error()); // Linda McGrath's contribution or Forrest Miller's Product Attrib Sort } else if ( $optionSortCopyInstalled == "1" ) { $value_sort = $HTTP_POST_VARS[$optionValues[$i] . '_sort']; $value_weight = $HTTP_POST_VARS[$optionValues[$i] . '_weight']; $value_weight_prefix = $HTTP_POST_VARS[$optionValues[$i] . '_weight_prefix']; MYSQL_QUERY( "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix, products_options_sort_order, products_attributes_weight, products_attributes_weight_prefix ) VALUES( '$current_product_id', '$optionsID', '$optionValues[$i]', '$value_price', '$value_prefix', '$value_sort', '$value_weight', '$value_weight_prefix' )" ) or die(mysql_error()); } else if ( $optionAddWeightInstalled == "1" ) { $Option_Add_Weight = $HTTP_POST_VARS[$optionValues[$i] . '_weight']; MYSQL_QUERY( "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix, options_values_weight ) VALUES( '$current_product_id', '$optionsID', '$optionValues[$i]', '$value_price', '$value_prefix', '$Option_Add_Weight' )" ) or die(mysql_error()); } else { MYSQL_QUERY( "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix ) VALUES( '$current_product_id', '$optionsID', '$optionValues[$i]', '$value_price', '$value_prefix' )" ) or die(mysql_error()); } } // For text input option type feature by chandra if ( $optionTypeTextInstalled == "1" && is_array( $HTTP_POST_VARS['optionValuesText'] )) { for ($i = 0; $i < sizeof($optionValuesText); $i++) { $value_price = $HTTP_POST_VARS[$optionValuesText[$i] . '_price']; $value_prefix = $HTTP_POST_VARS[$optionValuesText[$i] . '_prefix']; $value_product_id = $HTTP_POST_VARS[$optionValuesText[$i] . '_options_id']; MYSQL_QUERY( "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix ) VALUES( '$current_product_id', '$value_product_id', '0', '$value_price', '$value_prefix' )" ) or die(mysql_error()); } } ?> Edited June 3, 2006 by bobsi18 Quote Link to comment Share on other sites More sharing options...
MontyMan Posted October 19, 2006 Share Posted October 19, 2006 Monty here, at Brance-Krachy Company in Houston. I am working on a contribution for options products, and I am having trouble figuring out what this script (new_attributes_include.php) is supposed to do. It doesn't appear in our admin menus anywhere that I can find, and no other script anywhere on the site seems to refer to it, or to run it. When I force it to run by entering .../catalog/admin/new_attributes_include.php in my browser, I get a "No Database Selected" error. Apparently this is part of something called Attributes Manager. But if it works, isn't there some way to run the script? Please help. ......MontyMan. monty, at brancekrachy dhat com! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.