Changeset 12942
- Timestamp:
- 11/09/11 13:27:55 (2 years ago)
- Files:
-
- modules/branches/2.10/backup/page.backup.php (modified) (1 diff)
- modules/branches/2.10/package.php (modified) (11 diffs)
- modules/branches/2.10/paging/agi-bin (added)
- modules/branches/2.10/paging/agi-bin/page.agi (added)
- modules/branches/2.10/paging/functions.inc.php (modified) (6 diffs)
- modules/branches/2.10/paging/module.xml (modified) (1 diff)
- modules/branches/2.10/paging/page.paging.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/branches/2.10/backup/page.backup.php
r12848 r12942 62 62 } 63 63 64 ob_start( );64 ob_start($amp_conf['buffering_callback']); 65 65 header('Content-Type: text/event-stream'); 66 66 header('Cache-Control: no-cache'); modules/branches/2.10/package.php
r12903 r12942 90 90 foreach ($vars['modules'] as $mod) { 91 91 $mod = trim($mod, '/'); 92 $tar_dir = $mod; 92 $mod_dir = dirname(__FILE__) . '/' . $mod; 93 $tar_dir = $mod_dir; 93 94 $exclude[] = '.*'; 94 95 $files = … … 102 103 103 104 echo 'Packaging ' . $mod . '...' . PHP_EOL; 104 if (!file_exists($mod . '/module.xml')) {105 echo $mod . '/module.xml dose not exists, ' . $mod . ' will not be built!' . PHP_EOL;105 if (!file_exists($mod_dir . '/module.xml')) { 106 echo $mod_dir . '/module.xml dose not exists, ' . $mod . ' will not be built!' . PHP_EOL; 106 107 continue; 107 108 } 108 $xml = file_get_contents($mod . '/module.xml');109 $xml = file_get_contents($mod_dir . '/module.xml'); 109 110 110 111 //test xml file and get some of its values … … 124 125 125 126 //include module specifc hook, if present 126 if (file_exists($mod . '/' . 'package_hook.php')) {127 echo 'Running ' . $mod . '/' . 'package_hook.php...' . PHP_EOL;127 if (file_exists($mod_dir . '/' . 'package_hook.php')) { 128 echo 'Running ' . $mod_dir . '/' . 'package_hook.php...' . PHP_EOL; 128 129 129 130 //test include so that includes can return false and prevent further execution if it fail 130 if (!include($mod . '/' . 'package_hook.php')) {131 echo '[FATAL] retrurned from ' . $mod . '/' . 'package_hook.php with an error, '131 if (!include($mod_dir . '/' . 'package_hook.php')) { 132 echo '[FATAL] retrurned from ' . $mod_dir . '/' . 'package_hook.php with an error, ' 132 133 . $mod . ' wont be built' . PHP_EOL; 133 134 continue; … … 157 158 158 159 //check php files for syntax errors 159 $bail = false; 160 $files = scandirr($mod, true, $file_scan_exclude_list); 161 foreach ($files as $f) { 162 if (pathinfo($f, PATHINFO_EXTENSION) == 'php') { 163 $ret_val = 0; 164 system('php -l ' . $f, $ret_val); 165 if ($ret_val != 0) { 166 echo('syntax error detected in ' . $f . ',' . $mod . ' won\'t be packaged' . PHP_EOL); 167 $bail=true; // finish scanning all files before bailing 160 if ($vars['checkphp']) { 161 var_dump($tar_dir); 162 $files = scandirr($tar_dir, true, $file_scan_exclude_list); 163 foreach ($files as $f) { 164 if (pathinfo($f, PATHINFO_EXTENSION) == 'php') { 165 $ret_val = 0; 166 system('php -l ' . $f, $ret_val); 167 if ($ret_val != 0) { 168 echo('syntax error detected in ' . $f . ', ' . $mod . ' won\'t be packaged' . PHP_EOL); 169 continue 2; 170 } 168 171 } 169 172 } 170 } 171 if ($bail && $vars['checkphp']) { 172 echo('syntax error detecteded in ' . $mod . ' skipping packaging going to next' . PHP_EOL); 173 continue; 173 unset($files, $list); 174 174 } 175 175 176 176 //check in any out standing files 177 if (run_cmd('svn st ' . $mod . '|wc -l') > 0) {178 run_cmd('svn ci -m "Auto Check-in of any outstanding changes in ' . $mod . '" ' . $mod );177 if (run_cmd('svn st ' . $mod_dir . '|wc -l') > 0) { 178 run_cmd('svn ci -m "Auto Check-in of any outstanding changes in ' . $mod . '" ' . $mod_dir); 179 179 } 180 180 … … 190 190 //tell tar to change directoires (-C) to one level above 191 191 $tar_dir_path = explode('/', trim($tar_dir, '/')); 192 $tar_dir = (is_array($tar_dir_path) && (count($tar_dir_path) > 1))? array_pop($tar_dir_path) : $mod ;192 $tar_dir = (is_array($tar_dir_path) && (count($tar_dir_path) > 1))? array_pop($tar_dir_path) : $mod_dir; 193 193 $tar_dir_path = (is_array($tar_dir_path) && (count($tar_dir_path) > 1)) 194 194 ? ' -C /' . implode('/', $tar_dir_path) : ''; … … 196 196 197 197 //update md5 sum 198 $module_xml = file_get_contents($mod . '/' . 'module.xml');198 $module_xml = file_get_contents($mod_dir . '/' . 'module.xml'); 199 199 if(file_exists($filename)) { 200 200 $md5 = md5_file($filename); … … 209 209 } 210 210 211 file_put_contents($mod . '/' . 'module.xml', $module_xml);211 file_put_contents($mod_dir . '/' . 'module.xml', $module_xml); 212 212 213 213 … … 222 222 223 223 //set latpublished property 224 $lastpub = run_cmd('svn info ' . $mod . ' | grep Revision: | awk \'{print $2}\'');225 run_cmd('svn ps lastpublish ' . $lastpub . ' ' . $mod );224 $lastpub = run_cmd('svn info ' . $mod_dir . ' | grep Revision: | awk \'{print $2}\''); 225 run_cmd('svn ps lastpublish ' . $lastpub . ' ' . $mod_dir); 226 226 227 227 //check in new tarball and module.xml 228 run_cmd('svn ci ../../release/' . $vars['rver'] . '/' . $filename . ' ' . $mod 228 run_cmd('svn ci ../../release/' . $vars['rver'] . '/' . $filename . ' ' . $mod_dir 229 229 . ' -m"Module package script: ' . $rawname . ' ' . $ver . '"'); 230 230 231 231 //cleanup any remaining files 232 /*foreach($vars['rm_files'] as $f) {232 foreach($vars['rm_files'] as $f) { 233 233 if (file_exists($f)) { 234 run_cmd('rm -rf ' . $f);235 } 236 } */237 echo $mod . ' version ' . $ver . ' has been suc cessfully packaged!' . PHP_EOL;234 //run_cmd('rm -rf ' . $f); 235 } 236 } 237 echo $mod . ' version ' . $ver . ' has been sucsessfuly packaged!' . PHP_EOL; 238 238 239 239 } … … 311 311 //test xml file for validity and extract some info from it 312 312 function check_xml($mod, $xml) { 313 global $mod_dir; 313 314 //check the xml script integrity 314 $xml_contents = file_get_contents($mod . '/' . 'module.xml');315 $xml_contents = file_get_contents($mod_dir . '/' . 'module.xml'); 315 316 $xml_loaded_contents = simplexml_load_string($xml_contents); 316 317 if($xml_loaded_contents === FALSE) { 317 echo $mod . '/module.xml seems corrupt, ' . $mod . ' won\'t be packaged' . PHP_EOL;318 echo $mod_dir . '/module.xml seems corrupt, ' . $mod . ' won\'t be packaged' . PHP_EOL; 318 319 return array(false, false); 319 320 } … … 321 322 //check that module name is set in module.xml 322 323 if (!preg_match('/<rawname>(.*?)<\/rawname>/', $xml, $rawname)) { 323 echo $mod . '/module.xml is missing a module name, ' . $mod . ' won\'t be packaged' . PHP_EOL;324 echo $mod_dir . '/module.xml is missing a module name, ' . $mod . ' won\'t be packaged' . PHP_EOL; 324 325 $rawname = false; 325 326 } else { … … 329 330 //check that module version is set in module.xml 330 331 if (!preg_match('/<version>(.*?)<\/version>/', $xml, $version)) { 331 echo $mod . '/module.xml is missing a version number, ' . $mod . ' won\'t be packaged' . PHP_EOL;332 echo $mod_dir . '/module.xml is missing a version number, ' . $mod . ' won\'t be packaged' . PHP_EOL; 332 333 $ver = false; 333 334 } else { modules/branches/2.10/paging/functions.inc.php
r11761 r12942 38 38 $callinfo = 'Call-Info: <uri>\;answer-after=0'; 39 39 $sipuri = 'intercom=true'; 40 $doptions = 'A(beep)';40 //$doptions = 'A(beep)'; 41 41 $vxml_url = ''; 42 42 $dtime = '5'; … … 73 73 } 74 74 75 $ extpaging = 'ext-paging';75 $apppaging = 'app-paging'; 76 76 if (!empty($intercom_code)) { 77 77 $code = '_'.$intercom_code.'.'; … … 130 130 $ext->add($context, $code, '', new ext_macro('hangupcall')); 131 131 if (!$ast_ge_14) { 132 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return'),'check',101);133 $ext->add($context, $code, '', new ext_busy());134 $ext->add($context, $code, '', new ext_macro('hangupcall'));132 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return'),'check',101); 133 $ext->add($context, $code, '', new ext_busy()); 134 $ext->add($context, $code, '', new ext_macro('hangupcall')); 135 135 } 136 136 $ext->add($context, $code, 'pagemode', new ext_setvar('ITER', '1')); 137 137 $ext->add($context, $code, '', new ext_setvar('DIALSTR', '')); 138 $ext->add($context, $code, 'begin', new ext_setvar('DIALSTR', '${DIALSTR}&LOCAL/PAGE${CUT(DEVICES,&,${ITER})}@'.$ extpaging));138 $ext->add($context, $code, 'begin', new ext_setvar('DIALSTR', '${DIALSTR}&LOCAL/PAGE${CUT(DEVICES,&,${ITER})}@'.$apppaging)); 139 139 $ext->add($context, $code, '', new ext_setvar('ITER', '$[${ITER} + 1]')); 140 140 $ext->add($context, $code, '', new ext_gotoif('$[${ITER} <= ${LOOPCNT}]', 'begin')); … … 142 142 $ext->add($context, $code, '', new ext_setvar('_AMPUSER', '${AMPUSER}')); 143 143 $ext->add($context, $code, '', new ext_page('${DIALSTR},d')); 144 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return'));144 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return')); 145 145 $ext->add($context, $code, '', new ext_busy()); 146 146 $ext->add($context, $code, '', new ext_macro('hangupcall')); 147 147 148 148 $ext->add($context, $code, 'nointercom', new ext_noop('Intercom disallowed by ${dialnumber}')); 149 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return'));149 $ext->add($context, $code, '', new ext_execif('$[${INTERCOM_RETURN}]', 'Return')); 150 150 $ext->add($context, $code, '', new ext_playback('intercom&for&extension')); 151 151 $ext->add($context, $code, '', new ext_saydigits('${dialnumber}')); … … 324 324 $ext->add($macro, "s", 'macro2', new ext_macro('${ANSWERMACRO}','${ARG1}'), 'n',2); 325 325 } 326 327 328 // Create the paging context that is used in the paging application for each phone to auto-answer 329 // 330 $ext->addInclude('from-internal-noxfer-additional',$extpaging); 331 326 327 //auto answer stuff 328 //set autoanswer variables 329 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_SIPURI', '')); 330 if (isset($alertinfo) && trim($alertinfo) != "") { 331 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_ALERTINFO', $alertinfo)); 332 } 333 334 if (isset($callinfo) && trim($callinfo) != "") { 335 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_CALLINFO', $callinfo)); 336 } 337 if (isset($sipuri) && trim($sipuri) != "") { 338 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_SIPURI', $sipuri)); 339 } 340 if (isset($vxml_url) && trim($vxml_url) != "") { 341 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_VXML_URL', $vxml_url)); 342 } 343 if (isset($doptions) && trim($doptions) != "") { 344 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_DOPTIONS', $doptions)); 345 } 346 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_DTIME', $dtime)); 347 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_ANSWERMACRO', '')); 348 foreach ($custom_vars as $key => $value) { 349 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('_'.ltrim($key,'_'), $value)); 350 } 351 $ext->add($apppaging, '_AUTOASWER.', '', new ext_setvar('__FORWARD_CONTEXT', 'block-cf')); 352 $ext->add($apppaging, '_AUTOASWER.', '', new ext_macro('autoanswer','${EXTEN:9}')); 353 $ext->add($apppaging, '_AUTOASWER.', '', new ext_return()); 354 332 355 // Normal page version 333 $ext->add($extpaging, "_PAGE.", '', new ext_gotoif('$[ ${AMPUSER} = ${EXTEN:4} ]','skipself')); 334 if ($ast_ge_14) { 335 $ext->add($extpaging, "_PAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:4}/dial)}', 's')); 336 $ext->add($extpaging, "_PAGE.", '', new ext_noop_trace('AVAILCHAN: ${AVAILCHAN}, AVAILORIGCHAN: ${AVAILORIGCHAN}, AVAILSTATUS: ${AVAILSTATUS}',5)); 337 $ext->add($extpaging, "_PAGE.", '', new ext_gotoif('$["${AVAILORIGCHAN}" = ""]', 'skipself')); 338 } else { 339 $ext->add($extpaging, "_PAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:4}/dial)}', 'js')); 340 } 341 $ext->add($extpaging, "_PAGE.", '', new ext_gotoif('$["${DB(DND/${DB(DEVICE/${EXTEN:4}/user)})}" = "YES"]', 'skipself')); 342 $ext->add($extpaging, "_PAGE.", 'SKIPCHECK', new ext_macro('autoanswer','${EXTEN:4}')); 343 $ext->add($extpaging, "_PAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 344 $ext->add($extpaging, "_PAGE.", 'skipself', new ext_hangup()); 345 if (!$ast_ge_14) { 346 $ext->add($extpaging, "_PAGE.", '', new ext_hangup(''), 'AVAIL',101); 347 } 356 $ext->add($apppaging, "_PAGE.", '', new ext_gotoif('$[ "${AMPUSER}" = "${EXTEN:4}" ]','skipself')); 357 $ext->add($apppaging, "_PAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:4}/dial)}', 'js')); 358 $ext->add($apppaging, "_PAGE.", '', new ext_gotoif('$["${DB(DND/${DB(DEVICE/${EXTEN:4}/user)})}" = "YES"]', 'skipself')); 359 $ext->add($apppaging, "_PAGE.", 'SKIPCHECK', new ext_gosub('AUTOASWER${EXTEN:4},1')); 360 $ext->add($apppaging, "_PAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 361 $ext->add($apppaging, "_PAGE.", 'skipself', new ext_hangup()); 362 $ext->add($apppaging, "_PAGE.", '', new ext_hangup(''), 'AVAIL',101); 348 363 349 364 // Try ChanSpy Version 350 $ext->add($extpaging, "_SPAGE.", '', new ext_gotoif('$[ ${AMPUSER} = ${EXTEN:5} ]','skipself')); 351 if ($ast_ge_14) { 352 $ext->add($extpaging, "_SPAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:5}/dial)}', 's')); 353 $ext->add($extpaging, "_SPAGE.", '', new ext_noop_trace('AVAILCHAN: ${AVAILCHAN}, AVAILORIGCHAN: ${AVAILORIGCHAN}, AVAILSTATUS: ${AVAILSTATUS}',5)); 354 $ext->add($extpaging, "_SPAGE.", '', new ext_gotoif('$["${AVAILORIGCHAN}" = ""]', 'chanspy')); 355 } else { 356 $ext->add($extpaging, "_SPAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:5}/dial)}', 'js')); 357 } 358 $ext->add($extpaging, "_SPAGE.", '', new ext_gotoif('$["${DB(DND/${DB(DEVICE/${EXTEN:5}/user)})}" = "YES"]', 'chanspy')); 359 $ext->add($extpaging, "_SPAGE.", 'SKIPCHECK', new ext_macro('autoanswer','${EXTEN:5}')); 360 $ext->add($extpaging, "_SPAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 361 $ext->add($extpaging, "_SPAGE.", 'skipself', new ext_hangup()); 362 $ext->add($extpaging, "_SPAGE.", 'chanspy', new ext_execif('$["${CUT(DB(DEVICE/${EXTEN:5}/dial),/,1)}" = "SIP"]', 'ChanSpy','${DB(DEVICE/${EXTEN:5}/dial)}-,qW')); 363 $ext->add($extpaging, "_SPAGE.", '', new ext_noop_trace('Comparison: ${EXTEN:5}, "${CUT(DB(DEVICE/${EXTEN:5}/dial),/,1)}" = "SIP"',9)); 364 $ext->add($extpaging, "_SPAGE.", '', new ext_hangup()); 365 if (!$ast_ge_14) { 366 $ext->add($extpaging, "_SPAGE.", '', new ext_hangup(''), 'AVAIL',101); 367 } 365 $ext->add($apppaging, "_SPAGE.", '', new ext_gotoif('$[ "${AMPUSER}" = "${EXTEN:5}" ]','skipself')); 366 $ext->add($apppaging, "_SPAGE.", 'AVAIL', new ext_chanisavail('${DB(DEVICE/${EXTEN:5}/dial)}', 'js')); 367 $ext->add($apppaging, "_SPAGE.", '', new ext_gotoif('$["${DB(DND/${DB(DEVICE/${EXTEN:5}/user)})}" = "YES"]', 'chanspy')); 368 $ext->add($apppaging, "_SPAGE.", 'SKIPCHECK', new ext_gosub('AUTOASWER${EXTEN:5},1')); 369 $ext->add($apppaging, "_SPAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 370 $ext->add($apppaging, "_SPAGE.", 'skipself', new ext_hangup()); 371 $ext->add($apppaging, "_SPAGE.", 'chanspy', new ext_execif('$["${CUT(DB(DEVICE/${EXTEN:5}/dial),/,1)}" = "SIP"]', 'ChanSpy','${DB(DEVICE/${EXTEN:5}/dial)}-,qW')); 372 $ext->add($apppaging, "_SPAGE.", '', new ext_noop_trace('Comparison: ${EXTEN:5}, "${CUT(DB(DEVICE/${EXTEN:5}/dial),/,1)}" = "SIP"',9)); 373 $ext->add($apppaging, "_SPAGE.", '', new ext_hangup()); 374 $ext->add($apppaging, "_SPAGE.", '', new ext_hangup(''), 'AVAIL',101); 375 368 376 369 377 // Force page version 370 $ext->add($extpaging, "_FPAGE.", '', new ext_gotoif('$[ ${AMPUSER} = ${EXTEN:5} ]','skipself')); 371 $ext->add($extpaging, "_FPAGE.", 'SKIPCHECK', new ext_macro('autoanswer','${EXTEN:5}')); 372 $ext->add($extpaging, "_FPAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 373 $ext->add($extpaging, "_FPAGE.", 'skipself', new ext_hangup()); 374 375 // 378 $ext->add($apppaging, "_FPAGE.", '', new ext_gotoif('$[ "${AMPUSER}" = "${EXTEN:5}" ]','skipself')); 379 $ext->add($apppaging, "_FPAGE.", 'SKIPCHECK', new ext_gosub('AUTOASWER${EXTEN:5},1')); 380 $ext->add($apppaging, "_FPAGE.", '', new ext_dial('${DIAL}','${DTIME},${DOPTIONS}')); 381 $ext->add($apppaging, "_FPAGE.", 'skipself', new ext_hangup()); 382 376 383 // Now get a list of all the paging groups... 377 384 $sql = "SELECT page_group, force_page, duplex FROM paging_config"; … … 394 401 $all_exts = $db->getAll($sql); 395 402 $dialstr=''; 403 404 // Create the paging context that is used in the paging application for each phone to auto-answer 405 //add ext-paging with goto's to our app-paging context and a hint for the page 406 $extpaging = 'ext-paging'; 407 $ext->add($extpaging, $grp, '', new ext_goto($apppaging . ',' . $grp . ',1')); 408 $ext->addInclude('from-internal-noxfer-additional',$extpaging); 409 $ext->addHint($extpaging, $grp, 'Custom:PAGE' . $grp); 410 411 //app-page dialplan 396 412 foreach($all_exts as $local_dial) { 397 413 if (strtoupper(substr($local_dial[0],-1)) == "X") { 398 414 $local_dial[0] = rtrim($local_dial[0],"xX"); 399 415 } 400 401 $dialstr .= "LOCAL/$pagemode".trim($local_dial[0])."@".$extpaging."&"; 402 } 403 // It will always end with an &, so lets take that off. 404 $dialstr = rtrim($dialstr, "&"); 405 406 if ($thisgroup['duplex']) { 407 $dialstr .= ",d"; 408 } 409 $ext->add($extpaging, $grp, '', new ext_answer('')); 410 $ext->add($extpaging, $grp, '', new ext_macro('user-callerid')); 411 // make AMPUSER inherited here, so we can skip the proper 'self' if using cidnum masquerading 412 $ext->add($extpaging, $grp, '', new ext_setvar('_AMPUSER', '${AMPUSER}')); 413 414 $ext->add($extpaging, $grp, '', new ext_setvar('_SIPURI', '')); 415 if (isset($alertinfo) && trim($alertinfo) != "") { 416 $ext->add($extpaging, $grp, '', new ext_setvar('_ALERTINFO', $alertinfo)); 417 } 418 if (isset($callinfo) && trim($callinfo) != "") { 419 $ext->add($extpaging, $grp, '', new ext_setvar('_CALLINFO', $callinfo)); 420 } 421 if (isset($sipuri) && trim($sipuri) != "") { 422 $ext->add($extpaging, $grp, '', new ext_setvar('_SIPURI', $sipuri)); 423 } 424 if (isset($vxml_url) && trim($vxml_url) != "") { 425 $ext->add($extpaging, $grp, '', new ext_setvar('_VXML_URL', $vxml_url)); 426 } 427 if (isset($doptions) && trim($doptions) != "") { 428 $ext->add($extpaging, $grp, '', new ext_setvar('_DOPTIONS', $doptions)); 429 } 430 $ext->add($extpaging, $grp, '', new ext_setvar('_DTIME', $dtime)); 431 $ext->add($extpaging, $grp, '', new ext_setvar('_ANSWERMACRO', '')); 432 foreach ($custom_vars as $key => $value) { 433 $ext->add($extpaging, $grp, '', new ext_setvar('_'.ltrim($key,'_'), $value)); 434 } 435 $ext->add($extpaging, $grp, '', new ext_setvar('__FORWARD_CONTEXT', 'block-cf')); 436 437 $ext->add($extpaging, $grp, '', new ext_page($dialstr)); 438 } 416 $page_memebers[] = "LOCAL/$pagemode".trim($local_dial[0])."@".$apppaging; 417 418 } 419 420 $ext->add($apppaging, $grp, '', new ext_macro('user-callerid')); 421 $ext->add($apppaging, $grp, '', new ext_setvar('_PAGEGROUP', $grp)); 422 $ext->add($apppaging, $grp, '', new ext_setvar('PAGE${PAGEGROUP}ADMIN', 'TRUE')); 423 424 //if page group it in use, got to busy 425 $ext->add($apppaging, $grp, '', 426 new ext_gotoif('$[${TRYLOCK(apppaging'. $grp .')}]', '', 'busy')); 427 428 //set blf to in use 429 $ext->add($apppaging, $grp, 'devstate', 430 new ext_setvar('DEVICE_STATE(Custom:PAGE' . $grp .')', 'INUSE')); 431 432 $ext->add($apppaging, $grp, '', new ext_answer('')); 433 $ext->add($apppaging, $grp, '', new ext_set('PAGE_CONF', '${EPOCH}${RAND(100,999)}')); 434 $ext->add($apppaging, $grp, '', 435 new ext_set('PAGE_CONF_OPTS', '1doqsx' . (!$thisgroup['duplex'] ? 'm' : ''))); 436 $ext->add($apppaging, $grp, 'agi', new ext_agi('page.agi,' 437 . 'extensions=' . implode(':',$page_memebers) . ',' 438 . 'meetmeopts=${PAGE_CONF}\,${PAGE_CONF_OPTS}\,\,,' 439 . 'AMPUSER=${AMPUSER}' 440 )); 441 //we cant use originate from the dialplan as the dialplan command is not asynchronous 442 //we would like to though... 443 //this code here as a sign of hope -MB 444 /*foreach ($page_memebers as $member) { 445 $ext->add($apppaging, $grp, 'page', new ext_originate($member,'app','meetme', '${PAGE_CONF}\,${PAGE_CONF_OPTS}')); 446 }*/ 447 unset($page_memebers); 448 $ext->add($apppaging, $grp, 'page', new ext_meetme('${PAGE_CONF},doqwxCAG(beep)')); 449 $ext->add($apppaging, $grp, '', new ext_hangup()); 450 $ext->add($apppaging, $grp, 'busy', new ext_set('PAGE${PAGEGROUP}BUSY', 'TRUE')); 451 $ext->add($apppaging, $grp, 'play-busy', new ext_busy(3)); 452 $ext->add($apppaging, $grp, 'busy-hang', new ext_goto('ext-paging,h,1')); 453 454 } 455 //h 456 $ext->add($apppaging, 'h', '', 457 new ext_execif('$[' 458 . '$["${PAGE${PAGEGROUP}ADMIN}" = "TRUE"]' 459 . ' & $[${ISNULL(${PAGE${PAGEGROUP}BUSY})}]' 460 . ']', 461 'Set', 'DEVICE_STATE(Custom:PAGE${PAGEGROUP})=NOT_INUSE')); 439 462 440 463 break; modules/branches/2.10/paging/module.xml
r12563 r12942 3 3 <repo>standard</repo> 4 4 <name>Paging and Intercom</name> 5 <version>2.10.0. 0</version>5 <version>2.10.0.1</version> 6 6 <publisher>FreePBX</publisher> 7 7 <license>GPLv2+</license> 8 8 <category>Applications</category> 9 9 <changelog> 10 *2.10.0.1* #729 10 11 *2.10.0.0* new version changes 11 12 *2.9.0.5* #5000 modules/branches/2.10/paging/page.paging.php
r12445 r12942 171 171 </td></tr> 172 172 173 <tr><td><a href='#' class='info'><?php echo _("Force if busy") ?><span> 174 <?php echo _("If yes, will not check if the device is in use before paging it. This means conversations can be interrupted by a page (depending on how the device handles it). This is useful for \"emergency\" paging groups. Setting to 'Whisper' will attempt to use the ChanSpy capability on SIP channels, resulting in the page being sent to the device's ear piece but not heard by the remote party. If ChanSpy is not supported on the device or otherwise fails, no page will get through. It probably does not make too much sense to choose duplex if using Whisper mode.").' '._("The Whisper mode is new and considered experimental.") ?></span></a></td> 173 <tr><td> 174 <?php echo fpbx_label(_("Busy Extensions"), 175 _('<ul><li>"Skip" will not page any busy extension. All other extensions will ' 176 . 'be paged as normal</li>' 177 . '<li>"Force" will not check if the device is in use before paging it. ' 178 . 'This means conversations can be interrupted by a page (depending ' 179 . 'on how the device handles it). This is useful for "emergency" ' 180 . 'paging groups.</li>' 181 . '<li>"Whisper" will attempt to use the ChanSpy ' 182 . 'capability on SIP channels, resulting in the page being sent to ' 183 . 'the device\'s ear piece but not heard by the remote party. If ' 184 . 'ChanSpy is not supported on the device or otherwise fails, no page ' 185 . 'will get through. It probably does not make too much sense to choose ' 186 . 'duplex if using Whisper mode.</li></ul>') 187 . ' ' 188 . _('The Whisper mode is new and considered experimental.') 189 ); ?> 190 </td> 175 191 <td> 176 192 <span class="radioset"> 177 193 <input id="force_page_no" type="radio" name="force_page" value="0" <?php echo $force_page == 0 ? "checked=\"yes\"":""?>/> 178 <label for="force_page_no"><?php echo _(" No") ?></label>194 <label for="force_page_no"><?php echo _("Skip") ?></label> 179 195 <input id="force_page_yes" type="radio" name="force_page" value="1" <?php echo $force_page == 1 ? "checked=\"yes\"":""?>/> 180 <label for="force_page_yes"><?php echo _(" Yes") ?></label>196 <label for="force_page_yes"><?php echo _("Force") ?></label> 181 197 <input id="force_page_whisper" type="radio" name="force_page" value="2" <?php echo $force_page == 2 ? "checked=\"yes\"":""?>/> 182 198 <label for="force_page_whisper"><?php echo _("Whisper") ?></label>
