Advertisement
Guest User

queue_devstate.agi

a guest
Jun 14th, 2011
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.84 KB | None | 0 0
  1. #!/usr/bin/php -q
  2. <?php
  3.  
  4. require_once "phpagi.php";
  5. require_once "phpagi-asmanager.php";
  6.  
  7. /* Usage:
  8.  *
  9.  * AGI(queue_dev_state.agi,getqueues,user,queue)
  10.  *
  11.  * ARG1: action
  12.  * ARG2: user
  13.  * ARG3: queue
  14.  *
  15.  */
  16.  
  17. $agi = new AGI();
  18.  
  19. // get manager credentials out of the channel
  20. //
  21. $ampmgruser   = get_variable( 'AMPMGRUSER' );
  22. $ampmgrpass   = get_variable( 'AMPMGRPASS' );
  23. $astspooldir  = get_variable( 'ASTSPOOLDIR' );
  24. $ast_version  = get_variable( 'ASTVERSION' );
  25.  
  26. $ast_version14 = version_compare( $ast_version, '1.4', 'ge' );
  27.  
  28. $astman = new AGI_AsteriskManager();
  29.  
  30. if( !$astman->connect( "127.0.0.1", $ampmgruser, $ampmgrpass ) )
  31. {
  32.     exit(1);
  33. }
  34.  
  35. global $argv;
  36.  
  37. $arg_action = strtolower( trim( $argv[1] ) );
  38. $arg_user = trim( $argv[2] );
  39. $arg_queue = trim( $argv[3] );
  40. if( empty( $arg_queue ) )
  41. {
  42.     $arg_queue = get_variable( 'QUEUENO' );
  43. }
  44.  
  45. switch( $arg_action )
  46. {
  47.     // QUEUESTAT = ( STATIC | LOGGEDIN | LOGGEDOUT )
  48.     case 'getqueues':
  49.        
  50.         $s = get_queue_status();
  51.        
  52.         if( array_key_exists( $arg_queue, $s ) == false )
  53.         {
  54.             debug("Queue '$arg_queue' does not exist.");
  55.             exit;
  56.         }
  57.  
  58.         if( array_key_exists( $arg_user, $s[$arg_queue]['Members'] ) == false )
  59.         {
  60.             debug("User '$arg_user' is not a member of queue '$arg_queue'.");
  61.             $agi->set_variable( 'QUEUESTAT', 'LOGGEDOUT' );
  62.         }
  63.         else
  64.         {
  65.             debug("User '$arg_user' is a {$s[$arg_queue]['Members'][$arg_user]} member of queue '$arg_queue'.");
  66.             $agi->set_variable( 'QUEUESTAT', ( $s[$arg_queue]['Members'][$arg_user] == "STATIC" ) ? "STATIC" : "LOGGEDIN" );
  67.         }
  68.        
  69.     break;
  70.     default:
  71.        
  72.         debug("Got unknown action: $action, exiting");
  73. }
  74.  
  75. function get_queue_status()
  76. {
  77.     global $agi;
  78.     global $astman;
  79.    
  80.     $response = $astman->send_request('Command',array('Command'=>"queue show"));
  81.     $queues = explode( "\n\n", trim( $response['data'] ) );
  82.     if( sizeof( $queues ) == 0 )
  83.         $queue_status = explode( "\r\n\r\n", trim($response['data']) );
  84.    
  85.     if( sizeof( $queues ) == 0 )
  86.         exit;
  87.        
  88.     $queue_status = array();
  89.    
  90.     foreach( $queues as $queue )
  91.     {
  92.         $current_queue = '';
  93.        
  94.         $state = 'ReadingQueueName';
  95.        
  96.         $lines = explode( "\n", $queue );
  97.         foreach( $lines as $line )
  98.         {
  99.             switch($state)
  100.             {
  101.                 case 'ReadingQueueName':
  102.                    
  103.                     $name = array();
  104.                     if( preg_match( "/(.+)\ has\ .+\ calls/i", $line, $name ) != 0 )
  105.                     {
  106.                         $current_queue = trim( $name[1] );
  107.                         $queue_status[$current_queue] = array("Members" => array(), "Callers" => array());
  108.                         break;
  109.                     }
  110.                    
  111.                     if( preg_match( "/Members:?/i", $line ) != 0 )
  112.                     {
  113.                         $state = 'ReadingQueueMembers';
  114.                         break;
  115.                     }
  116.                    
  117.                     debug( "Unexpected line '$line' in state ReadingQueueName" );
  118.                     break;
  119.                    
  120.                 case 'ReadingQueueMembers':
  121.                    
  122.                     $name = array();
  123.                     if( preg_match( "/Local\/(.+)@/i", $line, $name ) != 0 )
  124.                     {
  125.                         $queue_status[$current_queue]["Members"][$name[1]] = ( stristr($line, "(dynamic)") == false ) ? "STATIC" : "DYNAMIC";
  126.                         break;
  127.                     }
  128.                    
  129.                     if( preg_match( "/Callers:?/i", $line ) != 0 )
  130.                     {
  131.                         $state = 'ReadingQueueCallers';
  132.                         break;
  133.                     }
  134.  
  135.                     debug( "Unexpected line '$line' in state ReadingQueueMembers" );
  136.                     break;
  137.                    
  138.                 case 'ReadingQueueCallers':
  139.                    
  140.                     $name = array();
  141.                     if( preg_match( "/.+[0-9]+\. (.+) \(.+/i", $line, $name ) != 0 )
  142.                     {
  143.                         $queue_status[$current_queue]["Callers"][$name[1]] = $name[1];
  144.                         break;
  145.                     }
  146.                    
  147.                     debug( "Unexpected line '$line' in state ReadingQueueCallers" );
  148.                     break;
  149.             }
  150.         }
  151.     }
  152.    
  153.     return $queue_status;
  154. }
  155.  
  156. function get_variable( $value )
  157. {
  158.     global $agi;
  159.  
  160.     $r = $agi->get_variable( $value );
  161.    
  162.     if( $r['result'] == 1 )
  163.     {
  164.         $result = $r['data'];
  165.         return trim( $result );
  166.     }
  167.    
  168.     return '';
  169. }
  170.  
  171. function debug( $string, $level = 3 )
  172. {
  173.     global $agi;
  174.     $agi->verbose( $string, $level );
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement