SUPEE-6285 и контроллер Adminhtml


В настоящее время у меня есть открытый вопрос с вознаграждением на веб-сайте Stack Exchange, но я чувствую, что получаю гораздо больше внутренней информации в этом сообществе из-за большего количества людей с опытом работы в Magento.

Последний патч SUPEE-6285 не выдает ошибку отказа в доступе, но выдает 404 Не найдено, когда я пытаюсь использовать контроллер Mage_Adminhtml_Controller_Action.

Эта функциональность работала до вышеупомянутого исправления.

Код, в котором я думайте, что проблема в другом. Не стесняйтесь заглядывать внутрь всего кода.

app/code/community/Icepay/IceAdvanced/Block/Adminhtml/Grid/Paymentmethods.php

class Icepay_IceAdvanced_AjaxController extends Mage_Adminhtml_Controller_Action
{

    protected $webservice = null;

    public function iceWebservice()
    {
        if ($this->webservice == null)
            $this->webservice = new Icepay_IceAdvanced_Model_Paymentmethods();
        return $this->webservice;
    }

    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }

    public function get_paymentmethodsAction()
    {
        $this->getResponse()->setBody(Zend_Json::encode($this->iceWebservice()->retrieveAdminGrid($this->getRequest()->get("store"))));
    }

    public function save_paymentmethodAction()
    {
        $adv_sql = Mage::getSingleton('iceadvanced/mysql4_iceAdvanced');

        $reference = $this->getRequest()->getPost("reference");
        $scopeID = $this->getRequest()->getPost("store");

        if (!isset($reference))
            return;

        $adv_sql->setScope($scopeID);

        $settings = Mage::helper("iceadvanced")->getPaymentmethodExtraSettings();

        if ($this->getRequest()->getPost("active_issuers")) {
            $issuers = explode(",", $this->getRequest()->getPost("active_issuers"));
            if (count($issuers) >= 1)
                array_push($settings, "active_issuers"); //At least 1 issuer active is required
        }

        foreach ($settings as $setting) {
            $adv_sql->saveConfigValue($reference, $setting, $this->getRequest()->getPost($setting));
        }

        $this->getResponse()->setBody(sprintf($this->__("%s settings have been saved."), $this->getRequest()->getPost("name")));
    }

}

Затем блок в Adminhtml получает эту функцию.

app/code/community/Icepay/IceAdvanced/Block/Adminhtml/Grid/Paymentmethods.php

class Icepay_IceAdvanced_Block_Adminhtml_Grid_PaymentMethods extends Mage_Adminhtml_Block_Widget implements Varien_Data_Form_Element_Renderer_Interface {

    protected $_element;
    protected $_scope;
    protected $_ajaxLoadPaymentMethodURL;
    protected $_ajaxSavePaymentMethodURL;
    protected $_ajaxGetPaymentMethodsURL;
    protected $debug;

    public function __construct()
    {
        $this->_scope = Mage::app()->getStore(Mage::helper("icecore")->getStoreFromRequest())->getId();
        $this->_ajaxLoadPaymentMethodURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/config/index/paymentmethod/{{pm_code}}', array('_secure' => true, 'scope' => $this->_scope));
        $this->_ajaxSavePaymentMethodURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/ajax/save_paymentmethod', array('_secure' => true, 'scope' => $this->_scope));
        $this->_ajaxGetPaymentMethodsURL = Mage::helper('adminhtml')->getUrl('icepayadvanced/ajax/get_paymentmethods', array('_secure' => true));

        $this->setTemplate('icepayadvanced/grid_paymentmethods.phtml');
    }

    public function render(Varien_Data_Form_Element_Abstract $element)
    {
        $this->setElement($element);
        return $this->toHtml();
    }

    public function setElement(Varien_Data_Form_Element_Abstract $element)
    {
        $this->_element = $element;
        return $this;
    }

    public function getElement()
    {
        return $this->_element;
    }

