# FILE: src-board-subs-6 #------------------------------------------------------------------------------- # 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---# sub group_mgr { local ($username) = @_; open (GROUP, "$admin_dir/groups.txt") || &error_message("File Error", "Cannot open group file (group.txt)! (Code 060101)"); @group = ; close (GROUP); $count = @group; &header; print "Group Manager\n"; print "\n"; print "\n\n"; print "
$fs\n"; print "
Group Manager
\n
\n"; print "

Groups

\n"; print "\n"; $bgcolor = "ffffcc"; $c = 0; $ct = scalar(@group); print "\n"; foreach $line (sort(@group)) { ($group, $users) = split(/:/, $line); @users = split(/,/, $users); $uct = scalar(@users); print ""; if ($bgcolor eq "ffffcc") { $bgcolor = "ffffff"; } else { $bgcolor = "ffffcc"; } $num = $group; foreach $numb (sort(@group)) { if ($numb eq $num) { $fl = 1; } elsif ($fl == 0) { $topstr .= "document.sf.MARK$numb.checked = c;"; } elsif ($fl == 1) { $botstr .= "document.sf.MARK$numb.checked = c;"; } } print ""; print ""; print "\n"; print ""; print "\n"; print ""; print "\n"; } if ($ct > 0) { print ""; print "\n"; print ""; print ""; print "\n"; print ""; print "\n"; print ""; print "\n"; print "\n"; } print "
 MarkDel Edit Group 
 "; print " "; print " "; $c++; print "    \n"; $uct = 0 if $uct eq ""; print "\u$group ($uct moderator"; print "s" if $uct != 1; print ") 
 (Marked)     
 
\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "

Add a Group

\n"; print "
"; print "
$fs", "Group Name:"; print ""; print "
\n"; print "\n"; print "\n"; print "

\n"; print "\n"; print "

\n"; print "
\n"; exit(0); } #---SEPARATOR---# sub add_group { local ($username, $newgroup) = @_; local (@groupline, $usercount, $line); &error_message("Add Group Error", "Group name is invalid -- it may contain only alphanumeric characters and the underscore character ("_").") if $newgroup =~ /\W/; $usercount = length($newgroup); $newgroup =~ tr/A-Z/a-z/; &error_message("Add Group Error", "The group name is invalid (name must be between 2 and 20 characters).") if ($usercount < 2 || $usercount > 20); &lock("$admin_dir/groups.txt"); open(GROUP,"$admin_dir/groups.txt") || &error_message("Add Group Error", "Cannot read group file (groups.txt)! (Code 060201)"); @groupline = ; close(GROUP); foreach $line (@groupline) { ($user, $therest) = split(/:/, $line); &error_message("Add Group Error", "The selected group ($newgroup) already exists!") if $user eq $newgroup; } open(GROUP,">>$admin_dir/groups.txt") || &error_message("Add Group Error", "Cannot append group file (groups.txt)! (Code 060302)"); print GROUP "$newgroup:$superuser\n"; close(GROUP); &unlock("$admin_dir/groups.txt"); } #---SEPARATOR---# sub delete_group { local ($toremove) = @_; local (@group, $line, $user, $therest); &lock("$admin_dir/groups.txt"); open (GROUP, "$admin_dir/groups.txt") || &error_message("File Error", "Cannot open group file (groups.txt) for reading! (Code 060301)"); @group = ; close (GROUP); open (GROUP, ">$admin_dir/groups.txt") || &error_message("File Error", "Cannot open group file (groups.txt) for writing! (Code 060302)"); foreach $line (@group) { ($user) = split(/:/, $line); print GROUP $line if $toremove ne $user; } close (GROUP); &unlock("$admin_dir/groups.txt"); &lock("$admin_dir/users.txt"); open (USERS, "$admin_dir/users.txt"); @users = ; close (USERS); foreach $line (@users) { $line = "" if $line =~ m|:$toremove\s*$|; } @users = grep(/\S/, @users); open (USERS, ">$admin_dir/users.txt"); print USERS @users; close (USERS); &unlock("$admin_dir/users.txt"); if ($pro) { &lock("$admin_dir/selfreg.txt"); open (SELFREG, "$admin_dir/selfreg.txt"); @selfreg = ; close (SELFREG); foreach $line (@selfreg) { if ($line =~ m|^\-:$toremove:|) { $line = ""; } elsif ($line =~ m|^Q:(.*):$toremove\s*$|) { $line = ""; } } @selfreg = grep(/\S/, @selfreg); open (SELFREG, ">$admin_dir/selfreg.txt"); print SELFREG @selfreg; close (SELFREG); &unlock("$admin_dir/selfreg.txt"); } } #---SEPARATOR---# sub edit_group { local ($username, $group) = @_; open (GROUP, "$admin_dir/groups.txt") || &error_message("File Error", "Cannot open group file (groups.txt) for reading! (Code 060401)"); @group = ; close (GROUP); &error_message("Invalid Group Selection", "The specified group does not exist! (Code 060402)") if !grep(/^$group:/, @group); &error_message("Invalid Group Selection", "The specified group does not exist! (Code 060403)") if $group eq ""; ($line) = grep(/^$group:/, @group); ($group, $usersingroup) = split(/:/, $line, 2); chop ($usersingroup) if $usersingroup =~ /\n$/; @users = split(/,/, $usersingroup); $count = @users; &header; print "Edit Group\n"; print "\n"; print "\n"; print "\n"; print "$fs
Group Editor: \u$group
\n"; print "
\n"; print "Group Manager: Edit \u$group\n
\n"; print "

