Merge branch 'unstable' of https://github.com/jsmaniac/2011-m1s2-ter into unstable
This commit is contained in:
commit
0f231d80ab
|
@ -24,14 +24,14 @@ public class Network {
|
|||
|
||||
public static class Check implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private boolean login_ok = false;
|
||||
private boolean loginOk = false;
|
||||
|
||||
public boolean isLogin_ok() {
|
||||
return login_ok;
|
||||
public boolean isLoginOk() {
|
||||
return loginOk;
|
||||
}
|
||||
|
||||
public void setLogin_ok(boolean login_ok) {
|
||||
this.login_ok = login_ok;
|
||||
public void setLoginOk(boolean loginOk) {
|
||||
this.loginOk = loginOk;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ public class Network {
|
|||
json = HttpClient.SendHttpPost(urlS);
|
||||
|
||||
Check check = gson.fromJson(json, Check.class);
|
||||
res = check.isLogin_ok();
|
||||
res = check.isLoginOk();
|
||||
|
||||
SharedPreferences.Editor editor = sp.edit();
|
||||
editor.putBoolean(Constant.SERVER_AUTH, res);
|
||||
|
|
|
@ -84,7 +84,7 @@ html, body {
|
|||
<div><img class="icon" alt="" src="ressources/img/72/default.png" /></div>
|
||||
<div class="text">Connexion</div>
|
||||
</div>
|
||||
<div class="frontpage-button about">
|
||||
<div class="frontpage-button info">
|
||||
<div><img class="icon" alt="" src="ressources/img/72/default.png" /></div>
|
||||
<div class="text">A Propos</div>
|
||||
</div>
|
||||
|
@ -94,6 +94,49 @@ html, body {
|
|||
<div class="scores"></div>
|
||||
<input type="button" value="J'ai vu !" id="jaivu"/>
|
||||
</div>
|
||||
<div class="screen" id="connection">
|
||||
<form id="connect-form" action="#" method="GET">
|
||||
<label id="user-label" for="user">Login : </label>
|
||||
<input type="text" name="user" id="user" />
|
||||
<label id="passwd-label" for="passwd">Mot de passe : </label>
|
||||
<input type="password" name="passwd" id="passwd" />
|
||||
<input type="submit" name="connect" id="connect" value="Se connecter" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="screen" id="info">
|
||||
<div class="container">
|
||||
<p>
|
||||
PtiClic a été conçu et développé par Mathieu Lafourcade
|
||||
(LIRMM - Université Montpellier 2) et Virginie Zampa
|
||||
(LIDILEM - Université Stendhal Grenoble 3)
|
||||
</p>
|
||||
<p>
|
||||
La présente version pour SmartPhone sous Android, en cours
|
||||
de développement a été conçue et réalisée par des
|
||||
étudiants en Master 1 à l'Université Montpellier II :
|
||||
Yoann BONAVERO, Bertrand BRUN, John CHARRON et
|
||||
Georges DUPÉRON.
|
||||
</p>
|
||||
<p>
|
||||
Cette version du PtiClic est une version Alpha. Elle n'est
|
||||
pas exempte de bogues.
|
||||
</p>
|
||||
<p>
|
||||
Si vous souhaitez participer au projet en tant que
|
||||
Bêta-testeur, rendez-vous sur le site
|
||||
<a href="http://pticlic.fr/">http://pticlic.fr</a>
|
||||
pour vous y inscrire.
|
||||
</p>
|
||||
<p>
|
||||
Si vous souhaitez signaler des bogues ou nous faire part
|
||||
de vos commentaires, vous pouvez nous contacter par
|
||||
courriel à l'adresse suivante : <a href="mailto:pticlic.android.beta@gmail.com">pticlic.android.beta@gmail.com</a>
|
||||
</p>
|
||||
<p id="info-back-p">
|
||||
<input id="info-back" type="button" value="Retour" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="templates" style="display: none;">
|
||||
<div class="relationBox">
|
||||
<div class="relation"><img class="icon" alt="" src="ressources/img/72/default.png" /><span class="text"></span></div>
|
||||
|
@ -105,3 +148,4 @@ html, body {
|
|||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
|
|
|
@ -40,7 +40,10 @@ require_once("ressources/db.inc");
|
|||
function checkLogin($user, $passwd) {
|
||||
if(isset($_SESSION['userId']))
|
||||
return true;
|
||||
|
||||
connect($user, $passwd);
|
||||
}
|
||||
|
||||
function connect($user, $passwd) {
|
||||
$db = getDB();
|
||||
$hashPasswd = md5($passwd);
|
||||
$loginIsOk = ($hashPasswd == $db->querySingle("SELECT hash_passwd FROM user WHERE login='".$user."';"));
|
||||
|
@ -752,7 +755,6 @@ function insertNode($node) {
|
|||
/** retourne l'eid d'un mot.
|
||||
* @param node : le mot dont on veut obtenir l'eid.
|
||||
*/
|
||||
|
||||
function getNodeEid($node) {
|
||||
$db = getDB();
|
||||
|
||||
|
|
|
@ -45,27 +45,30 @@ $.fn.sumHeight = function() {
|
|||
} catch(e) {alert("Error sumHeight");alert(e);}
|
||||
}
|
||||
|
||||
$.fn.fitFont = function(w, h, minFont, maxFont) {
|
||||
$.fn.fitFont = function(w, h, minFont, maxFont, noContainer) {
|
||||
try {
|
||||
var oldpos = this.css("position");
|
||||
this.css({
|
||||
position: "absolute",
|
||||
maxWidth: w
|
||||
});
|
||||
var wrappers = this.wrapInner("<span/>").children();
|
||||
if (noContainer) {
|
||||
var wrappers = this;
|
||||
} else {
|
||||
var wrappers = this.wrapInner("<span/>").children();
|
||||
}
|
||||
|
||||
var that = this;
|
||||
this.css("font-size", dichotomy(parseInt(this.css("font-size"), 10), function(x) {
|
||||
try {
|
||||
that.css("fontSize", x);
|
||||
fubar = wrappers;
|
||||
return (wrappers.maxHeight() > h || wrappers.maxWidth() > w);
|
||||
} catch(e) {alert("Error anonymous in $.fn.fitFont");alert(e);}
|
||||
},this).clip(minFont || 0, maxFont || Infinity));
|
||||
|
||||
// Restore stuff
|
||||
this.css("position", oldpos);
|
||||
//wrappers.children().unwrap();
|
||||
if (!noContainer) wrappers.children().unwrap();
|
||||
return this;
|
||||
} catch(e) {alert("Error $.fn.fitFont");alert(e);}
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ function jss() {
|
|||
else if(h > 500) iconSize = 48;
|
||||
else iconSize = 36;
|
||||
|
||||
$("#"+"state.screen"+".screen")
|
||||
$("#"+state.screen+".screen")
|
||||
.wh(w, h)
|
||||
.northWest({top:0,left:0});
|
||||
|
||||
|
@ -124,14 +124,58 @@ $(function() {
|
|||
} catch(e) {alert("Error main function");alert(e);}
|
||||
});
|
||||
|
||||
function ajaxError(x) {
|
||||
// ==== Asynchronous Javascript And Json.
|
||||
ajaj = {};
|
||||
ajaj.request = function(url, data, okFunction, smallErrorFunction, bigErrorFunction) {
|
||||
smallErrorFunction = smallErrorFunction || ajaj.smallError;
|
||||
bigErrorFunction = bigErrorFunction || ajaj.bigError;
|
||||
var user = UI().getPreference("user");
|
||||
var passwd = UI().getPreference("passwd");
|
||||
if (user != '' && passwd != '') {
|
||||
// TODO : on transfère le user/passwd à chaque fois ici… c'est pas très bon.
|
||||
data = $.extend({user:user, passwd:passwd}, data);
|
||||
}
|
||||
try {
|
||||
return $.getJSON(url, data, function(data) {
|
||||
if (data && data.isError) {
|
||||
smallErrorFunction(data);
|
||||
} else {
|
||||
okFunction(data);
|
||||
}
|
||||
}).error(bigErrorFunction);
|
||||
} catch(e) {alert("Error ajaj.request");alert(e);}
|
||||
}
|
||||
ajaj.smallError = function(x) {
|
||||
try {
|
||||
if (x.error == 10) {
|
||||
state.set('screen', 'connection').commit().validate();
|
||||
} else {
|
||||
ajaj.error(
|
||||
"Erreur fatale. Merci de nous envoyer ce message : \n"
|
||||
+ "Erreur signalée par le serveur\n"
|
||||
+ "Code:"+x.error+"\n"
|
||||
+ "Message:"+x.msg+"\n"
|
||||
);
|
||||
}
|
||||
} catch(e) {alert("Error ajaj.smallError");alert(e);}
|
||||
}
|
||||
ajaj.bigError = function(x) {
|
||||
try {
|
||||
ajaj.error(
|
||||
"Erreur fatale. Merci de nous envoyer ce message : \n"
|
||||
+ "Erreur de transmission\n"
|
||||
+ "Code:"+x.status+"\n"
|
||||
+ "État:"+x.statusText+"\n"
|
||||
+ "Message:"+x.responseText.substring(0,20)+" ("+x.responseText.length+")"
|
||||
);
|
||||
} catch(e) {alert("Error ajaj.bigError");alert(e);}
|
||||
}
|
||||
ajaj.error = function(msg) {
|
||||
try {
|
||||
UI().dismiss();
|
||||
var msg = "Erreur fatale. Merci de nous envoyer ce message : ";
|
||||
msg += x.status+" - "+x.statusText+"\n"+x.responseText.substring(0,20)+((x.responseText == '') ? '': '…');
|
||||
alert(msg);
|
||||
UI().exit();
|
||||
} catch(e) {alert("Error ajaxError");alert(e);}
|
||||
} catch(e) {alert("Error ajaj.error");alert(e);}
|
||||
}
|
||||
|
||||
// ==== Code métier pour le splash
|
||||
|
@ -205,7 +249,7 @@ frontpage.jss = function(w, h, iconSize) {
|
|||
$fp(".game .icon").data('image', 'mode_normal');
|
||||
$fp(".prefs .icon").data('image', 'config');
|
||||
$fp(".connection .icon").data('image', 'config');
|
||||
$fp(".about .icon").data('image', 'aide');
|
||||
$fp(".info .icon").data('image', 'aide');
|
||||
|
||||
$fp(".frontpage-button")
|
||||
.css('text-align', 'center')
|
||||
|
@ -233,19 +277,36 @@ frontpage.jss = function(w, h, iconSize) {
|
|||
frontpage.enter = function () {
|
||||
try {
|
||||
if (location.hash != '') state.commit();
|
||||
$("#frontpage .frontpage-button.game").clickOnce(frontpage.click.game);
|
||||
$("#frontpage .frontpage-button.game").clickOnce(frontpage.click.goGame);
|
||||
$("#frontpage .frontpage-button.connection").clickOnce(frontpage.click.goConnection);
|
||||
$("#frontpage .frontpage-button.info").clickOnce(frontpage.click.goInfo);
|
||||
jss();
|
||||
UI().dismiss();
|
||||
} catch(e) {alert("Error frontpage.enter");alert(e);}
|
||||
};
|
||||
|
||||
frontpage.click = {};
|
||||
frontpage.click.game = function(){
|
||||
frontpage.click.goGame = function(){
|
||||
try {
|
||||
state.set('screen', 'game').validate();
|
||||
} catch(e) {alert("Error frontpage.click.game");alert(e);}
|
||||
} catch(e) {alert("Error frontpage.click.goGame");alert(e);}
|
||||
};
|
||||
|
||||
frontpage.click.goConnection = function() {
|
||||
try {
|
||||
UI().show("PtiClic", "Chargement…");
|
||||
state.set('screen', 'connection').commit().validate();
|
||||
} catch(e) {alert("Error frontpage.click.goConnection");alert(e);}
|
||||
};
|
||||
|
||||
frontpage.click.goInfo = function() {
|
||||
try {
|
||||
UI().show("PtiClic", "Chargement…");
|
||||
state.set('screen', 'info').commit().validate();
|
||||
} catch(e) {alert("Error frontpage.click.goInfo");alert(e);}
|
||||
};
|
||||
|
||||
|
||||
// ==== Code métier pour le jeu
|
||||
game = {};
|
||||
|
||||
|
@ -315,9 +376,7 @@ game.enter = function () {
|
|||
};
|
||||
if (notAlreadyFetching) {
|
||||
UI().show("PtiClic", "Récupération de la partie");
|
||||
$.getJSON("getGame.php?callback=?", {
|
||||
user:"foo",
|
||||
passwd:"bar",
|
||||
ajaj.request("getGame.php?callback=?", {
|
||||
nonce:Math.random()
|
||||
}, function(data) {
|
||||
try {
|
||||
|
@ -325,7 +384,7 @@ game.enter = function () {
|
|||
runstate.gameFetched = false;
|
||||
fn(data);
|
||||
} catch(e) {alert("Error anonymous 2 in game.enter");alert(e);}
|
||||
}).error(ajaxError);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
game.buildUi();
|
||||
|
@ -429,7 +488,7 @@ score = {};
|
|||
|
||||
score.jss = function(w, h, iconSize) {
|
||||
try {
|
||||
$(".screen")
|
||||
$("#score.screen")
|
||||
.css('text-align', 'center');
|
||||
} catch(e) {alert("Error score.jss");alert(e);}
|
||||
};
|
||||
|
@ -452,9 +511,7 @@ score.enter = function () {
|
|||
};
|
||||
if (notAlreadyFetching) {
|
||||
UI().show("PtiClic", "Calcul de votre score");
|
||||
$.getJSON("server.php?callback=?", {
|
||||
user: "foo",
|
||||
passwd: "bar",
|
||||
ajaj.request("server.php?callback=?", {
|
||||
action: 1,
|
||||
pgid: state.game.pgid,
|
||||
gid: state.game.gid,
|
||||
|
@ -466,7 +523,7 @@ score.enter = function () {
|
|||
runstate.scoreFetched = false;
|
||||
fn(data);
|
||||
} catch(e) {alert("Error anonymous 2 in score.enter");alert(e);}
|
||||
}).error(ajaxError);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
score.ui();
|
||||
|
@ -515,3 +572,88 @@ score.click.jaivu = function() {
|
|||
state = new State().validate();
|
||||
} catch(e) {alert("Error score.click.jaivu");alert(e);}
|
||||
};
|
||||
|
||||
// ==== Code métier pour la connexion
|
||||
connection = {};
|
||||
|
||||
connection.jss = function(w, h, iconSize) {
|
||||
try {
|
||||
var c = $("#connection.screen");
|
||||
var $c = function() {
|
||||
try {
|
||||
return c.find.apply(c,arguments);
|
||||
} catch(e) {alert("Error anonymous 1 in connection.jss");alert(e);}
|
||||
};
|
||||
|
||||
(c)
|
||||
.css('text-align', 'center');
|
||||
|
||||
$c("label")
|
||||
.css("white-space", "nowrap");
|
||||
$c("input, label")
|
||||
.css('position', 'absolute')
|
||||
.fitFont(w*0.3, h*0.25);
|
||||
$c("#user-label").east({left:w/2,top:h*0.25});
|
||||
$c("#user").west({left:w/2,top:h*0.25});
|
||||
$c("#passwd-label").east({left:w/2,top:h*0.5});
|
||||
$c("#passwd").west({left:w/2,top:h*0.5});
|
||||
$c("#connect").center({left:w/2,top:h*0.75});
|
||||
} catch(e) {alert("Error connection.jss");alert(e);}
|
||||
};
|
||||
|
||||
connection.enter = function() {
|
||||
try {
|
||||
jss();
|
||||
$("#connect-form").unbind("submit", connection.connect).submit(connection.connect);
|
||||
UI().dismiss();
|
||||
} catch(e) {alert("Error connection.enter");alert(e);}
|
||||
};
|
||||
|
||||
connection.connect = function() {
|
||||
try {
|
||||
UI().setPreference("user", $("#user").val());
|
||||
UI().setPreference("passwd", $("#passwd").val());
|
||||
ajaj.request("server.php?callback=?", {
|
||||
action: 3,
|
||||
user: $("#user").val(),
|
||||
passwd: $("#passwd").val(),
|
||||
}, connection.connectFetched, connection.connectFetched);
|
||||
return false
|
||||
} catch(e) {alert("Error connection.connect");alert(e);}
|
||||
}
|
||||
|
||||
connection.connectFetched = function(data) {
|
||||
try {
|
||||
if (data && data.loginOk) {
|
||||
alert("Vous êtes connecté !");
|
||||
} else if (data && data.isError && data.error == 3) {
|
||||
alert(data.msg);
|
||||
} else {
|
||||
ajaj.smallError(data);
|
||||
}
|
||||
state.set('screen', 'frontpage').validate();
|
||||
} catch(e) {alert("Error connection.connectFetched");alert(e);}
|
||||
}
|
||||
|
||||
// ==== Code métier pour la page d'info
|
||||
info = {};
|
||||
|
||||
info.jss = function(w,h,iconSize) {
|
||||
$("#info-back-p").css('text-align', 'center');
|
||||
$("#info.screen .container input").css('font-size', 'inherit');
|
||||
$("#info.screen .container")
|
||||
.fitFont(w*0.9, h*0.9, null, null, true)
|
||||
.center($("#info.screen"));
|
||||
}
|
||||
|
||||
info.enter = function() {
|
||||
try {
|
||||
jss();
|
||||
$("#info-back").clickOnce(function(){
|
||||
try {
|
||||
state.set('screen', 'frontpage').validate();
|
||||
} catch(e) {alert("Error anonymous in info.enter");alert(e);}
|
||||
});
|
||||
UI().dismiss();
|
||||
} catch(e) {alert("Error info.enter");alert(e);}
|
||||
};
|
||||
|
|
|
@ -31,27 +31,38 @@ function logError($errNum, $msg, $other="")
|
|||
*/
|
||||
function main()
|
||||
{
|
||||
if(!isset($_GET['action']))
|
||||
throw new Exception("La requête est incomplète", 2);
|
||||
else if(!isset($_SESSION['userId']) && (!isset($_GET['user']) || !isset($_GET['passwd'])))
|
||||
throw new Exception("La requête est incomplète", 2);
|
||||
else if(isset($_SESSION['userId'])) {
|
||||
$loginIsOk = false;
|
||||
$user = 'nobody';
|
||||
if(!isset($_GET['action'])) {
|
||||
throw new Exception("La requête est incomplète.", 2);
|
||||
}
|
||||
if(isset($_GET['user']) && isset($_GET['passwd'])) {
|
||||
unset($_SESSION['userId']);
|
||||
$user = SQLite3::escapeString($_GET['user']);
|
||||
$loginIsOk = connect($user, $_GET['passwd']);
|
||||
if ($loginIsOk) {
|
||||
$_SESSION['userId'] = $user;
|
||||
} else {
|
||||
throw new Exception("Utilisateur non enregistré ou mauvais mot de passe.", 3);
|
||||
}
|
||||
} elseif(isset($_SESSION['userId'])) {
|
||||
$user = $_SESSION['userId'];
|
||||
$loginIsOk = true;
|
||||
}
|
||||
else {
|
||||
$user = SQLite3::escapeString($_GET['user']);
|
||||
$loginIsOk = checkLogin($user, $_GET['passwd']);
|
||||
}
|
||||
|
||||
$action = $_GET['action'];
|
||||
|
||||
if ($action != 3 && (!$loginIsOk)) {
|
||||
throw new Exception("Utilisateur non enregistré ou mauvais mot de passe", 3);
|
||||
throw new Exception("Vous n'êtes pas connecté.", 10);
|
||||
}
|
||||
if ($action == 3) {
|
||||
echo '{"login_ok":' . ($loginIsOk ? 'true' : 'false') . '}';
|
||||
exit;
|
||||
echo json_encode(
|
||||
Array(
|
||||
"loginOk" => !!$loginIsOk,
|
||||
"whoami" => "".$user
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Sinon tout est bon on effectue l'opération correspondant à la commande passée.
|
||||
|
@ -78,7 +89,7 @@ function main()
|
|||
setGameGetScore($user, $_GET['pgid'], $_GET['gid'], $_GET['answers']);
|
||||
} else if($action == 4) { // CheckWord
|
||||
if (!isset($_GET['word']))
|
||||
errRequestIncomplete();
|
||||
throw new Exception("La requête est incomplète", 2);
|
||||
|
||||
if(wordExist($_GET['word']))
|
||||
echo "true";
|
||||
|
@ -90,13 +101,13 @@ function main()
|
|||
}
|
||||
else if($action == 6) {
|
||||
if (!isset($_GET['game']))
|
||||
errRequestIncomplete();
|
||||
throw new Exception("La requête est incomplète", 2);
|
||||
|
||||
decodeAndInsertGame($user,$_GET['game']);
|
||||
|
||||
} else {
|
||||
throw new Exception("Commande inconnue", 2);
|
||||
}
|
||||
// Attention, il y a une $action == 7, mais plus haut.
|
||||
}
|
||||
|
||||
function server() {
|
||||
|
@ -108,7 +119,13 @@ function server() {
|
|||
ob_end_flush();
|
||||
} catch (Exception $e) {
|
||||
ob_end_clean();
|
||||
echo "{\"error\":".$e->getCode().",\"msg\":".json_encode("".$e->getMessage())."}";
|
||||
echo json_encode(
|
||||
Array(
|
||||
"error" => $e->getCode(),
|
||||
"msg" => "".$e->getMessage(),
|
||||
"isError" => true
|
||||
)
|
||||
);
|
||||
logError($e->getCode(), $e->getMessage(), date("c"));
|
||||
closeDB();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user