Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

New Attribute Manager & Weight Options


Recommended Posts

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~

Link to comment
Share on other sites

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~

Link to comment
Share on other sites

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? :-"

Link to comment
Share on other sites

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~

Link to comment
Share on other sites

  • 3 weeks later...

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?

Link to comment
Share on other sites

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~

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by bobsi18
Link to comment
Share on other sites

  • 4 months later...

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!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...