JS/PHP features update. Closes #4 Closes #3

This commit is contained in:
Malishev Dmitry 2011-12-19 11:12:17 +02:00
parent 6689220cd2
commit d876168998
18 changed files with 1042 additions and 748 deletions

View file

@ -11,9 +11,9 @@ $('document').ready(function() {
App.Utils.detectBrowser(); App.Utils.detectBrowser();
App.Ref.init(); App.Ref.init();
App.Env.world = 'USER'; //App.Env.world = 'USER';
// Disabled cookie tab restoring. Enable if needed // Disabled cookie tab restoring. Enable if needed
/*if ('undefined' != typeof App.Tmp.loadTAB) { if ('undefined' != typeof App.Tmp.loadTAB) {
App.Env.world = App.Tmp.loadTAB; App.Env.world = App.Tmp.loadTAB;
} }
@ -25,7 +25,7 @@ $('document').ready(function() {
else { else {
App.Env.world = App.Constants.TABS[0]; App.Env.world = App.Constants.TABS[0];
} }
}*/ }
App.Pages.init(); App.Pages.init();
App.Core.listen(); App.Core.listen();

View file

@ -1,3 +1,21 @@
App.Actions.toggle_suspend = function(evt)
{
var elm = $(evt.target);
var ref = elm.parents('.form');
ref.removeClass('form-suspended');
fb.warn(ref);
var ref_checkbox = ref.find('input[name="SUSPEND"]');
ref_checkbox.val() == 'on' ? ref_checkbox.val('off') : ref_checkbox.val('on'); // switch state
if (ref_checkbox.val() == 'on') { // set class on new state
ref.addClass('form-suspended');
fb.warn('SUSP');
}
else {
ref.removeClass('form-suspended');
fb.warn('UNSUSP');
}
}
App.Actions.toggle_custom_select = function(evt) App.Actions.toggle_custom_select = function(evt)
{ {
var elm = $(evt.target); var elm = $(evt.target);
@ -54,10 +72,11 @@ App.Actions.back_to_login = function()
{ {
$('body').addClass('page-auth'); $('body').addClass('page-auth');
var tpl = App.Templates.get('login', 'popup'); var tpl = App.Templates.get('login', 'popup');
tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png')); tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
tpl.set(':YEAR', new Date().getFullYear()); tpl.set(':YEAR', new Date().getFullYear());
tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email); tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
tpl.set(':EMAIL', App.Settings.VestaAbout.company_name); tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version); tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
$('body').prepend(tpl.finalize()); $('body').prepend(tpl.finalize());
$('#change-psw-block').remove(); $('#change-psw-block').remove();
@ -73,12 +92,13 @@ App.Actions.change_password = function(evt)
} }
var tpl = App.Templates.get('change_psw', 'popup'); var tpl = App.Templates.get('change_psw', 'popup');
tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png')); tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
tpl.set(':YEAR', new Date().getFullYear()); tpl.set(':YEAR', new Date().getFullYear());
tpl.set(':CAPTCHA_URL', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999)); tpl.set(':CAPTCHA_URL', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999));
tpl.set(':CAPTCHA_URL_2', App.Helpers.generateUrl('captcha.php')); tpl.set(':CAPTCHA_URL_2', App.Helpers.generateUrl('captcha.php'));
tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email); tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
tpl.set(':EMAIL', App.Settings.VestaAbout.company_name); tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version); tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
$('#auth-block').remove(); $('#auth-block').remove();
$('body').prepend(tpl.finalize()); $('body').prepend(tpl.finalize());
@ -104,10 +124,11 @@ App.Actions.authorize = function()
$('#page').addClass('hidden'); $('#page').addClass('hidden');
$('body').addClass('page-auth'); $('body').addClass('page-auth');
var tpl = App.Templates.get('login', 'popup'); var tpl = App.Templates.get('login', 'popup');
tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png')); tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
tpl.set(':YEAR', new Date().getFullYear()); tpl.set(':YEAR', new Date().getFullYear());
tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email); tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
tpl.set(':EMAIL', App.Settings.VestaAbout.company_name); tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version); tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
$('body').prepend(tpl.finalize()); $('body').prepend(tpl.finalize());
$(document).ready(function(){ $(document).ready(function(){
@ -123,12 +144,15 @@ App.Actions.authorize = function()
App.Actions.new_entry = function() { App.Actions.new_entry = function() {
if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {fb.log(1); if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {fb.log(1);
App.Pages[App.Env.world].new_entry(); App.Pages[App.Env.world].new_entry();
} else {fb.log(2); } else {
var form_id = App.Constants[App.Env.world + '_FORM_ID']; var form_id = App.Constants[App.Env.world + '_FORM_ID'];
$('#'+form_id).remove(); $('#'+form_id).remove();
var build_method = App.Env.getWorldName() + '_form'; var build_method = App.Env.getWorldName() + '_form';
var tpl = App.HTML.Build[build_method]({}, form_id); var tpl = App.HTML.Build[build_method]({}, form_id);
App.Ref.CONTENT.prepend(tpl); var box = $('<div>').html(tpl);
$(box).find('.suspended').addClass('hidden');
App.Ref.CONTENT.prepend($(box).html());
App.Helpers.updateScreen(); App.Helpers.updateScreen();
} }
} }
@ -158,7 +182,7 @@ App.Actions.delete_entry = function(evt)
return; return;
} }
var elm = $(evt.target); var elm = $(evt.target);
var elm = elm.hasClass('row') ? elm : elm.parents('.row'); var elm = elm.hasClass('form') ? elm : elm.parents('.form');
App.Model.remove(App.Env.world, elm); App.Model.remove(App.Env.world, elm);
} }
@ -182,18 +206,25 @@ App.Actions.view_template_settings = function(evt)
var elm = $(evt.target); var elm = $(evt.target);
var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item'); var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
var tpl_name = $(ref).val() || $(ref).text(); var tpl_name = $(ref).val() || $(ref).text();
fb.log(tpl_name); App.Helpers.openInnerPopup(elm, App.Env.initialParams.WEB_DOMAIN.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
App.Helpers.openInnerPopup(elm, App.Env.initialParams.WEB_DOMAIN.TPL[tpl_name].DESCR || tpl_name);
} }
App.Actions.view_dns_template_settings = function(evt) App.Actions.view_dns_template_settings = function(evt)
{
var elm = $(evt.target);
var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
var tpl_name = $(ref).val() || $(ref).text();
App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
}
/*App.Actions.view_dns_template_settings = function(evt)
{ {
var elm = $(evt.target); var elm = $(evt.target);
var ref = elm.prev('.tpl-item'); var ref = elm.prev('.tpl-item');
var tpl_name = $(ref).val() || $(ref).text(); var tpl_name = $(ref).val() || $(ref).text();
fb.log(tpl_name);
App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name); App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, '');
} }*/
App.Actions.add_subrecord_dns = function(evt) App.Actions.add_subrecord_dns = function(evt)
{ {
@ -392,9 +423,11 @@ App.Actions.delete_subentry = function(evt)
$(ref).remove(); $(ref).remove();
} }
App.Actions.generate_pass = function() App.Actions.generate_pass = function(evt)
{ {
$('.password').val(App.Helpers.generatePassword()); var elm = $(evt.target);
var ref = elm.parents('.form-row');
$('.password', ref).val(App.Helpers.generatePassword());
} }
App.Actions.toggle_section = function(evt) App.Actions.toggle_section = function(evt)
@ -420,7 +453,7 @@ App.Actions.close_inner_popup = function(evt)
App.Actions.open_inner_popup = function(evt) App.Actions.open_inner_popup = function(evt)
{ {
var elm = $(evt.target); var elm = $(evt.target);
App.Helpers.openInnerPopup(elm, $(elm).next('.inner-popup-html').val()); App.Helpers.openInnerPopup(elm, $(elm).next('.inner-popup-html').val(), 'Details');
} }
App.Actions.add_db_user = function(evt) App.Actions.add_db_user = function(evt)
@ -488,7 +521,7 @@ App.Actions.delete_ns = function(evt)
App.Actions.view_full_ns_list = function(evt) App.Actions.view_full_ns_list = function(evt)
{ {
var elm = $(evt.target); var elm = $(evt.target);
App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html()); App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html(), 'NS list');
} }
App.Actions.view_template_info = function(evt) App.Actions.view_template_info = function(evt)
@ -503,7 +536,7 @@ App.Actions.view_template_info = function(evt)
$.each(reply.data, function(key) { $.each(reply.data, function(key) {
html += '<li><strong>'+key+':</strong> '+reply.data[key]+'</li>'; html += '<li><strong>'+key+':</strong> '+reply.data[key]+'</li>';
}); });
App.Helpers.openInnerPopup(elm, '<ul>'+html+'</ul>'); App.Helpers.openInnerPopup(elm, '<ul>'+html+'</ul>', 'Template Info');
} }
}); });
} }
@ -522,13 +555,13 @@ App.Actions.toggle_stats_block = function(evt)
App.Actions.exec_v_console = function(evt) App.Actions.exec_v_console = function(evt)
{ {
evt.preventDefault(); evt.preventDefault();
App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases'); App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
} }
App.Actions.view_profile_settings = function(evt) App.Actions.view_profile_settings = function(evt)
{ {
evt.preventDefault(); evt.preventDefault();
App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases'); App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
} }
App.Actions.select_all = function(evt) App.Actions.select_all = function(evt)

View file

@ -93,7 +93,9 @@ var App = {
DB: {}, DB: {},
DNS: {}, DNS: {},
IP: {}, IP: {},
CRON: {} CRON: {},
BACKUPS: {},
STATS: {}
} }
}, },
Messages: {}, Messages: {},
@ -116,7 +118,9 @@ var App = {
DB: {}, DB: {},
DNS: {}, DNS: {},
IP: {}, IP: {},
CRON: {} CRON: {},
BACKUPS: {},
STATS: {}
}, },
Ref: {}, Ref: {},
Tmp: { AJAX_SYNCRONOUS:{} }, Tmp: { AJAX_SYNCRONOUS:{} },

View file

@ -38,6 +38,12 @@ App.Helpers.getHumanTabName = function()
if (App.Env.world == 'DB') { if (App.Env.world == 'DB') {
return 'DATABASE'; return 'DATABASE';
} }
if (App.Env.world == 'BACKUPS') {
return 'BACKUP';
}
if (App.Env.world == 'STATS') {
return 'STATS';
}
return App.Env.world; return App.Env.world;
} }
@ -241,10 +247,10 @@ App.Helpers.getFormValuesFromElement = function(ref)
App.Helpers.updateScreen = function() App.Helpers.updateScreen = function()
{ {
App.Ajax.request('MAIN.getInitial', {}, function(reply){ /*App.Ajax.request('MAIN.getInitial', {}, function(reply){
App.Env.initialParams = reply.data; App.Env.initialParams = reply.data;
App.Helpers.updateInitial(); App.Helpers.updateInitial();
}); });*/
$('.row:first').addClass('first-row'); $('.row:first').addClass('first-row');
Custom.init(); Custom.init();
} }
@ -256,7 +262,7 @@ App.Helpers.alert = function(msg)
App.Helpers.isEmpty = function(o) App.Helpers.isEmpty = function(o)
{ {
return jQuery.isEmptyObject(o); return 'undefined' == typeof o ? true : jQuery.isEmptyObject(o);
} }
App.Helpers.liveValidate = function() App.Helpers.liveValidate = function()
@ -283,8 +289,9 @@ App.Helpers.Warn = function(msg)
alert(msg); alert(msg);
} }
App.Helpers.openInnerPopup = function(elm, html) App.Helpers.openInnerPopup = function(elm, html, title)
{ {
var title = title || '';
App.Helpers.closeInnerPopup(); App.Helpers.closeInnerPopup();
var offset = $(elm).offset(); var offset = $(elm).offset();
@ -292,6 +299,7 @@ App.Helpers.openInnerPopup = function(elm, html)
tpl.set(':CONTENT', html); tpl.set(':CONTENT', html);
tpl.set(':LEFT', offset.left); tpl.set(':LEFT', offset.left);
tpl.set(':TOP', offset.top); tpl.set(':TOP', offset.top);
tpl.set(':POPUP_TITLE', title);
$(document.body).append(tpl.finalize()); $(document.body).append(tpl.finalize());
} }

View file

