You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
<?php
|
|
|
|
use App\Dataclasses\DatabaseFolkTuneDetails;
|
|
use App\Dataclasses\TuneVariant;
|
|
use App\Wrappers\DatabaseInteractions;
|
|
use App\Wrappers\SQLQueryBuilderWrapper;
|
|
|
|
$tuneDir = __DIR__ . '/../../../LocalStorage/Tunes';
|
|
$targetTuneID = $_GET['tune-id'];
|
|
|
|
$db = new DatabaseInteractions();
|
|
|
|
$tuneDetails = (new DatabaseInteractions())->RunOneSelect(
|
|
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
|
|
table: 'Tunes',
|
|
id: $targetTuneID
|
|
)
|
|
->cols(cols: [
|
|
'T.*',
|
|
])
|
|
);
|
|
|
|
$variants = $db->RunOneSelect(
|
|
queryBuilder: SQLQueryBuilderWrapper::SELECT(
|
|
table: 'Tunes'
|
|
)
|
|
->cols([
|
|
'T.ID AS TuneID',
|
|
'T_TV.ID AS TuneVariantID',
|
|
'T.Title',
|
|
"CONCAT('[', GROUP_CONCAT(
|
|
CONCAT(
|
|
'{\"TimeSignature\":', JSON_QUOTE(T_TVP.TimeSignature), ',',
|
|
'\"KeySignature\":', JSON_QUOTE(T_TVP.KeySignature), ',',
|
|
'\"ABCNotation\":', JSON_QUOTE(T_TVP.ABCNotation), '}'
|
|
)
|
|
), ']') AS Parts"
|
|
])
|
|
->join(
|
|
join: 'INNER',
|
|
spec: 'TuneVariants T_TV',
|
|
cond: 'T.ID = T_TV.TuneID'
|
|
)
|
|
->join(
|
|
join: 'INNER',
|
|
spec: 'TuneVariantParts T_TVP',
|
|
cond: 'T_TV.ID = T_TVP.TuneVariantID'
|
|
)
|
|
->where(cond: 'T.ID = :__tune_id__')
|
|
->groupBy(spec: [
|
|
'T.ID',
|
|
'T_TV.ID',
|
|
'T.Title',
|
|
])
|
|
->bindValue(name: '__tune_id__', value: $targetTuneID)
|
|
);
|
|
|
|
$tuneDetails = new DatabaseFolkTuneDetails($tuneDetails);
|
|
$tuneDetails->Variants[] = new TuneVariant($tuneDetails, $variants);
|
|
|
|
|
|
header(header: "Content-type: text/text");
|
|
echo $tuneDetails->Variants[0]->Build();
|
|
die();
|
|
|