[LON-CAPA-cvs] cvs: loncom /homework grades.pm

raeburn raeburn at source.lon-capa.org
Sat Dec 14 12:47:39 EST 2024


raeburn		Sat Dec 14 17:47:39 2024 EDT

  Modified files:              
    /loncom/homework	grades.pm 
  Log:
  - Get tinyURL <=> symb mapping, from course's nohist_linkprot_passback.db, 
    written when a particular deep-link is first followed, in preference to
    current record in tiny.db (which cloning can change). 
  
  
-------------- next part --------------
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.805 loncom/homework/grades.pm:1.806
--- loncom/homework/grades.pm:1.805	Fri Dec 13 05:04:49 2024
+++ loncom/homework/grades.pm	Sat Dec 14 17:47:39 2024
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.805 2024/12/13 05:04:49 raeburn Exp $
+# $Id: grades.pm,v 1.806 2024/12/14 17:47:39 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1263,18 +1263,18 @@
     my $cdom = $env{"course.$env{'request.course.id'}.domain"};
     my $cnum = $env{"course.$env{'request.course.id'}.num"};
     my $crstype = &Apache::loncommon::course_type();
-    my ($launcher,$appname,$setter,$linkuri,$linkprotector,$scope,$chosen);
+    my ($launchsymb,$appname,$setter,$linkuri,$linkprotector,$scope,$chosen);
     if ($env{'form.passback'} ne '') {
         $chosen = &unescape($env{'form.passback'});
         ($linkuri,$linkprotector,$scope) = split("\0",$chosen);
-        ($launcher,$appname,$setter) = &get_passback_launcher($cdom,$cnum,$chosen);
+        ($launchsymb,$appname,$setter) = &get_passback_launcher($cdom,$cnum,$chosen);
     }
-    if ($launcher ne '') {
-        $request->print(&launcher_info_box($launcher,$appname,$setter,$linkuri,$scope));
+    if ($launchsymb ne '') {
+        $request->print(&launcher_info_box($launchsymb,$appname,$setter,$linkuri,$scope));
     }
     my $error;
     if ($perm{'mgr'}) {
-        if ($launcher ne '') {
+        if ($launchsymb ne '') {
             my @poss_students = &Apache::loncommon::get_env_multiple('form.stuinfo');
             if (@poss_students) {
                 my %possibles;
@@ -1312,12 +1312,11 @@
                             if ($lti_in_use->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
                                 $scoretype = $1;
                             }
-                            my $pbsymb = &Apache::loncommon::symb_from_tinyurl($linkuri,$cnum,$cdom);
                             my $pbmap;
-                            if ($pbsymb =~ /\.(page|sequence)$/) {
-                                $pbmap = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($pbsymb))[2]);
+                            if ($launchsymb =~ /\.(page|sequence)$/) {
+                                $pbmap = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($launchsymb))[2]);
                             } else {
-                                $pbmap = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($pbsymb))[0]);
+                                $pbmap = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($launchsymb))[0]);
                             }
                             $pbmap = &Apache::lonnet::clutter($pbmap);
                             my $pbscope;
@@ -1332,13 +1331,13 @@
                             my $numstudents = scalar(keys(%tosend));
                             my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($request,$numstudents);
                             my $outcome = &Apache::loncommon::start_data_table().
-                                         &Apache::loncommon::start_data_table_header_row();
+                                          &Apache::loncommon::start_data_table_header_row();
                             my $loop = 0;
                             while ($loop < 2) {
                                 $outcome .= '<th>'.&mt('No.').'</th>'.
-                                           '<th>'.&nameUserString('header').' '.&mt('Section/Group').'</th>'.
-                                           '<th>'.&mt('Score').'</th>';
-                                 $loop++;
+                                            '<th>'.&nameUserString('header').' '.&mt('Section/Group').'</th>'.
+                                            '<th>'.&mt('Score').'</th>';
+                                $loop++;
                             }
                             $outcome .= &Apache::loncommon::end_data_table_header_row()."\n";
                             my $ctr=0;
