jsharmony-cms
Version:
597 lines (545 loc) • 30.8 kB
JavaScript
jsh.App[modelid] = new (function(){
var _this = this;
this.default_deployment_target_publish_config = {};
var parse_url_cache = {};
var previous_config = '';
_this.template_configurator = $('.xctrl_deployment_target_publish_configurator_template').html();
_this.oninit = function(){
_this.configurator_render();
$('.src_deployment_target_publish_config_view_previous').toggle(!jsh.is_insert);
};
_this.onload = function(){
XForm.Get('/_funcs/deployment_target/defaults', { site_id: xmodel.get('site_id') }, {}, function(rslt){
_this.default_deployment_target_publish_config = rslt.deployment_target_publish_config;
}, undefined, { async: false });
var xdata = xmodel.controller.form.Data;
var orig_path = xdata['deployment_target_publish_path'] || '<Not set>';
var orig_config = xdata['deployment_target_publish_config'] || '{}';
try{ orig_config = JSON.stringify(JSON.parse(orig_config),null,2); }
catch(ex){ /* Do nothing */ }
if(orig_config=='{}') orig_config = '{\n}';
previous_config = [
'<div style="text-decoration:underline;padding:0 0 5px 0;font-weight:bold;">Previous Publish Path</div>',
XExt.escapeHTML(orig_path),
'<div style="text-decoration:underline;padding:10px 0 0 0;font-weight:bold;">Previous Publish Config</div>',
'<pre>'+XExt.escapeHTML(orig_config)+'</pre>',
].join('\n');
_this.configurator_setvalue(xdata['deployment_target_publish_path'], xdata['deployment_target_publish_config']);
};
_this.configurator_getContainer = function(){ return jsh.$root('.xform'+xmodel.class+' .deployment_target_publish_configurator'); };
_this.getDeploymentType = function(){ return _this.configurator_getContainer().find('.deployment_type').val(); };
_this.configurator_render = function(){
var jcontainer = _this.configurator_getContainer();
jcontainer.html(XExt.renderEJS(_this.template_configurator, xmodel.id));
var jdeployment_type = jcontainer.find('.deployment_type');
XExt.RenderLOV(null, jdeployment_type, [
{ code_val: '', code_txt: '(No Publish Target)' },
{ code_val: 's3', code_txt: 'Amazon S3' },
{ code_val: 'cmshost', code_txt: 'CMS Deployment Host' },
{ code_val: 'ftp', code_txt: 'FTP' },
{ code_val: 'ftps', code_txt: 'FTPS' },
{ code_val: 'file', code_txt: 'Local Filesystem' },
{ code_val: 'git_https', code_txt: 'Git HTTPS' },
{ code_val: 'git_ssh', code_txt: 'Git SSH' },
{ code_val: 'sftp', code_txt: 'SFTP' },
]);
jdeployment_type.on('keyup change', function(e){ _this.configurator_updateDeploymentType(); });
jcontainer.find('.downloadPublicKey').on('click', function(e){
e.preventDefault();
e.stopImmediatePropagation();
var tabs = {};
tabs[xmodel.namespace+'Site_Deployment_Target_Tabs'] = xmodel.namespace+'Site_Deployment_Target_Key';
XExt.navTo(jsh._BASEURL+xmodel.namespace+'Site_Deployment_Target_Tabs?'+$.param({action:'update',deployment_target_id:xmodel.get('deployment_target_id'), tabs: JSON.stringify(tabs)}));
});
jcontainer.find('.edit_button').on('click', function(e){
e.preventDefault();
e.stopImmediatePropagation();
var jthis = $(this);
var target = jthis.attr('data-target');
if(jthis.hasClass('editing')){
_this.disableEditing(jthis);
var jinput = jcontainer.find('[data-elem="'+target+'"]');
jinput.val(_this.default_deployment_target_publish_config[target]||'');
}
else {
_this.enableEditing(jthis);
}
});
jcontainer.find('.parse_url').on('blur', function(e){
var jthis = $(this);
if(!jthis.is(':visible')) return;
_this.updateUrl(jthis.val().trim());
});
jcontainer.find('[data-elem="git_config.options"]').attr('placeholder',JSON.stringify({
'user.email': 'cms@localhost',
'user.name': 'CMS',
},null,2));
jcontainer.find('.xctrl_deployment_target_publish_configurator .xtab[for="xctrl_deployment_target_publish_configurator_json"]').on('click', function(e){
var err_str = _this.configurator_validate().join('\n');
if(err_str){
e.preventDefault();
e.stopImmediatePropagation();
return XExt.Alert(err_str);
}
_this.generateJSON();
});
jcontainer.find('.xctrl_deployment_target_publish_configurator .xtab[for="xctrl_deployment_target_publish_configurator_wizard"]').on('click', function(e){
var err_str = _this.configurator_validate().join('\n');
if(err_str){
e.preventDefault();
e.stopImmediatePropagation();
return XExt.Alert(err_str);
}
_this.configurator_setvalue(xmodel.get('deployment_target_publish_path'), xmodel.get('deployment_target_publish_config'));
});
jcontainer.find('.src_deployment_target_publish_config_view_previous').on('click', function(e){
e.preventDefault();
e.stopImmediatePropagation();
XExt.Alert(previous_config,null, { escapeHTML: false });
});
};
_this.host_id_onSelected = function(popupData){
var jcontainer = _this.configurator_getContainer();
if(!popupData.result) return;
jcontainer.find('.deployment_type_container_cmshost [data-path-elem="hostid"]').val(popupData.result);
};
_this.configurator_updateDeploymentType = function(val){
var jcontainer = _this.configurator_getContainer();
if(val) jcontainer.find('.deployment_type').val(val);
else val = jcontainer.find('.deployment_type').val();
jcontainer.find('.deployment_type_container').not('.deployment_type_container_'+val).hide();
jcontainer.find('.deployment_type_container_'+val).show();
};
_this.configurator_setvalue = function(publish_path, publish_config){
publish_path = publish_path || '';
publish_config = publish_config || '';
var jcontainer = _this.configurator_getContainer();
jcontainer.find('.src_deployment_target_publish_path').val(publish_path);
var parsed_config = {};
try {
parsed_config = JSON.parse(publish_config);
publish_config = _.isEmpty(parsed_config)?'{\n}':JSON.stringify(parsed_config,null,2);
}
catch(ex){ /* Do nothing */ }
jcontainer.find('.src_deployment_target_publish_config').val(publish_config);
//Parse URL
var pathParts = publish_path.split('://');
var protocol = pathParts[0].toLowerCase();
if(!_.includes(['s3','cmshost','ftp','ftps','file','git_https','git_ssh','sftp'], protocol)) protocol = '';
_this.configurator_updateDeploymentType(protocol);
if(protocol){
_this.updateUrl(publish_path, { override: true });
var jDeploymentType = jcontainer.find('.deployment_type_container_'+protocol);
if(protocol=='s3'){ (function(){
var s3_config = parsed_config.s3_config||{};
jDeploymentType.find('[data-elem="s3_config.accessKeyId"]').val(s3_config.accessKeyId||'');
jDeploymentType.find('[data-elem="s3_config.secretAccessKey"]').val(s3_config.secretAccessKey||'');
jDeploymentType.find('[data-elem="s3_config.upload_params"]').val(_.isEmpty(s3_config.upload_params)?'{\n}':JSON.stringify(s3_config.upload_params,null,2));
_.each(['accessKeyId','secretAccessKey','upload_params'], function(key){ delete s3_config[key]; });
if(_.isEmpty(s3_config)) delete parsed_config.s3_config;
})(); }
else if(protocol=='cmshost'){ (function(){
var cmshost_config = parsed_config.cmshost_config||{};
jDeploymentType.find('[data-elem="cmshost_config.download_remote_templates"]').prop('checked',!!cmshost_config.download_remote_templates);
jDeploymentType.find('[data-elem="cmshost_config.remote_timeout"]').val(cmshost_config.remote_timeout||'');
_.each(['download_remote_templates','remote_timeout'], function(key){ delete cmshost_config[key]; });
if(_.isEmpty(cmshost_config)) delete parsed_config.cmshost_config;
})(); }
else if(protocol=='file'){ (function(){
var fs_config = parsed_config.fs_config||{};
jDeploymentType.find('[data-elem="fs_config.delete_excess_files"]').prop('checked',!!fs_config.delete_excess_files);
_.each(['delete_excess_files'], function(key){ delete fs_config[key]; });
if(_.isEmpty(fs_config)) delete parsed_config.fs_config;
})(); }
else if(protocol=='git_https'){ (function(){
var git_config = parsed_config.git_config||{};
jDeploymentType.find('[data-elem="git_config.branch"]').val(git_config.branch||'');
jDeploymentType.find('[data-elem="git_config.options"]').val(_.isEmpty(git_config.options)?'{\n}':JSON.stringify(git_config.options,null,2));
_.each(['branch','options'], function(key){ delete git_config[key]; });
if(_.isEmpty(git_config)) delete parsed_config.git_config;
})(); }
else if(protocol=='git_ssh'){ (function(){
var git_config = parsed_config.git_config||{};
jDeploymentType.find('[data-elem="git_config.branch"]').val(git_config.branch||'');
jDeploymentType.find('[data-elem="git_config.options"]').val(_.isEmpty(git_config.options)?'{\n}':JSON.stringify(git_config.options,null,2));
_.each(['branch','options'], function(key){ delete git_config[key]; });
if(_.isEmpty(git_config)) delete parsed_config.git_config;
})(); }
else if((protocol=='ftp')||(protocol=='ftps')||(protocol=='sftp')){ (function(){
var ftp_config = parsed_config.ftp_config||{};
jDeploymentType.find('[data-elem="ftp_config.overwrite_all"]').prop('checked',!!ftp_config.overwrite_all);
jDeploymentType.find('[data-elem="ftp_config.delete_excess_files"]').prop('checked',!!ftp_config.delete_excess_files);
if((protocol=='ftp')||(protocol=='ftps')) jDeploymentType.find('[data-elem="ftp_config.compression"]').prop('checked',!!ftp_config.compression);
if(protocol=='ftps') jDeploymentType.find('[data-elem="ftp_config.ignore_certificate_errors"]').prop('checked',!!ftp_config.ignore_certificate_errors);
_.each(['overwrite_all','delete_excess_files','compression','ignore_certificate_errors'], function(key){ delete ftp_config[key]; });
if(_.isEmpty(ftp_config)) delete parsed_config.ftp_config;
})(); }
}
jcontainer.find('[data-elem="url_prefix"]').val(parsed_config.url_prefix);
jcontainer.find('[data-elem="published_url"]').val(parsed_config.published_url);
jcontainer.find('[data-elem="url_prefix_page_override"]').val(parsed_config.url_prefix_page_override);
jcontainer.find('[data-elem="url_prefix_media_override"]').val(parsed_config.url_prefix_media_override);
jcontainer.find('[data-elem="page_subfolder"]').val(parsed_config.page_subfolder);
jcontainer.find('[data-elem="media_subfolder"]').val(parsed_config.media_subfolder);
jcontainer.find('[data-elem="publish_local_templates"]').prop('checked',!!parsed_config.publish_local_templates);
jcontainer.find('[data-elem="ignore_remote_template_certificate"]').prop('checked',!!parsed_config.ignore_remote_template_certificate);
jcontainer.find('.edit_button').each(function(){
var jthis = $(this);
var target = jthis.attr('data-target');
if(target in parsed_config) _this.enableEditing(jthis);
else{
_this.disableEditing(jthis);
var jinput = jcontainer.find('[data-elem="'+target+'"]');
jinput.val(_this.default_deployment_target_publish_config[target]||'');
}
});
var ext_config = JSON.parse(JSON.stringify(parsed_config));
_.each(['url_prefix','published_url','url_prefix_page_override','url_prefix_media_override','page_subfolder','media_subfolder','publish_local_templates','ignore_remote_template_certificate'], function(key){ delete ext_config[key]; });
jcontainer.find('[data-elem="ext_config"]').val(_.isEmpty(ext_config)?'{\n}':JSON.stringify(ext_config,null,2));
};
_this.enableEditing = function(jctrl){
var jcontainer = _this.configurator_getContainer();
var target = jctrl.attr('data-target');
jctrl.addClass('editing');
jcontainer.find('[data-elem="'+target+'"]').attr('readonly', false).removeClass('uneditable');
};
_this.disableEditing = function(jctrl){
var jcontainer = _this.configurator_getContainer();
var target = jctrl.attr('data-target');
jctrl.removeClass('editing');
var jinput = jcontainer.find('[data-elem="'+target+'"]');
jinput.attr('readonly', true).addClass('uneditable');
};
_this.updateUrl = function(url, options){
options = _.extend({ override: false }, options);
var protocol = _this.getDeploymentType();
var jcontainer = _this.configurator_getContainer();
var jDeploymentType = jcontainer.find('.deployment_type_container_'+protocol);
var deployment_type_url = '';
if(!url) return;
if(url.indexOf('//')==0) url = protocol+':' + url;
if((url.indexOf('://') < 0) || (url.indexOf('://') > url.indexOf('/'))) url = protocol+'://' + url;
if(protocol=='s3'){
if(url.toLowerCase().indexOf('s3://')==0) url = url.substr(5);
jDeploymentType.find('[data-path-elem="bucket"]').val(url);
}
else if(protocol=='cmshost'){
if(url.toLowerCase().indexOf('cmshost://')==0) url = url.substr(10);
jDeploymentType.find('[data-path-elem="hostid"]').val(url);
}
else if(protocol=='file'){
if(url.toLowerCase().indexOf('file://')==0) url = url.substr(7);
jDeploymentType.find('[data-path-elem="path"]').val(url);
}
else {
var parsed_url = _this.parse_url(url);
if(!parsed_url) return;
if(!parsed_url.hostname) return;
if(protocol=='git_https'){
deployment_type_url = 'https://'+parsed_url.hostname+(parsed_url.port?':'+parsed_url.port:'')+(parsed_url.path||'');
jDeploymentType.find('[data-path-elem="url"]').val(deployment_type_url);
if(parsed_url.username || options.override) jDeploymentType.find('[data-path-elem="username"]').val(parsed_url.username||'');
if(parsed_url.password || options.override) jDeploymentType.find('[data-path-elem="password"]').val(parsed_url.password||'');
}
else if(protocol=='git_ssh'){
deployment_type_url = 'ssh://'+parsed_url.hostname+(parsed_url.port?':'+parsed_url.port:'')+(parsed_url.path||'');
jDeploymentType.find('[data-path-elem="url"]').val(deployment_type_url);
if(parsed_url.username || options.override) jDeploymentType.find('[data-path-elem="username"]').val(parsed_url.username||'');
}
else if((protocol=='ftp')||(protocol=='ftps')||(protocol=='sftp')){
jDeploymentType.find('[data-path-elem="hostname"]').val(parsed_url.hostname);
deployment_type_url = protocol+'://'+parsed_url.hostname;
if(parsed_url.port || options.override) jDeploymentType.find('[data-path-elem="port"]').val(parsed_url.port||'');
if(parsed_url.username || options.override) jDeploymentType.find('[data-path-elem="username"]').val(parsed_url.username||'');
if(parsed_url.password || options.override) jDeploymentType.find('[data-path-elem="password"]').val(parsed_url.password||'');
if(parsed_url.path || options.override){
if(!options.override && (parsed_url.path =='/') && jDeploymentType.find('[data-path-elem="path"]').val()){ /* Do nothing */ }
else jDeploymentType.find('[data-path-elem="path"]').val(parsed_url.path||'');
}
}
if(deployment_type_url != url) _this.parse_url(deployment_type_url);
}
};
_this.parse_url = function(url, depth){
var parsed_url = null;
if(!url) return null;
var protocol = _this.getDeploymentType();
if(url.indexOf('//')==0) url = protocol+':' + url;
if((url.indexOf('://') < 0) || (url.indexOf('://') > url.indexOf('/'))) url = protocol+'://' + url;
if(url in parse_url_cache) return parse_url_cache[url];
XForm.Post('/_funcs/deployment_target/parse_url', {}, { url: url }, function(rslt){
parsed_url = (rslt && rslt.urlparts) || null;
if(parsed_url) parse_url_cache[url] = parsed_url;
}, undefined, { async: false });
return parsed_url;
};
_this.generateJSON = function(){
if(!jsh.$root('.xctrl_deployment_target_publish_configurator .xtab.selected[for="xctrl_deployment_target_publish_configurator_wizard"]').length) return;
//Pull JSON from form
var generated_config = {};
var generated_url = '';
var jcontainer = _this.configurator_getContainer();
//Deployment Info
var protocol = _this.getDeploymentType();
var jDeploymentType = jcontainer.find('.deployment_type_container_'+protocol);
if(protocol=='s3'){ (function(){
var bucket = jDeploymentType.find('[data-path-elem="bucket"]').val().trim();
if(bucket){
generated_url = 's3://' + bucket;
}
var s3_config = {};
var s3_config_upload_params_str = jDeploymentType.find('[data-elem="s3_config.upload_params"]').val().trim();
if(s3_config_upload_params_str){
var s3_config_upload_params = {};
try{
s3_config_upload_params = JSON.parse(s3_config_upload_params_str);
}
catch(ex){
s3_config_upload_params = {};
}
if(!_.isEmpty(s3_config_upload_params)) s3_config.upload_params = s3_config_upload_params;
}
_.each(['accessKeyId','secretAccessKey'], function(key){
var val = jDeploymentType.find('[data-elem="s3_config.'+key+'"]').val();
if(val) s3_config[key] = val;
});
if(!_.isEmpty(s3_config)) generated_config.s3_config = s3_config;
})(); }
else if(protocol=='cmshost'){ (function(){
var path = jDeploymentType.find('[data-path-elem="hostid"]').val().trim();
if(path){
generated_url = 'cmshost://' + path;
}
var cmshost_config = {};
_.each(['download_remote_templates'], function(key){
var val = jDeploymentType.find('[data-elem="cmshost_config.'+key+'"]').is(':checked');
if(val) cmshost_config[key] = true;
});
var remote_timeout = jDeploymentType.find('[data-elem="cmshost_config.remote_timeout"]').val().trim();
if(parseInt(remote_timeout).toString() != remote_timeout) remote_timeout = '';
if(remote_timeout) cmshost_config.remote_timeout = remote_timeout;
if(!_.isEmpty(cmshost_config)) generated_config.cmshost_config = cmshost_config;
})(); }
else if(protocol=='file'){ (function(){
var path = jDeploymentType.find('[data-path-elem="path"]').val().trim();
if(path){
generated_url = 'file://' + path;
}
var fs_config = {};
_.each(['delete_excess_files'], function(key){
var val = jDeploymentType.find('[data-elem="fs_config.'+key+'"]').is(':checked');
if(val) fs_config[key] = true;
});
if(!_.isEmpty(fs_config)) generated_config.fs_config = fs_config;
})(); }
else if(protocol=='git_https'){ (function(){
var parsed_url = _this.parse_url(jDeploymentType.find('[data-path-elem="url"]').val().trim());
var username = jDeploymentType.find('[data-path-elem="username"]').val().trim();
var password = jDeploymentType.find('[data-path-elem="password"]').val().trim();
if(parsed_url){
generated_url = 'git_https://';
var generated_username = parsed_url.username || username;
if(generated_username){
generated_url += username;
var generated_password = parsed_url.password || password;
if(generated_password) generated_url += ':' + generated_password;
generated_url += '@';
}
generated_url += parsed_url.hostname+(parsed_url.port?':'+parsed_url.port:'')+(parsed_url.path||'');
}
var git_config = {};
var git_config_options_str = jDeploymentType.find('[data-elem="git_config.options"]').val().trim();
if(git_config_options_str){
var git_config_options = {};
try{
git_config_options = JSON.parse(git_config_options_str);
}
catch(ex){
git_config_options = {};
}
if(!_.isEmpty(git_config_options)) git_config.options = git_config_options;
}
var git_branch = jDeploymentType.find('[data-elem="git_config.branch"]').val();
if(git_branch) git_config.branch = git_branch;
if(!_.isEmpty(git_config)) generated_config.git_config = git_config;
})(); }
else if(protocol=='git_ssh'){ (function(){
var parsed_url = _this.parse_url(jDeploymentType.find('[data-path-elem="url"]').val().trim());
var username = jDeploymentType.find('[data-path-elem="username"]').val().trim();
if(parsed_url){
generated_url = 'git_ssh://';
if(parsed_url.auth) generated_url += parsed_url.auth + '@';
else if(username) {
generated_url += username + '@';
}
generated_url += parsed_url.hostname+(parsed_url.port?':'+parsed_url.port:'')+(parsed_url.path||'');
}
var git_config = {};
var git_config_options_str = jDeploymentType.find('[data-elem="git_config.options"]').val().trim();
if(git_config_options_str){
var git_config_options = {};
try{
git_config_options = JSON.parse(git_config_options_str);
}
catch(ex){
git_config_options = {};
}
if(!_.isEmpty(git_config_options)) git_config.options = git_config_options;
}
var git_branch = jDeploymentType.find('[data-elem="git_config.branch"]').val();
if(git_branch) git_config.branch = git_branch;
if(!_.isEmpty(git_config)) generated_config.git_config = git_config;
})(); }
else if((protocol=='ftp')||(protocol=='ftps')||(protocol=='sftp')){ (function(){
var parsed_url = _this.parse_url(jDeploymentType.find('[data-path-elem="hostname"]').val().trim());
var port = jDeploymentType.find('[data-path-elem="port"]').val().trim();
if(parseInt(port).toString() != port) port = '';
var username = jDeploymentType.find('[data-path-elem="username"]').val().trim();
var password = jDeploymentType.find('[data-path-elem="password"]').val().trim();
var path = jDeploymentType.find('[data-path-elem="path"]').val().trim();
if(parsed_url){
generated_url = protocol+'://';
var generated_username = parsed_url.username || username;
if(generated_username){
generated_url += username;
var generated_password = parsed_url.password || password;
if(generated_password) generated_url += ':' + generated_password;
generated_url += '@';
}
var generated_port = (parsed_url.port || port || '').toString();
var generated_path = parsed_url.path || path;
if((parsed_url.path == '/') && path && (path != '/')) generated_path = path;
generated_url += parsed_url.hostname+(generated_port?':'+generated_port:'')+(generated_path||'');
}
var ftp_config = {};
_.each(['overwrite_all','delete_excess_files','compression','ignore_certificate_errors'], function(key){
var val = jDeploymentType.find('[data-elem="ftp_config.'+key+'"]').is(':checked');
if(val) ftp_config[key] = true;
});
if(!_.isEmpty(ftp_config)) generated_config.ftp_config = ftp_config;
})(); }
//URLs and Advanced Options
_.each(['url_prefix','published_url','url_prefix_page_override','url_prefix_media_override','page_subfolder','media_subfolder'], function(key){
var val = jcontainer.find('[data-elem="'+key+'"]').val();
var jeditbtn = jcontainer.find('.edit_button[data-target="'+key+'"]');
if(jeditbtn.length){
if(jeditbtn.hasClass('editing')) generated_config[key] = val;
}
else{
if(val) generated_config[key] = val;
}
});
_.each(['publish_local_templates','ignore_remote_template_certificate'], function(key){
var val = jcontainer.find('[data-elem="'+key+'"]').is(':checked');
if(val) generated_config[key] = true;
});
//ext_config
var ext_config = jcontainer.find('[data-elem="ext_config"]').val().trim();
if(ext_config){
try{
ext_config = JSON.parse(ext_config);
}
catch(ex){
ext_config = {};
}
for(var key in ext_config){
if(!(key in generated_config)) generated_config[key] = ext_config[key];
else if(_.includes(['s3_config','cmshost_config','fs_config','git_config','ftp_config'], key) && _.isObject(ext_config[key]) && _.isObject(generated_config[key])){
for(var subkey in ext_config[key]){
if(!(subkey in generated_config[key])) generated_config[key][subkey] = ext_config[key][subkey];
}
}
}
}
if(_this.configurator_validate().length){
xmodel.controller.form.Data._is_dirty = true;
}
else {
jcontainer.find('.src_deployment_target_publish_path').val(generated_url);
jcontainer.find('.src_deployment_target_publish_config').val(_.isEmpty(generated_config)?'{\n}':JSON.stringify(generated_config,null,2));
}
};
_this.configurator_getvalue = function(){
_this.generateJSON();
var jcontainer = _this.configurator_getContainer();
var publish_path = jcontainer.find('.src_deployment_target_publish_path').val();
if(!publish_path) publish_path = null;
var publish_config = jcontainer.find('.src_deployment_target_publish_config').val().trim();
try{
var publish_config_obj = JSON.parse(publish_config);
if(!publish_config_obj || _.isEmpty(publish_config_obj)) publish_config = null;
else publish_config = JSON.stringify(publish_config_obj);
}
catch(ex){ /* Do nothing */ }
return {
publish_path: publish_path,
publish_config: publish_config,
};
};
_this.validate_json = function(errors, caption, val){
var str = (val||'').trim();
try{
if(str) JSON.stringify(JSON.parse(str));
}
catch(ex){
errors.push('Invalid '+(caption||'JSON')+': '+ex.toString());
return false;
}
return true;
};
_this.configurator_validate = function(){
var errors = [];
var jcontainer = _this.configurator_getContainer();
var settingsTab = !!jsh.$root('.xctrl_deployment_target_publish_configurator .xtab.selected[for="xctrl_deployment_target_publish_configurator_wizard"]').length;
if(settingsTab){
var protocol = _this.getDeploymentType();
var jDeploymentType = jcontainer.find('.deployment_type_container_'+protocol);
if(protocol=='s3'){ (function(){
if(!jDeploymentType.find('[data-path-elem="bucket"]').val().trim()) errors.push('Bucket is required for Amazon S3 deployment');
if(!jDeploymentType.find('[data-elem="s3_config.accessKeyId"]').val().trim()) errors.push('Access Key is required for Amazon S3 deployment');
if(!jDeploymentType.find('[data-elem="s3_config.secretAccessKey"]').val().trim()) errors.push('Secret Key is required for Amazon S3 deployment');
if(!_this.validate_json(errors, 'File Upload Settings', jDeploymentType.find('[data-elem="s3_config.upload_params"]').val())) return;
})(); }
else if(protocol=='cmshost'){ (function(){
if(!jDeploymentType.find('[data-path-elem="hostid"]').val().trim()) errors.push('Host ID is required for CMS Host deployment');
var remote_timeout = jDeploymentType.find('[data-elem="cmshost_config.remote_timeout"]').val();
if(remote_timeout && (remote_timeout != (parseInt(remote_timeout)).toString())) errors.push('Invalid '+protocol.toUpperCase()+' remote_timeout');
})(); }
else if(protocol=='file'){ (function(){
if(!jDeploymentType.find('[data-path-elem="path"]').val().trim()) errors.push('Path is required for Local Filesystem deployment');
})(); }
else if(protocol=='git_https'){ (function(){
if(!jDeploymentType.find('[data-path-elem="url"]').val().trim()) errors.push('Git URL is required for Git HTTPS deployment');
if(!_this.validate_json(errors, 'Git Config', jDeploymentType.find('[data-elem="git_config.options"]').val())) return;
})(); }
else if(protocol=='git_ssh'){ (function(){
if(!jDeploymentType.find('[data-path-elem="url"]').val().trim()) errors.push('Git URL is required for Git SSH deployment');
if(!_this.validate_json(errors, 'Git Config', jDeploymentType.find('[data-elem="git_config.options"]').val())) return;
})(); }
else if((protocol=='ftp')||(protocol=='ftps')||(protocol=='sftp')){ (function(){
if(!jDeploymentType.find('[data-path-elem="hostname"]').val().trim()) errors.push('Hostname is required for '+protocol.toUpperCase()+' deployment');
var port = jDeploymentType.find('[data-path-elem="port"]').val();
if(port && (port != (parseInt(port)).toString())) errors.push('Invalid '+protocol.toUpperCase()+' port');
var path = jDeploymentType.find('[data-path-elem="path"]').val().trim();
if(path && (path[0] != '/')) errors.push(protocol.toUpperCase()+' Path must begin with "/"');
})(); }
if(errors.length) return errors;
var page_subfolder = jcontainer.find('[data-elem="page_subfolder"]').val();
if(page_subfolder && (page_subfolder[page_subfolder.length-1] != '/')) errors.push('Page Files Subfolder should end with "/"');
var media_subfolder = jcontainer.find('[data-elem="media_subfolder"]').val();
if(media_subfolder && (media_subfolder[media_subfolder.length-1] != '/')) errors.push('Media Files Subfolder should end with "/"');
if(!_this.validate_json(errors, 'Extended Config', jcontainer.find('[data-elem="ext_config"]').val())) return errors;
}
else {
//JSON tab
if(!_this.validate_json(errors, 'Publish Config', jcontainer.find('.src_deployment_target_publish_config').val())) return errors;
}
return errors;
};
_this.deployment_target_publish_path_getvalue = function(val, field, xmodel){
return _this.configurator_getvalue().publish_path;
};
_this.deployment_target_publish_config_getvalue = function(val, field, xmodel){
return _this.configurator_getvalue().publish_config;
};
})();