impresspages / ImpressPages

ImpressPages is php framework with admin panel. Build functional website in one hour.
http://www.impresspages.org
Other
501 stars 178 forks source link

possible bug with registerOverride function in Ip\View #787

Closed severfire closed 8 years ago

severfire commented 8 years ago

in Event.php, Event Class in Custom Plugin

    public static function ipBeforeController()
    {
        \Ip\View::registerOverride(ipFile('Ip/Internal/Repository/view/popup.php'), ipFile('Plugin/Tools/override/Ip/Internal/Repository/view/popup.php'));
        \Ip\View::registerOverride(ipFile('Ip/Internal/Repository/view/popupSide.php'), ipFile('Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php'));
}

in View.php file, View class of Ip

public function render()
    {
        extract($this->data);
        ob_start();

        $file = $this->file;
        if (!empty(self::$overrides[$file])) {
            error_log($file . '->' . self::$overrides[$file] . "\n", 3, 'view.error'); # ADDED
            $file = self::$overrides[$file];
        } else {
            error_log($file . "\n", 3, 'view.error'); # ADDED
        }

        error_log(print_r(self::$overrides, 1) . "\n" . "\n", 3, 'view.error'); # ADDED
        require($file); // file existence has been checked in ipView function

        $output = ob_get_contents();
        ob_end_clean();

        return $output;
    }

then while visiting /?aa=RepositoryManager in view.error file we get:

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/navbar.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/menu.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)

/home/user/public_html/Plugin/RepositoryManager/view/index.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Admin/view/layout.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/head.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/javascript.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/layout.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/head.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/javascript.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/navbar.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/menu.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)
maskas commented 8 years ago

These logs look ok. Are you sure this file does exist?

/home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php

severfire commented 8 years ago

shouldn't the $overrides array be all the same for each view? why for some views $overrides array is empty and for others is not?

file exists.

maskas commented 8 years ago

Try to add a marker to your ipBeforeController method:

error_log('register controller' . "\n", 3, 'view.error'); # ADDED

This should explain. I guess you see logs for three requests in that file. And some view files are processed before ipBeforeController happens. Which would be weird. But who knows.

severfire commented 8 years ago

okay, I did it, and seems like plugin doesn't fire ipBeforeController for every view... only for some... (you see where the $overrides array is empty)...

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/navbar.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/menu.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)

register controller
/home/user/public_html/Plugin/RepositoryManager/view/index.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Admin/view/layout.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/head.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/javascript.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)

register controller
/home/user/public_html/Ip/Internal/Admin/view/layout.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/head.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Config/view/javascript.php
Array
(
    [/home/user/public_html/Ip/Internal/Repository/view/popup.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popup.php
    [/home/user/public_html/Ip/Internal/Repository/view/popupSide.php] => /home/user/public_html/Plugin/Tools/override/Ip/Internal/Repository/view/popupSide.php
)

/home/user/public_html/Ip/Internal/Core/view/browseLinkModal.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/navbar.php
Array
(
)

/home/user/public_html/Ip/Internal/Admin/view/menu.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popup.php
Array
(
)

/home/user/public_html/Ip/Internal/Repository/view/popupSide.php
Array
(
)

/home/user/public_html/Ip/Internal/InlineManagement/view/management/controls.php
Array
(
)

register controller
maskas commented 8 years ago

ipBeforeController happens once for each request. NOT once for each view file. In this case log file shows that there have been three HTTP requests and ipBeforeController happens after popup.php and popupSide.php already been rendered. I suggest to set overrides on ipInitFinished_1 event. It is the first event on the system and I hope it will be before those views are being rendered.

severfire commented 8 years ago

seems like putting it in ipInitFinished_1 event fixed the issue.

eazuka commented 8 years ago

Hi @maskas, is ipInitFinished different from ipInitFinished_1 ?

maskas commented 8 years ago

These are the same events, just different priority. If several plugins listen to ipInitFinished, the one with the lowest number will receive the event first.