function generatePeersFile($resellerid) { global $db, $config; if ($config['system']['sipfile'] == '') { return; } $accountcode = ''; $clid_context = ''; $query = "SELECT * FROM resellergroup WHERE id = {$resellerid}"; $reseller = $db->getRow($query); $accountcode = $reseller['accountcode']; $clid_context = $reseller['clid_context']; $configstatus = common::read_ini_file($config['system']['astercc_path'] . '/astercc.conf', $asterccConfig); if ($asterccConfig['system']['billingfield'] != 'accountcode') { $accountcode = $reseller['accountcode']; } $query = "SELECT * FROM accountgroup WHERE resellerid = {$resellerid}"; $group_list = $db->query($query); $content = ''; while ($group_list->fetchInto($group)) { if ($group['accountcode'] != '' && $asterccConfig['system']['billingfield'] != 'accountcode') { $accountcode = $group['accountcode']; } $query = "SELECT * FROM clid WHERE groupid = " . $group['id'] . " ORDER BY clid ASC"; $clid_list = $db->query($query); while ($clid_list->fetchInto($row)) { if ($asterccConfig['system']['billingfield'] == 'accountcode') { $accountcode = $row['clid']; } $content .= "[" . $row['clid'] . "]\n"; foreach ($config['sipbuddy'] as $key => $value) { if ($clid_context != '' && strtolower(trim($key)) == 'context') { $content .= "{$key} = {$clid_context}\n"; continue; } if ($key != '' && $value != '') { $content .= "{$key} = {$value}\n"; } } if ($accountcode != "" && $accountcode != "''") { $content .= "accountcode = " . $accountcode . "\n"; } $content .= "secret = " . $row['pin'] . "\n"; $content .= "callerid = \"" . $row['clid'] . "\" <" . $row['clid'] . ">\n"; $content .= "accountcode = " . $row['accountcode'] . "\n\n"; } } $filename = $config['system']['sipfile'] . "_{$resellerid}.conf"; $fp = fopen($filename, "w"); if (!$fp) { print "file: {$filename} open failed, please check the file permission"; exit; } fwrite($fp, $content); }
/** * 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(); $bError = false; $loginError = false; 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"]; } } $log = array(); $log['action'] = 'login'; $log['ip'] = $ip; $log['username'] = $aFormValues['username']; $log['usertype'] = 'clid'; $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']; } 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; } if (!$bError) { $query = "SELECT * from clid where clid ='" . $aFormValues['username'] . "'"; $res = $db->query($query); if ($res->fetchInto($clid)) { $log['account_id'] = $clid['id']; if ($clid['pin'] == $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); } else { // destroy cookies setcookie("username", "", time() - 3600); setcookie("password", "", time() - 3600); setcookie("language", "", time() - 3600); $username = ''; $password = ''; $language = 'en_US'; $checked = false; } $_SESSION['curuser']['username'] = trim($aFormValues['username']); $_SESSION['curuser']['usertype'] = "clid"; $_SESSION['curuser']['clidid'] = $clid['id']; $_SESSION['curuser']['groupid'] = $clid['groupid']; list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']); $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; } } //$objResponse->addAlert($locate->Translate("login_success")); $objResponse->addScript('window.location.href="cdr.php";'); } else { $log['failedtimes'] = $failedtimes + 1; $log['status'] = 'failed'; $log['failedcause'] = 'incorrect password'; $loginError = true; } } else { $log['failedtimes'] = $failedtimes + 1; $log['account_id'] = 0; $log['status'] = 'failed'; $log['failedcause'] = 'notexistent clid'; $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; }
/** * 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; }
/** * Imprime la forma para editar un nuevo registro sobre el DIV identificado por "formDiv". * * @param $id (int) Identificador del registro a ser editado. * @return $html (string) Devuelve una cadena de caracteres que contiene la forma con los datos * a extraidos de la base de datos para ser editados */ function formEdit($id) { global $locate, $config; $clid =& Customer::getRecordByID($id, 'clid'); if ($clid['isshow'] == 'yes') { $selecty = "selected"; $selectn = ""; } else { if ($clid['isshow'] == 'no') { $selecty = ""; $selectn = "selected"; } } $reselleroptions = ''; $reseller = astercrm::getAll('resellergroup'); if ($_SESSION['curuser']['usertype'] == 'admin') { $reselleroptions .= '<select id="resellerid" name="resellerid" onchange="setGroup();">'; $reselleroptions .= '<option value="0"></option>'; while ($reseller->fetchInto($row)) { if ($config['synchronize']['display_synchron_server']) { $row['resellername'] = astercrm::getSynchronDisplay($row['id'], $row['resellername']); } if ($row['id'] == $clid['resellerid']) { $reselleroptions .= "<OPTION value='" . $row['id'] . "' selected>" . $row['resellername'] . "</OPTION>"; } else { $reselleroptions .= "<OPTION value='" . $row['id'] . "' >" . $row['resellername'] . "</OPTION>"; } } $reselleroptions .= '</select>'; } else { while ($reseller->fetchInto($row)) { if ($row['id'] == $clid['resellerid']) { if ($config['synchronize']['display_synchron_server']) { $row['resellername'] = astercrm::getSynchronDisplay($row['id'], $row['resellername']); } $reselleroptions .= $row['resellername'] . '<input type="hidden" value="' . $row['id'] . '" name="resellerid" id="resellerid">'; break; } } } $group = astercrm::getAll('accountgroup', 'resellerid', $clid['resellerid']); if ($_SESSION['curuser']['usertype'] == 'admin' || $_SESSION['curuser']['usertype'] == 'reseller') { $groupoptions .= '<select id="groupid" name="groupid">'; $groupoptions .= "<OPTION value='0'></OPTION>"; while ($group->fetchInto($row)) { if ($config['synchronize']['display_synchron_server']) { $row['groupname'] = astercrm::getSynchronDisplay($row['id'], $row['groupname']); } if ($row['id'] == $clid['groupid']) { $groupoptions .= "<OPTION value='" . $row['id'] . "' selected>" . $row['groupname'] . "</OPTION>"; } else { $groupoptions .= "<OPTION value='" . $row['id'] . "' >" . $row['groupname'] . "</OPTION>"; } } $groupoptions .= '</select>'; } else { while ($group->fetchInto($row)) { if ($row['id'] == $clid['groupid']) { if ($config['synchronize']['display_synchron_server']) { $row['groupname'] = astercrm::getSynchronDisplay($row['id'], $row['groupname']); } $groupoptions .= $row['groupname'] . '<input type="hidden" value="' . $row['id'] . '" name="groupid" id="groupid">'; break; } } } if ($clid['status'] == 1) { $statusoptions = ' <option value="1" selected>' . $locate->Translate("Avaiable") . '</option> <option value="-1">' . $locate->Translate("Lock") . '</option> '; } else { $statusoptions = ' <option value="1">' . $locate->Translate("Avaiable") . '</option> <option value="-1" selected>' . $locate->Translate("Lock") . '</option> '; } $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 ($_SESSION['curuser']['usertype'] == 'clid') { $readonly = "readonly"; } $html = ' <!-- No edit the next line --> <form method="post" name="f" id="f"> <table border="1" width="100%" class="adminlist"> <tr> <td nowrap align="left">'; if ($billingfield == 'accountcode') { $html .= $locate->Translate("Accountcode"); } else { $html .= $locate->Translate("Caller ID"); } $html .= '*</td> <td align="left"><input type="hidden" id="id" name="id" value="' . $clid['id'] . '"><input type="text" id="clid" name="clid" size="25" maxlength="30" value="' . $clid['clid'] . '" ' . $readonly . ' onblur="document.getElementById(\'accountcode\').value = this.value;"></td> </tr>'; if ($billingfield == 'callerid') { $html .= ' <tr> <td nowrap align="left">' . $locate->Translate("Account Code") . '*</td> <td align="left"><input type="text" id="accountcode" name="accountcode" size="25" maxlength="40" value="' . $clid['accountcode'] . '"></td> </tr>'; } else { $html .= ' <tr style="display:none;"> <td nowrap align="left">' . $locate->Translate("Account Code") . '*</td> <td align="left"><input type="text" id="accountcode" name="accountcode" size="25" maxlength="40" value="' . $clid['accountcode'] . '" readonly></td> </tr>'; } $html .= '<tr> <td nowrap align="left">' . $locate->Translate("Pin") . '*</td> <td align="left"><input type="text" id="pin" name="pin" size="25" maxlength="30" value="' . $clid['pin'] . '" readonly><input type="hidden" id="pin" name="pin" value="' . $clid['pin'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Display") . '</td> <td align="left"><input type="text" id="display" name="display" size="25" maxlength="20" value="' . $clid['display'] . '" ' . $readonly . '></td> </tr>'; if ($config['system']['setclid'] == 1) { $html .= '<tr> <td nowrap align="left">' . $locate->Translate("Credit Limit") . '*</td> <td align="left"><input type="text" id="creditlimit" name="creditlimit" size="25" maxlength="30" value="' . $clid['creditlimit'] . '" ' . $readonly . '></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Cur Credit") . '</td> <td align="left"> <input type="text" id="curcreditshow" name="curcreditshow" size="25" maxlength="100" value="' . $clid['curcredit'] . '" readonly> <input type="hidden" id="curcredit" name="curcredit" value="' . $clid['curcredit'] . ' "> </td> </tr>'; if ($_SESSION['curuser']['usertype'] != 'clid') { $html .= '<tr> <td nowrap align="left">' . $locate->Translate("Operate") . '</td> <td align="left"> <select id="creditmodtype" name="creditmodtype" onchange="showComment(this)"> <option value="">' . $locate->Translate("No change") . '</option> <option value="add">' . $locate->Translate("Refund") . '</option> <option value="reduce">' . $locate->Translate("Charge") . '</option> </select> <input type="text" id="creditmod" name="creditmod" size="15" maxlength="100" value="" disabled><p>' . $locate->Translate("Comment") . ' : <input type="text" id="comment" name="comment" size="18" maxlength="20" value="" disabled></p> </td> </tr> <tr>'; } $html .= '<td nowrap align="left">' . $locate->Translate("Limit Type") . '</td> <td align="left"> <select id="limittype" name="limittype" ' . $readonly . '>'; if ($clid['limittype'] == "postpaid") { $html .= ' <option value="">' . $locate->Translate("No limit") . '</option> <option value="prepaid">' . $locate->Translate("Prepaid") . '</option> <option value="postpaid" selected>' . $locate->Translate("Postpaid") . '</option>'; } elseif ($clid['limittype'] == "prepaid") { $html .= ' <option value="">' . $locate->Translate("No limit") . '</option> <option value="prepaid" selected>' . $locate->Translate("Prepaid") . '</option> <option value="postpaid">' . $locate->Translate("Postpaid") . '</option>'; } else { $html .= ' <option value="" selected>' . $locate->Translate("No limit") . '</option> <option value="prepaid">' . $locate->Translate("Prepaid") . '</option> <option value="postpaid">' . $locate->Translate("Postpaid") . '</option>'; } } $html .= '<tr> <td nowrap align="left">' . $locate->Translate("Reseller") . '</td> <td align="left">' . $reselleroptions . '</td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Group") . '</td> <td align="left"> ' . $groupoptions . ' </td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Status") . '</td> <td align="left"> <select id="status" name="status" ' . $readonly . '>' . $statusoptions . '</select> </td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Is Show") . '</td> <td align="left"> <select id="isshow" name="isshow" ' . $readonly . '><option value="yes" ' . $selecty . '>' . $locate->Translate("yes") . '</option><option value="no" ' . $selectn . '>' . $locate->Translate("no") . '</option></select> </td> </tr>'; if ($_SESSION['curuser']['usertype'] != 'clid') { $html .= '<tr> <td colspan="2" align="center"><button id="submitButton" onClick=\'xajax_update(xajax.getFormValues("f"));return false;\'>' . $locate->Translate("Continue") . '</button></td> </tr>'; } $html .= '</table> '; $html .= ' </form> *' . $locate->Translate("Obligatory Fields") . ' '; return $html; }