<?php
declare(strict_types=1);
/*
* sync*gw SpamBot Bundle
*
* @copyright https://syncgw.com, 2013 - 2022
* @author Florian Daeumling, https://syncgw.com
* @license http://opensource.org/licenses/lgpl-3.0.html
*/
namespace syncgw\SpamBotBundle\Module;
use Psr\Log\LogLevel;
use Contao\System;
use Contao\CoreBundle\Monolog\ContaoContext;
use Doctrine\DBAL\Connection;
class SpamBotCron {
/*
* database pointer
* @var Doctrine\DBAL\Connection
*/
private $_db;
/**
* Initialize class
*/
public function __construct(Connection $connection) {
$this->_db = $connection;
}
/**
* Clear cached data.
*/
public function clearCache(): void {
System::loadLanguageFile('default');
$rc = $this->_db->prepare('SELECT id,name,spambot_engines,spambot_internal_exp from tl_module WHERE type LIKE ?')->execute([ 'SpamBot-%' ]);
// allow loaded records to survive
$mods = [0];
// walk through all modules
while ($rc && $rc->next()) {
if (!in_array('Intern', deserialize($rc->spambot_engines), TRUE))
continue;
$mods[] = $rc->id;
$sql = sprintf('FROM tl_spambot WHERE typ & 0x%x AND tstamp < %s AND module=%s',
SpamBot::SPAM | SpamBot::HAM, time() - ($rc->spambot_internal_exp * 86400), $rc->id);
$cnt = $this->_db->execute('SELECT id '.$sql);
$this->_db->execute('DELETE '.$sql);
System::getContainer()->get('monolog.logger.contao')->log(LogLevel::INFO,
sprintf($GLOBALS['TL_LANG']['SpamBot']['cron']['rec'], $cnt->numRows, $rc->name),
[ 'contao' => new ContaoContext(__CLASS__.'::'.__FUNCTION__, TL_ERROR ) ] );
}
// delete all unassigned records
$sql = sprintf('FROM tl_spambot WHERE INSTR(\'%s\',module) = 0', implode(',', $mods));
$cnt = $this->_db->execute('SELECT id '.$sql);
$this->_db->execute('DELETE '.$sql);
System::getContainer()->get('monolog.logger.contao')->log(LogLevel::INFO,
sprintf($GLOBALS['TL_LANG']['SpamBot']['cron']['mod'], $cnt->numRows),
[ 'contao' => new ContaoContext(__CLASS__.'::'.__FUNCTION__, TL_ERROR ) ] );
}
/**
* Load data from external source.
*/
public function loadData(): void {
System::loadLanguageFile('default');
$rc = $this->_db->prepare('SELECT id,name,type,spambot_engines from tl_module WHERE type LIKE ?')->execute([ 'SpamBot-%' ]);
$mods = [];
// walk through all modules
while (!is_bool($rc) && $rc->next()) {
foreach (deserialize($rc->spambot_engines) as $name) {
if (isset($GLOBALS['SpamBot']['Engines'][$name]['CronJob'])) {
if (!isset($mods[$GLOBALS['SpamBot']['Engines'][$name]['CronJob'][0]])) {
require_once TL_ROOT.'/vendor/syncgw/contao-spambot/src/Module/Engine/'.$name.'.php';
$call = new $GLOBALS['SpamBot']['Engines'][$name]['CronJob'][0](NULL);
$mods[$GLOBALS['SpamBot']['Engines'][$name]['CronJob'][0]] = $call;
$call->$GLOBALS['SpamBot']['Engines'][$name]['CronJob'][1]($rc->id, $rc->name);
}
}
}
}
}
}
?>
|