Changeset 12324

Show
Ignore:
Timestamp:
07/26/11 18:35:56 (2 years ago)
Author:
p_lindheimer
Message:

initial checkin of recordings infrastructure change. Probably breaks seeing the old recordings in ARI but it's a start. Also no migration code, the recording file is expecting there to be a new field in the CDR database which will need to be addressed by migration code. For testing this can simply be added. The field is: recordingfile and is a VARCHAR 255

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/branches/2.10/conferences/functions.inc.php

    r12310 r12324  
    171171          $ext->add($contextname, $roomnum, '', new ext_setvar('MAX_PARTICIPANTS', $roomusers)); 
    172172          $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_MUSIC',$music)); 
    173           if (strstr($room['options'],'r') !== false) { 
    174             $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_RECORDINGFILE','${ASTSPOOLDIR}/monitor/meetme-conf-rec-${MEETME_ROOMNUM}-${UNIQUEID}')); 
    175           } 
     173          $ext->add($contextname, $roomnum, '', new ext_gosub('1','s','sub-record-check',"conf,$roomnum," . (strstr($room['options'],'r') !== false ? 'always' : 'never'))); 
    176174          $ext->add($contextname, $roomnum, '', new ext_gotoif('$["${DIALSTATUS}" = "ANSWER"]',($roomuserpin == '' && $roomadminpin == '' ? 'USER' : 'READPIN')));   
    177175          $ext->add($contextname, $roomnum, '', new ext_answer('')); 
  • modules/branches/2.10/core/etc/extensions.conf

    r11639 r12324  
    493493;------------------------------------------------------------------------------- 
    494494 
    495 ;------------------------------------------------------------------------------- 
    496 ; macro-rg-group: [DEPRECATED] 
    497 ; 
    498 ; Ring groups of phones 
    499 ; ARGS: comma separated extension list 
    500 ; 1 - Ring Group Strategy 
    501 ; 2 - ringtimer 
    502 ; 3 - prefix 
    503 ; 4 - extension list 
    504 ; 
    505 [macro-rg-group] 
    506 exten => s,1,Macro(user-callerid,SKIPTTL) ; already called from ringgroup 
    507 exten => s,2,GotoIf($["${CALLERID(name):0:${LEN(${RGPREFIX})}}" != "${RGPREFIX}"]?4:3)  ; check for old prefix 
    508 exten => s,3,Set(CALLERID(name)=${CALLERID(name):${LEN(${RGPREFIX})}}) ; strip off old prefix 
    509 exten => s,4,Set(RGPREFIX=${ARG3})  ; set new prefix 
    510 exten => s,5,Set(CALLERID(name)=${RGPREFIX}${CALLERID(name)})  ; add prefix to callerid name 
    511 exten => s,6,Set(RecordMethod=Group)  ; set new prefix 
    512 exten => s,7,Macro(record-enable,${MACRO_EXTEN},${RecordMethod}) 
    513 exten => s,8,Set(RingGroupMethod=${ARG1})     ; 
    514 exten => s,9,Macro(dial,${ARG2},${DIAL_OPTIONS},${ARG4}) 
    515 exten => s,10,Set(RingGroupMethod='')     ; 
    516 ;------------------------------------------------------------------------------- 
    517  
    518 ;------------------------------------------------------------------------------- 
    519 ; macro-dialout: [DEPRECATED] 
    520 ; 
    521 ; dialout and strip the prefix 
    522 ; 
    523 [macro-dialout] 
    524 exten => s,1,Macro(user-callerid,SKIPTTL) 
    525 exten => s,2,GotoIf($["${ECID${CALLERID(number)}}" = ""]?5)   ;check for CID override for exten 
    526 exten => s,3,Set(CALLERID(all)=${ECID${CALLERID(number)}}) 
    527 exten => s,4,Goto(7) 
    528 exten => s,5,GotoIf($["${OUTCID_${ARG1}}" = ""]?7)    ;check for CID override for trunk 
    529 exten => s,6,Set(CALLERID(all)=${OUTCID_${ARG1}}) 
    530 exten => s,7,Set(length=${LEN(${DIAL_OUT_${ARG1}})}) 
    531 exten => s,8,Dial(${OUT_${ARG1}}/${ARG2:${length}}) 
    532 exten => s,9,Playtones(congestion) 
    533 exten => s,10,Congestion(5) 
    534 exten => s,109,Macro(outisbusy) 
    535 ;------------------------------------------------------------------------------- 
    536  
    537 ;------------------------------------------------------------------------------- 
    538 ; macro-dialout-default: [DEPRECATED] 
    539 ; 
    540 ; dialout using default OUT trunk - no prefix 
    541 ; 
    542 [macro-dialout-default] 
    543 exten => s,1,Macro(user-callerid,SKIPTTL) 
    544 exten => s,2,Macro(record-enable,${CALLERID(number)},OUT) 
    545 exten => s,3,Macro(outbound-callerid,${ARG1}) 
    546 exten => s,4,Dial(${OUT}/${ARG1}) 
    547 exten => s,5,Playtones(congestion) 
    548 exten => s,6,Congestion(5) 
    549 exten => s,105,Macro(outisbusy) 
    550 ;------------------------------------------------------------------------------- 
    551495 
    552496;------------------------------------------------------------------------------- 
  • modules/branches/2.10/core/functions.inc.php

    r12317 r12324  
    188188  } 
    189189 
    190   function addApplicationMap($key, $value) { 
     190  function addApplicationMap($key, $value, $add_to_dynamic_features=false) { 
     191    global $ext; 
    191192    $this->_applicationmap[] = array('key' => $key, 'value' => $value); 
     193    // 
     194    // Now add it to the DYNAMIC_FEATURES 
     195    // TODO: one caveat, if we ever want to make such an application conditional, we will have to change 
     196    // this as for now it makes it for everyone. 
     197    // 
     198    if ($add_to_dynamic_features) { 
     199      $ext->_globals['DYNAMIC_FEATURES'] = empty($ext->_globals['DYNAMIC_FEATURES']) ? $key : $ext->_globals['DYNAMIC_FEATURES'] . ',' . $key; 
     200    } 
    192201  } 
    193202 
     
    197206    if (isset($this->_applicationmap) && is_array($this->_applicationmap)) { 
    198207      foreach ($this->_applicationmap as $values) { 
    199         $output .= $values['key']."=".$values['value']."\n"; 
     208        $output .= $values['key']."=>".$values['value']."\n"; 
    200209      } 
    201210    } 
     
    901910        $code = $fcc->getCodeActive(); 
    902911        unset($fcc); 
    903         $automon = $amp_conf['AUTOMIXMON'] && !$ast_lt_16 ? 'automixmon' : 'automon'; 
     912        // $automon = $amp_conf['AUTOMIXMON'] && !$ast_lt_16 ? 'automixmon' : 'automon'; 
    904913        if ($code != '') { 
    905           $core_conf->addFeatureMap($automon,$code); 
     914          // was this for automixmon 
     915          // $core_conf->addFeatureMap($automon,$code); 
     916          $core_conf->addApplicationMap('apprecord', $code . ',caller,Macro,one-touch-record', true); 
    906917        } 
     918        // TODO: *** NEED TO MAKE THIS SETTABLE, PLACE HOLDER AND HARD CODED FOR NOW. CAN BE: 
     919        //           'caller' or 'callee' so for dev testing can be overridden in globals_custom.conf 
     920        $ext->addGlobal('REC_POLICY','caller'); // TODO: IMPLEMENT THIS 
    907921 
    908922        $fcc = new featurecode($modulename, 'disconnect'); 
     
    18131827      } 
    18141828 
     1829/* TODO: Replaced, will remove this after some additional testing 
     1830 * 
    18151831      // Generate macro-record-enable, if recording is disabled then we just make it a stub 
    18161832      // Otherwise we make it right 
     
    18521868        $ext->add($context, $exten, '', new ext_macroexit()); 
    18531869      } 
     1870*/ 
     1871 
     1872/* 
     1873; ARG1: type 
     1874;       exten, out, rg, q, conf 
     1875; ARG2: called_exten 
     1876; ARG3: action (if we know it) 
     1877;       always, never (note dontcare only applies to extensions, group, etc. must specify yes/no) 
     1878; 
     1879 */ 
     1880      $context = 'sub-record-cancel'; 
     1881      $exten = 's'; 
     1882 
     1883      $ext->add($context, $exten, '', new ext_execif('$["${REC_STATUS}"!="RECORDING"]','Return')); 
     1884      $ext->add($context, $exten, '', new ext_stopmixmonitor()); 
     1885      $ext->add($context, $exten, '', new ext_set('__REC_STATUS','')); 
     1886      // TODO: need to put in default form MINMON_DIR if not set like with conf 
     1887      // $ext->add($context, $exten, '', new ext_set('MEETME_RECORDINGFILE','${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}')); 
     1888      // also need to know format so set/check that 
     1889      // 
     1890      $ext->add($context, $exten, '', new ext_set('MON_BASE','${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/')); 
     1891      $ext->add($context, $exten, '', new ext_set('MON_FMT','${IF($[${LEN(${MIXMON_FORMAT})}]?${MIXMON_FORMAT}:wav)}')); 
     1892      $ext->add($context, $exten, '', new ext_execif('$[${LEN(${CALLFILENAME})} & ${STAT(f,${MON_BASE}${CALLFILENAME}.${MON_FMT})}]','System','rm -f ${MON_BASE}${CALLFILENAME}.${MON_FMT}')); 
     1893      $ext->add($context, $exten, '', new ext_set('__CALLFILENAME','')); 
     1894      $ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','')); 
     1895      $ext->add($context, $exten, '', new ext_return('')); 
     1896 
     1897 
     1898      $context = 'sub-record-check'; 
     1899      $exten = 's'; 
     1900 
     1901      $ext->add($context, $exten, '', new ext_gotoif('$["${BLINDTRANSFER}" = ""]', 'check')); 
     1902      $ext->add($context, $exten, '', new ext_resetcdr('')); 
     1903      $ext->add($context, $exten, 'check', new ext_gotoif('$["${REC_STATUS}"!="RECORDING"]', 'next')); 
     1904      $ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}')); 
     1905      $ext->add($context, $exten, '', new ext_return('')); 
     1906      $ext->add($context, $exten, 'next', new ext_execif('$[!${LEN(${ARG1})}]','Return')); 
     1907      $ext->add($context, $exten, '', new ext_gotoif('$["${REC_STATUS}"!=""]','${ARG1},1')); 
     1908      $ext->add($context, $exten, '', new ext_set('__REC_STATUS','INITIALIZED')); 
     1909      $ext->add($context, $exten, '', new ext_set('__REC_POLICY_MODE','${ARG3}')); 
     1910      $ext->add($context, $exten, '', new ext_set('NOW','${EPOCH}')); 
     1911      $ext->add($context, $exten, '', new ext_set('__DAY','${STRFTIME(${NOW},,%d)}')); 
     1912      $ext->add($context, $exten, '', new ext_set('__MONTH','${STRFTIME(${NOW},,%m)}')); 
     1913      $ext->add($context, $exten, '', new ext_set('__YEAR','${STRFTIME(${NOW},,%Y)}')); 
     1914      $ext->add($context, $exten, '', new ext_set('__TIMESTR','${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)}')); 
     1915      $ext->add($context, $exten, '', new ext_set('__FROMEXTEN','${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})}')); 
     1916      $ext->add($context, $exten, '', new ext_set('__CALLFILENAME','${ARG1}-${ARG2}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID}')); 
     1917      $ext->add($context, $exten, '', new ext_goto('1','${ARG1}')); 
     1918 
     1919      $exten = 'rg'; 
     1920      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1921      $ext->add($context, $exten, '', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','record,1',false,'${EXTEN},${REC_POLICY_MODE},${FROMEXTEN}')); 
     1922      $ext->add($context, $exten, '', new ext_return('')); 
     1923 
     1924      $exten = 'q'; 
     1925      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1926      $ext->add($context, $exten, '', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','recq,1',false,'${EXTEN},${ARG2},${FROMEXTEN}')); 
     1927      $ext->add($context, $exten, '', new ext_return('')); 
     1928 
     1929      $exten = 'out'; 
     1930      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1931      $ext->add($context, $exten, '', new ext_set('__REC_POLICY_MODE','${DB(AMPUSER/${FROMEXTEN}/recording/out/external)}')); 
     1932      $ext->add($context, $exten, '', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','record,1',false,'exten,${ARG2},${FROMEXTEN}')); 
     1933      $ext->add($context, $exten, '', new ext_return('')); 
     1934 
     1935      $exten = 'exten'; 
     1936      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1937      $ext->add($context, $exten, '', new ext_set('__REC_POLICY_MODE','${IF($[${LEN(${FROM_DID})}]?${DB(AMPUSER/${ARG2}/recording/in/external)}:${DB(AMPUSER/${ARG2}/recording/in/internal)})}')); 
     1938      $ext->add($context, $exten, '', new ext_execif('$[!${LEN(${ARG3})}]','Return')); 
     1939 
     1940      /* If callee doesn't care, then go to caller to make decision 
     1941       * Otherwise, if caller doesn't care, the go to callee to make decision 
     1942       * Otherwise, if relative priorities are equal, use the global REC_POLICY 
     1943       * Otherwise, use whomever has a higher priority 
     1944       */ 
     1945      $ext->add($context, $exten, '', new ext_gotoif('$["${REC_POLICY_MODE}"="dontcare"]', 'caller')); 
     1946      $ext->add($context, $exten, '', new ext_gotoif('$["${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)}"="dontcare"]', 'callee')); 
     1947      $ext->add($context, $exten, '', new ext_set('CALLER_PRI','${IF($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}])?${DB(AMPUSER/${FROMEXTEN}/recording/priority)}:0}')); 
     1948      $ext->add($context, $exten, '', new ext_set('CALLEE_PRI','${IF($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}])?${DB(AMPUSER/${ARG2}/recording/priority)}:0}')); 
     1949      $ext->add($context, $exten, '', new ext_gotoif('$["${CALLER_PRI}"="${CALLEE_PRI}"]', '${REC_POLICY}','${IF($["${CALLER_PRI}">"${CALLEE_PRI}"]?caller:callee)}')); 
     1950 
     1951      $ext->add($context, $exten, 'callee', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','record,1',false,'${EXTEN},${ARG2},${FROMEXTEN}')); 
     1952      $ext->add($context, $exten, '', new ext_return('')); 
     1953      $ext->add($context, $exten, 'caller', new ext_set('REC_POLICY_MODE','${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)}')); 
     1954      $ext->add($context, $exten, '', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','record,1',false,'${EXTEN},${ARG2},${FROMEXTEN}')); 
     1955      $ext->add($context, $exten, '', new ext_return('')); 
     1956 
     1957      // For confernecing we will set the variables (since the actual meetme does the recording) in case an option were to exist to do on-demand recording 
     1958      // of the conference which doesn't currenly seem like it is supported but might. 
     1959      // 
     1960      $exten = 'conf'; 
     1961      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1962      $ext->add($context, $exten, '', new ext_gosub('1','recconf',false,'${EXTEN},${ARG2},${ARG2}')); 
     1963      $ext->add($context, $exten, '', new ext_return('')); 
     1964 
     1965      $exten = 'page'; 
     1966      $ext->add($context, $exten, '', new ext_noop_trace('Recording Check ${EXTEN} ${ARG2}')); 
     1967      $ext->add($context, $exten, '', new ext_gosubif('$["${REC_POLICY_MODE}"="always"]','recconf,1',false,'${EXTEN},${ARG2},${FROMEXTEN}')); 
     1968      $ext->add($context, $exten, '', new ext_return('')); 
     1969 
     1970      $exten = 'record'; 
     1971      $ext->add($context, $exten, '', new ext_noop_trace('Setting up recording: ${ARG1}, ${ARG2}, ${ARG3}')); 
     1972      $ext->add($context, $exten, '', new ext_set('AUDIOHOOK_INHERIT(MixMonitor)','yes')); 
     1973      $ext->add($context, $exten, '', new ext_mixmonitor('${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT}','','${MIXMON_POST}')); 
     1974      $ext->add($context, $exten, '', new ext_set('__REC_STATUS','RECORDING')); 
     1975      $ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}')); 
     1976      $ext->add($context, $exten, '', new ext_return('')); 
     1977 
     1978      $exten = 'recq'; 
     1979      $ext->add($context, $exten, '', new ext_noop_trace('Setting up recording: ${ARG1}, ${ARG2}, ${ARG3}')); 
     1980      $ext->add($context, $exten, '', new ext_set('AUDIOHOOK_INHERIT(MixMonitor)','yes')); 
     1981      $ext->add($context, $exten, '', new ext_set('MONITOR_FILENAME','${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}')); 
     1982      $ext->add($context, $exten, '', new ext_set('__REC_STATUS','RECORDING')); 
     1983      $ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}')); 
     1984      $ext->add($context, $exten, '', new ext_return('')); 
     1985 
     1986      $exten = 'recconf'; 
     1987      $ext->add($context, $exten, '', new ext_noop_trace('Setting up recording: ${ARG1}, ${ARG2}, ${ARG3}')); 
     1988      $ext->add($context, $exten, '', new ext_set('__CALLFILENAME','${IF($[${MEETME_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})}')); 
     1989      $ext->add($context, $exten, '', new ext_execif('$[!${MEETME_INFO(parties,${ARG2})}]','Set','DB(RECCONF/${ARG2})=${CALLFILENAME}')); 
     1990      $ext->add($context, $exten, '', new ext_set('MEETME_RECORDINGFILE','${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}')); 
     1991      $ext->add($context, $exten, '', new ext_set('MEETME_RECORDINGFORMAT','${MIXMON_FORMAT}')); 
     1992      $ext->add($context, $exten, '', new ext_execif('$["${REC_POLICY_MODE}"!="always','Return')); 
     1993      $ext->add($context, $exten, '', new ext_set('__REC_STATUS','RECORDING')); 
     1994      $ext->add($context, $exten, '', new ext_set('CDR(recordingfile)','${CALLFILENAME}')); 
     1995      $ext->add($context, $exten, '', new ext_return('')); 
     1996 
     1997      /* macro-one-touch-record */ 
     1998 
     1999      $context = 'macro-one-touch-record'; 
     2000      $exten = 's'; 
     2001 
     2002      $ext->add($context, $exten, '', new ext_execif('$["${THISEXTEN}"=""]','Set','THISEXTEN=${IF($["${REALCALLERIDNUM}"=""]?${DIALEDPEERNUMBER}:${FROMEXTEN})}')); 
     2003      $ext->add($context, $exten, '', new ext_execif('$["${DB(AMPUSER/${THISEXTEN}/recording/ondemand)}"!="enabled"]','MacroExit')); 
     2004      $ext->add($context, $exten, '', new ext_gotoif('$["${MASTER_CHANNEL(ONETOUCH_REC)}"="RECORDING"]', 'stoprec')); 
     2005      $ext->add($context, $exten, '', new ext_gotoif('$["${MASTER_CHANNEL(REC_POLICY_MODE)}"="never"]', 'stopped')); 
     2006      $ext->add($context, $exten, '', new ext_gotoif('$["${MASTER_CHANNEL(ONETOUCH_REC)}"="" & "${MASTER_CHANNEL(REC_STATUS)}"="RECORDING"]', 'recording')); 
     2007      $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(ONETOUCH_REC)','RECORDING')); 
     2008      $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(REC_STATUS)','RECORDING')); 
     2009      $ext->add($context, $exten, '', new ext_noop_trace('THISEXTEN: ${THISEXTEN} CALLFILENAME: ${CALLFILENAME}')); 
     2010      $ext->add($context, $exten, 'mixmon', new ext_set('AUDIOHOOK_INHERIT(MixMonitor)','yes')); 
     2011      $ext->add($context, $exten, '', new ext_mixmonitor('${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT}','a','${MIXMON_POST}')); 
     2012      $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CDR(recordingfile))','${CALLFILENAME}')); 
     2013      $ext->add($context, $exten, 'recording', new ext_playback('beep')); 
     2014      $ext->add($context, $exten, '', new ext_gosub('sstate', false, false,'${FROMEXTEN},INUSE')); 
     2015      $ext->add($context, $exten, '', new ext_gosub('sstate', false, false,'${DIALEDPEERNUMBER},INUSE')); 
     2016      $ext->add($context, $exten, '', new ext_macroexit()); 
     2017 
     2018      $ext->add($context, $exten, 'stoprec', new ext_stopmixmonitor()); 
     2019      $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(ONETOUCH_REC)','PAUSED')); 
     2020      $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(REC_STATUS)','PAUSED')); 
     2021      $ext->add($context, $exten, '', new ext_execif('$["${THISEXTEN}"=""]','Set','THISEXTEN=${IF($["${REALCALLERIDNUM}"=""]?${DIALEDPEERNUMBER}:${FROMEXTEN})}')); 
     2022      $ext->add($context, $exten, '', new ext_noop_trace('THISEXTEN: ${THISEXTEN} CALLFILENAME: ${CALLFILENAME}')); 
     2023      $ext->add($context, $exten, 'stopped', new ext_playback('beep&beep')); 
     2024      $ext->add($context, $exten, '', new ext_gosub('sstate', false, false,'${FROMEXTEN},NOT_INUSE')); 
     2025      $ext->add($context, $exten, '', new ext_gosub('sstate', false, false,'${DIALEDPEERNUMBER},NOT_INUSE')); 
     2026      $ext->add($context, $exten, '', new ext_macroexit()); 
     2027 
     2028      $ext->add($context, $exten, 'sstate', new ext_set('DEVICES','${DB(AMPUSER/${ARG1}/device)}')); 
     2029      $ext->add($context, $exten, '', new ext_gotoif('$["${DEVICES}"=""]', 'return')); 
     2030      $ext->add($context, $exten, '', new ext_set('LOOPCNT','${FIELDQTY(DEVICES,&)}')); 
     2031      $ext->add($context, $exten, '', new ext_set('ITER','1')); 
     2032      $ext->add($context, $exten, 'begin', new ext_set('DEVICE_STATE(Custom:RECORDING${CUT(DEVICES,&,${ITER})})','${ARG2}')); 
     2033      $ext->add($context, $exten, '', new ext_set('ITER','$[${ITER}+1]')); 
     2034      $ext->add($context, $exten, '', new ext_gotoif('$[${ITER}<=${LOOPCNT}]', 'begin')); 
     2035      $ext->add($context, $exten, 'return', new ext_return('')); 
     2036 
    18542037 
    18552038      /* macro-prepend-cid */ 
     
    19482131          } 
    19492132          $ext->add($context, $exten, '', new ext_set("_NODEST","")); 
    1950           $ext->add($context, $exten, '', new ext_macro('record-enable,${AMPUSER},OUT')); 
     2133          $ext->add($context, $exten, '', new ext_gosub('1','s','sub-record-check','out,${EXTEN}')); 
    19512134 
    19522135          $password = $route['password']; 
     
    32263409      $ext->add($mcontext,$exten,'', new ext_set("__PICKUPMARK", '${ARG2}')); 
    32273410      $ext->add($mcontext,$exten,'', new ext_set("RT", '${IF($["${ARG1}"!="novm" | "${DB(CFU/${EXTTOCALL})}"!="" | "${DB(CFB/${EXTTOCALL})}"!="" | ${ARG3} | ${ARG4} | ${ARG5}]?${RINGTIMER}:"")}')); 
    3228       $ext->add($mcontext,$exten,'checkrecord', new ext_macro('record-enable','${EXTTOCALL},IN')); 
     3411      $ext->add($mcontext,$exten,'checkrecord', new ext_gosub('1','s','sub-record-check','exten,${EXTTOCALL}')); 
    32293412 
    32303413      // If paging module is not present, then what happens? 
     
    35493732        $skip_label = $next_label; 
    35503733      } 
    3551  
    3552       $ext->add($mcontext,$exten,'theend', new ext_hangup()); 
     3734      $ext->add($mcontext, $exten, 'theend', new ext_gosubif('$["${ONETOUCH_REC}"="RECORDING"]', 'macro-one-touch-record,s,sstate', false, '${FROMEXTEN},NOT_INUSE')); 
     3735      $ext->add($mcontext, $exten, '', new ext_gosubif('$["${ONETOUCH_REC}"="RECORDING"]', 'macro-one-touch-record,s,sstate', false, '${DIALEDPEERNUMBER},NOT_INUSE')); 
     3736 
     3737      $ext->add($mcontext,$exten,'', new ext_hangup()); 
    35533738 
    35543739      /* macro-hangupcall */ 
     
    48665051  //build the recording variable 
    48675052  $recording = "out=".$record_out."|in=".$record_in; 
    4868    
     5053   
     5054  // strip the ugly return of the gui radio funciton which comes back as "recording_out_internal=always" for example 
     5055  // 
     5056  if (isset($recording_in_external)) { 
     5057    $rec_tmp = explode('=',$recording_in_external,2); 
     5058    $recording_in_external = count($rec_tmp) == 2 ? $rec_tmp[1] : 'dontcare'; 
     5059  } else { 
     5060    $recording_in_external = 'dontcare'; 
     5061  } 
     5062  if (isset($recording_out_external)) { 
     5063    $rec_tmp = explode('=',$recording_out_external,2); 
     5064    $recording_out_external = count($rec_tmp) == 2 ? $rec_tmp[1] : 'dontcare'; 
     5065  } else { 
     5066    $recording_out_external = 'dontcare'; 
     5067  } 
     5068  if (isset($recording_in_internal)) { 
     5069    $rec_tmp = explode('=',$recording_in_internal,2); 
     5070    $recording_in_internal = count($rec_tmp) == 2 ? $rec_tmp[1] : 'dontcare'; 
     5071  } else { 
     5072    $recording_in_internal = 'dontcare'; 
     5073  } 
     5074  if (isset($recording_out_internal)) { 
     5075    $rec_tmp = explode('=',$recording_out_internal,2); 
     5076    $recording_out_internal = count($rec_tmp) == 2 ? $rec_tmp[1] : 'dontcare'; 
     5077  } else { 
     5078    $recording_out_internal = 'dontcare'; 
     5079  } 
     5080  if (isset($recording_ondemand)) { 
     5081    $rec_tmp = explode('=',$recording_ondemand,2); 
     5082    $recording_ondemand = count($rec_tmp) == 2 ? $rec_tmp[1] : 'disabled'; 
     5083  } else { 
     5084    $recording_ondemand = 'disabled'; 
     5085  } 
     5086 
    48695087  //escape quotes and any other bad chars: 
    48705088  if(!get_magic_quotes_gpc()) { 
     
    49305148    $astman->database_put("AMPUSER",$extension."/answermode","\"".isset($answermode)?$answermode:'disabled'."\""); 
    49315149 
     5150    $astman->database_put("AMPUSER",$extension."/recording/in/external","\"".$recording_in_external."\""); 
     5151    $astman->database_put("AMPUSER",$extension."/recording/out/external","\"".$recording_out_external."\""); 
     5152    $astman->database_put("AMPUSER",$extension."/recording/in/internal","\"".$recording_in_internal."\""); 
     5153    $astman->database_put("AMPUSER",$extension."/recording/out/internal","\"".$recording_out_internal."\""); 
     5154    $astman->database_put("AMPUSER",$extension."/recording/ondemand","\"".$recording_ondemand."\""); 
     5155    $astman->database_put("AMPUSER",$extension."/recording/priority","\"".isset($recording_priority)?$recording_priority:'10'."\""); 
     5156 
    49325157    switch ($call_screen) { 
    49335158      case '0': 
     
    50405265    $results['cfringtimer'] = (int) $astman->database_get("AMPUSER",$extension."/cfringtimer"); 
    50415266    $results['concurrency_limit'] = (int) $astman->database_get("AMPUSER",$extension."/concurrency_limit"); 
     5267 
     5268    $results['recording_in_external'] = strtolower($astman->database_get("AMPUSER",$extension."/recording/in/external")); 
     5269    $results['recording_out_external'] = strtolower($astman->database_get("AMPUSER",$extension."/recording/out/external")); 
     5270    $results['recording_in_internal'] = strtolower($astman->database_get("AMPUSER",$extension."/recording/in/internal")); 
     5271    $results['recording_out_internal'] = strtolower($astman->database_get("AMPUSER",$extension."/recording/out/internal")); 
     5272    $results['recording_ondemand'] = strtolower($astman->database_get("AMPUSER",$extension."/recording/ondemand")); 
     5273    $results['recording_priority'] = (int) $astman->database_get("AMPUSER",$extension."/recording/priority"); 
     5274 
    50425275  } else { 
    50435276    die_freepbx("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); 
     
    62306463    $currentcomponent->setoptlistopts('recordoptions', 'sort', false); 
    62316464 
     6465    $currentcomponent->addoptlistitem('recording_options', 'always', _("Always")); 
     6466    $currentcomponent->addoptlistitem('recording_options', 'dontcare', _("Don't Care")); 
     6467    $currentcomponent->addoptlistitem('recording_options', 'never', _("Never")); 
     6468    $currentcomponent->setoptlistopts('recording_options', 'sort', false); 
     6469 
     6470    for ($i=0; $i <= 20; $i++) { 
     6471      $currentcomponent->addoptlistitem('recording_priority_options', "$i", "$i"); 
     6472    } 
     6473 
     6474    $currentcomponent->addoptlistitem('recording_ondemand_options', 'disabled', _("Disable")); 
     6475    $currentcomponent->addoptlistitem('recording_ondemand_options', 'enabled', _("Enable")); 
     6476    $currentcomponent->setoptlistopts('recording_ondemand_options', 'sort', false); 
     6477 
    62326478    $currentcomponent->addoptlistitem('callwaiting', 'enabled', _("Enable")); 
    62336479    $currentcomponent->addoptlistitem('callwaiting', 'disabled', _("Disable")); 
     
    65116757    $currentcomponent->addguielem($section, new gui_selectbox('record_in', $currentcomponent->getoptlist('recordoptions'), $record_in, _("Record Incoming"), _("Record all inbound calls received at this extension."), false)); 
    65126758    $currentcomponent->addguielem($section, new gui_selectbox('record_out', $currentcomponent->getoptlist('recordoptions'), $record_out, _("Record Outgoing"), _("Record all outbound calls received at this extension."), false)); 
     6759 
     6760    $recording_in_external = isset($recording_in_external) ? $recording_in_external : 'dontcare'; 
     6761    $recording_out_external = isset($recording_out_external) ? $recording_out_external : 'dontcare'; 
     6762    $recording_in_internal = isset($recording_in_internal) ? $recording_in_internal : 'dontcare'; 
     6763    $recording_out_internal = isset($recording_out_internal) ? $recording_out_internal : 'dontcare'; 
     6764    $recording_ondemand = isset($recording_ondemand) ? $recording_ondemand : 'disabled'; 
     6765    $recording_priority = isset($recording_priority) ? $recording_priority : '10'; 
     6766    $currentcomponent->addguielem($section, new gui_radio('recording_in_external', $currentcomponent->getoptlist('recording_options'), $recording_in_external, _('Inbound External Calls'), _("Recording of inbound calls from external sources."))); 
     6767    $currentcomponent->addguielem($section, new gui_radio('recording_out_external', $currentcomponent->getoptlist('recording_options'), $recording_out_external, _('Outbound External Calls'), _("Recording of outbound calls to external sources."))); 
     6768    $currentcomponent->addguielem($section, new gui_radio('recording_in_internal', $currentcomponent->getoptlist('recording_options'), $recording_in_internal, _('Inbound Internal Calls'), _("Recording of calls received from other extensions on the system."))); 
     6769    $currentcomponent->addguielem($section, new gui_radio('recording_out_internal', $currentcomponent->getoptlist('recording_options'), $recording_out_internal, _('Outbound Internal Calls'), _("Recording of calls made to other extensions on the system."))); 
     6770    $currentcomponent->addguielem($section, new gui_radio('recording_ondemand', $currentcomponent->getoptlist('recording_ondemand_options'), $recording_ondemand, _('On Demand Recording'), _("Enable or disable the ability to do on demand (one-touch) recording. The overall calling policy rules still apply and if calls are already being recorded they can not be paused."))); 
     6771    $currentcomponent->addguielem($section, new gui_selectbox('recording_priority', $currentcomponent->getoptlist('recording_priority_options'), $recording_priority, _("Record Priority Policy"), _("Call recording policy priority relative to other extensions when there is a conflict between an extension wanting recording and the other not wanting it. On a tie the global policy (caller or callee) wins."), false)); 
    65136772 
    65146773    $section = _("Optional Destinations"); 
  • modules/branches/2.10/findmefollow/functions.inc.php

    r11933 r12324  
    133133          // the list 
    134134          $ext->add($contextname, $grpnum, '', new ext_macro('record-enable','${DB(AMPUSER/'."$grpnum/followme/grplist)}-$grpnum".',${RecordMethod}')); 
     135 
     136          // Note there is no cancel later as the special case of follow-me, if they say record, it should stick 
     137          $ext->add($contextname, $grpnum, '', new ext_gosub('1','s','sub-record-check','exten,${EXTEN}')); 
    135138 
    136139          // MODIFIED (PL) 
  • modules/branches/2.10/queues/functions.inc.php

    r12316 r12324  
    401401            $ext->add('ext-queues', $exten, '', new ext_setvar('__ALERT_INFO', str_replace(';', '\;', $alertinfo))); 
    402402          } 
    403  
    404           $ext->add('ext-queues', $exten, '', new ext_setvar('MONITOR_FILENAME','/var/spool/asterisk/monitor/q${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID}')); 
     403          $record_mode = $q['monitor-format'] ? 'always' : 'dontcare'; 
     404          $ext->add('ext-queues', $exten, '', new ext_gosub('1','s','sub-record-check',"q,$exten,$record_mode")); 
     405 
    405406          if ($amp_conf['QUEUES_MIX_MONITOR']) { 
    406407            $monitor_options = ''; 
     
    474475            $ext->add('ext-queues', $exten, '', new ext_macro('blkvm-clr')); 
    475476          } 
     477          // cancel any recording previously requested 
     478          // 
     479          $ext->add('ext-queues', $exten, '', new ext_gosub('1','s','sub-record-cancel')); 
    476480          // If we are here, disable the NODEST as we want things to resume as normal 
    477481          // 
     
    587591        foreach($userlist as $item) { 
    588592          $ext->add($from_queue_exten_only, $item[0], '', new ext_setvar('RingGroupMethod', 'none')); 
    589          $ext->add($from_queue_exten_only, $item[0], '', new ext_macro('record-enable',$item[0].",IN")); 
     593          $ext->add($from_queue_exten_only, $item[0], '', new ext_macro('record-enable',$item[0].",IN")); 
    590594          if ($has_extension_state) { 
    591595            $ext->add($from_queue_exten_only, $item[0], '', new ext_macro('dial-one',',${DIAL_OPTIONS},'.$item[0])); 
     
    13561360  } 
    13571361} 
    1358 ?> 
  • modules/branches/2.10/ringgroups/functions.inc.php

    r12299 r12324  
    8989          $toolate_id = $grp['toolate_id']; 
    9090          $ringing = $grp['ringing']; 
     91          $recording = $grp['recording'] == '' ? 'dontcare' : $grp['recording']; 
    9192 
    9293          if($ringing == 'Ring' || empty($ringing) ) { 
     
    141142 
    142143          // recording stuff 
    143           $ext->add($contextname, $grpnum, '', new ext_setvar('RecordMethod','Group')); 
    144           $ext->add($contextname, $grpnum, '', new ext_macro('record-enable',$grplist.',${RecordMethod}')); 
     144          //$ext->add($contextname, $grpnum, '', new ext_setvar('RecordMethod','Group')); 
     145          //$ext->add($contextname, $grpnum, '', new ext_macro('record-enable',$grplist.',${RecordMethod}')); 
     146 
     147          //TODO: hardcoded needs to be configurable in the ringgroup 
     148          $ext->add($contextname, $grpnum, '', new ext_gosub('1','s','sub-record-check',"rg,$grpnum,$recording")); 
    145149 
    146150          // group dial 
     
    162166            $ext->add($contextname, $grpnum, 'DIALGRP', new ext_macro('dial',$grptime.",$dialopts,".$grplist)); 
    163167          } 
     168          $ext->add($contextname, $grpnum, '', new ext_gosub('1','s','sub-record-cancel')); 
    164169          $ext->add($contextname, $grpnum, '', new ext_setvar('RingGroupMethod','')); 
    165170 
     
    241246} 
    242247 
    243 function ringgroups_add($grpnum,$strategy,$grptime,$grplist,$postdest,$desc,$grppre='',$annmsg_id='',$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid='default',$fixedcid='',$cpickup='') { 
     248function ringgroups_add($grpnum,$strategy,$grptime,$grplist,$postdest,$desc,$grppre='',$annmsg_id='',$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid='default',$fixedcid='',$cpickup='', $recording='dontcare') { 
    244249  global $db; 
    245250  global $astman; 
     
    256261  print_r($extens); 
    257262 
    258   $sql = "INSERT INTO ringgroups (grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore, cpickup) VALUES ('".$db->escapeSimple($grpnum)."', '".$db->escapeSimple($strategy)."', ".$db->escapeSimple($grptime).", '".$db->escapeSimple($grppre)."', '".$db->escapeSimple($grplist)."', '".$annmsg_id."', '".$db->escapeSimple($postdest)."', '".$db->escapeSimple($desc)."', '".$db->escapeSimple($alertinfo)."', '$needsconf', '$remotealert_id', '$toolate_id', '$ringing', '$cwignore', '$cfignore', '$cpickup')"; 
     263  $sql = "INSERT INTO ringgroups (grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore, cpickup, recording) VALUES ('".$db->escapeSimple($grpnum)."', '".$db->escapeSimple($strategy)."', ".$db->escapeSimple($grptime).", '".$db->escapeSimple($grppre)."', '".$db->escapeSimple($grplist)."', '".$annmsg_id."', '".$db->escapeSimple($postdest)."', '".$db->escapeSimple($desc)."', '".$db->escapeSimple($alertinfo)."', '$needsconf', '$remotealert_id', '$toolate_id', '$ringing', '$cwignore', '$cfignore', '$cpickup', '$recording')"; 
    259264  $results = sql($sql); 
    260265 
     
    358363  global $astman; 
    359364 
    360   $results = sql("SELECT grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore, cpickup FROM ringgroups WHERE grpnum = '".$db->escapeSimple($grpnum)."'","getRow",DB_FETCHMODE_ASSOC); 
     365  $results = sql("SELECT grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, description, alertinfo, needsconf, remotealert_id, toolate_id, ringing, cwignore, cfignore, cpickup, recording FROM ringgroups WHERE grpnum = '".$db->escapeSimple($grpnum)."'","getRow",DB_FETCHMODE_ASSOC); 
    361366  if ($astman) { 
    362367    $astdb_changecid = strtolower($astman->database_get("RINGGROUP",$grpnum."/changecid")); 
  • modules/branches/2.10/ringgroups/install.php

    r11381 r12324  
    2323  `cfignore` VARCHAR ( 10 ),  
    2424  `cpickup` VARCHAR ( 10 ),  
     25  `recording` VARCHAR ( 10 ) default 'dontcare',  
    2526  PRIMARY KEY  (`grpnum`)  
    2627)  
     
    161162  } 
    162163 
     164  $sql = "SELECT recording FROM ringgroups"; 
     165  $check = $db->getRow($sql, DB_FETCHMODE_ASSOC); 
     166  if(DB::IsError($check)) { 
     167    // add new field 
     168    $sql = "ALTER TABLE ringgroups ADD recording VARCHAR( 10 ) default 'dontcare' ;"; 
     169    $result = $db->query($sql); 
     170    if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } 
     171    out(_("added field recording to ringgroups table")); 
     172  } 
     173 
    163174  // Version 2.5 migrate to recording ids 
    164175  // 
  • modules/branches/2.10/ringgroups/module.xml

    r11946 r12324  
    33  <repo>standard</repo> 
    44  <name>Ring Groups</name> 
    5   <version>2.9.0.6</version> 
     5  <version>2.10.0.0</version> 
    66  <publisher>FreePBX</publisher> 
    77  <license>GPLv2+</license> 
     
    1212  </description> 
    1313  <changelog> 
     14    *2.10.0.0* #5283 Overhaul Call Recording 
    1415    *2.9.0.6* #5011 
    1516    *2.9.0.5* spellings, locazliations 
  • modules/branches/2.10/ringgroups/page.ringgroups.php

    r11883 r12324  
    1313 
    1414$dispnum = 'ringgroups'; //used for switch on config.php 
    15  
    1615isset($_REQUEST['action'])?$action = $_REQUEST['action']:$action=''; 
    1716//the extension we are currently displaying 
     
    3433isset($_REQUEST['changecid'])?$changecid = $_REQUEST['changecid']:$changecid='default'; 
    3534isset($_REQUEST['fixedcid'])?$fixedcid = $_REQUEST['fixedcid']:$fixedcid=''; 
     35isset($_REQUEST['recording'])?$recording = $_REQUEST['recording']:$recording='dontcare'; 
    3636 
    3737if (isset($_REQUEST['goto0']) && isset($_REQUEST[$_REQUEST['goto0']."0"])) { 
     
    8181        $conflict_url = framework_display_extension_usage_alert($usage_arr); 
    8282 
    83       } elseif (ringgroups_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$description,$grppre,$annmsg_id,$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid,$fixedcid,$cpickup)) { 
     83      } elseif (ringgroups_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$description,$grppre,$annmsg_id,$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid,$fixedcid,$cpickup,$recording)) { 
    8484        needreload(); 
    8585        redirect_standard(); 
     
    9797    if ($action == 'edtGRP') { 
    9898      ringgroups_del($account);  
    99       ringgroups_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$description,$grppre,$annmsg_id,$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid,$fixedcid,$cpickup); 
     99      ringgroups_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$description,$grppre,$annmsg_id,$alertinfo,$needsconf,$remotealert_id,$toolate_id,$ringing,$cwignore,$cfignore,$changecid,$fixedcid,$cpickup,$recording); 
    100100      needreload(); 
    101101      redirect_standard('extdisplay'); 
     
    146146    $changecid   = isset($thisgrp['changecid'])   ? $thisgrp['changecid']   : 'default'; 
    147147    $fixedcid    = isset($thisgrp['fixedcid'])    ? $thisgrp['fixedcid']    : ''; 
     148    $recording = $thisgrp['recording']; 
    148149    unset($grpliststr); 
    149150    unset($thisgrp); 
     
    438439      </tr> 
    439440       
     441      <tr><td colspan="2"><h5><?php echo _("Call Recording") ?><hr></h5></td></tr> 
     442      <tr> 
     443        <td><a href="#" class="info"><?php echo _("Record Calls")?><span><?php echo _('You can always record calls that come into this ring group, never record them, or allow the extension that answers to do on-demand recording. If recording is denied then one-touch on demand recording will be blocked.')?></span></a></td> 
     444        <td><span class="radioset"> 
     445          <input type="radio" id="record_always" name="recording" value="always" <?php echo ($recording=='always'?'checked':'');?>><label for="record_always"><?php echo _('Always'); ?></label> 
     446          <input type="radio" id="record_dontcare" name="recording" value="dontcare" <?php echo ($recording=='dontcare'?'checked':'');?>><label for="record_dontcare"><?php echo _('On Demand')?></label> 
     447          <input type="radio" id="record_never" name="recording" value="never" <?php echo ($recording=='never'?'checked':'');?>><label for="record_never"><?php echo _('Never'); ?></label> 
     448        </span></td> 
     449      </tr> 
     450 
    440451<?php 
    441452      // implementation of module hook