Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Bundled products


Recommended Posts

  • Replies 331
  • Created
  • Last Reply

Top Posters In This Topic

Hi to all, this is my first post ;)

 

I installed Bundle Report Contrib and i saw that in the product_info page don't display if the product is a special price.

 

I modified catalog/product_info.php:

 

search:

 

 	 while ($bundle_data = tep_db_fetch_array($bundle_query)) {
   if ($bundle_data['products_bundle'] == "yes") {
       
         echo "<br>» <b>" . $bundle_data['subproduct_qty'] . " x " . $bundle_data['products_name'] . "</b>";
  	 echo "<br>» <b> " . $bundle_data['products_name'] . "</b>";
  	 
  	 $bundle_query_nested = tep_db_query("	SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price
        	 FROM products p
        	 INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
            ON p.products_id=pd.products_id
        	 INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb
            ON pb.subproduct_id=pd.products_id
        	 WHERE pb.bundle_id = " . $bundle_data['products_id'] . " and language_id = '" . (int)$languages_id . "'");
          while ($bundle_data_nested = tep_db_fetch_array($bundle_query_nested)) {
           echo "<br><i>     " . $bundle_data_nested['subproduct_qty'] . " x " . $bundle_data_nested['products_name'] . "</i>";
     echo "<br><i>     " . $bundle_data_nested['products_name'] . "</i>";
     $bundle_sum += $bundle_data_nested['products_price']*$bundle_data_nested['subproduct_qty'];
  	 }
   } else {
            echo "<tr><td class=main valign=top>";
            echo '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $bundle_data['products_id']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . $bundle_data['products_image'], $bundle_data['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="1" vspace="1"') . '</a>';
            echo "</td><td class=main >» <b>" . $bundle_data['subproduct_qty'] . " x " . $bundle_data['products_name'] . '</b>   </td><td align = right class=main><b>  ' .  $currencies->display_price($bundle_data['products_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) . "</b></td></tr>";    
  	 $bundle_sum += $bundle_data['products_price']*$bundle_data['subproduct_qty'];
   }
	 }
	 $bundle_saving = $bundle_sum - $product_info['products_price'];
	 $bundle_sum = $currencies->display_price($bundle_sum, tep_get_tax_rate($product_info['products_tax_class_id']));
	 $bundle_saving =  $currencies->display_price($bundle_saving, tep_get_tax_rate($product_info['products_tax_class_id']));
	 echo "<tr><td colspan=3 class=main><p><b>" . TEXT_RATE_COSTS . ' ' . $bundle_sum . '</b></td></tr><tr><td class=main colspan=3><font color="red"><b>' . TEXT_IT_SAVE . ' ' . $bundle_saving . '</font></b>';
   }

 

replace width:

 

while ($bundle_data = tep_db_fetch_array($bundle_query)) {
   if ($bundle_data['products_bundle'] == "yes") {
      	 
  	 // uncomment the following line to display subproduct qty
                              echo "<br>» <b>" . $bundle_data['subproduct_qty'] . " x " . $bundle_data['products_name'] . "</b>";
  	 echo "<br>» <b> " . $bundle_data['products_name'] . "</b>";
  	 
  	 $bundle_query_nested = tep_db_query("	SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price
        	 FROM products p
        	 INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
            ON p.products_id=pd.products_id
        	 INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb
            ON pb.subproduct_id=pd.products_id
        	 WHERE pb.bundle_id = " . $bundle_data['products_id'] . " and language_id = '" . (int)$languages_id . "'");
                                  
           while ($bundle_data_nested = tep_db_fetch_array($bundle_query_nested)) {
        	 // uncomment the following line to display subproduct qty
             echo "<br><i>     " . $bundle_data_nested['subproduct_qty'] . " x " . $bundle_data_nested['products_name'] . "</i>";
       echo "<br><i>     " . $bundle_data_nested['products_name'] . "</i>";
       $bundle_sum += $bundle_data_nested['products_price']*$bundle_data_nested['subproduct_qty'];
  	 }
   } else {      
[b]          
  	 $bundle_query_specials = tep_db_query("SELECT specials_new_products_price  from specials where products_id = " . $bundle_data['products_id'] . " and status=1");
  	 $v_special=tep_db_fetch_array($bundle_query_specials);
  	 if (!$v_special){
           $prezzo_speciale=$bundle_data['products_price'];
         }
         else{
           $prezzo_speciale=$v_special['specials_new_products_price'];
         }
[/b]
         
// uncomment the following line to display subproduct qty   	 
                            echo "<tr><td class=main valign=top>";
                            echo '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $bundle_data['products_id']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . $bundle_data['products_image'], $bundle_data['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="1" vspace="1"') . '</a>';
                            echo "</td><td class=main >» <b>" . $bundle_data['subproduct_qty'] . " x " . $bundle_data['products_name'] . '</b>   </td><td align = right class=main><b>  ' .  $currencies->display_price([b]$prezzo_speciale[/b], tep_get_tax_rate($product_info['products_tax_class_id'])) . "</b></td></tr>";
   //	echo "<br>» <b> " . $bundle_data['products_name'] . "</b>";
  	 $bundle_sum += [b]$prezzo_speciale[/b]*$bundle_data['subproduct_qty'];
   }
	 }
	 $bundle_saving = $bundle_sum - $product_info['products_price'];
	 $bundle_sum = $currencies->display_price($bundle_sum, tep_get_tax_rate($product_info['products_tax_class_id']));
	 $bundle_saving =  $currencies->display_price($bundle_saving, tep_get_tax_rate($product_info['products_tax_class_id']));
                 // comment out the following line to hide the "saving" text
	 echo "<tr><td colspan=3 class=main><p><b>" . TEXT_RATE_COSTS . ' ' . $bundle_sum . '</b></td></tr><tr><td class=main colspan=3><font color="red"><b>' . TEXT_IT_SAVE . ' ' . $bundle_saving . '</font></b>';
   }

 

 

In the admin->categories.php don't work combobox if the browser is mozilla.

 

PS: sorry for my english :rolleyes:

Link to comment
Share on other sites

Just installed v1.4 and everything seems to be working.  My store is not "live" yet but I have made a few test orders.  For those interested I also have 1) Downloads Controller 2) PayPal IPN (osCommerce version) and 3)Quantity Price Breaks per Product installed.  There was only one conflicting line with QPBPP (line #72 --In /catalog/admin/categories.php but it was easy to combine into...

 

found another conflict with QPBPP (line #421--In /catalog/admin/categories.php)

      $product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_price1, p.products_price2, p.products_price3, p.products_price4, p.products_price5, p.products_price6, p.products_price7, p.products_price8, p.products_price1_qty, p.products_price2_qty, p.products_price3_qty, p.products_price4_qty, p.products_price5_qty, p.products_price6_qty, p.products_price7_qty, p.products_price8_qty, p.products_qty_blocks, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_bundle from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");

 

I also have solved the download problem that I posted earlier. For example lets say you have the following:

Bundle 01

>Product A

>Product B

>Product C

 

and Products A, B and C have downloads

 

If someone purchases Bundle 01, the downloads for the subproducts are automatically added to the order and they are named after the subproducts NOT the bundle.

 

I have also added code that shows the subproducts as attributes of the bundle so in the cart and invoice looks like:

 

Bundle 02

- Subproduct: 1 x Product A

- Subproduct: 2 x Product B

- Subproduct: 1 x Product C

 

I need to test some more, but can post if there is interest

Link to comment
Share on other sites

  • 1 month later...

Good day everyone, i have a question.

i have successfully used the bundled mod and the MP mod, but i cant seem to find a mod to do what i need to do on another project. Perhaps i am a fool and missed something in one of these mods.

 

my client would like to sell sewing patterns, now, how she wants it set is, you can either by the main package, which will include everything needed to make that product or, they can select from the list below the prodcut of what they wish to choose.

so instead of buying the package, they can choose to just buy the thread, the needle, eye hooks etc, and change the quanitity of each item if they so wish to buy them individually.

 

Now, have a i missed something and one of these contributions will do this?

MP i know can do something like this, but my client would like ease of use in the admin, and as much as i understand the MP, she may not find it as easy to use.

any suggestions?

Link to comment
Share on other sites

  • 2 weeks later...

Hello,

 

I got a "bundled_products" contrib installed and I used the following scenario: I choose a bundled product, place it in a cart then go to view my basket and then click on the product in my basket, it takes me back to that product_info page and I get an error:

1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '{4}12 and language_id = '1'' at line 7

 

SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image FROM products p INNER JOIN products_description pd ON p.products_id=pd.products_id INNER JOIN products_bundles pb ON pb.subproduct_id=pd.products_id WHERE pb.bundle_id = 56{4}12 and language_id = '1'

 

[TEP STOP]

Does anybody have any advice for me on this error?

 

Thanks in advance.

Irina.

Link to comment
Share on other sites

The section...

 

{4} 12

 

...seems to be causing the problem. Search through the source and have a look at your SQL database to try and work out how it is being generated. Curly brackets are not a welcome part of that area of code.

- osCommerce is fun! -
Link to comment
Share on other sites

The section...

 

{4} 12

 

...seems to be causing the problem. Search through the source and have a look at your SQL database to try and work out how it is being generated. Curly brackets are not a welcome part of that area of code.

Thanks for your reply, sosidge. Could you please be more specific in your explanations, I don't understand much in coding. Where exactly should I search and what should I look for in my database?

 

Thanks a lot,

Irina.

Link to comment
Share on other sites

The section...

 

{4} 12

 

...seems to be causing the problem. Search through the source and have a look at your SQL database to try and work out how it is being generated. Curly brackets are not a welcome part of that area of code.

That curly bracket stuff is the attributes. If I add a product to my shopping cart, its the same thing. What can cause my error to appear?

 

Thanks,

Irina.

Link to comment
Share on other sites

Maybe the attributes clash with the bundle. I don't use them so I can't really say for sure.

Do you have any suggestions for me to try? I don't really like this error appearing in my store.

 

I appreciate it. Thanks,

Irina.

Link to comment
Share on other sites

I don't know enough about the way the attributes work to suggest a quick fix, sorry.

 

I think you will either have to remove the bundle mod or do some more investigations yourself.

Thanks. What a great support :(

Are you an original author of the contrib? May be somebody else is more aware of the way attributes work and can give me some more advices? Sorry, I don't mean to offend you.

 

Regards.

Link to comment
Share on other sites

Thanks. What a great support :(

 

What kind of support do you expect from a FREE program?

 

I didn't write the contribution, I merely put the improvements I had made out into the community to help the projects development. I didn't have to do that, it is simply good manners. That is how open source works.

 

I'm not here to work for free for someone who is too lazy or unskilled to find their own solutions.

 

So I think you should improve your attiotude if you want others to help you.

 

I for one will NOT be helping you any further.

- osCommerce is fun! -
Link to comment
Share on other sites

What kind of support do you expect from a FREE program?

 

I didn't write the contribution, I merely put the improvements I had made out into the community to help the projects development. I didn't have to do that, it is simply good manners. That is how open source works.

 

I'm not here to work for free for someone who is too lazy or unskilled to find their own solutions.

 

So I think you should improve your attiotude if you want others to help you.

 

I for one will NOT be helping you any further.

I appologize if I offended you, didn't mean to. The reason I said like that is I'm, as you said, unskilled and unable myself to find a solution. But I'm not lazy :sweating: and totally rely on others help. I'm more than willing to participate in improving those great free contributions. They are excellent.

 

Please accept my appologies. :blush:

Link to comment
Share on other sites

Howdy Folks

 

I would like to have my Bundled Products listed also as Specials.

 

Currently, if I add a bundled product to Specials, it's special price is not correct in the You save... line.

 

Here's what I did:

  1. I added a bundled product with three products @ $5.00 each.
     
  2. I made the bundled product price $15.00 (no savings), and then I put the bundled product on Special at $10.00.
     
  3. I was hoping it would then say You save $5.00, but it doesn't.

Is it possible to have a Bundled Product also be on Special and the price that you save accurate? :huh:

 

Please let me know if you know. :)

 

Best, Ted

Link to comment
Share on other sites

Bundled Products and Attributes Issue

 

I think I found the solution.

 

In my case, the problem occurred on product_info.php.

 

This is what would happen:

 

1. Purchase a product bundle, with attributes, like giftwrap

2. Go to the shopping cart

3. Notice an attribute that needed editing

4. Attempt to return to bundle on product_info.php, only to receive an SQL error message.

 

The error looks like it comes from the currly brackets { } next to the product ID.

 

This is the code that I edited (the only edit is the bold (int) before the $HTTP_GET_VARS...):

 

echo TEXT_PRODUCTS_BY_BUNDLE . "</td></tr>";

$bundle_query = tep_db_query(" SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image

FROM products p

INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd

ON p.products_id=pd.products_id

INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb

ON pb.subproduct_id=pd.products_id

WHERE pb.bundle_id = " . (int)$HTTP_GET_VARS['products_id'] . " and language_id = '" . (int)$languages_id . "'");

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I'm not getting any SQL errors anymore on product_info.php.

 

I hope this helps! :)

Link to comment
Share on other sites

Bundled Products and Attributes Issue

 

I think I found the solution.

 

In my case, the problem occurred on product_info.php.

 

This is what would happen:

 

1. Purchase a product bundle, with attributes, like giftwrap

2. Go to the shopping cart

3. Notice an attribute that needed editing

4. Attempt to return to bundle on product_info.php, only to receive an SQL error message.

 

The error looks like it comes from the currly brackets { } next to the product ID.

 

This is the code that I edited (the only edit is the bold (int) before the $HTTP_GET_VARS...):

 

echo TEXT_PRODUCTS_BY_BUNDLE . "</td></tr>";

$bundle_query = tep_db_query(" SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image

FROM products p

INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd

ON p.products_id=pd.products_id

INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb

ON pb.subproduct_id=pd.products_id

WHERE pb.bundle_id = " . (int)$HTTP_GET_VARS['products_id'] . " and language_id = '" . (int)$languages_id . "'");

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I'm not getting any SQL errors anymore on product_info.php.

 

I hope this helps! :)

 

 

By the way, the solution works for the Extra Fields Contribution...thus:

 

// START: Extra Fields Contribution v2.0b
 $extra_fields_query = tep_db_query("
				  SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
				  FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
		 LEFT JOIN  ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
		ON ptf.products_extra_fields_id=pef.products_extra_fields_id
		WHERE ptf.products_id=".[b](int)[/b]$HTTP_GET_VARS['products_id']." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$languages_id."')
		ORDER BY products_extra_fields_order");

 

Best Regards, Ted

Link to comment
Share on other sites

Ouch! :blink:

 

I just found a problem at checkout for my only bundled product.

 

On the Order Confirmation page, I get:

 

1064 - You have an error in your SQL syntax near 'product_id LEFT JOIN products_description pd on p.products_id=pd.products_id whe' at line 2

 

SELECT pb.subproduct_id, p.products_quantity, pd.products_name from products_bundles pb LEFT JOIN products p on p.products_id=pb.sub product_id LEFT JOIN products_description pd on p.products_id=pd.products_id where pb.bundle_id = '1076' and pd.language_id = '1'

 

What's wrong?

 

Please help if you can.

 

Best Regards, Ted

Link to comment
Share on other sites

Bundled Products and Attributes Issue

 

I think I found the solution.

 

In my case, the problem occurred on product_info.php.

 

This is what would happen:

 

1. Purchase a product bundle, with attributes, like giftwrap

2. Go to the shopping cart

3. Notice an attribute that needed editing

4. Attempt to return to bundle on product_info.php, only to receive an SQL error message.

 

The error looks like it comes from the currly brackets { } next to the product ID.

 

This is the code that I edited (the only edit is the bold (int) before the $HTTP_GET_VARS...):

 

echo TEXT_PRODUCTS_BY_BUNDLE . "</td></tr>";

$bundle_query = tep_db_query(" SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image

FROM products p

INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd

ON p.products_id=pd.products_id

INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb

ON pb.subproduct_id=pd.products_id

WHERE pb.bundle_id = " . (int)$HTTP_GET_VARS['products_id'] . " and language_id = '" . (int)$languages_id . "'");

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I'm not getting any SQL errors anymore on product_info.php.

 

I hope this helps! :)

Thanks for your fix, InternetKev. It works like a charm now. :thumbsup: No more SQL error. Thanks so much.

 

Regards,

Irina.

Link to comment
Share on other sites

On the Order Confirmation page, I get:

 

1064 - You have an error in your SQL syntax near 'product_id LEFT JOIN products_description pd on p.products_id=pd.products_id whe' at line 2

SELECT pb.subproduct_id, p.products_quantity, pd.products_name from products_bundles pb LEFT JOIN products p on p.products_id=pb.sub product_id LEFT JOIN products_description pd on p.products_id=pd.products_id where pb.bundle_id = '1076' and pd.language_id = '1'

 

under bundled products.

 

I am not able to figure out why.

 

Any ideas, hints?

 

Thanks.

 

Best, Ted

 

My product_info looks thus:

 

<!-- start bundle At the beginning of Bundle Mod Addition 21.01.2005-->
<?php if (tep_not_null($product_info['products_bundle'])) {
?>
 <table border="0" width="65%" cellspacing="1" cellpadding="2" class="infoBox">
	  <tr class="infoBoxContents">
		<td>
		<table border="0" width="100%" cellspacing="0" cellpadding="2">
		  <tr>

			<td class="main" colspan="3">

			  <?php

			  if ($product_info['products_bundle'] == "yes") {
					$products_bundle = $product_info['products_bundle'];

					echo TEXT_PRODUCTS_BY_BUNDLE . "</td></tr>";
					$bundle_query = tep_db_query("  SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image
																					FROM products p
																					INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
																					  ON p.products_id=pd.products_id
																					INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb
																					  ON pb.subproduct_id=pd.products_id
																					WHERE pb.bundle_id = " . (int)$HTTP_GET_VARS['products_id'] . " and language_id = '" . (int)$languages_id . "'");
					while ($bundle_data = tep_db_fetch_array($bundle_query)) {
							if ($bundle_data['products_bundle'] == "yes") {
									// uncomment the following line to display subproduct qty
						   echo "<br>? <b>" . $bundle_data['subproduct_qty'] . " x " . $bundle_data['products_name'] . "</b>";
									echo "<br>? <b> " . $bundle_data['products_name'] . "</b>";
									$bundle_query_nested = tep_db_query("   SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price
																					FROM products p
																					INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
																					  ON p.products_id=pd.products_id
																					INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb
																					  ON pb.subproduct_id=pd.products_id
																					WHERE pb.bundle_id = " . $bundle_data['products_id'] . " and language_id = '" . (int)$languages_id . "'");

Link to comment
Share on other sites

You appear to have an unwanted space in the code shown by the error message.

 

pb.sub product_id

 

should read

 

pb.subproduct_id

 

Thanks for taking a stab at it Sosige, but there is no gap in the actual code. It must just look like it in the quoted code area.

 

Anyone else want to take a stab at my problem (above)?

 

Best Regards, Ted

Link to comment
Share on other sites

Hi Ted,

 

I had this problem last night when installed on my test server, wot I did was to make sure that the both the dbase queries were all on the same line, joined together which they should. So take the queries from the code you posted and change them to this.

 

$bundle_query = tep_db_query(" SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price, p.products_image FROM products p INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
ON p.products_id=pd.products_id INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb ON pb.subproduct_id=pd.products_id WHERE pb.bundle_id = " . (int)$HTTP_GET_VARS['products_id'] . " and language_id = '" . (int)$languages_id . "'");

 

and

 

 $bundle_query_nested = tep_db_query(" SELECT pd.products_name, pb.*, p.products_bundle, p.products_id, p.products_price FROM products p INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd
ON p.products_id=pd.products_id INNER JOIN " . TABLE_PRODUCTS_BUNDLES . " pb ON pb.subproduct_id=pd.products_id WHERE pb.bundle_id = " . $bundle_data['products_id'] . " and language_id = '" . (int)$languages_id . "'");

 

That seemed to work for me.

 

The problem I have now is in admin/categories when I go to remove a product from the bundle I get this

 

Forbidden

You don't have permission to access /testsite/admin/categories.php on this server.

 

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

 

I am not sure wot is causing this problem >_<

 

Mark

Lifes a bitch, then you marry one, then you die!

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