diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php index caa8fe3..1d3b1d5 100644 --- a/Sccp_manager.class.php +++ b/Sccp_manager.class.php @@ -718,7 +718,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { // No site defaults so return chan-sccp defaults $val = $this->sccpvalues['allow']['systemdefault']; } - $siteCodecs = array_fill_keys(explode(',',$val), 1); + $siteCodecs = array_fill_keys(explode(';',$val), 1); switch ($type) { case 'audio': $fpbxCodecs = $this->FreePBX->Codecs->getAudio(); diff --git a/install.php b/install.php index 8ca382c..8f930ee 100644 --- a/install.php +++ b/install.php @@ -165,7 +165,7 @@ function Get_DB_config($sccp_compatible) 'transfer' => array('create' => "enum('yes','no') NOT NULL default 'yes'", 'modify' => "enum('yes','no')"), 'vmnum' => array('def_modify' => "*97"), 'musicclass' => array('def_modify' => "default"), - 'disallow' => array('create' => "VARCHAR(255) NULL DEFAULT NULL"), + 'disallow' => array('create' => "VARCHAR(255) NULL DEFAULT 'all'", 'modify' => 'VARCHAR(255)'), 'allow' => array('create' => "VARCHAR(255) NULL DEFAULT NULL"), 'id' => array('create' => 'MEDIUMINT(9) NOT NULL AUTO_INCREMENT, ADD UNIQUE(id);', 'modify' => "MEDIUMINT(9)", 'index' => 'id'), 'echocancel' => array('create' => "enum('yes','no') NOT NULL default 'yes'", 'modify' => "enum('yes','no')"), @@ -983,7 +983,10 @@ function cleanUpSccpSettings() { // 2 special cases deny|permit & disallow|allow where need to parse on |. $newKeyword = explode("|", $valueArray['Name'], 2); if (isset($newKeyword[1])) { + // chan-sccp sets sysdef as comma separated list for sccp.conf, but expects ; separated list + // when returned from db $newSysDef = explode("|", $valueArray['DefaultValue'], 2); + $newSysDef = str_replace(',',';', $newSysDef); $i = 0; foreach ($newKeyword as $dummy) { if (array_key_exists($newKeyword[$i],$settingsFromDb)) { @@ -1032,5 +1035,15 @@ function cleanUpSccpSettings() { )"; $results = $db->query($sql); } + // have to correct prior verion sccpline lists for allow/disallow and deny permit. Prior + // versions used csl, but chan-sccp expects ; separated lists when returned by db. + + outn("
  • " . _("Replacing invalid values in sccpline") . "
  • "); + $db->query("UPDATE sccpline SET allow = REPLACE(allow, ',',';') WHERE allow like '%,%'"); + $db->query("UPDATE sccpline SET disallow = REPLACE(disallow, ',',';') WHERE disallow like '%,%'"); + + // Ensure that disallow is set to all if unset (and not NULL) + $db->query("UPDATE sccpline SET disallow = 'all' WHERE disallow like ''"); + } ?> diff --git a/sccpManClasses/Sccp.class.php.v433 b/sccpManClasses/Sccp.class.php.v433 index b06aa4d..255c50e 100644 --- a/sccpManClasses/Sccp.class.php.v433 +++ b/sccpManClasses/Sccp.class.php.v433 @@ -85,6 +85,13 @@ class Sccp extends \FreePBX\modules\Core\Driver { } // This will produce an array where site defaults take precedence over system defaults $this->line_defaults = array_intersect_key($siteDefaults,$sccpDefaults); + // If have no site codecs, use system defaults - must have a codec! + if (empty($this->line_defaults['allow'])) { + $this->line_defaults['allow'] = $sccpDefaults['allow']; + } + if (empty($this->line_defaults['disallow'])) { + $this->line_defaults['disallow'] = $sccpDefaults['disallow']; + } unset($raw_settings, $siteDefaults, $sccpDefaults); } @@ -121,7 +128,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { $allow_codec[] = str_replace('codec_','',$key); } } - $settings['allow']['value'] = implode(",", $allow_codec); + $settings['allow']['value'] = implode(";", $allow_codec); // Reset to line defaults if no value selected if (empty($settings['allow']['value'])) { $settings['allow']['value'] = $this->line_defaults['allow']; @@ -238,7 +245,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { $currentComponent->addTabTranslation('sccp',_('SCCP')); // get site and system defaults - $systemCodecs = array_fill_keys(explode(',',$this->line_defaults['allow']),true); + $systemCodecs = array_fill_keys(explode(';',$this->line_defaults['allow']),true); $siteAudioCodecs = array_intersect_key($systemCodecs, $this->freepbx->Codecs->getAudio()); $siteVideoCodecs = array_intersect_key($systemCodecs, $this->freepbx->Codecs->getVideo()); @@ -249,7 +256,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { } } else { // have allowed codecs for this line - foreach (explode(',',$deviceInfo['allow']) as $lineCodec) { + foreach (explode(';',$deviceInfo['allow']) as $lineCodec) { $activeCodecs[] = "devinfo_codec_{$lineCodec}"; } } @@ -264,7 +271,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { } $tmparr['disallow'] = array('prompttext' => _('Disallowed Codecs'), - 'value' => $this->line_defaults[(string)$child->name], + 'value' => $this->line_defaults['disallow'], 'tt' => 'Codecs that are disallowed. Default and recommended value is all', 'level' => 1, 'section' => $section_с, diff --git a/sccpManClasses/amInterfaceClasses/Event.class.php b/sccpManClasses/amInterfaceClasses/Event.class.php index a08c50f..dea0c25 100644 --- a/sccpManClasses/amInterfaceClasses/Event.class.php +++ b/sccpManClasses/amInterfaceClasses/Event.class.php @@ -101,7 +101,7 @@ class SCCPShowDevice_Event extends Event public function getCapabilities() { $ret = array(); - $codecs = explode(", ", substr($this->getKey('Capabilities'), 1, -1)); + $codecs = explode(';', substr($this->getKey('Capabilities'), 1, -1)); foreach ($codecs as $codec) { $codec_parts = explode(" ", $codec); $ret[] = array("name" => $codec_parts[0], "value" => substr($codec_parts[1], 1, -1)); @@ -112,7 +112,7 @@ class SCCPShowDevice_Event extends Event public function getCodecsPreference() { $ret = array(); - $codecs = explode(", ", substr($this->getKey('CodecsPreference'), 1, -1)); + $codecs = explode(';', substr($this->getKey('CodecsPreference'), 1, -1)); foreach ($codecs as $codec) { $codec_parts = explode(" ", $codec); $ret[] = array("name" => $codec_parts[0], "value" => substr($codec_parts[1], 1, -1)); diff --git a/sccpManTraits/ajaxHelper.php b/sccpManTraits/ajaxHelper.php index cc46ec1..da51c2c 100644 --- a/sccpManTraits/ajaxHelper.php +++ b/sccpManTraits/ajaxHelper.php @@ -405,7 +405,7 @@ trait ajaxHelper { // if uncheck all codecs, audiocodecs key is missing so nothing changes in db. // Unsetting all codecs will now return to chan-sccp defaults. if (!isset($request['audiocodecs'])) { - $request['audiocodecs'] = array_fill_keys(explode(',',$this->sccpvalues['allow']['systemdefault']),true); + $request['audiocodecs'] = array_fill_keys(explode(';',$this->sccpvalues['allow']['systemdefault']),true); } foreach ($request as $key => $value) { // Originally saved all to sccpvalues. Now will save to db defaults if appropriate @@ -506,7 +506,7 @@ trait ajaxHelper { $save_codec[$i] = $keycodeс; $i++; }; - $tmpv = implode(",", $save_codec); + $tmpv = implode(";", $save_codec); if (!($this->sccpvalues['allow']['data'] == $tmpv)) { $save_settings['allow'] = array( 'keyword' => 'allow', diff --git a/views/server.codec.php b/views/server.codec.php index 2e2a8a9..89b2a86 100644 --- a/views/server.codec.php +++ b/views/server.codec.php @@ -44,7 +44,7 @@ if (empty($sccp_disallow_def)) {
    - +