Browse Source

better handling of tune variants

master
Cerys 4 weeks ago
parent
commit
bd5640fb50
  1. 2
      App/Wrappers/SQLQueryBuilderWrapper.php
  2. 11
      Pages/tune/uuid.php
  3. 47
      Public/API/V1/GetABCFile.php
  4. 22
      Public/Static/CSS/Elements/Accordion.css
  5. 4
      Public/Static/CSS/Elements/_General.css
  6. 1
      Public/Static/CSS/Mapper.css
  7. 2
      Public/Static/JS/General/ABCWrapper.js

2
App/Wrappers/SQLQueryBuilderWrapper.php

@ -25,7 +25,7 @@ class SQLQueryBuilderWrapper
public static function SELECT_ONE(string $table, string $id)
{
return self::SELECT(table: $table)
->where(cond: "ID=:__id__")
->where(cond: "T.ID=:__id__")
->bindValue(name: "__id__", value: $id)
->limit(limit: 1)
;

11
Pages/tune/uuid.php

@ -11,14 +11,23 @@ $db = new DatabaseInteractions();
$tuneDetails = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $_GET['tune-id']
id: $_GET["tune-id"]
),
);
$variants = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'TuneVariants',
)
->where(cond: 'T.TuneID=:__tune_id__')
->bindValue(name: '__tune_id__', value: $_GET["tune-id"])
);
TwigWrapper::RenderTwig(
target: "Pages/tune/uuid.html.twig",
arguments: [
"TuneDetails"=>$tuneDetails,
"TuneVariants"=>$variants,
]
);

47
Public/API/V1/GetABCFile.php

@ -6,28 +6,18 @@ use App\Wrappers\DatabaseInteractions;
use App\Wrappers\SQLQueryBuilderWrapper;
$tuneDir = __DIR__ . '/../../../LocalStorage/Tunes';
$targetTuneID = $_GET['tune-id'];
$targetTuneVariantID = $_GET['tune-variant-id'];
$db = new DatabaseInteractions();
$tuneDetails = (new DatabaseInteractions())->RunOneSelect(
$variantDetails = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $targetTuneID
)
->cols(cols: [
'T.*',
])
);
$variants = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'Tunes'
table: 'TuneVariants',
id: $targetTuneVariantID
)
->cols([
'T.ID AS TuneID',
'T_TV.ID AS TuneVariantID',
'T.Title',
'T.ID AS TuneVariantID',
'T.TuneID AS TuneID',
"CONCAT('[', GROUP_CONCAT(
CONCAT(
'{\"TimeSignature\":', JSON_QUOTE(T_TVP.TimeSignature), ',',
@ -38,27 +28,26 @@ $variants = $db->RunOneSelect(
])
->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'
spec: 'TuneVariantParts AS T_TVP',
cond: 'T.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 = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $variantDetails['TuneID']
)
);
$tuneDetails = new DatabaseFolkTuneDetails($tuneDetails);
$tuneDetails->Variants[] = new TuneVariant($tuneDetails, $variants);
$variantDetails = new TuneVariant($tuneDetails, $variantDetails);
header(header: "Content-type: text/text");
echo $tuneDetails->Variants[0]->Build();
echo $variantDetails->Build();
die();

22
Public/Static/CSS/Elements/Accordion.css

@ -0,0 +1,22 @@
.accordion {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 18px;
width: 100%;
text-align: left;
border: none;
outline: none;
transition: 0.4s;
}
.active, .accordion:hover {
background-color: #ccc;
}
.panel {
padding: 0 18px;
background-color: white;
display: none;
overflow: hidden;
}

4
Public/Static/CSS/Elements/_General.css

@ -19,3 +19,7 @@ main {
background: var(--colour--main--background);
}
.InnerContent {
width: 80%;
}

1
Public/Static/CSS/Mapper.css

@ -8,6 +8,7 @@
/* ELEMENTS */
@import "/Static/CSS/Elements/_General.css";
@import "/Static/CSS/Elements/Accordion.css";
@import "/Static/CSS/Elements/Columns.css";
@import "/Static/CSS/Elements/DescriptionLists.css";
@import "/Static/CSS/Elements/HomePage.css";

2
Public/Static/JS/General/ABCWrapper.js

@ -2,7 +2,7 @@
function RenderABC(containerID, targetTuneID)
{
API_GET("/V1/GetABCFile.php?tune-id=" + targetTuneID).then(payload => {
API_GET("/V1/GetABCFile.php?tune-variant-id=" + targetTuneID).then(payload => {
const tunes = ABCJS.renderAbc(
containerID,

Loading…
Cancel
Save