Reintegrate edit of phones as per original patch by @dkgroot Corrections in HTML Simplify Installer mods
352 lines
18 KiB
PHP
352 lines
18 KiB
PHP
<?php
|
|
// vim: set ai ts=4 sw=4 ft=php:
|
|
// Version for SCCP Manager 13.0.X
|
|
//
|
|
// Templete for Sccp Driver
|
|
//
|
|
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'
|
|
);
|
|
|
|
public function getInfo() {
|
|
return array(
|
|
"rawName" => "sccp",
|
|
"hardware" => "sccp_custom",
|
|
"prettyName" => _("Sccp Custom Driver"),
|
|
"shortName" => "SCCP",
|
|
"description" => _("Sccp Device"),
|
|
"Version" => "11.4",
|
|
"about" => "Sccp mysql class Base ver: 11.3, Sccp ver: default"
|
|
);
|
|
}
|
|
|
|
/* public function addDevice1($id, $settings) {
|
|
$sql = 'INSERT INTO sccp (id, keyword, data, flags) values (?,?,?,?)';
|
|
$sth = $this->database->prepare($sql);
|
|
$settings = is_array($settings)?$settings:array();
|
|
foreach($settings as $key => $setting) {
|
|
$sth->execute(array($id,$key,$setting['value'],$setting['flag']));
|
|
}
|
|
return true;
|
|
}
|
|
*/
|
|
public function addDevice($id, $settings) {
|
|
$add_fld = array ("name"=>'label',"outboundcid"=>'cid_num',"langcode"=>'language',"extdisplay"=>'description');
|
|
// print_r($_REQUEST);
|
|
// echo '<br><br>';
|
|
// die(print_r($settings));
|
|
$settings['cid_num']['value'] = '';
|
|
$settings['cid_name']['value'] = $label;
|
|
$settings['mailbox']['value']= '';
|
|
|
|
if (isset($_REQUEST)){
|
|
foreach($add_fld as $key => $val) {
|
|
if (!empty($_REQUEST[$key])){
|
|
$settings[$val]['value'] = $_REQUEST[$key];
|
|
}
|
|
}
|
|
}
|
|
$allow_codec = array();
|
|
foreach($settings as $key => $val) {
|
|
if (strpos($key,'codec_') !== false ) {
|
|
$allow_codec[] =substr($key,6);
|
|
}
|
|
}
|
|
$settings['allow']['value'] = implode(",", $allow_codec);
|
|
|
|
// parse outboundcid content into cid_num and cid_name sccpline fields
|
|
if (empty($settings['cid_num']['value'])) {
|
|
$settings['cid_num']['value'] = $id;
|
|
} else {
|
|
$outboundcid = $settings['cid_num']['value'];
|
|
if (preg_match('/"(.*)"\s?<(.*)>/', $outboundcid, $matches)) {
|
|
$settings['cid_num']['value'] = $matches[2];
|
|
$settings['cid_name']['value'] = $matches[1];
|
|
} else if (is_integer($outboundcid)) {
|
|
$settings['cid_num']['value'] = $outboundcid;
|
|
}
|
|
}
|
|
|
|
if (!empty($_REQUEST['vm']) && ($_REQUEST['vm'] =='enabled')){ // mailbox
|
|
if (empty($settings['mailbox']['value'])) {
|
|
$settings['mailbox']['value']= $id;
|
|
}
|
|
}
|
|
|
|
// die(print_r($settings));
|
|
$tech = Array();
|
|
$sql = "DESCRIBE sccpline";
|
|
foreach ($this->database->query($sql) as $row) {
|
|
$tech[$row["Field"]]=$row["Field"];
|
|
}
|
|
$sqlCol = 'name';
|
|
$sqlVal = "\'{$id}\'";
|
|
foreach($this->data_fld as $key => $val) {
|
|
if (isset($settings[$val]['value'])){
|
|
$sqlCol .= ", {$key}";
|
|
$sqlVal .= ", \' {$settings[$val]['value']} \'";
|
|
}
|
|
}
|
|
$sql = "REPLACE INTO sccpline ( {$sqlCol} ) VALUES ( {$sqlVal} );";
|
|
|
|
$sth = $this->database->prepare($sql);
|
|
$sth->execute();
|
|
return true;
|
|
}
|
|
|
|
public function delDevice($id) {
|
|
$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 .= " 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) {}
|
|
|
|
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" => "yes",
|
|
"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
|
|
);
|
|
}
|
|
|
|
# !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";
|
|
$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 = _("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);
|
|
|
|
// !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);
|
|
|
|
// !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 = _("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);
|
|
|
|
// !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 = _("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);
|
|
|
|
unset($select);
|
|
$select[] = array( 'value' => '0x21', 'text' => 'Inside Dial Tone');
|
|
$select[] = array( 'value' => '0x22', 'text' => 'Outside Dial Tone');
|
|
$select[] = array( 'value' => '0x23', 'text' => 'Line Busy Tone');
|
|
$select[] = array( 'value' => '0x24', 'text' => 'Alerting Tone');
|
|
$select[] = array( 'value' => '0x25', 'text' => 'Reorder Tone');
|
|
$select[] = array( 'value' => '0x26', 'text' => 'Recorder Warning Tone');
|
|
$select[] = array( 'value' => '0x27', 'text' => 'Recorder Detected Tone');
|
|
$select[] = array( 'value' => '0x28', 'text' => 'Reverting Tone');
|
|
$select[] = array( 'value' => '0x29', 'text' => 'Receiver OffHook Tone');
|
|
$select[] = array( 'value' => '0x2A', 'text' => 'Partial Dial Tone');
|
|
$select[] = array( 'value' => '0x2B', 'text' => 'No Such Number Tone');
|
|
$select[] = array( 'value' => '0x2C', 'text' => 'Busy Verification Tone');
|
|
$select[] = array( 'value' => '0x2D', 'text' => 'Call Waiting Tone');
|
|
$select[] = array( 'value' => '0x2E', 'text' => 'Confirmation Tone');
|
|
$select[] = array( 'value' => '0x2F', 'text' => 'Camp On Indication Tone');
|
|
$select[] = array( 'value' => '0x30', 'text' => 'Recall Dial Tone');
|
|
$select[] = array( 'value' => '0x31', 'text' => 'Zip Zip');
|
|
$select[] = array( 'value' => '0x32', 'text' => 'Zip');
|
|
$select[] = array( 'value' => '0x33', 'text' => 'Beep Bonk');
|
|
$select[] = array( 'value' => '0x34', 'text' => 'Music Tone');
|
|
$select[] = array( 'value' => '0x35', 'text' => 'Hold Tone');
|
|
$select[] = array( 'value' => '0x36', 'text' => 'Test Tone');
|
|
$select[] = array( 'value' => '0x37', 'text' => 'DT Monitor Warning Tone');
|
|
$select[] = array( 'value' => '0x40', 'text' => 'Add Call Waiting');
|
|
$select[] = array( 'value' => '0x41', 'text' => 'Priority Call Wait');
|
|
$select[] = array( 'value' => '0x42', 'text' => 'Recall Dial');
|
|
$select[] = array( 'value' => '0x43', 'text' => 'Barg In');
|
|
$select[] = array( 'value' => '0x44', 'text' => 'Distinct Alert');
|
|
$select[] = array( 'value' => '0x45', 'text' => 'Priority Alert');
|
|
$select[] = array( 'value' => '0x46', 'text' => 'Reminder Ring');
|
|
$select[] = array( 'value' => '0x47', 'text' => 'Precedence RingBank');
|
|
$select[] = array( 'value' => '0x48', 'text' => 'Pre-EmptionTone');
|
|
$select[] = array( 'value' => '0x67', 'text' => '2105 HZ');
|
|
$select[] = array( 'value' => '0x68', 'text' => '2600 HZ');
|
|
$select[] = array( 'value' => '0x69', 'text' => '440 HZ');
|
|
$select[] = array( 'value' => '0x6A', 'text' => '300 HZ');
|
|
$select[] = array( 'value' => '0x77', 'text' => 'MLPP Pala');
|
|
$select[] = array( 'value' => '0x78', 'text' => 'MLPP Ica');
|
|
$select[] = array( 'value' => '0x79', 'text' => 'MLPP Vca');
|
|
$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');
|
|
$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');
|
|
$select[] = array( 'value' => '0x83', 'text' => 'Meetme Enter Pin Tone');
|
|
$select[] = array( 'value' => '0x84', 'text' => 'Meetme Invalid Pin Tone');
|
|
$select[] = array( 'value' => '0x85', 'text' => 'Meetme Failed Pin Tone');
|
|
$select[] = array( 'value' => '0x86', 'text' => 'Meetme CFB Failed Tone');
|
|
$select[] = array( 'value' => '0x87', 'text' => 'Meetme Enter Access Code Tone');
|
|
$select[] = array( 'value' => '0x88', 'text' => 'Meetme Access Code Invalid Tone');
|
|
$select[] = array( 'value' => '0x89', 'text' => 'Meetme Access Code Failed Tone');
|
|
$select[] = array('value' => 'yes', 'text' => 'Yes');
|
|
$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');
|
|
|
|
# !TODO!: -TODO-: is there no easier way to specify a boolean radio group ? No.
|
|
unset($select);
|
|
$select[] = array('value' => 'yes', 'text' => 'Yes');
|
|
$select[] = array('value' => 'no', 'text' => 'No');
|
|
$tt = _("Allow call transfer.");
|
|
$tmparr['transfer'] = array('prompttext' => _('Call Transfer'), 'value' => 'yes', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio');
|
|
|
|
unset($select);
|
|
$select[] = array('value' => 'yes', 'text' => 'Yes');
|
|
$select[] = array('value' => 'no', 'text' => 'No');
|
|
$tt = _("Echo cancel");
|
|
$tmparr['echocancel'] = array('prompttext' => _('Echo cancel'), 'value' => 'yes', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio');
|
|
|
|
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").'<br>'.
|
|
_("UserDefined - dnd that cycles through all three states off -> reject -> silent -> off (this is the normal behaviour)").'<br>'.
|
|
_("Reject - Usesr can only switch off and on (in reject/busy mode)").'<br>'.
|
|
_("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');
|
|
|
|
unset($select);
|
|
$select[] = array('value' => 'yes', 'text' => 'Yes');
|
|
$select[] = array('value' => 'no', 'text' => 'No');
|
|
$tt = _("Silence Suppression. Asterisk Not supported");
|
|
$tmparr['silencesuppression'] = array('prompttext' => _('Silence Suppression'), 'value' => 'no', 'tt' => $tt, 'select' => $select, 'level' => 1, 'type' => 'radio');
|
|
|
|
unset($select);
|
|
$select[] = array('value' => 'default', 'text' => _('default'));
|
|
if (function_exists('music_list')){
|
|
$moh_list = music_list();
|
|
} else {
|
|
$moh_list = array('default');
|
|
}
|
|
foreach ($moh_list as $value) {
|
|
$select[] = array('value' => $value, 'text' => _($value));
|
|
}
|
|
|
|
$tt = _("Music on hold");
|
|
$tmparr['musicclass'] = array('prompttext' => _('Music on hold'), 'value' => 'no', 'tt' => $tt, 'select' => $select, 'level' => 1);
|
|
|
|
$devopts = $tmparr;
|
|
return $devopts;
|
|
}
|
|
}
|