Merge branch 'master' of github.com:serghey-rodin/vesta

This commit is contained in:
Serghey Rodin 2011-09-04 01:02:44 +03:00
commit 737370ced7
28 changed files with 793 additions and 346 deletions

View file

@ -1,4 +1,4 @@
Copyright (c) 2005-2010, http://vestacp.com
Copyright (c) 2005-2010, http://www.vestacp.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,

View file

@ -2428,3 +2428,4 @@ select{
font-size:14px;
font-weight:bold;
}

View file

@ -1,6 +1,6 @@
<?php
require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vesta/core/utils/error_logger.php'
require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vesta/core/utils/error_logger.php';
require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vesta/app.init.php';
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 266 B

Before After
Before After

View file

@ -204,6 +204,7 @@
<!-- script type="text/javascript" src="js/lib/jquery-1.4.4.min.js"></script -->
<script type="text/javascript" src="js/lib/cookie.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.js"></script>
<script type="text/javascript" src="js/date_format.js"></script>
<script type="text/javascript" src="js/lib/custom-form-elements.js"></script>

View file

@ -1,7 +1,21 @@
$(document).ready(function(){
try{
App.Utils.detectBrowser();
App.Env.world = 'CRON';
if ('undefined' != typeof App.Tmp.loadTAB) {
App.Env.world = App.Tmp.loadTAB;
}
if ('undefined' == typeof App.Tmp.loadTAB && cookieEnabled()) {
var tab = getCookie('tab');
if (null != tab && $.inArray(tab, App.Constants.TABS)) {
App.Env.world = tab;
}
else {
App.Env.world = App.Constants.TABS[0];
}
}
App.Pages.init();
App.Ref.init();

View file

@ -8,34 +8,38 @@ App.i18n.getMessage = function(key)
}
// Constants
App.Constants.IP_FORM_ID = 'ip-form';
App.Constants.DNS_FORM_ID = 'dns-form';
App.Constants.USER_FORM_ID = 'user-form';
App.Constants.WEB_DOMAIN_FORM_ID = 'web_domain-form';
App.Constants.DB_FORM_ID = 'db-form';
App.Constants.CRON_FORM_ID = 'cron-form';
App.Constants.IP_FORM_ID = 'ip-form';
App.Constants.DNS_FORM_ID = 'dns-form';
App.Constants.USER_FORM_ID = 'user-form';
App.Constants.WEB_DOMAIN_FORM_ID = 'web_domain-form';
App.Constants.DB_FORM_ID = 'db-form';
App.Constants.CRON_FORM_ID = 'cron-form';
App.Constants.IP = 'IP';
App.Constants.DNS = 'DNS';
App.Constants.SUSPENDED_YES = 'yes';
App.Constants.DNS_TEMPLATES = {'default': 'Default'};
App.Settings.ajax_url = 1;
App.Settings.uri = location.href.replace('index.html', '');
App.Settings.popup_conf = { 'centered' : true, 'bgcolor' : '#FF0000', 'lightboxSpeed' : 'fast', 'destroyOnClose': true };
// Settings
App.Settings.USER_VISIBLE_NS = 2;
App.Settings.NS_MIN = 2;
App.Settings.NS_MAX = 8;
App.Settings.ajax_url = 1;
App.Settings.uri = location.href.replace('index.html', '');
App.Settings.popup_conf = { 'centered' : true, 'bgcolor' : '#FF0000', 'lightboxSpeed' : 'fast', 'destroyOnClose': true };
App.Constants.SUSPENDED_YES = 'yes';
App.Constants.IP = 'IP';
App.Constants.DNS = 'DNS';
App.Constants.DNS_TEMPLATES = {'default': 'Default'};
// Messages
App.Messages.total_dns_records = {single: 'total record', plural: 'total records'};
App.Messages.get = function(key, plural) {
if ('undefined' != typeof App.Messages[key]) {
return plural ? App.Messages[key].plural : App.Messages[key].single;
}
}
// Empty
App.Empty = {};
App.Empty.USER = {'CONTACT':'', 'PASSWORD':'','LOGIN_NAME':'','LNAME':'', 'FNAME':'','NS1':'','NS2':'','NS3':'','NS4':'','NS5':'','NS6':'','NS7':'','NS8':''};
App.Settings.getMethodName = function(action)
{

View file

@ -103,8 +103,7 @@ App.Actions.save_form = function(evt) {
else { // OLD ITEM, UPDATING IT
var source = $(elm).find('.source').val();
var values = App.Helpers.getFormValues(elm);
if(App.Validate.form(values, $('#'+elm_id))) {
App.Model.add(values, source);
if(App.Validate.form(values, $('#'+elm_id))) {
App.Model.update(values, source, elm);
}
}
@ -146,12 +145,49 @@ App.Actions.cancel_form = function(evt, params) {
App.Actions.suspend = function(evt)
{
alert('Suspend?');
var confirmed = confirm('Suspend?');
if (!confirmed) {
return ;
}
var elm = $(evt.target);
var row = elm.parents('.row');
var options = row.find('.source').val();
App.Ajax.request(App.Env.world+'.suspend', {spell: options}, function(reply) {
if (reply.result) {
//var tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
//$(elm).replaceWith(tpl.finalize());
App.Pages.prepareHTML();
App.Helpers.updateScreen();
}
else {
return App.Helpers.alert('Failed to suspend');
}
});
}
App.Actions.unsuspend = function(evt)
{
alert('Unsuspend?');
var confirmed = confirm('Unsuspend?');
if (!confirmed) {
return ;
}
var elm = $(evt.target);
var row = elm.parents('.row');
var options = row.find('.source').val();
App.Ajax.request(App.Env.world+'.unsuspend', {spell: options}, function(reply) {
if (reply.result) {
//var tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
//$(elm).replaceWith(tpl.finalize());
App.Pages.prepareHTML();
App.Helpers.updateScreen();
}
else {
return App.Helpers.alert('Failed to suspend');
}
});
}
// do_action_form_help
@ -230,3 +266,56 @@ App.Actions.backup_db = function(evt)
{
alert('TODO');
}
App.Actions.add_form_ns = function(evt)
{
var elm = $(evt.target);
form = elm.parents('.form:first');
var total_nses = $(form).find('.ns-entry').length;
if (total_nses == App.Settings.NS_MAX) {
return App.Helpers.alert('Maximum number of NS cannot be more than ' + App.Settings.NS_MAX);
}
var tpl = App.Templates.get('NS_INPUT', 'user');
tpl.set(':NAME', '');
tpl.set(':NS_LABEL', 'NS');
elm.before(tpl.finalize());
if ((total_nses + 1) == App.Settings.NS_MAX ) { // added last NS
$('.additional-ns-add', form).addClass('hidden');
}
$(form).find('.ns-entry').each(function(i, o)
{
$(o).find('label').text('NS #' + (i + 1));
$(o).find('input').attr('name', 'NS' + (i + 1));
});
}
App.Actions.delete_ns = function(evt)
{
var elm = $(evt.target);
form = elm.parents('.form:first');
var total_nses = $(form).find('.ns-entry').length;
if (total_nses == App.Settings.NS_MIN) {
return App.Helpers.alert('Minimum number of NS is ' + App.Settings.NS_MIN);
}
var form = elm.parents('.form:first');
$(elm).parents('.form:first').find('.additional-ns-add').removeClass('hidden');
$(elm).parents('.ns-entry').remove();
$(form).find('.ns-entry').each(function(i, o)
{
$(o).find('label').text('NS #' + (i + 1));
$(o).find('input').attr('name', 'NS' + (i + 1));
});
}
App.Actions.view_full_ns_list = function(evt)
{
var elm = $(evt.target);
App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html());
}

View file

@ -78,7 +78,9 @@ var App = {
Core: {},
Bash: {},
Console: {},
Constants: {},
Constants: {
TABS: ['USER','WEB_DOMAIN','MAIL','DB','DNS','IP','CRON']
},
Actions: {},
Helpers: {},
Filters: {},
@ -175,16 +177,7 @@ App.Ajax.request = function(jedi_method, data, callback)
{
App.Helpers.beforeAjax(jedi_method);
$.ajax({
url: function() {
var url_parts = location.href.replace('#', '').split('/');
if (url_parts[url_parts.length -1] == 'index.html') {
url_parts[url_parts.length -1] = 'dispatch.php';
}
else {
url_parts.push('dispatch.php');
}
return url_parts.join('/');
}(),
url: App.Helpers.getBackendUrl(),
global: false,
type: data.request_method || "POST",
data: $.extend(data, {'jedi_method': jedi_method}),

View file

@ -264,3 +264,26 @@ App.Helpers.closeInnerPopup = function(evt)
{
$('#inner-popup').remove();
}
App.Helpers.getBackendUrl = function()
{
var url_parts = location.href.split('#');
if (url_parts.length > 1) {
var tab = url_parts[url_parts.length - 1];
if ($.inArray(tab, App.Constants.TABS) != -1) {
App.Tmp.loadTAB = tab;
}
}
var url_parts = location.href.split('?', 1);
var url = url_parts[0];
url_parts = url.split('/');
if (url_parts[url_parts.length -1] == 'index.html') {
url_parts[url_parts.length -1] = 'dispatch.php';
}
else {
url_parts.push('dispatch.php');
}
return url_parts.join('/');
}

View file

@ -1,6 +1,6 @@
App.HTML.setTplKeys = function(tpl, o, empty)
{
var empty = empty || '-';
var empty = empty || '';
fb.log(empty);
tpl.set(':source', $.toJSON(o).replace(/'/gi, "\\'"))
$(o).each(function(i, object)
@ -12,7 +12,7 @@ App.HTML.setTplKeys = function(tpl, o, empty)
tpl.set(':' + key, val || '');
}
else {
tpl.set(':' + key, val || '-');
tpl.set(':' + key, val || '');
}
});
});
@ -138,14 +138,14 @@ App.HTML.Build.ip_entry = function(o)
var tpl = App.Templates.get('ENTRY', 'ip');
tpl = App.HTML.setTplKeys(tpl, o);
if (App.Constants.SUSPENDED_YES == o.SUSPENDED) {
/*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', sub_tpl.finalize());
tpl.set(':SUSPENDED_TPL', '');
return tpl.finalize();
}
@ -163,14 +163,14 @@ App.HTML.Build.dns_entry = function(o, is_new)
tpl.set(':DATE', now.format("d.mm.yyyy"));
}
if (App.Constants.SUSPENDED_YES == o.SUSPEND) {
/*if (App.Constants.SUSPENDED_YES == o.SUSPEND) {
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', sub_tpl.finalize());
tpl.set(':SUSPENDED_TPL', '');
return tpl.finalize();
}
@ -190,13 +190,41 @@ App.HTML.Build.user_entry = function(o, key)
var tpl = App.Templates.get('ENTRY', 'user');
tpl = App.HTML.setTplKeys(tpl, o);
if (App.Constants.SUSPENDED_YES == o.SUSPENDED) {
/*if (App.Constants.SUSPENDED_YES == o.SUSPENDED) {
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());
var ns = [];
var ns_full = [];
fb.info(o);
$([1,2,3,4,5,6,7,8]).each(function(i, index)
{
if (o['NS'+index].trim() != '') {
var tpl_ns = App.Templates.get('NS_RECORD', 'user');
tpl_ns.set(':NAME', o['NS'+index]);
var tpl_finalized = tpl_ns.finalize();
ns_full[ns_full.length++] = tpl_finalized;
if (i < App.Settings.USER_VISIBLE_NS) {
ns[ns.length++] = tpl_finalized;
}
}
});
if (ns_full.length <= App.Settings.USER_VISIBLE_NS) {
tpl.set(':NS', ns.done());
}
tpl.set(':SUSPENDED_TPL', sub_tpl.finalize());
else {
var ns_custom = App.Templates.get('NS_MINIMIZED', 'user');
ns_custom.set(':NS_MINI', ns.done());
ns_custom.set(':NS_FULL', ns_full.done());
ns_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - ns_full.length));
tpl.set(':NS', ns_custom.finalize());
}
return tpl.finalize();
}
@ -220,7 +248,22 @@ App.HTML.Build.user_form = function(options, id)
tpl.set(':save_button', 'SAVE');
}
options = !App.Helpers.isEmpty(options) ? options : {'CONTACT':'', 'PASSWORD':'','LOGIN_NAME':'','NS':''};
options = !App.Helpers.isEmpty(options) ? options : App.Empty.USER;
// NS
var ns = [];
$([3,4,5,6,7,8]).each(function(i, index)
{fb.warn(options);
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());
tpl = App.HTML.setTplKeys(tpl, options, true);
tpl = App.HTML.Build.user_selects(tpl, options);
@ -491,7 +534,7 @@ App.HTML.Build.db_selects = function(tpl, options)
App.HTML.Build.ip_selects = function(tpl, options)
{
// OWNER
var users = App.Env.initialParams.IP.SYS_USERS || ['Skid'];
var users = App.Env.initialParams.IP.SYS_USERS;
var opts = App.HTML.Build.options(users, options.OWNER);
tpl.set(':owner_options', opts);

45
web/js/lib/cookie.js Normal file
View file

@ -0,0 +1,45 @@
var today = new Date();
var expiryyear = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);
var expirymonth = new Date(today.getTime() + 30 * 24 * 60 * 60 * 1000);
var expiryday = new Date(today.getTime() + 24 * 60 * 60 * 1000);
function getCookie(name)
{
var reg= new RegExp("; "+name+";|; "+name+"=([^;]*)");
var matches=reg.exec('; '+document.cookie+';');
if (matches) return ((matches[1])?unescape(matches[1]):'');
return null;
}
function setCookie (name,value,expires,path,domain,secure)
{
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
return getCookie(name)!=null?true:false;
}
function deleteCookie (name,path,domain)
{
if (getCookie(name)!=null)
{
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
}
function cookieEnabled()
{
testCookieName="_testCookie_";
if (setCookie(testCookieName,1))
{
deleteCookie(testCookieName);
return true;
}
else return false;
}

View file

@ -72,10 +72,12 @@ App.Model.add = function(values, source_json)
App.Helpers.Warn('Changes were not applied');
}
else {
var build_method = App.Env.getWorldName() + '_entry';
/*var build_method = App.Env.getWorldName() + '_entry';
var tpl = App.HTML.Build[build_method](values, 'new');
App.Ref.CONTENT..replaceWith(tpl);
App.Ref.CONTENT..replaceWith(tpl);*/
// todo: reply.data;
App.Pages.prepareHTML();
App.Helpers.updateScreen();
}
});
}
@ -113,8 +115,11 @@ App.Model.update = function(values, source_json, elm)
App.Helpers.Warn('Changes were not applied');
}
else {
var tpl = App.HTML.Build[build_method](reply.data);
/*var tpl = App.HTML.Build[build_method](reply.data);
$(elm).replaceWith(tpl);
App.Helpers.updateScreen();*/
// todo: reply.data;
App.Pages.prepareHTML();
App.Helpers.updateScreen();
}
// TODO: !

View file

@ -8,6 +8,10 @@ App.Pages.init = function(){
$('.section.active').removeClass('active');
$('#'+App.Env.world).addClass('active');
if (cookieEnabled()) {
setCookie('tab', App.Env.world);
}
}
App.Pages.prepareHTML = function()

View file

@ -32,7 +32,7 @@ App.Templates.html = {
select_option: ['<option ~!:SELECTED~! value="~!:VALUE~!">~!:TEXT~!</option>'],
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_SUSPENDED : ['<span class="ip-status-info ip-enabled-status do_action_unsuspend"><span class="ip-status-text do_action_unsuspend">disabled</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>']
},
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>']
@ -47,17 +47,17 @@ App.Templates.html = {
<input type="hidden" name="source" class="source" value=~!:source~!>\
<input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\
<div class="errors">\
<div class="form-error hidden">\
</div>\
<div class="form-row cc">\
<input type="hidden" value="~!:DATE~!" name="DATE">\
<label for="#" class="field-label">domain:</label>\
<input type="text" name="DNS_DOMAIN" value="~!:DNS_DOMAIN~!" class="text-field DNS_DOMAIN">\
<input type="text" name="DNS_DOMAIN" value="~!:DNS_DOMAIN~!" class="text-field rule-required rule-domain">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">ip address:</label>\
<div class="autocomplete-box">\
<input type="text" name="IP" value="~!:IP~!" class="text-field IP">\
<input type="text" name="IP" value="~!:IP~!" class="text-field rule-required rule-ip">\
<i class="arrow">&nbsp;</i>\
</div>\
</div>\
@ -71,11 +71,11 @@ App.Templates.html = {
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">ttl:</label>\
<input type="text" value="~!:TTL~!" name="TTL" class="text-field ttl-field">\
<input type="text" value="~!:TTL~!" name="TTL" class="text-field ttl-field rule-required rule-numeric">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">soa:</label>\
<input type="text" value="~!:SOA~!" name="SOA" class="text-field">\
<input type="text" value="~!:SOA~!" name="SOA" class="text-field rule-required rule-numeric">\
</div>\
<div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form" name="save">\
@ -171,11 +171,11 @@ App.Templates.html = {
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'~!:target~!\'>\
<div class="entry-header">~!:title~!</div>\
<div class="form-error">\
<div class="form-error hidden">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">ip address:</label>\
<input type="text" value="~!:IP_ADDRESS~!" name="IP_ADDRESS" class="text-field">\
<input type="text" value="~!:IP_ADDRESS~!" name="IP_ADDRESS" class="text-field rule-required rule-ip">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">owner:</label>\
@ -192,7 +192,7 @@ App.Templates.html = {
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">name:</label>\
<input type="text" name="NAME" value="~!:NAME~!" class="text-field">\
<input type="text" name="NAME" value="~!:NAME~!" class="text-field rule-abc">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">interface:</label>\
@ -276,20 +276,32 @@ App.Templates.html = {
SUSPENDED_TPL_DISABLED : ['<span class="ip-status-info ip-suspended-status do_action_delete_ip"><span class="ip-status-text">suspended</span></span>']
},
user: {
NS_MINIMIZED: ['~!:NS_MINI~!\
<span class="group-switcher">\
<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>'],
/*NS_RECORD_POPUP_WRAP: ['<ul class="d-popup-items">~!:CONTENT~!</ul>'],
NS_RECORD_POPUP: ['<li class="item">~!:NAME~!</li>'],*/
NS_RECORD: ['<span class="prop-value">~!:NAME~!</span>'],
NS_INPUT: ['<div class="form-row ns-entry cc"><label for="#" class="field-label">~!:NS_LABEL~!:</label>\
<input type="text" value="~!:NAME~!" name="" class="text-field ns-input rule-required rule-ns">\
<button class="do_action_delete_ns">Delete</button>\
</div>'],
PLUS_ONE_NS: ['<button class="additional-ns-add do_action_add_form_ns">Add additional NS</button>'],
ENTRIES_WRAPPER: ['<div class="users-list items-list">~!:content~!</div>'],
FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_user">\
FORM: ['<div id="~!:id~!" class="b-new-entry b-new-entry_user form">\
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\
<div class="form-error">\
<div class="form-error hidden">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">username:</label>\
<input type="text" class="text-field" value="~!:LOGIN_NAME~!" name="LOGIN_NAME">\
<input type="text" class="text-field rule-abc rule-required" value="~!:LOGIN_NAME~!" name="LOGIN_NAME">\
</div>\
<div class="form-row pwd-box cc">\
<label for="#" class="field-label">password:</label>\
<input type="text" class="text-field password" name="PASSWORD" value="~!:PASSWORD~!">\
<input type="text" class="text-field password rule-required" name="PASSWORD" value="~!:PASSWORD~!">\
<span class="generate-pwd do_action_generate_pass">Generate</span>\
</div>\
<div class="form-row cc">\
@ -298,7 +310,7 @@ App.Templates.html = {
~!:PACKAGE_OPTIONS~!\
</select>\
</div>\
<div class="form-row cc">\
<div class="form-row cc hidden">\
<label for="#" class="field-label">shell:</label>\
<select class="not-styled" name="SHELL">\
~!:SHELL_OPTIONS~!\
@ -312,20 +324,29 @@ App.Templates.html = {
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">contact email:</label>\
<input type="text" name="CONTACT" class="text-field" value="~!:CONTACT~!">\
<input type="text" name="CONTACT" class="text-field rule-email rule-required" value="~!:CONTACT~!">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">reports:</label>\
<input type="checkbox" name="REPORTS_ENABLED" class="not-styled" value="~!:REPORTS_ENABLED~!">\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">ns1:</label>\
<input type="text" name="NS" class="text-field" value="~!:NS~!">\
<div class="form-row cc">\
<label for="#" class="field-label">Firstname:</label>\
<input type="text" name="FNAME" class="not-styled text-field rule-abc rule-required" value="~!:FNAME~!">\
</div>\
<!-- div class="form-row cc">\
<label for="#" class="field-label">ns2:</label>\
<input type="text" value="custom-edge-cdn2.digital-photography-school.com" class="text-field">\
</div -->\
<div class="form-row cc">\
<label for="#" class="field-label">Lastname:</label>\
<input type="text" name="LNAME" class="not-styled text-field rule-abc rule-required" value="~!:LNAME~!">\
</div>\
<div class="form-row ns-entry cc">\
<label for="#" class="field-label">NS #1:</label>\
<input type="text" value="~!:NS1~!" name="NS1" class="text-field rule-required rule-ns">\
</div>\
<div class="form-row ns-entry cc">\
<label for="#" class="field-label">NS #2:</label>\
<input type="text" value="~!:NS2~!" name="NS2" class="text-field rule-required rule-ns">\
</div>\
~!:NS~!\
<div class="form-row buttons-row cc">\
<input type="submit" value="~!:save_button~!" name="save" class="add-entry-btn do_action_save_form">\
<span class="cancel-btn do_action_cancel_form">Cancel</span>\
@ -357,6 +378,7 @@ App.Templates.html = {
<div class="username-box">\
<span class="user">\
<span class="nickname do_action_edit">~!:LOGIN_NAME~!</span>\
<span class="role"></span>\
<span class="role">(~!:ROLE~!)</span>\
</span>\
<span class="prop-box template-box">\
@ -463,7 +485,8 @@ App.Templates.html = {
</span>\
<span class="prop-box prop-box_group-values cc ns-list-box">\
<span class="prop-title">ns list:</span>\
<span class="group-values group-values__bullet">~!:NS~!</span>\
<span class="group-values group-values__bullet">\
~!:NS~!</span>\
</span>\
</div>\
</div><!-- // .row-details -->\
@ -767,48 +790,48 @@ App.Templates.html = {
<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
<input type="hidden" name="target" class="target" value=\'\'>\
<div class="entry-header">~!:title~!</div>\
<div class="form-error">\
<div class="form-error hidden">\
<div class="error-box">\
</div>\
</div>\
<div class="form-row form-row-line run-at-box cc">\
<span class="row-header">run at:</span>\
<div class="field-box cron-minute-box">\
<label for="#" class="field-label">minute:<br>(0&mdash;59)</label>\
<label for="#" class="field-label ">minute:<br>(0&mdash;59)</label>\
<div class="field-box-inner cc">\
<input type="text" value="~!:MIN~!" name="MIN" class="text-field">\
<input type="text" value="~!:MIN~!" name="MIN" class="text-field rule-required rule-minute">\
</div>\
</div>\
<div class="field-box cron-hour-box">\
<label for="#" class="field-label">hour:<br>(0&mdash;23)</label>\
<div class="field-box-inner cc">\
<input type="text" value="~!:HOUR~!" name="HOUR" class="text-field">\
<input type="text" value="~!:HOUR~!" name="HOUR" class="text-field rule-required rule-hour">\
</div>\
</div>\
<div class="field-box cron-day-box">\
<label for="#" class="field-label">day of Month:<br>(1&mdash;31)</label>\
<div class="field-box-inner cc">\
<input type="text" value="~!:DAY~!" name="DAY" class="text-field">\
<input type="text" value="~!:DAY~!" name="DAY" class="text-field rule-required rule-day">\
</div>\
</div>\
<div class="field-box cron-month-box">\
<label for="#" class="field-label">Month:<br>(1&mdash;12)(Jan&mdash;Dec)</label>\
<div class="field-box-inner cc">\
<input type="text" value="~!:MONTH~!" name="MONTH" class="text-field">\
<input type="text" value="~!:MONTH~!" name="MONTH" class="text-field rule-required rule-month">\
</div>\
</div>\
<div class="field-box cron-week-box">\
<label for="#" class="field-label">day of Week:<br>(1&mdash;7)(Sun&mdash;Sat)</label>\
<div class="field-box-inner cc">\
<input type="text" value="~!:WDAY~!" name="WDAY" class="text-field">\
<input type="text" value="~!:WDAY~!" name="WDAY" class="text-field rule-required rule-wday">\
</div>\
</div>\
</div>\
<div class="form-row cc">\
<label for="#" class="field-label">command:</label>\
<textarea class="textarea" name="CMD">~!:CMD~!</textarea>\
<textarea class="textarea rule-required" name="CMD">~!:CMD~!</textarea>\
</div>\
<div class="form-row cc">\
<div class="form-row cc hidden">\
<label for="#" class="field-label">report to: <span class="remark">(devide by comma ",")</span></label>\
<textarea class="textarea" name="REPORT_TO"></textarea>\
</div>\
@ -858,7 +881,7 @@ App.Templates.html = {
<div class="cron-command-box">\
<strong class="cron-command-line do_action_edit">~!:CMD~!</strong>\
</div>\
<div class="cron-reported-to">\
<div class="cron-reported-to hidden">\
<span class="prop-box cron-report-box">\
<span class="prop-title">reported to:</span>\
<span class="prop-value">naumov.socolov@gmail.com,</span>\

View file

@ -13,6 +13,117 @@ App.Validate.Is = {
}
};
App.Validate.getFieldName = function(elm)
{
fb.log(elm);
var txt_label = $(elm).prev('label').text();
if (txt_label.trim() == '') {
txt_label = $(elm).parents('.field-box').select('label:first').text();
}
return ['<strong>', txt_label, '</strong>'].join('');
}
App.Validate.Rule = {
'required' : function(elm) {
if ($(elm).val().trim() == '') {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' is required'};
}
return {VALID: true};
},
'numeric': function(elm) {
if ($(elm).val().trim() != '' && isNaN(parseInt($(elm).val(), 10))) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' is incorrect'};
}
return {VALID: true};
},
'no-spaces': function(elm) {
if ($(elm).val().trim() != '' && $(elm).val().search(/\s/) != -1) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' cannot contain spaces'};
}
return {VALID: true};
},
'abc': function(elm) {
if ($(elm).val().trim() != '' && $(elm).val().search(/[^a-zA-Z]+/) != -1) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' must contain only letters without spaces or other symbols'};
}
return {VALID: true};
},
'email': function(elm) {
if ($(elm).val().search(/^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/) == -1) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid email'};
}
return {VALID: true};
},
'ip': function(elm) {
if ($(elm).val().trim() != '' && (/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/).test($(elm).val()) == false) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid IP value'};
}
return {VALID: true};
},
'domain': function(elm) {
if ($(elm).val().trim() != '' && (/^([a-z0-9\.])*[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/).test($(elm).val()) == false) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid domain name'};
}
return {VALID: true};
},
'ns': function(elm) {
if ($(elm).val().trim() != '' && (/^([a-z0-9\.])*[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/).test($(elm).val()) == false) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid NS name'};
}
return {VALID: true};
},
'minute': function(elm) {
if ($(elm).val() == '*') {
return {VALID: true};
}
var minute = parseInt($(elm).val(), 10);
if (minute > 60 || minute < 0) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' wrong minute value'};
}
return {VALID: true};
},
'hour': function(elm) {
if ($(elm).val() == '*') {
return {VALID: true};
}
var hour = parseInt($(elm).val(), 10);
if (hour > 60 || hour < 0) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' wrong hour value'};
}
return {VALID: true};
},
'wday': function(elm) {
if ($(elm).val() == '*') {
return {VALID: true};
}
var wday = parseInt($(elm).val(), 10);
if (wday > 7 || wday < 1) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' wrong week day value'};
}
return {VALID: true};
},
'month': function(elm) {
if ($(elm).val() == '*') {
return {VALID: true};
}
var month = parseInt($(elm).val(), 10);
if (month > 1 || month < 12) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' wrong month value'};
}
return {VALID: true};
},
'day': function(elm) {
if ($(elm).val() == '*') {
return {VALID: true};
}
var day = parseInt($(elm).val(), 10);
if (day > 31 || day < 1) {
return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' wrong day value'};
}
return {VALID: true};
}
}
App.Validate.form = function(world, elm)
@ -20,16 +131,33 @@ App.Validate.form = function(world, elm)
var form_valid = true;
App.Env.FormError = [];
$(elm).find('select, input, textarea').each(function(i, field)
{
{
if ($(field).attr('type') == 'checkbox') {
var value = $(field).attr('checked') ? 'on' : 'off';
$(field).val(value);
}
if ($.inArray($(field).attr('name'), ['target', 'source', 'save']) != -1) {
//return; // pass
}
else {
if ($(field).val().trim() == '' || $(field).val().trim() == '-') {
var rules = App.Validate.getRules(field);
$(rules).each(function(i, rule)
{
fb.log('Validate with %o %o', rule, field);
if (App.Validate.Rule[rule]) {
var result = App.Validate.Rule[rule](field);
fb.log(result);
if (result.VALID == false) {
App.Env.FormError.push(result.ERROR); //$(field).attr('name') + ' is required');
form_valid = false;
}
}
})
/*if ($(field).val().trim() == '' || $(field).val().trim() == '-') {
App.Env.FormError.push($(field).attr('name') + ' is required');
form_valid = false;
}
}*/
}
});
return form_valid;
@ -49,5 +177,26 @@ App.Validate.displayFormErrors = function(world, elm)
ref.html(errors_tpl);
}
App.Validate.getRules = function(elm)
{
try {
var rules_string = $(elm).attr('class');
var rules = [];
$(rules_string.split(/\s/)).each(function(i, str)
{
var rule = str.split('rule-');
if (rule.length > 1) {
rules[rules.length++] = rule[1];
}
});
return rules;
}
catch(e) {
return [];
}
}

View file

@ -24,6 +24,11 @@ class AjaxHandler {
{
return null == self::$instance ? self::$instance = new self() : self::$instance;
}
public function getLoggedUser()
{
return VestaSession::getInstance()->getUser();
}
/**
* Called functions should reply in the following way

View file

@ -18,9 +18,9 @@ class CRON extends AjaxHandler
*/
public function getListExecute($request)
{
$_user = 'vesta';
$user = $this->getLoggedUser();
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_CRON_JOBS, array($_user, Config::get('response_type')));
$result = Vesta::execute(Vesta::V_LIST_CRON_JOBS, array($user['uid'], Config::get('response_type')));
foreach ($result['data'] as $id => $record) {
$reply[$id] = array(
@ -30,8 +30,9 @@ class CRON extends AjaxHandler
'DAY' => $record['DAY'],
'MONTH' => $record['MONTH'],
'WDAY' => $record['WDAY'],
'SUSPEND' => $record['SUSPEND'],
'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
'SUSPENDED' => $record['SUSPEND'],
'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE']))),
'JOB' => $id
);
}
@ -48,26 +49,25 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function addExecute($request)
public function addExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'USER' => $_user,
'MIN' => $_s['MIN'],
'HOUR' => $_s['HOUR'],
'DAY' => $_s['DAY'],
'MONTH' => $_s['MONTH'],
'WDAY' => $_s['WDAY'],
'CMD' => $_s['CMD']
'USER' => $user['uid'],
'MIN' => $spell['MIN'],
'HOUR' => $spell['HOUR'],
'DAY' => $spell['DAY'],
'MONTH' => $spell['MONTH'],
'WDAY' => $spell['WDAY'],
'CMD' => $spell['CMD']
);
$result = Vesta::execute(Vesta::V_ADD_CRON_JOB, $params);
if ($_s['REPORTS']) {
if ($spell['REPORTS']) {
$result = array();
$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $_user));
$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $user['uid']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['REPORTS'] = array($result['error_code'] => $result['error_message']);
@ -87,15 +87,13 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function delExecute($request)
public function deleteExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'USER' => $_user,
'JOB' => $_s['JOB']
'USER' => $user['uid'],
'JOB' => $spell['JOB']
);
$result = Vesta::execute(Vesta::V_DEL_CRON_JOB, $params);
@ -113,18 +111,15 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function changeExecute($request)
public function changeExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_old = $_s['old'];
$_new = $_s['new'];
$_user = 'vesta';
$_JOB = $_new['JOB'];
$user = $this->getLoggedUser();
$_old = $request->getParameter('old');
$_new = $request->getParameter('new');
$result = array();
$params = array(
'USER' => $_user,
'JOB' => $_JOB,
'USER' => $user['uid'],
'JOB' => $_old['JOB'],
'MIN' => $_new['MIN'],
'HOUR' => $_new['HOUR'],
'DAY' => $_new['DAY'],
@ -149,15 +144,13 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function suspendExecute($request)
public function suspendExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$_JOB = $_s['JOB'];
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'USER' => $_user,
'JOB' => $_JOB
'USER' => $user['uid'],
'JOB' => $spell['JOB']
);
$result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOB, $params);
@ -176,16 +169,14 @@ class CRON extends AjaxHandler
* @return string - Ajax Reply
*/
public function unsuspendExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$_JOB = $_s['JOB'];
{
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'USER' => $_user,
'JOB' => $_JOB
'USER' => $user['uid'],
'JOB' => $spell['JOB']
);
$result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOB, $params);
if (!$result['status']) {
@ -202,7 +193,7 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function suspendAllExecute($request)
/*public function suspendAllExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
@ -219,7 +210,7 @@ class CRON extends AjaxHandler
}
return $this->reply($result['status'], $result['data']);
}
}*/
/**
* Batch unsuspend CRON entries
@ -227,7 +218,7 @@ class CRON extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function unsuspendAllExecute($request)
/*public function unsuspendAllExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
@ -243,6 +234,6 @@ class CRON extends AjaxHandler
}
return $this->reply($result['status'], $result['data']);
}
}*/
}

