Changeset 36715 in spip-zone


Ignore:
Timestamp:
Mar 28, 2010, 12:09:43 AM (9 years ago)
Author:
marcimat@…
Message:

Le générateur se la pête à devenir graphique et appelé en ajax (ce qui évite somme toutes des interruptions à cause de temps de génération trops longs). ?page=generer_documentation_pdf pour y aller (il faut être webmestre et avoir Zpip).

Location:
_galaxie_/programmer.spip.org/plugin_pdf
Files:
3 added
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _galaxie_/programmer.spip.org/plugin_pdf/contenu/page-generer_documentation_pdf.html

    r35969 r36715  
    11<?php
    2 define('_DOCUMENTATION_PDF_ECHO', true);
    3 $generer_documentation_pdf = charger_fonction('generer_documentation_pdf','genie');
    4 $generer_documentation_pdf(0);
     2// soyons très violent
     3if (!autoriser('webmestre')) {
     4        include_spip('inc/minipres');
     5        echo minipres();
     6} else {
     7?>
     8[(#REM)
     9        Generer une documentation
     10        pour un secteur par langue.
     11]
    512
     13[(#VAL{genie/generer_documentation_pdf}|include_spip|oui)]
     14
     15<h1>Documentation : générer les PDF</h1>
     16
     17<B_langues>
     18#TOTAL_BOUCLE langues / [(#VAL|formats_pdf|count)] PDF à générer par langue.
     19[(#SET{total, [(#TOTAL_BOUCLE|mult{[(#VAL|formats_pdf|count)]})]})]
     20<div id='generateur' data-total='#GET{total}'>
     21<ul>
     22<BOUCLE_langues(RUBRIQUES){racine}{par num titre, titre}>
     23        <BOUCLE_formats(POUR){tableau (#VAL|formats_pdf)}>
     24        <li data-rubrique='#ID_RUBRIQUE' data-format='#VALEUR'>#TITRE</li>
     25        </BOUCLE_formats>
     26</BOUCLE_langues>
     27</ul>
     28</div>
     29</B_langues>
     30
     31<style type='text/css'>
     32#avancement {
     33                width:100%; height: 30px;
     34                margin-top:2em;
     35                border:1px solid #666; background:#f9f9f9;
     36                -moz-border-radius:15px; -webkit-border-radius:15px; border-radius:15px;
     37                position:relative;}
     38#realise {
     39        background:#ff9933; color:#fff; font-size:18px;
     40        -moz-border-radius:15px; -webkit-border-radius:15px; border-radius:15px;
     41        height:30px; overflow:hidden;
     42}
     43#realise span {
     44        padding-left:10px; padding-top:5px;
     45        display:inline-block;
     46}
     47#informations {padding-left:10px;}
     48#generateur .erreur {color:red; background:#ffc6ac;}
     49#generateur .image_loading {position:absolute; right:8px; top:8px;}
     50</style>
     51
     52<script type='text/javascript'>
     53(function($){
     54jQuery(window).load(function(){
     55        var gen = $('#generateur');
     56        var la_pile = new Array();
     57        var avancement = 0;
     58       
     59        gen.find('ul').hide();
     60        total = gen.attr('data-total');
     61        if (total > 0) {
     62                pourcentage = 100 / total;
     63                $("<div id='avancement'></div>")
     64                        .append("<div id='realise'><span id='pourcentage'></span></div>")
     65                        .appendTo(gen);
     66                $("#avancement") .after("<p id='informations'></p>");
     67                $("#realise").after('<span class="image_loading"></span>')
     68                        .parent().animeajax().css('opacity','1')
     69                        .find('.image_loading, #pourcentage, #realise').css('opacity','1');
     70                definir_avancement(0);
     71
     72                var i=0;
     73                gen.find('li').each(function(){
     74                        li = $(this);
     75                        preparer_pdf({
     76                                rubrique: li.attr('data-rubrique'),
     77                                format: li.attr('data-format'),
     78                                titre: li.html(),
     79                                pos: ++i
     80                        });
     81                });
     82                lancer_pdf();
     83        } else {
     84                $("<p>Il n'y a rien à faire !</p>").appendTo(gen);
     85        }
     86
     87
     88        function preparer_pdf(info) {
     89                pile(info);
     90        }
     91       
     92        function lancer_pdf() {
     93                // s'il y a quelque chose a faire
     94                if (data = pile()) {
     95                        texte =
     96                                "Rubrique : " + data.titre +
     97                                " - Format : " + data.format +
     98                                " - Rang : " + data.pos + ".";
     99                        $("#informations").html(texte);
     100                       
     101                        $.ajax({
     102                                url: "[(#URL_PAGE{contenu/inc-generer_pdf})]",
     103                                data: {
     104                                        "id_rubrique":data.rubrique,
     105                                        "format":data.format,
     106                                },
     107                                success: function(html){
     108                                        definir_avancement(1);
     109                                        lancer_pdf();
     110                                },
     111                                error: function(XMLHttpRequest, textStatus, errorThrown) {
     112                                        $('#pourcentage').after(" <span class='erreur'>Caramba ! Encore raté !");
     113                                        $('#avancement .image_loading').remove();
     114                                }
     115                        });
     116                } else {
     117                        // c'est fini
     118                        $('#avancement .image_loading').remove();
     119                }
     120        }
     121
     122        function definir_avancement(avance) {
     123                if (avance) avancement++;
     124                else avancement = 0;
     125               
     126                pourcentage = $('#pourcentage').html(avancement + " / " + total);
     127                pourcentage.parent().css('width', Math.floor(100 / total * avancement) + '%');
     128        }
     129       
     130        function pile(data) {
     131                if (data) {
     132                        la_pile.push(data);
     133                } else {
     134                        return la_pile.shift();
     135                }
     136        }
     137});
     138})(jQuery);
     139</script>
     140
     141<?php
     142// fin de l'autorisation
     143}
    6144?>
  • _galaxie_/programmer.spip.org/plugin_pdf/genie/generer_documentation_pdf.php

    r33189 r36715  
    2121}
    2222
    23 $GLOBALS['pdf_todo'] = array(
    24         "a4", "a4nb",
    25         "a5", "a5nb",
    26 #       "17x22", "17x22nb",
    27 #       "b5", "b5nb",
    28 );
     23/**
     24 * Retourne un tableau des differents formats
     25 * de PDF a generer. Ces formats correspondent
     26 * a des noms de CSS existantes dans le répertoire css/
     27 * sans l'extension, tel que "a4".
     28 *
     29 * @return array la liste des formats
     30**/
     31function formats_pdf() {
     32        $pdf_todo = array(
     33                "a4", "a4nb",
     34                "a5", "a5nb",
     35        #       "17x22", "17x22nb",
     36        #       "b5", "b5nb",
     37        );
     38        return $pdf_todo;
     39}
     40
    2941
    3042function genie_generer_documentation_pdf_dist($t) {
    3143        docpdf_log('Genie documentation pdf en marche !');
    3244
    33         foreach ($GLOBALS['pdf_todo'] as $nom) {
     45        sous_repertoire(_DIR_DOCUMENTATION_PDF);
     46       
     47        foreach (formats_pdf() as $nom) {
    3448                generer_les_pdf(_DIR_DOCUMENTATION_PDF . $nom . '/' , $nom, false);
    3549        }
     
    5973                docpdf_log('Creation des pdf par secteur de langue.');
    6074                // selection des secteurs de langue
    61                 $secteurs = sql_allfetsel(array('lang', 'id_rubrique','date'), 'spip_rubriques', 'id_parent='.sql_quote(0));
     75                $secteurs = sql_allfetsel(array('lang', 'id_rubrique', 'date'), 'spip_rubriques', array(
     76                        'id_parent = ' . sql_quote(0),
     77                        'statut = ' . sql_quote('publie')));
    6278                foreach ($secteurs as $secteur) {
    63                         $date_max = sql_getfetsel('date_modif', 'spip_articles', array('id_secteur='.sql_quote($secteur['id_rubrique'], 'statut=' . sql_quote('publie'))), '', 'date_modif DESC', '1');
     79                        $date_max = sql_getfetsel('date_modif', 'spip_articles', array('id_secteur='.sql_quote($secteur['id_rubrique']), 'statut=' . sql_quote('publie')), '', 'date_modif DESC', '1');
    6480                        $date_max = max($secteur['date'], $date_max);
    65                         generer_chapitres_et_livre_pdf($dir, $format, $generer_chapitres, $secteur['id_rubrique'], $secteur['lang'], $secteur['date']);
     81                        generer_chapitres_et_livre_pdf($dir, $format, $generer_chapitres, $secteur['id_rubrique'], $secteur['lang'], $date_max);
    6682                }
    6783        } else {
     
    7187        }
    7288}
     89
     90
     91
     92function generer_un_livre_pdf($id_secteur, $format) {
     93        $secteur = sql_fetsel(array('lang', 'id_rubrique', 'date'), 'spip_rubriques', array(
     94                        'id_rubrique = ' . sql_quote($id_secteur),
     95                        'statut = ' . sql_quote('publie')));
     96        if (!$secteur) {
     97                return false;
     98        }
     99        $date_max = sql_getfetsel('date_modif', 'spip_articles', array('id_secteur='.sql_quote($id_secteur), 'statut=' . sql_quote('publie')), '', 'date_modif DESC', '1');
     100        $date_max = max($secteur['date'], $date_max);
     101        $dir = _DIR_DOCUMENTATION_PDF . $format . '/';
     102        sous_repertoire(_DIR_DOCUMENTATION_PDF);
     103        sous_repertoire($dir);
     104
     105        // appeler le Grand Prince a la rescousse
     106        include_spip('lib/prince/prince');
     107       
     108        generer_chapitres_et_livre_pdf($dir, $format, false, $id_secteur, $secteur['lang'], $date_max);
     109}
     110
    73111
    74112
  • _galaxie_/programmer.spip.org/plugin_pdf/plugin.xml

    r31890 r36715  
    44_ &#169; 2009 - Distribu&#233; sous licence GPL
    55        </auteur>
    6         <version>1.1</version>
     6        <version>1.2</version>
    77        <etat>stable</etat>
    88    <description>
Note: See TracChangeset for help on using the changeset viewer.