    public function getJS($uri)
    {
        return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS, true) . $uri;
    }

    public function getPaymentmethods()
    {
        return Mage::getSingleton('iceadvanced/mysql4_iceAdvanced')->getAdminPaymentmethodConfigForStore($this->_scope);
    }

    public function getAddButtonHtml()
    {
        return $this->getChildHtml('add_button');
    }

    protected function _prepareLayout()
    {
        $button = $this->getLayout()->createBlock('adminhtml/widget_button')
                ->setData(array(
            'label' => Mage::helper('icecore')->__('Get paymentmethods'),
            'onclick' => 'return ICEPAY.retrieveFromICEPAY()',
            'class' => 'add'
        ));
        $button->setName('add_tier_price_item_button');

        $this->setChild('add_button', $button);

        if (version_compare(Mage::getVersion(), '1.7.0.0', '<')) {
            $this->getLayout()->getBlock('head')->addItem('js_css', 'prototype/windows/themes/magento.css');
        } else {
            $this->getLayout()->getBlock('head')->addItem('skin_css', 'lib/prototype/windows/themes/magento.css');
        }

        $this->getLayout()
                ->getBlock('head')
                ->addItem('js_css', 'prototype/windows/themes/default.css');

        return parent::_prepareLayout();
    }

}

И файл конфигурации:

app/code/community/Icepay/IceAdvanced/etc/config.xml

<?xml version="1.0"?>

<config>
    <modules>
        <Icepay_IceAdvanced>
            <version>1.1.9</version>
        </Icepay_IceAdvanced>
    </modules>
    <frontend>
        <routers>
            <iceadvanced>
                <use>standard</use>
                <args>
                    <module>Icepay_IceAdvanced</module>
                    <frontName>icepayadvanced</frontName>
                </args>
            </iceadvanced>
        </routers>
        <layout>
            <updates>
                <iceadvanced>
                    <file>iceadvanced.xml</file>
                </iceadvanced>
            </updates>
        </layout>
        <translate>
            <modules>
                <Icepay_IceAdvanced>
                    <files>
                        <default>Icepay_IceAdvanced.csv</default>
                    </files>
                </Icepay_IceAdvanced>
            </modules>
        </translate>
        <events>
            <sales_order_place_before>
                <observers>
                    <iceadvanced>
                        <type>singleton</type>
                        <class>iceadvanced/observer</class>
                        <method>sales_order_place_before</method>
                    </iceadvanced>
                </observers>
            </sales_order_place_before>
            <custom_quote_process>
                <observers>
                    <iceadvanced>
                        <type>singleton</type>
                        <class>iceadvanced/observer</class>
                        <method>custom_quote_process</method>
                    </iceadvanced>
                </observers>
            </custom_quote_process>
        </events>
    </frontend>

    <global>
        <models>
            <iceadvanced>
                <class>Icepay_IceAdvanced_Model</class>
                <resourceModel>iceadvanced_mysql4</resourceModel>
            </iceadvanced>
            <iceadvanced_mysql4>
                <class>Icepay_IceAdvanced_Model_Mysql4</class>
                <entities>
                    <icepay_issuerdata>
                        <table>icepay_issuerdata</table>
                    </icepay_issuerdata>
                    <icepay_pmdata>
                        <table>icepay_pmdata</table>
                    </icepay_pmdata>
                </entities>
            </iceadvanced_mysql4>
        </models>
        <resources>
            <icepayadvanced_setup>
                <setup>
                    <module>Icepay_IceAdvanced</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </icepayadvanced_setup>
            <iceadvanced_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </iceadvanced_write>
            <iceadvanced_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </iceadvanced_read>
        </resources>
        <blocks>
            <iceadvanced>
                <class>Icepay_IceAdvanced_Block</class>
            </iceadvanced>
        </blocks>
        <helpers>
            <iceadvanced>
                <class>Icepay_IceAdvanced_Helper</class>
            </iceadvanced>
        </helpers>
        <events>
            <model_save_before>
                <observers>
                    <iceadvanced>
                        <type>singleton</type>
                        <class>iceadvanced/observer</class>
                        <method>model_save_before</method>
                    </iceadvanced>
                </observers>
            </model_save_before>
            <model_save_after>
                <observers>
                    <iceadvanced>
                        <type>singleton</type>
                        <class>iceadvanced/observer</class>
                        <method>model_save_after</method>
                    </iceadvanced>
                </observers>
            </model_save_after>
            <sales_order_payment_place_end>
                <observers>
                    <iceadvanced>
                        <type>singleton</type>
                        <class>iceadvanced/observer</class>
                        <method>sales_order_payment_place_end</method>
                    </iceadvanced>
                </observers>
            </sales_order_payment_place_end>
        </events>
    </global>

    <adminhtml>
        <translate>
            <modules>
                <Icepay_IceAdvanced>
                    <files>
                        <default>Icepay_IceAdvanced.csv</default>
                    </files>
                </Icepay_IceAdvanced>
            </modules>
        </translate>

        <acl>
            <resources>
                <admin>
                    <children>
                        <system>
                            <children>
                                <config>
                                    <children>
                                        <iceadvanced translate="title" module="iceadvanced">
                                            <title>iceadvanced Settings</title>
                                        </iceadvanced>
                                    </children>
                                </config>
                            </children>
                        </system>
                    </children>
                </admin>
            </resources>
        </acl>
    </adminhtml>
