applications/luci-asterisk: fix copy & paste error
[project/luci.git] / applications / luci-asterisk / luasrc / asterisk.lua
index 9089863..5e22454 100644 (file)
@@ -15,6 +15,7 @@ $Id$
 ]]--
 
 module("luci.asterisk", package.seeall)
+require("luci.asterisk.cc_idd")
 
 local _io  = require("io")
 local uci  = require("luci.model.uci").cursor()
@@ -25,6 +26,11 @@ AST_BIN   = "/usr/sbin/asterisk"
 AST_FLAGS = "-r -x"
 
 
+--- LuCI Asterisk - Resync uci context
+function uci_resync()
+       uci = luci.model.uci.cursor()
+end
+
 --- LuCI Asterisk io interface
 -- Handles low level io.
 -- @type       module
@@ -252,6 +258,112 @@ function tools.hyperlinks(list, url, sep)
 end
 
 
+--- LuCI Asterisk - International Direct Dialing Prefixes
+-- @type module
+idd = luci.util.class()
+
+--- Lookup the country name for the given IDD code.
+-- @param country      String containing IDD code
+-- @return                     String containing the country name
+function idd.country(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if type(v[3]) == "table" then
+                       for _, v2 in ipairs(v[3]) do
+                               if v2 == tostring(c) then
+                                       return v[1]
+                               end
+                       end
+               elseif v[3] == tostring(c) then
+                       return v[1]
+               end
+       end
+end
+
+--- Lookup the country code for the given IDD code.
+-- @param country      String containing IDD code
+-- @return                     Table containing the country code(s)
+function idd.cc(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if type(v[3]) == "table" then
+                       for _, v2 in ipairs(v[3]) do
+                               if v2 == tostring(c) then
+                                       return type(v[2]) == "table"
+                                               and v[2] or { v[2] }
+                               end
+                       end
+               elseif v[3] == tostring(c) then
+                       return type(v[2]) == "table"
+                               and v[2] or { v[2] }
+               end
+       end
+end
+
+--- Lookup the IDD code(s) for the given country.
+-- @param idd          String containing the country name
+-- @return                     Table containing the IDD code(s)
+function idd.idd(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if v[1]:lower():match(c:lower()) then
+                       return type(v[3]) == "table"
+                               and v[3] or { v[3] }
+               end
+       end
+end
+
+
+--- LuCI Asterisk - Country Code Prefixes
+-- @type module
+cc = luci.util.class()
+
+--- Lookup the country name for the given CC code.
+-- @param country      String containing CC code
+-- @return                     String containing the country name
+function cc.country(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if type(v[2]) == "table" then
+                       for _, v2 in ipairs(v[2]) do
+                               if v2 == tostring(c) then
+                                       return v[1]
+                               end
+                       end
+               elseif v[2] == tostring(c) then
+                       return v[1]
+               end
+       end
+end
+
+--- Lookup the international dialing code for the given CC code.
+-- @param cc           String containing CC code
+-- @return                     String containing IDD code
+function cc.idd(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if type(v[2]) == "table" then
+                       for _, v2 in ipairs(v[2]) do
+                               if v2 == tostring(c) then
+                                       return type(v[3]) == "table"
+                                               and v[3] or { v[3] }
+                               end
+                       end
+               elseif v[2] == tostring(c) then
+                       return type(v[3]) == "table"
+                               and v[3] or { v[3] }
+               end
+       end
+end
+
+--- Lookup the CC code(s) for the given country.
+-- @param country      String containing the country name
+-- @return                     Table containing the CC code(s)
+function cc.cc(c)
+       for _, v in ipairs(cc_idd.CC_IDD) do
+               if v[1]:lower():match(c:lower()) then
+                       return type(v[2]) == "table"
+                               and v[2] or { v[2] }
+               end
+       end
+end
+
+
 --- LuCI Asterisk - Dialzone
 -- @type       module
 dialzone = luci.util.class()
@@ -318,3 +430,57 @@ function dialzone.ucisection(i)
                end)
        return hash
 end
+
+
+--- LuCI Asterisk - Dialplan
+-- @type       module
+dialplan = luci.util.class()
+
+--- Parse a dialplan section
+-- @param plan Table containing the plan info
+-- @return             Table with parsed information
+function dialplan.parse(z)
+       if z['.name'] then
+               local plan = {
+                       zones           = { },
+                       name            = z['.name'],
+                       description     = z.description or z['.name']
+               }
+
+               for _, name in ipairs(tools.parse_list(z.include)) do
+                       local zone = dialzone.zone(name)
+                       if zone then
+                               plan.zones[#plan.zones+1] = zone
+                       end
+               end
+
+               return plan
+       end
+end
+
+--- Get a list of known dial plans
+-- @return             Associative table of plans and table of plan names
+function dialplan.plans()
+       local plans  = { }
+       local pnames = { }
+       uci:foreach("asterisk", "dialplan",
+               function(p)
+                       plans[p['.name']] = dialplan.parse(p)
+                       pnames[#pnames+1] = p['.name']
+               end)
+       return plans, pnames
+end
+
+--- Get a specific dial plan
+-- @param name Name of the dial plan
+-- @return             Table containing plan information
+function dialplan.plan(n)
+       local plan
+       uci:foreach("asterisk", "dialplan",
+               function(p)
+                       if p['.name'] == n then
+                               plan = dialplan.parse(p)
+                       end
+               end)
+       return plan
+end