Commit d207d74d authored by Mathieu Loiseau's avatar Mathieu Loiseau
Browse files

enables button if lexicon not empty based on usr & language…

parent 21ebd525
<?php
class LexInnovaLink{
private $user= '';
//$this->oracle = $this->user->id;
//$this->userlang = $this->user->userlang;
private $user ;
private $lexiconUrl = "http://totoro.imag.fr/lexinnova/api/Lexinnova@user@/@lang@/cdm-headword/*/cdm-headword/?strategy=NOT_EQUAL" ;
private $content ;
private $lang_codes = array("es"=>"esp",
"fr"=>"fre");
public function __construct(){
/**/
/* $this->user = user::getInstance();
if ($this->user->userlang == 'es'){
$this->lang = "esp";
}
else{
$this->lang = "fra";//pour qu'il y ait une alternative
}
$this->lexiconUrl = str_replace(array("@user@", "@lang"), array($this->user->id, $this->lang), $this->lexiconUrl);*/
//mais là on va dire que c'est Titi et qu'il apprend l'espagnol
$this->lexiconUrl = str_replace(array("@user@", "@lang@"), array("lzbk", "esp"), $this->lexiconUrl);
echo $this->lexiconUrl;
public function __construct($user){
$this->user = $user ;
$this->lexiconUrl = str_replace(array("@user@", "@lang@"),
array($this->user->username,
$this->lang_codes[$this->user->langGame]),
$this->lexiconUrl);
$this->content = simplexml_load_file($this->lexiconUrl);
}
......@@ -48,9 +40,4 @@ class LexInnovaLink{
return $this->count_entries()." entrées → ($result)";
}
}
/**/
echo "youhouu";
$test = new LexInnovaLink();
echo "<!doctype html><html><head> <meta charset='utf-8'></head><body>$test</body></html>";
?>
<?php
require_once('./models/card.class.php');
class oracle_card_alea
{
private $submit = false;
private $errors = array();
private $encoding = "UTF-8";
private $res='';
private $result= '';
private $mode = '';
public $tableau = '';
private $boobool = true;
private $time;
private $card;
private $mot = '';
private $tabou1 = '';
private $tabou2 = '';
private $tabou3 = '';
private $tabou4 = '';
private $tabou5 = '';
private $nivcarte = '';
private $userlang = '';
private $user= '';
private $oracle= '';
public function set_mode($mode)
{
$this->mode = $mode;
}
public function process()
{
if ( $this->init() )
{
$this->crawler();
return $this->display();
}
return false;
}
public function init()
{
$this->submit = isset($_POST['submit_form']);
$this->userlvl = userlvl::getInstance();
$this->time = $this->userlvl->get_time();
//quand on a appuyé sur "valider", récupération du formulaire
if ( $this->submit )
{
$this->res['mot'] = isset($_POST['mot']) ? trim($_POST['mot']) : '';
$this->res['nivcarte'] = isset($_POST['nivcarte']) ? trim($_POST['nivcarte']) : '';
$this->res['tabou1'] = isset($_POST['tabou1']) ? trim($_POST['tabou1']) : '';
$this->res['tabou2'] = isset($_POST['tabou2']) ? trim($_POST['tabou2']) : '';
$this->res['tabou3'] = isset($_POST['tabou3']) ? trim($_POST['tabou3']) : '';
$this->res['tabou4'] = isset($_POST['tabou4']) ? trim($_POST['tabou4']) : '';
$this->res['tabou5'] = isset($_POST['tabou5']) ? trim($_POST['tabou5']) : '';
$this->et_c_est_le_temps_qui_court = date("d/m/Y H:i");
}
// initialisation du booléen de codiion finale d'acceptation de la génération
$this->boobool = true;
// récupération des informations relatives à l'utilisateur: userid, et sa langue.
$this->user = user::getInstance();
$this->oracle = $this->user->id;
$this->userlang = $this->user->userlang;
// la génération automatique de carte n'existe qu'en français pour l'instant
if ($this->userlang !== 'fr'){
array_push( $this->errors,'no_card_active');
}
return true;
}
public function crawler()
{
if ( (($this->submit) && ($this->boobool == false)) || (!$this->submit)) // si on a appuyé sur valider mais que la carte est mauvaise (rechargement de la page) ou qu'on n'a pas encore appuyé sur valider
{
include_once('controllers/simple_html_dom.php');
// fonction aléatoire entre 0 et 100 000
$alea = mt_rand(0, 100000);
$target_url = 'http://www.jeuxdemots.org/rezo-xml.php?gotermrelid='.$alea;
$html = new simple_html_dom();
$html->load_file($target_url);
$motatrouver='';
$listemot = '';
foreach($html->find('body') as $post){
$post= iconv("ISO-8859-1", "UTF-8", $post);
$posts = $post ? explode('<br>', $post) : array();
foreach ($posts as $wpost){
$findmot = '&lt;mot-formate&gt;'; // pour trouver le mot à trouver
$findme = '&quot; tid=&quot;'; // pour trouver les mots tabous
$mos = strpos($wpost, $findmot);
$pos = strpos($wpost, $findme);
// Notez notre utilisation de ===. == ne fonctionnerait pas comme attendu
// car la position de 'a' est la 0-ième (premier) caractère.
if ($mos !== false) {
$pos1=strpos($wpost, '&lt;mot-formate&gt;');
$pos2=strpos($wpost, '&lt;/mot-formate&gt;');
$motatrouver=substr($wpost, $pos1+19, ($pos2-($pos1+19)));
// echo "mot à trouver : ".$word.'<br />';
$listemot = $motatrouver;
}
if ($pos !== false) {
$pos1=strpos($wpost, '&quot;&gt;');
$pos2=strpos($wpost, '&lt;/rel&gt;');
$tabword=substr($wpost, $pos1+10, ($pos2-($pos1+10)));
// récupération de la balise de relation pour affinage futur du crawler
$pos3=strpos($wpost, '&lt;rel type=&quot;');
$pos4=strpos($wpost, '&quot; poids');
$tabbalise=substr($wpost, $pos3+19, ($pos4-($pos3+19)));
//ici appel d'une fonction de tri qui renvoie vrai ou faux selon si le mot est acceptable comme mot tabou
// test de $motatrouver dans $tabword, test de "_" dans $tabword, test de /^[A-Za-z]/ (s'il n'y a que des chiffres)
// si au moins une de ces conditions est vrai alors la fonction renvoie false et le mot n'est pas ajouté.
if ($this->checkmottab($motatrouver,$tabword,$tabbalise,$listemot)==true){
//test extérieur car la fonction renvoie juste vrai. remplace "patate>89621" par "patate" tout court
$tabword = preg_replace ('/\&gt;[0-9]+/', '' , $tabword);
$listemot = $listemot.",".$tabword;
}
}
}
//changement d'encodage à faire ici
$this->tableau = $listemot ? explode(',', $listemot) : array();
//Si la carte n'a pas 5 mots tabous, on ne la valide pas.
if (!isset($this->tableau[5]))
{
$this->boobool = false;
}else{
// carte acceptée
//adaptation à la page display qui utilise $res
$this->res['mot'] = $this->tableau[0];
$this->res['tabou1'] = $this->tableau[1];
$this->res['tabou2'] = $this->tableau[2];
$this->res['tabou3'] = $this->tableau[3];
$this->res['tabou4'] = $this->tableau[4];
$this->res['tabou5'] = $this->tableau[5];
$this->boobool =true;
}
}
}
}
private function checkmottab($a,$b,$c,$d) //$a = $motatrouver, $b = $tabword, $c = $tabbalise, $d = $listemot
{
$inclusiondash = strpos($b, '_'); //supprime tout ce qui commence par "_"
if($inclusiondash !== false){
return false;
}
$tagset = strpos($c, 'r_pos'); //supprime ce qui n'est que tag (Nom+Masc+Sing)
if($tagset !== false){
return false;
}
$inclusionmot = stripos($b, $a);//supprime tous les tabword contenant le mot à trouver: à affiner car on pourrait garder le reste
if($inclusionmot !== false){
return false;
}
$racinemot= substr($a,0,4); //récupère les 4 premiers caractères du mots (racine) si le mot ne fait que 3 lettres ça prend les trois lettres
$inclusionracine = stripos($b,$racinemot);
if($inclusionracine !== false){ // Si le mot tabou a la même racine que le mot à trouver
// L'idéal serait d'arriver à garder certains mots des locutions au lieu de les supprimer mais cette
//condition ne marche pas:
//~ $locution = preg_match($a.' W+ w+',$b); // Vérfification de locution, si s'en est une ($motatrouver de blabla):
//~ if (($locution !== false)){
//~ $b = preg_replace ($a.' W+ ', '' , $b);// remplace "$motatrouver de " par rien et ne garde que le "blabla".
//~ }else{
return false; //sinon c'est juste un mot de la même famille
//~ }
}
$suitepointschiffres = preg_match('/::/',$b); //enlève les suites du genre ":::112905:56362"
if (($suitepointschiffres == 1)){
return false;
}
$racinetab= substr($b,0,4); //récupère les 4 premiers caractères du mots (racine) si le mot ne fait que 3 lettres ça prend les trois lettres
$doublon = stripos($d,$racinetab); // recherche du mot tabou dans la liste des mots tabous déjà enregistrés
if (($doublon !== false)){
return false;
}
return true;
}
private function display()
{
if (!$this->boobool) //carte non validée
{
//on relance la procédure de génération
$this->process();
}else{
if(isset($_POST['submit_form'])) //carte validée, enregistrement dans la BD
{
if ( !$this->submit || $this->errors )
{
return false;
}
// insertion de la carte
$forbidden = array();
for($i=1;isset($this->res['tabou'.$i]);$i++){
array_push($forbidden,$this->res['tabou'.$i]);
}
$carte = new Card($this->userlang, NULL,
$this->res['nivcarte'], "nom", $this->oracle, $this->res['mot'], $forbidden, Array()/*, './views/card.inline.display.php'*/);
$carte->store();
$this->card = $carte ;
unset($this->res);
// affichage de la carte
include('./views/oracle.card.display.html');
}else{
//si carte pas encore validée, c'est le premier passage dans la page : affichage de la page génération de carte
include('./views/oracle.alea.html');
}
}
return true;
}
}
?>
......@@ -23,7 +23,6 @@ class oracle_menu
$controller->set_mode($this->mode);
return $controller->process();
break;
case 'oracle.byid':
include('controllers/oracle.card.byid.class.php');
$controller = new oracle_card_byid();
......
<?php
require_once("lexInnova.class.php");
class oracle_menu_game
{
private $userlang = '';
private $user= '';
private $oracle ='';
private $wronglang ='0';
private $mode = '';
public function set_mode($mode)
......@@ -28,10 +27,7 @@ class oracle_menu_game
$this->user = user::getInstance();
$this->oracle = $this->user->id;
$this->userlang = $this->user->userlang;
// Si l'utilisateur n'apprend pas le franais, initalisation de wronglang 1. Solution provisoire.
if ($this->userlang !== 'fr'){
$this->wronglang = "1";
}
$this->lexicon = new LexInnovaLink($this->user);
return true;
}
......
......@@ -100,6 +100,7 @@ $lang['enter_id'] ='Entrer an Id';
$lang['card_alea'] = 'Random Card (Create)';
$lang['card_exist'] = 'Random Card (Exist)';
$lang['card_by_id'] ='Card by it\'s Identification';
$lang['card_lexinno']='Linked to your lexicon';
// Description d'une carte : Oracle
$lang['card_descr'] = 'Card Description';
......
......@@ -53,6 +53,7 @@ $lang['select_role'] = 'Selectionez un rôle';
$lang['card_create'] = 'Création d\'une carte';
$lang['card_description'] = 'Description d\'une carte';
$lang['game_arbitrage'] = 'Arbitrage d\'une partie';
$lang['card_lexinno']='Carte liée à votre lexique';
// Description d'une carte par un Oracle oracle.card.display.html
$lang['warning'] = 'Attention, votre micro n\'a pas été activé.';
......
......@@ -42,7 +42,13 @@ include('./sys/load_iso.php');
<a href="?mode=oracle.card.alea" title="card_alea"><?php echo $lang['card_alea']; ?></a>
</li>
<?php
}
}
$disable="";
if($this->lexicon->count_entries()==0){
$disable = 'disabled="disabled"';
}
echo "<li type='button' $disable class='btn btn-primary btn-lg btn-block'>
<a href='?mode=oracle.card.alea' title='card_alea'>".$lang['card_lexinno'].'</a></li>';
?>
<li type="button" class="btn btn-primary btn-lg btn-block">
<a href="?mode=oracle.byid" title="card_byid"><?php echo $lang['card_by_id']; ?></a>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment