const TEMPLATE_FILE = "admin/adminHome.html"; const includes = require('../includes/includes.js'); const sql = require('../utils/sql'); const qs = require('querystring'); /** * Checks for post data regarding adding a new category. * If a post is made with add_category, it parses the url-- replaces spaces * with dashes -- and calls a insert method on the database * * @param postData * @return {*|Promise} */ const processPostAddCategory = function(postData) { return new Promise(function(resolve, reject) { const post = qs.parse(postData); if(post.add_category) { const url = post.add_category.split(" ").join("-").toLowerCase(); const q = "insert into categories (name, url) values " + "('" + post.add_category + "','" + url + "')"; if(sql.insert(q) != 0) { console.log("category added"); resolve(); } else { reject(); console.log("error adding category"); } } else { resolve(); } }); }; /** * Displays all the categories in the database * @return {*|Promise} */ const appendCategoriesToTemplate = function(templateContext) { return new Promise(function(resolve, reject) { sql.getCategories().then(function(categories) { templateContext.categories = categories; resolve(); }).catch(function(error) { reject(error); }) }); }; /** * * @param postData * @return {*|Promise} */ const processPost = function(postData) { return new Promise(function(resolve, reject) { var post = qs.parse(postData); if(post.add_post_name) { var urls = post.add_post_name; urls = urls.split(" ").join("-"); urls =urls.toLowerCase(); var q = "insert into posts (category_id, picture_url, published, name, url) values "; q += "('" + post.add_post_category + "', '" + post.add_post_picture + "', '" + post.add_post_date + "', '" + post.add_post_name + "', '" + urls + "')"; sql.insert(q).then(function() { var map = require('../utils/generateSiteMap'); map.main(); resolve(); }).catch(function(error) { reject(error); }) } else if(post.clear_cache) { require("../utils/pageBuilder").clearCache(); require("../includes/includes.js").clearCache(); resolve(); } else if(post.git_pull) { const execSync = require('child_process').execSync; code = execSync('git pull'); resolve(); } else { resolve(); } }); }; module.exports= { /** * * @param postData posted by user * @param templateContext json object used as the template context * @returns {Promise} renders the template used for this page */ main: function(templateContext) { return new Promise(function(resolve, reject) { Promise.all([includes.fetchTemplate(TEMPLATE_FILE), appendCategoriesToTemplate(templateContext)]) .then(function(template) { templateContext.adminPage = template[0]; resolve(); }).catch(function(error) { console.log("error in add adminHome.js"); reject(error); }); }); }, processPostData: function(postData) { return new Promise(function(resolve, reject) { Promise.all([processPostAddCategory(postData), processPost(postData)]) .then(function() { console.log("all resolved"); resolve(); }).catch(function(error) { console.log("error in add downloads.js"); reject(error); }); }); } };