function searchFormSubmit($searchFormValue, $numRows, $limit, $id, $type) { global $locate, $db, $config; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $optionFlag = $searchFormValue['optionFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; //搜索方式 数组 $divName = "grid"; if ($optionFlag == "export") { $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'clid'); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addScript("document.getElementById('exportForm').submit();"); } elseif ($optionFlag == "delete") { if (empty($_SESSION['curuser']['usertype'])) { $objResponse->addAlert($locate->Translate("Session time out,please try again")); return $objResponse->getXML(); } if ($_SESSION['curuser']['usertype'] == 'groupadmin') { $searchContent[] = $_SESSION['curuser']['groupid']; $searchField[] = 'groupid'; $searchType[] = 'equal'; } elseif ($_SESSION['curuser']['usertype'] == 'reseller') { $searchContent[] = $_SESSION['curuser']['resellerid']; $searchField[] = 'resellerid'; $searchType[] = 'equal'; } if ($config['synchronize']['delete_by_use_history']) { astercrm::deleteToHistoryFromSearch($searchContent, $searchField, $searchType, 'clid'); } else { astercrm::deletefromsearch($searchContent, $searchField, $searchType, 'clid'); } $html = createGrid($numRows, $limit, '', '', '', $divName, "", $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } elseif ($type == "delete") { if (empty($_SESSION['curuser']['usertype'])) { $objResponse->addAlert($locate->Translate("Session time out,please try again")); return $objResponse->getXML(); } if ($config['synchronize']['delete_by_use_history']) { $res = Customer::deleteRecordToHistory('id', $id, 'clid'); } else { $res = Customer::deleteRecord($id, 'clid'); } if ($res) { $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $searchField, $divName, "", $searchType); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("record deleted")); $objResponse->addAssign($divName, "innerHTML", $html); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("record cannot be deleted")); } } else { $html = createGrid($numRows, $limit, $searchField, $searchContent, $searchField, $divName, "", $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
function insertNewAccountForBilling($f) { global $db; $f = astercrm::variableFiler($f); $sql = "INSERT INTO clid SET " . "clid='" . $f['extension'] . "', " . "pin='" . $f['password'] . "', " . "display='" . $f['username'] . "', " . "groupid = " . $f['groupid'] . ", " . "resellerid = " . $f['resellerid'] . ", " . "creditlimit = '" . $f['creditlimit'] . "'," . "limittype = '" . $f['limittype'] . "'," . "addtime = now() "; astercrm::events($sql); $res =& $db->query($sql); return $res; }
function exportDuplicates($f) { $objResponse = new xajaxResponse(); $joinstr = astercrm::createSqlWithStype($f['searchField'], $f['searchContent'], $f['searchType'], "diallist"); $ajoinstr = str_replace('diallist.', 'a.', $joinstr); if ($_SESSION['curuser']['usertype'] != 'admin') { $ajoinstr .= " AND a.groupid = '" . $_SESSION['curuser']['groupid'] . "'"; $joinstr .= " AND diallist.groupid = '" . $_SESSION['curuser']['groupid'] . "'"; } $query = "SELECT a.*,campaign.campaignname FROM diallist as a LEFT JOIN campaign ON campaign.id=a.campaignid,( SELECT * FROM diallist WHERE 1 " . $joinstr . " GROUP BY dialnumber HAVING COUNT(dialnumber) > 1 ) as b WHERE a.dialnumber = b.dialnumber AND a.id <> b.id " . $ajoinstr . " "; $_SESSION['export_sql'] = $query; $objResponse->addAssign("hidSql", "value", $query); //赋值隐含域 $objResponse->addAssign("maintable", "value", 'diallist_dup'); //赋值隐含域 $objResponse->addAssign("exporttype", "value", 'exportcsv'); $objResponse->addScript("document.getElementById('exportForm').submit();"); return $objResponse; }
function &getNumRowsMorewithstype($filter, $content, $stype, $table) { global $db; $joinstr = astercrm::createSqlWithStype($filter, $content, $stype); $sql = "SELECT COUNT(*) FROM contact LEFT JOIN customer ON customer.id = contact.customerid LEFT JOIN note on note.contactid = contact.id WHERE "; if ($_SESSION['curuser']['usertype'] == 'admin') { $sql .= " "; } else { $sql .= " contact.groupid = " . $_SESSION['curuser']['groupid'] . " AND "; } if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); //去掉最左边的AND $sql .= " " . $joinstr; } else { $sql .= " 1"; } Customer::events($sql); $res =& $db->getOne($sql); return $res; }
function searchFormSubmit($searchFormValue, $numRows = null, $limit = null, $id = null, $type = null) { global $locate, $db; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $optionFlag = $searchFormValue['optionFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; $ordering = $searchFormValue['ordering']; $order = $searchFormValue['order']; $divName = "grid"; if ($optionFlag == "export") { $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'worktimes'); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addScript("document.getElementById('exportForm').submit();"); } elseif ($type == "delete") { $row = Customer::getRecordByField('worktime_id', $id, 'worktimepackage_worktimes'); if ($row['id'] != '') { $objResponse->addAlert($locate->Translate("this worktime in one or more package, can not delete")); return $objResponse->getXML(); } $res = Customer::deleteRecord($id, 'worktimes'); if ($res) { $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $order, $divName, $ordering, $searchType); $objResponse = new xajaxResponse(); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("delete_rec")); $objResponse->addAssign($divName, "innerHTML", $html); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("rec_cannot_delete")); } } else { $html = createGrid($numRows, $limit, $searchField, $searchContent, $order, $divName, $ordering, $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
/** * 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; $rate =& Customer::getRecordByID($id, 'myrate'); /* $group = astercrm::getAll('accountgroup'); if ($_SESSION['curuser']['usertype'] == 'admin'){ $groupoptions .= '<select id="groupid" name="groupid">'; while ($group->fetchInto($row)){ if ($row['id'] == $rate['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'] == $_SESSION['curuser']['groupid']){ $groupoptions .= $row['groupname'].'<input type="hidden" value="'.$row['id'].'" name="groupid" id="groupid">'; break; } } } */ $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'] == $rate['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'] == $rate['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', $rate['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'] == $rate['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'] == $rate['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; } } } $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">' . $locate->Translate("prefix") . '</td> <td align="left"><input type="hidden" id="id" name="id" value="' . $rate['id'] . '"><input type="text" id="dialprefix" name="dialprefix" size="25" maxlength="30" value="' . $rate['dialprefix'] . '" onKeyUp="xajax_showBuyRate(this.value);" onclick="xajax_showBuyRate(this.value);"> <span id="spanShowBuyRate" name="spanShowBuyRate"></span></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("length") . '</td> <td align="left"><input type="text" id="numlen" name="numlen" size="10" maxlength="10" value="' . $rate['numlen'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Destination") . '</td> <td align="left"><input type="text" id="destination" name="destination" size="25" maxlength="30" value="' . $rate['destination'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Connect charge") . '</td> <td align="left"><input type="text" id="connectcharge" name="connectcharge" size="20" maxlength="20" value="' . $rate['connectcharge'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Init block") . '</td> <td align="left"><input type="text" id="initblock" name="initblock" size="25" maxlength="100" value="' . $rate['initblock'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Rate") . '</td> <td align="left"><input type="text" id="rateinitial" name="rateinitial" size="25" maxlength="30" value="' . $rate['rateinitial'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("Billing block") . '</td> <td align="left"><input type="text" id="billingblock" name="billingblock" size="25" maxlength="30" value="' . $rate['billingblock'] . '"></td> </tr> <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 colspan="2" align="center"> <button id="submitButton" onClick=\'xajax_update(xajax.getFormValues("f"));return false;\'>' . $locate->Translate("Continue") . '</button> </td> </tr> </table> '; $html .= ' </form> *' . $locate->Translate("obligatory_fields") . ' '; return $html; }
function &getNumRowsMorewithstype($filter, $content, $stype, $table) { global $db; $joinstr = astercrm::createSqlWithStype($filter, $content, $stype, "worktimepackages"); $sql = "SELECT COUNT(*) FROM worktimepackages LEFT JOIN astercrm_accountgroup ON astercrm_accountgroup.id = worktimepackages.groupid WHERE "; if ($_SESSION['curuser']['usertype'] == 'admin') { $sql .= " "; } else { $sql .= " worktimepackages.groupid = " . $_SESSION['curuser']['groupid'] . " AND "; } if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); //去掉最左边的AND $sql .= " " . $joinstr; } else { $sql .= " 1"; } Customer::events($sql); $res =& $db->getOne($sql); return $res; }
function &getNumRowsMorewithstype($filter, $content, $stype, $table) { global $db; $joinstr = astercrm::createSqlWithStype($filter, $content, $stype); if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); //去掉最左边的AND $sql = 'SELECT COUNT(*) AS numRows FROM resellergroup WHERE ' . $joinstr; } else { $sql = "SELECT COUNT(*) AS numRows FROM resellergroup"; } Customer::events($sql); $res =& $db->getOne($sql); return $res; }
/** * 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; $account =& Customer::getRecordByID($id, 'account'); /* $group = astercrm::getAll('accountgroup'); if ($_SESSION['curuser']['usertype'] == 'admin'){ $groupoptions .= '<select id="groupid" name="groupid">'; while ($group->fetchInto($row)){ if ($row['id'] == $account['groupid']){ $groupoptions .= "<OPTION value='".$row['id']."' selected>".$row['groupname']."</OPTION>"; }else{ $groupoptions .= "<OPTION value='".$row['id']."'>".$row['groupname']."</OPTION>"; } } if ($account['groupid'] == 0 ){ $groupoptions .= "<OPTION value='0' selected></OPTION>"; }else{ $groupoptions .= "<OPTION value='0'></OPTION>"; } $groupoptions .= '</select>'; }else{ while ($group->fetchInto($row)){ if ($row['id'] == $account['groupid']){ $groupoptions .= $row['groupname'].'<input type="hidden" value="'.$row['id'].'" name="groupid" id="groupid">'; break; } } } */ $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 ($row['id'] == $account['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'] == $account['resellerid']) { $reselleroptions .= $row['resellername'] . '<input type="hidden" value="' . $row['id'] . '" name="resellerid" id="resellerid">'; break; } } } $group = astercrm::getAll('accountgroup', 'resellerid', $account['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 ($row['id'] == $account['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'] == $account['groupid']) { $groupoptions .= $row['groupname'] . '<input type="hidden" value="' . $row['id'] . '" name="groupid" id="groupid">'; break; } } } $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">' . $locate->Translate("username") . '</td> <td align="left"><input type="hidden" id="id" name="id" value="' . $account['id'] . '"><input type="text" id="username" name="username" size="25" maxlength="30" value="' . $account['username'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("password") . '</td> <td align="left"><input type="text" id="password" name="password" size="25" maxlength="30" value="' . $account['password'] . '"></td> </tr> <tr> <td nowrap align="left">' . $locate->Translate("usertype") . '</td> <td align="left"> <select id="usertype" name="usertype"> <option value="" '; if ($account['usertype'] == '') { $html .= ' selected '; } $html .= '></option>'; if ($_SESSION['curuser']['usertype'] == 'admin') { $html .= '<option value="admin"'; if ($account['usertype'] == 'admin') { $html .= ' selected '; } $html .= ' >' . $locate->Translate("Admin") . '</option>'; $html .= '<option value="reseller"'; if ($account['usertype'] == 'reseller') { $html .= ' selected '; } $html .= ' >' . $locate->Translate("Reseller") . '</option>'; } if ($_SESSION['curuser']['usertype'] == 'admin' || $_SESSION['curuser']['usertype'] == 'reseller') { $html .= '<option value="groupadmin"'; if ($account['usertype'] == 'groupadmin') { $html .= ' selected '; } $html .= ' >' . $locate->Translate("Group Admin") . '</option>'; } $html .= ' <option value="operator"'; if ($account['usertype'] == 'operator') { $html .= ' selected '; } $html .= '>' . $locate->Translate("Operator") . '</option>'; $html .= '</select> </tr> <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 colspan="2" align="center"><button id="submitButton" onClick=\'xajax_update(xajax.getFormValues("f"));return false;\'>' . $locate->Translate("Continue") . '</button></td> </tr> </table> '; $html .= ' </form> ' . $locate->Translate("obligatory fields") . ' '; return $html; }
function getOnlineSql($searchContent, $searchField, $searchType = array(), $table, $fields = '', $leftjoins = array()) { global $db, $config; $updateTimeInterval = $config['system']['update_online_interval'] * 60; $joinstr = astercrm::createSqlWithStype($searchField, $searchContent, $searchType, $table); $fieldstr = ''; if (is_array($fields)) { foreach ($fields as $field => $alias) { if (!is_numeric($field)) { $fieldstr .= " " . $field . " AS " . $alias . ","; } else { $fieldstr .= " " . $alias . ","; } } } $leftStr = ''; if (!empty($leftjoins)) { foreach ($leftjoins as $model => $param) { // the keys of array $leftjoins are the table which need to left join $leftStr .= 'LEFT JOIN ' . $model . ' ON ' . $param[0] . '=' . $param[1] . ' '; } } if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); if ($fieldstr != '') { $fieldstr = rtrim($fieldstr, ','); $query = "SELECT " . $fieldstr . " FROM " . $table . " " . $leftStr . " WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_update_time)) < {$updateTimeInterval} AND " . $joinstr; } else { $query = "SELECT * FROM " . $table . " '" . $leftStr . " WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_update_time)) < {$updateTimeInterval} AND " . $joinstr; } } else { if ($fieldstr != '') { $fieldstr = rtrim($fieldstr, ','); $query = "SELECT " . $fieldstr . " FROM " . $table . " " . $leftStr . "WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_update_time)) < {$updateTimeInterval} "; } else { $query = "SELECT * FROM " . $table . " WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_update_time)) < {$updateTimeInterval} "; } } return $query; }
function checkExtensionStatus($curid, $type = 'list', $curhover) { global $db, $config; /* if type is list, then only check some specific extension or else we get extension list from events */ $panellist = array(); $panelphones = array(); if ($type == 'list') { $i = 0; foreach ($_SESSION['curuser']['extensions'] as $value) { $row = astercrm::getRecordByField('username', $value, 'astercrm_account'); $panellist[$row['username']]['extension'] = $row['extension']; $panellist[$row['username']]['agent'] = $row['agent']; $panellist[$row['username']]['channel'] = $row['channel']; $panelphones[] = $row['extension']; $i++; } //$_SESSION['curuser']['extensions_session'] = $panellist; } else { $alluser = astercrm::getall('astercrm_account'); while ($alluser->fetchinto($row)) { $panellist[$row['username']]['extension'] = $row['extension']; $panellist[$row['username']]['agent'] = $row['agent']; $panellist[$row['username']]['channel'] = $row['channel']; $panelphones[] = $row['extension']; } } if (!isset($_SESSION['extension_status'])) { $status = array(); $callerid = array(); $direction = array(); } else { /* because there could be no all extension status data in events we need to inherit status from sessions */ $status = $_SESSION['extension_status']; $callerid = $_SESSION['callerid']; $direction = $_SESSION['direction']; $srcchan = $_SESSION['srcchan']; $dstchan = $_SESSION['dstchan']; } if (!isset($panelphones) or $panelphones == '') { $panelphones = array(); } if ($config['system']['eventtype'] == 'curcdr') { //read all peer status in table peerstatus and save to array $phone_status $events =& asterEvent::getPeerstatus(0); $phone_status = array(); while ($events->fetchInto($list)) { list($tech, $peer) = split('/', $list['peername']); $phone_status[$peer] = $list['status']; } foreach ($panellist as $username => $phone) { $query = "SELECT * FROM curcdr WHERE (src = '" . $phone['extension'] . "' OR dst = '" . $phone['extension'] . "' OR srcchan = 'agent/" . $phone['agent'] . "' OR dstchan = 'agent/" . $phone['agent'] . "' OR srcchan LIKE '" . $phone['channel'] . "-%' OR dstchan LIKE '" . $phone['channel'] . "-%') AND dstchan != '' AND srcchan != '' AND dst != '' AND src != '' ORDER BY id ASC"; $res = $db->query($query); if ($res->fetchInto($cdrrow)) { if ($status[$username] == 1) { continue; } //for check click to transfer if (!strstr($cdrrow['dstchan'], $cdrrow['dst'])) { $dst_tmp = trim($cdrrow['dst']); $cdrrow['dst'] = ''; } if ($status[$list['peer']] == 1) { continue; } if (strstr($cdrrow['src'], $phone['extension']) or strstr($cdrrow['srcchan'], $phone['channel']) or $cdrrow['srcchan'] == "agent/" . $phone['agent']) { // dial out if ($cdrrow['didnumber'] != '') { $callerid[$username] = trim($cdrrow['didnumber']); } else { if (trim($cdrrow['dst']) != '') { $callerid[$username] = trim($cdrrow['dst']); } else { $callerid[$username] = $dst_tmp; } } $direction[$username] = "dialout"; $status[$username] = 1; $srcchan[$username] = trim($cdrrow['srcchan']); $dstchan[$username] = trim($cdrrow['dstchan']); } elseif (strstr($cdrrow['dst'], $phone['extension']) or strstr($cdrrow['dstchan'], $phone['channel']) or $cdrrow['dstchan'] == "agent/" . $phone['agent']) { //dial in $callerid[$username] = trim($cdrrow['src']); $direction[$username] = "dialin"; $status[$username] = 1; $srcchan[$username] = trim($cdrrow['srcchan']); $dstchan[$username] = trim($cdrrow['dstchan']); } else { $callerid[$username] = ''; $direction[$username] = ''; $status[$username] = 0; } } else { if ($phone_status[$phone['extension']] == 'unknown' || $phone_status[$phone['extension']] == 'unreachable' || $phone_status[$phone['extension']] == '' || $phone_status[$phone['extension']] == 'unregistered') { $status[$username] = 2; } elseif ($phone_status[$phone['extension']] == 'reachable' || $phone_status[$phone['extension']] == 'registered' || strstr($phone_status[$phone['extension']], 'ok')) { $status[$username] = 0; } $callerid[$username] = ''; $direction[$username] = ''; } } } else { $events =& asterEvent::getEvents($curid); while ($events->fetchInto($list)) { $data = trim($list['event']); list($event, $event_val, $ev, $priv, $priv_val, $pv, $chan, $chan_val, $cv, $stat, $stat_val, $sv, $extra) = split(" ", $data, 13); // if (strtolower(substr($chan_val,0,3)) != "sip" && strtolower(substr($chan_val,0,3)) != "iax") continue; // also we check iax peer status if (strtolower(substr($chan_val, 0, 3)) != "sip") { continue; } if (substr($event_val, 0, 10) == "PeerStatus") { if (!in_array($chan_val, $phones)) { $phones[] = $chan_val; } if (substr($stat_val, 0, 11) == "unreachable") { $status[$chan_val] = 2; continue; } if (substr($stat_val, 0, 12) == "unregistered") { $status[$chan_val] = 2; continue; } if (substr($stat_val, 0, 9) == "reachable") { if ($status[$chan_val] == 1) { continue; } $status[$chan_val] = 0; continue; } if (substr($stat_val, 0, 12) == "registered") { if ($status[$chan_val] == 1) { continue; } $status[$chan_val] = 0; continue; } if (!isset($status[$chan_val])) { $status[$chan_val] = 0; } continue; } if (substr($event_val, 0, 10) == "Newchannel") { $peer_val = split("-", $chan_val); if (!in_array($peer_val[0], $panelphones)) { $panelphones[] = $peer_val[0]; } $status[$peer_val[0]] = 1; //get unique id //add by solo 2007-11-1 $extra = split(" ", $extra); foreach ($extra as $temp) { if (preg_match("/^Uniqueid:/", $temp)) { $uniqueid = substr($temp, 9); $callerid[$peer_val[0]] =& asterEvent::getCallerID($uniqueid); $direction[$peer_val[0]] = "dialin"; } } if ($callerid[$peer_val[0]] == 0) { // it's a dial out $srcInfo =& asterEvent::getInfoBySrcID($uniqueid); $callerid[$peer_val[0]] = $srcInfo['Extension']; $direction[$peer_val[0]] = "dialout"; } //************************** continue; } if (substr($event_val, 0, 8) == "Newstate") { $peer_val = split("-", $chan_val); if (!in_array($peer_val[0], $panelphones)) { $panelphones[] = $peer_val[0]; } $status[$peer_val[0]] = 1; continue; } if (substr($event_val, 0, 6) == "Hangup") { $peer_val = split("-", $chan_val); if (!in_array($peer_val[0], $panelphones)) { $panelphones[] = $peer_val[0]; } $status[$peer_val[0]] = 0; $callerid[$peer_val[0]] = ""; continue; } } } if ($type == 'list') { if (!isset($_SESSION['curuser']['extensions']) or $_SESSION['curuser']['extensions'] == '') { $phones = array(); } else { //$phones = $_SESSION['curuser']['extensions']; $phones = $panellist; } //print_r($phones);print_r($status);print_r($callerid);print_r($direction);exit; $action =& asterEvent::listStatus($phones, $status, $callerid, $direction, $srcchan, $dstchan); } else { //$_SESSION['curuser']['extensions_session'] = $phones; $action =& asterEvent::tableStatus($panellist, $status, $callerid, $direction, $srcchan, $dstchan, $curhover); } $_SESSION['extension_status'] = $status; $_SESSION['callerid'] = $callerid; $_SESSION['direction'] = $direction; $_SESSION['srcchan'] = $srcchan; $_SESSION['dstchan'] = $dstchan; $html .= $action; return $html; }
function archiveCDR($archiveDate) { global $db, $locate, $config; $objResponse = new xajaxResponse(); $date = date("Y-m-d"); $end_date = date("Y-m-d", strtotime("{$date} - {$archiveDate} month")); if ($config['system']['useHistoryCdr'] == 1) { $table = 'historycdr'; } else { $table = 'mycdr'; } $sql = "SELECT calldate FROM {$table} WHERE calldate < '" . $end_date . "' ORDER BY calldate ASC LIMIT 1"; $start_date = $db->getOne($sql); if ($start_date == '') { $objResponse->addAlert($locate->Translate('no cdr data early than') . " " . $archiveDate . " " . $locate->Translate('months')); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); $objResponse->addClear("msgZone", "innerHTML"); return $objResponse->getXML(); } $file_dir = $config['system']['upload_file_path'] . "cdr_archive"; if (!is_dir($file_dir)) { if (!mkdir($file_dir)) { $objResponse->addAlert($locate->Translate('cant create archive directory')); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); $objResponse->addClear("msgZone", "innerHTML"); return $objResponse->getXML(); } } $start_date = split('\\ ', $start_date); $start_date = $start_date['0']; $file_name = $start_date . "_to_" . $end_date; if (!($handle = fopen($file_dir . "/" . $file_name . ".csv", 'x'))) { $objResponse->addAlert($locate->Translate('cant create archive file')); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); $objResponse->addClear("msgZone", "innerHTML"); return $objResponse->getXML(); } $sql = "SELECT * FROM {$table} WHERE calldate < '" . $end_date . "' ORDER BY calldate ASC"; $archiveData = astercrm::exportDataToCSV($sql); if (!fwrite($handle, $archiveData)) { $objResponse->addAlert($locate->Translate('cant create archive file')); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); $objResponse->addClear("msgZone", "innerHTML"); return $objResponse->getXML(); } fclose($handle); system("tar zcf " . $file_dir . "/" . $file_name . ".tar.gz " . $file_dir . "/" . $file_name . ".csv", $r); if ($r === false) { $final_file = $file_dir . "/" . $file_name . ".csv"; } else { $final_file = $file_dir . "/" . $file_name . ".tar.gz"; unlink($file_dir . "/" . $file_name . ".csv"); } $objResponse->addAlert($locate->Translate('archive success') . ", " . $locate->Translate('file save in') . ": " . $final_file); $sql = "DELETE FROM {$table} WHERE calldate < '" . $end_date . "'"; $res = $db->query($sql); if ($res == 1) { $objResponse->addAlert($locate->Translate('clear cdr date success')); } else { $objResponse->addAlert($locate->Translate('clear cdr date failed')); } $html = createGrid(0, ROWSXPAGE); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign("grid", "innerHTML", $html); return $objResponse->getXML(); //echo $file_name;exit; }
function updateRemindercallsRecord($f) { global $db; $f = astercrm::variableFiler($f); $query = "UPDATE remindercalls SET " . "customerid='" . $f['customerid'] . "', " . "contactid='" . $f['contactid'] . "', " . "phonenumber= '" . $f['phonenumber'] . "', " . "asteriskcallsid= '" . $f['asteriskcallsid'] . "', " . "note= '" . $f['note'] . "', " . "dialtime= '" . $f['dialtime'] . "', " . "groupid = " . $f['groupid'] . ", " . "cretime = now() " . "WHERE id= " . $f['id'] . " "; astercrm::events($query); $res =& $db->query($query); return $res; }
function deleteCustomer($id) { global $customers_db, $config; $query = "DELETE FROM " . $config['customers']['customertable'] . " WHERE id = {$id}"; astercrm::events($query); $res =& $customers_db->query($query); return $res; }
function searchFormSubmit($searchFormValue, $numRows, $limit, $id, $type) { global $locate, $db, $config; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $optionFlag = $searchFormValue['optionFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; //搜索方式 数组 $divName = "grid"; if ($optionFlag == "export") { $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'accountgroup'); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addScript("document.getElementById('exportForm').submit();"); } elseif ($type == "delete") { if ($config['synchronize']['delete_by_use_history']) { $res = Customer::deleteRecordToHistory('groupid', $id, 'clid'); $res = Customer::deleteRecordToHistory('groupid', $id, 'myrate'); $res = Customer::deleteRecordToHistory('groupid', $id, 'callshoprate'); $res = Customer::deleteRecordToHistory('groupid', $id, 'account'); $res = Customer::deleteRecordToHistory('id', $id, 'accountgroup'); } else { $res = Customer::deleteRecords('groupid', $id, 'clid'); $res = Customer::deleteRecords('groupid', $id, 'myrate'); $res = Customer::deleteRecords('groupid', $id, 'callshoprate'); $res = Customer::deleteRecords('groupid', $id, 'account'); $res = Customer::deleteRecord($id, 'accountgroup'); } if ($res) { $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $searchField, $divName, "", $searchType); $objResponse = new xajaxResponse(); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("delete_rec")); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("rec_cannot_delete")); } } else { $html = createGrid($numRows, $limit, $searchField, $searchContent, $searchField, $divName, "", $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
function updateTrunkinfoRecord($f) { global $db; $f = astercrm::variableFiler($f); $query = "UPDATE trunkinfo SET " . "trunkname='" . $f['trunkname'] . "', " . "trunkchannel='" . $f['trunkchannel'] . "', " . "didnumber='" . $f['didnumber'] . "', " . "trunk_number='" . $f['trunk_number'] . "', " . "trunknote='" . $f['trunknote'] . "', " . "cretime= now() " . "WHERE id= " . $f['id'] . " "; astercrm::events($query); $res =& $db->query($query); return $res; }
function updateServerRecord($f) { global $db; $f = astercrm::variableFiler($f); $query = "UPDATE servers SET " . "name='" . $f['name'] . "', " . "ip='" . $f['ip'] . "', " . "port='" . $f['port'] . "', " . "username= '******'username'] . "', " . "secret='" . $f['secret'] . "', " . "note='" . $f['note'] . "' " . "WHERE id='" . $f['id'] . "'"; astercrm::events($query); $res =& $db->query($query); return $res; }
function deleteDuplicates($f) { global $db, $locate; $joinstr = astercrm::createSqlWithStype($f['searchField'], $f['searchContent'], $f['searchType'], "diallist"); $ajoinstr = str_replace('diallist.', 'a.', $joinstr); if ($_SESSION['curuser']['usertype'] != 'admin') { $ajoinstr .= " AND a.groupid = '" . $_SESSION['curuser']['groupid'] . "'"; $joinstr .= " AND diallist.groupid = '" . $_SESSION['curuser']['groupid'] . "'"; } $query = "DELETE diallist as a FROM diallist as a ,( SELECT * FROM diallist WHERE 1 " . $joinstr . " GROUP BY dialnumber HAVING COUNT(dialnumber) > 1 ) as b WHERE a.dialnumber = b.dialnumber AND a.id <> b.id " . $ajoinstr . " "; $res = $db->query($query); return $res; }
function skipDiallist($dialnumber, $diallistid) { global $locate; $objResponse = new xajaxResponse(); $row = astercrm::getRecordByID($diallistid, 'diallist'); if ($row['dialnumber'] != '') { $row['callresult'] = 'skip'; astercrm::deleteRecord($row['id'], "diallist"); $row['dialednumber'] = $phoneNum; $row['dialedby'] = $_SESSION['curuser']['extension']; $row['trytime'] = $row['trytime'] + 1; astercrm::insertNewDialedlist($row); } else { $objResponse->addAlert($locate->translate("Option failed")); return $objResponse; } $objResponse->addScript("xajax_clearPopup()"); $objResponse->loadXML(getPrivateDialListNumber($_SESSION['curuser']['extension'])); return $objResponse; }
function searchFormSubmit($searchFormValue, $numRows, $limit, $id, $type) { global $locate, $db; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $optionFlag = $searchFormValue['optionFlag']; $deleteFlag = $searchFormValue['deleteFlag']; $exportFlag = $searchFormValue['exportFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; //搜索方式 数组 $divName = "grid"; if ($exportFlag == "1" || $optionFlag == "export") { $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'curcdr'); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addScript("document.getElementById('exportForm').submit();"); } elseif ($deleteFlag == "1" || $optionFlag == "delete") { Customer::deleteFromSearch($searchContent, $searchField, $searchType, 'curcdr'); $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], '', '', '', $divName, "", 1, $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } else { if ($type == "delete") { $res = Customer::deleteRecord($id, 'curcdr'); if ($res) { $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $searchField, $divName, "", 1, $searchType); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("record deleted")); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("record cannot be deleted")); } } else { $html = createGrid($numRows, $limit, $searchField, $searchContent, $searchField, $divName, "", 1, $searchType); } $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
function &getRecordsFilteredMorewithstype($start, $limit, $filter, $content, $stype, $order, $table) { global $db; $joinstr = astercrm::createSqlWithStype($filter, $content, $stype); //<---- change by your function $sql = "SELECT * FROM sms_sents WHERE 1 "; if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); //去掉最左边的AND $sql .= " AND " . $joinstr . " " . " ORDER BY " . $order . " " . $_SESSION['ordering'] . " LIMIT {$start}, {$limit} {$ordering}"; } Customer::events($sql); $res =& $db->query($sql); return $res; }
function deleteByButton($f, $searchFormValue) { $objResponse = new xajaxResponse(); if (is_array($f['ckb'])) { foreach ($f['ckb'] as $vaule) { $res_customer = astercrm::deleteRecord($vaule, 'sms_sents'); } } $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $numRows = $searchFormValue['numRows']; $limit = $searchFormValue['limit']; $html = createGrid($numRows, $limit, $searchField, $searchContent, $order, 'grid'); $objResponse->addAssign('grid', "innerHTML", $html); return $objResponse->getXML(); }
$filename = 'callshoplogo_' . $_REQUEST['group_id'] . '.' . $file_ext; $filepath = $config['system']['upload_file_path'] . '/callshoplogo/'; if (!is_dir($filepath)) { if (!mkdir($filepath)) { echo "<script>alert('" . $locate->Translate("Logo upload faild please check your upload directory") . "');</script>"; exit; } } if (!move_uploaded_file($_FILES['callshopLogo']['tmp_name'], $filepath . $filename)) { echo "<script>alert('" . $locate->Translate("Logo upload faild1") . "');</script>"; } else { echo "<script>alert('" . $locate->Translate("Logo upload success") . "');</script>"; $group_row = astercrm::getRecord($_REQUEST['group_id'], 'accountgroup'); if ($group_row['grouplogo'] != $filename) { unlink($filepath . $group_row['grouplogo']); astercrm::updateField('accountgroup', 'grouplogo', $filename, $_REQUEST['group_id'], 'id'); } //echo "<script>window.parent.location.reload();</script>"; } } else { echo "<script>alert('" . $locate->Translate("Logo file must be a image file") . "');</script>"; } } exit; } //for import if (isset($_POST['CHECK']) && trim($_POST['CHECK']) == '1') { $upload_msg = ''; $is_vaild = 0; if ($_FILES['excel']['name'] != '') { //上传的文件
function deleteToHistoryFromSearch($searchContent, $searchField, $searchType = "", $table) { global $db, $config; if (empty($_SESSION['curuser']['usertype'])) { return; } $joinstr = astercrm::createSqlWithStype($searchField, $searchContent, $searchType, $table); if ($joinstr != '') { $joinstr = ltrim($joinstr, 'AND'); $history_sql = "INSERT INTO " . $table . "_history SELECT * FROM " . $table . " WHERE " . $joinstr; $sql = 'DELETE FROM ' . $table . ' WHERE ' . $joinstr; } else { if ($_SESSION['curuser']['usertype'] == 'admin') { $sql = 'TRUNCATE ' . $table; $history_sql = "INSERT INTO " . $table . "_history SELECT * FROM " . $table . " "; } else { $sql = "DELETE FROM " . $table . " WHERE " . $table . ".groupid = '" . $_SESSION['curuser']['groupid'] . "'"; $history_sql = "INSERT INTO " . $table . "_history SELECT * FROM " . $table . " WHERE " . $table . ".groupid = '" . $_SESSION['curuser']['groupid'] . "' "; } } Customer::events($history_sql); $result =& $db->query($history_sql); if ($result) { Customer::events($sql); $res =& $db->query($sql); return $res; } else { return false; } }
function searchFormSubmit($searchFormValue, $numRows = null, $limit = null, $id = null, $type = null) { global $locate, $db; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $optionFlag = $searchFormValue['optionFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; $ordering = $searchFormValue['ordering']; $order = $searchFormValue['order']; $divName = "grid"; if ($optionFlag == "export") { $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'astercrm_account'); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addScript("document.getElementById('exportForm').submit();"); } elseif ($optionFlag == "delete") { astercrm::deletefromsearch($searchContent, $searchField, $searchType, 'astercrm_account'); $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], '', '', $order, $divName, $ordering, ''); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } elseif ($type == "delete") { $arreglo =& Customer::getAllRecords($start, $limit, $order, $_SESSION['curuser']['groupid']); $content = ''; foreach ($arreglo as $agents) { if ($agents['agent'] == $id) { continue; } else { $addstr = "\nagent => " . trim($agents['agent']) . ',' . trim($agents['password']) . ',' . trim($agents['name']); } $content .= $addstr; } $agentsfile = '/etc/asterisk/agents_astercc.conf'; if ($fhandle = fopen($agentsfile, 'w')) { fwrite($fhandle, $content); $html = createGrid($searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $order, $divName, $ordering, $searchType); $objResponse = new xajaxResponse(); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("delete_rec")); $objResponse->addAssign($divName, "innerHTML", $html); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("rec_cannot_delete")); } } else { $html = createGrid($numRows, $limit, $searchField, $searchContent, $order, $divName, $ordering, $searchType); $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
function searchFormSubmit($searchFormValue, $numRows = null, $limit = null, $id = null, $type = null, $order = '') { global $locate, $db; #print_r($searchFormValue);exit; $objResponse = new xajaxResponse(); $searchField = array(); $searchContent = array(); $searchType = array(); $optionFlag = $searchFormValue['optionFlag']; $searchContent = $searchFormValue['searchContent']; //搜索内容 数组 $searchField = $searchFormValue['searchField']; //搜索条件 数组 $searchType = $searchFormValue['searchType']; //搜索方式 数组 $ordering = $searchFormValue['ordering']; $order = $searchFormValue['order']; $divName = "grid"; $allOrAnswer = $searchFormValue['allOrAnswer']; #选中的radio值 if ($optionFlag == "export" || $optionFlag == "exportcsv") { $fieldArray = array('mycdr.*', 'astercrm_accountgroup.groupname', 'astercrm_account.username'); $leftjoinArray = array('astercrm_accountgroup' => array('astercrm_accountgroup.id', 'mycdr.astercrm_groupid'), 'astercrm_account' => array('astercrm_account.id', 'mycdr.accountid')); if ($searchFormValue['allOrAnswer'] == 'answered') { $searchContent[] = '0'; $searchField[] = 'billsec'; $searchType[] = 'more'; } $sql = astercrm::getSql($searchContent, $searchField, $searchType, 'mycdr', $fieldArray, $leftjoinArray); //得到要导出的sql语句 $_SESSION['export_sql'] = $sql; $objResponse->addAssign("hidSql", "value", $sql); //赋值隐含域 $objResponse->addAssign("exporttype", "value", $optionFlag); $objResponse->addScript("document.getElementById('exportForm').submit();"); } else { if ($type == "delete") { $res = Customer::deleteRecord($id, 'account'); if ($res) { $html = createGrid('', '', $searchFormValue['numRows'], $searchFormValue['limit'], $searchField, $searchContent, $order, $divName, $ordering, $searchType, $allOrAnswer); $objResponse = new xajaxResponse(); $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("delete_rec")); } else { $objResponse->addAssign("msgZone", "innerHTML", $locate->Translate("rec_cannot_delete")); } } else { $html .= createGrid('', '', $numRows, $limit, $searchField, $searchContent, $order, $divName, $ordering, $searchType, $allOrAnswer); } $objResponse->addClear("msgZone", "innerHTML"); $objResponse->addAssign($divName, "innerHTML", $html); } return $objResponse->getXML(); }
/** * 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; }
<?php require_once "checkout.common.php"; require_once "db_connect.php"; require_once 'include/asterevent.class.php'; require_once 'include/astercrm.class.php'; require_once 'include/common.class.php'; include 'openflash/php-ofc-library/open-flash-chart.php'; global $locate; $color = array('#1F8FA1', '#848484', '#ffccff', '#CACFBE', '#DEF799', '#FF33C9', '#FF653F', '#669900', '#ffcc99', '#ffccff', '#99ccff', '#ffcc00'); //reseller array(); $reseller = astercrm::getAll('resellergroup'); while ($reseller->fetchInto($row)) { $id = $row['id']; $reseller_arr[$id] = $row['resellername']; } $group = astercrm::getAll('accountgroup'); while ($group->fetchInto($row)) { $id = $row['id']; $group_arr[$id] = $row['groupname']; } function parseReport($myreport) { global $locate; $ary['recordNum'] = $myreport['recordNum']; $ary['seconds'] = $myreport['seconds']; $ary['credit'] = $myreport['credit']; $ary['callshopcredit'] = $myreport['callshopcredit']; $ary['resellercredit'] = $myreport['resellercredit']; if ($_SESSION['curuser']['usertype'] == 'admin' || $_SESSION['curuser']['usertype'] == 'reseller') { $ary['markup'] = $myreport['callshopcredit'] - $myreport['resellercredit']; } else {
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; }