Example #1
0
function cidlookup_get_config($engine)
{
    // TODO: discuss if mysql and http lookup should be implemented in dialplan or in an external AGI
    global $ext;
    // is this the best way to pass this?
    global $asterisk_conf;
    global $version;
    switch ($engine) {
        case "asterisk":
            $sources = cidlookup_list(true);
            if (is_array($sources)) {
                foreach ($sources as $item) {
                    // Search for number in the cache, if found lookupcidnum and return
                    if ($item['cidlookup_id'] != 0) {
                        if ($item['cache'] == 1 && $item['sourcetype'] != 'internal') {
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_gotoif('$[${DB_EXISTS(cidname/${CALLERID(num)})} = 1]', 'cidlookup,cidlookup_return,1'));
                        }
                    }
                    switch ($item['sourcetype']) {
                        case "internal":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_lookupcidname(''));
                            break;
                        case "enum":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_setvar('CALLERID(name)', '${TXTCIDNAME(${CALLERID(num)})}'));
                            break;
                        case "http":
                            if (!empty($item['http_username']) && !empty($item['http_password'])) {
                                $auth = sprintf('%s:%s@', $item['http_username'], urlencode($item['http_password']));
                            } else {
                                $auth = '';
                            }
                            if (!empty($item['http_port'])) {
                                $host = sprintf('%s:%d', $item['http_host'], $item['http_port']);
                            } else {
                                $host = $item['http_host'] . ':80';
                            }
                            if (substr($item['http_path'], 0, 1) == '/') {
                                $path = substr($item['http_path'], 1);
                            } else {
                                $path = $item['http_path'];
                            }
                            $query = str_replace('[NUMBER]', '${CALLERID(num)}', $item['http_query']);
                            $url = sprintf('http://%s%s/%s?%s', $auth, $host, $path, $query);
                            $curl = sprintf('${CURL(%s)}', $url);
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_setvar('CALLERID(name)', $curl));
                            break;
                        case "mysql":
                            if (version_compare($version, "1.6", "lt")) {
                                //Escaping MySQL query - thanks to http://www.asteriskgui.com/index.php?get=utilities-mysqlscape
                                $replacements = array('\\' => '\\\\', '"' => '\\"', '\'' => '\\\'', ' ' => '\\ ', ',' => '\\,', '(' => '\\(', ')' => '\\)', '.' => '\\.', '|' => '\\|');
                                $query = str_replace(array_keys($replacements), array_values($replacements), $item['mysql_query']);
                            } else {
                                $query = $item['mysql_query'];
                            }
                            $query = str_replace('[NUMBER]', '${CALLERID(num)}', $query);
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_connect('connid', $item['mysql_host'], $item['mysql_username'], $item['mysql_password'], $item['mysql_dbname']));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_query('resultid', 'connid', $query));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_fetch('fetchid', 'resultid', 'CALLERID(name)'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_clear('resultid'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_disconnect('connid'));
                            break;
                            // TODO: implement SugarCRM lookup, look at code snippet at http://nerdvittles.com/index.php?p=82
                        // TODO: implement SugarCRM lookup, look at code snippet at http://nerdvittles.com/index.php?p=82
                        case "sugarcrm":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_noop('SugarCRM not yet implemented'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_return(''));
                            break;
                    }
                    // Put numbers in the cache
                    if ($item['cidlookup_id'] != 0) {
                        if ($item['cache'] == 1 && $item['sourcetype'] != 'internal') {
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_db_put('cidname', '${CALLERID(num)}', '${CALLERID(name)}'));
                        }
                        $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_return(''));
                    }
                }
                $ext->add('cidlookup', 'cidlookup_return', '', new ext_lookupcidname(''));
                $ext->add('cidlookup', 'cidlookup_return', '', new ext_return(''));
            }
            break;
    }
}
Example #2
0
<?php

//    License for all code of this FreePBX module can be found in the license file inside the module directory
//    Copyright 2015 Sangoma Technologies.
$cidsources = cidlookup_list();
$srow = "";
foreach ($cidsources as $source) {
    $srow .= '<tr>';
    $srow .= '<td>' . $source['description'] . '</td>';
    $srow .= '<td>' . $source['sourcetype'];
    if ($source['sourcetype'] == 'opencnam' && !empty($source['opencnam_account_sid']) && !empty($source['opencnam_auth_token'])) {
        $srow .= " Pro ";
    }
    $srow .= '</td>';
    $srow .= '<td><a href="?display=cidlookup&view=form&itemid=' . $source['cidlookup_id'] . '&amp;extdisplay=' . $source['cidlookup_id'] . '"><i class="fa fa-edit"></i></a>';
    $srow .= '&nbsp;';
    $srow .= '<a href="config.php?display=cidlookup&view=form&amp;itemid=' . $source['cidlookup_id'] . '&amp;action=delete"><i class="fa fa-trash"></i></a>';
    $srow .= '</td></tr>';
}
?>
<div id="toolbar-all">
  <a href="config.php?display=cidlookup&amp;view=form" class="btn btn-default" ><i class="fa fa-plus"></i>&nbsp; <?php 
echo _("Add CIDLookup Source");
?>
</a>

</div>
<table id="cidlookupgrid"
        data-cache="false"
        data-toolbar="#toolbar-all"
        data-toggle="table"
Example #3
0
function cidlookup_get_config($engine)
{
    // TODO: discuss if mysql and http lookup should be implemented in dialplan or in an external AGI
    global $ext;
    // is this the best way to pass this?
    global $asterisk_conf;
    global $version;
    switch ($engine) {
        case "asterisk":
            $sources = cidlookup_list(true);
            if (is_array($sources)) {
                $ast_ge_162 = version_compare($version, '1.6.2', 'ge');
                foreach ($sources as $item) {
                    // Search for number in the cache, if found lookupcidnum and return
                    if ($item['cidlookup_id'] != 0) {
                        if ($item['cache'] == 1 && $item['sourcetype'] != 'internal' && $item['sourcetype'] != 'opencnam') {
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_gotoif('$[${DB_EXISTS(cidname/${CALLERID(num)})} = 1]', 'cidlookup,cidlookup_return,1'));
                        }
                    }
                    switch ($item['sourcetype']) {
                        case "internal":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_lookupcidname(''));
                            break;
                        case "enum":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_setvar('CALLERID(name)', '${TXTCIDNAME(${CALLERID(num)})}'));
                            break;
                        case "opencnam":
                            if (!empty($item['opencnam_account_sid']) && !empty($item['opencnam_auth_token'])) {
                                $auth = sprintf('%s:%s@', urlencode($item['opencnam_account_sid']), urlencode($item['opencnam_auth_token']));
                            } else {
                                $auth = '';
                            }
                            $url = sprintf('https://%sapi.opencnam.com/v2/phone/${CALLERID(num)}?format=pbx&ref=freepbx', $auth);
                            $curl = sprintf('${CURL(%s)}', $url);
                            // Hardcode for now, add configuration option in future. Setting 7 =~ 1 ring
                            //
                            if ($ast_ge_162) {
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('CURLOPT(httptimeout)', '7'));
                            }
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('CALLERID(name)', $curl));
                            // If the user is using the OpenCNAM Hobbyist Tier,
                            // track hourly query stats--this allows us to alert
                            // the user if they go past their free usage limits
                            // and need to upgrade their OpenCNAM plan.
                            if (!$auth) {
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('current_hour', '${STRFTIME(,,%Y-%m-%d %H)}'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('last_query_hour', '${DB(cidlookup/opencnam_last_query_hour)}'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('total_hourly_queries', '${DB(cidlookup/opencnam_total_hourly_queries)}'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_execif('$["${last_query_hour}" != "${current_hour}"]', 'Set', 'DB(cidlookup/opencnam_total_hourly_queries)=0'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_execif('$["${total_hourly_queries}" = ""]', 'Set', 'DB(cidlookup/opencnam_total_hourly_queries)=0'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('DB(cidlookup/opencnam_total_hourly_queries)', '${MATH(${DB(cidlookup/opencnam_total_hourly_queries)}+1,i)}'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_execif('$[${DB(cidlookup/opencnam_total_hourly_queries)} >= 60]', 'System', '${ASTVARLIBDIR}/bin/opencnam-alert.php'));
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('DB(cidlookup/opencnam_last_query_hour)', '${current_hour}'));
                            }
                            break;
                        case "https":
                        case "http":
                            if (!empty($item['http_username']) && !empty($item['http_password'])) {
                                $auth = sprintf('%s:%s@', $item['http_username'], urlencode($item['http_password']));
                            } else {
                                $auth = '';
                            }
                            if (!empty($item['http_port'])) {
                                $host = sprintf('%s:%d', $item['http_host'], $item['http_port']);
                            } else {
                                $host = $item['http_host'] . ':80';
                            }
                            if (substr($item['http_path'], 0, 1) == '/') {
                                $path = substr($item['http_path'], 1);
                            } else {
                                $path = $item['http_path'];
                            }
                            $tempst = array('[NUMBER]', '[NAME]', '[LANGUAGE]');
                            $values = array('${CALLERID(num)}', '${CALLERID(name)}', '${CHANNEL(language)}');
                            $query = str_replace($tempst, $values, $item['http_query']);
                            $url = sprintf('%s://%s%s/%s?%s', $item['sourcetype'], $auth, $host, $path, $query);
                            $curl = sprintf('${CURL(%s)}', $url);
                            // Hardcode for now, add configuration option in future. Setting 7 =~ 1 ring
                            //
                            if ($ast_ge_162) {
                                $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('CURLOPT(httptimeout)', '7'));
                            }
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_set('CALLERID(name)', $curl));
                            break;
                        case "mysql":
                            if (version_compare($version, "1.6", "lt")) {
                                //Escaping MySQL query - thanks to http://www.asteriskgui.com/index.php?get=utilities-mysqlscape
                                $replacements = array('\\' => '\\\\', '"' => '\\"', '\'' => '\\\'', ' ' => '\\ ', ',' => '\\,', '(' => '\\(', ')' => '\\)', '.' => '\\.', '|' => '\\|');
                                $query = str_replace(array_keys($replacements), array_values($replacements), $item['mysql_query']);
                            } else {
                                $query = $item['mysql_query'];
                            }
                            $query = str_replace('[NUMBER]', '${CALLERID(num)}', $query);
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_connect('connid', $item['mysql_host'], $item['mysql_username'], $item['mysql_password'], $item['mysql_dbname'], $item['mysql_charset']));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_query('resultid', 'connid', $query));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_fetch('fetchid', 'resultid', 'CALLERID(name)'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_clear('resultid'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_mysql_disconnect('connid'));
                            break;
                            // TODO: implement SugarCRM lookup, look at code snippet at http://nerdvittles.com/index.php?p=82
                        // TODO: implement SugarCRM lookup, look at code snippet at http://nerdvittles.com/index.php?p=82
                        case "sugarcrm":
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_noop('SugarCRM not yet implemented'));
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_return(''));
                            break;
                    }
                    // Put numbers in the cache
                    if ($item['cidlookup_id'] != 0) {
                        if ($item['cache'] == 1 && $item['sourcetype'] != 'internal') {
                            $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_db_put('cidname', '${CALLERID(num)}', '${CALLERID(name)}'));
                        }
                        $ext->add('cidlookup', 'cidlookup_' . $item['cidlookup_id'], '', new ext_return(''));
                    }
                }
                $ext->add('cidlookup', 'cidlookup_return', '', new ext_lookupcidname(''));
                $ext->add('cidlookup', 'cidlookup_return', '', new ext_return(''));
            }
            break;
    }
}