summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-asterisk/luasrc/asterisk.lua
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2009-03-11 23:40:08 +0000
committerJo-Philipp Wich <jow@openwrt.org>2009-03-11 23:40:08 +0000
commit93b66993ce14d18aa0001fb27b2e8b21d18328e6 (patch)
treefdb498351ccddeca7435d9816a922fdd925e987b /applications/luci-asterisk/luasrc/asterisk.lua
parent8eadc262d0644ac877a9a316355dfba98e371536 (diff)
applications/luci-asterisk: begin reworking dialplan stuff to separate dialzones from dialplans
Diffstat (limited to 'applications/luci-asterisk/luasrc/asterisk.lua')
-rw-r--r--applications/luci-asterisk/luasrc/asterisk.lua122
1 files changed, 122 insertions, 0 deletions
diff --git a/applications/luci-asterisk/luasrc/asterisk.lua b/applications/luci-asterisk/luasrc/asterisk.lua
index c1b099dc5..908986366 100644
--- a/applications/luci-asterisk/luasrc/asterisk.lua
+++ b/applications/luci-asterisk/luasrc/asterisk.lua
@@ -17,6 +17,7 @@ $Id$
module("luci.asterisk", package.seeall)
local _io = require("io")
+local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
@@ -196,3 +197,124 @@ function sip.peer(peer)
return info, keys
end
+
+
+--- LuCI Asterisk - Internal helpers
+-- @type module
+tools = luci.util.class()
+
+--- Convert given value to a list of tokens. Split by white space.
+-- @param val String or table value
+-- @return Table containing tokens
+function tools.parse_list(v)
+ local tokens = { }
+
+ v = type(v) == "table" and v or { v }
+ for _, v in ipairs(v) do
+ if type(v) == "string" then
+ for v in v:gmatch("(%S+)") do
+ tokens[#tokens+1] = v
+ end
+ end
+ end
+
+ return tokens
+end
+
+--- Convert given list to a collection of hyperlinks
+-- @param list Table of tokens
+-- @param url String pattern or callback function to construct urls (optional)
+-- @param sep String containing the seperator (optional, default is ", ")
+-- @return String containing the html fragment
+function tools.hyperlinks(list, url, sep)
+ local html
+
+ local function mkurl(p, t)
+ if type(p) == "string" then
+ return p:format(t)
+ elseif type(p) == "function" then
+ return p(t)
+ else
+ return '#'
+ end
+ end
+
+ list = list or { }
+ url = url or "%s"
+ sep = sep or ", "
+
+ for _, token in ipairs(list) do
+ html = ( html and html .. sep or '' ) ..
+ '<a href="%s">%s</a>' %{ mkurl(url, token), token }
+ end
+
+ return html or ''
+end
+
+
+--- LuCI Asterisk - Dialzone
+-- @type module
+dialzone = luci.util.class()
+
+--- Parse a dialzone section
+-- @param zone Table containing the zone info
+-- @return Table with parsed information
+function dialzone.parse(z)
+ if z['.name'] then
+ return {
+ trunks = tools.parse_list(z.uses),
+ name = z['.name'],
+ description = z.description or z['.name'],
+ addprefix = z.addprefix,
+ matches = tools.parse_list(z.match),
+ intlmatches = tools.parse_list(z.international),
+ countrycode = z.countrycode,
+ localzone = z.localzone,
+ localprefix = z.localprefix
+ }
+ end
+end
+
+--- Get a list of known dial zones
+-- @return Associative table of zones and table of zone names
+function dialzone.zones()
+ local zones = { }
+ local znames = { }
+ uci:foreach("asterisk", "dialzone",
+ function(z)
+ zones[z['.name']] = dialzone.parse(z)
+ znames[#znames+1] = z['.name']
+ end)
+ return zones, znames
+end
+
+--- Get a specific dial zone
+-- @param name Name of the dial zone
+-- @return Table containing zone information
+function dialzone.zone(n)
+ local zone
+ uci:foreach("asterisk", "dialzone",
+ function(z)
+ if z['.name'] == n then
+ zone = dialzone.parse(z)
+ end
+ end)
+ return zone
+end
+
+--- Find uci section hash for given zone number
+-- @param idx Zone number
+-- @return String containing the uci hash pointing to the section
+function dialzone.ucisection(i)
+ local hash
+ local index = 1
+ i = tonumber(i)
+ uci:foreach("asterisk", "dialzone",
+ function(z)
+ if not hash and index == i then
+ hash = z['.name']
+ end
+ index = index + 1
+ end)
+ return hash
+end