diff options
Diffstat (limited to 'applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua')
-rw-r--r-- | applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua new file mode 100644 index 000000000..3115e10d6 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua @@ -0,0 +1,137 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2008 Jo-Philipp Wich <xm@subsignal.org> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +local ast = require("luci.asterisk") + +local function find_outgoing_contexts(uci) + local c = { } + local h = { } + +-- uci:foreach("asterisk", "dialplan", +-- function(s) +-- if not h[s['.name']] then +-- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] } +-- h[s['.name']] = true +-- end +-- end) + + uci:foreach("asterisk", "dialzone", + function(s) + if not h[s['.name']] then + c[#c+1] = { s['.name'], "Dialzone: %s" % s['.name'] } + h[s['.name']] = true + end + end) + + return c +end + +local function find_incoming_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "sip", + function(s) + if s.context and not h[s.context] and + uci:get_bool("asterisk", s['.name'], "provider") + then + c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context } + h[s.context] = true + end + end) + + return c +end + +local function find_trunks(uci) + local t = { } + + uci:foreach("asterisk", "sip", + function(s) + if uci:get_bool("asterisk", s['.name'], "provider") then + t[#t+1] = { + "SIP/%s" % s['.name'], + "SIP: %s" % s['.name'] + } + end + end) + + uci:foreach("asterisk", "iax", + function(s) + t[#t+1] = { + "IAX/%s" % s['.name'], + "IAX: %s" % s.extension or s['.name'] + } + end) + + return t +end + +--[[ + +dialzone {name} - Outgoing zone. + uses - Outgoing line to use: TYPE/Name + match (list) - Number to match + countrycode - The effective country code of this dialzone + international (list) - International prefix to match + localzone - dialzone for local numbers + addprefix - Prexix required to dial out. + localprefix - Prefix for a local call + +]] + + +-- +-- SIP dialzone configuration +-- +if arg[1] then + cbimap = Map("asterisk", "Edit Dialplan Entry") + + entry = cbimap:section(NamedSection, arg[1]) + + back = entry:option(DummyValue, "_overview", "Back to dialplan overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans") + + desc = entry:option(Value, "description", "Description") + function desc.cfgvalue(self, s, ...) + return Value.cfgvalue(self, s, ...) or s + end + + match = entry:option(DynamicList, "match", "Number matches") + + intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)") + + trunk = entry:option(MultiValue, "uses", "Used trunk") + for _, v in ipairs(find_trunks(cbimap.uci)) do + trunk:value(unpack(v)) + end + + aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)") + --ast.idd.cbifill(aprefix) + + ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)") + ast.cc.cbifill(ccode) + + lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers") + lzone:value("", "no special treatment of local numbers") + for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do + lzone:value(unpack(v)) + end + + lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)") + + return cbimap +end |