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: +

+ + {{#submissionlinks}} + + + + + {{/submissionlinks}} +
+
+ +
+
+ https://{{domain}}/commissionSubmission/{{aliasname}} +
+ {{/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}} + + + + + + + {{#submissions}} + + + + + + + + + {{/submissions}} +
NameSize (MB)Upload date
+
+ +
+
{{filesizemb}} MB{{uploaddate}} +
+ +
+
+
+ +
+
+
+ +
+
+ {{/COOKIE_LOGGED_IN}} + {{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}} +
+ {{> templateIncludes/returnToIndexButton.html.html}} + + + + + + \ No newline at end of file