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 |
|
---|
7 | use strict;
|
---|
8 |
|
---|
9 | # Set this to 1 to work around IIS 6 craziness
|
---|
10 | my $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
|
---|
15 | if ($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)
|
---|
23 | eval("require \"gsdlCGI.pm\"");
|
---|
24 | if ($@)
|
---|
25 | {
|
---|
26 | print STDOUT "Content-type:text/plain\n\n";
|
---|
27 | print STDOUT "ERROR: $@\n";
|
---|
28 | exit 0;
|
---|
29 | }
|
---|
30 |
|
---|
31 |
|
---|
32 | sub 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>
|
---|
304 | EOT
|
---|
305 |
|
---|
306 | print "Content-type:text/html\n\n";
|
---|
307 | print $html_form;
|
---|
308 | }
|
---|
309 |
|
---|
310 | sub 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();
|
---|