Skip to content

Commit

Permalink
Merge pull request #46 from k3rn3l3rr0r/dev-hooks
Browse files Browse the repository at this point in the history
Show, delete, batch-delete exception logs. Closes #19
  • Loading branch information
voslartomas committed Apr 12, 2015
2 parents be7efbd + 3315e41 commit 1c76278
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 22 deletions.
91 changes: 91 additions & 0 deletions AdminModule/presenters/HomepagePresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,22 @@
namespace AdminModule;

use Dubture\Monolog\Reader\LogReader;
use Nette\Utils\Finder;

/**
* Admin presenter.
*
* @author Tomáš Voslař <tomas.voslar at webcook.cz>
* @package WebCMS2
*/
class HomepagePresenter extends \AdminModule\BasePresenter
{
/* @var logContent */
private $logContent;

/* @var exceptions */
private $exceptions;

protected function beforeRender()
{
parent::beforeRender();
Expand All @@ -29,6 +37,21 @@ protected function beforeRender()
}
}

$exceptions = array();
if ($this->getUser()->getRoles()[0] === 'superadmin') {
foreach (Finder::findFiles('exception-*.html')->in(APP_DIR . '/../log') as $key => $file) {
$filename = $file->getFileName();
$parsed = explode('-', $filename);
$date = $parsed[1] . '-' . $parsed[2] . '-' . $parsed[3] . ' ' . $parsed[4] . ':' . $parsed[5] . ':' . $parsed[6];
$exceptions[] = array('id' => substr($parsed[7], 0, -5), 'date' => $date, 'filename' => $filename);
}
}

if (count($exceptions) > 0) {
$this->exceptions = $exceptions;
$this->template->showExceptions = true;
}

// favourite links
$user = $this->em->getRepository('WebCMS\Entity\User')->find($this->getUser()->getId());
$favourites = $this->em->getRepository('WebCMS\Entity\Favourites')->findBy(array(
Expand All @@ -43,4 +66,72 @@ protected function startup()
{
parent::startup();
}

public function createComponentExceptionLogsGrid()
{
$grid = new \Grido\Grid($this, 'exceptionLogsGrid');
$grid->AddColumnDate('date', 'Date')
->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATETIME)
->setSortable();
$grid->AddColumnText('filename', 'Filename');

$grid->setModel($this->exceptions);

$grid->addActionHref("showExceptionLog", 'Show')->getElementPrototype()->addAttributes(array('class' => array('btn', 'btn-primary'), 'target' => '_blank'));
$grid->addActionHref("deleteExceptionLog", 'Delete')->getElementPrototype()->addAttributes(array('class' => array('btn', 'btn-danger'), 'data-confirm' => 'Are you sure you want to delete this item?'));

$grid->setDefaultSort(array('date' => 'DESC'));
$grid->setRememberState(true);
$grid->setDefaultPerPage(10);
$grid->setTranslator($this->translator);
$grid->setFilterRenderType(\Grido\Components\Filters\Filter::RENDER_INNER);

return $grid;
}

public function renderShowExceptionLog($id)
{
$this->template->content = $this->logContent;
}

public function actionShowExceptionLog($id)
{
foreach (Finder::findFiles('exception-*' . $id . '.html')->in(APP_DIR . '/../log') as $key => $file) {
$contents = file_get_contents(APP_DIR . '/../log/' . $file->getFileName());
}

if (!empty($contents)) {
$this->logContent = $contents;
} else {
$this->logContent = 'Unable to show the exception log - file not found.';
}
}

public function actionDeleteExceptionLog($id)
{
foreach (Finder::findFiles('exception-*' . $id . '.html')->in(APP_DIR . '/../log') as $key => $file) {
$filename = $file->getFileName();
}

if (!empty($filename)) {
unlink(APP_DIR . '/../log/' . $filename);
$this->flashMessage('Exception log has been deleted.', 'success');
} else {
$this->flashMessage('Unable to delete exception log - file not found.', 'error');
}

$this->forward('default');
}

public function actionDeleteAllExceptionLogs()
{
if ($this->getUser()->getRoles()[0] === 'superadmin') {
foreach (Finder::findFiles('exception-*.html')->in(APP_DIR . '/../log') as $key => $file) {
$filename = $file->getFileName();
unlink(APP_DIR . '/../log/' . $filename);
}
}
$this->flashMessage('All exception logs have been deleted.', 'success');
$this->forward('default');
}
}
59 changes: 37 additions & 22 deletions AdminModule/templates/Homepage/default.latte
Original file line number Diff line number Diff line change
@@ -1,39 +1,54 @@
{block content}

<div class="page-heading">
<h1>{_'Homepage title'}</h1>
<h1>{_'Homepage title'}</h1>
</div>


{if $showExceptions == true}
<div class="page-heading">
<h2>{_'Exception logs'}</h2>
<div class="pull-right">
<a class="ajax btn btn-danger" href="{$basePath}/admin/homepage/delete-all-exception-logs/">{_'Delete all exception logs'}</a>
</div>
</div>

<h2>{_'Log of events'}</h2>
<div class="well">
{control exceptionLogsGrid}
</div>
{/if}

<div class="page-heading">
<h2>{_'Log of events'}</h2>
</div>

<div class="well" style="height: 300px;overflow: auto;">
<table class="table">
<tr>
<th>{_'Time'}</th>
<th>{_'User'}</th>
<th>{_'Action'}</th>
<th>{_'Url'}</th>
</tr>
{foreach $logReader as $log}
{if !empty($log)}
<tr>
<td>{$log['date']->format('d.m.y H:i:s')}</td>
<td>{$log['context']['user']}</td>
<td>{$log['context']['presenter']} - {$log['context']['action']} - {$log['context']['title']}</td>
<td>{$log['context']['url']}</td>
</tr>
{/if}
{/foreach}
</table>
<table class="table">
<tr>
<th>{_'Time'}</th>
<th>{_'User'}</th>
<th>{_'Action'}</th>
<th>{_'Url'}</th>
</tr>
{foreach $logReader as $log}
{if !empty($log)}
<tr>
<td>{$log['date']->format('d.m.y H:i:s')}</td>
<td>{$log['context']['user']}</td>
<td>{$log['context']['presenter']} - {$log['context']['action']} - {$log['context']['title']}</td>
<td>{$log['context']['url']}</td>
</tr>
{/if}
{/foreach}
</table>
</div>

<div class="page-heading">
<h2>{_'Favourite links'}</h2>
<h2>{_'Favourite links'}</h2>
</div>

{foreach $links as $l}
<a class="ajax btn btn-primary favourite" data-id="{$l->getId()}" href="{$l->getLink()}">{$l->getTitle()}</a>
<a class="ajax btn btn-primary favourite" data-id="{$l->getId()}" href="{$l->getLink()}">{$l->getTitle()}</a>
{/foreach}

{/block}
14 changes: 14 additions & 0 deletions AdminModule/templates/Homepage/showExceptionLog.latte
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{block modalContent}
<div id="exceptionHtml" class="hidden">

</div>
<iframe id="exceptionIframe" src="about:blank">
</iframe>

<script type="text/javascript">
var doc = document.getElementById('exceptionIframe').contentWindow.document;
doc.open();
doc.write('{!$content}');
doc.close();
</script>
{/block}

0 comments on commit 1c76278

Please sign in to comment.