diff --git a/app/App_FrontController.php b/app/App_FrontController.php
index 5729a115d..637d61206 100644
--- a/app/App_FrontController.php
+++ b/app/App_FrontController.php
@@ -36,6 +36,7 @@ class App_FrontController extends FrontController {
include (APP_PATH . '/models/Entry.php');
include (APP_PATH . '/models/EntriesGetter.php');
include (APP_PATH . '/models/RSSPaginator.php');
+ include (APP_PATH . '/models/Log.php');
}
private function loadParamsView () {
diff --git a/app/controllers/indexController.php b/app/controllers/indexController.php
index 5403b82ed..3f10720c2 100755
--- a/app/controllers/indexController.php
+++ b/app/controllers/indexController.php
@@ -139,6 +139,32 @@ class indexController extends ActionController {
View::prependTitle (Translate::t ('about') . ' - ');
}
+ public function logsAction () {
+ if (login_is_conf ($this->view->conf) && !is_logged ()) {
+ Error::error (
+ 403,
+ array ('error' => array (Translate::t ('access_denied')))
+ );
+ }
+
+ View::prependTitle (Translate::t ('see_logs') . ' - ');
+
+ $logs = array();
+ try {
+ $logDAO = new LogDAO ();
+ $logs = $logDAO->lister ();
+ $logs = array_reverse ($logs);
+ } catch(FileNotExistException $e) {
+
+ }
+
+ //gestion pagination
+ $page = Request::param ('page', 1);
+ $this->view->logsPaginator = new Paginator ($logs);
+ $this->view->logsPaginator->_nbItemsPerPage (50);
+ $this->view->logsPaginator->_currentPage ($page);
+ }
+
public function loginAction () {
$this->view->_useLayout (false);
diff --git a/app/i18n/en.php b/app/i18n/en.php
index 0d0ab5269..dbb6b1bfe 100644
--- a/app/i18n/en.php
+++ b/app/i18n/en.php
@@ -186,6 +186,9 @@ return array (
'credits' => 'Credits',
'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn\'t use this framework. Icons come from GNOME project. Open Sans font police used has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.',
+ 'logs' => 'Logs',
+ 'logs_empty' => 'Log file is empty',
+
// DATE
'january' => 'january',
'february' => 'february',
diff --git a/app/i18n/fr.php b/app/i18n/fr.php
index 97e36f923..75a76cc7a 100644
--- a/app/i18n/fr.php
+++ b/app/i18n/fr.php
@@ -186,6 +186,9 @@ return array (
'credits' => 'Crédits',
'credits_content' => 'Des éléments de design sont issus du projet Bootstrap bien que FreshRSS n\'utilise pas ce framework. Les icônes sont issues du projet GNOME. La police Open Sans utilisée a été créée par Steve Matteson. Les favicons sont récupérés grâce au site getFavicon. FreshRSS repose sur Minz, un framework PHP.',
+ 'logs' => 'Logs',
+ 'logs_empty' => 'Les logs sont vides',
+
// DATE
'january' => 'janvier',
'february' => 'février',
diff --git a/app/layout/header.phtml b/app/layout/header.phtml
index 2e84f7f4d..4131f8687 100644
--- a/app/layout/header.phtml
+++ b/app/layout/header.phtml
@@ -54,6 +54,7 @@
+
diff --git a/app/models/Log.php b/app/models/Log.php
new file mode 100644
index 000000000..5c280fa7a
--- /dev/null
+++ b/app/models/Log.php
@@ -0,0 +1,47 @@
+date;
+ }
+ public function level () {
+ return $this->level;
+ }
+ public function info () {
+ return $this->information;
+ }
+ public function _date ($date) {
+ $this->date = $date;
+ }
+ public function _level ($level) {
+ $this->level = $level;
+ }
+ public function _info ($information) {
+ $this->information = $information;
+ }
+}
+
+class LogDAO extends Model_txt {
+ public function __construct () {
+ parent::__construct (LOG_PATH . '/application.log', 'r+');
+ }
+
+ public function lister () {
+ $logs = array ();
+
+ $i = 0;
+ while (($line = $this->readLine ()) !== false) {
+ $logs[$i] = new Log_Model ();
+ $logs[$i]->_date (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\1", $line));
+ $logs[$i]->_level (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\2", $line));
+ $logs[$i]->_info (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\3", $line));
+ $i++;
+ }
+
+ return $logs;
+ }
+}
\ No newline at end of file
diff --git a/app/views/helpers/logs_pagination.phtml b/app/views/helpers/logs_pagination.phtml
new file mode 100755
index 000000000..0088dabc6
--- /dev/null
+++ b/app/views/helpers/logs_pagination.phtml
@@ -0,0 +1,47 @@
+
+
+nbPage > 1) { ?>
+
+
diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml
new file mode 100644
index 000000000..c72a84c86
--- /dev/null
+++ b/app/views/index/logs.phtml
@@ -0,0 +1,21 @@
+
+
+
+
+
+ logsPaginator->items (); ?>
+
+
+
+ logsPaginator->render ('logs_pagination.phtml', 'page'); ?>
+
+
+
date ())); ?>info (); ?>
+
+
+ logsPaginator->render ('logs_pagination.phtml','page'); ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/minz/View.php b/lib/minz/View.php
index 5c329c159..2bb747aa9 100755
--- a/lib/minz/View.php
+++ b/lib/minz/View.php
@@ -71,7 +71,7 @@ class View {
} else {
Log::record ('File doesn\'t exist : `'
. $this->view_filename . '`',
- Log::WARNING);
+ Log::NOTICE);
}
}
diff --git a/lib/minz/dao/Model_txt.php b/lib/minz/dao/Model_txt.php
index ad15c8b36..c9d5cfe77 100755
--- a/lib/minz/dao/Model_txt.php
+++ b/lib/minz/dao/Model_txt.php
@@ -27,7 +27,7 @@ class Model_txt {
*/
public function __construct ($nameFile, $mode = 'a+') {
$this->filename = $nameFile;
- $this->file = fopen ($this->filename, $mode);
+ $this->file = @fopen ($this->filename, $mode);
if (!$this->file) {
throw new FileNotExistException (
diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css
index f5d4f6a83..4919639af 100644
--- a/public/theme/freshrss.css
+++ b/public/theme/freshrss.css
@@ -349,14 +349,29 @@
}
.pagination .item {
display: table-cell;
- border-top: 1px solid #aaa;
line-height: 40px;
}
+ .pagination .item.pager-current {
+ font-weight: bold;
+ font-size: 140%;
+ }
+ .pagination .item.pager-first,
+ .pagination .item.pager-previous,
+ .pagination .item.pager-next,
+ .pagination .item.pager-last {
+ width: 100px;
+ }
.pagination .item a {
display: block;
color: #333;
font-style: italic;
}
+ .pagination:first-child .item {
+ border-bottom: 1px solid #aaa;
+ }
+ .pagination:last-child .item {
+ border-top: 1px solid #aaa;
+ }
.loading {
background: url("loader.gif") center center no-repeat;
font-size: 0;
@@ -421,6 +436,33 @@
vertical-align: middle;
}
+.logs {
+ border: 1px solid #aaa;
+}
+ .logs .log {
+ padding: 5px 2%;
+ overflow: auto;
+ background: #fafafa;
+ border-bottom: 1px solid #999;
+ color: #333;
+ font-size: 90%;
+ }
+ .logs .log .date {
+ display: block;
+ }
+ .logs .log.error {
+ background: #fdd;
+ color: #844;
+ }
+ .logs .log.warning {
+ background: #ffe;
+ color: #c95;
+ }
+ .logs .log.notice {
+ background: #f4f4f4;
+ color: #aaa;
+ }
+
@media(max-width: 840px) {
.header,
.aside .btn-important,