Exemple #1
4
function reloadSip()
{
    global $locate;
    $objResponse = new xajaxResponse();
    if ($_SESSION['curuser']['usertype'] == 'reseller' || $_SESSION['curuser']['usertype'] == 'admin') {
        $myAsterisk = new Asterisk();
        $myAsterisk->execute("sip reload");
        $objResponse->addAlert($locate->Translate("sip conf reloaded"));
    }
    return $objResponse;
}
 public function delete($id)
 {
     $asterisk = Asterisk::find($id);
     $asterisk->delete();
     Session::flash('message', 'Asterisk Setting was deleted.');
     return Redirect::to('/settings/asterisk');
 }
Exemple #3
0
 /**
  *
  * @return Asterisk
  */
 public static function getInstance()
 {
     // create a new instance if there isnt one already
     if (!isset(self::$instance)) {
         self::$instance = new self();
         Kohana::log('debug', 'Asterisk -> New instance of Asterisk telephony driver created.');
         // reset all the accumulators in this driver
         self::reset();
     }
     // return this instance
     return self::$instance;
 }
Exemple #4
0
function showQueuesStatus()
{
    global $config;
    $objResponse = new xajaxResponse();
    $myAsterisk = new Asterisk();
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        $objResponse->addAssign("divAMIStatus", "innerHTML", $locate->Translate("AMI_connection_failed"));
    } else {
        $peer = $myAsterisk->command("show queues");
        if (!strpos($peer['data'], ':')) {
            echo $peer['data'];
        } else {
            //print $peer['data'];
            $data = array();
            $HTML .= "<table>";
            foreach (explode("\n", $peer['data']) as $line) {
                $a = strpos('z' . $line, ':') - 1;
                if ($a >= 0) {
                    $data[trim(substr($line, 0, $a))] = trim(substr($line, $a + 1));
                    $HTML .= "<tr><td>" . trim(substr($line, 0, $a)) . "</td></tr>";
                    $HTML .= "<tr><td>" . trim(substr($line, $a + 1)) . "</td></tr>";
                }
                //print_r(trim(substr($line, $a + 1)));
                //exit;
            }
            //foreach ($data as $row){
            //}
            $HTML .= "</table>";
            //			print_r($data);
        }
    }
    //print $HTML;
    $objResponse->addAssign("divQueue", "innerHTML", $HTML);
    //	print_r($myAsterisk->QueueStatus());
    return $objResponse;
}
Exemple #5
0
function systemAction($type)
{
    global $locate;
    $objResponse = new xajaxResponse();
    if ($_SESSION['curuser']['usertype'] != 'admin') {
        return $objResponse;
    }
    $myAsterisk = new Asterisk();
    if ($type == 'reload') {
        $r = $myAsterisk->reloadAsterisk();
        $objResponse->addAssign("divAsMsg", "innerHTML", "<span class='passed'>" . $locate->Translate('asterisk have been reloaded') . "</span");
    } elseif ($type == "restart") {
        $myAsterisk->restartAsterisk();
        $objResponse->addAssign("divAsMsg", "innerHTML", "<span class='passed'>" . $locate->Translate('asterisk have been restart') . "</span");
    } elseif ($type == "reboot") {
        exec('sudo /sbin/shutdown -r now');
        $objResponse->addAssign("divSysMsg", "innerHTML", "<span class='passed'>" . $locate->Translate('Server is rebooting') . "...</span");
    } elseif ($type == "shutdown") {
        exec('sudo /sbin/shutdown -h now');
        $objResponse->addAssign("divSysMsg", "innerHTML", "<span class='passed'>" . $locate->Translate('Server is shuting down') . "...</span");
    }
    return $objResponse;
}
Exemple #6
0
function dial($phoneNum, $first = '', $myValue, $dtmf = '')
{
    global $config, $locate;
    $objResponse = new xajaxResponse();
    if (trim($myValue['curid']) > 0) {
        $curid = trim($myValue['curid']) - 1;
    } else {
        $curid = trim($myValue['curid']);
    }
    if ($dtmf != '') {
        $app = 'Dial';
        $data = 'local/' . $phoneNum . '@' . $config['system']['outcontext'] . '|30' . '|D' . $dtmf;
        $first = 'caller';
    }
    $myAsterisk = new Asterisk();
    if ($first == '') {
        $first = $config['system']['firstring'];
    }
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        $objResponse->addAssign("mobileStatus", "innerText", "Failed");
    }
    if ($first == 'caller') {
        //caller will ring first
        $strChannel = "local/" . $_SESSION['curuser']['extension'] . "@" . $config['system']['incontext'] . "/n";
        if ($config['system']['allow_dropcall'] == true) {
            $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $phoneNum, 'Context' => $config['system']['outcontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $phoneNum));
        } else {
            $myAsterisk->sendCall($strChannel, $phoneNum, $config['system']['outcontext'], 1, $app, $data, 30, $phoneNum, NULL, $_SESSION['curuser']['accountcode']);
        }
    } else {
        $strChannel = "local/" . $phoneNum . "@" . $config['system']['outcontext'] . "/n";
        if ($config['system']['allow_dropcall'] == true) {
            /*
            	coz after we use new method to capture dial event
            	there's no good method to make both leg display correct clid for now
            	so we comment these lines
            */
            $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $_SESSION['curuser']['extension'], 'Context' => $config['system']['incontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $_SESSION['curuser']['extension']));
        } else {
            $myAsterisk->sendCall($strChannel, $_SESSION['curuser']['extension'], $config['system']['incontext'], 1, $app, $data, 30, $_SESSION['curuser']['extension'], NULL, NULL);
        }
    }
    //$myAsterisk->disconnect();
    $objResponse->addAssign("divMsg", "style.visibility", "hidden");
    return $objResponse->getXML();
}
Exemple #7
0
<?php

//ini_set( "display_errors" , 1 );
require_once 'app_code/config.inc.php';
require_once 'class/class.yui.php';
require_once 'class/class.contacts.php';
require_once 'app_code/zipcode.class.php';
require_once 'app_code/class.Event_Contacts.php';
require_once 'class/class.yui.php';
$page = new basic_page();
$page->auth->Checklogin();
$yui = new phpyui("/yui2/");
if (PHONE_SYSTEM == "asterisk") {
    require_once 'class/class.asterisk.php';
    $asterisk = new Asterisk();
}
$uid = $page->auth->Get_user_id();
$yui->add_datatable("asterisk", "xml", "temp.xml.php?user_id={$uid}", array(0 => array("key" => "call")), array(), array("RefreshEvery" => "1000"));
//  ini_set("display_errors" , 1 );
if (PHONE_SYSTEM == 'asterisk') {
    $web = $asterisk->get_web_ext($page->auth->Get_user_id());
    //      print_r( $web );
}
?>
<html >
<head>
    <script src="http://yui.yahooapis.com/3.1.0/build/yui/yui-min.js"></script>
<link rel="stylesheet" type="text/css" href="sidebar.css" />
<!-- Just Playing Around With YUI, DELETE if needed -->
<link rel="stylesheet" type="text/css" href="/yui2/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="/yui2/tabview/assets/skins/sam/tabview.css" />
/**
*  hangup a channel
*  @param	channel			string		channel name
*  @return	object						xajax response object
*/
function hangup($channel)
{
    global $config;
    $myAsterisk = new Asterisk();
    $objResponse = new xajaxResponse();
    if (trim($channel) == '') {
        return $objResponse;
    }
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        $objResponse->addALert("action Huangup failed");
        return $objResponse;
    }
    $myAsterisk->Hangup($channel);
    //$objResponse->addAssign("btnHangup", "disabled", true);
    $objResponse->addAssign("divMsg", "style.visibility", "hidden");
    return $objResponse;
}
Exemple #9
0
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
//ini_set("display_errors", 1 );
header("content-type: text/xml");
$user_id = $_GET["user_id"];
echo '<?xml version="1.0"?>';
require_once 'class/global.config.php';
require_once 'class/database.inc.php';
require_once 'class/config.inc.php';
require_once 'class/class.yui.php';
require_once 'class/class.asterisk.php';
$yui = new phpyui("/yui2");
if (PHONE_SYSTEM == "asterisk") {
    $phone = new Asterisk();
    $calls = $phone->get_current_calls($user_id);
    $printr = print_r($calls, true);
    /* cid = number
     * name = full name
     * contact_id = cid
     * type = Type
     *
     */
    $printr = "<textarea style='width: 300px;height: 300px;'> {$printr} </textarea>";
    $printr = $yui->string_to_xml($printr);
} else {
    $calls = array();
}
$tmparr = array();
function display_number($t)
Exemple #10
0
function hangupchnnel($channel)
{
    global $config;
    $objResponse = new xajaxResponse();
    if ($channel == '') {
        $curchannels = getCurchannels();
        $objResponse->addAssign("curchanels", "innerHTML", $curchannels);
        return $objResponse;
    }
    $myAsterisk = new Asterisk();
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        return;
    }
    $myAsterisk->Hangup($channel);
    sleep(1);
    $curchannels = getCurchannels();
    $objResponse->addAssign("curchanels", "innerHTML", $curchannels);
    return $objResponse;
}
Exemple #11
0
require_once 'class/class.tasks.php';
require_once 'class/class.message.php';
require_once 'class/class.news.php';
require_once 'class/class.contacts.php';
require_once 'class/class.bugs.php';
require_once 'Zend/Loader.php';
require_once 'class/class.CapacityReport.php';
require_once 'class/class.WorkOrder.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Http_Client');
require_once 'class/class.calendar.php';
if (PHONE_SYSTEM == "asterisk") {
    require_once "class/class.asterisk.php";
    $asterisk = new Asterisk();
}
if (EMAIL_SYSTEM == 'gmail') {
    $cal = new GCalendar(USER, PASS);
}
$page = new basic_page();
$user = new User();
$page->auth->Checklogin();
$notify = new Notification();
$contact = new Company_Global();
$contact->SetUserID($page->auth->Get_user_id());
$contact->SetUserName($page->auth->Get_user_name());
$news = new News();
$message = new Message();
$ajax = new PHPLiveX();
$user = new User();
Exemple #12
0
$open_task = $_GET["open_task"];
require_once 'app_code/config.inc.php';
require_once 'class/class.contacts.php';
require_once 'app_code/zipcode.class.php';
require_once 'app_code/class.Event_Contacts.php';
require_once 'class/class.note.php';
require_once 'class/class.tasks.php';
require_once 'app_code/global.config.php';
require_once 'app_code/class.CertificationType.php';
require_once 'app_code/class.application.php';
require_once 'app_code/class.Event.php';
require_once 'class/class.securenote.php';
$secure = new secure();
if (PHONE_SYSTEM == "asterisk") {
    require_once 'class/class.asterisk.php';
    $asterisk = new Asterisk();
}
$page = new basic_page();
$page->auth->Checklogin();
if ($_REQUEST[contact_id] == '') {
    $page->gotoPage('contacts.php');
    exit;
}
/*
if(		$page->auth->checkPermessionView('TBL_CONTACT',$_REQUEST[contact_id])==0 and 
		$page->auth->isOwner(TBL_CONTACT," and contact_id='$_REQUEST[contact_id]'")==0)
{
		$page->auth->SendToRefrerPage();
		exit();
}
*/
Exemple #13
0
function agentPause($agent, $queueno = '', $action)
{
    global $locate, $config;
    $myAsterisk = new Asterisk();
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        return;
    }
    if ($action == 'pause') {
        if ($config['system']['require_reason_when_pause'] == 'yes') {
            savePauseReasion($agent, $queueno, $action, 'admin pause');
        }
        if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
            $res = $myAsterisk->queuePause($queueno, $agent, 1);
        } else {
            $cmd = "queue pause member {$agent} queue {$queueno}";
            $res = $myAsterisk->Command($cmd);
        }
    } else {
        if ($config['system']['require_reason_when_pause'] == 'yes') {
            savePauseToContinue($agent, $queueno);
        }
        if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
            $res = $myAsterisk->queuePause($queueno, $agent, 0);
        } else {
            $cmd = "queue unpause member {$agent} queue {$queueno}";
            $res = $myAsterisk->Command($cmd);
        }
    }
    $objResponse = new xajaxResponse();
    $objResponse->addAssign("updated", "value", date("Y-m-d H:i:s"));
    return $objResponse;
}
Exemple #14
0
function barge($srcchan, $dstchan)
{
    global $config, $locate;
    $myAsterisk = new Asterisk();
    $objResponse = new xajaxResponse();
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        return;
    }
    $group_info = astercrm::getRecordByID($_SESSION['curuser']['groupid'], "astercrm_accountgroup");
    if ($group_info['incontext'] != '') {
        $incontext = $group_info['incontext'];
    } else {
        $incontext = $config['system']['incontext'];
    }
    //if ($group_info['outcontext'] != '' ) $outcontext = $group_info['outcontext'];
    //else $outcontext = $config['system']['outcontext'];
    $strChannel = "local/" . $_SESSION['curuser']['extension'] . "@" . $incontext . "/n";
    $myAsterisk->Originate($strChannel, '', '', 1, 'meetme', $_SESSION['curuser']['extension'] . $_SESSION['asterisk']['paramdelimiter'] . "pqdx", 30, $_SESSION['curuser']['extension'], NULL, $_SESSION['curuser']['accountcode']);
    $myAsterisk->Redirect($srcchan, $dstchan, $_SESSION['curuser']['extension'], "astercc-barge", "1");
    return $objResponse;
}
Exemple #15
0
function checkAMI($id)
{
    global $locate;
    $objResponse = new xajaxResponse();
    $server =& Customer::getRecordByID($id, 'servers');
    $myAsterisk = new Asterisk();
    $myConfig['server'] = $server["ip"];
    $myConfig['port'] = $server["port"];
    $myConfig['username'] = $server["username"];
    $myConfig['secret'] = $server["secret"];
    $myAsterisk->config['asmanager'] = $myConfig;
    $res = $myAsterisk->connect();
    if ($res) {
        $objResponse->addAssign("divCheckServer", "innerHTML", "<span class='passed'>" . $locate->Translate('AMI_connect_success') . "</span");
    } else {
        $objResponse->addAssign("divCheckServer", "innerHTML", "<span class='failed'>" . $locate->Translate('AMI_connect_failed') . "</span>");
    }
    return $objResponse;
}
Exemple #16
0
<?php

