[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm lonstathelpers.pm lonsubmissiontimeanalysis.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 20 Jan 2004 15:51:06 -0000
This is a MIME encoded message
--matthew1074613866
Content-Type: text/plain
matthew Tue Jan 20 10:51:06 2004 EDT
Modified files:
/loncom/interface/statistics lonproblemanalysis.pm
lonstathelpers.pm
lonsubmissiontimeanalysis.pm
Log:
Moved &ProblemSelector from lonproblemanalysis and lonsubmissiontimeanalysis
to lonstathelpers.pm. Reworked &ProblemSelector to work with either problem
parts or responses. Added previous and next buttons to submission time
analysis page.
--matthew1074613866
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040120105106.txt"
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.60 loncom/interface/statistics/lonproblemanalysis.pm:1.61
--- loncom/interface/statistics/lonproblemanalysis.pm:1.60 Mon Jan 19 16:31:08 2004
+++ loncom/interface/statistics/lonproblemanalysis.pm Tue Jan 20 10:51:06 2004
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.60 2004/01/19 21:31:08 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.61 2004/01/20 15:51:06 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -115,9 +115,14 @@
$r->rflush();
#
# Determine which problem we are to analyze
- my $current_problem = &get_target_from_id($ENV{'form.problemchoice'});
+ my $current_problem = &Apache::lonstathelpers::get_target_from_id
+ ($ENV{'form.problemchoice'});
#
- my ($prev,$curr,$next) = &get_prev_curr_next($current_problem);
+ my ($prev,$curr,$next) =
+ &Apache::lonstathelpers::get_prev_curr_next($current_problem,
+ '(option|radiobutton)',
+ 'response',
+ );
if (exists($ENV{'form.PrevProblemAnalysis'}) && defined($prev)) {
$current_problem = $prev;
} elsif (exists($ENV{'form.NextProblemAnalysis'}) && defined($next)) {
@@ -127,7 +132,8 @@
}
#
# Store the current problem choice and send it out in the form
- $ENV{'form.problemchoice'} = &make_target_id($current_problem);
+ $ENV{'form.problemchoice'} =
+ &Apache::lonstathelpers::make_target_id($current_problem);
$r->print('<input type="hidden" name="problemchoice" value="'.
$ENV{'form.problemchoice'}.'" />');
#
@@ -161,7 +167,8 @@
&mt('Analyze Problem').'" />');
$r->print(' 'x5);
$r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
- $r->print(&ProblemSelector());
+ $r->print(&Apache::lonstathelpers::ProblemSelector
+ ('(option|radiobutton)'));
}
}
@@ -1475,180 +1482,6 @@
$Str .= '</tr>'."\n";
$Str .= '</table>'."\n";
return $Str;
-}
-
-sub ProblemSelector {
- my $Str;
- $Str = "\n<table>\n";
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- next if ($seq->{'num_assess'}<1);
- my $seq_str = '';
- foreach my $res (@{$seq->{'contents'}}) {
- next if ($res->{'type'} ne 'assessment');
- foreach my $part (@{$res->{'parts'}}) {
- my $partdata = $res->{'partdata'}->{$part};
-# &Apache::lonnet::logthis('----------------');
-# while (my ($k,$v)=each(%$partdata)) {
-# if (ref($v) eq 'ARRAY') {
-# &Apache::lonnet::logthis($k.' = '.join(',',@$v));
-# } else {
-# &Apache::lonnet::logthis($k.' = '.$v);
-# }
-# }
- if ((! exists($partdata->{'option'}) ||
- $partdata->{'option'} == 0 ) &&
- (! exists($partdata->{'radiobutton'}) ||
- $partdata->{'radiobutton'} == 0)) {
- next;
- }
- for (my $i=0;$i<scalar(@{$partdata->{'ResponseTypes'}});$i++){
- my $respid = $partdata->{'ResponseIds'}->[$i];
- my $resptype = $partdata->{'ResponseTypes'}->[$i];
-# if ($resptype eq 'option' ){
- if ($resptype eq 'option' || $resptype eq 'radiobutton') {
- my $value = &make_target_id({symb=>$res->{'symb'},
- part=>$part,
- respid=>$respid,
- resptype=>$resptype});
- my $checked = '';
- if ($ENV{'form.problemchoice'} eq $value) {
- $checked = 'checked ';
- }
- my $title = $res->{'title'};
- if (! defined($title) || $title eq '') {
- ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
- }
- $seq_str .= '<tr><td>'.
- '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
- '</td><td>'.
- $resptype.'</td><td>'.
- '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
-# '<a href="'.$res->{'src'}.'">'.$resptype.' '.$res->{'title'}.'</a> ';
- if ($partdata->{'option'} > 1) {
- $seq_str .= &mt('response').' '.$respid;
- }
- $seq_str .= "</td></tr>\n";
- }
- }
- }
- }
- if ($seq_str ne '') {
- $Str .= '<tr><td> </td><td colspan="2"><b>'.$seq->{'title'}.'</b></td>'.
- "</tr>\n".$seq_str;
- }
- }
- $Str .= "</table>\n";
- return $Str;
-}
-
-#########################################################
-#########################################################
-##
-## Misc functions
-##
-#########################################################
-#########################################################
-sub get_problem_symb {
- my $problemstring = shift();
- my ($symb,$partid,$respid,$resptype) = split(':',$problemstring);
- return ({ symb => $symb,
- part => $partid,
- respid => $respid,
- type => $resptype } );
-}
-
-sub get_resource_from_symb {
- my ($symb) = @_;
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- foreach my $res (@{$seq->{'contents'}}) {
- if ($res->{'symb'} eq $symb) {
- return $res;
- }
- }
- }
- return undef;
-}
-
-sub get_prev_curr_next {
- my ($target) = @_;
- #
- # Build an array with the data we need to search through
- my @Resource;
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- foreach my $res (@{$seq->{'contents'}}) {
- next if ($res->{'type'} ne 'assessment');
- foreach my $part (@{$res->{'parts'}}) {
- my $partdata = $res->{'partdata'}->{$part};
- for (my $i=0;$i<scalar(@{$partdata->{'ResponseTypes'}});$i++){
- my $respid = $partdata->{'ResponseIds'}->[$i];
- my $resptype = $partdata->{'ResponseTypes'}->[$i];
- next if ($resptype ne 'option' &&
- $resptype ne 'radiobutton');
- push (@Resource,
- { symb => $res->{symb},
- part => $part,
- respid => $partdata->{'ResponseIds'}->[$i],
- resource => $res,
- resptype => $resptype
- } );
- }
- }
- }
- }
- #
- #
- # Get the index of the current situation
- my $curr_idx;
- for ($curr_idx=0;$curr_idx<$#Resource;$curr_idx++) {
- my $curr_item = $Resource[$curr_idx];
- last if ($curr_item->{'symb'} eq $target->{'symb'} &&
- $curr_item->{'part'} eq $target->{'part'} &&
- $curr_item->{'respid'} eq $target->{'respid'} &&
- $curr_item->{'resptype'} eq $target->{'resptype'});
- }
- my $curr_item = $Resource[$curr_idx];
- if ($curr_item->{'symb'} ne $target->{'symb'} ||
- $curr_item->{'part'} ne $target->{'part'} ||
- $curr_item->{'respid'} ne $target->{'respid'} ||
- $curr_item->{'resptype'} ne $target->{'resptype'}){
- # bogus symb - return nothing
- return (undef,undef,undef);
- }
- #
- # Now just pick up the data we need
- my ($prev,$curr,$next);
- if ($curr_idx == 0) {
- $prev = undef;
- $curr = $Resource[$curr_idx ];
- $next = $Resource[$curr_idx+1];
- } elsif ($curr_idx == $#Resource) {
- $prev = $Resource[$curr_idx-1];
- $curr = $Resource[$curr_idx ];
- $next = undef;
- } else {
- $prev = $Resource[$curr_idx-1];
- $curr = $Resource[$curr_idx ];
- $next = $Resource[$curr_idx+1];
- }
- return ($prev,$curr,$next);
-}
-
-sub make_target_id {
- my ($target) = @_;
- my $id = &Apache::lonnet::escape($target->{'symb'}).':'.
- &Apache::lonnet::escape($target->{'part'}).':'.
- &Apache::lonnet::escape($target->{'respid'}).':'.
- &Apache::lonnet::escape($target->{'resptype'});
- return $id;
-}
-
-sub get_target_from_id {
- my ($id) = @_;
- my ($symb,$part,$respid,$resptype) = split(':',$id);
- return ({ symb =>&Apache::lonnet::unescape($symb),
- part =>&Apache::lonnet::unescape($part),
- respid =>&Apache::lonnet::unescape($respid),
- resptype =>&Apache::lonnet::unescape($resptype)});
}
#########################################################
Index: loncom/interface/statistics/lonstathelpers.pm
diff -u loncom/interface/statistics/lonstathelpers.pm:1.1 loncom/interface/statistics/lonstathelpers.pm:1.2
--- loncom/interface/statistics/lonstathelpers.pm:1.1 Mon Jan 19 16:29:46 2004
+++ loncom/interface/statistics/lonstathelpers.pm Tue Jan 20 10:51:06 2004
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstathelpers.pm,v 1.1 2004/01/19 21:29:46 matthew Exp $
+# $Id: lonstathelpers.pm,v 1.2 2004/01/20 15:51:06 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -93,6 +93,267 @@
$rendered_problem.
'</td></tr></table>';
}
+
+####################################################
+####################################################
+
+=pod
+
+=item &ProblemSelector($AcceptedResponseTypes)
+
+Input: scalar containing regular expression which matches response
+types to show. '.' will yield all, '(option|radiobutton)' will match
+all option response and radiobutton problems.
+
+Returns: A string containing html for a table which lists the sequences
+and their contents. A radiobutton is provided for each problem.
+
+=cut
+
+####################################################
+####################################################
+sub ProblemSelector {
+ my ($AcceptedResponseTypes) = @_;
+ my $Str;
+ $Str = "\n<table>\n";
+ foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
+ next if ($seq->{'num_assess'}<1);
+ my $seq_str = '';
+ foreach my $res (@{$seq->{'contents'}}) {
+ next if ($res->{'type'} ne 'assessment');
+ foreach my $part (@{$res->{'parts'}}) {
+ my $partdata = $res->{'partdata'}->{$part};
+ if ((! exists($partdata->{'option'}) ||
+ $partdata->{'option'} == 0 ) &&
+ (! exists($partdata->{'radiobutton'}) ||
+ $partdata->{'radiobutton'} == 0)) {
+ next;
+ }
+ for (my $i=0;$i<scalar(@{$partdata->{'ResponseTypes'}});$i++){
+ my $respid = $partdata->{'ResponseIds'}->[$i];
+ my $resptype = $partdata->{'ResponseTypes'}->[$i];
+ if ($resptype =~ m/$AcceptedResponseTypes/) {
+ my $value = &make_target_id({symb=>$res->{'symb'},
+ part=>$part,
+ respid=>$respid,
+ resptype=>$resptype});
+ my $checked = '';
+ if ($ENV{'form.problemchoice'} eq $value) {
+ $checked = 'checked ';
+ }
+ my $title = $res->{'title'};
+ if (! defined($title) || $title eq '') {
+ ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
+ }
+ $seq_str .= '<tr><td>'.
+ '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
+ '</td><td>'.
+ $resptype.'</td><td>'.
+ '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
+# '<a href="'.$res->{'src'}.'">'.$resptype.' '.$res->{'title'}.'</a> ';
+ if ($partdata->{'option'} > 1) {
+ $seq_str .= &mt('response').' '.$respid;
+ }
+ $seq_str .= "</td></tr>\n";
+ }
+ }
+ }
+ }
+ if ($seq_str ne '') {
+ $Str .= '<tr><td> </td><td colspan="2"><b>'.$seq->{'title'}.'</b></td>'.
+ "</tr>\n".$seq_str;
+ }
+ }
+ $Str .= "</table>\n";
+ return $Str;
+}
+
+####################################################
+####################################################
+
+=pod
+
+=item &make_target_id($target)
+
+Inputs: Hash ref with the following entries:
+ $target->{'symb'}, $target->{'part'}, $target->{'respid'},
+ $target->{'resptype'}.
+
+Returns: A string, suitable for a form parameter, which uniquely identifies
+the problem, part, and response to do statistical analysis on.
+
+Used by Apache::lonstathelpers::ProblemSelector().
+
+=cut
+
+####################################################
+####################################################
+sub make_target_id {
+ my ($target) = @_;
+ my $id = &Apache::lonnet::escape($target->{'symb'}).':'.
+ &Apache::lonnet::escape($target->{'part'}).':'.
+ &Apache::lonnet::escape($target->{'respid'}).':'.
+ &Apache::lonnet::escape($target->{'resptype'});
+ return $id;
+}
+
+####################################################
+####################################################
+
+=pod
+
+=item &get_target_from_id($id)
+
+Inputs: $id, a scalar string from Apache::lonstathelpers::make_target_id().
+
+Returns: A hash reference, $target, containing the following keys:
+ $target->{'symb'}, $target->{'part'}, $target->{'respid'},
+ $target->{'resptype'}.
+
+=cut
+
+####################################################
+####################################################
+sub get_target_from_id {
+ my ($id) = @_;
+ my ($symb,$part,$respid,$resptype) = split(':',$id);
+ return ({ symb =>&Apache::lonnet::unescape($symb),
+ part =>&Apache::lonnet::unescape($part),
+ respid =>&Apache::lonnet::unescape($respid),
+ resptype =>&Apache::lonnet::unescape($resptype)});
+}
+
+####################################################
+####################################################
+
+=pod
+
+=item &get_prev_curr_next($target)
+
+Determine the problem parts or responses preceeding and following the
+current resource.
+
+Inputs: $target (see &Apache::lonstathelpers::get_target_from_id())
+ $AcceptableResponseTypes, regular expression matching acceptable
+ response types,
+ $granularity, either 'part' or 'response'
+
+Returns: three hash references, $prev, $curr, $next, which refer to the
+preceeding, current, or following problem parts or responses, depending
+on the value of $granularity. Values of undef indicate there is no
+previous or next part/response. A value of undef for all three indicates
+there was no match found to the current part/resource.
+
+The hash references contain the following keys:
+ symb, part, resource
+
+If $granularity eq 'response', the following ADDITIONAL keys will be present:
+ respid, resptype
+
+=cut
+
+####################################################
+####################################################
+sub get_prev_curr_next {
+ my ($target,$AcceptableResponseTypes,$granularity) = @_;
+ #
+ # Build an array with the data we need to search through
+ my @Resource;
+ foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
+ foreach my $res (@{$seq->{'contents'}}) {
+ next if ($res->{'type'} ne 'assessment');
+ foreach my $part (@{$res->{'parts'}}) {
+ my $partdata = $res->{'partdata'}->{$part};
+ if ($granularity eq 'part') {
+ push (@Resource,
+ { symb => $res->{symb},
+ part => $part,
+ resource => $res,
+ } );
+ } elsif ($granularity eq 'response') {
+ for (my $i=0;
+ $i<scalar(@{$partdata->{'ResponseTypes'}});
+ $i++){
+ my $respid = $partdata->{'ResponseIds'}->[$i];
+ my $resptype = $partdata->{'ResponseTypes'}->[$i];
+ next if ($resptype !~ m/$AcceptableResponseTypes/);
+ push (@Resource,
+ { symb => $res->{symb},
+ part => $part,
+ respid => $partdata->{'ResponseIds'}->[$i],
+ resource => $res,
+ resptype => $resptype
+ } );
+ }
+ }
+ }
+ }
+ }
+ #
+ # Get the index of the current situation
+ my $curr_idx;
+ for ($curr_idx=0;$curr_idx<$#Resource;$curr_idx++) {
+ my $curr_item = $Resource[$curr_idx];
+ if ($granularity eq 'part') {
+ if ($curr_item->{'symb'} eq $target->{'symb'} &&
+ $curr_item->{'part'} eq $target->{'part'}) {
+ last;
+ }
+ } elsif ($granularity eq 'response') {
+ if ($curr_item->{'symb'} eq $target->{'symb'} &&
+ $curr_item->{'part'} eq $target->{'part'} &&
+ $curr_item->{'respid'} eq $target->{'respid'} &&
+ $curr_item->{'resptype'} eq $target->{'resptype'}) {
+ last;
+ }
+ }
+ }
+ my $curr_item = $Resource[$curr_idx];
+ if ($granularity eq 'part') {
+ if ($curr_item->{'symb'} ne $target->{'symb'} ||
+ $curr_item->{'part'} ne $target->{'part'}) {
+ # bogus symb - return nothing
+ return (undef,undef,undef);
+ }
+ } elsif ($granularity eq 'response') {
+ if ($curr_item->{'symb'} ne $target->{'symb'} ||
+ $curr_item->{'part'} ne $target->{'part'} ||
+ $curr_item->{'respid'} ne $target->{'respid'} ||
+ $curr_item->{'resptype'} ne $target->{'resptype'}){
+ # bogus symb - return nothing
+ return (undef,undef,undef);
+ }
+ }
+ #
+ # Now just pick up the data we need
+ my ($prev,$curr,$next);
+ if ($curr_idx == 0) {
+ $prev = undef;
+ $curr = $Resource[$curr_idx ];
+ $next = $Resource[$curr_idx+1];
+ } elsif ($curr_idx == $#Resource) {
+ $prev = $Resource[$curr_idx-1];
+ $curr = $Resource[$curr_idx ];
+ $next = undef;
+ } else {
+ $prev = $Resource[$curr_idx-1];
+ $curr = $Resource[$curr_idx ];
+ $next = $Resource[$curr_idx+1];
+ }
+ return ($prev,$curr,$next);
+}
+
+####################################################
+####################################################
+
+=pod
+
+=back
+
+=cut
+
+####################################################
+####################################################
1;
Index: loncom/interface/statistics/lonsubmissiontimeanalysis.pm
diff -u loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.10 loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.11
--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.10 Mon Jan 19 16:31:08 2004
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm Tue Jan 20 10:51:06 2004
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonsubmissiontimeanalysis.pm,v 1.10 2004/01/19 21:31:08 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.11 2004/01/20 15:51:06 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -45,10 +45,14 @@
];
my @SubmitButtons = (
- { name => 'ProblemAnalyis',
+ { name => 'PrevProblemAnalysis',
+ text => 'Previous Problem' },
+ { name => 'ProblemAnalysis',
text => 'Analyze Problem Again' },
+ { name => 'NextProblemAnalysis',
+ text => 'Next Problem' },
{ name => 'SelectAnother',
- text => 'Choose a different resource' },
+ text => 'Choose a different Problem' },
);
sub BuildSubmissionTimePage {
@@ -92,23 +96,40 @@
&mt('Graph Problem Submission Times').'" />');
$r->print(' 'x5);
$r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
- $r->print(&ProblemSelector());
+ $r->print(&Apache::lonstathelpers::ProblemSelector('.'));
} else {
foreach my $button (@SubmitButtons) {
$r->print('<input type="submit" name="'.$button->{'name'}.'" '.
'value="'.&mt($button->{'text'}).'" />');
$r->print(' 'x5);
}
+ #
+ # Determine which problem we are to analyze
+ my $current_problem = &Apache::lonstathelpers::get_target_from_id
+ ($ENV{'form.problemchoice'});
+ #
+ my ($prev,$curr,$next) =
+ &Apache::lonstathelpers::get_prev_curr_next($current_problem,
+ '.',
+ 'part');
+ if (exists($ENV{'form.PrevProblemAnalysis'}) && defined($prev)) {
+ $current_problem = $prev;
+ } elsif (exists($ENV{'form.NextProblemAnalysis'}) && defined($next)) {
+ $current_problem = $next;
+ } else {
+ $current_problem = $curr;
+ }
+ #
+ # Store the current problem choice and send it out in the form
+ $ENV{'form.problemchoice'} =
+ &Apache::lonstathelpers::make_target_id($current_problem);
$r->print('<input type="hidden" name="problemchoice" value="'.
$ENV{'form.problemchoice'}.'" />');
#
$r->print('<hr />');
- #
- my ($symb,$part) = &get_problem_symb(
- &Apache::lonnet::unescape($ENV{'form.problemchoice'}));
$r->rflush();
#
- my $resource = &get_resource_from_symb($symb);
+ my $resource = $current_problem->{'resource'};
if (! defined($resource)) {
$r->print('resource is undefined');
} else {
@@ -117,7 +138,8 @@
$r->rflush();
$r->print(&Apache::lonstathelpers::render_resource($resource));
$r->rflush();
- $r->print(&analyze_times($r,$resource,\@Students,$part));
+ $r->print(&analyze_times($r,$resource,\@Students,
+ $current_problem->{'part'}));
}
$r->print('<hr />');
}
@@ -343,86 +365,6 @@
$Str .= '</tr>'."\n";
$Str .= '</table>'."\n";
return $Str;
-}
-
-sub ProblemSelector {
- my $Str;
- $Str = "<table>\n";
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- next if ($seq->{'num_assess'}<1);
- my $seq_str = '';
- foreach my $res (@{$seq->{'contents'}}) {
- next if ($res->{'type'} ne 'assessment');
- if (@{$res->{'parts'}} == 1) {
- my $value = &Apache::lonnet::escape($res->{'symb'}.':'.
- $res->{'parts'}->[0]);
- my $checked;
- if ($ENV{'form.problemchoice'} eq $value) {
- $checked = 'checked ';
- }
- my $title = $res->{'title'};
- if (! defined($title) || $title eq '') {
- ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
- }
-# &Apache::lonnet::logthis('title = :'.$title.':');
- $seq_str .= '<tr><td>'.
- '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
- '</td><td>'.
- '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
- } else {
- my $title = $res->{'title'};
- if (! defined($title) || $title eq '') {
- ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
- }
- $seq_str .= '<tr><td>'.
- ' '.'</td><td>'.
- '<a href="'.$res->{'src'}.'">'.$title.'</a>'.
- "</td></tr>\n";
- foreach my $part (@{$res->{'parts'}}) {
- my $value = &Apache::lonnet::escape
- ($res->{'symb'}.':'.$part);
- my $checked;
- if ($ENV{'form.problemchoice'} eq $value) {
- $checked = 'checked ';
- }
- $seq_str .= '<tr><td>'.
- '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
- '</td><td>'.(' 'x5).'part '.$part."</td></tr>\n";
- }
- }
- }
- if ($seq_str ne '') {
- $Str .= '<tr><td> </td><td><b>'.$seq->{'title'}.'</b></td>'.
- "</tr>\n".$seq_str;
- }
- }
- $Str .= "</table>\n";
- return $Str;
-}
-
-#########################################################
-#########################################################
-##
-## Misc functions (ought to be put in a module)
-##
-#########################################################
-#########################################################
-sub get_problem_symb {
- my $problemstring = shift();
- my ($symb,$partid) = ($problemstring=~ /^(.*):([^:]*)$/);
- return ($symb,$partid);
-}
-
-sub get_resource_from_symb {
- my ($symb) = @_;
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- foreach my $res (@{$seq->{'contents'}}) {
- if ($res->{'symb'} eq $symb) {
- return $res;
- }
- }
- }
- return undef;
}
1;
--matthew1074613866--