d0314fd810a5981a9ac328f9aac5fada72fa585f
[project/luci.git] / contrib / package / asterisk-xip / files / uci / lastcall
1 #!/bin/sh
2 #
3 # Author: Michael Geddes  <michael at frog dot wheelycreek dot net>
4 # Copyright 2008 Michael Geddes
5 # Licensed under GPL
6
7 ast_add_module lastcall
8
9 init_lastcall() {
10  #
11  ast_enable_type calllist
12  ast_enable_type calllistdefault
13 }
14
15 check_add_calllist() {
16         local context=${opt_calllist_zonename}
17         if [ ! -z "$context" ] ; then
18                 logdebug 1 "Adding calllist context ${context}"
19                 [ -z $opt_calllist_dialplan ] && opt_calllist_dialplan=${opt_calllist_general_dialplan}
20                 [ -z $opt_calllist_dialplan ] && opt_calllist_dialplan=extensions
21                 [ -z $opt_calllist_listname ] && opt_calllist_listname=lastcall
22                 [ -z $opt_calllist_length ] && opt_calllist_length=${opt_calllist_general_length}
23                 [ -z $opt_calllist_length ] && opt_calllist_length=10
24                 [ -z $opt_calllist_dialcontext ] && opt_calllist_dialcontext=${opt_calllist_general_dialcontext}
25                 [ -z $opt_calllist_dialcontext ] && opt_calllist_dialcontext=default
26                 [ -z $opt_calllist_calltype ] && opt_calllist_calltype=macro
27                 
28                 [ -z ${opt_calllist_extension} ] \
29                         || add_dialplan_lastcall ${opt_calllist_dialplan} "${opt_calllist_extension}" "${opt_calllist_listname}" "${opt_calllist_length}" "${opt_calllist_tagname}" "${opt_calllist_dialcontext}"
30                 enable_lastcall
31                 add_section_lastcall ${context} "${opt_calllist_listname}" "${opt_calllist_length}" "${opt_calllist_calltype}"
32         fi
33         for i in  zonename extension dialplan length listname ; do
34                 eval "unset opt_calllist_${i}"
35         done
36 }
37
38 add_section_lastcall() {
39         local context=$1
40         local name=$2
41         local queuelen=$3
42         local calltype=$4
43
44         [ "${calltype}" = "macro" ]  && context=macro-${1}
45
46         if check_add_context ${context} ; then
47                 local ext="exten => s,"
48                 case "${calltype}" in
49                         gosub)
50                                 enable_module app_stack
51                                 append_dialplan_context ${context}  "${ext}1,Macro(lastcallstore,\${EXTEN},${name},${queuelen})"
52                                 append_dialplan_context ${context}  "${ext}n,Return" ;;
53                         gosub_s)
54                                 enable_module app_stack
55                                 append_dialplan_context ${context}  "${ext}1,Macro(lastcallstore,\${ARG1},${name},${queuelen})"
56                                 append_dialplan_context ${context}  "${ext}n,Return" ;;
57                         macro)
58                                 enable_module app_macro
59                                 append_dialplan_context ${context}  "${ext}1,Macro(lastcallstore,\${ARG1},${name},${queuelen})" ;;
60                 esac
61         else
62                 logerror "Lastcall section ${context} already added"
63         fi
64 }
65
66 handle_calllist() {
67         check_add calllist
68         logdebug 2 "Loading Call List: ${opt_calllist_zonename}"
69         opt_calllist_zonename=$1
70         option_cb() {
71                 case "$1" in
72                         extension|dialplan|length|listname|calllist|tagname|dialcontext|calltype)
73                                 logdebug 1 "Setting opt_calllist_$1=\"${2}\""
74                                 eval "opt_calllist_${1}=\"${2}\"" ;;
75                         *)
76                                 logerror "Unknown option $1 in calllist ${opt_calllist_zonename}" ;;
77                 esac
78         }
79 }
80
81 handle_calllistdefault() {
82         logdebug 2 "Loading Call List General options"
83         option_cb() {
84                 case $1 in
85                         dialplan|length|dialcontext)
86                                 eval "opt_calllist_general_${1}=\"${2}\"" ;;
87                         *) logerror "Unknown option $1 in calllistdefault" ;;
88                 esac
89         }
90 }
91
92 add_dialplan_lastcall(){
93         local context=$1
94         logdebug 1 "Adding Dialplan lastcall $1 $2"
95         check_add_context "$context"
96         enable_lastcall
97         local queue=$3
98         local len=$4
99         local tag=$5
100         local dialcontext=$6
101         [ "${queue}" == lastcall ] && queue=
102         append dialplan_context_${context} "exten => $2,1,Macro(lastcallapp,${queue},${len},${dialcontext},${tag})" "${N}"
103 }
104
105 enable_lastcall() {
106         if [ "${dialplan_do_add_lastcall}" != "1" ] ; then
107                 logdebug 2 "Enabling lastcall"
108                 
109                 append dialplan_globals "LASTCALLZONE=\"${asterisk_zone}\"" "$N"
110                 [ -z "${DEST}" ] || append dialplan_globals "LASTCALL_DIR=${DEST}/etc/asterisk/directory" "$N"
111                 append_include "macros/tagnumber.conf"
112                 append_include "macros/lastcall.conf"
113                 dialplan_do_add_lastcall=1
114                 enable_module app_macro
115                 enable_module func_callerid
116                 enable_module app_sayunixtime
117                 enable_module app_playback
118                 enable_module func_db
119                 enable_module app_record
120                 enable_module app_system
121                 enable_format gsm
122         fi
123 }
124 # vim: ts=2 sw=2 noet foldmethod=indent