Viewing file: folder.pl (13.1 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl
###########################################################################
# folder.pl - Folder features
###########################################################################
require "common.pl";
mkdir $folderdir, 0700;
if ($button eq $cancel_button) {
&cancel;
} elsif ($remip ne $fromip) {
&diffip;
} elsif ($button eq $folder_button) {
###########################################################################
# Display the users folder list and list options
###########################################################################
&print_header;
if ($btns eq 'top' || $btns eq 'both' ) { &print_options; }
($username, $junk) = split (/ /, $sessionid);
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
print $query->startform($method, $folder_pl, $CGI::URL_ENCODED);
print $query->hidden('SESSIONID', $sid);
@folder_list = keys %index;
print $query->scrolling_list('FOLDER', \@folder_list, '', 15, '', \%index);
print "<TABLE WIDTH=\"100%\" BORDER=\"0\">\n";
print "<TR><TD WIDTH=\"25%\" ALIGN=\"LEFT\" VALIGN=\"TOP\">\n";
print $query->submit('BUTTON', $openfolder_button);
print "</TD><TD WIDTH=\"25%\" ALIGN=\"CENTER\" VALIGN=\"TOP\">\n";
print $query->submit('BUTTON', $newfolder_button);
print "</TD><TD WIDTH=\"25%\" ALIGN=\"CENTER\" VALIGN=\"TOP\">\n";
print $query->submit('BUTTON', $renfolder_button);
print "</TD><TD WIDTH=\"25%\" ALIGN=\"RIGHT\" VALIGN=\"TOP\">\n";
print $query->submit('BUTTON', $delfolder_button);
print "</TD></TR></TABLE>";
print $query->endform;
dbmclose(%index);
if ($btns eq 'bottom' || $btns eq 'both') { &print_options; }
} elsif ($button eq $newfolder_button) {
###########################################################################
# Create a new folder
###########################################################################
&print_header;
print $query->startform($method, $folder_pl, $CGI::URL_ENCODED);
print $query->hidden('SESSIONID', $sid);
print "<TABLE BORDER=\"0\">\n";
print "<TR><TD>$foldname_input</TD><TD><INPUT NAME=FOLDER SIZE=24></td></tr>\n";
print "</TABLE>\n";
print $query->submit('BUTTON', $add_button);
print $query->submit('BUTTON', $cancel_button);
print $query->reset($reset_button);
print $query->endform;
} elsif ($button eq $delfolder_button) {
###########################################################################
# Ask if they are sure they want to delete
###########################################################################
&print_header;
print $folder_del_ask_info;
print $query->startform($method, $folder_pl, $CGI::URL_ENCODED);
print $query->hidden('SESSIONID', $sid);
print $query->hidden('FOLDER', $folder);
print $query->submit('BUTTON', $yes_button);
print $query->submit('BUTTON', $cancel_button);
} elsif ($button eq $yes_button) {
###########################################################################
# Delete the folder
###########################################################################
($username, $junk) = split (/ /, $sessionid);
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
delete($index{$folder});
dbmclose(%index);
$filename = $folderdir . "/" . $username . "/" . $folder;
foreach $extension ("db", "pag", "dir") {
$folderfile = $filename . "." . $extension;
unlink $folderfile;
}
&print_header;
print $folder_del_info;
&print_options;
} elsif ($button eq $add_button) {
###########################################################################
# Add the folder
###########################################################################
($username, $junk) = split(/ /, $sessionid);
$index = $folderdir . "/" . $username . "-index";
$userdir = $folderdir . "/" . $username;
mkdir $userdir, 0700;
$folder_name = crypt($folder, 'fo') . time;
$folder_name =~ s/\//_/g;
dbmopen(%index, $index, 0600) || die "Error opening db $index";
$index{$folder_name} = $folder;
dbmclose(%index);
$folderdbm = $userdir . "/" . $folder_name;
dbmopen(%fold, $folderdbm, 0600) || die "Error opening db $folderdbm";
$fold{'MESSAGES'} = 0;
dbmclose(%fold);
&print_header;
print $folder_add_info;
&print_options;
} elsif ($button eq $renfolder_button){
###########################################################################
# Rename the folder
###########################################################################
($username, $junk) = split(/ /, $sessionid);
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
$folder_name = $index{$folder};
dbmclose(%index);
&print_header;
print $query->startform($method, $folder_pl, $CGI::URL_ENCODED);
print $query->hidden('SESSIONID', $sid);
print $query->hidden('FOLDER', $folder);
print "<TABLE BORDER=\"0\"><TR><TD>";
print $foldname_input;
print "</TD><TD>";
print $query->textfield('NEWFOLDER', $folder_name, 24);
print "</TD></TR></TABLE>\n";
print $query->submit('BUTTON', $rename_button);
print $query->submit('BUTTON', $cancel_button);
print $query->reset($reset_button);
print $query->endform;
} elsif ($button eq $openfolder_button){
###########################################################################
# open the folder
###########################################################################
&print_header;
###########################################################################
# Print the header
###########################################################################
if ($btns eq 'top' || $btns eq 'both' ) { &print_options; }
###########################################################################
# For folders other than INBOX, or local INBOX
###########################################################################
($username, $junk) = split (/ /, $sessionid);
$foldir = $folderdir . "/" . $username;
mkdir $foldir, 0700;
$fold = $foldir . "/" . $folder;
dbmopen(%folder, $fold, 0600) || die "Error opening db $fold";
$pop = 'no';
@key_temp = split(/\t/, $folder{'MESSAGES'});
$num_messages = $#key_temp;
if ($num_messages < 1) {$num_messages = 0; }
foreach (@key_temp) { unless ($_ == 0) { $mess_list[++$i] = $_; } }
###########################################################################
# Make a list of the user's messages
###########################################################################
unless ($num_messages < 1) {
print $query->startform($method, $messact_pl, $CGI::URL_ENCODED);
if ($btns eq 'top' || $btns eq 'both') {
print "<TABLE WIDTH=\"100%\" BORDER=\"0\"><TR>\n";
print "<TD WIDTH=\"50%\" ALIGN=\"LEFT\">";
print $query->submit('BUTTON', $delmarked_button);
print "</TD><TD WIDTH=\"50%\" ALIGN=\"RIGHT\">";
print $query->reset($clrcheck_button);
if(!(($sessionid =~ /\@/) || ($sid eq ""))){
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
@index = keys %index;
if (@index){
print "</TD></TR><TR><TD ALIGN=\"LEFT\">";
print $query->submit('BUTTON', $movemarked_button);
print "</TD><TD ALIGN=\"RIGHT\">";
print $query->popup_menu('NEWFOLDER', \@index, '', \%index);
}
dbmclose(%index);
}
print "</TD></TR></TABLE>\n";
}
print "<H3>$num_messages $total_mess_info</H3>";
print $query->hidden('SESSIONID', $sid);
print $query->hidden('FOLDER', $folder);
print "<TABLE WIDTH=\"100%\" BORDER=\"0\">\n";
print "<TR>";
#print "<TD WIDTH=\"5%\"><B>$status_info</B></TD>\n";
print "<TD WIDTH=\"30%\"><B>$from_info</B></TD>\n";
print "<TD WIDTH=\"30%\"><B>$subj_info</B></TD>\n";
print "<TD WIDTH=\"30%\"><B>$date_info</B></TD>\n";
print "<TD WIDTH=\"5%\"><B>$size_info</B></TD>\n";
print "<TD WIDTH=\"5%\"><B>$mark_info</B></TR>\n";
for($i = 1; $i <= $num_messages; $i++){
###########################################################################
# Clear out the temporary buffer thingies
###########################################################################
$from = "";
$subject = "";
$date = "";
$message_size = "";
$header = "";
###########################################################################
# Local folders
###########################################################################
$header = $folder{$mess_list[$i]};
$message_size = length($header);
###########################################################################
# Parse the header of the message for From, Subject, and Date line,
# also make it play nicely with HTML
###########################################################################
$header =~ s/</\<\;/g;
$header =~ s/>/\>\;/g;
$header =~ s/(.*)?\r*\n\r*\n(.*)/$1/;
@header = split(/\n/, $header);
foreach $line (@header){
if ($line =~ /^From:/i && $from eq ""){
$from = $line;
} elsif ($line =~ /^Subject:/i && $subject eq "") {
$subject = $line;
} elsif ($line =~ /^Date:/i && $date eq "") {
$date = $line;
} elsif ($line =~ /^Status:/i && $date eq "") {
if ($line =~ /R/) { $status = ''; }
else { $status = $new_info; }
}
}
###########################################################################
# We don't need the "From: " part, etc.
###########################################################################
($junk, $from) = split (/\s/, $from, 2);
($junk, $subject) = split (/\s/, $subject, 2);
($junk, $date) = split (/\s/, $date, 2);
chomp $from;
chomp $subject;
chomp $date;
###########################################################################
# Get the from address for a nice link
###########################################################################
@fromaddress = split (/\s/, $from);
foreach $line (@fromaddress) {
if ($line =~ /\@.*\./) {
$fromaddress = $line;
}
}
$fromaddress =~ s/<//g;
$fromaddress =~ s/>//g;
$fromaddress =~ s/\<\;//ig;
$fromaddress =~ s/\>\;//ig;
###########################################################################
# Display the information and a couple of buttons for each message
###########################################################################
if ($i % 2 == 1) {
$cellcolor = $odd_row_color;
} else {
$cellcolor = $even_row_color;
}
print "<TR>";
#print "<TD BGCOLOR=\"$cellcolor\">";
#print $status;
#print "</TD>";
print "<TD BGCOLOR=\"$cellcolor\">";
$butt = CGI::escape($sendto_button);
print $query->a({href=>"$options_pl?SESSIONID=$sid&TO=$fromaddress&BUTTON=$butt"}, $from);
print "</TD>\n";
if ($subject eq "") {
$subject = "$nosubj_info";
}
print "<TD BGCOLOR=\"$cellcolor\">";
print $query->a({href=>"$messact_pl?SESSIONID=$sid&FOLDER=$folder&BUTTON=$read_button&MESSAGES=$mess_list[$i]&ATTACHMENT=NONE"}, $subject);
print "</TD>\n";
print "<TD BGCOLOR=\"$cellcolor\">";
print $date;
print "</TD>\n";
print "<TD BGCOLOR=\"$cellcolor\">";
print $message_size;
print "</TD><TD BGCOLOR=\"$cellcolor\">";
print $query->checkbox('MESSAGES', '', $mess_list[$i], '');
}
###########################################################################
# Good HTML
###########################################################################
print "</TABLE>";
if ($btns eq 'bottom' || $btns eq 'both') {
print "<TABLE WIDTH=\"100%\" BORDER=\"0\"><TR>\n";
print "<TD WIDTH=\"50%\" ALIGN=\"LEFT\">";
print $query->submit('BUTTON', $delmarked_button);
print "</TD><TD WIDTH=\"50%\" ALIGN=\"RIGHT\">";
print $query->reset($clrcheck_button);
if(!(($sessionid =~ /\@/) || ($sid eq ""))){
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
@index = keys %index;
if (@index){
print "</TD></TR><TR><TD ALIGN=\"LEFT\">";
print $query->submit('BUTTON', $movemarked_button);
print "</TD><TD ALIGN=\"RIGHT\">";
$index = $folderdir . "/" . $username . "-index";
print $query->popup_menu('NEWFOLDER', \@index, '', \%index);
}
dbmclose(%index);
}
print "</TD></TR></TABLE>\n";
}
print $query->endform;
} else {
print "<H3>$num_messages $total_mess_info</H3>";
}
if (($btns eq 'bottom') || ($buttons eq 'both')) { &print_options; }
} elsif ($button eq $rename_button){
###########################################################################
# rename the folder
###########################################################################
($username, $junk) = split(/ /, $sessionid);
$index = $folderdir . "/" . $username . "-index";
dbmopen(%index, $index, 0600) || die "Error opening db $index";
$index{$folder} = $newfolder;
dbmclose(%index);
&print_header;
print $folder_ren_info;
&print_options;
}
###########################################################################
# Done
###########################################################################
&update_sess;
unless ($button eq $openfolder_button){
&print_footer;
}
|