@@ -1365,14 +1364,14 @@
                                     $possible = 0;
                                     my $navmap = Apache::lonnavmaps::navmap->new($uname,$udom);
                                     if (ref($navmap)) {
-                                        my $res = $navmap->getBySymb($pbsymb);
+                                        my $res = $navmap->getBySymb($launchsymb);
                                         if (ref($res)) {
                                             my $partlist = $res->parts();
                                             if (ref($partlist) eq 'ARRAY') {
-                                                my %record = &Apache::lonnet::restore($pbsymb,$env{'request.course.id'},$udom,$uname);
+                                                my %record = &Apache::lonnet::restore($launchsymb,$env{'request.course.id'},$udom,$uname);
                                                 foreach my $part (@{$partlist}) {
                                                     next if ($record{"resource.$part.solved"} =~/^excused/);
-                                                    my $weight = &Apache::lonnet::EXT("resource.$part.weight",$pbsymb,$udom,$uname,$usec);
+                                                    my $weight = &Apache::lonnet::EXT("resource.$part.weight",$launchsymb,$udom,$uname,$usec);
                                                     $possible += $weight;
                                                     if (($record{'version'}) && (exists($record{"resource.$part.awarded"}))) {
                                                         my $awarded = $record{"resource.$part.awarded"};
@@ -1386,7 +1385,7 @@
                                     }
                                 } elsif (($pbscope eq 'map') || ($pbscope eq 'nonrec')) {
                                     ($total,$possible) =
-                                        &Apache::lonhomework::get_lti_score($uname,$udom,$pbmap,$pbscope);
+                                        &Apache::lonhomework::get_lti_score($uname,$udom,$usec,$pbmap,$pbscope);
                                 }
                                 if (($id ne '') && ($url ne '') && ($possible)) {
                                     my ($sent,$score,$code,$result) =
@@ -1408,7 +1407,7 @@
                                                  'id' => $id,
                                                  'clientip' => $pb{'clientip'},
                                                  'whodoneit' => $env{'user.name'}.':'.$env{'user.domain'},
-                                                };
+                                            };
                                             my $value='';
                                             foreach my $key (keys(%{$store})) {
                                                 $value.=&escape($key).'='.&Apache::lonnet::freeze_escape($store->{$key}).'&';
@@ -1420,12 +1419,11 @@
                                             if ($ctr%2 ==1) {
                                                 $outcome .= &Apache::loncommon::start_data_table_row();
                                             }
-                                            my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()];
                                             my $group = $classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()];
                                             $outcome .= '<td align="right">'.$ctr.' </td>'.
-                                                       '<td>'.&nameUserString(undef,$$fullname{$student},$uname,$udom).
-                                                       ' '.$section.($group ne '' ?'/'.$group:'').'</td>'.
-                                                       '<td>'.$score.'</td>'."\n";
+                                                        '<td>'.&nameUserString(undef,$$fullname{$student},$uname,$udom).
+                                                        ' '.$usec.($group ne '' ?'/'.$group:'').'</td>'.
+                                                        '<td>'.$score.'</td>'."\n";
                                             if ($ctr%2 ==0) {
                                                 $outcome .= &Apache::loncommon::end_data_table_row()."\n";
                                             }
@@ -1457,7 +1455,7 @@
                                                                    'pbtype'   => $pb{'type'},
                                                                    'pbscope'  => $pbscope,
                                                                    'pbmap'    => $pbmap,
-                                                                   'pbsymb'   => $pbsymb,
+                                                                   'pbsymb'   => $launchsymb,
                                                                    'format'   => $scoretype,
                                                                    'scope'    => $scope,
                                                                    'clientip' => $pb{'clientip'},
@@ -1579,31 +1577,27 @@
             }
         }
     }
-    if ($linkuri =~ m{^\Q/tiny/$cdom/\E(\w+)$}) {
-        my $key = $1;
-        my $tinyurl;
-        my ($result,$cached)=&Apache::lonnet::is_cached_new('tiny',$cdom."\0".$key);
-        if (defined($cached)) {
-            $tinyurl = $result;
-        } else {
-            my $configuname = &Apache::lonnet::get_domainconfiguser($cdom);
-            my %currtiny = &Apache::lonnet::get('tiny',[$key],$cdom,$configuname);
-            if ($currtiny{$key} ne '') {
-                $tinyurl = $currtiny{$key};
-                &Apache::lonnet::do_cache_new('tiny',$cdom."\0".$key,$currtiny{$key},600);
-            }
-        }
-        if ($tinyurl) {
-            my ($crsnum,$launchsymb) = split(/\&/,$tinyurl);
-            if ($crsnum eq $cnum) {
-                my %passback = &Apache::lonnet::get('nohist_linkprot_passback',[$launchsymb],$cdom,$cnum);
-                if (ref($passback{$launchsymb}) eq 'HASH') {
-                    if (exists($passback{$launchsymb}{$chosen})) {
-                        return ($launchsymb,$appname,$setter);
-                    }
+    my $launchsymb = &Apache::loncommon::symb_from_tinyurl($linkuri,$cnum,$cdom);
+    if ($launchsymb eq '') {
+        my %passback = &Apache::lonnet::dump('nohist_linkprot_passback',$cdom,$cnum);
+        foreach my $poss_symb (keys(%passback)) {
+            if (ref($passback{$poss_symb}) eq 'HASH') {
+                if (exists($passback{$poss_symb}{$chosen})) {
+                    $launchsymb = $poss_symb;
+                    last;
                 }
             }
         }
+        if ($launchsymb ne '') {
+            return ($launchsymb,$appname,$setter);
+        }
+    } else {
+        my %passback = &Apache::lonnet::get('nohist_linkprot_passback',[$launchsymb],$cdom,$cnum);
+        if (ref($passback{$launchsymb}) eq 'HASH') {
+            if (exists($passback{$launchsymb}{$chosen})) {
+                return ($launchsymb,$appname,$setter);
+            }
+        }
     }
     return ();
 }
@@ -1683,7 +1677,7 @@
             }
             if (ref($passback{$symb}) eq 'HASH') {
                 foreach my $launcher (keys(%{$passback{$symb}})) {
-                    $needpb{$launcher} = 1;
+                    $needpb{$launcher} = $symb;
                 }
             }
         }
@@ -1700,7 +1694,7 @@
                         }
                         if (ref($passback{$mapsymb}) eq 'HASH') {
                             foreach my $launcher (keys(%{$passback{$mapsymb}})) {
-                                $needpb{$launcher} = 1;
+                                $needpb{$launcher} = $mapsymb;
                             }
                         }
                     }
