Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Development] Products Specifications


kymation

Recommended Posts

Both of those should be possible with this code, at least as far as I understand what they are doing. I tend to avoid Javascript unless it is actually useful, or does something that cannot be done with HTML and CSS. We have much more power in the PHP/MySQL backend, so I prefer to use that power.

 

I've gotten more of the Admin working. I need to finish that up, then I can give you folks something to play with.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

While looking at the code, I noticed the following in categories.php on line 20:

// Products Specifications
 require(DIR_WS_CLASSES . 'boxes.php');

Why require boxes.php here? Class boxes.php is typically used for defining infoboxes in the Catalog not the Admin side. The file that is included in admin/includes/classes/ is a modified copy of the catalog version. Maybe this should have been box.php. Or is it here for testing purposes?

 

Jerome

Edited by JvdP
Link to comment
Share on other sites

That's needed for the Preview page. The specifications are displayed in a box on the Products Info page, so we need the same box here. The admin box class is sufficiently different that it was easier to copy over the boxes class from the catalog side.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

More functions have been added/debugged in this release. The database has been changed again to add some things I missed, and to correct an error in the original design. More changes are not only possible but likely, so don't take this database design as final.

 

Admin -> Catalog -> Categories/Products should now work, including the preview.

Admin -> Catalog -> Products Specifications works except for Filters. I need to work on some other parts of this before the Admin eats my brain. With these changes, it should now be possible to add Specification Groups, link them to Product Categories, add Specifications, then add data to those specifications for your products. After you do all that, the Specifications table will show up for that product. All of the usual Add, Edit, Copy, Move, and Delete functions should work (Where those functions are appropriate, of course.)

 

The functions that I have said should be working may still be buggy. Please report any bugs you find in those functions. The Product Comparison page and everything having to do with filters is still unfinished, so I already know those don't work. There are also features that we've discussed that still need to be added. I'm getting there, just slowly.

 

Any suggestions or thoughts on features are still welcome. Please post them here.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Dear Jim,

I personally want to tank you for starting a challenging project that I’m sure will help me and lots of other Osc users that have been looking for a better way of filtering the products they offer. I personally have been looking for this functionality for over 3 years with no avail. This project gives me hope. :lol:

Since I’m not a programmer or php expert, working with Osc gives me the flexibility to maintain my own web site at low cost and manipulate certain areas as needed by using contribution or by applying the little php I have learned by working with it.

My site offers printer supplies and what I have been looking for I think your contribution will do, If it works for me I’m sure it will help people in the auto parts industry as well as many others more.

We want for our customers to select from a drop down menu or by a link the printer brand they have example ( Epson, HP, Lexmark Etc.), than the model of the printer (1020, 1030, 1040 Etc.) and finally show a list of all available products for the printer brand the customer has selected, however we would like for the form to have divisions as we offer after market (generic) products as well as Original brand products so we would like for the list to be populated with the products in the order we need them to appear as well as with a word division separating generic products, original products or any other products we need to offer for the printer brand they have.

 

Example:

HP 1020 available products (title)

 

Generic Cartridges

Generic A

Generic B

Original Cartridges

Original A

Original B

Photographic Paper

Paper A

Paper B

Etceteras

Etc A

Etc B

 

Of course this is just a wish for consideration, however just to be able to filter and show the products in one form will be a big plus.

Again, thanks for starting what we are sure will be a great contribution that many have been waiting for. :rolleyes:

 

Pair

Link to comment
Share on other sites

This should not be a problem. You would just have to set up two specifications, one for name brand and one for generic. Or three or more if you want. It all depends on how complex the data is. If you have a part that fits two different manufacturers, with one or more models each, then we have to link model to manufacturer. I've been thinking about doing this, but haven't added it to the code yet. So what you want should be possible with the final version of this, if not sooner.

 

I know that filters are the most interesting part of this, but they're also the biggest coding headache. I need to get the rest of the code in shape before I tackle filters, since they're at the bottom of the hierarchy. That goes from general to specific: Product Categories -> Specification Groups -> Specifications -> Filters. In any case, I'm working on the Products Comparison page now (When I have the time.) Once that works, I'll add some basic filters. Then when that all works, I'll add the rest. That should give you folks something to play with while I finish up the details.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Hi Jim,

 

