diff --git a/conf/Sccp.class.php.v433 b/conf/Sccp.class.php.v433 index 50448e1..f62829e 100644 --- a/conf/Sccp.class.php.v433 +++ b/conf/Sccp.class.php.v433 @@ -2,21 +2,51 @@ // vim: set ai ts=4 sw=4 ft=php: // Version for SCCP Manager 13.0.X // -// Templete for Sccp Driver +// Template for Sccp Driver +/* + * Required Functions for Core Drivers + * getInfo + * addDevice + * delDevice + * getDevice + * getDefaultDeviceSettings + * getDeviceDisplay + * + */ // namespace FreePBX\modules\Core\Drivers; class Sccp extends \FreePBX\modules\Core\Driver { private $data_fld = array("pin"=>'pin', "label" => 'label', "accountcode" => 'account', - "context" =>'lcontext',"incominglimit"=>'incominglimit', - "callgroup"=>'callgroup',"pickupgroup"=>'pickupgroup', - "transfer" => 'transfer', "echocancel" => 'echocancel', - "language" => 'language', "description" => 'callerid', - "cid_num" => 'cid_num', "cid_name" => 'cid_name', "mailbox" => 'mailbox', - "musicclass" => 'musicclass',"allow" => 'allow',"disallow" => 'disallow', - "videomode" => 'videomode', - "dnd" => 'dnd', "silencesuppression" => 'silencesuppression', - "secondary_dialtone_digits" => 'secondary_dialtone_digits', "secondary_dialtone_tone" => 'secondary_dialtone_tone', - 'namedcallgroup'=>'namedcallgroup', 'namedpickupgroup' => 'namedpickupgroup' + "context" =>'lcontext',"incominglimit"=>'incominglimit', + "callgroup"=>'callgroup',"pickupgroup"=>'pickupgroup', + "transfer" => 'transfer', "echocancel" => 'echocancel', + "language" => 'language', "description" => 'callerid', + "cid_num" => 'cid_num', "cid_name" => 'label', "mailbox" => 'mailbox', + "musicclass" => 'musicclass', "allow" => 'allow',"disallow" => 'disallow', + "videomode" => 'videomode', + "dnd" => 'dnd', "silencesuppression" => 'silencesuppression', + "secondary_dialtone_digits" => 'secondary_dialtone_digits', "secondary_dialtone_tone" => 'secondary_dialtone_tone', + 'namedcallgroup'=>'namedcallgroup', 'namedpickupgroup' => 'namedpickupgroup' + ); + private $guiDefaults =array( + 'gui_checkset' => array( "elemname" => "", + "prompttext" => "", + "helptext" => "", + "currentvalue" => "", + "valarray" => array(), + "jsonclick" => '', + "jsvalidation" => "", + "failvalidationmsg" => "", + "canbeempty" => true, + "maxchars" => 0, + "disable" => false, + "inputgroup" => false, + "class" => "", + "cblabel" => 'Enable', + "disabled_value" => 'DEFAULT', + "check_enables" => 'true', + "cbdisable" => false, + "cbclass" => '') ); public function getInfo() { @@ -26,14 +56,14 @@ class Sccp extends \FreePBX\modules\Core\Driver { "prettyName" => _("Sccp Custom Driver"), "shortName" => "SCCP", "description" => _("Sccp Device"), - "Version" => "11.4", - "about" => "Sccp mysql class Base ver: 11.3, Sccp ver: default" + "Version" => "11.5", + "about" => "Sccp class Base ver: 11.5, Sccp ver: default" ); } public function addDevice($id, $settings) { global $currentcomponent; - $add_fld = array ("name"=>'label',"outboundcid"=>'cid_num',"langcode"=>'language',"extdisplay"=>'description'); + $add_fld = array ("name"=>'label',"outboundcid"=>'cid_num',"langcode"=>'language',"extdisplay"=>'description','devinfo_mailbox'=>'mailbox'); $settings['cid_num']['value'] = ''; $settings['cid_name']['value'] = ''; $settings['mailbox']['value']= ''; @@ -79,9 +109,14 @@ class Sccp extends \FreePBX\modules\Core\Driver { $sqlCol = 'name'; $sqlVal = "'{$id}'"; foreach($this->data_fld as $key => $val) { - if (isset($settings[$val]['value'])){ - $sqlCol .= ", {$key}"; - $sqlVal .= ", '{$settings[$val]['value']}'"; + if (isset($tech[$key])) { + if (isset($settings[$val]['value'])){ + $sqlCol .= ", {$key}"; + $sqlVal .= ", '{$settings[$val]['value']}'"; + } else { + $sqlCol .= ", {$key}"; + $sqlVal .= ", DEFAULT( {$key} )"; + } } } $sql = "REPLACE INTO sccpline ( {$sqlCol} ) VALUES ( {$sqlVal} );"; @@ -97,141 +132,218 @@ class Sccp extends \FreePBX\modules\Core\Driver { if (isset($_REQUEST['display'])) { redirect("config.php?display=sccp_phone", false); } + // Have changed something so need to reload the device + // TODO: are we reloading the device or reloading Asterisk + $this->reload_line($id); return true; } public function delDevice($id) { - $sql = "DELETE FROM sccpline WHERE name = ?"; - $sth = $this->database->prepare($sql); - $sth->execute(array($id)); - return true; + $sql = "DELETE FROM sccpline WHERE name = ?"; + $sth = $this->database->prepare($sql); + $sth->execute(array($id)); + return true; } public function getDevice($id) { $sccp_line = array(); - // $sql = "SELECT name as id, name as name"; - $sql = "SELECT name as id, name as name "; - foreach($this->data_fld as $key => $val) { - $sql .= ',`'. $key .'` as '.$val; + $sql = "SELECT name as id, name as name "; + foreach($this->data_fld as $key => $val) { + $sql .= ',`'. $key .'` as '.$val; } - $sql .= " FROM sccpline WHERE name = ?"; - $sth = $this->database->prepare($sql); - $result = array(); - $tech = array(); - try { - $sth->execute(array($id)); - $result = $sth->fetch(\PDO::FETCH_ASSOC); + $sql .= " FROM sccpline WHERE name = ?"; + $sth = $this->database->prepare($sql); + $result = array(); + $tech = array(); + try { + $sth->execute(array($id)); + $result = $sth->fetch(\PDO::FETCH_ASSOC); $tech = $result; $tech['dial']='SCCP/'.$id; - } catch(\Exception $e) {} + } catch(\Exception $e) {} - return $tech; + return $tech; } public function getDefaultDeviceSettings($id, $displayname, &$flag) { - $dial = 'SCCP'; - $settings = array( - "pin" => array( - "value" => "", - "flag" => $flag++ - ), - "incominglimit" => array( - "value" => "", - "flag" => $flag++ - ), - "lcontext" => array( - "value" => "from-internal", - "flag" => $flag++ - ), - "callgroup" => array( - "value" => "", - "flag" => $flag++ - ), - "namedcallgroup" => array( - "value" => "", - "flag" => $flag++ - ), - "pickupgroup" => array( - "value" => "", - "flag" => $flag++ - ), - "namedpickupgroup" => array( - "value" => "", - "flag" => $flag++ - ), - "transfer" => array( - "value" => "on", - "flag" => $flag++ - ), - "adhocNumber" => array( - "value" => "", - "flag" => $flag++ - ), - "echocancel" => array( - "value" => "no", - "flag" => $flag++ - ), - "dnd" => array( - "value" => "UserDefined", - "flag" => $flag++ - ), - "silencesuppression" => array( - "value" => "no", - "flag" => $flag++ - ), - "secondary_dialtone_digits" => array( - "value" => "9", - "flag" => $flag++ - ), - "secondary_dialtone_tone" => array( - "value" => "0x22", - "flag" => $flag++ - ), - "musicclass" => array( - "value" => "default", - "flag" => $flag++ - ) - ); - return array( - "dial" => $dial, - "settings" => $settings - ); + $dial = 'SCCP'; + $settings = array( + "mailbox" => array( + "value" => "", + "flag" => $flag++ + ), + "pin" => array( + "value" => "", + "flag" => $flag++ + ), + "incominglimit" => array( + "value" => "", + "flag" => $flag++ + ), + "lcontext" => array( + "value" => "from-internal", + "flag" => $flag++ + ), + "callgroup" => array( + "value" => "", + "flag" => $flag++ + ), + "namedcallgroup" => array( + "value" => "", + "flag" => $flag++ + ), + "pickupgroup" => array( + "value" => "", + "flag" => $flag++ + ), + "namedpickupgroup" => array( + "value" => "", + "flag" => $flag++ + ), + "transfer" => array( + "value" => "on", + "flag" => $flag++ + ), + "adhocNumber" => array( + "value" => "", + "flag" => $flag++ + ), + "echocancel" => array( + "value" => "no", + "flag" => $flag++ + ), + "dnd" => array( + "value" => "UserDefined", + "flag" => $flag++ + ), + "silencesuppression" => array( + "value" => "no", + "flag" => $flag++ + ), + "secondary_dialtone_digits" => array( + "value" => "9", + "flag" => $flag++ + ), + "secondary_dialtone_tone" => array( + "value" => "0x22", + "flag" => $flag++ + ), + "musicclass" => array( + "value" => "default", + "flag" => $flag++ + ), + "allow" => array( + "value" => "all", + "flag" => $flag++ + ), + "disallow" => array( + "value" => "all", + "flag" => $flag++ + ), + ); + return array( + "dial" => $dial, + "settings" => $settings + ); + } + + public function getDeviceDisplay($display, $deviceInfo, $currentcomponent, $primarySection) { + $section = _("SCCP Extension Details"); + $section_с = _("SCCP Codec Details"); + $gn_category = "sccp"; + global $currentcomponent, $display; + $named_group = $this->getNamedGroup(); + //add sccp category + $currentcomponent->addTabTranslation('sccp',_('SCCP')); + + //Fill Codecs Informations + + $Sccp_Codec = array('alaw', 'ulaw', 'g722', 'g723', 'g726', 'g729', 'gsm', 'h264', 'h263', 'h261'); + $allCodecs = $this->freepbx->Codecs->getAudio(true); + $allVCodecs = $this->freepbx->Codecs->getVideo(); + $ACodec_cur = array('all'); + $VCodec_cur = array('all'); + + foreach ($allCodecs as $c => $v) { + if (array_search($c,$Sccp_Codec) !=null) { + $currentcomponent->addoptlistitem('devinfo_sccp_codec', "devinfo_codec_"."$c", "$c"); + if (isset($deviceInfo['allow'])) { + if (strpos($deviceInfo['allow'],$c)!== false) { + $ACodec_cur[] ="devinfo_codec_"."$c"; + } + } + } } -# !TODO!: -TODO-: Would it not be better to put this part in the view directory (MVC) ? No, This is a template for Freepbx. - public function getDeviceDisplay($display, $deviceInfo, $currentcomponent, $primarySection) { - $section = _("Settings"); - $category = "general"; + foreach ($allVCodecs as $c => $v) { + if (array_search($c,$Sccp_Codec) !=null) { + $currentcomponent->addoptlistitem('devinfo_sccp_vcodec', "devinfo_codec_"."$c", "$c"); + if (isset($deviceInfo['allow'])) { + if (strpos($deviceInfo['allow'],$c)!== false) { + $VCodec_cur[] ="devinfo_codec_"."$c"; + } + } + } + } + + $el = array( + "elemname" => "devinfo_sccp_codec", + "prompttext" => _('Line Audio Codec:'), + "helptext" => _("Line Audio Codec"), + "currentvalue" => $ACodec_cur, + "valarray" => $currentcomponent->getoptlist('devinfo_sccp_codec'), + "class" => $section_с, + "disable" => 0 + ); + + $currentcomponent->addguielem($section_с, new \gui_checkset(array_merge($this->guiDefaults['gui_checkset'],$el)), $gn_category); + unset($el); + + $el = array( + "elemname" => "devinfo_sccp_vcodec", + "prompttext" => _('Line Video Codec:'), + "helptext" => _("Line Video Codec"), + "currentvalue" => $VCodec_cur, + "valarray" => $currentcomponent->getoptlist('devinfo_sccp_vcodec'), + "class" => $section_с, + "disable" => 0 + ); + $currentcomponent->addguielem($section_с, new \gui_checkset(array_merge($this->guiDefaults['gui_checkset'],$el)), $gn_category); + $tmparr = array(); - $tt = _("The maximum number of incoming calls on this line."); - // $tmparr['incominglimit'] = array('prompttext' => _('Incoming Call Limit'), 'value' => '2', 'tt' => $tt, 'level' => 0, 'jsvalidation' => 'isEmpty()', 'failvalidationmsg' => $msgInvalidChannel); - // !TODO!: Please change the default value for incominglimit to '6' or higher - $tmparr['incominglimit'] = array('prompttext' => _('Incoming Call Limit'), 'value' => '2', 'tt' => $tt, 'level' => 1); + $tt = _("Name or id of linked maibox"); + $tmparr['mailbox'] = array('prompttext' => _('Mailbox'), 'value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - $tt = _("Asterisk context which this line will use to send and receive calls (Note: Only change this is you know what you are doing)."); - $tmparr['lcontext'] = array('prompttext' => _('Line context'), 'value' => 'from-internal', 'tt' => $tt, 'level' => 1); + $tt = _("The SCCP channel number for this port. If you plaining to use this line as 'Shared' or use on several devices - leave this field blank or set limit to 10 calls."); + $tmparr['incominglimit'] = array('prompttext' => _('Incoming Call Limit'), 'value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - // !TODO!: -TODO-: Maybe completely remove support for old numberic callgroup/pickupgroup in favor of the named version ? See Sccp.class.php.v431 - $tt = _("Phone call group (numeric only, example:1,3-4)"); - $tmparr['callgroup'] = array('prompttext' => _('Call group id'),'value' => '', 'tt' => $tt, 'level' => 1); + $tt = _("Asterisk context this device will send calls to. Only change this is you know what you are doing."); + $tmparr['lcontext'] = array('prompttext' => _('Line context'), 'value' => 'from-internal', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - // !TODO!: -TODO-: multiple allowed (not sure if that is implemented here). See Sccp.class.php.v431 - $tt = _("Phone named call group (>asterisk-11)"); - $tmparr['namedcallgroup'] = array('prompttext' => _('Named Call Group'),'value' => '', 'tt' => $tt, 'level' => 1); + $tt = _("Asterisk context this device will can pickup calls. Only change this is you know what you are doing."); + $tmparr['directed_pickup_context'] = array('prompttext' => _('Directed PickUp Сontext '), 'value' => 'from-internal', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - $tt = _("Sets the pickup group (numeric only, example:1,3-4) this line is a member of. Allows this line to pickup calls from remote phones which are in this callhroup."); - $tmparr['pickupgroup'] = array('prompttext' => _('Pickup group id'),'value' => '', 'tt' => $tt, 'level' => 1); + $tt = _("Sets the named caller groups this line is a member of (ast111) : "); + if (!empty($named_group['namedcallgroup'])) { + foreach ($named_group['namedcallgroup'] as $val) { + $tt .= $val. ', '; + } + $tt .= '... '; + } + $tmparr['namedcallgroup'] = array('prompttext' => _('Named Call Group'),'value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - // !TODO!: -TODO-: multiple allowed (not sure if that is implemented here). See Sccp.class.php.v431 - $tt = _("Sets the named pickup name group this line is a member of. Allows this line to pickup calls from remote phones which are in this name callgroup (>asterisk-11)."); - $tmparr['namedpickupgroup'] = array('prompttext' => _('Named Pickup Group'),'value' => '', 'tt' => $tt, 'level' => 1); + $tt = _("Named PickupGroup : "); + if (!empty($named_group['namedpickupgroup'])) { + foreach ($named_group['namedpickupgroup'] as $val) { + $tt .= $val. ', '; + } + $tt .= '... '; + } + $tmparr['namedpickupgroup'] = array('prompttext' => _('Named Pickup Group'),'value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); - $tt = _("Phone pincode (Note used)"); - $tmparr['pin'] = array('value' => '', 'tt' => $tt, 'level' => 1); - - $tt = _("Digits to indicate an external line to user (secondary dialtone) Sample 9 or 8 (max 9 digits)"); - $tmparr['secondary_dialtone_digits'] = array('prompttext' => _('Secondary dialtone digits'), 'value' => '', 'tt' => $tt, 'level' => 1); + $tt = _("Digits to indicate an external line to user (secondary dialtone) Sample 9 or 8 (max 9 digits)"); + $tmparr['secondary_dialtone_digits'] = array('prompttext' => _('Secondary dialtone digits'), 'value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section,'category' => $gn_category); unset($select); $select[] = array( 'value' => '0x21', 'text' => 'Inside Dial Tone'); @@ -276,8 +388,8 @@ class Sccp extends \FreePBX\modules\Core\Driver { $select[] = array( 'value' => '0x7A', 'text' => 'MLPP Bpa'); $select[] = array( 'value' => '0x7B', 'text' => 'MLPP Bnea'); $select[] = array( 'value' => '0x7C', 'text' => 'MLPP Upa'); - /* !TODO!: +TODO+: I would remove the values below this line, except for 'No Tone' */ - // $select[] = array( 'value' => '0x7F', 'text' => 'No Tone'); +/* !TODO!: I would remove the values below this line, except for 'No Tone' */ +// $select[] = array( 'value' => '0x7F', 'text' => 'No Tone'); $select[] = array( 'value' => '0x80', 'text' => 'Meetme Greeting Tone'); $select[] = array( 'value' => '0x81', 'text' => 'Meetme Number Invalid Tone'); $select[] = array( 'value' => '0x82', 'text' => 'Meetme Number Failed Tone'); @@ -292,39 +404,52 @@ class Sccp extends \FreePBX\modules\Core\Driver { $select[] = array('value' => 'no', 'text' => 'No'); $tt = _("Outside dialtone frequency (defaul 0x22)"); - $tmparr['secondary_dialtone_tone'] = array('prompttext' => _('Secondary dialtone'), 'value' => '0x22', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'select'); + $tmparr['secondary_dialtone_tone'] = array('prompttext' => _('Secondary dialtone'), 'value' => '0x22', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'select', 'section' => $section,'category' => $gn_category); - # !TODO!: -TODO-: is there no easier way to specify a boolean radio group ? No. unset($select); - $select[] = array('value' => 'on', 'text' => 'On'); - $select[] = array('value' => 'off', 'text' => 'Off'); + $select[] = array('value' => '', 'text' => 'Inherit'); + $select[] = array('value' => 'on', 'text' => 'Yes'); + $select[] = array('value' => 'off', 'text' => 'No'); + $tt = _("Enable/Disable the `directed` pickup softkey"); + $tmparr['directed_pickup'] = array('prompttext' => _('Directed pickup'), 'value' => '', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); + + unset($select); + $select[] = array('value' => '', 'text' => 'Inherit'); + $select[] = array('value' => 'on', 'text' => 'Yes'); + $select[] = array('value' => 'off', 'text' => 'No'); + $tt = _("Should the picked/gpicked-up call be answered automatically"); + $tmparr['pickup_modeanswer'] = array('prompttext' => _('Pickup Modeanswer'), 'value' => '', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); + + unset($select); + $select[] = array('value' => '', 'text' => 'Inherit'); + $select[] = array('value' => 'on', 'text' => 'Yes'); + $select[] = array('value' => 'off', 'text' => 'No'); $tt = _("Allow call transfer."); - $tmparr['transfer'] = array('prompttext' => _('Call Transfer'), 'value' => 'on', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio'); +// $tmparr['transfer'] = array('prompttext' => _('Call Transfer'), 'value' => 'yes', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section, 'category' => 'general'); + $tmparr['transfer'] = array('prompttext' => _('Call Transfer'), 'value' => '', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); unset($select); - $select[] = array('value' => 'on', 'text' => 'On'); - $select[] = array('value' => 'off', 'text' => 'Off'); + $select[] = array('value' => 'on', 'text' => 'Yes'); + $select[] = array('value' => 'off', 'text' => 'No'); $tt = _("Echo cancel"); - $tmparr['echocancel'] = array('prompttext' => _('Echo cancel'), 'value' => 'off', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio'); + $tmparr['echocancel'] = array('prompttext' => _('Echo cancel'), 'value' => 'on', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); unset($select); $select[] = array('value' => 'off', 'text' => 'Off'); $select[] = array('value' => 'reject', 'text' => 'Reject'); $select[] = array('value' => 'silent', 'text' => 'Silent'); - $select[] = array('value' => 'UserDefined', 'text' => 'UserDefined'); - # !TODO!: -TODO-: The next entry should be "null/empty" (not UserDefined) -> to indicate the trie-state behaviour - # !TODO!: -TODO-: Userdefined is also a possible state, but it is not used or implemented (and it should not be implemented here, i think). See Sccp.class.php.v431, See Sccp.class.php - Old Style - $tt = _("DND: How will dnd react when it is set on the device level dnd can have three states: off / busy(reject) / silent / UserDefined").'
'. - _("UserDefined - dnd that cycles through all three states off -> reject -> silent -> off (this is the normal behaviour)").'
'. + $select[] = array('value' => 'user', 'text' => 'Cycle'); + $tt = _("DND: Means how will dnd react when it is set on the device level dnd can have three states: off / busy(reject) / silent / Cycle").'
'. + _("Cycle - dnd that cycles through all three states off -> reject -> silent -> off (this is the normal behaviour)").'
'. _("Reject - Usesr can only switch off and on (in reject/busy mode)").'
'. - _("Silent - Usesr can only switch off and on (in silent mode)"); - $tmparr['dnd'] = array('prompttext' => _('DND'), 'value' => 'UserDefined', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio'); + _("Silent - Usesr can only switch off and on (in silent mode)"); + $tmparr['dnd'] = array('prompttext' => _('DND'), 'value' => 'reject', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); unset($select); - $select[] = array('value' => 'on', 'text' => 'On'); - $select[] = array('value' => 'off', 'text' => 'Off'); + $select[] = array('value' => 'on', 'text' => 'Yes'); + $select[] = array('value' => 'off', 'text' => 'No'); $tt = _("Silence Suppression. Asterisk Not supported"); - $tmparr['silencesuppression'] = array('prompttext' => _('Silence Suppression'), 'value' => 'off', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio'); + $tmparr['silencesuppression'] = array('prompttext' => _('Silence Suppression'), 'value' => 'off', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section,'category' => $gn_category); unset($select); $select[] = array('value' => 'default', 'text' => _('default')); @@ -338,9 +463,63 @@ class Sccp extends \FreePBX\modules\Core\Driver { } $tt = _("Music on hold"); - $tmparr['musicclass'] = array('prompttext' => _('Music on hold'), 'value' => 'no', 'tt' => $tt, 'select' => $select, 'level' => 1); + $tmparr['musicclass'] = array('prompttext' => _('Music on hold'), 'value' => '', 'tt' => $tt, 'select' => $select, 'level' => 1, 'section' => $section,'category' => $gn_category); + unset($select); - $devopts = $tmparr; - return $devopts; + $tt = _("Sets the named pickup groups this line is a member of (this phone can pickup calls from remote phones which are in this caller group (ast111)"); + $tmparr['pin'] = array('value' => '', 'tt' => $tt, 'level' => 1, 'section' => $section ,'category' => $gn_category); + unset($select); + + $select[] = array('value' => 'off', 'text' => 'Off'); + $select[] = array('value' => 'user', 'text' => 'User'); + $select[] = array('value' => 'auto', 'text' => 'Auto'); + $tt = _("Automatic or Manual video mode. Valid values are 'auto', 'user' or 'off'. When set to 'auto', video will automatically start if both parties have a compatible code enabled. In 'user' mode the user needs to press the vidmode softkey before video will be tried. Default:'auto'"); + $tmparr['videomode'] = array('prompttext' => _('Video Mode '), 'value' => 'auto', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio', 'section' => $section_с, 'category' => $gn_category); + unset($select); + + $tt = _("Codec disallow"); + $tmparr['disallow'] = array('prompttext' => _('Codec disallow'), 'value' => 'all', 'tt' => $tt, 'level' => 1, 'section' => $section_с,'category' => $gn_category); + unset($select); + + $devopts = $tmparr; + return $devopts; + } + + public function reload_line($id) { + global $astman; + // TODO: Change to use amInterfaceClasses + $result = $astman->Command('sccp reload line ' . $id); + return $result; + } + + public function getNamedGroup() { + $sql = "select namedcallgroup from sccpline group by namedcallgroup"; + $sth = $this->database->prepare($sql); + $result = array(); + $tech = array(); + try { + $sth->execute(); + $result = $sth->fetchAll(); + foreach($result as $val) { + $tech['namedcallgroup'][] = $val[0]; + } + } catch(\Exception $e) {} + $sql = "select namedpickupgroup from sccpline group by namedpickupgroup"; + $sth = $this->database->prepare($sql); + try { + $sth->execute(); + $result = $sth->fetchAll(); + foreach($result as $val) { + $tech['namedpickupgroup'][] = $val[0]; + } + } catch(\Exception $e) {} + + return $tech; + } + + public function getDeviceHeaders() { + return array( + 'secret' => array('identifier' => _('Secret'), 'description' => sprintf(_('Secret [Enter "%s" to regenerate]'),"REGEN")), + ); } }