Cerys 4 weeks ago
parent
commit
f46b900f0e
  1. 46
      App/Dataclasses/DatabaseFolkTuneDetails.php
  2. 4
      App/Dataclasses/TunePart.php
  3. 41
      App/Dataclasses/TuneVariant.php
  4. 13
      Public/API/V1/GetABCFile.php

46
App/Dataclasses/DatabaseFolkTuneDetails.php

@ -9,7 +9,7 @@ class DatabaseFolkTuneDetails
public string $Copyright;
public array $Variants;
public array $Parts;
public function __construct(array $assocArray)
@ -17,5 +17,49 @@ class DatabaseFolkTuneDetails
$this->ID = $assocArray['ID'];
$this->Title = $assocArray['Title'];
$this->Copyright = $assocArray['Copyright'];
$temp = json_decode($assocArray['Parts'], associative: true, flags: JSON_THROW_ON_ERROR);
foreach($temp as $part)
$this->Parts[] = new TunePart($part);
}
public function Build(): string
{
$builder = "X: {$this->ID}
T: {$this->Title}
S: {$this->Copyright}
L: 1/4";
$counter = 0;
$previousTimeSignature = "";
$previousKeySignature = "";
foreach($this->Parts as $part)
{
$builder .= "
P: {$this->Parts[$counter]->PartLetter} Part";
if($this->Parts[$counter]->TimeSignature != $previousTimeSignature)
{
$builder .= "
M: {$this->Parts[$counter]->TimeSignature}";
$previousTimeSignature = $this->Parts[$counter]->TimeSignature;
}
if($this->Parts[$counter]->KeySignature != $previousKeySignature)
{
$builder .= "
K: {$this->Parts[$counter]->KeySignature}";
$previousKeySignature = $this->Parts[$counter]->KeySignature;
}
$builder .= "
{$part->ABCNotation}";
$counter = $counter + 1;
}
return $builder;
}
}

4
App/Dataclasses/TuneVariantPart.php → App/Dataclasses/TunePart.php

@ -2,16 +2,18 @@
namespace App\Dataclasses;
class TuneVariantPart
class TunePart
{
public string $TimeSignature;
public string $KeySignature;
public string $PartLetter;
public string $ABCNotation;
public function __construct(array $assocArray)
{
$this->TimeSignature = $assocArray['TimeSignature'];
$this->KeySignature = $assocArray['KeySignature'];
$this->PartLetter = $assocArray['PartLetter'];
$this->ABCNotation = $assocArray['ABCNotation'];
}
}

41
App/Dataclasses/TuneVariant.php

@ -1,41 +0,0 @@
<?php
namespace App\Dataclasses;
class TuneVariant
{
private DatabaseFolkTuneDetails $Tune;
public string $ID;
public array $Parts;
public function __construct(DatabaseFolkTuneDetails $tuneDetails, array $assocArray)
{
$this->ID = $assocArray['ID'];
$this->Tune = $tuneDetails;
$temp = json_decode($assocArray['Parts'], associative: true, flags: JSON_THROW_ON_ERROR);
foreach($temp as $part)
$this->Parts[] = new TuneVariantPart($part);
}
public function Build(): string
{
$builder = "X: {$this->Tune->ID}.{$this->ID}
T: {$this->Tune->Title}
S: {$this->Tune->Copyright}
M: {$this->Parts[0]->TimeSignature}
K: {$this->Parts[0]->KeySignature}
L: 1/8";
$counter = 0;
$letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'];
foreach($this->Parts as $part)
{
$builder .= "
P: {$letters[$counter]} Part
{$part->ABCNotation}";
$counter = $counter + 1;
}
return $builder;
}
}

13
Public/API/V1/GetABCFile.php

@ -12,7 +12,7 @@ $targetTuneVariantID = $_GET['tune-variant-id'];
$db = new DatabaseInteractions();
$variantDetails = $db->RunOneSelect(
$tuneDetails = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $targetTuneVariantID
@ -23,6 +23,7 @@ $variantDetails = $db->RunOneSelect(
CONCAT(
'{\"TimeSignature\":', JSON_QUOTE(T_TP.TimeSignature), ',',
'\"KeySignature\":', JSON_QUOTE(T_TP.KeySignature), ',',
'\"PartLetter\":', JSON_QUOTE(T_TP.PartLetter), ',',
'\"ABCNotation\":', JSON_QUOTE(T_TP.ABCNotation), '}'
)
), ']') AS Parts"
@ -37,18 +38,10 @@ $variantDetails = $db->RunOneSelect(
])
);
$tuneDetails = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $variantDetails['TuneID']
)
);
$tuneDetails = new DatabaseFolkTuneDetails($tuneDetails);
$variantDetails = new TuneVariant($tuneDetails, $variantDetails);
header(header: "Content-type: text/text");
echo $variantDetails->Build();
echo $tuneDetails->Build();
die();

Loading…
Cancel
Save