Merge pull request #6601 from SaintPeter/feature/challenge-checksum

Add Checksum to Challenges for Google Analytics
pull/6615/merge
Berkeley Martinez 2016-01-31 17:36:16 -08:00
commit c7fc9dc99f
14 changed files with 32 additions and 5 deletions

View File

@ -129,7 +129,7 @@ window.common = (function(global) {
});
if (common.challengeName) {
window.ga('send', 'event', 'Challenge', 'load', common.challengeName);
window.ga('send', 'event', 'Challenge', 'load', common.gaName);
}
$('#complete-courseware-dialog').on('hidden.bs.modal', function() {

View File

@ -20,7 +20,7 @@ window.common = (function(global) {
const tail = common.arrayToNewLineString(common.tail);
const combinedCode = head + code + tail;
ga('send', 'event', 'Challenge', 'ran-code', common.challengeName);
ga('send', 'event', 'Challenge', 'ran-code', common.gaName);
// run checks for unsafe code
return detectUnsafeCode$(code)

View File

@ -13,7 +13,7 @@ window.common = (function(global) {
'event',
'Challenge',
'solved',
common.challengeName,
common.gaName,
true
);

View File

@ -29,6 +29,9 @@
"suborder": {
"type": "number"
},
"checksum": {
"type": "number"
},
"isBeta": {
"type": "boolean",
"description": "Show only during dev or on beta site. Completely omitted otherwise"

View File

@ -26,16 +26,17 @@
"license": "(BSD-3-Clause AND CC-BY-SA-4.0)",
"dependencies": {
"accepts": "^1.3.0",
"adler32": "~0.1.7",
"async": "^1.5.0",
"babel-cli": "^6.3.17",
"babel-core": "^6.3.26",
"babel-eslint": "^4.1.4",
"babel-loader": "^6.2.1",
"babel-register": "^6.3.0",
"babel-plugin-add-module-exports": "^0.1.2",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"babel-register": "^6.3.0",
"body-parser": "^1.13.2",
"chai-jquery": "^2.0.0",
"cheerio": "~0.19.0",

View File

@ -1,6 +1,7 @@
/* eslint-disable no-process-exit */
require('babel-register');
require('dotenv').load();
var adler32 = require('adler32');
var Rx = require('rx'),
_ = require('lodash'),
@ -40,6 +41,12 @@ destroy()
.replace(/\:/g, '')
.replace(/\s/g, '-');
challenge.checksum = adler32.sum(
Buffer(challenge.title +
JSON.stringify(challenge.description) +
JSON.stringify(challenge.challengeSeed) +
JSON.stringify(challenge.tests)));
challenge.fileName = fileName;
challenge.helpRoom = helpRoom;
challenge.order = order;

View File

@ -178,7 +178,10 @@ function getRenderData$(user, challenge$, origChallengeName, solution) {
// htmls specific
verb: randomVerb(),
phrase: randomPhrase(),
compliment: randomCompliment()
compliment: randomCompliment(),
// Google Analytics
gaName: challenge.title + '~' + challenge.checksum
}
});
});

View File

@ -1,5 +1,6 @@
import path from 'path';
import { Observable } from 'rx';
import adler32 from 'adler32';
const basePath = process.cwd() + '/seed/challenges/';
@ -21,6 +22,12 @@ export default function getFromDisk$(challenge) {
return _challenge;
})
.map(challenge => {
challenge.checksum = adler32.sum(
Buffer(challenge.title +
JSON.stringify(challenge.description) +
JSON.stringify(challenge.challengeSeed) +
JSON.stringify(challenge.tests)));
challenge.head = challenge.head || [];
challenge.tail = challenge.tail || [];
challenge.challengeType = '' + challenge.challengeType;

View File

@ -93,6 +93,7 @@ block content
common.challengeType = !{JSON.stringify(challengeType)};
common.dashedName = !{JSON.stringify(dashedName)};
common.isCompleted = !{JSON.stringify(isCompleted)};
common.gaName = !{JSON.stringify(gaName)};
common.username = !{JSON.stringify(user && user.username || '')};

View File

@ -84,6 +84,7 @@ block content
common.challengeType = !{JSON.stringify(challengeType)};
common.dashedName = !{JSON.stringify(dashedName)};
common.isCompleted = !{JSON.stringify(isCompleted)};
common.gaName = !{JSON.stringify(gaName)};
common.username = !{JSON.stringify(user && user.username || '')};

View File

@ -88,6 +88,7 @@ block content
common.challengeType = !{JSON.stringify(challengeType)};
common.dashedName = !{JSON.stringify(dashedName)};
common.isCompleted = !{JSON.stringify(isCompleted)};
common.gaName = !{JSON.stringify(gaName)};
common.username = !{JSON.stringify(user && user.username || '')};

View File

@ -49,6 +49,7 @@ block content
common.challengeName = !{JSON.stringify(name)};
common.challengeType = !{JSON.stringify(challengeType)};
common.dashedName = !{JSON.stringify(dashedName || '')};
common.gaName = !{JSON.stringify(gaName)};
common.isHonest = !{JSON.stringify(isHonest || false)};
common.isFrontEndCert = !{JSON.stringify(isFrontEndCert || false)};
common.isFullStackCert = !{JSON.stringify(isFullStackCert || false)};

View File

@ -56,6 +56,7 @@ block content
common.challengeName = !{JSON.stringify(name)};
common.challengeType = !{JSON.stringify(challengeType)};
common.dashedName = !{JSON.stringify(dashedName)};
common.gaName = !{JSON.stringify(gaName)};
common.init.push(function($) {
function controlEnterHandler(e) {
if (

View File

@ -68,6 +68,7 @@ block content
common.challengeId = !{JSON.stringify(id)};
common.challengeName = !{JSON.stringify(name)};
common.dashedName = !{JSON.stringify(dashedName)};
common.gaName = !{JSON.stringify(gaName)};
common.challengeType = !{JSON.stringify(challengeType)};
common.controlEnterHandler = function (e) {