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