From 673e804364a454883cb60baa6796578b95854000 Mon Sep 17 00:00:00 2001 From: Cerys Date: Wed, 29 Jan 2025 21:01:48 +0000 Subject: [PATCH] can now create tunes --- Pages/create/tune.php | 17 +++ Pages/profile.php | 3 + Public/FormHandling/NewTune.php | 63 +++++++++++ Public/Static/CSS/Elements/Columns.css | 9 +- Routing/Router.php | 10 +- Templates/Pages/create/tune.html.twig | 146 +++++++++++++++++++++++++ Templates/Pages/profile.html.twig | 1 + 7 files changed, 246 insertions(+), 3 deletions(-) create mode 100644 Pages/create/tune.php create mode 100644 Public/FormHandling/NewTune.php create mode 100644 Templates/Pages/create/tune.html.twig diff --git a/Pages/create/tune.php b/Pages/create/tune.php new file mode 100644 index 0000000..5d9f034 --- /dev/null +++ b/Pages/create/tune.php @@ -0,0 +1,17 @@ +RunSelect( cond: 'T_TST.TuneID=T_T.ID' ) ->where(cond: 'T.CreatedBy LIKE :__user_id__') + ->orderBy(spec: [ + 'T_TST.Order ASC', + ]) ->bindValue(name: '__user_id__', value: SessionWrapper::Get(target: SessionElement::USER_ID)) ); diff --git a/Public/FormHandling/NewTune.php b/Public/FormHandling/NewTune.php new file mode 100644 index 0000000..298161b --- /dev/null +++ b/Public/FormHandling/NewTune.php @@ -0,0 +1,63 @@ + $value) { + if (preg_match('/^PartTimeSignature-Part([A-Z])$/', $key, $matches)) { + $partLetter = $matches[1]; + $parts[$partLetter]['TimeSignature'] = $value; + } elseif (preg_match('/^PartKeySignature-Part([A-Z])$/', $key, $matches)) { + $partLetter = $matches[1]; + $parts[$partLetter]['KeySignature'] = $value; + } elseif (preg_match('/^TextArea-Part([A-Z])$/', $key, $matches)) { + $partLetter = $matches[1]; + $parts[$partLetter]['ABCNotation'] = $value; + } +} + +ksort($parts); + +$db = new DatabaseInteractions(); +$id = Uuid::uuid4()->toString(); + +$db->RunInsert( + queryBuilder: SQLQueryBuilderWrapper::INSERT('Tunes') + ->set(col: 'ID', value: ':__id__') + ->set(col: 'CreatedBy', value: ':__created_by__') + ->set(col: 'Title', value: ':__tune_title__') + ->set(col: 'Copyright', value: ':__copyright__') + ->bindValue(name: '__id__', value: $id) + ->bindValue(name: '__created_by__', value: SessionWrapper::Get(SessionElement::USER_ID)) + ->bindValue(name: '__tune_title__', value: $tuneTitle) + ->bindValue(name: '__copyright__', value: $tuneCopyright) +); + +foreach ($parts as $partLetter => $part) { + $db->RunInsert( + queryBuilder: SQLQueryBuilderWrapper::INSERT('TuneParts') + ->set(col: 'CreatedBy', value: ':__created_by__') + ->set(col: 'TuneID', value: ':__tune_id__') + ->set(col: 'TimeSignature', value: ':__time_signature__') + ->set(col: 'KeySignature', value: ':__key_signature__') + ->set(col: 'PartLetter', value: ':__part_letter__') + ->set(col: 'ABCNotation', value: ':__abc_notation__') + ->bindValue(name: '__created_by__', value: SessionWrapper::Get(SessionElement::USER_ID)) + ->bindValue(name: '__tune_id__', value: $id) + ->bindValue(name: '__time_signature__', value: $part['TimeSignature']) + ->bindValue(name: '__key_signature__', value: $part['KeySignature']) + ->bindValue(name: '__part_letter__', value: $partLetter) + ->bindValue(name: '__abc_notation__', value: $part['ABCNotation']) + ); +} + +header("Location: /tune/{$id}"); +die(); diff --git a/Public/Static/CSS/Elements/Columns.css b/Public/Static/CSS/Elements/Columns.css index 2759680..b2935b3 100644 --- a/Public/Static/CSS/Elements/Columns.css +++ b/Public/Static/CSS/Elements/Columns.css @@ -4,12 +4,17 @@ width: 100%; } -.left, .right { +.left, +.right { width: 24%; } +.left-main, +.right-main { + width: 75%; +} + .center { -.main { width: 50%; } diff --git a/Routing/Router.php b/Routing/Router.php index ccc6dcc..403d192 100644 --- a/Routing/Router.php +++ b/Routing/Router.php @@ -47,7 +47,6 @@ if (isset($routes[$requestElements[0]])) return true; } -// Route handling for tune-related pages if ($requestElements[0] === "tune" && isset($requestElements[1])) { $_GET['tune-id'] = $requestElements[1]; @@ -78,6 +77,15 @@ elseif ($requestElements[0] === "tune-set" && isset($requestElements[1])) return true; } } +elseif ($requestElements[0] === "create" && isset($requestElements[1])) +{ + switch($requestElements[1]) + { + case "tune": + require_once __DIR__ . '/../Pages/create/tune.php'; + return true; + } +} // Default: route not found http_response_code(404); diff --git a/Templates/Pages/create/tune.html.twig b/Templates/Pages/create/tune.html.twig new file mode 100644 index 0000000..5332dec --- /dev/null +++ b/Templates/Pages/create/tune.html.twig @@ -0,0 +1,146 @@ +{% extends "/Bases/StandardWebPage.html.twig" %} + +{% block content %} + + + + + +
+

{{ "Tune Creator"|translate }}

+ +
+
+
+
+ +

+
+ + + + + +
+
+
+ +
+
+ +
+
+{% endblock %} diff --git a/Templates/Pages/profile.html.twig b/Templates/Pages/profile.html.twig index b9da783..7bc48cb 100644 --- a/Templates/Pages/profile.html.twig +++ b/Templates/Pages/profile.html.twig @@ -28,6 +28,7 @@

{{ "My Uploaded Tunes"|translate }}

+ {{ "Upload Tune"|translate }}