Annotation of capa/capa51/Discuss/Ver1.3/capadiscuss, revision 1.1
1.1 ! albertel 1: #!/usr/ucb/perl
! 2: #
! 3: # CAPA Discussion Forum
! 4: # version 1.3
! 5: #
! 6: # Michigan State University
! 7: # Department of Physics and Astronomy
! 8: #
! 9: # Ryan J. Shaltry
! 10: # tech4@msue.msu.edu
! 11:
! 12: print "Content-type: text/html\n\n";
! 13:
! 14: use Benchmark;
! 15: $BenchmarkT0 = new Benchmark;
! 16: #require "capadiscuss.setup";
! 17: require "../capadiscuss_html";
! 18:
! 19: ################################################
! 20: ## Configuration - Change these appropriately ##
! 21: ################################################
! 22: $discussurl = "capadiscuss";
! 23: $capasbin = "/capa-bin";
! 24: use Cwd;
! 25: $capabin = cwd();
! 26: @capabinparts = split /\//, $capabin;
! 27: $capabin = join "/", @capabinparts[0..$#capabinparts-1];
! 28:
! 29: # capadiscuss.setup
! 30: $debug = 0;
! 31: ################################################
! 32: ## End Configuration ###########################
! 33: ################################################
! 34:
! 35: &form_info;
! 36:
! 37: $yp = "19";
! 38: $validadmin = "unchecked";
! 39:
! 40: # define variables
! 41: $class = $form{'CLASS'};
! 42: $snum = $form{'SNUM'};
! 43: $capaid = $form{'CAPAID'};
! 44: $setid = $form{'SETID'};
! 45: $action = $form{'ACTION'};
! 46: $file = $form{'FILE'};
! 47: $probnum = $form{'PROBNUM'};
! 48: $replynum = $form{'REPLYNUM'};
! 49: $psetid = $form{'PSETID'};
! 50: if ($snum eq "A12345678") {$debug=1;}
! 51: if ($snum eq "a12345678") {$debug=1;}
! 52: if($psetid eq "") { $psetid = $setid; }
! 53: if ($debug) {print "GetTeacherInfo<BR>";$BenchmarkTa = new Benchmark;}
! 54: &GetTeacherInfo;
! 55: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 56:
! 57: # check for valid studentnumber/capaid
! 58: if ($debug) {print "ValidateUser<BR>";$BenchmarkTa = new Benchmark;}
! 59: &ValidateUser;
! 60: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 61:
! 62: # grab username from student number
! 63: if ($debug) {print "UserInfo<BR>";$BenchmarkTa = new Benchmark;}
! 64: &UserInfo($snum);
! 65: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 66:
! 67: if ($debug) {print "GetDateTime<BR>";$BenchmarkTa = new Benchmark;}
! 68: &GetDateTime;
! 69: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 70:
! 71: if ($debug) {print $action . "<BR>";$BenchmarkTa = new Benchmark;}
! 72: # call appropriate sr
! 73: if($action eq "newset" ) { &NewSet; }
! 74: if($action eq "viewset" || $action eq "" ) { &ViewSet; }
! 75: if($action eq "viewproblem" ) { &ViewProblem; }
! 76: if($action eq "post" ) { &Post; }
! 77: if($action eq "postsubmit" ) { &PostSubmit; }
! 78: if($action eq "delmsgpre" ) { &DelMsgPre; }
! 79: if($action eq "delmsg" ) { &DelMsg; }
! 80: if($action eq "hidemsgpre" ) { &HideMsgPre; }
! 81: if($action eq "hidemsg" ) { &HideMsg; }
! 82: if($action eq "unhidemsgpre" ) { &UnHideMsgPre; }
! 83: if($action eq "unhidemsg" ) { &UnHideMsg; }
! 84:
! 85: if($action eq "admin" ) { &AdminMain; }
! 86: if($action eq "adminusersearch" ) { &AdminUserSearch; }
! 87: if($action eq "adminusersearchsubmit" ) { &AdminUserSearchSubmit; }
! 88:
! 89: if($action eq "viewinfofile" ) { &ViewInfoFile; }
! 90:
! 91: if($action eq "topmsg" ) { &TopMsg("top"); }
! 92: if($action eq "untopmsg" ) { &TopMsg(""); }
! 93: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 94:
! 95: $BenchmarkT1 = new Benchmark;
! 96: if($debug) { print "<BR>",timestr(timediff($BenchmarkT1,$BenchmarkT0)),"\n";}
! 97:
! 98: exit;
! 99:
! 100: #######################
! 101: ## Begin Subroutines ##
! 102: #######################
! 103:
! 104: sub NewSet {
! 105: &Log("NewSet");
! 106:
! 107: if($setid <= $psetid) { #grab capaid
! 108: if ($debug) {print "ViewSet<BR>";$BenchmarkTa = new Benchmark;}
! 109: @allcapaid = `allcapaid -s $setid -e $setid -stu $snum -c $capadir/$class -i`;
! 110:
! 111: $capaid = $allcapaid[2];
! 112: chop $capaid;
! 113: chop $capaid;
! 114: &ViewSet;
! 115: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 116: return;
! 117: }
! 118:
! 119: opendir(DDIR,"$capadir/$class/discussion");
! 120: @sets = grep(/[0-9]/,sort(readdir(DDIR)));
! 121: closedir(DDIR);
! 122:
! 123: $pdset = "<select name=\"SETID\">\n";
! 124: foreach $setnum(@sets) {
! 125: $selected = "";
! 126: if($setnum eq $setid) { $selected = "selected"; }
! 127: $pdset .= "<option value=\"$setnum\" $selected>$setnum\n";
! 128: }
! 129: $pdset .= "</select>\n";
! 130:
! 131: &NewSetHTML;
! 132: #exit;
! 133: }
! 134:
! 135: sub ViewSet {
! 136: if ($debug) {print "InsideViewSet<BR>";$BenchmarkTa = new Benchmark;}
! 137: &Log("ViewSet");
! 138: &CheckAdmin;
! 139: $adminbutton = "";
! 140: if($validadmin eq "yes") {
! 141: $adminbutton = &AdminButtonHTML;
! 142: }
! 143:
! 144: $capasbin = "$capasbin/$teachdir/capasbin";
! 145: &SetJumpBox;
! 146: opendir(FORUM,"$capadir/$class/discussion/$setid");
! 147: @dir = sort(readdir(FORUM));
! 148: closedir(FORUM);
! 149:
! 150: @infofiles = grep(/.info/,@dir);
! 151: $infostring = "";
! 152: $backfunction = "viewset";
! 153: foreach $infofile(@infofiles) {
! 154: $infodesc = $infofile;
! 155: $infodesc =~ s/.info//g;
! 156: $infodesc =~ s/_/ /g;
! 157: $infostring .= &InfoButtonHTML;
! 158: }
! 159:
! 160: foreach $i(@dir) {
! 161: $probnum = &RemZero(substr($i,0,6));
! 162: $found[$probnum]++;
! 163: }
! 164: $maxprobs = &MaxProbs($setid);
! 165:
! 166: # split table (if more than 15 problems)
! 167: $bigtable = "no";
! 168: if($maxprobs > 5) {
! 169: $bigtable = "yes";
! 170: $col1size = int ($maxprobs / 2);
! 171: $col2size = $maxprobs - $col1size;
! 172: if($col1size < $col2size) {
! 173: $t = $col1size;
! 174: $col1size = $col2size;
! 175: $col2size = $t;
! 176: }
! 177: }
! 178: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>2",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 179: &ViewSetTitleHTML;
! 180:
! 181: if($bigtable eq "no") { &ViewSetTopSmallHTML; }
! 182: else { &ViewSetTopBigHTML; }
! 183:
! 184: $col = 1;
! 185: for($probnum=1; $probnum<=$maxprobs; $probnum++) {
! 186: if($col eq "1" && $probnum > $col1size && $bigtable eq "yes") {
! 187: $col = 2;
! 188: &ViewSetEndColHTML;
! 189: &ViewSetTopSmallHTML;
! 190: }
! 191: if($found[$probnum] ne "") {
! 192: opendir(MSG,"$capadir/$class/discussion/$setid");
! 193: @msgs = grep(/.msg/,sort(readdir(MSG)));
! 194: closedir(MSG);
! 195: foreach $msg(@msgs) {
! 196: if(&RemZero(substr($msg,0,6)) eq $probnum) {
! 197: push(@good,$msg);
! 198: }
! 199: }
! 200:
! 201: &OpenMsg("$capadir/$class/discussion/$setid/$good[$#good]");
! 202: $lastpost = "$date at $time";
! 203: $posts = $found[$probnum];
! 204: }
! 205: else {
! 206: $lastpost = "--";
! 207: $posts = "0"; }
! 208: &ViewSetGutsHTML;
! 209: }
! 210: &ViewSetBotHTML;
! 211: if($debug) {$BenchmarkTb = new Benchmark;print "<BR>3",timestr(timediff($BenchmarkTb,$BenchmarkTa)),"\n";}
! 212: #exit;
! 213: }
! 214:
! 215: sub ViewProblem {
! 216: &Log("ViewProblem");
! 217:
! 218: # check if user is administrator (for admin button)
! 219: &CheckAdmin;
! 220: if($validadmin eq "yes") {
! 221: $adminbutton = &AdminButtonHTML;
! 222: }
! 223: else {
! 224: $adminbutton = "";
! 225: }
! 226:
! 227: opendir (MSGS,"$capadir/$class/discussion/$setid");
! 228: @msgs = sort(readdir(MSGS));
! 229: closedir(MSGS);
! 230:
! 231: # search for top message
! 232: @top = grep (/top/, @msgs);
! 233: $topmsg = "";
! 234: # print "$#top";
! 235: if($#top ne "0") {
! 236: $pnum = &AddZero($probnum);
! 237: foreach $entry(@top) {
! 238: $find = $entry =~ s/\A$pnum/$pnum/o;
! 239: if($find eq "1") {
! 240: $topmsg = $entry;
! 241: @msgs = grep(!/$topmsg/,@msgs);
! 242: unshift(@msgs,$topmsg);
! 243: print "$topmsg";
! 244: }
! 245: }
! 246: }
! 247:
! 248: $msgfind = "no";
! 249: $msgcount = 0;
! 250:
! 251: $capasbin = "$capasbin/$teachdir/capasbin";
! 252:
! 253: foreach $i(@msgs) {
! 254: $pn = &RemZero(substr($i,0,6));
! 255: if($pn eq $probnum) {
! 256: $msgcount++;
! 257: $msgfind = "yes";
! 258: &OpenMsg("$capadir/$class/discussion/$setid/$i");
! 259:
! 260: if($status eq "hidden" && $validadmin ne "yes") {
! 261: $msgcount--;
! 262: $msgfind = "no";
! 263: }
! 264:
! 265: if($msgcount eq "1") {
! 266: $postbutton = &ReplyButtonHTML;
! 267: &ProblemJumpBox;
! 268: &ViewProblemTopHTML;
! 269: }
! 270:
! 271: ($token1,$token2) = split(/\|/,$poster);
! 272: chop $token2;
! 273: if($token1 eq "Anonymous") {
! 274: if($validadmin eq "yes") {
! 275: $poster = "$token2 (anonymously)";
! 276: }
! 277: else {
! 278: $poster = "$token1";
! 279: $email = "";
! 280: }
! 281: }
! 282: $topfind = grep(/-top.msg/,$i);
! 283: if($validadmin eq "yes") {
! 284: $file = "$i";
! 285: $delbutton = &DelButtonHTML;
! 286: $hidebutton = &HideButtonHTML;
! 287: $topbutton = &TopButtonHTML;
! 288: if($topfind eq "1") { $topbutton = &UnTopButtonHTML; }
! 289: }
! 290: $subjectbgcolor = "#92D1D0";
! 291: if($topfind eq "1") { $subjectbgcolor = "blue"; }
! 292: $messagenote = "";
! 293: if($validadmin eq "yes" || $status eq "public") {
! 294: if($status eq "hidden") {
! 295: $subjectbgcolor = "red";
! 296: $hidebutton = &UnHideButtonHTML;
! 297: $messagenote = "Hidden by $hiddenuser on $hiddendate at $hiddentime from $hiddenaddr";
! 298: }
! 299: $message =~ s/</</g;
! 300: $message =~ s/>/>/g;
! 301: &ViewProblemGutsHTML;
! 302: }
! 303: }
! 304: }
! 305:
! 306: if($msgfind eq "no") {
! 307: $postbutton = &PostNewButtonHTML;
! 308: &ProblemJumpBox;
! 309: &ViewProblemTopHTML;
! 310: &ViewProblemNoneHTML;
! 311: &ViewProblemBotHTML;
! 312: } else {
! 313: &ViewProblemBotHTML;
! 314: }
! 315:
! 316: #exit;
! 317: }
! 318:
! 319: sub ViewInfoFile {
! 320: open(INFOFILE,"$capadir/$class/discussion/$setid/$file");
! 321: @file = <INFOFILE>;
! 322: closedir(INFOFILE);
! 323:
! 324: print "<html><head></head><body bgcolor=\"#ffffff\">";
! 325: $backfunction = $form{'BACKFUNCTION'};
! 326: &InfoBackButtonHTML;
! 327: foreach $line(@file) {
! 328: print "$line";
! 329: }
! 330:
! 331: #exit;
! 332: }
! 333:
! 334: sub Post {
! 335: local(@msgs,$pn,$msg);
! 336:
! 337: # grab last message in thread
! 338: opendir(MSGS,"$capadir/$class/discussion/$setid");
! 339: @msgs = grep(/.msg/,sort(readdir(MSGS)));
! 340: closedir(MSGS);
! 341:
! 342: foreach $msg(@msgs) {
! 343: $pn = &RemZero(substr($msg,0,6));
! 344: if($pn eq $probnum) {
! 345: $lastfile = $msg;
! 346: }
! 347: }
! 348:
! 349: $PostType = "New Message";
! 350: if($lastfile ne "") {
! 351: &OpenMsg("$capadir/$class/discussion/$setid/$lastfile");
! 352: if($status eq "public" || $validadmin eq "yes") {
! 353: ($poster,$rposter) = split(/\|/,$poster);
! 354: $inreplyto = &InReplyToHTML;
! 355: $PostType = "Reply";
! 356: }
! 357: }
! 358:
! 359: &PostHTML;
! 360: #exit;
! 361: }
! 362:
! 363: sub PostSubmit {
! 364: local($message,$subject,$date);
! 365:
! 366: $message = $form{'message'};
! 367: $subject = $form{'subject'};
! 368:
! 369: if($message eq "" || $subject eq "") { &MFPostReplyHTML; }
! 370:
! 371: &Log("Post");
! 372:
! 373: # find last message in thread
! 374: opendir(FORUM,"$capadir/$class/discussion/$setid");
! 375: @dir = sort(readdir(FORUM));
! 376: closedir(FORUM);
! 377:
! 378: $probnum = &AddZero($probnum);
! 379: $replynum = "000000";
! 380: foreach $msg(@dir) {
! 381: if(substr($msg,0,6) eq $probnum) {
! 382: $replynum = &AddZero(&RemZero(substr($msg,7,6)) + 1);
! 383: }
! 384: }
! 385:
! 386: $date = substr($RunonDate,0,4) . $yp . substr($RunonDate,4,2);
! 387: &WriteMsg("$capadir/$class/discussion/$setid/$probnum-$replynum-$date-000000.msg");
! 388:
! 389: $probnum = &RemZero($probnum);
! 390: &PostDoneHTML;
! 391: #exit;
! 392: }
! 393:
! 394: sub DelMsgPre {
! 395: &CheckAdmin('kill');
! 396: &OpenMsg("$capadir/$class/discussion/$setid/$file");
! 397: &DelMsgPreHTML;
! 398: #exit;
! 399: }
! 400:
! 401: sub DelMsg {
! 402: &CheckAdmin('kill');
! 403: unlink("$capadir/$class/discussion/$setid/$file");
! 404: &DelMsgDoneHTML;
! 405: #exit;
! 406: }
! 407:
! 408: sub HideMsgPre {
! 409: &CheckAdmin('kill');
! 410: &OpenMsg("$capadir/$class/discussion/$setid/$file");
! 411: &HideMsgPreHTML;
! 412: #exit;
! 413: }
! 414:
! 415: sub HideMsg {
! 416: &CheckAdmin('kill');
! 417: open(MSG,"$capadir/$class/discussion/$setid/$file");
! 418: @msg = <MSG>;
! 419: close(MSG);
! 420:
! 421: unlink("$capadir/$class/discussion/$setid/$file");
! 422:
! 423: open(MSG,">$capadir/$class/discussion/$setid/$file");
! 424: for($i=0;$i<=5;$i++) {
! 425: print MSG "$msg[$i]";
! 426: }
! 427: print MSG "hidden|$username|$HyphenDate|$Time|$ENV{'REMOTE_ADDR'}\n";
! 428: close(MSG);
! 429:
! 430: &HideMsgDoneHTML;
! 431: }
! 432:
! 433: sub UnHideMsgPre {
! 434: &CheckAdmin('kill');
! 435: &OpenMsg("$capadir/$class/discussion/$setid/$file");
! 436: &UnHideMsgPreHTML;
! 437: #exit;
! 438: }
! 439:
! 440: sub UnHideMsg {
! 441: &CheckAdmin('kill');
! 442: open(MSG,"$capadir/$class/discussion/$setid/$file");
! 443: @msg = <MSG>;
! 444: close(MSG);
! 445:
! 446: unlink("$capadir/$class/discussion/$setid/$file");
! 447:
! 448: open(MSG,">$capadir/$class/discussion/$setid/$file");
! 449: for($i=0;$i<=5;$i++) {
! 450: print MSG "$msg[$i]";
! 451: }
! 452: print MSG "public||||}\n";
! 453: close(MSG);
! 454:
! 455: &UnHideMsgDoneHTML;
! 456: }
! 457:
! 458:
! 459: sub TopMsg {
! 460: &CheckAdmin('kill');
! 461:
! 462: $ext = shift(@_);
! 463:
! 464: open(MSG,"$capadir/$class/discussion/$setid/$file");
! 465: @msg = <MSG>;
! 466: close(MSG);
! 467:
! 468: unlink("$capadir/$class/discussion/$setid/$file");
! 469:
! 470: ($filename, $extension) = split(/\./,$file);
! 471: $filename = "$filename-$ext.msg";
! 472: open(MSG,">$capadir/$class/discussion/$setid/$filename");
! 473: for($i=0;$i<=6;$i++) {
! 474: print MSG "$msg[$i]";
! 475: }
! 476: close(MSG);
! 477:
! 478: if($ext eq "") {
! 479: $function = "restored to its original position in the thread.";
! 480: }
! 481: else {
! 482: $function = "moved to the top of the thread list.";
! 483: }
! 484:
! 485: &TopMsgDoneHTML;
! 486: }
! 487:
! 488: ###############################
! 489: ## Administrator Subroutines ##
! 490: ###############################
! 491:
! 492: sub AdminMain {
! 493: &CheckAdmin('kill');
! 494: &AdminMainHTML;
! 495: #exit;
! 496: }
! 497:
! 498:
! 499: sub AdminUserSearch {
! 500: &CheckAdmin('kill');
! 501: &AdminUserSearchHTML;
! 502: #exit;
! 503: }
! 504:
! 505:
! 506: sub AdminUserSearchSubmit {
! 507: local($sname,$semail,$saction,$sset,$sprob,$sdate,$stime);
! 508: &CheckAdmin('kill');
! 509:
! 510: $query = $form{'usersearch'};
! 511: open(LOG,"$capadir/$class/discussion/logs/access.log");
! 512: @log = <LOG>;
! 513: close(LOG);
! 514:
! 515: @linematches = grep /$query/, @log;
! 516:
! 517: foreach $line(@linematches) { print $line; }
! 518:
! 519: #exit;
! 520: }
! 521:
! 522: ######################
! 523: ## Misc Subroutines ##
! 524: ######################
! 525:
! 526: sub OpenMsg {
! 527: local($filename,$statusl);
! 528:
! 529: $filename = shift(@_);
! 530:
! 531: open (MSG,"$filename");
! 532: @msg = <MSG>;
! 533: close(MSG);
! 534:
! 535: $poster = $msg[0];
! 536: $date = $msg[1];
! 537: $time = $msg[2];
! 538: $subject = $msg[3];
! 539: $email = $msg[4];
! 540: $message = $msg[5];
! 541: $statusl = $msg[6];
! 542:
! 543: ($status, $hiddenuser, $hiddendate, $hiddentime, $hiddenaddr) = split(/\|/,$statusl);
! 544: }
! 545:
! 546: sub WriteMsg {
! 547: local($filename,$message);
! 548:
! 549: $filename = shift(@_);
! 550: # add sr to grab e-mail address of user
! 551:
! 552: $message = $form{'message'};
! 553: $message =~ s/\n\r\n/<p>/g;
! 554: $message =~ s/\n/<br>/g;
! 555:
! 556: # check if posted anonymously
! 557: if($form{'ANONYMOUS'} eq "yes") {
! 558: $username = "Anonymous|$username";
! 559: }
! 560:
! 561: open (MSG,">$filename");
! 562: print MSG "$username\n";
! 563: print MSG "$HyphenDate\n";
! 564: print MSG "$Time\n";
! 565: print MSG "$subject\n";
! 566: print MSG "$email\n";
! 567: print MSG "$message\n";
! 568: print MSG "public||||\n";
! 569: close(MSG);
! 570: }
! 571:
! 572: sub GetTeacherInfo {
! 573: local($capa5dir,$classname,$tdir,@classconf);
! 574:
! 575: # open/read class.conf file
! 576: open (CLASSCONF,"$capabin/class.conf");
! 577: @classconf = <CLASSCONF>;
! 578: close(CLASSCONF);
! 579:
! 580: $found eq "no";
! 581: foreach $line(@classconf) {
! 582: ($classname,$capa5dir,$tdir) = split(/[\t\ ]+/,$line);
! 583: if($classname eq $class) {
! 584: $teachdir = $tdir;
! 585: $capadir = $capa5dir;
! 586: $found = "yes";
! 587: $cgidirurl = join "/", $capasbin,$teachdir;
! 588: }
! 589: }
! 590: if($found eq "no") { &InvalidVarsHTML; }
! 591: }
! 592:
! 593: sub CheckAdmin {
! 594: local($asection,@adminsections,$line,@capaconfig,$command,$value,
! 595: $adminsection,@classl,$course,$coursenum,$section,$stunum,$a);
! 596:
! 597: $mode = shift(@_);
! 598:
! 599: if ($validadmin eq "unchecked") {
! 600: $validadmin = "no";
! 601:
! 602: # open 'capa.config' file (for admin section read)
! 603: open(CAPACONFIG,"$capadir/$class/capa.config");
! 604: @capaconfig = <CAPACONFIG>;
! 605: close(CAPACONFIG);
! 606: foreach $line(@capaconfig) {
! 607: chop $line;
! 608: ($command,$value) = split(/\ =\ /,$line);
! 609: if($command eq "admin_section") {
! 610: $adminsection = $value;
! 611: last;
! 612: }
! 613: }
! 614: @adminsections = split(/\,/,$adminsection);
! 615: for ($asection=0; $asection <= $#adminsections; $asection++) {
! 616: $adminsections[$asection]=&RemZero($adminsections[$asection])
! 617: }
! 618: # open 'classl' file
! 619: open(CLASSL,"$capadir/$class/classl");
! 620: @classl = <CLASSL>;
! 621: close(CLASSL);
! 622:
! 623: $snum =~ tr/a-z/A-Z/;
! 624: LINE: foreach $line(@classl) {
! 625: ($course,$coursenum,$section,$stunum,$a) = split(/\ +/,$line);
! 626: $stunum =~ tr/a-z/A-Z/;
! 627: if ( $stunum ne $snum ) { next LINE;}
! 628: $section = &RemZero($section);
! 629: foreach $asection(@adminsections) {
! 630: if($section eq $asection ) {
! 631: $validadmin = "yes";
! 632: last LINE;
! 633: }
! 634: }
! 635: }
! 636: }
! 637: if($validadmin eq "no" && $mode eq "kill") { &NotAdminHTML; }
! 638: }
! 639:
! 640: sub ValidateUser {
! 641: local(@allcapaid,@classl,$line);
! 642:
! 643: open (CLASSL,"$capadir/$class/classl");
! 644: @classl = <CLASSL>;
! 645: close(CLASSL);
! 646:
! 647: $valid = "no";
! 648: foreach $line(@classl) {
! 649: if(substr($line,15,8) eq substr($snum,1,8)) {
! 650: $valid = yes;
! 651: }
! 652: }
! 653: if($valid eq "no") { &InvalidVarsHTML; }
! 654:
! 655: # check w/ allcapaid program
! 656: @allcapaid = `allcapaid -s $setid -e $setid -stu $snum -c $capadir/$class -i`;
! 657:
! 658: chop $allcapaid[2];
! 659: chop $allcapaid[2];
! 660: if($allcapaid[2] ne $capaid) {
! 661: if($action ne "newset") { &BadPassHTML; }
! 662: #&NewSet;
! 663: }
! 664: }
! 665:
! 666: sub UserInfo {
! 667: local($line,@classl,$last,$first,$middle);
! 668:
! 669: open (CLASSL,"$capadir/$class/classl");
! 670: @classl = <CLASSL>;
! 671: close(CLASSL);
! 672:
! 673: foreach $line(@classl) {
! 674: if(substr($line,15,8) eq substr($snum,1,8)) {
! 675: $username = substr($line,24,36);
! 676: $email = substr($line,60,45);
! 677: }
! 678: }
! 679: ($last, $first, $middle) = split(/\ +/,$username);
! 680:
! 681: chop $last;
! 682: $username = "$first $last";
! 683: $email =~ s/\ //g;
! 684: chop $email;
! 685: }
! 686:
! 687: sub MaxProbs {
! 688: open (SETRECORD,"$capadir/$class/records/set$setid.db");
! 689: $setrecord = <SETRECORD>;
! 690: close(SETRECORD);
! 691: chop $setrecord;
! 692: return $setrecord;
! 693: }
! 694:
! 695: sub ProblemJumpBox {
! 696: $pdprob = "<select name=\"PROBNUM\">\n";
! 697: for($jumpnum=1;$jumpnum<=&MaxProbs;$jumpnum++) {
! 698: $selected = "";
! 699: if($jumpnum eq $probnum) { $selected = " selected"; }
! 700: $pdprob .= " <option value=$jumpnum$selected>$jumpnum\n";
! 701: }
! 702: $pdprob .= "</select>";
! 703: }
! 704:
! 705: sub SetJumpBox {
! 706: opendir(DDIR,"$capadir/$class/discussion");
! 707: @sets = grep(/[0-9]/,sort(readdir(DDIR)));
! 708: closedir(DDIR);
! 709:
! 710: $pdset = "<select name=\"SETID\">\n";
! 711: foreach $set(@sets) {
! 712: $selected = "";
! 713: if($set eq $setid) { $selected = " selected"; }
! 714: $pdset .= " <option value=\"$set\"$selected>$set\n";
! 715: }
! 716: $pdset .= "</select>";
! 717: }
! 718:
! 719: sub AddZero {
! 720: $string = shift(@_);
! 721:
! 722: while(length($string) < 6) {
! 723: $string = "0$string";
! 724: }
! 725: return $string;
! 726: }
! 727:
! 728: sub RemZero {
! 729: $string = shift(@_);
! 730: $string =~ s/^0*//g;
! 731: return $string;
! 732: }
! 733:
! 734: sub FormatDate {
! 735: $string = shift(@_);
! 736:
! 737: $month = substr($string,0,2);
! 738: $day = substr($string,2,2);
! 739: $year = substr($string,4,4);
! 740:
! 741: $string = "$month-$day-$year";
! 742:
! 743: return $string;
! 744: }
! 745:
! 746: ####################
! 747: ## Get SubRoutine ##
! 748: ####################
! 749: sub form_info {
! 750: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
! 751:
! 752: # Split the name-value pairs
! 753: @pairs = split(/&/, $buffer);
! 754:
! 755: foreach $pair (@pairs) {
! 756: ($name, $value) = split(/=/, $pair);
! 757:
! 758: # Un-Webify plus signs and %-encoding
! 759: $value =~ tr/+/ /;
! 760: $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
! 761: $value =~ s/<!--(.|\n)*-->//g;
! 762:
! 763: if ($allow_html != 1) {
! 764: $value =~ s/<([^>]|\n)*>//g;
! 765: }
! 766: $form{$name} = $value;
! 767: }
! 768: }
! 769:
! 770: ##################
! 771: ## Date/Time sr ##
! 772: ##################
! 773: sub GetDateTime {
! 774: ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime (time);
! 775: $mon++;
! 776:
! 777: if ($hour < 12) {
! 778: $AMPM = "AM";
! 779: }
! 780:
! 781: if ($hour > 12) {
! 782: $hour = $hour - 12;
! 783: $AMPM = "PM";
! 784: }
! 785: if ($hour == 12) {
! 786: $AMPM = "PM";
! 787: }
! 788:
! 789: if ($hour == 0) {
! 790: $hour = "12";
! 791: }
! 792:
! 793: $min = sprintf ("%2d", $min);
! 794: $min =~tr/ /0/;
! 795: $mon = sprintf ("%2d", $mon);
! 796: $mon =~tr/ /0/;
! 797: $mday = sprintf ("%2d", $mday);
! 798: $mday =~tr/ /0/;
! 799: $HyphenDate = ("$mon" . "-" . "$mday" . "-" . "$year");
! 800: $RunonDate = ("$mon$mday$year");
! 801: $Time = ("$hour" . ":" . "$min" . " " . "$AMPM");
! 802: }
! 803:
! 804: ########################
! 805: ## Logging Subroutine ##
! 806: ########################
! 807: sub Log {
! 808: $logmsg = shift(@_);
! 809:
! 810: &GetDateTime;
! 811:
! 812: &Lock("lock.file");
! 813: open(LOG,">>$capadir/$class/discussion/logs/access.log");
! 814: print LOG "$snum|$capaid|$username|$email|$logmsg|$setid|$probnum|$HyphenDate|$Time\n";
! 815: close(LOG);
! 816: &Unlock("lock.file");
! 817: }
! 818:
! 819: ############################
! 820: ## Lock/Unlock Subroutine ##
! 821: ############################
! 822: sub Lock {
! 823: local ($lockname) = @_;
! 824: local ($endtime);
! 825: $endtime = 15;
! 826: $endtime = time + $endtime;
! 827:
! 828: while (-e $lockname && time < $endtime) {
! 829: open (LOCKFILE, ">$lockname");
! 830: }
! 831:
! 832: sub Unlock {
! 833: local ($lockname) = @_;
! 834: close (LOCKFILE);
! 835: unlink ($lockname);
! 836: }
! 837: }
! 838:
! 839:
! 840: ######################
! 841: ## HTML Subroutines ##
! 842: ######################
! 843:
! 844: ## CapaDiscuss HTML Subroutines
! 845:
! 846: # capadiscuss_html
! 847:
! 848: ## end capadiscuss
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>