Solve com_installer , com_joomlaupdate errors after Joomla 2.5.4 upgrade

0

Just upgraded one of our Joomla sites and noticed that administration shows errors like:

Error loading Component: com_joomlaupdate, 1
Error loading Component: com_installer, 1

Seems that “something” deleted com_installer & com_joomlaupdate entries in the #__extensions table. I got the deleted values from a clean Joomla 2.5.4. install and after restoring them to the broken database all works fine again.

So to solve the problem you just have to run a sql query replacing #__extensions with your exact table name so if your database prefix is, for example, jml25_ replace #__extensions with jml25_extensions


INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (10, 'com_installer', 'component', 'com_installer', '', 1, 1, 1, 1, '{"legacy":false,"name":"com_installer","type":"component","creationDate":"April 2006","author":"Joomla! Project","copyright":"(C) 2005 - 2012 Open Source Matters. All rights reserved.\\t","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.0","description":"COM_INSTALLER_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0);

INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (28, 'com_joomlaupdate', 'component', 'com_joomlaupdate', '', 1, 1, 0, 1, '{"legacy":false,"name":"com_joomlaupdate","type":"component","creationDate":"February 2012","author":"Joomla! Project","copyright":"(C) 2005 - 2012 Open Source Matters. All rights reserved.\\t","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.0","description":"COM_JOOMLAUPDATE_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0);

Hope this helps.

Template parameters database store in joomla 2.5.x

0

Noticed that in Joomla 2.5.x template parameters are no longer stored at table #__components  ( or equivalent #__extensions).

Now exists a new table called #__template_styles

Parameters are stored in JSON format.

Example parameter:

{"wrapperSmall":"53","wrapperLarge":"72","logo":"images\/logo-js.png","sitetitle":"Joomla! Spanish","sitedescription":"Gestor de Contenido Open Source 2.5","navposition":"left","templatecolor":"personal","html5":"0"}

Default template values are still stored in #__extensions table.

Magento borra los videos de Youtube en CMS

0

Cuando se pega un iframe con un video de youtube el editor de las páginas CMS de magento borra estos videos.

Se se pega la forma antigua de embeber youtube esto no pasa, pero la mejor solución para que funcione con iframe es retocar el editor.

Para eso nos vamos a js/mage/adminhtml/wysiwyg/tiny_mce/setup.js y buscamos el bloque siguiente

var settings = {
        mode : (mode != undefined ? mode : 'none'),
        elements : this.id,
        theme : 'advanced',
        plugins : plugins,
        theme_advanced_buttons1 : magentoPlugins + 'magentowidget,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect',
        theme_advanced_buttons2 : 'cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,forecolor,backcolor',
        theme_advanced_buttons3 : 'tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,iespell,media,advhr,|,ltr,rtl,|,fullscreen',
        theme_advanced_buttons4 : 'insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,pagebreak',
        theme_advanced_toolbar_location : 'top',
        theme_advanced_toolbar_align : 'left',
        theme_advanced_statusbar_location : 'bottom',
        theme_advanced_resizing : true,

y le añadimos esto

extended_valid_elements : 'iframe[src|style|width|height|scrolling|marginwidth|marginheight|frameborder|allowTransparency],style,script',

Problema solucionado, con esto ya no se eliminarán lo videos

.bashrc para SSH en Ubuntu

0

Por defecto cuando conectamos a Ubuntu Server por SSH no carga automáticamente el archivo .bashrc de nuestro home.

¿Dónde ponemos los alias entonces?

Debemos crear un archivo .profile en nuestro home (cuyo funcionamiento es el mismo que el antiguo .bash_profile) con el siguiente contenido:

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

De esta forma el archivo .profile será el encargado de buscar el archivo .bashrc y cargarlo en caso de estar disponible.

La busqueda de Magento no funciona.

3

Parece ser que desde la versión 1.3.2.4 a la 1.5.1.0 Magento viene con un pequeño bug por el cual la búsqueda no funciona y no devuelve resultados.

El primer paso es reindexar todo por si esto lo solucionara (casi nunca lo soluciona)

Si esto no funciona, desafortunadamented la solución pasa por modificar un fichero del core.

El fichero que hay que editar es app/code/core/Mage/CatalogSearch/Block/Result.php

Descomentar la linea 149 y 150

$this->getListBlock()
->setCollection($this->_getProductCollection());

Modificar la linea 172

$this->_productCollection = $this->getListBlock()->getLoadedProductCollection();

por esta

$this->_productCollection = Mage::getSingleton('catalogsearch/layer')->getProductCollection();

Una vez está esto parcheado solo nos queda reindexar y la búsqueda debería volver a funcionar.

Como cambiar el conjunto de atributos de Magento

0

Por defecto en Magento no se puede cambiar el conjunto de atributos asignados a un producto, pero con muy poquito esfuerzo podemos conseguirlo.

Para esto tendremos que tocar el core de Magento por lo que siempre es recomendable hacer una copia en code/local para no tener problema con las actualizaciones.

En primer lugar tendremos que cambiar el fichero app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php y sobre la linea 253 añadir

 $sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
    ->setEntityTypeFilter(Mage::getModel('catalog/product')
    ->getResource()->getTypeId())->load()->toOptionHash();

    array_unshift($statuses, array('label'=>'', 'value'=>''));
    $this->getMassactionBlock()->addItem('attribute_set', array(
    'label'=> Mage::helper('catalog')->__('Change attribute set'),
    'url' => $this->getUrl('*/*/massAttributeSet', array('_current'=>true)),
    'additional' => array(
    'visibility' => array(
    'name' => 'attribute_set',
    'type' => 'select',
    'class' => 'required-entry',
    'label' => Mage::helper('catalog')->__('Attribute Set'),
    'values' => $sets
    )
    )
    ));

Luego en app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php añadimos esta nueva función

  public function massAttributeSetAction(){
    
    	$productIds = $this->getRequest()->getParam('product');
    	$storeId = (int)$this->getRequest()->getParam(‘store’, 0);
    	if(!is_array($productIds)) {
    		$this->_getSession()->addError($this->__('Please select product(s)'));
    	} else {
    		try {
    			foreach ($productIds as $productId) {
    				$product = Mage::getSingleton('catalog/product')
    				->unsetData()
    				->setStoreId($storeId)
    				->load($productId)
    				->setAttributeSetId($this->getRequest()->getParam('attribute_set'))
    				->setIsMassupdate(true)
    				->save();
    			}
    			Mage::dispatchEvent('catalog_product_massupdate_after', array('products'=>$productIds));
    			$this->_getSession()->addSuccess(
    			$this->__('Total of %d record(s) were successfully updated', count($productIds)));
    		} catch (Exception $e) {
    			$this->_getSession()->addError($e->getMessage());
    		}
    	}
    
    	$this->_redirect('*/*/', array('store'=>(int)$this->getRequest()->getParam('store', 0)));
    }

Con esto ya podemos acceder a los productos y desde la rejilla principal podremos cambiar el conjunto de atributos.

[/sourcecode]

Traducción de los mensajes de postfix

2

Si estás leyendo esto posiblemente sepas inglés, y quizá también seas administrador de algún sistema de correo. Aunque no lo seas, convendrás en que no todos los usuarios de un servidor de correo tienen por qué saber idiomas, así que cuando reciben un mensaje de un tal MAILER-DAEMON, lo primero que hacen es pensar que hay un error en el sistema y llamar directamente al informático, aunque el mensaje sea una confirmación de entrega con un gran successful en el asunto. Es por esto que conviene traducir estos mensajes, o mejor aun mantener el inglés pero añadir el castellano en ellos. Esto se puede hacer fácilmente en postfix, utilizando un fichero de plantilla, siguiendo estos pasos:

Primero averiguamos dónde está la configuración de postfix y el fichero de plantilla:

postconf -n | grep config_directory
postconf -n | grep bounce_template_file

Si ya tenemos un fichero de plantilla, simplemente sustituimos el contenido por el que adjuntamos poco después. Si no lo tenemos configurado, modificamos el fichero main.cf, añadiendo una línea:

bounce_template_file = /etc/postfix/bounce.es-ES.cf

Y creando el fichero /etc/postfix/bounce.es-ES.cf, con el siguiente contenido:

#
# The failure template is used when mail is returned to the sender;
# either the destination rejected the message, or the destination
# could not be reached before the message expired in the queue.
#

failure_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Sistema de entrega de correo)
Subject: Servidor de correo: Mensaje no entregado
Postmaster-Subject: Servidor de correo: Mensaje no entregado

Este es un mensaje de correo enviado automáticamente por el servidor de
correo $myhostname.

No ha sido posible entregar su mensaje a uno o más destinatarios. El
mensaje que causó el error está adjunto a este mensaje.

Para más información o cualquier duda, por favor, envíe un mensaje al
administrador del sistema en <postmaster>.

En tal caso incluya adjunto este mensaje de informe. Puede eliminar el
texto del mensaje original que considere, aunque le recomendamos que
mantenga intacto el texto de este informe.

-------------------------------------------------------------------------------

This is the mail system at host $myhostname.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to <postmaster>

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system
EOF

#
# The delay template is used when mail is delayed. Note a neat trick:
# the default template displays the delay_warning_time value as hours
# by appending the _hours suffix to the parameter name; it displays
# the maximal_queue_lifetime value as days by appending the _days
# suffix.
#
# Other suffixes are: _seconds, _minutes, _weeks. There are no other
# main.cf parameters that have this special behavior.
#
# You need to adjust these suffixes (and the surrounding text) if
# you have very different settings for these time parameters.
#

delay_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Sistema de entrega de correo)
Subject: Servidor de correo: Mensaje pospuesto
Postmaster-Subject: Servidor de correo: Mensaje pospuesto

Este es un mensaje de correo enviado automáticamente por el servidor de
correo $myhostname.

###########################################
# ÉSTE ES SÓLO UN MENSAJE DE AVISO.       #
# NO ES NECESARIO QUE REENVÍE EL MENSAJE. #
###########################################

Su mensaje no pudo ser entregado al destinatario después de intentarlo
durante $delay_warning_time_hours hora(s).
Se seguirá intentando enviar el mensaje hasta que pasen
$maximal_queue_lifetime_days días.

Para más información o cualquier duda, por favor, envíe un mensaje al
administrador del sistema en <postmaster>.

En tal caso incluya adjunto este mensaje de informe. Puede eliminar el
texto del mensaje original que considere, aunque le recomendamos que
mantenga intacto el texto de este informe.

-------------------------------------------------------------------------------

This is the mail system at host $myhostname.

####################################################################
# THIS IS A WARNING ONLY.  YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
####################################################################

Your message could not be delivered for $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.

For further assistance, please send mail to <postmaster>

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The $mail_name program
EOF

#
# The success template is used when mail is delivered to mailbox,
# when an alias or list is expanded, or when mail is delivered to a
# system that does not announce DSN support. It is an error to specify
# a Postmaster-Subject: here.
#

success_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Sistema de entrega de correo)
Subject: Servidor de correo: Informe de entrega correcta de mensaje

