Guest User

OutputFilter

a guest
Nov 14th, 2019
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. package Compta::Base::Filter::html_head_and_tail ;
  2.  
  3. use strict ;
  4.  
  5. use utf8 ;
  6.  
  7. use Apache2::Const -compile => qw(OK DECLINED) ;
  8.  
  9. sub handler {
  10.  
  11. my $f = shift ;
  12.  
  13. my $r = $f->r ;
  14.  
  15. #traiter toutes les URL contenant /base;
  16. #rejeter le login puisqu'on a pas encore de session, et le logout puisqu'on a plus de session; on laisse aussi passer les xmlhttprequests
  17. if ( ( $r->uri !~ /base/ ) or ( $r->uri =~ /login|logout|xmlhttprequest/ ) ) {
  18.  
  19. return Apache2::Const::DECLINED ;
  20.  
  21. } elsif ( $r->uri =~ /downloads/ ) {
  22.  
  23. #force le navigateur a télécharger le dossier plutôt que l'ouvrir directement
  24. $r->headers_out->set('Content-Disposition' => 'attachment' ) ;
  25.  
  26. return Apache2::Const::DECLINED ;
  27.  
  28. } else {
  29.  
  30. #accumulation du contenu des invocations précédentes du filtre
  31. my $content = $f->ctx ;
  32.  
  33. while ($f->read(my $buffer)) {
  34.  
  35. #pour la 1ère invocation, on veut ajouter <div class=rightbox> pour positionner le contenu à droite du menu (leftbox)
  36. unless ( defined $content ) {
  37.  
  38. #en-tête de page : fiscal_year
  39. my $fiscal_year_href = '/base/fiscal_year?fiscal_year=' . $r->pnotes('session')->{fiscal_year} ;
  40.  
  41. #on utilise la date de fin de l'exercice comme référence
  42. #donc dans les cas où la date de début n'est pas le premier janvier, il faut utiliser fiscal_year + 1 pour désigner l'exercice
  43. my $exercice = ( $r->pnotes('session')->{fiscal_year_offset} ) ? $r->pnotes('session')->{fiscal_year} + 1 : $r->pnotes('session')->{fiscal_year} ;
  44.  
  45. $content = '<div class=rightbox><h1 style="margin: 0; text-align: center;"><a href="' . $fiscal_year_href . '">' . Encode::encode_utf8('Exercice ') . $exercice . '</a></h1>' ;
  46.  
  47. #lien de déconnection; placé sous Exercice par clear: right pour que Exercice soit bien centré
  48. my $logout = Encode::encode_utf8( '<div style="float: right; clear: right; padding: 5px; margin : 5px;">' . Encode::decode_utf8( $r->user() ) . ' <a class=nav href="/base/logout">Déconnexion</a></div>' );
  49.  
  50. $content .= $logout ;
  51.  
  52. } # unless ( defined $content ) {
  53.  
  54. #ajouter le contenu des buckets brigades de cette invocation
  55. $content .= $buffer ;
  56.  
  57. } # while ($f->read(my $buffer))
  58.  
  59. #on arrive à la fin du contenu
  60. if ($f->seen_eos) {
  61.  
  62. $content = Encode::decode_utf8( $content ) . '</div>' ;
  63.  
  64. $content = left_menu( $r ) . $content ;
  65.  
  66. #<head> section de la page html
  67. my $html_head = html_head( $r ) ;
  68.  
  69. #</body> tag
  70. my $html_tail = html_tail( $r ) ;
  71.  
  72. $content = $html_head . $content . $html_tail ;
  73.  
  74. #reset du header 'Content-Length'
  75. my $len = length $content ;
  76.  
  77. $f->r->headers_out->set('Content-Length', $len) ;
  78.  
  79. $f->print($content) if defined $content ;
  80.  
  81. } else {
  82.  
  83. #ce n'est pas fini, on stocke dans l'accumulateur
  84. $f->ctx($content) if defined $content ;
  85.  
  86. } # if ($f->seen_eos)
  87.  
  88. return Apache2::Const::OK ;
  89.  
  90. } # if ( ( $r->uri !~ /base/ ) or ( $r->uri =~ /login|logout/ ) ) {
  91.  
  92. }
  93.  
  94.  
  95. 1 ;
  96.  
  97.  
  98. sub html_head {
  99.  
  100. my $r = shift;
  101.  
  102. #on utilise html 5
  103. my $content = qq | <!DOCTYPE html>
  104. <html>
  105. <head>
  106. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  107. <link href="/style/style.css" rel="stylesheet" type="text/css">
  108. <link href="/style/print.css" rel="stylesheet" type="text/css" media="print">
  109. <script src="/javascript/entry.js"></script>
  110. <title>Compta</title>
  111. </head>
  112.  
  113. <body> | ;
  114.  
  115. return $content ;
  116.  
  117. }
  118.  
  119.  
  120. sub html_tail {
  121.  
  122. my $r = shift;
  123.  
  124. my $content ;
  125.  
  126. #inclure le dump de la session dans la page? le paramètre session->{dump} est réglé dans le headerparser get_session_id.pm
  127. if ( $r->pnotes('session')->{dump} == 1 ) {
  128.  
  129. use Data::Dumper ;
  130.  
  131. $content .= '<div class=rightbox><pre>' . Data::Dumper::Dumper( $r->pnotes('session') ) . '</pre></div>';
  132.  
  133. }
  134.  
  135. $content .= '</body></html>' ;
  136.  
  137. return $content ;
  138.  
  139. }
  140.  
  141.  
  142. sub left_menu {
  143.  
  144. my $r = shift ;
  145.  
  146. my $req = Apache2::Request->new($r) ;
  147.  
  148. my $content = '
  149.  
  150. <div class=logobox><a href="/" title="' . $r->hostname . '"><img style="border: 0;" src="/style/logo.png" alt="Logo"></a></div>
  151.  
  152. <!-- leftbox start -->
  153.  
  154. <div class="leftbox">
  155.  
  156. <table>
  157. <tr><td><a class=' . ( ($r->uri =~ /journal/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/journal">Journaux</a></td></tr>
  158. <tr><td><a class=' . ( ($r->uri =~ /compte/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/compte">Comptes</a></td></tr>
  159. <tr><td><a class=' . ( ($r->uri =~ /parametres/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/parametres">Paramètres</a></td></tr>
  160. <tr><td><a class=' . ( ($r->uri =~ /tva/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/tva">TVA</a></td></tr>
  161. <tr><td><a class=' . ( ($r->uri =~ /export/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/export">Export</a></td></tr>
  162. <tr><td><a class=' . ( ($r->uri =~ /liasse_fiscale/ ) ? 'selecteditem' : 'nav' ) . ' href="/base/liasse_fiscale">Liasse fiscale</a></td></tr>
  163. </table>
  164.  
  165. </div>
  166.  
  167. <!-- leftbox end -->
  168. ' ;
  169.  
  170. #export en attente
  171.  
  172.  
  173.  
  174. return $content ;
  175.  
  176. }
Advertisement
Add Comment
Please, Sign In to add comment