home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.sunet.sepub/pictures
/
2014.11.ftp.sunet.se-pictures.tar
/
ftp.sunet.se
/
pub
/
pictures
/
ACiD-artpacks
/
www
/
mirrors
/
acheron
/
discus_admin_116439176
/
source
/
src-board-subs-5
< prev
next >
Wrap
Text File
|
1999-01-29
|
34KB
|
919 lines
# FILE: src-board-subs-5
#-------------------------------------------------------------------------------
# This script is copyright (c) 1998 by DiscusWare, LLC, all rights reserved.
# Its use is subject to the license agreement that can be found at the following
# URL: http://www.chem.hope.edu/discus/license
#-------------------------------------------------------------------------------
#---SEPARATOR---#
#REQ:extract_colorsonly
sub preview_admin_message {
local ($message_source, $message_formatted, $username, $referer, $action, $mtitle) = @_;
&header;
print "<HTML><HEAD><TITLE>Preview of $mtitle</TITLE>\n";
print "<SCRIPT LANGUAGE=\"JavaScript\">\n";
print "<!--\n";
print "function setStatus(msg) {\n";
print " window.status=msg\n";
print " return true\n";
print "}\n";
print "//-->\n";
print "</SCRIPT></HEAD>\n";
($bgcolor, $text, $link, $vlink, $alink, $face, $size, $img) = &extract_colorsonly;
print "<BODY BGCOLOR=\"ffffff\" TEXT=\"000000\" LINK=\"$link\" ";
print "VLINK=\"$vlink\" onLoad=\"window.defaultStatus='Preview of $mtitle'\">$fs\n";
print "<FONT SIZE=3><CENTER><B>Preview of $mtitle</B></CENTER></FONT>\n<HR>\n";
if ($mtitle eq "About Message" || $mtitle eq "Announcement") {
local (@array) = ("$topic_number:$topic_name");
foreach $key (sort by_number keys(%level_number)) {
push (@array, "$level_number{$key}:$level_name{$key}");
}
print "<B><A HREF=\"$cgiurlm?username=$username&action=mgr_1";
print "&HTTP_REFERER=$page_referer\" onMouseOver=\"return setStatus('";
print "Return to topic selection screen')\"><FONT COLOR=#0000ff>Page Manager</FONT></A>:\n";
foreach $line (@array) {
($number,$name) = split(/:/, $line, 2);
print "<A HREF=\"$cgiurlm?username=$username&action=page_editor";
print "&HTTP_REFERER=//$topic_number/$number.$ext\" onMouseOver=\"return ";
$str = &JavaScript_prepare($name);
print "setStatus('Return to editing $str')\">";
print "<FONT COLOR=#0000ff>$name</FONT>";
print "</A>: \n";
}
} elsif ($mtitle eq "Main Message" || $mtitle eq "Title Message" || $mtitle eq "Topic Description") {
print "<B><A HREF=\"$cgiurlm?username=$username&cmd=board_mgr\" onMouseOver=\"";
print "return setStatus('Return to Board Manager')\"><FONT COLOR=#0000ff>Board Manager</FONT></A>:\n";
} elsif ($mtitle eq "Welcome Message") {
print "<B><A HREF=\"$cgiurlm?username=$username&cmd=options_mgr\" onMouseOver=\"";
print "return setStatus('Return to Options Manager')\"><FONT COLOR=#0000ff>Options Manager</FONT></A>: ";
print "<A HREF=\"$cgiurlm?username=$username&cmd=reg_configurator\" onMouseOver=\"";
print "return setStatus('Return to Self Registration Configurator')\"><FONT COLOR=#0000ff>Self Registration Configurator</FONT></A>: ";
}
print "Preview of $mtitle</B>\n";
print "<HR><P>\n";
print "A preview of your message appears below. If you used any ";
print "formatting tags in your message, please check to see that your ";
print "formatting is displayed correctly in the preview.<P>\n";
print "<TABLE BORDER=1 WIDTH=100% HEIGHT=40%>\n";
print "<TR><TD VALIGN=TOP BGCOLOR=\"$bgcolor\" BACKGROUND=\"$img\"><FONT COLOR=\"$text\" FACE=\"$face\" SIZE=\"$size\">$message_formatted</FONT>";
print "</TD></TR></TABLE><P>\n";
print "<HR><P><H3>Revise $mtitle</H3>\n";
print "<TABLE BGCOLOR=ffffcc BORDER=1 WIDTH=100%><TR><TD>";
print "<FORM ACTION=\"$cgiurl1\" METHOD=POST>\n" if ($mtitle eq "About Message" || $mtitle eq "Announcement");
print "<FORM ACTION=\"$cgiurl2\" METHOD=POST>\n" if ($mtitle eq "Main Message" || $mtitle eq "Topic Description" || $mtitle eq "Title Message");
print "<FORM ACTION=\"$cgiurl\" METHOD=POST>\n" if ($mtitle eq "Welcome Message");
print "<TABLE><TR><TD><TEXTAREA NAME=message ROWS=6 COLS=60 WRAP=VIRTUAL>";
print "$message_source</TEXTAREA></TD></TR></TABLE><P>\n\n";
print "<input type=hidden name=\"action\" value=\"$action\">\n";
print "<input type=hidden name=\"username\" value=\"$username\">\n";
print "<input type=submit name=submit value=\"Refresh Preview\">\n";
print "<input type=submit name=submit value=\"Save Message\">\n" if $message_formatted !~ /<H3>FORMATTING/i;
print "<input type=hidden name=\"HTTP_REFERER\" value=\"$referer\">\n" if $referer;
print "</TD></TR></TABLE></FORM></BODY></HTML>\n";
exit(0);
}
#---SEPARATOR---#
sub change_about_message {
local ($file, $source, $formatted) = @_;
local (@file, $messageflag, $line, $source_esc, $topic, $page);
if ($file =~ m|/(\d+)/(\d+)\.$ext|) {
($topic, $page) = ($1, $2);
} else {
&error_message("Change About Message Error", "Could not open requested file");
}
&lock("$message_dir/$topic/$page.$ext");
local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic, $page);
&set_page($topic, $page, $head, $color, $lm, $ann, $ann_src, $sublist, $formatted, &escape($source), $message, $message_src);
&unlock("$message_dir/$topic/$page.$ext");
}
#---SEPARATOR---#
#REQ:recurse
sub remove_page {
local ($topic_number, $parent, $page_number) = @_;
local ($pn, @pn, @lines, $line, $filename, $filenumber, @ps);
@pn = split(/,/, $page_number);
foreach $pn (@pn) {
$pn =~ s/^0//g;
}
&lock("$message_dir/$topic_number/$parent.$ext");
local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic_number, $parent);
@lines = split(/\n/, $sublist);
foreach $line (@lines) {
$filenumber = "-NONE-";
$filenumber = $1 if $line =~ m|<!-Top: (\d+)-!>|;
$filenumber = $1 if $line =~ m|<!-URL: (\d+)-!>|;
if (grep(/^$filenumber$/, @pn)) {
$line = "";
push (@ps, $filenumber);
}
}
$sublist = join("\n", grep(/\S/, @lines));
&set_page($topic_number, $parent, $head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src);
&unlock("$message_dir/$topic_number/$parent.$ext");
foreach $filenumber (@ps) {
&recurse ($topic_number, $filenumber, "delete");
}
}
#---SEPARATOR---#
#REQ:get_date_time
#REQ:manage_images
#REQ:manage_attachments
#REQ:reapply_webtags
sub move_page {
local ($old_topic, $page_number, $old_parent, $new_topic, $new_parent) = @_;
return 1 if ($old_topic == $new_topic && $old_parent == $new_parent);
&lock("$message_dir/$old_topic/$old_parent.$ext");
local ($head1, $color1, $lm1, $ann1, $ann_src1, $sublist1, $about1, $about_src1, $message1, $message_src1) = &get_page($old_topic, $old_parent);
local (@temp, $headstr, $nextkey, $owner, $line, $param, @tomove, $temp, @pn);
local ($t1, $t2, $t3);
undef @message_move_move_page;
@pn = split(/,/, $page_number);
@temp = split(/\n/, $sublist1);
foreach $line (@temp) {
$line =~ m|<!-(\w+): (\d+)-!>|;
$temp = $2;
if (grep(/^$temp$/, @pn)) {
push (@tomove, $line) if ($old_topic != $new_topic || $old_parent != $new_parent);
$line = "";
}
}
$sublist1 = join("\n", grep(/\S/, @temp));
&set_page($old_topic, $old_parent, $head1, $color1, $lm1, $ann1, $ann_src1, $sublist1, $about1, $about_src1, $message1, $message_src1);
&unlock("$message_dir/$old_topic/$old_parent.$ext");
&lock("$message_dir/$new_topic/$new_parent.$ext");
local ($head2, $color2, $lm2, $ann2, $ann_src2, $sublist2, $about2, $about_src2, $message2, $message_src2) = &get_page($new_topic, $new_parent);
if ($new_topic != $old_topic) {
foreach $line (@tomove) {
$line =~ s|/messages/$old_topic/(\d+).$ext|/messages/$new_topic/$1.$ext|g;
}
}
$sublist2 .= join("\n", @tomove);
@temp = split(/\n/, $head2);
foreach $line (@temp) {
if ($line =~ m|<!--Topic:|) {
$headstr .= "$line\n";
} elsif ($line =~ m|<!--Owner: (.*)-->|) {
$owner = $1;
} elsif ($line =~ m|<!--Level (\d+): (\d+)/(.*)-->|) {
($t1, $t2, $t3) = ($1, $2, $3);
$headstr .= "$line\n";
$nextkey = $t1;
} elsif ($line =~ m|<!--Param: (.*)-->|) {
$param = $1;
}
}
$nextkey += 1;
&set_page($new_topic, $new_parent, $head2, $color2, $lm2, $ann2, $ann_src2, $sublist2, $about2, $about_src2, $message2, $message_src2);
&unlock("$message_dir/$new_topic/$new_parent.$ext");
foreach $line (@tomove) {
if ($line =~ m|<!-Top: (\d+)-!>|) {
®enerate_pages($headstr, $old_topic, $1, "", $owner, $new_topic, $nextkey, $new_parent);
}
}
if (scalar(@message_move_move_page)) {
local (@LOG);
&lock("$admin_dir/log.txt");
open (LOG, "$admin_dir/log.txt");
@LOG = <LOG>;
close (LOG);
local ($indx, $who, $when, $where, $rest);
foreach $line (@LOG) {
($indx, $who, $when, $where, $rest) = split(/;/, $line, 5);
if (grep(/^$indx$/, @message_move_move_page)) {
($tpc, $page) = split(/\//, $where);
$line = join(";", $indx, $who, $when, "$new_topic/$page", $rest);
}
}
open (LOG, ">$admin_dir/log.txt");
print LOG @LOG;
close (LOG);
&unlock("$admin_dir/log.txt");
}
}
sub regenerate_pages {
local ($headstr, $topic, $page, $additional, $owner, $new_topic, $nextkey, $parent) = @_;
&lock("$message_dir/$topic/$page.$ext");
local ($head1, $color1, $lm1, $ann, $ann_src, $sublist1, $about1, $about_src1, $message1, $message_src1) = &get_page($topic, $page);
&unlock("$message_dir/$topic/$page.$ext");
local ($line, @head, $newhead, $me_name, $param, $me_number);
@head = split(/\n/, $head1);
foreach $line (@head) {
if ($line =~ m|<!--Me: (\d+)/(.*)-->|) {
($me_number, $me_name) = ($1, $2);
} elsif ($line =~ m|<!--Param: (.*)-->|) {
$param = $1;
}
}
$newhead = $headstr;
$newhead .= $additional;
$newhead .= "<!--Level $nextkey: $page/$me_name-->\n";
$additional .= "<!--Level $nextkey: $page/$me_name-->\n";
$nextkey += 1;
$newhead .= "<!--Me: $page/$me_name-->\n";
$newhead .= "<!--Parent: $parent-->\n";
$newhead .= "<!--Owner: $owner-->\n";
$newhead .= "<!--Param: $param-->\n";
local ($numb, $exten, @msg);
&unlock("$message_dir/$topic/$page.$ext");
@msg = split(/\n/, $sublist1);
foreach $line (@msg) {
if ($line =~ m|<!-Top: (\d+)-!>|) {
$numb = $1;
if ($new_topic != $topic) {
$line =~ s|/messages/$topic/(\d+).$ext|/messages/$new_topic/$1.$ext|g;
}
®enerate_pages($headstr, $topic, $numb, $additional, $owner, $new_topic, $nextkey, $me_number);
}
}
$sublist1 = join("\n", @msg);
$p_temp = $message1;
while ($p_temp =~ m|<!-Post: (\d+)-!>|) {
push (@message_move_move_page, $1);
$p_temp = join("", $`, $');
}
undef @files_move;
@files_move = &manage_images(&unescape($message_src1), $topic, 0, "list");
@files_move_2 = &manage_attachments(&unescape($message_src1), $topic, 0, "list") if $pro;
foreach $f (@files_move_2) {
push (@files_move, $f);
}
if (scalar(@files_move) > 0) {
$topic_number = $new_topic;
foreach $file_in (@files_move) {
if ($file_in =~ m|^(.*)/(\d+)/([^/]+)$|) {
$filename = $3;
$dest = "$message_dir/$new_topic/$filename" if -e "$message_dir/$new_topic";
$dest = "$secdir/$new_topic/$filename" if -e "$secdir/$new_topic";
open (SRC, "$file_in");
eval 'binmode(SRC);';
@src = <SRC>;
close (SRC);
open (DEST, ">$dest");
eval 'binmode(DEST);';
print DEST @src;
close (DEST);
unlink($file_in);
}
}
$message1 = &reapply_webtags($message_src1, $message1);
}
&set_page($new_topic, $page, $newhead, $color1, $lm1, $ann, $ann_src, $sublist1, $about1, $about_src1, $message1, $message_src1);
if ($new_topic != $topic) {
unlink ("$secdir/$topic/$page.$ext") if !-e "$html_dir/messages/$topic/$page.$ext";
unlink ("$html_dir/messages/$topic/$page.$ext") if -e "$html_dir/messages/$topic/$page.$ext";
}
}
#---SEPARATOR---#
#REQ:determine_addmessage
sub printuntil {
local ($start, $finish, $topic_number, $title, $flag, $cache) = @_;
if (!$cache) {
($template, $addfile) = &determine_addmessage($topic_number);
@PrintUntil_FILE = split(/\n/, $template);
if ($flag != 1) {
($bgcolor, $text, $link, $vlink, $alink, $face, $size, $image) = &ex('extract_colorsonly', 1);
}
foreach $line (@PrintUntil_FILE) {
$line .= "\n";
while ($line =~ /\$(\w+)/) {
$this = eval "\$$1";
$line = $` . $this . $';
}
}
}
$cpos = 0;
foreach $line (@PrintUntil_FILE) {
if ($line =~ m|<!--Start-->|) {
$cpos = 1;
} elsif ($line =~ m|<!--Bigtitle-->|) {
$cpos = 2;
} elsif ($line =~ m|<!--/Bigtitle-->|) {
$cpos = 3;
} elsif ($line =~ m|<!--Navbar-->|) {
$cpos = 4;
} elsif ($line =~ m|<!--/Navbar-->|) {
$cpos = 5;
} elsif ($line =~ m|<!--Announcement-->|) {
$cpos = 0;
} elsif ($line =~ m|<!--/Announcement-->|) {
$cpos = 5;
} elsif ($line =~ m|<!--Sublist-->|) {
$cpos = 6;
} elsif ($line =~ m|<!--/Sublist-->|) {
$cpos = 7;
} elsif ($line =~ m|<!--Create-->|) {
$cpos = 8;
} elsif ($line =~ m|<!--/Create-->|) {
$cpos = 9;
} elsif ($line =~ m|<!--About-->|) {
$cpos = 10;
} elsif ($line =~ m|<!--/About-->|) {
$cpos = 11;
} elsif ($line =~ m|<!--Messages-->|) {
$cpos = 12;
} elsif ($line =~ m|<!--/Messages-->|) {
$cpos = 13;
} elsif ($line =~ m|<!--Add-->|) {
$cpos = 14;
} elsif ($line =~ m|<!--/Add-->|) {
$cpos = 15;
} elsif ($line =~ m|<!--Message Source|) {
$cpos = 16;
} elsif ($line =~ m|-->| && $cpos == 16) {
$cpos = 17;
} elsif ($line =~ m|<META|i && $line !~ m|<!-ShowMeta-!>|) {
# Skip
} elsif ($line =~ m|^<!-AdminFromHere-!>|) {
# Skip
} elsif ($start == $finish && $cpos == $start) {
print $line if $line =~ /\S/;
} elsif ($start != $finish && $cpos >= $start && $cpos <= $finish && $cpos % 2 == 1) {
print $line if $line =~ /\S/;
}
}
}
#---SEPARATOR---#
sub remove_swearing {
local ($message_in, $code, $star_flag) = @_;
if (open(CUSS, "$admin_dir/cuss.txt")) {
@cuss = <CUSS>;
close (CUSS);
@cuss = grep(!/^#/, @cuss);
foreach $line (@cuss) {
$line =~ s/\s//g;
next if length($line) == 0;
if ($line =~ m|!|) {
$line = $';
$line =~ tr/a-zA-Z/b-zaB-ZA/;
}
$stars = "\\char{149}" x length($line);
$stars = join("", "\\red{", $stars, "}") if $code != 3;
$stars = "" x length($line) if $star_flag;
$message_in =~ s/\b$line\b/$stars/gi;
}
}
return $message_in;
}
#---SEPARATOR---#
sub access_mgr_2 {
local ($topic, $username) = @_;
local (@read, @post, $rl, $pl);
&extract("//$topic/$topic.$ext");
open (SECURITY, "$admin_dir/posting.txt"); @post = <SECURITY>; close (SECURITY);
($pl) = grep(/^$topic:/, @post);
open (SECURITY, "$admin_dir/postoptions.txt"); @options = <SECURITY>; close (SECURITY);
($ps) = grep(/^$topic:/, @options);
open (GROUPS, "$admin_dir/groups.txt"); @grp = <GROUPS>; close (GROUPS);
foreach $grp (@grp) {
$grp =~ m|^(\w+):|; $grp = $1;
}
&header;
print "<HTML><HEAD><TITLE>Access Manager</TITLE>\n";
print "<SCRIPT LANGUAGE=\"JavaScript\"> <!-- Hide\n";
print "function setStatus(msg) {\n";
print " window.status=msg\n";
print " return true\n";
print "}\n";
print "//-->\n";
print "</SCRIPT></HEAD>\n";
print '<BODY BGCOLOR="ffffff" TEXT="000000" LINK="0000FF" VLINK="0000FF" ';
print "onLoad=\"window.defaultStatus = 'Access Editor: ";
print &JavaScript_prepare($topic_name);
print "'\">$fs\n";
print "<FONT SIZE=3><CENTER><B>Access Editor: $topic_name</B></CENTER></FONT>\n";
print "<HR><B><A HREF=$cgiurlm?action=access_mgr_1&username=$username onMouseOver=\"return setStatus('Return to topic selection screen')\">Access Manager</A>:\n";
print "Access Editor</B>\n";
print "<HR><H3>Posting Privileges</H3>";
print "<FORM ACTION=\"$cgiurl\" METHOD=POST NAME=\"POSTFORM\">\n";
print "<TABLE BGCOLOR=#ffffcc BORDER=1 WIDTH=100%><TR><TD>\n";
($topic, $ip, $usrgrp, $modgrp, $pass) = split(/:/, $pl);
@usrgrp = split(/,/, $usrgrp); @modgrp = split(/,/, $modgrp);
@ip = split(/,/, $ip);
print "$fs\n";
print "<INPUT TYPE=HIDDEN NAME=topic VALUE=$topic_number>\n";
print "<INPUT TYPE=HIDDEN NAME=username VALUE=$username>\n";
print "<INPUT TYPE=HIDDEN NAME=action VALUE=access_edit_simple>\n";
print "<INPUT TYPE=HIDDEN NAME=interface VALUE=simple>\n";
print "<B>Unrestricted:</B><BR>\n";
print " <INPUT TYPE=CHECKBOX NAME=\"publicbox\" VALUE=on ";
print "CHECKED " if grep(/^~$/, @ip);
print " onClick=\"if (document.forms[0].publicbox.checked) { document.forms[0].modgroup.checked = 0; document.forms[0].usergroup.checked = 0; document.forms[0].modall.checked = 0; document.forms[0].userall.checked = 0; }\"> Public Posting (anyone at all)";
print "<P>\n";
print "<B>Restricted to:</B><BR>\n";
print " <INPUT TYPE=CHECKBOX NAME=modgroup VALUE=on ";
print "CHECKED" if grep(/^$owner$/, @modgrp);
print "CHECKED" if grep(/^~$/, @modgrp);
print " onClick=\"document.forms[0].publicbox.checked = 0;\"";
print "> Moderators in this group (\u$owner)";
print "<BR>\n";
print " <INPUT TYPE=CHECKBOX NAME=usergroup VALUE=on ";
print "CHECKED" if grep(/^$owner$/, @usrgrp);
print "CHECKED" if grep(/^~$/, @usrgrp);
print " onClick=\"document.forms[0].publicbox.checked = 0;\"";
print "> Users in this group (\u$owner)";
print "<BR>\n";
print " <INPUT TYPE=CHECKBOX NAME=modall VALUE=on ";
print "CHECKED" if grep(/^~$/, @modgrp);
print " onClick=\"document.forms[0].publicbox.checked = 0;\"";
print "> Moderators in every group";
print "<BR>\n";
print " <INPUT TYPE=CHECKBOX NAME=userall VALUE=on ";
print "CHECKED" if grep(/^~$/, @usrgrp);
print " onClick=\"document.forms[0].publicbox.checked = 0;\"";
print "> Users in every group";
$ps =~ s/\s*$//;
print "<P>\n";
($topicnumb, $anon, $stamp, $emaild) = split(/:/, $ps);
print "<INPUT TYPE=CHECKBOX NAME=anondisable VALUE=1 ";
print "CHECKED" if $anon == 1;
print "> Disable anonymous posts\n";
print "<BR>\n";
print "<INPUT TYPE=CHECKBOX NAME=emaildisable VALUE=1 ";
print "CHECKED" if $emaild == 1;
print "> Disable e-mail link on posts\n";
print "<BR>\n";
print "<INPUT TYPE=CHECKBOX NAME=stampdisable VALUE=1 ";
print "CHECKED" if $stamp == 1;
print "> Disable full name on posts\n";
print "<P><INPUT TYPE=SUBMIT VALUE='Save'>\n";
print "<INPUT TYPE=SUBMIT name=kill VALUE='Disable All Posting'>\n";
print "</TD></TR></TABLE>\n";
print "</FORM>\n";
print "</BODY></HTML>\n";
}
#---SEPARATOR---#
sub send_email_message {
local ($addresses, $subject_line, $text_out, $footer, $topic_number, $me_number) = @_;
if ($GLOBAL_OPTIONS{'options_used'}) {
if ($GLOBAL_OPTIONS{'capable'} eq "0") {
return 0;
}
if ($GLOBAL_OPTIONS{'capable'} eq "" && $GLOBAL_OPTIONS{'email'} == 0) {
return 0;
}
}
# Important note: Each address in '$addresses' was checked in the calling
# subroutine to meet the following pattern:
# m|^([\w\-\+\.]+)\@([\w\-\+\.]+)$|
undef %email;
# The following code checks for an "email.txt" file in your source directory
# and if it exists, it uses it. We use this in our demonstration service,
# although it is unlikely that anyone else would need to use this.
if (open(CFG, "$admin_dir/source/email.txt")) {
@cfg = <CFG>;
close (CFG);
} elsif (open (CFG, "$admin_dir/email.txt")) {
@cfg = <CFG>;
close (CFG);
} else {
return 0;
}
foreach $line (@cfg) {
if ($line =~ m|^(\w+)=(.*)|) {
$o = $1; $t = $2;
$t = &unescape($t) if $t !~ /\s/;
$email{$o} = $t;
}
}
$command = $email{'command_line'};
$input = $email{'input_stream'};
$command =~ s/\$SUBJECT/$subject_line/g;
$input =~ s/\$SUBJECT/$subject_line/g;
$command =~ s/\$REPLYTO/$reply_to/g;
$input =~ s/\$REPLYTO/$reply_to/g;
if ($email{'1message'} == 1) {
@addresses = split(/,/, $addresses);
foreach $line (@addresses) {
($email, $user, $pass) = split(/\|\|/, $line);
$line = $email;
}
$addresses = join(",", @addresses);
$command =~ s/\$BCC/$addresses/g;
$input =~ s/\$BCC/$addresses/g;
if ($email{'tempfile'} == 0) {
open (MAIL, $command);
} else {
$pid = $$; $pid =~ s/\D//g; $time = time;
$tempfile = "$message_dir/$time-$pid.tmp";
open (MAIL, ">$tempfile");
}
print MAIL $input;
print MAIL "\n";
print MAIL $text_out;
print MAIL $footer if $footer;
close (MAIL);
if ($email{'tempfile'} == 1) {
$command =~ s%^\|\s*%%;
$pr = $email{'mail_program'};
if ($command =~ m|$pr|) {
$stuff = $';
$command = $pr;
} else {
$stuff = "";
}
if ($^O eq "MSWin32") {
$mail_prog = $pr;
$mail_prog =~ s/\//\\/g;
$tempfile =~ s/\//\\/g;
$stuff =~ s/'/"/g;
$stuff =~ s/^\s*//;
if ($mail_prog =~ m|(.*)\\|) {
$cwd = $1;
} else {
$cwd = ".";
}
eval '
use Win32::Process;
use Win32;
Win32::Process::Create($ProcessObj, $mail_prog, "$mail_prog $tempfile $stuff", 0, DETACHED_PROCESS, $cwd) || &error_message("Windows Process Creation Error", Win32::FormatMessage(Win32::GetLastError()));
$ProcessObj->Wait(INFINITE);
';
} else {
system("$command_line", "$tempfile", "$stuff");
}
unlink ($tempfile);
}
} else {
@addresses = split(/,/, $addresses);
foreach $address (@addresses) {
($email, $user, $pass) = split(/\|\|/, $address);
$address = $email;
$command_temp = $command;
$input_temp = $input;
$command_temp =~ s/\$TO/$address/g;
$input_temp =~ s/\$TO/$address/g;
if ($email{'tempfile'} == 0) {
open (MAIL, $command_temp);
} else {
$command_temp =~ s%^\|\s*%%;
$pid = $$; $pid =~ s/\D//g; $time = time;
$tempfile = "$message_dir/$time-$pid.tmp";
open (MAIL, ">$tempfile");
}
print MAIL $input_temp;
print MAIL "\n";
print MAIL $text_out;
print MAIL $footer if $footer;
if ($reply_by_email) {
print MAIL " ***||$user||", crypt($pass, "cookie"), "||$topic_number||$me_number||***\n\n";
print MAIL "$L{BPR_GOTOLINK}\n";
print MAIL "$script_url/show.$cgi_extension?$topic/$page\n\n";
}
close (MAIL);
if ($email{'tempfile'} == 1) {
$pr = $email{'mail_program'};
if ($command_temp =~ m|$pr|) {
$stuff = $';
$command_temp = $pr;
} else {
$stuff = "";
}
if ($^O eq "MSWin32") {
$mail_prog = $pr;
$mail_prog =~ s/\//\\/g;
$tempfile =~ s/\//\\/g;
$stuff =~ s/'/"/g;
$stuff =~ s/^\s*//;
if ($mail_prog =~ m|(.*)\\|) {
$cwd = $1;
} else {
$cwd = ".";
}
eval '
use Win32::Process;
use Win32;
Win32::Process::Create($ProcessObj, $mail_prog, "$mail_prog $tempfile $stuff", 0, DETACHED_PROCESS, $cwd) || &error_message("Windows Process Creation Error", Win32::FormatMessage(Win32::GetLastError()));
$ProcessObj->Wait(INFINITE);
';
} else {
system("$command_line", "$tempfile", "$stuff");
}
unlink ($tempfile);
}
}
}
}
#---SEPARATOR---#
sub change_announce_message {
local ($file, $source, $formatted) = @_;
local (@file, $messageflag, $line, $source_esc, $topic, $page);
if ($file =~ m|/(\d+)/(\d+)\.$ext|) {
($topic, $page) = ($1, $2);
} else {
&error_message("Change Announcement Error", "Could not open requested file", 0, 1);
}
&lock("$message_dir/$topic/$page.$ext");
local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic, $page);
&set_page($topic, $page, $head, $color, $lm, $formatted, &escape($source), $sublist, $about, $about_src, $message, $message_src);
&unlock("$message_dir/$topic/$page.$ext");
}
#---SEPARATOR---#
sub manage_images {
local ($source_in, $topic_number, $queue, $action) = @_;
local (@file);
while ($source_in =~ m|\\image_alreadyuploaded\{(\d+)|) {
push (@file, "$1.gif");
$source_in = join("", $`, $');
}
while ($source_in =~ m|\\jpeg_alreadyuploaded\{(\d+)|) {
push (@file, "$1.jpg");
$source_in = join("", $`, $');
}
if ($queue != 0) {
$dir = "";
} else {
if (-e "$message_dir/$topic_number") {
$dir = "$message_dir/$topic_number";
} else {
$dir = "$secdir/$topic_number";
}
}
if ($action eq "delete") {
foreach $line (@file) {
(unlink("$dir/$line"));
}
} elsif ($action eq "list") {
foreach $line (@file) {
$line = "$dir/$line";
}
return @file;
}
}
#---SEPARATOR---#
#REQ:webtags
sub reapply_webtags {
local ($text, $message) = @_;
local (%source);
$flag = 0;
@lines = split(/\n/, $text);
foreach $line (@lines) {
if ($line =~ m|<!-Source: (\d+)-!>|) {
$flag = $1;
} elsif ($line =~ m|<!-/Source: $flag-!>|) {
$flag = 0;
} elsif ($flag) {
$source{$flag} .= $line;
}
}
foreach $key (keys(%source)) {
$u = &unescape($source{$key});
if ($u =~ m|\\image_alreadyuploaded| || $u =~ m|\\jpeg_alreadyuploaded| || $u =~ m|attachment_alreadyuploaded|) {
($lint, $message_var_replace) = &webtags($u, 0, 1);
@lines = split(/\n/, $message);
$ctr = 0; $flag = 0;
foreach $line (@lines) {
$ctr += 1;
if ($line =~ m|<!-/Post: $key-!>|) {
$flag = ($ctr - 1);
last;
}
}
if ($flag) {
$lines[$flag-1] = $message_var_replace;
}
$message = join("\n", @lines);
}
}
return $message;
}
#---SEPARATOR---#
#REQ:printuntil
sub profile_editor_screen {
local ($file, $username, $group, $username_editing, $action_url, $action, $editflag) = @_;
$file =~ tr/A-Z/a-z/;
$IS_MODERATOR = 0;
open (FILE, "$admin_dir/$file.txt"); @file = <FILE>; close (FILE);
if ($file eq "passwd") {
($uline) = grep(/^$username:/, @file);
$IS_MODERATOR = 1;
} else {
@u = grep(/^$username:/, @file);
($uline) = grep(/:$group\s*$/, @u);
}
chop ($uline) if $uline =~ m|\n$|;
if ($uline eq "") {
&error_message("Edit Profile Error", "Could not find entry for $username in file $file!");
}
($username, $password, $email, $fullname, $editing, $email_notify, $lastcheck, $group) = split(/:/, $uline);
@emt = split(/,/, $email_notify);
foreach $l (@emt) {
if ($l =~ m|^(\d+)/|) {
$l = $1;
}
}
&header;
&printuntil(1, 1, 0, $L{PROFEDIT_TITLE});
print "<FONT SIZE=3><CENTER><B>$L{PROFEDIT_TITLE}";
print ": \u$username" if $editing;
print "</B></CENTER></FONT>\n";
print "<HR>\n";
if ($editflag == 1) {
print "<B><A HREF=\"$cgiurlm?username=$username_editing&cmd=user_mgr\" ";
print "onMouseOver=\"return setStatus('Return to User Manager group selection screen')\">";
print "User Manager</A>:\n";
print "<A HREF=\"$cgiurlm?username=$username_editing&cmd=user_mgr_2&group=$group\" ";
print "onMouseOver=\"return setStatus('Return to editing users in \u$group')\">";
print "Edit \u$group</A>:\n";
print "Edit \u$username</B><HR>\n";
} elsif ($editflag == 2) {
print "<B><A HREF=\"$cgiurlm?username=$username_editing&cmd=moderator_mgr\" ";
print "onMouseOver=\"return setStatus('Return to Moderator Manager')\">";
print "Moderator Manager</A>:\n";
print "Edit \u$username</B><HR>\n";
}
print "<H4>$L{PROFEDIT_INFO}</H4>\n";
print "<FORM ACTION=$action_url METHOD=POST>\n";
print "<INPUT TYPE=HIDDEN NAME=action VALUE=$action>\n";
print "<INPUT TYPE=HIDDEN NAME=action2 VALUE=infosave>\n";
print "<INPUT TYPE=HIDDEN NAME=username VALUE=$username_editing>\n";
print "<INPUT TYPE=HIDDEN NAME=username_edit VALUE=$username>\n";
print "<INPUT TYPE=HIDDEN NAME=group VALUE=$group>\n";
print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
print "<TABLE WIDTH=100% BORDER=1><TR><TD>\n";
print "<TABLE>\n";
print "<TR><TD>$fs<B>$L{PROFEDIT_YOURUSERNAME}</B></FONT><TD><TD>$fs<B>\u$username</B></FONT></TD></TR>\n";
print "<TR><TD>$fs<B>$L{PROFEDIT_YOURFULLNAME}</B></FONT><TD><TD><INPUT TYPE=TEXT NAME=profile_fullname SIZE=35 VALUE=\"$fullname\" MAXLENGTH=40></TD></TR>\n";
print "<TR><TD>$fs<B>$L{PROFEDIT_YOUREMAIL}</B></FONT><TD><TD><INPUT TYPE=TEXT NAME=profile_email SIZE=35 VALUE=\"$email\" MAXLENGTH=40></TD></TR>\n";
print "</TABLE><P>$fs<INPUT TYPE=SUBMIT VALUE=\"$L{PROFEDIT_SAVEINFO}\"></FONT>\n";
print "</TD></TR></TABLE></FORM>\n";
if ($GLOBAL_OPTIONS{'email'}) {
print "<HR>\n";
print "<H4>$L{PROFEDIT_EMAILNOTIFY}</H4>\n";
print "<FORM ACTION=$action_url METHOD=POST>\n";
print "<INPUT TYPE=HIDDEN NAME=username VALUE=$username_editing>\n";
print "<INPUT TYPE=HIDDEN NAME=username_edit VALUE=$username>\n";
print "<INPUT TYPE=HIDDEN NAME=action VALUE=$action>\n";
print "<INPUT TYPE=HIDDEN NAME=action2 VALUE=notifysave>\n";
print "<INPUT TYPE=HIDDEN NAME=group VALUE=$group>\n";
print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
print "<TABLE WIDTH=100% BORDER=1><TR><TD>$fs\n";
print "$L{PROFEDIT_CHOOSETOPICS}\n<P><UL>";
open (TOP, "$message_dir/board-topics.html"); @top = <TOP>; close (TOP);
@topics = grep(/^<!-Top:/, @top);
foreach $t (@topics) {
if ($t =~ m|<!-Top: (\d+)-!>|) {
$o = $1;
&extract("//$o/$o.$ext");
print "<INPUT TYPE=CHECKBOX NAME=notify_$o VALUE=1";
print " CHECKED" if grep(/^$o$/, @emt);
print "> $topic_name<BR>\n";
}
}
print "</UL><P>$L{PROFEDIT_MYPOSTS}\n<P><UL>\n";
print "<INPUT TYPE=CHECKBOX NAME=notify_0 VALUE=1";
print " CHECKED" if grep(/^0$/, @emt);
print "> $L{PROFEDIT_MYPOSTSBOX}<P></UL>\n";
print "<P><INPUT TYPE=SUBMIT VALUE=\"$L{PROFEDIT_SAVEINFO}\"></FONT></TD></TR></TABLE></FORM>\n";
}
if ($GLOBAL_OPTIONS{'pwchange'} ne "0" || $editflag || $IS_MODERATOR) {
print "<HR>\n";
print "<H4>$L{PROFEDIT_CHANGEPASSWORD}</H4>\n";
print "<FORM ACTION=$action_url METHOD=POST>\n";
print "<INPUT TYPE=HIDDEN NAME=username VALUE=$username_editing>\n";
print "<INPUT TYPE=HIDDEN NAME=username_edit VALUE=$username>\n";
print "<INPUT TYPE=HIDDEN NAME=action VALUE=$action>\n";
print "<INPUT TYPE=HIDDEN NAME=group VALUE=$group>\n";
print "<INPUT TYPE=HIDDEN NAME=action2 VALUE=changepass>\n";
print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
print "<TABLE WIDTH=100% BORDER=1><TR><TD>$fs\n";
print "$L{PROFEDIT_CHANGEPASSWORD_INSTR}<P>";
print "<TABLE><TR><TD>$fs<B>$L{PROFEDIT_NEWPASS}</B></FONT></TD><TD><INPUT TYPE=PASSWORD NAME=pass_1 SIZE=15></TD></TR>\n";
print "<TR><TD>$fs<B>$L{PROFEDIT_VERIFY}</B></FONT></TD><TD><INPUT TYPE=PASSWORD NAME=pass_2 SIZE=15></TD></TR>\n";
print "</TABLE>\n";
print "<P><INPUT TYPE=SUBMIT VALUE=\"$L{PROFEDIT_SAVEBUTTON}\">\n";
print "</TD></TR></TABLE>";
print "</FORM>\n";
}
if ($editflag) {
print "<HR>\n";
print "<H4>Editing Privileges</H4>\n";
print "<FORM ACTION=$action_url METHOD=POST>\n";
print "<INPUT TYPE=HIDDEN NAME=username VALUE=$username_editing>\n";
print "<INPUT TYPE=HIDDEN NAME=username_edit VALUE=$username>\n";
print "<INPUT TYPE=HIDDEN NAME=action VALUE=$action>\n";
print "<INPUT TYPE=HIDDEN NAME=action2 VALUE=editpriv>\n";
print "<INPUT TYPE=HIDDEN NAME=group VALUE=$group>\n";
print "<TABLE WIDTH=100% BORDER=1><TR><TD>$fs\n";
print "Choose whether this person is able to edit his or her own profile.<P>\n";
print "<UL>\n";
print "<INPUT TYPE=RADIO NAME=editing VALUE=1";
print " CHECKED" if $editing == 1;
print "> Editing is <FONT COLOR=00aa00><B>enabled</B></FONT><BR>\n";
print "<INPUT TYPE=RADIO NAME=editing VALUE=0";
print " CHECKED" if $editing == 0;
print "> Editing is <FONT COLOR=ff0000><B>disabled</B></FONT><BR>\n";
print "</UL><P>\n";
print "<INPUT TYPE=SUBMIT VALUE=\"Save Editing Setting\">\n";
print "</TD></TR></TABLE></FORM>\n";
}
&ex('printuntil', 3, 17, 0, "", 0, 1);
exit(0);
}
#---SEPARATOR---#
sub verify_owner {
local ($owner, $username) = @_;
$username =~ tr/A-Z/a-z/;
local (@group_data, $group, $usernames, @username, $groupname);
open (GROUP, "$admin_dir/groups.txt") || &error_message("File Error", "Cannot open group file (groups.txt)!");
@group_data = <GROUP>;
close (GROUP);
foreach $group (@group_data) {
chop ($group) if $group =~ /\n$/;
($groupname, $usernames) = split(/:/, $group);
if ($groupname eq $owner) {
@username = split(/,/, $usernames);
if (grep (/^$username$/, @username)) {
return 1;
} else {
return 0;
}
}
}
return 0;
}
#---SEPARATOR---#
sub profanity_editor {
&header;
print "<HTML><HEAD><TITLE>Profanity List Editor</TITLE>\n";
print '<BODY BGCOLOR="ffffff" TEXT="000000" LINK="0000FF" VLINK="0000FF" ';
print "onLoad=\"window.defaultStatus = 'Profanity List Editor'\">$fs\n";
print "<FONT SIZE=3><CENTER><B>Profanity List Editor</B></CENTER></FONT>\n";
print "<HR>\n";
print "<B><A HREF=\"$cgiurlm?cmd=options_mgr&username=$superuser\" onMouseOver=\"";
print "window.status = 'Return to the Options Manager'; return true\">Options Manager";
print "</A>: Profanity List Editor</B>\n<HR>\n";
print "<FORM ACTION=$cgiurl METHOD=POST>\n";
print "<INPUT NAME=action TYPE=HIDDEN VALUE=cuss_save>\n";
print "<INPUT NAME=username TYPE=HIDDEN VALUE=$superuser>\n";
print "<TABLE BGCOLOR=#ffffcc BORDER=1 WIDTH=100%><TR><TD>$fs";
print "Using the box below, enter profanity/cuss words that are to be blocked out.\n";
print "<B>Enter one word per line</B>.<P>\n";
print "<TEXTAREA NAME=cusswords COLS=20 ROWS=6>";
open (CUSS, "$admin_dir/cuss.txt"); @cuss = <CUSS>; close (CUSS);
undef @word;
foreach $line (@cuss) {
if ($line =~ m|^!(.*)|) {
$word = $1;
$word =~ tr/a-zA-Z/b-zaB-ZA/;
push (@word, $word);
}
}
foreach $line (sort(@word)) {
print "$line\n";
}
print "</TEXTAREA><P>\n";
print "$fs<INPUT TYPE=SUBMIT VALUE=\"Save List\"></TD></TR></TABLE>\n";
print "</FORM></BODY></HTML>\n";
exit(0);
}
#---SEPARATOR---#
sub cuss_save {
local ($words) = @_;
&lock("$admin_dir/cuss.txt");
@words = split(/\n/, $words);
@words = grep(/\S/, @words);
undef @cuss;
foreach $word (@words) {
$word =~ tr/b-zaB-ZA/a-zA-Z/;
$word =~ s/^\s+//; $word =~ s/\s+$//;
push (@cuss, "!$word\n");
}
open (CUSS, ">$admin_dir/cuss.txt"); print CUSS @cuss; close (CUSS);
&unlock("$admin_dir/cuss.txt");
}