root/gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin/html-to-expeditee.pl.in @ 26519

Revision 26519, 10.0 KB (checked in by davidb, 7 years ago)

Commented out lines which add "&ed=1&dt=hierarchy" to a Greenstone document's URL. These parameters were removed as they were displaying a page in the iframe which contained only the document image and heading but not any html customizations made to the document page.

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" 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("c");   
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 browser.