<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>VM Dev Central - Recent VirtueMart Bugs</title>
    <link>http://dev.virtuemart.net/cb/proj/tracker/browseTracker.do?tracker_id=1</link>
    <description>The latest Bugs in the VirtueMart Bug Tracker (powered by CodeBeamer)</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/VmDevCentral-RecentVirtuemartBugs" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">1820717</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><item>
      <title>Bug #2273 - Different product URL when going to product from search</title>
      <link>http://dev.virtuemart.net/cb/issue/2273</link>
      <description>Joomla 1.5.4&lt;br /&gt;
VirtueMart 1.1 build 1485&lt;br /&gt;
vmxsearch.plugin&lt;br /&gt;
&lt;br /&gt;
When searching for a product and accessing the product from search result, product URL is different, hence according some users causing module position issues.&lt;br /&gt;
&lt;br /&gt;
URL from search result&lt;br /&gt;
&lt;pre class="wiki"&gt;http://dev.joomlahye.com/home/index.php?option=com_virtuemart&amp;amp;page=shop.product_details&amp;amp;flypage=&amp;amp;category_id=1&amp;amp;product_id=6&amp;amp;Itemid=2&lt;/pre&gt;&lt;br /&gt;
URL from com_Virtuemart&lt;br /&gt;
&lt;pre class="wiki"&gt;http://dev.joomlahye.com/home/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=6&amp;amp;category_id=1&amp;amp;option=com_virtuemart&amp;amp;Itemid=2&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="external" href="http://forum.virtuemart.net/index.php?topic=42936.0"&gt;http://forum.virtuemart.net/index.php?topic=42936.0&lt;/a&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2273</guid>
    </item>
    <item>
      <title>Bug #2271 - JCE Editor too large for editing product and category descriptions</title>
      <link>http://dev.virtuemart.net/cb/issue/2271</link>
      <description>When using JCE Editor, the editor size must be set to 300 pixels high or less, or you will not be able to edit products (and scroll down), nor will you be able to edit the category browse page and other fields underneath the category description.
&lt;p&gt;This bug has been reported on the forums at the following link:
http://forum.virtuemart.net/index.php?topic=42564.0
&lt;/p&gt;
&lt;p&gt;The problem is that many JCE users do not know that they can reduce the size of their editor window through the JCE settings, nor do they understand the nature of this problem.  When they do learn how to fix it, they end up truly frustrated by the size of the edit window, as a 300 pixels high JCE editor is more than half icon rows, leaving only a few rows of text to edit.
&lt;/p&gt;
&lt;p&gt;In prior versions of Virtuemart, this was either not a problem, or it is possible that the problem crept in because of newer versions of both Virtuemart and JCE.
&lt;/p&gt;
&lt;p&gt;POSSIBLE SOLUTIONS: The easiest solution might be to increase the height of the product edit box and the category edit box which encloses the editor, which appears to be set as a fixed height.  Alternatively, it would be great if these boxes varied in size based upon the size of the content.
&lt;/p&gt;
&lt;p&gt;I have attached photos of the windows with the JCE editor set to 400 pixels (the default, I belive).  As you can see, you cannot scroll down and edit the bottom portion of the product description text, and the category fields are missing.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2271</guid>
    </item>
    <item>
      <title>Bug #2270 - Product Scroller module alignment not working</title>
      <link>http://dev.virtuemart.net/cb/issue/2270</link>
      <description>VirtueMart 1.1 build 1481&lt;br /&gt;
&lt;br /&gt;
Align option in Product Scroller module not working, it is always left align.</description>
      <guid>http://dev.virtuemart.net/cb/issue/2270</guid>
    </item>
    <item>
      <title>Bug #2269 - Problems with VAT</title>
      <link>http://dev.virtuemart.net/cb/issue/2269</link>
      <description>With following settings:&lt;br /&gt;
In Admin -&amp;gt; Configuration:&lt;br /&gt;
Show "(including XX% tax)" when applicable? -&amp;gt; checked&lt;br /&gt;
Show the price label for packaging? -&amp;gt; checked
&lt;p&gt;Virtual Tax -&amp;gt; uhnchecked&lt;br /&gt;
Tax mode -&amp;gt; Based on vendor address&lt;br /&gt;
Enable multiple tax rates? -&amp;gt; unchecked
&lt;/p&gt;
&lt;p&gt;I have two products with VAT set, but weight for one of them is set, and for the second one is 0.
Then in shop the first product is shown with VAT and 'including XX% VAT' text but the second one is shown with netto price.
&lt;/p&gt;
&lt;p&gt;When I set 'Virtual Tax' to true, everything becomes ok.
&lt;/p&gt;
&lt;p&gt;I've checked that there are no other differences in database between these products and after setting weight for the second product suddenly VAT calculation becomes correct.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2269</guid>
    </item>
    <item>
      <title>Bug #2268 - Link to product is shown even when product page is no longer available</title>
      <link>http://dev.virtuemart.net/cb/issue/2268</link>
      <description>Virtuemart has a great account.order_details page that the user can view following a successful PayPal payment. This page clearly shows all the items that the user purchased with links to the product pages. However, the product link(s) will fail if the item is out of stock and if the site is configured to only show items with stock. To avoid the user seeing "Error: Sorry, but the Product you've requested wasn't found!", it would be good if the account.order_details page only showed the links if the product page will show the product. This would particularly help shops selling one-off products or products with very limited stock.
