Port working cronjobs to new CronJob API
parent
a213a38b3c
commit
bb40c8c9a4
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mcp\Cron;
|
||||
|
||||
class AssetChecker extends CronJob
|
||||
{
|
||||
|
||||
public function __construct(\Mcp\Mcp $app)
|
||||
{
|
||||
parent::__construct($app, Frequency::MONTHLY);
|
||||
}
|
||||
|
||||
public function run(): bool
|
||||
{
|
||||
$statement = $this->app->db()->prepare("SELECT id,hash FROM fsassets ORDER BY create_time DESC");
|
||||
$statement->execute();
|
||||
|
||||
$count = 0;
|
||||
|
||||
while ($row = $statement->fetch()) {
|
||||
$fileNameParts = array();
|
||||
$fileNameParts[0] = substr($row['hash'], 0, 2);
|
||||
$fileNameParts[1] = substr($row['hash'], 2, 2);
|
||||
$fileNameParts[2] = substr($row['hash'], 4, 2);
|
||||
$fileNameParts[3] = substr($row['hash'], 6, 4);
|
||||
$fileNameParts[4] = $row['hash'] . ".gz";
|
||||
|
||||
$fileNameParts['UUID'] = $row['id'];
|
||||
$fileNameParts['FilePath'] = "/data/assets/base/" . $fileNameParts[0] . "/" . $fileNameParts[1] . "/" . $fileNameParts[2] . "/" . $fileNameParts[3] . "/" . $fileNameParts[4];
|
||||
|
||||
if (file_exists($fileNameParts['FilePath'])) {
|
||||
$filesize = filesize($fileNameParts['FilePath']);
|
||||
if ($filesize === false) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$filesize = 0;
|
||||
}
|
||||
|
||||
$fileNameParts['FileSize'] = $filesize;
|
||||
$fileNameParts['Count'] = $count++;
|
||||
|
||||
if ($fileNameParts['FileSize'] == 0) {
|
||||
$add = $this->app->db()->prepare('DELETE FROM fsassets WHERE hash = :fileHash');
|
||||
$add->execute(['fileHash' => $row['hash']]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mcp\Cron;
|
||||
|
||||
class CheckInventory extends CronJob
|
||||
{
|
||||
public function __construct(\Mcp\Mcp $app)
|
||||
{
|
||||
parent::__construct($app, Frequency::MONTHLY);
|
||||
}
|
||||
|
||||
public function run(): bool
|
||||
{
|
||||
$invCheckStatement = $this->app->db()->prepare("UPDATE inventoryitems i SET i.inventoryName = concat('[DEFEKT] ', i.inventoryName)
|
||||
WHERE i.assetID IN (
|
||||
SELECT i.assetID FROM inventoryitems i WHERE
|
||||
NOT EXISTS(
|
||||
SELECT * FROM fsassets fs WHERE fs.id = i.assetID)
|
||||
AND NOT i.inventoryName LIKE '[DEFEKT] %' AND i.assetType <> 24
|
||||
)");
|
||||
|
||||
$invCheckStatement->execute();
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mcp\Cron;
|
||||
|
||||
use Mcp\OpenSim;
|
||||
use Mcp\Util\SmtpClient;
|
||||
|
||||
use SimpleXMLElement;
|
||||
|
||||
class OfflineIm extends CronJob
|
||||
{
|
||||
private const IM_TYPE = array(
|
||||
"0" => "eine Nachricht",
|
||||
"3" => "eine Gruppeneinladung",
|
||||
"4" => "ein Inventaritem",
|
||||
"5" => "eine Bestätigung zur Annahme von Inventar",
|
||||
"6" => "eine Information zur Ablehnung von Inventar",
|
||||
"7" => "eine Aufforderung zur Gruppenwahl",
|
||||
"9" => "ein Inventaritem von einem Script",
|
||||
"19" => "eine Nachricht von einem Script",
|
||||
"32" => "eine Gruppennachricht",
|
||||
"38" => "eine Freundschaftsanfrage",
|
||||
"39" => "eine Bestätigung über die Annahme der Freundschaft",
|
||||
"40" => "eine Information über das Ablehnen der Freundschaft"
|
||||
);
|
||||
|
||||
public function __construct(\Mcp\Mcp $app)
|
||||
{
|
||||
parent::__construct($app, Frequency::EACH_MINUTE);
|
||||
}
|
||||
|
||||
public function run(): bool
|
||||
{
|
||||
$statement = $this->app->db()->prepare("SELECT ID,PrincipalID,Message FROM im_offline");
|
||||
$statement->execute();
|
||||
|
||||
while ($row = $statement->fetch()) {
|
||||
$opensim = new OpenSim($this->app->db());
|
||||
|
||||
$email = $opensim->getUserMail($row['PrincipalID']);
|
||||
$allowOfflineIM = $opensim->allowOfflineIM($row['PrincipalID']);
|
||||
|
||||
if ($email != "" && $allowOfflineIM == "TRUE" && !$this->isMailAlreadySent($row['ID'])) {
|
||||
$statementSend = $this->app->db()->prepare('INSERT INTO mcp_offlineim_send (id) VALUES (:idnummer)');
|
||||
$statementSend->execute(['idnummer' => $row['ID']]);
|
||||
|
||||
$mailcfg = $this->app->config('smtp');
|
||||
$smtpClient = new SmtpClient($mailcfg['host'], intval($mailcfg['port']), $mailcfg['address'], $mailcfg['password']);
|
||||
|
||||
$xmlMessage = new SimpleXMLElement($row['Message']);
|
||||
|
||||
$imType = $this::IM_TYPE["" . $xmlMessage->dialog . ""];
|
||||
$htmlMessage = "Du hast " . $imType . " in " . $this->app->config('grid')['name'] . " bekommen. <br><p><ul><li>" . htmlspecialchars($xmlMessage->message) . "</li></ul></p>Gesendet von: ";
|
||||
|
||||
if (isset($xmlMessage->fromAgentName)) {
|
||||
$htmlMessage .= $xmlMessage->fromAgentName;
|
||||
}
|
||||
|
||||
if (isset($xmlMessage->RegionID) && isset($xmlMessage->Position)) {
|
||||
if ($xmlMessage->Position->X != 0 || $xmlMessage->Position->Y != 0 || $xmlMessage->Position->Z != 0) { //TODO
|
||||
$htmlMessage .= " @ " . $opensim->getRegionName($xmlMessage->RegionID) . "/" . $xmlMessage->Position->X . "/" . $xmlMessage->Position->Y . "/" . $xmlMessage->Position->Z;
|
||||
} else {
|
||||
$htmlMessage .= " @ " . $opensim->getRegionName($xmlMessage->RegionID);
|
||||
}
|
||||
}
|
||||
|
||||
$tpl = $this->app->template('mail.php')->vars([
|
||||
'title' => substr($imType, strpos($imType, ' '))
|
||||
])->unsafeVar('message', $htmlMessage);
|
||||
$smtpClient->sendHtml($mailcfg['address'], $mailcfg['name'], $email, "Du hast " . $imType . " in " . $this->app->config('grid')['name'] . ".", $tpl);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private function isMailAlreadySent($id): bool
|
||||
{
|
||||
$statement = $this->app->db()->prepare("SELECT 1 FROM mcp_offlineim_send WHERE id = ? LIMIT 1");
|
||||
$statement->execute(array($id));
|
||||
|
||||
if ($statement->rowCount() != 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mcp\Cron;
|
||||
|
||||
use Mcp\OpenSim;
|
||||
use Mcp\Util\Util;
|
||||
|
||||
class RegionChecker extends CronJob
|
||||
{
|
||||
public function __construct(\Mcp\Mcp $app)
|
||||
{
|
||||
parent::__construct($app, Frequency::DAILY);
|
||||
}
|
||||
|
||||
public function run(): bool
|
||||
{
|
||||
$statement = $this->app->db()->prepare("SELECT uuid,regionName,owner_uuid,serverURI,OfflineTimer FROM regions JOIN mcp_regions_info ON regions.uuid = mcp_regions_info.regionID COLLATE utf8mb3_unicode_ci");
|
||||
$statement->execute();
|
||||
|
||||
while ($row = $statement->fetch()) {
|
||||
$curl = curl_init($row['serverURI'] . 'jsonSimStats');
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
$result = curl_exec($curl);
|
||||
|
||||
if ($result === false || strlen($result) == 0) {
|
||||
$opensim = new OpenSim($this->app->db());
|
||||
|
||||
$longOffline = ($row['OfflineTimer'] + 3600) <= time();
|
||||
echo "Die Region " . $row['regionName'] . " von " . $opensim->getUserName($row['owner_uuid']) . " ist " . ($longOffline ? "seit über einer Stunde" : "") . " nicht erreichbar.\n"; //TODO: Increase to 1-3 months
|
||||
|
||||
if ($longOffline) {
|
||||
if ($this->app->config('grid')['delete-inactive-regions']) {
|
||||
Util::sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $this->app->config('grid')['homeurl'], "WARNUNG: Deine Region '" . $row['regionName'] . "' ist nicht erreichbar und wurde deshalb aus dem Grid entfernt.");
|
||||
|
||||
$statementUpdate = $this->app->db()->prepare('DELETE FROM regions WHERE uuid = :uuid');
|
||||
$statementUpdate->execute(['uuid' => $row['uuid']]);
|
||||
}
|
||||
$statementRemoveStats = $this->app->db()->prepare('DELETE FROM mcp_regions_info WHERE regionID = :uuid');
|
||||
$statementRemoveStats->execute(['uuid' => $row['uuid']]);
|
||||
} elseif ($this->app->config('grid')['warn-inactive-regions']) {
|
||||
Util::sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $this->app->config('grid')['homeurl'], "WARNUNG: Deine Region '" . $row['regionName'] . "' ist nicht erreichbar!");
|
||||
}
|
||||
} else {
|
||||
$regionData = json_decode($result);
|
||||
|
||||
$statementAccounts = $this->app->db()->prepare('REPLACE INTO `mcp_regions_info` (`regionID`, `RegionVersion`, `ProcMem`, `Prims`, `SimFPS`, `PhyFPS`, `OfflineTimer`) VALUES (:regionID, :RegionVersion, :ProcMem, :Prims, :SimFPS, :PhyFPS, :OfflineTimer)');
|
||||
$statementAccounts->execute(['regionID' => $row['uuid'], 'RegionVersion' => $regionData->Version, 'ProcMem' => $regionData->ProcMem, 'Prims' => $regionData->Prims, 'SimFPS' => $regionData->SimFPS, 'PhyFPS' => $regionData->PhyFPS, 'OfflineTimer' => time()]);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
$statement = $RUNTIME['PDO']->prepare("SELECT id,hash FROM fsassets ORDER BY create_time DESC");
|
||||
$statement->execute();
|
||||
|
||||
$count = 0;
|
||||
|
||||
while ($row = $statement->fetch()) {
|
||||
$fileNameParts = array();
|
||||
$fileNameParts[0] = substr($row['hash'], 0, 2);
|
||||
$fileNameParts[1] = substr($row['hash'], 2, 2);
|
||||
$fileNameParts[2] = substr($row['hash'], 4, 2);
|
||||
$fileNameParts[3] = substr($row['hash'], 6, 4);
|
||||
$fileNameParts[4] = $row['hash'].".gz";
|
||||
|
||||
//$fileNameParts['Time'] = time();
|
||||
$fileNameParts['UUID'] = $row['id'];
|
||||
$fileNameParts['FilePath'] = "/data/assets/base/".$fileNameParts[0]."/".$fileNameParts[1]."/".$fileNameParts[2]."/".$fileNameParts[3]."/".$fileNameParts[4];
|
||||
|
||||
if (file_exists($fileNameParts['FilePath'])) {
|
||||
$filesize = filesize($fileNameParts['FilePath']);
|
||||
if ($filesize === false) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$filesize = 0;
|
||||
}
|
||||
|
||||
$fileNameParts['FileSize'] = $filesize;
|
||||
$fileNameParts['Count'] = $count++;
|
||||
|
||||
if ($fileNameParts['FileSize'] == 0) {
|
||||
$add = $RUNTIME['PDO']->prepare('DELETE FROM fsassets WHERE hash = :fileHash');
|
||||
$add->execute(['fileHash' => $row['hash']]);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
$InventarCheckStatement = $RUNTIME['PDO']->prepare("UPDATE inventoryitems i SET
|
||||
i.inventoryName = concat('[DEFEKT] ', i.inventoryName)
|
||||
WHERE
|
||||
i.assetID IN (
|
||||
SELECT
|
||||
i.assetID
|
||||
FROM inventoryitems i
|
||||
WHERE
|
||||
NOT EXISTS( SELECT *
|
||||
FROM fsassets fs
|
||||
WHERE
|
||||
fs.id = i.assetID
|
||||
)
|
||||
AND NOT i.inventoryName LIKE '[DEFEKT] %'
|
||||
AND i.assetType <> 24
|
||||
)");
|
||||
|
||||
$InventarCheckStatement->execute();
|
|
@ -1,102 +0,0 @@
|
|||
<?php
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\SMTP;
|
||||
|
||||
include_once 'lib/phpmailer/Exception.php';
|
||||
include_once 'lib/phpmailer/PHPMailer.php';
|
||||
include_once 'lib/phpmailer/SMTP.php';
|
||||
|
||||
$statement = $RUNTIME['PDO']->prepare("CREATE TABLE IF NOT EXISTS im_offline_send (`id` int(6) NOT NULL DEFAULT 0) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
|
||||
$statement->execute();
|
||||
|
||||
function isMailAlreadySent($id)
|
||||
{
|
||||
global $RUNTIME;
|
||||
|
||||
$statement = $RUNTIME['PDO']->prepare("SELECT 1 FROM im_offline_send WHERE id = ? LIMIT 1");
|
||||
$statement->execute(array($id));
|
||||
|
||||
if ($statement->rowCount() != 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$IMTYP = array(
|
||||
"0" => "eine Nachricht",
|
||||
"3" => "eine Gruppeneinladung",
|
||||
"4" => "ein Inventaritem",
|
||||
"5" => "eine Bestätigung zur Annahme von Inventar",
|
||||
"6" => "eine Information zur Ablehnung von Inventar",
|
||||
"7" => "eine Aufforderung zur Gruppenwahl",
|
||||
"9" => "ein Inventaritem von einem Script",
|
||||
"19" => "eine Nachricht von einem Script",
|
||||
"32" => "eine Gruppennachricht",
|
||||
"38" => "eine Freundschaftsanfrage",
|
||||
"39" => "eine Bestätigung über die Annahme der Freundschaft",
|
||||
"40" => "eine Information über das Ablehnen der Freundschaft"
|
||||
);
|
||||
|
||||
//$statement = $RUNTIME['PDO']->prepare("SELECT * FROM im_offline WHERE PrincipalID = '1148b04d-7a93-49e9-b3c9-ea0cdeec38f7'");
|
||||
$statement = $RUNTIME['PDO']->prepare("SELECT ID,PrincipalID,Message FROM im_offline");
|
||||
$statement->execute();
|
||||
|
||||
while ($row = $statement->fetch()) {
|
||||
include_once 'app/OpenSim.php';
|
||||
$opensim = new OpenSim();
|
||||
|
||||
$email = $opensim->getUserMail($row['PrincipalID']);
|
||||
$allowOfflineIM = $opensim->allowOfflineIM($row['PrincipalID']);
|
||||
|
||||
if ($email != "" && $allowOfflineIM == "TRUE") {
|
||||
if (!isMailAlreadySent($row['ID'])) {
|
||||
$statementSend = $RUNTIME['PDO']->prepare('INSERT INTO im_offline_send (id) VALUES (:idnummer)');
|
||||
$statementSend->execute(['idnummer' => $row['ID']]);
|
||||
|
||||
$mail = new PHPMailer(true);
|
||||
|
||||
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
|
||||
$mail->isSMTP();
|
||||
$mail->Host = $RUNTIME['SMTP']['SERVER'];
|
||||
$mail->Port = $RUNTIME['SMTP']['PORT'];
|
||||
$mail->SMTPAuth = false;
|
||||
|
||||
$mail->setFrom($RUNTIME['SMTP']['ADRESS'], $RUNTIME['GRID']['NAME']);
|
||||
$mail->addAddress($email, $opensim->getUserName($row['PrincipalID']));
|
||||
|
||||
$XMLMESSAGE = new SimpleXMLElement($row['Message']);
|
||||
|
||||
$HTMLMESSAGE = "Du hast ".$IMTYP["".$XMLMESSAGE->dialog.""]." in ".$RUNTIME['GRID']['NAME']." bekommen. <br><p><ul><li>".htmlspecialchars($XMLMESSAGE->message)."</li></ul></p>Gesendet von: ";
|
||||
|
||||
if (isset($XMLMESSAGE->fromAgentName)) {
|
||||
$HTMLMESSAGE .= $XMLMESSAGE->fromAgentName;
|
||||
}
|
||||
|
||||
if (isset($XMLMESSAGE->RegionID) && isset($XMLMESSAGE->Position)) {
|
||||
if ($XMLMESSAGE->Position->X != 0 || $XMLMESSAGE->Position->X != 0 || $XMLMESSAGE->Position->X != 0) { //TODO
|
||||
$HTMLMESSAGE .= " @ ".$opensim->getRegionName($XMLMESSAGE->RegionID)."/".$XMLMESSAGE->Position->X."/".$XMLMESSAGE->Position->Y."/".$XMLMESSAGE->Position->Z;
|
||||
} else {
|
||||
$HTMLMESSAGE .= " @ ".$opensim->getRegionName($XMLMESSAGE->RegionID);
|
||||
}
|
||||
}
|
||||
|
||||
$HTML = new HTML();
|
||||
$HTML->importHTML("mail.html");
|
||||
$HTML->setSeitenInhalt($HTMLMESSAGE);
|
||||
$HTML->build();
|
||||
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = "Du hast ".$IMTYP["".$XMLMESSAGE->dialog.""]." in ".$RUNTIME['GRID']['NAME'].".";
|
||||
$mail->Body = $HTML->ausgabe();
|
||||
$mail->AltBody = strip_tags($HTMLMESSAGE);
|
||||
|
||||
//print_r($mail);
|
||||
$mail->send();
|
||||
}else{
|
||||
//echo $row['ID']." wurde bereits gesendet.";
|
||||
}
|
||||
}else{
|
||||
//echo $row['PrincipalID']." möchte keine offline IM oder hat keine E-MAIL Adresse hinterlegt.";
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
<?php
|
||||
$createStatement = $RUNTIME['PDO']->prepare("CREATE TABLE IF NOT EXISTS `regions_info` (`regionID` VARCHAR(36) NOT NULL COLLATE 'utf8_unicode_ci', `RegionVersion` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'utf8_unicode_ci', `ProcMem` INT(11) NOT NULL, `Prims` INT(11) NOT NULL, `SimFPS` INT(11) NOT NULL, `PhyFPS` INT(11) NOT NULL, `OfflineTimer` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY (`regionID`) USING BTREE) COLLATE='utf8_unicode_ci' ENGINE=InnoDB;");
|
||||
$createStatement->execute();
|
||||
|
||||
$statement = $RUNTIME['PDO']->prepare("SELECT uuid,regionName,owner_uuid,serverURI FROM regions");
|
||||
$statement->execute();
|
||||
|
||||
ini_set('default_socket_timeout', 3);
|
||||
|
||||
$ctx = stream_context_create(array('http'=>
|
||||
array(
|
||||
'timeout' => 3,
|
||||
)
|
||||
));
|
||||
|
||||
while($row = $statement->fetch())
|
||||
{
|
||||
$result = file_get_contents($row['serverURI']."jsonSimStats", false, $ctx);
|
||||
|
||||
if($result == FALSE || $result == "")
|
||||
{
|
||||
include 'app/OpenSim.php';
|
||||
|
||||
echo "Die Region ".$row['regionName']." von ".$opensim->getUserName($row['owner_uuid'])." ist nicht erreichbar.\n";
|
||||
|
||||
$infoStatement = $RUNTIME['PDO']->prepare("SELECT OfflineTimer FROM regions_info WHERE regionID = :regionID");
|
||||
$infoStatement->execute(['regionID' => $row['uuid']]);
|
||||
|
||||
if($infoRow = $infoStatement->fetch())
|
||||
{
|
||||
if(($infoRow['OfflineTimer'] + 3600) <= time())
|
||||
{
|
||||
echo "Die Region ".$row['regionName']." von ".$opensim->getUserName($row['owner_uuid'])." ist seit über eine Stunde nicht erreichbar!\n";
|
||||
|
||||
//sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $RUNTIME['GRID']['HOMEURL'], "WARNUNG: Deine Region '".$row['regionName']."' ist nicht erreichbar und wurde deshalb aus dem Grid entfernt.");
|
||||
|
||||
//$statementUpdate = $RUNTIME['PDO']->prepare('DELETE FROM regions WHERE uuid = :uuid');
|
||||
//$statementUpdate->execute(['uuid' => $row['uuid']]);
|
||||
}else{
|
||||
//sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $RUNTIME['GRID']['HOMEURL'], "WARNUNG: Deine Region '".$row['regionName']."' ist nicht erreichbar!");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$regionData = json_decode($result);
|
||||
|
||||
$statementAccounts = $RUNTIME['PDO']->prepare('REPLACE INTO `regions_info` (`regionID`, `RegionVersion`, `ProcMem`, `Prims`, `SimFPS`, `PhyFPS`, `OfflineTimer`) VALUES (:regionID, :RegionVersion, :ProcMem, :Prims, :SimFPS, :PhyFPS, :OfflineTimer)');
|
||||
$statementAccounts->execute(['regionID' => $row['uuid'], 'RegionVersion' => $regionData->Version, 'ProcMem' => $regionData->ProcMem, 'Prims' => $regionData->Prims, 'SimFPS' => $regionData->SimFPS, 'PhyFPS' => $regionData->PhyFPS, 'OfflineTimer' => time()]);
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in New Issue