Sortie de SMI 0.9.9y

Posté par (page perso) . Édité par Davy Defaud, Xavier Claude et Benoît Sibaud. Modéré par j. Licence CC by-sa
Tags : aucun
21
22
oct.
2012
PHP

SMI est un logiciel de gestion de service après‐vente et d’interventions, destiné à toutes les sociétés offrant ce type de prestations. Outre la gestion des interventions, il permet le suivi des contrats, la planification, la gestion des parcs matériels et logiciels, etc. Il gère également la notion de sous‐traitants et de donneurs d’ordres.

Il a été développé en PHP et fonctionne sur tout serveur avec SGBD MySQL. Il est distribué sous licence GPL.

Depuis sa création, il a été téléchargé plus de 27 000 fois.
Logo SMI

Outre le passage sous JQuery, ce qui a beaucoup amélioré l’ergonomie, l’accent a été porté sur le nettoyage du code source et l’accélération globale du fonctionnement.

Quelques nouvelles fonctionnalités :

  • signature numérique des interventions ;
  • traçabilité des utilisateurs dans tout le logiciel ;
  • module Check-List, pour permettre d’accélérer et d’améliorer la saisie des travaux ;
  • exportation des interventions vers un tableur, en tenant compte des filtres et critères (tri, etc.) ;
  • recherche étendue ;
  • quelques corrections de bogues.

