Problema no painel do administrador após a instalação do SUPEE Patch 8788

9

Eu tenho o Magento CE 1.9.2.4 instalado junto com os patches (5377,1533,4788 etc. quase todos os patches).

Esta pergunta também revela problemas que podem / certamente ocorrer em qualquer módulo personalizado que envolva upload de imagens em suas seções personalizadas, em vez de apenas problemas principais do magento.

  1. Agora, depois de instalar o patch 8788 mais recente por meio da linha de comando, não consigo abrir a página "Adicionar / Editar" do meu módulo personalizado, que estava funcionando bem antes da instalação do 8788.

Estou recebendo o erro abaixo quando tento abrir a página "Adicionar novo banner" do meu módulo:

Erro fatal: chame uma função de membro setUrl () em um não-objeto em /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php na linha 57

A linha culpada é a seguinte:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Também não consigo ver as imagens dos produtos enviadas na Catalog > Manage Products > Any product > Imagesseção admin .

Abaixo está a Mage_Adminhtml_Block_Media_Uploaderclasse principal que está sendo chamada.

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    Mage
 * @package     Mage_Adminhtml
 * @copyright  Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Adminhtml media library uploader
 *
 * @category   Mage
 * @package    Mage_Adminhtml
 * @author      Magento Core Team <[email protected]>
 */

/**
 * @deprecated
 * Class Mage_Adminhtml_Block_Media_Uploader
 */
class Mage_Adminhtml_Block_Media_Uploader extends Mage_Uploader_Block_Multiple
{
    /**
     * Constructor for uploader block
     */
    public function __construct()
    {
        parent::__construct();
        $this->getUploaderConfig()->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/upload'));
        $this->getUploaderConfig()->setFileParameterName('file');
    }
}

Alguém me deve saber como corrigir isso com o mínimo possível de alterações de código.

Vicky Dev
fonte
Você poderia postar o conteúdo do getUploadermétodo, por favor?
Raphael no Digital Pianism
Verifique, atualizei minha pergunta.
Vicky Dev
3
Possível duplicata do Patch
Teja Bhagavan Kollepara
11
@TejabhagavanKollepara Verifique os dois casos na pergunta antes de marcá-la duplicada às pressas.
Vicky Dev
11
@VickyDev apenas resolvido-lo aqui magento.stackexchange.com/questions/141775/...
Qaisar Satti

Respostas:

17

Mage_Adminhtml_Block_Media_Uploaderfoi descontinuado após SUPEE-8788 (e 1.9.3). Portanto, existem várias alterações de incompatibilidade com versões anteriores que quebram o módulo usando o carregador.

Primeiro pensei que uma pequena mudança iria consertar, mas na verdade há muito mais a fazer.

Torne um módulo usando a galeria compatível com 1.9.2 e 1.9.3

Portanto, se você é um provedor de módulos, não deseja ter duas versões diferentes do seu módulo para 1.9.2 e 1.9.3. Veja como tornar seu código compatível com ambos:

No seu _prepareLayoutmétodo de bloqueio , você precisa fazer o seguinte:

Substituir:

 $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));

Com:

    if (class_exists("Mage_Uploader_Block_Abstract")) {
        // PATCH SUPEE-8788 or Magento 1.9.3
        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget($url);

        $browseConfig = $this->getUploader()->getButtonConfig();
        $browseConfig
            ->setAttributes(
                array("accept"  =>  $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg'))
            );
    } else {
        $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));
    }

Como você pode ver, estou usando class_existspara verificar se o SUPEE-8788 ou o Magento 1.9.3 é aplicado.

Em seguida, gallery.phtmlvocê precisa substituir:

var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);

Com:

<?php if (class_exists("Mage_Uploader_Block_Abstract")): ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
<?php else: ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);
<?php endif; ?>

Em seguida, para o arquivo de layout, você pode fazer o seguinte:

<reference name="head">
    <action method="addJs"><file helper="module/getFlowMin" /></action>
    <action method="addJs"><file helper="module/getFustyFlow" /></action>
    <action method="addJs"><file helper="module/getFustyFlowFactory" /></action>
    <action method="addJs"><file helper="module/getAdminhtmlUploaderInstance" /></action>
