71 lines
2.2 KiB
PHP
71 lines
2.2 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Nextcloud-Belegimport – CLI-Einstiegspunkt.
|
||
*
|
||
* Liest Belege aus dem konfigurierten Nextcloud-Ordner (WebDAV) und legt
|
||
* sie in Steuerkram an. Danach werden die Dateien in Nextcloud in den
|
||
* Erledigte-Ordner verschoben (oder gelöscht, wenn kein DONE-Ordner gesetzt).
|
||
*
|
||
* Aufruf:
|
||
* docker compose exec web php scripts/nextcloud-import.php
|
||
*
|
||
* Für Cronjob (im Kontext des Containers):
|
||
* * * * * * docker compose -f /path/to/Steuerkram/docker-compose.yml exec -T web \
|
||
* php scripts/nextcloud-import.php >> /var/log/steuerkram-import.log 2>&1
|
||
*
|
||
* Umgebungsvariablen (in .env oder Systemumgebung):
|
||
* NEXTCLOUD_URL Basis-URL, z.B. https://cloud.example.com
|
||
* NEXTCLOUD_USER Benutzername
|
||
* NEXTCLOUD_PASS Passwort oder App-Passwort
|
||
* NEXTCLOUD_FOLDER Import-Ordner, z.B. /Belege/Import (Standard: /Belege/Import)
|
||
* NEXTCLOUD_DONE Erledigte-Ordner, z.B. /Belege/Importiert (leer = Datei löschen)
|
||
*/
|
||
|
||
declare(strict_types=1);
|
||
|
||
chdir(dirname(__DIR__));
|
||
|
||
// .env laden falls vorhanden
|
||
if (file_exists('.env')) {
|
||
foreach (file('.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
|
||
if (str_starts_with(trim($line), '#') || !str_contains($line, '=')) {
|
||
continue;
|
||
}
|
||
[$key, $value] = explode('=', $line, 2);
|
||
$key = trim($key);
|
||
$value = trim($value, " \t\n\r\0\x0B\"'");
|
||
if (!array_key_exists($key, $_ENV)) {
|
||
$_ENV[$key] = $value;
|
||
putenv("{$key}={$value}");
|
||
}
|
||
}
|
||
}
|
||
|
||
require_once 'vendor/autoload.php';
|
||
|
||
use Steuerkram\Config;
|
||
use Steuerkram\Services\NextcloudImportService;
|
||
|
||
Config::load(); // Database verbindet sich lazy über Config::get()
|
||
|
||
$start = microtime(true);
|
||
echo '[nextcloud-import] Start: ' . date('Y-m-d H:i:s') . PHP_EOL;
|
||
|
||
$svc = new NextcloudImportService();
|
||
$result = $svc->import();
|
||
|
||
foreach ($result['details'] as $line) {
|
||
echo '[nextcloud-import] ' . $line . PHP_EOL;
|
||
}
|
||
|
||
$elapsed = round(microtime(true) - $start, 2);
|
||
echo sprintf(
|
||
'[nextcloud-import] Fertig in %ss – importiert: %d, übersprungen: %d, Fehler: %d' . PHP_EOL,
|
||
$elapsed,
|
||
$result['imported'],
|
||
$result['skipped'],
|
||
$result['errors'],
|
||
);
|
||
|
||
exit($result['errors'] > 0 ? 1 : 0);
|