Module graphique de téléchargement pour DocMan

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Module graphique de téléchargement pour DocMan

    Nom : DocMan Graph
    Type : Module
    Version : 0.3 (beta)
    Auteur : Christophe CROSAZ
    Copyright : Joomlagora
    Licence : GPL
    Compatibilité : Joomla! 1.0.12
    Disponibilité : sur le dépôt de Joomlagora.

    Salut la communauté,

    Je n'avais pas réussi à trouver mon bonheur dans toute la panoplie de modules qui existent déjà pour DocMan, alors je me suis décidé à en développer un pour répondre à un besoin (enfin une envie plutôt).

    En gros, mon idée de départ était d'avoir un graphique des téléchargements quotidien d'un dépôt DocMan, un peu comme ce qui est disponible sur la forge Joomla! :


    Pour ne pas faire un module trop compliqué, je ne me suis pas appuyé sur des bibliothèques graphique du style jpGraph ou Artichow, mais sur un petit script tout sympathique basé sur les fonctions gd : phpgraph.
    Du coup, les possibilités en sont d'autant réduite en terme de type de graphique, puisque ce module ne génère que des images du type histogramme, mais c'est suffisant pour notre besoin
    Quelques paramètres bien spécifiques peuvent être changer dans le source du module, mais sinon voici une liste des paramètres disponibles :
    • Image name : nom de l'image
    • Image path : dossier de stockage
    • Image width : largeur en pixel
    • Image height : hauteur en pixel
    • Image padding : padding (gauche,droite,haut,bas)
    • Last Date : dernière date de calcul, doit être égale à hier après un calcul... vider pour forcer un recalcul
    • View Period : Période d'affichage en jour (nb de valeur)
    • Title : Titre sur l'image
    • Title color : Couleur du titre (format HTML #FFFFFF)
    • Background color : Couleur de fond, pas pris en compte si transparence (format HTML #FFFFFF)
    • Color1 : Couleur 1 (format HTML #FFFFFF)
    • Color2 : Couleur 2, pour ne pas dégrader mettre la même couleur que couleur 1 (format HTML #FFFFFF)
    • Outline color : Couleur des bords du graph (format HTML #FFFFFF)
    • Transparence : Utiliser la transparence pour le fond.


    Merci à ceux qui pourront le tester de me faire un retour
    Dernière édition par Ccrosaz à 20/07/2007, 16h53
    Christophe
    Joomla newb but Joomla fan

  • #2
    Alors, pour ceux qui seraient intéressé, sachez que la version présentée utilise la nouvelle classe PHP 'DateTime' introduite dernièrement (PHP 5 >= 5.1.0)...

    Je vais changer ça rapidement, car tous les serveurs ne sont pas encore à la page au niveau de l'installation, même si PHP.Net annonce la fin de vie de PHP4.
    Envoyé par http://fr2.php.net/
    PHP 4 end of life announcement
    [13-Jul-2007]
    Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.

    The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.

    For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.
    Et moi qui était content d'avoir réussi à m'en servir de cette classe non référencée dans mon IDE...
    Christophe
    Joomla newb but Joomla fan

    Commentaire


    • #3
      Version 0.4

      Bon, comme ça posait un souci d'utilisation, j'ai finalement remplacé les type DateTime par les anciens format

      Du coup, ça passe même sur les vieux serveurs
      Par contre, j'ai aussi ajouté un test sur l'existence de l'extension 'GD' (la fameuse) qui est bien évidemment utilisée pour générer le graphique.

      J'en ai profité pour ajouter la possibilité de choisir la taille de police et la position en pixel du titre. Et puis, aussi pour me faire plaisir, j'ai fait joujou avec d'autres fonctions que celles permettant de générer les rectangles, et vous pouvez donc maintenant choisir entre 3 types d'images :
      Rectangulaire


      Linéaire


      Polygonale


      En espérant que ça vous plaise
      Christophe
      Joomla newb but Joomla fan

      Commentaire


      • #4
        Miam.

        Je ne vais pas tester vu que je n'ai pas encore de dépôt en production mais je te ferai un retour dès que ce sera le cas.

        Merci Ccrosaz.
        MWIP pour les intimes

        M. W. I. Prod. (Documentations et téléchargements pour Joomla!)

        Commentaire


        • #5
          Salut Fly et MWIP,

          Merci pour vos messages, ça fait toujours plaisir de savoir qu’on ne travail pas pour rien

          Envoyé par anonyme
          Je vais intégrer ReMo car je n'utilise pas DocMan...
          Ca déjà c’est une bonne idée, mais il te faudra déjà bien regarder comment fonctionne ReMOSitory avant de pourvoir complètement l’adapter…

          Envoyé par anonyme
          La fonction getDocManDLSum() sert-elle à récupérer le nombre total de downloads depuis la table #__docman et le champs dmcounter ?
          La fonction getDocManDLSum() sert effectivement à calculer le nombre total de hit sur les documents enregistrés par DocMan, en faisant tout simplement une somme sur le champ dmcounter. Ce calcul est effectué par la requête elle même ("SELECT SUM(`dmcounter`) FROM `#__docman` ").
          La condition potentielle est de ne faire ce calcul que sur une seule catégorie, car j'avais prévu de pouvoir paramétré le module en ce sens.

          Envoyé par anonyme
          J'image que ce champs est calculé par DM à partir de la table #__docman_log ?
          Ce qu'il faut bien comprendre c'est que DocMan utilise un compteur interne pour chaque document enregistré, pour sauvegarder le nombre de hit. Les logs ne sont là que pour des raisons de sécurité ou de suivi, et dans le cas de ce module sont exploités pour savoir combien de téléchargement sont fait quotidiennement...

          Donc ce champ (`dmcounter`) n'est pas implémenté par rapport aux logs, mais directement à chaque demande de consultation (visualiser ou télécharger) sur le composant en front.

          DocMan pourrait très bien fonctionner sans la table des logs, qu’il n’utilise pas par défaut d’ailleurs.

          Envoyé par anonyme
          Est-ce pour des raisons de cohérence entre ce total et les données quotidiennes affichées que tu purges la table #__docman_log ?
          Non, j’ai décidé d’ajouté cette possibilité à cause tout simplement du nombre d’enregistrements qui peuvent être générés par les logs, puisqu’il s’en ajoute un à chaque demande de téléchargement…

          Sur Joomlagora, j’ai été surpris par exemple de constater qu’hier nous avions eu plus de 1000 hits, et du coup il y a autant d’enregistrements de plus dans la table.

          Dans ces conditions, c’est forcement une table qui doit régulièrement être purgée pour ne pas faire exploser la taille de la BDD…

          Donc en permettant de supprimer les données antérieures à celles utilisées, j’évite aux administrateurs d’avoir à gérer ces données qui peuvent ne pas leur être utiles autrement


          Maintenant, pour en revenir à ton souhait de départ, d’adapter ce module à ReMOSitory, je crois que tu peux conserver le même principe de calcul par rapport aux logs, et de faire le total des champs ‘downloads’ de chaque fichiers…
          Tu devrais pouvoir t’en sortir assez simplement en remplaçant les noms de champs et de tables…


          Une petite chose encore, j’ai récemment découvert un souci de conception dans la génération des graphiques en polygones et en lignes sur le module. Ces options ne prennent pas en compte assez de point, puisque le graphique était originalement rectangulaire, et du coup la dernière valeur de ces graphiques est constamment à 0.

          Je verrai pour corriger ça dès que possible, ou si tu as un peu de temps regarde ce que tu peux faire
          Christophe
          Joomla newb but Joomla fan

          Commentaire


          • #6
            Salut Fly,

            Jolie analyse sur le problème de calcul des graphiques polygonales, il manque effectivement une valeur pour pouvoir calculer autant de segment qu'avec un graphique en rectangle... J'en était arrivé à la même conclusion dans un poste sur Joomlagora, après avoir essayer de voir si le souci, que je ne pensais pas systématique, ne venait pas d'un décalage horaire entre les serveurs MySQL et Apache.

            Pour s'en sortir, je pensais effectivement augmenter d'un le nombre de valeur prise en compte, mais juste au niveau de la requête et de la construction du tableau. Après, j'allais modifier les formules de calcul polygonale et linéaire pour prendre en compte les valeurs x-1... Je verrai pour faire ça si tu veux rapidement.


            Pour l'histoire de la suppression des logs, c'est vrai qu'un plugin system dédié ne serait pas de trop, mais j'ai juste eu envie de simplifier la gestion en proposant de l'intégrer... Et puis par défaut ce n'est pas activé, d'ailleurs je ne l'ai pas encore en production

            Pour le titre de l'image, il manque effectivement la déclaration du titre, qui n'est actuellement utilisé que dans la fonction de génération. Il suffit comme tu l'as dit, de reprendre la déclaration de $titleText un peu plus bas.

            J'aimerai bien voir une version remository quand tu auras fini
            Je vois pour faire la modif de calcul rapidement.
            Christophe
            Joomla newb but Joomla fan

            Commentaire


            • #7
              Bon du coup j'ai craqué après ce message, et je suis allé faire les modifications que tu préconisais pour le titre et le calcul

              Du coup c'est fait
              DMGraph version 0.6, avec correction de ces soucis... sur le dépôt de Joomlagora

              Donc dans l'idée, j'ai pris en compte une valeur de plus, comme prévu, mais j'ai péféré décalé le graphique rectangle plutôt que les deux autres... Juste par ce que la boucle commence à 0, donc un x-1 ne serait pas le bienvenu

              Ci dessous le code complèt du module, pour que tu ne sois pas obligée de le téléchargé :
              Code PHP:
              ...
                  
              $title        $params->get'title''DocMan Graph' );

              ...



              /**
               * PHPgraph - simple tool for creating PNG graphs on the fly.
               * Copyright (C) 2002 Romanian Web Developers <http://rowd.org/proiecte/phpgraph/>
               * 
               * Draw the image in a file
               *
               * @param    mixed    module parameters
               * @param    string    image file path
               */
              function export_img_graph( & $params$img_file null ) {
                  global 
              $database;
                  
                  
              /**
                   * Variables definitions part
                   */
                  
              $last_sum $params->get'last_sum');
                  
                  
              //Nombre de valeur:
                  
              $nbvalues $params->get'value_num'30 );
                  
                  
              /**
                   * the image title; this will appear somewhere on the image
                   */
                  // the text
                  
              $titleText $params->get'title''' );
                  
              // title (rgb hex triplet code)
                  
              $titleColor html2rgb($params->get'title_color''#032B5C' ));
                  
                  
              //Add DL Sum to title :
                  
              if ($params->get'display_sum')) {
                      
              $titleText .= ($titleText ' ' '') . number_format($params->get'last_sum'));
                  }

                  
              // left and top displacement; calculated from the image margins, not outlines
                  
              list($titleX$titleY) = explode(','$Padding=$params->get'title_position''20,-2' ));
                  
              // the font size
                  
              $titleFont=intval($params->get'title_size'));
                  
                  
                  
              $colorBackground html2rgb($params->get'color_bg''#FFFFFF' ));
                  
              // the color for this graph: group of rgb codes
                  // i used hex, you may use decimal if you want
                  
              $graph['color1'] = html2rgb($params->get'color_1''#CDD6DF' ));
                  
              $graph['color2'] = html2rgb($params->get'color_2''#2F4C6E' ));
                  
                  
              // image size
                  
              $imageWidth=intval($params->get'img_width'200 ));
                  
              $imageHeight=intval($params->get'img_height'150 ));
                  
                  
              /**
                   * Image type :
                   * 0    Rectangle
                   * 1    Line
                   * 2    Polygone
                   */
                  
              $imageType=intval($params->get'img_type'));
                  
                  
              // basic colors
                  
              $colorBars html2rgb($params->get'color_bars''#CCCCCC' )); // outline bars
                  
              $colorDash $colorBars// dotted guidelines
                  
                  // anything other than 0 for transparence
                  
              $transparentBackground intval($params->get'transparence'));
                  
                  
              // how much distance from the graph outlines to the edge of the image
                  
              list($leftPadding$rightPadding$topPadding$bottomPadding) = explode(','$Padding=$params->get'img_padding''5,1,7,5' ));
                  
                  
              $today date ("Y-m-d");
                  
                  
              /**
                   * Get DocMan logs values from DB
                   */
                  
              $query "SELECT DATE( `log_datetime` ) AS Jour, "
                          
              "COUNT( `id` ) AS NbHit "
                  
              //        . ", DATE(NOW() - INTERVAL " . ($nbvalues + 1) . " DAY) AS Jour0 "
                          
              "\nFROM `#__docman_log` "
                  
              //        . "\nWHERE DATEDIFF( NOW( ) , DATE( `log_datetime` ) ) <= '" . ($nbvalues + 1) . "' "
                  //        . "\nWHERE DATEDIFF( NOW( ) , DATE( `log_datetime` ) ) BETWEEN 1 AND '" . ($nbvalues + 1) . "' "
                          
              "\nWHERE DATEDIFF( DATE( '" $today "' ) , DATE( `log_datetime` ) ) BETWEEN 1 AND '" . ($nbvalues 2) . "' "
                          
              "\nGROUP BY Jour "
                          
              "\nORDER BY Jour"
                          
              ;
                  
              $database -> setQuery($query0$nbvalues 2);
                  
              $rows $database -> loadObjectList('Jour');
                  
              $tabresult = array();
                  foreach (
              $rows as $logrow) {
                      
              $tabresult[$logrow->Jour] = $logrow->NbHit;
                  }
                  
              //$datebegin = $rows[0]->Jour0;
                  
                  
              $yesterday dateAdd('d', -1$today);
                  
              $showdate dateAdd('d', - ($nbvalues 1), $yesterday);
                  
                  
              // the labels for the vertical guidelines
                  
              $graph['hzvalues'] = array ();
                  
                  
              // graph values
                  
              $graph['values'] = array () ;
                  
                  for (
              $i=0$i <= $nbvalues 1$i++) {
                      
              $graph['hzvalues'][]=$showdate;
                      
              $graph['values'][] = intval($tabresult[$showdate]);
                      
              $showdate dateAdd('d'1$showdate );
                  }
                  
                  
                  
              /**
                   * Other parameters sets to Default value
                   * to create image
                   */
                  // how many horizontal guidelines
                  
              $horizontalBars=5;
                  
                  
              // displacement for the vertical guideline labels
                  // FIXME: calculate and center around certain coords
                  
              $textAdjustHorizontal=-12;
                  
              $textAdjustVertical=-3;
                  
                  
              // the maximum expected value for the data
                  // this sets the graph scale
                  // comment it out if you want the scale to be based on the highest value you've got
                  //$maxValue=7000;
                  
                  // distance (down to scale!) between the highest "spike" of the graphs and
                  // the top outline; this has no effect if $maxValue is set
                  //$maxAdjust=5;
                  
                  // displacement for the legend text
                  // this is calculate from the upper-left inside corner of the outlines
                  // they can be positive or negative values
                  
              $glAdjustHorizontal=5;
                  
              $glAdjustVertical=2;
                  
                  
              // the legend label associated with this graph
                  
              $graph['legend']='';
                  
                  
                  
              // set the image size
                  
              $im = @ImageCreate ($imageWidth$imageHeight);

                  
              // register the main colors
                  
              $imageColorBackground=ImageColorAllocate($im,$colorBackground[0],$colorBackground[1],$colorBackground[2]);
                  
              $imageColorBars=ImageColorAllocate($im,$colorBars[0],$colorBars[1],$colorBars[2]);
                  
              $imageColorDash=ImageColorAllocate($im,$colorDash[0],$colorDash[1],$colorDash[2]);
                  
              $imagetitleColor=ImageColorAllocate($im,$titleColor[0],$titleColor[1],$titleColor[2]);
                  
                  
              // make the background transparent if so desired
                  
              if ($transparentBackgroundImageColorTransparent($im,$background_color);

                  
              // draw the outline bars
                  
              ImageLine($im,$leftPadding,$imageHeight-$bottomPadding,$imageWidth-$rightPadding,$imageHeight-$bottomPadding,$imageColorBars);
                  
              ImageLine($im,$leftPadding,$topPadding,$imageWidth-$rightPadding,$topPadding,$imageColorBars);
                  
              ImageLine($im,$leftPadding,$imageHeight-$bottomPadding,$leftPadding,$topPadding,$imageColorBars);
                  
              ImageLine($im,$imageWidth-$rightPadding,$topPadding,$imageWidth-$rightPadding,$imageHeight-$bottomPadding,$imageColorBars);

                  
              // in case no maximum scale has been provided, calculate the maximum value reached by any of the lines
                  
              if (!isset($maxValue)) {
                      
              $maxValue=0;
                      for (
              $n=0;$n <= $nbvalues 1;$n++)
                          if (
              $graph['values'][$n]>$maxValue$maxValue=$graph['values'][$n];
                      
                      if (!
              $maxAdjust) { $maxAdjust ceil($maxValue 0.05); }
                      
              $maxValue+=$maxAdjust// so that it doesn't touch the upper margin
                  
              }
                  
              // determine the maximum height available for drawing
                  
              $verticalZone=$imageHeight-$topPadding-$bottomPadding;

                  
              // draw the vertical dotted guidelines; these depend on how much data you have
                  // FIXME: make it possible to draw only the Nth line
                  
              $ratio=floor($imageWidth-$leftPadding-$rightPadding)/($nbvalues);

                  
              //Initialisation de couleurs pour le dégradé
                  
              $graph['color'] = $graph['color1'];
                  
              $graph['ecart_color'] = array(
                      (
              $graph['color2'][0] - $graph['color1'][0]) / ($nbvalues),
                      (
              $graph['color2'][1] - $graph['color1'][1]) / ($nbvalues),
                      (
              $graph['color2'][2] - $graph['color1'][2]) / ($nbvalues)
                  );
                  
                  
              // draw the graph
                  
              for ($n=0;$n $nbvalues$n++) {
                      
              // calculate and draw line from value N to value N+1
                      
              $imageColorGraph=ImageColorAllocate($im,$graph['color'][0], $graph['color'][1],$graph['color'][2]);
                      
                      
              $yn0=$imageHeight-$bottomPadding;
                      
              $xn1=$leftPadding+($n)*$ratio;
                      
              $xn2=$leftPadding+($n+1)*$ratio;
                      
              $yn1=$imageHeight-$bottomPadding-floor($graph['values'][$n]*$verticalZone/$maxValue);
                      
              $yn2=$imageHeight-$bottomPadding-floor($graph['values'][$n+1]*$verticalZone/$maxValue);
                      
                      switch (
              $imageType) {
                          case 
              2:
                              
              // calculate and draw Polygon from value N to value N+1
                              
              $points = array(
                                  
              $xn1$yn0,
                                  
              $xn1$yn1,
                                  
              $xn2$yn2,
                                  
              $xn2$yn0
                              
              );
                              
              imagefilledpolygon($im,$points,4,$imageColorGraph);
                              break;
                          
                          case 
              1:
                              
              // calculate and draw line from value N to value N+1
                              
              ImageLine($im,$xn1,$yn1,$xn2,$yn2,$imageColorGraph);
                              break;
                          
                          case 
              0:
                          default:
                              
              // calculate and draw rectangle from value N
                              
              imagefilledrectangle($im,$xn1,$yn2,$xn2,$yn0,$imageColorGraph);
                          
                      }
                      
              $graph['color'][0] = ($graph['color'][0] + $graph['ecart_color'][0]) % 256;
                      
              $graph['color'][1] = ($graph['color'][1] + $graph['ecart_color'][1]) % 256;
                      
              $graph['color'][2] = ($graph['color'][2] + $graph['ecart_color'][2]) % 256;
                  }
                  
                  
              // draw the horizontal dotted "guidelines"
                  
              $ratio=floor($imageHeight-$topPadding-$bottomPadding)/$horizontalBars;
                  for (
              $i=0;$i<$horizontalBars;$i++) {
                      
              $height=$topPadding+$i*$ratio;
                      if (
              $i) {imagedashedline($im,$leftPadding,$height,$imageWidth-$rightPadding,$height,$imageColorDash);}
                      
              // write proper values next to the horizontal guidelines, based on their number and max value
                      // FIXME: a more general approach; ability to place them on either side for example
                      
              ImageString($im,1,0,$height-3,floor(($horizontalBars-$i)*$maxValue/$horizontalBars),$imagetitleColor);
                  }
                  
                  
              // write the title
                  
              $imageColorTitle=ImageColorAllocate($im,$titleColor[0],$titleColor[1],$titleColor[2]);
                  
              ImageString($im,$titleFont,$titleX,$titleY,$titleText,$imageColorTitle);

                  
              // output the image
                  
              ImagePng ($im$img_file);

              En fait complèt il ne passe pas hihihi

              Tiens moi au courant pour la version RM... RMGraph
              Christophe
              Joomla newb but Joomla fan

              Commentaire


              • #8
                Non, on ne sait pas mal compris, c'est aussi de cela que je parlais

                Le souci en n'utilisant que n-1 points (ou n représente le nombre de valeurs) pour les graphiques polygonal et linéaire, c'est que du coup ils ne comporteront pas les n segments, comme le graphique en rectangle.

                Ca rejoint du coup le souci d'affichage (nombre d'éléments des graphs rectangle) que tu décrivais... Je viens de faire le test sur Joomlagora, avec 5 valeurs, et j'ai bien 5 rectangles, ou 5 segments en polygones (donc 6 valeurs )...

                Peut-être effectivement qu'il existait un souci sur l'ancien code, car en le modifiant tout à l'heure je me suis aperçu qu'il prenait déjà en compte une partie de la logique des n+1 valeurs, sans pour autant l'appliquer jusqu'au bout (dans la boucle)...

                Remarque comme j'ai corrigé le graph rectangle plutôt que l'autre, ça explique aussi pourquoi j'ai maintenant le même nombre d'élément dans les 2...

                Bon en tout cas, si tu le peux, je te conseil de reprendre cette dernière version de code pour la génération de l'image, qui semble correctement fonctionner sur tous les plans.


                Enfin, sur l'alignement des chiffres, ça dépendra du nombre de digit de tes chiffres, et de la taille de la police. Le plus simple serait surement de laisser la possibilité aux utilisateurs de déterminer la position y, un peu comme pour la position du titre (qui est en x,y).
                Dans ce cas, regarde si tu peux en profiter pour proposer de modifier la taille de la police, en reprenant le sélecteur de la taille du titre... Ca pourrait être intéressant pour de grandes images. C’est une bonne idée de paramètre, je verrai pour l’intégrer aussi

                En tout cas, il y a déjà un beau rendu sur ton site de démo

                PS1: pas mal aussi l'idée d'intégrer les dates avec la phrase "du 18-08-2007 au 16-09-2007 inclus", c'est dans le code ou dans les paramètres?
                PS2: pense à changer aussi le nom de l'image, au cas ou un utilisateur utilise les 2 modules (et donc les 2 composants)
                Dernière édition par Ccrosaz à 17/09/2007, 16h39
                Christophe
                Joomla newb but Joomla fan

                Commentaire


                • #9
                  En fait, nous disons la même chose, mais c'est simplement une histoire de vocabulaire...

                  Soit dans le nombre n d'éléments tu comprends un nombre de points, et donc dans ce cas tu as raison de t'arrêter à n-1.
                  Soit tu y comprends un nombre de segment, et du coup tu as besoin d'un point de plus pour le graph polygonal...

                  Je suis resté sur une notion de segment à cause de la façon dont est fait le graphisme. Par exemple, pour la génération des dégradés, les polygones sont considérés comme 1 élément de deux points (4 en fait mais bon). Si tu as prévu 5 rectangles, quand tu passes en mode polygone tu n’auras plus que 4 segments et donc le dernier ne sera pas de la bonne couleur…

                  L’idée donc que j’ai préféré est de privilégié le nombre d’éléments graphique, quelque soit le nombre de points le constituant (1 et demi pour le rectangle, 2 pour le linéaire, et 4 pour le polygone).

                  Avec cette logique, tu peux utiliser les mêmes dégradés et éléments graphique pour chacun. Mais il te faut utiliser un point de plus effectivement…

                  Le seul truc qui peut perturber dans ta façon de voir, c'est que le tableau de valeur est constituer de n éléments en partant de la date la plus vielle d'indice 0, pour aller à hier (aujourd'hui n'étant pas fini) d'indice n (ou n-1 dans ton cas).
                  Donc si tu ne prends pas en compte le même nombre d’éléments, il y en a forcement un graphique qui ne fini pas hier, mais avant-hier… (je me trompe ?).

                  C’est pour cette raison que j’ai modifié juste la génération du graphique rectangle, en prenant en compte $y2 plutôt que $y1, ainsi les deux graphiques se termines par la valeur de la veille, même si le polygonal a besoin d’une valeur de plus…

                  Mais l’idée est là, et tant que ça fonctionne correctement c’est le principal

                  PS: pas mal l'alignement à droite sur la ligne Tu as fait comment pour calculer la valeur du Y? A moins qu'il n'y ai une fonction pour cela ?
                  Dernière édition par Ccrosaz à 17/09/2007, 17h34
                  Christophe
                  Joomla newb but Joomla fan

                  Commentaire


                  • #10
                    J'ai fait le même test, mais avec le nouveau code que j'ai modifié hier, donc ce n'est peut-être pas concluant...

                    Nombre de valeur = 3:
                    - En mode "Rectangle", j'ai 3 rectangles.


                    - En mode "Polygone", j'ai toujours trois segments, donc sur 4 valeurs...


                    Comme le premier point est étrangement à la même valeur que le second, j'ai refais le test sur 4 valeurs... Et là c'est encore plus parlant, puisque il y a 5 jours nous avons eu un taux de téléchargement inhabituel :

                    Nombre de valeur = 4:
                    - En mode "Rectangle".


                    - En mode "Polygone".

                    C'est là qu'on peut remarquer la différence opérée entre les deux.
                    Le rectangle est dessiné du point en bas à gauche (y=0), pour aller au point en haut à droite (y2), alors que le polygone fini sur la même valeur, mais commence à une avant pour avoir le même nombre de segments...

                    Donc pour revenir à la controverse (si je puis dire), comme je te le disais, le graphique se constitue pour moi en fonction d'un nombre de segments à afficher, qui correspondent chacun à un passage dans la boucle, à une couleur, et à un jour (ou plutôt à une transition entre 2 jours pour le polygone).
                    C'est juste une vue de l'esprit, pour simplifier l'algorithme et le développement. Ainsi, quelque soit le graphisme, les points sont calculés de la même façon, et on passe autant de fois dans la boucle. Pas la peine de gérer le nombre de boucle en fonction du type de graphisme...

                    Dans ton cas, tu te bases sur le nombre de valeur, mais du coup tu es obligé de réduire le nombre de boucle dans un cas, ainsi que le nombre de segment affichés... Du coup, tu n'as pas les mêmes couleurs finales pour les 2 graphiques
                    Même si la différence n'est pas flagrante, mon éditeur me dit qu’elles ne sont pas identiques :
                    Foncé rectangle: #637A93; (idem chez moi)
                    Foncé polygone: #7E91A6;

                    Après, tant que ça fonctionne et que ça répond à tes besoins, les deux méthodes sont bonne... C'est juste une histoire de point de vue

                    PS: par contre du coup, ça me rappel que j'avais remarqué un souci en mode "Rectangle" lors du calcul de la valeur max. Dans le cas ou la valeur juste avant, qui est prise en compte pour le polygone, est trop importante, le graph devient ridiculement bas par rapport à l'échelle...
                    Dernière édition par Ccrosaz à 18/09/2007, 16h03
                    Christophe
                    Joomla newb but Joomla fan

                    Commentaire


                    • #11
                      Salut Fly,

                      J'ai testé ta version, et je n'ai rencontré qu'un petit souci, que je pense dû aux conditions de départ...
                      J'ai donc remplacé cette partie :
                      Code PHP:
                          if (!file_exists($mainframe->getCfg'absolute_path' )."/components/com_docman/docman.php")) {
                              echo 
                      'Error cannot find DocMan extension<br />';
                              return;
                              }
                          } else {
                          if (!
                      file_exists($mainframe->getCfg'absolute_path' )."/components/com_remository/remository.php")) {
                              echo 
                      'Error cannot find Remository extension<br />';
                              return;
                          } 
                      par celle-ci :
                      Code PHP:
                          if (!file_exists($mainframe->getCfg'absolute_path' )."/components/com_docman/docman.php")) {
                              echo 
                      'Error cannot find DocMan extension<br />';
                              return;
                          } else if (!
                      file_exists($mainframe->getCfg'absolute_path' )."/components/com_remository/remository.php")) {
                              echo 
                      'Error cannot find Remository extension<br />';
                              return;
                          } 
                      Comme tu le vois, c'est juste au niveau de l'enchainement des accolades que je suppose qu'il y a un souci. Tu n’as pas dû t’en rendre compte sans DocMan, puisque le reste de la condition else intègre le calcul

                      Sinon, d'expérience je te conseillerai de ne pas utiliser la fonction 'eval', qui peut-être désactivé sur certains serveur, et qui peut constituer un problème de sécurité.
                      Dans ton cas, comme tu ne souhaites ne prendre en compte que les dates de début et de fin (et p-e aussi le total, ce qui serait pas mal), je te conseil de privilégier les expressions régulières, pour aller remplacer un mot-clé par une valeur...

                      Je me demandais juste pourquoi tu ne gérais pas la condition du type de graphique dès le début pour retirer un à $nbvalue, afin de conserver les calculs de couleurs et autre ?

                      Mais dans l'ensemble c'est bien fait et bien documenté
                      Félicitation
                      Christophe
                      Joomla newb but Joomla fan

                      Commentaire


                      • #12
                        Salut Fly,

                        Heuu, je ne sais pas ce que ça implique en fait
                        Donc, si j'ai tout compris, c'est prendre à bord les modifications que tu as apportées ? Et les proposer dans mon package, c'est ça?

                        Oui, si tu veux, enfin j'avoue que j'ai retouché encore une fois le code, après m'être aperçu que la suppression des anciens logs posait problème. Mais s'il n'y a que ça je verrai pour le reprendre.

                        J'avoue qu'au départ je pensais plus que tu allais sortir une autre version, dédiée à ReMOSitory, appelée mod_RMGraph par exemple.
                        Ainsi ça permettait de proposer deux modules, juste dépendant du composant... Car à mon sens il est rare qu'un admin utilise les deux (a part en test comme moi ).

                        Mais puisque ta version sait gérer les deux composants pourquoi pas. Même s’il reste cet écart de logique entre les deux modules sur le nombre de valeur ou de segment (quoi, moi j’insiste ? )…

                        Mais je verrai ça plus tard, actuellement je fais joujou avec les plugins de CB, et franchement c’est un beau composant aussi, plein de possibilités.
                        Christophe
                        Joomla newb but Joomla fan

                        Commentaire


                        • #13
                          superbe !
                          j'écris une lib pour joomla 1.5 ou j'essaye de donner la possibilité de créer rapidement des éléments graphique a partir d'un tableau array!
                          j'aimerais bien ajouter tes histogrammes !!!!!

                          Commentaire


                          • #14
                            Salut,

                            @dedgui : pas de souci, utilise ce que tu veux, mais site la source (pas moi puisque je n'ai fait qu'adapter le code )
                            Code PHP:
                            /**
                             * PHPgraph - simple tool for creating PNG graphs on the fly.
                             * Copyright (C) 2002 Romanian Web Developers <http://rowd.org/proiecte/phpgraph/>
                             */ 
                            C'est de leur code que je me suis inspiré

                            @fly : en fait la première fonction de destruction des logs ne fonctionnait simplement pas... Je ne sais plus exactement le pourquoi du comment, mais voici celle que j'ai désormais :
                            Code PHP:
                            /**
                             * Delete old logs entries
                             * if necessary
                             */
                            $nbvalues $params->get'value_num'30 );                //Nombre de valeur
                            $delete_num intval($params->get'delete_num'));        //Nombre de jours avant suppression
                            if ($delete_num $nbvalues) {
                                
                            //$query = "DELETE FROM `#__docman_log` WHERE DATEDIFF( NOW( ) , DATE( `log_datetime` ) ) > $delete_num";
                                
                            $query "DELETE FROM `#__docman_log` WHERE DATEDIFF( DATE( '" $today "' ) , DATE( `log_datetime` ) ) > $delete_num";

                                
                            $database -> setQuery($query);
                                if (!
                            $database->query()) {
                                    echo 
                            'Error deleting logs :<br />';
                                    echo 
                            $modrow->getError() . '<br />';
                                }

                            Je pense qu'il s'agissait juste d'une bêtise, genre oubli d'un paramètre...

                            Qu'est ce que tu rencontres sinon comme autres problèmes?
                            Christophe
                            Joomla newb but Joomla fan

                            Commentaire

                            Annonce

                            Réduire
                            1 sur 2 < >

                            C'est [Réglé] et on n'en parle plus ?

                            A quoi ça sert ?
                            La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                            Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                            Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                            Comment ajouter la mention [Réglé] à votre discussion ?
                            1 - Aller sur votre discussion et éditer votre premier message :


                            2 - Cliquer sur la liste déroulante Préfixe.

                            3 - Choisir le préfixe [Réglé].


                            4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                            2 sur 2 < >

                            Assistance au forum - Outil de publication d'infos de votre site

                            Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                            Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                            Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                            UTILISER À VOS PROPRES RISQUES :
                            L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                            Problèmes connus :
                            FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                            Installation :

                            1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                            Archive zip : https://github.com/AFUJ/FPA/zipball/master

                            2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                            3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                            4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                            5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                            6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                            et remplacer www. votresite .com par votre nom de domaine


                            Exemples:
                            Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                            Télécharger le script fpa-fr.php dans: /public_html/
                            Pour executer le script: http://www..com/fpa-fr.php

                            Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                            Télécharger le script fpa-fr.php dans: /public_html/cms/
                            Pour executer le script: http://www..com/cms/fpa-fr.php

                            En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                            Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                            Voir plus
                            Voir moins
                            Travaille ...
                            X