Changeset 26694


Ignore:
Timestamp:
2013-01-11T18:27:42+13:00 (9 years ago)
Author:
davidb
Message:

These scripts will now search the processed GSDL document's xml for frame number and assocfilepath values.

Location:
gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin/export-individual-expeditee.pl.in

    r26632 r26694  
    44#!C:\\Perl32\\bin\\perl -w
    55
    6 ##
    7 # This is used for exporting individual Greenstone
    8 # documents to Expeditee. To export entire collections,
    9 # use html-to-expeditee.pl
    10 ##
    116use strict;
    127my $iis6_mode = 0;
     
    2722sub display_output
    2823{
    29     my($docID,$c,$assocfilepath,$site,$fn,$found) = @_;
     24    my($docID,$c,$assocfilepath,$site) = @_;
    3025   
    3126    my $iframeURL = "library/collection/$c/document/$docID"."?p.showAssocFilePath=1";
    3227   
    33     #Render an html page to display & export item.
     28    #Render an html page to display and export item.
    3429    my $html = <<EOT;
    3530<html>
    36     <head>
    37         <title>Export Item to Expeditee</title>
    38         <base href=".."/>
    39        
    40         <link type="text/css" href="ext/html-to-expeditee/jquery/css/le-frog/jquery-ui-1.8.16.custom.css" rel="stylesheet"/>
    41         <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-1.6.2.min.js"></script>
    42         <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-ui-1.8.16.custom.min.js"></script>
    43         <script type="text/javascript" src="ext/html-to-expeditee/js/html-to-expeditee.js"></script>
    44         <script type="text/javascript" src="ext/html-to-expeditee/js/gsajax-min.js"></script>
    45        
    46         <style type="text/css">
     31<head>
     32    <title>Export Document to Expeditee</title>
     33    <base href=".."/>
     34
     35    <link type="text/css" href="ext/html-to-expeditee/jquery/css/le-frog/jquery-ui-1.8.16.custom.css" rel="stylesheet"/>
     36    <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-1.6.2.min.js"></script>
     37    <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-ui-1.8.16.custom.min.js"></script>
     38    <script type="text/javascript" src="ext/html-to-expeditee/js/html-to-expeditee.js"></script>
     39    <script type="text/javascript" src="ext/html-to-expeditee/js/gsajax-min.js"></script>
     40   
     41    <style type="text/css">
    4742        body{
    4843            font-family: Arial;
    4944            font-size: 16px;
    5045            color: #000;
     46    }
     47    </style>
     48    <script type="text/javascript">
     49        function load(){
     50   
     51            var iframe = document.getElementById("iframe");
     52           
     53            if(iframe.style.display != "block"){
     54                iframe.height = "90%";
     55                iframe.style.display = "block";
     56            }
     57           
     58            var iframeDoc;
     59           
     60            if(iframe.contentDocument){
     61                /* Firefox and Chrome */
     62                iframeDoc = iframe.contentDocument;
     63            }else if(iframe.contentWindow){
     64                /* IE */
     65                iframeDoc = iframe.contentWindow.document;
     66            }
     67           
     68            var gsContent = iframeDoc.getElementById("gs_content");
     69            var xmlUrl = iframe.src + "&o=xml";
     70           
     71            var frameNum = getMetadata(xmlUrl,'frameID');
     72           
     73            if(frameNum === null){
     74                //use -1 as default, to change later.
     75                frameNum = -1;
     76            }
     77           
     78            //Check for assocfilepath
     79            var assocElem = iframeDoc.getElementById('assocfilepath');
     80            var assoc = null;
     81                       
     82            if(assocElem === undefined || assocElem === null){
     83                assoc = getMetadata(xmlUrl,'assocfilepath');
     84            }
     85           
     86            var expFrameTree = htmlToExpeditee(gsContent);
     87            var expFrame = JSON.stringify(expFrameTree);
     88           
     89            var site = "$site";
     90            var url = "cgi-bin/export-individual-expeditee.pl";
     91            var params = "c=" + "$c";
     92           
     93            if(site.match(/\\w/)){
     94                params += "&site=" + site;
     95            }
     96           
     97            params += "&a=generate-frame&fn=" + frameNum;
     98            params += "&json=" + escape(expFrame);
     99           
     100            //Add an assocfilepath param
     101            if(assoc !== null){
     102                params += "&assoc=" + assoc;
     103            }
     104           
     105            var request = urlPostSync(url,params);
     106           
     107            alert("Document has been successfully exported to Expeditee. The corresponding Expeditee frame can be found in the collection's export directory at: " + frameNum + ".exp");
     108           
    51109        }
    52         </style>
    53     <script type="text/javascript">
    54     function load(){
    55    
    56         var iframe = document.getElementById("iframe");
    57         if(iframe.style.display != "block"){
    58             iframe.height = "90%";
    59             iframe.style.display = "block";
     110       
     111        function getMetadata(xmlUrl,nameValue){
     112   
     113            var metadata = null;
     114       
     115            \$.ajax({
     116                type: "GET",
     117                async: false,
     118                url: xmlUrl,
     119                dataType: "xml",
     120                success: function(xml){
     121                               
     122                \$(xml).find('metadata').each(function(){
     123                   
     124                    var name = \$(this).attr('name');
     125                   
     126                    if(name === nameValue){
     127                       
     128                        if(metadata === null){
     129                            metadata = \$(this).text();
     130                            //console.log(metadata);
     131                        }
     132                   
     133                    }   
     134                });
     135               
     136            }
     137           
     138        });
     139       
     140        return metadata;
    60141        }
    61        
    62         var iframeDoc;
    63         if( iframe.contentDocument){
    64             /* Firefox & Chrome */
    65             iframeDoc = iframe.contentDocument;
    66         }else if(iframe.contentWindow){
    67             /* IE */
    68             iframeDoc = iframe.contentWindow.document;
    69         }
    70        
    71         var gsContent = iframeDoc.getElementById("gs_content");
    72                        
    73         //hide rightSidebar div
    74         var rightSidebar = iframeDoc.getElementById("rightSidebar");
    75         if(rightSidebar !== undefined){
    76             rightSidebar.style.display = "none";
    77         }
    78        
    79         var expFrameTree = htmlToExpeditee(gsContent);
    80         var expFrame = JSON.stringify(expFrameTree);
    81        
    82         var site = "$site";
    83         var url = "cgi-bin/export-individual-expeditee.pl";
    84         var params = "c=" + "$c";
    85        
    86         if(site.match(/\\w/)){
    87             params += "&site=" + site;
    88         }
    89         params += "&a=generate-frame&fn=" + "$fn";
    90         params += "&found=" + "$found";
    91         params += "&json=" + escape(expFrame);
    92        
    93         var request = urlPostSync(url,params);
    94        
    95         alert("Document has been successfully exported to Expeditee. It can be found in the collection's export directory at: $fn.exp");
    96     }
    97142    </script>
    98     </head>
     143   
    99144    <body>
    100145   
    101     <p id="msg">Exporting following document to Expeditee... </p>
     146        <p id="msg">Exporting following document to Expeditee... </p>
    102147   
    103148    <hr style="margin: 10px;"/>
    104149   
    105150    <!-- Load up an iframe to display URL in-->
    106     <div align="center"><iframe id="iframe" width="1000px" height="90%" src="$iframeURL" onload="load();"></iframe</div>
    107    
     151    <div align="center"><iframe id="iframe" width="1000px" height="90%" src="$iframeURL" onload="load();"></iframe></div>
    108152    </body>
    109 </html>
     153    </html>
    110154EOT
    111155    print "Content-type:text/html\n\n";
     
    113157}
    114158
    115 ##For debugging.
    116 sub check{
    117 
    118     my($check1,$check2,$check3,$check4,$check5) = @_;
    119 
    120     print "Content-type:text/html\n\n";
    121     print $check1;
    122     print $check2;
    123     print $check3;
    124     print $check4;
    125     print $check5;
    126 }
    127 
    128159sub main
    129160{
     
    135166    my $gsdlhome = $ENV{'GSDLHOME'};
    136167    $gsdl_cgi->checked_chdir($gsdlhome);
    137    
    138     #require cgiactions::HtmlToExpediteeAction;
     168
    139169    require cgiactions::ExpediteeExportAction;
    140170    $gsdl_cgi->parse_cgi_args();
     
    143173   
    144174    my $fn = $gsdl_cgi->param("fn");
    145 
     175   
    146176    if(defined $fn){
    147177       
    148178        my $site = $gsdl_cgi->clean_param("site");
    149179        my $c = $gsdl_cgi->clean_param("c");
    150         my $a = $gsdl_cgi-> clean_param("a");
     180        my $a = $gsdl_cgi->clean_param("a");    #assocfilepath
     181       
    151182        my $json = $gsdl_cgi->clean_param("json");
    152         my $found = $gsdl_cgi->clean_param("found");
    153         #check($site,$c,$a,$json,$found);
    154183       
    155184        my $action = new ExpediteeExportAction($gsdl_cgi,$iis6_mode);
    156185        $action->do_action();
    157186       
    158         #my $action = new HtmlToExpediteeAction($gsdl_cgi,$iis6_mode);
    159         #$action->do_action();
    160187    }else{
    161188       
    162         printf("fn not defined\n");
    163189        my $docID = $gsdl_cgi->clean_param("docID");
    164190        my $c = $gsdl_cgi->clean_param("c");
    165191        my $assocfilepath = $gsdl_cgi->clean_param("assocfilepath");
    166192        my $site = $gsdl_cgi->clean_param("site");
    167        
     193
    168194        if(!defined $site){
    169195            $gsdl_cgi->generate_error("No site specified.");
    170196        }
    171197       
    172         #Open export directory
    173         my $collect_dir = $gsdl_cgi->get_collection_dir($site);
    174         my $export_dir = &util::filename_cat($collect_dir,$c,"export");
    175        
    176         my $frameInf = "$export_dir\\frame.inf";
    177         my $fn = "";
    178         my @files;
    179        
    180         #check if export directory exists otherwise create it.
    181         if(-d $export_dir){
    182             opendir DIR, $export_dir or die "cannot open dir $export_dir: $!";
    183             @files = readdir DIR;
    184             closedir DIR;
    185         }else{
    186             print "Reached!\n";
    187             &util::mk_dir($export_dir);
    188            
    189             my $zeroFrame = "0.exp";
    190             open(ZERO_FRAME,">>$export_dir\\$zeroFrame") || die "$!";
    191             close ZERO_FRAME;
    192            
    193             opendir DIR, $export_dir or die "can't open dir $export_dir: $!\n";
    194             @files = readdir DIR;
    195             closedir DIR;
    196         }
    197        
    198         my $found = 0;
    199         for my $file(@files){
    200             if($file =~ m/\d/){
    201                
    202                 my $fullFile = "$export_dir\\$file";
    203                 open FILE, $fullFile or die $!;
    204                 my @lines = <FILE>;
    205                
    206                 for my $line(@lines){
    207                     if($line eq "T \@assocfilepath $assocfilepath\n"){
    208                         $fn = $fullFile;
    209                         $found = 1;
    210                     }
    211                 }
    212                 close(FILE);
    213             }
    214         }
    215        
    216         unless($found){
    217             #use frame.inf file to get file number
    218             if(-e $frameInf){
    219                
    220                 open FRAME_INF, $frameInf or die $!;
    221                 my @lines = <FRAME_INF>;
    222                
    223                 for my $line(@lines){
    224                     $fn = $line;
    225                 }
    226             }else{
    227                
    228                 print "$frameInf not found\n";
    229 
    230                 $fn = 0;
    231             }
    232         }
    233        
    234         #now get frame number out of file name
    235         my @getFrameNumArray = split('\\\\',$fn);
    236         @getFrameNumArray = reverse(@getFrameNumArray);
    237         $fn = $getFrameNumArray[0];
    238        
    239         $fn =~ s/[^0-9]//g;
    240         unless($found){
    241             $fn = $fn + 1;
    242         }
    243         #unless($found){
    244         # $fn = $fn + 1;
    245         #}
    246        
    247         print "fn = ".$fn."\n";
    248        
    249     display_output($docID,$c,$assocfilepath,$site,$fn,$found);
     198        display_output($docID,$c,$assocfilepath,$site);
    250199    }
    251    
    252200}
    253201
  • gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin/html-to-expeditee.pl.in

    r26596 r26694  
    182182         
    183183          //url += "&p.showExpediteeAttributes=1";
     184          url += "&p.showAssocFilePath=1";
    184185
    185186         
     
    213214            iframeDoc = iframe.contentWindow.document;
    214215          }
    215 
    216           var frameID = (numDocOIDs - docOIDs.length);
    217           var progressPercent = frameID/numDocOIDs * 100;
    218 
     216         
     217          var xmlUrl = iframe.src + "&o=xml";
     218         
     219          var iter = (numDocOIDs - docOIDs.length);
     220          var progressPercent = iter/numDocOIDs * 100;
     221         
     222          /*Check if a frame-id metadata element already exists,
     223          otherwise generate a new frame number based on the
     224          number of documents to process.*/
     225          var frameNum = getMetadata(xmlUrl,'frameID');
     226         
     227          if(frameNum === null){
     228            frameNum = iter;
     229            console.log("no frameNum found, use iter: " + frameNum);
     230          }else{
     231            console.log("frameNum metadata found: " + frameNum);
     232          }
     233         
    219234          \$(function() {
    220235          \$('#progressbar').progressbar({ value: progressPercent })
     
    228243          var pxr = gsContentPos.xr;
    229244          */
    230 
    231           //get assocfilepath from xml
    232           var xmlUrl = iframe.src + "&o=xml";
    233          
    234           var assoc = getAssocFilePath(xmlUrl);
     245         
     246          //Check if an assocfilepath annotation already exists on the page, otherwise obtain it from the xml.
     247          var assocElem = iframeDoc.getElementById('assocfilepath');
     248          var assoc = null;
     249         
     250          if(assocElem === undefined || assocElem === null){
     251            assoc = getMetadata(xmlUrl,'assocfilepath');
     252          }
    235253
    236254          var expFrameTree = htmlToExpeditee(gsContent);
     
    248266          }
    249267         
    250           params += "&a=generate-frame&fn=" + frameID;
     268          //params += "&a=generate-frame&fn=" + iter;
     269          params += "&a=generate-frame&fn=" + frameNum;
    251270          params += "&json=" + escape(expFrame);
    252271         
    253           //add an assocfilepath parameter
    254          
    255           if(assoc !== null && assoc !== undefined){
     272          //add an assocfilepath parameter but only if it is defined.
     273          if(assoc !== null){
    256274            params += "&assoc=" + assoc;
    257275          }
     
    288306
    289307          //url += "&p.showExpediteeAttributes=1";
    290 
    291           iframe.src = url;
     308            url += "&p.showAssocFilePath=1";
     309         
     310            iframe.src = url;
    292311          }
    293312          else {
    294           var progressbar = document.getElementById("progressbar");
    295           progressbar.style.display = "none";
    296 
    297           iframe.style.display = "none";
    298           delete iframe.src;
     313            var progressbar = document.getElementById("progressbar");
     314            progressbar.style.display = "none";
     315
     316            iframe.style.display = "none";
     317            delete iframe.src;
    299318          }
    300319      }
     
    302321      }
    303322     
    304       function getAssocFilePath(xmlUrl){
    305       var assoc = "";
     323    /**
     324    * Once this is working, remove getAssocFilePath method
     325    * This method is used at this stage to retrieve assocfilepath
     326    * and frame number metadata values from the document's xml.
     327    **/
     328    function getMetadata(xmlUrl,nameValue){
    306329     
    307       \$.ajax({
     330        var metadata = null;
     331       
     332         \$.ajax({
    308333            type: "GET",
    309334            async: false,
     
    317342                    var name = \$(this).attr('name');
    318343                   
    319                     if(name === 'assocfilepath'){
    320                         if(assoc === ""){
    321                             assoc = \$(this).text();
    322                             //console.log(assoc);
     344                    if(name === nameValue){
     345                        if(metadata === null){
     346                            metadata = \$(this).text();
     347                            //console.log(metadata);
    323348                        }
    324349                       
     
    329354           
    330355          });
    331          
    332           return assoc;
     356       
     357        return metadata;
    333358      }
    334359
Note: See TracChangeset for help on using the changeset viewer.