</config>

Надеюсь кто-нибудь мог бы объяснить мне, что я делаю не так. Прежде чем вы обвините меня в коде, я не создавал его в первую очередь.

Редактировать: После выполнения руководства BJ Hoffpauir; это вывод файла error.log

192.168.137.1 - - [17/ Июль/2015:23:03:56 +0000] " СООБЩЕНИЕ/индекс.php/icepayadvanced/ajax/get_paymentметоды/ключ/21e4f55bb33ad6a323c50140bc5ef585/?isAjax=true HTTP/1.1"404 16910 "http://192.168.137.124/index.php/admin/system_config/edit/section/icecore/key/e96d9f50648cad8168ebf376470196ad/ ""Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, как Геккон) Chrome/43.0.2357.134 Safari/537.36"

Author: Community, 2015-07-19

1 answers

Рикардо, есть несколько папок и файлов, для которых, возможно, были установлены разрешения 777, когда Magento изначально создавал их, которые обновляются с помощью исправления.

Я бы предложил просмотреть следующий документ о разрешениях для файлов и папок из Magento, чтобы убедиться, что после установки исправления вы можете подтвердить, что все разрешения для файлов и папок установлены на рекомендуемые списки управления доступом для безопасности, как определено в этом руководстве.

ПРИМЕЧАНИЕ: По умолчанию это руководство по сути, вы отключаете функциональность Magento Connect, что является хорошей идеей для ваших производственных сайтов - вы не хотите, чтобы КТО-либо устанавливал программное обеспечение непосредственно в вашу производственную систему без тестирования и архивирования в хранилище исходного кода, таком как git/hg/svn... если вам действительно необходимо использовать эту функцию, в этом руководстве содержатся инструкции о том, как временно ослабить разрешения, достаточные для использования утилиты, а затем как восстановить дополнительные параметры безопасности, когда вы закончите.

Следуйте этому руководству, оно, скорее всего, решит ваши 404 проблемы. Если это не так, найдите файл журнала вашего веб-сервера Apache или Nginx и проверьте его на наличие ошибки 404 - например, мои журналы хранятся в

/var/log/apache2/access.log
/var/log/apache2/error.log

В моей системе Ubuntu 14.04 и когда я выполняю команду

cat /var/log/apache2/error.log | grep 404

Я мог бы увидеть вывод, подобный следующему:

[Sun Jul 12 21:39:54.824860 2015] [:error] [pid 1234] [client 10.10.10.10:51404] script '/var/www/html/script.php' not found or unable to stat
[Sun Jul 12 21:39:54.824860 2015] [:error] [pid 1234] [client 10.10.10.10:51404] script '/var/www/html/script.php' not found or unable to stat

Вставьте то, что ВЫ найдете при выполнении этой команды cat, заменив команду /var/log/apache2/error.log на то, где хранится файл журнала ВАШЕГО веб-сервера. Отредактируйте свои вопросы & вставьте то, что вы найдете в своем вопросе, и мы поможем вам найти источник ошибки 404 и конкретный контекст, в котором она генерирует ошибку.

 2
Author: Bryan 'BJ' Hoffpauir Jr., 2015-07-19 21:55:44