Moderators In Group

\n"; print "
\n"; print "\n"; $bgcolor = "ffffcc"; $c = 0; $ct = scalar(@users); open (PASSWD, "$admin_dir/passwd.txt"); @passwd = ; close (PASSWD); foreach $line (@passwd) { ($un, $pw, $em, $fnm) = split(/:/, $line); $fn{$un} = $fnm; } print "\n"; foreach $line (sort(@users)) { $fullname = $fn{$line}; $num = $line; print ""; if ($bgcolor eq "ffffcc") { $bgcolor = "ffffff"; } else { $bgcolor = "ffffcc"; } $num = $line; print ""; print ""; print "\n"; print ""; print "\n"; } if ($ct > 0) { print ""; print "\n"; print ""; print ""; print "\n"; print ""; print "\n"; print "\n"; } print "
 MarkRem Moderator 
 "; print " "; print " "; $c++; print "   \u$num "; if ($fullname ne "" && $fullname ne "none" && $fullname ne "fullname") { print "($fullname)"; } print " 
 (Marked)   
 
\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; @users_pr = @users; undef @users; foreach $line (@passwd) { ($user, $pw, $em, $fn) = split(/:/, $line); if (!grep(/^$user$/, @users_pr)) { push (@users, $user); } } if (scalar(@users) > 0) { print "

Add Moderators to Group

\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $bgcolor = "ffffcc"; $c = 0; $ct = scalar(@users); print "\n"; foreach $line (sort(@users)) { $fullname = $fn{$line}; $num = $line; print ""; if ($bgcolor eq "ffffcc") { $bgcolor = "ffffff"; } else { $bgcolor = "ffffcc"; } $num = $line; print ""; print ""; print "\n"; print ""; print "\n"; } if ($ct > 0) { print ""; print "\n"; print ""; print ""; print "\n"; print ""; print "\n"; print "\n"; } print "
 MarkAdd Moderator 
 "; print " "; print " "; $c++; print "   \u$num "; if ($fullname ne "" && $fullname ne "none" && $fullname ne "fullname") { print "($fullname)"; } print " 
 (Marked)   
 
\n"; print "\n"; print "

\n"; } print "\n"; } #---SEPARATOR---# sub delete_moderator_from_group { local ($moderator, $group) = @_; &lock("$admin_dir/groups.txt"); open (GROUP, "$admin_dir/groups.txt") || &error_message("Delete Moderator From Group Error", "Could not open groups file (groups.txt)! (Code 060501)"); @group = ; close (GROUP); foreach $line (@group) { next if $line !~ /^$group:/; chop $line if $line =~ /\n$/; ($group, $users) = split(/:/, $line, 2); @users = split(/,/, $users); @newusers = sort(grep(!/^$moderator$/, @users)); $newuserstring = join(",", @newusers); $newuserstring .= "\n"; $line = "$group:$newuserstring"; } open (GROUP, ">$admin_dir/groups.txt") || &error_message("Delete Moderator From Group Error", "Could not write to groups file (groups.txt)! (Code 060502)"); print GROUP @group; close (GROUP); &unlock("$admin_dir/groups.txt"); } #---SEPARATOR---# sub add_to_group { local ($group, $moderator) = @_; &lock("$admin_dir/passwd.txt"); open (PASSWD, "$admin_dir/passwd.txt") || &error_message("Add Moderator To Group Error", "Cannot open password file (passwd.txt)! (Code 060601)"); @passwd = ; close (PASSWD); &unlock("$admin_dir/passwd.txt"); &error_message("Add Moderator To Group Error", "Specified moderator does not exist in password file! (Code 060602)") if (!grep(/^$moderator:/, @passwd)); &lock("$admin_dir/groups.txt"); open (GROUP, "$admin_dir/groups.txt") || &error_message("Add Moderator To Group Error", "Cannot open group file (groups.txt)! (Code 060603)"); @group = ; close (GROUP); &error_message("Add Moderator To Group Error", "Specified group does not exist in group file! (Code 060604)") if (!grep(/^$group:/, @group)); foreach $line (@group) { next if $line !~ /^$group:/; ($group, $users) = split(/:/, $line, 2); chop ($users) if $users =~ /\n$/; @users = split(/,/, $users); if (grep(/^$moderator$/, @users)) { &unlock("$admin_dir/groups.txt"); &error_message("Add Moderator To Group Error", "Specified moderator is already a member of the specified group! (Code 060605)") ; } push (@users, $moderator); $line = "$group:"; $line .= join(",", @users); $line .= "\n"; } open (GROUP, ">$admin_dir/groups.txt") || &error_message("Delete Moderator From Group Error", "Could not write to groups file (groups.txt)! (Code 060606)"); print GROUP @group; close (GROUP); &unlock("$admin_dir/groups.txt"); } #---SEPARATOR---# #REQ:build_graphical_tree #REQ:page_manager_navbar sub move_message_form { local ($topic_number, $field, $form_move, $form_mark, $referer, $username) = @_; if ($field =~ /^(\d+)$/) { $tomove = $1; $plural = ""; } else { $tomove = $form_mark; $plural = "s"; } &header; print "Move Message$plural\n"; print "\n"; print "$fs
Move Message$plural
\n"; &page_manager_navbar($topic_number, $me_number, "Move Message$plural"); print "Select a destination for the message$plural you wish to move by clicking on\n"; print "the folder icon ()\n"; print "next to the destination. You may also move messages into a new subtopic.\n"; print "

Existing Subtopics

\n"; open (TOPFILE, "$message_dir/board-topics.html"); @topfile = ; close (TOPFILE); $topic_numbers = ""; $me_number_hold = $me_number; $topic_number_hold = $topic_number; foreach $line (@topfile) { if ($line =~ //) { $num = $1; &extract("//$num/$num.$ext"); if (&verify_owner($owner,$username)) { $topic_numbers .= "$num,"; } } } &build_graphical_tree($username, $topic_numbers, "$topic_number_hold/$me_number_hold", ""; print "
\n"; print "

Move Into New Subtopic

\n"; print "New Subtopic Name: \n"; print "
$fs Include "Add a Message" box\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } #---SEPARATOR---# #REQ:webtags #REQ:get_number #REQ:get_date_time #REQ:new_file #REQ:change_layout #REQ:manage_images #REQ:manage_attachments #REQ:reapply_webtags sub move_message { local ($old_topic, $old_page, $postindex, $new_topic, $new_page, $parmin, $checkarchive, $forcetime) = @_; local ($num, $dt, $url, @file, $line, $str, $strg, $ts, @pi, $ind, $secure); if ($old_topic == $new_topic && $old_page == $new_page) { return ($new_page, $new_topic); } &extract("//$old_topic/$old_page.$ext"); return 0 if ($checkarchive && $param =~ m|Archive|); if ($new_topic eq "Create") { if ($param !~ /Sublist/) { &change_layout($old_topic, $old_page, $param . "Sublist"); } ($lint, $newsubject) = &webtags($new_page,3,1); &error_message("Create New Subtopic Error", "You must type a subject for the new subtopic!") if $newsubject eq ""; &error_message("Create New Subtopic Error", "The following formatting error was returned: $newsubject") if $lint eq "!Error"; $num = &get_number; if ($parmin == 1) { $parm2 = "MessagesAdd"; } else { $parm2 = "Messages"; } $parm2 .= "Archive" if $checkarchive; &new_file($old_topic, $num, $old_page, $owner, $newsubject, $parm2, $forcetime); $new_topic = $old_topic; $new_page = $num; $url = "$html_url/messages/$old_topic/$new_page.$ext"; $newpage = $newsubject; $dt = &get_date_time ('long', $forcetime); $dt =~ s/\W//g; $url .= "?$dt" if !$noqm; &lock("$message_dir/$old_topic/$old_page.$ext"); local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($old_topic,$old_page); $str = &JavaScript_prepare($newpage); $strg = "onMouseOver=\"return setStatus('$str')\""; $ts = &get_date_time('short', $forcetime); $sublist .= "
  • $newsubject $ts
  • \n"; &set_page($old_topic, $old_page, $head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src); &unlock("$message_dir/$old_topic/$old_page.$ext"); } &lock("$message_dir/$new_topic/$new_page.$ext"); &lock("$message_dir/$old_topic/$old_page.$ext"); local ($head1, $color1, $lm1, $ann1, $ann_src1, $sublist1, $about1, $about_src1, $message1, $message_src1) = &get_page($old_topic, $old_page); local ($head2, $color2, $lm2, $ann2, $ann_src2, $sublist2, $about2, $about_src2, $message2, $message_src2) = &get_page($new_topic, $new_page); @pi = split(/,/, $postindex); local ($flag, $temp, @message1, @pushed); $flag = 0; @message1 = split(/\n/, $message1); foreach $ind (@message1) { if ($ind =~ m||) { $temp = $1; if (grep(/^$temp$/, @pi)) { $message2 .= "$ind\n"; $flag = 1; $ind = ""; } } elsif ($ind =~ m||) { $temp = $1; if (grep(/^$temp$/, @pi)) { $message_src2 .= "$ind\n"; $flag = 1; $ind = ""; } } elsif ($ind =~ m| 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 = ; close (SRC); open (DEST, ">$dest"); eval 'binmode(DEST);'; print DEST @src; close (DEST); unlink($file_in); } } $message2 = &reapply_webtags($message_src2, $message2); } } &set_page($new_topic, $new_page, $head2, $color2, $lm2, $ann2, $ann_src2, $sublist2, $about2, $about_src2, $message2, $message_src2); &unlock("$message_dir/$new_topic/$new_page.$ext"); local (@LOG); &lock("$admin_dir/log.txt"); open (LOG, "$admin_dir/log.txt"); @LOG = ; close (LOG); local ($indx, $who, $when, $where, $rest); foreach $line (@LOG) { ($indx, $who, $when, $where, $rest) = split(/;/, $line, 5); if (grep(/^$indx$/, @pi)) { $line = join(";", $indx, $who, $when, "$new_topic/$new_page", $rest); } } open (LOG, ">$admin_dir/log.txt"); print LOG @LOG; close (LOG); &unlock("$admin_dir/log.txt"); return ($new_page, $new_topic); } #---SEPARATOR---# #REQ:extract_colorsonly #REQ:page_manager_navbar sub edit_message_form { local ($topic_number, $page_number, $post_index, $source, $formatted, $username, $error_force) = @_; local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic_number, $page_number); if ($formatted eq "") { @file = split(/\n/, $message); $message = ""; $flag = 0; foreach $line (@file) { if ($line =~ //; $formatted = $'; } if ($source eq "") { @file = split(/\n/, $message_src); $source = ""; $flag = 0; foreach $line (@file) { if ($line =~ /Preview of Edited Message\n"; print ""; print "$fs\n"; print "

    Preview of Edited Message
    \n"; &page_manager_navbar($topic_number, $page_number, "Edit Message"); if (!$error_force) { print "A preview of your message appears below. If you used any formatting tags in your "; print "message, please check to see that your formatting is displayed correctly in "; print "the preview.

    \n"; print "\n"; } print "
    " if !$error_force; if (!-e "$message_dir/$topic_number") { while ($formatted =~ m|]*)>|) { $tn = $1; $pn = $2; $ex = $3; $formatted = join("", $`, "", $'); } while ($formatted =~ m|
    ([^(.*?)
    ([^<]+) \(([^>]+)\)
    |) { ($file, $icon, $type, $descr, $topic, $fakefile, $size) = ($1, $2, $3, $4, $5, $6, $7); $formatted = join("", $`, "
    $descr
    $fakefile ($size)
    ", $'); } } print $formatted; print "
    \n" if !$error_force; print "
    \n"; $source =~ s/\s+$//; $source =~ s/^\s+//; $source = &unescape($source) if ($source !~ /\s/ && $FORM{'editing_flag'} == 0); $source =~ s/\s+$//; $source =~ s/^\s+//; if ($flag_edited == 1 || $FORM{'editing_flag'}) { $source =~ s/&/&/g; $source =~ s//>/g; $source =~ s/"/"/g; } print "
    "; print "
    "; print "

    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n" if !$error_force; print "\n"; print "\n"; print "
    \n"; print "
    \n"; } #---SEPARATOR---# sub save_edited_message { local ($topic_number, $page_number, $post_index, $source, $formatted, $username) = @_; &lock("$message_dir/$topic_number/$page_number.$ext"); local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic_number, $page_number); local (@message, $line, $flag); @message = split(/\n/, $message); $flag = 0; if ($pro) { ($removed, $added) = &ex('compare_source', &unescape($source), $topic_number, $page_number, $post_index); if ($removed) { @file = split(/\n/, $removed); $dir = "$message_dir/$topic_number" if -e "$message_dir/$topic_number"; $dir = "$secdir/$topic_number" if !-e "$message_dir/$topic_number"; foreach $file (@file) { unlink("$dir/$file"); } } } foreach $line (@message) { if ($line =~ m||) { $flag = 1; } elsif ($line =~ m|^
    \s*$|) { $byflag = 1; next; } elsif ($byflag == 1) { $byflag = 0; } elsif ($line =~ m||) { $flag = 0; $line = join("\n", "", $formatted, $line); } elsif ($flag == 1) { $line = ""; } } $message = join("\n", grep(/\S/, @message)); @message = split(/\n/, $message_src); $flag = 0; foreach $line (@message) { if ($line =~ m||) { $flag = 1; } elsif ($line =~ m||) { $flag = 0; $line = join("\n", $source, $line); } elsif ($flag == 1) { $line = ""; } } $message_src = join("\n", grep(/\S/, @message)); &set_page($topic_number, $page_number, $head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src); &unlock("$message_dir/$topic_number/$page_number.$ext"); $src = &remove_html($formatted); $src .= " "; $src =~ m|^(.{0,40})\s|; $prev = $1; &lock("$admin_dir/log.txt"); open (LOG, "$admin_dir/log.txt"); @log = ; close (LOG); foreach $line (@log) { if ($line =~ m|^$post_index;|) { @spl = split(/;/, $line, 8); $line = join(";", $spl[0], $spl[1], $spl[2], $spl[3], $spl[4], $spl[5], &escape($prev), $spl[7]); } } open (LOG, ">$admin_dir/log.txt"); print LOG @log; close (LOG); &unlock("$admin_dir/log.txt"); } #---SEPARATOR---# sub reorder_messages { local ($referer, $arraystr) = @_; local (@array, %message, $file, @file, $line, $flag, $message, %printed); &extract($referer); $file = "$message_dir/$topic_number/$me_number.$ext"; &lock($file); local ($head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src) = &get_page($topic_number,$me_number); @file = split(/\n/, $message); $flag = 0; foreach $line (@file) { if ($line =~ //) { $flag = $1; $message{$flag} .= $line . "\n"; $printed{$flag} = 0; } elsif ($line =~ //) { $message{$flag} .= $line . "\n"; $flag = 0; } elsif ($flag > 0) { $message{$flag} .= $line . "\n"; } } @array = split(/:/, $arraystr); undef @file; foreach $message (@array) { push (@file, $message{$message}); $printed{$message} = 1; } foreach $key (keys(%printed)) { if ($printed{$key} == 0) { push (@file, $message{$key}); } } $message = join("\n", @file); &set_page($topic_number, $me_number, $head, $color, $lm, $ann, $ann_src, $sublist, $about, $about_src, $message, $message_src); &unlock($file); }