From c34fbe9b4ecf1377741ae9530042ecb42a3cfd2c Mon Sep 17 00:00:00 2001 From: Nate Date: Tue, 26 Nov 2019 13:50:24 -0700 Subject: [PATCH] Modules: List view updates. --- app/gateways/gateways.php | 4 +- app/modules/app_languages.php | 122 +- app/modules/modules.php | 327 ++-- app/modules/resources/classes/modules.php | 1813 ++++++++++++--------- themes/default/template.php | 38 +- 5 files changed, 1359 insertions(+), 945 deletions(-) diff --git a/app/gateways/gateways.php b/app/gateways/gateways.php index 0a05a0e1af..d5b8f9b12e 100644 --- a/app/gateways/gateways.php +++ b/app/gateways/gateways.php @@ -306,7 +306,6 @@ echo " "; echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-action-start'],'title'=>$text['button-start'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('start'); list_form_submit('form_list')"]); echo " \n"; -// echo " ".$text['label-action-start']."\n"; } echo "  \n"; } @@ -320,11 +319,10 @@ echo " "; echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-action-stop'],'title'=>$text['button-stop'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('stop'); list_form_submit('form_list')"]); echo " \n"; -// echo " ".$text['label-action-stop']."\n"; } echo " ".escape($state)."\n"; //REGED, NOREG, UNREGED } - catch(Exception $e) { + catch (Exception $e) { //echo $e->getMessage(); } } diff --git a/app/modules/app_languages.php b/app/modules/app_languages.php index ced02f3ea5..29333794ca 100644 --- a/app/modules/app_languages.php +++ b/app/modules/app_languages.php @@ -61,26 +61,6 @@ $text['title-module_add']['ru-ru'] = "Добавить Модуль"; $text['title-module_add']['sv-se'] = "Lägg Till Modul"; $text['title-module_add']['uk-ua'] = "Додавання модуля"; -$text['label-unload_module']['en-us'] = "Unload Module"; -$text['label-unload_module']['ar-eg'] = ""; -$text['label-unload_module']['de-at'] = "Modul deaktivieren"; //copied from de-de -$text['label-unload_module']['de-ch'] = "Modul deaktivieren"; //copied from de-de -$text['label-unload_module']['de-de'] = "Modul deaktivieren"; -$text['label-unload_module']['es-cl'] = "Descargar Módulo"; -$text['label-unload_module']['es-mx'] = "Descargar Módulo"; //copied from es-cl -$text['label-unload_module']['fr-ca'] = "Décharger le Module"; //copied from fr-fr -$text['label-unload_module']['fr-fr'] = "Décharger le Module"; -$text['label-unload_module']['he-il'] = ""; -$text['label-unload_module']['it-it'] = "Disattiva Modulo"; -$text['label-unload_module']['nl-nl'] = "Module uitzetten"; -$text['label-unload_module']['pl-pl'] = "Wyłącz moduł"; -$text['label-unload_module']['pt-br'] = "Desativar Módulo"; -$text['label-unload_module']['pt-pt'] = "Desactivar Módulo"; -$text['label-unload_module']['ro-ro'] = ""; -$text['label-unload_module']['ru-ru'] = "Выгрузка Модулей"; -$text['label-unload_module']['sv-se'] = "Ladda av Modul"; -$text['label-unload_module']['uk-ua'] = "Вивантажити модуль"; - $text['label-unknown']['en-us'] = "Unknown"; $text['label-unknown']['ar-eg'] = ""; $text['label-unknown']['de-at'] = "Unbekannt"; //copied from de-de @@ -281,26 +261,6 @@ $text['label-message']['ru-ru'] = "Уведомление"; $text['label-message']['sv-se'] = "Meddelande"; $text['label-message']['uk-ua'] = "Повідомлення"; -$text['label-load_module']['en-us'] = "Load Module"; -$text['label-load_module']['ar-eg'] = ""; -$text['label-load_module']['de-at'] = "Modul laden"; //copied from de-de -$text['label-load_module']['de-ch'] = "Modul laden"; //copied from de-de -$text['label-load_module']['de-de'] = "Modul laden"; -$text['label-load_module']['es-cl'] = "Cargar Módulo"; -$text['label-load_module']['es-mx'] = "Cargar Módulo"; //copied from es-cl -$text['label-load_module']['fr-ca'] = "charger le Module"; //copied from fr-fr -$text['label-load_module']['fr-fr'] = "charger le Module"; -$text['label-load_module']['he-il'] = ""; -$text['label-load_module']['it-it'] = "Attivare Modulo"; -$text['label-load_module']['nl-nl'] = "Module laden"; -$text['label-load_module']['pl-pl'] = "Włącz moduł"; -$text['label-load_module']['pt-br'] = "Carregar Módulo"; //copied from pt-pt -$text['label-load_module']['pt-pt'] = "Carregar Módulo"; -$text['label-load_module']['ro-ro'] = ""; -$text['label-load_module']['ru-ru'] = "Загрузка Модулей"; -$text['label-load_module']['sv-se'] = "Ladda Modul"; -$text['label-load_module']['uk-ua'] = "Завантажити модуль"; - $text['label-label']['en-us'] = "Label"; $text['label-label']['ar-eg'] = ""; $text['label-label']['de-at'] = "Kennzeichnung"; //copied from de-de @@ -461,4 +421,84 @@ $text['error-event-socket']['ru-ru'] = "Подключение к сокету $text['error-event-socket']['sv-se'] = "Kontakten till 'Event Socket' misslyckades."; $text['error-event-socket']['uk-ua'] = "Помилка підключення до сокета подій"; -?> +$text['message-module_started']['en-us'] = "Module(s) Started"; +$text['message-module_started']['ar-eg'] = ""; +$text['message-module_started']['de-at'] = "Modul laden"; //copied from de-de +$text['message-module_started']['de-ch'] = "Modul laden"; //copied from de-de +$text['message-module_started']['de-de'] = "Modul laden"; +$text['message-module_started']['es-cl'] = "Cargar Módulo"; +$text['message-module_started']['es-mx'] = "Cargar Módulo"; //copied from es-cl +$text['message-module_started']['fr-ca'] = "charger le Module"; //copied from fr-fr +$text['message-module_started']['fr-fr'] = "charger le Module"; +$text['message-module_started']['he-il'] = ""; +$text['message-module_started']['it-it'] = "Attivare Modulo"; +$text['message-module_started']['nl-nl'] = "Module laden"; +$text['message-module_started']['pl-pl'] = "Włącz moduł"; +$text['message-module_started']['pt-br'] = "Carregar Módulo"; //copied from pt-pt +$text['message-module_started']['pt-pt'] = "Carregar Módulo"; +$text['message-module_started']['ro-ro'] = ""; +$text['message-module_started']['ru-ru'] = "Загрузка Модулей"; +$text['message-module_started']['sv-se'] = "Ladda Modul"; +$text['message-module_started']['uk-ua'] = "Завантажити модуль"; + +$text['message-module_stopped']['en-us'] = "Module(s) Stopped"; +$text['message-module_stopped']['ar-eg'] = ""; +$text['message-module_stopped']['de-at'] = "Modul deaktivieren"; //copied from de-de +$text['message-module_stopped']['de-ch'] = "Modul deaktivieren"; //copied from de-de +$text['message-module_stopped']['de-de'] = "Modul deaktivieren"; +$text['message-module_stopped']['es-cl'] = "Descargar Módulo"; +$text['message-module_stopped']['es-mx'] = "Descargar Módulo"; //copied from es-cl +$text['message-module_stopped']['fr-ca'] = "Décharger le Module"; //copied from fr-fr +$text['message-module_stopped']['fr-fr'] = "Décharger le Module"; +$text['message-module_stopped']['he-il'] = ""; +$text['message-module_stopped']['it-it'] = "Disattiva Modulo"; +$text['message-module_stopped']['nl-nl'] = "Module uitzetten"; +$text['message-module_stopped']['pl-pl'] = "Wyłącz moduł"; +$text['message-module_stopped']['pt-br'] = "Desativar Módulo"; +$text['message-module_stopped']['pt-pt'] = "Desactivar Módulo"; +$text['message-module_stopped']['ro-ro'] = ""; +$text['message-module_stopped']['ru-ru'] = "Выгрузка Модулей"; +$text['message-module_stopped']['sv-se'] = "Ladda av Modul"; +$text['message-module_stopped']['uk-ua'] = "Вивантажити модуль"; + +$text['confirm-start_modules']['en-us'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['ar-eg'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['de-at'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['de-ch'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['de-de'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['es-cl'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['es-mx'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['fr-ca'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['fr-fr'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['he-il'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['it-it'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['nl-nl'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['pl-pl'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['pt-br'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['pt-pt'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['ro-ro'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['ru-ru'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['sv-se'] = "Are you sure you wish to START these modules?"; +$text['confirm-start_modules']['uk-ua'] = "Are you sure you wish to START these modules?"; + +$text['confirm-stop_modules']['en-us'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['ar-eg'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['de-at'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['de-ch'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['de-de'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['es-cl'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['es-mx'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['fr-ca'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['fr-fr'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['he-il'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['it-it'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['nl-nl'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['pl-pl'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['pt-br'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['pt-pt'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['ro-ro'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['ru-ru'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['sv-se'] = "Are you sure you wish to STOP these modules?"; +$text['confirm-stop_modules']['uk-ua'] = "Are you sure you wish to STOP these modules?"; + +?> \ No newline at end of file diff --git a/app/modules/modules.php b/app/modules/modules.php index fab42325a5..d87d5ff872 100644 --- a/app/modules/modules.php +++ b/app/modules/modules.php @@ -28,6 +28,7 @@ include "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; + require_once "resources/paging.php"; //check permissions if (permission_exists('module_view')) { @@ -42,58 +43,70 @@ $language = new text; $text = $language->get(); -//get includes and the title - require_once "resources/header.php"; - $document['title'] = $text['title-modules']; - require_once "resources/paging.php"; +//get posted data + if (is_array($_POST['modules'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $modules = $_POST['modules']; + } -//get the http values ans set as variables - $order_by = $_GET["order_by"]; - $order = $_GET["order"]; +//toggle the modules + if (permission_exists('module_edit')) { + if ($action == 'toggle' && is_array($modules) && @sizeof($modules) != 0) { + //toggle + $obj = new modules; + $obj->toggle($modules); + //redirect + header('Location: modules.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } -//start or stop a module +//delete the modules + if (permission_exists('module_delete')) { + if ($action == 'delete' && is_array($modules) && @sizeof($modules) != 0) { + //delete + $obj = new modules; + $obj->delete($modules); + //redirect + header('Location: modules.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//connect to event socket $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - if (strlen($_GET["a"]) > 0) { - if ($_GET["a"] == "stop") { - $module_name = $_GET["m"]; - if ($fp) { - $cmd = "api unload $module_name"; - $response = trim(event_socket_request($fp, $cmd)); - $msg = "".$text['label-unload_module'].":
".$response."
"; - } + +//control the modules + if ($fp && is_array($modules) && @sizeof($modules) != 0) { + if ($action == 'start') { + //start + $obj = new modules; + $obj->start($modules); + //redirect + header('Location: modules.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; } - if ($_GET["a"] == "start") { - $module_name = $_GET["m"]; - if ($fp) { - $cmd = "api load $module_name"; - $response = trim(event_socket_request($fp, $cmd)); - $msg = "".$text['label-load_module'].":
".$response."
"; - } + if ($action == 'stop') { + //stop + $obj = new modules; + $obj->stop($modules); + //redirect + header('Location: modules.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; } - header('Location: modules.php'); - exit; } //check connection status $esl_alive = false; - if($fp){ + if ($fp) { $esl_alive = true; fclose($fp); } -//Warning if FS not start - if(!$esl_alive){ - $msg = "
".$text['error-event-socket']."
"; - echo "
\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
".$text['label-message']."
$msg
\n"; - echo "
\n"; +//warn if switch not running + if (!$fp) { + message::add($text['error-event-socket'], 'negative', 5000); } //use the module class to get the list of modules from the db and add any missing modules @@ -101,155 +114,169 @@ $module->db = $db; $module->dir = $_SESSION['switch']['mod']['dir']; $module->get_modules(); - $result = $module->modules; - $module_count = count($result); + $modules = $module->modules; + $module_count = count($modules); $module->synch(); $module->xml(); $msg = $module->msg; //show the msg if ($msg) { - echo "
\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
".$text['label-message']."
$msg
\n"; - echo "
\n"; + message::add($msg, 'negative', 5000); } +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); + +//get includes and the title + $document['title'] = $text['title-modules']; + require_once "resources/header.php"; + //show the content - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
".$text['header-modules']."
".$text['description-modules']."
\n"; + echo "
\n"; + echo "
".$text['header-modules']." (".$module_count.")
\n"; + echo "
\n"; + if (permission_exists('module_edit') && $modules && $fp) { + echo button::create(['type'=>'button','label'=>$text['button-stop'],'icon'=>$_SESSION['theme']['button_icon_stop'],'onclick'=>"if (confirm('".$text['confirm-stop_modules']."')) { list_action_set('stop'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + echo button::create(['type'=>'button','label'=>$text['button-start'],'icon'=>$_SESSION['theme']['button_icon_start'],'onclick'=>"if (confirm('".$text['confirm-start_modules']."')) { list_action_set('start'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + echo button::create(['type'=>'button','label'=>$text['button-refresh'],'icon'=>$_SESSION['theme']['button_icon_refresh'],'style'=>'margin-right: 15px;','link'=>'modules.php']); + if (permission_exists('module_add')) { + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'link'=>'module_edit.php']); + } + if (permission_exists('module_edit') && $modules) { + echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'onclick'=>"if (confirm('".$text['confirm-toggle']."')) { list_action_set('toggle'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + if (permission_exists('module_delete') && $modules) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'onclick'=>"if (confirm('".$text['confirm-delete']."')) { list_action_set('delete'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + echo "
\n"; + echo "
\n"; + echo "
\n"; - $c = 0; - $row_style["0"] = "row_style0"; - $row_style["1"] = "row_style1"; + echo $text['description-modules']."\n"; + echo "

\n"; - echo "\n"; - $tmp_module_header = "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; - $tmp_module_header .= "\n"; + echo "\n"; + echo "\n"; + echo "\n"; - if ($module_count > 0) { - $prev_module_category = ''; - foreach($result as $row) { - if ($prev_module_category != $row["module_category"]) { - $c=0; - if (strlen($prev_module_category) > 0) { + echo "
".$text['label-label']."".$text['label-status']."".$text['label-action']."".$text['label-enabled']."".$text['label-description'].""; - $tmp_module_header .= "$v_link_label_add"; - $tmp_module_header .= "
\n"; + function write_header($modifier) { + global $fp, $text, $modules; + $modifier = str_replace('/', '', $modifier); + $modifier = str_replace(' ', ' ', $modifier); + $modifier = str_replace(' ', '_', $modifier); + $modifier = strtolower(trim($modifier)); + echo "\n"; + echo "\n"; + if (permission_exists('module_edit') || permission_exists('module_delete')) { + echo " \n"; + } + echo "\n"; + echo "\n"; + if ($fp) { + echo "\n"; + } + echo "\n"; + echo "\n"; + if (permission_exists('module_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo "\n"; + } + echo "\n"; + } + if (is_array($modules) && @sizeof($modules) != 0) { + $previous_category = ''; + foreach ($modules as $x => $row) { + //write category and column headings + if ($previous_category != $row["module_category"]) { echo "\n"; - echo "\n"; echo "\n"; + write_header($row["module_category"]); } - echo "\n"; - echo $tmp_module_header; - } - - $tr_link = (permission_exists('module_edit')) ? "href='module_edit.php?id=".escape($row["module_uuid"])."'" : null; - echo "\n"; - echo " \n"; + if (permission_exists('module_edit') || permission_exists('module_delete')) { + $modifier = strtolower(trim($row["module_category"])); + $modifier = str_replace('/', '', $modifier); + $modifier = str_replace(' ', ' ', $modifier); + $modifier = str_replace(' ', '_', $modifier); + echo " \n"; + } + echo " \n"; - if($esl_alive) { + if ($fp) { if ($module->active($row["module_name"])) { - echo " \n"; - echo " \n"; + echo " \n"; + if (permission_exists('module_edit')) { + echo " \n"; + } } else { - if ($row['module_enabled']=="true") { - echo " \n"; + echo " \n"; + if (permission_exists('module_edit')) { + echo " \n"; } - else { - echo " \n"; - } - echo " \n"; } } else{ - echo " \n"; - echo " \n"; + echo " \n"; } - echo " \n"; - echo " \n"; - echo " \n"; + echo " \n"; + if (permission_exists('module_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; } - echo "\n"; echo "\n"; - $prev_module_category = $row["module_category"]; - $c = $c ? 0 : 1; + $previous_category = $row["module_category"]; + + $x++; } - unset($sql, $modules, $row_count); } + unset($modules); - echo "\n"; - echo "\n"; - echo "\n"; + echo "
\n"; + echo " \n"; + echo " ".$text['label-label']."".$text['label-status']."".$text['label-action']."".$text['label-enabled']."".$text['label-description']." 
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
  \n"; - if (permission_exists('module_add')) { - echo " $v_link_label_add\n"; - } - echo "
\n"; + echo "
\n"; - echo "
\n"; - echo "
\n"; - echo " ".$row["module_category"]." 
"; if (permission_exists('module_edit')) { - echo "".escape($row["module_label"]).""; + $list_row_url = "module_edit.php?id=".urlencode($row['module_uuid']); + } + echo "
\n"; + echo " \n"; + echo " \n"; + echo " "; + if (permission_exists('module_edit')) { + echo "".escape($row['module_label']).""; } else { - echo $row["module_label"]; + echo escape($row['module_label']); } echo " ".$text['label-running']."".$text['label-stop']."".$text['label-running']."".$text['label-stopped']."\n"; + echo $row['module_enabled'] == 'true' ? "".$text['label-stopped']."" : $text['label-stopped']." ".escape($notice); + echo " ".$text['label-stopped']." ".escape($notice)."".$text['label-start']."".$text['label-unknown']."".$text['label-none']."".$text['label-unknown'].""; - if ($row["module_enabled"] == "true") { - echo $text['option-true']; - } - else if ($row["module_enabled"] == "false") { - echo $text['option-false']; - } - echo "".escape($row["module_description"])." "; if (permission_exists('module_edit')) { - echo "$v_link_label_edit"; + echo " "; + echo $text['label-'.$row['module_enabled']]; + } + echo " ".escape($row["module_description"])." "; + echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]); + echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
 $paging_controls"; - if (permission_exists('module_add')) { - echo "$v_link_label_add"; - } - echo "
\n"; - echo "
\n"; + echo "
\n"; - echo ""; - echo "

"; + echo "\n"; -//show the footer + echo "\n"; + +//include the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file diff --git a/app/modules/resources/classes/modules.php b/app/modules/resources/classes/modules.php index 88e11c5cd7..b22e80b3b0 100644 --- a/app/modules/resources/classes/modules.php +++ b/app/modules/resources/classes/modules.php @@ -1,781 +1,1116 @@ - Copyright (C) 2010 - 2016 - All Rights Reserved. + The Initial Developer of the Original Code is + Mark J Crane + Portions created by the Initial Developer are Copyright (C) 2008-2019 + the Initial Developer. All Rights Reserved. - Contributor(s): - Mark J Crane + Contributor(s): + Mark J Crane */ -include "root.php"; //define the modules class -class modules { - //define the variables +if (!class_exists('modules')) { + class modules { + + /** + * declare public variables + */ public $dir; public $fp; public $modules; public $msg; - //get the additional information about a specific module - public function info($name) { - $module_label = substr($name, 4); - $module_label = ucwords(str_replace("_", " ", $module_label)); - $mod['module_label'] = $module_label; - $mod['module_name'] = $name; - $mod['module_order'] = '800'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - $mod['module_description'] = ''; - switch ($name) { - case "mod_amr": - $mod['module_label'] = 'AMR'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'AMR codec.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_avmd": - $mod['module_label'] = 'AVMD'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Advanced voicemail beep detection.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_blacklist": - $mod['module_label'] = 'Blacklist'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Blacklist.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_bv": - $mod['module_label'] = 'BV'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'BroadVoice16 and BroadVoice32 audio codecs.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_cdr_csv": - $mod['module_label'] = 'CDR CSV'; - $mod['module_category'] = 'Event Handlers'; - $mod['module_description'] = 'CSV call detail record handler.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_cdr_sqlite": - $mod['module_label'] = 'CDR SQLite'; - $mod['module_category'] = 'Event Handlers'; - $mod['module_description'] = 'SQLite call detail record handler.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_callcenter": - $mod['module_label'] = 'Call Center'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Call queuing with agents and tiers for call centers.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_cepstral": - $mod['module_label'] = 'Cepstral'; - $mod['module_category'] = 'Speech Recognition / Text to Speech'; - $mod['module_description'] = 'Text to Speech engine.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_cidlookup": - $mod['module_label'] = 'CID Lookup'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Lookup caller id info.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_cluechoo": - $mod['module_label'] = 'Cluechoo'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'A framework demo module.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_commands": - $mod['module_label'] = 'Commands'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'API interface commands.'; - $mod['module_order'] = 100; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_conference": - $mod['module_label'] = 'Conference'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Conference room module.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_console": - $mod['module_label'] = 'Console'; - $mod['module_category'] = 'Loggers'; - $mod['module_description'] = 'Send logs to the console.'; - $mod['module_order'] = 400; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_curl": - $mod['module_label'] = 'CURL'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Allows scripts to make HTTP requests and return responses in plain text or JSON.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_db": - $mod['module_label'] = 'DB'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Database key / value storage functionality, dialing and limit backend.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_dialplan_asterisk": - $mod['module_label'] = 'Dialplan Asterisk'; - $mod['module_category'] = 'Dialplan Interfaces'; - $mod['module_description'] = 'Allows Asterisk dialplans.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_dialplan_xml": - $mod['module_label'] = 'Dialplan XML'; - $mod['module_category'] = 'Dialplan Interfaces'; - $mod['module_description'] = 'Provides dialplan functionality in XML.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_directory": - $mod['module_label'] = 'Directory'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Dial by name directory.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_distributor": - $mod['module_label'] = 'Distributor'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Round robin call distribution.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_dptools": - $mod['module_label'] = 'Dialplan Plan Tools'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Provides a number of apps and utilities for the dialplan.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_enum": - $mod['module_label'] = 'ENUM'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Route PSTN numbers over internet according to ENUM servers, such as e164.org.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_esf": - $mod['module_label'] = 'ESF'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Holds the multi cast paging application for SIP.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_event_socket": - $mod['module_label'] = 'Event Socket'; - $mod['module_category'] = 'Event Handlers'; - $mod['module_description'] = 'Sends events via a single socket.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_expr": - $mod['module_label'] = 'Expr'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Expression evaluation library.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_fifo": - $mod['module_label'] = 'FIFO'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'FIFO provides custom call queues including call park.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_flite": - $mod['module_label'] = 'Flite'; - $mod['module_category'] = 'Speech Recognition / Text to Speech'; - $mod['module_description'] = 'Text to Speech engine.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_fsv": - $mod['module_label'] = 'FSV'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Video application (Recording and playback).'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_g723_1": - $mod['module_label'] = 'G.723.1'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'G.723.1 codec.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_g729": - $mod['module_label'] = 'G.729'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'G729 codec supports passthrough mode'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_h26x": - $mod['module_label'] = 'H26x'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'Video codecs'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_hash": - $mod['module_label'] = 'Hash'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Resource limitation.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_httapi": - $mod['module_label'] = 'HT-TAPI'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'HT-TAPI Hypertext Telephony API'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_http_cache": - $mod['module_label'] = 'HTTP Cache'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'HTTP GET with caching'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_ilbc": - $mod['module_label'] = 'iLBC'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'iLBC codec.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_ladspa": - $mod['module_label'] = 'Ladspa'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Auto-tune calls.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_lcr": - $mod['module_label'] = 'LCR'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Least cost routing.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_local_stream": - $mod['module_label'] = 'Local Stream'; - $mod['module_category'] = 'Streams / Files'; - $mod['module_description'] = 'For local streams (play all the files in a directory).'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_logfile": - $mod['module_label'] = 'Log File'; - $mod['module_category'] = 'Loggers'; - $mod['module_description'] = 'Send logs to the local file system.'; - $mod['module_order'] = 400; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_loopback": - $mod['module_label'] = 'Loopback'; - $mod['module_category'] = 'Endpoints'; - $mod['module_description'] = 'A loopback channel driver to make an outbound call as an inbound call.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_lua": - $mod['module_label'] = 'Lua'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'Lua script.'; - $mod['module_order'] = 200; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_memcache": - $mod['module_label'] = 'Memcached'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'API for memcached.'; - $mod['module_enabled'] = 'true'; - $mod['module_order'] = 150; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_native_file": - $mod['module_label'] = 'Native File'; - $mod['module_category'] = 'File Format Interfaces'; - $mod['module_description'] = 'File interface for codec specific file formats.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_nibblebill": - $mod['module_label'] = 'Nibblebill'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Billing module.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_opus": - $mod['module_label'] = 'Opus'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'OPUS ultra-low delay audio codec'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_park": - $mod['module_label'] = 'Park'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Park Calls.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_pocketsphinx": - $mod['module_label'] = 'PocketSphinx'; - $mod['module_category'] = 'Speech Recognition / Text to Speech'; - $mod['module_description'] = 'Speech Recognition.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_rtmp": - $mod['module_label'] = 'RTMP'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Real Time Media Protocol'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_de": - $mod['module_label'] = 'German'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_en": - $mod['module_label'] = 'English'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_es": - $mod['module_label'] = 'Spanish'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_fr": - $mod['module_label'] = 'French'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_he": - $mod['module_label'] = 'Hebrew'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_hu": - $mod['module_label'] = 'Hungarian'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_it": - $mod['module_label'] = 'Italian'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_nl": - $mod['module_label'] = 'Dutch'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_pt": - $mod['module_label'] = 'Portuguese'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_ru": - $mod['module_label'] = 'Russian'; - $mod['module_category'] = 'Say'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_th": - $mod['module_label'] = 'Thai'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_say_zh": - $mod['module_label'] = 'Chinese'; - $mod['module_category'] = 'Say'; - $mod['module_description'] = ''; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_shout": - $mod['module_label'] = 'Shout'; - $mod['module_category'] = 'Streams / Files'; - $mod['module_description'] = 'MP3 files and shoutcast streams.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_siren": - $mod['module_label'] = 'Siren'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'Siren codec'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_sms": - $mod['module_label'] = 'SMS'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Chat messages'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_sndfile": - $mod['module_label'] = 'Sound File'; - $mod['module_category'] = 'File Format Interfaces'; - $mod['module_description'] = 'Multi-format file format transcoder (WAV, etc).'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_sofia": - $mod['module_label'] = 'Sofia'; - $mod['module_category'] = 'Endpoints'; - $mod['module_description'] = 'SIP module.'; - $mod['module_order'] = 300; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_spandsp": - $mod['module_label'] = 'SpanDSP'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'FAX provides fax send and receive.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_speex": - $mod['module_label'] = 'Speex'; - $mod['module_category'] = 'Codecs'; - $mod['module_description'] = 'Speex codec.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_spidermonkey": - $mod['module_label'] = 'SpiderMonkey'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'JavaScript support.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_spidermonkey_core_db": - $mod['module_label'] = 'SpiderMonkey Core DB'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'Javascript support for SQLite.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_spidermonkey_curl": - $mod['module_label'] = 'SpiderMonkey Curl'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'Javascript curl support.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_spidermonkey_socket": - $mod['module_label'] = 'SpiderMonkey Socket'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'Javascript socket support.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_spidermonkey_teletone": - $mod['module_label'] = 'SpiderMonkey Teletone'; - $mod['module_category'] = 'Languages'; - $mod['module_description'] = 'Javascript teletone support.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_syslog": - $mod['module_label'] = 'Syslog'; - $mod['module_category'] = 'Loggers'; - $mod['module_description'] = 'Send logs to a remote syslog server.'; - $mod['module_order'] = 400; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_tone_stream": - $mod['module_label'] = 'Tone Stream'; - $mod['module_category'] = 'Streams / Files'; - $mod['module_description'] = 'Generate tone streams.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_tts_commandline": - $mod['module_label'] = 'TTS Commandline'; - $mod['module_category'] = 'Speech Recognition / Text to Speech'; - $mod['module_description'] = 'Commandline text to speech engine.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_unimrcp": - $mod['module_label'] = 'MRCP'; - $mod['module_category'] = 'Speech Recognition / Text to Speech'; - $mod['module_description'] = 'Media Resource Control Protocol.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_valet_parking": - $mod['module_label'] = 'Valet Parking'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Call parking'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_voicemail": - $mod['module_label'] = 'Voicemail'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Full featured voicemail module.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_voicemail_ivr": - $mod['module_label'] = 'Voicemail IVR'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'Voicemail IVR interface.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_translate": - $mod['module_label'] = 'Translate'; - $mod['module_category'] = 'Applications'; - $mod['module_description'] = 'format numbers into a specified format.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_xml_cdr": - $mod['module_label'] = 'XML CDR'; - $mod['module_category'] = 'XML Interfaces'; - $mod['module_description'] = 'XML based call detail record handler.'; - $mod['module_enabled'] = 'true'; - $mod['module_default_enabled'] = 'true'; - break; - case "mod_xml_curl": - $mod['module_label'] = 'XML Curl'; - $mod['module_category'] = 'XML Interfaces'; - $mod['module_description'] = 'Request XML config files dynamically.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - case "mod_xml_rpc": - $mod['module_label'] = 'XML RPC'; - $mod['module_category'] = 'XML Interfaces'; - $mod['module_description'] = 'XML Remote Procedure Calls. Issue commands from your web application.'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - break; - default: - $mod['module_category'] = 'Auto'; - $mod['module_enabled'] = 'false'; - $mod['module_default_enabled'] = 'false'; - } - return $mod; + /** + * declare private variables + */ + private $app_name; + private $app_uuid; + private $permission_prefix; + private $list_page; + private $table; + private $uuid_prefix; + private $toggle_field; + private $toggle_values; + + /** + * called when the object is created + */ + public function __construct() { + + //assign private variables + $this->app_name = 'modules'; + $this->app_uuid = '5eb9cba1-8cb6-5d21-e36a-775475f16b5e'; + $this->permission_prefix = 'module_'; + $this->list_page = 'modules.php'; + $this->table = 'modules'; + $this->uuid_prefix = 'module_'; + $this->toggle_field = 'module_enabled'; + $this->toggle_values = ['true','false']; + } - //check to see if the module exists in the array - public function exists($name) { - //set the default - $result = false; - //look for the module - foreach ($this->modules as &$row) { - if ($row['module_name'] == $name) { - $result = true; + /** + * called when there are no references to a particular object + * unset the variables used in the class + */ + public function __destruct() { + foreach ($this as $key => $value) { + unset($this->$key); + } + } + + //get the additional information about a specific module + public function info($name) { + $module_label = substr($name, 4); + $module_label = ucwords(str_replace("_", " ", $module_label)); + $mod['module_label'] = $module_label; + $mod['module_name'] = $name; + $mod['module_order'] = '800'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + $mod['module_description'] = ''; + switch ($name) { + case "mod_amr": + $mod['module_label'] = 'AMR'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'AMR codec.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; break; - } + case "mod_avmd": + $mod['module_label'] = 'AVMD'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Advanced voicemail beep detection.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_blacklist": + $mod['module_label'] = 'Blacklist'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Blacklist.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_bv": + $mod['module_label'] = 'BV'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'BroadVoice16 and BroadVoice32 audio codecs.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_cdr_csv": + $mod['module_label'] = 'CDR CSV'; + $mod['module_category'] = 'Event Handlers'; + $mod['module_description'] = 'CSV call detail record handler.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_cdr_sqlite": + $mod['module_label'] = 'CDR SQLite'; + $mod['module_category'] = 'Event Handlers'; + $mod['module_description'] = 'SQLite call detail record handler.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_callcenter": + $mod['module_label'] = 'Call Center'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Call queuing with agents and tiers for call centers.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_cepstral": + $mod['module_label'] = 'Cepstral'; + $mod['module_category'] = 'Speech Recognition / Text to Speech'; + $mod['module_description'] = 'Text to Speech engine.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_cidlookup": + $mod['module_label'] = 'CID Lookup'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Lookup caller id info.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_cluechoo": + $mod['module_label'] = 'Cluechoo'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'A framework demo module.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_commands": + $mod['module_label'] = 'Commands'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'API interface commands.'; + $mod['module_order'] = 100; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_conference": + $mod['module_label'] = 'Conference'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Conference room module.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_console": + $mod['module_label'] = 'Console'; + $mod['module_category'] = 'Loggers'; + $mod['module_description'] = 'Send logs to the console.'; + $mod['module_order'] = 400; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_curl": + $mod['module_label'] = 'CURL'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Allows scripts to make HTTP requests and return responses in plain text or JSON.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_db": + $mod['module_label'] = 'DB'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Database key / value storage functionality, dialing and limit backend.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_dialplan_asterisk": + $mod['module_label'] = 'Dialplan Asterisk'; + $mod['module_category'] = 'Dialplan Interfaces'; + $mod['module_description'] = 'Allows Asterisk dialplans.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_dialplan_xml": + $mod['module_label'] = 'Dialplan XML'; + $mod['module_category'] = 'Dialplan Interfaces'; + $mod['module_description'] = 'Provides dialplan functionality in XML.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_directory": + $mod['module_label'] = 'Directory'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Dial by name directory.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_distributor": + $mod['module_label'] = 'Distributor'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Round robin call distribution.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_dptools": + $mod['module_label'] = 'Dialplan Plan Tools'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Provides a number of apps and utilities for the dialplan.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_enum": + $mod['module_label'] = 'ENUM'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Route PSTN numbers over internet according to ENUM servers, such as e164.org.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_esf": + $mod['module_label'] = 'ESF'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Holds the multi cast paging application for SIP.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_event_socket": + $mod['module_label'] = 'Event Socket'; + $mod['module_category'] = 'Event Handlers'; + $mod['module_description'] = 'Sends events via a single socket.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_expr": + $mod['module_label'] = 'Expr'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Expression evaluation library.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_fifo": + $mod['module_label'] = 'FIFO'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'FIFO provides custom call queues including call park.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_flite": + $mod['module_label'] = 'Flite'; + $mod['module_category'] = 'Speech Recognition / Text to Speech'; + $mod['module_description'] = 'Text to Speech engine.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_fsv": + $mod['module_label'] = 'FSV'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Video application (Recording and playback).'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_g723_1": + $mod['module_label'] = 'G.723.1'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'G.723.1 codec.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_g729": + $mod['module_label'] = 'G.729'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'G729 codec supports passthrough mode'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_h26x": + $mod['module_label'] = 'H26x'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'Video codecs'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_hash": + $mod['module_label'] = 'Hash'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Resource limitation.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_httapi": + $mod['module_label'] = 'HT-TAPI'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'HT-TAPI Hypertext Telephony API'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_http_cache": + $mod['module_label'] = 'HTTP Cache'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'HTTP GET with caching'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_ilbc": + $mod['module_label'] = 'iLBC'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'iLBC codec.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_ladspa": + $mod['module_label'] = 'Ladspa'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Auto-tune calls.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_lcr": + $mod['module_label'] = 'LCR'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Least cost routing.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_local_stream": + $mod['module_label'] = 'Local Stream'; + $mod['module_category'] = 'Streams / Files'; + $mod['module_description'] = 'For local streams (play all the files in a directory).'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_logfile": + $mod['module_label'] = 'Log File'; + $mod['module_category'] = 'Loggers'; + $mod['module_description'] = 'Send logs to the local file system.'; + $mod['module_order'] = 400; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_loopback": + $mod['module_label'] = 'Loopback'; + $mod['module_category'] = 'Endpoints'; + $mod['module_description'] = 'A loopback channel driver to make an outbound call as an inbound call.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_lua": + $mod['module_label'] = 'Lua'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'Lua script.'; + $mod['module_order'] = 200; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_memcache": + $mod['module_label'] = 'Memcached'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'API for memcached.'; + $mod['module_enabled'] = 'true'; + $mod['module_order'] = 150; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_native_file": + $mod['module_label'] = 'Native File'; + $mod['module_category'] = 'File Format Interfaces'; + $mod['module_description'] = 'File interface for codec specific file formats.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_nibblebill": + $mod['module_label'] = 'Nibblebill'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Billing module.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_opus": + $mod['module_label'] = 'Opus'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'OPUS ultra-low delay audio codec'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_park": + $mod['module_label'] = 'Park'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Park Calls.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_pocketsphinx": + $mod['module_label'] = 'PocketSphinx'; + $mod['module_category'] = 'Speech Recognition / Text to Speech'; + $mod['module_description'] = 'Speech Recognition.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_rtmp": + $mod['module_label'] = 'RTMP'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Real Time Media Protocol'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_de": + $mod['module_label'] = 'German'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_en": + $mod['module_label'] = 'English'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_es": + $mod['module_label'] = 'Spanish'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_fr": + $mod['module_label'] = 'French'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_he": + $mod['module_label'] = 'Hebrew'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_hu": + $mod['module_label'] = 'Hungarian'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_it": + $mod['module_label'] = 'Italian'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_nl": + $mod['module_label'] = 'Dutch'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_pt": + $mod['module_label'] = 'Portuguese'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_ru": + $mod['module_label'] = 'Russian'; + $mod['module_category'] = 'Say'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_th": + $mod['module_label'] = 'Thai'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_say_zh": + $mod['module_label'] = 'Chinese'; + $mod['module_category'] = 'Say'; + $mod['module_description'] = ''; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_shout": + $mod['module_label'] = 'Shout'; + $mod['module_category'] = 'Streams / Files'; + $mod['module_description'] = 'MP3 files and shoutcast streams.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_siren": + $mod['module_label'] = 'Siren'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'Siren codec'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_sms": + $mod['module_label'] = 'SMS'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Chat messages'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_sndfile": + $mod['module_label'] = 'Sound File'; + $mod['module_category'] = 'File Format Interfaces'; + $mod['module_description'] = 'Multi-format file format transcoder (WAV, etc).'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_sofia": + $mod['module_label'] = 'Sofia'; + $mod['module_category'] = 'Endpoints'; + $mod['module_description'] = 'SIP module.'; + $mod['module_order'] = 300; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_spandsp": + $mod['module_label'] = 'SpanDSP'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'FAX provides fax send and receive.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_speex": + $mod['module_label'] = 'Speex'; + $mod['module_category'] = 'Codecs'; + $mod['module_description'] = 'Speex codec.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_spidermonkey": + $mod['module_label'] = 'SpiderMonkey'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'JavaScript support.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_spidermonkey_core_db": + $mod['module_label'] = 'SpiderMonkey Core DB'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'Javascript support for SQLite.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_spidermonkey_curl": + $mod['module_label'] = 'SpiderMonkey Curl'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'Javascript curl support.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_spidermonkey_socket": + $mod['module_label'] = 'SpiderMonkey Socket'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'Javascript socket support.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_spidermonkey_teletone": + $mod['module_label'] = 'SpiderMonkey Teletone'; + $mod['module_category'] = 'Languages'; + $mod['module_description'] = 'Javascript teletone support.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_syslog": + $mod['module_label'] = 'Syslog'; + $mod['module_category'] = 'Loggers'; + $mod['module_description'] = 'Send logs to a remote syslog server.'; + $mod['module_order'] = 400; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_tone_stream": + $mod['module_label'] = 'Tone Stream'; + $mod['module_category'] = 'Streams / Files'; + $mod['module_description'] = 'Generate tone streams.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_tts_commandline": + $mod['module_label'] = 'TTS Commandline'; + $mod['module_category'] = 'Speech Recognition / Text to Speech'; + $mod['module_description'] = 'Commandline text to speech engine.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_unimrcp": + $mod['module_label'] = 'MRCP'; + $mod['module_category'] = 'Speech Recognition / Text to Speech'; + $mod['module_description'] = 'Media Resource Control Protocol.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_valet_parking": + $mod['module_label'] = 'Valet Parking'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Call parking'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_voicemail": + $mod['module_label'] = 'Voicemail'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Full featured voicemail module.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_voicemail_ivr": + $mod['module_label'] = 'Voicemail IVR'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'Voicemail IVR interface.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_translate": + $mod['module_label'] = 'Translate'; + $mod['module_category'] = 'Applications'; + $mod['module_description'] = 'format numbers into a specified format.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_xml_cdr": + $mod['module_label'] = 'XML CDR'; + $mod['module_category'] = 'XML Interfaces'; + $mod['module_description'] = 'XML based call detail record handler.'; + $mod['module_enabled'] = 'true'; + $mod['module_default_enabled'] = 'true'; + break; + case "mod_xml_curl": + $mod['module_label'] = 'XML Curl'; + $mod['module_category'] = 'XML Interfaces'; + $mod['module_description'] = 'Request XML config files dynamically.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + case "mod_xml_rpc": + $mod['module_label'] = 'XML RPC'; + $mod['module_category'] = 'XML Interfaces'; + $mod['module_description'] = 'XML Remote Procedure Calls. Issue commands from your web application.'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; + break; + default: + $mod['module_category'] = 'Auto'; + $mod['module_enabled'] = 'false'; + $mod['module_default_enabled'] = 'false'; } - //return the result - return $result; - } - - //check the status of the module - public function active($name) { - if (!$this->fp) { - $this->fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + return $mod; } - if ($this->fp) { - $cmd = "api module_exists ".$name; - $response = trim(event_socket_request($this->fp, $cmd)); - return $response == "true" ? true : false; - } - else { - return false; - } - } - //get the list of modules - public function get_modules() { - $sql = " select * from v_modules "; - $sql .= "order by module_category, module_label"; - $database = new database; - $this->modules = $database->select($sql, null, 'all'); - unset($sql); - } - - //add missing modules for more module info see http://wiki.freeswitch.com/wiki/Modules - public function synch() { - if ($handle = opendir($this->dir)) { - $modules_new = ''; - $module_found = false; - $x = 0; - while (false !== ($file = readdir($handle))) { - if ($file != "." && $file != "..") { - if (substr($file, -3) == ".so" || substr($file, -4) == ".dll") { - if (substr($file, -3) == ".so") { - $name = substr($file, 0, -3); - } - if (substr($file, -4) == ".dll") { - $name = substr($file, 0, -4); - } - if (!$this->exists($name)) { - //set module found to true - $module_found = true; - //get the module array - $mod = $this->info($name); - //append the module label - $modules_new .= "
  • ".$mod['module_label']."
  • \n"; - //set the order - $order = $mod['module_order']; - //build insert array - $array['modules'][$x]['module_uuid'] = uuid(); - $array['modules'][$x]['module_label'] = $mod['module_label']; - $array['modules'][$x]['module_name'] = $mod['module_name']; - $array['modules'][$x]['module_description'] = $mod['module_description']; - $array['modules'][$x]['module_category'] = $mod['module_category']; - $array['modules'][$x]['module_order'] = $order; - $array['modules'][$x]['module_enabled'] = $mod['module_enabled']; - $array['modules'][$x]['module_default_enabled'] = $mod['module_default_enabled']; - $x++; - } + //check to see if the module exists in the array + public function exists($name) { + //set the default + $result = false; + //look for the module + foreach ($this->modules as &$row) { + if ($row['module_name'] == $name) { + $result = true; + break; } } + //return the result + return $result; + } + + //check the status of the module + public function active($name) { + if (!$this->fp) { + $this->fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); } - if (is_array($array) && @sizeof($array) != 0) { - //grant temporary permissions - $p = new permissions; - $p->add('module_add', 'temp'); - //execute insert - $database = new database; - $database->app_name = 'modules'; - $database->app_uuid = '5eb9cba1-8cb6-5d21-e36a-775475f16b5e'; - $database->save($array); - unset($array); - //revoke temporary permissions - $p->delete('module_add', 'temp'); + if ($this->fp) { + $cmd = "api module_exists ".$name; + $response = trim(event_socket_request($this->fp, $cmd)); + return $response == "true" ? true : false; } - closedir($handle); - if ($module_found) { - $msg = "Added New Modules:
    \n"; - $msg .= "
      \n"; - $msg .= $modules_new; - $msg .= "
    \n"; - $this->msg = $msg; + else { + return false; } } - } - //save the modules.conf.xml file - function xml() { - //set the globals - global $config, $domain_uuid; - - //compose xml - $xml = "\n"; - $xml .= " \n"; - - $sql = "select * from v_modules "; - $sql .= "order by module_order asc, "; - $sql .= "module_category asc "; + //get the list of modules + public function get_modules() { + $sql = " select * from v_modules "; + $sql .= "order by module_category, module_label"; $database = new database; - $result = $database->select($sql, null, 'all'); + $this->modules = $database->select($sql, null, 'all'); unset($sql); + } - $prev_module_cat = ''; - if (is_array($result) && @sizeof($result) != 0) { - foreach ($result as $row) { - if ($prev_module_cat != $row['module_category']) { - $xml .= "\n \n"; + //add missing modules for more module info see http://wiki.freeswitch.com/wiki/Modules + public function synch() { + if ($handle = opendir($this->dir)) { + $modules_new = ''; + $module_found = false; + $x = 0; + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") { + if (substr($file, -3) == ".so" || substr($file, -4) == ".dll") { + if (substr($file, -3) == ".so") { + $name = substr($file, 0, -3); + } + if (substr($file, -4) == ".dll") { + $name = substr($file, 0, -4); + } + if (!$this->exists($name)) { + //set module found to true + $module_found = true; + //get the module array + $mod = $this->info($name); + //append the module label + $modules_new .= "
  • ".$mod['module_label']."
  • \n"; + //set the order + $order = $mod['module_order']; + //build insert array + $array['modules'][$x]['module_uuid'] = uuid(); + $array['modules'][$x]['module_label'] = $mod['module_label']; + $array['modules'][$x]['module_name'] = $mod['module_name']; + $array['modules'][$x]['module_description'] = $mod['module_description']; + $array['modules'][$x]['module_category'] = $mod['module_category']; + $array['modules'][$x]['module_order'] = $order; + $array['modules'][$x]['module_enabled'] = $mod['module_enabled']; + $array['modules'][$x]['module_default_enabled'] = $mod['module_default_enabled']; + $x++; + } + } } - if ($row['module_enabled'] == "true"){ - $xml .= " \n"; - } - $prev_module_cat = $row['module_category']; + } + if (is_array($array) && @sizeof($array) != 0) { + //grant temporary permissions + $p = new permissions; + $p->add('module_add', 'temp'); + //execute insert + $database = new database; + $database->app_name = 'modules'; + $database->app_uuid = '5eb9cba1-8cb6-5d21-e36a-775475f16b5e'; + $database->save($array); + unset($array); + //revoke temporary permissions + $p->delete('module_add', 'temp'); + } + closedir($handle); + if ($module_found) { + $msg = "Added New Modules:
    \n"; + $msg .= "
      \n"; + $msg .= $modules_new; + $msg .= "
    \n"; + $this->msg = $msg; } } - unset($result, $row); + } - $xml .= "\n"; - $xml .= "
    \n"; - $xml .= "
    "; + //save the modules.conf.xml file + function xml() { + //set the globals + global $config, $domain_uuid; - $fout = fopen($_SESSION['switch']['conf']['dir']."/autoload_configs/modules.conf.xml","w"); - fwrite($fout, $xml); - unset($xml); - fclose($fout); + //compose xml + $xml = "\n"; + $xml .= " \n"; - //apply settings - $_SESSION["reload_xml"] = true; + $sql = "select * from v_modules "; + $sql .= "order by module_order asc, "; + $sql .= "module_category asc "; + $database = new database; + $result = $database->select($sql, null, 'all'); + unset($sql); + + $prev_module_cat = ''; + if (is_array($result) && @sizeof($result) != 0) { + foreach ($result as $row) { + if ($prev_module_cat != $row['module_category']) { + $xml .= "\n \n"; + } + if ($row['module_enabled'] == "true"){ + $xml .= " \n"; + } + $prev_module_cat = $row['module_category']; + } + } + unset($result, $row); + + $xml .= "\n"; + $xml .= " \n"; + $xml .= ""; + + $fout = fopen($_SESSION['switch']['conf']['dir']."/autoload_configs/modules.conf.xml","w"); + fwrite($fout, $xml); + unset($xml); + fclose($fout); + + //apply settings + $_SESSION["reload_xml"] = true; + } + + /** + * start modules + */ + public function start($records) { + $this->control('start', $records); } + /** + * start modules + */ + public function stop($records) { + $this->control('stop', $records); + } + + /** + * control (load/unload) modules + */ + private function control($action, $records) { + if (permission_exists($this->permission_prefix.'edit')) { + + //set local variables + switch ($action) { + case 'start': + $action = 'load'; + $response_message = 'message-module_started'; + break; + case 'stop': + $action = 'unload'; + $response_message = 'message-module_stopped'; + break; + default: + exit; + } + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->list_page); + exit; + } + + //control the checked modules + if (is_array($records) && @sizeof($records) != 0) { + + //filter out unchecked modules, build where clause for below + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + + //get module details + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select ".$this->uuid_prefix."uuid as uuid, module_name as module, module_enabled as enabled from v_".$this->table." "; + $sql .= "where ( ".implode(' or ', $record_uuids)." ) "; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $row) { + $modules[$row['uuid']]['name'] = $row['module']; + $modules[$row['uuid']]['enabled'] = $row['enabled']; + } + } + unset($sql, $parameters, $rows, $row); + } + + if (is_array($modules) && @sizeof($modules) != 0) { + //create the event socket connection + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + + if ($fp) { + //control modules + foreach ($modules as $module_uuid => $module) { + if ($module['enabled'] == 'true') { + $cmd = 'api '.$action.' '.$module['name']; + $responses[$module_uuid]['module'] = $module['name']; + $responses[$module_uuid]['message'] = trim(event_socket_request($fp, $cmd)); + } + else { + $responses[$module_uuid]['module'] = $module['name']; + $responses[$module_uuid]['message'] = $text['label-disabled']; + } + } + + //set message + $message = $text[$response_message]; + if (is_array($responses) && @sizeof($responses) != 0) { + foreach ($responses as $response) { + $message .= "
    ".$response['module'].": ".$response['message']; + } + } + message::add($message, 'positive', 7000); + } + } + } + + } + } + + /** + * delete modules + */ + private function delete($records) { + if (permission_exists($this->permission_prefix.'edit')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->list_page); + exit; + } + + //delete the checked modules + if (is_array($records) && @sizeof($records) != 0) { + + //filter out unchecked modules, build where clause for below + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + + //get module details + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select ".$this->uuid_prefix."uuid as uuid, module_name as module from v_".$this->table." "; + $sql .= "where ( ".implode(' or ', $record_uuids)." ) "; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $row) { + $modules[$row['uuid']]['name'] = $row['module']; + } + } + unset($sql, $parameters, $rows, $row); + } + + //build the delete array + $x = 0; + if (is_array($modules) && @sizeof($modules) != 0) { + foreach ($modules as $module_uuid => $module) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $module_uuid; + $x++; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //create the event socket connection + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + + //stop modules + if ($fp) { + foreach ($modules as $module_uuid => $module) { + if ($module['enabled'] == 'true') { + $cmd = 'api unload '.$module['name']; + $responses[$module_uuid]['module'] = $module['name']; + $responses[$module_uuid]['message'] = trim(event_socket_request($fp, $cmd)); + } + } + } + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //rewrite mod + $this->xml(); + + //set message + $message = $text['message-delete']; + if (is_array($responses) && @sizeof($responses) != 0) { + foreach ($responses as $response) { + $message .= "
    ".$response['module'].": ".$response['message']; + } + } + message::add($message, 'positive', 7000); + + } + } + + } + } + + /** + * toggle records + */ + public function toggle($records) { + if (permission_exists($this->permission_prefix.'edit')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->list_page); + exit; + } + + //toggle the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get current toggle state + foreach($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select ".$this->uuid_prefix."uuid as uuid, ".$this->toggle_field." as state, module_name as name from v_".$this->table." "; + $sql .= "where ( ".implode(' or ', $record_uuids)." ) "; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $row) { + $modules[$row['uuid']]['state'] = $row['state']; + $modules[$row['uuid']]['name'] = $row['name']; + } + } + unset($sql, $parameters, $rows, $row); + } + + //build update array + $x = 0; + if (is_array($modules) && @sizeof($modules) != 0) { + foreach($modules as $uuid => $module) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid; + $array[$this->table][$x][$this->toggle_field] = $module['state'] == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0]; + $x++; + } + } + + //save the changes + if (is_array($array) && @sizeof($array) != 0) { + + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //create the event socket connection + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + + //stop modules if active + if ($fp) { + foreach ($modules as $module_uuid => $module) { + if ($this->active($module['name'])) { + $cmd = 'api unload '.$module['name']; + $responses[$module_uuid]['module'] = $module['name']; + $responses[$module_uuid]['message'] = trim(event_socket_request($fp, $cmd)); + } + } + } + + //rewrite mod + $this->xml(); + + //set message + $message = $text['message-toggle']; + if (is_array($responses) && @sizeof($responses) != 0) { + foreach ($responses as $response) { + $message .= "
    ".$response['module'].": ".$response['message']; + } + } + message::add($message, 'positive', 7000); + + } + unset($records, $modules); + } + + } + } //method + + + } //class } /* diff --git a/themes/default/template.php b/themes/default/template.php index 7625a70daa..09c9796c0f 100644 --- a/themes/default/template.php +++ b/themes/default/template.php @@ -411,21 +411,35 @@ echo "