Este es un mensaje de correo enviado automáticamente por el servidor de
correo $myhostname.

Su mensaje fue entregado correctamente al/a los destinatario/s indicados a
continuación. Si el mensaje fue entregado directamente a los destinatarios,
no recibirá más notificaciones; en caso contrario, si el mensaje tuviera que
pasar por más servidores de correo, es posible que reciba más notificaciones
de estos servidores.

-------------------------------------------------------------------------------

This is the mail system at host $myhostname.

Your message was successfully delivered to the destination(s)
listed below. If the message was delivered to mailbox you will
receive no further notifications. Otherwise you may still receive
notifications of mail delivery errors from other systems.

                   The mail system
EOF

#
# The verify template is used for address verification (sendmail -bv
# address...). or for verbose mail delivery (sendmail -v address...).
# It is an error to specify a Postmaster-Subject: here.
#

verify_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Sistema de entrega de correo)
Subject: Servidor de correo: Informe de estado de entrega de mensaje

Este es un mensaje de correo enviado automáticamente por el servidor de
correo $myhostname.

Adjunto a este mensaje se encuentra el informe de entrega solicitado.

-------------------------------------------------------------------------------

This is the mail system at host $myhostname.

Enclosed is the mail delivery report that you requested.

                   The mail system
EOF

