Diff for /loncom/homework/bridgetask.pm between versions 1.71 and 1.76

version 1.71, 2005/10/14 17:27:23 version 1.76, 2005/11/04 15:31:53
Line 68  sub proctor_check_auth { Line 68  sub proctor_check_auth {
     foreach my $possible (@allowed) {      foreach my $possible (@allowed) {
  my ($puser,$pdom)=(split('@',$possible));   my ($puser,$pdom)=(split('@',$possible));
  if ($puser eq $user && $pdom eq $domain) {   if ($puser eq $user && $pdom eq $domain) {
     my $authhost=&Apache::lonnet::authenticate($puser,$env{'form.proctorpassword'},$pdom);      my $authenticated=0;
     if ($authhost ne 'no_host') {      if ( $slot->{'secret'} =~ /\S/ &&
    $env{'form.proctorpassword'} eq $slot->{'secret'} ) {
    $authenticated=1;
       } else {
   
    my $authhost=&Apache::lonnet::authenticate($puser,$env{'form.proctorpassword'},$pdom);
    if ($authhost ne 'no_host') {
       $authenticated=1;
    }
       }
       if ($authenticated) {
  my $version=   my $version=
     $Apache::lonhomework::results{'resource.version'}=      $Apache::lonhomework::results{'resource.version'}=
     ++$Apache::lonhomework::history{'resource.version'};      ++$Apache::lonhomework::history{'resource.version'};
Line 344  sub webgrade_standard_info { Line 354  sub webgrade_standard_info {
  my $file=$file_url.$partial_file;   my $file=$file_url.$partial_file;
  $file=~s|/+|/|g;   $file=~s|/+|/|g;
  &Apache::lonnet::allowuploaded('/adm/bridgetask',$file);   &Apache::lonnet::allowuploaded('/adm/bridgetask',$file);
  $file_list.='<li><nobr><a href="'.$file.'" target="lonGRDs"><img src="'.   $file_list.='<li><nobr><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.
     &Apache::loncommon::icon($file).'" border=0"> '.$file.      &Apache::loncommon::icon($file).'" border=0"> '.$file.
     '</a></nobr></li>'."\n";      '</a></nobr></li>'."\n";
     }      }
Line 372  sub start_Task { Line 382  sub start_Task {
  &Apache::structuretags::init_problem_globals('Task');   &Apache::structuretags::init_problem_globals('Task');
  &Apache::structuretags::initialize_storage();   &Apache::structuretags::initialize_storage();
  &Apache::lonhomework::showhash(%Apache::lonhomework::history);   &Apache::lonhomework::showhash(%Apache::lonhomework::history);
    if ($env{'request.state'} eq 'construct') {
       &Apache::structuretags::setup_rndseed($safeeval);
    }
     }       } 
   
     $Apache::lonhomework::parsing_a_task=1;      $Apache::lonhomework::parsing_a_task=1;
Line 379  sub start_Task { Line 392  sub start_Task {
     my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=      my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
  &Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);   &Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
           
     if ($target eq 'web') {      if ($target eq 'web' && $env{'request.state'} ne 'construct') {
  if ($Apache::lonhomework::modifygrades) {   if ($Apache::lonhomework::modifygrades) {
     $body_tag_start.='<form name="gradesubmission" method="POST" action="';      $body_tag_start.='<form name="gradesubmission" method="POST" action="';
     my $uri=$env{'request.uri'};      my $uri=$env{'request.uri'};
Line 396  sub start_Task { Line 409  sub start_Task {
     }      }
  }   }
     }      }
       if ($target eq 'web' && $env{'request.state'} eq 'construct') {
    $form_tag_start.=&Apache::structuretags::problem_web_to_edit_header($env{'form.rndseed'});
       }
     if ($target eq 'web' || ($target eq 'grade' && !$env{'form.webgrade'}) || $target eq 'answer' ||      if ($target eq 'web' || ($target eq 'grade' && !$env{'form.webgrade'}) || $target eq 'answer' ||
  $target eq 'tex') {   $target eq 'tex') {
  my ($version,$previous)=&get_version();   my ($version,$previous)=&get_version();
Line 412  sub start_Task { Line 428  sub start_Task {
     my $bodytext=&Apache::lonxml::get_all_text("/task",$parser);      my $bodytext=&Apache::lonxml::get_all_text("/task",$parser);
     if ( $target eq "web" ) {      if ( $target eq "web" ) {
  $result.= $head_tag_start.'</head>'.$body_tag_start;   $result.= $head_tag_start.'</head>'.$body_tag_start;
    if ($env{'request.state'} eq 'construct') {
       $result.=$form_tag_start;
    }
  my $msg;   my $msg;
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';
Line 543  DONESCREEN Line 562  DONESCREEN
     }      }
     if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); }      if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); }
  }   }
       } elsif ($target eq 'edit') {
    $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
       &Apache::structuretags::problem_edit_header();
    $Apache::lonxml::warnings_error_header=
       &mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />";
    my $temp=&Apache::edit::insertlist($target,$token);
    $result.=$temp;
     } else {      } else {
  # page_start returned a starting result, delete it if we don't need it   # page_start returned a starting result, delete it if we don't need it
  $result = '';   $result = '';
Line 1401  sub start_Dimension { Line 1427  sub start_Dimension {
 }  }
   
 sub get_instance {  sub get_instance {
     &Apache::response::pushrandomnumber();      my ($dim)=@_;
     my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});      my $rand_alg=&Apache::lonnet::get_rand_alg();
     my $num=@order;      if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
     my $version=&get_version();   $rand_alg eq '64bit2' || $rand_alg eq '64bit3' ||
     my $which=($version-1)%$num;   $rand_alg eq '64bit4' ) {
     return $order[$which];   &Apache::response::pushrandomnumber();
    my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});
    my $num=@order;
    my $version=&get_version();
    my $which=($version-1)%$num;
    return $order[$which];
       } else {
    my ($version,$previous) = &get_version();
    my $instance = 
       $Apache::lonhomework::history{"resource.$version.0.$dim.instance"};
    if (defined($instance)) { return $instance; }
   
    &Apache::response::pushrandomnumber();
    my @instances = @{$dimension{'instances'}};
    # remove disabled instances
    for (my $i=0; $i < $#instances; $i++) {
       if ($dimension{$instances[$i].'.disabled'}) {
    splice(@instances,$i,1);
    $i--;
       }
    }
    @instances = &Math::Random::random_permutation(@instances);
    $instance  = $instances[($version-1)%scalar(@instances)];
    $Apache::lonhomework::results{"resource.$version.0.$dim.instance"} = 
       $instance;
    &Apache::response::poprandomnumber();
    return $instance;
       }
 }  }
   
 {  {
Line 1415  sub get_instance { Line 1468  sub get_instance {
  my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
  my $result=&Apache::lonxml::endredirection();   my $result=&Apache::lonxml::endredirection();
  my $dim=&get_id($parstack,$safeeval);   my $dim=&get_id($parstack,$safeeval);
  my $instance=&get_instance();   my $instance=&get_instance($dim);
  my $version=&get_version();   my $version=&get_version();
  if ($target eq 'web') {   if ($target eq 'web') {
     @Apache::scripttag::parser_env = @_;      @Apache::scripttag::parser_env = @_;
     $result.=&Apache::scripttag::xmlparse($dimension{'intro'});      $result.=&Apache::scripttag::xmlparse($dimension{'intro'});
     @Apache::scripttag::parser_env = @_;      my @instances = $instance;
     $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'});      if (&Apache::response::showallfoils()) {
     if ($Apache::lonhomework::history{"resource.$version.status"} eq 'pass' ||   @instances = @{$dimension{'instances'}};
  $Apache::lonhomework::history{"resource.$version.status"} eq 'fail') {      }
       foreach my $instance (@instances) {
  my $dim_status=$Apache::lonhomework::history{"resource.$version.$dim.status"};   @Apache::scripttag::parser_env = @_;
  my $mandatory='Mandatory';   $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
  if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') {   if ($Apache::lonhomework::history{"resource.$version.status"} eq 'pass' ||
     $mandatory='Optional';      $Apache::lonhomework::history{"resource.$version.status"} eq 'fail') {
  }  
  my $dim_info="<div class='$dim_status'>\n";      my $dim_status=$Apache::lonhomework::history{"resource.$version.$dim.status"};
  if ($dim_status eq 'pass') {      my $mandatory='Mandatory';
     $dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>';      if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') {
  }  
  if ($dim_status eq 'fail') {  
     $dim_info.='<h3>Question : you did not pass this '.$mandatory.' question</h3>';  
  }  
  my $man_count=0;  
  my $man_passed=0;  
  my $opt_count=0;  
  my $opt_passed=0;  
  foreach my $id (@{$dimension{$instance.'.criterias'}}) {  
     if ($dimension{$instance.'.criteria.'.$id.'.mandatory'}   
  eq 'N') {  
  $opt_count++;  
  if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') {  
     $opt_passed++;  
  }  
     } else {  
  $man_count++;  
  if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') {  
     $man_passed++;  
  }  
     }  
  }  
  if ($man_passed eq $man_count) { $man_passed='all'; }  
  my $opt_req=$dimension{$instance.'.optionalrequired'};  
  if ($opt_req !~ /\S/) { $opt_req='0'; }  
  $dim_info.="\n<p>".&mt('You passed [_1] of the [_2] mandatory components and [_3] of the [_4] optional components, of which you were required to pass [_5].',$man_passed,$man_count,$opt_passed,$opt_count,$opt_req)."</p>\n</div>";  
   
  my $internal_location=&internal_location($dim);  
  $result=~s/\Q$internal_location\E/$dim_info/;  
   
  foreach my $id (@{$dimension{$instance.'.criterias'}}) {  
     my $status=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"};  
     my $comment=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"};  
     my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');  
     if ($mandatory) {  
  $mandatory='Mandatory';  
     } else {  
  $mandatory='Optional';   $mandatory='Optional';
     }      }
     if ($status eq 'fail') {      my $dim_info="<div class='$dim_status'>\n";
     } elsif ($status eq 'pass') {      if ($dim_status eq 'pass') {
     } else {   $dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>';
  &Apache::lonxml::error("Student viewing a graded bridgetask was shown a status of $status");  
     }      }
     my $status_display=$status;      if ($dim_status eq 'fail') {
     $status_display=~s/^([a-z])/uc($1)/e;   $dim_info.='<h3>Question : you did not pass this '.$mandatory.' question</h3>';
     @Apache::scripttag::parser_env = @_;      }
     $result.='<div class="'.$status.'"><h4>'.$mandatory.      my $man_count=0;
  ' Criteria</h4><p>';      my $man_passed=0;
     @Apache::scripttag::parser_env = @_;      my $opt_count=0;
     $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});      my $opt_passed=0;
     $result.='</p><p class="grade">'.$status_display.'</p>';      foreach my $id (@{$dimension{$instance.'.criterias'}}) {
     if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}) {   if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} 
  $result.='<p class="comment">'.$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}.'</p>';      eq 'N') {
       $opt_count++;
       if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') {
    $opt_passed++;
       }
    } else {
       $man_count++;
       if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') {
    $man_passed++;
       }
    }
       }
       if ($man_passed eq $man_count) { $man_passed='all'; }
       my $opt_req=$dimension{$instance.'.optionalrequired'};
       if ($opt_req !~ /\S/) { $opt_req='0'; }
       $dim_info.="\n<p>".&mt('You passed [_1] of the [_2] mandatory components and [_3] of the [_4] optional components, of which you were required to pass [_5].',$man_passed,$man_count,$opt_passed,$opt_count,$opt_req)."</p>\n</div>";
   
       my $internal_location=&internal_location($dim);
       $result=~s/\Q$internal_location\E/$dim_info/;
   
       foreach my $id (@{$dimension{$instance.'.criterias'}}) {
    my $status=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"};
    my $comment=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"};
    my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
    if ($mandatory) {
       $mandatory='Mandatory';
    } else {
       $mandatory='Optional';
    }
    if ($status eq 'fail') {
    } elsif ($status eq 'pass') {
    } else {
       &Apache::lonxml::error("Student viewing a graded bridgetask was shown a status of $status");
    }
    my $status_display=$status;
    $status_display=~s/^([a-z])/uc($1)/e;
    @Apache::scripttag::parser_env = @_;
    $result.='<div class="'.$status.'"><h4>'.$mandatory.
       ' Criteria</h4><p>';
    @Apache::scripttag::parser_env = @_;
    $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});
    $result.='</p><p class="grade">'.$status_display.'</p>';
    if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}) {
       $result.='<p class="comment">'.$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}.'</p>';
    }
    $result.='</div>';
     }      }
     $result.='</div>';  
  }   }
     }      }
  } elsif ($target eq 'webgrade') {   } elsif ($target eq 'webgrade') {
Line 1596  sub start_Instance { Line 1655  sub start_Instance {
     push(@Apache::bridgetask::instancelist,$id);      push(@Apache::bridgetask::instancelist,$id);
     $dimension{$id.'.optionalrequired'}=      $dimension{$id.'.optionalrequired'}=
  &Apache::lonxml::get_param('OptionalRequired',$parstack,$safeeval);   &Apache::lonxml::get_param('OptionalRequired',$parstack,$safeeval);
       my $disabled = &Apache::lonxml::get_param('Disabled',$parstack,$safeeval);
       if (lc($disabled) eq 'yes') {
    $dimension{$id.'.disabled'}='1';
       }
     return '';      return '';
 }  }
   

Removed from v.1.71  
changed lines
  Added in v.1.76


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