Jump to content
kymation

[Contribution] Products Specifications

Recommended Posts

@@kymation

 

Hi Jim! I get this error message:

( ! ) Deprecated: Function ereg() is deprecated in C:\wamp\www\products_filter.php on line 177 Call Stack # Time Memory Function Location 1 0.0012 770248 {main}( ) ..\products_filter.php:0

 

 

 

It happens when I pick a filter, then I pick another filter, (like HONDA, then ACCORD), filter works fine, filters everything out, but I get this error message at the top of the screen, cant be good right? :/

 

Also, I cant give titles to my filters like such:

 

I need it like this:

 

Select make of your vehicle

[pulldown box]

 

Select model of your vehicle

[pulldown box]

 

Select year of your vehicle

[pulldown box]

 

Instead, I have this at the moment:

 

Make

Model

Year

Make

Model

Make

[Pulldown box]

[Pulldown box]

[Pulldown box]

 

Any suggestions?? :(

Share this post


Link to post
Share on other sites

The error message is another missed function. Try this code:

 

  if ( (!isset($_GET['sort'])) || (!preg_match('/^[1-8][ad]$/i', $_GET['sort'])) || (substr($_GET['sort'], 0, 1) > sizeof($column_list)) ) {

 

I don't understand the second question. All Filters have titles that can be displayed. See the User's Manual section on setting up Filters. If that's not what you want, a link to the page or a screenshot might be useful.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

You have an error in your code, right at the beginning of the description tab's content. You have error reporting turned off, so I can't see the error, but it's halting page output at that point. Check your PHP error log or turn on all errors in application_top.php and read the error message.

 

If I had to guess, I would say a missing includes/functions/clean_code.php.

 

Regards

Jim

 

Jim, thank you, problem solved, I had forgot to add link to clean_code.php in application_top, seems to work fine now, I just need to style it, thanks again for your quick response. :D

Share this post


Link to post
Share on other sites

@@kymation

Hi jim! Thanks, the code fixed the problem! :D

 

This is what I meant :

http://postimage.org/image/5h8aolh5j/

 

I can't fix it...

 

I think it's me not configuring the contribution properly, I guess I can figure this one out, not such a big deal.

 

The major problems I am facing right now thou;

 

- When I filter the catalog for a specific vehicle, the filter works fine, but when I go to a different category, the filter is no longer filtering, the filter variables dont get passed along in the categories... So the prospect has to re-submit the attributes every time he switches categories.

 

I am using this contribution for an auto parts store, ideally, I need the prospect to be able to submit his vehicles information once [make mode and year] and then keep surfing all categories, see parts only for his vehicle.

 

 

-Second problem for me, the catalog is going to hold over 8000 products, is it possible to submit all attributes first, then hit "SEARCH" filter everything at once as oposed to filter the entire catalog when the prospect selects [vehicle make], then further filters when they select [vehicle models] and then a 3rd time whent he select [submodel] fallowed by [year], it will create delays and frustration for the client.

 

 

Are any of those fixable??

 

Thank You

-Alex

Share this post


Link to post
Share on other sites

There is something wrong with your Specification setup. It appears that you have multiple specifications for manufacturer, year, etc. This will not work. You need to have one specification for Manufacturer, with the values Honda, Acura, etc.

 

To get the filters to carry over to a different category, you will need to pass the filter values in the URL in the Categories menu etc. This is normally not done because it doesn't make sense for most stores.

 

The default for filters is a Javascript that submits the filter as soon as it is selected. You can remove that, enclose the filters in a form, and add a submit button. This will submit all changes at once.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

hey @@kymation I have an issue with the review tap which i read some other members had too, but I didn't manage to solve it.

Basically when I press to post the review it adds the item to my shopping cart.

 

So I read the form tags have to be in the right place and make sure there are no duplicates. I have looked through the product_info.php and /modules/product_reviews.php and I can't spot anything wrong.

 

I have compared to the installation files and everything seems to be ok, but it still happens.

 

I have looked at the page source in Firefox and it does show an error saying that there is a nested form tag which is not allowed.

 

I just don't know what it is...


Find this post helpful? Click the 'Like this' button. :)

Share this post


Link to post
Share on other sites

Firefox is right. You need to find the incorrect form tag(s) and move them to the correct places.

 

The error is most likely in product_info.php. Find the </form> tag and move it to just before this code:

 

<?php
include_once (DIR_WS_MODULES . FILENAME_PRODUCTS_TABS);
// End Products Specifications
?>

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

@@kymation

 

Thanks, that partly solved the problem. It doesn't add to cart like before but now if kinda just refreshes the page. It adds this to the end of the url

?action=process&tab=review

 

The text entered in the reviews box is still there and the review doesn't appear for approval in admin.

 

Any suggestions what I should do?

 

Regards

Aleksander

Edited by al3ks

Find this post helpful? Click the 'Like this' button. :)

