www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 183767ce7bb53694e8b3001f41c189d594552220
parent 0f231d80abdd6af85fd01a6bea665a21b6e1dd14
Author: Bertrand BRUN <bertrand0brun@gmail.com>
Date:   Sat,  7 May 2011 23:32:06 +0200

Merge branch 'unstable' of https://github.com/jsmaniac/2011-m1s2-ter into unstable

Diffstat:
Mcode/serveur/dump2sqlite.sh | 1+
Mcode/serveur/php/jeu.html | 38++++++++++++++++++--------------------
Mcode/serveur/php/ressources/backend.inc | 31+++++++++++++++++++++++++++++++
Acode/serveur/php/ressources/black.css | 36++++++++++++++++++++++++++++++++++++
Acode/serveur/php/ressources/green.css | 36++++++++++++++++++++++++++++++++++++
Mcode/serveur/php/ressources/pticlic.js | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
Mcode/serveur/php/server.php | 7++++++-
7 files changed, 202 insertions(+), 40 deletions(-)

diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh @@ -34,6 +34,7 @@ create table played_game_cloud(pgid, gid, type, num, relation, weight, score); create table colon_nodes(eid); create table random_cloud_node(eid,nbneighbors); create table random_center_node(eid); +create table user_info(user, key, value, primary key (user, key)); insert into user(login, mail, hash_passwd, score, ugroup) values('$(echo "$user" | sed -e "s/'/''/g")', 'foo@isp.com', '$(echo "$passwd" | dd bs=1 count="${#passwd}" | (if which md5sum >/dev/null 2>&1; then md5sum; else md5; fi) | cut -d ' ' -f 1)', 0, 1); EOF diff --git a/code/serveur/php/jeu.html b/code/serveur/php/jeu.html @@ -5,41 +5,27 @@ <meta charset="utf-8" /> <style> html, body { - background-color: black; overflow: hidden; } .screen { - background-color: #FFFFE0; display: none; } #splash.screen { - background-color: black; display: block; } -#mc-caption { - color: #8b4; -} - -#mn-caption { - color: #4a4; -} - #mn-caption-block { - border-top: medium solid #44AA44; - border-bottom: medium solid #44AA44; - background-color: #F0F8D0; + border-top-width: medium; + border-top-style: solid; + border-bottom-width: medium; + border-bottom-style: solid; } .relationBox { - background-color: #F0F8D0; - border: thin solid #44AA44; -} - -.relations .hot { - background-color: yellow; + border-width: thin; + border-style: solid; } .clearboth { @@ -50,6 +36,7 @@ html, body { text-align: center; } </style> + <link rel="stylesheet" href="ressources/green.css" /> <script src="ressources/jquery-1.5.1.min.js"></script> <script src="ressources/jquery-ui-1.8.11.custom.min.js"></script> <script src="ressources/jquery.ba-hashchange.min.js"></script> @@ -137,6 +124,17 @@ html, body { </p> </div> </div> + <div class="screen" id="prefs"> + <form id="prefs-form" action="#" method="GET"> + <label id="theme-label" for="theme">Thème : </label> + <select name="theme" id="theme"> + <option value="green">Colline verdoyante</option> + <option value="black">Bas-fond de cachot</option> + </select> + <input type="submit" name="prefs-apply" id="prefs-apply" value="Appliquer" /> + <input type="reset" name="prefs-cancel" id="prefs-cancel" value="Annuler" /> + </form> + </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> diff --git a/code/serveur/php/ressources/backend.inc b/code/serveur/php/ressources/backend.inc @@ -766,4 +766,35 @@ function wordExist($node) { return getNodeEid($node) === null ? "0" : "1"; } + +function getUserInfo($user, $key) { + return getdb()->querySingle("SELECT value FROM user_info WHERE user = '".sqlite3::escapestring($user)."' AND key = '".SQLite3::escapeString($key)."';"); +} + +function setUserInfo($user, $key, $value) { + getDB()->exec("UPDATE user_info SET value = '".SQLite3::escapeString($value) + ."' WHERE user = '".SQLite3::escapeString($user) + ."' AND key = '".SQLite3::escapeString($key)."';"); +} + +function userPrefsDefaults() { + $prefs = Array( + "theme" => "green" + ); +} + +function userPrefs($user) { + $res = userPrefsDefaults(); + foreach ($res as $k => &$v) { + $x = getUserInfo($user, $k); + if ($x !== null) $v = $x; + } + echo json_encode($res); +} + +function setUserPref($user, $key, $value) { + if (array_key_exists($key, userPrefsDefaults())) + setUserInfo($user, $key, $value); +} + ?> \ No newline at end of file diff --git a/code/serveur/php/ressources/black.css b/code/serveur/php/ressources/black.css @@ -0,0 +1,36 @@ +/* Colors */ + +html, body { + background-color: black; + color: white; +} + +.screen { + background-color: black; +} + +#splash.screen { + background-color: black; +} + +#mc-caption { + color: white; +} + +#mn-caption { + color: white; +} + +#mn-caption-block { + border-color: #aaaaaa; + background-color: #222222; +} + +.relationBox { + border-color: #cccccc; + background-color: #222222; +} + +.relations .hot { + background-color: #cccccc; +} diff --git a/code/serveur/php/ressources/green.css b/code/serveur/php/ressources/green.css @@ -0,0 +1,36 @@ +/* Colors */ + +html, body { + background-color: black; + color: black; +} + +.screen { + background-color: #FFFFE0; +} + +#splash.screen { + background-color: black; +} + +#mc-caption { + color: #8b4; +} + +#mn-caption { + color: #4a4; +} + +#mn-caption-block { + border-color: #44AA44; + background-color: #F0F8D0; +} + +.relationBox { + border-color: #44AA44; + background-color: #F0F8D0; +} + +.relations .hot { + background-color: yellow; +} diff --git a/code/serveur/php/ressources/pticlic.js b/code/serveur/php/ressources/pticlic.js @@ -1,4 +1,6 @@ // ==== URL persistante +var nullFunction = function(){}; + function State(init) { try { $.extend(this, init || {}); @@ -109,6 +111,7 @@ function UI () { window.console && console.log(msg); } catch(e) {alert("Error UI.log");alert(e);} }, + info: function(title, msg) { alert(msg); }, setScreen: function() {} }; } @@ -173,7 +176,7 @@ ajaj.bigError = function(x) { ajaj.error = function(msg) { try { UI().dismiss(); - alert(msg); + UI().info("Erreur !", msg); UI().exit(); } catch(e) {alert("Error ajaj.error");alert(e);} } @@ -280,6 +283,7 @@ frontpage.enter = function () { $("#frontpage .frontpage-button.game").clickOnce(frontpage.click.goGame); $("#frontpage .frontpage-button.connection").clickOnce(frontpage.click.goConnection); $("#frontpage .frontpage-button.info").clickOnce(frontpage.click.goInfo); + $("#frontpage .frontpage-button.prefs").clickOnce(frontpage.click.goPrefs); jss(); UI().dismiss(); } catch(e) {alert("Error frontpage.enter");alert(e);} @@ -306,6 +310,12 @@ frontpage.click.goInfo = function() { } catch(e) {alert("Error frontpage.click.goInfo");alert(e);} }; +frontpage.click.goPrefs = function() { + try { + UI().show("PtiClic", "Chargement…"); + state.set('screen', 'prefs').commit().validate(); + } catch(e) {alert("Error frontpage.click.goPrefs");alert(e);} +}; // ==== Code métier pour le jeu game = {}; @@ -364,7 +374,7 @@ game.jss = function(w, h, iconSize) { game.enter = function () { try { if (!state.game) { - var notAlreadyFetching = !runstate.gameFetched; + var notAlreadyFetching = !runstate.gameFetched || runstate.gameFetched == nullFunction; runstate.gameFetched = function(data) { try { state.game = data; @@ -396,7 +406,7 @@ game.leave = function () { try { $("#game .relations").empty(); $('#game #mn-caption').stop().clearQueue(); - if (runstate.gameFetched) runstate.gameFetched = function() {}; + if (runstate.gameFetched) runstate.gameFetched = nullFunction; } catch(e) {alert("Error game.leave");alert(e);} }; @@ -496,7 +506,7 @@ score.jss = function(w, h, iconSize) { score.enter = function () { try { if (!state.hasScore) { - var notAlreadyFetching = !runstate.scoreFetched; + var notAlreadyFetching = !runstate.scoreFetched || runstate.scoreFetched == nullFunction; runstate.scoreFetched = function(data) { try { for (var i = 0; i < data.scores.length; ++i) { @@ -534,7 +544,7 @@ score.enter = function () { score.leave = function () { try { - if (runstate.scoreFetched) runstate.scoreFetched = function() {}; + if (runstate.scoreFetched) runstate.scoreFetched = nullFunction; $("#score .scores").empty(); $("#templates .scoreTotal").empty(); } catch(e) {alert("Error score.leave");alert(e);} @@ -585,12 +595,8 @@ connection.jss = function(w, h, iconSize) { } 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("white-space", "nowrap") .css('position', 'absolute') .fitFont(w*0.3, h*0.25); $c("#user-label").east({left:w/2,top:h*0.25}); @@ -603,8 +609,8 @@ connection.jss = function(w, h, iconSize) { connection.enter = function() { try { - jss(); $("#connect-form").unbind("submit", connection.connect).submit(connection.connect); + jss(); UI().dismiss(); } catch(e) {alert("Error connection.enter");alert(e);} }; @@ -618,16 +624,16 @@ connection.connect = function() { user: $("#user").val(), passwd: $("#passwd").val(), }, connection.connectFetched, connection.connectFetched); - return false + return false; } catch(e) {alert("Error connection.connect");alert(e);} } connection.connectFetched = function(data) { try { if (data && data.loginOk) { - alert("Vous êtes connecté !"); + UI().info("Connexion", "Vous êtes connecté !"); } else if (data && data.isError && data.error == 3) { - alert(data.msg); + UI().info("Connexion", data.msg); } else { ajaj.smallError(data); } @@ -648,12 +654,61 @@ info.jss = function(w,h,iconSize) { info.enter = function() { try { + $("#info-back").clickOnce(info.click.goBack); 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);} }; + +info.click = {}; +info.click.goBack = function(){ + try { + state.set('screen', 'frontpage').validate(); + } catch(e) {alert("Error anonymous in info.enter");alert(e);} +}; + +// ==== Code métier pour la page de configuration +prefs = {}; + +prefs.jss = function(w,h,iconSize) { + try { + var p = $("#prefs.screen"); + var $p = function() { + try { + return p.find.apply(p,arguments); + } catch(e) {alert("Error anonymous 1 in prefs.jss");alert(e);} + }; + + $("input, label, select") + .css("white-space", "nowrap") + .css('position', 'absolute') + .fitFont(w*0.4, h*0.1); + $p("#theme-label").east({left:w/2,top:h*0.25}); + $p("#theme").west({left:w/2,top:h*0.25}); + $p("#prefs-cancel").east({left:w*0.45,top:h*0.5}); + $p("#prefs-apply").west({left:w*0.55,top:h*0.5}); + } catch(e) {alert("Error prefs.jss");alert(e);} +} + +prefs.enter = function() { + try { + $("#prefs-form").unbind('submit', prefs.apply).submit(prefs.apply); + $("#prefs-cancel").clickOnce(prefs.cancel); + jss(); + UI().dismiss(); + } catch(e) {alert("Error prefs.enter");alert(e);} +}; + +prefs.apply = function(){ + try { + alert($("#theme").val()); + state.set('screen', 'frontpage').validate(); + return false; + } catch(e) {alert("Error anonymous in prefs.click.apply");alert(e);} +}; + +prefs.cancel = function(){ + try { + state.set('screen', 'frontpage').validate(); + } catch(e) {alert("Error anonymous in prefs.click.cancel");alert(e);} +}; diff --git a/code/serveur/php/server.php b/code/serveur/php/server.php @@ -104,10 +104,15 @@ function main() throw new Exception("La requête est incomplète", 2); decodeAndInsertGame($user,$_GET['game']); + } elseif ($action == 7) { // Get user prefs + userPrefs($user); + } elseif ($action == 8) { // Set user pref + if (!isset($_GET['key']) || !isset($_GET['value'])) + throw new Exception("La requête est incomplète", 2); + setUserPref($user, $_GET['key'], $_GET['value']); } else { throw new Exception("Commande inconnue", 2); } - // Attention, il y a une $action == 7, mais plus haut. } function server() {