Gestion simplissime des Todo

crabs_todo-2.0 ©2008-2011 - Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)

~~ / ADMIN / base_function.php
Makefile admin.css admin.js index.php var.js var_get.php var_set.php user.js user_list.php user_info.php user_mod.php user_pwd.php user_del.php base.js base_create.php base_upgrade.php base_function.php backup.js backup_list.php backup_do.php backup_restor.php backup_download.php backup_delete.php sql.js sql.php empty.txt
    1 <?php
    2 //
    3 // =============================================================================
    4 //  crabs_todo-2.0 : Gestion simplissime des Todo
    5 //  Copyright (C) 2008-2011 : Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)
    6 //
    7 //  Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer
    8 //  et/ou le modifier en respectant les termes de la GNU General Public License
    9 //  version 2 ou (suite a votre propre choix) une version ulterieure.
   10 //
   11 //  Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais
   12 //  sans aucune garantie, meme si il est associe a un produit qui vous en
   13 //  propose une. Conformez-vous a la GNU General Public License pour avoir
   14 //  plus de precisions.
   15 //
   16 //  L'auteur ne peut etre tenu responsable de l'utilisation faite des
   17 //  composantes associees a ce projet (en partie ou dans leur totalite).
   18 //
   19 //  Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC
   20 //  de ce projet sous le nom gnu_gpl.txt
   21 //
   22 // =============================================================================
   23 //
   24 $ROOT='../' ;
   25 include( "{$ROOT}LIB/param.php" ) ;
   26 include( "{$ROOT}LIB/util.php" ) ;
   27 include( "{$ROOT}LIB/mysql.php" ) ;
   28 
   29 $sql = array() ;
   30 
   31 $sql["DROP ${DB_PRFX}state function"] = <<<SQL
   32     DROP FUNCTION IF EXISTS ${DB_PRFX}state
   33 SQL;
   34 
   35 $sql["CREATE ${DB_PRFX}state function"] = <<<SQL
   36     CREATE FUNCTION ${DB_PRFX}state( w TINYINT, p TINYINT, o DATE, pl DATE )
   37         RETURNS REAL DETERMINISTIC
   38     BEGIN
   39         DECLARE n DATE ;    -- NOW()
   40         DECLARE delta REAL ; -- nombre de jours
   41         DECLARE jour_max REAL; -- au dela on ne compte plus
   42         DECLARE ratio_o REAL; -- jour max ouverture en fonction de la priorite
   43         DECLARE ratio_m REAL; -- jour max ouverture en fonction de la priorite
   44         DECLARE s REAL ; -- variable temporaire pour l'etat
   45 
   46         -- on se donne un trimestre pour realiser une tache non urgente
   47         SET jour_max = 91 ;
   48         SET n = NOW() ;
   49 
   50         -- c'est fait, etat=0
   51         IF w = 1 THEN RETURN 0 ; END IF ;
   52 
   53         -- sert dans tous les calculs
   54         CASE p
   55             WHEN 1 THEN SET ratio_o = jour_max ;
   56             WHEN 2 THEN SET ratio_o = jour_max / 2 ;
   57             ELSE SET ratio_o = jour_max / 4 ;
   58         END CASE ;
   59 
   60         -- traitement du pour_le
   61         IF pl IS NOT NULL THEN
   62             SET delta = DATEDIFF( n, pl ) ;
   63             IF delta <= 0 THEN
   64                 SET delta = -delta ;
   65                 IF delta > ratio_o THEN SET delta = ratio_o ; END IF ;
   66                 SET s = ( 8.8 + delta / ratio_o ) / 10 ;
   67             ELSE
   68                 -- 1 mois max de depassement en p=1
   69                 SET ratio_m = ratio_o * 30 / jour_max ;
   70                 IF delta > ratio_m THEN SET delta = ratio_m ; END IF ;
   71                 SET s = ( ratio_m - delta ) / ratio_m * 0.88 ;
   72             END IF ;
   73             -- on tient compte de l'ouverture (2%)
   74             SET delta = DATEDIFF( n, o ) ;
   75             IF delta > ratio_o THEN SET delta = ratio_o ; END IF ;
   76             SET s = s + 0.02 * delta / ratio_o ;
   77             RETURN s ;
   78         END IF;
   79 
   80         -- pas de pour_le => priorite
   81 
   82         SET delta = DATEDIFF( n, o ) ;
   83         IF delta > ratio_o THEN SET delta = ratio_o ; END IF ;
   84         RETURN delta / ratio_o ;
   85 
   86     END
   87 SQL;
   88 
   89 // COMMENTER  LES 6 LIGNES SUIVANTES POUR ACTIVER UN JEU DE TEST
   90 /*
   91 $c = new MYSQL( false, false ) ;
   92 foreach( $sql as $info => $s )
   93     {
   94     echo "$info\n" ;
   95     $c->query( $s ) ;
   96     }
   97 */
   98 /******************************************************************************
   99 ** DECOMMENTER POUR LES JEUX DE TESTS
  100 */
  101 
  102 header( 'Content-type: text/plain; charset="iso-8859-15"' ) ;
  103 $pour_le = array(
  104     'NULL                  ',
  105     'NOW() + interval 1 DAY',
  106     'NOW() - interval 1 DAY',
  107     'NOW() - interval 3 DAY',
  108     'NOW() - interval 4 DAY',
  109     'NOW() - interval 7 DAY',
  110     'NOW() - interval 8 DAY'
  111     ) ;
  112 
  113 $ouverture = array(
  114     'NOW()                   ',
  115     'NOW() - interval 90 DAY ',
  116     'NOW() - interval 180 DAY',
  117     'NOW() - interval 1 YEAR '
  118     ) ;
  119 foreach( $pour_le as $pl )
  120 for( $w=2; $w<=3; $w++ )
  121 for( $p=1; $p<=3; $p++ )
  122 foreach( $ouverture as $o )
  123     $sql[] = <<<SQL
  124     SELECT $w AS w, $p AS p,
  125         DATE_FORMAT( $o, '%d/%m/%Y') AS o,
  126         DATEDIFF( NOW(), $o ) AS do,
  127         IFNULL( DATE_FORMAT( $pl, '%d/%m/%Y'), '--/--/----' ) AS pl,
  128         IFNULL( DATEDIFF( NOW(), $pl ), '----' ) AS dpl,
  129         ${DB_PRFX}state( $w, $p, $o, $pl ) AS s
  130 SQL;
  131 
  132 $sql[] = '-' ;
  133 $sql[] = <<<SQL
  134     SELECT w, p,
  135         DATE_FORMAT( ouverture, '%d/%m/%Y') AS o,
  136         DATEDIFF( NOW(), ouverture ) AS do,
  137         IFNULL( DATE_FORMAT( pour_le, '%d/%m/%Y' ), '--/--/----' ) AS pl,
  138         IFNULL( DATEDIFF( NOW(), pour_le ), '----' ) AS dpl,
  139         ${DB_PRFX}state( w, p, ouverture, pour_le ) AS s
  140     FROM ${DB_PRFX}todo
  141     ORDER BY s DESC, w DESC, p DESC, ouverture DESC
  142 SQL;
  143 
  144 
  145 $c = new MYSQL(true, false ) ;
  146 foreach( $sql as $s )
  147     {
  148     if ( $s == '-' )
  149         {
  150         echo "--------------------------------------------------------------------------------\n" ;
  151         continue ;
  152         }
  153     $res = $c->query( $s ) ;
  154     while ( $r = @mysql_fetch_assoc( $res ) )
  155         {
  156         $rep = array() ;
  157         foreach( $r as $k => $v )
  158             {
  159             // permet de traiter les nombres
  160             $v = "$v" ;
  161             $rep[] = sprintf( "%3.3s: %10.10s", $k, $v ) ;
  162             }
  163         echo implode( " | ", $rep ), "  \n" ;
  164         }
  165     }
  166 /*
  167 ** FIN DE COMMENTAIRE POUR LES JEUX DE TEST
  168 ********************************************************************************
  169 */
  170 ?>
Makefile admin.css admin.js index.php var.js var_get.php var_set.php user.js user_list.php user_info.php user_mod.php user_pwd.php user_del.php base.js base_create.php base_upgrade.php base_function.php backup.js backup_list.php backup_do.php backup_restor.php backup_download.php backup_delete.php sql.js sql.php empty.txt
~~ / ADMIN / base_function.php

Haut de page

Contacter crabs

Date de génération : 22/09/2011 21:49