Diff for /loncom/homework/structuretags.pm between versions 1.570 and 1.575

version 1.570, 2019/11/07 02:58:37 version 1.575, 2023/06/02 01:20:27
Line 62  use Apache::lonxml; Line 62  use Apache::lonxml;
 use Apache::londefdef;  use Apache::londefdef;
 use Apache::lonenc();  use Apache::lonenc();
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonnavmaps;
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
   use HTML::Entities();
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
     
Line 624  sub page_start { Line 626  sub page_start {
         my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser();          my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser();
         my ($path,$multiresp) =           my ($path,$multiresp) = 
             &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom);              &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom);
         if (($is_task) || ($needs_upload)) {          if ($env{'request.user_in_effect'}) {
               $form_tag_start .= ' onsubmit="preventDefault();"';
           } elsif (($is_task) || ($needs_upload)) {
             $form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"';              $form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"';
         }          }
  $form_tag_start.='>'."\n";   $form_tag_start.='>'."\n";
Line 1146  sub finalize_storage { Line 1150  sub finalize_storage {
  delete(@Apache::lonhomework::results{@remove});   delete(@Apache::lonhomework::results{@remove});
  my ($symb,$courseid,$domain,$name) =    my ($symb,$courseid,$domain,$name) = 
     &Apache::lonnet::whichuser($given_symb);      &Apache::lonnet::whichuser($given_symb);
         my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible,$dopassback);          my ($passback,$pbscope,$pbmap,$pbsymb,$pbtype,$crsdef,$ltinum,
               $ltiref,$total,$possible,$dopassback);
  if ($env{'request.state'} eq 'construct'    if ($env{'request.state'} eq 'construct' 
     || $symb eq ''      || $symb eq ''
     || $Apache::lonhomework::type eq 'practice') {      || $Apache::lonhomework::type eq 'practice') {
Line 1160  sub finalize_storage { Line 1165  sub finalize_storage {
             if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&              if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&
                 (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&                  (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&
                 (!defined($env{'form.grade_courseid'}))) {                  (!defined($env{'form.grade_courseid'}))) {
                 if ($env{'request.lti.login'}) {                  if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) {
                     my ($map)=&Apache::lonnet::decode_symb($symb);                      my ($map)=&Apache::lonnet::decode_symb($symb);
                     $map = &Apache::lonnet::clutter($map);                      $map = &Apache::lonnet::clutter($map);
                     ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref) =                       if ($env{'request.lti.login'}) {
                         &needs_lti_passback($courseid,$symb,$map);                          ($passback,$pbscope,$pbmap,$pbsymb,$ltinum,$ltiref) = 
                               &needs_lti_passback($courseid,$symb,$map);
                       } elsif ($env{'request.deeplink.login'}) {
                           ($passback,$pbscope,$pbmap,$pbsymb,$crsdef,$ltinum,$ltiref) =
                               &needs_linkprot_passback($courseid,$symb,$map);
                       }
                 }                  }
                 if ($Apache::lonhomework::history{'version'}) {                  if ($Apache::lonhomework::history{'version'}) {
                     $laststore = $Apache::lonhomework::history{'version'}.'='.                      $laststore = $Apache::lonhomework::history{'version'}.'='.
Line 1261  sub finalize_storage { Line 1271  sub finalize_storage {
                     }                      }
                 }                  }
             }              }
             if (($dopassback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) {              if (($dopassback) && ($pbscope eq 'resource') && ($pbsymb eq $symb)) {
                 $total = 0;                  $total = 0;
                 $possible = 0;                  $possible = 0;
                 my $navmap = Apache::lonnavmaps::navmap->new();                  my $navmap = Apache::lonnavmaps::navmap->new();
Line 1302  sub finalize_storage { Line 1312  sub finalize_storage {
             &store_aggregates($symb,$courseid);              &store_aggregates($symb,$courseid);
             if ($dopassback) {              if ($dopassback) {
                 my $scoreformat = 'decimal';                  my $scoreformat = 'decimal';
                 if (ref($ltiref) eq 'HASH') {                  if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) {
                     if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {                      if (ref($ltiref) eq 'HASH') {
                         $scoreformat = $1;                          if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
                               $scoreformat = $1;
                           }
                     }                      }
                 }                  }
                   my ($pbid,$pburl,$pbtype);
                   if ($env{'request.lti.login'}) {
                       $pbid = $env{'request.lti.passbackid'};
                       $pburl = $env{'request.lti.passbackurl'};
                       $pbtype = 'lti';
                   } elsif ($env{'request.deeplink.login'}) {
                       $pbid = $env{'request.linkprotpbid'};
                       $pburl = $env{'request.linkprotpburl'};
                       $pbtype = 'linkprot';
                   }
                 my $ltigrade = {                  my $ltigrade = {
                                    'ltinum'   => $ltinum,
                                  'lti'      => $ltiref,                                   'lti'      => $ltiref,
                                    'crsdef'   => $crsdef,
                                  'cid'      => $courseid,                                   'cid'      => $courseid,
                                  'uname'    => $env{'user.name'},                                   'uname'    => $env{'user.name'},
                                  'udom'     => $env{'user.domain'},                                   'udom'     => $env{'user.domain'},
                                  'pbid'     => $env{'request.lti.passbackid'},                                   'pbid'     => $pbid,
                                  'pburl'    => $env{'request.lti.passbackurl'},                                   'pburl'    => $pburl,
                                  'scope'    => $ltiscope,                                   'pbtype'   => $pbtype,
                                  'ltimap'   => $ltimap,                                   'scope'    => $pbscope,
                                  'ltisymb'  => $ltisymb,                                   'pbmap'    => $pbmap,
                                    'pbsymb'   => $pbsymb,
                                  'format'   => $scoreformat,                                   'format'   => $scoreformat,
                                };                                 };
                 if ($ltiscope eq 'resource') {                  if ($pbscope eq 'resource') {
                     $ltigrade->{'total'} = $total;                      $ltigrade->{'total'} = $total;
                     $ltigrade->{'possible'} = $possible;                      $ltigrade->{'possible'} = $possible;
                 }                  }
Line 1340  sub needs_lti_passback { Line 1365  sub needs_lti_passback {
             my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');              my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
             if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {              if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
                 if ($lti{$env{'request.lti.login'}}{'passback'}) {                  if ($lti{$env{'request.lti.login'}}{'passback'}) {
                       my $itemnum = $env{'request.lti.login'};
                     my ($ltiscope,$ltiuri,$ltisymb) =                      my ($ltiscope,$ltiuri,$ltisymb) =
                         &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},                          &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},
                                                                $cdom,$cnum,1);                                                                 $cdom,$cnum,1);
Line 1358  sub needs_lti_passback { Line 1384  sub needs_lti_passback {
                             $passback = 1;                              $passback = 1;
                         }                          }
                     }                      }
                     return ($passback,$ltiscope,$ltimap,$ltisymb,$lti{$env{'request.lti.login'}});                      return ($passback,$ltiscope,$ltimap,$ltisymb,$itemnum,$lti{$itemnum});
                 }                  }
             }              }
         }          }
Line 1366  sub needs_lti_passback { Line 1392  sub needs_lti_passback {
     return;      return;
 }  }
   
   sub needs_linkprot_passback {
       my ($courseid,$symb,$map) = @_;
       if (($env{'request.linkprotpbid'}) && ($env{'request.linkprotpburl'})) {
           if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) {
               my ($cdom,$cnum) = ($1,$2);
               my ($deeplink_symb,$deeplink_map,$deeplink,$passback);
               $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom);
               if ($deeplink_symb) {
                   if ($deeplink_symb =~ /\.(page|sequence)$/) {
                       $deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[2]);
                       my $navmap = Apache::lonnavmaps::navmap->new();
                       if (ref($navmap)) {
                           $deeplink = $navmap->get_mapparam(undef,$deeplink_map,'0.deeplink');
                       }
                   } else {
                       $deeplink = &Apache::lonnet::EXT('resource.0.deeplink',$deeplink_symb);
                       $deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[0]);
                   }
                   if (($deeplink ne '') && ($env{'request.linkprot'} ne '')) {
                       my ($itemid,$tinyurl) = split(/:/,$env{'request.linkprot'});
                       if ($itemid =~ /^(\d+)(c|d)$/) {
                           my ($itemnum,$itemtype) = ($1,$2);
                           my ($crsdef,$lti_in_use);
                           if ($itemtype eq 'c') {
                               $crsdef = 1;
                               my %crslti = &Apache::lonnet::get_course_lti($cnum,$cdom,'provider');
                               $lti_in_use = $crslti{$itemnum};
                           } else {
                               my %domlti = &Apache::lonnet::get_domain_lti($cdom,'linkprot');
                               $lti_in_use = $domlti{$itemnum};
                           }
                           my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink);
                           my $passback;
                           if ($scope eq 'resource') {
                               if ($deeplink_symb eq $symb) {
                                   $passback = 1;
                               }
                           } elsif ($scope eq 'map') {
                               if (&Apache::lonnet::clutter($deeplink_map) eq $map) {
                                   $passback = 1;
                               }
                           } elsif ($scope eq 'recurse') {
   #FIXME check if $deeplink_map contains $map
                               $passback = 1;
                           }
                           return ($passback,$scope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use);
                       }
                   }
               }
           }
       }
   }
   
 =pod  =pod
   
 =item check_correctness_changes()  =item check_correctness_changes()
