| Current Path : /var/www/html/administrator/components/com_flexicontact/helpers/ |
| Current File : /var/www/html/administrator/components/com_flexicontact/helpers/trace_helper.php |
<?php
/********************************************************************
Product : Flexicontact
Date : 29 November 2023
Copyright : Les Arbres Design 2010-2023
Contact : https://www.lesarbresdesign.info
Licence : GNU General Public License
*********************************************************************/
defined('_JEXEC') or die('Restricted Access');
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Uri\Uri;
define("LAFC_TRACE_FILE_NAME", 'trace.txt');
define("LAFC_TRACE_FILE_PATH", JPATH_ROOT.'/components/com_flexicontact/trace.txt');
define("LAFC_TRACE_FILE_URL", Uri::root().'components/'.LAFC_COMPONENT.'/trace.txt');
define("LAFC_MAX_TRACE_SIZE", 1000000); // about 1Mb
define("LAFC_MAX_TRACE_AGE", 21600); // maximum trace file age in seconds (6 hours)
define("LAFC_UTF8_HEADER", "\xEF"."\xBB"."\xBF"); // UTF8 file header
if (class_exists("FC_trace"))
return;
class FC_trace
{
//-------------------------------------------------------------------------------
// Write an entry to the trace file
// Tracing is ON if the trace file exists
// if $no_time is true, the date time is not added
//
static function trace($data)
{
if (@!file_exists(LAFC_TRACE_FILE_PATH))
return;
if (filesize(LAFC_TRACE_FILE_PATH) > LAFC_MAX_TRACE_SIZE)
{
@unlink(LAFC_TRACE_FILE_PATH);
@file_put_contents(LAFC_TRACE_FILE_PATH, LAFC_UTF8_HEADER.date("d/m/y H:i").' New trace file created'."\n");
}
@file_put_contents(LAFC_TRACE_FILE_PATH, $data."\n",FILE_APPEND);
}
//-------------------------------------------------------------------------------
// Start a new trace file
//
static function init_trace()
{
self::delete_trace_file();
@file_put_contents(LAFC_TRACE_FILE_PATH, LAFC_UTF8_HEADER.date("d/m/y H:i").' Tracing Initialised'."\n");
$locale = setlocale(LC_ALL,0);
$locale_string = print_r($locale, true);
$langObj = Factory::getLanguage();
$app = Factory::getApplication();
$mailfrom = $app->get('mailfrom');
$fromname = $app->get('fromname');
if (empty($mailfrom))
$mailfrom = "***** Global Config mailfrom is BLANK *****";
if (empty($fromname))
$fromname = "***** Global Config fromname is BLANK *****";
$xml_array = Installer::parseXMLInstallFile(JPATH_ADMINISTRATOR.'/components/com_flexicontact/flexicontact.xml');
$component_version = $xml_array['version'];
self::trace("Component version: ".$component_version);
self::trace("PHP version : ".phpversion());
self::trace("PHP Locale : ".$locale_string);
self::trace("Server : ".PHP_OS);
self::trace("Joomla Version : ".JVERSION);
self::trace("Joomla Language : ".$langObj->get('tag'));
self::trace("Session Lifetime : ".$app->get('lifetime').' minutes');
self::trace("Uri::root() : ".Uri::root());
self::trace("JPATH_SITE : ".JPATH_SITE);
self::trace("Joomla Live_site : ".$app->get('live_site'));
self::trace("Joomla Caching : ".$app->get('caching'));
self::trace("Joomla Mailer : ".$app->get('mailer'));
self::trace("Joomla Mail From : ".$mailfrom);
self::trace("Joomla From Name : ".$fromname);
self::trace("Joomla Session : ".$app->get('session_handler'));
if (PluginHelper::isEnabled('system', 'cache'))
self::trace("Sys Cache Plugin : Enabled");
else
self::trace("Sys Cache Plugin : Not enabled");
}
//-------------------------------------------------------------------------------
// Trace an entry point
// Tracing is ON if the trace file exists
//
static function trace_entry_point($front=false)
{
if (@!file_exists(LAFC_TRACE_FILE_PATH))
return;
// if the trace file is more than 6 hours old, delete it, which will switch tracing off
// - we don't want trace to be left on accidentally
$filetime = @filemtime(LAFC_TRACE_FILE_PATH);
if (time() > ($filetime + LAFC_MAX_TRACE_AGE))
{
self::delete_trace_file();
return;
}
$date_time = date("d/m/y H:i:s").' ';
if ($front)
self::trace("\n".$date_time.'================================ [Front Entry Point] ================================');
else
self::trace("\n".$date_time.'================================ [Admin Entry Point] ================================');
$input = Factory::getApplication()->input;
$method = $input->server->getString('REQUEST_METHOD','');
$ip_address = $input->server->getString('REMOTE_ADDR','');
$request_uri = $input->server->getString('REQUEST_URI',''); // includes all GET data
$requested_with = $input->server->getString('HTTP_X_REQUESTED_WITH','');
if ($requested_with == 'XMLHttpRequest')
$method .= ' by AJAX';
self::trace("$method from $ip_address @ $request_uri");
$langObj = Factory::getLanguage();
$language = $langObj->get('tag');
self::trace("Site language is $language");
if ($front)
{
if (!empty($input->server->getString('HTTP_USER_AGENT','')))
self::trace('HTTP_USER_AGENT: '.$input->server->getString('HTTP_USER_AGENT',''));
if (!empty($input->server->getString('HTTP_REFERER','')))
self::trace('HTTP_REFERER: '.$input->server->getString('HTTP_REFERER',''));
if (!empty($input->server->getString('HTTP_CONTENT_TYPE','')))
self::trace('HTTP_CONTENT_TYPE: '.$input->server->getString('HTTP_CONTENT_TYPE',''));
$session = Factory::getApplication()->getSession();
$session_id = $session->getId();
self::trace("Joomla session ID: $session_id");
}
if (!empty($input->get->getArray()))
self::trace("Get data: ".print_r($input->get->getArray(),true));
if (!empty($input->post->getArray()))
self::trace("Post data: ".print_r($input->post->getArray(),true));
if (!empty($input->files->getArray()))
self::trace('File data: '.print_r($input->files->getArray(),true));
}
//-------------------------------------------------------------------------------
// Delete the trace file
//
static function delete_trace_file()
{
if (@file_exists(LAFC_TRACE_FILE_PATH))
@unlink(LAFC_TRACE_FILE_PATH);
}
//-------------------------------------------------------------------------------
// Return true if tracing is currently active
//
static function tracing()
{
if (@file_exists(LAFC_TRACE_FILE_PATH))
return true;
else
return false;
}
}