api.usms.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. /**
  3. * SMS queue handling class
  4. */
  5. class UbillingSMS {
  6. /**
  7. * SMS_SERVICES_ADVANCED_ENABLED option state
  8. *
  9. * @var bool
  10. */
  11. public $smsRoutingFlag = false;
  12. /**
  13. * Placeholder for $SMSDirections object
  14. *
  15. * @var null
  16. */
  17. public $smsDirections = null;
  18. const QUEUE_PATH = 'content/tsms/';
  19. /**
  20. * Creates new UbillingSMS object instance
  21. */
  22. public function __construct() {
  23. global $ubillingConfig;
  24. $this->smsRoutingFlag = $ubillingConfig->getAlterParam('SMS_SERVICES_ADVANCED_ENABLED');
  25. if ($this->smsRoutingFlag) {
  26. $this->smsDirections = new SMSDirections();
  27. }
  28. }
  29. /**
  30. * Stores SMS in sending queue
  31. *
  32. * @param string $number Mobile number in international format. Eg: +380506666666
  33. * @param string $message Text message for sending
  34. * @param bool $translit force message transliteration
  35. * @param string $module module that inits SMS sending
  36. *
  37. * @return string - filename in queue
  38. */
  39. public function sendSMS($number, $message, $translit = true, $module = '') {
  40. $result = '';
  41. $number = trim($number);
  42. $module = (!empty($module)) ? ' MODULE ' . $module : '';
  43. $prefix = 'usms_';
  44. if (!empty($number)) {
  45. if (ispos($number, '+')) {
  46. $message = str_replace(array("\n\r", "\n", "\r"), ' ', $message); //single line
  47. $message = str_replace(array("'", '"'), '`', $message); // dangerous quotes
  48. if ($translit) {
  49. $message = zb_TranslitString($message, true);
  50. }
  51. $message = trim($message);
  52. $queueId = time();
  53. $offset = 0;
  54. $filename = self::QUEUE_PATH . $prefix . $queueId . '_' . $offset;
  55. if (file_exists($filename)) {
  56. while (file_exists($filename)) {
  57. $offset++; //incremeting number of messages per second
  58. $filename = self::QUEUE_PATH . $prefix . $queueId . '_' . $offset;
  59. }
  60. }
  61. $storedata = 'NUMBER="' . $number . '"' . "\n";
  62. $storedata .= 'MESSAGE="' . $message . '"' . "\n";
  63. file_put_contents($filename, $storedata);
  64. log_register('USMS SEND SMS FOR `' . $number . '` AS `' . $prefix . $queueId . '_' . $offset . '` ' . $module);
  65. $result = $prefix . $queueId . '_' . $offset;
  66. }
  67. }
  68. return ($result);
  69. }
  70. /**
  71. * Sets routing direction to SMS queue file
  72. *
  73. * @param string $queueFile
  74. * @param string $keyType - array key type in Ubilling cache(login, emploeeid, ukvid and so on)
  75. * @param string $entity - key of array associated with $KeyType
  76. * @param string $forceDirection
  77. *
  78. * @return void
  79. */
  80. public function setDirection($queueFile, $keyType, $entity, $forceDirection = '') {
  81. if ($this->smsRoutingFlag) {
  82. if (!empty($queueFile) and file_exists(self::QUEUE_PATH . $queueFile)) {
  83. if (empty($forceDirection)) {
  84. $newDirection = $this->smsDirections->getDirection($keyType, $entity);
  85. } else {
  86. $newDirection = $forceDirection;
  87. }
  88. //saving data to queue
  89. $newDirection = trim($newDirection);
  90. $storeData = 'SMSSRVID="' . $newDirection . '"' . "\n";
  91. file_put_contents(self::QUEUE_PATH . $queueFile, $storeData, FILE_APPEND);
  92. }
  93. }
  94. }
  95. /**
  96. * Returns count of SMS available in queue
  97. *
  98. * @return int
  99. */
  100. public function getQueueCount() {
  101. $smsQueueCount = rcms_scandir(self::QUEUE_PATH);
  102. $result = sizeof($smsQueueCount);
  103. return ($result);
  104. }
  105. /**
  106. * Returns array containing all SMS queue data as index=>data
  107. *
  108. * @return array
  109. */
  110. public function getQueueData() {
  111. $result = array();
  112. $smsQueue = rcms_scandir(self::QUEUE_PATH);
  113. if (!empty($smsQueue)) {
  114. foreach ($smsQueue as $io => $eachsmsfile) {
  115. //try to prevent race condition due running sending process
  116. if (file_exists(self::QUEUE_PATH . $eachsmsfile)) {
  117. $smsData = rcms_parse_ini_file(self::QUEUE_PATH . $eachsmsfile);
  118. @$smsDate = date("Y-m-d H:i:s", filectime(self::QUEUE_PATH . $eachsmsfile));
  119. if ($smsData) {
  120. $result[$io]['filename'] = $eachsmsfile;
  121. $result[$io]['date'] = $smsDate;
  122. $result[$io]['number'] = $smsData['NUMBER'];
  123. $result[$io]['message'] = $smsData['MESSAGE'];
  124. $result[$io]['smssrvid'] = (isset($smsData['SMSSRVID'])) ? $smsData['SMSSRVID'] : 0;
  125. }
  126. }
  127. }
  128. }
  129. return ($result);
  130. }
  131. /**
  132. * Deletes SMS from local queue
  133. *
  134. * @param string $filename Existing sms filename
  135. *
  136. * @return int 0 - ok, 1 - deletion unsuccessful, 2 - file not found
  137. */
  138. public function deleteSms($filename) {
  139. if (file_exists(self::QUEUE_PATH . $filename)) {
  140. rcms_delete_files(self::QUEUE_PATH . $filename);
  141. $result = 0;
  142. if (file_exists(self::QUEUE_PATH . $filename)) {
  143. $result = 1;
  144. }
  145. } else {
  146. $result = 2;
  147. }
  148. return ($result);
  149. }
  150. }
  151. ?>