source: gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin/html-to-expeditee.pl.in@ 26593

Last change on this file since 26593 was 26593, checked in by davidb, 8 years ago

Tidied up on cgi-param names being used.

File size: 10.0 KB
Line 
1 #!@FULL_PERL_EXE@ -w
2
3# Need to specify the full path of Perl above, e.g. for Windows something like
4#!C:\\Perl32\\bin\\perl -w
5
6
7use strict;
8
9# Set this to 1 to work around IIS 6 craziness
10my $iis6_mode = 0;
11
12
13# IIS 6: for some reason, IIS runs this script with the working directory set to the Greenstone
14# directory rather than the cgi-bin directory, causing lots of stuff to fail
15if ($iis6_mode)
16{
17 # Change into cgi-bin directory
18 chdir("cgi-bin");
19}
20
21
22# We use require and an eval here (instead of "use") to catch any errors loading the module (for IIS)
23eval("require \"gsdlCGI.pm\"");
24if ($@)
25{
26 print STDOUT "Content-type:text/plain\n\n";
27 print STDOUT "ERROR: $@\n";
28 exit 0;
29}
30
31
32sub generate_html_form
33{
34 my ($isGSDL2,$site,$collect,$cl) = @_;
35
36 my $html_form = <<EOT;
37<html>
38 <head>
39 <title>HTML to Expeditee Frames</title>
40
41 <base href=".." />
42
43 <link type="text/css" href="ext/html-to-expeditee/jquery/css/le-frog/jquery-ui-1.8.16.custom.css" rel="stylesheet" />
44 <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-1.6.2.min.js"></script>
45 <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-ui-1.8.16.custom.min.js"></script>
46 <script type="text/javascript" src="ext/html-to-expeditee/js/gsajax-min.js"></script>
47 <script type="text/javascript" src="ext/html-to-expeditee/js/html-to-expeditee.js"></script>
48
49
50
51 </head>
52 <body>
53 <form class="ui-widget">
54 Convert the collection
55 <input type="text"
56 class="ui-corner-all" style="padding: 4px;"
57 name="collect" value="$collect" id="collect" />
58 to Expeditee frames by traversing the classifier
59 <input type="text"
60 class="ui-corner-all" style="padding: 4px;"
61 name="cl" value="$cl" id="cl" />
62
63 <input value="$site" name="site" id="site" type="hidden">
64 <input value="Go" id="go"
65 class="ui-button ui-widget ui-state-default ui-corner-all"
66 type="submit">
67
68 </form>
69 <script type="text/javascript">
70 var docOIDs = [];
71 var numDocOIDs;
72
73 \$(function() {
74 \$('#progress').progressbar();
75
76 \$('#go').button().click(function() {
77 var collect = document.getElementById("collect").value;
78 if (collect.match(/^\\s*\$/)) {
79 alert("No collection specified");
80 return false;
81 }
82
83 var cl = document.getElementById("cl").value;
84 if (cl.match(/^\\s*\$/)) {
85 alert("No classifier specified");
86 return false;
87 }
88 if (cl.match(/^\\d+\$/)) {
89 cl = "CL" + cl;
90 }
91
92 var gs2=$isGSDL2;
93
94 var url;
95 if (gs2) {
96 url = "library.cgi";
97 url += "?c="+collect +"&a=d&cl=" + cl;
98 }
99 else {
100 url = "library";
101 url += "?c="+collect +"&a=b&rt=s&s=ClassifierBrowse&cl=" + cl;
102 url += "&excerptid=gs_content";
103 }
104
105 /* processing animation */
106
107 docOIDs = [];
108 var outstandingURLs = [];
109 var visitedURLs = {};
110
111 outstandingURLs.push(url);
112 visitedURLs[url] = 1;
113
114 while (outstandingURLs.length>0) {
115 url = outstandingURLs.shift();
116
117 var clHtml = urlGetSync(url);
118
119 var aElems;
120 var workingTrav = document.getElementById("workingTraverse");
121 workingTrav.innerHTML = clHtml;
122 aElems = workingTrav.getElementsByTagName("a");
123
124
125 /* any links with a=(b|d) ... cl=??? => outstandingURLS */
126 /* any links with a=d ... d=??? => docOIDS */
127
128/*
129 var actionRE = new RegExp("(\\\\?|&)a=(?:d|b)(&|\$)");
130 var clRE = new RegExp("(\\\\?|&)cl=" + cl + "(\\\\.\\\\d+)+(&|\$)");
131 var docRE = new RegExp("(?:\\\\?|&)d=(.*?)(?:&|\$)");
132*/
133 var actionRE = new RegExp("(\\\\/)(?:document|browse)(\\\\/)");
134 var clRE = new RegExp("(\\\\/)browse\\\\/" + cl + "(\\\\/\\\\d+)+(\$)");
135 var docRE = new RegExp("(?:\\\\/)document\\\\/(.*?)(?:\$)");
136
137 for (var i=0; i<aElems.length; i++) {
138 var aElem = aElems[i];
139 var href=aElem.href;
140 if (href && href.match(actionRE)) {
141 if (href.match(clRE)) {
142 if (!visitedURLs[href]) {
143 // console.log("found a new CL line: " + href);
144 outstandingURLs.push(href);
145 visitedURLs[href] = 1;
146 }
147 }
148 else if (href.match(docRE)) {
149 if(!visitedURLs[href]){
150 var docMatch = docRE.exec(href);
151 var docOID = docMatch[1];
152
153 // console.log("found a new doc line: " + docOID);
154 visitedURLs[href] = 1;
155 docOIDs.push(docOID);
156 }
157 }
158 }
159 }
160 }
161
162 numDocOIDs = docOIDs.length;
163
164 var iframe = document.getElementById("iframe");
165
166 var docOID = docOIDs.shift();
167 //console.log("doc oid = " + docOID);
168
169 var url;
170 if (gs2) {
171 url = "library.cgi";
172 url += "?c="+collect +"&a=d&d=" + docOID;
173 }
174 else {
175 url = "library";
176 url += "?c="+collect +"&a=d&d=" + docOID;
177
178 /** The line below has been commented out. This is because the incorrect page is being loaded up in the iframe (i.e. just the document image and heading is being displayed but not any html customizations made in the collectionConfig.xml file**/
179 //url += "&ed=1&dt=hierarchy";
180 // url += "&excerptid=gs_content";
181 }
182
183 url += "&p.showExpediteeAttributes=1";
184
185 /* load iframe with document drawn from Greenstone collection */
186 iframe.src = url;
187
188 var progressbar = document.getElementById("progressbar");
189 progressbar.style.display = "block";
190
191
192 return false; });
193 });
194
195 function pageLoaded()
196 {
197 var iframe = document.getElementById("iframe");
198
199 if (iframe.src) {
200 if (iframe.style.display != "block") {
201 iframe.height = "90%";
202 iframe.style.display = "block";
203 }
204
205 var iframeDoc;
206 if ( iframe.contentDocument )
207 { /* FF */
208 iframeDoc = iframe.contentDocument;
209 }
210 else if ( iframe.contentWindow )
211 { /* IE */
212 iframeDoc = iframe.contentWindow.document;
213 }
214
215 var frameID = (numDocOIDs - docOIDs.length);
216 var progressPercent = frameID/numDocOIDs * 100;
217
218 \$(function() {
219 \$('#progressbar').progressbar({ value: progressPercent })
220 });
221
222 var gsContent = iframeDoc.getElementById("gs_content");
223
224 /*
225 var gsContentPos = getElementPosition(gsContent);
226 var pxl = gsContentPos.xl;
227 var pxr = gsContentPos.xr;
228 */
229
230 var expFrameTree = htmlToExpeditee(gsContent);
231
232 var expFrame = JSON.stringify(expFrameTree);
233 //alert(expFrame);
234
235 var collect = document.getElementById("collect").value;
236 var site = document.getElementById("site").value;
237
238 var url = "cgi-bin/html-to-expeditee.pl";
239 var params = "c=" + collect;
240 if (site.match(/\\w/)) {
241 params += "&site=" + site;
242 }
243 params += "&a=generate-frame&fn=" + frameID;
244 params += "&json=" + escape(expFrame);
245
246 var clHtml = urlPostSync(url,params);
247
248 if (!clHtml.match(/html-to-expeditee saved frame/)) {
249 alert("Error processing url: " + url);
250 }
251
252 if (docOIDs.length>0) {
253 var docOID = docOIDs.shift();
254
255 // console.log("doc oid = " + docOID);
256
257 // is the following line used ????
258 var cl = document.getElementById("cl").value;
259
260 var gs2 = $isGSDL2;
261 var url;
262
263 if (gs2) {
264 url = "library.cgi";
265 url += "?c="+collect +"&a=d&d=" + docOID;
266 }
267 else {
268 url = "library";
269 url += "?c="+collect +"&a=d&d=" + docOID;
270
271 /** Refer to comment earlier in this code in regards to the commented out line below.**/
272 //url += "&ed=1&dt=hierarchy";
273 // url += "&excerptid=gs_content";
274 }
275
276 url += "&p.showExpediteeAttributes=1";
277
278 iframe.src = url;
279 }
280 else {
281 var progressbar = document.getElementById("progressbar");
282 progressbar.style.display = "none";
283
284 iframe.style.display = "none";
285 delete iframe.src;
286 }
287 }
288
289 }
290
291 </script>
292
293 <div id="progressbar" width="100%"
294 style="display: none; margin: 10px; height: 10px;"></div>
295 <div id="workingTraverse" style="display: none"></div>
296
297 <hr style="margin: 10px;">
298
299 <iframe width="100%" id="iframe" style="display: none;"
300 onload="pageLoaded()"></iframe>
301
302 </body>
303</html>
304EOT
305
306 print "Content-type:text/html\n\n";
307 print $html_form;
308}
309
310sub main
311{
312
313# $ENV{'QUERY_STRING'} = "a=...";set-import-metadata&c=espresso-music&d=HASH012d6f72cde5dc48162f4a1d.1&metaname=annotation&metapos=0&metavalue=adfadfad";
314# $ENV{'REQUEST_METHOD'} = "GET";
315
316 my $gsdl_cgi = new gsdlCGI();
317
318 # Load the Greenstone modules that we need to use
319 $gsdl_cgi->setup_gsdl();
320
321 my $gsdlhome = $ENV{'GSDLHOME'};
322 $gsdl_cgi->checked_chdir($gsdlhome);
323
324 require cgiactions::HtmlToExpediteeAction;
325
326 # Useful debug statement for seeing what packages have been included
327#### printf("%-45s%-s\n",$_,$INC{$_}) foreach (sort keys %INC);
328
329 $gsdl_cgi->parse_cgi_args();
330
331 # We don't want the gsdlCGI module to return errors and warnings in XML
332 $gsdl_cgi->{'xml'} = 0;
333
334 my $fn = $gsdl_cgi->clean_param("fn"); # frame number
335
336 if (defined $fn) {
337
338 my $action = new HtmlToExpediteeAction($gsdl_cgi,$iis6_mode);
339
340 $action->do_action();
341 }
342 else {
343 # generate form, pre-filled out with any useful values such
344 # as the collection and classifier value
345
346 my $collect = $gsdl_cgi->clean_param("collect");
347 my $cl = $gsdl_cgi->clean_param("cl");
348
349 # Establish collect_dir using defining 'site' along the way if GS3
350
351 my $site = undef;
352 my $isGSDL2 = undef;
353
354 if ($gsdl_cgi->greenstone_version() == 2) {
355 $isGSDL2 = 1;
356 }
357 else {
358 $isGSDL2 = 0;
359
360 # GS3 (and possible future versions) make use of 'site'
361 $site = $gsdl_cgi->clean_param("site");
362 if (!defined $site) {
363 $gsdl_cgi->generate_error("No site specified.");
364 }
365 }
366
367 generate_html_form($isGSDL2,$site,$collect,$cl);
368 }
369}
370
371
372
373&main();
Note: See TracBrowser for help on using the repository browser.