📄 vmail.cgi
字号:
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 $context = param('context'); 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>_EOHforeach $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\@$context</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&context=$context&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 = &untaint(param('folder')); my $msgid = &untaint(param('msgid')); my $mailbox = &untaint(param('mailbox')); my $context = &untaint(param('context')); my $format = param('format'); if (!$format) { $format = &getcookie('format'); } &untaint($format); my $path = "/var/spool/asterisk/voicemail/$context/$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\@$context $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>_EOHprint "<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"> _EOHif ($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>";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -