fax_import.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. //check the permission
  3. if (defined('STDIN')) {
  4. $document_root = str_replace("\\", "/", $_SERVER["PHP_SELF"]);
  5. preg_match("/^(.*)\/app\/.*$/", $document_root, $matches);
  6. @$document_root = $matches[1];
  7. set_include_path($document_root);
  8. $_SERVER["DOCUMENT_ROOT"] = $document_root;
  9. require_once "resources/require.php";
  10. $html = false;
  11. }
  12. else {
  13. include "root.php";
  14. require_once "resources/require.php";
  15. require_once "resources/pdo.php";
  16. require_once "resources/check_auth.php";
  17. if (permission_exists('fax_extension_edit')) {
  18. //access granted
  19. }
  20. else {
  21. echo "access denied";
  22. exit;
  23. }
  24. $html = true;
  25. }
  26. //increase limits
  27. set_time_limit(3600);
  28. ini_set('memory_limit', '256M');
  29. ini_set("precision", 6);
  30. //set pdo attribute that enables exception handling
  31. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  32. //get default storage directory
  33. $sql = "select default_setting_value from v_default_settings ";
  34. $sql .= "where default_setting_category = 'switch' ";
  35. $sql .= "and default_setting_subcategory = 'storage' ";
  36. $sql .= "and default_setting_name = 'dir' ";
  37. $sql .= "and default_setting_enabled = 'true' ";
  38. $prep_statement = $db->prepare(check_sql($sql));
  39. $prep_statement->execute();
  40. $result = $prep_statement->fetch(PDO::FETCH_ASSOC);
  41. $default_storage_folder = $result['default_setting_value'];
  42. unset($prep_statement, $sql, $result);
  43. //get domain storage directory
  44. $sql = "select domain_uuid, domain_setting_value from v_domain_settings ";
  45. $sql .= "where domain_setting_category = 'switch' ";
  46. $sql .= "and domain_setting_subcategory = 'storage' ";
  47. $sql .= "and domain_setting_name = 'dir' ";
  48. $sql .= "and domain_setting_enabled = 'true' ";
  49. $prep_statement = $db->prepare(check_sql($sql));
  50. $prep_statement->execute();
  51. $results = $prep_statement->fetch(PDO::FETCH_ASSOC);
  52. foreach ($results as $index => $row) {
  53. $domain_storage_folders[$row['domain_uuid']] = $row['default_setting_value'];
  54. }
  55. unset($prep_statement, $sql, $results);
  56. //get domains and uuids
  57. $sql = "select domain_uuid, domain_name from v_domains ";
  58. $prep_statement = $db->prepare(check_sql($sql));
  59. $prep_statement->execute();
  60. $results = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
  61. if (count($results) > 0) {
  62. foreach ($results as $row) {
  63. $domain_names[$row['domain_uuid']] = $row['domain_name'];
  64. }
  65. }
  66. unset($prep_statement, $sql, $results);
  67. //add a function to check for a valid uuid
  68. if (!function_exists('is_uuid')) {
  69. function is_uuid($uuid) {
  70. //uuid version 4
  71. $regex = '/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i';
  72. return preg_match($regex, $uuid);
  73. }
  74. }
  75. //get fax extensions and uuids
  76. $sql = "select fax_uuid, domain_uuid, fax_extension, fax_caller_id_name, fax_caller_id_number from v_fax ";
  77. $prep_statement = $db->prepare(check_sql($sql));
  78. $prep_statement->execute();
  79. $results = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
  80. if (count($results) > 0) {
  81. foreach ($results as $row) {
  82. $fax_extension_uuids[$row['domain_uuid']][$row['fax_extension']] = $row['fax_uuid'];
  83. $fax_extension_cid[$row['domain_uuid']][$row['fax_extension']]['name'] = $row['fax_caller_id_name'];
  84. $fax_extension_cid[$row['domain_uuid']][$row['fax_extension']]['number'] = $row['fax_caller_id_number'];
  85. }
  86. }
  87. unset($prep_statement, $sql, $results);
  88. //set domain fax storage folder paths to check
  89. foreach ($domain_names as $domain_uuid => $domain_name) {
  90. if (count($domain_names) == 1) {
  91. $domain_fax_storage_paths[$domain_uuid] = (($domain_storage_folders[$domain_uuid] != '') ? $domain_storage_folders[$domain_uuid] : $default_storage_folder).'/fax';
  92. }
  93. else {
  94. $domain_fax_storage_paths[$domain_uuid] = (($domain_storage_folders[$domain_uuid] != '') ? $domain_storage_folders[$domain_uuid] : $default_storage_folder).'/fax/'.$domain_name;
  95. }
  96. }
  97. //traverse through domain fax storage folders
  98. foreach ($domain_fax_storage_paths as $domain_uuid => $domain_fax_storage_path) {
  99. if (file_exists($domain_fax_storage_path)) {
  100. $domain_fax_file_paths[$domain_uuid] = glob($domain_fax_storage_path.'/*/*/*.tif');
  101. }
  102. }
  103. //traverse through domain fax file paths
  104. foreach ($domain_fax_file_paths as $domain_uuid => $fax_file_paths) {
  105. echo "\n\nImporting ".$domain_names[$domain_uuid]." faxes...".(($html) ? "<br><br>" : null)."\n\n";
  106. foreach ($fax_file_paths as $fax_file_path) {
  107. $fax_ext_path = str_replace($domain_fax_storage_paths[$domain_uuid].'/', '', $fax_file_path);
  108. $tmp_array = explode('/', $fax_ext_path);
  109. $fax_ext = $tmp_array[0];
  110. $fax_box = $tmp_array[1];
  111. $fax_file = $tmp_array[2];
  112. if ($fax_box == 'temp') { continue; }
  113. else {
  114. if ($fax_box == 'inbox') {
  115. $record['fax_file_uuid'] = uuid();
  116. $record['fax_uuid'] = $fax_extension_uuids[$domain_uuid][$fax_ext];
  117. $record['fax_mode'] = 'rx';
  118. $record['fax_destination'] = '';
  119. $record['fax_file_type'] = substr($fax_file, -3);
  120. $record['fax_file_path'] = $fax_file_path;
  121. $record['fax_caller_id_name'] = substr($fax_file, 0, strpos($fax_file, '-'));
  122. $record['fax_caller_id_number'] = (is_numeric($record['fax_caller_id_name'])) ? (int) $record['fax_caller_id_name'] : null;
  123. $tmp_array = explode('-',substr($fax_file, strpos($fax_file, '-')+1));
  124. $record['fax_date'] = $tmp_array[0].'-'.$tmp_array[1].'-'.$tmp_array[2].' '.$tmp_array[3].':'.$tmp_array[4].':'.str_replace('.'.$record['fax_file_type'], '', $tmp_array[5]);
  125. $record['fax_epoch'] = strtotime($record['fax_date']);
  126. }
  127. if ($fax_box == 'sent') {
  128. $xml_cdr_uuid = substr($fax_file, 0, strpos($fax_file, '.'));
  129. $record['fax_file_uuid'] = $xml_cdr_uuid;
  130. $record['fax_uuid'] = $fax_extension_uuids[$domain_uuid][$fax_ext];
  131. $record['fax_mode'] = 'tx';
  132. $record['fax_file_type'] = substr($fax_file, -3);
  133. $record['fax_file_path'] = $fax_file_path;
  134. //get cdr details (if any)
  135. if (is_uuid($xml_cdr_uuid)) {
  136. $sql = "select destination_number, caller_id_name, caller_id_number, start_stamp, start_epoch from v_xml_cdr ";
  137. $sql .= "where uuid = '".$xml_cdr_uuid."' ";
  138. $sql .= "and domain_uuid = '".$domain_uuid."' ";
  139. $prep_statement = $db->prepare(check_sql($sql));
  140. $prep_statement->execute();
  141. $cdr = $prep_statement->fetch(PDO::FETCH_ASSOC);
  142. if (is_array($cdr) && count($cdr) > 0) {
  143. $record['fax_destination'] = $cdr['destination_number'];
  144. $record['fax_caller_id_name'] = $cdr['caller_id_name'];
  145. $record['fax_caller_id_number'] = $cdr['caller_id_number'];
  146. $record['fax_date'] = $cdr['start_stamp'];
  147. $record['fax_epoch'] = $cdr['start_epoch'];
  148. }
  149. else {
  150. $record['fax_caller_id_name'] = $fax_extension_cid[$domain_uuid][$fax_ext]['name'];
  151. $record['fax_caller_id_number'] = $fax_extension_cid[$domain_uuid][$fax_ext]['number'];
  152. $record['fax_epoch'] = filemtime($fax_file_path);
  153. $record['fax_date'] = date("Y-m-d H:i:s", $record['fax_epoch']);
  154. }
  155. unset($prep_statement, $sql, $cdr);
  156. }
  157. }
  158. //create record in the db
  159. if (is_uuid($record['fax_uuid']) && is_uuid($record['fax_file_uuid'])) {
  160. $sql = "insert into v_fax_files ";
  161. $sql .= "( ";
  162. $sql .= "fax_file_uuid, ";
  163. $sql .= "fax_uuid, ";
  164. $sql .= "domain_uuid, ";
  165. $sql .= "fax_mode, ";
  166. $sql .= "fax_destination, ";
  167. $sql .= "fax_file_type, ";
  168. $sql .= "fax_file_path, ";
  169. $sql .= "fax_caller_id_name, ";
  170. $sql .= "fax_caller_id_number, ";
  171. $sql .= "fax_date, ";
  172. $sql .= "fax_epoch ";
  173. $sql .= ") ";
  174. $sql .= "values ";
  175. $sql .= "( ";
  176. $sql .= "'".$record['fax_file_uuid']."', ";
  177. $sql .= "'".$record['fax_uuid']."', ";
  178. $sql .= "'".$domain_uuid."', ";
  179. $sql .= "'".$record['fax_mode']."', ";
  180. $sql .= "'".$record['fax_destination']."', ";
  181. $sql .= "'".$record['fax_file_type']."', ";
  182. $sql .= "'".$record['fax_file_path']."', ";
  183. $sql .= "'".$record['fax_caller_id_name']."', ";
  184. $sql .= "'".$record['fax_caller_id_number']."', ";
  185. $sql .= "'".$record['fax_date']."', ";
  186. $sql .= "'".$record['fax_epoch']."' ";
  187. $sql .= ") ";
  188. //echo $sql;
  189. try {
  190. $db->exec($sql);
  191. }
  192. catch (Exception $e) {
  193. echo 'Caught exception: ', $e->getMessage(), "\n";
  194. }
  195. }
  196. echo $fax_ext.", ".strtoupper($fax_box).", ".$fax_file.(($html) ? "<br>" : null)."\n";
  197. unset($record);
  198. } //if
  199. } //foreach
  200. } //foreach
  201. echo (($html) ? "<br>" : null)."\nImport complete.".(($html) ? "<br><br><br>" : null)."\n\n\n";
  202. ?>