Warning: fopen(logv.txt): failed to open stream: Permission denied in /home/keonox/www/pyg/ganesha/inc.php on line 61

Warning: fputs(): supplied argument is not a valid stream resource in /home/keonox/www/pyg/ganesha/inc.php on line 62

Warning: fclose(): supplied argument is not a valid stream resource in /home/keonox/www/pyg/ganesha/inc.php on line 63
Patch Lanceur

Accueil > Addons > Lanceur Contact  | Imprimer  | English translation

Patch Lanceur pour Ganesha 

(c) PyG : dev@cornalys.com -- v0.5 17/03/2004
Code sous licence GNU/GPL

Objectif

Genère une page de "transition" avant de lancer l'activité permettant :
1- de lancer l'activité dans une popup
2- de limiter le lancement de l'activité en fonction du nb d'essais déjà effectué
3- de limiter le lancement de l'activité en fonction d'un score moyen déjà obtenu
4- de limiter le lancement en fonction d'une date de début
5- de limiter le lancement en fonction d'une date de fin
6- de limiter le lancement en fonction d'un score minimum à l'activité précédente

Screenshots / Démonstration

Capture

Procédure d'installation  

INSTALLATION

1- Copiez le code source (ci-dessous) de la fonction dans le fichier /ganesha/inc/library.inc.php (par exemple tout à la fin, juste avant le "?>")

2- Editez votre activité/chapitre :
sous le
if (!Init($connexion,'','')) {PageErreur(); exit ();}
ajoutez (par exemple) :
LanceurV2("max", 10, 80);

Si vous utilisez Ganesha 1.x vous utiliserez plutôt :

LanceurV1("max", 10, 80);

3- C'est tout !

CONFIGURATION :

La fonction Lanceur comprend 6 paramètres:
- le premier concerne la popup :
-> taille définie : "700*500" = activité ouverte en popup de 700px (largeur) par 500px (hauteur)
-> taille maximum : "max" = la popup s'adapte à la taille de l'ecran du stagiaire
-> taille par défaut : "defaut" = taille par défaut définie dans la fonction

- le second concerne le nb d'essai
-> limite personnalisée : "5" = le stagiaire peut faire 5 fois l'activité, la sixième fois, l'activité ne se lancera pas.
-> limite par défaut : "defaut" = limite fixée dans la fonction
-> pas de limite : "false"

- le troisième concerne la moyenne (%age) du stagiaire à l'activité
-> limite personnalisé : "80%" = si le stagiaire à une moyenne superieure à 80% à l'activité. L'activité ne se lancera pas.
-> limite par defaut : "defaut" = limite fixée dans la fonction
-> pas de limite : false

- le quatrième concerne la date de début de mise à disposition de l'activité
-> la date doit être au format JJ/MM/AAAA (depuis JJ à 00h00)
-> pas de limite : false

