Changeset 26694 for gs3-extensions

Show
Ignore:
Timestamp:
11.01.2013 18:27:42 (6 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 modified

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