1: # The LearningOnline Network with CAPA
2: # Handler to resolve ambiguous file locations
3: #
4: # (TeX Content Handler
5: #
6: # 05/29/00,05/30,10/11 Gerd Kortemeyer)
7: #
8: # 10/11 Gerd Kortemeyer
9:
10: package Apache::lonambiguous;
11:
12: use strict;
13: use Apache::lonnet;
14: use Apache::Constants qw(:common REDIRECT);
15: use GDBM_File;
16:
17:
18: # ----------------------------------------------------------- Could not resolve
19:
20: sub getlost {
21: my $r=shift;
22: $r->content_type('text/html');
23: $r->send_http_header;
24: $r->print('<head><title>Unknown Error</title><body bgcolor="#FFFFFF">'.
25: '<h1>LON-CAPA</h1>Could not handle ambiguous file reference.</body></html>');
26: }
27:
28: # ================================================================ Main Handler
29:
30: sub handler {
31: my $r=shift;
32:
33: if ($r->header_only) {
34: $r->content_type('text/html');
35: $r->send_http_header;
36: return OK;
37: }
38:
39: # ---------------------------------------------------------- Do we have a case?
40:
41: my $thisfn;
42: unless (($thisfn=$ENV{'request.ambiguous'})&&($ENV{'request.course.fn'})) {
43: getlost($r);
44: return OK;
45: }
46:
47: # ---------------------------------- Should this file have been part of a page?
48:
49: $thisfn=&Apache::lonnet::declutter($thisfn);
50: my %hash;
51: my %bighash;
52: my $syval='';
53:
54: if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',
55: &GDBM_READER,0640)) {
56: $syval=$hash{$thisfn};
57: untie(%hash);
58: }
59: # ---------------------------------------------------------- There was an entry
60: if ($syval) {
61: if ($syval=~/\_$/) {
62: # ----------------------------------- Okay, this should have appeared on a page
63: $syval=~s/\_\_\_$//;
64: $r->content_type('text/html');
65: $r->header_out(Location =>
66: 'http://'.$ENV{'HTTP_HOST'}.'/res/'.$syval);
67: return REDIRECT;
68: } else {
69: # There is not really a problem (???), but cannot go back without endless loop
70: getlost($r);
71: return OK;
72: }
73: }
74:
75: # ------------------------------------------------ Would be standalone resource
76:
77: if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
78: &GDBM_READER,0640)) {
79: # ---------------------------------------------- Get ID(s) for current resource
80: my $ids=$bighash{'ids_/res/'.$thisfn};
81: if ($ids) {
82: # ------------------------------------------------------------------- Has ID(s)
83: my @possibilities=split(/\,/,$ids);
84: my $couldbe='';
85: map {
86: if (&allowed('bre',$bighash{'src_'.$_})) {
87: if ($couldbe) {
88: $couldbe.=','.$_;
89: } else {
90: $couldbe=$_;
91: }
92: }
93: } @possibilities;
94: if ($couldbe) {
95: @possibilities=split(/\,/,$couldbe);
96: if ($#possibilities>0) {
97: # ----------------------------------------------- Okay, really multiple choices
98: $r->content_type('text/html');
99: $r->send_http_header;
100: $r->print(
101: '<head><title>Choose Location</title><body bgcolor="#FFFFFF">'.
102: '<h1>LON-CAPA</h1>Cool.</body></html>');
103: untie(%bighash);
104: return OK;
105: }
106: }
107: }
108: untie(%bighash);
109: }
110:
111: # ------------------------------------ This handler should not have been called
112: getlost($r);
113: return OK;
114: }
115:
116: 1;
117: __END__
118:
119:
120:
121:
122:
123:
124:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>