v0.0.8
+ Реализовано: просмотр параметров сервера и возможность редактирования
This commit is contained in:
		
							parent
							
								
									69ab43a4ec
								
							
						
					
					
						commit
						7a71bb7e01
					
				
					 13 changed files with 247 additions and 63 deletions
				
			
		| 
						 | 
				
			
			@ -69,9 +69,10 @@ create table if not exists da_ussd (
 | 
			
		|||
);
 | 
			
		||||
 | 
			
		||||
create table if not exists da_server (
 | 
			
		||||
    da_address varchar(50) not null,
 | 
			
		||||
    da_id int not null default 1,
 | 
			
		||||
    da_transparent_mode bool not null default false,
 | 
			
		||||
    da_internal_number varchar(12) not null,
 | 
			
		||||
    da_external_number varchar(12) not null,
 | 
			
		||||
    constraint da_server_pk primary key (da_address)
 | 
			
		||||
    da_external_number_on bool not null default true,
 | 
			
		||||
    constraint da_server_pk primary key (da_id)
 | 
			
		||||
);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										67
									
								
								js/script.js
									
										
									
									
									
								
							
							
						
						
									
										67
									
								
								js/script.js
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -9,7 +9,7 @@ $(document).ready(function () {
 | 
			
		|||
        0: () => { loadNumbers() },
 | 
			
		||||
        1: () => { loadSMS() },
 | 
			
		||||
        2: () => { loadUSSD() },
 | 
			
		||||
        3: () => {}
 | 
			
		||||
        3: () => { loadServerInfo() }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let lists = {
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ $(document).ready(function () {
 | 
			
		|||
        0: () => { generateListGroupNumbers($("#accordion-numbers .ui-accordion-content-active")) },
 | 
			
		||||
        1: () => { generateListGroupSMS($("#accordion-sms .ui-accordion-content-active")) },
 | 
			
		||||
        2: () => { generateListGroupUSSD($("#accordion-ussd .ui-accordion-content-active")) },
 | 
			
		||||
        3: () => { noticer.success('Вкладка "Сервер"') }
 | 
			
		||||
        3: () => {}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $("button").button();
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ $(document).ready(function () {
 | 
			
		|||
        activate: function( event, ui ) {
 | 
			
		||||
            lists[$(this).tabs( "option", "active" )]();
 | 
			
		||||
            $("#add-number").button( "option", "disabled", $(this).tabs( "option", "active" ) > 0 );
 | 
			
		||||
            // $("#search").attr( "disabled", $("#search").val("") && $(this).tabs( "option", "active" ) > 1 );
 | 
			
		||||
            $("#update-group").button( "option", "disabled", $(this).tabs( "option", "active" ) > 2 );
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +61,7 @@ $(document).ready(function () {
 | 
			
		|||
    loadNumbers();
 | 
			
		||||
    loadSMS();
 | 
			
		||||
    loadUSSD();
 | 
			
		||||
    loadServerInfo();
 | 
			
		||||
 | 
			
		||||
    $("body").fadeTo(500, 1);
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -608,3 +609,63 @@ function delUSSD(panel, currentWindow) {
 | 
			
		|||
        noticer.error(error.message);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/************************************************************************************
 | 
			
		||||
 | 
			
		||||
                        Обработка таблицы информации о сервере
 | 
			
		||||
 | 
			
		||||
************************************************************************************/
 | 
			
		||||
 | 
			
		||||
function loadServerInfo() {
 | 
			
		||||
    request('serverinfo', 'text').then(data => {
 | 
			
		||||
        data.error ? noticer.error(data.message) : showServerInfo(data);
 | 
			
		||||
    }).catch(error => {
 | 
			
		||||
        noticer.error(error.message);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showServerInfo(data) {
 | 
			
		||||
    $("#tabs-server").html(data);
 | 
			
		||||
    $("#server-external-number-on").checkboxradio();
 | 
			
		||||
    $("#server-transparent-mode").checkboxradio();
 | 
			
		||||
    $("#server-button").button({ icon: "ui-icon-disk", disabled: true });
 | 
			
		||||
 | 
			
		||||
    $(".server-input").on("change paste cut keydown", () => {
 | 
			
		||||
        if ($("#server-button").button( "option", "disabled")) {
 | 
			
		||||
            noticer.warning('Некоторые параметры сервера были изменены');
 | 
			
		||||
            $("#server-button").button( "option", "disabled", false);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $("#server-button").click(() => {
 | 
			
		||||
        writeServerInfo();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function writeServerInfo() {
 | 
			
		||||
    let pattern_number = /^\+7\d{10}$/g;
 | 
			
		||||
 | 
			
		||||
    let internal_number = $("#server-internal-number").val();
 | 
			
		||||
    let external_number = $("#server-external-number").val();
 | 
			
		||||
    let external_number_on = $("#server-external-number-on").is(":checked");
 | 
			
		||||
    let transparent_mode = $("#server-transparent-mode").is(":checked");
 | 
			
		||||
 | 
			
		||||
    let error = false;
 | 
			
		||||
 | 
			
		||||
    if (external_number.match(pattern_number) === null) { noticer.warning("Внешний номер не соответствует формату +7XXXXXXXXXX"); error = true; }
 | 
			
		||||
 | 
			
		||||
    if (error) return;
 | 
			
		||||
 | 
			
		||||
    request('writeserverinfo', 'json', {
 | 
			
		||||
        internal_number: internal_number,
 | 
			
		||||
        external_number: external_number,
 | 
			
		||||
        external_number_on: external_number_on,
 | 
			
		||||
        transparent_mode: transparent_mode
 | 
			
		||||
    }).then(data => {
 | 
			
		||||
        data.error ?
 | 
			
		||||
            noticer.error(data.message) : 
 | 
			
		||||
                $("#server-button").button( "option", "disabled", true) && noticer.success("Параметры сервера были сохранены")
 | 
			
		||||
    }).catch(error => {
 | 
			
		||||
        noticer.error(error.message);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ input {
 | 
			
		|||
    margin-top: 20px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.content table {
 | 
			
		||||
.table-content {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
    border-spacing: 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,15 +125,28 @@ tr.row:hover, tr.row:nth-child(even):hover {
 | 
			
		|||
 | 
			
		||||
/* EDIT NUMBER */
 | 
			
		||||
 | 
			
		||||
.number-label, .sms-label, .ussd-label {
 | 
			
		||||
.number-label, .sms-label, .ussd-label, .server-label {
 | 
			
		||||
    color: #333;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.number-value {
 | 
			
		||||
.number-value, .server-value {
 | 
			
		||||
    height: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.server-value {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
    padding-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.server-input {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.server-button {
 | 
			
		||||
    margin-top: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.sms-label-text, .ussd-label-text {
 | 
			
		||||
    vertical-align:top
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ import structures;
 | 
			
		|||
import requests.numbers;
 | 
			
		||||
import requests.sms;
 | 
			
		||||
import requests.ussd;
 | 
			
		||||
import requests.server;
 | 
			
		||||
 | 
			
		||||
static ServerInfo serverInfo;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -223,6 +224,12 @@ void postReq(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		|||
        case "delussd":
 | 
			
		||||
            sendDelUSSD(req, res);
 | 
			
		||||
            break;
 | 
			
		||||
        case "serverinfo":
 | 
			
		||||
            getServerInfo(req, res);
 | 
			
		||||
            break;
 | 
			
		||||
        case "writeserverinfo":
 | 
			
		||||
            sendWriteServerInfo(req, res);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            res.redirect("/");
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								source/requests/server.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								source/requests/server.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
module requests.server;
 | 
			
		||||
 | 
			
		||||
import vibe.vibe;
 | 
			
		||||
import response;
 | 
			
		||||
import structures;
 | 
			
		||||
import sql;
 | 
			
		||||
import singlog;
 | 
			
		||||
 | 
			
		||||
import std.regex;
 | 
			
		||||
 | 
			
		||||
// Получить информацию о сервере
 | 
			
		||||
void getServerInfo(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		||||
    auto dataServer = sqlGetServerInfo();
 | 
			
		||||
    render!("server.dt", dataServer)(res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sendWriteServerInfo(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		||||
    ServerDB server = deserializeJson!ServerDB(req.json);
 | 
			
		||||
 | 
			
		||||
    if (!server.external_number.matchFirst(regex(r"^\+7\d{10}$", "g"))) {
 | 
			
		||||
        res.send(true, "Внешний номер не соответствует формату +7XXXXXXXXXX");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!sqlUpdateServerInfo(server)) {
 | 
			
		||||
        res.send(true, "Не удалось записать параметры сервера");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    res.send();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										68
									
								
								source/sql.d
									
										
									
									
									
								
							
							
						
						
									
										68
									
								
								source/sql.d
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6,11 +6,9 @@ import structures;
 | 
			
		|||
 | 
			
		||||
import std.conv;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
/***********************************************************
 | 
			
		||||
            Запросы для таблицы номеров телефонов
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
***********************************************************/
 | 
			
		||||
 | 
			
		||||
GroupDB[] sqlGetListGroups() {
 | 
			
		||||
    GroupDB[] groups;
 | 
			
		||||
| 
						 | 
				
			
			@ -207,11 +205,9 @@ bool sqlInsertNumber(NumberDB number) {
 | 
			
		|||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
/***********************************************************
 | 
			
		||||
                    Запросы для таблицы SMS
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
***********************************************************/
 | 
			
		||||
 | 
			
		||||
SMSDB[] sqlGetSMSNumbers() {
 | 
			
		||||
    SMSDB[] numbers;
 | 
			
		||||
| 
						 | 
				
			
			@ -306,11 +302,9 @@ bool sqlDeleteSMS(int idsms) {
 | 
			
		|||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
/***********************************************************
 | 
			
		||||
                Запросы для таблицы USSD
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
***********************************************************/
 | 
			
		||||
 | 
			
		||||
USSDDB[] sqlGetUSSDNumbers() {
 | 
			
		||||
    USSDDB[] numbers;
 | 
			
		||||
| 
						 | 
				
			
			@ -408,3 +402,53 @@ bool sqlDeleteUSSD(int idussd) {
 | 
			
		|||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************
 | 
			
		||||
            Запросы для таблицы информации о сервере
 | 
			
		||||
***********************************************************/
 | 
			
		||||
 | 
			
		||||
ServerDB sqlGetServerInfo() {
 | 
			
		||||
    ServerDB server;
 | 
			
		||||
    try {
 | 
			
		||||
        auto queryResult = pgsql.sql(
 | 
			
		||||
            "select
 | 
			
		||||
                case when da_transparent_mode then 1 else 0 end da_transparent_mode,
 | 
			
		||||
                da_internal_number,
 | 
			
		||||
                da_external_number,
 | 
			
		||||
                case when da_external_number_on then 1 else 0 end da_external_number_on
 | 
			
		||||
            from da_server
 | 
			
		||||
            where da_id = 1"
 | 
			
		||||
        );
 | 
			
		||||
        foreach (row; queryResult) {
 | 
			
		||||
            server.transparent_mode = row["da_transparent_mode"].to!int.to!bool;
 | 
			
		||||
            server.internal_number = row["da_internal_number"];
 | 
			
		||||
            server.external_number = row["da_external_number"];
 | 
			
		||||
            server.external_number_on = row["da_external_number_on"].to!int.to!bool;
 | 
			
		||||
        }
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
        log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return server;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool sqlUpdateServerInfo(ServerDB server) {
 | 
			
		||||
    try {
 | 
			
		||||
        pgsql.sql(
 | 
			
		||||
            "update da_server set
 | 
			
		||||
                da_transparent_mode = ?,
 | 
			
		||||
                da_internal_number = ?,
 | 
			
		||||
                da_external_number = ?,
 | 
			
		||||
                da_external_number_on = ?
 | 
			
		||||
            where da_id = 1",
 | 
			
		||||
            server.transparent_mode,
 | 
			
		||||
            server.internal_number,
 | 
			
		||||
            server.external_number,
 | 
			
		||||
            server.external_number_on
 | 
			
		||||
        );
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
        log.e("Ошибка обновления параметров сервера в БД. " ~ e.msg);
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,3 +53,10 @@ struct USSDDB {
 | 
			
		|||
    string type_comment;
 | 
			
		||||
    string text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct ServerDB {
 | 
			
		||||
    bool transparent_mode;
 | 
			
		||||
    string internal_number;
 | 
			
		||||
    string external_number;
 | 
			
		||||
    bool external_number_on;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module version_;
 | 
			
		||||
 | 
			
		||||
enum dasterVersion = "v0.0.6";
 | 
			
		||||
enum dasterVersion = "v0.0.8";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,4 @@ body
 | 
			
		|||
            div#tabs-numbers
 | 
			
		||||
            div#tabs-sms
 | 
			
		||||
            div#tabs-ussd
 | 
			
		||||
                p Список результатов USSD запросов
 | 
			
		||||
            div#tabs-server
 | 
			
		||||
                p Информация о сервере
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ div#accordion-numbers
 | 
			
		|||
    - foreach (group; listGroups)
 | 
			
		||||
        h3 #{group.comment}
 | 
			
		||||
        div.group-content(data-group-name='#{group.name}')
 | 
			
		||||
            table
 | 
			
		||||
            table.table-content
 | 
			
		||||
                thead.head
 | 
			
		||||
                    tr
 | 
			
		||||
                        th Номер
 | 
			
		||||
| 
						 | 
				
			
			@ -12,5 +12,5 @@ div#accordion-numbers
 | 
			
		|||
                        th Черные звонки
 | 
			
		||||
                        th Комментарий
 | 
			
		||||
            div.body-rows
 | 
			
		||||
                table
 | 
			
		||||
                table.table-content
 | 
			
		||||
                    tbody.body
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,12 +2,12 @@ div#accordion-sms
 | 
			
		|||
    - foreach (number; numbers)
 | 
			
		||||
        h3 На номер #{number.to}
 | 
			
		||||
        div.group-content(data-to='#{number.to}')
 | 
			
		||||
            table
 | 
			
		||||
            table.table-content
 | 
			
		||||
                thead.head
 | 
			
		||||
                    tr
 | 
			
		||||
                        th.sms-content-width Дата
 | 
			
		||||
                        th.sms-content-width От кого
 | 
			
		||||
                        th Текст сообщения
 | 
			
		||||
            div.body-rows
 | 
			
		||||
                table
 | 
			
		||||
                table.table-content
 | 
			
		||||
                    tbody.body
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,12 +2,12 @@ div#accordion-ussd
 | 
			
		|||
    - foreach (number; numbers)
 | 
			
		||||
        h3 На номер #{number.to}
 | 
			
		||||
        div.group-content(data-to='#{number.to}')
 | 
			
		||||
            table
 | 
			
		||||
            table.table-content
 | 
			
		||||
                thead.head
 | 
			
		||||
                    tr
 | 
			
		||||
                        th.ussd-content-width Дата
 | 
			
		||||
                        th.ussd-content-width-type Тип
 | 
			
		||||
                        th Текст сообщения
 | 
			
		||||
            div.body-rows
 | 
			
		||||
                table
 | 
			
		||||
                table.table-content
 | 
			
		||||
                    tbody.body
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								views/server.dt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								views/server.dt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
div#server-data
 | 
			
		||||
    table
 | 
			
		||||
        tbody
 | 
			
		||||
            tr
 | 
			
		||||
                td.server-label Внутренний номер:
 | 
			
		||||
                td.server-value
 | 
			
		||||
                    input.input-focus.server-input#server-internal-number(type="text", value="#{dataServer.internal_number}")
 | 
			
		||||
                td.server-value
 | 
			
		||||
            tr
 | 
			
		||||
                td.server-label Внешний номер:
 | 
			
		||||
                td.server-value
 | 
			
		||||
                    input.input-focus.server-input#server-external-number(type="text", value="#{dataServer.external_number}")
 | 
			
		||||
                td.server-value
 | 
			
		||||
                    label(for="server-external-number-on") Использовать
 | 
			
		||||
                    input.server-input#server-external-number-on(name="server-external-number-on", type="checkbox", checked="#{dataServer.external_number_on}")
 | 
			
		||||
            tr
 | 
			
		||||
                td.server-label Прозрачный режим:
 | 
			
		||||
                td.server-value
 | 
			
		||||
                    label(for="server-transparent-mode") Включен
 | 
			
		||||
                    input.server-input#server-transparent-mode(name="server-transparent-mode", type="checkbox", checked="#{dataServer.transparent_mode}")
 | 
			
		||||
                td.server-value
 | 
			
		||||
div.server-button
 | 
			
		||||
    button#server-button Сохранить изменения
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue