- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
172 lines
5.5 KiB
PHP
172 lines
5.5 KiB
PHP
<?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 SMSNotifier_IndiaSms_Provider implements SMSNotifier_ISMSProvider_Model {
|
|
|
|
private $_username;
|
|
private $_password;
|
|
private $_parameters = array();
|
|
|
|
const SERVICE_URI = 'http://49.50.69.90';
|
|
|
|
private static $REQUIRED_PARAMETERS = array(
|
|
array('name' => 'from', 'label' => 'Sender Id', 'type' => 'text'),
|
|
array('name' => 'CharacterSet', 'label' => 'Character Set', 'type' => 'picklist', 'picklistvalues' => array('unicode' => 'Unicode', 'gsm' => 'GSM'))
|
|
);
|
|
|
|
function __construct() {
|
|
|
|
}
|
|
|
|
public function getName() {
|
|
return 'IndiaSms';
|
|
}
|
|
|
|
public function setAuthParameters($username, $password) {
|
|
$this->_username = $username;
|
|
$this->_password = $password;
|
|
}
|
|
|
|
public function setParameter($key, $value) {
|
|
$this->_parameters[$key] = $value;
|
|
}
|
|
|
|
public function getParameter($key, $defvalue = false) {
|
|
if (isset($this->_parameters[$key])) {
|
|
return $this->_parameters[$key];
|
|
}
|
|
return $defvalue;
|
|
}
|
|
|
|
public function getRequiredParams() {
|
|
return self::$REQUIRED_PARAMETERS;
|
|
}
|
|
|
|
public function getServiceURL($type = false) {
|
|
if ($type) {
|
|
switch (strtoupper($type)) {
|
|
case self::SERVICE_AUTH: return self::SERVICE_URI . '/api/smsapi.aspx';
|
|
case self::SERVICE_SEND: return self::SERVICE_URI . '/api/smsapi.aspx';
|
|
case self::SERVICE_QUERY: return self::SERVICE_URI . '/api/smsstatus.aspx';
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
protected function prepareParameters() {
|
|
$params = array('username' => $this->_username, 'password' => $this->_password);
|
|
foreach (self::$REQUIRED_PARAMETERS as $requiredParam) {
|
|
$paramName = $requiredParam['name'];
|
|
if ($paramName != 'CharacterSet') {
|
|
$params[$paramName] = $this->getParameter($paramName);
|
|
}
|
|
}
|
|
$CharacterSet = $this->getParameter('CharacterSet', '');
|
|
if ($CharacterSet == 'unicode') {
|
|
$params['code'] = 2;
|
|
}
|
|
return $params;
|
|
}
|
|
|
|
public function send($message, $tonumbers) {
|
|
if (!is_array($tonumbers)) {
|
|
$tonumbers = array($tonumbers);
|
|
}
|
|
|
|
foreach ($tonumbers as $i => $tonumber) {
|
|
$tonumbers[$i] = str_replace(array('(', ')', ' ', '+', '-'), '', $tonumber);
|
|
}
|
|
|
|
$params = $this->prepareParameters();
|
|
|
|
$params['message'] = $message;
|
|
$params['to'] = implode(',', $tonumbers);
|
|
|
|
$serviceURL = $this->getServiceURL(self::SERVICE_SEND);
|
|
|
|
$httpClient = new Vtiger_Net_Client($serviceURL);
|
|
|
|
$response = $httpClient->doGet($params);
|
|
$responseLines = split("\n", $response);
|
|
|
|
$results = array();
|
|
foreach ($responseLines as $responseLine) {
|
|
|
|
$responseLine = trim($responseLine);
|
|
if (empty($responseLine))
|
|
continue;
|
|
|
|
$result = array('error' => false, 'statusmessage' => '');
|
|
$matches = null;
|
|
if (preg_match("/ERR:(.*)/", trim($responseLine), $matches)) {
|
|
$result['error'] = true;
|
|
$result['to'] = $tonumbers[$i++];
|
|
$result['statusmessage'] = $matches[0]; // Complete error message
|
|
} else if (preg_match("/ID: ([^ ]+)TO:(.*)/", $responseLine, $matches)) {
|
|
$result['id'] = trim($matches[1]);
|
|
$result['to'] = trim($matches[2]);
|
|
$result['status'] = self::MSG_STATUS_PROCESSING;
|
|
} else if (preg_match("/ID: (.*)/", $responseLine, $matches)) {
|
|
$result['id'] = trim($matches[1]);
|
|
$result['to'] = $tonumbers[0];
|
|
$result['status'] = self::MSG_STATUS_PROCESSING;
|
|
} else if (preg_match("/(^[0-9a-z-]+)/", $responseLine, $matches)) {
|
|
$result['id'] = trim($matches[1]);
|
|
$result['to'] = $tonumbers[0];
|
|
$result['status'] = self::MSG_STATUS_PROCESSING;
|
|
}
|
|
if ($matches)
|
|
$results[] = $result;
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
public function query($messageid) {
|
|
$params = array('username' => $this->_username, 'password' => $this->_password, 'messageid' => $messageid);
|
|
|
|
$serviceURL = $this->getServiceURL(self::SERVICE_QUERY);
|
|
$httpClient = new Vtiger_Net_Client($serviceURL);
|
|
$response = $httpClient->doGet($params);
|
|
$response = str_replace('<br/>', "\n", $response);
|
|
$response = strip_tags($response);
|
|
$responseLines = explode("\n", $response);
|
|
$responseData = explode(",", $responseLines[1]);
|
|
|
|
$response = array();
|
|
$response['phone'] = trim(str_replace('"', '', $responseData[0]));
|
|
$response['status'] = trim(str_replace('"', '', $responseData[1]));
|
|
$response['date'] = trim(str_replace('"', '', $responseData[2]));
|
|
|
|
$result = array('error' => false, 'needlookup' => 1);
|
|
|
|
if ($response['status'] == 'Delivered') {
|
|
$result['status'] = self::MSG_STATUS_DISPATCHED;
|
|
$result['needlookup'] = 0;
|
|
$result['statusmessage'] = 'Message delivered to ' . $response['phone'] . ' on ' . $response['date'];
|
|
} else if ($response['status'] = 'Submit') {
|
|
$result['status'] = self::MSG_STATUS_PROCESSING;
|
|
$result['statusmessage'] = 'Message to ' . $response['phone'] . ' is submitted for processing';
|
|
} else if ($response['status'] == 'Failed') {
|
|
$result['status'] = self::MSG_STATUS_FAILED;
|
|
$result['needlookup'] = 0;
|
|
$result['statusmessage'] = 'Message delivery failed.';
|
|
} else {
|
|
$result['status'] = self::MSG_STATUS_PROCESSING;
|
|
$result['statusmessage'] = 'Message is under process.';
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|