- le cinquième concerne la date de fin de mise à disposition de l'activité
-> la date doit être au format JJ/MM/AAAA (jusqu'à JJ à 23h59)
-> pas de limite : false

- le sixième concerne la mise à disposition en fonction du score de l'activité précédente
-> limite personnalisée : "80" = le stagiaire ne pourra faire l'activité QUE s'il a eu un score de 80% ou plus à l'activité précédente.
-> limite par defaut : "defaut" = limite fixée dans la fonction
-> pas de limite : false

EXEMPLES :

LanceurV2("max", 3);    
L'activité se lance dans une popup maximisée. Le stagiaire pourra la faire 3 fois.

LanceurV2(false, false, "defaut");    
L'activité ne se lance pas dans une popup. Pas de limite d'essai, mais si le stagiaire dépasse le pourcentage par défaut fixé dans la fonction, l'activité ne se lancera pas.

LanceurV2("600*400");     
L'activité se lance dans une popup de 600 pixels de large sur 400 de haut.

LanceurV2(false, false, false, "10/10/2003", "25/12/2003", 75);
L'activité ne sera disponible qu'entre le 10/10/2003 et le 25/12/2003. De plus, l'activité ne sera lancée que si le stagiaire à eu au moins 75% comme dernier score a l'activité précédente.

Bonne utilisation !
Pierre-Yves

Historique

17/03/2004 : v0.5 : correction d'un bug de la V0.4 (notamment en local/EasyPHP)
05/03/2004 : v0.4
: Correction d'un bug du lancement conditionné au score de l'activité précédente + prise en compte de la meilleure note de l'activité précédente (et non plus de la dernière note). Merci à Roger T.
02/02/2004 : v0.3 : Séparation en deux fonctions (pour Ganesha 1.3 et Ganesha2.0)
? : v0.2 : ajout des lancements conditionnels
? : v0.1 : première version (lancement via popup uniquement)

 Source  

Copier coller depuis lanceur.txt (à renommer en lanceur.php) ou utilisez directement la source ci-dessous.

Attention aux utilisateurs de Dreamweaver ! Dreamweaver MX est buggué dans sa fonction de copier-coller (quand on copie-colle de grande portions de code), vérifiez que le résultats de votre "coller" correspond bien au contenu de la source (et qu'il n'y a pas d'insertions de signes cabalastiques non désirés !).

<?php

    
/**
    * Genere une page de "transition" permettant diverses actions au lancement d'une activité
    *
    * v0.5 17/03/2004
    * Fonction à utiliser avec la V2 (prise en compte du groupe)
    *
    * @param    string    $popup Lancer l'activité dans une popup
    * @param    string    $essai Limiter le lancement de l'activité en fonction du nb d'essais déjà effectué
    * @param    integer    $score Limiter le lancement de l'activité en fonction d'un score moyen déjà obtenu
    * @param    string    $dated Limiter le lancement en fonction d'une date de début
    * @param    integer    $datef Limiter le lancement en fonction d'une date de fin
    * @param    integer    $prevscore Limiter le lancement en fonction d'un score minimum à l'activité précédente
    * @link        http://ganesha.keonox.com/addons/lanceur
    * @author    Pierre-Yves GOSSET <dev@cornalys.com>
    * @see        LanceurV1
    * @version    0.5
    * @access    public
    */
    
function LanceurV2($popup="false",$essai="false",$score="false"$dated="false"$datef="false"$prevscore="false") {
        
// variables globales et récupération des params GET
        
global $guserid$connexion$chapitre$module$groupe;
        global 
$ClsTracking$db$TBL;
        
// si le traitement est déjà fait : on sort
        
if (isset($_GET['PopLanceur'])) {
            return;
        }
        
// headers et footer HTML
        
$HtmlHeader "<html>\n<head>\n";
        
$HtmlHeader .= "<title>Activit&eacute;</title>\n";
        
$HtmlHeader .= "<style type=\"text/css\">
    .msg {
        font-family: Arial, Helvetica, sans-serif;
        font-weight: bold;
        background-color: #F0F0F0;
        margin: 50px 5% 5px;
        padding: 10px;
        width: 90%;
        border: 1px solid #999999;
        text-align: center;
    }
    </style>\n"
;
        
$HtmlFooter .= "</body>\n</html>";
        
        
// définition des valeurs par défaut
        
$defautPopup "800*600";    // taille de la popup par defaut
        
$defautEssai "3";            // Nb d'essais max
        
$defautScore "60";        // %age max
        
$defautPrevScore "80";    // %age min du dernier score de l'activité précédente pour lancer l'activité    
        
$popup = ($popup=="defaut") ? $defautPopup $popup;
        
$essai = ($essai=="defaut") ? $defautEssai $essai;
        
$score = ($score=="defaut") ? $defautScore $score;
        
$prevscore = ($prevscore=="defaut") ? $defautPrevScore $prevscore;
        
// cible à ouvrir
        
$targetURL $PHP_SELF."?connexion=$connexion&chapitre=$chapitre&module=$module&PopLanceur=1&groupe=$groupe";
    
        
// script popup ------------------------------------------------------------------
        
$script "";
        
$paramsPopup "top=0, left=0, scrollbars=yes, status=yes, resizable=yes, menubar=no";
    
        if (
$popup!="false") {    // on veut que l'activité s'ouvre en popup
            
$script "<script language=\"javascript\">\n";
            if (
$popup=="max") {    // on veut que la popup soit maximisée
                
$width "screen.availWidth";
                
$height "screen.availHeight";        
            } else {
                
$taille explode("*"$popup);
                
$width $taille[0];
                
$height $taille[1]; 
            
$paramsPopup "top=0, left=0, scrollbars=yes, status=yes, resizable=yes, menubar=no, width=".$width.", height=".$height."";       
            }
            
$script .= "targeturl = 'index.php".$targetURL."'\n";
            
$script .= "newwin = window.open(targeturl,'newwin','".$paramsPopup."');\n";
            
$script .= "if (newwin.opener == null) newwin.opener = self;\n";
            
$script .= "newwin.moveTo(0,0)\n";
            
$script .= " newwin.resizeTo(".$width.",".$height.")\n";
            
$script .= "newwin.focus();\n";
            
$script .= "</script>\n";
        }
        
// contenu ------------------------------------------------------------------
            
$contenu "";
            
// on teste le nb d'essai
            
if ($essai!="false") { // on a defini un nb d'essais
                
$nbEssai $ClsTracking->NbTrackingByChapter($guserid,$module,$chapitre,$groupe);    //nb d'essai du stagiaire
                
if ($nbEssai >= $essai) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Vous avez dépassé le nombre d'essais maximum auquel vous aviez droit ($essai) \n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on teste le pourcentage
            
if ($score!="false") { // on a defini un nb d'essais
                
$Pourcentage $ClsTracking->Moyenne($guserid,$module,$chapitre,$groupe);    //Moyenne du stagiaire à cette activité

                
if ($Pourcentage>$score) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Votre score moyen ($Pourcentage%) a atteint ou dépassé la moyenne maximum fixée ($score%)\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }    
            
// on teste la date de début
            
if ($dated!="false") {
                
$tab explode("/"$dated);
                
$timed mktime (0,0,0,$tab[1],$tab[0],$tab[2]);
                if (
time() <= $timed ) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Cette activité sera disponible à partir du $dated !\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on teste la date de fin
            
if ($datef!="false") {
                
$tab explode("/"$datef);
                
$timef mktime (0,0,0,$tab[1],$tab[0],$tab[2]) + (24*60*60);
                if (
time() >= $timef ) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Cette activité n'est plus disponible depuis le $datef !\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on la note du chapitre précédent
            
if ($prevscore!="false") {
                if (
$chapitre 1) { // uniquement si le chapitre qui précède est une activité
                    
$chap $chapitre -1;
                    
$sql "SELECT MAX(score) from ".$TBL['tracking']." where module_id=".$module." and chapitre_id=".$chap." and user_id=".$guserid." ORDER BY date DESC;";
                    
$query mysql_query($sql);
                    
$req mysql_fetch_array($query);
                    if (isset(
$req[0]) && ($req[0] < $prevscore) ) {
                        
$contenu .= "<div class=\"msg\">\n";
                        
$contenu .= "Vous devez atteindre un score minimum de ".$prevscore."% à l'activité précédente (".$req["0"]."% actuellement) avant de pouvoir faire cette activité !\n";
                        
$contenu .= "</div>\n";
                        
$launch=false;
                    }
                    if (!isset(
$req[0])) {
                        
$contenu .= "<div class=\"msg\">\n";
                        
$contenu .= "Vous devez faire l'activité précédente et obtenir un score minimum de ".$prevscore."% avant de pouvoir faire celle-ci !\n";
                        
$contenu .= "</div>\n";
                        
$launch=false;
                    }                
                }
            }            
        if ( 
$launch===false ) { // si on a atteint une limitation
            
$html $HtmlHeader;
            
$html .= "</head>\n";
            
$html .= $contenu;
            
$html .= $HtmlFooter;
            echo 
$html;
            exit;
        }
        if ( 
$script!="" ) { // on ouvre en popup
            
$html $HtmlHeader;
            
$html .= $script;
            
$html .= "</head>\n";
            
$html .= "<body onUnload=\"newwin.close();\">\n";
            
$html .= "<div class=\"msg\">Ouverture de l'activité...</div>\n";
            
$html .= $HtmlFooter;
            echo 
$html;
            exit;
        }
    return;
    }


    
/**
    * Genere une page de "transition" permettant diverses actions au lancement d'une activité
    *
    * v0.4 05/03/2004
    * Fonction à utiliser avec la V1
    *
    * @param    string    $popup Lancer l'activité dans une popup
    * @param    string    $essai Limiter le lancement de l'activité en fonction du nb d'essais déjà effectué
    * @param    integer    $score Limiter le lancement de l'activité en fonction d'un score moyen déjà obtenu
    * @param    string    $dated Limiter le lancement en fonction d'une date de début
    * @param    integer    $datef Limiter le lancement en fonction d'une date de fin
    * @param    integer    $prevscore Limiter le lancement en fonction d'un score minimum à l'activité précédente
    * @link        http://ganesha.keonox.com/addons/lanceur
    * @author    Pierre-Yves GOSSET <dev@cornalys.com>
    * @see        LanceurV2
    * @version    0.4
    * @access    public
    */
    
function LanceurV1($popup="false",$essai="false",$score="false"$dated="false"$datef="false"$prevscore="false") {
        
// variables globales et récupération des params GET
        
global $guserid$connexion$chapitre$module;
        global 
$ClsTracking$db$TBL;
        
// si le traitement est déjà fait : on sort
        
if (isset($_GET['PopLanceur'])) {
            return;
        }
        
// headers et footer HTML
        
$HtmlHeader "<html>\n<head>\n";
        
$HtmlHeader .= "<title>Activit&eacute;</title>\n";
        
$HtmlHeader .= "<style type=\"text/css\">
    .msg {
        font-family: Arial, Helvetica, sans-serif;
        font-weight: bold;
        background-color: #F0F0F0;
        margin: 50px 5% 5px;
        padding: 10px;
        width: 90%;
        border: 1px solid #999999;
        text-align: center;
    }
    </style>\n"
;
        
$HtmlFooter .= "</body>\n</html>";
        
        
// définition des valeurs par défaut
        
$defautPopup "800*600";    // taille de la popup par defaut
        
$defautEssai "3";            // Nb d'essais max
        
$defautScore "60";        // %age max
        
$defautPrevScore "80";    // %age min du dernier score de l'activité précédente pour lancer l'activité    
        
$popup = ($popup=="defaut") ? $defautPopup $popup;
        
$essai = ($essai=="defaut") ? $defautEssai $essai;
        
$score = ($score=="defaut") ? $defautScore $score;
        
$prevscore = ($prevscore=="defaut") ? $defautPrevScore $prevscore;
        
// cible à ouvrir
        
$targetURL $PHP_SELF."?connexion=$connexion&chapitre=$chapitre&module=$module&PopLanceur=1";
    
        
// script popup ------------------------------------------------------------------
        
$script "";
        
$paramsPopup "top=0, left=0, scrollbars=yes, status=yes, resizable=yes, menubar=no";
    
        if (
$popup!="false") {    // on veut que l'activité s'ouvre en popup
            
$script "<script language=\"javascript\">\n";
            if (
$popup=="max") {    // on veut que la popup soit maximisée
                
$width "screen.availWidth";
                
$height "screen.availHeight";        
            } else {
                
$taille explode("*"$popup);
                
$width $taille[0];
                
$height $taille[1];        
            }
            
$script .= "targeturl = '".$targetURL."'\n";
            
$script .= "newwin = window.open(targeturl,'newwin','".$paramsPopup."');\n";
            
$script .= "if (newwin.opener == null) newwin.opener = self;\n";
            
$script .= "newwin.moveTo(0,0)\n";
            
$script .= " newwin.resizeTo(".$width.",".$height.")\n";
            
$script .= "newwin.focus();\n";
            
$script .= "</script>\n";
        }
        
// contenu ------------------------------------------------------------------
            
$contenu "";
            
// on teste le nb d'essai
            
if ($essai!="false") { // on a defini un nb d'essais
                
$nbEssai $ClsTracking->NbTrackingByChapter($guserid,$module,$chapitre);    //nb d'essai du stagiaire
                
if ($nbEssai >= $essai) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Vous avez dépassé le nombre d'essais maximum auquel vous aviez droit ($essai) \n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on teste le pourcentage
            
if ($score!="false") { // on a defini un nb d'essais
                
$Pourcentage $ClsTracking->Moyenne($guserid,$module,$chapitre);    //Moyenne du stagiaire à cette activité

                
if ($Pourcentage>$score) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Votre score moyen ($Pourcentage%) a atteint ou dépassé la moyenne maximum fixée ($score%)\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }    
            
// on teste la date de début
            
if ($dated!="false") {
                
$tab explode("/"$dated);
                
$timed mktime (0,0,0,$tab[1],$tab[0],$tab[2]);
                if (
time() <= $timed ) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Cette activité sera disponible à partir du $dated !\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on teste la date de fin
            
if ($datef!="false") {
                
$tab explode("/"$datef);
                
$timef mktime (0,0,0,$tab[1],$tab[0],$tab[2]) + (24*60*60);
                if (
time() >= $timef ) {
                    
$contenu .= "<div class=\"msg\">\n";
                    
$contenu .= "Cette activité n'est plus disponible depuis le $datef !\n";
                    
$contenu .= "</div>\n";
                    
$launch false;
                }        
            }
            
// on la note du chapitre précédent
            
if ($prevscore!="false") {
                if (
$chapitre 1) { // uniquement si le chapitre qui précède est une activité
                    
$chap $chapitre -1;
                    
$sql "SELECT MAX(note) from ".$TBL['tracking']." where module_id=".$module." and chapitre_id=".$chap." and user_id=".$guserid." ORDER BY date DESC;";
                    
$query mysql_query($sql);
                    
$req mysql_fetch_array($query);
                    if (isset(
$req['note']) && ($req['note'] < $prevscore) ) {
                        
$contenu .= "<div class=\"msg\">\n";
                        
$contenu .= "Vous devez atteindre un score minimum de ".$prevscore."% à l'activité précédente (".$req["note"]."% actuellement) avant de pouvoir faire cette activité !\n";
                        
$contenu .= "</div>\n";
                        
$launch=false;
                    }
                    if (!isset(
$req['note'])) {
                        
$contenu .= "<div class=\"msg\">\n";
                        
$contenu .= "Vous devez faire l'activité précédente et obtenir un score minimum de ".$prevscore."% avant de pouvoir faire celle-ci !\n";
                        
$contenu .= "</div>\n";
                        
$launch=false;
                    }                
                }
            }            
        if ( 
$launch===false ) { // si on a atteint une limitation
            
$html $HtmlHeader;
            
$html .= "</head>\n";
            
$html .= $contenu;
            
$html .= $HtmlFooter;
            echo 
$html;
            exit;
        }
        if ( 
$script!="" ) { // on ouvre en popup
            
$html $HtmlHeader;
            
$html .= $script;
            
$html .= "</head>\n";
            
$html .= "<body onUnload=\"newwin.close();\">\n";
            
$html .= "<div class=\"msg\">Ouverture de l'activité...</div>\n";
            
$html .= $HtmlFooter;
            echo 
$html;
            exit;
        }
    return;
    }

?>

Accueil > Addons > Lanceur Contact  | Imprimer  | English translation