WIP Freelancer Submission + alias deletion
This commit is contained in:
@ -286,7 +286,7 @@ namespace DatabaseStatementConstCollection {
|
|||||||
* Name and Statement for prepared statement to delete a submission based on freelancer email and filename
|
* 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 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
|
* 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_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS = 44;
|
||||||
const static int ID_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS = 45;
|
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_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_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_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_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_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
|
||||||
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_INSERT_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},
|
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH},
|
||||||
|
68
src/main.cpp
68
src/main.cpp
@ -1224,6 +1224,74 @@ int main(int argc, char *argv[]) {
|
|||||||
return page.render(ctx);
|
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<crow::CookieParser>(postRequest);
|
||||||
|
crow::mustache::context ctx;
|
||||||
|
string postRequestBody = postRequest.body;
|
||||||
|
Utilities::decodeString(postRequestBody);
|
||||||
|
vector<string> splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&');
|
||||||
|
string fileName;
|
||||||
|
for (const string& item : splitPostRequestBody) {
|
||||||
|
vector<string> 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<crow::CookieParser>(postRequest);
|
||||||
|
crow::mustache::context ctx;
|
||||||
|
string postRequestBody = postRequest.body;
|
||||||
|
Utilities::decodeString(postRequestBody);
|
||||||
|
vector<string> splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&');
|
||||||
|
string fileName;
|
||||||
|
for (const string& item : splitPostRequestBody) {
|
||||||
|
vector<string> 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
|
* Page for freelancer to view existing Links to a submission
|
||||||
*/
|
*/
|
||||||
|
@ -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_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 = "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_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
|
//Mustache Error/Success variable names
|
||||||
const static std::string MUSTACHE_ERROR_COMMISSIONS_CLOSED = "ERROR_COMMISSIONS_CLOSED";
|
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 = "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_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_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_POST_ERROR = "POST_ERROR";
|
||||||
const static std::string MUSTACHE_GENERIC_SEPARATOR = "#SEP#";
|
const static std::string MUSTACHE_GENERIC_SEPARATOR = "#SEP#";
|
||||||
|
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
{{> templateIncludes/style.css.html}}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Submission Management</h2>
|
||||||
|
{{^COOKIE_LOGGED_IN}}
|
||||||
|
Please Log in.
|
||||||
|
{{/COOKIE_LOGGED_IN}}
|
||||||
|
{{#COOKIE_LOGGED_IN}}
|
||||||
|
{{#SUBMISSION_DELETE_FILENAME_ERROR}}
|
||||||
|
<p>
|
||||||
|
Invalid filename in request.
|
||||||
|
</p>
|
||||||
|
{{/SUBMISSION_DELETE_FILENAME_ERROR}}
|
||||||
|
{{^SUBMISSION_DELETE_FILENAME_ERROR}}
|
||||||
|
<p>
|
||||||
|
Submission to delete: {{filename}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<form action="/freelancer/submissionManagement/view/delete/execution" method="post">
|
||||||
|
<button type="submit" name="filename" value="{{filename}}" class="button">Confirm deletion of submission and related alias.</button>
|
||||||
|
</form>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Alias related to Submission:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
{{#submissionlinks}}
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<form action="/commissionSubmission/{{aliasname}}" method="get">
|
||||||
|
<button type="submit" class="button">{{aliasname}}</button>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a href="https://{{domain}}/commissionSubmission/{{aliasname}}">https://{{domain}}/commissionSubmission/{{aliasname}}</a>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
{{/submissionlinks}}
|
||||||
|
</table>
|
||||||
|
{{/SUBMISSION_DELETE_FILENAME_ERROR}}
|
||||||
|
{{/COOKIE_LOGGED_IN}}
|
||||||
|
{{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}}
|
||||||
|
<br>
|
||||||
|
{{> templateIncludes/returnToIndexButton.html.html}}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
{{> templateIncludes/style.css.html}}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Submission Management</h2>
|
||||||
|
{{^COOKIE_LOGGED_IN}}
|
||||||
|
Please Log in.
|
||||||
|
{{/COOKIE_LOGGED_IN}}
|
||||||
|
{{#COOKIE_LOGGED_IN}}
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Size (MB)</th>
|
||||||
|
<th>Upload date</th>
|
||||||
|
</tr>
|
||||||
|
{{#submissions}}
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<form action="/freelancer/submissionManagement/view/{{filename}}" method="get">
|
||||||
|
<button type="submit" class="button">{{filename}}</button>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th>{{filesizemb}} MB</th>
|
||||||
|
<th>{{uploaddate}}</th>
|
||||||
|
<th>
|
||||||
|
<form action="/freelancer/submissionManagement/view/delete" method="post">
|
||||||
|
<button type="submit" name="filename" value="{{filename}}" class="button">Delete</button>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<form action="/freelancer/submissionManagement/view/viewLink/{{filename}}" method="get">
|
||||||
|
<button type="submit" class="button">View Links</button>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<form action="/freelancer/submissionManagement/view/generateLink" method="post">
|
||||||
|
<button type="submit" name="filename" value="{{filename}}" class="button">Generate Link</button>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
{{/submissions}}
|
||||||
|
</table>
|
||||||
|
{{/COOKIE_LOGGED_IN}}
|
||||||
|
{{> templateIncludes/freelancerLoginSignupProfileLogoutInterface.html.html}}
|
||||||
|
<br>
|
||||||
|
{{> templateIncludes/returnToIndexButton.html.html}}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user