├── LICENSE
├── README.md
├── composer.json
├── modman
└── src
├── app
├── code
│ └── community
│ │ └── Itabs
│ │ └── LogViewer
│ │ ├── Block
│ │ └── Adminhtml
│ │ │ ├── Console.php
│ │ │ └── Console
│ │ │ └── Files.php
│ │ ├── Helper
│ │ └── Data.php
│ │ ├── Model
│ │ ├── Config
│ │ │ └── Source
│ │ │ │ └── Lines.php
│ │ └── Reader.php
│ │ ├── Test
│ │ ├── Config
│ │ │ ├── Config.php
│ │ │ └── Config
│ │ │ │ └── expectations
│ │ │ │ └── globalConfig.yaml
│ │ ├── Helper
│ │ │ └── Data.php
│ │ └── Model
│ │ │ └── Config
│ │ │ └── Source
│ │ │ ├── Lines.php
│ │ │ └── Lines
│ │ │ └── _data
│ │ │ ├── ex-toOptionArray.yaml
│ │ │ └── ex-toOptionHash.yaml
│ │ ├── controllers
│ │ └── Adminhtml
│ │ │ └── LogviewerController.php
│ │ └── etc
│ │ ├── adminhtml.xml
│ │ └── config.xml
├── design
│ └── adminhtml
│ │ └── default
│ │ └── default
│ │ ├── layout
│ │ └── itabs
│ │ │ └── logviewer.xml
│ │ └── template
│ │ └── itabs
│ │ └── logviewer
│ │ ├── console.phtml
│ │ └── console
│ │ └── files.phtml
├── etc
│ └── modules
│ │ └── Itabs_LogViewer.xml
└── locale
│ └── de_DE
│ └── Itabs_LogViewer.csv
└── skin
└── adminhtml
└── default
└── default
└── itabs
└── logviewer
└── styles.css
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ITABS GmbH
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Itabs_LogViewer
2 | ===============
3 |
4 | This extension provides the possibility to view log files in the backend.
5 |
6 | Facts
7 | -----
8 | - Version: 1.0.0
9 | - [extension on GitHub](https://github.com/itabs/Itabs_LogViewer)
10 |
11 | Compatibility
12 | -------------
13 | - Magento >= 1.6
14 |
15 | Installation Instructions
16 | -------------------------
17 |
18 | #### Manually
19 |
20 | - Clone the repository or download the latest version of this extension
21 | - Copy all the files from the **src** folder into your Magento document root
22 |
23 | #### Via modman
24 |
25 | - Install [modman](https://github.com/colinmollenhour/modman) on your system
26 | - Run the following command in your Magento document root:
27 |
28 | `modman clone https://github.com/itabs/Itabs_LogViewer.git`
29 |
30 | #### Via composer
31 |
32 | - Install [composer](http://getcomposer.org/download/) on your system
33 | - Install [Magento Composer](https://github.com/magento-hackathon/magento-composer-installer) or any other Magento composer installer
34 | - Create a composer.json into your project like the following sample:
35 |
36 | ```json
37 | {
38 | "require": {
39 | "itabs/logviewer":"*"
40 | },
41 | "repositories": [
42 | {
43 | "type": "composer",
44 | "url": "http://packages.firegento.com"
45 | }
46 | ],
47 | "extra":{
48 | "magento-root-dir": "htdocs/"
49 | }
50 | }
51 | ```
52 |
53 | - From your `composer.json` folder run `php composer.phar install` or `composer install`
54 |
55 | #### Final steps
56 |
57 | - Clear the cache, logout from the admin panel and then log back in
58 | - You can now view the log files in the backend under *System -> LogViewer*
59 |
60 | Uninstallation
61 | --------------
62 | - Remove all extension files from your Magento installation:
63 |
64 | ```
65 | app/code/community/Itabs/LogViewer
66 | app/design/adminhtml/default/default/layout/itabs/logviewer.xml
67 | app/design/adminhtml/default/default/template/itabs/logviewer
68 | app/etc/modules/Itabs_LogViewer.xml
69 | app/locale/de_DE/Itabs_LogViewer.csv
70 | skin/adminhtml/default/default/itabs/logviewer
71 | ```
72 |
73 | - Via modman: `modman remove Itabs_LogViewer`
74 | - Via composer, remove the requirement of `itabs/logviewer`
75 |
76 | Support
77 | -------
78 | If you have any issues with this extension, open an issue on [GitHub](https://github.com/itabs/Itabs_LogViewer/issues).
79 |
80 | Contribution
81 | ------------
82 | Any contribution is highly appreciated. The best way to contribute code is to open a [pull request on GitHub](https://help.github.com/articles/using-pull-requests).
83 |
84 | Developer
85 | ---------
86 | Rouven Alexander Rieker / ITABS GmbH
87 | - [http://www.itabs.de](http://www.itabs.de)
88 | - [@therouv](https://twitter.com/therouv)
89 | - [@itabs_gmbh](https://twitter.com/itabs_gmbh)
90 |
91 | License
92 | -------
93 | [MIT](http://opensource.org/licenses/MIT) - For the full copyright and license information, please view the LICENSE file that was distributed with this source code.
94 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "itabs/logviewer",
3 | "description": "This extension provides the possibility to view log files in the backend.",
4 | "type": "magento-module",
5 | "license": "MIT",
6 | "minimum-stability": "dev",
7 | "authors": [
8 | {
9 | "name": "ITABS GmbH",
10 | "email": "info@itabs.de"
11 | }
12 | ],
13 | "suggest": {
14 | "magento-hackathon/magento-composer-installer": "*"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modman:
--------------------------------------------------------------------------------
1 | src/app/code/community/Itabs/LogViewer app/code/community/Itabs/LogViewer
2 | src/app/design/adminhtml/default/default/layout/itabs/logviewer.xml app/design/adminhtml/default/default/layout/itabs/logviewer.xml
3 | src/app/design/adminhtml/default/default/template/itabs/logviewer app/design/adminhtml/default/default/template/itabs/logviewer
4 | src/app/etc/modules/Itabs_LogViewer.xml app/etc/modules/Itabs_LogViewer.xml
5 | src/app/locale/de_DE/Itabs_LogViewer.csv app/locale/de_DE/Itabs_LogViewer.csv
6 | src/skin/adminhtml/default/default/itabs/logviewer skin/adminhtml/default/default/itabs/logviewer
7 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Block/Adminhtml/Console.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Block_Adminhtml_Console
18 | */
19 | class Itabs_LogViewer_Block_Adminhtml_Console extends Mage_Adminhtml_Block_Widget_Container
20 | {
21 | /**
22 | * Constructor for Block
23 | */
24 | public function _construct()
25 | {
26 | parent::_construct();
27 | $this->setTemplate('itabs/logviewer/console.phtml');
28 |
29 | // Add the buttons to the layout
30 | if ($this->getLogHelper()->getCurrentFile()) {
31 | // Add reload button
32 | $this->_addButton('reload', array(
33 | 'label' => $this->getLogHelper()->__('Reload'),
34 | 'onclick' => 'setLocation(\'' . $this->getUrl('*/*/*', array('_current' => true)) . '\')'
35 | ), -1);
36 |
37 | // Add download button
38 | $this->_addButton('download', array(
39 | 'label' => $this->getLogHelper()->__('Download Log File'),
40 | 'onclick' => 'setLocation(\'' . $this->getUrl('*/*/download', array('_current' => true)) . '\')',
41 | 'class' => 'add'
42 | ));
43 | }
44 | }
45 |
46 | /**
47 | * Retrieve the log output
48 | *
49 | * @return string
50 | */
51 | public function getLogOutput()
52 | {
53 | $lines = '';
54 |
55 | $file = $this->getLogHelper()->getCurrentFile();
56 | if ($file) {
57 | $path = $this->getLogHelper()->getLogDir() . $file;
58 |
59 | /* @var $reader Itabs_LogViewer_Model_Reader */
60 | $reader = Mage::getModel('itabs_logviewer/reader');
61 | $tmpLines = $reader->readLastLines($path, $this->getLogHelper()->getCurrentLines());
62 | if (count($tmpLines) > 0) {
63 | $lines = implode('
', $tmpLines);
64 | }
65 | }
66 |
67 | return $lines;
68 | }
69 |
70 | /**
71 | * Retrieve the log viewer helper
72 | *
73 | * @return Itabs_LogViewer_Helper_Data
74 | */
75 | public function getLogHelper()
76 | {
77 | return Mage::helper('itabs_logviewer');
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Block/Adminhtml/Console/Files.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Block_Adminhtml_Console_Files
18 | */
19 | class Itabs_LogViewer_Block_Adminhtml_Console_Files
20 | extends Mage_Adminhtml_Block_Template
21 | {
22 | /**
23 | * Constructor for Block
24 | */
25 | public function _construct()
26 | {
27 | parent::_construct();
28 | $this->setTemplate('itabs/logviewer/console/files.phtml');
29 | }
30 |
31 | /**
32 | * Returns the log files of the var/log directory
33 | *
34 | * @return array
35 | */
36 | public function getLogFiles()
37 | {
38 | $path = $this->getLogHelper()->getLogDir();
39 | if (!file_exists($path)) {
40 | return array();
41 | }
42 |
43 | $io = new Varien_Io_File();
44 | $io->open(array('path' => $path));
45 | $files = $io->ls(Varien_Io_File::GREP_FILES);
46 |
47 | return $files;
48 | }
49 |
50 | /**
51 | * Retrieve the available lines count
52 | *
53 | * @return array
54 | */
55 | public function getAvailableLines()
56 | {
57 | /* @var $source Itabs_LogViewer_Model_Config_Source_Lines */
58 | $source = Mage::getModel('itabs_logviewer/config_source_lines');
59 |
60 | return $source->toOptionHash();
61 | }
62 |
63 | /**
64 | * Adds the secure key to the url
65 | *
66 | * @return string
67 | */
68 | public function getSecureUrl($fileName = null, $lines = false)
69 | {
70 | $params = array();
71 | if (!is_null($fileName)) {
72 | $params['file'] = $this->getLogHelper()->encode($fileName);
73 | }
74 |
75 | if ($lines) {
76 | $params['lines'] = $lines;
77 | }
78 |
79 | return $this->getUrl('*/*/*', $params);
80 | }
81 |
82 | /**
83 | * Retrieve the log viewer helper
84 | *
85 | * @return Itabs_LogViewer_Helper_Data
86 | */
87 | public function getLogHelper()
88 | {
89 | return Mage::helper('itabs_logviewer');
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Helper/Data.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Helper_Data
18 | */
19 | class Itabs_LogViewer_Helper_Data extends Mage_Core_Helper_Abstract
20 | {
21 | /**
22 | * Retrieve the current file
23 | *
24 | * @return string|bool
25 | */
26 | public function getCurrentFile()
27 | {
28 | $file = Mage::app()->getRequest()->getParam('file', false);
29 | if ($file) {
30 | $file = $this->decode($file);
31 |
32 | // Check if file exists
33 | $path = $this->getLogDir() . $file;
34 | if (!file_exists($path)) {
35 | return false;
36 | }
37 | }
38 |
39 | return $file;
40 | }
41 |
42 | /**
43 | * Retrieve the current lines count
44 | *
45 | * @return int
46 | */
47 | public function getCurrentLines()
48 | {
49 | return Mage::app()->getRequest()->getParam('lines', 100);
50 | }
51 |
52 | /**
53 | * Encode the given string for the url
54 | *
55 | * @param string $string String
56 | * @return string
57 | */
58 | public function encode($string)
59 | {
60 | return strtr(base64_encode($string), '+/=', '-_,');
61 | }
62 |
63 | /**
64 | * Decode the given string from the url
65 | *
66 | * @param string $string String
67 | * @return string
68 | */
69 | public function decode($string)
70 | {
71 | return base64_decode(strtr($string, '-_,', '+/='));
72 | }
73 |
74 | /**
75 | * Retrieve the log dir
76 | *
77 | * @return string
78 | */
79 | public function getLogDir()
80 | {
81 | return Mage::getBaseDir('var') . DS . 'log' . DS;
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Model/Config/Source/Lines.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Model_Config_Source_Lines
18 | */
19 | class Itabs_LogViewer_Model_Config_Source_Lines
20 | {
21 | /**
22 | * @var null
23 | */
24 | protected $_options = null;
25 |
26 | /**
27 | * Retrieve the option array
28 | *
29 | * @return array
30 | */
31 | public function toOptionArray()
32 | {
33 | if (null === $this->_options) {
34 | $this->_options = array(
35 | array(
36 | 'value' => 50,
37 | 'label' => $this->getHelper()->__('%s lines', 50),
38 | ),
39 | array(
40 | 'value' => 100,
41 | 'label' => $this->getHelper()->__('%s lines', 100),
42 | ),
43 | array(
44 | 'value' => 250,
45 | 'label' => $this->getHelper()->__('%s lines', 250),
46 | ),
47 | array(
48 | 'value' => 500,
49 | 'label' => $this->getHelper()->__('%s lines', 500),
50 | ),
51 | array(
52 | 'value' => 1000,
53 | 'label' => $this->getHelper()->__('%s lines', 1000),
54 | )
55 | );
56 | }
57 |
58 | return $this->_options;
59 | }
60 |
61 | /**
62 | * Retrieve the option hash
63 | *
64 | * @return array
65 | */
66 | public function toOptionHash()
67 | {
68 | $options = array();
69 | foreach ($this->toOptionArray() as $option) {
70 | $options[$option['value']] = $option['label'];
71 | }
72 |
73 | return $options;
74 | }
75 |
76 | /**
77 | * Retrieve the log viewer helper
78 | *
79 | * @return Itabs_LogViewer_Helper_Data
80 | */
81 | public function getHelper()
82 | {
83 | return Mage::helper('itabs_logviewer');
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Model/Reader.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Model_Reader
18 | */
19 | class Itabs_LogViewer_Model_Reader
20 | {
21 | /**
22 | * Return array with last n lines from given file
23 | *
24 | * @param string|resource file File
25 | * @param int $lines Number of lines
26 | * @return array
27 | */
28 | public function readLastLines($file, $lines)
29 | {
30 | if (!file_exists($file)) {
31 | return false;
32 | }
33 |
34 | $handle = fopen($file, 'r');
35 | if ($handle === false) {
36 | return false;
37 | }
38 |
39 | // Move the pointer first to the end
40 | fseek($handle, 0, SEEK_END);
41 |
42 | // Move the pointer to the lines we want to retrieve
43 | $this->_seekLineBack($handle, $lines);
44 |
45 | // Fetch all lines based from this pointer
46 | $lines = array();
47 | while ($line = fgets($handle)) {
48 | $lines[] = $line;
49 | }
50 |
51 | fclose($handle);
52 |
53 | return $lines;
54 | }
55 |
56 | /**
57 | * Will set pointer in file back to read n lines relative to current pointer
58 | *
59 | * @param resource $handle Resource
60 | * @param int $lines Number of lines
61 | * @return int
62 | * @see http://stackoverflow.com/a/13936967/2088060
63 | */
64 | protected function _seekLineBack($handle, $lines)
65 | {
66 | $readSize = 160 * ($lines + 1);
67 | $pos = ftell($handle);
68 | if (ftell($handle) === 0) {
69 | return false;
70 | }
71 | if ($pos === false) {
72 | fseek($handle, 0, SEEK_SET);
73 |
74 | return false;
75 | }
76 | while ($lines >= 0) {
77 | if ($pos === 0) {
78 | break;
79 | }
80 | $currentReadsize = $readSize;
81 | $pos = $pos - $readSize;
82 | if ($pos < 0) {
83 | $currentReadsize = $readSize - abs($pos);
84 | $pos = 0;
85 | }
86 | if (fseek($handle, $pos, SEEK_SET) === -1) {
87 | fseek($handle, 0, SEEK_SET);
88 | break;
89 | }
90 | $data = fread($handle, $currentReadsize);
91 | $count = substr_count($data, "\n");
92 | $lines = $lines - $count;
93 | if ($lines < 0) {
94 | break;
95 | }
96 | }
97 | fseek($handle, $pos, SEEK_SET);
98 | while ($lines < 0) {
99 | fgets($handle);
100 | $lines++;
101 | }
102 | $pos = ftell($handle);
103 | if ($pos === false) {
104 | fseek($handle, 0, SEEK_SET);
105 | }
106 |
107 | return $pos;
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Config/Config.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Tests for module config
18 | *
19 | * @group Itabs_LogViewer
20 | */
21 | class Itabs_LogViewer_Test_Config_Config extends EcomDev_PHPUnit_Test_Case_Config
22 | {
23 | /**
24 | * @test
25 | * @loadExpections
26 | */
27 | public function globalConfig()
28 | {
29 | $this->assertModuleVersion($this->expected('module')->getVersion());
30 | $this->assertModuleCodePool($this->expected('module')->getCodePool());
31 |
32 | foreach ($this->expected('module')->getDepends() as $depend) {
33 | $this->assertModuleDepends($depend);
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Config/Config/expectations/globalConfig.yaml:
--------------------------------------------------------------------------------
1 | module:
2 | version: 1.0.0
3 | code_pool: community
4 | depends:
5 | - Mage_Adminhtml
6 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Helper/Data.php:
--------------------------------------------------------------------------------
1 | _helper = Mage::helper('itabs_logviewer');
17 | }
18 |
19 | /**
20 | * @test
21 | */
22 | public function getCurrentLines()
23 | {
24 | $this->assertEquals(100, $this->_helper->getCurrentLines());
25 | self::app()->getRequest()->setParam('lines', 500);
26 | $this->assertEquals(500, $this->_helper->getCurrentLines());
27 | }
28 |
29 | /**
30 | * @test
31 | */
32 | public function encode()
33 | {
34 | $this->assertEquals('dGVzdA,,', $this->_helper->encode('test'));
35 | }
36 |
37 | /**
38 | * @test
39 | */
40 | public function decode()
41 | {
42 | $this->assertEquals('test', $this->_helper->decode('dGVzdA,,'));
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Model/Config/Source/Lines.php:
--------------------------------------------------------------------------------
1 | _model = Mage::getModel('itabs_logviewer/config_source_lines');
17 | }
18 |
19 | /**
20 | * @test
21 | * @loadExpectations
22 | */
23 | public function toOptionArray()
24 | {
25 | $this->assertEquals(
26 | $this->expected('source')->getOptions(),
27 | $this->_model->toOptionArray()
28 | );
29 | }
30 |
31 | /**
32 | * @test
33 | * @loadExpectations
34 | */
35 | public function toOptionHash()
36 | {
37 | $this->assertEquals(
38 | $this->expected('source')->getOptions(),
39 | $this->_model->toOptionHash()
40 | );
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Model/Config/Source/Lines/_data/ex-toOptionArray.yaml:
--------------------------------------------------------------------------------
1 | source:
2 | options:
3 | - value: 50
4 | label: 50 lines
5 | - value: 100
6 | label: 100 lines
7 | - value: 250
8 | label: 250 lines
9 | - value: 500
10 | label: 500 lines
11 | - value: 1000
12 | label: 1000 lines
13 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/Test/Model/Config/Source/Lines/_data/ex-toOptionHash.yaml:
--------------------------------------------------------------------------------
1 | source:
2 | options:
3 | 50: 50 lines
4 | 100: 100 lines
5 | 250: 250 lines
6 | 500: 500 lines
7 | 1000: 1000 lines
8 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/controllers/Adminhtml/LogviewerController.php:
--------------------------------------------------------------------------------
1 |
13 | * @copyright 2015 ITABS GmbH (http://www.itabs.de)
14 | */
15 |
16 | /**
17 | * Class Itabs_LogViewer_Adminhtml_LogviewerController
18 | */
19 | class Itabs_LogViewer_Adminhtml_LogviewerController
20 | extends Mage_Adminhtml_Controller_Action
21 | {
22 | /**
23 | * Show the log file viewer
24 | */
25 | public function indexAction()
26 | {
27 | $this->loadLayout();
28 | $this->_setActiveMenu('system/logviewer');
29 | $this->_title($this->__('Log Viewer'));
30 | $this->renderLayout();
31 | }
32 |
33 | /**
34 | * Download the given log file
35 | */
36 | public function downloadAction()
37 | {
38 | $file = $this->getLogHelper()->getCurrentFile();
39 | if ($file) {
40 | $path = $this->getLogHelper()->getLogDir() . $file;
41 | $this->_prepareDownloadResponse($file, file_get_contents($path));
42 |
43 | return;
44 | }
45 |
46 | return $this->_redirect('*/*');
47 | }
48 |
49 | /**
50 | * Retrieve the log viewer helper
51 | *
52 | * @return Itabs_LogViewer_Helper_Data
53 | */
54 | public function getLogHelper()
55 | {
56 | return Mage::helper('itabs_logviewer');
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/app/code/community/Itabs/LogViewer/etc/adminhtml.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
26 | | 27 | 33 | | 34 |
38 | | 39 | 44 | | 45 |