X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=fs_selfservice%2Ffri%2Fmodules%2Fphonefeatures.module;fp=fs_selfservice%2Ffri%2Fmodules%2Fphonefeatures.module;h=89dc903bf29eea9d4d80755602a34fbc7a911fe3;hp=0000000000000000000000000000000000000000;hb=3a17b276638200475d54201fa62566b7440e819a;hpb=46c6025ca0759b96e5bd16e7ce4b16d4df8a0988 diff --git a/fs_selfservice/fri/modules/phonefeatures.module b/fs_selfservice/fri/modules/phonefeatures.module new file mode 100644 index 000000000..89dc903bf --- /dev/null +++ b/fs_selfservice/fri/modules/phonefeatures.module @@ -0,0 +1,342 @@ +" . _("Phone Features") . "

"; + + return $ret; + } +//***************************************************************************** + function action($args) { + + global $ARI_ADMIN_USERNAME; + global $SETTINGS_ALLOW_PHONE_SETTINGS; + global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS; + + // args + $m = getArgument($args,'m'); + $a = getArgument($args,'a'); + $lang_code = getArgument( $args,'lang_code'); + $exten = $_SESSION['ari_user']['extension']; + + if ($a=='update') { + + if ($SETTINGS_ALLOW_PHONE_SETTINGS) { + if ($exten!=$ARI_ADMIN_USERNAME) { + $this->storePhoneSetting( $args, $exten, 'call_waiting', 'CW', 'ENABLED'); + $this->storePhoneSetting( $args, $exten, 'do_not_disturb', 'DND', 'YES'); + } + } + + if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) { + if ($exten!=$ARI_ADMIN_USERNAME) { + $this->storeCallForwardNumber( $args, $exten, 'call_forward', 'CF'); + $this->storeCallForwardNumber( $args, $exten, 'call_forward_busy', 'CFB'); + $this->storeCallForwardNumber( $args, $exten, 'call_forward_unavailable', 'CFU'); + } + } + } + + // redirect to see updated page + $ret .= " + + + "; + + return $ret; + } +//***************************************************************************** +function display($args) { + + global $STANDALONE; + global $ARI_ADMIN_USERNAME; + global $SETTINGS_ALLOW_PHONE_SETTINGS; + global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS; + + // args + $m = getArgument($args,'m'); + $a = getArgument($args,'a'); + $lang_code = getArgument( $args,'lang_code'); + $exten = $_SESSION['ari_user']['extension']; + + $displayname = $_SESSION['ari_user']['displayname']; + $exten = $_SESSION['ari_user']['extension']; + + $display = new DisplaySearch(); + + // build controls + if ($exten!=$ARI_ADMIN_USERNAME) { + + if ($SETTINGS_ALLOW_PHONE_SETTINGS) { + $dnd_cw_text = ""; + $dnd_cw_text.= ""; + + $dnd_cw_text.= $this->displayPhoneControls( $exten, 'call_waiting', 'CW', "Call Waiting"); + $dnd_cw_text.= $this->displayPhoneControls( $exten, 'do_not_disturb', 'DND', "Do Not Disturb"); + + $dnd_cw_text .= "

" . _("Phone Features") . "

"; + } + + if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) { + + $set_call_forward_text .= ""; + + $set_call_forward_text.= ""; + $set_call_forward_text.= ""; + + $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward', 'CF', "Unconditional:"); + $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_unavailable', 'CFU', "Unavailable:"); + $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_busy', 'CFB', "Busy:"); + + $set_call_forward_text .= "

" . _("Call Forwarding") . "

