Personal blog written from scratch using Node.js, Bootstrap, and MySQL. https://jrtechs.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

191 lines
4.6 KiB

/**
* File which deals with adding and removing downloads from
* the admin section of the website.
*
* @author Jeffery Russell 6-30-18
*/
//file IO
const utils = require('../../utils/utils.js');
//updates db
const sql = require('../../utils/sql');
//parses post data
const qs = require('querystring');
/**
* Processes post requests from the addDownload form
*
* @param postData
* @returns {*|Promise}
*/
const addDownloadPostData = function(postData)
{
return new Promise(function(resolve, reject)
{
const post = qs.parse(postData);
if(post.add_download)
{
sql.addDownload(post.add_download_name, post.add_download_file)
.then(function()
{
resolve("");
}).catch(function(error)
{
reject(error);
})
}
else
{
resolve("");
}
});
};
/**
* Displays the addDownload form the the user
*
* @param postData
* @returns {*|Promise}
*/
const addDownload = function(postData)
{
return new Promise(function(resolve, reject)
{
Promise.all([addDownloadPostData(postData),
utils.include("./admin/addDownload.html")]).then(function(html)
{
resolve("<div class=\"col-md-6\">" + html.join('') + "</div>");
}).catch(function(error)
{
reject(error);
})
});
};
/**
* Handel form requests from the downloads table
*
* @param postData
* @returns {*|Promise}
*/
const displayDownloadsPostData = function(postData)
{
return new Promise(function(resolve, reject)
{
const post = qs.parse(postData);
if(post.delete_download)
{
sql.removeDownload(post.delete_download).then(function()
{
resolve(postData);
}).catch(function(err)
{
reject(err);
});
}
else
{
resolve(postData);
}
});
};
/**
* Renders a single download row in the downloads table
*
* @param download
* @returns {*|Promise}
*/
const renderDownloadRow = function(download)
{
return "<tr>" +
"<td>" + download.name + "</td>" +
"<td>" + download.file + "</td>" +
"<td>" + download.download_count + "</td>" +
"<td><form action=\"/admin\" method =\"post\" >\n" +
" <input type=\"submit\" name=\"submit\" value=\"Delete\"\n" +
" class=\"btn btn-secondary\"/>\n" +
"<input type='hidden' name='delete_download' value='" +
download.download_id + "'/>"+
"</form></td>" +
"</tr>";
};
/**
* Displays all the download information in a table
* @param postData
* @returns {*|Promise}
*/
const displayDownloads = function(postData)
{
var html = "<div class=\"col-md-6\">";
return new Promise(function(resolve, reject)
{
displayDownloadsPostData(postData).then(function()
{
html += "<div class='blogPost'>" +
"<h1 class=\"text-center\">Downloads</h1>" +
"<div class=\"\"><table class=\"table table-striped\">" +
"<thead class=\"thead-dark\"><tr>" +
"<td>Download Name</td><td>File</td>" +
"<td>Download Count</td><td>Delete</td>" +
"</tr></thead><tbody>";
sql.getAllDownloads().then(function(downloads)
{
var downloadPromises = [];
downloads.forEach(function(download)
{
downloadPromises.push(renderDownloadRow(download));
});
Promise.all(downloadPromises).then(function(htmls)
{
const htmlafter = "</tbody></table></div></div><br>" +
"</div>";
resolve(html + htmls.join('') + htmlafter);
});
}).catch(function(error)
{
reject(error);
});
});
});
};
module.exports=
{
/**
* Renders tha download section of the admin page
*
* @param postData
* @returns {Promise}
*/
main: function(postData)
{
return new Promise(function(resolve, reject)
{
Promise.all([addDownload(postData),
displayDownloads(postData)]).then(function(html)
{
resolve("<div class=\"row\">" + html.join('') + "</div>");
}).catch(function(error)
{
console.log("error in add downloads.js");
reject(error);
});
});
}
};