Annotation of loncom/homework/bridgetask.pm, revision 1.1

1.1     ! albertel    1: # The LearningOnline Network with CAPA 
        !             2: # definition of tags that give a structure to a document
        !             3: #
        !             4: # $Id: structuretags.pm,v 1.281 2005/03/01 03:21:58 albertel Exp $
        !             5: #
        !             6: # Copyright Michigan State University Board of Trustees
        !             7: #
        !             8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
        !             9: #
        !            10: # LON-CAPA is free software; you can redistribute it and/or modify
        !            11: # it under the terms of the GNU General Public License as published by
        !            12: # the Free Software Foundation; either version 2 of the License, or
        !            13: # (at your option) any later version.
        !            14: #
        !            15: # LON-CAPA is distributed in the hope that it will be useful,
        !            16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            18: # GNU General Public License for more details.
        !            19: #
        !            20: # You should have received a copy of the GNU General Public License
        !            21: # along with LON-CAPA; if not, write to the Free Software
        !            22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
        !            23: #
        !            24: # /home/httpd/html/adm/gpl.txt
        !            25: #
        !            26: # http://www.lon-capa.org/
        !            27: #
        !            28: ###
        !            29: 
        !            30: 
        !            31: package Apache::bridgetask; 
        !            32: 
        !            33: use strict;
        !            34: use Apache::lonnet;
        !            35: use Apache::File();
        !            36: use Apache::lonmenu;
        !            37: use Apache::lonlocal;
        !            38: use Apache::lonxml;
        !            39: use Time::HiRes qw( gettimeofday tv_interval );
        !            40: BEGIN {
        !            41:     &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Instance','InstanceText','Criteria','ClosingParagraph'));
        !            42: }
        !            43: 
        !            44: sub start_Task {
        !            45:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !            46: 
        !            47:     #&initialize_storage();
        !            48: 
        !            49:     my $status;
        !            50:     my $accessmsg;
        !            51: 
        !            52:     #should get back a <html> or the neccesary stuff to start XML/MathML
        !            53:     my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
        !            54: 	&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
        !            55: 
        !            56:     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
        !            57: 	$target eq 'tex') {
        !            58: 	($status,$accessmsg) = &Apache::lonhomework::check_task_access('0');
        !            59: 	push (@Apache::inputtags::status,$status);
        !            60: 	my $expression='$external::datestatus="'.$status.'";';
        !            61: 	$expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';
        !            62: 	&Apache::run::run($expression,$safeeval);
        !            63: 	&Apache::lonxml::debug("Got $status");
        !            64: 	if (( $status eq 'CLOSED' ) ||
        !            65: 	    ( $status eq 'BANNED') ||
        !            66: 	    ( $status eq 'UNAVAILABLE') ||
        !            67: 	    ( $status eq 'INVALID_ACCESS')) {
        !            68: 	    my $bodytext=&Apache::lonxml::get_all_text("/task",$parser);
        !            69: 	    if ( $target eq "web" ) {
        !            70: 		$result.= $head_tag_start.'</head>';
        !            71: 		my $msg=$body_tag_start;
        !            72: 		if ($status eq 'UNAVAILABLE') {
        !            73: 		    $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';
        !            74: 		} elsif ($status ne 'NOT_YET_VIEWED') {
        !            75: 		    $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';
        !            76: 		}
        !            77: 		if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
        !            78: 		    $msg.='The problem '.$accessmsg;
        !            79: 		}
        !            80: 		$result.=$msg.'<br />';
        !            81: 	    } elsif ($target eq 'tex') {
        !            82: 		$result.='\begin{document}\noindent \vskip 1 mm  \begin{minipage}{\textwidth}\vskip 0 mm';
        !            83: 		if ($status eq 'UNAVAILABLE') {
        !            84: 		    $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
        !            85: 		} else {
        !            86: 		    $result.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";
        !            87: 		}
        !            88: 	    }
        !            89: 	} elsif ($target eq 'web') {
        !            90: 	    my $name= &Apache::structuretags::get_resource_name($parstack,$safeeval);
        !            91: 	    $result.="$head_tag_start<title>$name</title></head>
        !            92:               $body_tag_start \n $form_tag_start".	
        !            93: 	      '<input type="hidden" name="submitted" value="yes" />';
        !            94: 	    # if we are viewing someone else preserve that info
        !            95: 	    if (defined $ENV{'form.grade_symb'}) {
        !            96: 		foreach my $field ('symb','courseid','domain','username') {
        !            97: 		    $result .= '<input type="hidden" name="grade_'.$field.
        !            98: 			'" value="'.$ENV{"form.grade_$field"}.'" />'."\n";
        !            99: 		}
        !           100: 	    }
        !           101: 	}
        !           102:     } else {
        !           103: 	# page_start returned a starting result, delete it if we don't need it
        !           104: 	$result = '';
        !           105:     }
        !           106:     return $result;
        !           107: }
        !           108: 
        !           109: sub end_Task {
        !           110:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           111:     my $result='';
        !           112:     my $status=$Apache::inputtags::status['-1'];
        !           113:     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
        !           114: 	$target eq 'tex') {
        !           115: 	if (
        !           116: 	    (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
        !           117: 	    ($target eq 'answer') || ($target eq 'tex')
        !           118: 	   ) {
        !           119: 	    if ($target eq 'web') {
        !           120: 		$result.=&Apache::lonxml::xmlend().'</html>';
        !           121: 	    }
        !           122: 	}
        !           123: 	if ($target eq 'grade') {
        !           124: 	    #&Apache::lonhomework::showhash(%Apache::lonhomework::results);
        !           125: 	    #&finalize_storage();
        !           126: 	}
        !           127:     } elsif ($target eq 'meta') {
        !           128: 	#$result=&Apache::response::mandatory_part_meta;
        !           129: 	#$result.=&Apache::response::meta_part_order();
        !           130: 	#$result.=&Apache::response::meta_response_order();
        !           131:     }
        !           132:     return $result;
        !           133: }
        !           134: 
        !           135: sub start_ClosingParagraph {
        !           136:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           137:     my $result;
        !           138:     if ($target eq 'web') {
        !           139: 	$result='<table border="1"><tr><td>Closing</td></tr><tr><td>';
        !           140:     }
        !           141:     return $result;
        !           142: }
        !           143: 
        !           144: sub end_ClosingParagraph {
        !           145:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           146:     my $result;
        !           147:     if ($target eq 'web') {
        !           148: 	$result='</td></tr></table>';
        !           149:     }
        !           150:     return $result;
        !           151: }
        !           152: 
        !           153: my %dimension;
        !           154: my $dim_id;
        !           155: sub start_Dimension {
        !           156:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           157:     undef(%dimension);
        !           158:     $dim_id=$Apache::lonxml::curdepth;
        !           159:     return '';
        !           160: }
        !           161: 
        !           162: sub end_Dimension {
        !           163:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           164:     my $result;
        !           165:     if ($target eq 'web') {
        !           166: 	#FIXME just grabbing the first one for now, need
        !           167: 	#to randomly pick one until all have been seen
        !           168: 	#then start repicking
        !           169: 	my $instance=$dimension{'instances'}->[0];
        !           170: 	my $result=$dimension{'intro'}.
        !           171: 	    $dimension{$instance.'.text'}.
        !           172: 	    '<table border="1"><tr><td>Criteria</td></tr><tr><td>';
        !           173: 	foreach my $id (@{$dimension{$instance.'.criterias'}}) {
        !           174: 	    $result.=$dimension{$instance.'.criteria.'.$id}.
        !           175: 		'</td></tr><tr><td>';
        !           176: 	}
        !           177: 	$result=~s/<tr><td>$//;
        !           178: 	$result.='</table>';
        !           179:     }
        !           180:     return $result;
        !           181: }
        !           182: 
        !           183: sub start_IntroParagraph {
        !           184:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           185:     my $result;
        !           186:     if ($target eq 'web') {
        !           187: 	if ($tagstack->[-2] eq 'Dimension') {
        !           188: 	    &Apache::lonxml::startredirection();
        !           189: 	} else {
        !           190: 	    $result='<table border="1"><tr><td>Intro</td></tr><tr><td>';
        !           191: 	}
        !           192:     }
        !           193:     return $result;
        !           194: }
        !           195: 
        !           196: sub end_IntroParagraph {
        !           197:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           198:     my $result;
        !           199:     if ($target eq 'web') {
        !           200: 	if ($tagstack->[-2] eq 'Dimension') {
        !           201: 	    $dimension{'intro'}=&Apache::lonxml::endredirection();
        !           202: 	} else {
        !           203: 	    $result='</td></tr></table>';
        !           204: 	}
        !           205:     }
        !           206:     return $result;
        !           207: }
        !           208: 
        !           209: my $instance_id;
        !           210: sub start_Instance {
        !           211:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           212:     push(@{$dimension{'instances'}},$Apache::lonxml::curdepth);
        !           213:     $instance_id=$Apache::lonxml::curdepth;
        !           214:     return '';
        !           215: }
        !           216: 
        !           217: sub end_Instance {
        !           218:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           219:     return '';
        !           220: }
        !           221: 
        !           222: sub start_InstanceText {
        !           223:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           224:     if ($target eq 'web') {
        !           225: 	&Apache::lonxml::startredirection();
        !           226:     }
        !           227:     return '';
        !           228: }
        !           229: 
        !           230: sub end_InstanceText {
        !           231:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           232:     if ($target eq 'web') {
        !           233: 	$dimension{$instance_id.'.text'}=&Apache::lonxml::endredirection();
        !           234:     }
        !           235:     return '';
        !           236: }
        !           237: 
        !           238: sub start_Criteria {
        !           239:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           240:     if ($target eq 'web') {
        !           241: 	&Apache::lonxml::startredirection();
        !           242:     }
        !           243:     return '';
        !           244: }
        !           245: 
        !           246: sub end_Criteria {
        !           247:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           248:     if ($target eq 'web') {
        !           249: 	my $criteria=&Apache::lonxml::endredirection();
        !           250: 	my $id=$Apache::lonxml::curdepth;
        !           251: 	$dimension{$instance_id.'.criteria.'.$id}=$criteria;
        !           252: 	push(@{$dimension{$instance_id.'.criterias'}},$id);
        !           253:     }
        !           254:     return '';
        !           255: }
        !           256: 
        !           257: 1;
        !           258: __END__

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>