Some commit
This commit is contained in:
		
							parent
							
								
									464b3a47c0
								
							
						
					
					
						commit
						5e844538d2
					
				
							
								
								
									
										91
									
								
								controllers/prototype/dbrequests.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								controllers/prototype/dbrequests.js
									
									
									
									
										vendored
									
									
								
							@ -471,13 +471,19 @@ DBReq.Info.prototype.loadRedCoins = function() {
 | 
			
		||||
 * @memberof DBReq
 | 
			
		||||
 * @constructor
 | 
			
		||||
 */
 | 
			
		||||
DBReq.UserCreator = function(finishAction) {
 | 
			
		||||
DBReq.UserCreator = function(workerId, age, male, rating, lastTime, finishAction) {
 | 
			
		||||
    /**
 | 
			
		||||
     * Callback to call on the id when the user is created
 | 
			
		||||
     * @type {function}
 | 
			
		||||
     */
 | 
			
		||||
    this.finishAction = finishAction;
 | 
			
		||||
 | 
			
		||||
    this.workerId = workerId;
 | 
			
		||||
    this.age = age;
 | 
			
		||||
    this.male = male;
 | 
			
		||||
    this.rating = rating;
 | 
			
		||||
    this.lastTime = lastTime;
 | 
			
		||||
 | 
			
		||||
    // Connect to db
 | 
			
		||||
    var self = this;
 | 
			
		||||
    pg.connect(pgc.url, function(err, client, release) {
 | 
			
		||||
@ -492,25 +498,49 @@ DBReq.UserCreator = function(finishAction) {
 | 
			
		||||
 */
 | 
			
		||||
DBReq.UserCreator.prototype.execute = function() {
 | 
			
		||||
    var self = this;
 | 
			
		||||
    this.client.query(
 | 
			
		||||
        "INSERT INTO users DEFAULT VALUES; SELECT currval('users_id_seq');",
 | 
			
		||||
        [],
 | 
			
		||||
        function(err, result) {
 | 
			
		||||
            self.finalResult = result.rows[0].currval;
 | 
			
		||||
            self.finish();
 | 
			
		||||
        }
 | 
			
		||||
    );
 | 
			
		||||
    this.client.query("BEGIN; LOCK Users;", [], function() {
 | 
			
		||||
        self.client.query(
 | 
			
		||||
            "INSERT INTO users(worker_id, age, male, rating, lasttime)  VALUES($1, $2, $3, $4, $5);",
 | 
			
		||||
            [
 | 
			
		||||
                self.workerId,
 | 
			
		||||
                self.age,
 | 
			
		||||
                self.male,
 | 
			
		||||
                self.rating,
 | 
			
		||||
                self.lastTime
 | 
			
		||||
            ],
 | 
			
		||||
            function(err, result) {
 | 
			
		||||
                if (err !== null) {
 | 
			
		||||
                    Log.dberror(err + ' in UserCreator INSERT INTO');
 | 
			
		||||
                }
 | 
			
		||||
                self.client.query(
 | 
			
		||||
                    "SELECT max(id) FROM Users;",
 | 
			
		||||
                    [],
 | 
			
		||||
                    function(err, result) {
 | 
			
		||||
                        self.finalResult = result.rows[0].max;
 | 
			
		||||
                        self.finish();
 | 
			
		||||
                    }
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Release the DB connection and call the callback
 | 
			
		||||
 */
 | 
			
		||||
DBReq.UserCreator.prototype.finish = function() {
 | 
			
		||||
    this.release();
 | 
			
		||||
    this.client = null;
 | 
			
		||||
    this.release = null;
 | 
			
		||||
 | 
			
		||||
    this.finishAction(this.finalResult);
 | 
			
		||||
    var self = this;
 | 
			
		||||
 | 
			
		||||
    this.client.query("COMMIT;", [], function() {
 | 
			
		||||
 | 
			
		||||
        self.release();
 | 
			
		||||
        self.client = null;
 | 
			
		||||
        self.release = null;
 | 
			
		||||
 | 
			
		||||
        self.finishAction(self.finalResult);
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -535,8 +565,9 @@ DBReq.ExpCreator = function(userId, finishAction) {
 | 
			
		||||
        self.release = release;
 | 
			
		||||
 | 
			
		||||
        // Start transaction and lock table
 | 
			
		||||
        self.client.query("BEGIN; LOCK CoinCombination; LOCK Experiment;");
 | 
			
		||||
        self.execute();
 | 
			
		||||
        self.client.query("BEGIN; LOCK CoinCombination; LOCK Experiment;", [], function() {
 | 
			
		||||
            self.execute();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -591,6 +622,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
        "LIMIT 1;",
 | 
			
		||||
        [self.userId],
 | 
			
		||||
        function(err, result) {
 | 
			
		||||
            if (err !== null) {
 | 
			
		||||
                Log.dberror(err + ' in ExpCreator first request');
 | 
			
		||||
            }
 | 
			
		||||
            if (result.rows.length > 0) {
 | 
			
		||||
                // Set the result
 | 
			
		||||
                self.finalResult.coinCombinationId = result.rows[0].id;
 | 
			
		||||
@ -614,6 +648,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
                    "RETURNING id",
 | 
			
		||||
                    [self.userId, result.rows[0].id, result.rows[0].name],
 | 
			
		||||
                    function(err, result) {
 | 
			
		||||
                        if (err !== null) {
 | 
			
		||||
                            Log.dberror(err + ' in ExpCreator second request (with suggested experiment)');
 | 
			
		||||
                        }
 | 
			
		||||
                        self.finalResult.expId = result.rows[0].id;
 | 
			
		||||
                        self.finish();
 | 
			
		||||
                    }
 | 
			
		||||
@ -645,6 +682,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
                    "LIMIT 1;",
 | 
			
		||||
                    [self.userId],
 | 
			
		||||
                    function(err, result) {
 | 
			
		||||
                        if (err !== null) {
 | 
			
		||||
                            Log.dberror(err + ' in ExpCreator second request (without suggested experiment');
 | 
			
		||||
                        }
 | 
			
		||||
                        if (result.rows.length > 0) {
 | 
			
		||||
                            self.finalResult.sceneId = result.rows[0].sceneId;
 | 
			
		||||
                            self.finalResult.recommendationStyle = result.rows[0].name;
 | 
			
		||||
@ -658,6 +698,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
                                "LIMIT 8;",
 | 
			
		||||
                                [self.finalResult.sceneId],
 | 
			
		||||
                                function(err, result) {
 | 
			
		||||
                                    if (err !== null) {
 | 
			
		||||
                                        Log.dberror(err + ' in ExpCreator third request (without suggested experiment');
 | 
			
		||||
                                    }
 | 
			
		||||
                                    self.finalResult.coins = [];
 | 
			
		||||
                                    for (var i = 0; i < 8; i++) {
 | 
			
		||||
                                        self.finalResult.coins.push(result.rows[i].id);
 | 
			
		||||
@ -680,6 +723,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
                                            self.finalResult.coins[7],
 | 
			
		||||
                                        ],
 | 
			
		||||
                                        function(err, result) {
 | 
			
		||||
                                            if (err !== null) {
 | 
			
		||||
                                                Log.dberror(err + ' in ExpCreator fourth request (without suggested experiment');
 | 
			
		||||
                                            }
 | 
			
		||||
                                            self.finalResult.coinCombinationId = result.rows[0].id;
 | 
			
		||||
 | 
			
		||||
                                            // And create the experiment
 | 
			
		||||
@ -689,6 +735,9 @@ DBReq.ExpCreator.prototype.execute = function() {
 | 
			
		||||
                                                "RETURNING id;",
 | 
			
		||||
                                                [self.userId, self.finalResult.coinCombinationId, self.finalResult.recommendationStyle],
 | 
			
		||||
                                                function(err, result) {
 | 
			
		||||
                                                    if (err !== null) {
 | 
			
		||||
                                                        Log.dberror(err + ' in ExpCreator fifth request (without suggested experiment');
 | 
			
		||||
                                                    }
 | 
			
		||||
                                                    self.finalResult.expId = result.rows[0].id;
 | 
			
		||||
                                                    self.finish();
 | 
			
		||||
                                                }
 | 
			
		||||
@ -759,6 +808,10 @@ DBReq.UserIdChecker.prototype.execute = function() {
 | 
			
		||||
        "SELECT count(id) > 0 AS answer FROM users WHERE id = $1;",
 | 
			
		||||
        [self.id],
 | 
			
		||||
        function(err, result) {
 | 
			
		||||
            if (err !== null) {
 | 
			
		||||
                Log.dberror(err + ' in UserIdChecker');
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            self.finalResult = result.rows[0].answer;
 | 
			
		||||
            self.finish();
 | 
			
		||||
        }
 | 
			
		||||
@ -797,8 +850,10 @@ DBReq.UserNameChecker.prototype.execute = function() {
 | 
			
		||||
        "SELECT count(id) > 0 AS answer FROM users WHERE worker_id = $1",
 | 
			
		||||
        [self.name],
 | 
			
		||||
        function(err, result) {
 | 
			
		||||
            if (err !== null)
 | 
			
		||||
            if (err !== null) {
 | 
			
		||||
                Log.dberror(err + ' in UserNameChecker');
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            self.finalResult = result.rows[0].answer;
 | 
			
		||||
            self.finish();
 | 
			
		||||
        }
 | 
			
		||||
@ -1022,8 +1077,8 @@ DBReq.getInfo = function(id, callback) {
 | 
			
		||||
 * @memberof DBReq
 | 
			
		||||
 * @param callback {function} callback called on the new user id
 | 
			
		||||
 */
 | 
			
		||||
DBReq.createUser = function(callback) {
 | 
			
		||||
    new DBReq.UserCreator(callback);
 | 
			
		||||
DBReq.createUser = function(workerId, age, male, rating, lastTime, callback) {
 | 
			
		||||
    new DBReq.UserCreator(workerId, age, male, rating, lastTime, callback);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										88
									
								
								controllers/prototype/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										88
									
								
								controllers/prototype/index.js
									
									
									
									
										vendored
									
									
								
							@ -26,31 +26,40 @@ var sceneToFunction = function(scene) {
 | 
			
		||||
 | 
			
		||||
module.exports.game = function(req, res) {
 | 
			
		||||
 | 
			
		||||
    db.tryUser(req.session.userId, function(id) {
 | 
			
		||||
    db.checkUserId(req.session.userId, function(ok) {
 | 
			
		||||
 | 
			
		||||
        req.session.userId = id;
 | 
			
		||||
        if (ok) {
 | 
			
		||||
 | 
			
		||||
        db.createExp(id, function(expId, coinCombinationId, sceneId, recommendationStyle, coins) {
 | 
			
		||||
            db.createExp(
 | 
			
		||||
                req.session.userId,
 | 
			
		||||
                function(expId, coinCombinationId, sceneId, recommendationStyle, coins) {
 | 
			
		||||
 | 
			
		||||
            if (expId === undefined) {
 | 
			
		||||
                    if (expId === undefined) {
 | 
			
		||||
 | 
			
		||||
                res.redirect('/feedback');
 | 
			
		||||
                return;
 | 
			
		||||
                        res.redirect('/feedback');
 | 
			
		||||
                        return;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
            req.session.expId = expId;
 | 
			
		||||
            req.session.save();
 | 
			
		||||
                    req.session.expId = expId;
 | 
			
		||||
                    req.session.save();
 | 
			
		||||
 | 
			
		||||
            res.locals.scene = sceneToFunction(sceneId);
 | 
			
		||||
            res.locals.recommendationStyle = recommendationStyle;
 | 
			
		||||
            res.locals.coins = coins;
 | 
			
		||||
                    res.locals.scene = sceneToFunction(sceneId);
 | 
			
		||||
                    res.locals.recommendationStyle = recommendationStyle;
 | 
			
		||||
                    res.locals.coins = coins;
 | 
			
		||||
 | 
			
		||||
                    res.setHeader('Content-Type','text/html');
 | 
			
		||||
                    res.render('prototype_recommendation.jade', res.locals, function(err, result) {
 | 
			
		||||
                        res.send(result);
 | 
			
		||||
                    });
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
            res.redirect('/');
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            res.setHeader('Content-Type','text/html');
 | 
			
		||||
            res.render('prototype_recommendation.jade', res.locals, function(err, result) {
 | 
			
		||||
                res.send(result);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -105,20 +114,36 @@ module.exports.replayIndex = function(req, res, next) {
 | 
			
		||||
 | 
			
		||||
module.exports.tutorial = function(req, res) {
 | 
			
		||||
 | 
			
		||||
    db.tryUser(req.session.userId, function(id) {
 | 
			
		||||
        req.session.userId = id;
 | 
			
		||||
    if (req.session.tutorialDone) {
 | 
			
		||||
 | 
			
		||||
        // 1 is the ID of peach scene
 | 
			
		||||
        db.createTutorial(id, function(id, coins) {
 | 
			
		||||
            req.session.expId = id;
 | 
			
		||||
            res.locals.coins = coins;
 | 
			
		||||
            req.session.save();
 | 
			
		||||
        res.redirect('/before-begin');
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
            res.setHeader('Content-Type', 'text/html');
 | 
			
		||||
            res.render('tutorial.jade', res.locals, function(err, result) {
 | 
			
		||||
                res.send(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    db.checkUserId(req.session.userId, function(ok) {
 | 
			
		||||
 | 
			
		||||
        if (ok) {
 | 
			
		||||
 | 
			
		||||
            // 1 is the ID of peach scene
 | 
			
		||||
            db.createTutorial(req.session.userId, function(id, coins) {
 | 
			
		||||
                req.session.tutorialDone = true;
 | 
			
		||||
                req.session.expId = id;
 | 
			
		||||
                res.locals.coins = coins;
 | 
			
		||||
                req.session.save();
 | 
			
		||||
 | 
			
		||||
                res.setHeader('Content-Type', 'text/html');
 | 
			
		||||
                res.render('tutorial.jade', res.locals, function(err, result) {
 | 
			
		||||
                    res.send(result);
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
            res.redirect('/');
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
@ -160,6 +185,13 @@ module.exports.checker = editorHelper('prototype_checker.jade');
 | 
			
		||||
module.exports.userstudy = function(req, res) {
 | 
			
		||||
    res.setHeader('Content-Type', 'text/html');
 | 
			
		||||
 | 
			
		||||
    if (req.session.userId !== undefined) {
 | 
			
		||||
 | 
			
		||||
        res.redirect('/prototype/tutorial');
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.locals.identificationFailed = req.session.identificationFailed;
 | 
			
		||||
    req.session.identificationFailed = false;
 | 
			
		||||
    req.session.save();
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ block content
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    form.form-signin(method="POST", action='/identification', onsubmit='return validateForm()')
 | 
			
		||||
    form#form.form-signin(method="POST", action='/identification', onsubmit='return validateForm()')
 | 
			
		||||
        h2 Please sign in
 | 
			
		||||
        label(for='inputId').sr-only Id
 | 
			
		||||
        input#inputId.form-control(name="inputId", type="text", placeholder='Id', required, autofocus)
 | 
			
		||||
@ -90,4 +90,9 @@ block content
 | 
			
		||||
 | 
			
		||||
        input#3dgames(type='number', class='rating', min='0', max='5', step='1', default='3', name='input3dskills')
 | 
			
		||||
 | 
			
		||||
        button.btn.btn-lg.btn-primary.btn-block(type='submit') Sign in
 | 
			
		||||
        button#submitButton.btn.btn-lg.btn-primary.btn-block(type='submit') Sign in
 | 
			
		||||
        script.
 | 
			
		||||
            document.getElementById('submitButton').onclick = function() {
 | 
			
		||||
                document.getElementById('submitButton').disabled = true;
 | 
			
		||||
                document.getElementById('form').submit();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								js/l3d/apps/prototype/tutorial/main.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								js/l3d/apps/prototype/tutorial/main.js
									
									
									
									
										vendored
									
									
								
							@ -28,6 +28,16 @@ Coin.onCoinGot = function(val) {
 | 
			
		||||
 | 
			
		||||
Coin.onLastCoin = function() { setNextButton(nextPage); };
 | 
			
		||||
 | 
			
		||||
window.onbeforeunload = function() {
 | 
			
		||||
 | 
			
		||||
    if (!($('#next').is(":visible"))) {
 | 
			
		||||
 | 
			
		||||
        return "Warning : you are going to leave the tutorial, that's not good !";
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function main() {
 | 
			
		||||
 | 
			
		||||
    // Main container that holds everything
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ module.exports.index = function(req, res) {
 | 
			
		||||
    pg.connect(secret.url, function(err, client, release) {
 | 
			
		||||
        client.query(
 | 
			
		||||
            "INSERT INTO arrowclicked(exp_id, arrow_id, time) VALUES($1,$2, to_timestamp($3));",
 | 
			
		||||
            [req.session.exp_id, req.body.arrow_id, req.body.time],
 | 
			
		||||
            [req.session.expId, req.body.arrowId, req.body.time],
 | 
			
		||||
            function(err, result) {
 | 
			
		||||
                if (err !== null)
 | 
			
		||||
                    Log.dberror(err + ' arrow-clicked');
 | 
			
		||||
 | 
			
		||||
@ -7,32 +7,20 @@ module.exports.index = function(req, res) {
 | 
			
		||||
 | 
			
		||||
    db.checkUserName(req.body.inputId, function(ok) {
 | 
			
		||||
        if (!ok) {
 | 
			
		||||
            db.tryUser(req.session.userId, function(id) {
 | 
			
		||||
                req.session.userId = id;
 | 
			
		||||
                req.session.save();
 | 
			
		||||
 | 
			
		||||
                pg.connect(secret.url, function(err, client, release) {
 | 
			
		||||
                    client.query(
 | 
			
		||||
                        "UPDATE Users SET worker_id = $1, age = $2, male = $3, rating = $5, lasttime = $6 WHERE id = $4;",
 | 
			
		||||
                        [
 | 
			
		||||
                            req.body.inputId,
 | 
			
		||||
                            req.body.inputAge,
 | 
			
		||||
                            req.body.inputGender === 'male',
 | 
			
		||||
                            req.session.userId,
 | 
			
		||||
                            req.body.input3dskills,
 | 
			
		||||
                            req.body.inputLastTime
 | 
			
		||||
                        ],
 | 
			
		||||
                        function(err, result) {
 | 
			
		||||
                            if (err !== null)
 | 
			
		||||
                                Log.dberror(err + ' in identfication');
 | 
			
		||||
                            release();
 | 
			
		||||
                        }
 | 
			
		||||
                    );
 | 
			
		||||
                });
 | 
			
		||||
            db.createUser(
 | 
			
		||||
                req.body.inputId,
 | 
			
		||||
                req.body.inputAge,
 | 
			
		||||
                req.body.inputGender === 'male',
 | 
			
		||||
                req.body.input3dskills,
 | 
			
		||||
                req.body.inputLastTime,
 | 
			
		||||
                function(id) {
 | 
			
		||||
                    req.session.userId = id;
 | 
			
		||||
                    req.session.save();
 | 
			
		||||
                    res.redirect('/prototype/tutorial');
 | 
			
		||||
                }
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
                res.redirect('/prototype/tutorial');
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            req.session.identificationFailed = true;
 | 
			
		||||
            res.redirect('/user-study');
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user