Example #1
1
 /**
  * @verb GET
  * @returns - a list of queues with their members (static and dynamic)
  * @uri /queues/members
  */
 function get_queues_members($params)
 {
     global $astman;
     $list = array();
     // Get dynamic members priority from astdb
     $get = $astman->database_show('QPENALTY');
     if ($get) {
         foreach ($get as $key => $value) {
             $keys = explode('/', $key);
             if (isset($keys[3]) && $keys[3] == 'agents') {
                 $queue = $keys[2];
                 $dynmember = $keys[4];
                 $list[$queue]['dynmembers'][] = $dynmember;
             }
         }
     }
     // Get static members
     $allmembers = queues_get_static_members();
     foreach ($allmembers as $queue => $members) {
         foreach ($members as $member) {
             if (preg_match("/^.*?\\/([\\d]+).*,([\\d]+)\$/", $member, $matches)) {
                 $list[$queue]['members'][] = $matches[1];
             }
         }
     }
     return $list ? $list : false;
 }
}
if ($queue_toggle_code == '') {
    exit(0);
}
// generate device hash
//
$var = $astman->database_show('DEVICE');
foreach ($var as $key => $value) {
    $myvar = explode('/', trim($key, '/'));
    $dev_hash[$myvar[1]][$myvar[2]] = $value;
}
// extract the static members in the form of Local/nnn@from-queue/n or similar
// determine the queue member 'nnn', and add this queue to them if not
// already there.
//
$qmr = queues_get_static_members();
foreach ($qmr as $q => $qmg) {
    foreach ($qmg as $qm) {
        if (strtoupper(substr($qm, 0, 1)) == 'L') {
            $tm = preg_replace("/[^0-9#\\,*]/", "", $qm);
            $tma = explode(',', $tm);
            if (!isset($qc[$tma[0]]) || !in_array($q, $qc[$tma[0]])) {
                $qc[$tma[0]][] = $q;
            }
        }
    }
}
/* hash looks like this
 * [89222] => Array
 *         (
 *           [default_user] => 89222
function queues_get($account, $queues_conf_only = false)
{
    global $db, $astman, $amp_conf;
    if ($account == "") {
        return array();
    }
    $account = q($account);
    //get all the variables for the queue
    $sql = "SELECT keyword,data FROM queues_details WHERE id = {$account}";
    $results = $db->getAssoc($sql);
    if (empty($results)) {
        return array();
    }
    //okay, but there can be multiple member variables ... do another select for them
    $results['member'] = queues_get_static_members($account);
    //if 'queue-youarenext=queue-youarenext', then assume we want to announce position
    if (!$queues_conf_only) {
        if (isset($results['queue-youarenext']) && $results['queue-youarenext'] == 'queue-youarenext') {
            $results['announce-position'] = 'yes';
        } else {
            $results['announce-position'] = 'no';
        }
    }
    //if 'eventmemberstatusoff=Yes', then assume we want to 'eventmemberstatus=no'
    if (isset($results['eventmemberstatusoff'])) {
        if (strtolower($results['eventmemberstatusoff']) == 'yes') {
            $results['eventmemberstatus'] = 'no';
        } else {
            $results['eventmemberstatus'] = 'yes';
        }
    } elseif (!isset($results['eventmemberstatus'])) {
        $results['eventmemberstatus'] = 'no';
    }
    if ($queues_conf_only) {
        $sql = "SELECT ivr_id, callback_id FROM queues_config WHERE extension = {$account}";
        $config = sql($sql, "getRow", DB_FETCHMODE_ASSOC);
    } else {
        $sql = "SELECT * FROM queues_config WHERE extension = {$account}";
        $config = sql($sql, "getRow", DB_FETCHMODE_ASSOC);
        $results['prefix'] = $config['grppre'];
        $results['alertinfo'] = $config['alertinfo'];
        $results['agentannounce_id'] = $config['agentannounce_id'];
        $results['maxwait'] = $config['maxwait'];
        $results['name'] = $config['descr'];
        $results['joinannounce_id'] = $config['joinannounce_id'];
        $results['password'] = $config['password'];
        $results['goto'] = $config['dest'];
        $results['announcemenu'] = $config['ivr_id'];
        $results['callback'] = $config['callback_id'];
        $results['rtone'] = $config['ringing'];
        $results['cwignore'] = $config['cwignore'];
        $results['qregex'] = $config['qregex'];
        $results['queuewait'] = $config['queuewait'];
        $results['use_queue_context'] = $config['use_queue_context'];
        $results['togglehint'] = $config['togglehint'];
        $results['qnoanswer'] = $config['qnoanswer'];
        $results['callconfirm'] = $config['callconfirm'];
        $results['callconfirm_id'] = $config['callconfirm_id'];
        $results['monitor_type'] = $config['monitor_type'];
        $results['monitor_heard'] = $config['monitor_heard'];
        $results['monitor_spoken'] = $config['monitor_spoken'];
        // TODO: why the str_replace?
        //
        if ($astman) {
            $account = str_replace("'", '', $account);
            //get dynamic members priority from astDB
            $get = $astman->database_show('QPENALTY/' . $account . '/agents');
            if ($get) {
                foreach ($get as $key => $value) {
                    $key1 = explode('/', $key);
                    $mem[$key1[4]] = $value;
                }
                foreach ($mem as $mem => $pnlty) {
                    $dynmem[] = $mem . ',' . $pnlty;
                }
                $results['dynmembers'] = implode("\n", $dynmem);
            } else {
                $results['dynmembers'] = '';
            }
            $results['dynmemberonly'] = $astman->database_get('QPENALTY/' . $account, 'dynmemberonly');
        } else {
            fatal("Cannot connect to Asterisk Manager with " . $amp_conf["AMPMGRUSER"] . "/" . $amp_conf["AMPMGRPASS"]);
        }
    }
    $results['context'] = '';
    $results['periodic-announce'] = '';
    if ($config['ivr_id'] != 'none' && $config['ivr_id'] != '') {
        if (function_exists('ivr_get_details')) {
            $results['context'] = "ivr-" . $config['ivr_id'];
            $arr = ivr_get_details($config['ivr_id']);
            if (isset($arr['announcement']) && $arr['announcement'] != '') {
                $periodic = recordings_get_file($arr['announcement']);
                // We need to strip off all but the first sound file of any compound sound files
                $periodic_arr = explode("&", $periodic);
                $results['periodic-announce'] = $periodic_arr[0];
            }
        }
    } else {
        if ($config['callback_id'] != 'none' && $config['callback_id'] != '') {
            if (function_exists('vqplus_callback_get')) {
                $results['context'] = "queuecallback-" . $config['callback_id'];
                $arr = vqplus_callback_get($config['callback_id']);
                if (isset($arr[0]) && is_array($arr[0])) {
                    /* Vqplus 13 moved to BMO, which made the return value format different. */
                    $arr = $arr[0];
                }
                if (isset($arr['announcement']) && $arr['announcement'] != '') {
                    $periodic = recordings_get_file($arr['announcement']);
                    // We need to strip off all but the first sound file of any compound sound files
                    $periodic_arr = explode("&", $periodic);
                    $results['periodic-announce'] = $periodic_arr[0];
                }
            }
        }
    }
    return $results;
}