@@ -1717,7 +1711,7 @@
                                 foreach my $launcher (keys(%{$passback{$key}})) {
                                     my ($linkuri,$linkprotector,$scope) = split("\0",$launcher);
                                     next unless ($scope eq 'rec');
-                                    $needpb{$launcher} = 1;
+                                    $needpb{$launcher} = $key;
                                 }
                             }
                         }
@@ -1782,7 +1776,7 @@
                             if ($pb{'lti_in_use'}->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
                                 $pb{'scoretype'} = $1;
                             }
-                            $pb{'symb'} = &Apache::loncommon::symb_from_tinyurl($pb{'linkuri'},$cnum,$cdom);
+                            $pb{'symb'} = $needpb->{$launcher};
                             if ($pb{'symb'} =~ /\.(page|sequence)$/) {
                                 $pb{'map'} = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($pb{'symb'}))[2]);
                             } else {
@@ -1854,7 +1848,7 @@
                         $possible = $possible_by_symb{$pb{'symb'}};
                     } elsif (($pb{'pbscope'} eq 'map') || ($pb{'pbscope'} eq 'nonrec')) {
                         ($total,$possible) =
-                            &Apache::lonhomework::get_lti_score($uname,$udom,$pb{'map'},$pb{'pbscope'},
+                            &Apache::lonhomework::get_lti_score($uname,$udom,$usec,$pb{'map'},$pb{'pbscope'},
                                                                 \%total_by_symb,\%possible_by_symb);
                     }
                     if (!$possible) {
@@ -7008,13 +7002,14 @@
             map { $parentmapsymbs{$_} = 1; } @recurseup;
         }
         my %passback = &Apache::lonnet::get('nohist_linkprot_passback',\@allsymbs,$cdom,$cnum);
-        my (%uniqsymbs,$use_symbs_in_map);
+        my (%uniqsymbs,$use_symbs_in_map,%launch_to_symb);
         if (keys(%passback)) {
             foreach my $possible (keys(%passback)) {
                 if (ref($passback{$possible}) eq 'HASH') {
                     if ($possible eq $mapsymb) {
                         foreach my $launcher (keys(%{$passback{$possible}})) {
                             $possmappb{$launcher} = 1;
+                            $launch_to_symb{$launcher} = $possible;
                         }
                         $use_symbs_in_map = 1;
                     } elsif (exists($parentmapsymbs{$possible})) {
@@ -7023,11 +7018,13 @@
                             if ($scope eq 'rec') {
                                 $possmappb{$launcher} = 1;
                                 $use_symbs_in_map = 1;
+                                $launch_to_symb{$launcher} = $possible;
                             }
                         }
                     } elsif (grep(/^\Q$possible$\E$/, at updates)) {
                         foreach my $launcher (keys(%{$passback{$possible}})) {
                             $possrespb{$launcher} = 1;
+                            $launch_to_symb{$launcher} = $possible;
                         }
                         $uniqsymbs{$possible} = 1;
                     }
@@ -7049,7 +7046,9 @@
             my %pbids = &Apache::lonnet::get('nohist_'.$cdom.'_'.$cnum.'_linkprot_pb',\@posslaunchers,$udom,$uname);
             foreach my $key (keys(%pbids)) {
                 if (ref($pbids{$key}) eq 'ARRAY') {
-                    $needpb{$key} = 1;
+                    if ($launch_to_symb{$key}) {
+                        $needpb{$key} = $launch_to_symb{$key};
+                    }
                 }
             }
             my @symbs = keys(%uniqsymbs);


More information about the LON-CAPA-cvs mailing list