To nie jest komponent, tylko plik wrzucony do katalogu includes, którego zadaniem jest wykorzystać errorHanlder do znajdowania błędów w joomli i zapisania ich do bazy. Ja ze swojego komponentu, tego gdzie jest kalendarz, mam przycisk, który po sesji ma aktywować ten errorHandler. Wówczas podczas przemieszczania się po joomli zbiera in błędy. Tym samym przyciskiem ma być możliwość wyłączenia tej funkcjonalności.
Niestety zadeklarowanie Joomlowskiej sesji uniemożliwia później wejście do modułu (Rozszerzenia->moduły->jakikolwiek moduł), klikam taki moduł i dostaje, że nie mam uprawnień, nawet jako admin.
Po usunięciu Joomlowskiej sesji wszystko wraca do normy.
Tu jest cały kod, ale nie wiem czy on ci coś da:
Kod PHP:
<?php
/**
* Error handle and save to database
*/
use Joomla\CMS\Factory;
defined('_JEXEC') or die;
//define( 'JPATH_BASE', realpath((__FILE__).'/../..' ));
define(JPath::find(JUri::base().'includes', 'errorHandler.php') ,'');
require_once ( JPATH_BASE. '/includes/defines.php' );
require_once ( JPATH_BASE. '/includes/framework.php' );
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
class errorHandler {
private $phpErrorInfo = [
1 => 'E_ERROR',
2 => 'E_WARNING',
4 => 'E_PARSE',
8 => 'E_NOTICE',
16 => 'E_CORE_ERROR',
32 => 'E_CORE_WARNING',
64 => 'E_COMPILE_ERROR',
128 => 'E_COMPILE_WARNING',
256 => 'E_USER_ERROR',
512 => 'E_USER_WARNING',
1024 => 'E_USER_NOTICE',
2048 => 'E_STRICT',
4096 => 'E_RECOVERABLE_ERROR',
8192 => 'E_DEPRECATED',
16384 => 'E_USER_DEPRECATED',
32767 => 'E_ALL'
];
public function __construct($table)
{
session_start();
$this->table = $table;
}
/**
* Find error name
*/
private function getErrorName($name) {
return isset($this->phpErrorInfo[$name]) ? $this->phpErrorInfo[$name] : 'none';
}
/**
* create class for joomla object db
*/
private function createClass($logRow) {
$error = new stdClass();
foreach ($logRow as $i => $log) {
if ($i === 'err_str') {
$error->$i = $this->getErrorName($log);
} else {
$error->$i = $log;
}
}
return $error;
}
/**
* Add new log to db
*/
public function add($logRow) {
$errorClass = $this->createClass($logRow);
JFactory::getDbo()->insertObject($this->table, $errorClass);
}
}
function errorHandlerPhp($errno, $content, $errfile, $errline) {
$errHandler = new errorHandler('log_php');
$errHandler->add([
'err_num' => $errno,
'err_str' => $errno,
'content' => $content,
'file' => $errfile,
'line' => $errline,
'date_time' => date('Y-m-d H:i:s'),
'published' => 1,
]);
}
/**
* INIT
*/
/*TA CZEŚĆ POWODUJE BŁĄD Z LINKAMI DO MODUŁÓW*/
$session = JFactory::getSession();
if ($session->get('handler') === true) {
set_error_handler("errorHandlerPhp");
}