--- rat/lonsequence.pm 2006/11/02 21:27:58 1.29
+++ rat/lonsequence.pm 2012/12/19 05:21:13 1.43
@@ -2,7 +2,7 @@
#
# Sequence Handler
#
-# $Id: lonsequence.pm,v 1.29 2006/11/02 21:27:58 albertel Exp $
+# $Id: lonsequence.pm,v 1.43 2012/12/19 05:21:13 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,6 +27,8 @@
# http://www.lon-capa.org/
#
+
+
package Apache::lonsequence;
use strict;
@@ -34,9 +36,12 @@ use Apache::lonnet;
use Apache::Constants qw(:common :http REDIRECT);
use GDBM_File;
use LONCAPA::map();
+use LONCAPA;
use Apache::lonpageflip();
use Apache::loncommon();
+use Apache::groupsort();
use Apache::lonlocal;
+use HTML::Entities();
my %selhash;
my $successtied;
@@ -44,10 +49,10 @@ my $successtied;
# ----------------------------------------- Attempt to read from resource space
sub attemptread {
- my $fn=shift;
+ my ($fn,$unsorted)=@_;
&Apache::lonnet::repcopy($fn);
if (-e $fn) {
- return &LONCAPA::map::attemptread($fn);
+ return &LONCAPA::map::attemptread($fn,$unsorted);
} else {
return ();
}
@@ -98,14 +103,15 @@ ENDSCRIPT
'
'.$url.'
');
# ------------------ This is trying to select. Provide buttons and tie %selhash
if ($env{'form.forceselect'}) { $r->print(<
-
-
+
ENDSELECT
my $diropendb =
- "/home/httpd/perl/tmp/$env{'user.domain'}\_$env{'user.name'}_sel_res.db";
+ LONCAPA::tempdir() .
+ "$env{'user.domain'}\_$env{'user.name'}_sel_res.db";
if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
if ($env{'form.launch'} eq '1') {
&start_fresh_session();
@@ -113,53 +119,18 @@ ENDSELECT
$successtied=1;
# - Evaluate actions from previous page (both cumulatively and chronologically)
- if ($env{'form.catalogmode'} eq 'import') {
- my $acts=$env{'form.acts'};
- my @Acts=split(/b/,$acts);
- my %ahash;
- my %achash;
- my $ac=0;
- # some initial hashes for working with data
- foreach (@Acts) {
- my ($state,$ref)=split(/a/);
- $ahash{$ref}=$state;
- $achash{$ref}=$ac;
- $ac++;
+ if ($env{'form.catalogmode'} eq 'import') {
+ &Apache::groupsort::update_actions_hash(\%selhash);
}
- # sorting through the actions and changing the tied database hash
- foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
- my $key=$_;
- if ($ahash{$key} eq '1') {
- $selhash{'store_'.$selhash{'pre_'.$key.'_link'}}=
- $selhash{'pre_'.$key.'_title'};
- $selhash{'storectr_'.$selhash{'pre_'.$key.'_link'}}=
- $selhash{'storectr'}+0;
- $selhash{'storectr'}++;
- }
- if ($ahash{$key} eq '0') {
- if ($selhash{'store_'.$selhash{'pre_'.$key.'_link'}}) {
- delete $selhash{'store_'.$selhash{'pre_'.$key.'_link'}};
- }
- }
- }
- # deleting the previously cached listing
- foreach (keys %selhash) {
- if ($_ =~ /^pre_/ && $_ =~/link$/) {
- my $key = $_;
- $key =~ s/^pre_//;
- $key =~ s/_[^_]*$//;
- delete $selhash{'pre_'.$key.'_title'};
- delete $selhash{'pre_'.$key.'_link'};
- }
- }
- }
# -
}
}
# ----------------------------- successtied is now '1' if in working selectmode
my ($errtext,$fatal)=&mapread(&Apache::lonnet::filelocation('',$url),'');
if ($fatal==1) {
- $r->print(''.&mt('Map contents are not shown in order.').'
');
+ $r->print(''
+ .&mt('Map contents are not shown in order.')
+ .'
');
}
my $idx=0;
foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
@@ -169,33 +140,39 @@ ENDSELECT
$r->print('');
} else {
- $r->print('
');
+ $r->print('
');
}
}
}
@@ -242,6 +219,7 @@ sub handler {
my $dismapid='';
my $exitdisid = '';
my $arrow_dir = '';
+ my $is_encrypted = '';
if (($env{'request.course.fn'}) && (!$env{'form.forceselect'})) {
my $last;
@@ -272,6 +250,9 @@ sub handler {
if (!$env{'request.role.adv'}) {
$randomout = $bighash{'randomout_'.$disid};
}
+ if (!$env{'request.role.adv'}) {
+ $is_encrypted = $bighash{'encrypted_'.$disid};
+ }
} elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
&GDBM_READER(),0640)) {
$last=$hash{'last_known'};
@@ -291,6 +272,9 @@ sub handler {
if (!$env{'request.role.adv'}) {
$randomout = $bighash{'randomout_'.$disid};
}
+ if (!$env{'request.role.adv'}) {
+ $is_encrypted = $bighash{'encrypted_'.$disid};
+ }
}
}
$exitdisid = $disid;
@@ -304,29 +288,35 @@ sub handler {
# now either disurl is set (going to first page), or we need another display
if ($disurl) {
# -------------------------------------------------- Has first or last resource
+ my $showdisurl = $disurl;
+ if ($is_encrypted) {
+ $showdisurl = &Apache::lonenc::encrypted($disurl);
+ }
&Apache::lonnet::symblist($requrl,$disurl => [$disurl,$dismapid],
'last_known' => [$disurl,$dismapid]);
&Apache::loncommon::content_type($r,'text/html');
- $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);
+ $r->header_out(Location => &Apache::lonnet::absolute_url($ENV{'SERVER_NAME'}).
+ $showdisurl);
return REDIRECT;
} else {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if ($exitdisid eq '' && $arrow_dir ne '') {
my %lt =&Apache::lonlocal::texthash(
- 'back' => 'beginning',
- 'forward' => 'end',
'nere' => 'Next resource could not be displayed',
'goba' => 'Go Back',
'nacc' => 'Navigate Course Content',
);
- my $warnmsg = &mt('As all folders and sequences ');
+ my $warnmsg;
if ($arrow_dir eq 'forward') {
- $warnmsg .= &mt('following the current resource were empty').',';
+ $warnmsg = &mt('As all folders and sequences '
+ .'following the current resource were empty, '
+ .'you have now reached the end of the course.');
} elsif ($arrow_dir eq 'back') {
- $warnmsg .= &mt('preceding the current resource were empty').',';
+ $warnmsg = &mt('As all folders and sequences '
+ .'preceding the current resource were empty, '
+ .'you have now reached the beginning of the course.');
}
- $warnmsg .= &mt('you have now reached the').' '.$lt{$arrow_dir}.' '.&mt('of the course.');
my $start_page=
&Apache::loncommon::start_page('Empty Folder/Sequence');
my $end_page=
@@ -351,7 +341,35 @@ ENDNONE
1;
__END__
+=head1 NAME
+
+Apache::lonsequence
+
+=head1 SYNOPSIS
+
+Handler for showing sequence objects of
+educational resources.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 SUBROUTINES
+
+=over
+
+=item handler()
+
+=item viewmap()
+
+=item attemptread()
+
+=item mapread()
+
+=item start_fresh_session()
+
+=back
+=cut