From f46b900f0eab16ee66d9989a976661ab52b09c60 Mon Sep 17 00:00:00 2001 From: Cerys Date: Mon, 27 Jan 2025 23:47:55 +0000 Subject: [PATCH] " --- App/Dataclasses/DatabaseFolkTuneDetails.php | 46 ++++++++++++++++++- .../{TuneVariantPart.php => TunePart.php} | 4 +- App/Dataclasses/TuneVariant.php | 41 ----------------- Public/API/V1/GetABCFile.php | 13 ++---- 4 files changed, 51 insertions(+), 53 deletions(-) rename App/Dataclasses/{TuneVariantPart.php => TunePart.php} (78%) delete mode 100644 App/Dataclasses/TuneVariant.php diff --git a/App/Dataclasses/DatabaseFolkTuneDetails.php b/App/Dataclasses/DatabaseFolkTuneDetails.php index 36a744b..4c47b3f 100644 --- a/App/Dataclasses/DatabaseFolkTuneDetails.php +++ b/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; } } \ No newline at end of file diff --git a/App/Dataclasses/TuneVariantPart.php b/App/Dataclasses/TunePart.php similarity index 78% rename from App/Dataclasses/TuneVariantPart.php rename to App/Dataclasses/TunePart.php index de196b1..8918156 100644 --- a/App/Dataclasses/TuneVariantPart.php +++ b/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']; } } diff --git a/App/Dataclasses/TuneVariant.php b/App/Dataclasses/TuneVariant.php deleted file mode 100644 index 21d7b3d..0000000 --- a/App/Dataclasses/TuneVariant.php +++ /dev/null @@ -1,41 +0,0 @@ -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; - } -} diff --git a/Public/API/V1/GetABCFile.php b/Public/API/V1/GetABCFile.php index b62f014..0c951aa 100644 --- a/Public/API/V1/GetABCFile.php +++ b/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();