@ -1,160 +1,244 @@
App.HTML.setTplKeys = function(tpl, o, empty) App.HTML.setTplKeys = function (tpl, o, empty) {
{
var empty = empty || ''; var empty = empty || '';
fb.log(empty); fb.log(empty);
tpl.set(':source', $.toJSON(o).replace(/'/gi, "\\'")) tpl.set(':source', $.toJSON(o).replace(/'/gi, "\\'"))
$(o).each(function(i, object) $(o).each(function (i, object) {
{ $.each(o, function (key) {
$.each(o, function(key)
{
var val = o[key]; var val = o[key];
if (empty == true) { if (empty == true) {
tpl.set(':' + key, val || ''); tpl.set(':' + key, val || '');
} } else {
else {
tpl.set(':' + key, val || ''); tpl.set(':' + key, val || '');
} }
}); });
}); });
return tpl; return tpl;
} }
App.HTML.makeDatabases = function(databases) //
{ // BUILD FORMS
var acc = []; //
$(databases).each(function(i, o)
{
var tpl = App.Templates.get('database', 'database');
tpl.set(':name', o.Database);
tpl.set(':db_name', o.Database);
acc[acc.length++] = tpl.finalize();
});
return acc.done(); App.HTML.Build.dns_form = function (options, id) {
}
App.HTML.makeDbTableList = function(data)
{
var acc = [];
$(data).each(function(i, o)
{
var name = App.Helpers.getFirstValue(o);
var tpl = App.Templates.get('database_table', 'database');
tpl.set(':name', name);
tpl.set(':table_name', name);
acc[acc.length++] = tpl.finalize();
});
return acc.done();
}
App.HTML.makeDbFieldsList = function(data)
{
var acc = [];
$(data).each(function(i, o)
{
var details = [o['Type'], o['Null'], o['Key'], o['Default'], o['Extra']].join(' ');
var tpl = App.Templates.get('database_field', 'database');
tpl.set(':name', o.Field);
tpl.set(':details', details);
acc[acc.length++] = tpl.finalize();
});
return acc.done();
}
App.HTML.Build.dns_form = function(options, id)
{
if ('undefined' == typeof App.Env.initialParams) { if ('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.'); return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
} }
var tpl = App.Templates.get('FORM', 'dns'); var tpl = App.Templates.get('FORM', 'dns');
tpl.set(':source', options); tpl.set(':source', options);
options = App.Helpers.evalJSON(options) || {}; options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) { if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New dns record'); tpl.set(':title', 'New dns record');
tpl.set(':save_button', 'ADD'); tpl.set(':save_button', 'ADD');
} } else {
else {
tpl.set(':title', 'Edit dns record'); tpl.set(':title', 'Edit dns record');
tpl.set(':save_button', 'SAVE'); tpl.set(':save_button', 'SAVE');
} }
tpl.set(':id', id || ''); tpl.set(':id', id || '');
tpl.set(':DNS_DOMAIN', options.DNS_DOMAIN || ''); tpl.set(':DNS_DOMAIN', options.DNS_DOMAIN || '');
tpl.set(':IP', options.IP || ''); tpl.set(':IP', options.IP || '');
tpl.set(':TTL', options.TTL || ''); tpl.set(':TTL', options.TTL || '');
tpl.set(':SOA', options.SOA || ''); tpl.set(':SOA', options.SOA || '');
tpl.set(':DATE', options.DATE || ''); tpl.set(':DATE', options.DATE || '');
tpl = App.HTML.Build.dns_selects(tpl, options); tpl = App.HTML.Build.dns_selects(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.ip_form = function(options, id) App.HTML.Build.ip_form = function (options, id) {
{
if ('undefined' == typeof App.Env.initialParams) { if ('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.'); return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
} }
var tpl = App.Templates.get('FORM', 'ip'); var tpl = App.Templates.get('FORM', 'ip');
tpl.set(':source', options); tpl.set(':source', options);
options = App.Helpers.evalJSON(options) || {}; options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) { if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New ip address'); tpl.set(':title', 'New ip address');
tpl.set(':save_button', 'ADD'); tpl.set(':save_button', 'ADD');
} } else {
else {
tpl.set(':title', 'Edit ip address'); tpl.set(':title', 'Edit ip address');
tpl.set(':save_button', 'SAVE'); tpl.set(':save_button', 'SAVE');
} }
tpl.set(':id', id || ''); tpl.set(':id', id || '');
tpl.set(':IP_ADDRESS', options.IP_ADDRESS || ''); tpl.set(':IP_ADDRESS', options.IP_ADDRESS || '');
tpl.set(':NETMASK', options.NETMASK || ''); tpl.set(':NETMASK', options.NETMASK || '');
tpl.set(':NAME', options.NAME || ''); tpl.set(':NAME', options.NAME || '');
tpl = App.HTML.Build.ip_selects(tpl, options); tpl = App.HTML.Build.ip_selects(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.user_form = function (options, id) {
App.HTML.Build.options = function(initial, default_value) var in_edit = false;
{ if (!App.Helpers.isEmpty(options)) {
var opts = []; in_edit = true;
$.each(initial, function(key){ }
var selected = key == default_value ? 'selected="selected"' : ''; if ('undefined' == typeof App.Env.initialParams) {
opts[opts.length++] = '<option value="'+key+'" '+selected+'>'+initial[key]+'</options>'; return alert('Please wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'user');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New user');
tpl.set(':save_button', 'ADD');
} else {
tpl.set(':title', 'Edit user');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.USER;
if (in_edit == true) {
options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
var ns = [];
$([3, 4, 5, 6, 7, 8]).each(function (i, index) {
if (options['NS' + index].trim() != '') {
var tpl_ns = App.Templates.get('NS_INPUT', 'user');
tpl_ns.set(':NS_LABEL', 'NS #' + (index));
tpl_ns.set(':NAME', options['NS' + index]);
ns[ns.length++] = tpl_ns.finalize();
}
}); });
return opts.join(''); ns[ns.length++] = App.Templates.get('PLUS_ONE_NS', 'user').finalize();
tpl.set(':NS', ns.done());
} else {
tpl.set(':NS', '');
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.user_selects(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
if (options.REPORTS_ENABLED == 'yes') {
tpl.set(':CHECKED', 'checked="checked"');
} else {
tpl.set(':CHECKED', '');
}
if (!in_edit) {
tpl.set(':REPORTS_ENABLED_EDITABLE', 'hidden');
} }
App.HTML.Build.ip_entry = function(o) return tpl.finalize();
{ }
App.HTML.Build.web_domain_form = function (options, id) {
if ('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var in_edit = false;
if (!App.Helpers.isEmpty(options)) {
in_edit = true;
}
var tpl = App.Templates.get('FORM', 'web_domain');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New WEB domain');
tpl.set(':save_button', 'ADD');
} else {
tpl.set(':title', 'Edit WEB domain');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.WEB_DOMAIN;
if (in_edit == true) {
options.STATS_PASSWORD = options.STATS_LOGIN.trim() != '' ? App.Settings.PASSWORD_IMMUTE : '';
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.web_domain_selects(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
if (options.CGI == 'yes') {
tpl.set(':CHECKED_CGI', 'checked="checked"');
}
if (options.ELOG == 'yes') {
tpl.set(':CHECKED_ELOG', 'checked="checked"');
}
if (options.STATS_LOGIN.trim() != '') {
tpl.set(':STAT_AUTH', 'checked="checked"');
tpl.set(':ACTIVE_LOGIN', '');
tpl.set(':ACTIVE_PASSWORD', '');
tpl.set(':stats_auth_checked', 'checked="checked"');
} else {
tpl.set(':ACTIVE_LOGIN', 'hidden');
tpl.set(':ACTIVE_PASSWORD', 'hidden');
tpl.set(':stats_auth_checked', '');
}
return tpl.finalize();
}
App.HTML.Build.db_form = function (options, id) {
var in_edit = false;
if (!App.Helpers.isEmpty(options)) {
in_edit = true;
}
if ('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'db');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New database');
tpl.set(':save_button', 'ADD');
} else {
tpl.set(':title', 'Edit database "' + options.DB + '"');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.DB;
if (in_edit == true) {
options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.db_selects(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
return tpl.finalize();
}
App.HTML.Build.cron_form = function (options, id) {
if ('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'cron');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New cron entry');
tpl.set(':save_button', 'ADD');
} else {
tpl.set(':title', 'Edit cron entry');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : {
DAY: '',
MONTH: '',
WDAY: '',
HOUR: '',
CMD: '',
MIN: ''
};
tpl = App.HTML.setTplKeys(tpl, options);
tpl = App.HTML.toggle_suspended_form(tpl, options);
return tpl.finalize();
}
//
// BUILD ENTRIES
//
App.HTML.Build.ip_entry = function (o) {
var tpl = App.Templates.get('ENTRY', 'ip'); var tpl = App.Templates.get('ENTRY', 'ip');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
/*if (App.Constants.SUSPENDED_YES == o.SUSPENDED) {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_ENABLED', 'ip');
}
else {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_DISABLED', 'ip');
}*/
tpl.set(':SUSPENDED_TPL', '');
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.dns_entry = function (o, is_new) {
App.HTML.Build.dns_entry = function(o, is_new)
{
var tpl = App.Templates.get('ENTRY', 'dns'); var tpl = App.Templates.get('ENTRY', 'dns');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
var ip = o.IP.split('.'); var ip = o.IP.split('.');
tpl.set(':IP', ip.join('<span class="dot">.</span>')); tpl.set(':IP', ip.join('<span class="dot">.</span>'));
tpl.set(':CHECKED', ''); tpl.set(':CHECKED', '');
@ -163,20 +247,11 @@ App.HTML.Build.dns_entry = function(o, is_new)
tpl.set(':DATE', now.format("d.mm.yyyy")); tpl.set(':DATE', now.format("d.mm.yyyy"));
} }
tpl.set(':TPL_VAL', o.TPL); tpl.set(':TPL_VAL', o.TPL);
/*if (App.Constants.SUSPENDED_YES == o.SUSPEND) { tpl = App.HTML.toggle_suspended_entry(tpl, o);
var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
}
else {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
}*/
tpl.set(':SUSPENDED_TPL', '');
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.user_entry = function (o, key) {
App.HTML.Build.user_entry = function(o, key)
{
var processed_data = { var processed_data = {
'NICKNAME': key, 'NICKNAME': key,
'U_DISK_PERCENTAGE': o.U_DISK > 0 ? o.U_DISK / o.DISK_QUOTA * 100 : 1, 'U_DISK_PERCENTAGE': o.U_DISK > 0 ? o.U_DISK / o.DISK_QUOTA * 100 : 1,
@ -197,14 +272,10 @@ App.HTML.Build.user_entry = function(o, key)
o.U_BANDWIDTH_PERCENTAGE_3 = o.U_BANDWIDTH_PERCENTAGE; o.U_BANDWIDTH_PERCENTAGE_3 = o.U_BANDWIDTH_PERCENTAGE;
var tpl = App.Templates.get('ENTRY', 'user'); var tpl = App.Templates.get('ENTRY', 'user');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
tpl.set(':SUSPENDED_TPL', '');//sub_tpl.finalize());
var ns = []; var ns = [];
var ns_full = []; var ns_full = [];
$([1, 2, 3, 4, 5, 6, 7, 8]).each(function (i, index) {
$([1,2,3,4,5,6,7,8]).each(function(i, index)
{
var key = 'NS' + index; var key = 'NS' + index;
if ('undefined' != typeof o[key]) { if ('undefined' != typeof o[key]) {
if (o[key].trim() != '') { if (o[key].trim() != '') {
@ -218,18 +289,15 @@ App.HTML.Build.user_entry = function(o, key)
} }
} }
}); });
if (ns_full.length <= App.Settings.USER_VISIBLE_NS) { if (ns_full.length <= App.Settings.USER_VISIBLE_NS) {
tpl.set(':NS', ns.done()); tpl.set(':NS', ns.done());
} } else {
else {
var ns_custom = App.Templates.get('NS_MINIMIZED', 'user'); var ns_custom = App.Templates.get('NS_MINIMIZED', 'user');
ns_custom.set(':NS_MINI', ns.done()); ns_custom.set(':NS_MINI', ns.done());
ns_custom.set(':NS_FULL', ns_full.done()); ns_custom.set(':NS_FULL', ns_full.done());
ns_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - ns_full.length)); ns_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - ns_full.length));
tpl.set(':NS', ns_custom.finalize()); tpl.set(':NS', ns_custom.finalize());
} }
tpl = App.HTML.Build.user_web_tpl(tpl, o); tpl = App.HTML.Build.user_web_tpl(tpl, o);
tpl.set(':REPORTS_ENABLED', o.REPORTS_ENABLED == 'yes' ? 'enabled' : 'DISABLED'); tpl.set(':REPORTS_ENABLED', o.REPORTS_ENABLED == 'yes' ? 'enabled' : 'DISABLED');
if (o.U_DISK_PERCENTAGE > 100) { if (o.U_DISK_PERCENTAGE > 100) {
@ -240,12 +308,10 @@ App.HTML.Build.user_entry = function(o, key)
tpl.set(':OVER_BAR', tpl_over.finalize()); tpl.set(':OVER_BAR', tpl_over.finalize());
tpl.set(':U_DISK_PERCENTAGE_3', 100); tpl.set(':U_DISK_PERCENTAGE_3', 100);
tpl.set(':OVER_DRAFT_VALUE', 'overdraft'); tpl.set(':OVER_DRAFT_VALUE', 'overdraft');
} } else {
else {
tpl.set(':OVER_BAR', ''); tpl.set(':OVER_BAR', '');
tpl.set(':OVER_DRAFT_VALUE', ''); tpl.set(':OVER_DRAFT_VALUE', '');
} }
// OVER BANDWIDTH
if (o.U_BANDWIDTH_PERCENTAGE > 100) { if (o.U_BANDWIDTH_PERCENTAGE > 100) {
var tpl_over = App.Templates.get('over_bar', 'general'); var tpl_over = App.Templates.get('over_bar', 'general');
var difference = parseInt(o.U_BANDWIDTH_PERCENTAGE, 10) - 100; var difference = parseInt(o.U_BANDWIDTH_PERCENTAGE, 10) - 100;
@ -254,181 +320,47 @@ App.HTML.Build.user_entry = function(o, key)
tpl.set(':OVER_BAR_2', tpl_over.finalize()); tpl.set(':OVER_BAR_2', tpl_over.finalize());
tpl.set(':U_BANDWIDTH_PERCENTAGE_3', 100); tpl.set(':U_BANDWIDTH_PERCENTAGE_3', 100);
tpl.set(':OVER_DRAFT_VALUE_2', 'overdraft'); tpl.set(':OVER_DRAFT_VALUE_2', 'overdraft');
} } else {
else {
tpl.set(':OVER_BAR_2', ''); tpl.set(':OVER_BAR_2', '');
tpl.set(':OVER_DRAFT_VALUE_2', ''); tpl.set(':OVER_DRAFT_VALUE_2', '');
} }
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.web_domain_entry = function (o, key) {
App.HTML.Build.user_form = function(options, id)
{
var in_edit = false;
if (!App.Helpers.isEmpty(options)) {
in_edit = true;
}
if('undefined' == typeof App.Env.initialParams) {
return alert('Please wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'user');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New user');
tpl.set(':save_button', 'ADD');
}
else {
tpl.set(':title', 'Edit user');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.USER;
if (in_edit == true) {
options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
// NS
var ns = [];
$([3,4,5,6,7,8]).each(function(i, index)
{
if (options['NS'+index].trim() != '') {
var tpl_ns = App.Templates.get('NS_INPUT', 'user');
tpl_ns.set(':NS_LABEL', 'NS #' + (index));
tpl_ns.set(':NAME', options['NS'+index]);
ns[ns.length++] = tpl_ns.finalize();
}
});
ns[ns.length++] = App.Templates.get('PLUS_ONE_NS', 'user').finalize();
tpl.set(':NS', ns.done());
}
else {
tpl.set(':NS', '');
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.user_selects(tpl, options);
if (options.REPORTS_ENABLED == 'yes') {
tpl.set(':CHECKED', 'checked="checked"');
}
else {
tpl.set(':CHECKED', '');
}
if (!in_edit) {
tpl.set(':REPORTS_ENABLED_EDITABLE', 'hidden');
}
return tpl.finalize();
}
App.HTML.Build.web_domain_entry = function(o, key)
{
var processed_data = { var processed_data = {
DOMAIN: key DOMAIN: key
}; };
var o = $.extend(o, processed_data); var o = $.extend(o, processed_data);
var tpl = App.Templates.get('ENTRY', 'web_domain'); var tpl = App.Templates.get('ENTRY', 'web_domain');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
if (App.Constants.SUSPENDED_YES == o.SUSPEND) {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
}
else {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
}
tpl.set(':SUSPENDED_TPL', sub_tpl.finalize());
if (o.STATS_LOGIN.trim() != '') { if (o.STATS_LOGIN.trim() != '') {
tpl.set(':STATS_AUTH', '+auth'); tpl.set(':STATS_AUTH', '+auth');
} } else {
else {
tpl.set(':STATS_AUTH', ''); tpl.set(':STATS_AUTH', '');
} }
tpl.set(':DISK', App.Env.initialParams.PROFILE.BANDWIDTH); tpl.set(':DISK', App.Env.initialParams.PROFILE.BANDWIDTH);
tpl.set(':BANDWIDTH', App.Env.initialParams.PROFILE.DISK); tpl.set(':BANDWIDTH', App.Env.initialParams.PROFILE.DISK);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.web_domain_form = function(options, id) App.HTML.Build.mail_entry = function (o, key) {
{
if('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var in_edit = false;
if (!App.Helpers.isEmpty(options)) {
in_edit = true;
}
var tpl = App.Templates.get('FORM', 'web_domain');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New WEB domain');
tpl.set(':save_button', 'ADD');
}
else {
tpl.set(':title', 'Edit WEB domain');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.WEB_DOMAIN;
if (in_edit == true) {
options.STATS_PASSWORD = options.STATS_LOGIN.trim() != '' ? App.Settings.PASSWORD_IMMUTE : '';
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.web_domain_selects(tpl, options);
if (options.CGI == 'yes') {
tpl.set(':CHECKED_CGI', 'checked="checked"');
}
if (options.ELOG == 'yes') {
tpl.set(':CHECKED_ELOG', 'checked="checked"');
}
if (options.STATS_LOGIN.trim() != '') {
tpl.set(':STAT_AUTH', 'checked="checked"');
tpl.set(':ACTIVE_LOGIN', '');
tpl.set(':ACTIVE_PASSWORD', '');
tpl.set(':stats_auth_checked', 'checked="checked"');
}
else {
tpl.set(':ACTIVE_LOGIN', 'hidden');
tpl.set(':ACTIVE_PASSWORD', 'hidden');
tpl.set(':stats_auth_checked', '');
}
return tpl.finalize();
}
App.HTML.Build.mail_entry = function(o, key)
{
var processed_data = { var processed_data = {
DOMAIN: key DOMAIN: key
}; };
var o = $.extend(o, processed_data); var o = $.extend(o, processed_data);
var tpl = App.Templates.get('ENTRY', 'mail'); var tpl = App.Templates.get('ENTRY', 'mail');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.db_entry = function (o, key) {
App.HTML.Build.db_entry = function(o, key)
{
var user_list_html = []; var user_list_html = [];
$(o['USERS']).each(function(i, o) $(o['USERS']).each(function (i, o) {
{
var tpl = App.Templates.get('USER_ITEM', 'db'); var tpl = App.Templates.get('USER_ITEM', 'db');
tpl.set(':NAME', o); tpl.set(':NAME', o);
user_list_html.push(tpl.finalize()); user_list_html.push(tpl.finalize());
@ -443,132 +375,155 @@ App.HTML.Build.db_entry = function(o, key)
'DISK': App.Helpers.getMbHuman(o.DISK) 'DISK': App.Helpers.getMbHuman(o.DISK)
}; };
var o = $.extend(o, processed_data); var o = $.extend(o, processed_data);
var tpl = App.Templates.get('ENTRY', 'db'); var tpl = App.Templates.get('ENTRY', 'db');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
return tpl.finalize(); return tpl.finalize();
} }
App.HTML.Build.db_form = function(options, id) App.HTML.Build.cron_entry = function (o, key) {
{
var in_edit = false;
if (!App.Helpers.isEmpty(options)) {
in_edit = true;
}
if('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'db');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New database');
tpl.set(':save_button', 'ADD');
}
else {
tpl.set(':title', 'Edit database "'+options.DB+'"');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : App.Empty.DB;
if (in_edit == true) {
options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
}
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.db_selects(tpl, options);
return tpl.finalize();
}
App.HTML.Build.cron_entry = function(o, key)
{
var processed_data = { var processed_data = {
DOMAIN: key DOMAIN: key
}; };
var o = $.extend(o, processed_data); var o = $.extend(o, processed_data);
var tpl = App.Templates.get('ENTRY', 'cron'); var tpl = App.Templates.get('ENTRY', 'cron');
tpl = App.HTML.setTplKeys(tpl, o); tpl = App.HTML.setTplKeys(tpl, o);
tpl = App.HTML.toggle_suspended_entry(tpl, o);
if (App.Constants.SUSPENDED_YES == o.SUSPENDED) { return tpl.finalize();
var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
} }
else {
//
// GENERAL METHODS
//
App.HTML.Build.backup_list = function(backups)
{
if (!backups || backups.length == 0) {
return '<br /><br /><center><h1>Backups are not available</h1></center>';
}
var acc = [];
$.each(backups, function(key) {
var bckp = backups[key];
var tpl = App.Templates.get('ENTRY', 'backup');
tpl.set(':CREATED_AT', key);
tpl.set(':CREATED_AT_TIME', bckp.TIME);
tpl.set(':CREATED_AT_TIME', bckp.TIME);
acc[acc.length++] = tpl.finalize()
})
var wrap = App.Templates.get('WRAPPER', 'backup');
wrap.set(':CONTENT', acc.done());
return wrap.finalize();
}
//
// HANDY METHODS
//
App.HTML.toggle_suspended_form = function(tpl, options)
{
if (App.Constants.SUSPENDED_YES == options.SUSPEND) {
tpl.set(':SUSPENDED_CHECKED', 'checked="checked"');
tpl.set(':FORM_SUSPENDED', 'form-suspended');
tpl.set(':SUSPENDED_VALUE', 'on');
} else {
tpl.set(':SUSPENDED_CHECKED', '');
tpl.set(':FORM_SUSPENDED', '');
tpl.set(':SUSPENDED_VALUE', 'off');
}
return tpl;
}
App.HTML.toggle_suspended_entry = function(tpl, options)
{
if (App.Constants.SUSPENDED_YES == options.SUSPEND) {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
tpl.set(':SUSPENDED_CLASS', 'inactive-row');
} else {
var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general'); var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
tpl.set(':SUSPENDED_CLASS', '');
} }
tpl.set(':SUSPENDED_TPL', sub_tpl.finalize()); tpl.set(':SUSPENDED_TPL', sub_tpl.finalize());
return tpl.finalize(); return tpl;
} }
App.HTML.makeDatabases = function (databases) {
App.HTML.Build.cron_form = function(options, id)
{
if('undefined' == typeof App.Env.initialParams) {
return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
}
var tpl = App.Templates.get('FORM', 'cron');
tpl.set(':source', options);
tpl.set(':id', id || '');
options = App.Helpers.evalJSON(options) || {};
if (App.Helpers.isEmpty(options)) {
tpl.set(':title', 'New cron entry');
tpl.set(':save_button', 'ADD');
}
else {
tpl.set(':title', 'Edit cron entry');
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : {DAY:'', MONTH: '', WDAY:'',HOUR:'',CMD:'',MIN:''};
tpl = App.HTML.setTplKeys(tpl, options);
return tpl.finalize();
}
App.HTML.Build.dns_records = function(records)
{
var acc = []; var acc = [];
$.each(records, function(i, record) $(databases).each(function (i, o) {
{ var tpl = App.Templates.get('database', 'database');
tpl.set(':name', o.Database);
tpl.set(':db_name', o.Database);
acc[acc.length++] = tpl.finalize();
});
return acc.done();
}
App.HTML.makeDbTableList = function (data) {
var acc = [];
$(data).each(function (i, o) {
var name = App.Helpers.getFirstValue(o);
var tpl = App.Templates.get('database_table', 'database');
tpl.set(':name', name);
tpl.set(':table_name', name);
acc[acc.length++] = tpl.finalize();
});
return acc.done();
}
App.HTML.makeDbFieldsList = function (data) {
var acc = [];
$(data).each(function (i, o) {
var details = [o['Type'], o['Null'], o['Key'], o['Default'], o['Extra']].join(' ');
var tpl = App.Templates.get('database_field', 'database');
tpl.set(':name', o.Field);
tpl.set(':details', details);
acc[acc.length++] = tpl.finalize();
});
return acc.done();
}
App.HTML.Build.options = function (initial, default_value) {
var opts = [];
$.each(initial, function (key) {
var selected = key == default_value ? 'selected="selected"' : '';
opts[opts.length++] = '<option value="' + key + '" ' + selected + '>' + initial[key] + '</options>';
});
return opts.join('');
}
App.HTML.Build.dns_records = function (records) {
var acc = [];
$.each(records, function (i, record) {
var record = records[i]; var record = records[i];
var tpl = App.HTML.Build.dns_subrecord(record); var tpl = App.HTML.Build.dns_subrecord(record);
acc[acc.length++] = tpl.finalize(); acc[acc.length++] = tpl.finalize();
}); });
return acc.done(); return acc.done();
} }
App.HTML.Build.dns_subrecord = function (record) {
App.HTML.Build.dns_subrecord = function(record)
{
var tpl = App.Templates.get('SUBENTRY', 'dns'); var tpl = App.Templates.get('SUBENTRY', 'dns');
tpl.set(':RECORD', record.RECORD || ''); tpl.set(':RECORD', record.RECORD || '');
tpl.set(':RECORD_VALUE', record.RECORD_VALUE || ''); tpl.set(':RECORD_VALUE', record.RECORD_VALUE || '');
tpl.set(':RECORD_ID', record.RECORD_ID || ''); tpl.set(':RECORD_ID', record.RECORD_ID || '');
tpl.set(':RECORD_TYPE', App.HTML.Build.options(App.Env.initialParams.DNS.record.RECORD_TYPE, (record.RECORD_TYPE || -1))); tpl.set(':RECORD_TYPE', App.HTML.Build.options(App.Env.initialParams.DNS.record.RECORD_TYPE, (record.RECORD_TYPE || -1)));
return tpl; return tpl;
} }
App.HTML.Build.ssl_key_file = function () {
App.HTML.Build.ssl_key_file = function()
{
return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=key" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>'; return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=key" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>';
} }
App.HTML.Build.ssl_cert_file = function () {
App.HTML.Build.ssl_cert_file = function()
{
return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=cert" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>'; return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=cert" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>';
} }
App.HTML.Build.user_selects = function (tpl, options) {
App.HTML.Build.user_selects = function(tpl, options)
{
var acc = []; var acc = [];
// PACKAGE
var pkg = App.Env.initialParams.USERS.PACKAGE; var pkg = App.Env.initialParams.USERS.PACKAGE;
$.each(pkg, function(val) $.each(pkg, function (val) {
{
var tpl = App.Templates.get('select_option', 'general'); var tpl = App.Templates.get('select_option', 'general');
tpl.set(':VALUE', val); tpl.set(':VALUE', val);
tpl.set(':TEXT', pkg[val]); tpl.set(':TEXT', pkg[val]);
@ -576,23 +531,9 @@ App.HTML.Build.user_selects = function(tpl, options)
acc[acc.length++] = tpl.finalize(); acc[acc.length++] = tpl.finalize();
}); });
tpl.set(':PACKAGE_OPTIONS', acc.done()); tpl.set(':PACKAGE_OPTIONS', acc.done());
// ROLE
acc = [];
var roles = App.Env.initialParams.USERS.ROLE;
$.each(roles, function(val)
{
var tpl = App.Templates.get('select_option', 'general');
tpl.set(':VALUE', val);
tpl.set(':TEXT', roles[val]);
tpl.set(':SELECTED', val == options.ROLE ? 'selected="selected"' : '');
acc[acc.length++] = tpl.finalize();
});
tpl.set(':ROLE_OPTIONS', acc.done());
// SHELL
acc = []; acc = [];
var shell = App.Env.initialParams.USERS.SHELL; var shell = App.Env.initialParams.USERS.SHELL;
$.each(shell, function(val) $.each(shell, function (val) {
{
var tpl = App.Templates.get('select_option', 'general'); var tpl = App.Templates.get('select_option', 'general');
tpl.set(':VALUE', val); tpl.set(':VALUE', val);
tpl.set(':TEXT', shell[val]); tpl.set(':TEXT', shell[val]);
@ -600,17 +541,12 @@ App.HTML.Build.user_selects = function(tpl, options)
acc[acc.length++] = tpl.finalize(); acc[acc.length++] = tpl.finalize();
}); });
tpl.set(':SHELL_OPTIONS', acc.done()); tpl.set(':SHELL_OPTIONS', acc.done());
return tpl; return tpl;
} }
App.HTML.Build.db_selects = function (tpl, options) {
App.HTML.Build.db_selects = function(tpl, options)
{
var acc = []; var acc = [];
// PACKAGE
var items = App.Env.initialParams.DB.TYPE; var items = App.Env.initialParams.DB.TYPE;
$.each(items, function(val) $.each(items, function (val) {
{
var tpl = App.Templates.get('select_option', 'general'); var tpl = App.Templates.get('select_option', 'general');
tpl.set(':VALUE', val); tpl.set(':VALUE', val);
tpl.set(':TEXT', items[val]); tpl.set(':TEXT', items[val]);
@ -618,11 +554,9 @@ App.HTML.Build.db_selects = function(tpl, options)
acc[acc.length++] = tpl.finalize(); acc[acc.length++] = tpl.finalize();
}); });
tpl.set(':TYPE_OPTIONS', acc.done()); tpl.set(':TYPE_OPTIONS', acc.done());
// ROLE
acc = []; acc = [];
var items = App.Env.initialParams.DB.HOST; var items = App.Env.initialParams.DB.HOST;
$.each(items, function(val) $.each(items, function (val) {
{
var tpl = App.Templates.get('select_option', 'general'); var tpl = App.Templates.get('select_option', 'general');
tpl.set(':VALUE', val); tpl.set(':VALUE', val);
tpl.set(':TEXT', items[val]); tpl.set(':TEXT', items[val]);
@ -630,32 +564,20 @@ App.HTML.Build.db_selects = function(tpl, options)
acc[acc.length++] = tpl.finalize(); acc[acc.length++] = tpl.finalize();
}); });
tpl.set(':HOST_OPTIONS', acc.done()); tpl.set(':HOST_OPTIONS', acc.done());
return tpl; return tpl;
} }
App.HTML.Build.ip_selects = function (tpl, options) {
App.HTML.Build.ip_selects = function(tpl, options)
{
// OWNER
var users = App.Env.initialParams.IP.OWNER; var users = App.Env.initialParams.IP.OWNER;
var opts = App.HTML.Build.options(users, options.OWNER); var opts = App.HTML.Build.options(users, options.OWNER);
tpl.set(':owner_options', opts); tpl.set(':owner_options', opts);
// STATUS
var opts = App.HTML.Build.options(App.Env.initialParams.IP.STATUSES, options.STATUS); var opts = App.HTML.Build.options(App.Env.initialParams.IP.STATUSES, options.STATUS);
tpl.set(':status_options', opts); tpl.set(':status_options', opts);
// INTERFACE
var opts = App.HTML.Build.options(App.Env.initialParams.IP.INTERFACES, options.INTERFACE); var opts = App.HTML.Build.options(App.Env.initialParams.IP.INTERFACES, options.INTERFACE);
tpl.set(':interface_options', opts); tpl.set(':interface_options', opts);
return tpl; return tpl;
} }
App.HTML.Build.dns_selects = function (tpl, options) {
App.HTML.Build.dns_selects = function(tpl, options)
{
try { try {
// TPL
var obj = {}; var obj = {};
$.each(App.Env.initialParams.DNS.TPL, function (key) { $.each(App.Env.initialParams.DNS.TPL, function (key) {
obj[key] = key; obj[key] = key;
@ -663,45 +585,31 @@ App.HTML.Build.dns_selects = function(tpl, options)
var opts = App.HTML.Build.options(obj, options.PACKAGE); var opts = App.HTML.Build.options(obj, options.PACKAGE);
tpl.set(':TPL', opts); tpl.set(':TPL', opts);
tpl.set(':TPL_DEFAULT_VALUE', options.TPL || App.Helpers.getFirstKey(obj)); tpl.set(':TPL_DEFAULT_VALUE', options.TPL || App.Helpers.getFirstKey(obj));
} } catch (e) {
catch (e) {
return tpl; return tpl;
} }
return tpl; return tpl;
} }
App.HTML.Build.web_domain_selects = function (tpl, options) {
App.HTML.Build.web_domain_selects = function(tpl, options)
{
try { try {
// IP
var obj = App.Env.initialParams.WEB_DOMAIN.IP; var obj = App.Env.initialParams.WEB_DOMAIN.IP;
var opts = App.HTML.Build.options(obj, options.IP); var opts = App.HTML.Build.options(obj, options.IP);
tpl.set(':IP_OPTIONS', opts); tpl.set(':IP_OPTIONS', opts);
// TPL
var obj = {}; var obj = {};
$.each(App.Env.initialParams.WEB_DOMAIN.TPL, function (key) { $.each(App.Env.initialParams.WEB_DOMAIN.TPL, function (key) {
obj[key] = key; obj[key] = key;
}); });
//var obj = App.Env.initialParams.WEB_DOMAIN.TPL;
var opts = App.HTML.Build.options(obj, options.TPL); var opts = App.HTML.Build.options(obj, options.TPL);
tpl.set(':TPL_OPTIONS', opts); tpl.set(':TPL_OPTIONS', opts);
// STAT
var obj = App.Env.initialParams.WEB_DOMAIN.STAT; var obj = App.Env.initialParams.WEB_DOMAIN.STAT;
var opts = App.HTML.Build.options(obj, options.STAT); var opts = App.HTML.Build.options(obj, options.STAT);
tpl.set(':STAT_OPTIONS', opts); tpl.set(':STAT_OPTIONS', opts);
} } catch (e) {
catch (e) {
return tpl; return tpl;
} }
return tpl; return tpl;
} }
App.HTML.Build.user_web_tpl = function (tpl, o) {
App.HTML.Build.user_web_tpl = function(tpl, o)
{
var wt = []; var wt = [];
var wt_full = []; var wt_full = [];
var templates = o.WEB_TPL; var templates = o.WEB_TPL;
@ -709,7 +617,6 @@ App.HTML.Build.user_web_tpl = function(tpl, o)
if (templates.length == 0) { if (templates.length == 0) {
templates = templates.split(' '); templates = templates.split(' ');
} }
$(templates).each(function (i, web_tpl) { $(templates).each(function (i, web_tpl) {
var tpl_wt = App.Templates.get('WEB_TPL', 'user'); var tpl_wt = App.Templates.get('WEB_TPL', 'user');
tpl_wt.set(':NAME', web_tpl); tpl_wt.set(':NAME', web_tpl);
@ -719,19 +626,14 @@ App.HTML.Build.user_web_tpl = function(tpl, o)
wt[wt.length++] = tpl_finalized; wt[wt.length++] = tpl_finalized;
} }
}); });
if (templates.length <= App.Settings.USER_VISIBLE_NS) { if (templates.length <= App.Settings.USER_VISIBLE_NS) {
tpl.set(':WEB_TPL', wt.done()); tpl.set(':WEB_TPL', wt.done());
} } else {
else {
var wt_custom = App.Templates.get('WEB_TPL_MINIMIZED', 'user'); var wt_custom = App.Templates.get('WEB_TPL_MINIMIZED', 'user');
wt_custom.set(':WEB_TPL_MINI', wt.done()); wt_custom.set(':WEB_TPL_MINI', wt.done());
wt_custom.set(':WEB_TPL_FULL', wt_full.done()); wt_custom.set(':WEB_TPL_FULL', wt_full.done());
wt_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - wt_full.length)); wt_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - wt_full.length));
tpl.set(':WEB_TPL', wt_custom.finalize()); tpl.set(':WEB_TPL', wt_custom.finalize());
} }
return tpl; return tpl;
} }

View file

@ -37,9 +37,13 @@ var Custom = {
init: function() { init: function() {
var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active; var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active;
for(a = 0; a < inputs.length; a++) { for(a = 0; a < inputs.length; a++) {
if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && $(inputs[a]).hasClass("styled")) { if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && $(inputs[a]).hasClass("styled") && !$(inputs[a]).hasClass("style-applied")) {
$(inputs[a]).addClass('style-applied');
span[a] = document.createElement("span"); span[a] = document.createElement("span");
span[a].className = inputs[a].type; span[a].className = inputs[a].type;
if ($(inputs[a]).attr('class').indexOf('do_action_toggle_suspend') != -1) {
span[a].className += ' do_action_toggle_suspend'; // save toggle functionality
}
if(inputs[a].checked == true) { if(inputs[a].checked == true) {
if(inputs[a].type == "checkbox") { if(inputs[a].type == "checkbox") {
@ -61,9 +65,8 @@ var Custom = {
} }
} }
inputs = document.getElementsByTagName("select"); inputs = document.getElementsByTagName("select");
for(a = 0; a < inputs.length; a++) {
try { try {
fb.log($(inputs[a]).hasClass("styled")); for(a = 0; a < inputs.length; a++) {
if($(inputs[a]).hasClass("styled")) { if($(inputs[a]).hasClass("styled")) {
option = inputs[a].getElementsByTagName("option"); option = inputs[a].getElementsByTagName("option");
active = option[0].childNodes[0].nodeValue; active = option[0].childNodes[0].nodeValue;
@ -85,9 +88,10 @@ var Custom = {
inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled"; inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
} }
} }
}catch(e){fb.error(e);}
} }
document.onmouseup = Custom.clear; document.onmouseup = Custom.clear;
}
catch(e){ /* */ }
}, },
pushed: function() { pushed: function() {
element = this.nextSibling; element = this.nextSibling;

View file

@ -1,33 +1,45 @@
App.Model.DNS.loadList = function() App.Model.DNS.loadList = function(callback)
{ {
App.Ajax.request('DNS.getList', {}, App.View.listItems); if (!callback) {
callback = App.View.listItems;
}
App.Ajax.request('DNS.getList', {}, callback);
} }
App.Model.IP.loadList = function() App.Model.IP.loadList = function(callback)
{ {
App.Ajax.request('IP.getList', {}, App.View.listItems); if (!callback) {
callback = App.View.listItems;
}
App.Ajax.request('IP.getList', {}, callback);
} }
App.Model.USER.loadList = function() App.Model.USER.loadList = function(callback)
{ {
App.Ajax.request('USER.getList', {}, App.View.listItems); if (!callback) {
callback = App.View.listItems;
}
App.Ajax.request('USER.getList', {}, callback);
} }
App.Model.WEB_DOMAIN.loadList = function() App.Model.WEB_DOMAIN.loadList = function(callback)
{ {
App.Ajax.request('WEB_DOMAIN.getList', {}, App.View.listItems); if (!callback) {
callback = App.View.listItems;
}
App.Ajax.request('WEB_DOMAIN.getList', {}, callback);
} }
App.Model.MAIL.loadList = function() App.Model.MAIL.loadList = function(callback)
{ {
//App.Ajax.request('MAIL.getList', {}, App.View.listItems); //App.Ajax.request('MAIL.getList', {}, App.View.listItems);
App.Ref.CONTENT.html('<center><h1 style="padding-top: 20px; font-size: 28px; position: absolute; margin-left: 351px; color: white; text-shadow: 2px 1px 1px rgb(65, 124, 213);">Under maintanance</h1><img width="900px" src="'+App.Helpers.generateUrl('images/Asteroid_Vesta.jpg')+'"></center>'); App.Ref.CONTENT.html('<center><h1 style="padding-top: 20px; font-size: 28px; position: absolute; margin-left: 351px; color: white; text-shadow: 2px 1px 1px rgb(65, 124, 213);">Under maintanance</h1><img width="900px" src="'+App.Helpers.generateUrl('images/Asteroid_Vesta.jpg')+'"></center>');
} }
App.Model.DB.loadList = function() App.Model.DB.loadList = function(callback)
{
App.Ajax.request('DB.getList', {}, function(reply)
{ {
if (!callback) {
callback = function(reply) {
var acc = []; var acc = [];
var build_method = App.Env.getWorldName() + '_entry'; var build_method = App.Env.getWorldName() + '_entry';
var data = reply.data; var data = reply.data;
@ -53,12 +65,17 @@ App.Model.DB.loadList = function()
var html = acc.done().wrapperize('ENTRIES_WRAPPER', App.Env.getWorldName()); var html = acc.done().wrapperize('ENTRIES_WRAPPER', App.Env.getWorldName());
App.Ref.CONTENT.html(html); App.Ref.CONTENT.html(html);
App.Helpers.updateScreen(); App.Helpers.updateScreen();
}); };
}
App.Ajax.request('DB.getList', {}, callback);
} }
App.Model.CRON.loadList = function() App.Model.CRON.loadList = function(callback)
{ {
App.Ajax.request('CRON.getList', {}, App.View.listItems); if (!callback) {
callback = App.View.listItems;
}
App.Ajax.request('CRON.getList', {}, callback);
} }
@ -121,6 +138,23 @@ App.Model.update = function(values, source_json, elm)
// todo: reply.data; // todo: reply.data;
App.Pages.prepareHTML(); App.Pages.prepareHTML();
App.Helpers.updateScreen(); App.Helpers.updateScreen();
/*var refl = {'USER': 'LOGIN_NAME'};
App.Model[App.Env.world].loadList(function(reply) {
var acc = [];
var build_method = App.Env.getWorldName() + '_entry';
var data = reply.data;
// TODO: fix it data.data
$.each(data, function(key)
{
var o = data[key];
fb.warn(key);
acc[acc.length++] = App.HTML.Build[build_method](o, key);
});
var html = acc.done().wrapperize('ENTRIES_WRAPPER', App.Env.getWorldName());
App.Ref.CONTENT.html(html);
App.Helpers.updateScreen();
);*/
} }
// TODO: ! // TODO: !
}); });

View file

@ -15,8 +15,9 @@ App.Pages.init = function()
App.Pages.prepareHTML = function() App.Pages.prepareHTML = function()
{ {
$('.active').removeClass('active');
if ('undefined' != typeof App.Pages[App.Env.world].prepareHTML) { if ('undefined' != typeof App.Pages[App.Env.world].prepareHTML) {
App.Pages.prepareHTML(); App.Pages[App.Env.world].prepareHTML();
} }
else { else {
App.Model[App.Env.world].loadList(); App.Model[App.Env.world].loadList();
@ -48,7 +49,9 @@ App.Pages.USER.new_entry = function(evt)
$('#'+form_id).remove(); $('#'+form_id).remove();
var build_method = App.Env.getWorldName() + '_form'; var build_method = App.Env.getWorldName() + '_form';
var tpl = App.HTML.Build[build_method]({}, form_id); var tpl = App.HTML.Build[build_method]({}, form_id);
App.Ref.CONTENT.prepend(tpl); var box = $('<div>').html(tpl);
$(box).find('.suspended').addClass('hidden');
App.Ref.CONTENT.prepend($(box).html());
App.Helpers.updateScreen(); App.Helpers.updateScreen();
$('#'+form_id).find('.ns-entry, .additional-ns-add').addClass('hidden'); $('#'+form_id).find('.ns-entry, .additional-ns-add').addClass('hidden');
} }
@ -59,7 +62,10 @@ App.Pages.WEB_DOMAIN.new_entry = function(evt)
$('#'+form_id).remove(); $('#'+form_id).remove();
var build_method = App.Env.getWorldName() + '_form'; var build_method = App.Env.getWorldName() + '_form';
var tpl = App.HTML.Build[build_method]({}, form_id); var tpl = App.HTML.Build[build_method]({}, form_id);
App.Ref.CONTENT.prepend(tpl); var box = $('<div>').html(tpl);
$(box).find('.suspended').addClass('hidden');
App.Ref.CONTENT.prepend($(box).html());
//App.Ref.CONTENT.prepend(tpl);
App.Helpers.updateScreen(); App.Helpers.updateScreen();
$('#'+form_id).find('.ns-entry, .additional-ns-add').addClass('hidden'); $('#'+form_id).find('.ns-entry, .additional-ns-add').addClass('hidden');
var ssl_key_upload = App.HTML.Build.ssl_key_file(); var ssl_key_upload = App.HTML.Build.ssl_key_file();
@ -93,3 +99,27 @@ App.Pages.WEB_DOMAIN.setSSL = function(type, frame)
var ref = frame.frameElement; var ref = frame.frameElement;
$(ref).next('textarea').val(frame.document.getElementById('result').value); $(ref).next('textarea').val(frame.document.getElementById('result').value);
} }
App.Pages.loadBackups = function()
{
App.Env.world = 'BACKUPS';
App.Pages.prepareHTML();
}
App.Pages.BACKUPS.prepareHTML = function()
{
$('#primary-nav-box .active').removeClass('active');
$('#BACKUPS').addClass('active');
$('#new-entry-keyword').text(App.Helpers.getHumanTabName());
document.title = 'Vesta | ' + App.Helpers.getHumanTabName();
App.Ajax.request('MAIN.getBackups', {}, function(reply) {
if (!reply.result) {
App.Herlers.alert('Backups list failed to load. Please try again a bit later');
}
App.Ref.CONTENT.html(App.HTML.Build.backup_list(reply.data));
App.Helpers.updateScreen();
//$('#content').html(App.HTML.Build.backup_list(reply.data));
});
}

View file

@ -25,6 +25,7 @@ App.Templates.html = {
inner_popup: ['<div id="inner-popup" style="left:~!:LEFT~!px;top:~!:TOP~!px;z-index:1000;display:block;" class="d-popup d-popup-ns-list">\ inner_popup: ['<div id="inner-popup" style="left:~!:LEFT~!px;top:~!:TOP~!px;z-index:1000;display:block;" class="d-popup d-popup-ns-list">\
<div class="d-popup-inner">\ <div class="d-popup-inner">\
<span class="close do_action_close_inner_popup">×</span>\ <span class="close do_action_close_inner_popup">×</span>\
<div class="d-popup-title">~!:POPUP_TITLE~!</div>\
<div class="d-popup-content">\ <div class="d-popup-content">\
~!:CONTENT~!\ ~!:CONTENT~!\
</div>\ </div>\
@ -32,8 +33,8 @@ App.Templates.html = {
</div>'], </div>'],
select_option: ['<option ~!:SELECTED~! value="~!:VALUE~!">~!:TEXT~!</option>'], select_option: ['<option ~!:SELECTED~! value="~!:VALUE~!">~!:TEXT~!</option>'],
error_elm: ['<div class="error-box">~!:ERROR~!</div>'], error_elm: ['<div class="error-box">~!:ERROR~!</div>'],
SUSPENDED_TPL_NOT_SUSPENDED : ['<span class="ip-status-info ip-enabled-status do_action_suspend"><span class="ip-status-text do_action_suspend">enabled</span></span>'], SUSPENDED_TPL_NOT_SUSPENDED : ['<span class="ip-status-info ip-enabled-status"><span class="ip-status-text">enabled</span></span>'],
SUSPENDED_TPL_SUSPENDED : ['<span class="ip-status-info ip-suspended-status do_action_unsuspend"><span class="ip-status-text do_action_unsuspend">suspended</span></span>'] SUSPENDED_TPL_SUSPENDED : ['<span class="ip-status-info ip-suspended-status"><span class="ip-status-text">suspended</span></span>']
}, },
popup: { popup: {
error: ['<div class="error"><center><h1 style="color: red;">Important: An Error Has Occured.</h1><hr></center>&nbsp;&nbsp;&nbsp;&nbsp;Something went wrong and some of your actions can be not saved in system. Mostly, it happens when you have network connection errors.<br>,&nbsp;&nbsp;&nbsp;&nbsp;However, please notify us about the situation. It would be helpfull if you will write us approximate time the error occured and last actions you were performing. You send your petition on <a href="mail_to">this email: BLABLA</a>,<br><br><center><span style="color: rgb(92, 92, 92);">Sorry for inconvinience. (We recommend you to reload the page)</span></center></div>'], error: ['<div class="error"><center><h1 style="color: red;">Important: An Error Has Occured.</h1><hr></center>&nbsp;&nbsp;&nbsp;&nbsp;Something went wrong and some of your actions can be not saved in system. Mostly, it happens when you have network connection errors.<br>,&nbsp;&nbsp;&nbsp;&nbsp;However, please notify us about the situation. It would be helpfull if you will write us approximate time the error occured and last actions you were performing. You send your petition on <a href="mail_to">this email: BLABLA</a>,<br><br><center><span style="color: rgb(92, 92, 92);">Sorry for inconvinience. (We recommend you to reload the page)</span></center></div>'],
@ -42,8 +43,9 @@ App.Templates.html = {
<div class="b-auth-form">\ <div class="b-auth-form">\
<div class="b-auth-form-wrap">\ <div class="b-auth-form-wrap">\
<img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\ <img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\
<span style="color: #5E696B; float: right; margin-top: -48px;">~!:VERSION~!</span>\
<div class="b-client-title">\ <div class="b-client-title">\
<span class="client-title-wrap">~!:VERSION~!<i class="planets">&nbsp;</i></span>\ <span class="client-title-wrap">~!:PRODUCT_NAME~!<i class="planets">&nbsp;</i></span>\
</div>\ </div>\
<form id="change_psw-form" method="post" action="#" class="auth">\ <form id="change_psw-form" method="post" action="#" class="auth">\
<div class="form-row cc">\ <div class="form-row cc">\
@ -76,8 +78,9 @@ App.Templates.html = {
<div class="b-auth-form">\ <div class="b-auth-form">\
<div class="b-auth-form-wrap">\ <div class="b-auth-form-wrap">\
<img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\ <img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\
<span style="color: #5E696B; float: right; margin-top: -48px;">~!:VERSION~!</span>\
<div class="b-client-title">\ <div class="b-client-title">\
<span class="client-title-wrap">~!:VERSION~!<i class="planets">&nbsp;</i></span>\ <span class="client-title-wrap">~!:PRODUCT_NAME~!<i class="planets">&nbsp;</i></span>\
</div>\ </div>\
<form id="login-form" method="post" action="#" class="auth">\ <form id="login-form" method="post" action="#" class="auth">\
<div class="form-row cc">\ <div class="form-row cc">\
@ -112,7 +115,7 @@ App.Templates.html = {
}, },
dns: { dns: {
FORM: [ FORM: [
'<div style="margin-top: 25px;" class="b-new-entry b-new-entry_dns form" id="~!:id~!">\ '<div style="margin-top: 25px;" class="b-new-entry b-new-entry_dns form ~!:FORM_SUSPENDED~!" id="~!:id~!">\
<input type="hidden" name="source" class="source" value=~!:source~!>\ <input type="hidden" name="source" class="source" value=~!:source~!>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -136,7 +139,7 @@ App.Templates.html = {
<select name="TPL" class="styled tpl-item">\ <select name="TPL" class="styled tpl-item">\
~!:TPL~!\ ~!:TPL~!\
</select>\ </select>\
<span class="context-settings do_action_view_template_settings">View template settings</span>\ <span class="context-settings do_action_view_dns_template_settings">View template settings</span>\
</div>\ </div>\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">ttl:</label>\ <label for="#" class="field-label">ttl:</label>\
@ -146,22 +149,25 @@ App.Templates.html = {
<label for="#" class="field-label">soa:</label>\ <label for="#" class="field-label">soa:</label>\
<input type="text" value="~!:SOA~!" name="SOA" class="text-field rule-required rule-ns">\ <input type="text" value="~!:SOA~!" name="SOA" class="text-field rule-required rule-ns">\
</div>\ </div>\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND" />\
</div>\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form" name="save">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a class="help-btn" href="http://vestacp.com/docs/dns/" target="_blank">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>' </div>'
], ],
ENTRIES_WRAPPER: ['<div class="dns-list items-list">~!:content~!</div>'], ENTRIES_WRAPPER: ['<div class="dns-list items-list">~!:content~!</div>'],
ENTRY: ['<div class="row dns-details-row ~!:CHECKED~!">\ ENTRY: ['<div class="row dns-details-row ~!:CHECKED~! ~!:SUSPENDED_CLASS~!">\
<input type="hidden" name="source" class="source" value=~!:source~! />\ <input type="hidden" name="source" class="source" value=~!:source~! />\
<input type="hidden" class="target" name="target" value=\'\' />\ <input type="hidden" class="target" name="target" value=\'\' />\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this check-control"></div>\ <div class="check-this check-control"></div>\
<div class="row-operations">\ <div class="row-operations">\
~!:SUSPENDED_TPL~!\ ~!:SUSPENDED_TPL~!\
<span class="delete-entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
@ -237,7 +243,7 @@ App.Templates.html = {
}, },
ip: { ip: {
FORM: ['\ FORM: ['\
<div class="b-new-entry b-new-entry_ip form" id="~!:id~!">\ <div class="b-new-entry b-new-entry_ip form ~!:FORM_SUSPENDED~!" id="~!:id~!">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'~!:target~!\'>\ <input type="hidden" name="target" class="target" value=\'~!:target~!\'>\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -262,7 +268,7 @@ App.Templates.html = {
</div>\ </div>\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">name:</label>\ <label for="#" class="field-label">name:</label>\
<input type="text" name="NAME" value="~!:NAME~!" class="text-field rule-abc">\ <input type="text" name="NAME" value="~!:NAME~!" class="text-field rule-domain">\
</div>\ </div>\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">interface:</label>\ <label for="#" class="field-label">interface:</label>\
@ -277,23 +283,26 @@ App.Templates.html = {
<input type="text" value="~!:NETMASK~!" name="NETMASK" class="text-field">\ <input type="text" value="~!:NETMASK~!" name="NETMASK" class="text-field">\
</div>\ </div>\
</div>\ </div>\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
</div>\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" name="save" class="add-entry-btn do_action_save_form">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a class="help-btn" href="http://vestacp.com/docs/ip/" target="_blank">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>\ </div>\
'], '],
DOT: ['<span class="dot">.</span>'], DOT: ['<span class="dot">.</span>'],
ENTRY: ['\ ENTRY: ['\
<div class="row ip-details-row">\ <div class="row ip-details-row ~!:SUSPENDED_CLASS~!">\
<input type="hidden" class="source" name="source" value=\'~!:source~!\' />\ <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
<input type="hidden" class="target" name="target" value="" />\ <input type="hidden" class="target" name="target" value="" />\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this"></div>\ <div class="check-this"></div>\
<div class="row-operations">\ <div class="row-operations">\
~!:SUSPENDED_TPL~!\ ~!:SUSPENDED_TPL~!\
<span class="delete-entry do_action_delete_entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
@ -349,12 +358,12 @@ App.Templates.html = {
WEB_TPL_MINIMIZED: ['~!:WEB_TPL_MINI~!\ WEB_TPL_MINIMIZED: ['~!:WEB_TPL_MINI~!\
<span class="group-switcher">\ <span class="group-switcher">\
<span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\ <span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\
</span><span class="hidden ns-full-list"><span class="group-values group-values__bullet">~!:WEB_TPL_FULL~!</span></span>'], </span><span class="hidden ns-full-list"><span class="group-values">~!:WEB_TPL_FULL~!</span></span>'],
WEB_TPL: ['<span class="prop-value">~!:NAME~!</span>'], WEB_TPL: ['<span class="prop-value">~!:NAME~!</span>'],
NS_MINIMIZED: ['~!:NS_MINI~!\ NS_MINIMIZED: ['~!:NS_MINI~!\
<span class="group-switcher">\ <span class="group-switcher">\
<span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\ <span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\
</span><span class="hidden ns-full-list"><span class="group-values group-values__bullet">~!:NS_FULL~!</span></span>'], </span><span class="hidden ns-full-list"><span class="group-values">~!:NS_FULL~!</span></span>'],
NS_RECORD: ['<span class="prop-value">~!:NAME~!</span>'], NS_RECORD: ['<span class="prop-value">~!:NAME~!</span>'],
NS_INPUT: ['<div class="form-row ns-entry cc">\ NS_INPUT: ['<div class="form-row ns-entry cc">\
<label for="#" class="field-label">~!:NS_LABEL~!:</label>\ <label for="#" class="field-label">~!:NS_LABEL~!:</label>\
@ -368,7 +377,7 @@ App.Templates.html = {
</a>\ </a>\
</div>'], </div>'],
ENTRIES_WRAPPER: ['<div class="users-list items-list">~!:content~!</div>'], ENTRIES_WRAPPER: ['<div class="users-list items-list">~!:content~!</div>'],
FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_user form">\ FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_user form ~!:FORM_SUSPENDED~!">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -395,12 +404,12 @@ App.Templates.html = {
~!:SHELL_OPTIONS~!\ ~!:SHELL_OPTIONS~!\
</select>\ </select>\
</div>\ </div>\
<div class="form-row cc">\ <!-- div class="form-row cc">\
<label for="#" class="field-label">role:</label>\ <label for="#" class="field-label">role:</label>\
<select class="styled" name="ROLE">\ <select class="styled" name="ROLE">\
~!:ROLE_OPTIONS~!\ ~!:ROLE_OPTIONS~!\
</select>\ </select>\
</div>\ </div -->\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">contact email:</label>\ <label for="#" class="field-label">contact email:</label>\
<input type="text" name="CONTACT" class="text-field rule-email rule-required" value="~!:CONTACT~!">\ <input type="text" name="CONTACT" class="text-field rule-email rule-required" value="~!:CONTACT~!">\
@ -417,7 +426,7 @@ App.Templates.html = {
<label for="#" class="field-label">Lastname:</label>\ <label for="#" class="field-label">Lastname:</label>\
<input type="text" name="LNAME" class="text-field rule-abc rule-required" value="~!:LNAME~!">\ <input type="text" name="LNAME" class="text-field rule-abc rule-required" value="~!:LNAME~!">\
</div>\ </div>\
<!-- div class="form-row ns-entry cc">\ <div class="form-row ns-entry cc">\
<label for="#" class="field-label">NS #1:</label>\ <label for="#" class="field-label">NS #1:</label>\
<input type="text" value="~!:NS1~!" name="NS1" class="text-field rule-required rule-ns">\ <input type="text" value="~!:NS1~!" name="NS1" class="text-field rule-required rule-ns">\
</div>\ </div>\
@ -425,31 +434,28 @@ App.Templates.html = {
<label for="#" class="field-label">NS #2:</label>\ <label for="#" class="field-label">NS #2:</label>\
<input type="text" value="~!:NS2~!" name="NS2" class="text-field rule-required rule-ns">\ <input type="text" value="~!:NS2~!" name="NS2" class="text-field rule-required rule-ns">\
</div>\ </div>\
~!:NS~!\ -->\ ~!:NS~!\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
</div>\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" name="save" class="add-entry-btn do_action_save_form">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a class="help-btn" href="http://vestacp.com/docs/user/" target="_blank">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>'], </div>'],
ENTRY: ['<div class="row user-details-row">\ ENTRY: ['<div class="row user-details-row ~!:SUSPENDED_CLASS~!">\
<input type="hidden" class="source" name="source" value=\'~!:source~!\' />\ <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
<input type="hidden" class="target" name="target" value="" />\ <input type="hidden" class="target" name="target" value="" />\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this check-control"></div>\ <div class="check-this check-control"></div>\
<div class="row-operations">\ <div class="row-operations">\
~!:SUSPENDED_TPL~!\ ~!:SUSPENDED_TPL~!\
<span class="delete-entry do_action_delete_entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
<div class="entry-created">~!:DATE~!</div>\ <div class="entry-created">~!:DATE~!</div>\
<div class="ownership">\
<span class="prop-box">\
<span class="prop-title">owner:</span>\
<span class="prop-value">~!:OWNER~!</span>\
</span>\
</div>\
</div>\ </div>\
<div class="row-details cc">\ <div class="row-details cc">\
<div class="props-main">\ <div class="props-main">\
@ -457,8 +463,7 @@ App.Templates.html = {
<div class="username-box">\ <div class="username-box">\
<span class="user">\ <span class="user">\
<span class="nickname do_action_edit">~!:LOGIN_NAME~!</span>\ <span class="nickname do_action_edit">~!:LOGIN_NAME~!</span>\
<span class="role"></span>\ <!-- span class="role">(~!:ROLE~!)</span -->\
<span class="role">(~!:ROLE~!)</span>\
</span>\ </span>\
<span class="prop-box template-box">\ <span class="prop-box template-box">\
<span class="prop-title">package:</span>\ <span class="prop-title">package:</span>\
@ -477,9 +482,6 @@ App.Templates.html = {
<span class="prop-value user-reports">(reports ~!:REPORTS_ENABLED~!)</span>\ <span class="prop-value user-reports">(reports ~!:REPORTS_ENABLED~!)</span>\
</span>\ </span>\
</span>\ </span>\
<span class="prop-box childs-box">\
<span class="prop-title">childs:</span>\
<span class="prop-value prop-value-collapsed-childs">~!:U_CHILDS~! (~!:MAX_CHILDS~!)</span>\ </span>\
</div>\ </div>\
</div>\ </div>\
<!-- disk usage block -->\ <!-- disk usage block -->\
@ -523,11 +525,11 @@ App.Templates.html = {
</span>\ </span>\
<span class="prop-box webalias-box">\ <span class="prop-box webalias-box">\
<span class="prop-title">web alias:</span>\ <span class="prop-title">web alias:</span>\
<span class="prop-value prop-value-collapsed-childs">(~!:WEB_ALIASES~!) per domain</span>\ <span class="prop-value">~!:WEB_ALIASES~! per domain</span>\
</span>\ </span>\
<span class="prop-box prop-box_group-values cc webtpl-box">\ <span class="prop-box prop-box_group-values cc webtpl-box">\
<span class="prop-title">web templates:</span>\ <span class="prop-title">web templates:</span>\
<span class="group-values group-values__bullet">\ <span class="group-values">\
~!:WEB_TPL~!\ ~!:WEB_TPL~!\
</span>\ </span>\
</span>\ </span>\
@ -567,7 +569,7 @@ App.Templates.html = {
</span>\ </span>\
<span class="prop-box prop-box_group-values cc ns-list-box">\ <span class="prop-box prop-box_group-values cc ns-list-box">\
<span class="prop-title">ns list:</span>\ <span class="prop-title">ns list:</span>\
<span class="group-values group-values__bullet">\ <span class="group-values">\
~!:NS~!</span>\ ~!:NS~!</span>\
</span>\ </span>\
</div>\ </div>\
@ -575,7 +577,7 @@ App.Templates.html = {
</div>'] </div>']
}, },
web_domain: { web_domain: {
FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_domain form">\ FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_domain form ~!:FORM_SUSPENDED~!">\
<input type="hidden" class="source" name="source" value=\'~!:source~!\' />\ <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
<input type="hidden" class="target" name="target" value="" />\ <input type="hidden" class="target" name="target" value="" />\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -599,6 +601,10 @@ App.Templates.html = {
~!:TPL_OPTIONS~!\ ~!:TPL_OPTIONS~!\
</select>\ </select>\
</div>\ </div>\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
</div>\
<!-- advanced options -->\ <!-- advanced options -->\
<div class="form-options-group">\ <div class="form-options-group">\
<div class="group-header cc collapsed">\ <div class="group-header cc collapsed">\
@ -638,10 +644,10 @@ App.Templates.html = {
<span class="generate-pwd do_action_generate_pass">Generate</span>\ <span class="generate-pwd do_action_generate_pass">Generate</span>\
</div>\ </div>\
</div><!-- // stats settings -->\ </div><!-- // stats settings -->\
<div class="form-row cc">\ <!-- div class="form-row cc">\
<label for="#" class="field-label">ssl:</label>\ <label for="#" class="field-label">ssl:</label>\
<input type="checkbox" name="SSL" class="styled" ~!:ssl_checked~!="" value="~!SSL~!">\ <input type="checkbox" name="SSL" class="styled" ~!:ssl_checked~!="" value="~!SSL~!">\
</div>\ </div -->\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">ssl home:</label>\ <label for="#" class="field-label">ssl home:</label>\
<input type="text" name="SSL_HOME" class="text-field" value="~!:SSL_HOME~!">\ <input type="text" name="SSL_HOME" class="text-field" value="~!:SSL_HOME~!">\
@ -685,20 +691,19 @@ App.Templates.html = {
</div>\ </div>\
</div><!-- Mail options -->\ </div><!-- Mail options -->\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a target="_blank" href="http://vestacp.com/docs/web/" class="help-btn">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>'], </div>'],
ENTRIES_WRAPPER: ['<div class="domains-list items-list">~!:content~!</div>'], ENTRIES_WRAPPER: ['<div class="domains-list items-list">~!:content~!</div>'],
ENTRY: ['<div class="row domain-details-row">\ ENTRY: ['<div class="row domain-details-row ~!:SUSPENDED_CLASS~!">\
<input type="hidden" class="source" name="source" value=\'~!:source~!\' />\ <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
<input type="hidden" class="target" name="target" value="" />\ <input type="hidden" class="target" name="target" value="" />\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this check-control"></div>\ <div class="check-this check-control"></div>\
<div class="row-operations">\ <div class="row-operations">\
~!:SUSPENDED_TPL~!\ ~!:SUSPENDED_TPL~!\
<span class="delete-entry do_action_delete_entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
@ -794,7 +799,7 @@ App.Templates.html = {
</span>\ </span>\
</div>'], </div>'],
ENTRIES_WRAPPER: ['<div class="db-list">~!:content~!</div>'], ENTRIES_WRAPPER: ['<div class="db-list">~!:content~!</div>'],
FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_db form">\ FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_db form ~!:FORM_SUSPENDED~!">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -823,19 +828,23 @@ App.Templates.html = {
<label for="#" class="field-label">db host:</label>\ <label for="#" class="field-label">db host:</label>\
<select name="HOST" class="styled">~!:HOST_OPTIONS~!</select>\ <select name="HOST" class="styled">~!:HOST_OPTIONS~!</select>\
</div>\ </div>\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND" />\
</div>\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a target="_blank" href="http://vestacp.com/docs/db/" class="help-btn">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>'], </div>'],
ENTRY: ['<div class="row db-details-row">\ ENTRY: ['<div class="row db-details-row ~!:SUSPENDED_CLASS~!">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this check-control"></div>\ <div class="check-this check-control"></div>\
<div class="row-operations">\ <div class="row-operations">\
<span class="delete-entry do_action_delete_entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\ ~!:SUSPENDED_TPL~!\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
@ -880,7 +889,7 @@ App.Templates.html = {
</div>'] </div>']
}, },
cron: { cron: {
FORM: ['<div class="b-new-entry b-new-entry_cron form" id="~!:id~!" >\ FORM: ['<div class="b-new-entry b-new-entry_cron form ~!:FORM_SUSPENDED~!" id="~!:id~!" >\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\ <div class="entry-header">~!:title~!</div>\
@ -929,21 +938,24 @@ App.Templates.html = {
<label for="#" class="field-label">report to: <span class="remark">(devide by comma ",")</span></label>\ <label for="#" class="field-label">report to: <span class="remark">(devide by comma ",")</span></label>\
<textarea class="textarea" name="REPORT_TO"></textarea>\ <textarea class="textarea" name="REPORT_TO"></textarea>\
</div>\ </div>\
<div class="form-row suspended cc">\
<label for="#" class="field-label">suspended:</label>\
<input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
</div>\
<div class="form-row buttons-row cc">\ <div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\ <input class="add-entry-btn do_action_save_form" type="submit" value="~!:save_button~!"/>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <span class="cancel-btn do_action_cancel_form">Cancel</span>\
<a target="_blank" href="http://vestacp.com/docs/cron/" class="help-btn">Help</a>\ <span class="delete-btn do_action_delete_entry">Delete</span>\
</div>\ </div>\
</div>'], </div>'],
ENTRIES_WRAPPER: ['<div class="cron-list">~!:content~!</div>'], ENTRIES_WRAPPER: ['<div class="cron-list">~!:content~!</div>'],
ENTRY: ['<div class="row cron-details-row">\ ENTRY: ['<div class="row cron-details-row ~!:SUSPENDED_CLASS~!">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\ <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\ <input type="hidden" name="target" class="target" value=\'\'>\
<div class="row-actions-box cc">\ <div class="row-actions-box cc">\
<div class="check-this check-control"></div>\ <div class="check-this check-control"></div>\
<div class="row-operations">\ <div class="row-operations">\
~!:SUSPENDED_TPL~!\ ~!:SUSPENDED_TPL~!\
<span class="delete-entry do_action_delete_entry"><span class="delete-entry-text do_action_delete_entry">delete</span></span>\
</div>\ </div>\
</div>\ </div>\
<div class="row-meta">\ <div class="row-meta">\
@ -984,11 +996,55 @@ App.Templates.html = {
</div>\ </div>\
</div><!-- // .row-details -->\ </div><!-- // .row-details -->\
</div>'] </div>']
},
backup: {
WRAPPER: ['<div class="backups-list">~!:CONTENT~!</div>'],
ENTRY: ['<div class="backups-list">\
<!-- row 1 -->\
<div class="row first-row backup-details-row">\
<div class="row-meta">\
<div class="ownership">\
<span class="prop-box">\
<span class="prop-title">owner:</span>\
<span class="prop-value">~!:OWNER~!</span>\
</span>\
</div>\
</div>\
<div class="row-details cc">\
<div class="props-main">\
<span class="prop-box entry-created">\
<span class="backup-date">\
<span class="backup-day">~!:CREATED_AT~!</span>\
<span class="backup-time">~!:CREATED_AT_TIME~!</span>\
</span>\
<span class="backup-weekday">~!:CREATED_AT_WDAY~!</span>\
</span>\
<span class="prop-box generation-time">\
<span class="prop-title">Generation time:</span>\
<span class="prop-value">~!:GENERATION_TIME~!</span>\
</span>\
</div>\
<div class="props-additional">\
<span class="backup-size">\
<span class="backup-size-inner">~!:SIZE~!</span>\
</span>\
<a class="backup-url" href="return alert(\'Not available at the time\');">download</a>\
</div>\
<div class="props-ext">\
<div class="backup-actions">\
<a class="backup-actions-url restore-url" href="return alert(\'Not available at the time\');">restore</a>\
<a class="backup-actions-url detailed-restore-url" href="return alert(\'Not available at the time\');">\
<span class="detailed-restore-title">detailed</span>\
<span class="detailed-restore-ext">restore</span>\
</a>\
</div>\
</div> \
</div><!-- // .row-details -->\
</div><!-- // .row 1 -->']
} }
} }
// Internals // Internals
var Tpl = App.Templates; var Tpl = App.Templates;
var Templator = function() var Templator = function()

View file

@ -46,8 +46,8 @@ class AjaxHandler {
$allowed_actions = array( $allowed_actions = array(
'MAIN.signin', 'MAIN.signin',
'MAIN.logout', 'MAIN.logout',
'MAIN.requestpassword', 'MAIN.requestPassword',
'MAIN.resetpassword', 'MAIN.resetPassword',
'MAIN.about'); 'MAIN.about');
$method = Request::parseAjaxMethod($request); $method = Request::parseAjaxMethod($request);

View file

@ -30,7 +30,7 @@ class CRON extends AjaxHandler
'DAY' => $record['DAY'], 'DAY' => $record['DAY'],
'MONTH' => $record['MONTH'], 'MONTH' => $record['MONTH'],
'WDAY' => $record['WDAY'], 'WDAY' => $record['WDAY'],
'SUSPENDED' => $record['SUSPEND'], 'SUSPEND' => $record['SUSPEND'],
'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE']))), 'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE']))),
'JOB' => $id 'JOB' => $id
); );
@ -52,15 +52,15 @@ class CRON extends AjaxHandler
public function addExecute(Request $request) public function addExecute(Request $request)
{ {
$user = $this->getLoggedUser(); $user = $this->getLoggedUser();
$spell = $request->getParameter('spell'); $_s = $request->getParameter('spell');
$params = array( $params = array(
'USER' => $user['uid'], 'USER' => $user['uid'],
'MIN' => $spell['MIN'], 'MIN' => $_s['MIN'],
'HOUR' => $spell['HOUR'], 'HOUR' => $_s['HOUR'],
'DAY' => $spell['DAY'], 'DAY' => $_s['DAY'],
'MONTH' => $spell['MONTH'], 'MONTH' => $_s['MONTH'],
'WDAY' => $spell['WDAY'], 'WDAY' => $_s['WDAY'],
'CMD' => $spell['CMD'] 'CMD' => $_s['CMD']
); );
$result = Vesta::execute(Vesta::V_ADD_CRON_JOB, $params); $result = Vesta::execute(Vesta::V_ADD_CRON_JOB, $params);
@ -74,6 +74,20 @@ class CRON extends AjaxHandler
} }
} }
if ($_s['SUSPEND'] == 'on') {
if($result['status']){
$result = array();
$result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOB, array('USER' => $user['uid'], 'JOB' => $_s['CMD']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
}
}
if (!$result['status']) { if (!$result['status']) {
$this->errors[] = array($result['error_code'] => $result['error_message']); $this->errors[] = array($result['error_code'] => $result['error_message']);
} }
@ -117,6 +131,20 @@ class CRON extends AjaxHandler
$_old = $request->getParameter('old'); $_old = $request->getParameter('old');
$_new = $request->getParameter('new'); $_new = $request->getParameter('new');
$result = array(); $result = array();
if($_new['SUSPEND'] == 'on') {
$result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOB, array('USER' => $user['uid'], 'JOB' => $_new['CMD']));
return $this->reply($result['status']);
}
else {
$result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOB, array('USER' => $user['uid'], 'JOB' => $_new['CMD']));
}
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
$params = array( $params = array(
'USER' => $user['uid'], 'USER' => $user['uid'],
'JOB' => $_old['JOB'], 'JOB' => $_old['JOB'],
@ -134,6 +162,8 @@ class CRON extends AjaxHandler
$this->errors[] = array($result['error_code'] => $result['error_message']); $this->errors[] = array($result['error_code'] => $result['error_message']);
} }
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }

View file

@ -67,10 +67,6 @@ class DB extends AjaxHandler
'DB_PASSWORD' => $_s['PASSWORD'], 'DB_PASSWORD' => $_s['PASSWORD'],
'TYPE' => $_s['TYPE'] 'TYPE' => $_s['TYPE']
); );
// TODO: do not user it. Will be used in later releases
/*if ($_s['HOST']) {
$params['HOST'] = $_s['HOST'];
}*/
$result = Vesta::execute(Vesta::V_ADD_DB_BASE, $params); $result = Vesta::execute(Vesta::V_ADD_DB_BASE, $params);
@ -78,6 +74,19 @@ class DB extends AjaxHandler
$this->errors[] = array($result['error_code'] => $result['error_message']); $this->errors[] = array($result['error_code'] => $result['error_message']);
} }
if ($_s['SUSPEND'] == 'on') {
if($result['status']){
$result = array();
$result = Vesta::execute(Vesta::V_SUSPEND_DB_BASE, array('USER' => $user['uid'], 'JOB' => $_s['DB']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
}
}
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }
@ -113,13 +122,29 @@ class DB extends AjaxHandler
*/ */
public function changeExecute(Request $request) public function changeExecute(Request $request)
{ {
$_s = $request->getParameter('new'); $_s = $request->getParameter('spell');
$_old = $request->getParameter('old');
$_new = $request->getParameter('new');
$user = $this->getLoggedUser(); $user = $this->getLoggedUser();
$result = array(); $result = array();
if($_new['SUSPEND'] == 'on'){
$result = Vesta::execute(Vesta::V_SUSPEND_DB_BASE, array('USER' => $user['uid'], 'DB' => $_new['DB']));
}
else{
$result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASE, array('USER' => $user['uid'], 'DB' => $_new['DB']));
}
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
if ($_new['PASSWORD'] != Vesta::SAME_PASSWORD && $_new['PASSWORD'] != $_old['PASSWORD']) {
$params = array( $params = array(
'USER' => $user['uid'], 'USER' => $user['uid'],
'DB' => $_s['DB'], 'DB' => $_new['DB'],
'PASSWORD' => $_s['PASSWORD'] 'PASSWORD' => $_new['PASSWORD']
); );
$result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params); $result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params);
@ -127,6 +152,7 @@ class DB extends AjaxHandler
if (!$result['status']) { if (!$result['status']) {
$this->errors[] = array($result['error_code'] => $result['error_message']); $this->errors[] = array($result['error_code'] => $result['error_message']);
} }
}
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }

View file

@ -119,6 +119,19 @@ class DNS extends AjaxHandler
$this->errors[] = array($result['error_code'] => $result['error_message']); $this->errors[] = array($result['error_code'] => $result['error_message']);
} }
if ($_s['SUSPEND'] == 'on') {
if($result['status']){
$result = array();
$result = Vesta::execute(Vesta::V_SUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_s['DNS_DOMAIN']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
}
}
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }
@ -228,6 +241,19 @@ class DNS extends AjaxHandler
$user = $this->getLoggedUser(); $user = $this->getLoggedUser();
$_DNS_DOMAIN = $_old['DNS_DOMAIN']; $_DNS_DOMAIN = $_old['DNS_DOMAIN'];
$result = array();
if($_new['SUSPEND'] == 'on'){
$result = Vesta::execute(Vesta::V_SUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
return $this->reply($result['status']);
}
else{
$result = Vesta::execute(Vesta::V_UNSUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
}
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
if ($_old['IP'] != $_new['IP']) { if ($_old['IP'] != $_new['IP']) {
$result = array(); $result = array();
@ -281,6 +307,13 @@ class DNS extends AjaxHandler
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL'])); Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP'])); Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA'])); Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
if($_old['SUSPEND'] == 'on'){
$result = Vesta::execute(Vesta::V_SUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
}
else{
$result = Vesta::execute(Vesta::V_UNSUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
}
} }
return $this->reply($this->status, ''); return $this->reply($this->status, '');

View file

@ -76,8 +76,12 @@ class IP extends AjaxHandler
'MASK' => $spell['NETMASK'], 'MASK' => $spell['NETMASK'],
'INTERFACE' => $spell['INTERFACE'], 'INTERFACE' => $spell['INTERFACE'],
'OWNER' => $spell['OWNER'], 'OWNER' => $spell['OWNER'],
'IP_STATUS' => $spell['STATUS'] 'STATUS' => $spell['STATUS']
); );
if ($spell['NAME']) {
$params['NAME'] = $spell['NAME'];
}
$result = Vesta::execute(Vesta::V_ADD_SYS_IP, $params); $result = Vesta::execute(Vesta::V_ADD_SYS_IP, $params);
@ -128,7 +132,7 @@ class IP extends AjaxHandler
if ($_old['OWNER'] != $_new['OWNER']) { if ($_old['OWNER'] != $_new['OWNER']) {
$result = array(); $result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_OWNER, array('OWNER' => $_new['OWNER'], 'IP' => $_new['IP_ADDRESS'])); $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_OWNER, array('IP' => $_new['IP_ADDRESS'], 'OWNER' => $_new['OWNER']));
if (!$result['status']) { if (!$result['status']) {
$this->status = FALSE; $this->status = FALSE;
$this->errors['OWNER'] = array($result['error_code'] => $result['error_message']); $this->errors['OWNER'] = array($result['error_code'] => $result['error_message']);
@ -136,21 +140,21 @@ class IP extends AjaxHandler
} }
// TODO: Handle NAME parameter // TODO: Handle NAME parameter
/*if ($_old['NAME'] != $_new['NAME']) { if ($_old['NAME'] != $_new['NAME']) {
$result = array(); $result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_NAME, array('IP' => $_new['IP_ADDRESS'], 'NAME' => $_new['NAME'])); $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_NAME, array('IP' => $_new['IP_ADDRESS'], 'NAME' => $_new['NAME']));
if (!$result['status']) { if (!$result['status']) {
$this->status = FALSE; $this->status = FALSE;
$this->errors['NAME'] = array($result['error_code'] => $result['error_message']); $this->errors['NAME'] = array($result['error_code'] => $result['error_message']);
} }
}*/ }
if ($_old['IP_STATUS'] != $_new['IP_STATUS']) { if ($_old['STATUS'] != $_new['STATUS']) {
$result = array(); $result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_STATUS, array('IP' => $_new['IP_ADDRESS'], 'IP_STATUS' => $_new['IP_STATUS'])); $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_STATUS, array('IP' => $_new['IP_ADDRESS'], 'STATUS' => $_new['STATUS']));
if (!$result['status']) { if (!$result['status']) {
$this->status = FALSE; $this->status = FALSE;
$this->errors['IP_STATUS'] = array($result['error_code'] => $result['error_message']); $this->errors['STATUS'] = array($result['error_code'] => $result['error_message']);
} }
} }

View file

@ -21,8 +21,10 @@ class MAIN extends AjaxHandler
public function aboutExecute($request) public function aboutExecute($request)
{ {
// defaults
$about = array('version' => '0', 'company_email' => 'support@vestacp.com', $about = array('version' => '0', 'company_email' => 'support@vestacp.com',
'version_name' => 'OGRE-23-1', 'company_name' => 'vestacp.com'); 'version_name' => 'OGRE-23-1', 'company_name' => 'vestacp.com');
// real data
$config = Vesta::execute(Vesta::V_LIST_SYS_CONFIG, 'json'); $config = Vesta::execute(Vesta::V_LIST_SYS_CONFIG, 'json');
if (!empty($config['data']) && !empty($config['data']['config'])) { if (!empty($config['data']) && !empty($config['data']['config'])) {
$config = $config['data']['config']; $config = $config['data']['config'];
@ -37,12 +39,14 @@ class MAIN extends AjaxHandler
public function requestPasswordExecute($request) public function requestPasswordExecute($request)
{ {
$user = $this->getLoggedUser();
$rs = $config = Vesta::execute('v_get_sys_user_value', array($user['uid'], 'RKEY'));
if (empty($_SESSION['captcha_key']) if (empty($_SESSION['captcha_key'])
|| $_SESSION['captcha_key'] != $request->getParameter('captcha')) { || $_SESSION['captcha_key'] != $request->getParameter('captcha')) {
return $this->reply(false, null, 'Captcha is invalid '); return $this->reply(false, null, 'Captcha is invalid ');
} }
// TODO: captcha
$users = Vesta::execute(Vesta::V_LIST_SYS_USERS, 'json'); $users = Vesta::execute(Vesta::V_LIST_SYS_USERS, 'json');
$email_matched_count = array(); $email_matched_count = array();
@ -103,10 +107,12 @@ MAIL;
public function generateResetPasswordKey() public function generateResetPasswordKey()
{ {
$key = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']); /*$key = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);
$key = substr($key, 0, 10) . $_SERVER['REQUEST_TIME'] . substr($key, 10, strlen($key)); $key = substr($key, 0, 10) . $_SERVER['REQUEST_TIME'] . substr($key, 10, strlen($key));*/
$user = $this->getLoggedUser();
$rs = Vesta::execute('v_get_sys_user_value', array('USER' => $user['uid'], 'VALUE' => 'RKEY'));
return $key; return $rs[''];
} }
public function signinExecute($request) public function signinExecute($request)
@ -129,6 +135,14 @@ MAIL;
return $this->reply(true); return $this->reply(true);
} }
public function getBackupsExecute(Request $request)
{
$user = VestaSession::getInstance()->getUser();
$rs = Vesta::execute(Vesta::V_LIST_SYS_USER_BACKUPS, array('USER' => $user['uid'], 'RESPONSE' => 'json'));
return $this->reply($rs['status'], @$rs['data']);
}
/** /**
* Get Initial params. * Get Initial params.
* Global constants / variables / configs * Global constants / variables / configs
@ -198,8 +212,8 @@ MAIL;
} }
$reply = array( $reply = array(
'auth_user' => array('uid' => $this->getLog), 'auth_user' => array('uid' => $this->getLoggedUser()),
'WEB_DOMAIN' => $this->getWebDomainParams($data_web_domin, $global_data), 'WEB_DOMAIN' => $this->getWebDomainParams($data_web_domain, $global_data),
'CRON' => $this->getCronParams(), 'CRON' => $this->getCronParams(),
'IP' => $this->getIpParams($data_ip, $global_data), 'IP' => $this->getIpParams($data_ip, $global_data),
'DNS' => $this->getDnsParams(), 'DNS' => $this->getDnsParams(),
@ -288,7 +302,7 @@ MAIL;
} }
return array( return array(
'SYS_USERS' => $users, 'SYS_USERS' => $global_data['users'],
'STATUSES' => array( 'STATUSES' => array(
'shared' => 'shared', 'shared' => 'shared',
'exclusive' => 'exclusive' 'exclusive' => 'exclusive'
@ -365,7 +379,7 @@ MAIL;
* @params array $data * @params array $data
* @return array * @return array
*/ */
public function getUsersParams($data = array(), $global_data) public function getUsersParams($data = array(), $global_data = array())
{ {
$pckg = array(); $pckg = array();
// json // json
@ -374,8 +388,6 @@ MAIL;
$pckg[$pckg_name] = $pckg_name; $pckg[$pckg_name] = $pckg_name;
} }
return array( return array(
'ROLE' => array('user' => 'user'),
'OWNER' => $data['user_names'],
'PACKAGE' => $pckg, 'PACKAGE' => $pckg,
'SHELL' => array( 'SHELL' => array(
'sh' => 'sh', 'sh' => 'sh',

View file

@ -31,7 +31,7 @@ class USER extends AjaxHandler
else { else {
$report = $result_report['data']; $report = $result_report['data'];
} }
$fullname_id = rand(0, count($users)-1); //$fullname_id = rand(0, count($users)-1);
$fullname = implode('', array($details['FNAME'], ' ', $details['LNAME'])); $fullname = implode('', array($details['FNAME'], ' ', $details['LNAME']));
$nses = $this->getNS($user, $details); $nses = $this->getNS($user, $details);
@ -54,14 +54,12 @@ class USER extends AjaxHandler
"SHELL" => $details['SHELL'], "SHELL" => $details['SHELL'],
"BACKUPS" => $details['BACKUPS'], "BACKUPS" => $details['BACKUPS'],
"WEB_TPL" => $details['WEB_TPL'], "WEB_TPL" => $details['WEB_TPL'],
"MAX_CHILDS" => $details['MAX_CHILDS'], //"MAX_CHILDS" => $details['MAX_CHILDS'],
"SUSPENDED" => $details['SUSPENDED'], "SUSPEND" => $details['SUSPENDED'],
"OWNER" => $details['OWNER'],
"ROLE" => $details['ROLE'],
"IP_OWNED" => $details['IP_OWNED'], "IP_OWNED" => $details['IP_OWNED'],
"U_CHILDS" => $details['U_CHILDS'], //"U_CHILDS" => $details['U_CHILDS'],
"U_DISK" => $details['U_DISK'],//$u_disk, "U_DISK" => $details['U_DISK'],
"U_BANDWIDTH" => $details['U_BANDWIDTH'],//$u_bandwidth, "U_BANDWIDTH" => $details['U_BANDWIDTH'],
"U_WEB_DOMAINS" => $details['U_WEB_DOMAINS'], "U_WEB_DOMAINS" => $details['U_WEB_DOMAINS'],
"U_WEB_SSL" => $details['U_WEB_SSL'], "U_WEB_SSL" => $details['U_WEB_SSL'],
"U_DNS_DOMAINS" => $details['U_DNS_DOMAINS'], "U_DNS_DOMAINS" => $details['U_DNS_DOMAINS'],
@ -69,8 +67,8 @@ class USER extends AjaxHandler
"U_MAIL_DOMAINS" => $details['U_MAIL_DOMAINS'], "U_MAIL_DOMAINS" => $details['U_MAIL_DOMAINS'],
"CONTACT" => $details['CONTACT'], "CONTACT" => $details['CONTACT'],
"DATE" => $details['DATE'], "DATE" => $details['DATE'],
"U_MAIL_BOXES" => rand(1, 10), // TODO: skid "U_MAIL_BOXES" => '0', // TODO: skid
"U_MAIL_FORWARDERS" => rand(1, 10), // TODO: skid "U_MAIL_FORWARDERS" => '0', // TODO: skid
"REPORTS_ENABLED" => $report, "REPORTS_ENABLED" => $report,
"U_WEB_DOMAINS" => $details['U_WEB_DOMAINS'] "U_WEB_DOMAINS" => $details['U_WEB_DOMAINS']
); );
@ -94,8 +92,6 @@ class USER extends AjaxHandler
'USER' => $spell['LOGIN_NAME'], 'USER' => $spell['LOGIN_NAME'],
'PASSWORD' => $spell['PASSWORD'], 'PASSWORD' => $spell['PASSWORD'],
'EMAIL' => $spell['CONTACT'], 'EMAIL' => $spell['CONTACT'],
'ROLE' => $spell['ROLE'],
'OWNER' => $user['uid'],
'PACKAGE' => $spell['PACKAGE'], 'PACKAGE' => $spell['PACKAGE'],
'FNAME' => $spell['FNAME'], 'FNAME' => $spell['FNAME'],
'LNAME' => $spell['LNAME'] 'LNAME' => $spell['LNAME']
@ -151,6 +147,16 @@ class USER extends AjaxHandler
$_USER = $_old['LOGIN_NAME']; $_USER = $_old['LOGIN_NAME'];
if ($_new['SUSPEND'] == 'on') {
$result = Vesta::execute(Vesta::V_SUSPEND_SYS_USER, array('USER' => $_USER));
return $this->reply($result['status']);
}
else {
$result = Vesta::execute(Vesta::V_UNSUSPEND_SYS_USER, array('USER' => $_USER));
}
$reports_result = $this->setUserReports($_USER, $_new['REPORTS_ENABLED']);
if (!empty($_new['PASSWORD']) && $_new['PASSWORD'] != Vesta::SAME_PASSWORD) { if (!empty($_new['PASSWORD']) && $_new['PASSWORD'] != Vesta::SAME_PASSWORD) {
$result = array(); $result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_new['PASSWORD'])); $result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_new['PASSWORD']));
@ -195,12 +201,38 @@ class USER extends AjaxHandler
$this->errors['NAMES'] = array($result['error_code'] => $result['error_message']); $this->errors['NAMES'] = array($result['error_code'] => $result['error_message']);
} }
/*
if ($_old['SUSPEND'] != $_new['SUSPEND']) {
$result = array();
if($_new['SUSPEND'] == 'on'){
$result = Vesta::execute(Vesta::V_SUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
}
else{
$result = Vesta::execute(Vesta::V_UNSUSPEND_DNS_DOMAIN, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN));
}
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
}
*/
if (!$this->status) { if (!$this->status) {
Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD'])); Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD']));
Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_old['PACKAGE'])); Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_old['PACKAGE']));
Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_old['EMAIL'])); Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_old['EMAIL']));
Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, array('USER' => $_USER, 'NS1' => $_old['NS1'], 'NS2' => $_old['NS2'])); Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, array('USER' => $_USER, 'NS1' => $_old['NS1'], 'NS2' => $_old['NS2']));
Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_old['SHELL'])); Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_old['SHELL']));
/*
if($_old['SUSPEND'] == 'on'){
$result = Vesta::execute(Vesta::V_SUSPEND_SYS_USER, array('USER' => $_USER));
}
else{
$result = Vesta::execute(Vesta::V_UNSUSPEND_SYS_USER, array('USER' => $_USER));
}
*/
} }
return $this->reply($this->status, ''); return $this->reply($this->status, '');
@ -208,11 +240,11 @@ class USER extends AjaxHandler
protected function setUserReports($user, $enabled) protected function setUserReports($user, $enabled)
{ {
if ($enabled === true) { if ($enabled == 'off') {
$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $user)); $result = Vesta::execute(Vesta::V_DEL_SYS_USER_REPORTS, array('USER' => $user));
} }
else { else {
$result = Vesta::execute(Vesta::V_DEL_SYS_USER_REPORTS, array('USER' => $user)); $result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $user));
} }
return $result['status']; return $result['status'];

View file

@ -30,7 +30,7 @@ class WEB_DOMAIN extends AjaxHandler
'U_DISK' => $record['U_DISK'], 'U_DISK' => $record['U_DISK'],
'U_BANDWIDTH' => $record['U_BANDWIDTH'], 'U_BANDWIDTH' => $record['U_BANDWIDTH'],
'TPL' => $record['TPL'], 'TPL' => $record['TPL'],
'ALIAS' => $record['ALIAS'], 'ALIAS' => @str_replace(",", ", ", $record['ALIAS']),
'PHP' => $record['PHP'], 'PHP' => $record['PHP'],
'CGI' => $record['CGI'], 'CGI' => $record['CGI'],
'ELOG' => $record['ELOG'], 'ELOG' => $record['ELOG'],
@ -39,6 +39,7 @@ class WEB_DOMAIN extends AjaxHandler
'SSL' => $record['SSL'], 'SSL' => $record['SSL'],
'SSL_HOME' => $record['SSL_HOME'], 'SSL_HOME' => $record['SSL_HOME'],
'SSL_CERT' => $record['SSL_CERT'], 'SSL_CERT' => $record['SSL_CERT'],
'SSL_KEY' => $record['SSL_KEY'],
'NGINX' => $record['NGINX'], 'NGINX' => $record['NGINX'],
'NGINX_EXT' => $record['NGINX_EXT'], 'NGINX_EXT' => $record['NGINX_EXT'],
'SUSPEND' => $record['SUSPEND'], 'SUSPEND' => $record['SUSPEND'],
@ -159,7 +160,7 @@ class WEB_DOMAIN extends AjaxHandler
/* if ($_s['SSL']) { /* if ($_s['SSL']) {
$params = array( $params = array(
'USER' => $user[''], 'USER' => $user['uid'],
'DOMAIN' => $_s['DOMAIN'], 'DOMAIN' => $_s['DOMAIN'],
'SSL_CERT' => $_s['SSL_CERT'] 'SSL_CERT' => $_s['SSL_CERT']
); );
@ -215,6 +216,20 @@ class WEB_DOMAIN extends AjaxHandler
}*/ }*/
if ($_s['SUSPEND'] == 'on') {
if($result['status']){
$result = array();
$result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'JOB' => $_s['DOMAIN']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
}
}
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }
@ -256,6 +271,14 @@ class WEB_DOMAIN extends AjaxHandler
$user = $this->getLoggedUser(); $user = $this->getLoggedUser();
$_DOMAIN = $_new['DOMAIN']; $_DOMAIN = $_new['DOMAIN'];
if ($_new['SUSPEND'] == 'on') {
$result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN));
return $this->reply($result['status']);
}
else {
$result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN));
}
if ($_old['IP'] != $_new['IP']) { if ($_old['IP'] != $_new['IP']) {
$result = array(); $result = array();
$result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_IP, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'IP' => $_new['IP'])); $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_IP, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'IP' => $_new['IP']));
@ -277,20 +300,24 @@ class WEB_DOMAIN extends AjaxHandler
if ($_old['ALIAS'] != $_new['ALIAS']) { if ($_old['ALIAS'] != $_new['ALIAS']) {
$result = array(); $result = array();
$old_arr = explode(',', $_old['ALIAS']); $old_arr_raw = preg_split('/[,\s]/', $_old['ALIAS']);
$new_arr = explode(',', $_new['ALIAS']); $new_arr_raw = preg_split('/[,\s]/', $_new['ALIAS']);
$old_arr = array();
$new_arr = array();
foreach ($old_arr_raw as $alias) {
if ('' != trim($alias)) {
$old_arr[] = $alias;
}
}
foreach ($new_arr_raw as $alias) {
if ('' != trim($alias)) {
$new_arr[] = $alias;
}
}
$added = array_diff($new_arr, $old_arr); $added = array_diff($new_arr, $old_arr);
$deleted = array_diff($old_arr, $new_arr); $deleted = array_diff($old_arr, $new_arr);
foreach ($added as $alias) {
$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['ADD_ALIAS'] = array($result['error_code'] => $result['error_message']);
}
}
foreach ($deleted as $alias) { foreach ($deleted as $alias) {
$result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias)); $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) { if (!$result['status']) {
@ -298,10 +325,18 @@ class WEB_DOMAIN extends AjaxHandler
$this->errors['DEL_ALIAS'] = array($result['error_code'] => $result['error_message']); $this->errors['DEL_ALIAS'] = array($result['error_code'] => $result['error_message']);
} }
} }
foreach ($added as $alias) {
$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['ADD_ALIAS'] = array($result['error_code'] => $result['error_message']);
}
}
} }
if (($_old['STATH_AUTH'] != $_new['STAT_AUTH']) && !empty($_s['STAT_AUTH']) && @Utils::getCheckboxBooleanValue($_s['STATS_AUTH'])) { if (($_old['STAT_AUTH'] != $_new['STAT_AUTH']) && !empty($_s['STAT_AUTH']) && @Utils::getCheckboxBooleanValue($_s['STATS_AUTH'])) {
$params = array( $params = array(
'USER' => $user['uid'], 'USER' => $user['uid'],
'DOMAIN' => $_DOMAIN, 'DOMAIN' => $_DOMAIN,
@ -380,6 +415,44 @@ class WEB_DOMAIN extends AjaxHandler
} }
} }
if ($_new['SSL']) {
$params = array(
'USER' => $user['uid'],
'DOMAIN' => $_new['DOMAIN'],
'SSL_CERT' => $_new['SSL_CERT']
);
if ($_new['SSL_HOME']) {
$params['SSL_HOME'] = $_new['SSL_HOME'];
}
$result = 0;
$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_SSL, $params);
if (!$result['status']) {
$this->errors['SSL'] = array($result['error_code'] => $result['error_message']);
}
}
if ($_s['SSL_KEY']) {
$params = array(
'USER' => $user['uid'],
'DOMAIN' => $_s['DOMAIN'],
'SSL_KEY' => $_s['SSL_KEY']
);
if ($_s['SSL_HOME']) {
$params['SSL_HOME'] = $_s['SSL_HOME'];
}
$result = 0;
$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_SSL, $params);
if (!$result['status']) {
$this->errors['SSL'] = array($result['error_code'] => $result['error_message']);
}
}
return $this->reply($result['status'], $result['data']); return $this->reply($result['status'], $result['data']);
} }

