feat(admin): независимые именованные UTM-наборы

This commit is contained in:
Panfilov Konstantin committed 2026-10-26 18:38:11 +03:00
1 parent 941a4f01aa
commit 94619432a3
16 files changed
+220 -114

No files matched your search

+8 -1
View File
@@ -1,7 +1,7 @@
<?php
declare(strict_types=1);
require dirname(__DIR__).'/bootstrap.php';
use PrelandAdmin\{Auth,Store,Config,Transport,Jobs,Sets,Problem,LinkBuilder,Notes,Copy};
use PrelandAdmin\{Auth,Store,Config,Transport,Jobs,Sets,Problem,LinkBuilder,Notes,Copy,UtmPresets};
header('X-Content-Type-Options: nosniff');header('X-Frame-Options: DENY');header('Referrer-Policy: same-origin');header('Cache-Control: no-store');
$path=parse_url($_SERVER['REQUEST_URI']??'/',PHP_URL_PATH);
if(!str_starts_with((string)$path,'/api/')) {require dirname(__DIR__).'/views/dashboard.php';exit;}
@@ -69,6 +69,13 @@ try {
$target=$store->target((string)($_GET['target']??''));$read=(new Transport($store,$target))->readConfig();$readAt=gmdate(DATE_ATOM);
reply(['config'=>$read['config'],'version'=>$read['version'],'read_at'=>$readAt,'warnings'=>[],'sets'=>$sets->list($target,$read['config'])]);
}
if($path==='/api/utm-presets'){
$presets=new UtmPresets($store);
if($method==='GET'){if($_GET)throw new Problem('Список наборов не привязан к доменам.');reply(['presets'=>$presets->all()]);}
if($method==='POST')reply(['preset'=>$presets->create($data)],201);
if($method==='DELETE'){if(count($data)!==1||!is_string($data['id']??null))throw new Problem('Передайте только ID набора.');$presets->delete($data['id']);reply([]);}
throw new Problem('Метод наборов не поддерживается.',405);
}
if($path==='/api/copy'){
if($method!=='POST')throw new Problem('Метод копирования не поддерживается.',405);
reply(['job'=>$enqueue(fn()=>(new Copy($store))->create($data),[])],202);