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.
 
 

161 lines
4.3 KiB

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);
});
});
}
};