switch_settings.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. /**
  3. * switch_settings class provides access methods related to FreeSWITCH
  4. *
  5. * @method settings will add missing switch directories to default settings
  6. */
  7. if (!class_exists('switch_settings')) {
  8. class switch_settings {
  9. public $event_socket_ip_address;
  10. public $event_socket_port;
  11. public $event_socket_password;
  12. /**
  13. * Called when the object is created
  14. */
  15. public function __construct() {
  16. }
  17. /**
  18. * settings Set switch directories in default settings
  19. */
  20. public function settings() {
  21. //define the variables
  22. if (!isset($this->event_socket_ip_address)) {
  23. if (!empty($_SESSION['event_socket_ip_address'])) {
  24. $this->event_socket_ip_address = $_SESSION['event_socket_ip_address'];
  25. }
  26. else {
  27. $this->event_socket_ip_address = '127.0.0.1';
  28. }
  29. }
  30. if (!isset($this->event_socket_port)) {
  31. if (!empty($_SESSION['event_socket_port'])) {
  32. $this->event_socket_port = $_SESSION['event_socket_port'];
  33. }
  34. else {
  35. $this->event_socket_port = '8021';
  36. }
  37. }
  38. if (!isset($this->event_socket_password)) {
  39. if (!empty($_SESSION['event_socket_password'])) {
  40. $this->event_socket_password = $_SESSION['event_socket_password'];
  41. }
  42. else {
  43. $this->event_socket_password = 'ClueCon';
  44. }
  45. }
  46. //connect to event socket
  47. $esl = event_socket::create($this->event_socket_ip_address, $this->event_socket_port, $this->event_socket_password);
  48. //run the api command
  49. $result = $esl->request('api global_getvar');
  50. //set the result as a named array
  51. $vars = array();
  52. foreach (explode("\n", $result) as $row) {
  53. $a = explode("=", $row);
  54. if (substr($a[0], -4) == "_dir") {
  55. $vars[$a[0]] = $a[1];
  56. }
  57. }
  58. //set defaults
  59. $vars['base_dir'] = $vars['base_dir'] ?? '';
  60. $vars['conf_dir'] = $vars['conf_dir'] ?? '';
  61. $vars['db_dir'] = $vars['db_dir'] ?? '';
  62. $vars['recordings_dir'] = $vars['recordings_dir'] ?? '';
  63. $vars['script_dir'] = $vars['script_dir'] ?? '';
  64. $vars['sounds_dir'] = $vars['sounds_dir'] ?? '';
  65. $vars['storage_dir'] = $vars['storage_dir'] ?? '';
  66. $vars['grammar_dir'] = $vars['grammar_dir'] ?? '';
  67. $vars['log_dir'] = $vars['log_dir'] ?? '';
  68. $vars['mod_dir'] = $vars['mod_dir'] ?? '';
  69. //set the bin directory
  70. if ($vars['base_dir'] == "/usr/local/freeswitch") {
  71. $bin = '/usr/local/freeswitch/bin';
  72. }
  73. else {
  74. $bin = '';
  75. }
  76. //create the default settings array
  77. $x=0;
  78. $array[$x]['default_setting_category'] = 'switch';
  79. $array[$x]['default_setting_subcategory'] = 'bin';
  80. $array[$x]['default_setting_name'] = 'dir';
  81. $array[$x]['default_setting_value'] = $bin;
  82. $array[$x]['default_setting_enabled'] = 'true';
  83. $array[$x]['default_setting_description'] = '';
  84. $x++;
  85. $array[$x]['default_setting_category'] = 'switch';
  86. $array[$x]['default_setting_subcategory'] = 'base';
  87. $array[$x]['default_setting_name'] = 'dir';
  88. $array[$x]['default_setting_value'] = $vars['base_dir'];
  89. $array[$x]['default_setting_enabled'] = 'true';
  90. $array[$x]['default_setting_description'] = '';
  91. $x++;
  92. $array[$x]['default_setting_category'] = 'switch';
  93. $array[$x]['default_setting_subcategory'] = 'call_center';
  94. $array[$x]['default_setting_name'] = 'dir';
  95. $array[$x]['default_setting_value'] = $vars['conf_dir'].'/autoload_configs';
  96. $array[$x]['default_setting_enabled'] = 'false';
  97. $array[$x]['default_setting_description'] = '';
  98. $x++;
  99. $array[$x]['default_setting_category'] = 'switch';
  100. $array[$x]['default_setting_subcategory'] = 'conf';
  101. $array[$x]['default_setting_name'] = 'dir';
  102. $array[$x]['default_setting_value'] = $vars['conf_dir'];
  103. $array[$x]['default_setting_enabled'] = 'true';
  104. $array[$x]['default_setting_description'] = '';
  105. $x++;
  106. $array[$x]['default_setting_category'] = 'switch';
  107. $array[$x]['default_setting_subcategory'] = 'db';
  108. $array[$x]['default_setting_name'] = 'dir';
  109. $array[$x]['default_setting_value'] = $vars['db_dir'];
  110. $array[$x]['default_setting_enabled'] = 'true';
  111. $array[$x]['default_setting_description'] = '';
  112. $x++;
  113. $array[$x]['default_setting_category'] = 'switch';
  114. $array[$x]['default_setting_subcategory'] = 'dialplan';
  115. $array[$x]['default_setting_name'] = 'dir';
  116. $array[$x]['default_setting_value'] = $vars['conf_dir'].'/dialplan';
  117. $array[$x]['default_setting_enabled'] = 'false';
  118. $array[$x]['default_setting_description'] = '';
  119. $x++;
  120. $array[$x]['default_setting_category'] = 'switch';
  121. $array[$x]['default_setting_subcategory'] = 'extensions';
  122. $array[$x]['default_setting_name'] = 'dir';
  123. $array[$x]['default_setting_value'] = $vars['conf_dir'].'/directory';
  124. $array[$x]['default_setting_enabled'] = 'false';
  125. $array[$x]['default_setting_description'] = '';
  126. $x++;
  127. $array[$x]['default_setting_category'] = 'switch';
  128. $array[$x]['default_setting_subcategory'] = 'grammar';
  129. $array[$x]['default_setting_name'] = 'dir';
  130. $array[$x]['default_setting_value'] = $vars['grammar_dir'];
  131. $array[$x]['default_setting_enabled'] = 'true';
  132. $array[$x]['default_setting_description'] = '';
  133. $x++;
  134. $array[$x]['default_setting_category'] = 'switch';
  135. $array[$x]['default_setting_subcategory'] = 'log';
  136. $array[$x]['default_setting_name'] = 'dir';
  137. $array[$x]['default_setting_value'] = $vars['log_dir'];
  138. $array[$x]['default_setting_enabled'] = 'true';
  139. $array[$x]['default_setting_description'] = '';
  140. $x++;
  141. $array[$x]['default_setting_category'] = 'switch';
  142. $array[$x]['default_setting_subcategory'] = 'mod';
  143. $array[$x]['default_setting_name'] = 'dir';
  144. $array[$x]['default_setting_value'] = $vars['mod_dir'];
  145. $array[$x]['default_setting_enabled'] = 'true';
  146. $array[$x]['default_setting_description'] = '';
  147. $x++;
  148. $array[$x]['default_setting_category'] = 'switch';
  149. $array[$x]['default_setting_subcategory'] = 'languages';
  150. $array[$x]['default_setting_name'] = 'dir';
  151. $array[$x]['default_setting_value'] = $vars['conf_dir'].'/languages';
  152. $array[$x]['default_setting_enabled'] = 'true';
  153. $array[$x]['default_setting_description'] = '';
  154. $x++;
  155. $array[$x]['default_setting_category'] = 'switch';
  156. $array[$x]['default_setting_subcategory'] = 'recordings';
  157. $array[$x]['default_setting_name'] = 'dir';
  158. $array[$x]['default_setting_value'] = $vars['recordings_dir'];
  159. $array[$x]['default_setting_enabled'] = 'true';
  160. $array[$x]['default_setting_description'] = '';
  161. $x++;
  162. $array[$x]['default_setting_category'] = 'switch';
  163. $array[$x]['default_setting_subcategory'] = 'scripts';
  164. $array[$x]['default_setting_name'] = 'dir';
  165. $array[$x]['default_setting_value'] = $vars['script_dir'];
  166. $array[$x]['default_setting_enabled'] = 'true';
  167. $array[$x]['default_setting_description'] = '';
  168. $x++;
  169. $array[$x]['default_setting_category'] = 'switch';
  170. $array[$x]['default_setting_subcategory'] = 'sip_profiles';
  171. $array[$x]['default_setting_name'] = 'dir';
  172. $array[$x]['default_setting_value'] = $vars['conf_dir'].'/sip_profiles';
  173. $array[$x]['default_setting_enabled'] = 'false';
  174. $array[$x]['default_setting_description'] = '';
  175. $x++;
  176. $array[$x]['default_setting_category'] = 'switch';
  177. $array[$x]['default_setting_subcategory'] = 'sounds';
  178. $array[$x]['default_setting_name'] = 'dir';
  179. $array[$x]['default_setting_value'] = $vars['sounds_dir'];
  180. $array[$x]['default_setting_enabled'] = 'true';
  181. $array[$x]['default_setting_description'] = '';
  182. $x++;
  183. $array[$x]['default_setting_category'] = 'switch';
  184. $array[$x]['default_setting_subcategory'] = 'storage';
  185. $array[$x]['default_setting_name'] = 'dir';
  186. $array[$x]['default_setting_value'] = $vars['storage_dir'];
  187. $array[$x]['default_setting_enabled'] = 'true';
  188. $array[$x]['default_setting_description'] = '';
  189. $x++;
  190. $array[$x]['default_setting_category'] = 'switch';
  191. $array[$x]['default_setting_subcategory'] = 'voicemail';
  192. $array[$x]['default_setting_name'] = 'dir';
  193. $array[$x]['default_setting_value'] = $vars['storage_dir'].'/voicemail';
  194. $array[$x]['default_setting_enabled'] = 'true';
  195. $array[$x]['default_setting_description'] = '';
  196. $x++;
  197. //get an array of the default settings
  198. $sql = "select * from v_default_settings ";
  199. $sql .= "where default_setting_category = 'switch' ";
  200. $database = new database;
  201. $default_settings = $database->select($sql, null, 'all');
  202. unset($sql);
  203. //find the missing default settings
  204. $x = 0;
  205. foreach ($array as $setting) {
  206. $found = false;
  207. $missing[$x] = $setting;
  208. foreach ($default_settings as $row) {
  209. if (trim($row['default_setting_subcategory']) == trim($setting['default_setting_subcategory'])) {
  210. $found = true;
  211. //remove items from the array that were found
  212. unset($missing[$x]);
  213. }
  214. }
  215. $x++;
  216. }
  217. unset($array);
  218. //add the missing default settings
  219. if (count($missing) > 0) {
  220. $i = 1;
  221. foreach ($missing as $row) {
  222. //build insert array
  223. $array['default_settings'][$i]['default_setting_uuid'] = uuid();
  224. $array['default_settings'][$i]['default_setting_category'] = $row['default_setting_category'];
  225. $array['default_settings'][$i]['default_setting_subcategory'] = $row['default_setting_subcategory'];
  226. $array['default_settings'][$i]['default_setting_name'] = $row['default_setting_name'];
  227. $array['default_settings'][$i]['default_setting_value'] = $row['default_setting_value'];
  228. $array['default_settings'][$i]['default_setting_enabled'] = $row['default_setting_enabled'];
  229. $array['default_settings'][$i]['default_setting_description'] = $row['default_setting_description'];
  230. //increment the row id
  231. $i++;
  232. }
  233. if (is_array($array) && @sizeof($array) != 0) {
  234. //grant temporary permissions
  235. $p = permissions::new();
  236. $p->add('default_setting_add', 'temp');
  237. //execute insert
  238. $database = new database;
  239. $database->app_name = 'switch_settings';
  240. $database->app_uuid = '84e91084-a227-43cd-ae99-a0f8ed61eb8b';
  241. $database->save($array);
  242. //revoke temporary permissions
  243. $p->delete('default_setting_add', 'temp');
  244. }
  245. unset($missing);
  246. }
  247. //set the default settings
  248. if (!empty($array) && is_array($array)) {
  249. foreach ($array as $row) {
  250. if (isset($row['default_setting_enabled']) && $row['default_setting_enabled'] == "true" && isset($row['default_setting_subcategory'])) {
  251. $_SESSION['switch'][$row['default_setting_subcategory']][$row['default_setting_name']] = $row['default_setting_value'] ?? '';
  252. }
  253. }
  254. }
  255. //unset the array variable
  256. unset($array);
  257. }
  258. }
  259. }
  260. ?>