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

raeburn raeburn at source.lon-capa.org
Sun Nov 8 17:23:52 EST 2020


raeburn		Sun Nov  8 22:23:52 2020 EDT

  Modified files:              
    /loncom/homework	grades.pm 
  Log:
  - Bug 6943
    Load CSS files for resources being displayed in Grading interface, i.e.,
    when "View Problem Text" is checked for "one student" or "all students".
  
  
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.776 loncom/homework/grades.pm:1.777
--- loncom/homework/grades.pm:1.776	Wed Sep  9 23:01:12 2020
+++ loncom/homework/grades.pm	Sun Nov  8 22:23:52 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.776 2020/09/09 23:01:12 raeburn Exp $
+# $Id: grades.pm,v 1.777 2020/11/08 22:23:52 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -11305,7 +11305,7 @@
 }
 
 sub startpage {
-    my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$js,$onload,$divforres) = @_;
+    my ($r,$symb,$crumbs,$onlyfolderflag,$nodisplayflag,$stuvcurrent,$stuvdisp,$nomenu,$head_extra,$onload,$divforres) = @_;
     my %args;
     if ($onload) {
          my %loaditems = (
@@ -11315,11 +11315,11 @@
     }
     if ($nomenu) {
         $args{'only_body'} = 1; 
-        $r->print(&Apache::loncommon::start_page("Student's Version",$js,\%args));
+        $r->print(&Apache::loncommon::start_page("Student's Version",$head_extra,\%args));
     } else {
         unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"});
         $args{'bread_crumbs'} = $crumbs;
-        $r->print(&Apache::loncommon::start_page('Grading',$js,\%args));
+        $r->print(&Apache::loncommon::start_page('Grading',$head_extra,\%args));
         if ($env{'request.course.id'}) {
             &Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading'));
         }
@@ -11337,6 +11337,61 @@
     $r->print('<input type="submit" value="'.&mt('Next').' →" /></form>');
 }
 
+sub css_links {
+    my ($currsymb,$level) = @_;
+    my ($links, at symbs,%cssrefs,%httpref);
+    if ($level eq 'map') {
+        my $navmap = Apache::lonnavmaps::navmap->new();
+        if (ref($navmap)) {
+            my ($map,undef,$url)=&Apache::lonnet::decode_symb($currsymb);
+            my @resources = $navmap->retrieveResources($map,sub { $_[0]->is_problem() },0,0);
+            foreach my $res (@resources) {
+                if (ref($res)) {
+                    if ($res->symb()) {
+                        push(@symbs,$res->symb());
+                    }
+                }
+            }
+        }
+    } else {
+        @symbs = ($currsymb);
+    }
+    foreach my $symb (@symbs) {
+        my $css_href = &Apache::lonnet::EXT('resource.0.cssfile',$symb);
+        if ($css_href =~ /\S/) {
+            unless ($css_href =~ m{https?://}) {
+                my ($map,undef,$url)=&Apache::lonnet::decode_symb($symb);
+                my $proburl =  &Apache::lonnet::clutter($url);
+                my ($probdir) = ($proburl =~ m{(.+)/[^/]+$});
+                unless ($css_href =~ m{^/}) {
+                    $css_href = &Apache::lonnet::hreflocation($probdir,$css_href);
+                }
+                if ($css_href =~ m{^/(res|uploaded)/}) {
+                    unless (($httpref{'httpref.'.$css_href}) |
+                            (&Apache::lonnet::is_on_map($css_href))) {
+                        my $thisurl = $proburl;
+                        if ($env{'httpref.'.$proburl}) {
+                            $thisurl = $env{'httpref.'.$proburl};
+                        }
+                        $httpref{'httpref.'.$css_href} = $thisurl;
+                    }
+                }
+            }
+            $cssrefs{$css_href} = 1;
+        }
+    }
+    if (keys(%httpref)) {
+        &Apache::lonnet::appenv(\%httpref);
+    }
+    if (keys(%cssrefs)) {
+        foreach my $css_href (keys(%cssrefs)) {
+            next unless ($css_href =~ m{^(/res/|/uploaded/|https?://)});
+            $links .= '<link rel="stylesheet" type="text/css" href="'.$css_href.'" />'."\n";
+        }
+    }
+    return $links;
+}
+
 sub handler {
     my $request=$_[0];
     &reset_caches();
@@ -11402,7 +11457,10 @@
             } else {
                 $divforres = 1;
             }
-            &startpage($request,$symb,[{href=>"", text=>"Student Submissions"}],undef,undef,$stuvcurrent,$stuvdisp,undef,$js,$onload,$divforres);
+            my $csslinks = &css_links($symb);
+            my $head_extra = $js."\n".$csslinks;
+            &startpage($request,$symb,[{href=>"", text=>"Student Submissions"}],undef,undef,
+                       $stuvcurrent,$stuvdisp,undef,$head_extra,$onload,$divforres);
             if ($versionform) {
                 if ($divforres) {
                     $request->print('<div style="padding:0;clear:both;margin:0;border:0"></div>');
@@ -11415,7 +11473,10 @@
                 &choose_task_version_form($symb,$env{'form.student'},
                                           $env{'form.userdom'},
                                           $env{'form.inhibitmenu'});
-            &startpage($request,$symb,[{href=>"", text=>"Previous Student Version"}],undef,undef,$stuvcurrent,$stuvdisp,$env{'form.inhibitmenu'},$js);
+            my $csslinks = &css_links($symb);
+            my $head_extra = $js."\n".$csslinks;
+            &startpage($request,$symb,[{href=>"", text=>"Previous Student Version"}],undef,undef,
+                       $stuvcurrent,$stuvdisp,$env{'form.inhibitmenu'},$head_extra);
             if ($versionform) {
                 $request->print($versionform);
             }
@@ -11426,10 +11487,11 @@
                                        {href=>'',text=>'Select student'}],1,1);
 	    &pickStudentPage($request,$symb);
 	} elsif ($command eq 'displayPage' && $perm{'vgr'}) {
+            my $csslinks = &css_links($symb,'map');
             &startpage($request,$symb,
                                       [{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'},
                                        {href=>'',text=>'Select student'},
-                                       {href=>'',text=>'Grade student'}],1,1);
+                                       {href=>'',text=>'Grade student'}],1,1,undef,undef,undef,$csslinks);
 	    &displayPage($request,$symb);
 	} elsif ($command eq 'gradeByPage' && $perm{'mgr'}) {
             &startpage($request,$symb,[{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'},
@@ -11438,8 +11500,9 @@
                                        {href=>'',text=>'Store grades'}],1,1);
 	    &updateGradeByPage($request,$symb);
 	} elsif ($command eq 'processGroup' && $perm{'vgr'}) {
+            my $csslinks = &css_links($symb);
             &startpage($request,$symb,[{href=>'',text=>'...'},
-                                       {href=>'',text=>'Modify grades'}],undef,undef,undef,undef,undef,undef,undef,1);
+                                       {href=>'',text=>'Modify grades'}],undef,undef,undef,undef,undef,$csslinks,undef,1);
 	    &processGroup($request,$symb);
 	} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) {
             &startpage($request,$symb);




More information about the LON-CAPA-cvs mailing list