Como dato extra, es posible que también quieras modificar el remitente de dichos correos, que suele ser MAILER-DAEMON@hostname. Esto, como bien se apunta aquí, se soluciona modificando el fichero /etc/mailname en sistemas Debian, como Ubuntu.

Por último, recargamos la configuración de postfix para que sea efectivo el cambio:

postfix reload

Error 404 accediendo al backend de magento

0

Con las últimas versiones de Magento ocurre que, tras mover la base de datos, el acceso al administrado da un error 404.
Si buscamos el error por los logs veremos que el error es este
Recoverable Error: Argument 1 passed to Mage_Core_Model_Store_Group::setWebsite() must be an instance of Mage_Core_Model_Website, null given, called

Esto se debe a que, no se muy bien porque, se desconfiguran las claves del grupo administrador, usuario etc.

Afortunadamente es tan fácil de solucionar como ejecutar este script SQL

SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1; 

Conexión fácil de IIS con Tomcat

2

Si se quieren procesar páginas JSP y ASP.NET en un mismo servidor no queda más remedio que tener instalados Tomcat e IIS simultáneamente. Si además queremos que las páginas se sirvan por el mismo puerto, que generalmente suele ser el 80, pues ya tenemos un problema. Existen conectores ISAPI que permiten reenviar las peticiones JSP del IIS al Tomcat, como hace el Plesk 9 para Windows, pero siempre los he encontrado complejos de configurar. Sin embargo, en la última instalación de Windows Server 2008 R2 que hemos realizado, hemos encontrado un nuevo conector que simplifica enormemente el trabajo, permitiendo realizarlo en dos pasos.

