messages.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. //define the messages classs
  3. if (!class_exists('messages')) {
  4. class messages {
  5. /**
  6. * declare private variables
  7. */
  8. private $app_name;
  9. private $app_uuid;
  10. private $permission_prefix;
  11. private $list_page;
  12. private $table;
  13. private $uuid_prefix;
  14. /**
  15. * called when the object is created
  16. */
  17. public function __construct() {
  18. //assign private variables
  19. $this->app_name = 'messages';
  20. $this->app_uuid = '4a20815d-042c-47c8-85df-085333e79b87';
  21. $this->permission_prefix = 'message_';
  22. $this->list_page = 'messages_log.php';
  23. $this->table = 'messages';
  24. $this->uuid_prefix = 'message_';
  25. }
  26. /**
  27. * called when there are no references to a particular object
  28. * unset the variables used in the class
  29. */
  30. public function __destruct() {
  31. foreach ($this as $key => $value) {
  32. unset($this->$key);
  33. }
  34. }
  35. /**
  36. * delete records
  37. */
  38. public function delete($records) {
  39. if (permission_exists($this->permission_prefix.'delete')) {
  40. //add multi-lingual support
  41. $language = new text;
  42. $text = $language->get();
  43. //validate the token
  44. $token = new token;
  45. if (!$token->validate($_SERVER['PHP_SELF'])) {
  46. message::add($text['message-invalid_token'],'negative');
  47. header('Location: '.$this->list_page);
  48. exit;
  49. }
  50. //delete multiple records
  51. if (is_array($records) && @sizeof($records) != 0) {
  52. //build the delete array
  53. foreach ($records as $x => $record) {
  54. if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
  55. $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
  56. $array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
  57. $array['message_media'][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
  58. $array['message_media'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
  59. }
  60. }
  61. //delete the checked rows
  62. if (is_array($array) && @sizeof($array) != 0) {
  63. //grant temporary permissions
  64. $p = new permissions;
  65. $p->add('message_media_delete', 'temp');
  66. //execute delete
  67. $database = new database;
  68. $database->app_name = $this->app_name;
  69. $database->app_uuid = $this->app_uuid;
  70. $database->delete($array);
  71. unset($array);
  72. //revoke temporary permissions
  73. $p->delete('message_media_delete', 'temp');
  74. //set message
  75. message::add($text['message-delete']);
  76. }
  77. unset($records);
  78. }
  79. }
  80. } //method
  81. /**
  82. * send a message
  83. */
  84. public function send($message_type, $message_from, $message_to, $message_text, $message_media = '') {
  85. //santize the data
  86. $message_type = 'sms';
  87. $message_from = preg_replace("/[^\+?0-9]/", "", $message_from);
  88. $message_to = preg_replace('/[^\+?0-9]/', '', $message_to);
  89. //error check
  90. if (!is_numeric($message_from) || !is_numeric($message_to)) {
  91. exit;
  92. }
  93. //handle media (if any)
  94. if (!empty($message_media) && is_array($message_media) && @sizeof($message_media) != 0) {
  95. // reorganize media array, ignore errored files
  96. $f = 0;
  97. foreach ($message_media['error'] as $index => $error) {
  98. if ($error == 0) {
  99. $tmp_media[$f]['uuid'] = uuid();
  100. $tmp_media[$f]['name'] = $message_media['name'][$index];
  101. $tmp_media[$f]['type'] = $message_media['type'][$index];
  102. $tmp_media[$f]['tmp_name'] = $message_media['tmp_name'][$index];
  103. $tmp_media[$f]['size'] = $message_media['size'][$index];
  104. $f++;
  105. }
  106. }
  107. $message_media = $tmp_media;
  108. unset($tmp_media, $f);
  109. }
  110. $message_type = is_array($message_media) && @sizeof($message_media) != 0 ? 'mms' : 'sms';
  111. //get the contact uuid
  112. //$sql = "select c.contact_uuid ";
  113. //$sql .= "from v_contacts as c, v_contact_phones as p ";
  114. //$sql .= "where p.contact_uuid = c.contact_uuid ";
  115. //$sql .= "and p.phone_number like :phone_number ";
  116. //$sql .= "and c.domain_uuid = :domain_uuid ";
  117. //$parameters['phone_number'] = '%'.$message_to.'%';
  118. //$parameters['domain_uuid'] = $domain_uuid;
  119. //$database = new database;
  120. //$contact_uuid = $database->select($sql, $parameters, 'column');
  121. //unset($sql, $parameters);
  122. //prepare message to send
  123. $message['to'] = $message_to;
  124. $message['text'] = $message_text;
  125. //if (is_array($message_media) && @sizeof($message_media) != 0) {
  126. // $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
  127. // foreach ($message_media as $index => $media) {
  128. // $path = $protocol.$_SERVER['HTTP_HOST'].'/app/messages/message_media.php?id='.$media['uuid'].'&action=download&.'.strtolower(pathinfo($media['name'], PATHINFO_EXTENSION));
  129. // $message['media'][] = $path;
  130. // }
  131. //}
  132. $http_content = json_encode($message);
  133. //use the phone number to get the destination details
  134. $sql = "SELECT * FROM v_destinations ";
  135. $sql .= "WHERE ( ";
  136. $sql .= " destination_prefix || destination_area_code || destination_number = :destination_number ";
  137. $sql .= " OR destination_trunk_prefix || destination_area_code || destination_number = :destination_number ";
  138. $sql .= " OR destination_prefix || destination_number = :destination_number ";
  139. $sql .= " OR '+' || destination_prefix || destination_number = :destination_number ";
  140. $sql .= " OR '+' || destination_prefix || destination_area_code || destination_number = :destination_number ";
  141. $sql .= " OR destination_area_code || destination_number = :destination_number ";
  142. $sql .= " OR destination_number = :destination_number ";
  143. $sql .= ") ";
  144. $sql .= "and provider_uuid is not null ";
  145. $sql .= "and destination_enabled = 'true'; ";
  146. $parameters['destination_number'] = $message_from;
  147. if (!empty($debug)) {
  148. file_put_contents($log_file, "sql: ".$sql."\n", FILE_APPEND);
  149. //echo $sql."\n";
  150. file_put_contents($log_file, print_r($parameters, true)."\n", FILE_APPEND);
  151. }
  152. $database = new database;
  153. $row = $database->select($sql, $parameters, 'row');
  154. //view_array($row, false);
  155. if (isset($row)) {
  156. $domain_uuid = $row['domain_uuid'];
  157. $provider_uuid = $row['provider_uuid'];
  158. $user_uuid = $row['user_uuid'];
  159. $group_uuid = $row['group_uuid'];
  160. unset($row);
  161. }
  162. //if (!empty($debug)) {
  163. view_array($row,false);
  164. //file_put_contents($log_file, print_r($row, true)."\n", FILE_APPEND);
  165. //}
  166. unset($sql, $parameters);
  167. //debug
  168. //echo "provider_uuid: ".$provider_uuid."\n";
  169. //get the provider settings
  170. $sql = "select provider_setting_category, provider_setting_subcategory, ";
  171. $sql .= "provider_setting_name, provider_setting_value, provider_setting_order \n";
  172. $sql .= "from v_provider_settings \n";
  173. $sql .= "where provider_uuid = :provider_uuid \n";
  174. $sql .= "and provider_setting_category = 'outbound' \n";
  175. $sql .= "and provider_setting_enabled = 'true'; \n";
  176. $parameters['provider_uuid'] = $provider_uuid;
  177. $database = new database;
  178. $provider_settings = $database->select($sql, $parameters, 'all');
  179. unset($parameters);
  180. //echo $sql;
  181. //print_r($parameters);
  182. //print_r($provider_settings);
  183. //
  184. //echo "\n";
  185. //process the provider settings array
  186. foreach ($provider_settings as $row) {
  187. //format the phone numbers
  188. if ($row['provider_setting_subcategory'] == 'format') {
  189. if ($row['provider_setting_name'] == 'message_from') {
  190. $message_from = format_string($row['provider_setting_value'], $message_from);
  191. }
  192. if ($row['provider_setting_name'] == 'message_to') {
  193. $message_to = format_string($row['provider_setting_value'], $message_to);
  194. }
  195. }
  196. }
  197. //continue only if message from and to have a value
  198. if (!isset($message_from) || !isset($message_to)) {
  199. return false;
  200. }
  201. //add the permission
  202. $p = new permissions;
  203. $p->add('message_queue_add', 'temp');
  204. //build the message array
  205. $message_queue_uuid = uuid();
  206. $array['message_queue'][0]['domain_uuid'] = $_SESSION["domain_uuid"];
  207. $array['message_queue'][0]['message_queue_uuid'] = $message_queue_uuid;
  208. $array['message_queue'][0]['user_uuid'] = $_SESSION["user_uuid"];
  209. $array['message_queue'][0]['group_uuid'] = $group_uuid;
  210. //$array['message_queue'][0]['contact_uuid'] = $contact_uuid;
  211. $array['message_queue'][0]['provider_uuid'] = $provider_uuid;
  212. $array['message_queue'][0]['hostname'] = system('hostname');
  213. $array['message_queue'][0]['message_status'] = 'waiting';
  214. $array['message_queue'][0]['message_type'] = $message_type;
  215. $array['message_queue'][0]['message_direction'] = 'outbound';
  216. $array['message_queue'][0]['message_date'] = 'now()';
  217. $array['message_queue'][0]['message_from'] = $message_from;
  218. $array['message_queue'][0]['message_to'] = $message_to;
  219. $array['message_queue'][0]['message_text'] = $message_text;
  220. //view_array($array);
  221. //build message media array (if necessary)
  222. $media_exists = false;
  223. if (is_array($message_media) && @sizeof($message_media) != 0) {
  224. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
  225. foreach($message_media as $index => $media) {
  226. //create the media path
  227. $media_url = $protocol.$_SERVER['HTTP_HOST'].'/app/messages/media/'.$media['uuid'].'/'.$media['name'];
  228. //add the media to the array
  229. $array['message_media'][$index]['message_media_uuid'] = $media['uuid'];
  230. $array['message_media'][$index]['message_uuid'] = $message_queue_uuid;
  231. $array['message_media'][$index]['domain_uuid'] = $_SESSION["domain_uuid"];
  232. $array['message_media'][$index]['user_uuid'] = $_SESSION["user_uuid"];
  233. $array['message_media'][$index]['message_media_name'] = $media['name'];
  234. $array['message_media'][$index]['message_media_type'] = strtolower(pathinfo($media['name'], PATHINFO_EXTENSION));
  235. $array['message_media'][$index]['message_media_date'] = 'now()';
  236. $array['message_media'][$index]['message_media_url'] = $media_url;
  237. $array['message_media'][$index]['message_media_content'] = base64_encode(file_get_contents($media['tmp_name']));
  238. }
  239. $p->add('message_media_add', 'temp');
  240. $media_exists = true;
  241. }
  242. //no message or media to send - do not send
  243. //if ($message_text == '' && !$media_exists) {
  244. // return;
  245. //}
  246. //save to the data
  247. $database = new database;
  248. $database->app_name = 'messages';
  249. $database->app_uuid = '4a20815d-042c-47c8-85df-085333e79b87';
  250. $database->save($array, false);
  251. //$message = $database->message;
  252. //view_array($message, true);
  253. unset($array);
  254. //remove the permission
  255. $p->delete('message_queue_add', 'temp');
  256. $p->delete('message_media_add', 'temp');
  257. } //method
  258. } //class
  259. }
  260. ?>