From 75d31381400ef20c622e7317d9f8b040ce9c2f54 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 21 Apr 2026 13:30:47 +0200 Subject: [PATCH] All should be as it was designed --- .../controller/CharityPageController.java | 6 + .../controller/GiveFeedbackController.java | 110 +++++++++++++++ .../components/FeedbackCardController.java | 1 + .../controller/components/LoaderScene.java | 8 +- .../profileUserSettingsController.java | 2 - .../team6/database/DAO/FeedbackDAO.java | 44 ++++++ .../team6/database/Readers/CharitySelect.java | 10 +- .../src/main/resources/fxml/charityPage.fxml | 8 ++ .../src/main/resources/fxml/giveFeedback.fxml | 130 ++++++++++++++++++ 9 files changed, 311 insertions(+), 8 deletions(-) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/GiveFeedbackController.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/FeedbackDAO.java create mode 100644 helpmehelpapplication/src/main/resources/fxml/giveFeedback.fxml diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java index 0bd468c..9838b1c 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java @@ -67,4 +67,10 @@ public void switchToDonationPage(ActionEvent event) { LoaderScene.LoadScene("donationPage", event, charity, null, authToken); } + @FXML + private void switchToFeedbackPage(ActionEvent event){ + LoaderScene.LoadScene("giveFeedback", event, charity, null, authToken); + + } + } diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/GiveFeedbackController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/GiveFeedbackController.java new file mode 100644 index 0000000..1870da0 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/GiveFeedbackController.java @@ -0,0 +1,110 @@ +package ntnu.systemutvikling.team6.controller; + +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Alert; +import javafx.scene.control.Label; +import javafx.scene.control.TextArea; +import javafx.scene.layout.FlowPane; +import javafx.stage.Stage; +import ntnu.systemutvikling.team6.controller.components.*; +import ntnu.systemutvikling.team6.database.DAO.FeedbackDAO; +import ntnu.systemutvikling.team6.database.DatabaseConnection; +import ntnu.systemutvikling.team6.database.Readers.CharitySelect; +import ntnu.systemutvikling.team6.models.Charity; +import ntnu.systemutvikling.team6.models.Feedback; + +import java.io.IOException; +import java.util.ArrayList; + +public class GiveFeedbackController extends BaseController { + private Charity charity; + @FXML private NavbarController navbarController; + @FXML private FooterController footerController; + + @FXML private FlowPane feedbackContainer; + @FXML private Label charityNameLabel; + @FXML private TextArea feedbackCommentArea; + + + + @FXML + public void setCharity(Charity charity) { + this.charity = charity; + + charityNameLabel.setText(charity.getName()); + } + + @Override + protected void authTokenisSet() { + if (!isLoggedin()){ + showAlert(Alert.AlertType.ERROR, "Not logged inn", "You need to be logged inn to donate."); + Platform.runLater(() -> { + Stage stage = (Stage) Stage.getWindows().stream() + .filter(w -> w.isShowing()) + .findFirst() + .orElse(null); + if (stage != null) { + LoaderScene.LoadScene("loginSite", stage, null, null, authToken); + } + }); + } + navbarController.setAuthToken(authToken); + footerController.setAuthToken(authToken); + populateFields(); + } + private void populateFields(){ + DatabaseConnection conn = new DatabaseConnection(); + CharitySelect charitySelect = new CharitySelect(conn); + ArrayList feedbacks = charitySelect.getFeedbackforCharityUUID(charity.getUUID().toString()); + displayFeedbacks(feedbacks); + } + private void displayFeedbacks(ArrayList feedbacks){ + feedbackContainer.getChildren().clear(); + if (feedbacks.isEmpty()) { + javafx.scene.control.Label empty = new javafx.scene.control.Label("You have no Feedbacks"); + empty.setStyle("-fx-text-fill: #777777; -fx-font-size: 14;"); + feedbackContainer.getChildren().add(empty); + } + + for (Feedback feedback : feedbacks) { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/components/feedbackCard.fxml")); + Parent card = loader.load(); + FeedbackCardController cardController = loader.getController(); + cardController.setMessage(feedback); + cardController.setAuthToken(authToken); + feedbackContainer.getChildren().add(card); + } catch (IOException e) { + throw new RuntimeException("Could not load organization card.", e); + } + } + } + + @FXML + private void handleSubmitFeedback(ActionEvent event){ + String feedbackCommentAreaText = feedbackCommentArea.getText(); + Feedback newFeedback = new Feedback(authToken.getCurrentUser(), feedbackCommentAreaText); + + DatabaseConnection conn = new DatabaseConnection(); + FeedbackDAO feedbackDAO = new FeedbackDAO(conn); + boolean submitSuccess; + try { + submitSuccess = feedbackDAO.addFeedbackToCharity(newFeedback, charity); + } catch (Exception e) { + e.printStackTrace(); + showAlert(Alert.AlertType.ERROR, "Unexpected Error", "Unexpected error ocurred"); + return; + } + if (submitSuccess) { + showAlert( + Alert.AlertType.INFORMATION, + "Feedback received", + charity.getName() + " has gotten your feedback"); + LoaderScene.LoadScene("charityPage", event, charity, null, authToken); + } + } +} diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/FeedbackCardController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/FeedbackCardController.java index 61bd707..987c731 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/FeedbackCardController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/FeedbackCardController.java @@ -20,6 +20,7 @@ protected void authTokenisSet() { public void setMessage(Feedback feedback) { this.feedback = feedback; + System.out.println(feedback.isAnonymous()); usernameLabel.setText(feedback.isAnonymous() ? "Anonymous Doner" : feedback.getUser().getUsername()); dateLabel.setText(feedback.getDate().toString()); commentLabel.setText(feedback.getComment()); diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java index 771f043..d9ec09a 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java @@ -10,10 +10,7 @@ import javafx.scene.image.Image; import javafx.stage.Stage; import ntnu.systemutvikling.team6.HmHApplication; -import ntnu.systemutvikling.team6.controller.AvailableOrganizationController; -import ntnu.systemutvikling.team6.controller.CharityPageController; -import ntnu.systemutvikling.team6.controller.DonationPageController; -import ntnu.systemutvikling.team6.controller.FrontpageController; +import ntnu.systemutvikling.team6.controller.*; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.service.AuthenticationService; @@ -50,6 +47,9 @@ public static void LoadScene(String sceneName, Stage stage, Charity charity, Str if (controller instanceof DonationPageController donationController) { donationController.setCharity(charity); } + if (controller instanceof GiveFeedbackController giveFeedbackController) { + giveFeedbackController.setCharity(charity); + } } // Controllers that need query diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileUser/profileUserSettingsController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileUser/profileUserSettingsController.java index 0cb4b4f..89cbc7d 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileUser/profileUserSettingsController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/profileUser/profileUserSettingsController.java @@ -184,8 +184,6 @@ private void handleNewPreferences(ActionEvent event) { authToken.getCurrentUser().setSettings(updatedSettings); LoaderScene.LoadScene("profile_user_settings", event, null, null, authToken); } - - } // Sidebar Methods diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/FeedbackDAO.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/FeedbackDAO.java new file mode 100644 index 0000000..705929a --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DAO/FeedbackDAO.java @@ -0,0 +1,44 @@ +package ntnu.systemutvikling.team6.database.DAO; + +import ntnu.systemutvikling.team6.database.DatabaseConnection; +import ntnu.systemutvikling.team6.models.Charity; +import ntnu.systemutvikling.team6.models.Feedback; + +import java.sql.Connection; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class FeedbackDAO { + private final DatabaseConnection connection; + + public FeedbackDAO(DatabaseConnection connection){ + this.connection = connection; + } + + public boolean addFeedbackToCharity(Feedback feedback, Charity toCharity){ + String sql = """ + INSERT INTO Feedback + (UUID_feedback, feedback_comment, feedback_date, isAnonymous, charity_id, user_id) + VALUES (?, ?, ?, ?, ?, ?); + + """; + + try (Connection conn = connection.getMySqlConnection(); + PreparedStatement ps = conn.prepareStatement(sql)) { + + ps.setString(1, feedback.getFeedbackId().toString()); + ps.setString(2, feedback.getComment()); + ps.setDate(3, Date.valueOf(feedback.getDate())); + ps.setBoolean(4, feedback.getUser().getSettings().isAnonymous()); + ps.setString(5, toCharity.getUUID().toString()); + ps.setString(6, feedback.getUser().getId().toString()); + return ps.executeUpdate() > 0; + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + } +} diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java index 4f5eeab..10efe2d 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java @@ -158,9 +158,11 @@ public ArrayList getFeedbackforCharityUUID(String charity_uuid) { """ SELECT f.UUID_feedback, f.feedback_comment, f.feedback_date, f.isAnonymous, f.charity_id, f.user_id, - u.UUID_user, u.user_name, u.user_email, u.user_password, u.role + u.UUID_user, u.user_name, u.user_email, u.user_password, u.role, + s.language, s.lightmode FROM Feedback f LEFT JOIN User u ON f.user_id = u.UUID_user + RIGHT JOIN Settings s ON u.UUID_user = s.UUID_user WHERE f.charity_id = ?; """; PreparedStatement stmt = conn.prepareStatement(sql_query); @@ -175,7 +177,11 @@ public ArrayList getFeedbackforCharityUUID(String charity_uuid) { rs.getString("user_email"), rs.getString("user_password"), rs.getString("role")); - userWithSettingsAndNoInbox.setSettings(new Settings(false, Language.NORWEGIAN, false)); + userWithSettingsAndNoInbox.setSettings(new Settings( + rs.getBoolean("isAnonymous"), + Language.valueOf(rs.getString("language")), + rs.getBoolean("lightmode") + )); Feedback feedback = new Feedback( rs.getString("UUID_feedback"), diff --git a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml index d4d611d..d0a8097 100644 --- a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml @@ -136,6 +136,14 @@ + + + + diff --git a/helpmehelpapplication/src/main/resources/fxml/giveFeedback.fxml b/helpmehelpapplication/src/main/resources/fxml/giveFeedback.fxml new file mode 100644 index 0000000..6fae176 --- /dev/null +++ b/helpmehelpapplication/src/main/resources/fxml/giveFeedback.fxml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +