You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
511 lines
20 KiB
511 lines
20 KiB
<?php |
|
if (!defined("_ECRIRE_INC_VERSION")) return; |
|
#---------------------------------------------------# |
|
# Plugin : Jeux # |
|
# Auteur : Patrice Vanneufville, 2006 # |
|
# Gestion des scores : Maieul Rouquette, 2007 # |
|
# Contact : patrice¡.!vanneufville¡@!laposte¡.!net # |
|
# Licence : GPL # |
|
#--------------------------------------------------------------------------# |
|
# Documentation : https://contrib.spip.net/Des-jeux-dans-vos-articles # |
|
#--------------------------------------------------------------------------# |
|
|
|
include_spip('jeux_config'); |
|
|
|
// 4 fonctions pour traiter la valeur du parametre de configuration place apres le separateur [config] |
|
global $jeux_config; |
|
|
|
function jeux_config($param, $config = false) { |
|
global $jeux_config; |
|
$param = jeux_verif_param_config($param); |
|
$p = $config === false ? $jeux_config : $config; |
|
$p = isset($p[$param]) ? trim($p[$param]) : ""; |
|
|
|
if (in_array($p, array('true', 'vrai', 'oui', 'yes', 'on', '1', 'si', 'ja', strtolower(_T('item_oui'))))) return true; |
|
if (in_array($p, array('false', 'faux', 'non', 'no', 'off', '0', 'nein', strtolower(_T('item_non'))))) return false; |
|
$p = trim($p, '"'); |
|
return $p; |
|
} |
|
|
|
function jeux_config_tout() { |
|
global $jeux_config; |
|
return $jeux_config; |
|
} |
|
|
|
function jeux_config_set($param, $valeur) { |
|
global $jeux_config; |
|
$param = jeux_verif_param_config($param); |
|
if ($param != '') |
|
$jeux_config[$param] = trim($valeur); |
|
} |
|
|
|
// alimente la globale $jeux_config, tout en preferant les valeurs de la configuration CFG du plugin |
|
// le texte est une liste de config de type : param = valeur |
|
// $ecrase : forcer a ecraser la config eventuellement existante |
|
function jeux_config_init($texte_config, $ecrase = false) { |
|
global $jeux_config; |
|
// configuration CFG |
|
$config_CFG = jeux_configuration_generale(true); |
|
$parametres = jeux_parse_section_config($texte_config); |
|
foreach ($parametres as $p) { |
|
// array($ligne epuree, $param_original, $param, $valeur) |
|
list( , , $p_base, $valeur) = $p; |
|
// au moment de la config initiale, preferer les valeurs de CFG |
|
if (!$ecrase && !isset($jeux_config[$p_base])) |
|
$jeux_config[$p_base] = isset($config_CFG[$p_base]) ? $config_CFG[$p_base] : $valeur; |
|
if ($ecrase || !isset($jeux_config[$p_base])) |
|
$jeux_config[$p_base] = $valeur; |
|
} |
|
} |
|
|
|
// ecrase les parametres de la globale $jeux_config; |
|
function jeux_config_ecrase($texte_config) { |
|
jeux_config_init($texte_config, true); |
|
} |
|
|
|
// reinitialise la globale $jeux_config; |
|
function jeux_config_reset() { |
|
global $jeux_config; |
|
$jeux_config = array(); |
|
} |
|
|
|
// splitte le texte du jeu avec les separateurs concernes |
|
// et traite les parametres de config |
|
function jeux_split_texte($jeu, &$texte) { |
|
global $jeux_caracteristiques; |
|
jeux_config_reset(); |
|
if (function_exists($init = 'jeux_' .$jeu . '_init')) |
|
jeux_config_init($init()); |
|
$texte = '[' . _JEUX_TEXTE . ']' . trim($texte) . ' '; |
|
$expr = '/(\[' . implode('\]|\[', $jeux_caracteristiques['SEPARATEURS'][$jeu]) . '\])/'; |
|
$tableau = preg_split($expr, $texte, -1, PREG_SPLIT_DELIM_CAPTURE); |
|
// foreach($tableau as $i => $valeur) $tableau[$i] = preg_replace('/^\[(.*)\]$/', '\\1', trim($valeur)); |
|
foreach($tableau as $i => $valeur) |
|
if (($i & 1) && preg_match('/^\[(.*)\]$/', trim($valeur), $reg)) { |
|
$tableau[$i] = strtolower(trim($reg[1])); |
|
if ($reg[1] == _JEUX_CONFIG && $i+1 < count($tableau)) |
|
jeux_config_ecrase($tableau[$i+1]); |
|
} |
|
return $tableau; |
|
} |
|
|
|
// transforme un texte en listes html |
|
function jeux_listes($texte) { |
|
$tableau = preg_split('/[\r\n]+/', trim($texte)); |
|
foreach ($tableau as $i=>$valeur) |
|
if (($valeur = trim($valeur)) != '') |
|
$tableau[$i] = "<li>$valeur</li>\n"; |
|
$texte = implode($tableau); |
|
return "<ol>$texte</ol>"; |
|
} |
|
|
|
// retourne un tableau de mots ou d'expressions a partir d'un texte |
|
function jeux_liste_mots($texte, $unique = true) { |
|
// corrections typo eventuelles |
|
$texte = str_replace( |
|
array('’','« ',' »','« ',' »',' ?',' !',' ;'), |
|
array("'",'"','"','"','"','?','!',';'), echappe_retour($texte)); |
|
$texte = filtrer_entites(trim($texte)); |
|
$split = explode('"', $texte); |
|
$c = count($split); |
|
$split2 = array(); |
|
for($i=0; $i<$c; $i++) if (strlen($s = trim($split[$i]))) { |
|
if (($i & 1) && ($i != $c-1)) { |
|
// on touche pas au texte entre deux "" |
|
$split2[] = $s; |
|
} else { |
|
// on rassemble tous les separateurs : ,;\s\t\n |
|
$temp = str_replace(array(' ?', ' !', ' ;'), array('?', '!', ';'), $s); |
|
$temp = preg_replace('/[,;\s\t\n\r]+/'.($GLOBALS['meta']['charset']=='utf-8'?'u':''), '@SEP@', $temp); |
|
$temp = str_replace('+', ' ', $temp); |
|
$temp = array_filter(explode('@SEP@', $temp)); |
|
$split2 = array_merge($split2, $temp); |
|
} |
|
} |
|
return $unique ? array_unique($split2) : $split2; |
|
} |
|
|
|
function jeux_majuscules($texte) { |
|
return init_mb_string()?mb_strtoupper($texte,$GLOBALS['meta']['charset']):strtoupper($texte); |
|
} |
|
|
|
function jeux_minuscules($texte) { |
|
return init_mb_string()?mb_strtolower($texte,$GLOBALS['meta']['charset']):strtolower($texte); |
|
} |
|
|
|
// verifie si le $texte est bien dans la $liste de bonnes reponses |
|
// les expression regulieres sont egalement traitees |
|
function jeux_in_liste($texte, $liste=array()) { |
|
$texte = filtrer_entites($texte); |
|
$texte_m = jeux_minuscules($texte); |
|
foreach($liste as $expr) { |
|
// interpretation des expressions regulieres grace aux virgules : ,un +mot,i |
|
if(strncmp($expr, ',', 1)===0 && ($pos = strripos($expr, ','))>0) { |
|
if($GLOBALS['meta']['charset']=='utf-8' && strpos($expr, 'u', ++$pos)===false) $expr .= 'u'; |
|
if(preg_match($expr, $texte)) return true; |
|
} elseif(strpos($expr, '/M')===($len=strlen($expr)-2)) { |
|
if(substr($expr, 0, $len)===$texte) return true; |
|
} else { |
|
$expr = jeux_minuscules($expr); |
|
// corriger_typo peut eviter un pb d'apostrophe par exemple |
|
if($expr===$texte_m || $expr===corriger_typo($texte_m)) |
|
return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
function jeux_filtre_preg($array) { |
|
foreach($array as $key => $value) |
|
if(strncmp($value, ',', 1)===0 && ($pos = strripos($value, ','))>0) |
|
$array[$key] = substr($value, 1, --$pos); |
|
return $array; |
|
} |
|
|
|
// retourne la boite de score et ajoute le resultat en base |
|
function jeux_afficher_score($score, $total, $id_jeu=false, $resultat_long='', $categories='') { |
|
global $scoreMULTIJEUX; |
|
if(isset($scoreMULTIJEUX['config'])) { |
|
// mode 'multi_jeux' : enregistrement des scores dans la globale $scoreMULTIJEUX, mais pas en base |
|
$scoreMULTIJEUX['score'][] = $score; |
|
$scoreMULTIJEUX['total'][] = $total; |
|
$scoreMULTIJEUX['details'][] = $resultat_long; |
|
if(!jeux_config('scores_intermediaires', $scoreMULTIJEUX['config'])) return ''; |
|
} |
|
elseif($id_jeu){ |
|
// mode 'jeu simple' |
|
// ici, le jeu est decode et possede un id_jeu ; les scores peuvent passer en base. |
|
include_spip('base/jeux_ajouter_resultat'); |
|
jeux_ajouter_resultat($id_jeu, $score, $total, $resultat_long); |
|
} |
|
include_spip('public/assembler'); |
|
return recuperer_fond('fonds/jeu_score', |
|
array('id_jeu'=>$id_jeu, 'score'=>$score, 'total'=>$total, |
|
'resultat_long'=>$resultat_long, |
|
'commentaire'=>jeux_commentaire_score($categories, $score, $total) |
|
)); |
|
} |
|
|
|
function jeux_commentaire_score($categ, $score, $total) { |
|
if (!strlen($categ)) return ''; |
|
|
|
$score = intval($score); |
|
$total = intval($total); |
|
$res = false; |
|
$categ = preg_split('@(^|\n|\r)\s*(-?[0-9]+[.,]?[0-9]*)\s*(%|pt|pts)(?:\s| )*:@', trim($categ), -1, PREG_SPLIT_DELIM_CAPTURE); |
|
for($i=2; $i<count($categ); $i+=4) { |
|
$mini = $categ[$i+1]=='%'?$total*$categ[$i]/100:$categ[$i]; |
|
if($score > $total) $res=false; |
|
elseif($score >= $mini) $res = $i+2; |
|
else break; |
|
} |
|
return $res===false?'':$categ[$res]; |
|
} |
|
|
|
// fonction qui retourne un bouton, faisant appel au fond fonds/bouton_{$item}.html |
|
function jeux_bouton($item, $id_jeu = 0, $indexJeux = 0) { |
|
return recuperer_fond('fonds/bouton_'.$item, array('id_jeu' => $id_jeu, 'indexJeux' => $indexJeux)); |
|
} |
|
// fonctions obsoletes |
|
function jeux_bouton_reinitialiser() { return jeux_bouton('reinitialiser'); } |
|
function jeux_bouton_recommencer() { return jeux_bouton('recommencer'); } |
|
function jeux_bouton_corriger() { return jeux_bouton('corriger'); } |
|
function jeux_bouton_rejouer() { return jeux_bouton('rejouer'); } |
|
|
|
// liste les jeux trouves, si le module jeux/lejeu.php est present |
|
function jeux_liste_les_jeux(&$texte) { |
|
global $jeux_caracteristiques; |
|
$liste = array(); |
|
foreach($jeux_caracteristiques['SIGNATURES'] as $jeu => $signatures) { |
|
$ok = false; |
|
foreach($signatures as $s) $ok |= (strpos($texte, "[$s]")!==false); |
|
if ($ok) $liste[] = $jeu; |
|
} |
|
return array_unique($liste); |
|
} |
|
|
|
// decode les jeux si les modules jeux/lejeu.php sont presents |
|
// retourne la liste unique des jeux trouves et inclut la bibliotheque si $indexJeux existe |
|
function jeux_decode_les_jeux(&$texte, $indexJeux = NULL) { |
|
global $jeux_caracteristiques, $scoreMULTIJEUX; |
|
$liste = array(); |
|
foreach($jeux_caracteristiques['SIGNATURES'] as $jeu=>$signatures) { |
|
$ok = false; |
|
foreach($signatures as $s) $ok |= (strpos($texte, "[$s]")!==false); |
|
if ($ok) { |
|
$liste[] = $jeu; |
|
if ($indexJeux) { |
|
if (!function_exists($fonc = 'jeux_'.$jeu)) |
|
include_spip('jeux/'.$jeu); |
|
if (function_exists($fonc)) |
|
$texte = $fonc($texte, $indexJeux, !isset($scoreMULTIJEUX['config'])); |
|
} |
|
} |
|
} |
|
return array_unique($liste); |
|
} |
|
|
|
// retourne les types de jeu trouves dans le $texte |
|
function jeux_trouver_nom($texte) { |
|
global $jeux_caracteristiques; |
|
$liste = jeux_liste_les_jeux($texte); |
|
foreach($liste as $i => $jeu) |
|
$liste[$i] = $jeux_caracteristiques['TYPES'][$jeu]; |
|
return implode(', ', $liste); |
|
} |
|
|
|
function jeux_sans_balise($texte) { |
|
return str_replace(array(_JEUX_DEBUT,_JEUX_FIN), '', $texte); |
|
} |
|
|
|
// retourne le titre public, si le separateur [titre] est present |
|
function jeux_trouver_titre_public($texte) { |
|
$texte = jeux_sans_balise($texte); |
|
$titre_public = false; |
|
// cas particulier des multi-jeux |
|
if($p = strpos($texte,'['._JEUX_MULTI_JEUX.']')) |
|
$texte = substr($texte,0,$p); |
|
// parcourir tous les #SEPARATEURS |
|
$tableau = jeux_split_texte('la_totale', $texte); |
|
foreach($tableau as $i => $valeur) if ($i & 1) { |
|
if ($valeur==_JEUX_TITRE) $titre_public = $tableau[$i+1]; |
|
} |
|
return $titre_public; |
|
} |
|
|
|
// appel de la balise #CONFIG_INTERNE |
|
// si $param est une chaine non vide, alors la valeur d'un parametre en particulier est retournee |
|
// si $param === '' alors un tableau associatif est retourne |
|
// si $param === false alors un texte HTML est retourne |
|
function jeux_trouver_configuration_complete($texte_jeu, $param = false) { |
|
global $jeux_caracteristiques; |
|
|
|
if(strpos($texte_jeu, _JEUX_DEBUT)!==false) |
|
return _L("Balises <jeux/> détectées => Configuration non scannée ! |
|
<br/>Ces balises doivent être supprimées."); |
|
|
|
$liste_jeux = jeux_liste_les_jeux($texte_jeu); |
|
if(!count($liste_jeux)) return _L("Aucun jeu trouvé, sauf erreur ?") . print_r($texte_jeu, 1); |
|
$nb_jeux = count($liste_jeux); |
|
|
|
// ici un texte de jeu est fourni |
|
// $nom_jeu = jeux_trouver_nom($texte_jeu); |
|
$config_interne = jeux_trouver_configuration_interne($texte_jeu, false, true); |
|
$config_defaut = jeux_trouver_configuration_defaut($liste_jeux[0], true); |
|
//return print_r($config_defaut, 1); |
|
// verification des parametres de la configuration interne |
|
$config_interne = explode('<br/>', $config_interne); |
|
foreach ($config_interne as &$ligne) { |
|
// array(param, valeur, param original, ligne epuree) |
|
$arr = jeux_parse_ligne_config($ligne); |
|
if($arr[0] && $arr[3] && !isset($config_defaut[$arr[0]])) |
|
$ligne = '/* ' . _T('jeux:erreur_inconnu') . ' : ' . $ligne . ' */'; |
|
} |
|
sort($config_interne); |
|
$config_interne = implode('<br/>', $config_interne); |
|
$config_defaut = jeux_trouver_configuration_defaut($liste_jeux[0], false); |
|
|
|
return '<p><strong>' . _T('jeux:titre_config_defaut') |
|
. ' <small>(' . $jeux_caracteristiques['TYPES'][$liste_jeux[0]] . ')</small> :' |
|
. '</strong></p><p class="jeux_decaler_config">' . $config_defaut . '</p>' |
|
. ($config_interne ? '<p><strong>' . _T('jeux:titre_config_interne') |
|
. ' :</strong></p><p class="jeux_decaler_config">' . $config_interne . '</p>' : ''); |
|
|
|
} |
|
|
|
// retourne la configuration interne d'un texte de jeu, si le separateur [config] est present |
|
// si une option generale de configuration est cochee, elle prendra le dessus (sauf si $ignorer_CFG == true) |
|
// si strlen($param) > 0 alors la valeur d'un parametre en particulier est retournee |
|
// si $param === '' alors un tableau associatif est retourne |
|
// si $param === false alors un texte HTML est retourne |
|
function jeux_trouver_configuration_interne($texte, $param = false, $ignorer_CFG = false) { |
|
$texte = jeux_sans_balise($texte); |
|
$affiche_config_interne = array(); |
|
$ok_param = false; |
|
$config_CFG = jeux_configuration_generale(true); |
|
|
|
// cas particulier des multi-jeux |
|
if($p = strpos($texte,'['._JEUX_MULTI_JEUX.']')) |
|
$texte = substr($texte, 0, $p); |
|
// parcourir tous les #SEPARATEURS |
|
$tableau = jeux_split_texte('la_totale', $texte); |
|
foreach($tableau as $i => $valeur) if ($i & 1) { |
|
if ($valeur ==_JEUX_CONFIG) { |
|
$parametres = jeux_parse_section_config($tableau[$i+1]); |
|
foreach ($parametres as $p) { |
|
// array($ligne epuree, $param_original, $param, $valeur, $ligne_originale) |
|
list($ligne, $p_user, $p_base, $valeur, $ligneOrig) = $p; |
|
if($p_base !== false) { |
|
// la configuration generale passe avant ! |
|
if (!$ignorer_CFG && isset($config_CFG[$p_base]) && $valeur != $config_CFG[$p_base]) { |
|
$valeur = $config_CFG[$p_base]; |
|
$ligne = "/* CFG */ $p_user = $valeur"; |
|
} |
|
if ($param === '') { |
|
$ok_param[$p_base] = $valeur; |
|
} elseif ($param === false) { |
|
$affiche_config_interne[] = $ligne; |
|
} else { |
|
$param = jeux_verif_param_config($param); |
|
if($p_base == $param) $ok_param = $valeur; |
|
} |
|
} else { |
|
$affiche_config_interne[] = '/* ' . _T('jeux:erreur_syntaxe') . ' : ' . $ligneOrig . ' */'; |
|
} |
|
} |
|
} |
|
} |
|
if ($param === false) { |
|
sort($affiche_config_interne); |
|
return implode('<br/>', $affiche_config_interne); |
|
} |
|
return $ok_param; |
|
} |
|
|
|
// retourne la configuration par defaut d'un type jeu |
|
function jeux_trouver_configuration_defaut($type_jeu, $type_array = false) { |
|
if (!function_exists($fonc = 'jeux_'.$type_jeu)) |
|
include_spip('jeux/' . $type_jeu); |
|
if (function_exists($init = $fonc . '_init')) |
|
return jeux_trouver_configuration_interne('['._JEUX_CONFIG.']' . $init(), $type_array ? '' : false); |
|
return false; |
|
} |
|
|
|
// retourne la configuration generale du plugin (options par defaut gerees par CFG) |
|
// retour un array() si $type_array est true |
|
function jeux_configuration_generale($type_array = false) { |
|
$affiche_cfg = array(); |
|
if(function_exists('lire_config') && is_array($liste_cfg = lire_config('jeux'))) { |
|
// liste des options disponibles par CFG |
|
foreach($liste_cfg as $o => $v) { |
|
$o = jeux_verif_param_config(preg_replace(',^cfg_,', '', $o)); |
|
if($v === true || $v === 'on') |
|
$v = strtolower(_T('item_oui')); |
|
elseif($v === false || $v === 'off') |
|
$v = strtolower(_T('item_non')); |
|
$affiche_cfg[$o] = $type_array ? $v : "$o = $v"; |
|
} |
|
} |
|
if($type_array) |
|
return $affiche_cfg; |
|
if(!$affiche_cfg) |
|
$affiche_cfg = array(_T('jeux:jeu_vide')); |
|
return '[' . _JEUX_CONFIG . "]<br/>" . implode("<br/>", $affiche_cfg); |
|
} |
|
|
|
// decoder une ligne de config (retrait des comentaires facon PHP et mise en forme du parametre) |
|
// retour : array(param, valeur, param original, ligne epuree) |
|
function jeux_parse_ligne_config($ligne) { |
|
$ligne = preg_replace(',\/\*(.*?)\*\/,', '', $ligne); |
|
$ligne = trim(preg_replace(',\/\/(.*)$,', '', $ligne)); |
|
$arr = explode('=', $ligne, 2); |
|
if (count($arr) != 2) return array(false, false, false, strlen($ligne)? '/* ' . $ligne . '*/' : false); |
|
$arr[0] = trim($arr[0]); $arr[1] = trim($arr[1]); |
|
return array(jeux_verif_param_config($arr[0]), $arr[1], $arr[0], $arr[0] . ' = ' . $arr[1]); |
|
} |
|
|
|
// decoder une section de config |
|
// retourne le tableau des parametres : array[] = array($ligne epuree, $param_original, $param, $valeur, $ligne_originale) |
|
function jeux_parse_section_config($texte_config) { |
|
$arr_config = array(); |
|
$texte_config = preg_split('/[\r\n]+/', $texte_config); |
|
foreach ($texte_config as $ligne) { |
|
// array(param, valeur, param original, ligne epuree) |
|
$arr = jeux_parse_ligne_config($ligne); |
|
if(strlen($arr[3])) { |
|
if ($arr[0]) |
|
$arr_config[] = array($arr[3], $arr[2], $arr[0], $arr[1], $ligne); |
|
else |
|
$arr_config[] = array($arr[3], false, false, false, $ligne); |
|
} |
|
} |
|
return $arr_config; |
|
} |
|
|
|
// le parametre de config d'un jeu est insensible a la casse et ne comporte ni espace ni accent |
|
function jeux_verif_param_config($param) { |
|
include_spip('inc/charsets'); |
|
return strtolower(translitteration(str_replace(' ', '', $param))); |
|
} |
|
|
|
|
|
// pour placer des commentaires |
|
function jeux_rem($rem, $index=false, $jeu='', $balise='div') { |
|
return code_echappement("<$balise class='jeux_rem' title='".$rem.($index!==false?'-#'.$index:'').(strlen($jeu)?" `".$jeu."`":'')."'></$balise>"); |
|
} |
|
|
|
// pour inserer un css |
|
function jeux_stylesheet($b) { |
|
$f = find_in_path("styles/$b.css"); |
|
include_spip('inc/filtres'); |
|
return $f?'<link rel="stylesheet" href="'.direction_css($f).'" type="text/css" media="projection, screen" />'."\n":''; |
|
} |
|
|
|
// pour inserer un css.html |
|
function jeux_stylesheet_html($b) { |
|
$f = find_in_path("$b.css.html"); |
|
$args = 'ltr=' . $GLOBALS['spip_lang_left']; |
|
return $f?'<link rel="stylesheet" type="text/css" href="'.generer_url_public("$b.css", $args)."\" />\n":''; |
|
} |
|
|
|
// pour inserer un js |
|
function jeux_javascript($b) { |
|
$f = find_in_path("javascript/$b.js"); |
|
if (!$f && @is_readable($s = _DIR_IMG_PACK .$b.'.js')) $f = $s; // compatibilite avec 1.9.1 |
|
return $f?'<script type="text/javascript" src="'.$f."\"></script>\n":''; |
|
} |
|
|
|
// renvoie un bloc depliable |
|
function jeux_block_depliable($texte, $block) { |
|
if (!strlen($texte)) return ''; |
|
return "<div class='jeux_deplie jeux_replie'>$texte</div><div class='jeux_deplie_contenu jeux_invisible'>$block</div>"; |
|
} |
|
|
|
// renvoie le couple array(id, name) pour construire un input |
|
// les index doivent etre positifs |
|
function jeux_idname($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') { |
|
$indexJeux = str_replace('.','_',$indexJeux); |
|
$indexJeux = 'reponses' . $indexJeux; |
|
if($index<0) return array($indexJeux, $indexJeux); |
|
if($index2<0) return array($indexJeux.'-'.$prefixe.$index, $indexJeux.'['.$prefixe.$index.']'); |
|
return array($indexJeux.'-'.$prefixe.$index.'-'.$prefixe2.$index2, $indexJeux.'['.$prefixe.$index.']['.$prefixe2.$index2.']'); |
|
} |
|
|
|
// renvoie la reponse trimee du formulaire (NULL si n'existe pas) |
|
function jeux_form_reponse($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') { |
|
$reponse = _request('reponses'.str_replace('.','_',$indexJeux)); |
|
if($index>=0 && is_array($reponse)) |
|
$reponse = isset($reponse[$prefixe.$index])?$reponse[$prefixe.$index]:NULL; |
|
if($index2>=0 && is_array($reponse)) |
|
$reponse = isset($reponse[$prefixe2.$index2])?$reponse[$prefixe2.$index2]:NULL; |
|
if(is_string($reponse) && strlen($reponse)) |
|
$reponse = trim($reponse); |
|
return $reponse; |
|
} |
|
|
|
// indique si on doit corriger ou non (attention aux multi jeux) |
|
function jeux_form_correction($indexJeux) { |
|
return intval(_request('correction'.intval($indexJeux)))?true:false; |
|
} |
|
|
|
// deux fonctions qui encadrent un jeu dans un formulaire |
|
function jeux_form_debut($name, $indexJeux, $class="", $method="post", $action="", $insert="") { |
|
$id_jeu = intval(jeux_config('id_jeu')); |
|
$cvt = jeux_config('jeu_cvt')?'oui':'non'; |
|
$hidden = "<div><input type='hidden' name='id_jeu' value='$id_jeu' />\n" |
|
."<input type='hidden' name='debut_index_jeux' value='$GLOBALS[debut_index_jeux]' />\n" |
|
."<input type='hidden' name='index_jeux' value='$indexJeux' />\n" |
|
."<input type='hidden' name='correction$indexJeux' value='1' />$insert</div>\n"; |
|
if (jeux_config('jeu_cvt')) return $hidden; |
|
if (strlen($name)) $name=" id='$name$indexJeux'"; |
|
if (strlen($class)) $class=" class='$class'"; |
|
if (strlen($method)) $method=" method='$method'"; |
|
/*if (strlen($action))*/ $action=" action='$action#JEU$indexJeux'"; |
|
return "\n<form".$name.$class.$method.$action." >\n".$hidden; |
|
} |
|
|
|
function jeux_form_fin() { |
|
return jeux_config('jeu_cvt')?'':"\n</form>\n"; |
|
} |
|
|
|
?>
|
|
|