From ed64e48ac7724de7e1f9ae8b7fb2f728b95ba3a9 Mon Sep 17 00:00:00 2001
From: Tina_Azure <->
Date: Fri, 29 Sep 2023 13:42:26 +0200
Subject: [PATCH] WIP Freelancer Submission + alias deletion
---
src/databaseStatementConstCollection.cpp | 5 +-
src/main.cpp | 68 +++++++++++++++++++
src/templateConstCollection.cpp | 3 +
...n_Management_View_Delete_Confirmation.html | 54 +++++++++++++++
...sion_Management_View_Delete_Execution.html | 55 +++++++++++++++
5 files changed, 183 insertions(+), 2 deletions(-)
create mode 100644 templates/freelancer_Submission_Management_View_Delete_Confirmation.html
create mode 100644 templates/freelancer_Submission_Management_View_Delete_Execution.html
diff --git a/src/databaseStatementConstCollection.cpp b/src/databaseStatementConstCollection.cpp
index 71bfddd..793faae 100644
--- a/src/databaseStatementConstCollection.cpp
+++ b/src/databaseStatementConstCollection.cpp
@@ -286,7 +286,7 @@ namespace DatabaseStatementConstCollection {
* Name and Statement for prepared statement to delete a submission based on freelancer email and filename
*/
const static std::string PREPARED_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION = "deleteFreelancerFileSubmission";
- const static std::string SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION_PATH = "delete from freelancersubmissions where freelancerid = (select freelancers.id from freelancers where emailaddress = $1) and filename = $2";
+ const static std::string SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION = "delete from freelancersubmissions where freelancerid = (select freelancers.id from freelancers where emailaddress = $1) and filename = $2";
/*
* Name and Statement for prepared statement to purge expired file submissions from the database
@@ -352,6 +352,7 @@ namespace DatabaseStatementConstCollection {
const static int ID_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS = 44;
const static int ID_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS = 45;
const static int ID_DELETE_FREELANCER_FILE_SUBMISSION_ALIAS = 46;
+ const static int ID_DELETE_FREELANCER_FILE_SUBMISSION_RELATED_ALIAS = 47;
@@ -399,7 +400,7 @@ namespace DatabaseStatementConstCollection {
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_BASE_DATA, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_BASE_DATA},
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE},
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH},
- {PREPARED_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION_PATH},
+ {PREPARED_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION},
{PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION},
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH},
diff --git a/src/main.cpp b/src/main.cpp
index 765f593..f6de488 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1224,6 +1224,74 @@ int main(int argc, char *argv[]) {
return page.render(ctx);
});
+ /*
+ * Page for freelancer to delete a Submission
+ */
+ CROW_ROUTE(app, "/freelancer/submissionManagement/view/delete").methods(crow::HTTPMethod::POST)
+ ([&, configuration](const crow::request& postRequest) {
+ auto& cookieCtx = app.get_context(postRequest);
+ crow::mustache::context ctx;
+ string postRequestBody = postRequest.body;
+ Utilities::decodeString(postRequestBody);
+ vector splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&');
+ string fileName;
+ for (const string& item : splitPostRequestBody) {
+ vector splitItem = Utilities::splitStringIntoVector(item, '=');
+ if (splitItem.at(0) == "filename")
+ fileName = splitItem.at(1);
+ }
+ if (Utilities::checkCookieLoginState(configuration, cookieCtx)) {
+ ctx[MUSTACHE_COOKIE_LOGGED_IN] = true;
+ if (!fileName.empty()) {
+ Utilities::replaceString(fileName, "+", " ");
+ ctx = Utilities::getFreelancerSubmissionLinks(configuration, cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL), fileName);
+ ctx["filename"] = fileName;
+ ctx["domain"] = configuration.domain;
+ }
+ else {
+ ctx[MUSTACHE_FREELANCER_SUBMISSION_DELETE_FILENAME_ERROR] = true;
+ }
+ }
+ auto page = crow::mustache::load(TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_DELETE_CONFIRMATION);
+ return page.render(ctx);
+ });
+
+ /*
+ * Page Submission deletion execution
+ */
+ CROW_ROUTE(app, "/freelancer/submissionManagement/view/delete/execution").methods(crow::HTTPMethod::POST)
+ ([&, configuration](const crow::request& postRequest) {
+ auto& cookieCtx = app.get_context(postRequest);
+ crow::mustache::context ctx;
+ string postRequestBody = postRequest.body;
+ Utilities::decodeString(postRequestBody);
+ vector splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&');
+ string fileName;
+ for (const string& item : splitPostRequestBody) {
+ vector splitItem = Utilities::splitStringIntoVector(item, '=');
+ if (splitItem.at(0) == "filename")
+ fileName = splitItem.at(1);
+ }
+ if (Utilities::checkCookieLoginState(configuration, cookieCtx)) {
+ ctx[MUSTACHE_COOKIE_LOGGED_IN] = true;
+ if (!fileName.empty()) {
+ Utilities::replaceString(fileName, "+", " ");
+ pqxx::connection databaseConnection(configuration.databaseConnectionString);
+ Database::prepareStatements(databaseConnection, {
+ ID_DELETE_FREELANCER_FILE_SUBMISSION,
+ ID_DELETE_FREELANCER_FILE_SUBMISSION_RELATED_ALIAS
+ });
+ int errorCode = Utilities::deleteFreelancerSubmissionAndRelatedAlias(configuration, cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL), fileName);
+
+ }
+ else {
+ ctx[MUSTACHE_FREELANCER_SUBMISSION_DELETE_FILENAME_ERROR] = true;
+ }
+ }
+ auto page = crow::mustache::load(TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_DELETE_EXECUTION);
+ return page.render(ctx);
+ });
+
/*
* Page for freelancer to view existing Links to a submission
*/
diff --git a/src/templateConstCollection.cpp b/src/templateConstCollection.cpp
index 042d5c6..2375a09 100644
--- a/src/templateConstCollection.cpp
+++ b/src/templateConstCollection.cpp
@@ -40,6 +40,8 @@ namespace TemplateConstCollection {
const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_LINK_DELETE_FULFILMENT = "freelancer_Submission_Management_View_Link_Delete_Fulfilment.html";
const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_GENERATE_LINK = "freelancer_Submission_Management_View_Generate_Link.html";
const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_GENERATE_LINK_FULFILMENT = "freelancer_Submission_Management_View_Generate_Link_Fulfilment.html";
+ const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_DELETE_CONFIRMATION = "freelancer_Submission_Management_View_Delete_Confirmation.html";
+ const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_DELETE_EXECUTION = "freelancer_Submission_Management_View_Delete_Execution.html";
//Mustache Error/Success variable names
const static std::string MUSTACHE_ERROR_COMMISSIONS_CLOSED = "ERROR_COMMISSIONS_CLOSED";
@@ -77,6 +79,7 @@ namespace TemplateConstCollection {
const static std::string MUSTACHE_FREELANCER_SUBMISSION_ALIAS_ERROR = "SUBMISSION_ALIAS_ERROR";
const static std::string MUSTACHE_FREELANCER_SUBMISSION_ALIAS_ERROR_INVALID = "SUBMISSION_ALIAS_ERROR_INVALID";
const static std::string MUSTACHE_FREELANCER_SUBMISSION_ALIAS_ERROR_BLACKLISTED_CHARACTER = "SUBMISSION_ALIAS_ERROR_INVALID_BLACKLISTED_CHARACTER";
+ const static std::string MUSTACHE_FREELANCER_SUBMISSION_DELETE_FILENAME_ERROR = "SUBMISSION_DELETE_FILENAME_ERROR";
const static std::string MUSTACHE_POST_ERROR = "POST_ERROR";
const static std::string MUSTACHE_GENERIC_SEPARATOR = "#SEP#";
diff --git a/templates/freelancer_Submission_Management_View_Delete_Confirmation.html b/templates/freelancer_Submission_Management_View_Delete_Confirmation.html
new file mode 100644
index 0000000..6fa663b
--- /dev/null
+++ b/templates/freelancer_Submission_Management_View_Delete_Confirmation.html
@@ -0,0 +1,54 @@
+
+
+
+
+ {{> templateIncludes/style.css.html}}
+
+
+ Submission Management
+ {{^COOKIE_LOGGED_IN}}
+ Please Log in.
+ {{/COOKIE_LOGGED_IN}}
+ {{#COOKIE_LOGGED_IN}}
+ {{#SUBMISSION_DELETE_FILENAME_ERROR}}
+
+ Invalid filename in request.
+
+ {{/SUBMISSION_DELETE_FILENAME_ERROR}}
+ {{^SUBMISSION_DELETE_FILENAME_ERROR}}
+
+ Submission to delete: {{filename}}
+
+
+
+
+
+ Alias related to Submission:
+
+
+ {{/SUBMISSION_DELETE_FILENAME_ERROR}}
+ {{/COOKIE_LOGGED_IN}}
+ {{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}}
+
+ {{> templateIncludes/returnToIndexButton.html.html}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/freelancer_Submission_Management_View_Delete_Execution.html b/templates/freelancer_Submission_Management_View_Delete_Execution.html
new file mode 100644
index 0000000..f390f92
--- /dev/null
+++ b/templates/freelancer_Submission_Management_View_Delete_Execution.html
@@ -0,0 +1,55 @@
+
+
+
+
+ {{> templateIncludes/style.css.html}}
+
+
+ Submission Management
+ {{^COOKIE_LOGGED_IN}}
+ Please Log in.
+ {{/COOKIE_LOGGED_IN}}
+ {{#COOKIE_LOGGED_IN}}
+
+
+ Name |
+ Size (MB) |
+ Upload date |
+
+ {{#submissions}}
+
+
+
+ |
+ {{filesizemb}} MB |
+ {{uploaddate}} |
+
+
+ |
+
+
+ |
+
+
+ |
+
+ {{/submissions}}
+
+ {{/COOKIE_LOGGED_IN}}
+ {{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}}
+
+ {{> templateIncludes/returnToIndexButton.html.html}}
+
+
+
+
+
+
\ No newline at end of file