View file

@ -14,6 +14,8 @@ class Vesta
const SAME_PASSWORD = '********'; const SAME_PASSWORD = '********';
const V_LIST_SYS_CONFIG = 'v_list_sys_config'; const V_LIST_SYS_CONFIG = 'v_list_sys_config';
// BACKUP
const V_LIST_SYS_USER_BACKUPS = 'v_list_sys_user_backups';
// IP // IP
const V_LIST_SYS_IPS = 'v_list_sys_ips'; const V_LIST_SYS_IPS = 'v_list_sys_ips';
const V_ADD_SYS_IP = 'v_add_sys_ip'; const V_ADD_SYS_IP = 'v_add_sys_ip';
@ -36,6 +38,8 @@ class Vesta
const V_CHANGE_DNS_DOMAIN_TTL = 'v_change_dns_domain_ttl'; const V_CHANGE_DNS_DOMAIN_TTL = 'v_change_dns_domain_ttl';
const V_CHANGE_DNS_DOMAIN_EXP = 'v_change_dns_domain_exp'; const V_CHANGE_DNS_DOMAIN_EXP = 'v_change_dns_domain_exp';
const V_CHANGE_DNS_DOMAIN_RECORD = 'v_change_dns_domain_record'; const V_CHANGE_DNS_DOMAIN_RECORD = 'v_change_dns_domain_record';
const V_SUSPEND_DNS_DOMAIN = 'v_suspend_dns_domain';
const V_UNSUSPEND_DNS_DOMAIN = 'v_unsuspend_dns_domain';
const V_DEL_DNS_DOMAIN = 'v_del_dns_domain'; const V_DEL_DNS_DOMAIN = 'v_del_dns_domain';
const V_DEL_DNS_DOMAIN_RECORD = 'v_del_dns_domain_record'; const V_DEL_DNS_DOMAIN_RECORD = 'v_del_dns_domain_record';
// CRON // CRON
@ -59,6 +63,14 @@ class Vesta
const V_CHANGE_SYS_USER_PASSWORD = 'v_change_sys_user_password'; const V_CHANGE_SYS_USER_PASSWORD = 'v_change_sys_user_password';
const V_CHANGE_SYS_USER_SHELL = 'v_change_sys_user_shell'; const V_CHANGE_SYS_USER_SHELL = 'v_change_sys_user_shell';
const V_CHANGE_SYS_USER_ROLE = 'v_change_sys_user_role'; const V_CHANGE_SYS_USER_ROLE = 'v_change_sys_user_role';
const V_SUSPEND_SYS_USER = 'v_suspend_sys_user';
const V_UNSUSPEND_SYS_USER = 'v_unsuspend_sys_user';
/*
const V_SUSPEND_SYS_USER = 'v_suspend_sys_user';
const V_UNSUSPEND_SYS_USER = 'v_unsuspend_sys_user';
const V_SUSPEND_SYS_USER = 'v_suspend_sys_users';
const V_UNSUSPEND_SYS_USERS = 'v_unsuspend_sys_users';
*/
const V_DEL_SYS_USER = 'v_del_sys_user'; const V_DEL_SYS_USER = 'v_del_sys_user';
const V_CHANGE_SYS_USER_NAME = 'v_change_sys_user_name'; const V_CHANGE_SYS_USER_NAME = 'v_change_sys_user_name';
// WEB_DOMAIN // WEB_DOMAIN
@ -143,6 +155,7 @@ class Vesta
// e.g.: /usr/bin/sudo /usr/local/vesta/bin/v_list_sys_users vesta json // e.g.: /usr/bin/sudo /usr/local/vesta/bin/v_list_sys_users vesta json
$cmd = "{$params['sudo']} {$params['functions']}{$cmd_command} {$params['parameters']} {$params['reply']}"; $cmd = "{$params['sudo']} {$params['functions']}{$cmd_command} {$params['parameters']} {$params['reply']}";
exec($cmd, $output, $return); exec($cmd, $output, $return);
$result = 0; $result = 0;
$result = array( $result = array(