1
0
Files
re_capitulating_queer/site/plugins/kirby3-janitor/janitor
2024-10-14 14:22:24 +02:00

191 lines
5.2 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
declare(strict_types=1);
foreach([// janitor from zip with vendor
__DIR__ . '/vendor/autoload.php',
// janitor from composer in site/plugins/kirby3-janitor
realpath(__DIR__ . '/../../../') . '/vendor/autoload.php',
] as $file) {
if (file_exists($file)) {
require $file;
break;
}
}
ini_set('display_errors', '1');
$climate = new \League\CLImate\CLImate();
$climate->arguments->add([
'help' => [
'prefix' => 'h',
'longPrefix' => 'help',
'description' => 'Display the help',
'noValue' => true,
],
'list' => [
'prefix' => 'l',
'longPrefix' => 'list',
'description' => 'List all registered jobs',
'noValue' => true,
],
'format' => [
'prefix' => 'f',
'longPrefix' => 'format',
'description' => 'Format the output as "label", "table" or "json"',
'defaultValue' => 'label',
],
'kirby' => [
'prefix' => 'k',
'longPrefix' => 'kirby',
'description' => 'Relative path to Kirbys public folder',
'defaultValue' => '/',
],
'verbose' => [
'prefix' => 'v',
'longPrefix' => 'verbose',
'description' => 'Show debug info',
'noValue' => true,
],
'job' => [
'description' => 'Run a job',
],
'quiet' => [
'prefix' => 'q',
'longPrefix' => 'quiet',
'description' => 'Run jobs silently',
'noValue' => true,
],
'tinker' => [
'prefix' => 't',
'longPrefix' => 'tinker',
'description' => 'Run a REPL session',
'noValue' => true,
],
'down' => [
'prefix' => 'd',
'longPrefix' => 'down',
'description' => 'Start maintenance mode',
'noValue' => true,
],
'up' => [
'prefix' => 'u',
'longPrefix' => 'up',
'description' => 'Stop maintenance mode',
'noValue' => true,
],
]);
$climate->arguments->parse();
$verbose = $climate->arguments->defined('verbose');
// COMMAND: kirby
$kirbyPublicFolder = null;
foreach([ // site/plugins/kirby3-janitor => /index.php
realpath(__DIR__ . '/../../../'),
// site/plugins/kirby3-janitor => /public/index.php
realpath(__DIR__ . '/../../../public'),
] as $dir) {
if ($dir !== false && file_exists($dir . '/index.php')) {
$kirbyPublicFolder = $dir;
break;
}
}
if ($climate->arguments->defined('kirby')) {
$kirbyPublicFolder = realpath(__DIR__ . DIRECTORY_SEPARATOR . ltrim($climate->arguments->get('kirby'), DIRECTORY_SEPARATOR));
}
if ($kirbyPublicFolder) {
$kirbyLoader = $kirbyPublicFolder . DIRECTORY_SEPARATOR . 'janitor-' . sha1(__DIR__) . '.php';
if (! file_exists($kirbyLoader)) {
file_put_contents(
$kirbyLoader,
str_replace('echo ', '// echo ',
file_get_contents($kirbyPublicFolder . DIRECTORY_SEPARATOR . 'index.php')
)
);
if ($verbose) {
$climate->backgroundYellow()->out('ATTENTION! Janitor created this file to load the Kirby instance: ' . $kirbyLoader);
}
}
include $kirbyLoader;
if ($verbose) {
$climate->backgroundCyan()->out('Using Kirby instance from: ' . $kirbyLoader);
}
}
\Bnomei\Janitor::climate($climate);
$janitor = new \Bnomei\Janitor();
// COMMAND: help
$command = $climate->arguments->defined('help');
if ($command) {
$climate->usage();
}
// COMMAND: list
$command = $climate->arguments->defined('list');
if ($command) {
foreach ($janitor->listJobs() as $key) {
$climate->out($key);
}
}
// COMMAND: quiet
$command = $climate->arguments->get('quiet');
if ($command) {
$climate->output->add('quiet', new \Bnomei\QuietWriter());
$climate->output->defaultTo('quiet');
}
// COMMAND: tinker
$command = $climate->arguments->get('tinker');
if ($command) {
while (true) eval($climate->input('>>> ')->prompt());
}
// COMMAND: down
$command = $climate->arguments->get('down');
if ($command) {
file_put_contents(kirby()->roots()->index() . '/down', date('c'));
}
// COMMAND: up
$command = $climate->arguments->get('up');
if ($command) {
$down = kirby()->roots()->index() . '/down';
if (file_exists($down)) {
unlink($down);
}
}
// COMMAND: job
$job = $climate->arguments->get('job');
if ($job) {
$format = $climate->arguments->get('format');
if ($format === 'class') {
$janitor->job($job, [], $climate);
} elseif ($format === 'json') {
$climate->json($janitor->job($job));
} elseif ($format === 'table') {
$table = [];
foreach ($janitor->job($job) as $key => $value) {
$table[] = [$key, $value];
}
$climate->table($table);
} else {
$data = $janitor->job($job);
$status = $data['status'];
$label = array_key_exists('label', $data) ? $data['label'] : $status;
if ($status === 200) {
$climate->lightGreen($label);
} elseif ($status === 204) {
$climate->lightRed($label);
} elseif ($status === 404) {
$climate->backgroundRed($label);
} else {
$climate->out($label);
}
}
}