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());
} }

File diff suppressed because it is too large Load diff

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")) {
span[a] = document.createElement("span"); $(inputs[a]).addClass('style-applied');
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,33 +65,33 @@ var Custom = {
} }
} }
inputs = document.getElementsByTagName("select"); inputs = document.getElementsByTagName("select");
for(a = 0; a < inputs.length; a++) { try {
try{ for(a = 0; a < inputs.length; a++) {
fb.log($(inputs[a]).hasClass("styled")); 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; textnode = document.createTextNode(active);
textnode = document.createTextNode(active); for(b = 0; b < option.length; b++) {
for(b = 0; b < option.length; b++) { if(option[b].selected == true) {
if(option[b].selected == true) { textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
textnode = document.createTextNode(option[b].childNodes[0].nodeValue); }
}
span[a] = document.createElement("span");
span[a].className = "select";
span[a].id = "select-" + inputs[a].name + a;
span[a].appendChild(textnode);
inputs[a].parentNode.insertBefore(span[a], inputs[a]);
inputs[a].id = inputs[a].name + a;
if(!inputs[a].getAttribute("disabled")) {
inputs[a].onchange = Custom.choose;
} else {
inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
} }
} }
span[a] = document.createElement("span");
span[a].className = "select";
span[a].id = "select-" + inputs[a].name + a;
span[a].appendChild(textnode);
inputs[a].parentNode.insertBefore(span[a], inputs[a]);
inputs[a].id = inputs[a].name + a;
if(!inputs[a].getAttribute("disabled")) {
inputs[a].onchange = Custom.choose;
} else {
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,64 +1,81 @@
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;
// TODO: fix it data.data // TODO: fix it data.data
$.each(data, function(key) $.each(data, function(key)
{ {
var db_list = data[key]; var db_list = data[key];
fb.warn('KEY: %o', key); fb.warn('KEY: %o', key);
fb.warn('DATA: %o', data[key]); fb.warn('DATA: %o', data[key]);
var tpl_divider = App.Templates.get('DIVIDER', 'db'); var tpl_divider = App.Templates.get('DIVIDER', 'db');
tpl_divider.set(':TYPE', key); tpl_divider.set(':TYPE', key);
acc[acc.length++] = tpl_divider.finalize(); acc[acc.length++] = tpl_divider.finalize();
$(db_list).each(function(i, o) $(db_list).each(function(i, o)
{ {
acc[acc.length++] = App.HTML.Build[build_method](o, key); acc[acc.length++] = App.HTML.Build[build_method](o, key);
}); });
/*var o = data[key]; /*var o = data[key];
fb.warn(key); fb.warn(key);
acc[acc.length++] = App.HTML.Build[build_method](o, key);*/ acc[acc.length++] = App.HTML.Build[build_method](o, key);*/
}); });
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 buttons-row cc">\ <div class="form-row suspended cc">\
<input type="submit" value="~!:save_button~!" name="save" class="add-entry-btn do_action_save_form">\ <label for="#" class="field-label">suspended:</label>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
<a class="help-btn" href="http://vestacp.com/docs/ip/" target="_blank">Help</a>\ </div>\
<div class="form-row buttons-row cc">\
<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="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">\
@ -611,7 +617,7 @@ App.Templates.html = {
<label for="#" class="field-label">CGI:</label>\ <label for="#" class="field-label">CGI:</label>\
<input type="checkbox" value="~!:CGI~!" ~!:CHECKED_CGI~! name="CGI" class="styled">\ <input type="checkbox" value="~!:CGI~!" ~!:CHECKED_CGI~! name="CGI" class="styled">\
</div>\ </div>\
<div class="form-row cc">\ <div class="form-row cc">\
<label for="#" class="field-label">ELOG:</label>\ <label for="#" class="field-label">ELOG:</label>\
<input type="checkbox" value="~!:ELOG~!" ~!:CHECKED_ELOG~! name="ELOG" class="styled">\ <input type="checkbox" value="~!:ELOG~!" ~!:CHECKED_ELOG~! name="ELOG" class="styled">\
</div>\ </div>\
@ -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 buttons-row cc">\ <div class="form-row suspended cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\ <label for="#" class="field-label">suspended:</label>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND" />\
<a target="_blank" href="http://vestacp.com/docs/db/" class="help-btn">Help</a>\ </div>\
</div>\ <div class="form-row buttons-row cc">\
<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="delete-btn do_action_delete_entry">Delete</span>\
</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 buttons-row cc">\ <div class="form-row suspended cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\ <label for="#" class="field-label">suspended:</label>\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\ <input type="checkbox" ~!:SUSPENDED_CHECKED~! value="~!:SUSPENDED_VALUE~!" class="styled do_action_toggle_suspend" name="SUSPEND"/>\
<a target="_blank" href="http://vestacp.com/docs/cron/" class="help-btn">Help</a>\ </div>\
</div>\ <div class="form-row buttons-row cc">\
<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="delete-btn do_action_delete_entry">Delete</span>\
</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
); );
@ -51,16 +51,16 @@ 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']);
} }
@ -89,8 +103,8 @@ class CRON extends AjaxHandler
*/ */
public function deleteExecute(Request $request) public function deleteExecute(Request $request)
{ {
$user = $this->getLoggedUser(); $user = $this->getLoggedUser();
$spell = $request->getParameter('spell'); $spell = $request->getParameter('spell');
$params = array( $params = array(
'USER' => $user['uid'], 'USER' => $user['uid'],
'JOB' => $spell['JOB'] 'JOB' => $spell['JOB']
@ -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,20 +122,37 @@ 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();
$params = array( if($_new['SUSPEND'] == 'on'){
'USER' => $user['uid'], $result = Vesta::execute(Vesta::V_SUSPEND_DB_BASE, array('USER' => $user['uid'], 'DB' => $_new['DB']));
'DB' => $_s['DB'], }
'PASSWORD' => $_s['PASSWORD'] else{
); $result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASE, array('USER' => $user['uid'], 'DB' => $_new['DB']));
}
$result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params); if (!$result['status']) {
$this->status = FALSE;
$this->errors['SUSPEND'] = array($result['error_code'] => $result['error_message']);
}
if (!$result['status']) { if ($_new['PASSWORD'] != Vesta::SAME_PASSWORD && $_new['PASSWORD'] != $_old['PASSWORD']) {
$this->errors[] = array($result['error_code'] => $result['error_message']); $params = array(
} 'USER' => $user['uid'],
'DB' => $_new['DB'],
'PASSWORD' => $_new['PASSWORD']
);
$result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params);
if (!$result['status']) {
$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

@ -73,11 +73,15 @@ class IP extends AjaxHandler
$spell = $request->getParameter('spell'); $spell = $request->getParameter('spell');
$params = array( $params = array(
'IP_ADDRESS' => $spell['IP_ADDRESS'], 'IP_ADDRESS' => $spell['IP_ADDRESS'],
'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(),
@ -252,8 +266,8 @@ MAIL;
return array( return array(
'TPL' => $this->getTemplates(), 'TPL' => $this->getTemplates(),
'ALIAS' => array(), 'ALIAS' => array(),
'STAT' => array( 'STAT' => array(
'none' => 'none', 'none' => 'none',
'webalizer' => 'webalizer', 'webalizer' => 'webalizer',
'awstats' => 'awstats' 'awstats' => 'awstats'
), ),
@ -288,15 +302,15 @@ 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'
), ),
'INTERFACES' => $ifaces, 'INTERFACES' => $ifaces,
'OWNER' => $global_data['users'], 'OWNER' => $global_data['users'],
'MASK' => array( 'MASK' => array(
'255.255.255.0' => '255.255.255.0', '255.255.255.0' => '255.255.255.0',
'255.255.255.128' => '255.255.255.128', '255.255.255.128' => '255.255.255.128',
'255.255.255.192' => '255.255.255.192', '255.255.255.192' => '255.255.255.192',
'255.255.255.224' => '255.255.255.224', '255.255.255.224' => '255.255.255.224',
@ -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

@ -26,12 +26,12 @@ class USER extends AjaxHandler
// get reports attribute // get reports attribute
$result_report = Vesta::execute(Vesta::V_GET_SYS_USER_VALUE, array('USER' => $user, 'VALUE' => 'reports'), self::TEXT); $result_report = Vesta::execute(Vesta::V_GET_SYS_USER_VALUE, array('USER' => $user, 'VALUE' => 'reports'), self::TEXT);
if ($result_report['status'] != true) { if ($result_report['status'] != true) {
$report = null; $report = null;
} }
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

@ -17,12 +17,12 @@ class WEB_DOMAIN extends AjaxHandler
$result = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array('USER' => $user['uid']), self::JSON); $result = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array('USER' => $user['uid']), self::JSON);
$stat = array(); $stat = array();
$result_stat = Vesta::execute('v_list_web_domains_stats', array('USER' => $user['uid']), self::JSON); $result_stat = Vesta::execute('v_list_web_domains_stats', array('USER' => $user['uid']), self::JSON);
foreach ($result_stat['data'] as $w_d => $w_d_details) { foreach ($result_stat['data'] as $w_d => $w_d_details) {
$stat[$w_d] = $w_d_details; $stat[$w_d] = $w_d_details;
} }
foreach($result['data'] as $web_domain => $record) foreach($result['data'] as $web_domain => $record)
{ {
$web_details = array( $web_details = array(
@ -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,13 +39,14 @@ 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'],
'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE']))) 'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
); );
$web_details['STAT'] == '' ? $web_details['STAT'] = 'none' : true; $web_details['STAT'] == '' ? $web_details['STAT'] = 'none' : true;
$reply[$web_domain] = $web_details; $reply[$web_domain] = $web_details;
} }
if (!$result['status']) { if (!$result['status']) {
@ -90,7 +91,7 @@ class WEB_DOMAIN extends AjaxHandler
if (!empty($_s['ALIAS'])) { if (!empty($_s['ALIAS'])) {
$alias = str_replace("\n", "", $_s['ALIAS']); $alias = str_replace("\n", "", $_s['ALIAS']);
$alias = str_replace("\n", "", $alias); $alias = str_replace("\n", "", $alias);
foreach ($alias_arr as $alias) { foreach ($alias_arr as $alias) {
$params = array( $params = array(
@ -157,9 +158,9 @@ 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']);
} }
@ -250,12 +265,20 @@ class WEB_DOMAIN extends AjaxHandler
$_old['ELOG'] = $_old['ELOG'] == 'yes' ? 'on' : 'off'; $_old['ELOG'] = $_old['ELOG'] == 'yes' ? 'on' : 'off';
$_old['CGI'] = $_old['CGI'] == 'yes' ? 'on' : 'off'; $_old['CGI'] = $_old['CGI'] == 'yes' ? 'on' : 'off';
$_old['AUTH'] = $_old['AUTH'] == 'yes' ? 'on' : 'off'; $_old['AUTH'] = $_old['AUTH'] == 'yes' ? 'on' : 'off';
$_old['SSL'] = $_old['SSL'] == 'yes' ? 'on' : 'off'; $_old['SSL'] = $_old['SSL'] == 'yes' ? 'on' : 'off';
$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,12 +300,32 @@ 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 ($deleted as $alias) {
$result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['DEL_ALIAS'] = array($result['error_code'] => $result['error_message']);
}
}
foreach ($added as $alias) { foreach ($added as $alias) {
$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias)); $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) { if (!$result['status']) {
@ -290,18 +333,10 @@ class WEB_DOMAIN extends AjaxHandler
$this->errors['ADD_ALIAS'] = array($result['error_code'] => $result['error_message']); $this->errors['ADD_ALIAS'] = array($result['error_code'] => $result['error_message']);
} }
} }
foreach ($deleted as $alias) {
$result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['DEL_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
@ -99,7 +111,7 @@ class Vesta
// DB // DB
const V_LIST_DB_BASES = 'v_list_db_bases'; const V_LIST_DB_BASES = 'v_list_db_bases';
const V_LIST_DB_HOSTS = 'v_list_db_hosts'; const V_LIST_DB_HOSTS = 'v_list_db_hosts';
const V_LIST_WEB_DOMAIN_ALIAS = 'v_list_web_domain_alias'; const V_LIST_WEB_DOMAIN_ALIAS = 'v_list_web_domain_alias';
const V_ADD_DB_BASE = 'v_add_db_base'; const V_ADD_DB_BASE = 'v_add_db_base';
const V_ADD_DB_HOST = 'v_add_db_host'; const V_ADD_DB_HOST = 'v_add_db_host';
const V_SUSPEND_DB_BASE = 'v_suspend_db_base'; const V_SUSPEND_DB_BASE = 'v_suspend_db_base';
@ -120,7 +132,7 @@ class Vesta
* @param array $parameters * @param array $parameters
* @return string * @return string
*/ */
static function execute($cmd_command, $parameters=array(), $reply = '') static function execute($cmd_command, $parameters = array(), $reply = '')
{ {
$r = new Request(); $r = new Request();
$_DEBUG = $r->getParameter("debug", FALSE); $_DEBUG = $r->getParameter("debug", FALSE);
@ -129,26 +141,27 @@ class Vesta
throw new ProtectionException('No function name passed into Vesta::execute'); // TODO: move msg to Messages:: throw new ProtectionException('No function name passed into Vesta::execute'); // TODO: move msg to Messages::
} }
$reply_type = $reply; $reply_type = $reply;
if ($reply != AjaxHandler::JSON) { if ($reply != AjaxHandler::JSON) {
$reply = ''; $reply = '';
} }
$params = array( $params = array(
'sudo' => Config::get('sudo_path'), 'sudo' => Config::get('sudo_path'),
'functions' => Config::get('vesta_functions_path'), 'functions' => Config::get('vesta_functions_path'),
'parameters' => is_array($parameters) ? "'".implode("' '", $parameters)."'" : $parameters, 'parameters' => is_array($parameters) ? "'".implode("' '", $parameters)."'" : $parameters,
'reply' => $reply 'reply' => $reply
); );
// 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(
'status' => TRUE, 'status' => TRUE,
'data' => '', 'data' => '',
'error_code' => '', 'error_code' => '',
'error_message' => '' 'error_message' => ''
); );