Beispiel #1
0
function voicemail_saveVoicemail($vmconf)
{
    global $amp_conf;
    // just in case someone tries to be sneaky and not call getVoicemail() first..
    if ($vmconf == null) {
        die_freepbx('Error: Trying to write null voicemail file! I refuse to contiune!');
    }
    // yes, this is hardcoded.. is this a bad thing?
    write_voicemailconf(rtrim($amp_conf["ASTETCDIR"], "/") . "/voicemail.conf", $vmconf, $section);
}
Beispiel #2
0
/** Write the voicemail.conf file
 * This is called by saveVoicemail()
 * It's important to make a copy of $vmconf before passing it. Since this is a recursive function, has to
 * pass by reference. At the same time, it removes entries as it writes them to the file, so if you don't have
 * a copy, by the time it's done $vmconf will be empty.
*/
function write_voicemailconf($filename, &$vmconf, &$section, $iteration = 0)
{
    global $amp_conf;
    if ($iteration == 0) {
        $section = null;
    }
    $output = array();
    // if the file does not, copy if from the template.
    // TODO: is this logical?
    if (!file_exists($filename)) {
        if (!copy(rtrim($amp_conf["ASTETCDIR"], "/") . "/voicemail.conf.template", $filename)) {
            return;
        }
    }
    $fd = fopen($filename, "r");
    while ($line = fgets($fd, 1024)) {
        if (preg_match("/^(\\s*)(\\d+)(\\s*)=>(\\s*)(\\d*),(.*),(.*),(.*),(.*)(\\s*[;#].*)?\$/", $line, $matches)) {
            // "mailbox=>password,name,email,pager,options"
            // this is a voicemail line
            //DEBUG echo "\nmailbox";
            // make sure we have something as a comment
            if (!isset($matches[10])) {
                $matches[10] = "";
            }
            // $matches[1] [3] and [4] are to preserve indents/whitespace, we add these back in
            if (isset($vmconf[$section][$matches[2]])) {
                // we have this one loaded
                // repopulate from our version
                $temp =& $vmconf[$section][$matches[2]];
                $options = array();
                foreach ($temp["options"] as $key => $value) {
                    $options[] = $key . "=" . $value;
                }
                $output[] = $matches[1] . $temp["mailbox"] . $matches[3] . "=>" . $matches[4] . $temp["pwd"] . "," . $temp["name"] . "," . $temp["email"] . "," . $temp["pager"] . "," . implode("|", $options) . $matches[10];
                // remove this one from $vmconf
                unset($vmconf[$section][$matches[2]]);
            } else {
                // we don't know about this mailbox, so it must be deleted
                // (and hopefully not JUST added since we did read_voiceamilconf)
                // do nothing
            }
        } else {
            if (preg_match('/^(\\s*)#include(\\s+)["\']{0,1}([^"\']*)["\']{0,1}(\\s*[;#].*)?$/', $line, $matches)) {
                // include another file
                //DEBUG echo "\ninclude ".$matches[3]."<blockquote>";
                // make sure we have something as a comment
                if (!isset($matches[4])) {
                    $matches[4] = "";
                }
                if ($matches[3][0] == "/") {
                    // absolute path
                    $include_filename = trim($matches[3]);
                } else {
                    // relative path
                    $include_filename = dirname($filename) . "/" . trim($matches[3]);
                }
                $output[] = trim($matches[0]);
                write_voicemailconf($include_filename, $vmconf, $section, $iteration + 1);
                //DEBUG echo "</blockquote>";
            } else {
                if (preg_match("/^(\\s*)\\[(.+)\\](\\s*[;#].*)?\$/", $line, $matches)) {
                    // section name
                    //DEBUG echo "\nsection";
                    // make sure we have something as a comment
                    if (!isset($matches[3])) {
                        $matches[3] = "";
                    }
                    // check if this is the first run (section is null)
                    if ($section !== null) {
                        // we need to add any new entries here, before the section changes
                        //DEBUG echo "<blockquote><i>";
                        //DEBUG var_dump($vmconf[$section]);
                        if (isset($vmconf[$section])) {
                            //need this, or we get an error if we unset the last items in this section - should probably automatically remove the section/context from voicemail.conf
                            foreach ($vmconf[$section] as $key => $value) {
                                if (is_array($value)) {
                                    // mailbox line
                                    $temp =& $vmconf[$section][$key];
                                    $options = array();
                                    foreach ($temp["options"] as $key1 => $value) {
                                        $options[] = $key1 . "=" . $value;
                                    }
                                    $output[] = $temp["mailbox"] . " => " . $temp["pwd"] . "," . $temp["name"] . "," . $temp["email"] . "," . $temp["pager"] . "," . implode("|", $options);
                                    // remove this one from $vmconf
                                    unset($vmconf[$section][$key]);
                                } else {
                                    // option line
                                    $output[] = $key . "=" . $vmconf[$section][$key];
                                    // remove this one from $vmconf
                                    unset($vmconf[$section][$key]);
                                }
                            }
                        }
                        //DEBUG echo "</i></blockquote>";
                    }
                    $section = strtolower($matches[2]);
                    $output[] = $matches[1] . "[" . $section . "]" . $matches[3];
                    $existing_sections[] = $section;
                    //remember that this section exists
                } else {
                    if (preg_match("/^(\\s*)([a-zA-Z0-9-_]+)(\\s*)=(\\s*)(.*?)(\\s*[;#].*)?\$/", $line, $matches)) {
                        // name = value
                        // option line
                        //DEBUG echo "\noption line";
                        // make sure we have something as a comment
                        if (!isset($matches[6])) {
                            $matches[6] = "";
                        }
                        if (isset($vmconf[$section][$matches[2]])) {
                            $output[] = $matches[1] . $matches[2] . $matches[3] . "=" . $matches[4] . $vmconf[$section][$matches[2]] . $matches[6];
                            // remove this one from $vmconf
                            unset($vmconf[$section][$matches[2]]);
                        }
                        // else it's been deleted, so we don't write it in
                    } else {
                        // unknown other line -- probably a comment or whitespace
                        //DEBUG echo "\nother: ".$line;
                        $output[] = str_replace(array("\n", "\r"), "", $line);
                        // str_replace so we don't double-space
                    }
                }
            }
        }
    }
    if ($iteration == 0 && is_array($vmconf)) {
        // we need to add any new entries here, since it's the end of the file
        //DEBUG echo "END OF FILE!! <blockquote><i>";
        //DEBUG var_dump($vmconf);
        foreach (array_keys($vmconf) as $section) {
            if (!in_array($section, $existing_sections)) {
                // If this is a new section, write the context label
                $output[] = "[" . $section . "]";
            }
            foreach ($vmconf[$section] as $key => $value) {
                if (is_array($value)) {
                    // mailbox line
                    $temp =& $vmconf[$section][$key];
                    $options = array();
                    foreach ($temp["options"] as $key => $value) {
                        $options[] = $key . "=" . $value;
                    }
                    $output[] = $temp["mailbox"] . " => " . $temp["pwd"] . "," . $temp["name"] . "," . $temp["email"] . "," . $temp["pager"] . "," . implode("|", $options);
                    // remove this one from $vmconf
                    unset($vmconf[$section][$key]);
                } else {
                    // option line
                    $output[] = $key . "=" . $vmconf[$section][$key];
                    // remove this one from $vmconf
                    unset($vmconf[$section][$key]);
                }
            }
        }
        //DEBUG echo "</i></blockquote>";
    }
    fclose($fd);
    //DEBUG echo "\n\nwriting ".$filename;
    //DEBUG echo "\n-----------\n";
    //DEBUG echo implode("\n",$output);
    //DEBUG echo "\n-----------\n";
    // write this file back out
    if ($fd = fopen($filename, "w")) {
        fwrite($fd, implode("\n", $output) . "\n");
        fclose($fd);
    }
}
Beispiel #3
0
function saveVoicemail($vmconf)
{
    // yes, this is hardcoded.. is this a bad thing?
    write_voicemailconf("/etc/asterisk/voicemail.conf", $vmconf, $section);
}