| 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
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é</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é</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 |