It looks really cool! I have played a little with the contribution. creating groups, specifications, copying them and move around. That all works quite good. The specifications are correctly displayed in the edit productpages as multipleline textboxes. I assume this is where you stopped the development. I understand the values which are typed in the multiple line boxes are not yet posted in the column "specification" of the "products_specifications" table.

 

Idea for input here:

When creating the specification (products_specifications.php & action=new_specification) type of specification should be defined:

  • <INPUT TYPE="text"
  • <INPUT TYPE="text" VALUE="default"
  • <INPUT TYPE="radio" (for instance True/False selection)
  • <INPUT TYPE="checkbox"
  • <TEXTAREA> (might be difficult to display in filtering menu's)
  • <SELECT> (drop-down list)
  • <SELECT MULTIPLE>
  • ?

While testing the contrubution I noticed the following:

 

1. No sort order given when creating new specification resulted in:

 

1366 - Incorrect integer value: '' for column 'specification_sort_order' at row 1

 

insert into specifications (specification_group_id, specification_sort_order, show_comparison, show_products, show_filter, products_column_name) values ('10', '', '', '', '0', '')

 

[TEP STOP]

 

2. Delete a specification group which is not empty resulted in:

 

1054 - Unknown column 'specification_id' in 'field list'

 

select specification_id from products_specifications where specification_description_id = '16'

 

[TEP STOP]

 

3. Linking a specification to categories suggestion

 

Options available are “link all” or “link to a single category”. I can imagine when a category contains subcategories, the same specifications would apply for all subcategories. Maybe it is an option to select add a checkbox to link the specification to all subcategories as well.

 

4. Link a specification to a category which is already linked to the specification resulted in:

 

1062 - Duplicate entry '10-8' for key 'PRIMARY'

 

insert into specification_groups_to_categories (specification_group_id, categories_id) values ('10', '8')

 

[TEP STOP]

 

5. Displaying specifications on product information confusion

 

Not sure what is meant by prefix and suffix. I assume it would be something like:

TEXT_SPEC_PREFIX = text displayed before specification text

TEXT_SPEC_SUFFIX = text displayed after specification text

On “product_info.php” specifications I would expect: TEXT_SPEC_PREFIX - specification_name - TEXT_SPEC_SUFFIX.

 

However :

  • when both TEXT_SPEC_PREFIX and TEXT_SPEC_SUFFIX is filled in, specification_name - TEXT_SPEC_SUFFIX is displayed

  • when TEXT_SPEC_PREFIX is left blank, only TEXT_SPEC_SUFFIX is displayed.

  • when both TEXT_SPEC_PREFIX and TEXT_SPEC_SUFFIX are left blank, nothing is displayed

OK, I will continue playing around with this while looking foreward to some future updates. If I can be any of help please let me know. Please don't hesitate to contact me in case you have any questions about my comments. Thanks for your good work so far!

 

Regards Jerome

Edited by JvdP
Link to comment
Share on other sites

That's about what I had in mind. I'm not sure we can do SELECT MULTIPLE -- I have to think of a way to store multiple values. The same goes for checkboxes. Text (single or multiline), radio, and pulldown are no problem. I need to think about this some more.

 

1. Bug. This should default to 0 or require an input.

 

2. Bug.

 

3. Good idea. Added to the list.

 

4. Bug. Needs a check for duplicates.

 

5. Bug. Both prefix and suffix should show up if values exist. There may be some options for how they are displayed, and possibly different display in the Products Info vs. Comparison vs. Filters.

 

Thanks for taking a look at this. I'll work on the bugs as well as new features. Soon, I hope.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

  • 2 weeks later...

I've added a new release at the usual location. More functions have been added and bugs squashed. The database has been changed as well.

 

More changes are still possible, so the design is still not final. That probably won't happen until version 0.9.

 

Admin bugs have been fixed, and one feature added (Link to Subdirectories.)

 

The Comparison page is now working. I also renamed the file. I still haven't coded the link to this page, so you'll have to hand-type the URL. I added the option of using this table as a replacement for the stock Subcategory page, so you can try it there if you wish.

 

Comments/requests/bug reports are still welcome here.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Hi Jim,

 

Thanks for the update.

 

Fixed:

  • Delete a specification group which is not empty
  • Link a specification to a category which is already linked
  • Displaying specifications on product information confusion
    (Preview function works as well now.)

Not (yet) fixed:

  • No sort order given when creating new specification

I have tested this new revision and noticed the following:

1. Specification name not displayed in admin list:

 

Row 1046 admin\products_specifications.php

<td class="dataTableContent"><?php echo '<a href="' . tep_href_link (FILENAME_PRODUCTS_SPECIFICATIONS, 'spath=' . $specifications['specifications_id']) . '">' . tep_image (DIR_WS_ICONS . 'folder.gif', ICON_FOLDER) . '</a> <b>' . $specifications['specification_name'] . '</b>'; ?></td>

$specifications['specification_name'] has no value.

 

2. Custom function tep_has_category_subcategories not defined:

 

Fatal error: Call to undefined function tep_has_category_subcategories() in E:\Domains\oscSpecifications\admin\products_specifications.php on line 219

When tagging the TEXT_LINK_TO_SUBCATS checkbox.

 

3. Wrong file name comparison module:

 

Typing URL: "

Warning: require_once(includes/modules/comparison.php) [function.require-once]: failed to open stream: No such file or directory in E:\Domains\oscSpecifications\comparison.php on line 48

Fatal error: require_once() [function.require]: Failed opening required 'includes/modules/comparison.php' (include_path='.;C:\php5\pear') in E:\Domains\oscSpecifications\comparison.php on line 48

This file is actually named includes/modules/product_comparison.php

 

4. How to display the comparison page?

 

Not sure how to add products to this URL, I receive TEXT_NO_PRODUCTS in every case. Do you have an example how the URL should be typed? (I tried "
and "
which seemed the most obvious ones to me).

As always, I will continue playing around with this while looking foreward to some future updates. If I can be any of help please let me know. Please don't hesitate to contact me in case you have any questions about my comments. Thanks for your good work so far!

 

Regards Jerome

Edited by JvdP
Link to comment
Share on other sites

Sort order: I thought I had that fixed. Oh well, it's back on the bug list.

 

1. Fixed.

 

2. Oops, that's a catalog-side function. I'll add it to the admin.

 

3. Changed the module filename. And changed all of the Comparison filenames to match, just to make this easier.

 

4. The second one should have worked. Note that the comparison table will only show up if there are specifications to compare, and the table is turned on in the admin. I've added the links anyway, so you can do this the easy way. Just let me fix the last couple of bugs and I'll post a new version.

 

Thanks you for testing this. It's a great help to have someone to find my mistakes. Please let me know if you come up with anything else, either more bugs or ideas for improvement. Once I get these last couple of bugs done, it's on to Filters. Then the real fun starts.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Sort order: I thought I had that fixed. Oh well, it's back on the bug list.

The MySQL configuration on my machine does not allow "" as an integer value. It should accept NULL (if allowed in the table). This is a very strict configuration. Almost 50% of the contributions do have this problem. Most of the times I can fix it myself when nescessary.

4. The second one should have worked. Note that the comparison table will only show up if there are specifications to compare, and the table is turned on in the admin. I've added the links anyway, so you can do this the easy way. Just let me fix the last couple of bugs and I'll post a new version.

I have added two specifications to all the products in this category. checked "http://localhost/oscSpecifications/product_info.php?cPath=2_20&products_id=23" and "http://localhost/oscSpecifications/product_info.php?cPath=2_20&products_id=24" to make sure both products have the specifications listed. Then I typed "http://localhost/oscSpecifications/comparison.php?cPath=2_20".

I tested this in both Internet Explorer and Mozzila Firefox but it gave the same result: Temporary LINK

 

Once I get these last couple of bugs done, it's on to Filters. Then the real fun starts.

Cool!, I can't wait!

 

Regards,

Jerome

Link to comment
Share on other sites

The differences between versions of MySQL drive me crazy. You may need to just dump your database and reload after I get this fixed. I'm still finding problems with my database design.

 

Oops, the 'No products" notice munged the page layout as well. Another bug. Hopefully I can get these fixed and upload a new version today.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

I've just uploaded a new release. This is primarily a bugfix, but I also added links from the Product listing on the index page to the new Comparison page. These links can be configured in the Admin.

 

The database has been changed to fix a couple of persistent bugs. Jerome: This should fix your Sort Order bug. If not please let me know. All other bug reports are welcome, as are feature suggestions.

 

I'm going to concentrate on Filters next. That's the most complex part of the whole thing, so this may take a while. Once I get filters working, I'll go back and add some features to the Specifications part. Then maybe this thing can be released.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Hello Jim.

 

Again thanks for the update. I have evaluated your bugfixes. As promised, I played around with this contribution in the meantime. And have found some new issues.

 

Fixed:

  • Specification name not displayed in admin list
  • Custom function tep_has_category_subcategories not defined
    (new custom function problem, see point 1 below)
  • Wrong file name comparison module
  • How to display the comparison page

Not (yet) fixed; unfortunately:

  • No sort order given when creating new specification

1366 - Incorrect integer value: '' for column 'specification_sort_order' at row 1

 

insert into specifications (specification_group_id, specification_sort_order, show_comparison, show_products, show_filter, products_column_name, column_justify) values ('8', '', 'True', 'True', 'True', '', 'left')

 

[TEP STOP]

 

Possible solution, add:

	  // Set specification sort order to 0, when left blank
	if ($_POST['specification_sort_order'] == '') {$_POST['specification_sort_order'] ='0';}

In catalogus\admin\products_specifications.php on row 358-360

While testing I noticed the following:

1. Custom function tep_get_category_subcategories not defined:

 

Fatal error: Call to undefined function tep_get_subcategories() in E:\Domains\oscSpecifications\admin\products_specifications.php on line 221

 

When tagging the TEXT_LINK_TO_SUBCATS checkbox.

 

Possible solution, add:

////
// Return all subcategory IDs
// TABLES: categories
 function tep_get_subcategories(&$subcategories_array, $parent_id = 0) {
$subcategories_query = tep_db_query("select categories_id from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$parent_id . "'");
while ($subcategories = tep_db_fetch_array($subcategories_query)) {
  $subcategories_array[sizeof($subcategories_array)] = $subcategories['categories_id'];
  if ($subcategories['categories_id'] != $parent_id) {
	tep_get_subcategories($subcategories_array, $subcategories['categories_id']);
  }
}
 }

In catalog\admin\includes\functions\general.php before end ?>

 

However, this part only defines the custom function, it will not link the subcategories to the specification group!

 

2. Prefix not shown on the product info page

 

Instead of the prefix, the specification title is shown in the specification box on the product info page.

 

Possible solution, change:

		$specification_text .= $specifications['specification_name'] . ' ';

To:

	  $specification_text .= $specifications['specification_prefix'] . ' ';

In catalog\includes\modules\products_specification.php on row 65.

 

3. Specification displayed when empty

 

When a specification group is linked to a category, the specification will not be displayed until the product is updated. (This is good, but brings me to the concern in point 7).

When a product is updated the specification will be displayed in the preview and the product info page. However, when the specification is left blank or its text is deleted, it should not be displayed. In this case the entry in table products_specification should not be added or when exists, should be dropped. This prevents empty specification fields being displayed.

 

4. I have yet to get familiar with comparison function, but some things, when selecting Products comparison on the products list.

 

- Products of all linked categories are listed, not only the selected category.

- Categories with two or more linked specifications, only the first specification is listed.

- Product descriptions are not listed (probably still in development).

 

5. Active/inactive functionality admin/products_specification

 

- Specifications which are inactive (green/red) are displayed, even in product info page. Active/inactive is functional for the specification_group only.

 

6. Products Specification settings in Configuration questions:

 

- Should Minimum Spec Category be functional? Comparison button is always displayed.

- Is it correct that the comparison row in table, when set, is always displayed? Even in unlinked categories? (I assume this function is temporary).

 

7. Concern filling in specifications:

 

While it is good thing specifications left empty are not displayed (see point 3), I have this concern: Imagine someone implements this contribution in an existing shop with numerous categories and products. To make this contribution work he/she must fill in all specification text for all products one by one in the product edit page. Maybe we can think of a suitable tool to fill in specifications for multiple categories/products in one single step.

If I find some more issues I will post them here. Meantime I will wait patiently for your next release.

 

Regards,

Jerome

Edited by JvdP
Link to comment
Share on other sites

Sort Order; I just can't kill this one. I don't see this error on my test site. Maybe a server setting? Anyway, I'll go with your patch to take care of the problem for everyone. Thanks for persisting with this bug.

 

1. Another Catalog side function. You are correct, this needs to be added as well. Also, you seem to be missing a language file. Is this because you are not using English in the Admin? Incidentally, translations are welcome, but you might want to wait until the language defines are a bit more stable.

 

2. Bug. Yes, that's a stupid cut-and-paste error. Fixed.

 

3. I agree that the table on the Products Info page should not display empty specifications. Added to the bug list. However, doing this on the Comparison page will mess up the table. I don't want to remove a product from the table just because one (of many) specifications is not yet filled in. Maybe insert N/A if the spec is blank?

 

4. Multipart, so:

A. As intended. If you don't want it to show, don't link it. The most common usage will be to have one Group linked to one Category. The ability to link multiple Categories is mostly useful for Specifications that will be used as Filters. These will mostly be separate from the ones displayed, although some specs may be common to both. I'll have to see how this works out.

B. Bug. That should work.

C. Intentional. The Product Description field is a full Text field, so it's much too long to fit in a table cell. I could extract the first few words, but I'm not certain this would be of value to anyone. Comments?

 

5. Bug. I added this functionality into the Admin and forgot to add it in the catalog side.

 

6. Multipart again:

A. Bug. Yes, it should work that way.

B. Also bug. I was so pleased to get the stupid thing to work that I forgot to add the code to check for the minimum.

 

7. Good point. An addon to Easy Populate to handle specifications might be valuable. If you have any better ideas for a bulk uploader, I'm open to suggestions.

 

Thanks for all of the great bug reports. Obviously I have a lot of work to do. I should probably post another bugfix update before going on with the Filters part. Maybe in a day or two....

 

Regards

Jim

 

Edit; I'll forgive any errors if you'll forgive my fat-finger typos. And coding blunders. Well, maybe that latter is asking too much....

Edited by kymation

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Sort Order; I just can't kill this one. I don't see this error on my test site. Maybe a server setting?

Could be true, our live store, which is running MySQL 4.1.21-standard on Apache/1.3.37 (Unix) and PHP 5.2.2 (Zend: 2.2.0), does not have these problems. But my development box, with MySQL 5.1.34-community on Apache/2.2.11 (Win32) and PHP/5.2.10 (Zend: 2.2.0), does.

 

Also, you seem to be missing a language file. Is this because you are not using English in the Admin? Incidentally, translations are welcome, but you might want to wait until the language defines are a bit more stable.

Well, I am testing this contribution on a standard osCommerce installation. English is default in both admin and catalog. I noticed you added the English language files with your last release. I didn't evaluate any language issues yet. I am native Dutch so didn't pay any attention to language files. But I am happy to provide a Dutch translation when the language defines are more stable.

 

However, doing this on the Comparison page will mess up the table. I don't want to remove a product from the table just because one (of many) specifications is not yet filled in. Maybe insert N/A if the spec is blank?

Yes, I see your point, N/A might be a good option on the Comparison page.

 

4. Multipart

A. As intended. If you don't want it to show, don't link it. The most common usage will be to have one Group linked to one Category. The ability to link multiple Categories is mostly useful for Specifications that will be used as Filters. These will mostly be separate from the ones displayed, although some specs may be common to both. I'll have to see how this works out.

Good point: "If you don't want it to show, don't link it." I could deal with that, but a user must fully understand the structure of this contribution, including setting active/inactive of specifications in Admin. Maybe a consideration?

 

4. Multipart

C. Intentional. The Product Description field is a full Text field, so it's much too long to fit in a table cell.

My mistake; I should have mentioned "Products Name" instead of "Products Description".

 

I should probably post another bugfix update before going on with the Filters part. Maybe in a day or two....

Only if you want; you rather focus on the Filters part when it suites you better, I will keep track of these ones when testing next releases. Perfectionism (is that correct English?) has lower priority than progress. Details might change along the track!

 

Edit; I'll forgive any errors if you'll forgive my fat-finger typos. And coding blunders. Well, maybe that latter is asking too much....

If I could, I would write this contribution myself. But I can't, I am just happy I can fix the problems I encounter (like "" for an incorrect integer). So, I am happy someone is creating this contribution. Coding blunders included, gives me the fun in testing the work.

 

Regards,

Jerome

Edited by JvdP
Link to comment
Share on other sites

I've uploaded a new bugfix release to the usual place. I'm going to concentrate on Filters next. That will likely require some changes to what's already been done, if previous experience is any indication.

 

Yes, Jerome, perfectionism is a perfectly good English word, and the bane of my existence as well. I've never released a couple of addons because I couldn't polish them to my high standards. This is a real problem given my coding abilities. I'm trying to train myself out of this. Using this forum is an experiment in fighting that. I'm hoping that releasing early (and broken) code will allow me to get the code out there without waiting until it's perfect, and also giving me an incentive to keep working on it until it is good enough to use (If not perfect.) So far it's working.

 

I hope that I fixed all of the known bugs in this release. If not, go ahead and let me know, but they may not get fixed until I have a better handle on Filters. Or until I need something to distract me from my non-functional filter code.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Hi Jim,

 

For the Admin side: please note, my suggestion in point 2 defined the missing custom function only, it did not actually link the subcategories to the specification group. But that can be done later.

 

For the catalog side: Could you post catalog/includes/functions/products_specifications.php? This files seems to be missing in your Zip.

 

Best regards,

Jerome

Link to comment
Share on other sites

Adding the missing function should have fixed the linking. If it didn't, there's still another bug in that area.

 

Sorry about the missing file. I've uploaded a new package with the file included.

 

In other news, PHP 5.3 is now out. One of the new features is a GOTO statement. Yes, I can now write code like I did in the days of Fortran 2. Joy!*

 

Regards

Jim

 

*No, I'm not actually going to do that. My code is bad enough as it is.

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

i installeed version 0.2

 

products_specifications_0.2\catalog\includes\modules\products_specifications.php

 

is missing in the package

 

 

Call to undefined function: tep_get_subcategories() in v:\easyphp\www\ms2rc2a_prod_spec\admin\products_specifications.php on line 221

 

$categories_array = tep_get_subcategories ($categories_array, $categories_id);

MS2

Link to comment
Share on other sites

Adding the missing function should have fixed the linking. If it didn't, there's still another bug in that area.

 

Sorry about the missing file. I've uploaded a new package with the file included.

 

In other news, PHP 5.3 is now out. One of the new features is a GOTO statement. Yes, I can now write code like I did in the days of Fortran 2. Joy!*

 

Regards

Jim

 

*No, I'm not actually going to do that. My code is bad enough as it is.

 

PHP 5.3... yes I noticed, took me four days to get everything working again. Sessions really kept me busy this time.

 

Any way, I think there is still a bug in the subcategory linking functionality. However, I am afraid some things are still not complete. Specifications are not displayed in the product preview and product info properly. Hopefully not a PHP 5.3 issue?

 

Sort order issue is fixed by the way!

 

I will wait for your next release (Filtering! Yes!) and continue testing.

 

Regards

Jerome

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