<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */

$tool0Settings = ToolSettingsAPI::getToolSettings(0);
$storage = \Kufer\Web\Classes\CronJob\CronJobStorage::create();

$settingsArray = array();

$toolId = 0;

$subGroup = 'Cronjobs';

$scriptpath = \FSOperations::path(dirname(realpath($_SERVER['SCRIPT_FILENAME'])), 'cronjob.php');
$scriptpath = \CleanOperations::cleanStringForHtml($scriptpath);

$url = URL::loadCurrent()->previousDir();
$url->addPathSegment('webbasys');
$url->setFile('kwtasks.php');
$url->setAllParameters(array(
  'task' => 'cronjobs'
));
$url = \CleanOperations::cleanStringForHtml($url->getUrlFull());

$setting = new Setting();
$setting->toolId = $toolId;
$setting->name = 'cronjobExecutionType';
$setting->description = 'Ausführungsart der Cronjobs';
$setting->help = '<p>Wie die Cronjobs aufgerufen werden sollen.</p>'
  . '<p>Der Web-Cronjob kann nicht durch Nutzung von KuferWEB aufgerufen werden, '
  . 'sondern nur von KuferTools oder dem Webadmin.</p>'
  . '<p>Cronjobs sind Aufgaben, die immer wieder im Hintergrund ausgeführt werden.</p>'
  . "<p>Der Cronjob kann per Skriptaufruf mit z.B. <br/> <code>php $scriptpath</code> ausgeführt werden.</p>"
  . "<p>Der Cronjob kann auch per Aufruf von <a href=\"$url\" target=\"_blank\" rel=\"noopener\">$url</a> ausgeführt werden.</p>";
$setting->subGroup = $subGroup;
$setting->config->loadConfiguration(SC_RADIO);
$setting->config->items = array();
$setting->config->items[\Kufer\Web\Classes\CronJob\CronJobHandler::TYPE_DISABLED] = 'Deaktiviert';
$setting->config->items[\Kufer\Web\Classes\CronJob\CronJobHandler::TYPE_WEB] = 'Web (nach einer Anfrage) <b>[Einfach]</b>';
$setting->config->items[\Kufer\Web\Classes\CronJob\CronJobHandler::TYPE_CONSOLE] = 'Per Cronjob (Skriptaufruf) <b>[Empfohlen]</b>';
array_push($settingsArray, $setting);



if ($tool0Settings->cronjobExecutionType != \Kufer\Web\Classes\CronJob\CronJobHandler::TYPE_DISABLED) {
  $setting = new Setting();
  list($lastExecution, $lastExecutionTerminated) = $storage->getLastCronjobTimestamp();
  if (is_null($lastExecution)) {
    $setting->description = 'Der Cronjob wurde noch nie ausgeführt';
  } else {
    if (!is_null($lastExecutionTerminated)) {
      $lastExecution = $lastExecutionTerminated;
    }

    $lastExecutionDateTime
      = \CleanOperations::cleanStringForHtml(\DateTimeOperations::getDatestringByTimestamp($lastExecution * 60));
    $setting->description = '<p>Der Cronjob wurde zuletzt am <b>' . $lastExecutionDateTime . '</b> ausgeführt.</p>';
    if ((\DateTimeOperations::getTimestampNow() / 60) - $lastExecution > 60) {
      $setting->description .= '<p style="color: red">Dies ist mehr als eine Stunde her. '
        . 'Bitte überprüfen Sie die Einstellung der Ausführungsart.</p>';
    }
  }
  $setting->subGroup = $subGroup;
  $setting->toolId = $toolId;
  $setting->config->loadConfiguration(SC_INFOTEXT);
  array_push($settingsArray, $setting);
}

