Changeset 11306
- Timestamp:
- 02/06/11 19:11:54 (2 years ago)
- Files:
-
- modules/branches/2.9/core/functions.inc.php (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/branches/2.9/core/functions.inc.php
r11289 r11306 1364 1364 // 1365 1365 $ivr_context = 'from-did-direct-ivr'; 1366 if ($ast_lt_16) { 1367 $ext->add($ivr_context, $exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','dbDel','${BLKVM_OVERRIDE}')); 1368 } else { 1369 $ext->add($ivr_context, $exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','Noop','Deleting: ${BLKVM_OVERRIDE}: ${DB_DELETE(${BLKVM_OVERRIDE})}')); 1370 } 1366 $ext->add($ivr_context, $exten['extension'],'', new ext_macro('blkvm-clr')); 1371 1367 $ext->add($ivr_context, $exten['extension'],'', new ext_setvar('__NODEST', '')); 1372 1368 $ext->add($ivr_context, $exten['extension'],'', new ext_goto('1',$exten['extension'],'from-did-direct')); 1373 1369 if($vm != "novm") { 1374 if ($ast_lt_16) { 1375 $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','dbDel','${BLKVM_OVERRIDE}')); 1376 } else { 1377 $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','Noop','Deleting: ${BLKVM_OVERRIDE}: ${DB_DELETE(${BLKVM_OVERRIDE})}')); 1378 } 1370 $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_macro('blkvm-clr')); 1379 1371 $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_setvar('__NODEST', '')); 1380 1372 $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_macro('vm',$vm.',DIRECTDIAL,${IVR_RETVM}')); … … 1927 1919 } 1928 1920 $ext->add($context, $exten, '', new ext_dbdel('RG/${ARG3}/${UNIQCHAN}')); 1929 $ext->add($context, $exten, '', new ext_ dbdel('${BLKVM_OVERRIDE}'));1921 $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 1930 1922 if ($amp_conf['AST_FUNC_SHARED']) { 1931 1923 $ext->add($context, $exten, '', new ext_setvar('SHARED(ANSWER_STATUS,${FORCE_CONFIRM})','')); … … 1994 1986 $exten = 's'; 1995 1987 $ext->add($context, $exten, '', new ext_setvar('__MACRO_RESULT','')); 1996 $ext->add($context, $exten, '', new ext_ dbdel('${BLKVM_OVERRIDE}'));1988 $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 1997 1989 $ext->add($context, $exten, '', new ext_dbdel('RG/${ARG1}/${UNIQCHAN}')); 1998 1990 $ext->add($context, $exten, '', new ext_noop_trace('DIALEDPEERNUMBER: ${DIALEDPEERNUMBER} CID: ${CALLERID(all)}')); 1991 if ($amp_conf['AST_FUNC_MASTER_CHANNEL'] && $amp_conf['AST_FUNC_CONNECTEDLINE']) { 1992 $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(num))','${DIALEDPEERNUMBER}')); 1993 $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(name))','${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}')); 1994 } 1999 1995 2000 1996 /* … … 2011 2007 $exten = 's'; 2012 2008 $ext->add($context, $exten, '', new ext_setvar('__MACRO_RESULT','')); 2013 $ext->add($context, $exten, '', new ext_dbdel('${BLKVM_OVERRIDE}')); 2009 $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 2010 $ext->add($context, $exten, '', new ext_noop_trace('DIALEDPEERNUMBER: ${DIALEDPEERNUMBER} CID: ${CALLERID(all)}')); 2011 if ($amp_conf['AST_FUNC_MASTER_CHANNEL'] && $amp_conf['AST_FUNC_CONNECTEDLINE']) { 2012 $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(num))','${DIALEDPEERNUMBER}')); 2013 $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(name))','${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}')); 2014 } 2014 2015 2015 2016 /* … … 2771 2772 $ext->add('macro-vm','s', '', new ext_setvar("VMGAIN", '${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})":"")}')); 2772 2773 2773 // If BLKVM_OVERRIDE is set, then someone told us to block calls from going to2774 // If blkvm-check is set TRUE, then someone told us to block calls from going to 2774 2775 // voicemail. This variable is reset by the answering channel so subsequent 2775 2776 // transfers will properly function. 2776 2777 // 2777 $ext->add('macro-vm','s', '', new ext_gotoif('$["foo${DB(${BLKVM_OVERRIDE})}" != "fooTRUE"]','vmx,1')); 2778 $ext->add('macro-vm','s', '', new ext_macro('blkvm-check')); 2779 $ext->add('macro-vm','s', '', new ext_gotoif('$["${GOSUB_RETVAL}" != "TRUE"]','vmx,1')); 2778 2780 2779 2781 // we didn't branch so block this from voicemail 2780 2782 // 2781 $ext->add('macro-vm','s', '', new ext_ NoOp('CAME FROM: ${NODEST} - Blocking VM cause of key: ${DB(BLKVM_OVERRIDE)}'));2783 $ext->add('macro-vm','s', '', new ext_noop_trace('CAME FROM: ${NODEST} - Blocking VM macro-blkvm-check returned TRUE')); 2782 2784 $ext->add('macro-vm','s', '', new ext_hangup('')); 2783 2785 … … 3194 3196 3195 3197 3198 /* macro-blkvm-setifempty 3199 * macro-blkvm-set 3200 * macro-blkvm-clr 3201 * macro-blkvm-check 3202 * 3203 * These macros are used to tell the voicemail system if it should answer a call or kill the call. 3204 * They are also used by modules like findmefollow and ringgroups to determine if a destination 3205 * if noanswer should be pursued, or if they should just end because they were called by a higher 3206 * level module who's destination should be honored. (Thus if vm should be blocked, so should 3207 * such destinations. 3208 * 3209 * In the past, it was necessary to create and track unique AstDB variables to track this since 3210 * it is necessary for a call that is answered, for example a queue memeber who answers a queue 3211 * call, to clr the block so that subsequent transfers to voicemail or user extensions which might 3212 * hit voicemail could succeed and the nature of Asterisk inheritable variable did not allow 3213 * this. This also meant that these needed to be cleaned up when the master channel who 'started 3214 * it all' ended, which is attempted in macro-hangupcall. There are still cases where cleanup 3215 * does not happen which can result in an accumulation of these. 3216 * 3217 * With the advent of the SHARED() channel variable starting in 1.6, we can achieve the same 3218 * thing with such a SHARED() channel variable which should be more efficient since it does not 3219 * hit the DB, but more importantly, there is no cleanup because the variable will die with the 3220 * owner channel. 3221 * 3222 * We check if the SHARED function is availalbe and if so, we use that in our macro. If not, we 3223 * fall back to the shared DB variable and keep our cleanup code in hangupcall. 3224 * 3225 * Note that we have chosen to use a Macro() in place of a GoSub() because in the legacy DB 3226 * mode we must have the owning ${EXTEN} to create our unique key. Since GoSub() does not support 3227 * passing arguments until 1.6 this would not be possible in 1.4 which is still mainstream. 3228 * We have chosen to use the GOSUB_RETVAL in anticipation of a future point where we move to 3229 * a GoSub() call which would be slightly more efficient. 3230 */ 3231 3232 if ($amp_conf['AST_FUNC_SHARED']) { 3233 $exten = 's'; 3234 3235 // If it BLKVM_CHANNEL exists, return it's value. If not, then set it and return TRUE 3236 // 3237 $mcontext = 'macro-blkvm-setifempty'; 3238 $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_CHANNEL})}]', 'init')); 3239 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${SHARED(BLKVM,${BLKVM_CHANNEL})}')); 3240 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3241 $ext->add($mcontext,$exten,'init', new ext_set('__BLKVM_CHANNEL','${CHANNEL}')); 3242 $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','TRUE')); 3243 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 3244 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3245 3246 // If BLKVM_CHANNEL not set or 'reset' is passed, then initialize it to this channel then set and retrun TRUE 3247 // 3248 $mcontext = 'macro-blkvm-set'; 3249 $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_CHANNEL=${CHANNEL}')); 3250 $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','TRUE')); 3251 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 3252 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3253 3254 // if clearing, BLKVM_CHANNEL should already exist (if not, we clear our channel's copy) 3255 // 3256 $mcontext = 'macro-blkvm-clr'; 3257 $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','')); 3258 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','')); 3259 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3260 3261 // if checking, BLKVM_CHANNEL should already exist (if not, we check our channel's copy) 3262 // 3263 $mcontext = 'macro-blkvm-check'; 3264 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${SHARED(BLKVM,${BLKVM_CHANNEL})}')); 3265 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3266 3267 } else { // NO SHARED() 3268 3269 // If it BLKVM_OVERRIDE exists, return it's value. If not, then set it and return TRUE 3270 // 3271 $mcontext = 'macro-blkvm-setifempty'; 3272 $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_OVERRIDE})}]', 'init')); 3273 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${DB(${BLKVM_OVERRIDE})}')); 3274 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3275 $ext->add($mcontext,$exten,'init', new ext_set('__BLKVM_OVERRIDE','BLKVM/${MACRO_EXTEN}/${CHANNEL}')); 3276 $ext->add($mcontext,$exten,'', new ext_set('__BLKVM_BASE','${MACRO_EXTEN}')); 3277 $ext->add($mcontext,$exten,'', new ext_set('DB(${BLKVM_OVERRIDE})','TRUE')); 3278 3279 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 3280 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3281 3282 // If BLKVM_OVERRIDE not set or 'reset' is passed, then initialize it to this channel then set and retrun TRUE 3283 // 3284 $mcontext = 'macro-blkvm-set'; 3285 $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_OVERRIDE})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_BASE=${MACRO_EXTEN}')); 3286 $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_OVERRIDE})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_OVERRIDE=BLKVM/${MACRO_EXTEN}/${CHANNEL}')); 3287 $ext->add($mcontext,$exten,'', new ext_set('DB(${BLKVM_OVERRIDE})','TRUE')); 3288 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 3289 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3290 3291 // if clearing, BLKVM_OVERRIDE should already exist (if not, it's already cleared anyhow) 3292 // 3293 $mcontext = 'macro-blkvm-clr'; 3294 $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_OVERRIDE})}]', 'ret')); 3295 $ext->add($mcontext,$exten,'', new ext_dbdel('${BLKVM_OVERRIDE}')); 3296 $ext->add($mcontext,$exten,'ret', new ext_set('GOSUB_RETVAL','')); 3297 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3298 3299 // if checking, BLKVM_OVERRIDE should already exist (if not, '' will be returned) 3300 // 3301 $mcontext = 'macro-blkvm-check'; 3302 $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${DB(${BLKVM_OVERRIDE})}')); 3303 $ext->add($mcontext,$exten,'', new ext_macroexit('')); 3304 } 3305 3196 3306 $mcontext = 'macro-hangupcall'; 3197 3307 $exten = 's'; … … 3199 3309 ; Cleanup any remaining RG flag 3200 3310 */ 3201 $ext->add($mcontext,$exten,'start', new ext_gotoif('$["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]','skiprg')); 3311 $skip_label = 'skiprg'; 3312 $ext->add($mcontext,$exten,'start', new ext_gotoif('$["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]',$skip_label)); 3202 3313 $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Confirmation Flag: RG/${RINGGROUP_INDEX}/${CHANNEL}')); 3203 3314 $ext->add($mcontext,$exten,'delrgi', new ext_dbdel('RG/${RINGGROUP_INDEX}/${CHANNEL}')); 3204 3315 3205 /* 3206 ; Cleanup any remaining BLKVM flag 3207 */ 3208 $ext->add($mcontext,$exten,'skiprg', new ext_gotoif('$["${BLKVM_BASE}"="" | "BLKVM/${BLKVM_BASE}/${CHANNEL}"!="${BLKVM_OVERRIDE}"]','skipblkvm')); 3209 $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Block VM Flag: ${BLKVM_OVERRIDE}')); 3210 $ext->add($mcontext,$exten,'delblkvm', new ext_dbdel('${BLKVM_OVERRIDE}')); 3316 if (!$amp_conf['AST_FUNC_SHARED']) { 3317 $next_label = 'skipblkvm'; 3318 // only clr it if we were the originating channel 3319 // 3320 $ext->add($mcontext,$exten,$skip_label, new ext_gotoif('$["${BLKVM_BASE}"="" | "BLKVM/${BLKVM_BASE}/${CHANNEL}"!="${BLKVM_OVERRIDE}"]',$next_label)); 3321 $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Block VM Flag: ${BLKVM_OVERRIDE}')); 3322 $ext->add($mcontext,$exten,'', new ext_macro('blkvm-clr')); 3323 $skip_label = $next_label; 3324 } 3211 3325 3212 3326 /* 3213 3327 ; Cleanup any remaining FollowMe DND flags 3214 3328 */ 3215 $ext->add($mcontext,$exten, 'skipblkvm', new ext_gotoif('$["${FMGRP}"="" | "${FMUNIQUE}"="" | "${CHANNEL}"!="${FMUNIQUE}"]','theend'));3329 $ext->add($mcontext,$exten,$skip_label, new ext_gotoif('$["${FMGRP}"="" | "${FMUNIQUE}"="" | "${CHANNEL}"!="${FMUNIQUE}"]','theend')); 3216 3330 $ext->add($mcontext,$exten,'delfmrgp', new ext_dbdel('FM/DND/${FMGRP}/${CHANNEL}')); 3217 3331 $ext->add($mcontext,$exten,'theend', new ext_hangup()); … … 3275 3389 $ext->add($mcontext,$exten,'', new ext_gotoif('$["${USEGOTO}"="1"]','usegoto,1')); 3276 3390 3277 $ext->add($mcontext,$exten,'', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}')); 3391 // Once setting CONNECTEDLINE(), add the I option to Dial() so the device doesn't further update the value with the 3392 // "device" <devicenum> data from device CID information 3393 // 3394 if ($amp_conf['AST_FUNC_CONNECTEDLINE']) { 3395 $ext->add($mcontext,$exten,'', new ext_gotoif('$["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = ""]','godial')); 3396 $ext->add($mcontext,$exten,'', new ext_set('CONNECTEDLINE(name,i)', '${DB(AMPUSER/${EXTTOCALL}/cidname)}')); 3397 $ext->add($mcontext,$exten,'', new ext_set('CONNECTEDLINE(num)', '${EXTTOCALL}')); 3398 $ext->add($mcontext,$exten,'', new ext_set('D_OPTIONS', '${D_OPTIONS}I')); 3399 } 3400 $ext->add($mcontext,$exten,'godial', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}')); 3401 3278 3402 $ext->add($mcontext,$exten,'', new ext_execif('$["${DIALSTATUS_CW}"!=""]', 'Set', 'DIALSTATUS=${DIALSTATUS_CW}')); 3279 3403 $ext->add($mcontext,$exten,'', new ext_gosubif('$["${SCREEN}"!=""|"${DIALSTATUS}"="ANSWER"]','s-${DIALSTATUS},1'));