</reference>

Substitua modulepelo identificador da classe auxiliar e, no Data.phpauxiliar do módulo, adicione o seguinte:

protected function _isNoFlashUploader()
{
    return class_exists("Mage_Uploader_Block_Abstract");
}

public function getFlowMin()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/flow.min.js" : null;
}

public function getFustyFlow()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow.js" : null;
}

public function getFustyFlowFactory()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow-factory.js" : null;
}

public function getAdminhtmlUploaderInstance()
{
    return $this->_isNoFlashUploader() ? "mage/adminhtml/uploader/instance.js" : null;
}
Raphael na Digital Pianism
fonte
11
também setUrlmude com setTarget.
Qaisar Satti 21/10
Ele funciona para o problema de upload de arquivo csv no Magento 1.9.3.8. Ótimo!
Igor Revenko
3

adicionando a resposta @Raphael, você precisa adicionar três correções

primeira correção

Nome do espaço_Moduelname_Block_Adminhtml_Modulename_Edit_Tab_Images.php

protected $_uploaderType = 'uploader/multiple';
public function __construct()
{
    parent::__construct();
    $this->setTemplate('moduelname/gallery.phtml');
    ....
}
protected function _prepareLayout()
    {
 $this->setChild('uploader',
            $this->getLayout()->createBlock($this->_uploaderType)
        );

        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'));

        $browseConfig = $this->getUploader()->getButtonConfig();
        $browseConfig
            ->setAttributes(array(
                'accept' => $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg')
            ));
     return parent::_prepareLayout();
    }

Segundo correção no adminhtml / default / default / modulename / gallery.phtml arquivo

 <script type="text/javascript">
//<![CDATA[
var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
//]]>
</script>

terceiro corrija o layout da peça js / module.xml

<reference name="head">
            <action method="addJs"><file>lib/uploader/flow.min.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow-factory.js</file></action>
            <action method="addJs"><file>mage/adminhtml/uploader/instance.js</file></action>
</reference>

arquivos para corrigir loaction

primeira correção app / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

segunda correção app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

Qaisar Satti
fonte
Seria realmente útil, se você mencionar os arquivos para correções também.
Vicky Dev #
@VickyDev adicionou o nome do arquivo também.
Qaisar Satti 21/10
Obrigado, pela sua resposta, mas isso ocorre nas imagens dos produtos Core Magento. Então, onde preciso fazer as duas primeiras alterações? Magento ce 1.9.2.4 com o patch 8788 instalado.
Vicky Dev
11
Mas não vejo nenhum link para mudar para o chat aqui.
Vicky Dev
11
@QaisarSatti ver Eu atualizei meu código por isso é compatível com ambos os 1.9.2 e 1.9.3;)
Raphael em Digital pianismo
2

Corrigido - Problema de upload de imagem após a instalação do PATCH 8788 da Magento versão CE 1.7.0.2 - 1.9.2.4.

I was able to fix it,Please Follow following instruction.

Etapa >> 1: Após a instalação do patch de segurança 8788, acesse o painel de administração e limpe todo o cache do Magento . Então Sair seu painel de administração e Relogin ao painel de administração .

Etapa >> 2: Vá para Gerenciamento de Índice e selecione todos os dados de reindexação depois de liberar todo o cache do Magento novamente .

Etapa >> 3: Esta etapa muito importante, exclua o histórico do cache do navegador (Ctrl + shift + Delete), limpe todos os dados de navegação do navegador, incluindo cookies.

Etapa >> 4: Vá para o Catálogo >> Gerenciamento de produtos, adicione uma nova imagem de qualquer produto, agora você pode ver tudo funcionando bem.

Randhir Yadav
fonte
0

Eu estava enfrentando o mesmo caso de problema 2. No meu caso, foi causado por esse arquivo ser substituído por um módulo personalizado:

app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

Eu sugiro que você verifique se você tem um modelo semelhante substituindo o modelo para esse bloco Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contente, se for o caso, aplique o Supee-8788patch ao arquivo de substituição.

philipj
fonte