version 1.66, 2006/03/06 23:41:07
|
version 1.75.2.1, 2008/12/21 05:00:52
|
Line 30
|
Line 30
|
package Apache::lonpageflip; |
package Apache::lonpageflip; |
|
|
use strict; |
use strict; |
|
use LONCAPA; |
use Apache::Constants qw(:common :http REDIRECT); |
use Apache::Constants qw(:common :http REDIRECT); |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::loncommon(); |
use HTML::TokeParser; |
use HTML::TokeParser; |
use GDBM_File; |
use GDBM_File; |
|
|
Line 84 sub hash_src {
|
Line 86 sub hash_src {
|
return ($hash{'src_'.$id},$symb); |
return ($hash{'src_'.$id},$symb); |
} |
} |
|
|
# Inputs are a url, adn a hash ref of |
sub move { |
# form name => value pairs |
my ($next,$endupmap,$direction) = @_; |
# takes care of properly adding the form name elements and values to the |
my $safecount=0; |
# the url doing proper escaping of the values and joining with ? or & as |
my $allowed=0; |
# needed |
do { |
|
($next,$endupmap)=&get_next_possible_move($next,$endupmap,$direction); |
sub add_get_param { |
|
my ($url,$form_data) = @_; |
my $url = $hash{'src_'.$next}; |
my $needs_question_mark = ($url !~ /\?/); |
my ($mapid,$resid)=split(/\./,$next); |
|
my $symb = &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid}, |
while (my ($name,$value) = each(%$form_data)) { |
$resid,$url); |
if ($needs_question_mark) { |
if ($url eq '' || $symb eq '') { |
$url.='?'; |
$allowed = 0; |
$needs_question_mark = 0; |
} else { |
} else { |
my $priv = &Apache::lonnet::allowed('bre',$url,$symb); |
$url.='&'; |
$allowed = (($priv eq 'F') || ($priv eq '2')); |
} |
} |
$url.=$name.'='.&Apache::lonnet::escape($form_data->{$name}); |
$safecount++; |
} |
} while ( ($next) |
return $url; |
&& ($next!~/\,/) |
|
&& ( |
|
(!$hash{'src_'.$next}) |
|
|| ( |
|
(!$env{'request.role.adv'}) |
|
&& $hash{'randomout_'.$next} |
|
) |
|
|| (!$allowed) |
|
) |
|
&& ($safecount<10000)); |
|
|
|
return ($next,$endupmap); |
} |
} |
|
|
sub move { |
sub get_next_possible_move { |
my ($rid,$mapurl,$direction)=@_; |
my ($rid,$mapurl,$direction)=@_; |
my $startoutrid=$rid; |
my $startoutrid=$rid; |
|
|
Line 207 sub navlaunch {
|
Line 220 sub navlaunch {
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::no_cache($r); |
$r->send_http_header; |
$r->send_http_header; |
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(&Apache::loncommon::start_page('Launched')); |
$r->print("$html<head>\n"); |
|
$r->print('</head>'. |
|
&Apache::loncommon::bodytag('Launched')); |
|
$r->print(<<ENDNAV); |
$r->print(<<ENDNAV); |
<p><a href="/adm/flip?postdata=firstres%3a">Goto first resource</a></p> |
<p><a href="/adm/flip?postdata=firstres%3a">Goto first resource</a></p> |
<script type="text/javascript"> |
<script type="text/javascript"> |
Line 222 sub navlaunch {
|
Line 232 sub navlaunch {
|
</script> |
</script> |
<p><a href="javascript:collapse();">Collapse external navigation window</a></p> |
<p><a href="javascript:collapse();">Collapse external navigation window</a></p> |
ENDNAV |
ENDNAV |
$r->print(&Apache::loncommon::endbodytag().'</html>'); |
$r->print(&Apache::loncommon::end_page()); |
} |
} |
|
|
|
sub first_accessible_resource { |
|
my $furl; |
|
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db', |
|
&GDBM_READER(),0640)) { |
|
$furl=$hash{'first_url'}; |
|
my %args; |
|
my ($url,$args) = split(/\?/,$furl); |
|
foreach my $pair (split(/\&/,$args)) { |
|
my ($name,$value) = split(/=/,$pair); |
|
$args{&unescape($name)} = &unescape($value); |
|
} |
|
if (!&Apache::lonnet::allowed('bre',$url,$args{'symb'})) { |
|
# Wow, we cannot see this ... move forward to the next one that we can see |
|
my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward'); |
|
# Build the new URL |
|
my ($newmapid,$newresid)=split(/\./,$newrid); |
|
my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid}); |
|
$furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb }); |
|
if ($hash{'encrypted_'.$newrid}) { |
|
$furl=&Apache::lonenc::encrypted($furl); |
|
} |
|
} |
|
untie(%hash); |
|
return $furl; |
|
} else { |
|
return '/adm/navmaps'; |
|
} |
|
} |
|
|
# ================================================================ Main Handler |
# ================================================================ Main Handler |
|
|
sub handler { |
sub handler { |
Line 253 sub handler {
|
Line 293 sub handler {
|
} |
} |
$currenturl=~s/\.\d+\.(\w+)$/\.$1/; |
$currenturl=~s/\.\d+\.(\w+)$/\.$1/; |
if ($direction eq 'firstres') { |
if ($direction eq 'firstres') { |
my $furl; |
my $furl=&first_accessible_resource(); |
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
|
&GDBM_READER(),0640)) { |
|
$furl=$bighash{'first_url'}; |
|
untie(%bighash); |
|
} |
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->header_out(Location => |
$r->header_out(Location => |
'http://'.$ENV{'HTTP_HOST'}.$furl); |
&Apache::lonnet::absolute_url().$furl); |
|
|
return REDIRECT; |
return REDIRECT; |
} |
} |
Line 295 sub handler {
|
Line 330 sub handler {
|
} else { |
} else { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->header_out(Location => |
$r->header_out(Location => |
'http://'.$ENV{'HTTP_HOST'}.$newloc); |
&Apache::lonnet::absolute_url().$newloc); |
|
|
return REDIRECT; |
return REDIRECT; |
} |
} |
} |
} |
$currenturl=~s/^http\:\/\///; |
$currenturl=~s/^https?\:\/\///; |
$currenturl=~s/^[^\/]+//; |
$currenturl=~s/^[^\/]+//; |
# |
# |
# Is the current URL on the map? If not, start with last known URL |
# Is the current URL on the map? If not, start with last known URL |
Line 318 sub handler {
|
Line 353 sub handler {
|
if ($direction eq 'return') { |
if ($direction eq 'return') { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->header_out(Location => |
$r->header_out(Location => |
'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html'); |
&Apache::lonnet::absolute_url(). |
|
'/adm/noidea.html'); |
return REDIRECT; |
return REDIRECT; |
} else { |
} else { |
&navlaunch($r); |
&navlaunch($r); |
Line 345 sub handler {
|
Line 381 sub handler {
|
my $endupmap; |
my $endupmap; |
($next,$endupmap)=&move($rid,$startoutmap,$direction); |
($next,$endupmap)=&move($rid,$startoutmap,$direction); |
# -------------------------------------- Do we have one and only one empty URL? |
# -------------------------------------- Do we have one and only one empty URL? |
my $safecount=0; |
|
while (($next) && ($next!~/\,/) && |
|
((!$hash{'src_'.$next}) || |
|
((!$env{'request.role.adv'}) && $hash{'randomout_'.$next})) |
|
&& ($safecount<10000)) { |
|
($next,$endupmap)=&move($next,$endupmap,$direction); |
|
$safecount++; |
|
} |
|
# We are now at at least one non-empty URL |
# We are now at at least one non-empty URL |
# ----------------------------------------------------- Check out possibilities |
# ----------------------------------------------------- Check out possibilities |
if ($next) { |
if ($next) { |
Line 416 sub handler {
|
Line 444 sub handler {
|
$redirectsymb=''; |
$redirectsymb=''; |
} |
} |
} |
} |
&Apache::lonnet::appenv('user.criticalcheck.time'=>time); |
&Apache::lonnet::appenv({'user.criticalcheck.time'=>time}); |
} |
} |
|
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
my $url='http://'.$ENV{'HTTP_HOST'}.$redirecturl; |
my $url=&Apache::lonnet::absolute_url().$redirecturl; |
$url = &add_get_param($url, { 'symb' => $redirectsymb}); |
$url = &add_get_param($url, { 'symb' => $redirectsymb}); |
$r->header_out(Location => $url); |
$r->header_out(Location => $url); |
return REDIRECT; |
return REDIRECT; |
Line 440 sub handler {
|
Line 468 sub handler {
|
'titleheader' => 'Title', |
'titleheader' => 'Title', |
'type' => 'Type'); |
'type' => 'Type'); |
if ($#possibilities>0) { |
if ($#possibilities>0) { |
my $bodytag= |
my $start_page= |
&Apache::loncommon::bodytag('Multiple Resources'); |
&Apache::loncommon::start_page('Multiple Resources'); |
$r->print(<<ENDSTART); |
$r->print(<<ENDSTART); |
<head><title>Choose Next Location</title></head> |
$start_page |
$bodytag |
|
<h3>$lt{'wherenext'}</h3> |
<h3>$lt{'wherenext'}</h3> |
<p> |
<p> |
$lt{'pick'}: |
$lt{'pick'}: |
Line 465 ENDSTART
|
Line 492 ENDSTART
|
} |
} |
$r->print('</table>'); |
$r->print('</table>'); |
} else { |
} else { |
my $bodytag=&Apache::loncommon::bodytag('No Resource'); |
my $start_page= |
|
&Apache::loncommon::start_page('No Resource'); |
$r->print(<<ENDNONE); |
$r->print(<<ENDNONE); |
<head><title>No Resource</title></head> |
$start_page |
$bodytag |
|
<h3>$lt{'title'}</h3> |
<h3>$lt{'title'}</h3> |
<p>$lt{'explain'}</p> |
<p>$lt{'explain'}</p> |
ENDNONE |
ENDNONE |
Line 477 ENDNONE
|
Line 504 ENDNONE
|
<ul> |
<ul> |
<li><a href="/adm/flip?postdata=return:">$lt{'back'}</a></li> |
<li><a href="/adm/flip?postdata=return:">$lt{'back'}</a></li> |
<li><a href="/adm/navmaps">$lt{'nav'}</a></li> |
<li><a href="/adm/navmaps">$lt{'nav'}</a></li> |
</ul></body></html> |
</ul> |
ENDMENU |
ENDMENU |
|
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} |
} |
} else { |
} else { |