View file

@ -22,9 +22,9 @@ class DNS extends AjaxHandler
*/
public function getListExecute($request)
{
$_user = 'vesta';
$user = $this->getLoggedUser();
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array($_user, Config::get('response_type')));
$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array($user['uid'], Config::get('response_type')));
foreach ($result['data'] as $dns_domain => $details) {
$reply[] = array(
'DNS_DOMAIN' => $dns_domain,
@ -53,12 +53,11 @@ class DNS extends AjaxHandler
*/
public function getListRecordsExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$_s = $request->getParameter('spell');
$user = $this->getLoggedUser();
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAIN_RECORDS, array($_user, $_s['DNS_DOMAIN'], Config::get('response_type')));
$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAIN_RECORDS, array($user['uid'], $_s['DNS_DOMAIN'], Config::get('response_type')));
foreach ($result['data'] as $record_id => $details) {
$reply[$record_id] = array(
'RECORD_ID' => $record_id,
@ -78,7 +77,7 @@ class DNS extends AjaxHandler
}
/**
* Add DB entry
* Add DNS entry
*
* v_add_dns_domain user domain ip [template] [exp] [soa] [ttl]
* http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.add&USER=vesta&DOMAIN=dev.vestacp.com&IP_ADDRESS=95.163.16.160&TEMPLATE=default&EXP=01-01-12&SOA=ns1.vestacp.com&TTL=3600
@ -86,21 +85,14 @@ class DNS extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function addExecute($_spell = false)
public function addExecute($request)
{
$r = new Request();
if ($_spell) {
$_s = $_spell;
}
else {
$_s = $r->getSpell();
}
$_user = 'vesta';
$params = array(
'USER' => $_user, /// OWNER ???
$user = $this->getLoggedUser();
$_s = $request->getParameter('spell');
$params = array(
'USER' => $user['uid'], /// OWNER ???
'DNS_DOMAIN' => $_s['DNS_DOMAIN'],
'IP' => $_s['IP']
'IP' => $_s['IP']
);
// TODO: rewrite this block. Get away from if/if/if/if
if ($_s['TPL']) {
@ -135,12 +127,11 @@ class DNS extends AjaxHandler
*/
public function addRecordExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$user = $this->getLoggedUser();
$_s = $request->getParameter('spell');
$params = array(
'USER' => $_s['USER'], /// OWNER ???
'USER' => $user['uid'], /// OWNER ???
'DOMAIN' => $_s['DOMAIN'],
'RECORD' => $_s['RECORD'],
'RECORD_TYPE' => $_s['TYPE'],
@ -166,19 +157,12 @@ class DNS extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function delExecute($_spell = false)
public function deleteExecute($request)
{
$r = new Request();
if ($_spell) {
$_s = $_spell;
}
else {
$_s = $r->getSpell();
}
$_user = 'vesta';
$user = $this->getLoggedUser();
$_s = $request->getParameter('spell');
$params = array(
'USER' => $_user, /// OWNER ???
'USER' => $user['uid'], /// OWNER ???
'DOMAIN' => $_s['DNS_DOMAIN'],
);
@ -202,12 +186,11 @@ class DNS extends AjaxHandler
*/
public function delRecordExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$_s = $request->getParameter('spell');
$user = $this->getLoggedUser();
$params = array(
'USER' => $_user, // TODO: OWNER ???
'USER' => $user['uid'], // TODO: OWNER ???
'DOMAIN' => $_s['DOMAIN'],
'RECORD_ID' => $_s['RECORD_ID']
);
@ -232,19 +215,17 @@ class DNS extends AjaxHandler
* @return string - Ajax Reply
*/
public function changeExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_old = $_s['old'];
$_new = $_s['new'];
$_user = 'vesta';
$_DNS_DOMAIN = $_new['DNS_DOMAIN'];
{
$_old = $request->getParameter('old');
$_new = $request->getParameter('new');
$user = $this->getLoggedUser();
$_DNS_DOMAIN = $_old['DNS_DOMAIN'];
if ($_old['IP'] != $_new['IP']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['IP']));
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['IP']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['IP_ADDRESS'] = array($result['error_code'] => $result['error_message']);
@ -253,7 +234,7 @@ class DNS extends AjaxHandler
if ($_old['TPL'] != $_new['TPL']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TPL']));
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TPL']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['TPL'] = array($result['error_code'] => $result['error_message']);
@ -262,7 +243,7 @@ class DNS extends AjaxHandler
if ($_old['TTL'] != $_new['TTL']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TTL']));
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TTL']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['TTL'] = array($result['error_code'] => $result['error_message']);
@ -271,7 +252,7 @@ class DNS extends AjaxHandler
if ($_old['EXP'] != $_new['EXP']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['EXP']));
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['EXP']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['EXP'] = array($result['error_code'] => $result['error_message']);
@ -280,7 +261,7 @@ class DNS extends AjaxHandler
if ($_old['SOA'] != $_new['SOA']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_new['SOA']));
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_new['SOA']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SOA'] = array($result['error_code'] => $result['error_message']);
@ -288,11 +269,11 @@ class DNS extends AjaxHandler
}
if (!$this->status) {
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['IP']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TPL']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['IP']));
Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TPL']));
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_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
}
return $this->reply($this->status, '');
@ -306,11 +287,9 @@ class DNS extends AjaxHandler
*/
public function changeRecordsExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_old = $_s['old'];
$_new = $_s['new'];
$_user = 'vesta';
$_old = $request->getParameter('old');
$_new = $request->getParameter('new');
$user = $this->getLoggedUser();
$_DNS_DOMAIN = $_s['DNS_DOMAIN'];
foreach ($_new as $record_id => $record_data) {
@ -318,7 +297,7 @@ class DNS extends AjaxHandler
if (is_array($_old[$record_id])) {
$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_RECORD,
array(
'USER' => $_user,
'USER' => $user['uid'],
'DNS_DOMAIN' => $_DNS_DOMAIN,
'ID' => $record_id,
'RECORD' => $record_data['RECORD'],
@ -331,7 +310,7 @@ class DNS extends AjaxHandler
}
}
else {
$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE'], 'ID' => $record_id));
$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE'], 'ID' => $record_id));
if (!$result['status']) {
$this->status = FALSE;
$this->errors[$record_id] = array($result['error_code'] => $result['error_message']);

View file

@ -17,10 +17,10 @@ class IP extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function getListExecute($request)
public function getListExecute(Request $request)
{
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
$result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
foreach ($result['data'] as $ip => $details) {
$reply[] = array_merge(
array(
@ -42,10 +42,10 @@ class IP extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function getListUserIpsExecute($request)
public function getListUserIpsExecute(Request $request)
{
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
$result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
foreach ($result['data'] as $ip => $details) {
$reply[] = array_merge(
array(
@ -67,19 +67,17 @@ class IP extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function addExecute($request)
public function addExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'IP_ADDRESS' => $_s['IP_ADDRESS'],
'MASK' => $_s['MASK'],
'INTERFACE' => $_s['INTERFACE'],
'OWNER' => $_s['OWNER'],
'IP_STATUS' => $_s['IP_STATUS'],
'IP_NAME' => $_s['IP_NAME']
'IP_ADDRESS' => $spell['IP_ADDRESS'],
'MASK' => $spell['NETMASK'],
'INTERFACE' => $spell['INTERFACE'],
'OWNER' => $spell['OWNER'],
'IP_STATUS' => $spell['STATUS']
//'IP_NAME' => $spell['NAME']
);
$result = Vesta::execute(Vesta::V_ADD_SYS_IP, $params);
@ -97,13 +95,12 @@ class IP extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function delExecute($request)
public function deleteExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_user = 'vesta';
$spell = $request->getParameter('spell');
$user = $this->getLoggedUser();
$params = array(
'IP_ADDRESS' => $_s['IP_ADDRESS']
'IP_ADDRESS' => $spell['IP_ADDRESS']
);
$result = Vesta::execute(Vesta::V_DEL_SYS_IP, $params);
@ -121,13 +118,11 @@ class IP extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function changeExecute($request)
public function changeExecute(Request $request)
{
$r = new Request();
$_s = $r->getSpell();
$_old = $_s['old'];
$_new = $_s['new'];
$_user = 'vesta';
$user = $this->getLoggedUser();
$_old = $request->getParameter('old');
$_new = $request->getParameter('new');
if ($_old['OWNER'] != $_new['OWNER']) {
$result = array();
@ -138,14 +133,15 @@ class IP extends AjaxHandler
}
}
if ($_old['NAME'] != $_new['NAME']) {
// TODO: Handle NAME parameter
/*if ($_old['NAME'] != $_new['NAME']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_NAME, array('IP' => $_new['IP_ADDRESS'], 'NAME' => $_new['NAME']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['NAME'] = array($result['error_code'] => $result['error_message']);
}
}
}*/
if ($_old['IP_STATUS'] != $_new['IP_STATUS']) {
$result = array();

View file

@ -47,16 +47,16 @@ class MAIN extends AjaxHandler
require_once V_ROOT_DIR . 'api/USER.class.php';
// IP
$ip_obj = new IP();
$user_ips = json_decode($ip_obj->getListUserIpsExecute(), TRUE);
$user_ips = json_decode($ip_obj->getListUserIpsExecute($request), TRUE);
foreach ($user_ips['data'] as $ip) {
$ips[$ip['IP_ADDRESS']] = $ip['IP_ADDRESS'];
}
// USER
$user_obj = new USER();
$users = json_decode($user_obj->getListExecute(), TRUE);
$user_names = array_keys($users['data']['data']);
$users = json_decode($user_obj->getListExecute($request), TRUE);
$user_names = array_keys($users['data']);
$db_types = array('mysql' => 'mysql', 'postgress' => 'postgress');
$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute(), TRUE);
$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute($request), TRUE);
$interfaces = $interfaces_arr['data'];
$data_web_domain = array('ips' => $ips);
@ -133,8 +133,12 @@ class MAIN extends AjaxHandler
*/
public function getIpParams($data = array())
{
$users = array();
foreach ((array)$data['user_names'] as $user) {
$users[$user] = $user;
}
return array(
'SYS_USERS' => $data['user_names'],
'SYS_USERS' => $users,
'STATUSES' => array(
'shared' => 'shared',
'exclusive' => 'exclusive'
@ -163,7 +167,7 @@ class MAIN extends AjaxHandler
public function getDnsParams($data = array())
{
return array(
'IP' => $data['ips'],
'IP' => @$data['ips'],
'TPL' => array('default' => 'default'),
'EXP' => array(),
'SOA' => array(),

View file

@ -17,7 +17,7 @@ class USER extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function getListExecute($request)
public function getListExecute(Request $request)
{
$reply = array();
$result = Vesta::execute(Vesta::V_LIST_SYS_USERS, array(Config::get('response_type')));
@ -29,46 +29,50 @@ class USER extends AjaxHandler
foreach ($result['data'] as $user => $details) {
$fullname_id = rand(0, count($users)-1);
$fullname = $users[$fullname_id];
$reply[$user] = array(
$fullname = implode('', array($details['FNAME'], ' ', $details['LNAME']));
//if ($user == 'TestGOOD') {var_dump($details);die();}
$nses = $this->getNS($user, $details);
$user_details = array(
"FNAME" => $details['FNAME'],
"LNAME" => $details['LNAME'],
"LOGIN_NAME" => $user,
"FULLNAME" => $fullname, // TODO skid
"PACKAGE" => $details['PACKAGE'],
"WEB_DOMAINS" => $details['WEB_DOMAINS'],
"WEB_SSL" => $details['WEB_SSL'],
"WEB_ALIASES" => $details['WEB_ALIASES'],
"DATABASES" => $details['DATABASES'],
"MAIL_DOMAINS" => $details['MAIL_DOMAINS'],
"MAIL_BOXES" => $details['MAIL_BOXES'],
"MAIL_FORWARDERS" => $details['MAIL_FORWARDERS'],
"DNS_DOMAINS" => $details['DNS_DOMAINS'],
"DISK_QUOTA" => $details['DISK_QUOTA'],//$disk_quota,
"BANDWIDTH" => $details['BANDWIDTH'],//$bandwidth,
"NS_LIST" => array($details['NS1'], $details['NS2']), // TODO skid
"SHELL" => $details['"SHELL'],
"BACKUPS" => $details['BACKUPS'],
"WEB_TPL" => $details['WEB_TPL'],
"MAX_CHILDS" => $details['MAX_CHILDS'],
"SUSPENDED" => $details['SUSPENDED'],
"OWNER" => $details['OWNER'],
"ROLE" => $details['ROLE'],
"IP_OWNED" => $details['IP_OWNED'],
"U_CHILDS" => $details['U_CHILDS'],
"U_DISK" => $details['U_DISK'],//$u_disk,
"U_BANDWIDTH" => $details['U_BANDWIDTH'],//$u_bandwidth,
"U_WEB_DOMAINS" => $details['U_WEB_DOMAINS'],
"U_WEB_SSL" => $details['U_WEB_SSL'],
"U_DNS_DOMAINS" => $details['U_DNS_DOMAINS'],
"U_DATABASES" => $details['U_DATABASES'],
"U_MAIL_DOMAINS" => $details['U_MAIL_DOMAINS'],
"CONTACT" => $details['CONTACT'],
"DATE" => $details['DATE'],
"PACKAGE" => $details['PACKAGE'],
"WEB_DOMAINS" => $details['WEB_DOMAINS'],
"WEB_SSL" => $details['WEB_SSL'],
"WEB_ALIASES" => $details['WEB_ALIASES'],
"DATABASES" => $details['DATABASES'],
"MAIL_DOMAINS" => $details['MAIL_DOMAINS'],
"MAIL_BOXES" => $details['MAIL_BOXES'],
"MAIL_FORWARDERS" => $details['MAIL_FORWARDERS'],
"DNS_DOMAINS" => $details['DNS_DOMAINS'],
"DISK_QUOTA" => $details['DISK_QUOTA'],//$disk_quota,
"BANDWIDTH" => $details['BANDWIDTH'],//$bandwidth,
//"NS_LIST" => array($details['NS1'], $details['NS2']), // TODO skid
"SHELL" => $details['SHELL'],
"BACKUPS" => $details['BACKUPS'],
"WEB_TPL" => $details['WEB_TPL'],
"MAX_CHILDS" => $details['MAX_CHILDS'],
"SUSPENDED" => $details['SUSPENDED'],
"OWNER" => $details['OWNER'],
"ROLE" => $details['ROLE'],
"IP_OWNED" => $details['IP_OWNED'],
"U_CHILDS" => $details['U_CHILDS'],
"U_DISK" => $details['U_DISK'],//$u_disk,
"U_BANDWIDTH" => $details['U_BANDWIDTH'],//$u_bandwidth,
"U_WEB_DOMAINS" => $details['U_WEB_DOMAINS'],
"U_WEB_SSL" => $details['U_WEB_SSL'],
"U_DNS_DOMAINS" => $details['U_DNS_DOMAINS'],
"U_DATABASES" => $details['U_DATABASES'],
"U_MAIL_DOMAINS" => $details['U_MAIL_DOMAINS'],
"CONTACT" => $details['CONTACT'],
"DATE" => $details['DATE'],
"U_MAIL_BOXES" => rand(1, 10), // TODO: skid
"U_MAIL_FORWARDERS" => rand(1, 10), // TODO: skid
"REPORTS_ENABLED" => 'enabled' // TODO: skid
"U_MAIL_BOXES" => rand(1, 10), // TODO: skid
"U_MAIL_FORWARDERS" => rand(1, 10), // TODO: skid
"REPORTS_ENABLED" => 'enabled' // TODO: skid
);
$reply[$user] = array_merge($user_details, $nses);
}
return $this->reply(TRUE, $reply);
@ -80,30 +84,28 @@ class USER extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function addExecute($_spell = FALSE)
public function addExecute(Request $request)
{
$r = new Request();
if ($_spell) {
$_s = $_spell;
}
else {
$_s = $r->getSpell();
}
$_user = 'vesta';
$spell = $request->getParameter('spell');
$user = $this->getLoggedUser();
$params = array(
'USER' => $_s['USER'],
'PASSWORD' => $_s['PASSWORD'],
'EMAIL' => $_s['EMAIL'],
'ROLE' => $_s['ROLE'],
'OWNER' => $_user,
'PACKAGE' => $_s['PACKAGE'],
'NS1' => $_s['NS1'],
'NS2' => $_s['NS2']
'USER' => $spell['LOGIN_NAME'],
'PASSWORD' => $spell['PASSWORD'],
'EMAIL' => $spell['CONTACT'],
'ROLE' => $spell['ROLE'],
'OWNER' => $user['uid'],
'PACKAGE' => $spell['PACKAGE'],
'FNAME' => $spell['FNAME'],
'LNAME' => $spell['LNAME']
);
$result = Vesta::execute(Vesta::V_ADD_SYS_USER, $params);
$result = Vesta::execute(Vesta::V_ADD_SYS_USER, $params);
// Reports
$enable_reports = Utils::getCheckboxBooleanValue($spell['REPORTS_ENABLED']);
$reports_result = $this->setUserReports($spell['LOGIN_NAME'], $spell['REPORTS_ENABLED']);
// NS
$ns_result = $this->setNSentries($spell['LOGIN_NAME'], $spell);
if (!$result['status']) {
$this->errors[] = array($result['error_code'] => $result['error_message']);
}
@ -117,21 +119,14 @@ class USER extends AjaxHandler
* @param Request $request
* @return string - Ajax Reply
*/
public function delExecute($_spell = false)
public function deleteExecute(Request $request)
{
$r = new Request();
if ($_spell) {
$_s = $_spell;
}
else {
$_s = $r->getSpell();
}
$_user = 'vesta';
$user = $this->getLoggedUser();
$spell = $request->getParameter('spell');
$params = array(
'USER' => $_s['USER']
'USER' => $spell['LOGIN_NAME']
);
$result = Vesta::execute(Vesta::V_DEL_SYS_USER, $params);
if (!$result['status']) {
@ -149,25 +144,10 @@ class USER extends AjaxHandler
*/
public function changeExecute($request)
{
$r = new Request();
$_s = $r->getSpell();
$_old = $_s['old'];
$_new = $_s['new'];
$_new = $request->getParameter('new');
$_old = $request->getParameter('old');
$_USER = $_new['USER'];
if ($_old['USER'] != $_new['USER']) {
$result = array();
// creating new user
$result = $this->addExecute($_new);
// deleting old
if ($result['status']) {
$result = array();
$result = $this->delExecute($_old);
return $this->reply($this->status, '');
}
}
$_USER = $_old['LOGIN_NAME'];
if ($_old['PASSWORD'] != $_new['PASSWORD']) {
$result = array();
@ -187,32 +167,37 @@ class USER extends AjaxHandler
}
}
if ($_old['EMAIL'] != $_new['EMAIL']) {
if ($_old['CONTACT'] != $_new['CONTACT']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_new['EMAIL']));
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_new['CONTACT']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['EMAIL'] = array($result['error_code'] => $result['error_message']);
}
}
if ($_old['NS1'] != $_new['NS1'] || $_old['NS2'] != $_new['NS2']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, array('USER' => $_USER, 'NS1' => $_new['NS1'], 'NS2' => $_new['NS2']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['NS'] = array($result['error_code'] => $result['error_message']);
}
$this->setNSentries($_USER, $_new);
$names = array(
'USER' => $_USER,
'NAME' => $_new['LOGIN_NAME'],
'FNAME' => $_new['FNAME'],
'LNAME' => $_new['LNAME']
);
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NAME, $names);
if (!$result['status']) {
$this->status = FALSE;
$this->errors['NAMES'] = array($result['error_code'] => $result['error_message']);
}
if ($_old['SHELL'] != $_new['SHELL']) {
/*if ($_old['SHELL'] != $_new['SHELL']) {
$result = array();
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_new['SHELL']));
if (!$result['status']) {
$this->status = FALSE;
$this->errors['SHELL'] = array($result['error_code'] => $result['error_message']);
}
}
}*/
if (!$this->status) {
Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD']));
@ -224,4 +209,48 @@ class USER extends AjaxHandler
return $this->reply($this->status, '');
}
protected function setUserReports($user, $enabled)
{
if ($enabled === true) {
$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $user));
}
else {
$result = Vesta::execute(Vesta::V_DEL_SYS_USER_REPORTS, array('USER' => $user));
}
return $result['status'];
}
protected function setNSentries($user, $data)
{
$ns = array();
$ns['USER'] = $user;
$ns['NS1'] = $data['NS1'];
$ns['NS2'] = $data['NS2'];
$ns['NS3'] = isset($data['NS3']) ? $data['NS3'] : '';
$ns['NS4'] = isset($data['NS4']) ? $data['NS4'] : '';
$ns['NS5'] = isset($data['NS5']) ? $data['NS5'] : '';
$ns['NS6'] = isset($data['NS6']) ? $data['NS6'] : '';
$ns['NS7'] = isset($data['NS7']) ? $data['NS7'] : '';
$ns['NS8'] = isset($data['NS8']) ? $data['NS8'] : '';
$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, $ns);
return $result['status'];
}
protected function getNS($user, $data)
{
$result = array();
$ns_str = $data['NS'];
$ns_list = explode(',', $ns_str);
foreach (range(0, 7) as $index) {
$result['NS'.($index + 1)] = @trim(@$ns_list[$index]);
}
return $result;
}
}

View file

@ -3,6 +3,7 @@
define('V_ROOT_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
require_once V_ROOT_DIR . 'config/Config.class.php';
require_once V_ROOT_DIR . 'core/VestaSession.class.php';
require_once V_ROOT_DIR . 'core/Vesta.class.php';
require_once V_ROOT_DIR . 'core/exceptions/SystemException.class.php';
require_once V_ROOT_DIR . 'core/exceptions/ProtectionException.class.php';

View file

@ -17,7 +17,7 @@ class Request
protected $get = array();
protected $global = array();
protected $_merged = array();
protected $_spell = array();
//protected $_spell = array();
/**
*
@ -40,7 +40,7 @@ class Request
$this->post,
$this->get,
$this->global);
$this->_spell = json_decode($this->_merged['spell'], true);
//$this->_spell = json_decode($this->_merged['spell'], true);
}
/**
@ -52,7 +52,12 @@ class Request
*/
public function getParameter($key, $default=false)
{
return isset($this->_merged[$key]) ? $this->_merged[$key] : $default;
$param = isset($this->_merged[$key]) ? $this->_merged[$key] : $default;
if ($json = @json_decode($param, true)) {
return $json;
}
return $param;
}
/**
@ -60,10 +65,10 @@ class Request
*
* @return array
*/
public function getSpell()
/*public function getSpell()
{
return $this->_spell;
}
}*/
/**
* Check if parameter is set

View file

@ -55,6 +55,7 @@ class Vesta
const V_CHANGE_SYS_USER_SHELL = 'v_change_sys_user_shell';
const V_CHANGE_SYS_USER_ROLE = 'v_change_sys_user_role';
const V_DEL_SYS_USER = 'v_del_sys_user';
const V_CHANGE_SYS_USER_NAME = 'v_change_sys_user_name';
// WEB_DOMAIN
const V_LIST_WEB_DOMAINS = 'v_list_web_domains';
const V_LIST_WEB_DOMAINS_ALIAS = 'v_list_web_domains_alias';
@ -124,12 +125,16 @@ class Vesta
$params = array(
'sudo' => Config::get('sudo_path'),
'functions' => Config::get('vesta_functions_path'),
'parameters' => implode("' '", $parameters),
'parameters' => implode("' '", $parameters),
);
if (!isset($params['reply'])) {
$params['reply'] = '';
}
// 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']}";
// print $cmd;//die();
exec($cmd, $output, $return);
$result = 0;

View file

@ -0,0 +1,25 @@
<?php
class VestaSession
{
static public $instance = null;
/**
* Grab current instance or create it
*
* @return AjaxHandler
*/
static function getInstance()
{
return null == self::$instance ? self::$instance = new self() : self::$instance;
}
public function getUser()
{
return array('uid' => 'vesta');
}
}
?>

View file

@ -0,0 +1,13 @@
<?php
class Utils
{
public static function getCheckboxBooleanValue($checkbox_value)
{
return $checkbox_value == 'on' ? true : false;
}
}
?>

View file

@ -10,7 +10,7 @@ function error_dumper($errno, $errstr, $errfile, $errline)
switch ($errno) {
case E_USER_ERROR:
$o = "ERROR: [$errno] $errstr\n";
$o = date('Y-m-d H:i:s')."ERROR: $errstr [$errfile $errline]\n";
$o.= " Fatal error on line $errline in file $errfile";
$o.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
$o.= "Aborting...\n";
@ -20,19 +20,19 @@ function error_dumper($errno, $errstr, $errfile, $errline)
break;
case E_USER_WARNING:
$o = "WARNING: [$errno] $errstr\n";
$o = date('Y-m-d H:i:s')."WARNING: $errstr [$errfile $errline]\n";
fwrite($log, $o);
fclose($log);
break;
case E_USER_NOTICE:
$o = "NOTICE: [$errno] $errstr\n";
$o = date('Y-m-d H:i:s')."NOTICE: $errstr [$errfile $errline]\n";
fwrite($log, $o);
fclose($log);
break;
default:
$o = "Unknown error type: [$errno] $errstr\n";
$o = date('Y-m-d H:i:s')."Unknown error type: $errstr [$errfile $errline]\n";
fwrite($log, $o);
fclose($log);
break;