| Current Path : /home/smartconb/www/armencom33/administrator/components/com_eyesite/helpers/ |
| Current File : /home/smartconb/www/armencom33/administrator/components/com_eyesite/helpers/trace_helper.php |
<?php
/********************************************************************
Product : Eyesite
Date : 6 May 2024
Copyright : Les Arbres Design 2009-2024
Contact : https://www.lesarbresdesign.info
Licence : GNU General Public License
*********************************************************************/
defined('_JEXEC') or die('Restricted Access');
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Plugin\PluginHelper;
define("LAE_TRACE_FILE_NAME", 'trace.txt');
define("LAE_TRACE_FILE_PATH", JPATH_ROOT.'/components/com_eyesite/trace.txt');
define("LAE_TRACE_FILE_URL", Uri::root().'components/com_eyesite/trace.txt');
define("LAE_MAX_TRACE_SIZE", 5000000); // about 5Mb
define("LAE_MAX_TRACE_AGE", 21600); // maximum trace file age in seconds (6 hours)
define("LAE_UTF8_HEADER", "\xEF"."\xBB"."\xBF"); // UTF8 file header
if (class_exists("LAE_trace"))
return;
class LAE_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, $showtime=true)
{
if (@!file_exists(LAE_TRACE_FILE_PATH))
return;
if (filesize(LAE_TRACE_FILE_PATH) > LAE_MAX_TRACE_SIZE)
{
@unlink(LAE_TRACE_FILE_PATH);
@file_put_contents(LAE_TRACE_FILE_PATH, LAE_UTF8_HEADER.date("d/m/y H:i").' New trace file created'."\n");
}
if ($showtime)
@file_put_contents(LAE_TRACE_FILE_PATH, date("H:i:s").' '.$data."\n",FILE_APPEND);
else
@file_put_contents(LAE_TRACE_FILE_PATH, ' '.$data."\n",FILE_APPEND);
}
//-------------------------------------------------------------------------------
// Start a new trace file
//
static function init_trace($config_data)
{
self::delete_trace_file();
@file_put_contents(LAE_TRACE_FILE_PATH, LAE_UTF8_HEADER.date("d/m/y H:i").' Tracing Initialised'."\n");
$locale = setlocale(LC_ALL,0);
$app = Factory::getApplication();
$db = Factory::getDBO();
$db->setQuery("SELECT version()");
$db_version = $db->loadResult();
$db->setQuery("SHOW VARIABLES LIKE 'character_set_%'");
$rows = $db->loadObjectList();
$charset_info = '';
foreach ($rows as $row)
$charset_info .= ' '.$row->Variable_name.' = '.$row->Value."\n";
self::trace('Eyesite version : '.self::getComponentVersion(), false);
self::trace('Eyesite plugin : '.self::getPluginStatus(), false);
self::trace("Joomla version : ".JVERSION, false);
self::trace("PHP version : ".phpversion(), false);
self::trace("Server OS : ".PHP_OS, false);
self::trace("PHP locale : ".print_r($locale, true), false);
self::trace("JPATH_ROOT : ".JPATH_ROOT, false);
self::trace("Uri::root() : ".Uri::root(), false);
self::trace("Config live_site : ".$app->get('live_site'), false);
$tmp_dir = $app->get('tmp_path');
if (is_writable($tmp_dir))
self::trace("Temp directory is writeable: ".$tmp_dir, false);
else
self::trace("Temp directory is NOT writeable: ".$tmp_dir, false);
self::trace("Database : ".$db_version."\n".$charset_info, false);
self::trace("Eyesite config : ".print_r($config_data, true),false);
}
//-------------------------------------------------------------------------------
// Trace an entry point
// Tracing is ON if the trace file exists
//
static function trace_entry_point($front=false)
{
if (@!file_exists(LAE_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(LAE_TRACE_FILE_PATH);
if (time() > ($filetime + LAE_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(LAE_TRACE_FILE_PATH))
@unlink(LAE_TRACE_FILE_PATH);
}
//-------------------------------------------------------------------------------
// Return true if tracing is currently active
//
static function tracing()
{
if (@file_exists(LAE_TRACE_FILE_PATH))
return true;
else
return false;
}
//-------------------------------------------------------------------------------
// Get the component version from the component manifest XML file
//
static function getComponentVersion()
{
$xml_array = Installer::parseXMLInstallFile(JPATH_ADMINISTRATOR.'/components/com_eyesite/eyesite.xml');
return $xml_array['version'];
}
//-------------------------------------------------------------------------------
// Get the plugin status
//
static function getPluginStatus()
{
$plugin_path = '/plugins/system/eyesite/eyesite.xml';
if (!file_exists(JPATH_ROOT.$plugin_path))
return 'Not installed';
$xml_array = Installer::parseXMLInstallFile(JPATH_ROOT.$plugin_path);
$version = $xml_array['version'];
if (PluginHelper::isEnabled('system', 'eyesite'))
return 'Version '.$version.' installed and enabled';
return 'Version '.$version.' installed but disabled';
}
}