Private
Server IP : 195.201.23.43  /  Your IP : 3.135.209.247
Web Server : Apache
System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64
User : kdecoratie ( 1041)
PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/kdecoratie/public_html/plugins/system/admintoolsactionlog/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /home/kdecoratie/public_html/plugins/system/admintoolsactionlog/admintoolsactionlog.php
<?php
/**
 * @package   admintools
 * @copyright Copyright (c)2010-2019 Nicholas K. Dionysopoulos / Akeeba Ltd
 * @license   GNU General Public License version 3, or later
 */

use Akeeba\Engine\Platform;
use FOF30\Container\Container;

defined('_JEXEC') or die();

// PHP version check
if (!version_compare(PHP_VERSION, '5.4.0', '>='))
{
	return;
}

// Why, oh why, are you people using eAccelerator? Seriously, what's wrong with you, people?!
if (function_exists('eaccelerator_info'))
{
	$isBrokenCachingEnabled = true;

	if (function_exists('ini_get') && !ini_get('eaccelerator.enable'))
	{
		$isBrokenCachingEnabled = false;
	}

	if ($isBrokenCachingEnabled)
	{
		/**
		 * I know that this define seems pointless since I am returning. This means that we are exiting the file and
		 * the plugin class isn't defined, so Joomla cannot possibly use it.
		 *
		 * LOL. That is how PHP works. Not how that OBSOLETE, BROKEN PILE OF ROTTING BYTES called eAccelerator mangles
		 * your code.
		 *
		 * That disgusting piece of bit rot will exit right after the return statement below BUT it will STILL define
		 * the class. That's right. It ignores ALL THE CODE between here and the class declaration and parses the
		 * class declaration o_O  Therefore the only way to actually NOT load the  plugin when you are using it on
		 * a server where an indescribable character posing as a sysadmin has installed and enabled eAccelerator is to
		 * define a constant and use it to return from the constructor method, therefore forcing PHP to return null
		 * instead of an object. This prompts Joomla to not do anything with the plugin.
		 */
		if (!defined('AKEEBA_EACCELERATOR_IS_SO_BORKED_IT_DOES_NOT_EVEN_RETURN'))
		{
			define('AKEEBA_EACCELERATOR_IS_SO_BORKED_IT_DOES_NOT_EVEN_RETURN', 3245);
		}

		return;
	}
}

JLoader::import('joomla.application.plugin');

class plgSystemAdmintoolsactionlog extends JPlugin
{
	/** @var Container */
	private $container;