Line 1646  sub firstaccess_msg { Line 1725  sub firstaccess_msg {
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     my $buttontext = &mt('Show Resource');      my $buttontext = &mt('Show Resource');
     my $timertext = &mt('Start Timer?');      my $timertext = &mt('Start Timer?');
       my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb),'\'"<>&');
     $result .= (<<ENDCHECKOUT);      $result .= (<<ENDCHECKOUT);
 <form name="markaccess" method="post" action="$uri">  <form name="markaccess" method="post" action="$uri">
 <input type="hidden" name="markaccess" value="yes" />  <input type="hidden" name="markaccess" value="yes" />
   <input type="hidden" name="symb" value="$shownsymb" />
 <input type="button" name="accessbutton" value="$buttontext" onclick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />  <input type="button" name="accessbutton" value="$buttontext" onclick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />
 </form>  </form>
 ENDCHECKOUT  ENDCHECKOUT
Line 1842  sub start_problem { Line 1923  sub start_problem {
         }          }
     }      }
   
       if (($target eq 'web') && ($env{'request.user_in_effect'})) {
           &Apache::lonxml::get_all_text("/problem",$parser,$style);
           return $result;
       }
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
         $target eq 'tex') {          $target eq 'tex') {
   
Line 2126  sub end_problem { Line 2212  sub end_problem {
     }      }
  }   }
  $result =~ s/INSERTTEXFRONTMATTERHERE/$frontmatter/;   $result =~ s/INSERTTEXFRONTMATTERHERE/$frontmatter/;
       } elsif ($target eq 'web') {
           if ($env{'request.user_in_effect'}) {
               &reset_problem_globals('problem');
               $result .= &Apache::lonhtmlcommon::set_compute_end_time();
               return $result;
           }
     }      }
   
     my $status=$Apache::inputtags::status['-1'];      my $status=$Apache::inputtags::status['-1'];
Line 3104  sub end_part { Line 3196  sub end_part {
     $gradestatus='';      $gradestatus='';
  }   }
  $result.=$gradestatus;   $result.=$gradestatus;
  if ($$tagstack[-2] eq 'td' and $target eq 'tex') {$result.='\end{minipage}';}    if ($$tagstack[-2] eq 'td' and $target eq 'tex') {
               if (not $env{'form.problem_split'}=~/yes/) {
                   $result.='\end{minipage}';
               }
           }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {

Removed from v.1.570  
changed lines
  Added in v.1.575


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