sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
188 lines (165 loc) • 5.08 kB
JavaScript
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;
};