61 lines
1.9 KiB
PHP
61 lines
1.9 KiB
PHP
<?php
|
|
/** @license MIT
|
|
* Copyright 2017 J. King, Dustin Wilson et al.
|
|
* See LICENSE and AUTHORS files for details */
|
|
|
|
declare(strict_types=1);
|
|
namespace JKingWeb\Arsse;
|
|
|
|
class Arsse {
|
|
public const VERSION = "0.10.2";
|
|
public const REQUIRED_EXTENSIONS = [
|
|
"intl", // as this extension is required to prepare formatted messages, its absence will throw a distinct English-only exception
|
|
"dom",
|
|
"filter",
|
|
"json", // part of the PHP core since version 8.0
|
|
"hash", // part of the PHP core since version 7.4
|
|
"simplexml", // required by PicoFeed only
|
|
"iconv", // required by PicoFeed only
|
|
];
|
|
|
|
/** @var Factory */
|
|
public static $obj;
|
|
/** @var Lang */
|
|
public static $lang;
|
|
/** @var Conf */
|
|
public static $conf;
|
|
/** @var Database */
|
|
public static $db;
|
|
/** @var User */
|
|
public static $user;
|
|
|
|
/** @codeCoverageIgnore */
|
|
public static function bootstrap(): void {
|
|
$conf = file_exists(BASE."config.php") ? new Conf(BASE."config.php") : new Conf;
|
|
static::load($conf);
|
|
}
|
|
|
|
public static function load(Conf $conf): void {
|
|
static::$obj = static::$obj ?? new Factory;
|
|
static::$lang = static::$lang ?? new Lang;
|
|
static::$conf = $conf;
|
|
static::$lang->set($conf->lang);
|
|
static::$db = static::$db ?? new Database;
|
|
static::$user = static::$user ?? new User;
|
|
}
|
|
|
|
/** Checks whether the specified extensions are loaded and throws an exception if any are not */
|
|
public static function checkExtensions(string ...$ext): void {
|
|
$missing = [];
|
|
foreach ($ext as $e) {
|
|
if (!extension_loaded($e)) {
|
|
$missing[] = $e;
|
|
}
|
|
}
|
|
if ($missing) {
|
|
$total = sizeof($missing);
|
|
$first = $missing[0];
|
|
throw new Exception("extMissing", ['first' => $first, 'total' => $total]);
|
|
}
|
|
}
|
|
}
|