Share this post


Link to post
Share on other sites

I would guess that the code in the top of products_info.php that processes the form output is incomplete or missing.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

It's not that, I replaced the product_info.php with the one provided in teh contribution and still the same.


Find this post helpful? Click the 'Like this' button. :)

Share this post


Link to post
Share on other sites

@@willer2k

 

Did you have any luck with this?, i have exactly the same thing is happening to my site but I cant figure out how to fix it. I have even removed all specifications and started again but get the same problem.

 

@@kymation

 

Also, I cant give titles to my filters like such:

 

I need it like this:

 

Select make of your vehicle

[pulldown box]

 

Select model of your vehicle

[pulldown box]

 

Select year of your vehicle

[pulldown box]

 

Instead, I have this at the moment:

 

Make

Model

Year

Make

Model

Make

[Pulldown box]

[Pulldown box]

[Pulldown box]

 

Any suggestions?? :(

Share this post


Link to post
Share on other sites

@@kymation

 

I am having a problem with products filter infobox. I have tried alot of different variations but it always looks like image (link below). I can not figure out how to fix it. I have also shown how I have set the filters up in admin incase I am doing something wrong here.

 

http://postimage.org/image/wlknbfgcb/

 

I would be extremely greatful for any help.

Share this post


Link to post
Share on other sites

For one, your filters need to match your values or you'll never get any matches. The rest looks like an HTML error. I probably didn't get the filter box converted properly. You'll need to look at the HTML (View Source in your browser) and see what it is doing. Firefox is the best because it highlights HTML errors in red.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

@@kymation

 

Thanks for your reply, I have checked this in firebug on firefox and the only errors i get are for missing images (example below) which i have fixed and have no effect on the layout

 

http://postimage.org/image/7eiwf6cxt/

 

Below is my bm_product_filters.php (i think this is where the problem is) could you check it to see if I have deleted or changed something that I shouldn't have.

 

<?php
/*
 $Id: bm_products_filter.php, v 1 20110717 kymation Exp $
 $Loc: catalog/includes/modules/boxes/ $
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2011 osCommerce
 Released under the GNU General Public License
*/

 class bm_products_filter {
   var $code = 'bm_products_filter';
   var $group = 'boxes';
   var $title;
   var $description;
   var $sort_order;
   var $enabled = false;
   function bm_products_filter() {
  $this->title = MODULE_BOXES_PRODUCTS_FILTER_TITLE;
  $this->description = MODULE_BOXES_PRODUCTS_FILTER_DESCRIPTION;
  if (defined('MODULE_BOXES_PRODUCTS_FILTER_STATUS')) {
    $this->sort_order = MODULE_BOXES_PRODUCTS_FILTER_SORT_ORDER;
    $this->enabled = (MODULE_BOXES_PRODUCTS_FILTER_STATUS == 'True');
    $this->group = ((MODULE_BOXES_PRODUCTS_FILTER_CONTENT_PLACEMENT == 'Left Column') ? 'boxes_column_left' : 'boxes_column_right');
  }
   }
   function execute() {
  global $current_category_id, $languages_id, $oscTemplate, $currencies;
  require_once (DIR_WS_FUNCTIONS . 'products_specifications.php');
  require_once (DIR_WS_CLASSES . 'specifications.php');
  $spec_object = new Specifications();
  $box_text = ''; //HTML string goes into the text part of the box
  $specs_query_raw = "
		  select
		    s.specifications_id,
		    s.products_column_name,
		    s.filter_class,
		    s.filter_show_all,
		    s.filter_display,
		    sd.specification_name,
		    sd.specification_prefix,
		    sd.specification_suffix
		  from
		    " . TABLE_SPECIFICATION . " s
		    join " . TABLE_SPECIFICATION_DESCRIPTION . " sd
			  on (sd.specifications_id = s.specifications_id)
		    join " . TABLE_SPECIFICATION_GROUPS . " sg
			  on (sg.specification_group_id = s.specification_group_id)
		    join " . TABLE_SPECIFICATIONS_TO_CATEGORIES . " s2c
			  on (s2c.specification_group_id = sg.specification_group_id)
		  where
		    s2c.categories_id = '" . $current_category_id . "'
		    and s.show_filter = 'True'
		    and sg.show_filter = 'True'
		    and sd.language_id = '" . $languages_id . "'
		  order by
		    s.specification_sort_order,
		    sd.specification_name
	    ";
  // print $specs_query_raw . "<br>\n";
  $specs_query = tep_db_query($specs_query_raw);
  $first = true;
  while ($specs_array = tep_db_fetch_array($specs_query)) {
    // Retrieve the GET vars, sanitize, and assign to variables
    // Variable names are the letter "f" followed by the specifications_id
    $var = 'f' . $specs_array['specifications_id'];
    $$var = '0';
    if (isset ($_GET[$var]) && $_GET[$var] != '') {
	  // Decode the URL-encoded names, including arrays
	  $$var = tep_decode_recursive($_GET[$var]);
	  // Sanitize variables to prevent hacking
	  $$var = tep_clean_get__recursive($_GET[$var]);
	  // Get rid of extra values if Select All is selected
	  $$var = tep_select_all_override($$var);
    }
    $filters_query_raw = "
			    select
				  sf.specification_filters_id,
				  sfd.filter
			    from
				  " . TABLE_SPECIFICATIONS_FILTERS . " sf
				  join " . TABLE_SPECIFICATIONS_FILTERS_DESCRIPTION . " sfd
				    on (sfd.specification_filters_id = sf.specification_filters_id)
			    where
				  sf.specifications_id = '" . (int) $specs_array['specifications_id'] . "'
				  and sfd.language_id = '" . $languages_id . "'
			    order by
				  sf.filter_sort_order,
				  sfd.filter
			  ";
    // print $filters_query_raw . "<br>\n";
    $filters_query = tep_db_query($filters_query_raw);
    $count_filters = tep_db_num_rows($filters_query);
    $filters_select_array = array ();
    if ($count_filters >= MODULE_BOXES_PRODUCTS_FILTER_MINIMUM) {
	  $filters_array = array ();
	  if ($first == false) {
	    $box_text .= "<br>\n";
	  }
	  $first = false;
	  $box_label .= '<b>' . $specs_array['specification_name'] . '</b><br/>';
	  $filter_index = 0;
	  if ($specs_array['filter_show_all'] == 'True') {
	    $count = 1;
	    if (MODULE_BOXES_PRODUCTS_FILTER_NO_RESULT != 'normal' || MODULE_BOXES_PRODUCTS_FILTER_SHOW_COUNT == 'True') {
		  // Filter ID is set to 0 so no filter will be applied
		  $count = $spec_object->getFilterCount('0', $specs_array['specifications_id'], $specs_array['filter_class'], $specs_array['products_column_name']);
	    }
	    // The ID value must be set as a string, not an integer
	    $filters_select_array[$filter_index] = array (
		  'id' => '0',
		  'text' => TEXT_SHOW_ALL,
		  'count' => $count
	    );
	    $filter_index++;
	  }
	  $previous_filter = 0;
	  $previous_filter_id = 0;
	  while ($filters_array = tep_db_fetch_array($filters_query)) {
	    $filter_id = $filters_array['filter'];
	    if ($specs_array['products_column_name'] == 'products_price' || $specs_array['products_column_name'] == 'final_price') {
		  $previous_filter = $currencies->format($previous_filter);
		  $filter_text = $currencies->format($filters_array['filter']);
	    } else {
		  $filter_text = $specs_array['specification_prefix'] . ' ' . $filters_array['filter'] . ' ' . $specs_array['specification_suffix'];
	    }
	    if ($specs_array['filter_class'] == 'range') {
		  $filter_text = $previous_filter . ' - ' . $filter_text;
		  $filter_id = $previous_filter_id . '-' . $filters_array['filter'];
		  $previous_filter = $filters_array['filter'];
		  $previous_filter_id = $filters_array['filter'];
	    }
	    $count = 1;
	    if (MODULE_BOXES_PRODUCTS_FILTER_NO_RESULT != 'normal' || MODULE_BOXES_PRODUCTS_FILTER_SHOW_COUNT == 'True') {
		  $count = $spec_object->getFilterCount($filter_id, $specs_array['specifications_id'], $specs_array['filter_class'], $specs_array['products_column_name']);
	    }
	    $filters_select_array[$filter_index] = array ( 'id' => $filter_id , 'text' => $filter_text, 'count' => $count);
	    $filter_index++;
	  } // while ($filters_array
	  // For range class only, create a filter for maximum value +
	  if ($specs_array['filter_class'] == 'range') {
	    if ($specs_array['products_column_name'] == 'products_price' || $specs_array['products_column_name'] == 'final_price') {
		  $previous_filter = $currencies->format($previous_filter);
	    }
	    $count = 1;
	    if (MODULE_BOXES_PRODUCTS_FILTER_NO_RESULT != 'normal' || MODULE_BOXES_PRODUCTS_FILTER_SHOW_COUNT == 'True') {
		  $count = $spec_object->getFilterCount($previous_filter_id, $specs_array['specifications_id'], $specs_array['filter_class'], $specs_array['products_column_name']);
	    }
	    //		  $filters_select_array[$filter_index] = array ('id' => rawurlencode ($previous_filter_id),
	    $filters_select_array[$filter_index] = array (
		  'id' => ($previous_filter_id
	    ), 'text' => $previous_filter . '+', 'count' => $count);
	  } // if ($specs_array['filter_class'] == 'range'
	  $box_text .= tep_get_filter_string($specs_array['filter_display'], $filters_select_array, FILENAME_PRODUCTS_FILTERS, $var, $$var);
	  if ($box_text != '<br clear=all>') {
	    $box_text = $box_label . $box_text;
	  }
    } // if ($count_filters
  } // while ($specs_array
  if ($count_filters >= MODULE_BOXES_PRODUCTS_FILTER_MINIMUM) {
    $oscTemplate->addBlock($box_text, $this->group);
  }
   }
   function isEnabled() {
  return $this->enabled;
   }
   function check() {
  return defined('MODULE_BOXES_PRODUCTS_FILTER_STATUS');
   }
   function install() {
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Filter Box Module', 'MODULE_BOXES_PRODUCTS_FILTER_STATUS', 'True', 'Do you want to add the module to your shop?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Content Placement', 'MODULE_BOXES_PRODUCTS_FILTER_CONTENT_PLACEMENT', 'Left Column', 'Should the module be loaded in the left or right column?', '6', '1', 'tep_cfg_select_option(array(\'Left Column\', \'Right Column\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_BOXES_PRODUCTS_FILTER_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '2', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Minimum Spec Filter', 'MODULE_BOXES_PRODUCTS_FILTER_MINIMUM', '2', 'The minimum number of filters needed to have the Filters box show up in the column', '6', '3', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Filter Show Count', 'MODULE_BOXES_PRODUCTS_FILTER_SHOW_COUNT', 'True', 'Show the number of products that the filter would return', '6', '4', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Filter No Result', 'MODULE_BOXES_PRODUCTS_FILTER_NO_RESULT', 'normal', 'What to show for a filter that would return no result.', '6', '5', 'tep_cfg_select_option(array(\'normal\', \'grey\', \'none\'), ', now())");
   }
   function remove() {
  tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
   }
   function keys() {
  $keys = array ();
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_STATUS';
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_CONTENT_PLACEMENT';
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_SORT_ORDER';
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_MINIMUM';
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_SHOW_COUNT';
  $keys[] = 'MODULE_BOXES_PRODUCTS_FILTER_NO_RESULT';
  return $keys;
   }
 }
?>

 

Thank you for your help, I am beginning to pull my hair out trying to figure this out. :(

Share this post


Link to post
Share on other sites

I can't see the problem in that. I'd have to look at the HTML it generates. Is your site accessible? If you don't want to post it here, you can PM me a link,

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

The problem may be in catalog/includes/functions/product_specifications.php, in the tep_get_filter_string() function. I don't know offhand, and I don't have time to look at it right now. You might try adding a div around each filter.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

@@kymation

 

No problem, I tried adding a div around each filter but I seems to put them inside each other, but I will take a look at functions/product_specifications.php and hopefully I will fix it out there, thanks again for all your help :D

Share this post


Link to post
Share on other sites

I am having issues with the html code in the product descriptions edit box. I am using OSC 2.3.1 with the Product Specifications add on.

 

When I paste html code into the product description edit box, save, then return to the product, this is what is looks like. It adds /r /n and the / Any quick comments about which file I screwed up ?

 

Thanks

 

<head>\r\n<style type=\\\"text/css\\\">\r\n.style1 {\r\n padding: 2px;\r\n border-style: solid;\r\n border-width: 1px;\r\n width: 160px;\r\n}\r\n.style2 {\r\n padding: 2px;\r\n border-style: solid;\r\n border-width: 1px;\r\n width: 460px;\r\n}\r\n.style3 {\r\n border-style: solid;\r\n border-width: 1px;\r\n}\r\n.style4 {\r\n border-style: solid;\r\n border-width: 1px;\r\n width: 620px;\r\n}\r\n</style>\r\n</head>\r\n\r\n\r\n<p>some text<p>\r\n<br>\r\n<br>\r\n\r\n<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" class=\\\"style4\\\">\r\n<caption class=\\\"style3\\\">Product Specifications</caption>\r\n<tr>\r\n<td class=\\\"style1\\\">Description</td>\r\n<td class=\\\"style2\\\">Ruger MKIII 22-45 LITE 22LR 4.4\\\" AS 3900 ALUMINUM UPPER / THREADED</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Model</td>\r\n<td class=\\\"style2\\\">Mark III 22/45 Lite</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">UPC</td>\r\n<td class=\\\"style2\\\">736676039005</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">xxx</td>\r\n<td class=\\\"style2\\\">Pistol</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Type</td>\r\n<td class=\\\"style2\\\">Pistol</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Action</td>\r\n<td class=\\\"style2\\\">Single</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Caliber</td>\r\n<td class=\\\"style2\\\">.22 LR</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Barrel Length</td>\r\n<td class=\\\"style2\\\">4.4”</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Overall Length</td>\r\n<td class=\\\"style2\\\">8.5”</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Capacity</td>\r\n<td class=\\\"style2\\\">.10+1</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Safety</td>\r\n<td class=\\\"style2\\\">Left</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Sights</td>\r\n<td class=\\\"style2\\\">Adjustable</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Finish</td>\r\n<td class=\\\"style2\\\">Gold Anodize</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Frame</td>\r\n<td class=\\\"style2\\\">Polymer Frame</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Grips</td>\r\n<td class=\\\"style2\\\">Hogue Black Rubber Grip Panels</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Weight</td>\r\n<td class=\\\"style2\\\">22.8 Oz.</td>\r\n</tr>\r\n<tr>\r\n<td class=\\\"style1\\\">Additional Info</td>\r\n<td class=\\\"style2\\\">Aluminum Upper</td>\r\n</tr>\r\n</table>\r\n<br><br>\r\n

Share this post


Link to post
Share on other sites

Are you using a Windows computer to update a site running under Linux? I've seen that happen before. The best fix is to use CKEditor on your description field. If not, you may be able to get your current editor to save in Linux format and use that.

 

I'm also seeing a lot of things in your product description that look like specifications to me.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

@@borhunt

 

in admin/categories.php

 

change

'products_description' => addslashes( tep_db_input( $_POST['products_description'][$language_id] ) ),

to

'products_description' =>  tep_db_prepare_input( $HTTP_POST_VARS['products_description'][$language_id] ),

 

and in includes/modules/products_tabs.php

 

echo stripslashes( tep_sanitize_html( html_entity_decode( stripslashes( $product_info[ 'products_description' ] ) ) ) );

 

to

 

echo stripslashes( $product_info[ 'products_description' ]  );

 

 

Jules

Share this post


Link to post
Share on other sites

While this may work, it is unsafe unless you take great care that the HTML in your descriptions is clean and correct. I don't recommend making this change.

 

Regards

Jim


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

Share this post


Link to post
Share on other sites

this is the default way that 2.3.1 does it - i assume that tep_db_prepare_input ( never actually had a look what it does ) provides all the needed filtering to make it safe.

 

 

Jules

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×