&lt;p&gt;See forum topic: http://forum.virtuemart.net/index.php?topic=42537.0
&lt;/p&gt;
&lt;p&gt;Also see http://dev.virtuemart.net/cb/issue/2244?navigation=true
and note additional comments.  This issue was originally recorded as a feature request but moved to bugs after discussion on the forum.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2268</guid>
    </item>
    <item>
      <title>Bug #2263 - Incorrect total price rounding in mini cart and mod_virtuemart cart</title>
      <link>http://dev.virtuemart.net/cb/issue/2263</link>
      <description>VirtueMart 1.1 build 1480&lt;br /&gt;
&lt;br /&gt;
Incorrect total price rounding in mini cart and mod_virtuemart cart&lt;br /&gt;
&lt;br /&gt;
&lt;a class="external" href="http://forum.virtuemart.net/index.php?topic=42906.0"&gt;http://forum.virtuemart.net/index.php?topic=42906.0&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img class="inline" src="http://www.cubecartmodder.com/images/rounding_error.gif" alt="http://www.cubecartmodder.com/images/rounding_error.gif" /&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2263</guid>
    </item>
    <item>
      <title>Bug #2259 - Featured Products module styling lost when module is published on none VM page.</title>
      <link>http://dev.virtuemart.net/cb/issue/2259</link>
      <description>VirtueMart 1.1 SVN 1479&lt;br /&gt;
&lt;br /&gt;
Featured Products module styling is lost when module is published on a none VM page, e.g. Joomla frontpage.&lt;br /&gt;
&lt;br /&gt;
&lt;img class="inline" src="http://www.protechsystems.us/stuff/joomla/vm/vm1479-featured-products-css.gif" alt="http://www.protechsystems.us/stuff/joomla/vm/vm1479-featured-products-css.gif" /&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2259</guid>
    </item>
    <item>
      <title>Bug #2257 - Wrong default label for product style</title>
      <link>http://dev.virtuemart.net/cb/issue/2257</link>
      <description>VirtueMart 1.1 build 1477&lt;br /&gt;
&lt;br /&gt;
When installing VM in theme settings 'Product Listing with a Table' is labeled as 'default' style which is incorrect 'Product List (no table, div base) is set as default during installation.&lt;br /&gt;
&lt;img class="inline" src="http://www.protechsystems.us/stuff/joomla/vm/vm1477-list-style.gif" alt="http://www.protechsystems.us/stuff/joomla/vm/vm1477-list-style.gif" /&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2257</guid>
    </item>
    <item>
      <title>Bug #2253 - Attributes are left blank when attribute name has a leading blank</title>
      <link>http://dev.virtuemart.net/cb/issue/2253</link>
      <description>Hi,
&lt;p&gt;sometimes it happens that attributes are left blank in an ordern. Until now i don't know why:
If an attribute name starts with a blank, you can see it at the time you order, but in the cart the attrib is empty.
Since 1.1.0 the backend attrib form is changed and it is not possible to create attrib-names beginning with a blank. They are stripped away. But i my shop there are products created with past versions, that has leading blanks.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2253</guid>
    </item>
    <item>
      <title>Bug #2252 - Email subject order inconsistent for email receipt after checkout.</title>
      <link>http://dev.virtuemart.net/cb/issue/2252</link>
      <description>The email_receipt method in ps_checkout.php generates an email subject by adding on a ' - order id' whereas other email subjects generated perform a string language replacement of {order_id}
