summaryrefslogtreecommitdiff
path: root/src/application/cron.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/application/cron.php')
-rw-r--r--src/application/cron.php42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/application/cron.php b/src/application/cron.php
new file mode 100644
index 0000000..094fe50
--- /dev/null
+++ b/src/application/cron.php
@@ -0,0 +1,42 @@
+<?php
+
+const __ROOT__ = __DIR__ . "/..";
+
+require_once __ROOT__ . "/vendor/autoload.php";
+require_once __ROOT__ . "/application/i18n.php";
+require_once __ROOT__ . "/application/common.php";
+
+function print_error(string $msg): void {
+ file_put_contents("php://stderr", $msg);
+}
+
+function check_sapi(): void {
+ if (PHP_SAPI !== "cli") {
+ http_response_code(500);
+ echo "Error: Can only be called via command line\n";
+ exit(1);
+ }
+}
+
+check_sapi();
+
+$job = $argv[1] ?? null;
+
+if ($job === null) {
+ print_error("Error: No job specified\nUsage: php cron.php <job>\n");
+ exit(1);
+}
+
+$jobsDir = __DIR__ . "/jobs";
+
+$availableJobs = array_map(fn($i) => pathinfo($i, PATHINFO_FILENAME), array_values(array_filter(scandir($jobsDir),
+ fn($i) => is_file($jobsDir . "/" . $i) && $i[0] !== "." && pathinfo($i, PATHINFO_EXTENSION) === "php")));
+
+if (!in_array($job, $availableJobs)) {
+ print_error("Error: Invalid job specified\nAvailable jobs are:\n" . implode("", array_map(fn($i) => " $i\n", $availableJobs)));
+ exit(1);
+}
+
+$jobFile = $jobsDir . "/" . $job . ".php";
+
+include $jobFile;