UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

188 lines (165 loc) 5.08 kB
var mongoose = require('mongoose'); var path_mod = require('path'); var fs = require('fs'); var config = require('./config'); var logger = require('./logger'); var cms = require('../index'); var S = require('string'); module.exports.toObjectId = function(id) { if (!id) return null; else if (typeof id == 'string') return mongoose.Types.ObjectId(id); else if (id && id.id) return mongoose.Types.ObjectId(id.id); }; module.exports.objectIdToString = function(id) { if (typeof id == 'string') return id; else return id.toString(); }; module.exports.objectIdArrayToString = function(objIds) { if (objIds) { var arr = []; for (var i = 0; i < objIds.length; i++) { arr.push(module.exports.objectIdToString(objIds[i])); } return arr; } return null; }; module.exports.stringArrayToObjectIds = function(arr) { if (arr) { var objIds = []; for (var i = 0; i < arr.length; i++) { objIds.push(module.exports.toObjectId(arr[i])); } return objIds; } else return null; }; /* return true if the folder was created, false if it already existed. callback(err, created) */ module.exports.ensureDirectoryExists = function(path, callback) { fs.mkdir(path, null, function(err) { if (err) { if (err.code == 'EEXIST') { if (callback) callback(null, false); // ignore the error if the folder already exists } else { logger.error(err); // something else went wrong if (callback) callback(err); } } else { if (callback) callback(null, true); // successfully created folder } }); } //make the path portion of the URL lowercase, but not the querystring module.exports.lowercaseUrl = function(url) { if (url) { var i = url.indexOf('?'); if (i > -1) { var parts = url.split('?'); if (parts && parts.length === 2) return parts[0].toLowerCase() + parts[1]; else return url; } else return url.toLowerCase(); } else return null; }; module.exports.replaceAll = function(string, find, replace) { return string.replace(new RegExp(escapeRegExp(find), 'g'), replace); }; function escapeRegExp(string) { return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); } module.exports.removeQueryStringParameter = function(url, key) { //split the URL into path and query var arr = url.split('?'); if (arr && arr.length === 2) { url = arr[0]; var params = parseQueryString(arr[1]); var keys = Object.keys(params); var qs = ""; for(var i = 0; i < keys.length; i++) { if (keys[i] !== key) qs += "&" + keys[i] + "=" + params[keys[i]]; } return url + "?" + qs.substr(1); } else return url; }; function parseQueryString(queryString) { var params = {}, queries, temp, i, l; // Split into key/value pairs queries = queryString.split("&"); // Convert the array of strings into an object for ( i = 0, l = queries.length; i < l; i++ ) { temp = queries[i].split('='); params[temp[0]] = temp[1]; } return params; }; module.exports.getContentType = function(name) { var types = config.contentTypes.types; for(var i = 0; i < types.length; i++) { if (types[i].name == name) { return types[i]; } } return null; }; module.exports.formatSafeName = function (name) { if (name && name.length > 0) { name = name.replace(/[^a-zA-Z0-9]/g, '-'); name = S(name).replaceAll("--", "-").s; name = S(name).replaceAll("--", "-").s; if (S(name).endsWith('-') == true && name.length > 1) name = name.substr(0, name.length - 1); if (S(name).startsWith('-') == true && name.length > 1) name = name.substr(1); return name.toLowerCase(); } else return ""; }; module.exports.ensureTempDir = function(callback) { var path = module.exports.getTempDir(); module.exports.ensureDirectoryExists(path, function(err, created) { if (err) callback(err); else { var uploads = path_mod.join(path, 'uploads'); module.exports.ensureDirectoryExists(uploads, function (err, created) { callback(err, created); }); } }); }; module.exports.getTempDir = function() { var temp = config.settings.temp_directory; if (temp.indexOf('~/') > -1) { var root = cms.getRoot(); if (!S(root).endsWith('/')) root += '/'; return temp.replace('~/', root); } else return temp; }; module.exports.resolvePath = function(path) { if (path && path.indexOf("~/") === 0) return path_mod.join(cms.getRoot(), path.substr(2)); else return path; };