示例#1
0
function voicemail_mailbox_add($mbox, $mboxoptsarray)
{
    global $astman;
    //check if VM box already exists
    if (voicemail_mailbox_get($mbox) != null) {
        trigger_error("Voicemail mailbox '{$mbox}' already exists, call to voicemail_maibox_add failed");
        die_freepbx();
    }
    $uservm = voicemail_getVoicemail();
    extract($mboxoptsarray);
    if ($vm != 'disabled') {
        // need to check if there are any options entered in the text field
        if ($options != '') {
            $options = explode("|", $options);
            foreach ($options as $option) {
                $vmoption = explode("=", $option);
                $vmoptions[$vmoption[0]] = $vmoption[1];
            }
        }
        if ($imapuser != '' && $imapuser != '') {
            $vmoptions['imapuser'] = $imapuser;
            $vmoptions['imappassword'] = $imappassword;
        }
        $vmoption = explode("=", $attach);
        $vmoptions[$vmoption[0]] = $vmoption[1];
        $vmoption = explode("=", $saycid);
        $vmoptions[$vmoption[0]] = $vmoption[1];
        $vmoption = explode("=", $envelope);
        $vmoptions[$vmoption[0]] = $vmoption[1];
        $vmoption = explode("=", $delete);
        $vmoptions[$vmoption[0]] = $vmoption[1];
        $uservm[$vmcontext][$extension] = array('mailbox' => $extension, 'pwd' => $vmpwd, 'name' => $name, 'email' => $email, 'pager' => $pager, 'options' => $vmoptions);
        // Update $_REQUEST with 'devinfo_mailbox, so MWI works.
        if (empty($_REQUEST['devinfo_mailbox'])) {
            $_REQUEST['devinfo_mailbox'] = "{$extension}@{$vmcontext}";
        }
    }
    voicemail_saveVoicemail($uservm);
    $vmxobj = new vmxObject($extension);
    // Operator extension can be set even without VmX enabled so that it can be
    // used as an alternate way to provide an operator extension for a user
    // without VmX enabled.
    //
    if (isset($vmx_option_0_system_default) && $vmx_option_0_system_default != '') {
        $vmxobj->setMenuOpt("", 0, 'unavail');
        $vmxobj->setMenuOpt("", 0, 'busy');
    } else {
        if (!isset($vmx_option_0_number)) {
            $vmx_option_0_number = '';
        }
        $vmx_option_0_number = preg_replace("/[^0-9]/", "", $vmx_option_0_number);
        $vmxobj->setMenuOpt($vmx_option_0_number, 0, 'unavail');
        $vmxobj->setMenuOpt($vmx_option_0_number, 0, 'busy');
    }
    if (isset($vmx_state) && $vmx_state) {
        if (isset($vmx_unavail_enabled) && $vmx_unavail_enabled != '') {
            $vmxobj->setState('enabled', 'unavail');
        } else {
            $vmxobj->setState('disabled', 'unavail');
        }
        if (isset($vmx_busy_enabled) && $vmx_busy_enabled != '') {
            $vmxobj->setState('enabled', 'busy');
        } else {
            $vmxobj->setState('disabled', 'busy');
        }
        if (isset($vmx_play_instructions) && $vmx_play_instructions == 'checked') {
            $vmxobj->setVmPlay(true, 'unavail');
            $vmxobj->setVmPlay(true, 'busy');
        } else {
            $vmxobj->setVmPlay(false, 'unavail');
            $vmxobj->setVmPlay(false, 'busy');
        }
        if (isset($vmx_option_1_system_default) && $vmx_option_1_system_default != '') {
            $vmxobj->setFollowMe(1, 'unavail');
            $vmxobj->setFollowMe(1, 'busy');
        } else {
            $vmx_option_1_number = preg_replace("/[^0-9]/", "", $vmx_option_1_number);
            $vmxobj->setMenuOpt($vmx_option_1_number, 1, 'unavail');
            $vmxobj->setMenuOpt($vmx_option_1_number, 1, 'busy');
        }
        if (isset($vmx_option_2_number)) {
            $vmx_option_2_number = preg_replace("/[^0-9]/", "", $vmx_option_2_number);
            $vmxobj->setMenuOpt($vmx_option_2_number, 2, 'unavail');
            $vmxobj->setMenuOpt($vmx_option_2_number, 2, 'busy');
        }
    } else {
        if ($vmxobj->isInitialized()) {
            $vmxobj->disable();
        }
    }
}
function voicemail_draw_vmxgui($extdisplay, $vmdisable)
{
    global $currentcomponent;
    global $display;
    $display_mode = "advanced";
    $mode = \FreePBX::Config()->get("FPBXOPMODE");
    if (!empty($mode)) {
        $display_mode = $mode;
    }
    if ($display_mode == "basic") {
        return true;
    }
    $section = _("VmX Locater™");
    $group = "vmxgroup";
    $category = "Voicemail";
    $vmxobj = new vmxObject($extdisplay);
    $disable = $vmxobj->isEnabled() && !$vmdisable ? false : true;
    $uw = array();
    if ($vmxobj->getState("unavail") == "enabled") {
        $uw[] = "vmx_unavail_enabled";
    }
    if ($vmxobj->getState("busy") == "enabled") {
        $uw[] = "vmx_busy_enabled";
    }
    if ($vmxobj->getState("temp") == "enabled") {
        $uw[] = "vmx_temp_enabled";
    }
    $follow_me_disabled = !$vmxobj->hasFollowMe();
    $vmxsettings = array();
    $vmxsettings['option'][0] = array("disabled" => false, "value" => $vmxobj->getMenuOpt(0), "checked" => false);
    if ($vmxsettings['option'][0]['value'] == '') {
        $vmxsettings['option'][0]['disabled'] = true;
        $vmxsettings['option'][0]['checked'] = true;
    }
    if (!$follow_me_disabled) {
        if ($vmxobj->isFollowMe()) {
            $vmxsettings['option'][1] = array("disabled" => true, "value" => "", "checked" => true);
        } else {
            $val = !$disable ? $vmxobj->getMenuOpt(1) : '';
            $vmxsettings['option'][1] = array("disabled" => empty($val), "value" => $val, "checked" => empty($val));
        }
    } else {
        $val = !$disable ? $vmxobj->getMenuOpt(1) : '';
        $vmxsettings['option'][1] = array("disabled" => empty($val), "value" => $val, "checked" => empty($val));
    }
    $vmxsettings['option'][2] = array("value" => !$disable ? $vmxobj->getMenuOpt(2) : '');
    $guidefaults = 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" => '');
    $el = array("elemname" => "vmx_state", "prompttext" => _('Enabled'), "helptext" => _("Enable/Disable the VmX (Virtual Machine eXtension) Locater feature for this user. The VMX locator allows for advanced control of a user's voicemail system. It is somewhat similar to the Follow Me feature; however it gives callers more control. In essence, the VMX locater is a mini-IVR (interactive voice response) for voicemail"), "currentvalue" => $disable ? 'disabled' : 'enabled', "valarray" => $currentcomponent->getoptlist('vmena'), "jsonclick" => "frm_{$display}_vmxEnabled()", "class" => "fpbx-voicemail", "disable" => $vmdisable, "pairedvalues" => false);
    $currentcomponent->addguielem($section, new gui_radio(array_merge($guidefaults, $el)), 5, 6, $category);
    $el = array("elemname" => "vmx_use_when", "prompttext" => _('Use When:'), "helptext" => _("When to use VMX"), "currentvalue" => $uw, "valarray" => $currentcomponent->getoptlist('vmxuw'), "class" => $group, "disable" => $disable);
    $currentcomponent->addguielem($section, new gui_checkset(array_merge($guidefaults, $el)), $category);
    $el = array("elemname" => "vmx_play_instructions", "prompttext" => _("Voicemail Instructions:"), "helptext" => _("Uncheck to play a beep after your personal Voicemail greeting."), "currentvalue" => $vmxobj->getVmPlay() ? "yes" : "no", "valarray" => $currentcomponent->getoptlist('vmyn'), "class" => $group, "disable" => $disable, "pairedvalues" => false);
    $currentcomponent->addguielem($section, new gui_radio(array_merge($guidefaults, $el)), $category);
    $el = array("elemname" => "vmx_option_0_number", "prompttext" => _("Press 0:"), "helptext" => _("Pressing 0 during your personal Voicemail greeting goes to the Operator. Uncheck to enter another destination here. This feature can be used while still disabling VmX to allow an alternative Operator extension without requiring the VmX feature for the user."), "currentvalue" => $vmxsettings['option'][0]['value'], "disable" => false, "class" => '', "disabled_value" => $vmxsettings['option'][0]['value'], "cblabel" => _("Go To Operator"), "cbelemname" => "vmx_option_0_system_default", "check_enables" => 'false', "cbdisable" => false, "cbclass" => $group, "cbchecked" => $vmxsettings['option'][0]['checked']);
    $currentcomponent->addguielem($section, new gui_textbox_check(array_merge($guidefaults, $el)), $category);
    if ($follow_me_disabled) {
        $el = array("elemname" => "vmx_option_1_number", "prompttext" => _('Press 1:'), "helptext" => _("The remaining options can have internal extensions, ringgroups, queues and external numbers that may be rung. It is often used to include your cell phone. You should run a test to make sure that the number is functional any time a change is made so you don't leave a caller stranded or receiving invalid number messages."), "currentvalue" => $vmxobj->getMenuOpt(1), "class" => $group, "disable" => $disable);
        $currentcomponent->addguielem($section, new gui_textbox(array_merge($guidefaults, $el)), $category);
    } else {
        $el = array("elemname" => "vmx_option_1_number", "prompttext" => _("Press 1:"), "helptext" => _("Enter an alternate number here, then change your personal Voicemail greeting to let callers know to press 1 to reach that number. <br/><br/>If you'd like to use your Follow Me List, check \"Send to Follow Me\" and disable Follow Me otherwise the call will go to Follow Me first and skip VmX Locater."), "currentvalue" => $vmxsettings['option'][1]['value'], "disable" => $vmxsettings['option'][1]['disabled'], "class" => '', "disabled_value" => $vmxsettings['option'][0]['value'], "cblabel" => _("Send to Follow-Me"), "cbelemname" => "vmx_option_1_system_default", "check_enables" => 'false', "cbdisable" => $disable, "cbclass" => $group, "cbchecked" => $vmxsettings['option'][1]['checked']);
        $currentcomponent->addguielem($section, new gui_textbox_check(array_merge($guidefaults, $el)), $category);
    }
    $el = array("elemname" => "vmx_option_2_number", "prompttext" => _('Press 2:'), "helptext" => _("Use any extensions, ringgroups, queues or external numbers. <br/><br/>Remember to re-record your personal Voicemail greeting and include instructions. Run a test to make sure that the number is functional."), "currentvalue" => $vmxobj->getMenuOpt(2), "class" => $group, "disable" => $disable);
    $currentcomponent->addguielem($section, new gui_textbox(array_merge($guidefaults, $el)), $category);
}