mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
Move scripts to contrib/scripts
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1963 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
4
Makefile
4
Makefile
@@ -401,7 +401,7 @@ webvmail:
|
||||
@[ -d $(DESTDIR)$(HTTPDIR) ] || ( echo "No HTTP directory" && exit 1 )
|
||||
@[ -d $(DESTDIR)$(HTTPDIR)/html ] || ( echo "No http directory" && exit 1 )
|
||||
@[ -d $(DESTDIR)$(HTTPDIR)/cgi-bin ] || ( echo "No cgi-bin directory" && exit 1 )
|
||||
install -m 4755 -o root -g root vmail.cgi $(DESTDIR)$(HTTPDIR)/cgi-bin/vmail.cgi
|
||||
install -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTPDIR)/cgi-bin/vmail.cgi
|
||||
mkdir -p $(DESTDIR)$(HTTPDIR)/html/_asterisk
|
||||
for x in images/*.gif; do \
|
||||
install -m 644 $$x $(DESTDIR)$(HTTPDIR)/html/_asterisk/; \
|
||||
@@ -416,7 +416,7 @@ webvmail:
|
||||
@echo " +-------------------------------------------+"
|
||||
|
||||
mailbox:
|
||||
./addmailbox
|
||||
./contrib/scripts/addmailbox
|
||||
|
||||
|
||||
rpm: __rpm
|
||||
|
@@ -1,20 +0,0 @@
|
||||
expire-messages.pl
|
||||
|
||||
expire-messages finds messages more than X days old and deletes them.
|
||||
Because the older messages will be the lower numbers in the folder (msg0000
|
||||
will be older than msg0005), just deleting msg0000 will not work.
|
||||
expire-messages then runs a routine that goes into every folder in every
|
||||
mailbox to reorganize. If the folder contains msg0000, no action is taken.
|
||||
If the folder does not, the rename routine takes the oldest message and
|
||||
names it msg0000, the next oldest message and names it msg0001 and so on.
|
||||
|
||||
The file deletion is done by the -exec parameter to 'find'. It would be far
|
||||
more efficient to take the output from 'find' and just reorganize the
|
||||
directories from which we deleted a file. Something for the future...
|
||||
|
||||
Keep in mind that messages are deleted at the beginning of the script you
|
||||
will have mailbox trouble if you check messages before the script
|
||||
reorganizes your mailbox.
|
||||
|
||||
To use it, make sure the paths are right. Adjust $age (originally set to
|
||||
31) if necessary.
|
45
addmailbox
45
addmailbox
@@ -1,45 +0,0 @@
|
||||
#!/bin/sh
|
||||
clear
|
||||
VMHOME=/var/spool/asterisk/voicemail
|
||||
SNDHOME=/var/lib/asterisk/sounds
|
||||
echo
|
||||
echo "Enter Voicemail Context of the mailbox you are creating."
|
||||
echo "The context is the value between the square brackets in"
|
||||
echo "the voicemail.conf file."
|
||||
echo "(DEFAULT: default)"
|
||||
echo -n "Voicemail Context: "
|
||||
read context
|
||||
echo
|
||||
echo "Enter the Mailbox number of the voicemail box you are creating."
|
||||
echo -n "Mailbox Number: "
|
||||
read mailbox
|
||||
|
||||
context=${context:-default}
|
||||
|
||||
if [ ! -e "${VMHOME}/${context}" ]
|
||||
then
|
||||
echo
|
||||
echo "New Voicemail context.."
|
||||
echo "Creating Voicemail context directory..."
|
||||
mkdir -p ${VMHOME}/${context}
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Creating Voicemail directory..."
|
||||
mkdir -p ${VMHOME}/${context}/${mailbox}
|
||||
echo "Creating INBOX..."
|
||||
mkdir -p ${VMHOME}/${context}/${mailbox}/INBOX
|
||||
echo "Creating Default greetings..."
|
||||
cat ${SNDHOME}/vm-theperson.gsm > ${VMHOME}/${context}/${mailbox}/unavail.gsm
|
||||
cat ${SNDHOME}/vm-theperson.gsm > ${VMHOME}/${context}/${mailbox}/busy.gsm
|
||||
cat ${SNDHOME}/vm-extension.gsm > ${VMHOME}/${context}/${mailbox}/greet.gsm
|
||||
nums=`echo $mailbox | sed 's/./ \0/g'`
|
||||
for x in $nums; do
|
||||
cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/unavail.gsm
|
||||
cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/busy.gsm
|
||||
cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/greet.gsm
|
||||
done
|
||||
cat ${SNDHOME}/vm-isunavail.gsm >> ${VMHOME}/${context}/${mailbox}/unavail.gsm
|
||||
cat ${SNDHOME}/vm-isonphone.gsm >> ${VMHOME}/${context}/${mailbox}/busy.gsm
|
||||
echo "Complete."
|
||||
|
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Script to expire voicemail after a specified number of days
|
||||
# by Steve Creel <screel@turbs.com>
|
||||
#
|
||||
|
||||
# Directory housing the voicemail spool for asterisk
|
||||
$dir = "/var/spool/asterisk/voicemail";
|
||||
|
||||
# Context for which the script should be running
|
||||
$context = "default";
|
||||
|
||||
# Age (Delete files older than $age days old)
|
||||
$age = 31;
|
||||
|
||||
# Delete all files older than $age (but named msg????.??? to be sure
|
||||
# we don't delete greetings or the user's name)
|
||||
|
||||
system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
|
||||
|
||||
# For testing - what number to we start when we renumber?
|
||||
$start = "0";
|
||||
|
||||
# Rename to msg and a 4 digit number, 0 padded.
|
||||
$fnbase = sprintf "msg%04d", $start;
|
||||
|
||||
# Make $dir include the context too
|
||||
$dir.="/".$context;
|
||||
|
||||
( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n";
|
||||
@mailboxes = `ls -A1 $dir`;
|
||||
chomp(@mailboxes);
|
||||
|
||||
$save_fnbase = $fnbase;
|
||||
|
||||
foreach $mailbox (@mailboxes) {
|
||||
|
||||
( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n";
|
||||
@folders = `ls -A1 $dir/$mailbox`;
|
||||
chomp(@folders);
|
||||
|
||||
foreach $folder (@folders) {
|
||||
if (-d $dir."/".$mailbox."/".$folder) {
|
||||
( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n";
|
||||
@files = `ls -A1 $dir/$mailbox/$folder/`;
|
||||
|
||||
# Sort so everything is in proper order.
|
||||
@files = sort @files;
|
||||
chomp(@files);
|
||||
|
||||
# If there is still (after deleting old files earlier in the
|
||||
# script) a msg0000.txt, we don't need to shuffle anything
|
||||
# in this folder.
|
||||
if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; }
|
||||
|
||||
foreach $ext (("WAV", "wav", "gsm", "txt")) {
|
||||
# Reset the fnbase for each file type
|
||||
$fnbase = $save_fnbase;
|
||||
|
||||
foreach $file (@files) {
|
||||
if ( $file =~ /$ext/ ) {
|
||||
chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!";
|
||||
print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n";
|
||||
rename($file, $fnbase.".".$ext) || die "Cannot rename: $!";
|
||||
$fnbase++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__END__
|
@@ -1,32 +0,0 @@
|
||||
|
||||
/*
|
||||
* Id: postgres_cdr.sql,v 1.8.2.11 2003/10/10 11:15:43 pnixon Exp $
|
||||
*
|
||||
* --- Peter Nixon [ codemonkey@peternixon.net ]
|
||||
*
|
||||
* This is a PostgreSQL schema for doing CDR accounting with Asterisk
|
||||
*
|
||||
* The calls will automatically be logged as long as the module is loaded.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
CREATE TABLE cdr (
|
||||
AcctId BIGSERIAL PRIMARY KEY,
|
||||
calldate TIMESTAMP with time zone NOT NULL DEFAULT now(),
|
||||
clid VARCHAR(80) NOT NULL default '',
|
||||
src VARCHAR(80) NOT NULL default '',
|
||||
dst VARCHAR(80) NOT NULL default '',
|
||||
dcontext VARCHAR(80) NOT NULL default '',
|
||||
channel VARCHAR(80) NOT NULL default '',
|
||||
dstchannel VARCHAR(80) NOT NULL default '',
|
||||
lastapp VARCHAR(80) NOT NULL default '',
|
||||
lastdata VARCHAR(80) NOT NULL default '',
|
||||
duration INTEGER NOT NULL default '0',
|
||||
billsec INTEGER NOT NULL default '0',
|
||||
disposition VARCHAR(45) NOT NULL default '',
|
||||
amaflags INTEGER NOT NULL default '0',
|
||||
accountcode VARCHAR(20) NOT NULL default '',
|
||||
uniqueid VARCHAR(32) NOT NULL default ''
|
||||
);
|
||||
|
@@ -1,113 +0,0 @@
|
||||
#!/usr/bin/perl -Tw
|
||||
# Use these commands to create the appropriate tables in MySQL
|
||||
# If flags is 1 then this record is not included in the output extensions file
|
||||
#
|
||||
#CREATE TABLE extensions (
|
||||
# context CHAR(20) DEFAULT 'default' NOT NULL,
|
||||
# extension CHAR(20) NOT NULL,
|
||||
# priority INT(2) DEFAULT '1' NOT NULL,
|
||||
# application CHAR(20) NOT NULL,
|
||||
# args CHAR(50),
|
||||
# descr TEXT,
|
||||
# flags INT(1) DEFAULT '0' NOT NULL,
|
||||
# PRIMARY KEY(context, extension, priority)
|
||||
#);
|
||||
#
|
||||
#CREATE TABLE globals (
|
||||
# variable CHAR(20) NOT NULL,
|
||||
# value CHAR(50) NOT NULL,
|
||||
# PRIMARY KEY(variable, value)
|
||||
#);
|
||||
|
||||
use DBI;
|
||||
################### BEGIN OF CONFIGURATION ####################
|
||||
|
||||
# the name of the extensions table
|
||||
$table_name = "extensions";
|
||||
# the name of the globals table
|
||||
$global_table_name = "globals";
|
||||
# the path to the extensions.conf file
|
||||
# WARNING: this file will be substituted by the output of this program
|
||||
$extensions_conf = "/etc/asterisk/extensions.conf";
|
||||
# the name of the box the MySQL database is running on
|
||||
$hostname = "localhost";
|
||||
# the name of the database our tables are kept
|
||||
$database = "user";
|
||||
# username to connect to the database
|
||||
$username = "";
|
||||
# password to connect to the database
|
||||
$password = "";
|
||||
|
||||
################### END OF CONFIGURATION #######################
|
||||
|
||||
open EXTEN, ">$extensions_conf" || die "Cannot create/overwrite extensions file: $extensions_conf\n";
|
||||
|
||||
$dbh = DBI->connect("dbi:mysql:dbname=$database;host=$hostname", "$username", "$password");
|
||||
$statement = "SELECT * from $global_table_name order by variable";
|
||||
my $result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
exit;
|
||||
}
|
||||
my @resultSet = @{$result};
|
||||
if ( $#resultSet > -1 ) {
|
||||
print EXTEN "[globals]\n";
|
||||
foreach $row (@{ $result }) {
|
||||
my @result = @{ $row };
|
||||
print EXTEN "$result[0] = $result[1]\n";
|
||||
}
|
||||
print EXTEN "\n";
|
||||
}
|
||||
|
||||
$statement = "SELECT context from $table_name group by context";
|
||||
|
||||
$result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
}
|
||||
|
||||
@resultSet = @{$result};
|
||||
if ( $#resultSet == -1 ) {
|
||||
print "No extensions defined in $table_name\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach my $row ( @{ $result } ) {
|
||||
my $context = @{ $row }[0];
|
||||
print EXTEN "[$context]\n";
|
||||
$statement = "SELECT * from $table_name where context='$context' order by extension, priority";
|
||||
my $result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
my @resSet = @{$result};
|
||||
if ( $#resSet == -1 ) {
|
||||
print "no results\n";
|
||||
exit;
|
||||
}
|
||||
foreach my $row ( @{ $result } ) {
|
||||
my @result = @{ $row };
|
||||
if ($result[6] == 0) {
|
||||
print EXTEN "exten => $result[1],$result[2],$result[3]";
|
||||
print EXTEN "($result[4])" if defined $result[4];
|
||||
print EXTEN "\t" if not defined $result[4];
|
||||
print EXTEN "\t; $result[5]" if defined $result[5];
|
||||
print EXTEN "\n";
|
||||
}
|
||||
}
|
||||
print EXTEN "\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
|
@@ -1,93 +0,0 @@
|
||||
#!/usr/bin/perl -Tw
|
||||
# Retrieves the sip user/peer entries from the database
|
||||
# Use these commands to create the appropriate tables in MySQL
|
||||
#
|
||||
#CREATE TABLE sip (id INT(11) DEFAULT -1 NOT NULL,keyword VARCHAR(20) NOT NULL,data VARCHAR(50) NOT NULL, flags INT(1) DEFAULT 0 NOT NULL,PRIMARY KEY (id,keyword));
|
||||
#
|
||||
# if flags = 1 then the records are not included in the output file
|
||||
|
||||
use DBI;
|
||||
################### BEGIN OF CONFIGURATION ####################
|
||||
|
||||
# the name of the extensions table
|
||||
$table_name = "sip";
|
||||
# the path to the extensions.conf file
|
||||
# WARNING: this file will be substituted by the output of this program
|
||||
$sip_conf = "/etc/asterisk/sip_additional.conf";
|
||||
# the name of the box the MySQL database is running on
|
||||
$hostname = "localhost";
|
||||
# the name of the database our tables are kept
|
||||
$database = "sip";
|
||||
# username to connect to the database
|
||||
$username = "root";
|
||||
# password to connect to the database
|
||||
$password = "";
|
||||
|
||||
################### END OF CONFIGURATION #######################
|
||||
|
||||
$additional = "";
|
||||
|
||||
open EXTEN, ">$sip_conf" || die "Cannot create/overwrite extensions file: $sip_conf\n";
|
||||
|
||||
$dbh = DBI->connect("dbi:mysql:dbname=$database;host=$hostname", "$username", "$password");
|
||||
$statement = "SELECT keyword,data from $table_name where id=0 and keyword <> 'account' and flags <> 1";
|
||||
my $result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
exit;
|
||||
}
|
||||
my @resultSet = @{$result};
|
||||
if ( $#resultSet > -1 ) {
|
||||
foreach $row (@{ $result }) {
|
||||
my @result = @{ $row };
|
||||
$additional .= $result[0]."=".$result[1]."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$statement = "SELECT data,id from $table_name where keyword='account' and flags <> 1 group by data";
|
||||
|
||||
$result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
}
|
||||
|
||||
@resultSet = @{$result};
|
||||
if ( $#resultSet == -1 ) {
|
||||
print "No sip accounts defined in $table_name\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach my $row ( @{ $result } ) {
|
||||
my $account = @{ $row }[0];
|
||||
my $id = @{ $row }[1];
|
||||
print EXTEN "[$account]\n";
|
||||
$statement = "SELECT keyword,data from $table_name where id=$id and keyword <> 'account' and flags <> 1 order by keyword";
|
||||
my $result = $dbh->selectall_arrayref($statement);
|
||||
unless ($result) {
|
||||
# check for errors after every single database call
|
||||
print "dbh->selectall_arrayref($statement) failed!\n";
|
||||
print "DBI::err=[$DBI::err]\n";
|
||||
print "DBI::errstr=[$DBI::errstr]\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
my @resSet = @{$result};
|
||||
if ( $#resSet == -1 ) {
|
||||
print "no results\n";
|
||||
exit;
|
||||
}
|
||||
foreach my $row ( @{ $result } ) {
|
||||
my @result = @{ $row };
|
||||
print EXTEN "$result[0]=$result[1]\n";
|
||||
}
|
||||
print EXTEN "$additional\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
|
931
vmail.cgi
931
vmail.cgi
@@ -1,931 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Web based Voicemail for Asterisk
|
||||
#
|
||||
# Copyright (C) 2002, Linux Support Services, Inc.
|
||||
#
|
||||
# Distributed under the terms of the GNU General Public License
|
||||
#
|
||||
# Written by Mark Spencer <markster@linux-support.net>
|
||||
#
|
||||
# (icky, I know.... if you know better perl please help!)
|
||||
#
|
||||
#
|
||||
use CGI qw/:standard/;
|
||||
use Carp::Heavy;
|
||||
use CGI::Carp qw(fatalsToBrowser);
|
||||
|
||||
@validfolders = ( "INBOX", "Old", "Work", "Family", "Friends", "Cust1", "Cust2", "Cust3", "Cust4", "Cust5" );
|
||||
|
||||
%formats = (
|
||||
"wav" => {
|
||||
name => "Uncompressed WAV",
|
||||
mime => "audio/x-wav",
|
||||
pref => 1
|
||||
},
|
||||
"WAV" => {
|
||||
name => "GSM Compressed WAV",
|
||||
mime => "audio/x-wav",
|
||||
pref => 2
|
||||
},
|
||||
"gsm" => {
|
||||
name => "Raw GSM Audio",
|
||||
mime => "audio/x-gsm",
|
||||
pref => 3
|
||||
}
|
||||
);
|
||||
|
||||
$astpath = "/_asterisk";
|
||||
|
||||
$stdcontainerstart = "<table align=center width=600><tr><td>\n";
|
||||
$footer = "<hr><font size=-1><a href=\"http://www.asterisk.org\">The Asterisk Open Source PBX</a> Copyright 2002, <a href=\"http://www.digium.com\">Digium, Inc.</a></a>";
|
||||
$stdcontainerend = "</td></tr><tr><td align=right>$footer</td></tr></table>\n";
|
||||
|
||||
sub login_screen() {
|
||||
print header;
|
||||
my ($message) = @_;
|
||||
print <<_EOH;
|
||||
|
||||
<TITLE>Asterisk Web-Voicemail</TITLE>
|
||||
<BODY BGCOLOR="white">
|
||||
$stdcontainerstart
|
||||
<FORM METHOD="post">
|
||||
<input type=hidden name="action" value="login">
|
||||
<table align=center>
|
||||
<tr><td valign=top align=center rowspan=6><img align=center src="$astpath/animlogo.gif"></td></tr>
|
||||
<tr><td align=center colspan=2><font size=+2>Comedian Mail Login</font></td></tr>
|
||||
<tr><td align=center colspan=2><font size=+1>$message</font></td></tr>
|
||||
<tr><td>Mailbox:</td><td><input type=text name="mailbox"></td></tr>
|
||||
<tr><td>Password:</td><td><input type=password name="password"></td></tr>
|
||||
<tr><td align=right colspan=2><input value="Login" type=submit></td></tr>
|
||||
</table>
|
||||
</FORM>
|
||||
$stdcontainerend
|
||||
</BODY>\n
|
||||
_EOH
|
||||
|
||||
}
|
||||
|
||||
sub check_login()
|
||||
{
|
||||
local ($filename, $startcat) = @_;
|
||||
local ($mbox, $context) = split(/\@/, param('mailbox'));
|
||||
local $pass = param('password');
|
||||
local $category = $startcat;
|
||||
local @fields;
|
||||
local $tmp;
|
||||
local (*VMAIL);
|
||||
if (!$category) {
|
||||
$category = "general";
|
||||
}
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
if (!$filename) {
|
||||
$filename = "/etc/asterisk/voicemail.conf";
|
||||
}
|
||||
# print header;
|
||||
# print "Including <h2>$filename</h2> while in <h2>$category</h2>...\n";
|
||||
open(VMAIL, "<$filename") || die("Bleh, no $filename");
|
||||
while(<VMAIL>) {
|
||||
chomp;
|
||||
if (/include\s\"([^\"]+)\"$/) {
|
||||
($tmp, $category) = &check_login("/etc/asterisk/$1", $category);
|
||||
if (length($tmp)) {
|
||||
# print "Got '$tmp'\n";
|
||||
return ($tmp, $category);
|
||||
}
|
||||
} elsif (/\[(.*)\]/) {
|
||||
$category = $1;
|
||||
} elsif ($category ne "general") {
|
||||
if (/([^\s]+)\s*\=\>?\s*(.*)/) {
|
||||
@fields = split(/\,\s*/, $2);
|
||||
# print "<p>Mailbox is $1\n";
|
||||
if (($mbox eq $1) && ($pass eq $fields[0]) && ($context eq $category)) {
|
||||
return ($fields[1] ? $fields[1] : "Extension $mbox in $context", $category);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close(VMAIL);
|
||||
return ("", $category);
|
||||
}
|
||||
|
||||
sub validmailbox()
|
||||
{
|
||||
local ($context, $mbox, $filename, $startcat) = @_;
|
||||
local $category = $startcat;
|
||||
local @fields;
|
||||
local (*VMAIL);
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
if (!$filename) {
|
||||
$filename = "/etc/asterisk/voicemail.conf";
|
||||
}
|
||||
if (!$category) {
|
||||
$category = "general";
|
||||
}
|
||||
open(VMAIL, "<$filename") || die("Bleh, no $filename");
|
||||
while(<VMAIL>) {
|
||||
chomp;
|
||||
if (/include\s\"([^\"]+)\"$/) {
|
||||
($tmp, $category) = &validmailbox($mbox, $context, "/etc/asterisk/$1");
|
||||
if ($tmp) {
|
||||
return ($tmp, $category);
|
||||
}
|
||||
} elsif (/\[(.*)\]/) {
|
||||
$category = $1;
|
||||
} elsif (($category ne "general") && ($category eq $context)) {
|
||||
if (/([^\s]+)\s*\=\>?\s*(.*)/) {
|
||||
@fields = split(/\,\s*/, $2);
|
||||
if (($mbox eq $1) && ($context eq $category)) {
|
||||
return ($fields[2] ? $fields[2] : "unknown", $category);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ("", $category);
|
||||
}
|
||||
|
||||
sub mailbox_options()
|
||||
{
|
||||
local($context, $current, $filename, $category) = @_;
|
||||
local (*VMAIL);
|
||||
local $tmp2;
|
||||
local $tmp;
|
||||
if (!$filename) {
|
||||
$filename = "/etc/asterisk/voicemail.conf";
|
||||
}
|
||||
if (!$category) {
|
||||
$category = "general";
|
||||
}
|
||||
# print header;
|
||||
# print "Including <h2>$filename</h2> while in <h2>$category</h2>...\n";
|
||||
open(VMAIL, "<$filename") || die("Bleh, no voicemail.conf");
|
||||
while(<VMAIL>) {
|
||||
chomp;
|
||||
s/\;.*$//;
|
||||
if (/include\s\"([^\"]+)\"$/) {
|
||||
($tmp2, $category) = &mailbox_options($context, $current, "/etc/asterisk/$1", $category);
|
||||
# print "Got '$tmp2'...\n";
|
||||
$tmp .= $tmp2;
|
||||
} elsif (/\[(.*)\]/) {
|
||||
$category = $1;
|
||||
} elsif ($category ne "general") {
|
||||
if (/([^\s]+)\s*\=\>?\s*(.*)/) {
|
||||
@fields = split(/\,\s*/, $2);
|
||||
$text = "$1";
|
||||
if ($fields[2]) {
|
||||
$text .= " ($fields[1])";
|
||||
}
|
||||
if ($1 eq $current) {
|
||||
$tmp .= "<OPTION SELECTED>$text</OPTION>\n";
|
||||
} else {
|
||||
$tmp .= "<OPTION>$text</OPTION>\n";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
close(VMAIL);
|
||||
return ($tmp, $category);
|
||||
}
|
||||
|
||||
sub mailbox_list()
|
||||
{
|
||||
local ($name, $context, $current) = @_;
|
||||
local $tmp;
|
||||
local $text;
|
||||
local $tmp;
|
||||
local $opts;
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
$tmp = "<SELECT name=\"$name\">\n";
|
||||
($opts) = &mailbox_options($context, $current);
|
||||
$tmp .= $opts;
|
||||
$tmp .= "</SELECT>\n";
|
||||
|
||||
}
|
||||
|
||||
sub msgcount()
|
||||
{
|
||||
my ($context, $mailbox, $folder) = @_;
|
||||
my $path = "/var/spool/asterisk/voicemail/$context/$mailbox/$folder";
|
||||
if (opendir(DIR, $path)) {
|
||||
my @msgs = grep(/^msg....\.txt$/, readdir(DIR));
|
||||
closedir(DIR);
|
||||
return sprintf "%d", $#msgs + 1;
|
||||
}
|
||||
return "0";
|
||||
}
|
||||
|
||||
sub msgcountstr()
|
||||
{
|
||||
my ($context, $mailbox, $folder) = @_;
|
||||
my $count = &msgcount($context, $mailbox, $folder);
|
||||
if ($count > 1) {
|
||||
"$count messages";
|
||||
} elsif ($count > 0) {
|
||||
"$count message";
|
||||
} else {
|
||||
"no messages";
|
||||
}
|
||||
}
|
||||
sub messages()
|
||||
{
|
||||
my ($context, $mailbox, $folder) = @_;
|
||||
my $path = "/var/spool/asterisk/voicemail/$context/$mailbox/$folder";
|
||||
if (opendir(DIR, $path)) {
|
||||
my @msgs = sort grep(/^msg....\.txt$/, readdir(DIR));
|
||||
closedir(DIR);
|
||||
return map { s/^msg(....)\.txt$/$1/; $_ } @msgs;
|
||||
}
|
||||
return ();
|
||||
}
|
||||
|
||||
sub getcookie()
|
||||
{
|
||||
my ($var) = @_;
|
||||
return cookie($var);
|
||||
}
|
||||
|
||||
sub makecookie()
|
||||
{
|
||||
my ($format) = @_;
|
||||
cookie(-name => "format", -value =>["$format"], -expires=>"+1y");
|
||||
}
|
||||
|
||||
sub getfields()
|
||||
{
|
||||
my ($context, $mailbox, $folder, $msg) = @_;
|
||||
my $fields;
|
||||
if (open(MSG, "</var/spool/asterisk/voicemail/$context/$mailbox/$folder/msg${msg}.txt")) {
|
||||
while(<MSG>) {
|
||||
s/\#.*$//g;
|
||||
if (/^(\w+)\s*\=\s*(.*)$/) {
|
||||
$fields->{$1} = $2;
|
||||
}
|
||||
}
|
||||
close(MSG);
|
||||
$fields->{'msgid'} = $msg;
|
||||
} else { print "<BR>Unable to open '$msg' in '$mailbox', '$folder'\n<B>"; }
|
||||
$fields;
|
||||
}
|
||||
|
||||
sub message_prefs()
|
||||
{
|
||||
my ($nextaction, $msgid) = @_;
|
||||
my $folder = param('folder');
|
||||
my $mbox = param('mailbox');
|
||||
my $passwd = param('password');
|
||||
my $format = param('format');
|
||||
if (!$format) {
|
||||
$format = &getcookie('format');
|
||||
}
|
||||
print header;
|
||||
print <<_EOH;
|
||||
|
||||
<TITLE>Asterisk Web-Voicemail: Preferences</TITLE>
|
||||
<BODY BGCOLOR="white">
|
||||
$stdcontainerstart
|
||||
<FORM METHOD="post">
|
||||
<table width=100% align=center>
|
||||
<tr><td align=right colspan=3><font size=+2>Web Voicemail Preferences</font></td></tr>
|
||||
<tr><td align=left><font size=+1>Preferred Audio Format:</font></td><td colspan=2></td></tr>
|
||||
_EOH
|
||||
|
||||
foreach $fmt (sort { $formats{$a}->{'pref'} <=> $formats{$b}->{'pref'} } keys %formats) {
|
||||
my $clicked = "checked" if $fmt eq $format;
|
||||
print "<tr><td></td><td align=left><input type=radio name=\"format\" $clicked value=\"$fmt\"></td><td width=100%> $formats{$fmt}->{name}</td></tr>\n";
|
||||
}
|
||||
|
||||
print <<_EOH;
|
||||
<tr><td align=right colspan=3><input type=submit value="save settings..."></td></tr>
|
||||
</table>
|
||||
<input type=hidden name="action" value="$nextaction">
|
||||
<input type=hidden name="folder" value="$folder">
|
||||
<input type=hidden name="mailbox" value="$mbox">
|
||||
<input type=hidden name="context" value="$context">
|
||||
<input type=hidden name="password" value="$passwd">
|
||||
<input type=hidden name="msgid" value="$msgid">
|
||||
$stdcontainerend
|
||||
</BODY>\n
|
||||
_EOH
|
||||
|
||||
}
|
||||
|
||||
sub message_play()
|
||||
{
|
||||
my ($message, $msgid) = @_;
|
||||
my $folder = param('folder');
|
||||
my ($mbox, $context) = split(/\@/, param('mailbox'));
|
||||
my $passwd = param('password');
|
||||
my $format = param('format');
|
||||
|
||||
my $fields;
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
|
||||
my $folders = &folder_list('newfolder', $context, $mbox, $folder);
|
||||
my $mailboxes = &mailbox_list('forwardto', $context, $mbox);
|
||||
if (!$format) {
|
||||
$format = &getcookie('format');
|
||||
}
|
||||
if (!$format) {
|
||||
&message_prefs("play", $msgid);
|
||||
} else {
|
||||
print header(-cookie => &makecookie($format));
|
||||
$fields = &getfields($context, $mbox, $folder, $msgid);
|
||||
if (!$fields) {
|
||||
print "<BR>Bah!\n";
|
||||
return;
|
||||
}
|
||||
my $duration = $fields->{'duration'};
|
||||
if ($duration) {
|
||||
$duration = sprintf "%d:%02d", $duration/60, $duration % 60;
|
||||
} else {
|
||||
$duration = "<i>Unknown</i>";
|
||||
}
|
||||
print <<_EOH;
|
||||
|
||||
<TITLE>Asterisk Web-Voicemail: $folder Message $msgid</TITLE>
|
||||
<BODY BGCOLOR="white">
|
||||
$stdcontainerstart
|
||||
<FORM METHOD="post">
|
||||
<table width=100% align=center>
|
||||
<tr><td align=right colspan=3><font size=+1>$folder Message $msgid</font></td></tr>
|
||||
_EOH
|
||||
|
||||
print <<_EOH;
|
||||
<tr><td align=center colspan=3>
|
||||
<table>
|
||||
<tr><td colspan=2 align=center><font size=+1>$folder <b>$msgid</b></font></td></tr>
|
||||
<tr><td><b>Message:</b></td><td>$msgid</td></tr>\n
|
||||
<tr><td><b>Mailbox:</b></td><td>$mbox</td></tr>\n
|
||||
<tr><td><b>Folder:</b></td><td>$folder</td></tr>\n
|
||||
<tr><td><b>From:</b></td><td>$fields->{callerid}</td></tr>\n
|
||||
<tr><td><b>Duration:</b></td><td>$duration</td></tr>\n
|
||||
<tr><td><b>Original Date:</b></td><td>$fields->{origdate}</td></tr>\n
|
||||
<tr><td><b>Original Mailbox:</b></td><td>$fields->{origmailbox}</td></tr>\n
|
||||
<tr><td><b>Caller Channel:</b></td><td>$fields->{callerchan}</td></tr>\n
|
||||
<tr><td align=center colspan=2>
|
||||
<input name="action" type=submit value="index">
|
||||
<input name="action" type=submit value="delete ">
|
||||
<input name="action" type=submit value="forward to -> ">
|
||||
$mailboxes
|
||||
<input name="action" type=submit value="save to ->">
|
||||
$folders
|
||||
<input name="action" type=submit value="play ">
|
||||
<input name="action" type=submit value="download">
|
||||
</td></tr>
|
||||
<tr><td colspan=2 align=center>
|
||||
<embed width=400 height=40 src="vmail.cgi?action=audio&folder=$folder&mailbox=$mbox&password=$passwd&msgid=$msgid&format=$format&dontcasheme=$$.$format" autostart=yes loop=false></embed>
|
||||
</td></tr></table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<input type=hidden name="folder" value="$folder">
|
||||
<input type=hidden name="mailbox" value="$mbox">
|
||||
<input type=hidden name="context" value="$context">
|
||||
<input type=hidden name="password" value="$passwd">
|
||||
<input type=hidden name="msgid" value="$msgid">
|
||||
$stdcontainerend
|
||||
</BODY>\n
|
||||
_EOH
|
||||
}
|
||||
}
|
||||
|
||||
sub message_audio()
|
||||
{
|
||||
my ($forcedownload) = @_;
|
||||
my $folder = param('folder');
|
||||
my $msgid = param('msgid');
|
||||
my $mailbox = param('mailbox');
|
||||
my $format = param('format');
|
||||
if (!$format) {
|
||||
$format = &getcookie('format');
|
||||
}
|
||||
my $path = "/var/spool/asterisk/vm/$mailbox/$folder/msg${msgid}.$format";
|
||||
|
||||
$msgid =~ /^\d\d\d\d$/ || die("Msgid Liar ($msgid)!");
|
||||
grep(/^${format}$/, keys %formats) || die("Format Liar ($format)!");
|
||||
|
||||
# Mailbox and folder are already verified
|
||||
if (open(AUDIO, "<$path")) {
|
||||
$size = -s $path;
|
||||
$|=1;
|
||||
if ($forcedownload) {
|
||||
print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size, -attachment => "msg${msgid}.$format");
|
||||
} else {
|
||||
print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size);
|
||||
}
|
||||
|
||||
while(($amt = sysread(AUDIO, $data, 4096)) > 0) {
|
||||
syswrite(STDOUT, $data, $amt);
|
||||
}
|
||||
close(AUDIO);
|
||||
} else {
|
||||
die("Hrm, can't seem to open $path\n");
|
||||
}
|
||||
}
|
||||
|
||||
sub message_index()
|
||||
{
|
||||
my ($folder, $message) = @_;
|
||||
my ($mbox, $context) = split(/\@/, param('mailbox'));
|
||||
my $passwd = param('password');
|
||||
my $message2;
|
||||
my $msgcount;
|
||||
my $hasmsg;
|
||||
my $newmessages, $oldmessages;
|
||||
my $format = param('format');
|
||||
if (!$format) {
|
||||
$format = &getcookie('format');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
if ($folder) {
|
||||
$msgcount = &msgcountstr($context, $mbox, $folder);
|
||||
$message2 = " Folder '$folder' has " . &msgcountstr($context, $mbox, $folder);
|
||||
} else {
|
||||
$newmessages = &msgcount($context, $mbox, "INBOX");
|
||||
$oldmessages = &msgcount($context, $mbox, "Old");
|
||||
if (($newmessages > 0) || ($oldmessages < 1)) {
|
||||
$folder = "INBOX";
|
||||
} else {
|
||||
$folder = "Old";
|
||||
}
|
||||
$message2 = "You have";
|
||||
if ($newmessages > 0) {
|
||||
$message2 .= " <b>$newmessages</b> NEW";
|
||||
if ($oldmessages > 0) {
|
||||
$message2 .= "and <b>$oldmessages</b> OLD";
|
||||
if ($oldmessages != 1) {
|
||||
$message2 .= " messages.";
|
||||
} else {
|
||||
$message2 .= "message.";
|
||||
}
|
||||
} else {
|
||||
if ($newmessages != 1) {
|
||||
$message2 .= " messages.";
|
||||
} else {
|
||||
$message2 .= " message.";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($oldmessages > 0) {
|
||||
$message2 .= " <b>$oldmessages</b> OLD";
|
||||
if ($oldmessages != 1) {
|
||||
$message2 .= " messages.";
|
||||
} else {
|
||||
$message2 .= " message.";
|
||||
}
|
||||
} else {
|
||||
$message2 .= " <b>no</b> messages.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $folders = &folder_list('newfolder', $context, $mbox, $folder);
|
||||
my $cfolders = &folder_list('changefolder', $context, $mbox, $folder);
|
||||
my $mailboxes = &mailbox_list('forwardto', $context, $mbox);
|
||||
print header(-cookie => &makecookie($format));
|
||||
print <<_EOH;
|
||||
|
||||
<TITLE>Asterisk Web-Voicemail: $mbox $folder</TITLE>
|
||||
<BODY BGCOLOR="white">
|
||||
$stdcontainerstart
|
||||
<FORM METHOD="post">
|
||||
<table width=100% align=center>
|
||||
<tr><td align=center colspan=2><font size=+2><I>$message</I></font></td></tr>
|
||||
<tr><td align=right colspan=2><font size=+1><b>$folder</b> Messages</font> <input type=submit name="action" value="change to ->">$cfolders</td></tr>
|
||||
<tr><td align=left colspan=2><font size=+1>$message2</font></td></tr>
|
||||
</table>
|
||||
<table width=100% align=center cellpadding=0 cellspacing=0>
|
||||
_EOH
|
||||
|
||||
print "<tr><td> Msg</td><td> From</td><td> Duration</td><td> Date</td><td> </td></tr>\n";
|
||||
print "<tr><td><hr></td><td><hr></td><td><hr></td><td><hr></td><td></td></tr>\n";
|
||||
foreach $msg (&messages($context, $mbox, $folder)) {
|
||||
|
||||
$fields = &getfields($context, $mbox, $folder, $msg);
|
||||
$duration = $fields->{'duration'};
|
||||
if ($duration) {
|
||||
$duration = sprintf "%d:%02d", $duration / 60, $duration % 60;
|
||||
} else {
|
||||
$duration = "<i>Unknown</i>";
|
||||
}
|
||||
$hasmsg++;
|
||||
print "<tr><td><input type=checkbox name=\"msgselect\" value=\"$msg\"> <b>$msg</b></td><td>$fields->{'callerid'}</td><td>$duration</td><td>$fields->{'origdate'}</td><td><input name='play$msg' alt=\"Play message $msg\" border=0 type=image align=left src=\"$astpath/play.gif\"></td></tr>\n";
|
||||
|
||||
}
|
||||
if (!$hasmsg) {
|
||||
print "<tr><td colspan=4 align=center><P><b><i>No messages</i></b><P></td></tr>";
|
||||
}
|
||||
|
||||
print <<_EOH;
|
||||
</table>
|
||||
<table width=100% align=center>
|
||||
<tr><td align=right colspan=2>
|
||||
<input type="submit" name="action" value="refresh">
|
||||
_EOH
|
||||
|
||||
if ($hasmsg) {
|
||||
print <<_EOH;
|
||||
<input type="submit" name="action" value="delete">
|
||||
<input type="submit" name="action" value="save to ->">
|
||||
$folders
|
||||
<input type="submit" name="action" value="forward to ->">
|
||||
$mailboxes
|
||||
_EOH
|
||||
}
|
||||
|
||||
print <<_EOH;
|
||||
</td></tr>
|
||||
<tr><td align=right colspan=2>
|
||||
<input type="submit" name="action" value="preferences">
|
||||
<input type="submit" name="action" value="logout">
|
||||
</td></tr>
|
||||
</table>
|
||||
<input type=hidden name="folder" value="$folder">
|
||||
<input type=hidden name="mailbox" value="$mbox">
|
||||
<input type=hidden name="context" value="$context">
|
||||
<input type=hidden name="password" value="$passwd">
|
||||
</FORM>
|
||||
$stdcontainerend
|
||||
</BODY>\n
|
||||
_EOH
|
||||
}
|
||||
|
||||
sub validfolder()
|
||||
{
|
||||
my ($folder) = @_;
|
||||
return grep(/^$folder$/, @validfolders);
|
||||
}
|
||||
|
||||
sub folder_list()
|
||||
{
|
||||
my ($name, $context, $mbox, $selected) = @_;
|
||||
my $f;
|
||||
my $count;
|
||||
my $tmp = "<SELECT name=\"$name\">\n";
|
||||
foreach $f (@validfolders) {
|
||||
$count = &msgcount($context, $mbox, $f);
|
||||
if ($f eq $selected) {
|
||||
$tmp .= "<OPTION SELECTED>$f ($count)</OPTION>\n";
|
||||
} else {
|
||||
$tmp .= "<OPTION>$f ($count)</OPTION>\n";
|
||||
}
|
||||
}
|
||||
$tmp .= "</SELECT>";
|
||||
}
|
||||
|
||||
sub message_rename()
|
||||
{
|
||||
my ($context, $mbox, $oldfolder, $old, $newfolder, $new) = @_;
|
||||
my $oldfile, $newfile;
|
||||
return if ($old eq $new) && ($oldfolder eq $newfolder);
|
||||
|
||||
if ($context =~ /^(\w+)$/) {
|
||||
$context = $1;
|
||||
} else {
|
||||
die("Invalid Context<BR>\n");
|
||||
}
|
||||
|
||||
if ($mbox =~ /^(\w+)$/) {
|
||||
$mbox = $1;
|
||||
} else {
|
||||
die ("Invalid mailbox<BR>\n");
|
||||
}
|
||||
|
||||
if ($oldfolder =~ /^(\w+)$/) {
|
||||
$oldfolder = $1;
|
||||
} else {
|
||||
die("Invalid old folder<BR>\n");
|
||||
}
|
||||
|
||||
if ($newfolder =~ /^(\w+)$/) {
|
||||
$newfolder = $1;
|
||||
} else {
|
||||
die("Invalid new folder ($newfolder)<BR>\n");
|
||||
}
|
||||
|
||||
if ($old =~ /^(\d\d\d\d)$/) {
|
||||
$old = $1;
|
||||
} else {
|
||||
die("Invalid old Message<BR>\n");
|
||||
}
|
||||
|
||||
if ($new =~ /^(\d\d\d\d)$/) {
|
||||
$new = $1;
|
||||
} else {
|
||||
die("Invalid old Message<BR>\n");
|
||||
}
|
||||
|
||||
my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder";
|
||||
mkdir $path, 0755;
|
||||
my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$oldfolder";
|
||||
opendir(DIR, $path) || die("Unable to open directory\n");
|
||||
my @files = grep /^msg${old}\.\w+$/, readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach $oldfile (@files) {
|
||||
my $tmp = $oldfile;
|
||||
if ($tmp =~ /^(msg${old}.\w+)$/) {
|
||||
$tmp = $1;
|
||||
$oldfile = $path . "/$tmp";
|
||||
$tmp =~ s/msg${old}/msg${new}/;
|
||||
$newfile = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder/$tmp";
|
||||
# print "Renaming $oldfile to $newfile<BR>\n";
|
||||
rename($oldfile, $newfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub file_copy()
|
||||
{
|
||||
my ($orig, $new) = @_;
|
||||
my $res;
|
||||
my $data;
|
||||
open(IN, "<$orig") || die("Unable to open '$orig'\n");
|
||||
open(OUT, ">$new") || DIE("Unable to open '$new'\n");
|
||||
while(($res = sysread(IN, $data, 4096)) > 0) {
|
||||
syswrite(OUT, $data, $res);
|
||||
}
|
||||
close(OUT);
|
||||
close(IN);
|
||||
}
|
||||
|
||||
sub message_copy()
|
||||
{
|
||||
my ($mbox, $newmbox, $oldfolder, $old, $new) = @_;
|
||||
my $oldfile, $newfile;
|
||||
return if ($mbox eq $newmbox);
|
||||
|
||||
if ($mbox =~ /^(\w+)$/) {
|
||||
$mbox = $1;
|
||||
} else {
|
||||
die ("Invalid mailbox<BR>\n");
|
||||
}
|
||||
|
||||
if ($newmbox =~ /^(\w+)$/) {
|
||||
$newmbox = $1;
|
||||
} else {
|
||||
die ("Invalid new mailbox<BR>\n");
|
||||
}
|
||||
|
||||
if ($oldfolder =~ /^(\w+)$/) {
|
||||
$oldfolder = $1;
|
||||
} else {
|
||||
die("Invalid old folder<BR>\n");
|
||||
}
|
||||
|
||||
if ($old =~ /^(\d\d\d\d)$/) {
|
||||
$old = $1;
|
||||
} else {
|
||||
die("Invalid old Message<BR>\n");
|
||||
}
|
||||
|
||||
if ($new =~ /^(\d\d\d\d)$/) {
|
||||
$new = $1;
|
||||
} else {
|
||||
die("Invalid old Message<BR>\n");
|
||||
}
|
||||
|
||||
my $path = "/var/spool/asterisk/vm/$newmbox";
|
||||
mkdir $path, 0755;
|
||||
my $path = "/var/spool/asterisk/vm/$newmbox/INBOX";
|
||||
mkdir $path, 0755;
|
||||
my $path = "/var/spool/asterisk/vm/$mbox/$oldfolder";
|
||||
opendir(DIR, $path) || die("Unable to open directory\n");
|
||||
my @files = grep /^msg${old}\.\w+$/, readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach $oldfile (@files) {
|
||||
my $tmp = $oldfile;
|
||||
if ($tmp =~ /^(msg${old}.\w+)$/) {
|
||||
$tmp = $1;
|
||||
$oldfile = $path . "/$tmp";
|
||||
$tmp =~ s/msg${old}/msg${new}/;
|
||||
$newfile = "/var/spool/asterisk/vm/$newmbox/INBOX/$tmp";
|
||||
# print "Copying $oldfile to $newfile<BR>\n";
|
||||
&file_copy($oldfile, $newfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub message_delete()
|
||||
{
|
||||
my ($context, $mbox, $folder, $msg) = @_;
|
||||
if ($mbox =~ /^(\w+)$/) {
|
||||
$mbox = $1;
|
||||
} else {
|
||||
die ("Invalid mailbox<BR>\n");
|
||||
}
|
||||
if ($context =~ /^(\w+)$/) {
|
||||
$context = $1;
|
||||
} else {
|
||||
die ("Invalid context<BR>\n");
|
||||
}
|
||||
if ($folder =~ /^(\w+)$/) {
|
||||
$folder = $1;
|
||||
} else {
|
||||
die("Invalid folder<BR>\n");
|
||||
}
|
||||
if ($msg =~ /^(\d\d\d\d)$/) {
|
||||
$msg = $1;
|
||||
} else {
|
||||
die("Invalid Message<BR>\n");
|
||||
}
|
||||
my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$folder";
|
||||
opendir(DIR, $path) || die("Unable to open directory\n");
|
||||
my @files = grep /^msg${msg}\.\w+$/, readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach $oldfile (@files) {
|
||||
if ($oldfile =~ /^(msg${msg}.\w+)$/) {
|
||||
$oldfile = $path . "/$1";
|
||||
# print "Deleting $oldfile<BR>\n";
|
||||
unlink($oldfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub message_forward()
|
||||
{
|
||||
my ($toindex, @msgs) = @_;
|
||||
my $folder = param('folder');
|
||||
my ($mbox, $context) = split(/\@/, param('mailbox'));
|
||||
my $newmbox = param('forwardto');
|
||||
my $msg;
|
||||
my $msgcount;
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
$newmbox =~ s/(\w+)(\s+.*)?$/$1/;
|
||||
if (!&validmailbox($context, $newmbox)) {
|
||||
die("Bah! Not a valid mailbox '$newmbox'\n");
|
||||
return "";
|
||||
}
|
||||
$msgcount = &msgcount($context, $newmbox, "INBOX");
|
||||
my $txt;
|
||||
if ($newmbox ne $mbox) {
|
||||
# print header;
|
||||
foreach $msg (@msgs) {
|
||||
# print "Forwarding $msg from $mbox to $newmbox<BR>\n";
|
||||
&message_copy($mbox, $newmbox, $folder, $msg, sprintf "%04d", $msgcount);
|
||||
$msgcount++;
|
||||
}
|
||||
$txt = "Forwarded messages " . join(', ', @msgs) . "to $newmbox";
|
||||
} else {
|
||||
$txt = "Can't forward messages to yourself!\n";
|
||||
}
|
||||
if ($toindex) {
|
||||
&message_index($folder, $txt);
|
||||
} else {
|
||||
&message_play($txt, $msgs[0]);
|
||||
}
|
||||
}
|
||||
|
||||
sub message_delete_or_move()
|
||||
{
|
||||
my ($toindex, $del, @msgs) = @_;
|
||||
my $txt;
|
||||
my $path;
|
||||
my $y, $x;
|
||||
my $folder = param('folder');
|
||||
my $newfolder = param('newfolder') unless $del;
|
||||
$newfolder =~ s/^(\w+)\s+.*$/$1/;
|
||||
my ($mbox, $context) = split(/\@/, param('mailbox'));
|
||||
if (!$context) {
|
||||
$context = param('context');
|
||||
}
|
||||
if (!$context) {
|
||||
$context = "default";
|
||||
}
|
||||
my $passwd = param('password');
|
||||
my $msgcount = &msgcount($context, $mbox, $folder);
|
||||
my $omsgcount = &msgcount($context, $mbox, $newfolder) if $newfolder;
|
||||
# print header;
|
||||
if ($newfolder ne $folder) {
|
||||
$y = 0;
|
||||
for ($x=0;$x<$msgcount;$x++) {
|
||||
my $msg = sprintf "%04d", $x;
|
||||
my $newmsg = sprintf "%04d", $y;
|
||||
if (grep(/^$msg$/, @msgs)) {
|
||||
if ($newfolder) {
|
||||
&message_rename($context, $mbox, $folder, $msg, $newfolder, sprintf "%04d", $omsgcount);
|
||||
$omsgcount++;
|
||||
} else {
|
||||
&message_delete($context, $mbox, $folder, $msg);
|
||||
}
|
||||
} else {
|
||||
&message_rename($context, $mbox, $folder, $msg, $folder, $newmsg);
|
||||
$y++;
|
||||
}
|
||||
}
|
||||
if ($del) {
|
||||
$txt = "Deleted messages " . join (', ', @msgs);
|
||||
} else {
|
||||
$txt = "Moved messages " . join (', ', @msgs) . " to $newfolder";
|
||||
}
|
||||
} else {
|
||||
$txt = "Can't move a message to the same folder they're in already";
|
||||
}
|
||||
# Not as many messages now
|
||||
$msgcount--;
|
||||
if ($toindex || ($msgs[0] >= $msgcount)) {
|
||||
&message_index($folder, $txt);
|
||||
} else {
|
||||
&message_play($txt, $msgs[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (param()) {
|
||||
my $folder = param('folder');
|
||||
my $changefolder = param('changefolder');
|
||||
$changefolder =~ s/(\w+)\s+.*$/$1/;
|
||||
|
||||
my $newfolder = param('newfolder');
|
||||
$newfolder =~ s/^(\w+)\s+.*$/$1/;
|
||||
if ($newfolder && !&validfolder($newfolder)) {
|
||||
print header;
|
||||
die("Bah! new folder '$newfolder' isn't a folder.");
|
||||
}
|
||||
$action = param('action');
|
||||
$msgid = param('msgid');
|
||||
if (!$action) {
|
||||
my ($tmp) = grep /^play\d\d\d\d\.x$/, param;
|
||||
if ($tmp =~ /^play(\d\d\d\d)/) {
|
||||
$msgid = $1;
|
||||
$action = "play";
|
||||
} else {
|
||||
print header;
|
||||
print "No message?<BR>\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
@msgs = param('msgselect');
|
||||
@msgs = ($msgid) unless @msgs;
|
||||
{
|
||||
($mailbox) = &check_login();
|
||||
if (length($mailbox)) {
|
||||
if ($action eq 'login') {
|
||||
&message_index($folder, "Welcome, $mailbox");
|
||||
} elsif (($action eq 'refresh') || ($action eq 'index')) {
|
||||
&message_index($folder, "Welcome, $mailbox");
|
||||
} elsif ($action eq 'change to ->') {
|
||||
if (&validfolder($changefolder)) {
|
||||
$folder = $changefolder;
|
||||
&message_index($folder, "Welcome, $mailbox");
|
||||
} else {
|
||||
die("Bah! Not a valid change to folder '$changefolder'\n");
|
||||
}
|
||||
} elsif ($action eq 'play') {
|
||||
&message_play("$mailbox $folder $msgid", $msgid);
|
||||
} elsif ($action eq 'preferences') {
|
||||
&message_prefs("refresh", $msgid);
|
||||
} elsif ($action eq 'download') {
|
||||
&message_audio(1);
|
||||
} elsif ($action eq 'play ') {
|
||||
&message_audio(0);
|
||||
} elsif ($action eq 'audio') {
|
||||
&message_audio(0);
|
||||
} elsif ($action eq 'delete') {
|
||||
&message_delete_or_move(1, 1, @msgs);
|
||||
} elsif ($action eq 'delete ') {
|
||||
&message_delete_or_move(0, 1, @msgs);
|
||||
} elsif ($action eq 'forward to ->') {
|
||||
&message_forward(1, @msgs);
|
||||
} elsif ($action eq 'forward to -> ') {
|
||||
&message_forward(0, @msgs);
|
||||
} elsif ($action eq 'save to ->') {
|
||||
&message_delete_or_move(1, 0, @msgs);
|
||||
} elsif ($action eq 'save to -> ') {
|
||||
&message_delete_or_move(0, 0, @msgs);
|
||||
} elsif ($action eq 'logout') {
|
||||
&login_screen("Logged out!\n");
|
||||
}
|
||||
} else {
|
||||
sleep(1);
|
||||
&login_screen("Login Incorrect!\n");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
&login_screen("\ ");
|
||||
}
|
Reference in New Issue
Block a user