"; + } + } + + // build page content + $ret .= checkErrorMessage(); + + if ($_SESSION['ari_user']['admin_settings']) { + $headerText = _("Phone Features"); + } else { + $headerText = sprintf(_("Phone Features for %s (%s)"),$displayname,$exten); + } + + $ret .= $display->displayHeaderText($headerText); + $ret .= $display->displayLine(); + $ret .= " +
+ + + +
+ " . $dnd_cw_text . " +
+ " . $set_call_forward_text . " +
+ +
"; + +return $ret; +} +//***************************************************************************** + function setPhoneSetting( $databaseCallFwdType, $exten, $state_value) { + + global $asterisk_manager_interface; + + $type_opt = ($state_value != "") ? "put":"del"; + + $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $databaseCallFwdType $exten $state_value\r\n\r\n"); + } + +//***************************************************************************** + function getPhoneSetting($exten, $databaseCallFwdType) { + + global $asterisk_manager_interface; + $number = ''; + + $result = false; + $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $databaseCallFwdType $exten\r\n\r\n"); + if (stristr($response, 'ENABLED')) { + $result = true; + } + elseif (stristr($response, 'YES')) { + $result = true; + } + + return $result; + } +//***************************************************************************** + function storePhoneSetting( $args, $exten, $settingType, $databaseCallFwdType, $state_value) + { + $setting_enable = getArgument( $args, $settingType . '_enable'); + + $this->setPhoneSetting( $databaseCallFwdType, $exten, ($setting_enable == 'checked')?$state_value:""); + } + +//***************************************************************************** + function displayPhoneControls( $exten, $callFwdType, $databaseCallFwdType, $title) + { + + $phone_setting_enable = ($this->getPhoneSetting($exten, $databaseCallFwdType)) ? 'checked':''; + + $ret = "\n"; + $ret.= ""; + $ret.= ""; + $ret.= ""; + $ret.= "\n"; + + return $ret; + } +//***************************************************************************** + /* + * Sets Asterisk call forward setting + * + * @param $exten + * Extension to modify + * @param $state + * Call forward enable or disable + * @param $call_forward_number + * Call forward number + * @param $variable_opt + * Call forward type (CF, CFU, CFB) + */ + function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") { + + global $asterisk_manager_interface; + + if ($state) { + $type_opt = "put"; + $value_opt = $call_forward_number; + } + else { + $type_opt = "del"; + } + + $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n"); + } + + /* + * Gets call forward number if set + * + * @param $exten + * Extension to get information about + * @return $number + * call forward number returned if set + * @param $variable_opt + * Call forward type (CF, CFU, CFB) + */ + function getCallForwardNumber($exten, $variable_opt = "CF") { + + global $asterisk_manager_interface; + + $number = ''; + + $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n"); + if (is_numeric($response)) { + $number = $response; + } + + $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_number']); + if ($stripped==$number) { + $number = $_COOKIE['ari_call_forward_number']; + } + + return $number; + } + + + function storeCallForwardNumber( $args, $exten, $callFwdType, $databaseCallFwdType) + { + $call_forward_enable = getArgument($args, $callFwdType . '_enable'); + $call_forward_number = getArgument($args, $callFwdType . '_number'); + + $stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number); + + if ($call_forward_enable && !is_numeric($stripped_call_forward_number)) { + $_SESSION['ari_error'] = _("Call forward number not changed") . "
" . + sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"), $call_forward_number); + } + else { + $this->setCallForward( $exten, $call_forward_enable, $stripped_call_forward_number, $databaseCallFwdType); + + // store cookie + $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_' . $callFwdType]); + if ($call_forward_number && $stripped!=$stripped_call_forward_number) { + setcookie('ari_' . $callFwdType, $call_forward_number, time()+365*24*60*60); + } + } + } + + function displayCallForwardControls( $exten, $callFwdType, $databaseCallFwdType, $title) + { + $call_forward_number = $this->getCallForwardNumber($exten, $databaseCallFwdType); + + // If we have a value, we want the item checked + if ($call_forward_number) { + $call_forward_enable = 'checked'; + } + else { + $call_forward_number = $_COOKIE['ari_' . $callFwdType ]; + $call_forward_text_box_options = "disabled style='background: #DDD;'"; + } + + $ret = "\n"; + $ret.= "" . _($title) . ""; + $ret.= ""; + $ret.= ""; + $ret.= ""; + $ret.= ""; + $ret.= ""; + $ret.= "" . _("Enable") . ""; + $ret.= ""; + $ret.= "\n"; + + return $ret; + } +} // class +?>