$setting = new Setting();
$setting->toolId = $toolId;
$setting->name = 'cronjobWebExecutionTypeChance';
$setting->description = 'Häufigkeit der Ausführung des Web-Cronjobs';
$setting->help = '<p>Der Webcronjob verlängert die Ladezeit für ca. jeden x-Benutzer der Seite. '
  . 'Eine höhere Zahl verringert die Chance, dass der Cronjob ausgeführt wird. Der Cronjob wird maximal alle '
  . '15 Minuten ausgeführt.</p>'
  . '<p>Verwenden Sie entweder PHP-FPM oder einen Cronjob um dies vermeiden.</p>';
$setting->subGroup = $subGroup;
$setting->config->loadConfiguration(SC_INPUTNUMERIC);
array_push($settingsArray, $setting);

$setting = new Setting();
$setting->toolId = $toolId;
$setting->name = 'cronjobWebAllowCliProcess';
$setting->description = 'Web-Cronjob in separaten Prozess starten';
$setting->help = '<p>Dies erlaubt auch KuferWEB-Anfragen einen Cronjob zu starten.</p>'
  . '<p>Dies bewirkt auch, dass bei Web-Cronjobs ohne PHP-FPM die Ladezeit einer Webseite kürzer ist.</p>';
$setting->subGroup = $subGroup;
$setting->config->loadConfiguration(SC_CHECKBOX);
array_push($settingsArray, $setting);

$setting = new Setting();
$setting->toolId = $toolId;
$setting->name = 'cronEmailEMailRecipient';
$setting->description = 'Alternative E-Mail bei Fehler in Cronjobs';
$setting->subGroup = $subGroup;
$setting->config->loadConfiguration(SC_INPUTNORMAL);
$setting->config->placeHolder = \AllgSettingsAPI::getAllgSettings()->vhsemail;
array_push($settingsArray, $setting);

if (\SessionOperations::isReplikat()) {
  $subGroup = 'Keine Übertragung feststellen';

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckActiv';
  $setting->description = 'Übertragung prüfen';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_CHECKBOX);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckNichtAmWochenende';
  $setting->description = 'Übertragung nicht am Wochenende prüfen';
  $setting->help = 'Ist diese Einstellung gesetzt, '
    . 'so wird die Übertragung nicht zwischen Freitag 20:00 und Montag 09:00 überprüft.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_CHECKBOX);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckNichtAmNachts';
  $setting->description = 'Übertragung nicht Nachts prüfen';
  $setting->help = 'Ist diese Einstellung gesetzt, '
    . 'so wird die Übertragung nicht Nachts zwischen 20:00 und 09:00 überprüft.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_CHECKBOX);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->description = 'Die Dauer zum Erkennen ausbleibender Datenübertragungen '
    . 'sollte mindestens doppelt dem Übertragungsinterval sein.';
  $setting->help = '<p>Tabelle für Stunden zu Minuten Umrechnung:</p><ul>'
    . '<li> 3 Stunden = ' . 3 * 60 . ' Minuten</li>'
    . '<li> 6 Stunden = ' . 6 * 60 . ' Minuten</li>'
    . '<li>12 Stunden = ' . 12 * 60 . ' Minuten</li>'
    . '<li>     1 Tag = ' . 24 * 60 . ' Minuten</li>'
    . '</ul>';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INFOTEXT);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb1';
  $setting->description = 'Dauer bei Datengruppe 1';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 1 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb2';
  $setting->description = 'Dauer bei Datengruppe 2';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 2 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb3';
  $setting->description = 'Dauer bei Datengruppe 3';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 3 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb4';
  $setting->description = 'Dauer bei Datengruppe 4';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 4 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb5';
  $setting->description = 'Dauer bei Datengruppe 5';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 5 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);

  $setting = new Setting();
  $setting->toolId = $toolId;
  $setting->name = 'cronjobReplikatCheckDb10';
  $setting->description = 'Dauer bei Datengruppe 10';
  $setting->help = 'Nach wie vielen Minuten eine E-Mail gesendet werden soll, wenn die Datengruppe 10 nicht übertragen wurde. '
    . '0 heißt nicht prüfen.';
  $setting->subGroup = $subGroup;
  $setting->config->loadConfiguration(SC_INPUTNUMERIC);
  array_push($settingsArray, $setting);
}