ob_start();
$id = $_GET["id"];
require 'app_code/config.inc.php';
require_once 'class/global.config.php';
require_once 'class/class.asterisk.php';
ob_end_clean();
$a = new Asterisk();
$message = $a->get_voicemail_message($id);
header("Content-Type: audio/mp3", true);
//header("Content-Disposition: attachment; filename=$id.wav");
echo $message["mp3"];
Exemple #17
0
 function chanSpy($spy, $exten, $pam, $pdl)
 {
     /*
     Action: originate 
     Channel: Local/300 
     WaitTime: 30 
     CallerId: "Web Call" <8881> 
     Application: ChanSpy 
     Data: IAX2/100|q
     Async: yes 
     */
     /*
     $channel,
                            $exten=NULL, $context=NULL, $priority=NULL,
                            $application=NULL, $data=NULL,
                            $timeout=NULL, $callerid=NULL, $variable=NULL, $account=NULL, $async=NULL, $actionid=NULL
     */
     Asterisk::sendCall("local/{$spy}", null, null, null, "ChanSpy", $exten . $pdl . "q" . $pam, 30);
 }
Exemple #18
0
<?php

ob_start();
$id = $_GET["id"];
require 'app_code/config.inc.php';
require_once 'class/global.config.php';
require_once 'class/class.asterisk.php';
ob_end_clean();
$a = new Asterisk();
$message = $a->get_recording($id);
header("Content-Type: audio/mp3", true);
//header("Content-Disposition: attachment; filename=$id.wav");
echo $message["file"];
Exemple #19
0
function requireReasionWhenPause($f)
{
    global $locate, $config, $db;
    $agent = $f['require_reasion_agent'];
    $queueno = $f['require_reasion_queueno'];
    $context = $f['require_reasion_context'];
    $objResponse = new xajaxResponse();
    //add a record to table pause_reasion
    $saveResult = Customer::savePauseReasion($f['require_reasion_queueno'], 'pause', $f['require_reasion']);
    if (!$saveResult) {
        $objResponse->addAlert('Save Pause Reasion Failed');
    } else {
        $objResponse->addAssign("formRequiredReasionDiv", "style.visibility", 'hidden');
        $objResponse->addAssign("formRequiredReasionDiv", "innerHTML", '');
        $myAsterisk = new Asterisk();
        $myAsterisk->config['asmanager'] = $config['asterisk'];
        $res = $myAsterisk->connect();
        $action = 'pause';
        if ($agent == '') {
            if ($context == '') {
                if ($_SESSION['curuser']['group']['incontext'] != '') {
                    $context = $_SESSION['curuser']['group']['incontext'];
                } else {
                    $context = $config['system']['incontext'];
                }
            }
            $agentstr = 'Local/' . $_SESSION['curuser']['extension'] . '@' . $context . '/n';
        } else {
            $agentstr = $agent;
        }
        if ($action == 'pause') {
            if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
                $res = $myAsterisk->queuePause($queueno, $agentstr, 1);
            } else {
                $cmd = "queue pause member {$agentstr} queue {$queueno}";
            }
        } else {
            if ($action == 'pausea') {
                $agentstr = 'Agent/' . $_SESSION['curuser']['agent'];
                if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
                    $res = $myAsterisk->queuePause($queueno, $agentstr, 1);
                } else {
                    $cmd = "queue pause member {$agentstr} queue {$queueno}";
                }
            } else {
                if ($action == 'pausec') {
                    if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
                        $res = $myAsterisk->queuePause($queueno, $agentstr, 1);
                    } else {
                        $cmd = "queue pause member {$agentstr} queue {$queueno}";
                    }
                }
            }
        }
        if (!empty($cmd)) {
            $res = $myAsterisk->Command($cmd);
        }
        if (strstr($res['data'], 'failed')) {
            if ($action == 'pausea') {
                $action == 'pause';
            } elseif ($action == 'continuea') {
                $action == 'continue';
            }
            $objResponse->addAlert($locate->translate($action) . ' ' . $locate->translate('failed'));
        } else {
            $sql = "SELECT * FROM campaign WHERE queuename = '" . $queueno . "' AND groupid='" . $_SESSION['curuser']['groupid'] . "' AND enable= 1";
            $res =& $db->query($sql);
            while ($res->fetchInto($row)) {
                if ($action == 'pause') {
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']');
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continue');
                    $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D');
                } elseif ($action == 'pausea') {
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']');
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continuea');
                    $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D');
                } elseif ($action == 'pausec') {
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']');
                    $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continuec');
                    $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D');
                }
            }
        }
        $objResponse->addAssign("clkPauseTime", "value", date("Y-m-d H:i:s"));
    }
    return $objResponse;
}
function invite($src, $dest, $creditLimit)
{
    global $config;
    $src = trim($src);
    $dest = trim($dest);
    $credit = trim($credit);
    $myAsterisk = new Asterisk();
    $objResponse = new xajaxResponse();
    $myAsterisk->config['asmanager'] = $config['asterisk'];
    $res = $myAsterisk->connect();
    if (!$res) {
        $objResponse->addAssign("mobileStatus", "innerText", "Failed");
    }
    $strChannel = "local/" . $src . "@" . $config['system']['outcontext'] . "/n";
    $_SESSION['callbacks'][$src . $dest] = array('legA' => $dest, 'legB' => $src, 'start' => 0, 'creditLimit' => $creditLimit);
    if ($config['system']['allow_dropcall'] == true) {
        $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $dest, 'Context' => $config['system']['outcontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $dest));
    } else {
        $myAsterisk->sendCall($strChannel, $dest, $config['system']['outcontext'], 1, NULL, NULL, 30, $dest, NULL, $_SESSION['curuser']['accountcode']);
    }
    // add to callback table
    $callback['lega'] = $dest;
    $callback['legb'] = $src;
    $callback['credit'] = $creditLimit;
    $callback['groupid'] = $_SESSION['curuser']['groupid'];
    astercc::insertNewCallback($callback);
    return $objResponse->getXML();
}
Exemple #21
0
/**
*  function to verify user data
*	
*  	@param $aFormValues	(array)			login form data
															$aFormValues['username']
															$aFormValues['password']
															$aFormValues['locate']
*	@return $objResponse
*  @session
															$_SESSION['curuser']['username']
															$_SESSION['curuser']['extension']
															$_SESSION['curuser']['extensions']
															$_SESSION['curuser']['country']
															$_SESSION['curuser']['language']
															$_SESSION['curuser']['channel']
															$_SESSION['curuser']['accountcode']
*/
function processAccountData($aFormValues)
{
    global $db, $config;
    list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']);
    //get locate parameter
    $locate = new Localization($_SESSION['curuser']['country'], $_SESSION['curuser']['language'], 'login');
    $objResponse = new xajaxResponse();
    /* check whether the pear had been installed */
    $pear_exists_result = class_exists('PEAR');
    if (empty($pear_exists_result)) {
        $objResponse->addAlert($locate->Translate("Please install php pear"));
        $objResponse->addAssign("loginButton", "value", $locate->Translate("submit"));
        $objResponse->addAssign("loginButton", "disabled", false);
        return $objResponse;
    }
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        if ($_SERVER["HTTP_CLIENT_IP"]) {
            $proxy = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $proxy = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $ip = $_SERVER["REMOTE_ADDR"];
        }
    }
    $query = "SELECT * FROM account_log WHERE ip='" . $ip . "' AND action='login' ORDER BY id DESC LIMIT 1";
    $res = $db->query($query);
    if ($res->fetchInto($this_ip_log)) {
        $failedtimes = $this_ip_log['failedtimes'];
    }
    $log = array();
    $log['action'] = 'login';
    $log['ip'] = $ip;
    $log['username'] = $aFormValues['username'];
    if ($failedtimes >= $config['system']['max_incorrect_login'] && $config['system']['max_incorrect_login'] > 0) {
        $objResponse->addAlert($locate->Translate("login failed,your ip is locked for login"));
        $objResponse->addAssign("loginButton", "value", $locate->Translate("submit"));
        $objResponse->addAssign("loginButton", "disabled", false);
        return $objResponse;
    }
    $bError = false;
    $loginError = false;
    if (!$bError) {
        $query = "SELECT account.*, accountgroup.accountcode,accountgroup.allowcallback as allowcallbackgroup,resellergroup.allowcallback as allowcallbackreseller,accountgroup.limittype FROM account LEFT JOIN accountgroup ON accountgroup.id = account.groupid LEFT JOIN resellergroup ON resellergroup.id = account.resellerid WHERE username='******'username'] . "'";
        $res = $db->query($query);
        if ($res->fetchInto($list)) {
            $log['account_id'] = $list['id'];
            $log['usertype'] = $list['usertype'];
            if ($list['password'] == $aFormValues['password']) {
                $log['status'] = 'success';
                $log['failedtimes'] = 0;
                if ($aFormValues['rememberme'] == "forever") {
                    // set cookies for three years
                    setcookie("username", $aFormValues['username'], time() + 94608000);
                    setcookie("password", $aFormValues['password'], time() + 94608000);
                    setcookie("language", $aFormValues['locate'], time() + 94608000);
                    setcookie("pagestyle", $aFormValues['pagestyle'], time() + 94608000);
                } else {
                    // destroy cookies
                    setcookie("username", "", time() - 3600);
                    setcookie("password", "", time() - 3600);
                    setcookie("language", "", time() - 3600);
                    setcookie("pagestyle", $aFormValues['pagestyle'], time() + 94608000);
                    $username = '';
                    $password = '';
                    $language = 'en_US';
                    $checked = false;
                }
                $_SESSION = array();
                $_SESSION['curuser']['username'] = trim($aFormValues['username']);
                $_SESSION['curuser']['usertype'] = $list['usertype'];
                $_SESSION['curuser']['ipaddress'] = $_SERVER["REMOTE_ADDR"];
                $_SESSION['curuser']['userid'] = $list['id'];
                $_SESSION['curuser']['groupid'] = $list['groupid'];
                $_SESSION['curuser']['resellerid'] = $list['resellerid'];
                $_SESSION['curuser']['limittype'] = $list['limittype'];
                $configstatus = common::read_ini_file($config['system']['astercc_path'] . '/astercc.conf', $asterccConfig);
                if ($configstatus == -2) {
                    $html = "(fail to read " . $config['system']['astercc_path'] . "/astercc.conf)";
                    return $html;
                } else {
                    $billingfield = trim($asterccConfig['system']['billingfield']);
                    if ($billingfield == 'accountcode') {
                        $_SESSION['curuser']['billingfield'] = $billingfield;
                    }
                }
                $res = astercrm::getCalleridListByID($list['groupid']);
                while ($res->fetchInto($row)) {
                    $_SESSION['curuser']['extensions'][] = $row['clid'];
                }
                if (!is_array($_SESSION['curuser']['extensions'])) {
                    $_SESSION['curuser']['extensions'] = array();
                }
                if ($list['usertype'] == 'reseller') {
                    $_SESSION['curuser']['allowcallback'] = $list['allowcallbackreseller'];
                } else {
                    $_SESSION['curuser']['allowcallback'] = $list['allowcallbackgroup'];
                }
                $_SESSION['curuser']['accountcode'] = $list['accountcode'];
                //				if ($list['extensions'] != ''){
                //					$_SESSION['curuser']['extensions'] = split(',',$list['extensions']);
                //				}
                //				else{
                //				}
                list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']);
                /*
                	if you dont want check manager status and show device status when user login 
                	please uncomment these three line
                */
                //				$objResponse->addAlert($locate->Translate("login_success"));
                if ($_SESSION['curuser']['usertype'] == 'groupadmin' || $_SESSION['curuser']['usertype'] == 'operator') {
                    if ($aFormValues['pagestyle'] == 'classic') {
                        $objResponse->addScript('window.location.href="systemstatus.php";');
                    } else {
                        $objResponse->addScript('window.location.href="systemstatus_simple.php";');
                    }
                } else {
                    $objResponse->addScript('window.location.href="account.php";');
                }
                astercrm::insertAccountLog($log);
                return $objResponse;
                //check AMI connection
                $myAsterisk = new Asterisk();
                $myAsterisk->config['asmanager'] = $config['asterisk'];
                $res = $myAsterisk->connect();
                $html .= $locate->Translate("server_connection_test");
                if ($res) {
                    $html .= '<font color=green>' . $locate->Translate("pass") . '</font><br>';
                    $html .= '<b>' . $_SESSION['curuser']['extension'] . ' ' . $locate->Translate("device_status") . '</b><br>';
                    $html .= asterisk::getPeerIP($_SESSION['curuser']['extension']) . '<br>';
                    $html .= asterisk::getPeerStatus($_SESSION['curuser']['extension']) . '<br>';
                } else {
                    $html .= '<font color=red>' . $locate->Translate("no_pass") . '</font>';
                }
                if ($aFormValues['pagestyle'] == 'classic') {
                    $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'systemstatus.php\';">';
                } else {
                    $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'systemstatus_simple.php\';">';
                }
                $objResponse->addAssign("formDiv", "innerHTML", $html);
                $objResponse->addClear("titleDiv", "innerHTML");
                $objResponse->addScript("xajax.\$('btnContinue').focus();");
            } else {
                //$log['account_id'] = 0;
                $log['failedtimes'] = $failedtimes + 1;
                $log['status'] = 'failed';
                $log['failedcause'] = 'incorrect password';
                $loginError = true;
            }
        } else {
            $log['failedtimes'] = $failedtimes + 1;
            $log['account_id'] = 0;
            $log['usertype'] = 'manager_login';
            $log['status'] = 'failed';
            $log['failedcause'] = 'notexistent user';
            $loginError = true;
        }
        astercrm::insertAccountLog($log);
        if (!$loginError) {
            return $objResponse;
        } else {
            $objResponse->addAlert($locate->Translate("login failed"));
            $objResponse->addAssign("loginButton", "value", $locate->Translate("submit"));
            $objResponse->addAssign("loginButton", "disabled", false);
            return $objResponse;
        }
    } else {
        $objResponse->addAssign("loginButton", "value", $locate->Translate("submit"));
        $objResponse->addAssign("loginButton", "disabled", false);
    }
    return $objResponse;
}
Exemple #22
0
/**
*  function to verify user data
*
*  	@param $aFormValues	(array)			login form data
															$aFormValues['username']
															$aFormValues['password']
															$aFormValues['locate']
*	@return $objResponse
*  @session
															$_SESSION['curuser']['username']
															$_SESSION['curuser']['extension']
															$_SESSION['curuser']['extensions']
															$_SESSION['curuser']['country']
															$_SESSION['curuser']['language']
															$_SESSION['curuser']['channel']
															$_SESSION['curuser']['accountcode']
*/
function processAccountData($aFormValues)
{
    global $db, $locate, $config;
    $objResponse = new xajaxResponse();
    $bError = false;
    $loginError = false;
    list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']);
    $locate = new Localization($_SESSION['curuser']['country'], $_SESSION['curuser']['language'], 'login');
    /* check whether the pear had been installed */
    $pear_exists_result = class_exists('PEAR');
    if (empty($pear_exists_result)) {
        $objResponse->addAlert($locate->Translate("Please install php pear"));
        return $objResponse;
    }
    if (!$bError) {
        //$query = "SELECT * FROM account WHERE username='******'username'] . "'";
        //$res = $db->query($query);
        $row = astercrm::getRecordByField("username", $aFormValues['username'], "astercrm_account");
        if ($row['id'] != '') {
            if ($row['password'] == $aFormValues['password']) {
                $identity = astercrm::calculateAgentOntime('login', trim($aFormValues['username']));
                if ($identity) {
                    $update = astercrm::updateAgentOnlineTime('login', date('Y-m-d H:i:s'), $row['id']);
                }
                if ($aFormValues['rememberme'] == "forever") {
                    // set cookies for three years
                    setcookie("username", $aFormValues['username'], time() + 94608000);
                    setcookie("password", $aFormValues['password'], time() + 94608000);
                    setcookie("language", $aFormValues['locate'], time() + 94608000);
                } else {
                    // destroy cookies
                    setcookie("username", "", time() - 3600);
                    setcookie("password", "", time() - 3600);
                    setcookie("language", "", time() - 3600);
                    $username = '';
                    $password = '';
                    $language = 'en_US';
                    $checked = false;
                }
                $_SESSION = array();
                $_SESSION['curuser']['username'] = trim($aFormValues['username']);
                $_SESSION['curuser']['extension'] = $row['extension'];
                $_SESSION['curuser']['usertype'] = $row['usertype'];
                $_SESSION['curuser']['usertype_id'] = $row['usertype_id'];
                $_SESSION['curuser']['accountid'] = $row['id'];
                $_SESSION['curuser']['accountcode'] = $row['accountcode'];
                $_SESSION['curuser']['agent'] = $row['agent'];
                $_SESSION['curuser']['callerid'] = trim($row['callerid']);
                $_SESSION['curuser']['update_online_interval'] = date("Y-m-d H:i:s");
                // added by solo 2007-10-90
                $_SESSION['curuser']['channel'] = $row['channel'];
                $_SESSION['curuser']['extensions'] = array();
                $_SESSION['curuser']['groupid'] = $row['groupid'];
                $privilege = array();
                if ($row['usertype_id'] > 0) {
                    $privileges = $db->getAll("SELECT * FROM user_privileges WHERE user_type_id='" . $row['usertype_id'] . "'");
                    foreach ($privileges as $p) {
                        $privilege[$p['page']][$p['action']] = 1;
                    }
                }
                $_SESSION['curuser']['privileges'] = $privilege;
                if ($row['extensions'] != '') {
                    $_SESSION['curuser']['extensions'] = split(',', $row['extensions']);
                }
                //check extensions if exists in account table
                foreach ($_SESSION['curuser']['extensions'] as $key => $value) {
                    $exten_row = astercrm::getRecordByField("username", $value, "astercrm_account");
                    if ($exten_row['id'] == '') {
                        unset($_SESSION['curuser']['extensions'][$key]);
                    }
                }
                // if it's a group admin, then add all group extension to it
                if ($row['usertype'] == 'groupadmin' || is_array($_SESSION['curuser']['privileges']['systemstatus']) || is_array($_SESSION['curuser']['privileges']['import'])) {
                    $_SESSION['curuser']['memberExtens'] = array();
                    $_SESSION['curuser']['memberNames'] = array();
                    $_SESSION['curuser']['memberAgents'] = array();
                    $groupList = astercrm::getGroupMemberListByID($row['groupid']);
                    while ($groupList->fetchInto($groupRow)) {
                        $_SESSION['curuser']['memberExtens'][] = $groupRow['extension'];
                        $_SESSION['curuser']['memberNames'][] = $groupRow['username'];
                        if ($groupRow['agent'] != '') {
                            $_SESSION['curuser']['memberAgents'][] = $groupRow['agent'];
                        }
                    }
                }
                list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']);
                // get group information
                $_SESSION['curuser']['group'] = astercrm::getRecordByField("groupid", $row['groupid'], "astercrm_accountgroup");
                if ($row['dialinterval'] != 0) {
                    $_SESSION['curuser']['dialinterval'] = $row['dialinterval'];
                } else {
                    $row_group = astercrm::getRecordByField("groupid", $row['groupid'], "astercrm_accountgroup");
                    $_SESSION['curuser']['dialinterval'] = $_SESSION['curuser']['group']['agentinterval'];
                }
                if ($_SESSION['curuser']['groupid'] > 0) {
                    $sql = "SELECT id,campaignname,queuename,queue_context,use_ext_chan FROM campaign WHERE queuename != '' AND groupid='" . $_SESSION['curuser']['groupid'] . "' AND enable= 1 ORDER BY queuename ASC";
                    $result =& $db->query($sql);
                    $dataArray = array();
                    while ($row = $result->fetchRow()) {
                        $dataArray[$row['id']] = $row;
                    }
                    $_SESSION['curuser']['campaign_queue'] = $dataArray;
                }
                /*
                	if you dont want check manager status and show device status when user login
                	please uncomment these three line
                */
                //$objResponse->addAlert($locate->Translate("Login success"));
                //				if($_SESSION['curuser']['agent'] != ''){
                //					$msg = $locate->Translate("choose user mode");
                //					$objResponse->addScript("selectmode('".$msg."')");
                //					return $objResponse;
                //				}
                //$_SESSION['error_report'] = $config['error_report']['error_report_level'];
                //$objResponse->addScript('window.location.href="portal.php";');
                //return $objResponse;
                //check AMI connection
                $myAsterisk = new Asterisk();
                $myAsterisk->config['asmanager'] = $config['asterisk'];
                $res = $myAsterisk->connect();
                //$html .= $locate->Translate("server_connection_test");
                if ($res) {
                    //$html .= '<font color=green>'.$locate->Translate("pass").'</font><br>';
                    //$html .= '<b>'.$_SESSION['curuser']['extension'].' '.$locate->Translate("device_status").'</b><br>';
                    //$html .= asterisk::getPeerIP($_SESSION['curuser']['extension']).'<br>';
                    //$html .= asterisk::getPeerStatus($_SESSION['curuser']['extension']).'<br>';
                    $v = $myAsterisk->Command("core show version");
                    $v = explode(' ', $v['data']);
                    $version = $v['2'];
                    $_SESSION['asterisk']['version'] = $version;
                    $version_arr = split('\\.', $version);
                    if ($version_arr['1'] > 4) {
                        $_SESSION['asterisk']['paramdelimiter'] = ',';
                    } else {
                        $_SESSION['asterisk']['paramdelimiter'] = '|';
                    }
                } else {
                    $_SESSION['asterisk']['paramdelimiter'] = '|';
                    //$html .= '<font color=red>'.$locate->Translate("no_pass").'</font>';
                }
                $_SESSION['error_report'] = $config['error_report']['error_report_level'];
                //clear socket_url session to
                $_SESSION['socket_url_flag'] = 'yes';
                $objResponse->addScript('window.location.href="portal.php";');
                return $objResponse;
                $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'portal.php\';">';
                $objResponse->addAssign("formDiv", "innerHTML", $html);
                $objResponse->addClear("titleDiv", "innerHTML");
                $objResponse->addScript("xajax.\$('btnContinue').focus();");
            } else {
                $loginError = true;
            }
        } else {
            $loginError = true;
        }
        if (!$loginError) {
            return $objResponse;
        } else {
            $objResponse->addAlert($locate->Translate("login_failed"));
            $objResponse->addAssign("loginButton", "value", $locate->Translate("Submit"));
            $objResponse->addAssign("loginButton", "disabled", false);
            return $objResponse;
        }
    } else {
        $objResponse->addAssign("loginButton", "value", $locate->Translate("Submit"));
        $objResponse->addAssign("loginButton", "disabled", false);
    }
    return $objResponse;
}
function placeCall($campaignid)
{
    global $config;
    $myAsterisk = new Asterisk();
    $row =& astercrm::getDialNumber($campaignid);
    // 待拨号码为空
    if (!$row) {
        return false;
    }
    //print_r($row);
    $id = $row['id'];
    $groupid = $row['groupid'];
    $campaignid = $row['campaignid'];
    $phoneNum = $row['dialnumber'];
    $trytime = $row['trytime'];
    $assign = $row['assign'];
    $pdcontext = $row['incontext'];
    $outcontext = $row['outcontext'];
    if ($row['inexten'] != "") {
        $pdextension = $row['inexten'];
    } else {
        if ($row['assign'] != "") {
            $pdextension = $row['assign'];
        } else {
            $pdextension = $row['dialnumber'];
        }
    }
    $res = astercrm::deleteRecord($id, "diallist");
    $f['dialednumber'] = $phoneNum;
    $f['dialedby'] = $_SESSION['curuser']['username'];
    $f['groupid'] = $groupid;
    $f['trytime'] = $trytime + 1;
    $f['assign'] = $assign;
    $f['campaignid'] = $campaignid;
    $res = astercrm::insertNewDialedlist($f);
    $actionid = md5(uniqid(""));
    $strChannel = "local/" . $phoneNum . "@" . $outcontext . "/n";
    if ($config['system']['allow_dropcall'] == true) {
        $myAsterisk->dropCall($actionid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $pdextension, 'Context' => $pdcontext, 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $phoneNum));
    } else {
        $myAsterisk->config['asmanager'] = $config['asterisk'];
        $res = $myAsterisk->connect();
        $myAsterisk->sendCall($strChannel, $pdextension, $pdcontext, 1, NULL, NULL, 30, $phoneNum, NULL, NULL, NULL, $actionid);
    }
    return true;
}