--- rat/lonsequence.pm 2002/05/23 13:04:59 1.10 +++ rat/lonsequence.pm 2002/08/31 00:43:13 1.14 @@ -2,7 +2,7 @@ # # Sequence Handler # -# $Id: lonsequence.pm,v 1.10 2002/05/23 13:04:59 www Exp $ +# $Id: lonsequence.pm,v 1.14 2002/08/31 00:43:13 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,19 +44,11 @@ use Apache::Constants qw(:common :http R use GDBM_File; use Apache::lonratedt; use Apache::lonratsrv; +use Apache::lonpageflip; +use Apache::loncommon; -# ----------------------------------------------------------- Could not resolve - -sub getlost { - my ($r,$errmsg)=@_; - $r->content_type('text/html'); - $r->send_http_header; - $r->print( - 'Unknown Error

'. - 'LON-CAPA

Could not handle sequence resource reference.

'.$errmsg. - ''); -} - +my %selhash; +my $successtied; # ----------------------------------------- Attempt to read from resource space @@ -79,7 +71,7 @@ sub viewmap { ENDSCRIPT } - $r->print(''); + $r->print(&Apache::loncommon::bodytag('Map Contents').'

'.$url.'

'); +# ------------------ This is trying to select. Provide buttons and tie %selhash if ($ENV{'form.forceselect'}) { $r->print(< @@ -106,12 +99,64 @@ ENDSCRIPT onClick="javascript:select_group()"> ENDSELECT + my $diropendb = + "/home/httpd/perl/tmp/$ENV{'user.domain'}\_$ENV{'user.name'}_groupsec.db"; + if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { + if ($ENV{'form.launch'} eq '1') { + &start_fresh_session(); + } + $successtied=1; + +# - Evaluate actions from previous page (both cumulatively and chronologically) + if ($ENV{'form.catalogmode'} eq 'groupimport') { + 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++; + } + # 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 $idx=0; foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) { if (defined($_)) { $idx++; - if ($ENV{'form.forceselect'}) { + if ($successtied) { $r->print('
'); } my ($title,$url)=split(/\:/,$_); @@ -120,10 +165,17 @@ ENDSELECT unless ($title) { $title=(split(/\//,$url))[-1] }; unless ($title) { $title='Empty'; } if ($url) { - if ($ENV{'form.forceselect'}) { + if ($successtied) { + my $checked=''; + if ($selhash{'store_'.$url}) { + $checked=" checked"; + } + $selhash{"pre_${idx}_link"}=$url; + $selhash{"pre_${idx}_title"}=$title; + $r->print(< +value='$url' onClick='javascript:queue("form$idx")'$checked> ENDCHECKBOX } @@ -131,7 +183,7 @@ ENDCHECKBOX } $r->print(&Apache::lonratsrv::qtescape($title)); if ($url) { $r->print(''); } - if ($ENV{'form.forceselect'}) { + if ($successtied) { $r->print(''); } else { $r->print('
'); @@ -139,8 +191,24 @@ ENDCHECKBOX } } $r->print(''); + if ($successtied) { + untie %selhash; + } } +# ----------------------------------------------------------- Clean out selhash +sub start_fresh_session { + foreach (keys %selhash) { + if ($_ =~ /^pre_/) { + delete $selhash{$_}; + } + if ($_ =~ /^store/) { + delete $selhash{$_}; + } + } +} + + # ================================================================ Main Handler sub handler { @@ -153,12 +221,13 @@ sub handler { } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['forceselect']); + ['forceselect','launch']); my %hash; my %bighash; my $requrl=$r->uri; + $successtied=0; # ------------------------------------------------------------ Tie symb db file my $disurl=''; my $dismapid=''; @@ -166,7 +235,7 @@ sub handler { if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) { my $last; if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', - &GDBM_READER,0640)) { + &GDBM_READER(),0640)) { $last=$hash{'last_direction'}; untie(%hash); } @@ -177,7 +246,7 @@ sub handler { } # ------------------------------------------------------------- Tie big db file if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', - &GDBM_READER,0640)) { + &GDBM_READER(),0640)) { my $disid=''; if ($direction eq 'back') { @@ -189,6 +258,18 @@ sub handler { $disurl=$bighash{'src_'.$disid}; $dismapid=(split(/\./,$disid))[1]; } +# ------------------------- If this is an empty one, skip to next non-empty one + if ((!$disurl) && ($disid)) { + $direction=($direction?$direction:'forward'); + ($disid,$requrl)= + &Apache::lonpageflip::fullmove($disid, + &Apache::lonnet::declutter($requrl),$direction); + if ($disid) { + $disurl=$bighash{'src_'.$disid}; + $dismapid=(split(/\./,$disid))[1]; + } + } + # --------------------------------------- Untie hash, make sure to come by here untie(%bighash); }