Problem w panelu administracyjnym po instalacji poprawki SUPEE 8788

9

Mam zainstalowany Magento CE 1.9.2.4 wraz z łatkami (5377,1533,4788 itd. Prawie wszystkie łatki).

To pytanie ujawnia również problemy, które mogą / z pewnością wystąpić w dowolnym niestandardowym module obejmującym przesyłanie obrazów w niestandardowych sekcjach, a nie tylko podstawowe problemy z Magento.

  1. Teraz po zainstalowaniu najnowszej poprawki 8788 za pomocą wiersza polecenia nie mogę otworzyć strony „Dodaj / edytuj” mojego modułu niestandardowego, który działał dobrze przed instalacją 8788.

Podczas próby otwarcia strony „Dodaj nowy baner” mojego modułu pojawia się błąd:

Błąd krytyczny: wywołanie funkcji składowej setUrl () na obiekcie niebędącym obiektem w /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php w linii 57

Linia winowajcy jest następująca:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Nie widzę również przesłanych zdjęć produktów w Catalog > Manage Products > Any product > Imagessekcji administratora .

Poniżej jest Mage_Adminhtml_Block_Media_Uploadernazywana klasa podstawowa .

<?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');
    }
}

Daj mi znać, jak to naprawić, wprowadzając jak najmniej zmian kodu.

Vicky Dev
źródło
Czy możesz podać treść getUploadermetody?
Raphael w Digital Pianism
Proszę sprawdzić, zaktualizowałem moje pytanie.
Vicky Dev
3
Możliwy duplikat poprawki bezpieczeństwa SUPEE-8788 - Możliwe problemy?
Teja Bhagavan Kollepara
1
@TejabhagavanKollepara Proszę sprawdzić oba przypadki w pytaniu przed pośpiesznym oznaczeniem go jako duplikatu.
Vicky Dev
1
@VickyDev właśnie rozwiązał to tutaj magento.stackexchange.com/questions/141775/…
Satti

Odpowiedzi:

17

Mage_Adminhtml_Block_Media_Uploaderjest przestarzałe po SUPEE-8788 (i 1.9.3). Tak więc istnieje kilka wstecznych niezgodności, które psują moduł za pomocą programu do przesyłania.

Najpierw pomyślałem, że mała zmiana to naprawi, ale tak naprawdę jest jeszcze wiele do zrobienia.

Zrób moduł za pomocą galerii kompatybilny z 1.9.2 i 1.9.3

Jeśli więc jesteś dostawcą modułów, nie chcesz mieć dwóch różnych wersji modułu dla wersji 1.9.2 i 1.9.3. Oto jak uczynić kod kompatybilnym z obydwoma:

W _prepareLayoutmetodzie blokowej musisz wykonać następujące czynności:

Zastąpić:

 $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')
                )
            ));

Z:

    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')
                )
            ));
    }

Jak widać używam class_existsdo sprawdzenia, czy zastosowano SUPEE-8788 lub Magento 1.9.3.

Następnie w swoim gallery.phtmlmusisz wymienić:

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() ?>);

Z:

<?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; ?>

Następnie dla pliku układu możesz to zrobić w następujący sposób:

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

Zamień na moduleswój identyfikator klasy pomocnika, aw Data.phppomocniku modułu dodaj:

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 at Digital Pianism
źródło
1
setUrlzmienić również za pomocą setTarget.
Qaisar Satti
Działa w przypadku problemu z przesyłaniem pliku csv na Magento 1.9.3.8. Świetny!
Igor Revenko
3

dodając odpowiedź @Raphael, musisz dodać trzy poprawki

pierwsza poprawka

Spacename_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();
    }

Druga poprawka w adminhtml / default / default / modulename / gallery.phtml pliku

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

po trzecie napraw układ strony 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>

pliki do naprawy luki

pierwsza poprawka app / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

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

Qaisar Satti
źródło
Byłoby to naprawdę pomocne, jeśli wspominasz również pliki o poprawkach.
Vicky Dev
@VickyDev również dodał nazwę pliku.
Qaisar Satti
Dzięki, że odpowiadasz, ale ta rzecz występuje na obrazach produktów Core Magento, więc gdzie muszę wprowadzić dwie pierwsze zmiany? Magento ce 1.9.2.4 z zainstalowaną łatką 8788.
Vicky Dev
1
Ale nie widzę tutaj linku do przejścia do czatu.
Vicky Dev,
1
@QaisarSatti widzę, że zaktualizowałem mój kod, więc jest kompatybilny zarówno z 1.9.2, jak i 1.9.3;)
Raphael w Digital Pianism
2

Naprawiono - problem z przesyłaniem obrazu po instalacji PATCH 8788 wersji Magento CE 1.7.0.2 - 1.9.2.4.

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

Krok >> 1: Po pomyślnym zainstalowaniu poprawki bezpieczeństwa 8788 przejdź do panelu administracyjnego i opróżnij całą pamięć podręczną Magento . Następnie wyloguj się z panelu administracyjnego i ponownie zaloguj się do panelu administracyjnego .

Krok >> 2: Przejdź do Zarządzania indeksem i wybierz wszystkie reindeksuj wszystkie dane po ponownym opróżnieniu całej pamięci podręcznej Magento .

Krok >> 3: Ten bardzo ważny krok, Usuń historię pamięci podręcznej przeglądarki (Ctrl + Shift + Usuń), wyczyść wszystkie dane przeglądarki z przeglądarki, w tym pliki cookie.

Krok >> 4: Przejdź do katalogu >> Zarządzanie produktem, dodaj nowy obraz dowolnego produktu, teraz możesz zobaczyć, że wszystko działa dobrze.

Randhir Yadav
źródło
0

Wystąpił ten sam przypadek problemu 2. W moim przypadku przyczyną był nadpisanie tego pliku przez moduł niestandardowy:

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

Sugeruję sprawdzenie, czy masz podobny szablon zastępujący szablon dla tego bloku, Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contenta jeśli tak, zastosuj Supee-8788łatkę do pliku zastępującego.

philipj
źródło