	/**
	 * Constructor
	 *
	 * @param       object $subject The object to observe
	 * @param       array  $config  An array that holds the plugin configuration
	 *
	 * @since       2.5
	 */
	public function __construct(& $subject, $config)
	{
		/**
		 * I know that this piece of code cannot possibly be executed since I have already returned BEFORE declaring
		 * the class when eAccelerator is detected. However, eAccelerator is a GINORMOUS, STINKY PILE OF BULL CRAP. The
		 * stupid thing will return above BUT it will also declare the class EVEN THOUGH according to how PHP works
		 * this part of the code should be unreachable o_O Therefore I have to define this constant and exit the
		 * constructor when we have already determined that this class MUST NOT be defined. Because screw you
		 * eAccelerator, that's why.
		 */
		if (defined('AKEEBA_EACCELERATOR_IS_SO_BORKED_IT_DOES_NOT_EVEN_RETURN'))
		{
			return;
		}

		// Make sure Akeeba Backup is installed
		if (!file_exists(JPATH_ADMINISTRATOR . '/components/com_admintools'))
		{
			return;
		}

		// Make sure Akeeba Backup is enabled
		JLoader::import('joomla.application.component.helper');

		if ( !JComponentHelper::isEnabled('com_admintools'))
		{
			return;
		}

		// Load FOF
		if (!defined('FOF30_INCLUDED') && !@include_once(JPATH_LIBRARIES . '/fof30/include.php'))
		{
			return;
		}

		$this->container = Container::getInstance('com_admintools');

		// No point in logging guest actions
		if ($this->container->platform->getUser()->guest)
		{
			return;
		}

		// If any of the above statement returned, our plugin is not attached to the subject, so it's basically disabled
		parent::__construct($subject, $config);
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\QuickStart	$controller
	 */
	public function onComAdmintoolsControllerQuickstartAfterCommit($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_QUICKSTART_SAVE', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\AdminPassword	$controller
	 */
	public function onComAdmintoolsControllerAdminPasswordBeforeProtect($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_ADMINPASSWORD_ENABLE', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\AdminPassword	$controller
	 */
	public function onComAdmintoolsControllerAdminPasswordBeforeUnprotect($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_ADMINPASSWORD_DISABLE', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\MasterPassword	$controller
	 */
	public function onComAdmintoolsControllerMasterPasswordAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_MASTERPASSWORD_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\EmergencyOffline	$controller
	 */
	public function onComAdmintoolsControllerEmergencyOfflineBeforeOffline($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_EMERGENCYOFFLINE_ENABLE', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\EmergencyOffline	$controller
	 */
	public function onComAdmintoolsControllerEmergencyOfflineBeforeOnline($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_EMERGENCYOFFLINE_DISABLE', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\CleanTempDirectory	$controller
	 */
	public function onComAdmintoolsControllerCleanTempDirectoryBeforeBrowse($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CLEANTEMPDIRECTORY_RUN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\DatabaseTools	$controller
	 */
	public function onComAdmintoolsControllerDatabaseToolsAfterBrowse($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\DatabaseTools $model */
		$model   = $controller->getModel();
		$percent = $model->getState('percent', 0);

		if ($percent == 100)
		{
			$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_DATABASETOOLS_REPAIR', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\DatabaseTools	$controller
	 */
	public function onComAdmintoolsControllerDatabaseToolsBeforePurgesessions($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_DATABASETOOLS_PURGESESSIONS', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\CheckTempAndLogDirectories	$controller
	 */
	public function onComAdmintoolsControllerCheckTempAndLogDirectoriesBeforeCheck($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CHECKTEMPANDLOGDIRECTORIES_RUN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ConfigureWAF	$controller
	 */
	public function onComAdmintoolsControllerConfigureWAFAfterApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CONFIGUREWAF_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ConfigureWAF	$controller
	 */
	public function onComAdmintoolsControllerConfigureWAFAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CONFIGUREWAF_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ImportAndExport	$controller
	 */
	public function onComAdmintoolsControllerImportAndExportBeforeDoexport($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_IMPORANDEXPORT_EXPORT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ImportAndExport	$controller
	 */
	public function onComAdmintoolsControllerImportAndExportBeforeDoimport($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_IMPORANDEXPORT_IMPORT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ChangeDBCollation	$controller
	 */
	public function onComAdmintoolsControllerChangeDBCollationBeforeApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CHANGEDBCOLLATION_RUN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\SEOAndLinkTools	$controller
	 */
	public function onComAdmintoolsControllerSEOAndLinkToolsAfterApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_SEOANDLINKTOOLS_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\SEOAndLinkTools	$controller
	 */
	public function onComAdmintoolsControllerSEOAndLinkToolsAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_SEOANDLINKTOOLS_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\FixPermissions	$controller
	 */
	public function onComAdmintoolsControllerFixPermissionsBeforeBrowse($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_FIXPERMISSIONS_RUN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ConfigureFixPermissions	$controller
	 */
	public function onComAdmintoolsControllerConfigureFixPermissionsAfterSavedefaults($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CONFIGUREFIXPERMISSIONS_DEFAULTS', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ConfigureFixPermissions	$controller
	 */
	public function onComAdmintoolsControllerConfigureFixPermissionsBeforeSaveperms($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CONFIGUREFIXPERMISSIONS_SAVEPERMS', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ConfigureFixPermissions	$controller
	 */
	public function onComAdmintoolsControllerConfigureFixPermissionsBeforeSaveapplyperms($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_CONFIGUREFIXPERMISSIONS_SAVEAPPLYPERMS', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\HtaccessMaker	$controller
	 */
	public function onComAdmintoolsControllerHtaccessMakerAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_HTACCESSMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\HtaccessMaker	$controller
	 */
	public function onComAdmintoolsControllerHtaccessMakerAfterApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_HTACCESSMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\NginXConfMaker	$controller
	 */
	public function onComAdmintoolsControllerNginXConfMakerAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_NGINXCONFMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\HtaccessMaker	$controller
	 */
	public function onComAdmintoolsControllerNginXConfMakerAfterApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_NGINXCONFMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WebConfigMaker	$controller
	 */
	public function onComAdmintoolsControllerWebConfigMakerAfterSave($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_WEBCONFIGMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WebConfigMaker	$controller
	 */
	public function onComAdmintoolsControllerWebConfigMakerAfterApply($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_WEBCONFIGMAKER_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\Scans	$controller
	 */
	public function onComAdmintoolsControllerScansBeforeStartscan($controller)
	{
		$this->container->platform->logUserAction('', 'COM_ADMINTOOLS_LOGS_SCANS_RUN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ScanAlerts	$controller
	 */
	public function onComAdmintoolsControllerScanAlertsAfterPublish($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\ScanAlerts $model */
		$model = $controller->getModel();
		$ids = $this->getIDsFromRequest();

		if (!$ids)
		{
			return;
		}

		foreach ($ids as $id)
		{
			$model->find($id);

			$this->container->platform->logUserAction($model->path, 'COM_ADMINTOOLS_LOGS_SCANALERTS_MARKEDSAFE', 'com_admintools');
		}
	}

	/* Start of CRUD tasks */

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\BadWord	$controller
	 */
	public function onComAdmintoolscontrollerBadWordsAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\BadWords $model */
		$model = $controller->getModel();

		$link = '<a href="index.php?option=com_admintools&view=BadWords&task=edit&id='.$model->id.'">'.$model->word.'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_BADWORDS_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\BadWord	$controller
	 */
	public function onComAdmintoolscontrollerBadWordsBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select($db->qn('word'))
					->from($db->qn('#__admintools_badwords'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$words = $db->setQuery($query)->loadColumn();

		foreach ($words as $word)
		{
			$this->container->platform->logUserAction($word, 'COM_ADMINTOOLS_LOGS_BADWORDS_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFBlacklistedRequests	$controller
	 */
	public function onComAdmintoolscontrollerWAFBlacklistedRequestsAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\WAFBlacklistedRequests $model */
		$model = $controller->getModel();

		$parts[] = $model->option ? $model->option : '(All)';
		$parts[] = $model->view ? $model->view: '(All)';
		$parts[] = $model->query ? $model->query: '(All)';

		$link = '<a href="index.php?option=com_admintools&view=WAFBlacklistedRequests&task=edit&id='.$model->id.'">'.implode(' ', $parts).'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_WAFBLACKLIST_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFBlacklistedRequests	$controller
	 */
	public function onComAdmintoolscontrollerWAFBlacklistedRequestsAfterPublish($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select('*')
					->from($db->qn('#__admintools_wafblacklists'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$parts[] = $row->option ? $row->option : '(All)';
			$parts[] = $row->view ? $row->view: '(All)';
			$parts[] = $row->query ? $row->query: '(All)';

			$this->container->platform->logUserAction(implode(' ', $parts), 'COM_ADMINTOOLS_LOGS_WAFBLACKLIST_PUBLISH', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFBlacklistedRequests	$controller
	 */
	public function onComAdmintoolscontrollerWAFBlacklistedRequestsAfterUnpublish($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
			->select('*')
			->from($db->qn('#__admintools_wafblacklists'))
			->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$parts[] = $row->option ? $row->option : '(All)';
			$parts[] = $row->view ? $row->view: '(All)';
			$parts[] = $row->query ? $row->query: '(All)';

			$this->container->platform->logUserAction(implode(' ', $parts), 'COM_ADMINTOOLS_LOGS_WAFBLACKLIST_UNPUBLISH', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFBlacklistedRequests	$controller
	 */
	public function onComAdmintoolscontrollerWAFBlacklistedRequestsBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select('*')
					->from($db->qn('#__admintools_wafblacklists'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$parts[] = $row->option ? $row->option : '(All)';
			$parts[] = $row->view ? $row->view: '(All)';
			$parts[] = $row->query ? $row->query: '(All)';

			$this->container->platform->logUserAction(implode(' ', $parts), 'COM_ADMINTOOLS_LOGS_WAFBLACKLIST_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ExceptionsFromWAF	$controller
	 */
	public function onComAdmintoolscontrollerExceptionsFromWAFAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\ExceptionsFromWAF $model */
		$model = $controller->getModel();

		$parts[] = $model->option ? $model->option : '(All)';
		$parts[] = $model->view ? $model->view: '(All)';
		$parts[] = $model->query ? $model->query: '(All)';

		$link = '<a href="index.php?option=com_admintools&view=ExceptionsFromWAF&task=edit&id='.$model->id.'">'.implode(' ', $parts).'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_WAFEXCEPTIONS_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\ExceptionsFromWAF	$controller
	 */
	public function onComAdmintoolscontrollerExceptionsFromWAFBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
			->select('*')
			->from($db->qn('#__admintools_wafexceptions'))
			->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$parts[] = $row->option ? $row->option : '(All)';
			$parts[] = $row->view ? $row->view: '(All)';
			$parts[] = $row->query ? $row->query: '(All)';

			$this->container->platform->logUserAction(implode(' ', $parts), 'COM_ADMINTOOLS_LOGS_WAFEXCEPTIONS_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WhitelistedAddresses	$controller
	 */
	public function onComAdmintoolscontrollerWhitelistedAddressesAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\WhitelistedAddresses $model */
		$model = $controller->getModel();

		$link = '<a href="index.php?option=com_admintools&view=WhitelistedAddresses&task=edit&id='.$model->id.'">'.$model->ip.'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_WHITELISTEDADDRESSES_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WhitelistedAddresses	$controller
	 */
	public function onComAdmintoolscontrollerWhitelistedAddressesBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select($db->qn('ip'))
					->from($db->qn('#__admintools_adminiplist'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadColumn();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row, 'COM_ADMINTOOLS_LOGS_WHITELISTEDADDRESSES_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\BlacklistedAddresses	$controller
	 */
	public function onComAdmintoolscontrollerBlacklistedAddressesAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\BlacklistedAddresses $model */
		$model = $controller->getModel();

		$link = '<a href="index.php?option=com_admintools&view=BlacklistedAddresses&task=edit&id='.$model->id.'">'.$model->ip.'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_BLACKLISTEDADDRESSES_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\BlacklistedAddresses	$controller
	 */
	public function onComAdmintoolscontrollerBlacklistedAddressesBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select($db->qn('ip'))
					->from($db->qn('#__admintools_ipblock'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadColumn();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row, 'COM_ADMINTOOLS_LOGS_BLACKLISTEDADDRESSES_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\GeographicBlocking	$controller
	 */
	public function onComAdmintoolscontrollerGeographicBlockingAfterSave($controller)
	{
		$continents = $this->container->input->get('continent', array(), 'array', 2);
		$countries  = $this->container->input->get('country', array(), 'array', 2);

		$text = 'COM_ADMINTOOLS_LOGS_GEOBLOCK_EDIT';

		if (!$continents && !$countries)
		{
			$text = 'COM_ADMINTOOLS_LOGS_GEOBLOCK_DISABLED';
		}

		$this->container->platform->logUserAction('', $text, 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\SecurityExceptions	$controller
	 */
	public function onComAdmintoolscontrollerSecurityExceptionsBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
			->select($db->qn('ip'))
			->from($db->qn('#__admintools_log'))
			->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadColumn();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row, 'COM_ADMINTOOLS_LOGS_SECURITYEXCEPTIONS_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\SecurityExceptions	$controller
	 */
	public function onComAdmintoolscontrollerSecurityExceptionsAfterBan($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\SecurityExceptions $model */
		$model = $controller->getModel();

		$this->container->platform->logUserAction($model->ip, 'COM_ADMINTOOLS_LOGS_SECURITYEXCEPTIONS_BAN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\SecurityExceptions	$controller
	 */
	public function onComAdmintoolscontrollerSecurityExceptionsAfterUnban($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\SecurityExceptions $model */
		$model = $controller->getModel();

		$this->container->platform->logUserAction($model->ip, 'COM_ADMINTOOLS_LOGS_SECURITYEXCEPTIONS_UNBAN', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\AutoBannedAddresses	$controller
	 */
	public function onComAdmintoolscontrollerAutoBannedAddressesBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();

		foreach ($ids as $ip)
		{
			$this->container->platform->logUserAction($ip, 'COM_ADMINTOOLS_LOGS_AUTOBANNEDADDRESSES_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\IPAutoBanHistories	$controller
	 */
	public function onComAdmintoolscontrollerIPAutoBanHistoriesBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
			->select($db->qn('ip'))
			->from($db->qn('#__admintools_ipautobanhistory'))
			->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadColumn();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row, 'COM_ADMINTOOLS_LOGS_IPAUTOBANHISTORIES_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFEmailTemplates	$controller
	 */
	public function onComAdmintoolscontrollerWAFEmailTemplatesAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\WAFEmailTemplates $model */
		$model = $controller->getModel();

		$link = '<a href="index.php?option=com_admintools&view=WAFEmailTemplates&task=edit&id='.$model->admintools_waftemplate_id.'">'.$model->subject.'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_WAFEMAILTEMPLATES_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\WAFEmailTemplates	$controller
	 */
	public function onComAdmintoolscontrollerWAFEmailTemplatesBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
			->select($db->qn('subject'))
			->from($db->qn('#__admintools_waftemplates'))
			->where($db->qn('admintools_waftemplate_id').' IN ('.implode(',', $ids).')');
		$words = $db->setQuery($query)->loadColumn();

		foreach ($words as $word)
		{
			$this->container->platform->logUserAction($word, 'COM_ADMINTOOLS_LOGS_WAFEMAILTEMPLATES_DELETE', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\Redirections	$controller
	 */
	public function onComAdmintoolscontrollerRedirectionAfterApplySave($controller)
	{
		/** @var \Akeeba\AdminTools\Admin\Model\Redirections $model */
		$model = $controller->getModel();

		$link = '<a href="index.php?option=com_admintools&view=Redirections&task=edit&id='.$model->id.'">'.$model->dest.'</a>';

		$this->container->platform->logUserAction($link, 'COM_ADMINTOOLS_LOGS_REDIRECTIONS_EDIT', 'com_admintools');
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\Redirections	$controller
	 */
	public function onComAdmintoolscontrollerRedirectionsAfterPublish($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select('*')
					->from($db->qn('#__admintools_redirects'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row->dest, 'COM_ADMINTOOLS_LOGS_REDIRECTIONS_PUBLISH', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\Redirections	$controller
	 */
	public function onComAdmintoolscontrollerRedirectionsAfterUnpublish($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select('*')
					->from($db->qn('#__admintools_redirects'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row->dest, 'COM_ADMINTOOLS_LOGS_REDIRECTIONS_UNPUBLISH', 'com_admintools');
		}
	}

	/**
	 * @param \Akeeba\AdminTools\Admin\Controller\Redirections	$controller
	 */
	public function onComAdmintoolscontrollerRedirectionsBeforeRemove($controller)
	{
		$ids = $this->getIDsFromRequest();
		$db  = $this->container->db;

		$ids = array_map(array($db, 'quote'), $ids);

		$query = $db->getQuery(true)
					->select('*')
					->from($db->qn('#__admintools_redirects'))
					->where($db->qn('id').' IN ('.implode(',', $ids).')');
		$rows = $db->setQuery($query)->loadObjectList();

		foreach ($rows as $row)
		{
			$this->container->platform->logUserAction($row->dest, 'COM_ADMINTOOLS_LOGS_REDIRECTIONS_DELETE', 'com_admintools');
		}
	}

	/* End of CRUD tasks */

	/**
	 * Gets the list of IDs from the request data
	 *
	 * @return array
	 */
	private function getIDsFromRequest()
	{
		// Get the ID or list of IDs from the request or the configuration
		$cid = $this->container->input->get('cid', array(), 'array');
		$id  = $this->container->input->getInt('id', 0);

		$ids = array();

		if (is_array($cid) && !empty($cid))
		{
			$ids = $cid;
		}
		elseif (!empty($id))
		{
			$ids = array($id);
		}

		return $ids;
	}
}
Private