--- rat/lonsequence.pm 2000/10/17 10:36:17 1.3 +++ rat/lonsequence.pm 2002/05/23 13:04:59 1.10 @@ -2,6 +2,30 @@ # # Sequence Handler # +# $Id: lonsequence.pm,v 1.10 2002/05/23 13:04:59 www Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# # (Handler to resolve ambiguous file locations # # (TeX Content Handler @@ -18,7 +42,8 @@ use strict; use Apache::lonnet; use Apache::Constants qw(:common :http REDIRECT); use GDBM_File; - +use Apache::lonratedt; +use Apache::lonratsrv; # ----------------------------------------------------------- Could not resolve @@ -32,6 +57,90 @@ sub getlost { ''); } + +# ----------------------------------------- Attempt to read from resource space + +sub attemptread { + my $fn=shift; + &Apache::lonnet::repcopy($fn); + if (-e $fn) { + return &Apache::lonratedt::attemptread($fn); + } else { + return (); + } +} + +# ---------------------------------------------------------------- View Handler + +sub viewmap { + my ($r,$url)=@_; + $r->print(''); + if ($ENV{'form.forceselect'}) { $r->print(< + +function select_group() { + window.location="/adm/groupsort?catalogmode=groupimport&mode=rat&acts="+document.forms.fileattr.acts.value; +} + +function queue(val) { + if (eval("document.forms."+val+".filelink.checked")) { + var l=val.length; + var v=val.substring(4,l); + document.forms.fileattr.acts.value+='1a'+v+'b'; + } + else { + var l=val.length; + var v=val.substring(4,l); + document.forms.fileattr.acts.value+='0a'+v+'b'; + } +} + + +ENDSCRIPT + } + $r->print(''); + if ($ENV{'form.forceselect'}) { $r->print(< + + + +ENDSELECT + } + my $idx=0; + foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) { + if (defined($_)) { + $idx++; + if ($ENV{'form.forceselect'}) { + $r->print('
'); + } + my ($title,$url)=split(/\:/,$_); + $title=~s/\&colon\;/\:/g; + $url=~s/\&colon\;/\:/g; + unless ($title) { $title=(split(/\//,$url))[-1] }; + unless ($title) { $title='Empty'; } + if ($url) { + if ($ENV{'form.forceselect'}) { + $r->print(< + +ENDCHECKBOX + } + $r->print(''); + } + $r->print(&Apache::lonratsrv::qtescape($title)); + if ($url) { $r->print(''); } + if ($ENV{'form.forceselect'}) { + $r->print(''); + } else { + $r->print('
'); + } + } + } + $r->print(''); +} + # ================================================================ Main Handler sub handler { @@ -42,13 +151,19 @@ sub handler { $r->send_http_header; return OK; } + + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['forceselect']); my %hash; my %bighash; my $requrl=$r->uri; # ------------------------------------------------------------ Tie symb db file - if ($ENV{'request.course.fn'}) { + my $disurl=''; + my $dismapid=''; + + if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) { my $last; if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', &GDBM_READER,0640)) { @@ -64,50 +179,36 @@ sub handler { if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', &GDBM_READER,0640)) { my $disid=''; + if ($direction eq 'back') { $disid=$bighash{'map_finish_'.$requrl}; } else { $disid=$bighash{'map_start_'.$requrl}; } - my $disurl=''; if ($disid) { $disurl=$bighash{'src_'.$disid}; - } - my $symb=''; - unless($disurl) { - if ($symb=&Apache::lonnet::symbread()) { - } + $dismapid=(split(/\./,$disid))[1]; } # --------------------------------------- Untie hash, make sure to come by here untie(%bighash); - if ($disurl) { -# -------------------------------------------------- Has first or last resource - $r->content_type('text/html'); - $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl); - return REDIRECT; - } else { -# ---------- Does not have first or last resource, try to find out where we are - unless ($symb) { - $r->internal_redirect('/adm/ambiguous'); - } - $r->content_type('text/html'); - $r->send_http_header; - $r->print(< - -ENDSYMB - return OK - } - } else { - &getlost($r,'Could not access course structure.'); - return OK; } - } else { - $ENV{'user.error.msg'}="$requrl:bre:0:0:Course not initialized"; - return HTTP_NOT_ACCEPTABLE; } - return OK; +# now either disurl is set (going to first page), or we need another display + + if ($disurl) { +# -------------------------------------------------- Has first or last resource + &Apache::lonnet::symblist($requrl,$disurl => $dismapid, + 'last_known' => &Apache::lonnet::declutter($disurl)); + $r->content_type('text/html'); + $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl); + return REDIRECT; + } else { + $r->content_type('text/html'); + $r->send_http_header; + &viewmap($r,$requrl); + return OK; + } } 1;