&lt;p&gt;Email subject headers are also inconsistent in the way they specify the order number, sometimes as " - {order_id}", sometimes "Your Order {order_id}", sometimes "your Order No. {order_id}" 
&lt;/p&gt;
&lt;p&gt;The  email_receipt method in ps_checkout.php should at least be changed to use a string language replacement of {order_id} such as follows:
&lt;/p&gt;
&lt;p&gt;This should use a new language string such as PHPSHOP_ORDER_PRINT_PO_SUB as PHPSHOP_ORDER_PRINT_PO_LBL is used in many other places. 
&lt;/p&gt;
&lt;pre class="wiki"&gt; 		$shopper_subject = $dbv-&amp;gt;f("vendor_name") . " ".str_replace( "{order_id}", $db-&amp;gt;f("order_id"), $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_PO_SUB',false));
		$vendor_subject = $dbv-&amp;gt;f("vendor_name") . " ".str_replace( "{order_id}", $db-&amp;gt;f("order_id"), $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_PO_SUB',false));
&lt;/pre&gt;
&lt;p&gt;The language string in common/english.php needs to have {order_id} added to it in whatever consistent form is chosen e.g.    'PHPSHOP_ORDER_PRINT_PO_SUB' =&amp;gt; 'Purchase Order No. {order_id}',&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2252</guid>
    </item>
    <item>
      <title>Bug #2251 - The print icon generates a 404 if using a SEF URL without &amp;option=com_virtuemart in the query string</title>
      <link>http://dev.virtuemart.net/cb/issue/2251</link>
      <description>If using SEF it is possible to end up at a page with a print icon on (such as account.order_details.tpl.php) without &amp;amp;option=com_virtuemart being on the query string. For instance, if the VirtueMart component is set to be shop.html and the VirtueMart login component is used to login a URL such as the following can be generated to view an invoice:
&lt;p&gt; http://www.example.com/shop.html?page=account.order_details&amp;amp;order_id=38
&lt;/p&gt;
&lt;p&gt;Clicking the print icon on such a page will result in a 404 error in the popup because the PrintIcon method in htmlTools.class.php generates a URL to index2.php assuming that  &amp;amp;option=com_virtuemart is already in the query string. The PrintIcon method should ensure &amp;amp;option=com_virtuemart is in the query string of the URL it generates.
&lt;/p&gt;
&lt;p&gt;This will probably apply to anything else (such as email icons) that generate such a link to index2.php.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2251</guid>
    </item>
    <item>
      <title>Bug #2250 - Products that contain more than one download file only have one download link listed on invoice</title>
      <link>http://dev.virtuemart.net/cb/issue/2250</link>
      <description>The invoice generated by account.order_details.tpl.php generates a download link for any download product. However, if the product contains multiple download files only one link to the first file is generated. The code needs to loop through the list of  download files and output a separate link for each.
&lt;p&gt; Included below is a solution to this which may also be considered as an enhancement because it prints out each download filename as a link and also adds details for how many download attempts remain and when the download will expire. In my experience this is useful information to provide to the shopper.
&lt;/p&gt;
&lt;p&gt;Another enhancement is that the download link bypasses the downloads page and uses the downloadRequest function directly. There may be a good reason why it originally went via the downloads page but IMO this was just annoying to the shopper. Now they can click and immediately be presented with their files.
&lt;/p&gt;
&lt;p&gt;Additionally, it includes some code from the downloadRequest function which tidies up the vm_product_downloads table if it finds a download that has expired. It seems sensible to do such a check here as well.
&lt;/p&gt;
&lt;p&gt;The code also includes the fix provided in issue 2249 to stop a product link being generated when a product is no longer published.
&lt;/p&gt;
&lt;p&gt; From line 250 of account.order_details.tpl.php (v1.1.1)
&lt;/p&gt;
&lt;pre class="wiki"&gt; 	      &amp;lt;table width="100%" cellspacing="0" cellpadding="2" border="0"&amp;gt;
	        &amp;lt;tr align="left"&amp;gt;
	          &amp;lt;th&amp;gt;&amp;lt;?php echo $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_QTY') ?&amp;gt;&amp;lt;/th&amp;gt;
	          &amp;lt;th&amp;gt;&amp;lt;?php echo $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_NAME') ?&amp;gt;&amp;lt;/th&amp;gt;
	          &amp;lt;th&amp;gt;&amp;lt;?php echo $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_SKU') ?&amp;gt;&amp;lt;/th&amp;gt;
	          &amp;lt;th&amp;gt;&amp;lt;?php echo $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_PRICE') ?&amp;gt;&amp;lt;/th&amp;gt;
	          &amp;lt;th align="right"&amp;gt;&amp;lt;?php echo $VM_LANG-&amp;gt;_('PHPSHOP_ORDER_PRINT_TOTAL') ?&amp;gt;   &amp;lt;/th&amp;gt;
	        &amp;lt;/tr&amp;gt;
	        &amp;lt;?php
	        $dbcart = new ps_DB;
	        $q  = "SELECT * FROM #__{vm}_order_item ";
	        $q .= "WHERE #__{vm}_order_item.order_id='$order_id' ";
	        $dbcart-&amp;gt;query($q);
	        $subtotal = 0;
	        $dbi = new ps_DB;
			$dbdel = new ps_DB;

	        while ($dbcart-&amp;gt;next_record()) {

	        	/* BEGIN HACK EUGENE */
	        	/*HACK SCOTT had to retest order status else unpaid were able to download*/
	        	if ($db-&amp;gt;f("order_status") == ENABLE_DOWNLOAD_STATUS &amp;amp;&amp;amp; ENABLE_DOWNLOADS) {
	        		/* search for download record that corresponds to this order item */
	        		$q = "SELECT `download_id`, `file_name`, `download_max`, `end_date` FROM #__{vm}_product_download WHERE";
	        		$q .= " `order_id`=" . intval($vars["order_id"]);
	        		$q .= " AND `product_id`=". intval($dbcart-&amp;gt;f("product_id"));
	        		$dbdl-&amp;gt;query($q);

	        	}
	        	/* END HACK EUGENE */

	        	$product_id = null;

// ***** Add product_publish to SELECT statement.

	        	$dbi-&amp;gt;query( "SELECT product_id, product_publish FROM #__{vm}_product WHERE product_sku='".$dbcart-&amp;gt;f("order_item_sku")."'");
	        	$dbi-&amp;gt;next_record();
	        	$product_id = $dbi-&amp;gt;f("product_id" );

// ***** Set new flag to guard against the output of the product link by checking existance of product and its published status.

				$link_to_product = (!empty( $product_id ) &amp;amp;&amp;amp; ($dbi-&amp;gt;f('product_publish') == 'Y'));
	?&amp;gt;
	        &amp;lt;tr align="left"&amp;gt;

&amp;lt;?php
// ***** Change valign to top on the next two table cells.
?&amp;gt;

	          &amp;lt;td valign="top"&amp;gt;&amp;lt;?php $dbcart-&amp;gt;p("product_quantity"); ?&amp;gt;&amp;lt;/td&amp;gt;
	          &amp;lt;td valign="top"&amp;gt;&amp;lt;?php
	              if ($dbdl-&amp;gt;next_record()) {

					// First output a link to the product or just the product name if the product has been removed.

					if( $link_to_product) {
						echo '&amp;lt;a href="'.$sess-&amp;gt;url( $mm_action_url."index.php?page=shop.product_details&amp;amp;product_id=$product_id") .'" title="'.$dbcart-&amp;gt;f("order_item_name").'"&amp;gt;';
					}

				  	echo $dbcart-&amp;gt;f("order_item_name");

					if( $link_to_product) {
						echo "&amp;lt;/a&amp;gt;";
					}

// ***** This is all new code to output multiple links and download expiration details.

					// Now loop through each download and output links to each filename.

					do {

						$download_id = $dbdl-&amp;gt;f('download_id');
						$download_max = (int)$dbdl-&amp;gt;f('download_max');
						$end_date = (int)$dbdl-&amp;gt;f('end_date');
						$time = time();
					
						// If the download has maxed out or expired then delete it from the database and don't display it.
					
						if (($download_max &amp;lt; 1) || (($end_date != 0) &amp;amp;&amp;amp; ($time &amp;gt; $end_date))) {
							$q ="DELETE FROM #__{vm}_product_download";
							$q .=" WHERE download_id = '" . $download_id . "'";
							$dbdel-&amp;gt;query($q);
							$dbdel-&amp;gt;next_record();
						} else {
					
							// Hyperlink the downloadable order item direct to the downloadFunction.

// ***** NOTE: URL changed to directly access download file.
// ***** NOTE: May wish to consider adding classname to &amp;lt;p&amp;gt; for easier control of layout and maybe change &amp;lt;p&amp;gt; to &amp;lt;div&amp;gt;.
						
							$url = $sess-&amp;gt;url( $mm_action_url."/index.php?option=com_virtuemart&amp;amp;page=shop.downloads&amp;amp;func=downloadRequest");
							echo '&amp;lt;p&amp;gt;&amp;lt;a href="'."$url&amp;amp;download_id=".$download_id.'" title="'.$VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_LINK').'"&amp;gt;'
									. '&amp;lt;img src="'.VM_THEMEURL.'images/download.png" alt="'.$VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_LINK').'" align="left" border="0" /&amp;gt;'
									. $dbdl-&amp;gt;f('file_name')
									. '&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;(';
						
							// Output downloads remaining and expiration date.						

// ***** NOTE: May wish to set this up as a configuration option or leave it to the developer as it is in a theme template.
						
							if ($download_max &amp;gt; 1)
								echo str_replace("{count}", $download_max, $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_REMAINING'));
							else
								echo str_replace("{count}", $download_max, $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOAD_REMAINING'));
						
							if ($end_date &amp;gt; 0)
								echo str_replace("{date}", date('d/m/y', $end_date), $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOAD_VALID_UNTIL'));

						
							echo ')&amp;lt;p&amp;gt;';
						}
				  	} while ($dbdl-&amp;gt;next_record());
				  }
	        		else {

// ***** Change guard to use new flag $link_to_product instead of !empty( $product_id )

			        	if( $link_to_product) {
			          		echo '&amp;lt;a href="'.$sess-&amp;gt;url( $mm_action_url."index.php?page=shop.product_details&amp;amp;product_id=$product_id") .'" title="'.$dbcart-&amp;gt;f("order_item_name").'"&amp;gt;';
			          	}
			          	$dbcart-&amp;gt;p("order_item_name");
			          	echo " &amp;lt;div style=\"font-size:smaller;\"&amp;gt;" . $dbcart-&amp;gt;f("product_attribute") . "&amp;lt;/div&amp;gt;";

// ***** Change guard to use new flag $link_to_product instead of !empty( $product_id )

			          	if( $link_to_product) {
			          		echo "&amp;lt;/a&amp;gt;";
			          	}
	        		}
			?&amp;gt;
	          &amp;lt;/td&amp;gt;
&amp;lt;?php
// ***** Change valign to top.
?&amp;gt;
	          &amp;lt;td valign="top"&amp;gt;&amp;lt;?php $dbcart-&amp;gt;p("order_item_sku"); ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;?php
// ***** Change valign to top.
?&amp;gt;
	          &amp;lt;td valign="top"&amp;gt;&amp;lt;?php /*
			$price = $ps_product-&amp;gt;get_price($dbcart-&amp;gt;f("product_id"));
			$item_price = $price["product_price"]; */
			if( $auth["show_price_including_tax"] ){
				$item_price = $dbcart-&amp;gt;f("product_final_price");
			}
			else {
				$item_price = $dbcart-&amp;gt;f("product_item_price");
			}
			echo $CURRENCY_DISPLAY-&amp;gt;getFullValue($item_price, '', $db-&amp;gt;f('order_currency'));

	           ?&amp;gt;&amp;lt;/td&amp;gt;
	          &amp;lt;td align="right" valign="top"&amp;gt;&amp;lt;?php $total = $dbcart-&amp;gt;f("product_quantity") * $item_price;
	          $subtotal += $total;
	          echo $CURRENCY_DISPLAY-&amp;gt;getFullValue($total, '', $db-&amp;gt;f('order_currency'));
	           ?&amp;gt;   &amp;lt;/td&amp;gt;
	        &amp;lt;/tr&amp;gt;&amp;lt;?php
	        }
	?&amp;gt;
&lt;/pre&gt;
&lt;p&gt; 
&lt;/p&gt;
&lt;p&gt;The following lanugage strings were added to languages/account/english.php
&lt;/p&gt;
&lt;pre class="wiki"&gt; 	'PHPSHOP_DOWNLOADS_LINK' =&amp;gt; 'Click on this link to download your file',
	'PHPSHOP_DOWNLOAD_REMAINING' =&amp;gt; '{count} download remaining',
	'PHPSHOP_DOWNLOADS_REMAINING' =&amp;gt; '{count} downloads remaining',
	'PHPSHOP_DOWNLOAD_VALID_UNTIL' =&amp;gt; ' until {date}',
&lt;/pre&gt;
&lt;p&gt;This includes two strings to cover the singular and plural of 'downloads' but I notice in other places plurals are often defined in the format of 'download(s)' in a single string. Personaly I prefer to make the effort to get the grammer correct.
&lt;/p&gt;
&lt;p&gt;There is also a date format used. I am not aware of a mechanism to make the format language independent and the format I have chosen my not be the standard used elsewhere.
&lt;/p&gt;
&lt;p&gt; That should be it.&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2250</guid>
    </item>
    <item>
      <title>Bug #2249 - Link to product output on invoice when product is no longer published.</title>
      <link>http://dev.virtuemart.net/cb/issue/2249</link>
      <description>In the account.order_details.tpl.php template which displays an invoice in the account maintenance section, an anchor link to the purchased product is only output if the product still exists. However, no check is made to see whether the product is still published. If it is not then the link to the product results in a blank page. To resolve this the product_purchase field in the vm_product table should also be checked. Below is a proposed working solution:
&lt;p&gt;From line 301 in account.order_details.tpl.php (v1.1.1)
&lt;/p&gt;
&lt;pre class="wiki"&gt;  	        	$product_id = null;

// ***** Add product_publish to SELECT statement.

	        	$dbi-&amp;gt;query( "SELECT product_id, product_publish FROM #__{vm}_product WHERE product_sku='".$dbcart-&amp;gt;f("order_item_sku")."'");
	        	$dbi-&amp;gt;next_record();
	        	$product_id = $dbi-&amp;gt;f("product_id" );

// ***** Set new flag to guard against the output of the product link by checking existence of product and its published status.

			$link_to_product = (!empty( $product_id ) &amp;amp;&amp;amp; ($dbi-&amp;gt;f('product_publish') == 'Y'));
&lt;/pre&gt;
&lt;p&gt; 
&lt;/p&gt;
&lt;p&gt;At line 296:
&lt;/p&gt;
&lt;pre class="wiki"&gt;  // ***** Change guard to use new flag $link_to_product instead of !empty( $product_id )

			        	if( $link_to_product) {
			          		echo '&amp;lt;a href="'.$sess-&amp;gt;url( $mm_action_url."index.php?page=shop.product_details&amp;amp;product_id=$product_id") .'" title="'.$dbcart-&amp;gt;f("order_item_name").'"&amp;gt;';
			          	}
			          	$dbcart-&amp;gt;p("order_item_name");
			          	echo " &amp;lt;div style=\"font-size:smaller;\"&amp;gt;" . $dbcart-&amp;gt;f("product_attribute") . "&amp;lt;/div&amp;gt;";

// ***** Change guard to use new flag $link_to_product instead of !empty( $product_id )

			          	if( $link_to_product) {
			          		echo "&amp;lt;/a&amp;gt;";
			          	}
&lt;/pre&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2249</guid>
    </item>
    <item>
      <title>Bug #2247 - Security Issues with download_request method of ps_class</title>
      <link>http://dev.virtuemart.net/cb/issue/2247</link>
      <description>I believe a rethink is needed for the way products with download files are handled as there are some security issues with this. In the default installation of VirtueMart 1.1.1 the downloadRequest function of the order module has no permissions set. I believe this change may have been made to allow free downloads and to allow unregistered users to download them. The result of this is that the download URL can be used by anyone to download any downloadable product as long as they have acquired a download id somehow and as long as that download id is still in the vm_product_download table. Thus if you supply a valid download id to the following URL you can get the file whether it is a free one or not and whether you are a registered shopper or not:
&lt;p&gt; http://www.example.com/index.php?option=com_virtuemart&amp;amp;page=shop.downloads&amp;amp;func=downloadRequest&amp;amp;download_id=c851a0721af9816b14e2dc83 
&lt;/p&gt;
&lt;p&gt; If you only have paid for downloads then setting permissions on the downloadRequest function and moving the shop.downloads to the account module (renaming it to account.downloads and remembering to change all references throughout VirtueMart) will improve things slightly by requiring a user to be registered before they can download a file, but they can still gain access to other shopper's downloads just by acquiring their download id.
&lt;/p&gt;
&lt;p&gt;The downloadRequest function really needs to know whether a particular download id relates to a free product or a paid for one. If it is a paid for one then the user id must be checked against the download id before a download can be allowed.
&lt;/p&gt;
&lt;p&gt; In my implimentation I have changed the download_request method in ps_order.php to verify the logged in user. This is fine for my implementation because I don't have any free downloads and always require a shopper to log in to downloada purchased file:
&lt;/p&gt;
&lt;pre class="wiki"&gt; 	/**
	 * Handles a download Request
	 *
	 * @param array $d
	 * @return boolean
	 */
	function download_request(&amp;amp;$d) {
		global  $download_id, $VM_LANG, $vmLogger;

// ***** Get details logged in user session.

		$auth = $_SESSION['auth'];
		$db = new ps_DB;
		$download_id = $db-&amp;gt;getEscaped( vmGet( $d, "download_id" ) );

		$q = "SELECT * FROM #__{vm}_product_download WHERE";
	
// ***** Match against the download id AND the user id so that a user can only access the downloads they have purchased.

		$q .= " download_id = '$download_id' AND user_id='" . $auth['user_id'] . "' ";

&lt;/pre&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2247</guid>
    </item>
    <item>
      <title>Bug #2246 - Download count and expiration still modified if file missing or unreadable when download requested.</title>
      <link>http://dev.virtuemart.net/cb/issue/2246</link>
      <description>The download_request function in ps_order.php decrements the download counter and expiration date on each download request. However, this is performed before the checks are made to see if the download file exists and is readable. A user is likely to keep trying a download if they receive an error that the file does not exist or is unreadable and so the file access problem then goes on to cause another problem by incorrectly depleting the  download count and setting the expiration date. The checks on the file should thus be made first.
&lt;p&gt;The following code changes achieve this: 
&lt;/p&gt;
&lt;pre class="wiki"&gt;  	/**
	 * Handles a download Request
	 *
	 * @param array $d
	 * @return boolean
	 */
	function download_request(&amp;amp;$d) {
		global  $download_id, $VM_LANG, $vmLogger;

		$db = new ps_DB;
		$download_id = $db-&amp;gt;getEscaped( vmGet( $d, "download_id" ) );

		$q = "SELECT * FROM #__{vm}_product_download WHERE";
		$q .= " download_id = '$download_id'";

		$db-&amp;gt;query($q);
		$db-&amp;gt;next_record();

		$download_id = $db-&amp;gt;f("download_id");
		$file_name = $db-&amp;gt;f("file_name");
		if( strncmp($file_name, 'http', 4 ) !== 0) {
			$datei = DOWNLOADROOT . $file_name;
		} else {
			$datei = $file_name;
		}
		$download_max = $db-&amp;gt;f("download_max");
		$end_date = $db-&amp;gt;f("end_date");
		$zeit=time();

		if (!$download_id) {
			$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_ERR_INV',false) );
			return false;
			//vmRedirect("index.php?option=com_virtuemart&amp;amp;page=shop.downloads", $d["error"]);
		}

		elseif ($download_max=="0") {
			$q ="DELETE FROM #__{vm}_product_download";
			$q .=" WHERE download_id = '" . $download_id . "'";
			$db-&amp;gt;query($q);
			$db-&amp;gt;next_record();
			$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_ERR_MAX',false) );
			return false;
			//vmRedirect("index.php?option=com_virtuemart&amp;amp;page=shop.downloads", $d["error"]);
		}

// ***** Moved the setting of the expiration date further down to after the checks on whether the file exists and is readable.
// ***** Added ($end_date!="0") guard to the following check to protect expiration date check.

		elseif (($end_date!="0") &amp;amp;&amp;amp; ($zeit &amp;gt; $end_date)) {
			$q ="DELETE FROM #__{vm}_product_download";
			$q .=" WHERE download_id = '" . $download_id . "'";
			$db-&amp;gt;query($q);
			$db-&amp;gt;next_record();
			$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('PHPSHOP_DOWNLOADS_ERR_EXP',false) );
			return false;
			//vmRedirect("index.php?option=com_virtuemart&amp;amp;page=shop.downloads", $d["error"]);
		}

		require_once(CLASSPATH.'connectionTools.class.php');
	
		$download_count = true;
	
		if ( @file_exists( $datei ) ){
			// Check if this is a request for a special range of the file (=Resume Download)
			$range_request = vmConnector::http_rangeRequest( filesize($datei), false );
			if( $range_request[0] == 0 ) {
				$download_count = true;
			} else {
				$download_count = false;
			}
		}

// ***** Moved the download count decrement to further down to after the checks on whether the file exists and is readable.
	
		// Parameter to check if the file should be removed after download, which is only true,
		// if we have a remote file, which was transferred to this server into a temporary file
		$unlink = false;
	
		if( strncmp($datei, 'http', 4 ) === 0) {
			require_once( CLASSPATH.'ps_product_files.php');
			$datei_local = ps_product_files::getRemoteFile($datei);
			if( $datei_local !== false ) {
				$datei = $datei_local;
				$unlink = true;
			} else {
				$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('VM_DOWNLOAD_FILE_NOTFOUND',false) );
				return false;
			}
		}
		else {
			// Check, if file path is correct
			// and file is
			if ( !@file_exists( $datei ) ){
				$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('VM_DOWNLOAD_FILE_NOTFOUND',false) );
				return false;
				//vmRedirect("index.php?option=com_virtuemart&amp;amp;page=shop.downloads", $d["error"]);
			}
			if ( !@is_readable( $datei ) ) {
				$vmLogger-&amp;gt;err( $VM_LANG-&amp;gt;_('VM_DOWNLOAD_FILE_NOTREADABLE',false) );
				return false;
				//vmRedirect("index.php?option=com_virtuemart&amp;amp;page=shop.downloads", $d["error"]);
			}
		}

// ***** Now it is safe to decrement the download count.
	
		if( $download_count ) {
			// If this is not a the request to resume a download,
			// decrease the download_max to limit the number of downloads
			$q ="UPDATE `#__{vm}_product_download` SET";
			$q .=" `download_max`=`download_max` - 1";
			$q .=" WHERE download_id = '" .$download_id. "'";
			$db-&amp;gt;query($q);
			$db-&amp;gt;next_record();
		}

// ***** Now it is safe to set the expiration date.

		if ($end_date=="0") {
			$end_date=time('u') + DOWNLOAD_EXPIRE;
			$q ="UPDATE #__{vm}_product_download SET";
			$q .=" end_date=$end_date";
			$q .=" WHERE download_id = '" . $download_id . "'";
			$db-&amp;gt;query($q);
			$db-&amp;gt;next_record();
		}

		if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
			$UserBrowser = "Opera";
		}
		elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
			$UserBrowser = "IE";
		} else {
			$UserBrowser = '';
		}
		$mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream';

		// dump anything in the buffer
		while( @ob_end_clean() );

		vmConnector::sendFile( $datei, $mime_type, basename($file_name) );
	
		if( $unlink ) {
			// remove the temporarily downloaded remote file
			@unlink( $datei );
		}
		$GLOBALS['vm_mainframe']-&amp;gt;close(true);
		
	}

&lt;/pre&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2246</guid>
    </item>
    <item>
      <title>Bug #2241 - Account creation method - errors on clicking register and send registration</title>
      <link>http://dev.virtuemart.net/cb/issue/2241</link>
      <description>All possible situations:
&lt;p&gt;NO ACCOUNT CREATION
-with sh404SEF on, Joomla SEF ON, NO ACCOUNT CREATION, click register, fill in some dumy info in form, click on send registration and I land on "your cart is empty"
&lt;/p&gt;
&lt;p&gt;-with sh404SEF OFF, Joomla SEF ON, NO ACCOUNT CREATION, click register - link don't work, it redirects me to
&lt;/p&gt;
&lt;pre class="wiki"&gt;index.php?page=shop.index&amp;amp;option=com_virtuemart&amp;amp;Itemid=1&lt;/pre&gt; the default VM homepage
&lt;p&gt;-with sh404sef OFF, Joomla sef OFF, NO ACCOUNT CREATION, click register - link don't work, it redirects me to
&lt;/p&gt;
&lt;pre class="wiki"&gt;index.php?page=shop.index&amp;amp;option=com_virtuemart&amp;amp;Itemid=1&lt;/pre&gt; the default VM homepage
&lt;p /&gt;
&lt;p&gt;OPTIONAL ACCOUNT CREATION tested with and without Joomla SEF + sh404SEF and works with no problems. Checkout is ok also.
&lt;/p&gt;
&lt;p&gt;SILENT REGISTRATION tested with Joomla SEF and sh404SEF
-a tiny and unobserved bug I think: The username of the user is extracted from email address like this "username@gmail.com" if the email adress is no longer than limit set for username filed so in my case is "username@gmail." but it should "wrap" only "username"
EVERITHING ELSE WORKS NORMALY, NO ISSUES DETECTED&lt;/p&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2241</guid>
    </item>
    <item>
      <title>Bug #2237 - Names of polish provinces in jos_vm_state table</title>
      <link>http://dev.virtuemart.net/cb/issue/2237</link>
      <description>I hope it's a good place to post it. In attachment sql script for polish provinces insertion.</description>
      <guid>http://dev.virtuemart.net/cb/issue/2237</guid>
    </item>
    <item>
      <title>Bug #2236 - Problem with HTML entities in category name</title>
      <link>http://dev.virtuemart.net/cb/issue/2236</link>
      <description>I use HTML entities in category name and category description. In the 1st case it is shown in a bad way ("&amp;amp;Oslash;" shown - "&amp;amp;amp;Oslash;" in code), but in 2nd it is shown properly ("&amp;Oslash;" shown - "&amp;amp;Oslash;" in code). Problem exists also in mod_product_categories module (as shown in attachment). Attached example comes from default template. In database both (name and description) are stored as "&amp;Oslash; 2,5".</description>
      <guid>http://dev.virtuemart.net/cb/issue/2236</guid>
    </item>
    <item>
      <title>Bug #2234 - Full state name or code only (state_name vs. state)</title>
      <link>http://dev.virtuemart.net/cb/issue/2234</link>
      <description>I've separated this part because it's much deeper. I will show the problem in PayPal module, but it exists also in checkout process. &lt;br /&gt;
There is a problem with state/province. In our country we use full name of province, not the letter code (I've found one letter codes, I've never seen to be used anywhere), so I've changed:
&lt;pre class="wiki"&gt;"state" =&amp;gt; $dbbt-&amp;gt;f('state'),&lt;/pre&gt;to
&lt;pre class="wiki"&gt;"state" =&amp;gt; $dbbt-&amp;gt;f('state_name'),&lt;/pre&gt; but this is not universal solution, only hack for my country.&lt;br /&gt;
&lt;br /&gt;
In checkout process the same problem exists in client address formatting, because we culd see something like:
&lt;pre class="wiki"&gt;Katowice, G 44-100&lt;/pre&gt;but it should be:
&lt;pre class="wiki"&gt;44-100 Katowice
woj. slaskie&lt;/pre&gt;(where 'G' is a code letter for 'woj. slaskie').&lt;br /&gt;
&lt;br /&gt;
The problem exists also in shop informations (administrator/index.php?pshop_mode=admin&amp;amp;page=store.store_form&amp;amp;option=com_virtuemart) in {state} markup.</description>
      <guid>http://dev.virtuemart.net/cb/issue/2234</guid>
    </item>
    <item>
      <title>Bug #2232 - Wrong currency code value</title>
      <link>http://dev.virtuemart.net/cb/issue/2232</link>
      <description>Table: jos_vm_currency &lt;br /&gt;Instead of: &lt;br /&gt;
&lt;pre class="wiki"&gt;+-------------+---------------+---------------+
| currency_id | currency_name | currency_code |
+-------------+---------------+---------------+
|         114 | Polish Zloty  | PLZ           |
+-------------+---------------+---------------+
&lt;/pre&gt;
Should be:
&lt;pre class="wiki"&gt;+-------------+---------------+---------------+
| currency_id | currency_name | currency_code |
+-------------+---------------+---------------+
|         114 | Polish Zloty  | PLN           |
+-------------+---------------+---------------+&lt;/pre&gt;</description>
      <guid>http://dev.virtuemart.net/cb/issue/2232</guid>
    </item>
  </channel>
</rss>
