From d10d143197eb8a23470d47d2bba0551f740a69f2 Mon Sep 17 00:00:00 2001 From: Tina_Azure <-> Date: Wed, 16 Aug 2023 15:45:45 +0200 Subject: [PATCH] create new submission alias --- src/database.cpp | 6 +- src/main.cpp | 77 ++++++++++++++++++- src/templateConstCollection.cpp | 4 + ...freelancer_Submission_Management_View.html | 6 ++ ...mission_Management_View_Generate_link.html | 32 ++++++++ ...agement_View_Generate_link_fulfilment.html | 32 ++++++++ 6 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 templates/freelancer_Submission_Management_View_Generate_link.html create mode 100644 templates/freelancer_Submission_Management_View_Generate_link_fulfilment.html diff --git a/src/database.cpp b/src/database.cpp index d0057fa..5ea2f1c 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -490,7 +490,7 @@ namespace Database { return 0; } - /* //todo:implement + /* * Executes the prepared statement INSERT_FREELANCER_FILE_SUBMISSION_ALIAS * Takes an open pqxx::connection and aliasname as {ID}/{Alias}, freelancerid, filename * returns errorLevel @@ -498,10 +498,10 @@ namespace Database { * 1 = query error * 2 = critical error */ - int executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS(pqxx::connection &connection, const int freelancerID, const std::string& fileName, const std::string& aliasname) { + int executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS(pqxx::connection &connection, const int freelancerID, const std::string& fileName, const std::string& aliasName) { try { pqxx::work work(connection); - work.exec_prepared(PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS, freelancerID, fileName, aliasname); + work.exec_prepared(PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS, freelancerID, fileName, aliasName); work.commit(); } catch (pqxx::sql_error const &e) { diff --git a/src/main.cpp b/src/main.cpp index 5fde3e8..3b829bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1212,19 +1212,90 @@ int main(int argc, char *argv[]) { /* * Page for freelancer to generate link to a particular submission */ - CROW_ROUTE(app, "/freelancer/submissionManagement/view/generateLink") - ([&, configuration](const crow::request& getRequest) { - auto& cookieCtx = app.get_context(getRequest); + CROW_ROUTE(app, "/freelancer/submissionManagement/view/generateLink").methods(crow::HTTPMethod::POST) + ([&, configuration](const crow::request& postRequest) { + auto& cookieCtx = app.get_context(postRequest); crow::mustache::context ctx; if (Utilities::checkCookieLoginState(configuration, cookieCtx)) { + 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 (!fileName.empty()) { + pqxx::connection databaseConnection(configuration.databaseConnectionString); + Database::prepareStatements(databaseConnection, { + ID_SELECT_FREELANCER_ID + }); + string freelancerID; + pqxx::result freelancerIDResult = Database::executePreparedStatement_SELECT_FREELANCER_ID(databaseConnection, cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL)); + freelancerID = freelancerIDResult.at(0).at(0).c_str(); + + ctx["filename"] = fileName; + ctx["domain"] = configuration.domain + "/commissionSubmission"; + ctx["freelancerid"] = freelancerID; + } + else { + ctx[MUSTACHE_POST_ERROR] = true; + ctx[MUSTACHE_REQUEST_NOT_FILLED] = true; + } ctx[MUSTACHE_COOKIE_LOGGED_IN] = true; } auto page = crow::mustache::load(TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_GENERATE_LINK); return page.render(ctx); }); + /* + * Page for freelancer to generate link to a particular submission todo:look into inability to display " " and link to "#" + */ + CROW_ROUTE(app, "/freelancer/submissionManagement/view/generateLink/fulfilment/").methods(crow::HTTPMethod::POST) + ([&, configuration](const crow::request& postRequest, const string& fileName) { + auto& cookieCtx = app.get_context(postRequest); + crow::mustache::context ctx; + if (Utilities::checkCookieLoginState(configuration, cookieCtx)) { + string postRequestBody = postRequest.body; + Utilities::decodeString(postRequestBody); + vector splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&'); + string alias; + for (const string& item : splitPostRequestBody) { + vector splitItem = Utilities::splitStringIntoVector(item, '='); + if (splitItem.at(0) == "alias") + alias = splitItem.at(1); + } + if (!alias.empty() && !fileName.empty()) { + cout << "filename: " << fileName << endl; + cout << "alias: " << alias << endl; + pqxx::connection databaseConnection(configuration.databaseConnectionString); + Database::prepareStatements(databaseConnection, { + ID_SELECT_FREELANCER_ID, + ID_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS + }); + + pqxx::result freelancerIDResult = Database::executePreparedStatement_SELECT_FREELANCER_ID(databaseConnection, cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL)); + string freelancerID = freelancerIDResult.at(0).at(0).c_str(); + string aliasName = freelancerID; + aliasName.append("/"); + aliasName.append(alias); + ctx["submissionLink"] = configuration.domain + "/commissionSubmission/" + aliasName; + if(Database::executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS(databaseConnection, stoi(freelancerID), fileName, aliasName) > 0) + ctx[MUSTACHE_FREELANCER_SUBMISSION_ALIAS_ERROR_INVALID] = true; + } + else { + ctx[MUSTACHE_FREELANCER_SUBMISSION_ALIAS_ERROR] = true; + ctx[MUSTACHE_REQUEST_NOT_FILLED] = true; + } + ctx[MUSTACHE_COOKIE_LOGGED_IN] = true; + } + auto page = crow::mustache::load(TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW_GENERATE_LINK_FULFILMENT); + return page.render(ctx); + }); + diff --git a/src/templateConstCollection.cpp b/src/templateConstCollection.cpp index a7b2551..64bde8e 100644 --- a/src/templateConstCollection.cpp +++ b/src/templateConstCollection.cpp @@ -37,6 +37,7 @@ namespace TemplateConstCollection { const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_ADD = "freelancer_Submission_Management_Add.html"; const static std::string TEMPLATE_FREELANCER_SUBMISSION_MANAGEMENT_VIEW = "freelancer_Submission_Management_View.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"; //Mustache Error/Success variable names const static std::string MUSTACHE_ERROR_COMMISSIONS_CLOSED = "ERROR_COMMISSIONS_CLOSED"; @@ -71,6 +72,9 @@ namespace TemplateConstCollection { const static std::string MUSTACHE_FREELANCER_ALIAS_CREATION_ERROR = "ALIAS_CREATION_ERROR"; const static std::string MUSTACHE_FREELANCER_ALIAS_CREATION_ERROR_DUPLICATE = "ALIAS_CREATION_ERROR_DUPLICATE"; const static std::string MUSTACHE_FREELANCER_ALIAS_CREATION_ERROR_UNNAMED = "ALIAS_CREATION_ERROR_UNNAMED"; + 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_POST_ERROR = "POST_ERROR"; //Mustache Cookie variable names const static std::string MUSTACHE_COOKIE_LOGGED_IN = "COOKIE_LOGGED_IN"; diff --git a/templates/freelancer_Submission_Management_View.html b/templates/freelancer_Submission_Management_View.html index 4142834..b99051c 100644 --- a/templates/freelancer_Submission_Management_View.html +++ b/templates/freelancer_Submission_Management_View.html @@ -4,6 +4,7 @@ {{> templateIncludes/style.css.html}} +

Submission Management

{{^COOKIE_LOGGED_IN}} Please Log in. {{/COOKIE_LOGGED_IN}} @@ -28,6 +29,11 @@ + +
+ +
+
diff --git a/templates/freelancer_Submission_Management_View_Generate_link.html b/templates/freelancer_Submission_Management_View_Generate_link.html new file mode 100644 index 0000000..efd48c4 --- /dev/null +++ b/templates/freelancer_Submission_Management_View_Generate_link.html @@ -0,0 +1,32 @@ + + + + {{> templateIncludes/style.css.html}} + + +

Submission Management: New Link for {{filename}}

+ {{^COOKIE_LOGGED_IN}} + Please Log in. + {{/COOKIE_LOGGED_IN}} + {{#COOKIE_LOGGED_IN}} + {{^POST_ERROR}} + +

Link Preview: {{domain}}/{{freelancerid}}/
+ +

+ {{/POST_ERROR}} + {{#POST_ERROR}} + {{#REQUEST_NOT_FILLED}} +

Error: Invalid Request

+ {{/REQUEST_NOT_FILLED}} + {{/POST_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_Generate_link_fulfilment.html b/templates/freelancer_Submission_Management_View_Generate_link_fulfilment.html new file mode 100644 index 0000000..091ca26 --- /dev/null +++ b/templates/freelancer_Submission_Management_View_Generate_link_fulfilment.html @@ -0,0 +1,32 @@ + + + + {{> templateIncludes/style.css.html}} + + + {{^COOKIE_LOGGED_IN}} + Please Log in. + {{/COOKIE_LOGGED_IN}} + {{#COOKIE_LOGGED_IN}} + {{^SUBMISSION_ALIAS_ERROR}} +
+ Link successfully created: {{submissionLink}} +
+ {{/SUBMISSION_ALIAS_ERROR}} + {{#SUBMISSION_ALIAS_ERROR}} + {{#SUBMISSION_ALIAS_ERROR_INVALID}} +
+ Alias is invalid/already in use +
+ {{/SUBMISSION_ALIAS_ERROR_INVALID}} + {{#REQUEST_NOT_FILLED}} +
+ Request is invalid +
+ {{/REQUEST_NOT_FILLED}} + {{/SUBMISSION_ALIAS_ERROR}} + {{/COOKIE_LOGGED_IN}} + + {{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}} + + \ No newline at end of file