CMS 2.0 - Theme engine, logging, admin improvements

Major changes:
- New ThemeManager with Twig templating and SCSS compilation
- Dynamic themes system (themes/default, themes/demo)
- LogManager with SQLite storage and syslog forwarding
- RequestLogger with static helper methods
- Admin UI overhaul (Bootstrap 5, dark mode)
- Admin config page with logging and theme settings
- Admin logs page with filters and search
- Removed legacy Mustache templates
- Removed test plugin and theme
- Composer dependencies: Twig, scssphp, CommonMark, MaxMind GeoIP
This commit is contained in:
2026-08-08 18:02:14 +02:00
parent cc0e4c19c8
commit a1e5baacac
833 changed files with 108974 additions and 1386 deletions
+47
View File
@@ -0,0 +1,47 @@
<?php
namespace SourceSpan;
use League\Uri\Contracts\UriInterface;
interface SourceLocation
{
public function getOffset(): int;
/**
* The 0-based line of that location
*/
public function getLine(): int;
/**
* The 0-based column of that location
*/
public function getColumn(): int;
public function getSourceUrl(): ?UriInterface;
/**
* Returns the distance in characters between $this and $other.
*
* This always returns a non-negative value.
*
* @return int<0, max>
*/
public function distance(SourceLocation $other): int;
/**
* Returns a span that covers only a single point: this location.
*/
public function pointSpan(): SourceSpan;
/**
* Compares two locations.
*
* It returns a negative integer if $this is ordered before $other,
* a positive integer if $this is ordered after $other,
* and zero if $this and $other are ordered together.
*
* $other must have the same source URL as $this.
*/
public function compareTo(SourceLocation $other): int;
}