<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mis apuntes oscommerce &#187; OsCommerce</title>
	<atom:link href="http://www.keleke.com/category/oscommerce/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.keleke.com</link>
	<description>contribuciones, posicionamiento, google... oscommerce</description>
	<lastBuildDate>Mon, 28 Dec 2009 21:23:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>osCommerce Update 060817</title>
		<link>http://www.keleke.com/2006/oscommerce-update-060817/</link>
		<comments>http://www.keleke.com/2006/oscommerce-update-060817/#comments</comments>
		<pubDate>Thu, 14 Sep 2006 17:17:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Características]]></category>
		<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=29</guid>
		<description><![CDATA[Nueva revisión ya disponible desde el download de OsCommerce ,  osCommerce 2.2 Milestone 2 Update 060817
Los cambios en esta nueva revisión de oscommerce  son los siguientes:
## Update 060817 (17th August 2006)
- Magic Quotes Compatibility Layer Fix
- Parse GET Variables In Cache Functions
- PHP 3 Session ID XSS Issue
- Product Attributes SQL Injection
- Resize [...]]]></description>
			<content:encoded><![CDATA[<p>Nueva revisión ya disponible desde el <a href="http://www.oscommerce.com/solutions/downloads">download de OsCommerce ,  osCommerce 2.2 Milestone 2 Update 060817</a></p>
<p>Los cambios en esta nueva revisión de oscommerce  son los siguientes:</p>
<p>## Update 060817 (17th August 2006)</p>
<p>- Magic Quotes Compatibility Layer Fix<br />
- Parse GET Variables In Cache Functions<br />
- PHP 3 Session ID XSS Issue<br />
- Product Attributes SQL Injection<br />
- Resize Images To Round Numbers<br />
- Use The Correct Country Name Value When Formatting Addresses<br />
- Prevent The Session ID Being Passed In Tell-A-Friend E-Mails<br />
- Properly Remove Deleted Products That Exist In Shopping Carts</p>
<p>Y estos son las soluciones , por si quieres actualizar tu oscommerce :</p>
<p><strong>Cambio 1:</strong></p>
<p>Reemplazar en catalog/includes/functions/compatibility.php:</p>
<p>Lineas 22-23, de:</p>
<p><code>if (is_array($value)) {<br />
  do_magic_quotes_gpc($value);</code></p>
<p>a:</p>
<p><code>if (is_array($ar[$key])) {<br />
  do_magic_quotes_gpc($ar[$key]);</code></p>
<p>Reemplazar en catalog/admin/includes/functions/compatibility.php:</p>
<p>Lineas 22-23, de:</p>
<p><code>if (is_array($value)) {<br />
  do_magic_quotes_gpc($value);</code></p>
<p>a:<br />
<code><br />
if (is_array($ar[$key])) {<br />
  do_magic_quotes_gpc($ar[$key]);</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Parse GET Variables In Cache Functions</p>
<p>http://svn.oscommerce.com/trac/changeset/708</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 2:</strong></p>
<p>Reemplazar en catalog/includes/functions/cache.php:</p>
<p>Linea 121, de:</p>
<p><code>if (isset($HTTP_GET_VARS['manufactuers_id']) &#038;&#038; tep_not_null($HTTP_GET_VARS['manufacturers_id'])) {</code></p>
<p>a:</p>
<p><code>if (isset($HTTP_GET_VARS['manufactuers_id']) &#038;&#038; is_numeric($HTTP_GET_VARS['manufacturers_id'])) {</code></p>
<p>Lineas 142-148, de:</p>
<p><code>if (($refresh == true) || !read_cache($cache_output, 'also_purchased-' . $language . '.cache' . $HTTP_GET_VARS['products_id'], $auto_expire)) {<br />
  ob_start();<br />
  include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);<br />
  $cache_output = ob_get_contents();<br />
  ob_end_clean();<br />
  write_cache($cache_output, 'also_purchased-' . $language . '.cache' . $HTTP_GET_VARS['products_id']);<br />
}</code></p>
<p>a:</p>
<p><code>$cache_output = '';</p>
<p>if (isset($HTTP_GET_VARS['products_id']) &#038;&#038; is_numeric($HTTP_GET_VARS['products_id'])) {<br />
  if (($refresh == true) || !read_cache($cache_output, 'also_purchased-' . $language . '.cache' . $HTTP_GET_VARS['products_id'], $auto_expire)) {<br />
    ob_start();<br />
    include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);<br />
    $cache_output = ob_get_contents();<br />
    ob_end_clean();<br />
    write_cache($cache_output, 'also_purchased-' . $language . '.cache' . $HTTP_GET_VARS['products_id']);<br />
  }<br />
}</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
PHP 3 Session ID XSS Issue</p>
<p>http://svn.oscommerce.com/trac/changeset/709</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 3:</strong></p>
<p>Añadir a catalog/includes/classes/sessions.php:</p>
<p>Linea 380:</p>
<p><code>if (!empty($session->id)) {<br />
  if (preg_match('/^[a-zA-Z0-9]+$/', $session->id) == false) {<br />
    unset($session->id);<br />
  }<br />
}</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Product Attributes SQL Injection</p>
<p>http://svn.oscommerce.com/trac/changeset/703</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 4:</strong></p>
<p>Reemplazar en catalog/includes/classes/shopping_cart.php:</p>
<p>Linea 84, de:</p>
<p><code>if (is_numeric($products_id) &#038;&#038; is_numeric($qty)) {</code></p>
<p>a:<br />
<code><br />
$attributes_pass_check = true;</p>
<p>if (is_array($attributes)) {<br />
  reset($attributes);<br />
  while (list($option, $value) = each($attributes)) {<br />
    if (!is_numeric($option) || !is_numeric($value)) {<br />
      $attributes_pass_check = false;<br />
      break;<br />
    }<br />
  }<br />
}</p>
<p>if (is_numeric($products_id) &#038;&#038; is_numeric($qty) &#038;&#038; ($attributes_pass_check == true)) {</code></p>
<p>Linea 125, de:</p>
<p><code>if (is_numeric($products_id) &#038;&#038; isset($this->contents[$products_id_string]) &#038;&#038; is_numeric($quantity)) {</code></p>
<p>a:</p>
<p><code>$attributes_pass_check = true;</p>
<p>if (is_array($attributes)) {<br />
  reset($attributes);<br />
  while (list($option, $value) = each($attributes)) {<br />
    if (!is_numeric($option) || !is_numeric($value)) {<br />
      $attributes_pass_check = false;<br />
      break;<br />
    }<br />
  }<br />
}</p>
<p>if (is_numeric($products_id) &#038;&#038; isset($this->contents[$products_id_string]) &#038;&#038; is_numeric($quantity) &#038;&#038; ($attributes_pass_check == true)) {</code></p>
<p>Reemplazar en catalog/shopping_cart.php:</p>
<p>Lineas 84-85, de:</p>
<p><code>where pa.products_id = '" . $products[$i]['id'] . "'<br />
and pa.options_id = '" . $option . "'</code></p>
<p>a:<br />
<code><br />
where pa.products_id = '" . (int)$products[$i]['id'] . "'<br />
and pa.options_id = '" . (int)$option . "'</code></p>
<p>Line 87, de:</p>
<p><code>and pa.options_values_id = '" . $value . "'</code></p>
<p>a:</p>
<p><code>and pa.options_values_id = '" . (int)$value . "'</code></p>
<p>Lines 89-90, de:<br />
<code><br />
and popt.language_id = '" . $languages_id . "'<br />
and poval.language_id = '" . $languages_id . "'");</code></p>
<p>a:</p>
<p><code>and popt.language_id = '" . (int)$languages_id . "'<br />
and poval.language_id = '" . (int)$languages_id . "'");</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Resize Images To Round Numbers</p>
<p>http://www.oscommerce.com/community/bugs,1371</p>
<p>http://svn.oscommerce.com/trac/changeset/707</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 5:</strong><br />
Reemplazar en  catalog/includes/functions/html_output.php:</p>
<p>Line 91, de:</p>
<p><code>$width = $image_size[0] * $ratio;</code></p>
<p>a:</p>
<p><code>$width = intval($image_size[0] * $ratio);</code></p>
<p>Line 94, de:</p>
<p><code>$height = $image_size[1] * $ratio;</code></p>
<p>a:</p>
<p><code>$height = intval($image_size[1] * $ratio);</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Use The Correct Country Name Value When Formatting Addresses</p>
<p>http://www.oscommerce.com/community/bugs,1291</p>
<p>http://svn.oscommerce.com/trac/changeset/713</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 6:</strong></p>
<p>Reemplazar en catalog/includes/functions/general.php:</p>
<p>Line 453, de:</p>
<p><code>$country = tep_output_string_protected($address['country']);</code></p>
<p>a:</p>
<p><code>$country = tep_output_string_protected($address['country']['title']);</code></p>
<p>La siguiente linea debe ser borrada:</p>
<p>Line 483:</p>
<p><code>if ($country == '') $country = tep_output_string_protected($address['country']);</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Prevent The Session ID Being Passed In Tell-A-Friend E-Mails</p>
<p>http://www.oscommerce.com/community/bugs,3986</p>
<p>http://svn.oscommerce.com/trac/changeset/715</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 7:</strong></p>
<p>Reemplazar en catalog/tell_a_friend.php:</p>
<p>Linea 77, de:</p>
<p><code>$email_body .= sprintf(TEXT_EMAIL_LINK, tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id'])) . "\n\n" .</code></p>
<p>a:</p>
<p><code>$email_body .= sprintf(TEXT_EMAIL_LINK, tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id'], 'NONSSL', false)) . "\n\n" .</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Properly Remove Deleted Products That Exist In Shopping Carts</p>
<p>http://www.oscommerce.com/community/bugs,3193</p>
<p>http://svn.oscommerce.com/trac/changeset/717</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Cambio 8:</strong></p>
<p>Reemplazar en catalog/admin/includes/functions/general.php:</p>
<p>Lines 900-901, de:</p>
<p><code>tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where products_id = '" . (int)$product_id . "'");<br />
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where products_id = '" . (int)$product_id . "'");</code></p>
<p>a:</p>
<p><code>tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where products_id = '" . (int)$product_id . "' or products_id like '" . (int)$product_id . "{%'");<br />
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where products_id = '" . (int)$product_id . "' or products_id like '" . (int)$product_id . "{%'");</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2006/oscommerce-update-060817/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crea tus botones para Oscommerce</title>
		<link>http://www.keleke.com/2006/crea-tus-botones-para-oscommerce-2/</link>
		<comments>http://www.keleke.com/2006/crea-tus-botones-para-oscommerce-2/#comments</comments>
		<pubDate>Mon, 27 Mar 2006 11:17:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>
		<category><![CDATA[Utilidades]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=24</guid>
		<description><![CDATA[Si necesitas crear tus propios botones para OsCommerce, existe una página que puede ayudarte mucho y muy fácilmente
Osc Buttons 
Elige tu color, el fondo, el idioma&#8230; Gran ayuda para personalizar tu tienda on-line
]]></description>
			<content:encoded><![CDATA[<p>Si necesitas crear tus propios botones para OsCommerce, existe una página que puede ayudarte mucho y muy fácilmente</p>
<p><a href="http://www.oscbuttons.web4pro.net/">Osc Buttons </a></p>
<p>Elige tu color, el fondo, el idioma&#8230; Gran ayuda para personalizar tu tienda on-line</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2006/crea-tus-botones-para-oscommerce-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selección.. Spain</title>
		<link>http://www.keleke.com/2006/nuevas-plantillas-zen-cart/</link>
		<comments>http://www.keleke.com/2006/nuevas-plantillas-zen-cart/#comments</comments>
		<pubDate>Sun, 29 Jan 2006 18:17:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=23</guid>
		<description><![CDATA[Una pequeña mejora para la creación de una nueva cuenta de usuario.
Este ejemplo sirve para España (Spain) , y lo que hace es seleccionar Spain directamente en el formulario, en vez del Seleccione. Es para aquella gente que suele vender en territorio nacional principalmente,  aunque cambiando el código, puedes poner el país que desees. [...]]]></description>
			<content:encoded><![CDATA[<p>Una pequeña mejora para la creación de una nueva cuenta de usuario.</p>
<p>Este ejemplo sirve para España (Spain) , y lo que hace es seleccionar Spain directamente en el formulario, en vez del Seleccione. Es para aquella gente que suele vender en territorio nacional principalmente,  aunque cambiando el código, puedes poner el país que desees. 195 para Spain</p>
<p>Editar create_account y busca..</p>
<p><code>
<td class="main"><?php echo tep_get_country_list('country') . '&nbsp;' . (tep_not_null(ENTRY_COUNTRY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COUNTRY_TEXT . '</span>': ''); ?></td>
<p></code></p>
<p>y cámbialo por:</p>
<p><code>
<td class="main"><?php echo tep_get_country_list('country', '195') . '&nbsp;' . (tep_not_null(ENTRY_COUNTRY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COUNTRY_TEXT . '</span>': ''); ?></td>
<p></code></p>
<p>Lo que se añade es el &#8216;195&#8242; indicando así España, digo Spain&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2006/nuevas-plantillas-zen-cart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QFACWIN . Software de gestión orientado a OsCommerce</title>
		<link>http://www.keleke.com/2006/qfacwin-software-de-gestion-orientado-a-oscommerce/</link>
		<comments>http://www.keleke.com/2006/qfacwin-software-de-gestion-orientado-a-oscommerce/#comments</comments>
		<pubDate>Tue, 17 Jan 2006 22:16:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>
		<category><![CDATA[Utilidades]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=21</guid>
		<description><![CDATA[QFACWIN es el software de gestión ideal para tu empresa, comercio o actividad profesional.
Te permite gestionar rápida y eficazmente pedidos, albaranes, facturas, compras, gastos, impuestos, vendedores, artículos, servicios, almacén, clientes, presuntos clientes, proveedores, cobros, remesas bancarias, promociones, etc.
Además de tener acceso inmediato a tus datos, con QFACWIN puedes generar al momento estadísticas, gráficas de ventas [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://www.qfacwin.com/esp/?ref=169">QFACWIN</a></strong> es el software de gestión ideal para tu empresa, comercio o actividad profesional.</p>
<p>Te permite gestionar rápida y eficazmente pedidos, albaranes, facturas, compras, gastos, impuestos, vendedores, artículos, servicios, almacén, clientes, presuntos clientes, proveedores, cobros, remesas bancarias, promociones, etc.</p>
<p>Además de tener acceso inmediato a tus datos, con QFACWIN puedes generar al momento estadísticas, gráficas de ventas y listados, etiquetas, cartas y fichas configurados con la información que necesites y editarlos con Word o Excel. Puedes personalizar tus impresos: facturas, albaranes, pedidos y recibos con el diseñador de formularios.</p>
<p>Con todas estas prestaciones, QFACWIN te sorprenderá porque es muy fácil de utilizar. El programa y toda la documentación están en español y dispone de parámetros de configuración para adaptarlo a la terminología y peculiaridades de cada país.</p>
<p><a href="http://www.qfacwin.com/esp/?ref=169">Pruebalo ahora gratuitamente y por tiempo ilimitado pulsando aquí </a></p>
<p>Además, <a href="http://www.qfacwin.com/esp/bajardemotraspasoc.php?ref=169"><strong>TRASPASO A OSCOMMERCE </strong></a>es el programa que  traspasa los datos de los artículos y categorías (descripciones, precios, existencias, fotografías, etc.) del programa de facturación <a href="http://www.qfacwin.com/esp/bajardemotraspasoc.php?ref=169"><strong>QFACWIN</strong></a> a la tienda virtual osCommerce llenando la tienda automáticamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2006/qfacwin-software-de-gestion-orientado-a-oscommerce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revisión  051113 de OsCommerce</title>
		<link>http://www.keleke.com/2005/revision-051113-de-oscommerce/</link>
		<comments>http://www.keleke.com/2005/revision-051113-de-oscommerce/#comments</comments>
		<pubDate>Fri, 02 Dec 2005 17:25:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=20</guid>
		<description><![CDATA[Listado de los arreglos realizados en esta nueva versión de OsCommerce
1/ customer_country_id en addressbook
Cuando el cliente actualiza su direccion en la pagina de Mi cuenta, el valor del pais esta guardada en una variable incorrecta que puede causar un valor de impuesto incorrecto usado en el precio de los productos.
Solución:
Las siguientes lineas deben ser reemplazadas [...]]]></description>
			<content:encoded><![CDATA[<p>Listado de los arreglos realizados en esta nueva versión de OsCommerce</p>
<li><strong>1/ customer_country_id en addressbook</strong></li>
<p>Cuando el cliente actualiza su direccion en la pagina de Mi cuenta, el valor del pais esta guardada en una variable incorrecta que puede causar un valor de impuesto incorrecto usado en el precio de los productos.</p>
<p>Solución:<br />
Las siguientes lineas deben ser reemplazadas en catalog/address_book_process.php:</p>
<p>Linea 150, de:</p>
<p><code>$customer_country_id = $country_id;</code></p>
<p>a:</p>
<p><code>$customer_country_id = $country;</code></p>
<p>Linea 171, de:</p>
<p><code>$customer_country_id = $country_id;</code></p>
<p>a:</p>
<p><code>$customer_country_id = $country;</code></p>
<li><strong>2/ Cannot re-assign $this</strong></li>
<p>Fatal error: Cannot re-assign $this in /path/to/catalog/admin/includes/classes/upload.php on line 31</p>
<p>Solución:</p>
<p>Lineas 27-34 en catalog/admin/includes/classes/upload.php cambiar:</p>
<p><code>if ( ($this->parse() == true) &#038;&#038; ($this->save() == true) ) {<br />
  return true;<br />
} else {<br />
// self destruct<br />
  $this = null;</p>
<p>  return false;<br />
}</code></p>
<p>a:</p>
<p><code>if ( ($this->parse() == true) &#038;&#038; ($this->save() == true) ) {<br />
  return true;<br />
} else {<br />
  return false;<br />
}</code></p>
<li><strong>3/ limit -20, 20</strong></li>
<p>1064 &#8211; 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 &#8216;-20, 20&#8242; at line 1</p>
<p>Solución:</p>
<p>Linea 67 en catalog/includes/classes/split_page_results.php, cambiar:</p>
<p><code>$this->sql_query .= " limit " . $offset . ", " . $this->number_of_rows_per_page;</code><br />
a:</p>
<p><code>$this->sql_query .= " limit " . max($offset, 0) . ", " . $this->number_of_rows_per_page;</code></p>
<p>Linea 38 en catalog/admin/includes/classes/split_page_results.php, cambiar:</p>
<p><code>$sql_query .= " limit " . $offset . ", " . $max_rows_per_page;</code></p>
<p>a:</p>
<p><code>$sql_query .= " limit " . max($offset, 0) . ", " . $max_rows_per_page;</code></p>
<li><strong>4/ Cambio en el Input de la Base de Datos</strong></li>
<p>Problema:</p>
<p>Funciones de MySQL deben ser usadas con prioridad a la funcion addslashes(), para proteger debidamente los queries SQL en el servidor de base de datos.</p>
<p>Solución:</p>
<p>La siguiente función debe ser reemplazada en catalog/includes/functions/database.php.</p>
<p>Lineas 126-128, de:</p>
<p><code>function tep_db_input($string) {<br />
  return addslashes($string);<br />
}</code></p>
<p>a:</p>
<p><code>function tep_db_input($string, $link = 'db_link') {<br />
  global $$link;</p>
<p>  if (function_exists('mysql_real_escape_string')) {<br />
    return mysql_real_escape_string($string, $$link);<br />
  } elseif (function_exists('mysql_escape_string')) {<br />
    return mysql_escape_string($string);<br />
  }</p>
<p>  return addslashes($string);<br />
}</code></p>
<p>La siguiente funcion debe ser reemplazada en catalog/admin/includes/functions/database.php.</p>
<p>Lineas 130-132, de:</p>
<p><code>function tep_db_input($string) {<br />
  return addslashes($string);<br />
}</code></p>
<p>a:</p>
<p><code>function tep_db_input($string, $link = 'db_link') {<br />
  global $$link;</p>
<p>  if (function_exists('mysql_real_escape_string')) {<br />
    return mysql_real_escape_string($string, $$link);<br />
  } elseif (function_exists('mysql_escape_string')) {<br />
    return mysql_escape_string($string);<br />
  }</p>
<p>  return addslashes($string);<br />
}</code></p>
<li><strong>5/ Agregar Productos inexistentes a la cesta</strong></li>
<p>Es posible agregar un producto inexistente a la cesta que puede impedir que los clientes lo borren de sus productos en la cesta.</p>
<p>Solución:</p>
<p>Las siguiente funciones deben ser reemplazadas en catalog/includes/functions/general.php.</p>
<p>Lineas 912-921, de:</p>
<p><code>function tep_get_uprid($prid, $params) {<br />
  $uprid = $prid;<br />
  if ( (is_array($params)) &#038;&#038; (!strstr($prid, '{')) ) {<br />
    while (list($option, $value) = each($params)) {<br />
      $uprid = $uprid . '{' . $option . '}' . $value;<br />
    }<br />
  }</p>
<p>  return $uprid;<br />
}</code></p>
<p>a:</p>
<p><code>function tep_get_uprid($prid, $params) {<br />
  if (is_numeric($prid)) {<br />
    $uprid = $prid;</p>
<p>    if (is_array($params) &#038;&#038; (sizeof($params) > 0)) {<br />
      $attributes_check = true;<br />
      $attributes_ids = '';</p>
<p>      reset($params);<br />
      while (list($option, $value) = each($params)) {<br />
        if (is_numeric($option) &#038;&#038; is_numeric($value)) {<br />
          $attributes_ids .= '{' . (int)$option . '}' . (int)$value;<br />
        } else {<br />
          $attributes_check = false;<br />
          break;<br />
        }<br />
      }</p>
<p>      if ($attributes_check == true) {<br />
        $uprid .= $attributes_ids;<br />
      }<br />
    }<br />
  } else {<br />
    $uprid = tep_get_prid($prid);</p>
<p>    if (is_numeric($uprid)) {<br />
      if (strpos($prid, '{') !== false) {<br />
        $attributes_check = true;<br />
        $attributes_ids = '';</p>
<p>// strpos()+1 to remove up to and including the first { which would create an empty array element in explode()<br />
        $attributes = explode('{', substr($prid, strpos($prid, '{')+1));</p>
<p>        for ($i=0, $n=sizeof($attributes); $i<$n; $i++) {<br />
          $pair = explode('}', $attributes[$i]);</p>
<p>          if (is_numeric($pair[0]) &#038;&#038; is_numeric($pair[1])) {<br />
            $attributes_ids .= '{' . (int)$pair[0] . '}' . (int)$pair[1];<br />
          } else {<br />
            $attributes_check = false;<br />
            break;<br />
          }<br />
        }</p>
<p>        if ($attributes_check == true) {<br />
          $uprid .= $attributes_ids;<br />
        }<br />
      }<br />
    } else {<br />
      return false;<br />
    }<br />
  }</p>
<p>  return $uprid;<br />
}</code></p>
<p>Lineas 925-929, de:</p>
<p><code>function tep_get_prid($uprid) {<br />
  $pieces = explode('{', $uprid);</p>
<p>  return $pieces[0];<br />
}</code></p>
<p>a:</p>
<p><code>function tep_get_prid($uprid) {<br />
  $pieces = explode('{', $uprid);</p>
<p>  if (is_numeric($pieces[0])) {<br />
    return $pieces[0];<br />
  } else {<br />
    return false;<br />
  }<br />
}</code></p>
<p>Las siguientes funciones deben ser reemplazadas en catalog/includes/classes/shopping_cart.php.</p>
<p>Lineas 78-108, de:</p>
<p><code>function add_cart($products_id, $qty = '1', $attributes = '', $notify = true) {<br />
  global $new_products_id_in_cart, $customer_id;</p>
<p>  $products_id = tep_get_uprid($products_id, $attributes);<br />
  if ($notify == true) {<br />
    $new_products_id_in_cart = $products_id;<br />
    tep_session_register('new_products_id_in_cart');<br />
  }</p>
<p>  if ($this->in_cart($products_id)) {<br />
    $this->update_quantity($products_id, $qty, $attributes);<br />
  } else {<br />
    $this->contents[] = array($products_id);<br />
    $this->contents[$products_id] = array('qty' => $qty);<br />
// insert into database<br />
    if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . $qty . "', '" . date('Ymd') . "')");</p>
<p>    if (is_array($attributes)) {<br />
      reset($attributes);<br />
      while (list($option, $value) = each($attributes)) {<br />
        $this->contents[$products_id]['attributes'][$option] = $value;<br />
// insert into database<br />
        if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . (int)$option . "', '" . (int)$value . "')");<br />
      }<br />
    }<br />
  }<br />
  $this->cleanup();</p>
<p>// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure<br />
  $this->cartID = $this->generate_cart_id();<br />
}</code></p>
<p>a:</p>
<p><code>function add_cart($products_id, $qty = '1', $attributes = '', $notify = true) {<br />
  global $new_products_id_in_cart, $customer_id;</p>
<p>  $products_id_string = tep_get_uprid($products_id, $attributes);<br />
  $products_id = tep_get_prid($products_id_string);</p>
<p>  if (is_numeric($products_id) &#038;&#038; is_numeric($qty)) {<br />
    $check_product_query = tep_db_query("select products_status from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");<br />
    $check_product = tep_db_fetch_array($check_product_query);</p>
<p>    if (($check_product !== false) &#038;&#038; ($check_product['products_status'] == '1')) {<br />
      if ($notify == true) {<br />
        $new_products_id_in_cart = $products_id;<br />
        tep_session_register('new_products_id_in_cart');<br />
      }</p>
<p>      if ($this->in_cart($products_id_string)) {<br />
        $this->update_quantity($products_id_string, $qty, $attributes);<br />
      } else {<br />
        $this->contents[$products_id_string] = array('qty' => $qty);<br />
// insert into database<br />
        if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$qty . "', '" . date('Ymd') . "')");</p>
<p>        if (is_array($attributes)) {<br />
          reset($attributes);<br />
          while (list($option, $value) = each($attributes)) {<br />
            $this->contents[$products_id_string]['attributes'][$option] = $value;<br />
// insert into database<br />
            if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$option . "', '" . (int)$value . "')");<br />
          }<br />
        }<br />
      }</p>
<p>      $this->cleanup();</p>
<p>// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure<br />
      $this->cartID = $this->generate_cart_id();<br />
    }<br />
  }<br />
}</code></p>
<p>Lineas 110-127, de:</p>
<p><code>function update_quantity($products_id, $quantity = '', $attributes = '') {<br />
  global $customer_id;</p>
<p>  if (empty($quantity)) return true; // nothing needs to be updated if theres no quantity, so we return true..</p>
<p>  $this->contents[$products_id] = array('qty' => $quantity);<br />
// update database<br />
  if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . $quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");</p>
<p>  if (is_array($attributes)) {<br />
    reset($attributes);<br />
    while (list($option, $value) = each($attributes)) {<br />
      $this->contents[$products_id]['attributes'][$option] = $value;<br />
// update database<br />
      if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "' and products_options_id = '" . (int)$option . "'");<br />
    }<br />
  }<br />
}</code></p>
<p>a:</p>
<p><code>function update_quantity($products_id, $quantity = '', $attributes = '') {<br />
  global $customer_id;</p>
<p>  $products_id_string = tep_get_uprid($products_id, $attributes);<br />
  $products_id = tep_get_prid($products_id_string);</p>
<p>  if (is_numeric($products_id) &#038;&#038; isset($this->contents[$products_id_string]) &#038;&#038; is_numeric($quantity)) {<br />
    $this->contents[$products_id_string] = array('qty' => $quantity);<br />
// update database<br />
    if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . (int)$quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "'");</p>
<p>    if (is_array($attributes)) {<br />
      reset($attributes);<br />
      while (list($option, $value) = each($attributes)) {<br />
        $this->contents[$products_id_string]['attributes'][$option] = $value;<br />
// update database<br />
        if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "' and products_options_id = '" . (int)$option . "'");<br />
      }<br />
    }<br />
  }<br />
}</code></p>
<li><strong>6/ El Tema de Session ID XSS</strong></li>
<p>El tema de cross site scripting existente con la mal formada session IDs usado en la funcion tep_href_link().</p>
<p>Solución:</p>
<p>Linea 66 ein catalog/includes/functions/html_output.php debe ser cambiada de:</p>
<p><code>$link .= $separator . $_sid;</code></p>
<p>a:</p>
<p><code>$link .= $separator . tep_output_string($_sid);</code></p>
<li><strong>7/ Validar Session ID</strong></li>
<p>Validar session ID y redireccionar a la portada cuando la una session ID invalida es llamada.</p>
<p>Solución:</p>
<p>La siguiente función debe ser reemplazada en catalog/includes/functions/sessions.php.</p>
<p>Lineas 66-68, de:</p>
<p><code>function tep_session_start() {<br />
  return session_start();<br />
}</code></p>
<p>a:</p>
<p><code>function tep_session_start() {<br />
  global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS;</p>
<p>  $sane_session_id = true;</p>
<p>  if (isset($HTTP_GET_VARS[tep_session_name()])) {<br />
    if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_GET_VARS[tep_session_name()]) == false) {<br />
      unset($HTTP_GET_VARS[tep_session_name()]);</p>
<p>      $sane_session_id = false;<br />
    }<br />
  } elseif (isset($HTTP_POST_VARS[tep_session_name()])) {<br />
    if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_POST_VARS[tep_session_name()]) == false) {<br />
      unset($HTTP_POST_VARS[tep_session_name()]);</p>
<p>      $sane_session_id = false;<br />
    }<br />
  } elseif (isset($HTTP_COOKIE_VARS[tep_session_name()])) {<br />
    if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_COOKIE_VARS[tep_session_name()]) == false) {<br />
      $session_data = session_get_cookie_params();</p>
<p>      setcookie(tep_session_name(), '', time()-42000, $session_data['path'], $session_data['domain']);</p>
<p>      $sane_session_id = false;<br />
    }<br />
  }</p>
<p>  if ($sane_session_id == false) {<br />
    tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));<br />
  }</p>
<p>  return session_start();<br />
}</code></p>
<li><strong>8/ Problema en la Herramienta de Ficheros</strong></li>
<p>Errores de Parsing generan cuando salvas ficheros editados con la herramienta ficheros:</p>
<p>Linea 148 en catalog/admin/file_manager.php cambiar</p>
<p><code>$file_contents = htmlspecialchars(implode('', $file_array));</code></p>
<p>a:</p>
<p><code>$file_contents = addslashes(implode('', $file_array));</code></p>
<p>Nota: Esta actualización requiere la actualización de El tema de XSS en el formulario Contactenos para funcionar debidamente.</p>
<li><strong>9/ Inyección en la Cabecera HTTP</strong></li>
<p>Usando datos malintencionados pueden hacer inyecciones de cabecera a los HTTP requests.</p>
<p>Solución:</p>
<p>La siguiente funcion debe ser reemplazada en catalog/includes/functions/general.php.</p>
<p>Lineas 22-32, de:</p>
<p><code>function tep_redirect($url) {<br />
  if ( (ENABLE_SSL == true) &#038;&#038; (getenv('HTTPS') == 'on') ) { // We are loading an SSL page<br />
    if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url<br />
      $url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL<br />
    }<br />
  }</p>
<p>  header('Location: ' . $url);</p>
<p>  tep_exit();<br />
}</code></p>
<p>a:</p>
<p><code>function tep_redirect($url) {<br />
  if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {<br />
    tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));<br />
  }</p>
<p>  if ( (ENABLE_SSL == true) &#038;&#038; (getenv('HTTPS') == 'on') ) { // We are loading an SSL page<br />
    if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url<br />
      $url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL<br />
    }<br />
  }</p>
<p>  header('Location: ' . $url);</p>
<p>  tep_exit();<br />
}</code></p>
<p>La siguiente funcion debe ser reemplazada en catalog/admin/includes/functions/general.php.</p>
<p>Lineas 15-26, de:</p>
<p><code>function tep_redirect($url) {<br />
  global $logger;</p>
<p>  header('Location: ' . $url);</p>
<p>  if (STORE_PAGE_PARSE_TIME == 'true') {<br />
    if (!is_object($logger)) $logger = new logger;<br />
    $logger->timer_stop();<br />
  }</p>
<p>  exit;<br />
}</code></p>
<p>a:</p>
<p><code>function tep_redirect($url) {<br />
  global $logger;</p>
<p>  if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {<br />
    tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));<br />
  }</p>
<p>  header('Location: ' . $url);</p>
<p>  if (STORE_PAGE_PARSE_TIME == 'true') {<br />
    if (!is_object($logger)) $logger = new logger;<br />
    $logger->timer_stop();<br />
  }</p>
<p>  exit;<br />
} </code></p>
<li><strong>10/ Inyeccion en la Cabecera de E-Mail Header</strong></li>
<p>Usando datos malintencionados pueden hacer inyecciones de cabecera en los correos que envia el administrador de la tienda.</p>
<p>Solución:</p>
<p>La siguiente funcion debe ser reemplazada en catalog/includes/classes/email.php and catalog/admin/includes/classes/email.php.</p>
<p>Lineas 473-504, de:</p>
<p><code>function send($to_name, $to_addr, $from_name, $from_addr, $subject = '', $headers = '') {<br />
  $to = (($to_name != '') ? '"' . $to_name . '" <' . $to_addr . '>' : $to_addr);<br />
  $from = (($from_name != '') ? '"' . $from_name . '" <' . $from_addr . '>' : $from_addr);</p>
<p>  if (is_string($headers)) {<br />
    $headers = explode($this->lf, trim($headers));<br />
  }</p>
<p>  for ($i=0; $i<count($headers); $i++) {<br />
    if (is_array($headers[$i])) {<br />
      for ($j=0; $j<count($headers[$i]); $j++) {<br />
        if ($headers[$i][$j] != '') {<br />
          $xtra_headers[] = $headers[$i][$j];<br />
        }<br />
      }<br />
    }</p>
<p>    if ($headers[$i] != '') {<br />
      $xtra_headers[] = $headers[$i];<br />
    }<br />
  }</p>
<p>  if (!isset($xtra_headers)) {<br />
    $xtra_headers = array();<br />
  }</p>
<p>  if (EMAIL_TRANSPORT == 'smtp') {<br />
    return mail($to_addr, $subject, $this->output, 'From: ' . $from . $this->lf . 'To: ' . $to . $this->lf . implode($this->lf, $this->headers) . $this->lf . implode($this->lf, $xtra_headers));<br />
  } else {<br />
    return mail($to, $subject, $this->output, 'From: '.$from.$this->lf.implode($this->lf, $this->headers).$this->lf.implode($this->lf, $xtra_headers));<br />
  }<br />
}</code></p>
<p>a:</p>
<p><code>function send($to_name, $to_addr, $from_name, $from_addr, $subject = '', $headers = '') {<br />
  if ((strstr($to_name, "\n") != false) || (strstr($to_name, "\r") != false)) {<br />
    return false;<br />
  }</p>
<p>  if ((strstr($to_addr, "\n") != false) || (strstr($to_addr, "\r") != false)) {<br />
    return false;<br />
  }</p>
<p>  if ((strstr($subject, "\n") != false) || (strstr($subject, "\r") != false)) {<br />
    return false;<br />
  }</p>
<p>  if ((strstr($from_name, "\n") != false) || (strstr($from_name, "\r") != false)) {<br />
    return false;<br />
  }</p>
<p>  if ((strstr($from_addr, "\n") != false) || (strstr($from_addr, "\r") != false)) {<br />
    return false;<br />
  }</p>
<p>  $to = (($to_name != '') ? '"' . $to_name . '" <' . $to_addr . '>' : $to_addr);<br />
  $from = (($from_name != '') ? '"' . $from_name . '" <' . $from_addr . '>' : $from_addr);</p>
<p>  if (is_string($headers)) {<br />
    $headers = explode($this->lf, trim($headers));<br />
  }</p>
<p>  for ($i=0; $i<count($headers); $i++) {<br />
    if (is_array($headers[$i])) {<br />
      for ($j=0; $j<count($headers[$i]); $j++) {<br />
        if ($headers[$i][$j] != '') {<br />
          $xtra_headers[] = $headers[$i][$j];<br />
        }<br />
      }<br />
    }</p>
<p>    if ($headers[$i] != '') {<br />
      $xtra_headers[] = $headers[$i];<br />
    }<br />
  }</p>
<p>  if (!isset($xtra_headers)) {<br />
    $xtra_headers = array();<br />
  }</p>
<p>  if (EMAIL_TRANSPORT == 'smtp') {<br />
    return mail($to_addr, $subject, $this->output, 'From: ' . $from . $this->lf . 'To: ' . $to . $this->lf . implode($this->lf, $this->headers) . $this->lf . implode($this->lf, $xtra_headers));<br />
  } else {<br />
    return mail($to, $subject, $this->output, 'From: '.$from.$this->lf.implode($this->lf, $this->headers).$this->lf.implode($this->lf, $xtra_headers));<br />
  }<br />
}</code></p>
<li><strong>11/El tema de XSS en el formulario Contactenos</strong></li>
<p>Usando datos malintencionados es posible inyecctar HTML en la pagina.</p>
<p>Solución:</p>
<p>Lineas 221-225 in catalog/includes/functions/html_output.php cambiar:</p>
<p><code>if ( (isset($GLOBALS[$name])) &#038;&#038; ($reinsert_value == true) ) {<br />
  $field .= stripslashes($GLOBALS[$name]);<br />
} elseif (tep_not_null($text)) {<br />
  $field .= $text;<br />
}</code></p>
<p>a:</p>
<p><code>if ( (isset($GLOBALS[$name])) &#038;&#038; ($reinsert_value == true) ) {<br />
  $field .= tep_output_string_protected(stripslashes($GLOBALS[$name]));<br />
} elseif (tep_not_null($text)) {<br />
  $field .= tep_output_string_protected($text);<br />
}</code></p>
<p>Lineas 244-248 in catalog/admin/includes/functions/html_output.php cambiar:</p>
<p><code>if ( (isset($GLOBALS[$name])) &#038;&#038; ($reinsert_value == true) ) {<br />
  $field .= stripslashes($GLOBALS[$name]);<br />
} elseif (tep_not_null($text)) {<br />
  $field .= $text;<br />
}</code></p>
<p>a:</p>
<p><code>if ( (isset($GLOBALS[$name])) &#038;&#038; ($reinsert_value == true) ) {<br />
  $field .= tep_output_string_protected(stripslashes($GLOBALS[$name]));<br />
} elseif (tep_not_null($text)) {<br />
  $field .= tep_output_string_protected($text);<br />
}</code></p>
<li><strong>12/ Redireccionamiento Abierto </strong></li>
<p>No existe ningún chequeo en la página de redirección, y permite fuentes externas usar la página como un redireccionamiento abierto.</p>
<p>Solución:</p>
<p>Lineas 27-29 in catalog/redirect.php cambiar:</p>
<p><code>if (isset($HTTP_GET_VARS['goto']) &#038;&#038; tep_not_null($HTTP_GET_VARS['goto'])) {<br />
  tep_redirect('http://' . $HTTP_GET_VARS['goto']);<br />
}</code></p>
<p>a:</p>
<p><code>if (isset($HTTP_GET_VARS['goto']) &#038;&#038; tep_not_null($HTTP_GET_VARS['goto'])) {<br />
  $check_query = tep_db_query("select products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_url = '" . tep_db_input($HTTP_GET_VARS['goto']) . "' limit 1");<br />
  if (tep_db_num_rows($check_query)) {<br />
    tep_redirect('http://' . $HTTP_GET_VARS['goto']);<br />
  }<br />
}</code></p>
<li><strong>13/ Barras Extras en Nuevos Productos</strong></li>
<p>Cuando creas y producto, y previsualizas, al volver generaba unos errores con las barras</p>
<p>Solución:</p>
<p>Las siguientes lineas deben ser cambiadas en catalog/admin/categories.php:</p>
<p>Linea 504, de:</p>
<p><code>
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . tep_draw_input_field('products_name[' . $languages[$i]['id'] . ']', (isset($products_name[$languages[$i]['id']]) ? $products_name[$languages[$i]['id']] : tep_get_products_name($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<p>a:</p>
<p><code>
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . tep_draw_input_field('products_name[' . $languages[$i]['id'] . ']', (isset($products_name[$languages[$i]['id']]) ? stripslashes($products_name[$languages[$i]['id']]) : tep_get_products_name($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<p>Linea 538, de:</p>
<p><code>
<td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (isset($products_description[$languages[$i]['id']]) ? $products_description[$languages[$i]['id']] : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<p>a:</p>
<p><code>
<td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (isset($products_description[$languages[$i]['id']]) ? stripslashes($products_description[$languages[$i]['id']]) : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<p>Linea 574, de:</p>
<p><code>
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . tep_draw_input_field('products_url[' . $languages[$i]['id'] . ']', (isset($products_url[$languages[$i]['id']]) ? $products_url[$languages[$i]['id']] : tep_get_products_url($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<p>a:</p>
<p><code>
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . tep_draw_input_field('products_url[' . $languages[$i]['id'] . ']', (isset($products_url[$languages[$i]['id']]) ? stripslashes($products_url[$languages[$i]['id']]) : tep_get_products_url($pInfo->products_id, $languages[$i]['id']))); ?></td>
<p></code></p>
<li><strong>14/ Filtrando el Estado de Pedido</strong></li>
<p>Después de cambiar el filtro de estado de pedidos en Administración -> Clientes -> Pedidos, seleccionando "Todos los Pedidos" mostrara una lista vacia de pedidos.</p>
<p>Solución:</p>
<p>Linea 357 in catalog/admin/orders.php cambiar:<br />
<code><br />
} elseif (isset($HTTP_GET_VARS['status'])) {</code></p>
<p>a:</p>
<p><code>} elseif (isset($HTTP_GET_VARS['status']) &#038;&#038; is_numeric($HTTP_GET_VARS['status']) &#038;&#038; ($HTTP_GET_VARS['status'] > 0)) {</code></p>
<li><strong>15/ Compatibilidad con MySQL 5.0</strong></li>
<p>Hay ciertos queries de MySQL que no son compatibles y por lo tanto, no se pueden ejecutar en MySQL5.</p>
<p>Solución:</p>
<p>Linea 213-223 en catalog/advanced_search_result.php cambiar:</p>
<p><code>$from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";</p>
<p>if ( (DISPLAY_PRICE_WITH_TAX == 'true') &#038;&#038; (tep_not_null($pfrom) || tep_not_null($pto)) ) {<br />
  if (!tep_session_is_registered('customer_country_id')) {<br />
    $customer_country_id = STORE_COUNTRY;<br />
    $customer_zone_id = STORE_ZONE;<br />
  }<br />
  $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')";<br />
}</p>
<p>$where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id ";</code></p>
<p>a:</p>
<p><code>$from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id";</p>
<p>if ( (DISPLAY_PRICE_WITH_TAX == 'true') &#038;&#038; (tep_not_null($pfrom) || tep_not_null($pto)) ) {<br />
  if (!tep_session_is_registered('customer_country_id')) {<br />
    $customer_country_id = STORE_COUNTRY;<br />
    $customer_zone_id = STORE_ZONE;<br />
  }<br />
  $from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')";<br />
}</p>
<p>$from_str .= ", " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";</p>
<p>$where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id ";</code></p>
<p>Lsa siguientes lineas deben ser cambiadas en catalog/index.php:</p>
<p>Linea 175, de:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'";</code></p>
<p>a:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'";</code></p>
<p>Linea 178, de:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'";</code></p>
<p>a:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'";</code></p>
<p>Linea 184, de:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";</code></p>
<p>a:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";</code></p>
<p>Linea 187, de:<br />
<code><br />
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";</code></p>
<p>a:</p>
<p><code>$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";</code></p>
<p>Linea 292 in catalog/admin/categories.php cambiar:</p>
<p><code>tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "',  now(), '" . tep_db_input($product['products_date_available']) . "', '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')");</code><br />
a:</p>
<p><code>tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "',  now(), " . (empty($product['products_date_available']) ? "null" : "'" . tep_db_input($product['products_date_available']) . "'") . ", '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')");</code></p>
<p>Los siguientes comandos MySQL deben ser ejecutados:</p>
<p><code>ALTER TABLE whos_online MODIFY COLUMN last_page_url VARCHAR(255) NOT NULL;</p>
<p>ALTER TABLE customers MODIFY COLUMN customers_default_address_id INTEGER;</p>
<p>ALTER TABLE customers_basket MODIFY COLUMN final_price DECIMAL(15,4);</code></p>
<p>Vía SmartOsc</p>
<p><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/revision-051113-de-oscommerce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nueva Revisión OsCommerce</title>
		<link>http://www.keleke.com/2005/nueva-revision-oscommerce/</link>
		<comments>http://www.keleke.com/2005/nueva-revision-oscommerce/#comments</comments>
		<pubDate>Mon, 28 Nov 2005 10:41:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=19</guid>
		<description><![CDATA[Ya está disponible una nueva revisión de osCommerce desde el Download, con la nueva documentación, en inglés claro
Han corregido algunos bugs, pero lo mejor está en las versiones venideras MS3 y MS4&#8230; puedes echarle un vistazo desde aquí al trabajo que están desarrollando. Llevarán contribuciones como Comprar sin crear cuenta, Gift´s Voucher and Coupons.. etc.. [...]]]></description>
			<content:encoded><![CDATA[<p>Ya está disponible una nueva revisión de <a href="http://www.oscommerce.com/solutions/downloads" target="_blank">osCommerce desde el Download</a>, con la nueva <a href="http://oscommerce.sunsite.dk/downloads/oscommerce-2.2ms2-051112.pdf" target="_blank">documentación</a>, en inglés claro</p>
<p>Han corregido algunos bugs, pero lo mejor está en las versiones venideras MS3 y MS4&#8230; puedes echarle un vistazo <a href="http://www.oscommerce.com/community/roadmap" target="_blank">desde aquí </a>al trabajo que están desarrollando. Llevarán contribuciones como Comprar sin crear cuenta, Gift´s Voucher and Coupons.. etc..  <a href="http://www.oscommerce.com/community/roadmap" target="_blank">pero mejor que lo veas</a></p>
<p>- Compatibilidad con PHP 5</p>
<p>- Compatibilidad con MySQL 5 </p>
<p>- Arreglos en varios scripts del catálogo</p>
<p>- Arreglos en el header HTTP/E-Mail </p>
<p>- Modificaciones en la base de datos</p>
<p>- Arreglos en la copia de seguridad</p>
<p>- Arreglos en la página de resultados y clientes conectados (Split Page Result class)</p>
<div align="center"><a href="http://www.oscommerce.com/community/roadmap"><img src="http://www.oscommerce.com/images/oscommerce.gif" alt="OsCommerce" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/nueva-revision-oscommerce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distintas versiones sobre OsCommerce</title>
		<link>http://www.keleke.com/2005/distintas-versiones-sobre-oscommerce/</link>
		<comments>http://www.keleke.com/2005/distintas-versiones-sobre-oscommerce/#comments</comments>
		<pubDate>Tue, 08 Nov 2005 11:12:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=18</guid>
		<description><![CDATA[Existen varias versiones sobre el OsCommerce original, vamos a tratar 3 de las más interesantes.
 &#8211; CreLoaded :
Es una versión de las más descargadas, van por su versión 6.15 y viene con más de 40 contribuciones instaladas y un sistema propio de templates, que lo hace más fácil de instalar, pero a la vez es [...]]]></description>
			<content:encoded><![CDATA[<p>Existen varias versiones sobre el OsCommerce original, vamos a tratar 3 de las más interesantes.</p>
<p> &#8211; <a href="http://www.creloaded.com/ "><strong>CreLoaded</strong></a> :<br />
Es una versión de las más descargadas, van por su versión 6.15 y viene con más de 40 contribuciones instaladas y un sistema propio de templates, que lo hace más fácil de instalar, pero a la vez es más complicado para instalar nuevas contribuciones o addons, al tener un distinto sistema de archivos.<br />
Lo más destacable de esta versión es el módulo de Cupones descuento, las Faqs, las news, y el poder crear páginas adicionales sin problema ninguno.<br />
Problemas con el español, hay que repasar bastante código.<br />
<a href="http://www.creloaded.com/Features.html" target="_blank"><strong>Listado de contribuciones de Creloaded</strong></a><br />
<a href="http://www.lajugueteria.com"><strong>lajugueteria.com</strong></a> funciona sobre CreLoaded v6.15</p>
<p> &#8211; <a href="http://www.zen-cart.com" target="_blank"><strong>Zencart</strong></a> es otra versión con sus propios módulos y algo distinta de manejar también.<br />
Lo más destacable su sistema de aceptar condiciones de compra, añadir múltiples imágenes como Creloaded y OsCdox de la que ahora hablamos. Zencart quizás es de la menos usada de las 3, aunque sencilla de usar, algo complicada de implementar, a mi gusto claro. Dice que es muy sencillo cambiar el aspecto con las .css e imágenes solamente, pero mmm<br />
<a href="http://www.zen-cart.com/modules/freecontent/index.php?id=1" target="_blank"><strong>Algunas de las contribuciones de Zencart</strong></a></p>
<p>- Y por último la <a href="http://oscdox.com/"><strong>OscDox</strong></a> , con su versión 1.7 MAX, es otra modificación de oscommerce con importantes contribuciones, y con algunos templates ya instalados, muy completo. Algo de problemas con el spanish también&#8230;</p>
<p><a href="http://oscdox.com/phpWiki.html"><strong>Aquí todo para entenderlo</strong></a>, pero en inglés, lo mejor que le echéis otro vistazo&#8230;</p>
<p>Existen otras, pero estas son las más descargadas y usadas.<br />
En keleke preferimos no usarlas, ya que siempre hemos preferido instalar el básico y añadir nuestras contribuciones, las que necesitemos realmente.<br />
Estas distintas versiones tiene sus propias contribuciones, foros, y son algo más tediosas de tratar, aún así las hemos utilizado por distintos motivos o contribuciones ya instaladas, repito que es dependiendo de las necesidades de cada tienda</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/distintas-versiones-sobre-oscommerce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como instalar OsCommerce</title>
		<link>http://www.keleke.com/2005/como-instalar-oscommerce/</link>
		<comments>http://www.keleke.com/2005/como-instalar-oscommerce/#comments</comments>
		<pubDate>Fri, 30 Sep 2005 17:29:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=13</guid>
		<description><![CDATA[Instalar OsCommerce en un servidor o en local es muy sencillo gracias a su autoinstalable.
Vamos a hacer la instalación de una nueva tienda en un servidor , en la carpeta /tienda de cualquier dominio, es decir www.tudominio.com/tienda para acceder a la tienda, con lo que quedará www.tudominio.com/tienda/admin para el apartado de Administración.
Vamos allá, lo primero [...]]]></description>
			<content:encoded><![CDATA[<p>Instalar OsCommerce en un servidor o en local es muy sencillo gracias a su autoinstalable.</p>
<p>Vamos a hacer la instalación de una nueva tienda en un servidor , en la carpeta /tienda de cualquier dominio, es decir <strong>www.tudominio.com/tienda </strong>para acceder a la tienda, con lo que quedará <strong>www.tudominio.com/tienda/admin</strong> para el apartado de Administración.</p>
<p>Vamos allá, lo primero que tenemos que hacer es descargarnos el paquete desde <a href="http://www.oscommerce.com/solutions/downloads">http://www.oscommerce.com/solutions/downloads</a> en el formato que necesitéis, .zip o .tar/gz .</p>
<p>Descomprimimos y subimos al servidor mediante FTP , modo ASCII y no binario, las carpetas <strong>catalog (renombraremos por /tienda) </strong>y <strong>admin</strong>. Linux, MySql y PHP recuerda..</p>
<p>Una vez subidos los archivos debemos dar permisos de escritura y/o lectura a otros&#8230;</p>
<p>Permisos totales (<strong>777</strong>) a los siguientes archivos:<br />
<strong>/tienda/includes/configure.php </strong><br />
y <strong>/tienda/admin/includes/configure.php </strong> y la carpeta de las imágenes<br />
<strong>/tienda/images</strong> en mod 777 también.</p>
<p><strong>Permisos 755</strong> a las siguientes carpetas:<br />
<strong>/admin/includes<br />
/tienda/includes</strong></p>
<p>Una vez subidos todos los archivos y asegurados de haber creado una base de datos y un usuario en nuestro dominio, estamos preparados para ejecutar el script &#8220;install&#8221;. Accediendo a <strong>www.tudominio.com/tienda/</strong>  empezaremos con la instalación, OsCommerce autodetectará si necesitas la instalación si no está realizada y te redireccionará a la carpeta /install.</p>
<p>La primera pantaala que veremos , damos a install</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar1.jpg" alt="Instalación Oscommerce" /></div>
<p><span id="more-12"></span></p>
<p>Después tenemos que ticar las 2 casillas, importar catálogo y configuración automática y continue</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar2.jpg" alt="Instalación Oscommerce" /></div>
<p>Después tenemos que rellenar la siguiente información.<br />
<strong>Database server:</strong> localhost  .Aunque puedes poner una IP o dirección web,  normalmente <strong>localhost</strong> funciona bien.<br />
<strong>Username</strong>: el nombre de usuario que hemos creado para la base de datos (usuario en nuestro caso)<br />
<strong>Password</strong>: la clave elegida para la base de datos<br />
<strong>Database</strong>: El nombre de la base de datos que hemos creado , en nuestro caso tubase<br />
Después dejamos en blanco la casilla de Persistent connections y le decimos que nos guarde las sesiones en la base de datos, como en el gráfico que viene ahora, y Continue&#8230;</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar3.jpg" alt="Instalación Oscommerce" /></div>
<p>A continuación te pedirá que importes el catálogo que viene por defecto&#8230; continue</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar4.jpg" alt="Instalación Oscommerce" /></div>
<p>Esta pantalla nos informa de que ha sido importada la base de datos correctamente&#8230; continue</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar5.jpg" alt="Instalación Oscommerce" /></div>
<p>Ahora revisamos toda la información del servidor, para las rutas principales.. continue</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar6.jpg" alt="Instalación Oscommerce" /></div>
<p>Segunda parte del resumen de la instalación.. continue</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar7.jpg" alt="Instalación Oscommerce" /></div>
<p>Y si todo ha ido bien, llegaremos a la pantalla para ir al catálogo o a la administración de nuestra nueva tienda&#8230;</p>
<div align="center"><img src="http://www.keleke.com/wp-images/instalar8.jpg" alt="Instalación Oscommerce" /></div>
<p>Una vez instalada debemos <strong>borrar la carpeta /install </strong>del servidor y guardar con contraseña y usuario la carpeta <strong>/admin </strong></p>
<p>Y volveremos a <strong>dejar los archivos configure.php con los permisos 644</strong>.<br />
/admin/includes/configure.php y<br />
/tienda/includes/configure.php</p>
<p>Por último crearemos una carpeta backups dentro de admin y le daremos permisos 777 <strong> /admin/backups </strong></p>
<p>Y hemos terminado nuestra instalación&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/como-instalar-oscommerce/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Obligaciones Empresariales (España)</title>
		<link>http://www.keleke.com/2005/obligaciones-empresariales-espana/</link>
		<comments>http://www.keleke.com/2005/obligaciones-empresariales-espana/#comments</comments>
		<pubDate>Wed, 28 Sep 2005 12:55:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=12</guid>
		<description><![CDATA[Implicaciones y Responsabilidades de la Protección de Datos de Carácter Personal. Tener una tienda OsCommerce te implica.
La Protección de Datos de Carácter Personal es una materia que preocupa a todas las empresas, principalmente por las fuertes sanciones económicas que impone la Agencia Española de Protección de Datos en caso de incumplimiento.
El deber de las empresas [...]]]></description>
			<content:encoded><![CDATA[<p>Implicaciones y Responsabilidades de la Protección de Datos de Carácter Personal. Tener una tienda OsCommerce te implica.</p>
<p>La Protección de Datos de Carácter Personal es una materia que preocupa a todas las empresas, principalmente por las fuertes sanciones económicas que impone la Agencia Española de Protección de Datos en caso de incumplimiento.</p>
<p>El deber de las empresas en esta materia no sólo debe consistir en la adaptación a la normativa vigente, sino también en la aplicación práctica de los principios de protección de datos en el seno de la empresa, dentro de cada uno de los departamentos, involucrando a todo el personal&#8230; Las consecuencias del incumplimiento de la normativa no se quedan sólo en las sanciones de la Agencia, sino que van más allá y afectan a todos.</p>
<p>El cumplimiento de lo establecido en la <strong>LOPD (LO 15/1999 de Protección de Datos de Carácter Personal)</strong> y su normativa de desarrollo (RD 994/1999, Reglamento de Medidas de Seguridad de los Ficheros Automatizados que contengan datos de carácter personal) pasa no sólo por la legalización, legitimación y protección de los ficheros de datos de carácter personal, sino también por su aplicación práctica en el seno de las organizaciones, es decir, la incorporación a la dinámica de la empresa de los principios rectores de la Protección de Datos de Carácter Personal.<span id="more-11"></span></p>
<p>La incorporación a la dinámica de la empresa de los principios rectores de la Protección de Datos de Carácter Personal, adquiere una gran importancia desde el momento en que las consecuencias de su incumplimiento conllevan grandes responsabilidades tanto para la Organización como para el personal que trata o accede a los datos de carácter personal, es decir, las sanciones ya no sólo son administrativas y dirigidas a la Organización en sí, sino que además de ellas se pueden derivar responsabilidades civiles, penales y laborales.</p>
<p>    a) <strong>Administrativas</strong>: Sanciones contempladas en la LOPD y que son impuestas por la Agencia Española de Protección de Datos en el ejercicio de sus funciones, ya sea por inspección de oficio o abierta a instancia de parte. Estas sanciones son de carácter económico y su cuantía está entre 601,01 y 601.012,10 Euros. </p>
<p>    b) <strong>Civiles</strong>: Artículos del Código Civil relativos a la Responsabilidad Contractual y Extracontractual (arts. 1902 y 1903 CC). Así cuando determinado servicio es contratado a un tercero ajeno a la propia organización e implique un acceso a los ficheros de datos de carácter personal, deberá estar precedido del correspondiente contrato de acceso a datos en el que se limiten las facultades del tercero en cuanto al tratamiento de los datos de carácter personal, se especifiquen las medidas de seguridad que deberán ser implantadas o cumplidas por el tercero para la protección del fichero, y se determinen las responsabilidades derivadas del incumplimiento de la LOPD o de lo establecido en el contrato.</p>
<p>    c) <strong>Penales</strong>: El Código Penal tipifica los delitos contra la intimidad y concretamente el descubrimiento y revelación de secretos en los artículos 197 y siguientes. En este sentido, ha sido condenado recientemente un funcionario de la Seguridad Social, a cinco años y tres meses de prisión, una multa de 330.556 Euros y la inhabilitación especial de 11 años para empleo o cargo público, por vender datos personales de cotizantes a una empresa privada.</p>
<p>    d) <strong>Laborales</strong>: La fuga de datos, un tratamiento inadecuado de los ficheros de datos de carácter personal, un acceso no autorizado a los datos del fichero, una protección inadecuada de los ficheros, pueden venir derivadas de cualquier puesto laboral dentro del seno de la Organización. Cuando una cadena de fallos deriva en la imposición de una sanción a la Organización, es frecuente que además se deriven responsabilidades laborales.</p>
<p>En consecuencia, se hace absolutamente necesario el establecimiento de una serie de medidas adicionales para la correcta aplicación de la Ley de Protección de Datos en las empresas, tendentes principalmente a informar y formar al personal que trata los datos, independientemente de su cargo o función.</p>
<p>Como principales acciones adicionales encaminadas a informar y formar al personal sobre los principios del tratamiento de datos de carácter personal encontramos las siguientes:</p>
<p>    1. <strong>Establecimiento de una Política de Tratamiento de Datos en la Organización</strong>. Esta Política de Tratamiento de Datos deberá entregarse a cada uno de los empleados que entre sus funciones esté el tratamiento de datos de carácter personal, quién deberá firmarla tras su conocimiento.</p>
<p>En esta Política se suele informar sobre el carácter y finalidad de la LOPD y su normativa de desarrollo, las obligaciones básicas impuestas, así como los diferentes principios, acciones y procedimientos a adoptar en la gestión diaria de la empresa.</p>
<p>Igualmente, se puede informar al empleado sobre otras medidas o políticas de seguridad de los sistemas de información implementados por la Organización, así como de las responsabilidades que se pueden derivar de su incumplimiento.</p>
<p>    2.<strong> Formación en materia de Protección de Datos</strong>. El establecimiento de seminarios, conferencias o jornadas de formación en materia de protección de datos en el seno de las Organizaciones es otra de las medidas que se pueden adoptar. Como principales ventajas de la formación encontramos:</p>
<p>        -Información y Formación para el empleado.</p>
<p>        -Formación personalizada para cada empresa. Se analizaran los casos concretos de cada organización y su problemática particular.</p>
<p>        -Mayor participación de los empleados. Podrán consultar y comentar las particularidades de cada puesto.</p>
<p> <!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/obligaciones-empresariales-espana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué es OsCommerce?</title>
		<link>http://www.keleke.com/2005/%c2%bfque-es-oscommerce/</link>
		<comments>http://www.keleke.com/2005/%c2%bfque-es-oscommerce/#comments</comments>
		<pubDate>Fri, 09 Sep 2005 12:42:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OsCommerce]]></category>

		<guid isPermaLink="false">http://keleke.com/?p=10</guid>
		<description><![CDATA[En el 2000 nació osCommerce, una aplicación web de código abierto (OpenSource) que te permite montar una tienda virtual en cuestión de minutos para vender en Internet.
Consta de dos partes principalmente el front y el back-end, es decir, la parte que vemos todo el mundo, la tienda virtual en si, y la parte de administración, [...]]]></description>
			<content:encoded><![CDATA[<p>En el 2000 nació osCommerce, una aplicación web de código abierto <a href="http://www.opensource.org/" target="_blank">(OpenSource)</a> que te permite montar una tienda virtual en cuestión de minutos para vender en Internet.<br />
Consta de dos partes principalmente el front y el back-end, es decir, la parte que vemos todo el mundo, la tienda virtual en si, y la parte de administración, donde podrás mantener tu propia tienda virtual, actualizando productos, insertando nuevas ofertas, categorías, idiomas, monedas, consultar los pedidos, los clientes.. y sin coste ninguno por parte del vendedor y sin necesidad ninguna de saber programación.</p>
<p><strong>Front o Página Principal</strong><br />
<img src="http://www.keleke.com/wp-content/main.jpg" alt="Front o Página Principal Oscommerce" /><br />
<span id="more-9"></span><br />
<strong>Back End o Administración de la Tienda </strong><br />
<img src="http://www.keleke.com/wp-content/admin.gif" alt="Front o Página Principal Oscommerce" /></p>
<p>Uno de los beneficios de ser código abierto, es que está siendo diariamente actualizada por su comunidad, añadiendo contribuciones de todo tipo. Módulos de pago, de envío, contribuciones para el diseño, como templates, así como nuevas funcionalidades, noticias, lector de rss…</p>
<p>osCommerce es de las mejores soluciones de código abierto existentes para la creación de tiendas virtuales, además de ser gratuita y sencilla de administrar. Programada en lenguaje PHP trabaja sobre un servidor Apache y usa MySQL como servidor de base de datos.</p>
<p>Actualmente casi todas las empresas de Hosting ofrecen una solución con OsCommerce ya instalada, aunque es realmente fácil instalar en cuestión de 5 clicks con el “install” que lleva incorporado.</p>
<p>El único pero que le podemos poner es que hay pocas contribuciones en español, casi todas en el universal inglés, aunque tenemos un buen soporte en la web española <a href="http://oscommerce.qadram.com " target="_blank">http://oscommerce.qadram.com </a></p>
<p><a href="http://www.oscommerce.com" target="_blank">OsCommerce </a><br />
<a href="http://www.oscommerce.com/community/contributions" target="_blank">Contribuciones, Addons… </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleke.com/2005/%c2%bfque-es-oscommerce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
