version 1.619, 2012/06/11 11:07:33
|
version 1.630, 2013/01/31 17:31:05
|
Line 149 sub printable_sequence {
|
Line 149 sub printable_sequence {
|
# Return: |
# Return: |
# XML that can be parsed by the helper to drive the state machine. |
# XML that can be parsed by the helper to drive the state machine. |
# |
# |
sub create_incomplete_folder_selstud_helper($helper) |
sub create_incomplete_folder_selstud_helper { |
{ |
|
my ($helper, $map) = @_; |
my ($helper, $map) = @_; |
|
|
|
|
Line 582 sub printable {
|
Line 581 sub printable {
|
sub get_print_dates { |
sub get_print_dates { |
my $res = shift; |
my $res = shift; |
my $partsref = $res->parts(); |
my $partsref = $res->parts(); |
my @parts = @$partsref; |
my @parts; |
|
if (ref($partsref) eq 'ARRAY') { |
|
@parts = @{$partsref}; |
|
} |
my $open_date; |
my $open_date; |
my $close_date; |
my $close_date; |
my @open_dates; |
my @open_dates; |
my @close_dates; |
my @close_dates; |
|
|
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $partopen = $res->parmval('printstartdate', $part); |
my $partopen = $res->parmval('printstartdate', $part); |
my $partclose = $res->parmval('printenddate', $part); |
my $partclose = $res->parmval('printenddate', $part); |
Line 632 sub course_print_dates {
|
Line 634 sub course_print_dates {
|
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts arraY; |
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my ($partopen, $partclose) = $navmap->course_printdates($res, $part); |
my ($partopen, $partclose) = $navmap->course_printdates($res, $part); |
push(@open_dates, $partopen); |
push(@open_dates, $partopen); |
Line 658 sub map_print_dates {
|
Line 660 sub map_print_dates {
|
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts arraY; |
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my ($partopen, $partclose) = $navmap->map_printdates($res, $part); |
my ($partopen, $partclose) = $navmap->map_printdates($res, $part); |
push(@open_dates, $partopen); |
push(@open_dates, $partopen); |
Line 702 sub incomplete {
|
Line 704 sub incomplete {
|
# to only those that are in the original set selcted to be printed. |
# to only those that are in the original set selcted to be printed. |
# |
# |
# Parameters: |
# Parameters: |
# $helper - The helper we need $helper->{'VARS'}->{'symb'} |
# $map - The URL of the folder being printed. |
# to construct the navmap and the iteration. |
# Used to determine which startResource and finishResource |
# $seq - The original set of resources to print |
# to use when using the navmap's getIterator method. |
|
# $seq - The original set of resources to print. |
# (really an array of resource names (array of symb's). |
# (really an array of resource names (array of symb's). |
# $who - Student/domain for whome the sequence will be generated. |
# $who - Student/domain for whome the sequence will be generated. |
|
# $code - CODE being printed when printing Problems/Resources |
|
# from folder for CODEd assignments |
# |
# |
# Implicit inputs: |
# Implicit inputs: |
# $ |
# $ |
Line 715 sub incomplete {
|
Line 720 sub incomplete {
|
# print_resources. |
# print_resources. |
# |
# |
sub master_seq_to_person_seq { |
sub master_seq_to_person_seq { |
my ($helper, $seq, $who) = @_; |
my ($map, $seq, $who, $code) = @_; |
|
|
|
|
my ($username, $userdomain, $usersection) = split(/:/, $who); |
my ($username, $userdomain, $usersection) = split(/:/, $who); |
|
|
|
|
# Toss the sequence up into a hash so that we have O(1) lookup time. |
# Toss the sequence up into a hash so that we have O(1) lookup time. |
# on the items that come out of the user's list of resources. |
# on the items that come out of the user's list of resources. |
# |
# |
|
|
my %seq_hash = map {$_ => 1} @$seq; |
my %seq_hash = map {$_ => 1} @$seq; |
my @output_seq; |
my @output_seq; |
|
|
my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'}); |
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain, |
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain); |
$code); |
my $iterator = $navmap->getIterator($navmap->firstResource(), |
my ($start,$finish); |
$navmap->finishResource(), |
|
{}, 1); |
if ($map) { |
my %nonResourceItems = ( |
my $mapres = $navmap->getResourceByUrl($map); |
$iterator->BEGIN_MAP => 1, |
if ($mapres->is_map()) { |
$iterator->BEGIN_BRANCH => 1, |
$start = $mapres->map_start(); |
$iterator->END_BRANCH => 1, |
$finish = $mapres->map_finish(); |
$iterator->END_MAP => 1, |
} |
$iterator->FORWARD => 1, |
} |
$iterator->BACKWARD => 1 |
unless ($start && $finish) { |
|
$start = $navmap->firstResource(); |
|
$finish = $navmap->finishResource(); |
|
} |
|
|
); # These items are not resources but appear in the midst of iteration. |
my $iterator = $navmap->getIterator($start,$finish,{},1); |
|
|
# Iterate on the resource..select the items that are randomly selected |
# Iterate on the resource..select the items that are randomly selected |
# and that are in the seq_has. Presumably the iterator will take care |
# and that are in the seq_has. Presumably the iterator will take care |
Line 753 sub master_seq_to_person_seq {
|
Line 760 sub master_seq_to_person_seq {
|
# Only process resources..that are not removed by randomout... |
# Only process resources..that are not removed by randomout... |
# and are selected for printint as well. |
# and are selected for printint as well. |
# |
# |
|
|
if (! exists $nonResourceItems{$curres} && ! $curres->randomout()) { |
if (ref($curres) && ! $curres->randomout()) { |
my $symb = $curres->symb(); |
my $currsymb = $curres->symb(); |
if (exists $seq_hash{$symb}) { |
if (exists($seq_hash{$currsymb})) { |
push(@output_seq, $symb); |
push(@output_seq, $currsymb); |
} |
} |
} |
} |
} |
} |
|
|
|
|
return \@output_seq; # for now. |
return \@output_seq; # for now. |
|
|
Line 2057 sub unsupported {
|
Line 2063 sub unsupported {
|
my $result.= &print_latex_header($mode); |
my $result.= &print_latex_header($mode); |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
|
$currentURL=~s|^http://https://|https://|; |
my $title=&Apache::lonnet::gettitle($symb); |
my $title=&Apache::lonnet::gettitle($symb); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; |
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; |
Line 2136 sub print_page_in_course {
|
Line 2143 sub print_page_in_course {
|
my @page_resources = $navmap->retrieveResources($resource_src); |
my @page_resources = $navmap->retrieveResources($resource_src); |
$result .= &print_page_in_course($helper, $rparmhash, |
$result .= &print_page_in_course($helper, $rparmhash, |
$resource_src, \@page_resources); |
$resource_src, \@page_resources); |
|
} elsif ($resource->ext()) { |
|
$result .= &unsupported($currentURL,$mode,$symb); |
} |
} |
# these resources go through the XML transformer: |
# these resources go through the XML transformer: |
|
|
Line 2602 sub print_construction_sequence {
|
Line 2611 sub print_construction_sequence {
|
# For item 100, filtering was done at the helper level. |
# For item 100, filtering was done at the helper level. |
|
|
sub output_data { |
sub output_data { |
|
|
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
Line 2875 ENDPART
|
Line 2885 ENDPART
|
($print_type eq 'select_sequences') or |
($print_type eq 'select_sequences') or |
($print_type eq 'map_incomplete_problems_seq') |
($print_type eq 'map_incomplete_problems_seq') |
) { |
) { |
|
|
|
|
#-- produce an output string |
#-- produce an output string |
if (($print_type eq 'map_problems') or |
if (($print_type eq 'map_problems') or |
Line 3138 ENDPART
|
Line 3147 ENDPART
|
} |
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
|
my $map; |
|
if ($helper->{VARS}->{'symb'}) { |
|
($map, my $id, my $resource) = |
|
&Apache::lonnet::decode_symb($helper->{VARS}->{'symb'}); |
|
} |
|
|
#loop over students |
#loop over students |
|
|
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
Line 3172 ENDPART
|
Line 3187 ENDPART
|
} else { |
} else { |
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
} |
} |
my $actual_seq = master_seq_to_person_seq($helper, \@master_seq, $person); |
my $actual_seq = master_seq_to_person_seq($map, \@master_seq, |
|
$person); |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
$person,$type, |
$person,$type, |
\%moreenv, $actual_seq, |
\%moreenv, $actual_seq, |
Line 3198 ENDPART
|
Line 3214 ENDPART
|
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'}; |
my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'}; |
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
|
|
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
my @lines = &Apache::grades::get_scantronformat_file(); |
my @lines = &Apache::grades::get_scantronformat_file(); |
my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10); |
my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10); |
Line 3215 ENDPART
|
Line 3230 ENDPART
|
} |
} |
} |
} |
} |
} |
|
my ($randomorder,$randompick,$map); |
|
if ($helper->{VARS}{'symb'}) { |
|
($map, my $id, my $resource) = |
|
&Apache::lonnet::decode_symb($helper->{VARS}{'symb'}); |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (defined($navmap)) { |
|
if ($map) { |
|
my $mapres = $navmap->getResourceByUrl($map); |
|
$randomorder = $mapres->randomorder(); |
|
$randompick = $mapres->randompick(); |
|
} |
|
} |
|
} |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'instructor_comments'}='hide'; |
Line 3276 ENDPART
|
Line 3304 ENDPART
|
} else { |
} else { |
$moreenv{'CODE'}=&num_to_letters($code); |
$moreenv{'CODE'}=&num_to_letters($code); |
} |
} |
|
my $actual_seq = \@master_seq; |
|
if ($randomorder) { |
|
$env{'form.CODE'} = $moreenv{'CODE'}; |
|
$actual_seq = master_seq_to_person_seq($map, \@master_seq, |
|
undef, |
|
$moreenv{'CODE'}); |
|
delete($env{'form.CODE'}); |
|
} |
my ($output,$fullname, $printed)= |
my ($output,$fullname, $printed)= |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
\@master_seq,$flag_latex_header_remove, |
$actual_seq,$flag_latex_header_remove, |
$LaTeXwidth); |
$LaTeXwidth); |
$resources_printed .= ":"; |
$resources_printed .= ":"; |
$print_array[$file_num].=$output; |
$print_array[$file_num].=$output; |
Line 3530 sub print_resources {
|
Line 3566 sub print_resources {
|
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
|
|
|
|
|
|
# |
# |
# Figure out if we need to filter the output by |
# Figure out if we need to filter the output by |
# the incomplete problems for that person |
# the incomplete problems for that person |
Line 3797 sub handler {
|
Line 3832 sub handler {
|
} |
} |
|
|
&init_perm(); |
&init_perm(); |
|
|
my $helper = printHelper($r); |
my $helper = printHelper($r); |
if (!ref($helper)) { |
if (!ref($helper)) { |
return $helper; |
return $helper; |
Line 4216 sub printHelper {
|
Line 4250 sub printHelper {
|
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$map, |
$map, |
! $isProblem, '', |
$isProblem, '', |
$symbFilter, |
$symbFilter, |
$start_new_option); |
$start_new_option); |
$helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML', |
$helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML', |
Line 4624 CHOOSE_FROM_ANY_SEQUENCE
|
Line 4658 CHOOSE_FROM_ANY_SEQUENCE
|
if (!$res_printable) { |
if (!$res_printable) { |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{MESSAGE_TEXT} = |
$paramHash->{MESSAGE_TEXT} = |
&mt('<p><b>Printing for current resource is only possible between [_1] and [_1]</b></p>', |
'<p class="LC_info">' |
$res_printstartdate, $res_printenddate); |
.&mt('Printing for current resource is only possible between [_1] and [_2]', |
|
$res_printstartdate, $res_printenddate).'</p>'; |
Apache::lonhelper::message->new(); |
Apache::lonhelper::message->new(); |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
Line 4850 FONT_SELECTION
|
Line 4885 FONT_SELECTION
|
return "$helper->{VARS}->{'probstatus'}"; |
return "$helper->{VARS}->{'probstatus'}"; |
</defaultvalue> |
</defaultvalue> |
<choice computer="problem">Homework Problem</choice> |
<choice computer="problem">Homework Problem</choice> |
<choice computer="exam">Exam Problem</choice> |
<choice computer="exam">Bubblesheet Exam Problem</choice> |
<choice computer="survey">Survey question</choice> |
<choice computer="survey">Survey question</choice> |
,choice computer="anonsurvey"Anonymous survey question</choice> |
,choice computer="anonsurvey"Anonymous survey question</choice> |
</dropdown> |
</dropdown> |