Partiremos de una instalación funcional de IIS 7.5 en el puerto web estándar, y de Tomcat 7.0.25 en el puerto 8080 con AJP en el puerto 8009. Si no sabes cómo llegar a este punto, mal empezamos… :P

Supondremos que la web JSP que queremos alojar está en

C:\inetpub\wwwroot\miwebaspxjsp.com\partejsp. En tal caso, lo primero que haremos será hacer que Tomcat conozca dicho código, creando un fichero XML en %CATALINA_HOME%\conf\Catalina\localhost, con nombre partejsp.xml, y con el siguiente contenido:

<Context
  displayName="partejsp"
  docBase="C:\inetpub\wwwroot\miwebaspxjsp.com\partejsp"
  path="/partejsp"
  reloadable="true"
/>

Ahora vamos a la URL http://miwebaspxjsp.com:8080/partejsp, y deberíamos ver el contenido servido directamente por Tomcat correctamente. Si no es así, toca revisar las rutas y reiniciar el servicio Tomcat.

Sin embargo, si vamos a la URL http://miwebaspxjsp.com/partejsp, obtendremos un precioso error 404.3, ya que IIS no sabe cómo interpretar el script y además no nos permite descargarlo al no conocer el tipo MIME del fichero.

Ahora la parte mágica: Descarga el proyecto IIS to Tomcat Connector de Bilal. En él encontrarás un instalador que a partir de unos datos mínimos de configuración se encargará de registrarse en el IIS, pudiendo limitarse a los sitios que se le indique, de forma que no haya que configurar nada más que el nuevo documento por defecto index.jsp.

Tras la instalación, prueba de nuevo la URL http://miwebaspxjsp.com/partejsp, y si todo ha ido correctamente, ya se debería mostrar exactamente lo mismo que accediendo a http://miwebaspxjsp.com:8080/partejsp.

Como limitación, indicar que con este sistema siempre se cargaría la web JSP como subdirectorio, en la URL http://www.miwebaspjsp.com/partejsp/. Seguramente se podrá solucionar, pero como no lo hemos necesitado, no he investigado más.

Actualización: Cómo hacerlo funcionar en el raíz y con servlets

Para hacerlo funcionar en el raíz del dominio, podemos utilizar el módulo URL Rewrite de IIS, similar al mod_rewrite de Apache, de forma que redirijamos todas las peticiones a una subcarpeta, y así no tenemos que pelear tanto con la configuración. También debemos preservar la ruta de la cookie, para evitar problemas con las sesiones, con una segunda regla. Quedaría en web.config más o menos así:

        <rewrite>
            <rules>
                <rule name="Reescribimos a subcarpeta" enabled="true">
                    <match url="^(.*)" />
                    <action type="Rewrite" url="carpetaconjsp/{R:1}" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="Reescribimos la ruta de la cookie de sesión">
                    <match serverVariable="RESPONSE_Set_Cookie" pattern="^(.*); Path=/carpetaconjsp(.*)" />
                    <action type="Rewrite" value="{R:1}; Path={R:2}" />
                </rule>
            </outboundRules>
        </rewrite>

Igualmente, si utilizamos servlets, habrá que modificar el manejador por defecto, para que IIS no salte con un 404 si no se llama a algo que no sea un JSP, quedando el siguiente código en web.config:

        <handlers>
            <add name="Boncode" path="*" verb="*" type="BonCodeIIS.BonCodeCallHandler,BonCodeIIS,Version=1.0.0.0,Culture=neutral,PublicKeyToken=ad590a40d40745cf" resourceType="Unspecified" preCondition="integratedMode" />
        </handlers>

No se pueden previsualizar los correos electronicos transaccionable de Magento

0

Con la versión 1.6.1 se introdujo un bug nuevo en la previsualización de lo correos electrónicos transaccionables de Magento.
Si bien este error está reportado como bug en la versión 1.6.2 no está solucionado.

En el error se debe a la introducción de un htmlescape justo antes del renderizado.
Para solucionarlo no queda otra que modificar el core.

Nos vamos a app/code/core/Mage/Adminhtml/Block/System/Email/Template/Preview.php y comentamos la linea donde pone todo esto

$template->setTemplateText(
    $this->escapeHtml($template->getTemplateText())
);

Con el problema estará solucionado.
Esperemos que en próximas versiones lo dejen bien.

Go to Top