Tous les détails sont ici.

  • # Très bon travail

    Posté par . Évalué à 1.

    Très bon travail, je le trouve bien complet simple d'utilisation a regarder les copies d'écrans et en GPL. ;)

    Merci aux personnes qui mon aidé a trouvé des solutions pour essayer d’écrire sans faute d’orthographe.

  • # Je n'ai rien contre ton projet

    Posté par . Évalué à 5.

    Mais pourquoi faut il que les projets open source en php soient tous codés à la serpe ….

    // Vérifie si l'administrateur a été créé (si non, il est créé)
    $conn = mysql_connect(DBHOST, DBUSER, DBPASS);
    mysql_select_db(DBNAME);
    $rech = "SELECT * FROM `" .TBPW. "` WHERE `pw_code` = '" .$admin_code. "'";
    $rs = mysql_query($rech) or die(mysql_error());
    if (mysql_num_rows($rs) == 0)
    
    

    Je ne sors que le plus flagrant dans l'index.php. Cela m'à pris à peu près 20 secondes (merci mon internet a 1.5 mo/s qui ne m'à pas trop fait souffrir les 70mo de l'appli..) à trouver.
    Dans les 10 fichiers que j'ai ouverts par la suite je n'ai vu qu'un empilement de galère à gérer, selon moi.

    C'est tellement dommage de voir tant d'efforts si mal exploité, car je n'en doute pas le service rendu est bien là…

    Histoire de rendre mon post utile, dans l'exemple qui suit ton code sent très mauvais,

    $codepl = @$_GET['pl'];
    ...
    $rech = "SELECT * FROM `" .TBBARLOC. "` WHERE `barloc_codeperloc` = '$codepl' AND `barloc_codepdtloc` = '$codepdt'";
    
    

    Je n'ose même pas demander à l'auditoire locale comment éviter ce genre d'accidents.
    On va me sortir symfony+doctrine, et j'aurais encore plus la gerbe.

    fin bref. Bonne continuation, et tous mes encouragements tout de même.

    • [^] # Re: Je n'ai rien contre ton projet

      Posté par . Évalué à 1.

      Coder à la serpe.

      C'est plutôt vague et subjectif. Pourrais-tu préciser ce qui ne va pas dans ces extraits de code ?

      • [^] # Re: Je n'ai rien contre ton projet

        Posté par (page perso) . Évalué à 3.

        Quelques éléments :
        - on n'évite de faire des select * pour des raisons de performances mais aussi de logique. On s'attend à récupérer N champs. On modifie la table en ajoutant 2 champs. Par chance cela peut être transparent pour le code qui suit mais c'est rarement le cas.
        - tes requêtes ne semblent pas protégées contre les injections sql, entre autre. Il faut au minimum utiliser mysql_real_escape_string(). pdo ??
        - l'arobase ne doit servir qu'à masquer des ouvertures de flux (fichier, socket,…) et à l'unique condition de tester le code de retour de la fonction.
        - on ne fait pas de "or die" en dehors de la phase de tests !

        Bon courage.

      • [^] # Re: Je n'ai rien contre ton projet

        Posté par (page perso) . Évalué à 1. Dernière modification le 22/10/12 à 22:08.

        Dans install/install.txt, j'ai trouvé :
        Si vous êtes sous PHP 5.x, n'oubliez de passer la variable "registerlong_arrays" à "On" dans le php.ini_

        C'est bien évidemment le contraire qu'il faut faire !

      • [^] # Re: Je n'ai rien contre ton projet

        Posté par . Évalué à 5. Dernière modification le 23/10/12 à 15:07.

        Oui je peux tenter d’être plus précis en restant succinct.
        Ceci dit je vais tenter de faire moins de faute cette fois ci.

        1. Il y a un souci sur toutes les requêtes SQL. Il n'y a aucune protection, elles sont éparpillées à travers toute l'application, mélanger au HTML. C'est d'autant plus dommage qu'une partie du code déportes bel et bien les SQL dans des fonctions distincte.
          C'est une pratique utile dès que l'on à plusieurs layouts à gérer.
          Aussi, le coup des noms de table en constantes me pique les yeux à la lecture du code, et m'effraie quand je songe à son usage.
          Lib simple et efficace pour accéder à sa bdd Idiorm (il est souvent cité celui là) / redbean (le principe est séduisant mais à l'usage je suis plus sceptique).

        2. Il y à énormément de fichier ultra répétitif. C'est un problème récurrent chez les débutants car pour eux une page HTML (une adresse dans mon browser) == un fichier dans l'arborescence.
          De là découle diverses solutions pour s’en accommoder cahin caha.
          En général les solutions font beaucoup de copy / paste comme ici, cela n'aide pas la maintenance.
          Si tu ouvres le dossier age, puis les fichiers aff_notesc.php / aff_rescocl.php / barloc_maj.php les contenus sont pratiquement identique à 95%.
          On aurait pu faire autrement avec un front controler avec soit un fichier de config, soit des controlers indépendant. Là je peux pas en dire beaucoup plus faudrait pousser l'analyse.
          Lib simple et efficace pour ce faire Slim.

        3. Comme pour les SQL la gestion des ressources statiques types css / javascript est mélangé dans le HTML. Elles sont déclarées à l'endroit où ces ressources sont nécessaires, c'est déclaratif.
          Une manière plus astucieuse de procéder, qui requiert aussi un frontcontroler, et de procéder par injection.
          Pour tel pattern d'url (action / ce qu'il te plaira), injecter telle liste de ressource dans le HTML.
          Là je n'ai pas de lib, mais c'est relativement simple à implémenter et encore une fois cela évite les lourdeurs.

        Enfin, je m'étonne des 70 mo de l'appli. Mais voilà quelques raisons :
        - le dossier classe (equivalent de vendors/) contient la version compressé et non compressé de PHPExcel
        - le dossier install contient toutes les précédentes versions de la bases de données. Elles sont toutes non compressées. C'est dommage sachant les miracles de gzip sur le texte.

        Enfin suite, car je n'ai vu cela qu'en ouvrant les fichiers sql.
        Il y a du HTML dans la bases de données en quantité impressionnante, pas juste un b / a / p ici et là.
        Non en fait, on dirait des corps de pages entiers.
        Ou comment se compliquer la vie lors des mises à jours…

        bref quoi. Le plus important c'est que ça marche, mais de la à release un trou de sécurité ambulant et difficile à maintenir je ne sais pas si c'est un cadeau pour ces utilisateurs, et je sais qu'en tant développeur php ce n'est pas un cadeau pour moi, ni pour ce langage, ni sa réput.

        PS : j'espère ne pas vous avoir trop défoncer tes yeux avec mes fautes, lecteurs, si tel devait être le cas…
        Bah ramasses-les et puis c'est tout, je n'ai pas de SAV moi.

        • [^] # Re: Je n'ai rien contre ton projet

          Posté par . Évalué à 2.

          Bonne analyse de son code, enfin je le suppose … je ne code pas en php

          Galawa peut te remercier tu as pris la peine de relire et d'étudier son code de manière précise et de le critiquer.

          Je trouvais ta première remarque un peu brutale, fondée certainement mais brutale.

          Il ne faut pas s'extasier devant le moindre applications libre, mais la il s'agit plus d'informatique de gestion soit qq chose très peu sexy et parfois bien ennuyeux.
          Le plus souvent ce genre d'applications ne doit être utiliser que dans le réseau local bien a l'abri derrière un pare feu et ne doit pas être exposé directement sur la toile.
          Les remarques sur les performances sont plus judicieuses car bien souvent elle sont le problème numero 1 des applis de gestion

          Tout cela pour dire que c'est ca le monde du logiciel libre, l'échange de savoir faire qui permet a tout le monde de progresser.
          Et même si je ne code pas en php actuellement, je sais au moins ce qu'il ne faut pas faire …

          A+
          chris

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.