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

<?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();