jsharmony-cms
Version:
73 lines (62 loc) • 3.17 kB
JavaScript
//(routetype, req, res, callback, require, jsh, modelid, params)
var Helper = require('../Helper.js');
var cms = jsh.Modules['jsHarmonyCMS'];
var dbtypes = jsh.AppSrv.DB.types;
if(routetype == 'd'){
jsh.AppSrv.ExecRow(req._DBContext, 'select v_my_site.site_id, (select deployment_target_publish_config from {schema}.deployment_target where deployment_target.deployment_target_id = v_my_site.deployment_target_id) deployment_target_publish_config from {schema}.v_my_site where site_id={schema}.my_current_site_id()', [], { }, function (err, rslt) {
if (err) { jsh.Log.error(err); Helper.GenError(req, res, -99999, 'An unexpected error has occurred'); return; }
var root_txt = '(Root)';
if (rslt && rslt.length && rslt[0]) {
var deployment_target_publish_config = {};
try{
deployment_target_publish_config = cms.funcs.parseDeploymentTargetPublishConfig(rslt[0].site_id, rslt[0].deployment_target_publish_config, 'editor');
}
catch(ex){
jsh.Log.error(ex);
return;
}
if(deployment_target_publish_config.media_subfolder){
root_txt += '/' + deployment_target_publish_config.media_subfolder;
if(root_txt[root_txt.length-1] == '/') root_txt = root_txt.substr(0, root_txt.length - 1);
}
}
var model = jsh.getModelClone(req, modelid);
var treeField = jsh.AppSrvClass.prototype.getFieldByName(model.fields, 'media_folder');
if(treeField) treeField.lov.post_process = Helper.ReplaceAll(treeField.lov.post_process, '%%%ROOT%%%', root_txt);
//Save model to local request cache
req.jshlocal.Models[modelid] = model;
return callback();
});
}
else if(routetype == 'model'){
var model = jsh.getModel(req, modelid);
if (!Helper.hasModelAction(req, model, 'B')) { Helper.GenError(req, res, -11, 'Invalid Model Access'); return; }
var sql = undefined;
var sql_ptypes = undefined;
var sql_params = undefined;
if (req.query.init_media_key) {
sql = 'select media_folder from {schema}.v_my_media where media_key=@media_key';
sql_ptypes = [dbtypes.BigInt];
sql_params ={ media_key: req.query.init_media_key };
}
else if (req.query.init_media_path) {
if (!req.query.init_media_path.endsWith('/')) req.query.init_media_path = req.query.init_media_path + '/';
sql = 'select media_folder from {schema}.v_my_media where substr(media_folder, 1, length(@media_folder))=@media_folder';
sql_ptypes = [dbtypes.NVarChar(dbtypes.MAX)];
sql_params = { media_folder: req.query.init_media_path };
}
if (sql) {
jsh.AppSrv.ExecRow(req._DBContext, sql, sql_ptypes, sql_params, function (err, rslt) {
if(err) callback();
if(!rslt || !rslt.length || !rslt[0]) return callback();
var media_folder = rslt[0].media_folder;
if(!media_folder) return callback();
var state = {};
state[modelid] = { media_folder: media_folder };
res.end('***JSHARMONY_REDIRECT***\n'+req.baseurl+modelid+'?state='+encodeURIComponent(JSON.stringify(state)));
return;
});
}
else return callback();
}
else return callback();