[LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 03 Mar 2005 18:57:36 -0000
This is a MIME encoded message
--matthew1109876256
Content-Type: text/plain
matthew Thu Mar 3 13:57:36 2005 EDT
Modified files:
/loncom/interface loncoursedata.pm
Log:
Removed the hideous blight that was &get_sequence_assessment_data.
Refactored &populate_weight_table to use navmaps instead of the afforemented
subroutine. Minor documentation changes.
--matthew1109876256
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20050303135736.txt"
Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.143 loncom/interface/loncoursedata.pm:1.144
--- loncom/interface/loncoursedata.pm:1.143 Mon Feb 28 19:07:20 2005
+++ loncom/interface/loncoursedata.pm Thu Mar 3 13:57:36 2005
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursedata.pm,v 1.143 2005/03/01 00:07:20 matthew Exp $
+# $Id: loncoursedata.pm,v 1.144 2005/03/03 18:57:36 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -66,151 +66,6 @@
=cut
-####################################################
-####################################################
-
-=pod
-
-=item &get_sequence_assessment_data()
-
-Use lonnavmaps to build a data structure describing the order and
-assessment contents of each sequence in the current course.
-
-The returned structure is a hash reference.
-
-{ title => 'title',
- symb => 'symb',
- src => '/s/o/u/r/c/e',
- type => (container|assessment),
- num_assess => 2, # only for container
- parts => [11,13,15], # only for assessment
- response_ids => [12,14,16], # only for assessment
- contents => [........] # only for container
-}
-
-$hash->{'contents'} is a reference to an array of hashes of the same structure.
-
-Also returned are array references to the sequences and assessments contained
-in the course.
-
-
-=cut
-
-####################################################
-####################################################
-sub get_sequence_assessment_data {
- my $fn=$ENV{'request.course.fn'};
- ##
- ## use navmaps
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (!defined($navmap)) {
- return 'Can not open Coursemap';
- }
- # We explicity grab the top level map because I am not sure we
- # are pulling it from the iterator.
- my $top_level_map = $navmap->getById('0.0');
- #
- my $iterator = $navmap->getIterator(undef, undef, undef, 1);
- my $curRes = $iterator->next(); # Top level sequence
- ##
- ## Prime the pump
- ##
- ## We are going to loop until we run out of sequences/pages to explore for
- ## resources. This means we have to start out with something to look
- ## at.
- my $title = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- my $symb = $top_level_map->symb();
- my $src = $top_level_map->src();
- my $randompick = $top_level_map->randompick();
- #
- my @Sequences;
- my @Assessments;
- my @Nested_Sequences = (); # Stack of sequences, keeps track of depth
- my $top = { title => $title,
- src => $src,
- symb => $symb,
- type => 'container',
- num_assess => 0,
- num_assess_parts => 0,
- contents => [],
- randompick => $randompick,
- };
- push (@Sequences,$top);
- push (@Nested_Sequences, $top);
- #
- # We need to keep track of which sequences contain homework problems
- #
- my $previous_too;
- my $previous;
- while (scalar(@Nested_Sequences)) {
- $previous_too = $previous;
- $previous = $curRes;
- $curRes = $iterator->next();
- my $currentmap = $Nested_Sequences[-1]; # Last one on the stack
- if ($curRes == $iterator->BEGIN_MAP()) {
- if (! ref($previous)) {
- $previous = $previous_too;
- }
- if (! ref($previous)) {
- next;
- }
- # get the map itself, instead of BEGIN_MAP
- $title = $previous->compTitle;
- $symb = $previous->symb();
- $src = $previous->src();
- $randompick = $previous->randompick();
- my $newmap = { title => $title,
- src => $src,
- symb => $symb,
- type => 'container',
- num_assess => 0,
- randompick => $randompick,
- contents => [],
- };
- push (@{$currentmap->{'contents'}},$newmap); # this is permanent
- push (@Sequences,$newmap);
- push (@Nested_Sequences, $newmap); # this is a stack
- next;
- }
- if ($curRes == $iterator->END_MAP()) {
- pop(@Nested_Sequences);
- next;
- }
- next if (! ref($curRes));
- next if (! $curRes->is_problem() && $curRes->src() !~ /\.survey$/);
- # Okay, from here on out we only deal with assessments
- $title = $curRes->compTitle();
- $symb = $curRes->symb();
- $src = $curRes->src();
- my $parts = $curRes->parts();
- my %partdata;
- foreach my $part (@$parts) {
- my @Responses = $curRes->responseType($part);
- my @Ids = $curRes->responseIds($part);
- $partdata{$part}->{'ResponseTypes'}= \@Responses;
- $partdata{$part}->{'ResponseIds'} = \@Ids;
- $partdata{$part}->{'Survey'} = $curRes->is_survey($part);
- # Count how many responses of each type there are in this part
- foreach (@Responses) {
- $partdata{$part}->{$_}++;
- }
- }
- my $assessment = { title => $title,
- src => $src,
- symb => $symb,
- type => 'assessment',
- parts => $parts,
- num_parts => scalar(@$parts),
- partdata => \%partdata,
- };
- push(@Assessments,$assessment);
- push(@{$currentmap->{'contents'}},$assessment);
- $currentmap->{'num_assess'}++;
- $currentmap->{'num_assess_parts'}+= scalar(@$parts);
- }
- return ($top,\@Sequences,\@Assessments);
-}
-
sub LoadDiscussion {
my ($courseID)=@_;
my %Discuss=();
@@ -777,6 +632,13 @@
=item &delete_caches()
+This routine drops all the tables associated with a course from the
+MySQL database.
+
+Input: course id (optional, determined by environment if omitted)
+
+Returns: nothing
+
=cut
################################################
@@ -1058,7 +920,6 @@
undef(%students_by_id);
}
-
################################################
################################################
@@ -2028,10 +1889,24 @@
}
#
&setup_table_names($courseid);
- my ($top,$sequences,$assessments) = get_sequence_assessment_data();
- if (! defined($top) || ! ref($top)) {
- # There has been an error, better report it
- &Apache::lonnet::logthis('top is undefined');
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (!defined($navmap)) {
+ &Apache::lonnet::logthis('loncoursedata::populate_weight_table:'.$/.
+ ' unable to get navmaps resource'.$/.
+ ' '.join(' ',(caller)));
+ return;
+ }
+ my @sequences = $navmap->retrieveResources(undef,
+ sub { shift->is_map(); },1,0,1);
+ my @resources;
+ foreach my $seq (@sequences) {
+ push(@resources,$navmap->retrieveResources($seq,
+ sub {shift->is_problem();},
+ 0,0,0));
+ }
+ if (! scalar(@resources)) {
+ &Apache::lonnet::logthis('loncoursedata::populate_weight_table:'.$/.
+ ' no resources returned for '.$courseid);
return;
}
# Since we use lonnet::EXT to retrieve problem weights,
@@ -2041,12 +1916,12 @@
my $request = 'INSERT IGNORE INTO '.$weight_table.
"(symb_id,part_id,weight) VALUES ";
my $weight;
- foreach my $res (@$assessments) {
- my $symb_id = &get_symb_id($res->{'symb'});
- foreach my $part (@{$res->{'parts'}}) {
+ foreach my $res (@resources) {
+ my $symb_id = &get_symb_id($res->symb);
+ foreach my $part (@{$res->parts}) {
my $part_id = &get_part_id($part);
$weight = &Apache::lonnet::EXT('resource.'.$part.'.weight',
- $res->{'symb'},
+ $res->symb,
undef,undef,undef);
if (!defined($weight) || ($weight eq '')) {
$weight=1;
--matthew1109876256--