diff --git a/Sccp_manager.inc/aminterface/Event.class.php b/SccpManClasses/amInterfaceClasses/Event.class.php similarity index 100% rename from Sccp_manager.inc/aminterface/Event.class.php rename to SccpManClasses/amInterfaceClasses/Event.class.php diff --git a/Sccp_manager.inc/aminterface/Message.class.php b/SccpManClasses/amInterfaceClasses/Message.class.php similarity index 100% rename from Sccp_manager.inc/aminterface/Message.class.php rename to SccpManClasses/amInterfaceClasses/Message.class.php diff --git a/Sccp_manager.inc/aminterface/Response.class.php b/SccpManClasses/amInterfaceClasses/Response.class.php similarity index 100% rename from Sccp_manager.inc/aminterface/Response.class.php rename to SccpManClasses/amInterfaceClasses/Response.class.php diff --git a/Sccp_manager.inc/aminterface.class.php b/SccpManClasses/aminterface.class.php similarity index 99% rename from Sccp_manager.inc/aminterface.class.php rename to SccpManClasses/aminterface.class.php index d09e776..b34c911 100644 --- a/Sccp_manager.inc/aminterface.class.php +++ b/SccpManClasses/aminterface.class.php @@ -36,10 +36,10 @@ class aminterface ); foreach ($drivers as $key => $value) { $class = $driverNamespace . "\\" . $key; - $driver = __DIR__ . "/aminterface/" . $value; + $driver = __DIR__ . "/amInterfaceClasses/" . $value; if (!class_exists($class, false)) { if (file_exists($driver)) { - include(__DIR__ . "/aminterface/" . $value); + include(__DIR__ . "/amInterfaceClasses/" . $value); } else { throw new \Exception("Class required but file not found " . $driver); } diff --git a/Sccp_manager.inc/dbinterface.class.php b/SccpManClasses/dbinterface.class.php similarity index 100% rename from Sccp_manager.inc/dbinterface.class.php rename to SccpManClasses/dbinterface.class.php diff --git a/Sccp_manager.inc/extconfigs.class.php b/SccpManClasses/extconfigs.class.php similarity index 100% rename from Sccp_manager.inc/extconfigs.class.php rename to SccpManClasses/extconfigs.class.php diff --git a/Sccp_manager.inc/sipconfigs.class.php b/SccpManClasses/sipconfigs.class.php similarity index 100% rename from Sccp_manager.inc/sipconfigs.class.php rename to SccpManClasses/sipconfigs.class.php diff --git a/Sccp_manager.inc/xmlinterface.class.php b/SccpManClasses/xmlinterface.class.php similarity index 100% rename from Sccp_manager.inc/xmlinterface.class.php rename to SccpManClasses/xmlinterface.class.php diff --git a/SccpManTraits/ajaxHelper.php b/SccpManTraits/ajaxHelper.php new file mode 100644 index 0000000..e8607af --- /dev/null +++ b/SccpManTraits/ajaxHelper.php @@ -0,0 +1,384 @@ +initializeTFtpLanguagePath(); + } + $this->handleSubmit($request); + // $this->saveSccpSettings(); + //$this->createDefaultSccpConfig(); + $this->createDefaultSccpXml(); + + $res = $this->aminterface->core_sccp_reload(); + $msg [] = 'Config Saved: ' . $res['Response']; + $msg [] = 'Info :' . $res['data']; + // !TODO!: It is necessary in the future to check, and replace all server responses on correct messages. Use _(msg) + return array('status' => true, 'message' => $msg, 'reload' => true); + break; + case 'save_sip_hardware': + case 'save_hardware': + $this->saveSccpDevice($request); + return array('status' => true, 'search' => '?display=sccp_phone', 'hash' => 'sccpdevice'); + + break; + case 'save_ruser': + //$res = $request; + $res = $this->handleRoamingUsers($request); + return array('status' => true, 'search' => '?display=sccp_phone', 'hash' => 'general'); + break; + case 'save_dialplan_template': + /* !TODO!: -TODO-: dialplan templates should be removed (only required for very old devices (like ATA) */ + // ------------------------------- Old + Sip device support - In the development--- + $res = $this->saveDialPlan($request); + //public + if (empty($res)) { + return array('status' => true, 'search' => '?display=sccp_adv', 'hash' => 'sccpdialplan'); + } else { + return array('status' => false, 'message' => print_r($res)); + } + break; + case 'delete_dialplan': + if (!empty($request['dialplan'])) { + $get_file = $request['dialplan']; + $res = $this->deleteDialPlan($get_file); + return array('status' => true, 'message' => 'Dial Template has been deleted ! ', 'table_reload' => true); + } else { + return array('status' => false, 'message' => print_r($res)); + } + break; + // ------------------------------- Old device support - In the development--- + case 'delete_hardware': + if (!empty($request['idn'])) { + foreach ($request['idn'] as $idv) { + if ($this->strpos_array($idv, array('SEP', 'ATA', 'VG')) !== false) { + $this->dbinterface->write('sccpdevice', array('name' => $idv), 'delete', "name"); + $this->dbinterface->write('sccpbuttons', array(), 'delete', '', $idv); + $this->deleteSccpDeviceXML($idv); // Концы в вводу !! + $this->aminterface->sccpDeviceReset($idv, 'reset'); + } + } + return array('status' => true, 'table_reload' => true, 'message' => 'Hardware device has been deleted! '); + } + break; + case 'create_hw_tftp': + $ver_id = ' Test !'; + if (!empty($request['idn'])) { + $models = array(); + foreach ($request['idn'] as $idv) { + $this->deleteSccpDeviceXML($idv); + $models [] = array('name' => $idv); + } + } else { + $this->deleteSccpDeviceXML('all'); + $models = $this->dbinterface->HWextension_db_SccpTableData("SccpDevice"); + } + + $this->createDefaultSccpXml(); // Default XML + $ver_id = ' on found active model !'; + foreach ($models as $data) { + $ver_id = $this->createSccpDeviceXML($data['name']); + if ($ver_id == -1) { + return array('status' => false, 'message' => 'Error Create Configuration Divice :' . $data['name']); + } + }; + + if ($this->sccpvalues['siptftp']['data'] == 'on') { // Check SIP Support Enabled + $this->createSccpXmlSoftkey(); // Create Softkey Sets for SIP + } + // !TODO!: -TODO-: Do these returned message strings work with i18n ? + return array('status' => true, 'message' => 'Create new config files (version:' . $ver_id . ')'); + + break; + case 'reset_token': + case 'reset_dev': + $msg = ''; + $msgr = array(); + $msgr[] = 'Reset command send'; + if (!empty($request['name'])) { + foreach ($request['name'] as $idv) { + $msg = strpos($idv, 'SEP-'); + if (!(strpos($idv, 'SEP') === false)) { + if ($cmd_id == 'reset_token') { + $res = $this->aminterface->sccpDeviceReset($idv, 'tokenack'); + $msgr[] = $msg . ' ' . $res['Response'] . ' ' . $res['data']; + } else { + $res = $this->aminterface->sccpDeviceReset($idv, 'reset'); + $msgr[] = $msg . ' ' . $res['Response'] . ' ' . $res['data']; + } + } + if ($idv == 'all') { + $dev_list = $this->aminterface->sccp_get_active_device(); + foreach ($dev_list as $key => $data) { + if ($cmd_id == 'reset_token') { + if (($data['token'] == 'Rej') || ($data['status'] == 'Token ')) { + $res = $this->aminterface->sccpDeviceReset($idv, 'tokenack'); + $msgr[] = 'Send Token reset to :' . $key; + } + } else { + $res = $this->aminterface->sccpDeviceReset($idv, 'reset'); + $msgr[] = $res['Response'] . ' ' . $res['data']; + } + } + } + } + } + return array('status' => true, 'message' => $msgr, 'reload' => true); + break; + case 'update_button_label': + $msg = ''; + $hw_list = array(); + if (!empty($request['name'])) { + foreach ($request['name'] as $idv) { + if (!(strpos($idv, 'SEP') === false)) { + $hw_list[] = array('name' => $idv); + } + if ($idv == 'all') { + + } + } + } + $res = $this->updateSccpButtons($hw_list); + $msg .= $res['Response'] . ' raw: ' . $res['data'] . ' '; + return array('status' => true, 'message' => 'Update Butons Labels Complite ' . $msg, 'reload' => true); + case 'model_add': + $save_settings = array(); + $key_name = array('model', 'vendor', 'dns', 'buttons', 'loadimage', 'loadinformationid', 'nametemplate'); + $upd_mode = 'replace'; + case 'model_update': + if ($request['command'] == 'model_update') { + $key_name = array('model','vendor','dns', 'buttons', 'loadimage', 'loadinformationid', 'nametemplate'); + $upd_mode = 'update'; + } + if (!empty($request['model'])) { + foreach ($key_name as $key => $value) { + if (!empty($request[$value])) { + $save_settings[$value] = $request[$value]; + } else { + $save_settings[$value] = $this->val_null; // null + } + } + $this->dbinterface->write('sccpdevmodel', $save_settings, $upd_mode, "model"); + return array('status' => true, 'table_reload' => true); + } + return $save_settings; + break; + case 'model_enabled': + $model_set = '1'; // fall through intentionally + case 'model_disabled': + if ($request['command'] == 'model_disabled') { + $model_set = '0'; + } + $msg = ''; + $save_settings = array(); + if (!empty($request['model'])) { + foreach ($request['model'] as $idv) { + $this->dbinterface->write('sccpdevmodel', array('model' => $idv, 'enabled' => $model_set), 'update', "model"); + } + } + return array('status' => true, 'table_reload' => true); + break; + case 'model_delete': + if (!empty($request['model'])) { + $this->dbinterface->write('sccpdevmodel', array('model' => $request['model']), 'delete', "model"); + return array('status' => true, 'table_reload' => true); + } + break; + case 'getDeviceModel': + switch ($request['type']) { + case 'all': + case 'extension': + case 'enabled': + $devices = $this->getSccpModelInformation($request['type'], $validate = true); + break; + } + if (empty($devices)) { + return array(); + } + return $devices; + break; + + case 'deleteSoftKey': + if (!empty($request['softkey'])) { + $id_name = $request['softkey']; + unset($this->sccp_conf_init[$id_name]); + $this->createDefaultSccpConfig(); + $msg = print_r($this->aminterface->core_sccp_reload(), 1); + return array('status' => true, 'table_reload' => true); + } + break; + case 'updateSoftKey': + if (!empty($request['id'])) { + $id_name = preg_replace('/[^A-Za-z0-9]/', '', $request['id']); + $this->sccp_conf_init[$id_name]['type'] = "softkeyset"; + foreach ($this->extconfigs->getextConfig('keyset') as $keyl => $vall) { + if (!empty($request[$keyl])) { + $this->sccp_conf_init[$id_name][$keyl] = $request[$keyl]; + } + } + $this->createDefaultSccpConfig(); + + // !TODO!: -TODO-: Check SIP Support Enabled + $this->createSccpXmlSoftkey(); + $msg = print_r($this->aminterface->core_sccp_reload, 1); + return array('status' => true, 'table_reload' => true); + } + break; + case 'getSoftKey': + $result = array(); + $i = 0; + $keyl = 'default'; + foreach ($this->aminterface->sccp_list_keysets() as $keyl => $vall) { + $result[$i]['softkeys'] = $keyl; + if ($keyl == 'default') { + foreach ($this->extconfigs->getextConfig('keyset') as $key => $value) { + $result[$i][$key] = str_replace(',', '
', $value); + } + } else { + foreach ($this->getMyConfig('softkeyset', $keyl) as $key => $value) { + $result[$i][$key] = str_replace(',', '
', $value); + } + } + + $i++; + } + return $result; + break; + case 'getExtensionGrid': + $result = $this->dbinterface->HWextension_db_SccpTableData('SccpExtension'); + if (empty($result)) { + return array(); + } + return $result; + break; + case 'getPhoneGrid': + $cmd_type = !empty($request['type']) ? $request['type'] : ''; + + $result = $this->dbinterface->HWextension_db_SccpTableData('SccpDevice', array('type' => $cmd_type)); + if ($cmd_type == 'cisco-sip') { + return $result; + } + $staus = $this->aminterface->sccp_get_active_device(); + if (empty($result)) { + $result = array(); + } else { + foreach ($result as &$dev_id) { + $id_name = $dev_id['name']; + if (!empty($staus[$id_name])) { + $dev_id['description'] = $staus[$id_name]['descr']; + $dev_id['status'] = $staus[$id_name]['status']; + $dev_id['address'] = $staus[$id_name]['address']; + $dev_id['new_hw'] = 'N'; + $staus[$id_name]['news'] = 'N'; + } else { + $dev_id['description'] = '- -'; + $dev_id['status'] = 'not connected'; + $dev_id['address'] = '- -'; + } + } + } + if (!empty($staus)) { + foreach ($staus as $dev_ids) { + $id_name = $dev_ids['name']; + if (empty($dev_ids['news'])) { + $dev_data = $this->aminterface->sccp_getdevice_info($id_name); + if (!empty($dev_data['SCCP_Vendor']['model_id'])) { + $dev_addon = $dev_data['SCCP_Vendor']['model_addon']; + if (empty($dev_addon)) { + $dev_addon = null; + } + $dev_schema = $this->getSccpModelInformation('byciscoid', false, "all", array('model' => $dev_data['SCCP_Vendor']['model_id'])); + if (empty($dev_schema)) { + $dev_schema[0]['model'] = "ERROR in Model Schema"; + } + $result[] = array( + 'name' => $id_name, + 'mac' => $id_name, + 'button' => '---', + 'type' => $dev_schema[0]['model'], + 'new_hw' => 'Y', + 'description' => '*NEW* ' . $dev_ids['descr'], + 'status' => '*NEW* ' . $dev_ids['status'], + 'address' => $dev_ids['address'], + 'addon' => $dev_addon + ); + } + } + } + } + return $result; + break; + case 'getDialTemplate': + // ------------------------------- Old device support - In the development--- + $result = $this->getDialPlanList(); + if (empty($result)) { + $result = array(); + } + return $result; + break; + case 'backupsettings': + // ------------------------------- Old device support - In the development--- + $filename = $this->createSccpBackup(); + $file_name = basename($filename); + + header("Content-Type: application/zip"); + header("Content-Disposition: attachment; filename=$file_name"); + header("Content-Length: " . filesize($filename)); + + readfile($filename); + unlink($filename); + + // return array('status' => false, 'message' => $result); + return $result; + break; + } + } +} + +?> diff --git a/SccpManTraits/helperfunctions.php b/SccpManTraits/helperfunctions.php new file mode 100644 index 0000000..871f2c5 --- /dev/null +++ b/SccpManTraits/helperfunctions.php @@ -0,0 +1,124 @@ + $vals[1], 'type' => $vals[2], 'ip' => ((empty($ip[1]) ? '' : $ip[1]))); + } + return $interfaces; + } + + private function before($thing, $inthat) { + return substr($inthat, 0, strpos($inthat, $thing)); + } + + private function array_key_exists_recursive($key, $arr) { + if (array_key_exists($key, $arr)) { + return true; + } + foreach ($arr as $currentKey => $value) { + if (is_array($value)) { + return $this->array_key_exists_recursive($key, $value); + } + } + return false; + } + + private function strpos_array($haystack, $needles) { + if (is_array($needles)) { + foreach ($needles as $str) { + if (is_array($str)) { + $pos = $this->strpos_array($haystack, $str); + } else { + $pos = strpos($haystack, $str); + } + if ($pos !== FALSE) { + return $pos; + } + } + } else { + return strpos($haystack, $needles); + } + return FALSE; + } + + private function findAllFiles($dir, $file_mask = null, $mode = 'full') { + $result = null; + if (empty($dir) || (!file_exists($dir))) { + return $result; + } + + $root = scandir($dir); + foreach ($root as $value) { + if ($value === '.' || $value === '..') { + continue; + } + if (is_file("$dir/$value")) { + $filter = false; + if (!empty($file_mask)) { + if (is_array($file_mask)) { + foreach ($file_mask as $k) { + if (strpos(strtolower($value), strtolower($k)) !== false) { + $filter = true; + } + } + } else { + if (strpos(strtolower($value), strtolower($file_mask)) !== false) { + $filter = true; + } + } + } else { + $filter = true; + } + if ($filter) { + if ($mode == 'fileonly') { + $result[] = "$value"; + } else { + $result[] = "$dir/$value"; + } + } else { + $result[] = null; + } + continue; + } + $sub_fiend = $this->findAllFiles("$dir/$value", $file_mask, $mode); + if (!empty($sub_fiend)) { + foreach ($sub_fiend as $sub_value) { + if (!empty($sub_value)) { + $result[] = $sub_value; + } + } + } + } + return $result; + } +} +?> diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php index f5cb86b..2de50a9 100644 --- a/Sccp_manager.class.php +++ b/Sccp_manager.class.php @@ -86,23 +86,13 @@ namespace FreePBX\modules; class Sccp_manager extends \FreePBX_Helpers implements \BMO { /* Field Values for type seq */ - -// const General - sccp.conf = '0'; -// const General - sccp.conf[general] = '0'; -// const General - sccp.conf[%keyset%] = '5'; NAME space -// const General - sccp.conf[%keyset%] = '6'; data -// const General - default.xml = '10'; -// const General - template.xml = '20'; -// const General - system_path = '2'; -// const General - don't store = '99'; -// private $SCCP_LANG_DICTIONARY = 'SCCP-dictionary.xml'; // CISCO LANG file search in /tftp-path private $SCCP_LANG_DICTIONARY = 'be-sccp.jar'; // CISCO LANG file search in /tftp-path private $pagedata = null; private $sccp_driver_ver = '11.4'; // Ver fore SCCP.CLASS.PHP public $sccp_manager_ver = '14.0.0.2'; public $sccp_branch = 'm'; // Ver fore SCCP.CLASS.PHP private $tftpLang = array(); -// private $hint_context = '@ext-local'; /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Get it from Config !!! + private $hint_context = array('default' => '@ext-local'); /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Get it from Config !!! private $val_null = 'NONE'; /// REPLACE to null Field public $sccp_model_list = array(); @@ -115,6 +105,9 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { public $class_error; //error construct public $info_warning; + use \FreePBX\modules\Sccp_Manager\SccpManTraits\helperfunctions; + use \FreePBX\modules\Sccp_Manager\SccpManTraits\ajaxHelper; + public function __construct($freepbx = null) { if ($freepbx == null) { throw new Exception("Not given a FreePBX Object"); @@ -127,7 +120,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { // $this->v = new \Respect\Validation\Validator(); $driverNamespace = "\\FreePBX\\Modules\\Sccp_manager"; if (class_exists($driverNamespace, false)) { - foreach (glob(__DIR__ . "/Sccp_manager.inc/*.class.php") as $driver) { + foreach (glob(__DIR__ . "/SccpManClasses/*.class.php") as $driver) { if (preg_match("/\/([a-z1-9]*)\.class\.php$/i", $driver, $matches)) { $name = $matches[1]; $class = $driverNamespace . "\\" . $name; @@ -638,383 +631,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { } } - public function ajaxRequest($req, &$setting) { - // Called first by BMO. Must return true or request will be aborted. - // See https://wiki.freepbx.org/display/FOP/BMO+Ajax+Calls - switch ($req) { - case 'backupsettings': - case 'savesettings': - case 'save_hardware': - case 'save_sip_hardware': - case 'save_ruser': - case 'save_dialplan_template': - case 'delete_hardware': - case 'getPhoneGrid': - case 'getExtensionGrid': - case 'getDeviceModel': - case 'getUserGrid': - case 'getSoftKey': - case 'getDialTemplate': - case 'create_hw_tftp': - case 'reset_dev': - case 'reset_token': - case 'model_enabled': - case 'model_disabled': - case 'model_update': - case 'model_add': - case 'model_delete': - case 'update_button_label': - case 'updateSoftKey': - case 'deleteSoftKey': - case 'delete_dialplan': - return true; - break; - default: - return false; - } - } - - // !TODO!: this should go into it's only ajax.html.php file (see: dahdiconfig) - // ajaxHandler is called after ajaxRequest returns true - public function ajaxHandler() { - $request = $_REQUEST; - $msg = array(); - $cmd_id = $request['command']; - switch ($cmd_id) { - case 'savesettings': - $action = isset($request['sccp_createlangdir']) ? $request['sccp_createlangdir'] : ''; - if ($action == 'yes') { - $this->initializeTFtpLanguagePath(); - } - $this->handleSubmit($request); - // $this->saveSccpSettings(); - //$this->createDefaultSccpConfig(); - $this->createDefaultSccpXml(); - - $res = $this->aminterface->core_sccp_reload(); - $msg [] = 'Config Saved: ' . $res['Response']; - $msg [] = 'Info :' . $res['data']; - // !TODO!: It is necessary in the future to check, and replace all server responses on correct messages. Use _(msg) - return array('status' => true, 'message' => $msg, 'reload' => true); - break; - case 'save_sip_hardware': - case 'save_hardware': - $this->saveSccpDevice($request); - return array('status' => true, 'search' => '?display=sccp_phone', 'hash' => 'sccpdevice'); - - break; - case 'save_ruser': - //$res = $request; - $res = $this->handleRoamingUsers($request); - return array('status' => true, 'search' => '?display=sccp_phone', 'hash' => 'general'); - break; - case 'save_dialplan_template': - /* !TODO!: -TODO-: dialplan templates should be removed (only required for very old devices (like ATA) */ - // ------------------------------- Old + Sip device support - In the development--- - $res = $this->saveDialPlan($request); - //public - if (empty($res)) { - return array('status' => true, 'search' => '?display=sccp_adv', 'hash' => 'sccpdialplan'); - } else { - return array('status' => false, 'message' => print_r($res)); - } - break; - case 'delete_dialplan': - if (!empty($request['dialplan'])) { - $get_file = $request['dialplan']; - $res = $this->deleteDialPlan($get_file); - return array('status' => true, 'message' => 'Dial Template has been deleted ! ', 'table_reload' => true); - } else { - return array('status' => false, 'message' => print_r($res)); - } - break; - // ------------------------------- Old device support - In the development--- - case 'delete_hardware': - if (!empty($request['idn'])) { - foreach ($request['idn'] as $idv) { - if ($this->strpos_array($idv, array('SEP', 'ATA', 'VG')) !== false) { - $this->dbinterface->write('sccpdevice', array('name' => $idv), 'delete', "name"); - $this->dbinterface->write('sccpbuttons', array(), 'delete', '', $idv); - $this->deleteSccpDeviceXML($idv); // Концы в вводу !! - $this->aminterface->sccpDeviceReset($idv, 'reset'); - } - } - return array('status' => true, 'table_reload' => true, 'message' => 'Hardware device has been deleted! '); - } - break; - case 'create_hw_tftp': - $ver_id = ' Test !'; - if (!empty($request['idn'])) { - $models = array(); - foreach ($request['idn'] as $idv) { - $this->deleteSccpDeviceXML($idv); - $models [] = array('name' => $idv); - } - } else { - $this->deleteSccpDeviceXML('all'); - $models = $this->dbinterface->HWextension_db_SccpTableData("SccpDevice"); - } - - $this->createDefaultSccpXml(); // Default XML - $ver_id = ' on found active model !'; - foreach ($models as $data) { - $ver_id = $this->createSccpDeviceXML($data['name']); - if ($ver_id == -1) { - return array('status' => false, 'message' => 'Error Create Configuration Divice :' . $data['name']); - } - }; - - if ($this->sccpvalues['siptftp']['data'] == 'on') { // Check SIP Support Enabled - $this->createSccpXmlSoftkey(); // Create Softkey Sets for SIP - } - // !TODO!: -TODO-: Do these returned message strings work with i18n ? - return array('status' => true, 'message' => 'Create new config files (version:' . $ver_id . ')'); - - break; - case 'reset_token': - case 'reset_dev': - $msg = ''; - $msgr = array(); - $msgr[] = 'Reset command send'; - if (!empty($request['name'])) { - foreach ($request['name'] as $idv) { - $msg = strpos($idv, 'SEP-'); - if (!(strpos($idv, 'SEP') === false)) { - if ($cmd_id == 'reset_token') { - $res = $this->aminterface->sccpDeviceReset($idv, 'tokenack'); - $msgr[] = $msg . ' ' . $res['Response'] . ' ' . $res['data']; - } else { - $res = $this->aminterface->sccpDeviceReset($idv, 'reset'); - $msgr[] = $msg . ' ' . $res['Response'] . ' ' . $res['data']; - } - } - if ($idv == 'all') { - $dev_list = $this->aminterface->sccp_get_active_device(); - foreach ($dev_list as $key => $data) { - if ($cmd_id == 'reset_token') { - if (($data['token'] == 'Rej') || ($data['status'] == 'Token ')) { - $res = $this->aminterface->sccpDeviceReset($idv, 'tokenack'); - $msgr[] = 'Send Token reset to :' . $key; - } - } else { - $res = $this->aminterface->sccpDeviceReset($idv, 'reset'); - $msgr[] = $res['Response'] . ' ' . $res['data']; - } - } - } - } - } - return array('status' => true, 'message' => $msgr, 'reload' => true); - break; - case 'update_button_label': - $msg = ''; - $hw_list = array(); - if (!empty($request['name'])) { - foreach ($request['name'] as $idv) { - if (!(strpos($idv, 'SEP') === false)) { - $hw_list[] = array('name' => $idv); - } - if ($idv == 'all') { - - } - } - } - $res = $this->updateSccpButtons($hw_list); - $msg .= $res['Response'] . ' raw: ' . $res['data'] . ' '; - return array('status' => true, 'message' => 'Update Butons Labels Complite ' . $msg, 'reload' => true); - case 'model_add': - $save_settings = array(); - $key_name = array('model', 'vendor', 'dns', 'buttons', 'loadimage', 'loadinformationid', 'nametemplate'); - $upd_mode = 'replace'; - case 'model_update': - if ($request['command'] == 'model_update') { - $key_name = array('model','vendor','dns', 'buttons', 'loadimage', 'loadinformationid', 'nametemplate'); - $upd_mode = 'update'; - } - if (!empty($request['model'])) { - foreach ($key_name as $key => $value) { - if (!empty($request[$value])) { - $save_settings[$value] = $request[$value]; - } else { - $save_settings[$value] = $this->val_null; // null - } - } - $this->dbinterface->write('sccpdevmodel', $save_settings, $upd_mode, "model"); - return array('status' => true, 'table_reload' => true); - } - return $save_settings; - break; - case 'model_enabled': - $model_set = '1'; // fall through intentionally - case 'model_disabled': - if ($request['command'] == 'model_disabled') { - $model_set = '0'; - } - $msg = ''; - $save_settings = array(); - if (!empty($request['model'])) { - foreach ($request['model'] as $idv) { - $this->dbinterface->write('sccpdevmodel', array('model' => $idv, 'enabled' => $model_set), 'update', "model"); - } - } - return array('status' => true, 'table_reload' => true); - break; - case 'model_delete': - if (!empty($request['model'])) { - $this->dbinterface->write('sccpdevmodel', array('model' => $request['model']), 'delete', "model"); - return array('status' => true, 'table_reload' => true); - } - break; - case 'getDeviceModel': - switch ($request['type']) { - case 'all': - case 'extension': - case 'enabled': - $devices = $this->getSccpModelInformation($request['type'], $validate = true); - break; - } - if (empty($devices)) { - return array(); - } - return $devices; - break; - - case 'deleteSoftKey': - if (!empty($request['softkey'])) { - $id_name = $request['softkey']; - unset($this->sccp_conf_init[$id_name]); - $this->createDefaultSccpConfig(); - $msg = print_r($this->aminterface->core_sccp_reload(), 1); - return array('status' => true, 'table_reload' => true); - } - break; - case 'updateSoftKey': - if (!empty($request['id'])) { - $id_name = preg_replace('/[^A-Za-z0-9]/', '', $request['id']); - $this->sccp_conf_init[$id_name]['type'] = "softkeyset"; - foreach ($this->extconfigs->getextConfig('keyset') as $keyl => $vall) { - if (!empty($request[$keyl])) { - $this->sccp_conf_init[$id_name][$keyl] = $request[$keyl]; - } - } - $this->createDefaultSccpConfig(); - - // !TODO!: -TODO-: Check SIP Support Enabled - $this->createSccpXmlSoftkey(); - $msg = print_r($this->aminterface->core_sccp_reload, 1); - return array('status' => true, 'table_reload' => true); - } - break; - case 'getSoftKey': - $result = array(); - $i = 0; - $keyl = 'default'; - foreach ($this->aminterface->sccp_list_keysets() as $keyl => $vall) { - $result[$i]['softkeys'] = $keyl; - if ($keyl == 'default') { - foreach ($this->extconfigs->getextConfig('keyset') as $key => $value) { - $result[$i][$key] = str_replace(',', '
', $value); - } - } else { - foreach ($this->getMyConfig('softkeyset', $keyl) as $key => $value) { - $result[$i][$key] = str_replace(',', '
', $value); - } - } - - $i++; - } - return $result; - break; - case 'getExtensionGrid': - $result = $this->dbinterface->HWextension_db_SccpTableData('SccpExtension'); - if (empty($result)) { - return array(); - } - return $result; - break; - case 'getPhoneGrid': - $cmd_type = !empty($request['type']) ? $request['type'] : ''; - - $result = $this->dbinterface->HWextension_db_SccpTableData('SccpDevice', array('type' => $cmd_type)); - if ($cmd_type == 'cisco-sip') { - return $result; - } - $staus = $this->aminterface->sccp_get_active_device(); - if (empty($result)) { - $result = array(); - } else { - foreach ($result as &$dev_id) { - $id_name = $dev_id['name']; - if (!empty($staus[$id_name])) { - $dev_id['description'] = $staus[$id_name]['descr']; - $dev_id['status'] = $staus[$id_name]['status']; - $dev_id['address'] = $staus[$id_name]['address']; - $dev_id['new_hw'] = 'N'; - $staus[$id_name]['news'] = 'N'; - } else { - $dev_id['description'] = '- -'; - $dev_id['status'] = 'not connected'; - $dev_id['address'] = '- -'; - } - } - } - if (!empty($staus)) { - foreach ($staus as $dev_ids) { - $id_name = $dev_ids['name']; - if (empty($dev_ids['news'])) { - $dev_data = $this->aminterface->sccp_getdevice_info($id_name); - if (!empty($dev_data['SCCP_Vendor']['model_id'])) { - $dev_addon = $dev_data['SCCP_Vendor']['model_addon']; - if (empty($dev_addon)) { - $dev_addon = null; - } - $dev_schema = $this->getSccpModelInformation('byciscoid', false, "all", array('model' => $dev_data['SCCP_Vendor']['model_id'])); - if (empty($dev_schema)) { - $dev_schema[0]['model'] = "ERROR in Model Schema"; - } - $result[] = array( - 'name' => $id_name, - 'mac' => $id_name, - 'button' => '---', - 'type' => $dev_schema[0]['model'], - 'new_hw' => 'Y', - 'description' => '*NEW* ' . $dev_ids['descr'], - 'status' => '*NEW* ' . $dev_ids['status'], - 'address' => $dev_ids['address'], - 'addon' => $dev_addon - ); - } - } - } - } - return $result; - break; - case 'getDialTemplate': - // ------------------------------- Old device support - In the development--- - $result = $this->getDialPlanList(); - if (empty($result)) { - $result = array(); - } - return $result; - break; - case 'backupsettings': - // ------------------------------- Old device support - In the development--- - $filename = $this->createSccpBackup(); - $file_name = basename($filename); - - header("Content-Type: application/zip"); - header("Content-Disposition: attachment; filename=$file_name"); - header("Content-Length: " . filesize($filename)); - - readfile($filename); - unlink($filename); - - // return array('status' => false, 'message' => $result); - return $result; - break; - } - } - public function doGeneralPost() { // $this->FreePBX->WriteConfig($config); if (!isset($_REQUEST['Submit'])) { @@ -1214,13 +830,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { $value = $get_settings[$hdr_prefix . 'netlang'] . ':' . $get_settings[$hdr_prefix . 'devlang']; } break; - /* - case '_json': - foreach ($get_settings[$hdr_arprefix . $key.'_sip'] as $vkey => $vval) { - } - break; - - */ default: if (!empty($get_settings[$hdr_prefix . $key])) { $value = $get_settings[$hdr_prefix . $key]; @@ -1386,16 +995,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { $save_buttons = array(); $save_settings = array(); - /* - $def_feature = array('parkinglot' => array('name' => 'P.slot', 'value' => 'default'), - 'devstate' => array('name' => 'Coffee', 'value' => 'coffee'), - 'monitor' => array('name' => 'Record Calls', 'value' => '') - ); - */ $name_dev = ''; $db_field = $this->dbinterface->HWextension_db_SccpTableData("get_columns_sccpuser"); - // $hw_id = (empty($get_settings['sccp_deviceid'])) ? 'new' : $get_settings['sccp_deviceid']; - // $update_hw = ($hw_id == 'new') ? 'update' : 'clear'; $hw_prefix = 'SEP'; $name_dev = $get_settings[$hdr_prefix . 'id']; $save_buttons = $this->getPhoneButtons($get_settings, $name_dev, 'sccpline'); @@ -1614,26 +1215,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { $this->debugdata($engine); } - /* - function soundlang_hookGet_config($engine) { - - global $core_conf; - $this->debugdata($engine); - - switch ($engine) { - case "asterisk": - if (isset($core_conf) && is_a($core_conf, "core_conf")) { - $language = FreePBX::Soundlang()->getLanguage(); - if ($language != "") { - $core_conf->addSipGeneral('language', $language); - $core_conf->addIaxGeneral('language', $language); - } - } - break; - } - } - */ - /** * Retrieve Active Codecs * return fiends Lag pack @@ -2201,154 +1782,5 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { /* !TODO!: Update Hint info from sip DB ??? */ return $res_sort; } - - function getIpInformation($type = '') { - $interfaces = array(); - switch ($type) { - case 'ip4': - exec("/sbin/ip -4 -o addr", $result, $ret); - break; - case 'ip6': - exec("/sbin/ip -6 -o addr", $result, $ret); - break; - - default: - exec("/sbin/ip -o addr", $result, $ret); - break; - } - foreach ($result as $line) { - $vals = preg_split("/\s+/", $line); - if ($vals[3] == "mtu") { - continue; - } - if ($vals[2] != "inet" && $vals[2] != "inet6") { - continue; - } - if (preg_match("/(.+?)(?:@.+)?:$/", $vals[1], $res)) { - continue; - } - $ret = preg_match("/(\d*+.\d*+.\d*+.\d*+)[\/(\d*+)]*/", $vals[3], $ip); - - $interfaces[$vals[1] . ':' . $vals[2]] = array('name' => $vals[1], 'type' => $vals[2], 'ip' => ((empty($ip[1]) ? '' : $ip[1]))); - } - return $interfaces; - } - - function getIpInformationOld() { - $interfaces['auto'] = array('0.0.0.0', 'All', '0'); - - exec("/sbin/ip -4 -o addr", $result, $ret); - foreach ($result as $line) { - $vals = preg_split("/\s+/", $line); - - // We only care about ipv4 (inet) lines, or definition lines - if ($vals[2] != "inet" && $vals[3] != "mtu") { - continue; - } - - if (preg_match("/(.+?)(?:@.+)?:$/", $vals[1], $res)) { // Matches vlans, which are eth0.100@eth0 - // It's a network definition. - // This won't clobber an exsiting one, as it always comes - // before the IP addresses. - $interfaces[$res[1]] = array(); - continue; - } - if ($vals[4] == "scope" && $vals[5] == "host") { - $int = 6; - } else { - $int = 8; - } - - // Strip netmask off the end of the IP address - $ret = preg_match("/(\d*+.\d*+.\d*+.\d*+)[\/(\d*+)]*/", $vals[3], $ip); - $interfaces[$vals[$int]] = array($ip[1], $vals[$int], ((empty($ip[2]) ? '' : $ip[2]))); - } - return $interfaces; - } - - private function before($thing, $inthat) { - return substr($inthat, 0, strpos($inthat, $thing)); - } - - private function array_key_exists_recursive($key, $arr) { - if (array_key_exists($key, $arr)) { - return true; - } - foreach ($arr as $currentKey => $value) { - if (is_array($value)) { - return $this->array_key_exists_recursive($key, $value); - } - } - return false; - } - - private function strpos_array($haystack, $needles) { - if (is_array($needles)) { - foreach ($needles as $str) { - if (is_array($str)) { - $pos = $this->strpos_array($haystack, $str); - } else { - $pos = strpos($haystack, $str); - } - if ($pos !== FALSE) { - return $pos; - } - } - } else { - return strpos($haystack, $needles); - } - return FALSE; - } - - private function findAllFiles($dir, $file_mask = null, $mode = 'full') { - $result = null; - if (empty($dir) || (!file_exists($dir))) { - return $result; - } - - $root = scandir($dir); - foreach ($root as $value) { - if ($value === '.' || $value === '..') { - continue; - } - if (is_file("$dir/$value")) { - $filter = false; - if (!empty($file_mask)) { - if (is_array($file_mask)) { - foreach ($file_mask as $k) { - if (strpos(strtolower($value), strtolower($k)) !== false) { - $filter = true; - } - } - } else { - if (strpos(strtolower($value), strtolower($file_mask)) !== false) { - $filter = true; - } - } - } else { - $filter = true; - } - if ($filter) { - if ($mode == 'fileonly') { - $result[] = "$value"; - } else { - $result[] = "$dir/$value"; - } - } else { - $result[] = null; - } - continue; - } - $sub_fiend = $this->findAllFiles("$dir/$value", $file_mask, $mode); - if (!empty($sub_fiend)) { - foreach ($sub_fiend as $sub_value) { - if (!empty($sub_value)) { - $result[] = $sub_value; - } - } - } - } - return $result; - } - } +?> diff --git a/functions.inc.php b/functions.inc.php deleted file mode 100644 index 8271339..0000000 --- a/functions.inc.php +++ /dev/null @@ -1,88 +0,0 @@ -parentNode->removeChild($dom); - } - - function replaceSimpleXmlNode($xml, SimpleXMLElement $element) { - $dom = dom_import_simplexml($xml); - $import = $dom->ownerDocument->importNode( - dom_import_simplexml($element),TRUE - ); - $dom->parentNode->replaceChild($import, $dom); - } - - */ -/* -function after($thing, $inthat) -{ - if (!is_bool(strpos($inthat, $thing))) { - return substr($inthat, strpos($inthat, $thing) + strlen($thing)); - } -} - -function after_last($thing, $inthat) -{ - if (!is_bool(strrevpos($inthat, $thing))) { - return substr($inthat, strrevpos($inthat, $thing) + strlen($thing)); - } -} -function before($thing, $inthat) -{ - return substr($inthat, 0, strpos($inthat, $thing)); -} - -function before_last($thing, $inthat) -{ - return substr($inthat, 0, strrevpos($inthat, $thing)); -} - -function between($thing, $that, $inthat) -{ - return before($that, after($thing, $inthat)); -} - -function between_last($thing, $that, $inthat) -{ - return after_last($thing, before_last($that, $inthat)); -} - -function strrevpos($instr, $needle) -{ - $rev_pos = strpos(strrev($instr), strrev($needle)); - if ($rev_pos === false) { - return false; - } else { - return strlen($instr) - $rev_pos - strlen($needle); - } -} - -function strpos_array($haystack, $needles) -{ - if (is_array($needles)) { - foreach ($needles as $str) { - if (is_array($str)) { - $pos = strpos_array($haystack, $str); - } else { - $pos = strpos($haystack, $str); - } - if ($pos !== false) { - return $pos; - } - } - } else { - return strpos($haystack, $needles); - } - return false; -} - * - * -*/