--- modules/gci/londocsgci.pm 2009/12/20 04:32:03 1.5
+++ modules/gci/londocsgci.pm 2009/12/21 15:51:29 1.6
@@ -2,7 +2,7 @@
# Custom Edit Course Routines for Assembly of Valid Concept Tests from
# Geoscience Concept Inventory.
#
-# $Id: londocsgci.pm,v 1.5 2009/12/20 04:32:03 gci Exp $
+# $Id: londocsgci.pm,v 1.6 2009/12/21 15:51:29 gci Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -44,10 +44,13 @@ use LONCAPA qw(:DEFAULT :match);
my $path;
my $version;
my $reqnum;
+my @mandcats;
+my @bincats;
my @categories;
my @allprobs;
my %probcat;
my %prereqs;
+my %revreqs;
my @defchosen;
my @chosen;
my @mandprobs;
@@ -90,10 +93,10 @@ sub setdefaults {
['63','64','65'],
['66','67','68','69','70','71']);
@optional = ('05','11','29','31');
-
- @categories=('M1','M2','M3','M4',
- 'A','B','C','D','E','F','G','H','I','J','K');
- %probcat =('01' => 'M1' ,'02' => 'M2' ,'37' => 'M3' ,'2004_73' => 'M4' ,
+ @mandcats = ('M1','M2','M3','M4');
+ @bincats = ('A','B','C','D','E','F','G','H','I','J','K');
+ @categories=(@mandcats,@bincats);
+ %probcat =('01' => 'M1' ,'02' => 'M2' ,'37' => 'M3' ,'2004_73' => 'M4' ,
'03' => 'A' ,'04' => 'A','05' => '' ,'06' => 'A' ,'07' => 'B' ,
'08' => 'B' ,'09' => 'B' ,'10' => 'C' ,'11' => '' ,'12' => 'C' ,
'13' => 'C' ,'14' => 'C' ,'15' => 'C' ,'16' => 'C' ,'17' => 'C' ,'18' => 'D' ,'19' => 'D' ,'20' => 'D' ,
@@ -106,12 +109,15 @@ sub setdefaults {
'60' => 'I' ,
'61' => 'I' ,'62' => 'I' ,'63' => 'J' ,'64' => 'J' ,'65' => 'J' ,'66' => 'K' ,'67' => 'K' ,'68' => 'K' ,'69' => 'K' ,'70' => 'K' ,
'71' => 'K');
- %mandatory=('01' => 1 ,'02' => 1,'37' => 1, '2004_73' => 1);
- @mandprobs = ('01','02','37','2004_73');
- %prereqs=('10' => '08', '57' => '52', '69' => '18');
- @defchosen=('01','02','03','07','12','18','26','32','37','38','47','54','63','66','2004_73');
- @development = ('100','101','102');
- %developmentitems = ('100' => 1, '101' => '1', '102' => '1');
+ %mandatory=('01' => 1 ,'02' => 1,'37' => 1, '2004_73' => 1);
+ @mandprobs = ('01','02','37','2004_73');
+ %prereqs=('10' => '08', '57' => '52', '69' => '18');
+ foreach my $item (keys(%prereqs)) {
+ $revreqs{$prereqs{$item}} = $item;
+ }
+ @defchosen=('01','02','03','07','12','18','26','32','37','38','47','54','63','66','2004_73');
+ @development = ('100','101','102');
+ %developmentitems = ('100' => 1, '101' => '1', '102' => '1');
}
sub checkvalid {
@@ -134,7 +140,11 @@ sub checkvalid {
foreach my $item (@chosen) {
if ($prereqs{$item}) {
unless ($chosenproblems{$prereqs{$item}}) {
- push(@errors,&mt('Problem [_1] requires problem [_2].',$item,$prereqs{$item}));
+ my $url = &fullurl($item);
+ my $title = &Apache::lonnet::metadata($url,'title');
+ my $prerequrl = &fullurl($prereqs{$item});
+ my $prereqtitle = &Apache::lonnet::metadata($prerequrl,'title');
+ push(@errors,&mt('[_1] requires [_2].',"'$title'","'$prereqtitle'"));
}
}
}
@@ -143,10 +153,17 @@ sub checkvalid {
sub fullurl {
my ($item)=@_;
- unless ($item=~/\_/) { $item='_'.$item; }
+ unless ($item=~/^\_/) { $item='_'.$item; }
return $path.'/'.$version.'/GCI'.$item.'.problem';
}
+sub item_from_url {
+ my ($url)=@_;
+ if ($url =~ m{\Q$path\E/\Q$version\E/GCI_([^.]+)\.problem$}) {
+ return $1;
+ }
+}
+
sub validcheck {
my ($r)=@_;
my @errors=&checkvalid();
@@ -207,7 +224,7 @@ sub listresources {
&Apache::lonhtmlcommon::start_pick_box().
&Apache::lonhtmlcommon::row_title(&mt('Open date')).
$startform.
- &Apache::lonhtmlcommon::row_closure().
+ &Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::row_title(&mt('Close date')).
$endform.
&Apache::lonhtmlcommon::end_pick_box().'
'.
@@ -300,7 +317,26 @@ sub display_questions {
} else {
$output .= '{$item}) { $output .= ' checked="checked"'; }
- $output .= 'onclick="javascript:countChecked('."'$catname'".');" />'.
+ $output .= ' onclick="countChecked('."'$catname'".');';
+ my $binname;
+ if ($prereqs{$item}) {
+ for (my $i=0; $i<@bincats; $i++) {
+ if ($bincats[$i] eq $probcat{$prereqs{$item}}) {
+ $binname = 'bin'.$i;
+ last;
+ }
+ }
+ $output .= 'checkPrereqs('."'dep','$item','$prereqs{$item}','$binname'".');';
+ } elsif ($revreqs{$item}) {
+ for (my $i=0; $i<@bincats; $i++) {
+ if ($bincats[$i] eq $probcat{$item}) {
+ $binname = 'bin'.$i;
+ last;
+ }
+ }
+ $output .= 'checkPrereqs('."'pre','$revreqs{$item}','$item','$binname'".');';
+ }
+ $output .= '" />'.
'