diff --git a/.bowerrc b/.bowerrc
new file mode 100644
index 0000000..69fad35
--- /dev/null
+++ b/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "bower_components"
+}
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..e717f5e
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,13 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.gitignore b/.gitignore
index 0eeb35d..234d64a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
-node_modules
-bower_components
-version.json
-dist
-release
-
+node_modules/
+bower_components/
+.sass-cache/
+.tmp/
+dist/
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000..2683e48
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,35 @@
+{
+ "node": true,
+ "esnext": true,
+ "bitwise": true,
+ "camelcase": true,
+ "curly": true,
+ "eqeqeq": true,
+ "immed": true,
+ "indent": 2,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "quotmark": "single",
+ "regexp": true,
+ "undef": true,
+ "unused": true,
+ "strict": true,
+ "trailing": true,
+ "smarttabs": true,
+ "white": true,
+ "validthis": true,
+ "globals": {
+ "angular": false,
+ // Angular Mocks
+ "inject": false,
+ // JASMINE
+ "describe": false,
+ "it": false,
+ "before": false,
+ "beforeEach": false,
+ "after": false,
+ "afterEach": false,
+ "expect": false
+ }
+}
diff --git a/.yo-rc.json b/.yo-rc.json
new file mode 100644
index 0000000..b97ecbe
--- /dev/null
+++ b/.yo-rc.json
@@ -0,0 +1,82 @@
+{
+ "generator-gulp-angular": {
+ "props": {
+ "paths": {
+ "src": "src",
+ "dist": "dist",
+ "e2e": "e2e",
+ "tmp": ".tmp"
+ },
+ "angularVersion": "~1.2.27",
+ "angularModules": [
+ {
+ "name": "angular-animate",
+ "module": "ngAnimate"
+ },
+ {
+ "name": "angular-cookies",
+ "module": "ngCookies"
+ },
+ {
+ "name": "angular-touch",
+ "module": "ngTouch"
+ },
+ {
+ "name": "angular-sanitize",
+ "module": "ngSanitize"
+ }
+ ],
+ "jQuery": {
+ "name": "jquery",
+ "version": "~2.1.1"
+ },
+ "resource": {
+ "name": null,
+ "version": null,
+ "module": null
+ },
+ "router": {
+ "name": "angular-ui-router",
+ "version": "~0.2.13",
+ "module": "ui.router"
+ },
+ "ui": {
+ "key": "none",
+ "name": null,
+ "version": null,
+ "module": null
+ },
+ "cssPreprocessor": {
+ "key": "node-sass",
+ "extension": "scss",
+ "module": "gulp-sass",
+ "version": "~1.1.0"
+ },
+ "jsPreprocessor": {
+ "key": "none",
+ "extension": "js",
+ "srcExtension": "js",
+ "module": null,
+ "version": null
+ },
+ "htmlPreprocessor": {
+ "key": "jade",
+ "extension": "jade",
+ "module": "jade",
+ "version": "~1.8.1"
+ },
+ "bootstrapComponents": {
+ "name": null,
+ "version": null,
+ "key": null,
+ "module": null
+ },
+ "foundationComponents": {
+ "name": null,
+ "version": null,
+ "key": null,
+ "module": null
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DROPDOWNS b/DROPDOWNS
new file mode 100644
index 0000000..e69de29
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 1a40db8..0000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,160 +0,0 @@
-Configuration = require('./app/helpers/Configuration');
-
-module.exports = function (grunt) {
- grunt.initConfig({
- jshint: {
- files: ['app/**/*.js', 'web/**/*.js']
- },
- jscs: {
- main: ['app/**/*.js', 'web/**/*.js']
- },
- requirejs: {
- compile: {
- options: {
- baseUrl: "web",
- name: "../bower_components/almond/almond",
- include: [ 'main' ],
- optimize: 'none',
- out: "dist/app.js"
- }
- }
- },
-
- jadeUsemin: {
- vendor: {
- options: {
- tasks: {
- js: ['concat']
- }
- },
- files: [{
- src: 'app/views/index-development.jade'
- }]
- }
- },
- vows: {
- all: {
- options: {
- color: true,
- isolate: true
- },
- src: [ 'specs/**/*.tests.js' ]
- }
- },
- mongodb_fixtures: {
- dev: {
- options: {
- connection: Configuration.get('tests.mongodbUrl')
- },
- files: {
- src: ['fixtures']
- }
- }
- },
- ngtemplates: {
- app: {
- cwd: 'web',
- src: [ 'partials/**/*.html' ],
- dest: 'dist/app.js',
- options: {
- append: true,
- prefix: '/',
- htmlmin: {
- collapseBooleanAttributes: false,
- collapseWhitespace: true,
- removeAttributeQuotes: true,
- removeEmptyAttributes: false,
- removeRedundantAttributes: false,
- removeScriptTypeAttributes: true,
- removeStyleLinkTypeAttributes: true
- },
- bootstrap: function(module, script) {
- return 'window.addTemplatesToCache = function ($templateCache) { ' + script + ' };';
- }
- }
- }
- },
- uglify: {
- options: {
- mangle: false
- },
- app: {
- files: {
- 'dist/app.min.js': [ 'dist/app.js' ]
- }
- }
- },
- less: {
- production: {
- options: {
- cleancss: true
- },
- files: {
- "dist/resources/stylesheets/styles.css": "web/resources/stylesheets/styles.less"
- }
- }
- },
- copy: {
- dist: {
- files: [
- { expand: true, cwd: 'web/resources', src: [ '**' ], dest: 'dist/resources' },
- { expand: true, cwd: 'web/languages', src: [ '**' ], dest: 'dist/languages' },
- {
- expand: true,
- cwd: 'bower_components/jquery-ui/themes/smoothness',
- src: [ '**' ],
- dest: 'dist/resources/jquery-ui'
- }
- ]
- },
- release: {
- files: [
- {
- expand: true,
- src: [
- 'app/**',
- 'dist/**',
- 'node_modules/**',
- 'README.md',
- 'configurationSchema.js',
- 'app.js',
- 'config.js',
- 'package.json'
- ],
- dest: 'release'
- }
- ]
- }
-
- }
- });
-
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-concat');
- grunt.loadNpmTasks('grunt-contrib-requirejs');
- grunt.loadNpmTasks('grunt-angular-templates');
- grunt.loadNpmTasks('grunt-jscs-checker');
- grunt.loadNpmTasks('grunt-vows');
- grunt.loadNpmTasks('grunt-jade-usemin');
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-less');
- grunt.loadNpmTasks('grunt-contrib-copy');
-
-
- grunt.loadTasks('./tasks');
-
- grunt.registerTask('codestyling', [ 'jshint', 'jscs' ]);
- grunt.registerTask('testing', [ 'run_server', 'load_fixture_images', 'vows' ]);
- grunt.registerTask('build', [
- 'jadeUsemin:vendor',
- 'requirejs:compile',
- 'ngtemplates:app',
- 'uglify:app',
- 'less:production',
- 'copy:dist'
- ]);
- grunt.registerTask('release', [
- 'build',
- 'copy:release'
- ]);
-};
diff --git a/app.js b/app.js
index e62767c..2e42287 100644
--- a/app.js
+++ b/app.js
@@ -31,7 +31,11 @@ var
exportCntr = require('./app/controllers/web/export'),
validationsCntr = require('./app/controllers/web/validations'),
monthlyReportCntr = require('./app/controllers/web/monthlyReport'),
+ adminPageCntr = require('./app/controllers/web/adminPage'),
getStartedCntr = require('./app/controllers/web/getStarted'),
+ customLogoCntr = require('./app/controllers/web/customLogos'),
+
+ enketoCntr = require('./app/controllers/web/enketo'),
manifestCntr = require('./app/controllers/web/manifest'),
@@ -79,12 +83,12 @@ if (process.platform === 'win32') {
exports.run = function (mongoUrl, port, callback) {
+
app = express();
app.enable('trust proxy');
-
require('./app/services/Auth');
- app.set('views', __dirname + '/app/views');
+ app.set('views', __dirname);
app.set('view engine', 'jade');
app.set('controllers', __dirname + '/app/controllers/web');
if (app.settings.env === 'production') {
@@ -115,12 +119,18 @@ exports.run = function (mongoUrl, port, callback) {
app.use(express.json());
app.use(multipart());
app.use(methodOverride());
+
if (app.settings.env === 'development') {
- app.use(express.static(__dirname + '/web'));
+ app.use(express.static(__dirname + '/.tmp'));
+ app.use('/src', express.static(__dirname + '/src'));
+ app.use('/.tmp', express.static(__dirname + '/.tmp'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
- } else {
+ }
+
+ if (app.settings.env === 'production') {
app.use(express.static(__dirname + '/dist'));
}
+
app.use(app.router);
app.use(ErrorHandler);
app.use(getStartedCntr.error404);
@@ -141,6 +151,7 @@ exports.run = function (mongoUrl, port, callback) {
app.get('/checkAuthorization', checkAuthorizationCntr.checkAuthorization);
app.get('/autocomplete/company', autocompleteCntr.getCompanies);
app.get('/autocomplete/industry', autocompleteCntr.getIndustries);
+ app.get('/autocomplete/user', autocompleteCntr.getUsers);
app.post('/signup', loginCntr.signup);
@@ -167,6 +178,9 @@ exports.run = function (mongoUrl, port, callback) {
app.get('/monthlyReport', passport.authenticate('basic', { session: false }), monthlyReportCntr.getReportPage);
app.post('/monthlyReport', passport.authenticate('basic', { session: false }), monthlyReportCntr.sendReport);
+ app.get('/adminPage', passport.authenticate('basic', { session: false }),adminPageCntr.getAdminPage);
+ app.post('/adminPage/deleteUser', passport.authenticate('basic', { session: false }), adminPageCntr.deleteUser);
+
app.post('/forgotPassword', passwordResetCntr.forgotPassword);
app.post('/resetPassword/:token', passwordResetCntr.resetPassword);
@@ -181,22 +195,49 @@ exports.run = function (mongoUrl, port, callback) {
app.get('/home', getStartedCntr.home);
+ app.get('/enketoSurveyUrl/:survey', ACLService.checkPermission, enketoCntr.getEnketoSurveyUrl);
+ app.get('/enketo/:userId/formList', enketoCntr.formList);
+ app.get('/enketo/:userId/:survey', enketoCntr.form);
+ app.post('/enketo/:userId/submission', enketoCntr.submission);
+
+ app.post('/public/makeSurveyPublic/:survey', enketoCntr.makeSurveyPublic);
+ app.get('/public/getPublicLink/:survey', enketoCntr.getPublicLink);
+ app.get('/public/:survey', enketoCntr.getPublicSurvey);
+
+ app.get('/customlogos/:survey', customLogoCntr.getLogo);
+
app.get('/', function (req, res) {
+ console.log('------------------req.user ', req.user);
if (req.method === 'HEAD') {
res.send();
} else {
if (req.user) {
- res.render('index-' + app.settings.env, {
- title: Configuration.get('general.siteName'),
- version: version
- });
+
+ if (app.settings.env === 'production') {
+ app.get('/mdgcache.manifest', manifestCntr.getManifest);
+
+ res.render('dist/index', {
+ title: Configuration.get('general.siteName'),
+ version: version,
+ manifest: 'mdgcache.manifest'
+ });
+ } else {
+ app.get('/mdgcache-dev.manifest', manifestCntr.getManifest);
+
+ res.render('.tmp/serve/index', {
+ title: Configuration.get('general.siteName'),
+ version: version,
+ manifest: 'mdgcache-dev.manifest'
+ });
+ }
+
} else {
+ console.log(('redirect').yellow);
res.redirect('/home');
}
}
});
- app.get('/mdgcache.manifest', manifestCntr.getManifest);
if (Configuration.get('general.protocolType') === 'https') {
httpsOptions.pfx = fs.readFileSync(Configuration.get('general.httpspfx'));
diff --git a/app/controllers/mobile/locale.js b/app/controllers/mobile/locale.js
index aa4ae51..24c90bb 100644
--- a/app/controllers/mobile/locale.js
+++ b/app/controllers/mobile/locale.js
@@ -22,4 +22,4 @@ exports.getLocale = function (req, res, next) {
exports.languageList = function (req, res, next) {
var languages = Configuration.get('languages.supported_languages_mobile');
res.send(languages);
-};
\ No newline at end of file
+};
diff --git a/app/controllers/web/adminPage.js b/app/controllers/web/adminPage.js
new file mode 100644
index 0000000..1b17fd3
--- /dev/null
+++ b/app/controllers/web/adminPage.js
@@ -0,0 +1,47 @@
+var
+ User = require('../../models/User'),
+
+ Configuration = require('../../helpers/Configuration'),
+ ExportService = require('../../services/Export');
+
+exports.getAdminPage = function (req, res, next) {
+ res.render('app/views/adminPage', {
+ title: Configuration.get('general.siteName')
+ });
+};
+
+exports.deleteUser = function (req, res, next) {
+ var
+ userId = req.body.user,
+ options = {};
+
+ options._id = userId;
+ options.deleted = false;
+
+ User.findOne(options).exec(function (err, user) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (!user) {
+ res.send(204);
+ return;
+ }
+
+ user.deleted = true;
+ user.username = 'DELETED_USER_' + user.username;
+ user.password = 'DELETED_USER';
+ user.email = 'DELETED_USER_' + user.email;
+ user._owner = undefined;
+
+ user.save(function (err, user) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ res.send(204);
+ });
+ });
+};
diff --git a/app/controllers/web/autocomplete.js b/app/controllers/web/autocomplete.js
index 6354c9d..c6883b2 100644
--- a/app/controllers/web/autocomplete.js
+++ b/app/controllers/web/autocomplete.js
@@ -39,3 +39,22 @@ exports.getIndustries = function (req, res, next) {
res.send(industries);
});
};
+
+exports.getUsers = function (req, res, next) {
+ var
+ term = req.param('term'),
+ termReggexp = new RegExp('.*' + term + '.*', 'i');
+
+ User.find({$or : [
+ {username: { $regex: termReggexp }},
+ {firstName: { $regex: termReggexp }},
+ {lastName: { $regex: termReggexp }},
+ {email: { $regex: termReggexp }} ], deleted: false}, function (err, users) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ res.send(users);
+ });
+};
diff --git a/app/controllers/web/customLogos.js b/app/controllers/web/customLogos.js
new file mode 100644
index 0000000..fa6e5d0
--- /dev/null
+++ b/app/controllers/web/customLogos.js
@@ -0,0 +1,30 @@
+var
+ Survey = require('../../models/Survey'),
+ ImagesService = require('../../services/Images');
+
+exports.getLogo = function (req, res, next) {
+ var
+ owner = req.user.owner.toString(),
+ surveyId = req.params.survey;
+
+ Survey.findOne({ _id: surveyId, _owner: owner }).exec(function (err, survey) {
+ if (err) {
+ next({status: 500, body: err});
+ return;
+ }
+
+ if (!survey) {
+ res();
+ return;
+ }
+
+ ImagesService.getImage(survey.customLogo, function (readstream) {
+ if (!readstream) {
+ res();
+ return;
+ }
+
+ readstream.pipe(res);
+ });
+ });
+};
diff --git a/app/controllers/web/enketo.js b/app/controllers/web/enketo.js
new file mode 100644
index 0000000..2ba02c5
--- /dev/null
+++ b/app/controllers/web/enketo.js
@@ -0,0 +1,313 @@
+var
+ _ = require('underscore'),
+ moment = require('moment'),
+ request = require('request'),
+ fs = require('fs'),
+ generatePassword = require('password-generator'),
+
+ Survey = require('../../models/Survey'),
+ Result = require('../../models/Result'),
+ User = require('../../models/User'),
+
+ JXON = require('../../helpers/JXON'),
+
+ Configuration = require('../../helpers/Configuration'),
+
+ SurveyParserService = require('../../services/SurveyParser'),
+ ResultsParserService = require('../../services/ResultsParser'),
+ ResultsService = require('../../services/Results'),
+ SurveyService = require('../../services/Survey'),
+ ImagesService = require('../../services/Images');
+
+function parseJXONTree (jxonTree) {
+ return new ResultsParserService.ResultsParser(jxonTree);
+}
+
+exports.getPublicLink = function (req, res, next) {
+ var
+ owner = req.user.owner.toString(),
+ surveyId = req.params.survey;
+
+ Survey.findOne({ _id: surveyId, _owner: owner }).exec(function (err, survey) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (survey.publicExpire && survey.publicExpire > new Date()) {
+ res.send(200, {
+ expire: survey.publicExpire,
+ customMessage: survey.customMessage,
+ customLogoLink: survey.customLogo ? req.protocol + '://' + req.get('host') + '/customlogos/' + survey._id : null,
+ publicUrl: req.protocol + '://' + req.get('host') + '/public/' + survey._id
+ });
+ } else {
+ res.send(204);
+ }
+ });
+};
+
+exports.makeSurveyPublic = function (req, res, next) {
+ var
+ owner = req.user.owner.toString(),
+ surveyId = req.params.survey,
+ surveyPublicExpire = req.body.expire,
+ customMessage = req.body.customMessage;
+
+ Survey.findOne({ _id: surveyId, _owner: owner }).exec(function (err, survey) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (!survey) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unknown' } });
+ return;
+ }
+
+ survey.publicExpire = surveyPublicExpire ? moment(surveyPublicExpire, 'DD/MM/YYYY').toDate() : null;
+ survey.published = true;
+
+ if (req.files && req.files.logo) {
+ var logoId = surveyId + '_' + generatePassword(10, false);
+
+ fs.readFile(req.files.logo.path, function (err, data) {
+ if (err) {
+ callback(err, null);
+ return;
+ }
+
+ ImagesService.saveImage(data, logoId);
+ fs.unlink(req.files.logo.path);
+ });
+
+ survey.customLogo = logoId;
+ }
+
+ survey.customMessage = customMessage;
+
+ survey.increment();
+
+ survey.save(function (err, survey) {
+ if (err) {
+ next({ status: 400, body: err });
+ return;
+ }
+
+ res.send(200, {
+ expire: survey.publicExpire,
+ customMessage: survey.customMessage,
+ publicUrl: req.protocol + '://' + req.get('host') + '/public/' + survey._id
+ });
+ });
+ });
+};
+
+exports.getPublicSurvey = function (req, res, next) {
+ var user;
+ var survey = req.params.survey;
+
+ Survey.findOne({ _id: survey }).exec(function (err, survey) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (!survey) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unknown' } });
+ return;
+ }
+
+ if (!survey.publicExpire && survey.publicExpire < new Date()) {
+ res.next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'expired' } });
+ }
+
+ user = req.user ? req.user._id : survey._owner.id;
+
+ request
+ .post(config.enketo.server, { form :{
+ server_url: req.protocol + '://' + req.get('host') + '/enketo/' + user,
+ form_id: survey
+ }},
+ function(err, response, body) {
+ res.redirect(JSON.parse(body).url);
+ })
+ .auth(Configuration.get('enketo.token'), Configuration.get('enketo.token'), false);
+ });
+};
+
+exports.getEnketoSurveyUrl = function (req, res, next) {
+ var
+ user = req.user._id,
+ survey = req.params.survey;
+
+ request
+ .post(config.enketo.server, {form :{
+ server_url: req.protocol + '://' + req.get('host') + '/enketo/' + user,
+ form_id: survey
+ }},
+ function(err, response, body) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ res.send(JSON.parse(body).url);
+ })
+ .auth(Configuration.get('enketo.token'), Configuration.get('enketo.token'), false);
+};
+
+exports.formList = function (req, res, next) {
+ var
+ userId = req.params.userId,
+ jxonTree;
+
+ User.findById(userId, '_owner').exec(function (err, user) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (!user) {
+ next({status: 400, body: {name: 'ValidatorError', path: 'user', type: 'unknown'}});
+ return;
+ }
+
+ Survey.find({ _owner: user.owner, $or: [{ deleted: false }, { deleted: { $exists: false } }] }, function (err, surveys) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ jxonTree = SurveyParserService.SurveysToJxonTree(surveys, req.protocol + '://' + req.get('host') + '/enketo/' + userId);
+
+ res.setHeader('Content-type', 'text/xml');
+ res.send(JXON.serialize(jxonTree));
+ });
+ });
+};
+
+exports.form = function (req, res, next) {
+ var
+ userId = req.params.userId,
+ survey = req.params.survey,
+ jxonTree;
+
+ User.findById(userId, '_owner').exec(function (err, user) {
+ if (err) {
+ next({status: 500, body: err});
+ return;
+ }
+
+ if (!user) {
+ next({status: 400, body: {name: 'ValidatorError', path: 'user', type: 'unknown'}});
+ return;
+ }
+
+ Survey
+ .findOne({ _id: survey, _owner: user.owner, $or: [{ deleted: false }, { deleted: { $exists: false } }] })
+ .exec(function (err, survey) {
+ if (err) {
+ next({status: 500, body: err});
+ return;
+ }
+
+ if (!survey) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unknown' } });
+ return;
+ }
+
+ if (!survey.published) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unpublished' } });
+ return;
+ }
+
+ jxonTree = SurveyParserService.SurveyToJxonTree(SurveyService.composeSurveyData(survey, true));
+
+ res.setHeader('Content-disposition', 'attachment; filename="survey_' + survey._id.toString() + '.xml"');
+ res.setHeader('Content-type', 'text/xml');
+ res.send(JXON.serialize(jxonTree));
+ }
+ );
+ });
+};
+
+exports.submission = function (req, res, next) {
+ var
+ userId = req.params.userId,
+ results = new Result();
+
+ if (!req.files || !req.files.xml_submission_file) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'filename', type: 'required' }});
+ return;
+ }
+
+ function callback(err, resultData) {
+ if (req.files && req.files.xml_submission_file) {
+ fs.unlink(req.files.xml_submission_file.path);
+ }
+
+ if (err) {
+ console.log('error on parsing xml survey data', err);
+
+ next({status: 500, body: err});
+ return;
+ }
+
+ resultData = parseJXONTree(resultData);
+
+ User.findById(userId, '_owner').exec(function (err, user) {
+ if (err) {
+ next({status: 500, body: err});
+ return;
+ }
+
+ if (!user) {
+ next({status: 400, body: {name: 'ValidatorError', path: 'user', type: 'unknown'}});
+ return;
+ }
+
+ Survey
+ .findOne({ _id: resultData.survey, _owner: user.owner, $or: [{ deleted: false }, { deleted: { $exists: false } }] })
+ .exec(function (err, survey) {
+ if (err) {
+ next({ status: 500, body: err });
+ return;
+ }
+
+ if (!survey) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unknown' } });
+ return;
+ }
+
+ if (!survey.published) {
+ next({ status: 400, body: { name: 'ValidatorError', path: 'survey', type: 'unpublished' } });
+ return;
+ }
+
+ results._owner = user.owner;
+ results._user = user._id;
+
+ resultsData.instanceID = resultsData.instanceID || 'web form response';
+
+ results = ResultsService.composeResults(results, resultData, survey, function (results) {
+ results.save(function (err, results) {
+ if (err) {
+ next({ status: 400, body: err });
+ return;
+ }
+
+ survey.resultsCount = survey.resultsCount + 1;
+ survey.save();
+
+ res.send(201, { id: results._id });
+ });
+ });
+ });
+ });
+ }
+
+ if (req.files && req.files.xml_submission_file) {
+ JXON.readFile(req.files.xml_submission_file.path, JXON.WITHOUT_VALIDATION, callback);
+ }
+};
diff --git a/app/controllers/web/export.js b/app/controllers/web/export.js
index 777db2c..4a100f2 100644
--- a/app/controllers/web/export.js
+++ b/app/controllers/web/export.js
@@ -5,6 +5,7 @@ var
JXON = require('../../helpers/JXON'),
ExportService = require('../../services/Export'),
+ SurveyService = require('../../services/Survey'),
Survey = require('../../models/Survey'),
Result = require('../../models/Result');
@@ -34,15 +35,19 @@ exports.export = function (req, res, next) {
return;
}
+ survey = SurveyService.sortSurveyQuestions(survey);
+
_.each(survey._categories, function (category) {
_.each(category._questions, function (question) {
- if (/cascade/.test(question.type) && questions[questions.length - 1].type === question.type) {
+ if (/cascade/.test(question.type) && questions[questions.length - 1] && questions[questions.length - 1].type === question.type) {
questions[questions.length-1].items = questions[questions.length-1].items.concat(question.items);
+ questions[questions.length-1].id.push(question.id);
return;
}
questions.push({
label: question.label,
+ id: [question.id],
type: question.type,
items: question.items
});
diff --git a/app/controllers/web/getStarted.js b/app/controllers/web/getStarted.js
index c072536..d0415b2 100644
--- a/app/controllers/web/getStarted.js
+++ b/app/controllers/web/getStarted.js
@@ -15,7 +15,7 @@ exports.home = function (req, res, next) {
}
}
- res.render('getStarted/jade/' + lang + '/home', {
+ res.render('app/views/getStarted/jade/' + lang + '/home', {
title: Configuration.get('general.siteName'),
countries: Configuration.get('general.countries'),
language: lang,
@@ -42,7 +42,7 @@ exports.error404 = function (req, res, next) {
}
}
- res.render('getStarted/jade/' + lang + '/error404', {
+ res.render('app/views/getStarted/jade/' + lang + '/error404', {
title: Configuration.get('general.siteName')
});
};
diff --git a/app/controllers/web/groups.js b/app/controllers/web/groups.js
index 6878804..57db5af 100644
--- a/app/controllers/web/groups.js
+++ b/app/controllers/web/groups.js
@@ -58,7 +58,8 @@ module.exports = {
async.map(groups,
function (group, cb) {
- User.find({ _group: group._id }, 'username email phone permission firstName lastName name').exec(function (err, users) {
+ User.find({ _group: group._id, deleted: false }, 'username email phone permission firstName lastName name')
+ .exec(function (err, users) {
if (err) {
cb(err);
return;
@@ -105,7 +106,7 @@ module.exports = {
group = group.toObject();
- User.find({ _group: group._id }, 'username email phone permission firstName lastName name').exec(function (err, users) {
+ User.find({ _group: group._id, deleted: false }, 'username email phone permission firstName lastName name').exec(function (err, users) {
if (err) {
next({ status: 500, body: err });
return;
diff --git a/app/controllers/web/login.js b/app/controllers/web/login.js
index 7a560a9..3610680 100644
--- a/app/controllers/web/login.js
+++ b/app/controllers/web/login.js
@@ -37,7 +37,7 @@ exports.activate = function (req, res, next) {
return;
}
- res.redirect('/#/login');
+ res.redirect('/home#/login');
});
};
diff --git a/app/controllers/web/monthlyReport.js b/app/controllers/web/monthlyReport.js
index fe6d690..5c2dba6 100644
--- a/app/controllers/web/monthlyReport.js
+++ b/app/controllers/web/monthlyReport.js
@@ -15,7 +15,7 @@ exports.getReportPage = function (req, res, next) {
years.push(initYear + i);
}
- res.render('monthlyReport', {
+ res.render('app/views/monthlyReport', {
title: Configuration.get('general.siteName'),
years: years,
months: months
@@ -32,7 +32,7 @@ exports.sendReport = function (req, res, next) {
date = moment(year + '-' + month, "YYYY MMMM").add(1, 'months').startOf('month');
ExportService.exportUserRegistrations(email, date);
- res.render('sentMonthlyReport', {
+ res.render('app/views/sentMonthlyReport', {
title: Configuration.get('general.siteName'),
email: email
});
diff --git a/app/controllers/web/passwordReset.js b/app/controllers/web/passwordReset.js
index 9b0ae78..2b80d97 100644
--- a/app/controllers/web/passwordReset.js
+++ b/app/controllers/web/passwordReset.js
@@ -61,7 +61,7 @@ exports.resetPassword = function (req, res, next) {
}
if (!user) {
- res.redirect('/#/resetPasswordError');
+ res.redirect('/home#/resetPasswordError');
return;
}
diff --git a/app/controllers/web/results.js b/app/controllers/web/results.js
index c9fcbfa..1404f25 100644
--- a/app/controllers/web/results.js
+++ b/app/controllers/web/results.js
@@ -3,6 +3,7 @@ var
ACLService = require('../../services/ACL'),
ResultsService = require('../../services/Results'),
+ SurveyService = require('../../services/Survey'),
Survey = require('../../models/Survey'),
Result = require('../../models/Result');
@@ -51,6 +52,8 @@ module.exports = {
return;
}
+ survey = SurveyService.sortSurveyQuestions(survey);
+
Result
.findOne({ _owner: owner, _survey: survey, _id: result }, 'count instanceID title timeCreated geostamp _user _categoryResults')
.populate('_user', 'firstName lastName')
diff --git a/app/helpers/ErrorsHumanizer.js b/app/helpers/ErrorsHumanizer.js
index 239d8c2..ed49f98 100644
--- a/app/helpers/ErrorsHumanizer.js
+++ b/app/helpers/ErrorsHumanizer.js
@@ -23,7 +23,8 @@ var
unknown: 'Unknown entity',
invalidVersion: 'Entity info has been already updated.',
published: 'Can not edit the published survey',
- unpublished: 'Can not post results for unpublished survey'
+ unpublished: 'Can not post results for unpublished survey',
+ expired: 'This link is invalid or has expired'
},
permissionError = 'You do not have permission to perform given operation';
diff --git a/web/resources/stylesheets/404.css b/app/resources/404.css
similarity index 87%
rename from web/resources/stylesheets/404.css
rename to app/resources/404.css
index 75b1f2b..b596c88 100644
--- a/web/resources/stylesheets/404.css
+++ b/app/resources/404.css
@@ -12,7 +12,7 @@ body {
}
.content .logo {
font-size: 36px;
- background: #c4d1e6 url(../icons/big-logo.png) no-repeat;
+ background: #c4d1e6 url('../assets/images/big-logo.png') no-repeat;
background-size: 30%;
background-position: center;
}
diff --git a/app/resources/adminPage.css b/app/resources/adminPage.css
new file mode 100644
index 0000000..057e15c
--- /dev/null
+++ b/app/resources/adminPage.css
@@ -0,0 +1,64 @@
+.error {
+ display: none;
+ color: red;
+ margin: 30px 0 0 40px;
+}
+
+.success {
+ display: none;
+ color: #7fba00;
+ margin: 30px 0 0 40px;
+}
+
+.results li {
+ list-style: none;
+ display: block;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 10px 0 10px;
+ width: 100%;
+ font-size: 16px;
+}
+
+.results li:nth-child(odd) {
+ background: #DFDFDF;
+}
+
+.results li.active {
+ background: #aaaaaa;
+}
+
+.results {
+ width: 422px;
+ max-height: 400px;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ position: absolute;
+ margin-top: 35px;
+ padding: 0px;
+ border: 1px solid #DFDFDF;
+}
+
+.user {
+ height: 30px;
+ width: 400px;
+ line-height: 30px;
+ padding: 0 10px 0 10px;
+ outline: none;
+ display: inline-block;
+ float: left;
+ font-size: 16px;
+}
+
+.btn-delete-user {
+ display: inline-block;
+ border: 0;
+ margin-left: 20px;
+ width: 100px;
+ height: 33px;
+ text-align: center;
+ color: #fff;
+ font-size: 18px;
+ background-color: #7fba00;
+ outline: none;
+}
diff --git a/app/resources/adminPage.js b/app/resources/adminPage.js
new file mode 100644
index 0000000..e2a39fb
--- /dev/null
+++ b/app/resources/adminPage.js
@@ -0,0 +1,184 @@
+(function () {
+ function removeRes() {
+ var body = document.querySelector('body');
+
+ [].forEach.call(document.querySelectorAll('.results'), function (el) {
+ body.removeChild(el);
+ });
+ }
+
+ function setAutocomlete(el) {
+ var activeIndex = -1;
+ var results = [];
+ var body = document.querySelector('body');
+
+ el.addEventListener('focus', function (evt) {
+ setTimeout(function(){
+ hideError();
+ hideSuccessMsg();
+ }, 500);
+ }, true);
+
+ el.addEventListener('blur', function (evt) {
+ setTimeout(function(){
+ removeRes();
+ }, 500);
+ }, true);
+
+ el.addEventListener('keyup', function (evt) {
+ var keyCode = evt.which || evt.keyCode;
+
+ if (keyCode === 38) {
+ activeIndex = activeIndex === 0 ? results.length - 1 : --activeIndex;
+ renderActiveResult(activeIndex);
+ return;
+ }
+
+ if (keyCode === 40) {
+ activeIndex = activeIndex === results.length - 1 ? 0 : ++activeIndex;
+ renderActiveResult(activeIndex);
+ return;
+ }
+
+ if (keyCode === 13) {
+ el.value = results[activeIndex].username + (results[activeIndex].email ? ' / ' + results[activeIndex].email : '');
+ el.setAttribute('userid', results[activeIndex]._id);
+ body.removeChild(document.querySelector('.results'));
+ return;
+ }
+
+ removeRes();
+ activeIndex = -1;
+
+ if (evt.target.value.trim() != '') {
+ var xmlhttp = new XMLHttpRequest();
+
+ evt.target.setAttribute('userid', '');
+
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState == 4 ) {
+ results = JSON.parse(xmlhttp.response);
+
+ if (xmlhttp.status == 200 && results.length) {
+ var
+ ul = document.createElement('ul'),
+ pos = evt.target.getBoundingClientRect();
+
+ ul.className = 'results';
+
+ for (var i = 0; i < results.length; i++) {
+ var li = document.createElement('li');
+
+ li.innerText = results[i].username + (results[i].email ? ' / ' + results[i].email : '');
+ li.id = results[i]._id;
+ ul.appendChild(li)
+ }
+
+ body.appendChild(ul);
+ ul.style.top = pos.top + 'px';
+ ul.style.left = pos.left + 'px';
+ [].forEach.call(ul.children, function (el) {
+ el.addEventListener("click", function (e) {
+ evt.target.value = el.innerText;
+ evt.target.setAttribute('userid', el.id);
+ body.removeChild(ul);
+ });
+ });
+ }
+ }
+ };
+
+ xmlhttp.open("GET", "/autocomplete/user" + "?term=" + evt.target.value.trim(), true);
+ xmlhttp.send();
+ }
+ }, true);
+ }
+
+ function ifUserSelected (userEl) {
+ return userEl.getAttribute('userid') && userEl.getAttribute('userid') !== '' ? true : false;
+ }
+
+
+ function renderActiveResult (activeIndex) {
+ var results = document.querySelectorAll('ul.results li');
+ var activeResult = document.querySelector('ul.results .active');
+
+ if (results.length !== 0) {
+ results[activeIndex].classList.add('active');
+ }
+
+ if (activeResult) {
+ activeResult.classList.remove('active');
+ }
+ }
+
+ function showSuccessMsg (msg) {
+ var
+ successEl = document.querySelector('div.success'),
+ usernameEl = document.querySelector('div.success .username');
+
+ usernameEl.innerHTML = msg;
+ successEl.style.display = 'block';
+ }
+
+ function hideSuccessMsg () {
+ var
+ successEl = document.querySelector('div.success'),
+ usernameEl = document.querySelector('div.success .username');
+
+ usernameEl.innerHTML = '';
+ successEl.style.display = 'none';
+ }
+
+ function showError () {
+ var div = document.querySelector('div.error');
+ div.style.display = 'block';
+ }
+
+ function hideError () {
+ var div = document.querySelector('div.error');
+ div.style.display = 'none';
+ }
+
+ function deleteUser (userEl) {
+ var xmlhttp = new XMLHttpRequest();
+
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState == 4 && xmlhttp.status == 204) {
+ showSuccessMsg(userEl.value);
+ userEl.value = '';
+ userEl.setAttribute('userid', '');
+ }
+ };
+
+ xmlhttp.open('POST', '/adminPage/deleteUser', true);
+ xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+ xmlhttp.send(JSON.stringify({ user: userEl.getAttribute('userid') }));
+ }
+
+ function tryToDeleteUser () {
+ var userEl = document.querySelector('input.user');
+
+ if (!ifUserSelected(userEl)) {
+ showError();
+ return;
+ }
+
+ var confirmUserDelete = window.confirm('Are you sure you want to delete user "' + userEl.value + '"?' +
+ '\n\rPlease note that this operation can not be undone.');
+
+ if (confirmUserDelete) {
+ deleteUser(userEl);
+ }
+ }
+
+ window.onload = function() {
+ setAutocomlete(document.querySelector('input.user'));
+
+ document.querySelector('.btn-delete-user').addEventListener('click', function (event) {
+ tryToDeleteUser();
+ });
+ };
+})();
+
+
diff --git a/app/resources/home.css b/app/resources/home.css
new file mode 100644
index 0000000..904f4f8
--- /dev/null
+++ b/app/resources/home.css
@@ -0,0 +1,890 @@
+
+@font-face{
+ font-family: 'Segoe UI';
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Bold/latest.eot');
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Bold/latest.eot?#iefix') format('embedded-opentype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Bold/latest.woff') format('woff'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Bold/latest.ttf') format('truetype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Bold/latest.svg#web') format('svg');
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face{
+ font-family: 'Segoe UI';
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Normal/latest.eot');
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Normal/latest.eot?#iefix') format('embedded-opentype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Normal/latest.woff') format('woff'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Normal/latest.ttf') format('truetype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Normal/latest.svg#web') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face{
+ font-family: 'Segoe UI';
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Light/latest.eot');
+ src:url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Light/latest.eot?#iefix') format('embedded-opentype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Light/latest.woff') format('woff'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Light/latest.ttf') format('truetype'),
+ url('http://i.s-microsoft.com/fonts/Segoe-UI/Cyrillic/Light/latest.svg#web') format('svg');
+ font-weight: lighter;
+ font-style: normal;
+}
+
+
+html {
+ height: 100%;
+}
+
+body {
+ margin: 0;
+ font-family: Segoe UI;
+}
+
+
+.hidden {
+ display: none;
+}
+
+.b-page {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ font-family: SegoeUI, Arial, sans-serif;
+ font-size: 12px;
+ position: relative;
+}
+
+.b-page__head-line {
+ height: 6px;
+ width: 100%;
+}
+
+.b-line-bit {
+ width: 25%;
+ height: 100%;
+ display: inline-block;
+ float: left;
+}
+
+.b-line-bit--red {
+ background-color: #B32E09;
+}
+
+.b-line-bit--green {
+ background-color: #598200;
+}
+
+.b-line-bit--blue {
+ background-color: #007CB7;
+}
+
+.b-line-bit--yellow {
+ background-color: #FFB900;
+}
+
+.b-head {
+ width: 100%;
+}
+
+.b-page__line {
+ margin: 0 auto;
+ width: 100%;
+ position: relative;
+}
+
+.b-page__header {
+ height: 60px;
+ color: #4d4d4d;
+ background-color: #f2f2f2;
+ font-size: 18px;
+ text-decoration: none;
+ width: 100%;
+ display: table;
+ position: relative;
+}
+
+.b-head-logo {
+ vertical-align: middle;
+ display: table-cell;
+ padding-left: 36px;
+}
+
+.b-logo__title, a {
+ text-decoration: none;
+ color: #4d4d4d;
+ line-height: 40px;
+}
+
+.b-logo__img {
+ width: 40px;
+ height: 40px;
+ float: left;
+ margin-right: 10px;
+}
+
+.b-menu {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.b-menu-nav {
+ display: table;
+ width: 100%;
+}
+
+.b-menu-nav a {
+ text-decoration: none;
+ color: #4d4d4d;
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ height: 60px;
+ transition: all 0.2s ease-in-out;
+}
+
+.b-menu-nav a:hover {
+ color: #007CB7;
+}
+
+.b-menu-nav a.active {
+ background-color: #007CB7;
+ color: white;
+}
+
+.b-menu-nav a.active:hover {
+ color: white;
+}
+
+.b-link_menu {
+ text-decoration: none;
+ color: #4d4d4d;
+}
+
+.b-account-menu {
+ display: table-cell;
+ padding-right: 36px;
+ text-align: right;
+ vertical-align: middle;
+ position: relative;
+}
+
+.b-account-menu__locale {
+ display: inline-block;
+ margin-right: 20px;
+ position: relative;
+}
+
+.b-account-menu__locale + .dropdown {
+ opacity: 0;
+ position: absolute;
+ padding: 10px 0;
+ background-color: #fff;
+ z-index: 2;
+ font-family: SegoeUI, Arial, sans-serif;
+ font-size: 16px;
+ width: 150px;
+ top: 30px;
+ border: 1px solid rgba(166, 166, 166, 0.5);
+ border-radius: 5px;
+ right: 18%;
+}
+
+.b-account-menu__locale + .dropdown li {
+ display: block;
+ color: #000;
+ line-height: 20px;
+ padding: 0 5px;
+ font-family: SegoeUI, Arial, sans-serif;
+}
+
+.b-account-menu__locale + .dropdown li a {
+ display: block;
+}
+
+.b-account-menu__locale + .dropdown li:hover {
+ background: #f2f2f2;
+}
+
+.b-account-menu__locale + .dropdown:after {
+ content: "";
+ width: 0;
+ height: 0;
+ position: absolute;
+ bottom: 100%;
+ margin-left: 5px;
+ border-width: 0 6px 6px 6px;
+ border-style: solid;
+ border-color: #fff transparent;
+ left: 20px;
+}
+
+.b-account-menu:focus + .dropdown,
+.b-account-menu__locale + .dropdown.open {
+ opacity: 1;
+}
+
+.b-account-menu__locale:after {
+ top: 20px;
+ margin-left: 0;
+ content: '';
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-top: 5px solid #4d4d4d;
+}
+
+.b-account-menu__user {
+ display: inline-block;
+ float: right;
+}
+
+.b-account-menu .wrap-dd-menu .dropdown {
+ left: initial;
+}
+
+.b-account-menu .wrap-dd-menu .dropdown:after {
+ right: 20px;
+}
+
+.b-account-menu .fa {
+ font-size: 16px;
+}
+
+.b-link_account-menu {
+ text-decoration: none;
+ color: #4d4d4d;
+}
+
+.b-page__footer {
+ width: 100%;
+ height: 54px;
+ margin-top: -54px;
+ background-color: #666666;
+ display: table;
+}
+
+.b-page__footer__box {
+ margin: 0 auto;
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+}
+
+.b-page__footer__box__item {
+ display: inline-block;
+ list-style: none;
+ margin: 0 24px;
+}
+
+.b-page__footer__box__item__link {
+ color: #fff;
+ font-weight: normal;
+ text-decoration: none;
+ margin: 0 6px;
+ font-size: 18px;
+}
+
+.b-page__footer__box__item__link:hover {
+ color: #08b1ff;
+}
+
+.b-content-header {
+ background-color: #f2f2f2;
+ padding: 30px 36px;
+}
+
+.b-content-header__title {
+ color: #B32E09;
+ margin: 0;
+ font-size: 54px;
+ font-weight: normal;
+}
+
+.b-content-header__text {
+ color: #4d4d4d;
+ font-size: 24px;
+ margin: 0;
+}
+
+.b-content-header__text__link {
+ color: #007CB7;
+ font-size: inherit;
+ font-weight: bold;
+ text-decoration: none;
+ margin: 0 6px;
+}
+
+.b-content-header__text__link:hover {
+ color: #08b1ff;
+}
+
+.b-content {
+ margin: 36px;
+ padding-bottom: 72px;
+ overflow: hidden;
+}
+
+.b-content--line {
+ border-bottom: 1px solid #b2b2b2;
+}
+
+.b-content-title {
+ margin-top: 0;
+ font-size: 36px;
+ color: #B32E09;
+}
+
+.b-content__paragraph {
+ margin-top: 0;
+ font-size: 18px;
+ font-weight: lighter;
+ color: #4d4d4d;
+}
+
+.b-content__paragraph__link {
+ color: #007CB7;
+ font-size: inherit;
+ font-weight: bold;
+ text-decoration: none;
+ margin: 0 6px;
+}
+
+.b-content__paragraph__link:hover {
+ color: #08b1ff;
+}
+
+.b-content__paragraph--item {
+ margin: 0;
+}
+
+.b-content--main {
+ display: table;
+}
+
+.b-content--main__article {
+ vertical-align: top;
+ display: table-cell;
+ padding-right: 84px;
+}
+
+.b-content--main__article__indent {
+ margin-top: 0;
+ color: #4d4d4d;
+ font-size: 18px;
+}
+
+.b-content--main__image {
+ display: table-cell;
+}
+
+.b-content__col-left {
+ width: 50%;
+ float: left;
+}
+
+.b-content__col-left--video {
+ height: 390px;
+ width: 100%;
+
+}
+
+/* Custom outline for YouTube navigation buttons */
+
+.ytp-button:focus {
+ box-shadow: inset 0 0 0 4px #007CB7 !important;
+}
+
+.b-content__col-right {
+ width: 50%;
+ float: right;
+}
+
+.b-content__col-right__study-article {
+ padding: 0 36px;
+}
+
+.b-content__col-right__study-article--text {
+ margin: 0;
+ color: #4d4d4d;
+ font-size: 18px;
+ font-weight: lighter;
+}
+
+.b-content__col-right__item {
+ margin-left: 36px;
+}
+
+.b-content__col-left__item,
+.b-content__col-right__item {
+ display: table;
+ margin-bottom: 30px;
+}
+
+.b-content__col-left__item__picture,
+.b-content__col-right__item__picture {
+ display: table-cell;
+ border: 2px solid #b2b2b2;
+ width: 180px;
+ height: 180px;
+}
+
+.b-content__col-left__item__picture--img,
+.b-content__col-right__item__picture--img {
+ width: 100%;
+ height: 100%;
+}
+
+.b-content__col-left__item__caption,
+.b-content__col-right__item__caption {
+ vertical-align: middle;
+ display: table-cell;
+ width: 400px;
+}
+
+.b-content__col-left__item__caption__number,
+.b-content__col-right__item__caption__number {
+ margin: 0 24px;
+ float: left;
+ color: white;
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background-color: #B32E09;
+ font-size: 24px;
+ line-height: 36px;
+ display: inline-block;
+ text-align: center;
+ font-weight: bold;
+}
+
+.b-content__col-left__item__caption__text,
+.b-content__col-right__item__caption__text {
+ font-size: 18px;
+ margin: 0 24px;
+}
+
+.b-content__col-left__item__caption__text--blue,
+.b-content__col-right__item__caption__text--blue {
+ color: #007CB7;
+ font-size: 18px;
+}
+
+.b-content__col-left__item__caption__title,
+.b-content__col-right__item__caption__title {
+ color: #4d4d4d;
+ margin: 0 0 0 24px;
+ font-size: 24px;
+ font-weight: bold;
+}
+
+.b-content__col-left__item__title,
+.b-content__col-right__item__title {
+ font-size: 24px;
+ color: #4d4d4d;
+}
+
+.b-content__col-left__item__title-number,
+.b-content__col-right__item__title-number {
+ color: white;
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background-color: #B32E09;
+ font-size: 24px;
+ line-height: 36px;
+ display: inline-block;
+ text-align: center;
+ font-weight: bold;
+ margin-right: 6px;
+}
+
+.b-content__col-left__item__icon--img,
+.b-content__col-right__item__icon--img {
+ width: 72px;
+}
+
+.b-content__col-left__item--benefits,
+.b-content__col-right__item--benefits {
+ margin-bottom: 90px;
+}
+
+.b-content__col-left__item__photo,
+.b-content__col-right__item__photo {
+ width: 100%;
+}
+
+.b-content__col-left__item__photo-caption,
+.b-content__col-right__item__photo-caption {
+ margin: 24px 0;
+ color: #B32E09;
+ font-style: italic;
+ font-size: 18px;
+ font-weight: lighter;
+}
+
+.b-content__col-left__item__photo-location,
+.b-content__col-right__item__photo-location {
+ color: #666666;
+ font-size: 18px;
+ font-weight: lighter;
+}
+
+.b-content__col-ternary {
+ width: 33.33333%;
+ position: relative;
+}
+
+.b-content__col-ternary__col-ternary__item {
+ padding-right: 20px;
+}
+
+.b-content--acknowledge-list {
+ margin-top: 36px;
+}
+
+.b-content--acknowledge-list__link {
+ color: #007CB7;
+ font-size: inherit;
+ font-weight: bold;
+ text-decoration: none;
+ margin: 0 6px;
+ line-height: 24px;
+ display: block;
+ font-size: 18px;
+}
+
+.b-content--acknowledge-list__link:hover {
+ color: #08b1ff;
+}
+
+.e-form__label {
+ display: block;
+ font-size: 18px;
+ color: #4d4d4d;
+ margin-top: 12px;
+}
+
+.e-form__field {
+ border: 0;
+ width: 336px;
+ height: 42px;
+ font-size: 18px;
+ padding: 0 12px;
+ color: #4d4d4d;
+ background-color: #f2f2f2;
+ margin: 12px 0;
+ display: block;
+}
+
+.e-form__button {
+ display: block;
+ border: 0;
+ margin: 36px 0 24px 0;
+ width: 360px;
+ height: 42px;
+ text-align: center;
+ color: #fff;
+ font-size: 18px;
+ background-color: #598200;
+}
+
+.e-form__button--offset {
+ margin-left: 396px;
+}
+
+.e-form .error {
+ width: 360px;
+ height: 0;
+ position: relative;
+ display: none;
+}
+
+.e-form .error > span {
+ width: calc(100% - 24px);
+ padding: 12px;
+ min-height: 40px;
+ background: rgba(194, 0, 0, 0.8);
+ color: white;
+ font-size: 12px;
+ position: absolute;
+ left: 0;
+}
+
+.e-form .error > span:after {
+ bottom: 100%;
+ left: 50%;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+}
+
+.e-form .error > span:after {
+ border-bottom-color: rgba(194, 0, 0, 0.8);
+ border-width: 6px;
+ margin-left: -6px;
+}
+
+.e-form .e-select {
+ display: inline-block;
+ width: 360px;
+ height: 42px;
+ position: relative;
+ /* for Webkit's CSS-only solution */
+ /* Select arrow styling */
+}
+
+.e-form .e-select__label {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: inline-block;
+}
+
+.e-form .e-select__box {
+ height: 100%;
+ width: 100%;
+ border-radius: 0;
+ display: inline-block;
+ border: none;
+ padding: 4px 3px 3px 5px;
+ margin: 0;
+ font: inherit;
+ font-size: 18px;
+ color: #666666;
+ /* remove focus ring from Webkit */
+ background: #f2f2f2;
+ line-height: initial;
+ -webkit-appearance: none;
+ /* remove the strong OSX influence from Webkit */
+}
+
+.e-form .e-select__box.ng-dirty.ng-invalid {
+ color: #B32E09;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ .e-form .e-select__box {
+ padding-right: 30px;
+ }
+}
+
+.e-form .e-select__label:after {
+ font-family: FontAwesome;
+ content: "\f0d7";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ font-size: 18px;
+ line-height: 42px;
+ padding: 0 10px;
+ background: transparent;
+ color: #4d4d4d;
+ pointer-events: none;
+}
+
+.e-form .e-select .no-pointer-events .custom-select:after {
+ content: none;
+}
+
+.b-form-row {
+ width: 100%;
+}
+
+.b-form-row__col {
+ display: inline-block;
+ width: auto;
+ padding-right: 36px;
+}
+
+.b-step {
+ display: table;
+}
+
+.b-step__left {
+ display: table-cell;
+ border: 2px solid #b2b2b2;
+}
+
+.b-step__left__image {
+ width: 300px;
+ height: 300px;
+}
+
+.b-step__right {
+ padding-left: 36px;
+ display: table-cell;
+ vertical-align: top;
+}
+
+.b-step__right__title {
+ font-size: 24px;
+ color: #4d4d4d;
+ font-weight: bold;
+}
+
+.b-step__right__title__count {
+ color: #B32E09;
+ margin-right: 6px;
+}
+
+.b-step__right__paragraph {
+ font-size: 18px;
+ font-weight: lighter;
+ color: #4d4d4d;
+}
+
+.b-step__right__paragraph__link {
+ color: #007CB7;
+ font-size: inherit;
+ font-weight: bold;
+ text-decoration: none;
+ margin: 0 6px;
+}
+
+.b-step__right__paragraph__link:hover {
+ color: #08b1ff;
+}
+
+.b-success-registration {
+ width: 460px;
+ height: 266px;
+}
+
+.b-success-registration__btn {
+ width: 100%;
+ background: transparent;
+ border: none;
+ font-size: 24px;
+ outline: none;
+}
+
+.b-success-registration__btn--icon {
+ color: #598200;
+ cursor: pointer;
+}
+
+.b-forgot-pass {
+ width: 460px;
+ height: 440px;
+}
+
+.b-reset-pass {
+ height: 320px;
+ width: 440px;
+}
+
+.b-reset-pass-error {
+ width: 440px;
+ height: 172px;
+}
+
+.b-modal-window {
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.65);
+ z-index: 2000;
+}
+
+.b-modal-window__main-block {
+ background-color: #ffffff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+}
+
+.b-modal-window__main-block__header {
+ color: #4d4d4d;
+ font-size: 18px;
+ padding: 24px 36px;
+ background-color: #f2f2f2;
+ text-transform: capitalize;
+ text-align: center;
+}
+
+.b-modal-window__main-block__header--title {
+ display: inline-block;
+ font-size: 18px;
+ margin: 0;
+}
+
+.b-modal-window__main-block__header--icon-close {
+ font-size: 20px;
+ float: right;
+ cursor: pointer;
+ color: #000000;
+}
+
+.b-modal-window__main-block__header--icon-close:hover {
+ color: #666666;
+}
+
+.b-modal-window__main-block__body {
+ padding: 24px 36px;
+ font-size: 16px;
+ font-family: Segoe UI;
+ font-weight: 100;
+}
+
+.b-modal-window__main-block__body__button {
+ background: none;
+ border: none;
+ font-size: 18px;
+ cursor: pointer;
+}
+
+.b-modal-window__main-block__body__button:hover {
+ color: #4d4d4d;
+}
+
+.b-modal-window__main-block__body__button--icon {
+ color: #598200;
+}
+
+.b-modal-window .b-sync {
+ width: 300px;
+ height: 200px;
+}
+
+.results {
+ position: absolute;
+ width: 336px;
+ margin-top: 35px;
+ margin-left: 4px;
+ background-color: #FFF;
+ list-style: none;
+ padding: 2px;
+ outline: none;
+ border-radius: 4px;
+ z-index: 10;
+ border: 1px solid #AAA;
+ height: 200px;
+ overflow-y: scroll;
+ overflow-x: hidden;
+}
+
+.hide-text {
+ height: 1px;
+ width: 1px;
+ position: absolute;
+ overflow: hidden;
+ top: -10px;
+}
+
+.screnreder-ignore {
+ speak: none;
+}
diff --git a/web/index.js b/app/resources/home.js
similarity index 81%
rename from web/index.js
rename to app/resources/home.js
index f224f4a..322f6b6 100644
--- a/web/index.js
+++ b/app/resources/home.js
@@ -1,7 +1,7 @@
(function () {
var $$ = document.querySelectorAll.bind(document),
$ = document.getElementById.bind(document);
-
+
var validators = {
uniqeUsrName: function () {
var xmlhttp = new XMLHttpRequest(),
@@ -13,7 +13,7 @@
status = true;
}
}
- }
+ };
xmlhttp.open("post", "validate/undefined", false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send('field=username&value=' + encodeURIComponent(this.value.trim()));
@@ -36,7 +36,7 @@
return /^\d+$/.test(this.value);
}
};
-
+
function validate(input) {
var rules = input.dataset.validation;
if (!rules) { return; }
@@ -77,7 +77,7 @@
if (input._validationErrors.length) {
errBlock.style.display = "block";
} else {
- errBlock.style.display = "none";
+ errBlock.style.display = "none";
}
return input._validationErrors;
}
@@ -101,7 +101,7 @@
});
}
- function setAutocomplete(el) {
+ function setAutocomlete(el) {
el.addEventListener('keyup', function (evt) {
if (evt.target.value.trim() != '') {
var xmlhttp = new XMLHttpRequest(),
@@ -117,8 +117,9 @@
for (var i = 0; i < results.length; i++) {
var li = document.createElement('li');
li.innerText = results[i];
- ul.appendChild(li);
+ ul.appendChild(li)
}
+
body.appendChild(ul);
ul.style.top = pos.top + 'px';
ul.style.left = pos.left + 'px';
@@ -131,8 +132,8 @@
})
}
}
- }
-
+ };
+
xmlhttp.open("GET", "/autocomplete/" + evt.target.name + "?term=" + evt.target.value.trim(), true);
xmlhttp.send();
}
@@ -144,7 +145,7 @@
setTimeout(function(){
removeRes();
validate(evt.target);
- }, 500)
+ }, 500);
}, true);
document.querySelector('#register form').addEventListener('submit', function (evt) {
evt.preventDefault();
@@ -159,31 +160,34 @@
if (xmlhttp.readyState == 4 ) {
if(xmlhttp.status == 204) {
document.querySelector('#register form').reset();
- var modal = document.querySelector('.success-registration');
- modal.className = modal.className.replace('hidden', '');
- }
+ /* var modal = document.querySelector('.success-registration');
+ modal.className = modal.className.replace('hidden', '');*/
+ location.hash = '#/successRegistration';
+
+ }
}
- }
+ };
xmlhttp.open("post", "/signup", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(Object.keys(data).reduce(function (a,k) {
if (k == 'password') { data[k] = btoa(data[k]); }
a.push(k+'='+encodeURIComponent(data[k]));
- return a
+ return a;
},[]).join('&'));
}
-
+
});
- document.querySelector('.success-registration input').addEventListener('click', function (evt) {
- closeModal();
+ document.querySelector('.b-success-registration button').addEventListener('click', function (evt) {
+ location.hash = '#/login';
+ closeModal();
}, true);
- setAutocomplete(document.querySelector('#register form input[placeholder="Company"]'));
- setAutocomplete(document.querySelector('#register form input[placeholder="Industry"]'));
+ setAutocomlete(document.querySelector('#register form input[name="company"]'));
+ setAutocomlete(document.querySelector('#register form input[name="industry"]'));
}
function closeModal () {
document.querySelector('#register form').reset();
- location.hash = '/#/login';
+ location.hash = '#/login';
document.querySelector('.success-registration').className += ' hidden';
document.querySelector('#mainMenu a[href="#/login"]').click();
}
@@ -209,7 +213,7 @@
msg.style.display = 'block';
}
}
- }
+ };
xmlhttp.open("post", "/forgotPassword", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(encodeURIComponent('email') + '=' + encodeURIComponent(evt.target.email.value.trim()) + '&' + encodeURIComponent('username') + '=' + encodeURIComponent(evt.target.username.value.trim()));
@@ -232,10 +236,10 @@
if (xmlhttp.readyState == 4 ) {
if(xmlhttp.status == 200 || xmlhttp.status == 204) {
evt.target.reset();
- window.document.location.href = '/#/login';
+ window.document.location.href = '#/login';
}
}
- }
+ };
xmlhttp.open("post", '/resetPassword/' + window._token, false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(encodeURIComponent('password') + '=' + encodeURIComponent(btoa(evt.target.password.value.trim())));
@@ -250,8 +254,10 @@
err.innerHTML = '';
err.style.display = 'none';
}, true);
+
form.addEventListener('submit', function (evt) {
evt.preventDefault();
+
if (evt.target.password.value.length !== 0 && evt.target.username.value.length !== 0) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
@@ -262,7 +268,7 @@
showLoginErr(JSON.parse(xmlhttp.response).message);
}
}
- }
+ };
xmlhttp.open("post", "/login", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(encodeURIComponent('password') + '=' + encodeURIComponent(btoa(evt.target.password.value.trim())) + '&' + encodeURIComponent('username') + '=' + encodeURIComponent(evt.target.username.value.trim()));
@@ -271,17 +277,17 @@
}
});
}
-
+
function showArticle() {
var articles = $$("article"),
id = window.location.hash.substr(2),
- active = document.querySelector('#mainMenu a.active'),
- link = document.querySelector("a[href='" + window.location.hash + "']");
+ active = document.querySelector('.b-menu a.active'),
+ link = document.querySelector("a.b-menu-nav__link[href='" + window.location.hash + "']");
if (active) {
- active.className = '';
+ active.className = 'b-menu-nav__link';
}
if (link) {
- link.className = 'active';
+ link.className = 'b-menu-nav__link active';
}
id = id || 'home';
if (id == 'surveys') {
@@ -326,25 +332,52 @@
}
function toggleDropdown(e){
- var dropdown = document.querySelector('#mainMenu a.language-select ul.dropdown');
- if (!dropdown.className.match(/(?:^|\s)open(?!\S)/)) {
- dropdown.className += ' open';
+ var dropdown = document.querySelector('.b-account-menu a.language-select + ul.dropdown');
+
+ if (!dropdown.className.match(/(?:^|\s)open(?!\S)/)) {
+ showDropdown(e)
} else {
- dropdown.className = 'dropdown';
+ hideDropdown(e)
}
}
- window.addEventListener("load", showArticle);
+ function showDropdown(e) {
+ var dropdown = document.querySelector('.b-account-menu a.language-select + ul.dropdown');
+ dropdown.className = 'dropdown open';
+ e.preventDefault();
+ }
+
+ function hideDropdown(e) {
+ var dropdown = document.querySelector('.b-account-menu a.language-select + ul.dropdown');
+ dropdown.className = 'dropdown';
+ }
+
+ window.addEventListener('load', showArticle);
window.addEventListener('hashchange', showArticle);
window.onload = function(){
- document.querySelector('#mainMenu a.language-select').addEventListener("click", toggleDropdown);
- [].forEach.call(document.querySelectorAll('#mainMenu a.language-select li'), function (el){
- el.addEventListener("click", function (e){
+ document.querySelector('body').addEventListener('click', function(e) {
+ e.stopPropagation();
+
+ if ((e.target.className !== 'dropdown') && (e.target.className !== 'language-select b-account-menu__locale')) {
+ hideDropdown(e);
+ }
+ });
+ document.querySelector('.b-account-menu .dropdown li:last-of-type a').addEventListener('blur', hideDropdown);
+ document.querySelector('.b-account-menu a.language-select').addEventListener('mousedown', toggleDropdown);
+ document.querySelector('.b-account-menu a.language-select').addEventListener('focus', toggleDropdown);
+ document.querySelector('.b-account-menu a.language-select').addEventListener('blur', hideDropdown);
+
+
+ [].forEach.call(document.querySelectorAll('.b-account-menu ul.dropdown li a'), function (el){
+ el.addEventListener('focus', showDropdown);
+ el.addEventListener('click', function (e){
var target = e.target ? e.target : window.event.srcElement;
+ e.preventDefault();
document.cookie = 'NG_TRANSLATE_LANG_KEY=%22' + target.attributes.value.value + '%22';
location.reload();
});
});
+
register();
remindPass();
resetPassword();
diff --git a/app/schemas/Question.js b/app/schemas/Question.js
index ba21279..1f6f8ce 100644
--- a/app/schemas/Question.js
+++ b/app/schemas/Question.js
@@ -1,3 +1,4 @@
+
var
mongoose = require('mongoose'),
Schema;
diff --git a/app/schemas/Survey.js b/app/schemas/Survey.js
index aa7de41..cca61c9 100644
--- a/app/schemas/Survey.js
+++ b/app/schemas/Survey.js
@@ -43,6 +43,15 @@ Schema = new mongoose.Schema({
type: Boolean,
required: true,
default: false
+ },
+ publicExpire: {
+ type: Date
+ },
+ customLogo: {
+ type: String
+ },
+ customMessage: {
+ type: String
}
}, {
toObject: { virtuals: true }
@@ -57,7 +66,8 @@ Schema.pre('save', function (next) {
me.published = false;
}
- if (me.published && me.isModified('resultsCount') && !me.isModified('title') && !me.isModified('_categories')) {
+ if (me.published && (me.isModified('resultsCount') || me.isModified('publicExpire') || me.isModified('customLogo') || me.isModified('customMessage') || me.isModified('__v'))
+ && !me.isModified('title') && !me.isModified('_categories')) {
next();
return;
diff --git a/app/schemas/User.js b/app/schemas/User.js
index 7bedf2e..d34ce6f 100644
--- a/app/schemas/User.js
+++ b/app/schemas/User.js
@@ -36,7 +36,7 @@ Schema = new mongoose.Schema({
set: toLower
},
phone: {
- type: Number,
+ type: String,
required: true,
set: setPhone
},
@@ -204,7 +204,7 @@ Schema.path('company').validate(function (company) {
function setPhone (phone) {
if (UserService.checkPhoneNumberFormat(phone)) {
- return parseInt(phone.replace(new RegExp("[^0-9]", 'g'), ''), 10);
+ return phone.replace(new RegExp("[^0-9]", 'g'), '');
}
return phone;
diff --git a/app/services/ACL.js b/app/services/ACL.js
index b6eb51c..1a2307f 100644
--- a/app/services/ACL.js
+++ b/app/services/ACL.js
@@ -66,6 +66,9 @@ exports.configure = configure = {
},
userPermission: {
show: 'operator'
+ },
+ enketoSurveyUrl: {
+ show: 'fieldWorker'
}
};
diff --git a/app/services/Export.js b/app/services/Export.js
index 2903813..cb383ef 100644
--- a/app/services/Export.js
+++ b/app/services/Export.js
@@ -170,7 +170,7 @@ exports.getResultsData = function (questions, results) {
images = [],
res = '',
body = '',
- questionIndex;
+ questionResult;
_.each(questions, function (question) {
header = header + question.label + '|';
@@ -179,44 +179,49 @@ exports.getResultsData = function (questions, results) {
_.each(results, function (result) {
body = body + getResultMetaData(result);
- questionIndex = -1;
+ _.each(questions, function (question) {
+ questionResult = {};
- _.each(result._categoryResults, function (category) {
- _.each(category._questionResults, function (questionResult) {
+ _.find(result._categoryResults, function (c) {
+ return _.find(c._questionResults, function (q) {
+ if (question.id.indexOf(q.id) !== -1) {
+ questionResult = q;
+ return true;
+ }
+ });
+ });
- questionIndex = questionIndex + 1;
- res = questionResult.result;
+ res = questionResult.result;
- if (questionResult.result === undefined) {
- res = '';
- } else if (
- questions[questionIndex].type === 'binary' ||
- questions[questionIndex].type === 'binary#image'
- ) {
- res = 'photos/' + result._id + '/' + questionResult.result;
+ if (questionResult.result === undefined) {
+ res = '';
+ } else if (
+ questions.type === 'binary' ||
+ questions.type === 'binary#image'
+ ) {
+ res = 'photos/' + result._id + '/' + questionResult.result;
- images.push({
- file: res,
- filename: questionResult.result
- });
- } else if (questions[questionIndex].type === 'date') {
- res = moment(questionResult.result).format('YYYY-MM-DD');
- } else if (questions[questionIndex].type === 'time') {
- res = /(\d{2}:\d{2})/.exec(questionResult.result)[1];
- } else if (
- questions[questionIndex].type === 'select' ||
- questions[questionIndex].type === 'select1' ||
- /cascade/.test(questions[questionIndex].type )
- ) {
- res = _.map(res.trim().split(/ +/), function (value) {
- return '"' + _.find(questions[questionIndex].items, function (item) {
+ images.push({
+ file: res,
+ filename: questionResult.result
+ });
+ } else if (questions.type === 'date') {
+ res = moment(questionResult.result).format('YYYY-MM-DD');
+ } else if (questions.type === 'time') {
+ res = /(\d{2}:\d{2})/.exec(questionResult.result)[1];
+ } else if (
+ questions.type === 'select' ||
+ questions.type === 'select1' ||
+ /cascade/.test(questions.type )
+ ) {
+ res = _.map(res.trim().split(/ +/), function (value) {
+ return '"' + _.find(questions.items, function (item) {
return item.value == value;
}).text + '"';
- });
- }
+ });
+ }
- body = body + res + '|';
- });
+ body = body + res + '|';
});
});
@@ -237,9 +242,12 @@ exports.exportUserRegistrations = function (email, requestedDate) {
filename = 'MDG_monthly_report_' + date.subtract('months', 1).format('MM_YYYY') + '.xlsx',
workbook = excelBuilder.createWorkbook('./', filename);
- User.findOne({}).sort({ timeCreated: 1 }).exec(function (err, user) {
+ User.findOne({}).sort({ timeCreated: -1 }).exec(function (err, user) {
oldest = moment(user.timeCreated).startOf('month');
+ console.log('user', user);
+ console.log('oldest', oldest);
+
while (date >= oldest) {
months.push({
start: moment(date.startOf('month')).toDate(),
diff --git a/app/services/Images.js b/app/services/Images.js
index d00b5e1..789b780 100644
--- a/app/services/Images.js
+++ b/app/services/Images.js
@@ -4,13 +4,15 @@ var
streamBuffers = require("stream-buffers"),
grid = require('gridfs-stream');
-exports.saveImage = function (fileData, fileName) {
+exports.saveImage = function (fileData, fileName, ifBuffer) {
var
- buf = new Buffer(fileData, 'base64'),
+ buf,
gridfs,
readstream,
writestream;
+ buf = ifBuffer ? fileData : new Buffer(fileData, 'base64');
+
gridfs = grid(mongoose.connection.db, mongoose.mongo);
writestream = gridfs.createWriteStream({
diff --git a/app/services/Mail.js b/app/services/Mail.js
index c56d130..74acae1 100644
--- a/app/services/Mail.js
+++ b/app/services/Mail.js
@@ -91,7 +91,7 @@ function getOptionsForForgotUsernameEmail (params, fileName, subject) {
html = compiledJade({
users: params.users,
- link: params.url + '/#/forgotPassword'
+ link: params.url + '/home#/forgotPassword'
});
return {
@@ -110,7 +110,7 @@ function getOptionsForResetPasswordEmail (params, fileName, subject) {
html = compiledJade({
username: params.user.username,
- link: params.url + '/#/resetPassword/' + params.user.resetPasswordToken
+ link: params.url + '/home#/resetPassword/' + params.user.resetPasswordToken
});
return {
diff --git a/app/services/Results.js b/app/services/Results.js
index 17084d1..9606c73 100644
--- a/app/services/Results.js
+++ b/app/services/Results.js
@@ -79,7 +79,7 @@ function getCategoryResults (resultsData, survey, resultId) {
}
exports.composeResults = function (results, resultsData, survey, cb) {
- Result.find({ _survey: survey._id, instanceID: resultsData.instanceID })
+ Result.find({ _survey: survey._id, instanceID: resultsData.instanceID || 'No name' })
.sort('count')
.exec(function (err, sameTitleResults) {
results._survey = survey._id;
@@ -205,18 +205,20 @@ function checkRelevant (relevantValue, results) {
exports.gatherCategoryResults = function (result, survey) {
var
results = [],
- surveyCategory = {},
+ categoryResult = {},
category = {},
- surveyQuestion = {},
+ questionResult = {},
question = {},
index;
- _.each(result._categoryResults, function (categoryResult, categoryIndex) {
+ _.each(survey._categories, function (surveyCategory) {
category = {
_questionResults: []
};
- surveyCategory = survey._categories[categoryIndex];
+ categoryResult = _.find(result._categoryResults, function (c) {
+ return c.id === surveyCategory.id;
+ });
if (surveyCategory.relevant && !checkRelevant(surveyCategory.relevant, result)) {
return;
@@ -225,12 +227,12 @@ exports.gatherCategoryResults = function (result, survey) {
category.title = surveyCategory.title;
category.id = categoryResult.id;
- _.each(categoryResult._questionResults, function (questionResult, questionIndex) {
+ _.each(surveyCategory._questions, function (surveyQuestion) {
question = {};
- surveyQuestion = _.find(surveyCategory._questions, function (question) {
- return question.id == questionResult.id;
- });
+ questionResult = _.find(categoryResult._questionResults, function (q) {
+ return q.id == surveyQuestion.id;
+ }) || {};
if (Configuration.get('general.questionsTypes').indexOf(surveyQuestion.type) == -1 && !/cascade/.test(surveyQuestion.type)) {
return;
diff --git a/app/services/Subscription.js b/app/services/Subscription.js
index eb4d0a0..6db1d04 100644
--- a/app/services/Subscription.js
+++ b/app/services/Subscription.js
@@ -34,7 +34,7 @@ exports.sendSubscriptionEmail = function () {
_.each(subscription._survey._categories, function (category) {
_.each(category._questions, function (question) {
- if (/cascade/.test(question.type) && questions[questions.length - 1].type === question.type) {
+ if (/cascade/.test(question.type) && questions[questions.length - 1] && questions[questions.length - 1].type === question.type) {
questions[questions.length-1].items = questions[questions.length-1].items.concat(question.items);
return;
}
diff --git a/app/services/Survey.js b/app/services/Survey.js
index 16b3a35..1d8a5f9 100644
--- a/app/services/Survey.js
+++ b/app/services/Survey.js
@@ -73,6 +73,42 @@ function getCategories (surveyData) {
});
}
+function transformRelevantForEnketo (relevantValue) {
+ if (!relevantValue) {
+ return;
+ }
+
+ var
+ relevant = '',
+ xpath = '',
+ value,
+ match,
+ conditionRegexp = new RegExp("\\. (>=|<=|<|>|=) ([\\d-]+( and)?)(|$|\\))", 'g'),
+ relevantRegexp = new RegExp("(/data/.+/.+)='(.+)'");
+
+ xpath = relevantValue.match(relevantRegexp)[1];
+ value = relevantValue.match(relevantRegexp)[2];
+
+ if (value.match(/\(.+?\)/)) {
+ _.each(value.split(') ('), function (option, index) {
+ conditionRegexp.lastIndex = 0;
+
+ relevant += index !== 0 ? ' or' : '';
+
+ while ((match = conditionRegexp.exec(option)) !== null) {
+ relevant += ' int(' + xpath + ')' + match[1] + match[2];
+ }
+ });
+ } else {
+ _.each(value.split(' '), function (value, index) {
+ relevant += index !== 0 ? ' or ' : '';
+ relevant += 'selected(' + xpath + ", '" + value + "')";
+ });
+ }
+
+ return relevant;
+}
+
exports.composeSurvey = function (survey, surveyData) {
survey.title = surveyData.title;
survey._categories = getCategories(surveyData);
@@ -80,7 +116,7 @@ exports.composeSurvey = function (survey, surveyData) {
return survey;
};
-exports.composeSurveyData = function (survey) {
+exports.composeSurveyData = function (survey, enketo) {
var surveyData = {
title: survey.title,
instance: {
@@ -112,7 +148,7 @@ exports.composeSurveyData = function (survey) {
if (surveyCategory.relevant !== undefined) {
surveyData.__binds["/data/" + surveyCategory.id] = {
type: "group",
- relevant: surveyCategory.relevant
+ relevant: enketo ? transformRelevantForEnketo(surveyCategory.relevant) : surveyCategory.relevant
};
group.ref = "/data/" + surveyCategory.id;
@@ -134,7 +170,7 @@ exports.composeSurveyData = function (survey) {
surveyData.__binds["/data/" + surveyCategory.id + "/" + surveyQuestion.id] = {
type: surveyQuestion.type,
- relevant: surveyQuestion.relevant,
+ relevant: enketo ? transformRelevantForEnketo(surveyQuestion.relevant) : surveyQuestion.relevant,
constraint: surveyQuestion.constraint,
required: surveyQuestion.required
};
@@ -155,7 +191,7 @@ exports.composeSurveyData = function (survey) {
group.inputs.push({
type: surveyQuestion.type,
required: surveyQuestion.required,
- relevant: surveyQuestion.relevant,
+ relevant: enketo ? transformRelevantForEnketo(surveyQuestion.relevant) : surveyQuestion.relevant,
constraint: surveyQuestion.constraint,
mediatype: surveyQuestion.mediatype,
label: "/data/" + surveyCategory.id + "/" + surveyQuestion.id + ":label",
@@ -165,7 +201,6 @@ exports.composeSurveyData = function (survey) {
items: items,
id: surveyQuestion.id
});
-
});
surveyData.instance.categories.push(category);
@@ -174,3 +209,27 @@ exports.composeSurveyData = function (survey) {
return surveyData;
};
+
+exports.sortSurveyQuestions = function (survey) {
+ _.each(survey._categories, function (c) {
+ var questions = [];
+
+ _.each(c._questions, function (q) {
+ if (/cascade/.test(q.type)) {
+ if (q.type === 'cascade1') {
+ questions.push(q);
+ questions = questions.concat(_.filter(c._questions, function (item) {
+ return item.parentid === q.id;
+ }));
+ }
+ } else {
+ questions.push(q);
+ }
+ });
+
+ c._questions = questions;
+
+ });
+
+ return survey;
+};
diff --git a/app/services/SurveyParser.js b/app/services/SurveyParser.js
index 30b5a45..a3b8a7c 100644
--- a/app/services/SurveyParser.js
+++ b/app/services/SurveyParser.js
@@ -203,6 +203,59 @@ function Survey (jxonTree) {
}
}
+exports.SurveysToJxonTree = function (surveys, url) {
+ var res = {
+ attrs: {
+ xmlns: "http://openrosa.org/xforms/xformsList"
+ },
+ tagName: 'xforms',
+ value: null,
+ items: getItems()
+ };
+
+ function getItems () {
+ return surveys.map(function (survey) {
+ return {
+ tagName: 'xform',
+ value: null,
+ attrs: {},
+ items: getItem(survey)
+ };
+ });
+ }
+
+ function getItem (survey) {
+ return [
+ {
+ tagName: 'formID',
+ attrs: {},
+ items: [],
+ value: survey._id
+ },
+ {
+ tagName: 'name',
+ attrs: {},
+ items: [],
+ value: survey.title
+ },
+ {
+ tagName: 'downloadUrl',
+ attrs: {},
+ items: [],
+ value: url + '/' + survey._id
+ },
+ {
+ tagName: 'hash',
+ attrs: {},
+ items: [],
+ value: survey._id
+ }
+ ]
+ }
+
+ return res;
+};
+
exports.SurveyToJxonTree = function (me) {
var
res = {
diff --git a/app/services/User.js b/app/services/User.js
index 8d7cda5..8b10700 100644
--- a/app/services/User.js
+++ b/app/services/User.js
@@ -6,6 +6,7 @@ exports.checkPhoneNumberFormat = function (phone) {
if (!phoneRe.test(phone)) {
return false;
}
+
};
exports.checkPhoneNumberLength = function (phone) {
diff --git a/app/views/adminPage.jade b/app/views/adminPage.jade
new file mode 100644
index 0000000..306c6cd
--- /dev/null
+++ b/app/views/adminPage.jade
@@ -0,0 +1,25 @@
+doctype html
+html
+ head
+ title= title
+ meta(charset='utf-8')
+ meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
+ meta(name='viewport', content='initial-scale=1.0')
+ script(src='adminPage.js')
+ link(rel='stylesheet' href='styles/adminPage.css')
+
+ body
+ h1 ADMIN PAGE
+
+ div.content
+
+ p Input username or email to delete user
+
+ input(type="text", class="user", placeholder="Username or email...", autocomplete="off", required)
+
+ input(type="button", class="btn-delete-user", value="Delete")
+
+ div.error Please, choose the user form the dropdown list!
+ div.success
+ span.username
+ span was successfully removed.
diff --git a/app/views/emails/en/forgotUsernameEmail.jade b/app/views/emails/en/forgotUsernameEmail.jade
index 2eace16..ac786cb 100644
--- a/app/views/emails/en/forgotUsernameEmail.jade
+++ b/app/views/emails/en/forgotUsernameEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p All usernames related to this email are provided below:
diff --git a/app/views/emails/en/passwordChangedEmail.jade b/app/views/emails/en/passwordChangedEmail.jade
index a4ffaed..4435472 100644
--- a/app/views/emails/en/passwordChangedEmail.jade
+++ b/app/views/emails/en/passwordChangedEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p The password for #{username} has been successfully changed #{date} at #{time}.
diff --git a/app/views/emails/en/registrationEmail.jade b/app/views/emails/en/registrationEmail.jade
index c9a12a1..5bde8e0 100644
--- a/app/views/emails/en/registrationEmail.jade
+++ b/app/views/emails/en/registrationEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
h1 Hello #{name}!
diff --git a/app/views/emails/en/resetPasswordEmail.jade b/app/views/emails/en/resetPasswordEmail.jade
index 570e18c..9a3a16a 100644
--- a/app/views/emails/en/resetPasswordEmail.jade
+++ b/app/views/emails/en/resetPasswordEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p You've received this email because you want to reset password for
diff --git a/app/views/emails/en/subscriptionEmail.jade b/app/views/emails/en/subscriptionEmail.jade
index 7f3e9fd..ee89f20 100644
--- a/app/views/emails/en/subscriptionEmail.jade
+++ b/app/views/emails/en/subscriptionEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
h1 Hello!
diff --git a/app/views/emails/reportEmail.jade b/app/views/emails/reportEmail.jade
index 08ae936..ac53e25 100644
--- a/app/views/emails/reportEmail.jade
+++ b/app/views/emails/reportEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
h1 MDG user report
diff --git a/app/views/emails/ru/forgotUsernameEmail.jade b/app/views/emails/ru/forgotUsernameEmail.jade
index abd264c..ac0d119 100644
--- a/app/views/emails/ru/forgotUsernameEmail.jade
+++ b/app/views/emails/ru/forgotUsernameEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p Все username, связанные с данной почтой, приведены ниже:
diff --git a/app/views/emails/ru/passwordChangedEmail.jade b/app/views/emails/ru/passwordChangedEmail.jade
index caad0ae..e6d1b8b 100644
--- a/app/views/emails/ru/passwordChangedEmail.jade
+++ b/app/views/emails/ru/passwordChangedEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p Пароль для пользователя #{username} успешно изменен #{date} в #{time}.
diff --git a/app/views/emails/ru/registrationEmail.jade b/app/views/emails/ru/registrationEmail.jade
index 5e17c3c..9222cd3 100644
--- a/app/views/emails/ru/registrationEmail.jade
+++ b/app/views/emails/ru/registrationEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
h1 Добрый день, #{name}!
diff --git a/app/views/emails/ru/resetPasswordEmail.jade b/app/views/emails/ru/resetPasswordEmail.jade
index 8d0827c..9590307 100644
--- a/app/views/emails/ru/resetPasswordEmail.jade
+++ b/app/views/emails/ru/resetPasswordEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
p Вы получили данное письмо, поскольку вы или кто-то другой запросил смену пароля для пользователя
diff --git a/app/views/emails/ru/subscriptionEmail.jade b/app/views/emails/ru/subscriptionEmail.jade
index 4b381b4..dbea6db 100644
--- a/app/views/emails/ru/subscriptionEmail.jade
+++ b/app/views/emails/ru/subscriptionEmail.jade
@@ -1,4 +1,4 @@
-!!! transitional
+doctype html transitional
head
body
h1 Добрый день!
diff --git a/app/views/getStarted/jade/en/error404.jade b/app/views/getStarted/jade/en/error404.jade
index 43dd92b..c753292 100644
--- a/app/views/getStarted/jade/en/error404.jade
+++ b/app/views/getStarted/jade/en/error404.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -6,7 +6,7 @@ html
meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
meta(name='viewport', content='initial-scale=1.0')
- link(rel="stylesheet" type="text/css" href="/resources/stylesheets/404.css")
+ link(rel="stylesheet" type="text/css" href="/styles/404.css")
body
div(class="content")
diff --git a/app/views/getStarted/jade/en/home.jade b/app/views/getStarted/jade/en/home.jade
index 1ca225a..79fdd10 100644
--- a/app/views/getStarted/jade/en/home.jade
+++ b/app/views/getStarted/jade/en/home.jade
@@ -1,695 +1,906 @@
-!!! 5
-html
+doctype html
+html(lang='en')
head
title= title
- include ../../../../../web/index.js
- include ../../../../../web/resources/stylesheets/style.css
+ script(src='home.js')
+ link(rel='stylesheet' href='styles/home.css')
+ link(rel='stylesheet' href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' )
meta(charset='utf-8')
body
- header#mainMenu
- nav
- a(href='#')
- img(src='../resources/icons/lolgo-30px.png')
- h1
- | MICROSOFT
- b DATA GATHERING
- ul
- li
- a(href='#/getStarted') Get Started
- li
- a(href='#/useCases') Use Cases
- li
- a(href='#/openSource') Open Source
- li
- a(href='#/support') Support
- li
- a.language-select #{language}
- ul.dropdown
- each lang in languages
- li(value=lang.value) #{lang.text}
- a(href='#/login') Login
- | /
- a(href='#/register') Register
- article#home.hidden
- section.headDescrip
- div
- | Microsoft Data Gathering offers organizations a fast,
- br
- | accurate, cost effective and
- br
- | user-friendly way to collect data using mobile devices.
- section.contentDescrip
- div
- .col-left
- p
- | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central location,
- | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the ability
- | to make crucial decisions.
- p
- | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
- | the field. The more time-critical the need for data and the more remote the location, the more organizations
- | can benefit from a mobile phone based solution.
- p
- | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data, including
- | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
- p
- | Because mobile devices can transmit data even from remote locations, the information collected can be available
- | for analysis in near-real time.
- .col-right
- img(src='../resources/images/collage.jpg')
- section#instruction
- div
- h2 HOW IT WORKS
- ul
- .col-left
- li
- a(href='#/getStarted#step1')
- img(src='../resources/images/howitworks_1.png')
- span 1
- span
+ .g-page-wrapper
+ .b-page__head-line
+ .b-line-bit.b-line-bit--red
+ .b-line-bit.b-line-bit--green
+ .b-line-bit.b-line-bit--blue
+ .b-line-bit.b-line-bit--yellow
+ div
+ header.b-page__header
+ .b-head-logo
+ a.b-logo__title(href='#/home')
+ img.b-logo__img(src='assets/images/logo-30px.png'
+ alt='Microsoft Data Gathering')
+ span Microsoft Data Gathering
+ .b-menu
+ nav.b-menu-nav
+ a.b-menu-nav__link(href='#/getStarted')
+ | Get Started
+ a.b-menu-nav__link(href='#/useCases')
+ | Use Cases
+ a.b-menu-nav__link(href='#/openSource')
+ | Open Source
+ a.b-menu-nav__link(href='#/support')
+ | Support
+ .b-account-menu
+ a.language-select.b-account-menu__locale(href='#') #{language}
+ ul.dropdown
+ each lang in languages
+ li: a.b-account-menu__language(href='#' value=lang.value title=lang.title lang=lang.value)
+ span.hide-text #{lang.title}
+ span.screnreder-ignore(role='presentation' aria-hidden='true') #{lang.text}
+ .b-account-menu__user
+ a(title='Login to Microsoft Data Gathering' href='#/login') Login
+ | /
+ a(title='Register to Microsoft Data Gathering' href='#/register') Register
+ article#home.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Microsoft Data Gathering
+ p.b-content-header__text
+ | Offers organizations a fast, accurate, cost effective and
+ br
+ | user-friendly way to collect data using mobile devices.
+ .b-page__line
+ .b-content.b-content--line.b-content--main
+ .b-content--main__article
+ p.b-content--main__article__indent
+ | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central
+ | location,
+ | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the
+ | ability
+ | to make crucial decisions.
+ p.b-content--main__article__indent
+ | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
+ | the field. The more time-critical the need for data and the more remote the location, the more organizations
+ | can benefit from a mobile phone based solution.
+ p.b-content--main__article__indent
+ | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data,
+ | including
+ | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
+ p.b-content--main__article__indent
+ | Because mobile devices can transmit data even from remote locations, the information collected can be available
+ | for analysis in near-real time.
+ .b-content-main__image
+ img(src='../assets/images/collage.jpg'
+ alt='Pictures of MDG in use')
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | How It Works
+ .b-content__col-left
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_1.png'
+ alt='First step of how MDG works. Create a questionnaire')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 1
+ span.b-content__col-left__item__caption__text--blue
| Create a questionnaire on
br
| the survey editor
- li
- a(href='#/getStarted#step2')
- img(src='../resources/images/howitworks_2.png')
- span 2
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_2.png'
+ alt='Second step of how MDG works. Publish the data for data collectors.')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 2
+ span.b-content__col-left__item__caption__text--blue
| Publish the data for data
br
| collectors
- li
- a(href='#/getStarted#step3')
- img(src='../resources/images/howitworks_3.png')
- span 3
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_3.png'
+ alt='Third step of how MDG works. Fill in the questionnaire on the device')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 3
+ span.b-content__col-left__item__caption__text--blue
| Fill in the questionnaire on
br
- | your mobile device
- .col-right
- li
- a(href='#/getStarted#step4')
- img(src='../resources/images/howitworks_4.png')
- span 4
- span
+ | your mobile device
+ .b-content__col-right
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_4.png'
+ alt='Fourth step of how MDG works. Send your data to the server')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 4
+ span.b-content__col-right__item__caption__text--blue
| Send your data to the
br
- | server over the mobile
- br
- | network
- li
- a(href='#/getStarted#step5')
- img(src='../resources/images/howitworks_5.png')
- span 5
- span
+ | server over the mobile network
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_5.png'
+ alt='Fifth step of how MDG works. View, map or export your data')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 5
+ span.b-content__col-right__item__caption__text--blue
| View, map, and export
br
| your data
- section.videoBlock
- div
- p
- i
- | This video is about the use of Microsoft Data Gathering to
- b.bold combat dengue fever
- | in Amazonas State, Brazil.
- iframe.video(src='//www.youtube.com/embed/kP1v9Snz6HA')
- section#benefits
- div
- h2 BENEFITS
- ul
- .col-left
- li
- img(src='../resources/icons/speed.png')
- h3 Speed
- | Compared to using paper forms, mobile solutions cut down delays
- | caused by transportation and manual digitalization of collected
- | data.
- li
- img(src='../resources/icons/cost-efficiency.png')
- h3 Cost efficiency
- | Transportation and logistics costs are reduced, as are the needs
- | for manual data entry and cleaning. There is also a cost of
- | inaction saved with the ability to make critical decisions and
- | react rapidly.
- .col-right
- li
- img(src='../resources/icons/accuracy.png')
- h3 Accuracy
- | Data entry occurs at the point of collection, without needing to
- | transcribe hand-written information. This lowers the frequency of
- | transcription and data entry errors.
- li
- img(src='../resources/icons/usability.png')
- h3 Usability
- | Mobile phones are small, easy to carry, have battery longevity,
- | and enable the capture of rich data such as GPS location tags
- | and images.
- section#awards
- div
- .col-left
- h2 AWARDS
- ul
- li
- b 2012
- | : Microsoft Data Gathering was a Featured Project of the
- br
- | Month for July in the Developer Community Blog.
- li
- b 2011
- | : Microsoft Data Gathering won the Justmeans Social
- br
- | Innovation Award in the category "Philanthropy: Most Strategic
- br
- | Use of Philanthropic Funds".
- li
- | The Justmeans international awards program is considered one of
- | the top honours in the field of sustainability, giving recognition to
- | companies implementing groundbreaking strategies and programs
- | that drive social and environmental innovation.
- .col-right
- h2 ACKNOWLEDGEMENTS
- p
- | We would like to extend our thanks to these organizations, which
- br
- | have been instrumental in getting Microsoft Data Gathering to
- br
- | where it is today.
- ul.markedList
- li
- a(href='http://www.indt.org/?lang=en') Nokia Technology Institute
- li
- a(href='http://www.uonbi.ac.ke/') University of Nairobi
- li
- a(href='http://cmri.shu.edu/') The Center for Mobile Research and Innovation
- li
- a(href='http://www.ayalafoundation.org/') The Ayala Foundation
- ul#footer
- li
- a(href='http://www.nokia.com/global/privacy/privacy/policy/privacy-policy/') Privacy Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/cookie/cookie-policy/') Cookie Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/service-terms/nokia-service-terms/') Service Policy
- li
- a(href="https://github.com/nokiadatagathering") Code
- article#getStarted.hidden
- section
- div
- h1 GET STARTED
- p
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title#benefits
+ a(name='benefits') Benefits
+ .b-content__col-left
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits1.png'
+ alt='Compared to using paper forms, mobile solutions cut down delays')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Speed
+ p.b-content__col-left__item__caption__text
+ | Compared to using paper forms, mobile solutions cut down delays
+ | caused by transportation and manual digitalization of collected
+ | data.
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits2.png'
+ alt='Transportation and logistics costs are reduced')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Cost efficiency
+ p.b-content__col-left__item__caption__text
+ | Transportation and logistics costs are reduced, as are the needs
+ | for manual data entry and cleaning. There is also a cost of
+ | inaction saved with the ability to make critical decisions and
+ | react rapidly.
+ | data.
+ .b-content__col-right
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits3.png'
+ alt='Data entry occurs at the point of collection')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Accuracy
+ p.b-content__col-right__item__caption__text
+ | Data entry occurs at the point of collection, without needing to
+ | transcribe hand-written information. This lowers the frequency of
+ | transcription and data entry errors.
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits4.png'
+ alt='Mobile devices are easy to carry')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Usability
+ p.b-content__col-right__item__caption__text
+ | Mobile phones are small, easy to carry, have battery longevity,
+ | and enable the capture of rich data such as GPS location tags
+ | and images.
+ .b-page__line
+ .b-content.b-content-line
+ .b-content__col-left
+ h2.b-content-title Awards
+ p.b-content__paragraph
+ strong 2012
+ | Microsoft Data Gathering was a Featured Project of the
+ br
+ | Month for July in the Developer Community Blog.
+ p.b-content__paragraph
+ strong 2011
+ | Microsoft Data Gathering won the Justmeans Social
+ br
+ | Innovation Award in the category "Philanthropy: Most Strategic
+ br
+ | Use of Philanthropic Funds".
+ p.b-content__paragraph
+ | The Justmeans international awards program is considered one of
+ br
+ | the top honours in the field of sustainability, giving recognition to
+ br
+ | companies implementing groundbreaking strategies and programs
+ br
+ | that drive social and environmental innovation.
+ br
+ .b-content__col-right
+ .b-content__col-right__item
+ h2.b-content-title Acknowledgements
+ p.b-content__paragraph
+ | We would like to extend our thanks to these organizations, which
+ br
+ | have been instrumental in getting Microsoft Data Gathering to
+ br
+ | where it is today.
+ .b-content--acknowledge-list
+ a.b-content--acknowledge-list__link(href='http://www.indt.org/?lang=en', target='_blank') Nokia Technology Institute
+ a.b-content--acknowledge-list__link(href='http://www.uonbi.ac.ke/', target='_blank') University of Nairobi
+ a.b-content--acknowledge-list__link(href='http://cmri.shu.edu/', target='_blank') The Center for Mobile Research and Innovation
+ a.b-content--acknowledge-list__link(href='http://www.ayalafoundation.org/', target='_blank') The Ayala Foundation
+
+ article#getStarted.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Get Started
+ p.b-content-header__text
| If you have your own server and wish to migrate your data
- | to this release of MDG the tool to do that is available
- a(href="http://github.com/nokiadatagathering/ndg-migration") here
- ul
- li(data-step='step1')
- img(src='../resources/images/getstarted_step1.png')
- h2 Step 1: Register to the Microsoft Data Gathering Playground Server
- p
- | The first thing you need to do is to fill in the user registration form and create
- | an account on the Microsoft Data Gathering playground server. You can do this by
- | clicking
- a(href='#/register') register on the homepage
- | .
- li(data-step='step2')
- img(src='../resources/images/getstarted_step2.png')
- h2 Step 2: Create a survey
- p
- | After you've confirmed your account and logged in to the server, you can start
- | writing your own questionnaire using the survey editor. You can choose different
- | question types, set default answers or limits and even use skip logic to write your
- | questionnaire.
- li(data-step='step3')
- img(src='../resources/images/getstarted_step3.png')
- h2 Step 3: Download the Microsoft Data Gathering mobile application
- p
- | Download and install one of the Microsoft Data Gathering mobile applications.
- p
- i
- | Please note that until the branding change is completed please use the server https://nokiadatagathering.net in the app settings.
- | Apps marked as 'New!' have been updated to use the https://microsoftdatagathering.net server and those marked as 'To be updated' still
- | default to https://nokiadatagathering.net
- p
- | Download the
- a(href="http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848") Windows Phone app
- |.
- img(src="../resources/icons/1-new.png")
- em New!
- br
- | Download the
- a(href="https://nokiadatagathering.net/ndg-ota/client/ndg.jad") Java app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- br
- | Download the
- a(href="http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42") Windows Tablet app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- li(data-step='step4')
- img(src='../resources/images/getstarted_step4.png')
- h2 Step 4: Add users and make your survey available to them
- p
- | You can publish your questionnaire to your field data collectors by adding them to
- | your main account in the Users section, organizing them into groups and giving
- | them different access permissions. You can make your questionnaire available to
- | as many users as you like. You can also send SMS notifications to your user groups.
- li(data-step='step5')
- img(src='../resources/images/getstarted_step5.png')
- h2 Step 5: Fill in the survey and send your results on your mobile device
- p
- | Open the Microsoft Data Gathering app you downloaded onto your mobile device
- | in Step 3, and login with your user credentials. The surveys that were made available
- | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
- | result by entering the requested data in the blank fields.
- p
- | You can send your results back to the server immediately, or save them on the
- | phone to send later.
- li(data-step='step6')
- img(src='../resources/images/getstarted_step6.png')
- h2 Step 6: View and export your results
- p
- | Go back to your Playground Server account and take a look at all the results you've received.
- | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
- | your data in XLS or KML formats for further data analysis.
- article#useCases.hidden
- section
- div
- h1 USE CASES
- ul
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Uganda - FAO
- img(src='../resources/images/usecase_1.jpg')
- .col-left
- p
- | As part of a regional initiative to reduce risk
- | of drought in Eastern Africa with Early Warning Systems,
- | the Food and Agriculture Organization of the United Nations
- | (FAO) in Uganda is collecting geo-spatial and qualitative
- | data about community animal health workers and providers
- | of veterinary services and shops, among the rural pastoral
- | communities of the Karamoja region.
- p
- | The move from paper-based questionnaires to Microsoft Data Gathering
- | has allowed more efficient operations by reducing the time to produce
- | Drought Bulletins by 50%.
- p
- | Furthermore, the project has enhanced participation of the community
- | and the local government, and is supporting the capacity of the
- | Department of Meteorology in issuing monthly weather updates
- | for Karamoja.
- p
- | FAO's efforts were recognized by the World Bank in recent study
- | on mobile applications for the agriculture and forestry sector,
- | published in December 2013.
- .col-right
- blockquote
+ br
+ | to this release of MDG the tool to do that is available
+ a.b-content-header__text__link(href='http://github.com/nokiadatagathering/ndg-migration', target='_blank') here
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step1.png'
+ alt='Register to the Microsoft Data Gathering Playground Server')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 1
+ | Register to the Microsoft Data Gathering Playground Server
+ p.b-step__right__paragraph
+ | The first thing you need to do is to fill in the user registration form and create
+ br
+ | an account on the Microsoft Data Gathering playground server. You can do this by
+ br
+ | clicking
+ a.b-step__right__paragraph__link(title='Register' href='#/register') register on the homepage
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step2.png'
+ alt='Create a survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 2
+ | Create a survey
+ p.b-step__right__paragraph
+ | After you've confirmed your account and logged in to the server, you can start
+ br
+ | writing your own questionnaire using the survey editor. You can choose different
+ br
+ | question types, set default answers or limits and even use skip logic to write your
+ br
+ | questionnaire.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step3.png'
+ alt='Download the MDG mobile application')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 3
+ | Download the Microsoft Data Gathering mobile application
+ p.b-step__right__paragraph
+ | Download and install one of the Microsoft Data Gathering mobile applications.
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848', target='_blank')
+ | Windows Phone app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='https://nokiadatagathering.net/ndg-ota/client/ndg.jad', target='_blank')
+ | Java app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42', target='_blank')
+ | Windows Tablet app
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step4.png'
+ alt='Add users')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 4
+ | Add users and make your survey available to them
+ p.b-step__right__paragraph
+ | You can publish your questionnaire to your field data collectors by adding them to
+ br
+ | your main account in the Users section, organizing them into groups and giving
+ br
+ | them different access permissions. You can make your questionnaire available to
+ br
+ | as many users as you like. You can also send SMS notifications to your user groups.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step5.png'
+ alt='Fill in the survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 5
+ | Fill in the survey and send your results on your mobile device
+ p.b-step__right__paragraph
+ | Open the Microsoft Data Gathering app you downloaded onto your mobile device
+ br
+ | in Step 3, and login with your user credentials. The surveys that were made available
+ br
+ | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
+ br
+ | result by entering the requested data in the blank fields.
+ p.b-step__right__paragraph
+ | You can send your results back to the server immediately, or save them on the
+ | phone to send later.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step6.png'
+ alt='View and Export')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 6
+ | View and export your results
+ p.b-step__right__paragraph
+ | Go back to your Playground Server account and take a look at all the results you've received.
+ br
+ | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
+ br
+ | your data in XLS or KML formats for further data analysis.
+
+
+ article#useCases.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Use Cases
+ p.b-content-header__text
+ | A Real Solution to Real Problems
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities
+ br
+ | in Uganda - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | As part of a regional initiative to reduce risk
+ | of drought in Eastern Africa with Early Warning Systems,
+ | the Food and Agriculture Organization of the United Nations
+ | (FAO) in Uganda is collecting geo-spatial and qualitative
+ | data about community animal health workers and providers
+ | of veterinary services and shops, among the rural pastoral
+ | communities of the Karamoja region.
+ p.b-content__paragraph
+ | The move from paper-based questionnaires to Microsoft Data Gathering
+ | has allowed more efficient operations by reducing the time to produce
+ | Drought Bulletins by 50%.
+ p.b-content__paragraph
+ | Furthermore, the project has enhanced participation of the community
+ | and the local government, and is supporting the capacity of the
+ | Department of Meteorology in issuing monthly weather updates
+ | for Karamoja.
+ p.b-content__paragraph
+ | FAO's efforts were recognized by the World Bank in recent study
+ | on mobile applications for the agriculture and forestry sector,
+ | published in December 2013.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_1.jpg'
+ alt='FAO in Eastern Africa')
+ blockquote.b-content__col-right__item__photo-caption
| "We strive to improve the humanitarian situation by increasing
| the coping capacities of populations vulnerable to recurrent
| drought hazards and their effects through the provision of
| multi-sectorial assistance in the Horn of Africa.
| Microsoft Data Gathering is one of the most convenient
| and cost-effective tools for collecting data from remote areas."
- p
- b Bernard 0. Mwesigwa
- | ,
- | Programme Officer, M&E/Data Management, FAO Uganda
- li
- h2.nptlHeader Giving children the right to an identity in Kenya - Plan
- img(src='../resources/images/usecase_2.jpg')
- .col-left
- p
- | An official identity is the foundation for child rights,
- | child protection and later child's ticket to services such as
- | secondary schooling. Official identity is obtained by parents
- | through birth registration.
- p
- | Today only five out of ten children in Kenya are registered.
- p
- | Poor accessibility to offices and officers, slow processing
- | of both birth notifications and certificates, and costs involved
- | together with a lack of incentives for parents to register their
- | children contribute to the current situation.
- p
- | Plan together with the Ministry of Foreign Affairs in Finland is
- | running a universal birth registration project in the Kwale district
- | using Microsoft Data Gathering that has resulted in dramatically increased
- | registration rates (from 30 to 68%).
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Bernard O. Mwesigwa,
+ br
+ | Programme Officer, M&E/Data Management, FAO Uganda
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Giving children the right to an identity in Kenya - Plan
+ .b-content__col-left
+ p.b-content__paragraph
+ | An official identity is the foundation for child rights,
+ | child protection and later child's ticket to services such as
+ | secondary schooling. Official identity is obtained by parents
+ | through birth registration.
+ p.b-content__paragraph
+ | Today only five out of ten children in Kenya are registered.
+ p.b-content__paragraph
+ | Poor accessibility to offices and officers, slow processing
+ | of both birth notifications and certificates, and costs involved
+ | together with a lack of incentives for parents to register their
+ | children contribute to the current situation.
+ p.b-content__paragraph
+ | Plan together with the Ministry of Foreign Affairs in Finland is
+ | running a universal birth registration project in the Kwale district
+ | using Microsoft Data Gathering that has resulted in dramatically increased
+ | registration rates (from 30 to 68%).
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_2.jpg'
+ alt='Plan in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "The use of ICTs including mobile technology has great potential to support
| communities and governments in civil registration. Right to citizenship and
| identity are fundamental prerequisites in development."
- p
- b Mika Välitalo
- | , Manager - ICT for Development, Plan Finland
- li
- h2.nptlHeader
- | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
- img(src='../resources/images/usecase_3.jpg')
- .col-left
- p
- | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
- | Microsoft Data Gathering to help fight the spread of dengue fever
- | and increase the effectiveness of treatment.
- p
- | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
- | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
- b.bold 93% cut
- | in the number of cases.
- p
- | Microsoft Data Gathering helped the health workers to do their jobs, by making their
- | reports both faster and more accurate.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Mika Välitalo,
+ br
+ | Manager - ICT for Development, Plan Finland
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
+ .b-content__col-left
+ p.b-content__paragraph
+ | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
+ | Microsoft Data Gathering to help fight the spread of dengue fever
+ | and increase the effectiveness of treatment.
+ p.b-content__paragraph
+ | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
+ | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
+ bold 93% cut
+ | in the number of cases.
+ p.b-content__paragraph
+ | Microsoft Data Gathering helped the health workers to do their jobs, by making their
+ | reports both faster and more accurate.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_3.jpg'
+ alt='Malaria in Amazonas')
+ blockquote.b-content__col-right__item__photo-caption
| "Microsofts technology will help us to more rapidly identify and investigate the results
| and symptoms of the surveyed population. The transmission of data immediately after
| the interviews improves agility, increases public safety and avoids manual filling-in of forms."
- p
- b Agnaldo Costa
- | , State Health Secretary of Amazonas State
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Kenya - FAO
- img(src='../resources/images/usecase_4.jpg')
- .col-left
- p
- | Accurate, timely and geo-tagged data on water points and sources is
- | an important basis to reduce the impact of drought among vulnerable communities
- | living in recurrent drought Food Agriculture Organization (FAO) is working along
- | with their NGO partners in Greater Horn of Africa to alleviate the risk
- | to drought among pastoralist communities.
- p
- | Microsoft Data Gathering is bringing mobile technology to water point surveys,
- | reducing the amount of effort, time and cost to collect the information and
- | enabling proper and timely preparedness activities.
- p
- | To date information from over 500 points has been collected - and more into come.
- | The collected information is also published in Disaster Risk Reduction website
- | for public good.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Agnaldo Costa,
+ br
+ | State Health Secretary of Amazonas State
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities in Kenya - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | Accurate, timely and geo-tagged data on water points and sources is
+ | an important basis to reduce the impact of drought among vulnerable communities
+ | living in recurrent drought Food Agriculture Organization (FAO) is working along
+ | with their NGO partners in Greater Horn of Africa to alleviate the risk
+ | to drought among pastoralist communities.
+ p.b-content__paragraph
+ | Microsoft Data Gathering is bringing mobile technology to water point surveys,
+ | reducing the amount of effort, time and cost to collect the information and
+ | enabling proper and timely preparedness activities.
+ p.b-content__paragraph
+ | To date information from over 500 points has been collected - and more into come.
+ | The collected information is also published in Disaster Risk Reduction website
+ | for public good.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_4.jpg'
+ alt='Vulnerable communities in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "A huge burden is put on organizations, especially small scale NG05,
| to collect, capture and process data timely for response and planning with
| no supported technology tools. Microsoft Data Gathering provides a simple and
| effective field solution with a centralized data administration system."
- p
- b Phillip Fong
- | , Regional Data and Information Coordinator, FAO
- article#openSource.hidden
- section
- div
- h1 OPEN SOURCE
- h2.nptlHeader Microsoft Data Gathering is an Open Source solution
- .col-left
- p
- | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
- | making the source code available to anyone for download, deployment and development.
- | There are no licensing costs for using the software, the code base is public,
- | and development occurs in a collaborative and community-driven manner.
- p
- | The open source model also empowers universities and local developers to participate
- | in creating tools and services on top of the core solution, helping to build local capacity.
- | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
- | technology adoption.
- p
- | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
- | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
- | of covered software.
- .col-right
- p
- | You can read the BSD license terms
- a(href='http://opensource.org/licenses/BSD-2-Clause') here
- | .
- p
- | The Microsoft Data Gathering Playground Server and the Java client
- | are both licensed under the GNU Lesser General Public License,
- a(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html') LGPL
- | which allows developers and companies to use and integrate the software into
- | their own (even proprietary) software without being required to release the source
- | code of their own software-parts.
- p
- | Microsoft Data Gathering complies with Open Rosa standards for data collection.
- p
- | The Microsoft Data Gathering source code and documentation repository is at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- section
- div
- h1 GET INVOLVED
- p
- | Here's how you can be a part of the Microsoft Data Gathering
- | developer and user community:
- ul.markedList
- li
- a(href='https://github.com/nokiadatagathering') Get the source code
- | and develop
- | Microsoft Data Gathering
- li
- | Become a Microsoft Data Gathering service partner
- li
- | Help us plan future software releases
- li
- | Translate the Microsoft Data Gathering application into your language
- article#support.hidden
- section
- div
- h1 SUPPORT
- p How to get support:
- ul.markedList
- li
- a(href='/docs') Read the Microsoft Data Gathering user guide and documentation
- li
- | Access the
- a(href='https://github.com/nokiadatagathering') Microsoft Data Gathering code repository
- li
- | Send an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- h1 FREQUENTLY ASKED QUESTIONS
- ul.questionList
- .col-left
- li
- h2.blueHeader 1) What are the benefits of mobile data collection?
- p
+ p.b-content__col-right__item__photo-location
+ | Phillip Fong,
+ br
+ | Regional Data and Information Coordinator, FAO
+ article#openSource.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Open Source
+ p.b-content-header__text
+ | Microsoft Data Gathering is an Open Source solution
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ p.b-content__paragraph
+ | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
+ | making the source code available to anyone for download, deployment and development.
+ | There are no licensing costs for using the software, the code base is public,
+ | and development occurs in a collaborative and community-driven manner.
+ p.b-content__paragraph
+ | The open source model also empowers universities and local developers to participate
+ | in creating tools and services on top of the core solution, helping to build local capacity.
+ | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
+ | technology adoption.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
+ | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
+ | of covered software.
+ .b-content__col-right
+ .b-content__col-right__item
+ p.b-content__paragraph
+ | You can read the BSD license terms
+ a.b-content__paragraph__link(href='http://opensource.org/licenses/BSD-2-Clause', target='_blank') here
+ | .
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Playground Server and the Java client
+ | are both licensed under the GNU Lesser General Public License,
+ a.b-content__paragraph__link(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html', target='_blank') LGPL
+ | which allows developers and companies to use and integrate the software into
+ | their own (even proprietary) software without being required to release the source
+ | code of their own software-parts.
+ p.b-content__paragraph
+ | Microsoft Data Gathering complies with Open Rosa standards for data collection.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering source code and documentation repository is at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') https://github.com/nokiadatagathering
+ | .
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | Get Involved
+ p.b-content__paragraph
+ | Here's how you can be a part of the Microsoft Data Gathering
+ | developer and user community:
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') Get the source code
+ | and develop
+ | Microsoft Data Gathering
+ p.b-content__paragraph.b-content__paragraph--item
+ | Become a Microsoft Data Gathering service partner
+ p.b-content__paragraph.b-content__paragraph--item
+ | Help us plan future software releases
+ p.b-content__paragraph.b-content__paragraph--item
+ | Translate the Microsoft Data Gathering application into your language
+
+ article#support.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Support
+ p.b-content-header__text
+ | Microsoft Data Gathering support page
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | How to get support
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='/docs')
+ | Read the Microsoft Data Gathering user guide and
+ | documentation
+ p.b-content__paragraph.b-content__paragraph--item
+ | Access the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering',, target='_blank')
+ | Microsoft Data Gathering code repository
+ p.b-content__paragraph.b-content__paragraph--item
+ | Send an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com')
+ | mdgspprt@microsoft.com
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Frequently Asked Questions
+ .b-content__col-left
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 1
+ | What are the benefits of mobile data collection?
+ p.b-content__paragraph
| The key benefits of mobile data collection are speed,
- | accuracy, cost efficiency and usability. Please see the
- a(href='#/home') benefits section on the homepage
+ | accuracy, cost efficiency and usability. Please see the
+ a.b-content__paragraph__link(href='#') benefits section on the homepage
| for more on benefits.
- li
- h2.blueHeader 2) How is Microsoft Data Gathering used in the field?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 2
+ | How is Microsoft Data Gathering used in the field?
+ p.b-content__paragraph
| When time is of the essence, rapidly available, accurate information
| is critical for sound decision-making in any kind of organization.
- p
+ p.b-content__paragraph
| For example: In Brazil, the Amazonas State Health Department and
| the Health Vigilance Foundation have used Microsoft Data Gathering
| to monitor and control the spread of dengue fever.
- p
+ p.b-content__paragraph
| In East Africa, the Food and Agriculture Organization has conducted
| water and livestock surveys to reduce the risk of vulnerable
| communities to drought.
- p
+ p.b-content__paragraph
| In Kenya, Plan Finland has worked with the Kenyan government
| to register births using Microsoft Data Gathering.
- p
- | For more on use cases, please see the
- a(href='#') use cases page
- | .
- li
- h2.blueHeader 3) Does it cost anything to use Microsoft Data Gathering?
- p
- | Nokia Data Gathering is an open source solution so there are no licensing fees
- | or charges for using the software. For more on open source, please see the
- a(href='#/openSource') open source page
- | .
- p
+ p.b-content__paragraph
+ | For more on use cases, please see the
+ a.b-content__paragraph__link(href='#/useCases') use cases page
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 3
+ | Does it cost anything to use Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Microsoft Data Gathering is an open source solution so there are no licensing fees
+ | or charges for using the software. For more on open source, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ p.b-content__paragraph
| Of course, there are costs associated with the hardware
| (mobile phones, servers, SIM cards) necessary for using
- | Nokia Data Gathering, as well as the implementation of a data collection project.
+ | Microsoft Data Gathering, as well as the implementation of a data collection project.
| These costs must be scoped and borne by the organization using the solution.
- li
- h2.blueHeader 4) What are the license terms for Microsoft Data Gathering?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 4
+ | What are the license terms for Microsoft Data Gathering?
+ p.b-content__paragraph
| The Microsoft Data Gathering Windows Phone client is licensed under the open source
| Berkeley Software Distribution (BSD) License family. The Microsoft
| Data Gathering Playground Server and the Java client are both licensed under
| the GNU Lesser General Public License (ILGPL).Microsoft Data Gathering complies with
| the standards of the OpenROSA Consortium on mobile data collection.
- p
- | For more on our licenses, please see the
- a(href='#/openSource') open source page
- | .
- .col-right
- li
- h2.blueHeader 5) Which devices are compatible with Microsoft Data Gathering?
- p
+ p.b-content__paragraph
+ | For more on our licenses, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ .b-content__col-right
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 5
+ | Which devices are compatible with Microsoft Data Gathering?
+ p.b-content__paragraph
| The Windows Phone version of the Microsft Data Gathering mobile client is
| a Silverlight application for Windows Phone 7 and a Cordova/Sensa Touch application for
| Windows Phone 8. The Windows Tablet version runs on Windows RT devices. The Java application runs
| on Symbian and Nokia OS devices.
- p
+ p.b-content__paragraph
| If you have a specific query about device compatibility, please let
- | us know by sending an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- li
- h2.blueHeader 6) Where can I find the Microsoft Data Gathering source code?
- p
- | You can get the source code at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- li
- h2.blueHeader 7) How can I host my own server data?
- p
+ | us know by sending an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com' ) mdgspprt@microsoft.com
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 6
+ | Where can I find the Microsoft Data Gathering source code?
+ p.b-content__paragraph
+ | You can get the source code at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 7
+ | How can I host my own server data?
+ p.b-content__paragraph
| The instructions for setting up and hosting your own
- | server are contained in the
- a(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
- | .
- li
- h2.blueHeader 8) What are the previous versions of Microsoft Data Gathering?
- p
- | Please see our
- a(href='#') release archive
- | . for more information on previous releases of
- | Microsoft Data Gathering.
- li
- h2.blueHeader 9) Can students work on Microsoft Data Gathering?
+ | server are contained in the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 8
+ | What are the previous versions of Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Please see our
+ a.b-content__paragraph__link(href='#') release archive
+ | for more information on previous releases of
+ | Microsoft Data Gathering..
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 9
+ | Can students work on Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Yes. Please see the description of our
+ a.b-content__paragraph__link(href='#') University Collaboration Program
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 10
+ | Can I translate the Microsoft Data Gathering mobile client into my language?
+ p.b-content__paragraph
+ | Yes. Please get in touch with us at
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com', target='_blank') mdgspprt@microsoft.com
+ | and work with us to provide a translation of
+ | the software in your language. We will then push this out
+ | and make the language version available to all users.
+
+ article#login.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Login
+ p.b-content-header__text
+ | Log in to the server below
+ .b-page__line
+ .b-content
+ form.e-form
+ label.e-form__label(for='login_username') Username
+ input.e-form__field#login_username(type="text", name="username", placeholder="Enter your username...", tabindex="0")
+ label.e-form__label(for='login_password') Password
+ input.e-form__field#login_password(type="password", name="password", placeholder="Enter your password...")
+ .error
+ button.e-form__button(type="submit" title='Login') Login
+ p.b-content__paragraph
+ a.b-content__paragraph__link(href="#/forgotPassword") Forgot your password?
+ p.b-content__paragraph
+ | Don’t have an account?
+ a.b-content__paragraph__link(title='Register' href="#/register") Register here
+
+ article#register.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Register
+ p.b-content-header__text
+ | Create an account below
+ .b-page__line
+ .b-content
+ form.e-form(action='signup', method='POST', autocomplete="off")
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='firstName') First Name
+ input.e-form__field#firstName(type="text", name="firstName", data-validation='len(2, 60);', placeholder="Enter your First Name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label(for='lastName') Last name
+ input.e-form__field#lastName(type="text", name="lastName", data-validation='len(2, 60);', placeholder="Enter your Last name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", data-validation='len(5,13);isAlpha;uniqeUsrName;', placeholder="Enter your Username...")
+ .error
+ span(data-validation-msg='uniqeUsrName')
+ | This username is already used.
+ span(data-validation-msg='len')
+ | This field must have at least 5 and cannot be longer than 13 characters.
+ span(data-validation-msg='isAlpha')
+ | Nickname can contain only numbers, periods and Latin letters.
+ .b-form-row__col
+ label.e-form__label(for='email') Email
+ input.e-form__field#email(type="email", name="email", data-validation='isEmail;', placeholder="Enter your Email...")
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", data-validation='len(8,20);', placeholder="Enter your Password...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ .b-form-row__col
+ label.e-form__label(for='confirmpass') Confirm Password
+ input.e-form__field#confirmpass(type="password", name="confirmpass", data-validation='isMatch(password)', placeholder="Confirm your Password...")
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='phone') Phone Number
+ input.e-form__field#phone(type="text", name="phone", data-validation='len(10,15);isNumber;', placeholder="Enter your Phone Number...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 10 and cannot be longer than 15 characters.
+ span(data-validation-msg='isNumber')
+ | This is not a valid phone number.
+ .b-form-row__col
+ label.e-form__label(for='company') Company
+ input.e-form__field#company(type="text", name="company", data-validation='len(2, 60);', placeholder="Enter your Company...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='industry') Industry
+ input.e-form__field#industry(type="text", name="industry", data-validation='len(2, 60);', placeholder="Enter your industry...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label Country
+ .e-select
+ label.e-select__label(for='country')
+ select.e-select__box#country(placeholder='Country', name='country', data-validation='len(1);')
+ option(value='') Country
+ each country in countries
+ option(value=country) #{country}
+ .error
+ span(data-validation-msg='len')
+ | This field cannot be blank.
+
+ button.e-form__button.e-form__button--offset(type="submit") Create Account
+
+ article#forgotPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-forgot-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | FORGOT YOUR PASSWORD?
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(title='Login' href='#/login')
+ .b-modal-window__main-block__body
+ .msg.hidden
+ p If you have entered a valid email, please check it for further instructions.
+ form.e-form(method='POST')
p
- | Yes. Please see the description of our
- a(href='#') University Collaboration Program
- | .
- li
- h2.blueHeader 10) Can I translate the Microsoft Data Gathering mobile client into my language?
+ | Please enter your username and email to reset your password.
p
- | Yes. Please get in touch with us at
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | and work with us to provide a translation of
- | the software in your language. We will then push this out
- | and make the language version available to all users.
- article#login.hidden
- section
- div
- h1 LOGIN
- form
- label.col-left
- input(type='text', name='username', placeholder='Enter your username...')
- label.col-right
- input(type='password', name='password', placeholder='Enter your password...')
- .error
- a(href='#/forgotPassword') Forgot your password?
- button(type='submit') Login
- article#register.hidden
- section
- div
- h1 REGISTER
- form(action='signup', met='post', autocomplete="off")
- label.col-left
- input(type='text', placeholder='First name', name='firstName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- input(type='text', placeholder='Last name', name='lastName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 characters.
- label.col-left
- input(type='text', placeholder='Username', name='username', data-validation='len(5,13);isAlpha;uniqeUsrName;')
- .error
- span(data-validation-msg='uniqeUsrName')
- | This username is already used.
- span(data-validation-msg='len')
- | This field must have at least 5 and cannot be longer than 13 characters.
- span(data-validation-msg='isAlpha')
- | Nickname can contain only numbers, periods and Latin letters.
- label.col-right
- input(type='text', placeholder='Email', name='email', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- label.col-left
- input(type='password', placeholder='Password', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm password', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- label.col-left
- input(type='text', placeholder='Phone number', name='phone', data-validation='len(10,15);isNumber;')
- .error
- span(data-validation-msg='len')
- | This field must have at least 10 and cannot be longer than 15 characters.
- span(data-validation-msg='isNumber')
- | This is not a valid phone number.
- label.col-right
- input(type='text', placeholder='Company', name='company', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-left
- input(type='text', placeholder='Industry', name='industry', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- select(placeholder='Country', name='country', data-validation='len(1);')
- option(value='') Country
- each country in countries
- option(value=country) #{country}
- .error
- span(data-validation-msg='len')
- | This field cannot be blank.
- button(type='submit') Create Account
- article#forgotPassword.hidden
- section
- div
- h1 FORGOT YOUR PASSWORD?
- .msg.hidden
- p If you have entered a valid email, please check it for further instructions.
- form
- p
- | Please enter your username and email to reset your password.
- p
- | If you forgot your username, please enter your email
- | only and we will send all usernames related to this email.
- label.col-left
- input(type='text', name='username', placeholder='Username...')
- label.col-right
- input(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- button(type='submit') Proceed
- article#resetPassword.hidden
- section
- div
- h1 RESET PASSWORD
- form
- label.col-left
- input(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- button(type='submit') Apply
- article#resetPasswordError.hidden
- section
- div
- h1 RESET PASSWORD
- .msg
- p Password reset token is invalid or has expired.
-
- .modal.success-registration.hidden
- .overlay
- .window
- .window-body
- div You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
- input(type="button" value="OK")
+ | If you forgot your username, please enter your email
+ | only and we will send all usernames related to this email.
+ label.e-form__label(for='username_forgot-pass')
+ Username
+ input.e-form__field#username_forgot-pass(type='text', name='username', placeholder='Username...' label='Username')
+ label.e-form__label(for='email_forgot-pass')
+ Password
+ input.e-form__field#email_forgot-pass(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ button.e-form__button(type='submit') Proceed
+ article#resetPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(title='Login' href='#/login')
+ .b-modal-window__main-block__body
+ form.e-form(method='POST', autocomplete="off")
+ label.e-form__label(for='password_reset-pass')
+ input.e-form__field#password_reset-pass(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ label.e-form__label(for='confirmpass_reset-pass')
+ input.e-form__field#confirmpass_reset-pass(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ button.e-form__button(type='submit') Apply
+ article#resetPasswordError.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass-error
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(title='Reset password' href='#/resetPassword')
+ .b-modal-window__main-block__body
+ .modal.success-registration.hidden
+ .msg
+ p Password reset token is invalid or has expired.
+
+ article#successRegistration.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-success-registration
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | Successfully Registration
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(title='Register' href="#/register")
+ .b-modal-window__main-block__body
+ .modal.success-registration
+ .msg
+ p You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
+ button.b-success-registration__btn(type="button")
+ a(href='#/login')
+ span.fa.fa-check.b-success-registration__btn--icon
+ span() OK
+ .b-page__footer
+ ul.b-page__footer__box
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/policy/privacy-policy/')
+ | Privacy Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/cookie/cookie-policy/')
+ | Cookie Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/service-terms/service-terms/')
+ | Service Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='https://github.com/nokiadatagathering')
+ | Code
diff --git a/app/views/getStarted/jade/ru/error404.jade b/app/views/getStarted/jade/ru/error404.jade
index 0f2e74a..6d80ba9 100644
--- a/app/views/getStarted/jade/ru/error404.jade
+++ b/app/views/getStarted/jade/ru/error404.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -6,7 +6,7 @@ html
meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
meta(name='viewport', content='initial-scale=1.0')
- link(rel="stylesheet" type="text/css" href="/resources/stylesheets/404.css")
+ link(rel="stylesheet" type="text/css" href="/styles/404.css")
body
div(class="content")
diff --git a/app/views/getStarted/jade/ru/home.jade b/app/views/getStarted/jade/ru/home.jade
index a17a108..fc3782c 100644
--- a/app/views/getStarted/jade/ru/home.jade
+++ b/app/views/getStarted/jade/ru/home.jade
@@ -1,695 +1,904 @@
-!!! 5
+doctype html
html
head
title= title
- include ../../../../../web/index.js
- include ../../../../../web/resources/stylesheets/style.css
+ script(src='home.js')
+ link(rel='stylesheet' href='styles/home.css')
+ link(rel='stylesheet' href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' )
meta(charset='utf-8')
body
- header#mainMenu
- nav
- a(href='#')
- img(src='../resources/icons/lolgo-30px.png')
- h1
- | MICROSOFT
- b DATA GATHERING
- ul
- li
- a(href='#/getStarted') Старт
- li
- a(href='#/useCases') Прецеденты
- li
- a(href='#/openSource') Open Source
- li
- a(href='#/support') Поддержка
- li
- a.language-select #{language}
- ul.dropdown
- each lang in languages
- li(value=lang.value) #{lang.text}
- a(href='#/login') Логин
- | /
- a(href='#/register') Регистрация
- article#home.hidden
- section.headDescrip
- div
- | Microsoft Data Gathering offers organizations a fast,
- br
- | accurate, cost effective and
- br
- | user-friendly way to collect data using mobile devices.
- section.contentDescrip
- div
- .col-left
- p
- | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central location,
- | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the ability
- | to make crucial decisions.
- p
- | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
- | the field. The more time-critical the need for data and the more remote the location, the more organizations
- | can benefit from a mobile phone based solution.
- p
- | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data, including
- | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
- p
- | Because mobile devices can transmit data even from remote locations, the information collected can be available
- | for analysis in near-real time.
- .col-right
- img(src='../resources/images/collage.jpg')
- section#instruction
- div
- h2 HOW IT WORKS
- ul
- .col-left
- li
- a(href='#/getStarted#step1')
- img(src='../resources/images/howitworks_1.png')
- span 1
- span
+ .g-page-wrapper
+ .b-page__head-line
+ .b-line-bit.b-line-bit--red
+ .b-line-bit.b-line-bit--green
+ .b-line-bit.b-line-bit--blue
+ .b-line-bit.b-line-bit--yellow
+ div
+ header.b-page__header
+ .b-head-logo
+ a.b-logo__title(href='#/home')
+ img.b-logo__img(src='assets/images/logo-30px.png'
+ alt='Microsoft Data Gathering Icon')
+ span Microsoft Data Gathering
+ .b-menu
+ nav.b-menu-nav
+ a.b-menu-nav__link(href='#/getStarted')
+ | Get Started
+ a.b-menu-nav__link(href='#/useCases')
+ | Use Cases
+ a.b-menu-nav__link(href='#/openSource')
+ | Open Source
+ a.b-menu-nav__link(href='#/support')
+ | Support
+ .b-account-menu
+ a.language-select.b-account-menu__locale(href='#') #{language}
+ ul.dropdown
+ each lang in languages
+ li: a.b-account-menu__language(href='#' value=lang.value title=lang.title lang=lang.value)
+ span.hide-text #{lang.title}
+ span.screnreder-ignore(role='presentation' aria-hidden='true') #{lang.text}
+ .b-account-menu__user
+ a(href='#/login') Login
+ | /
+ a(href='#/register') Register
+ article#home.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Microsoft Data Gathering
+ p.b-content-header__text
+ | Offers organizations a fast, accurate, cost effective and
+ br
+ | user-friendly way to collect data using mobile devices.
+ .b-page__line
+ .b-content.b-content--line.b-content--main
+ .b-content--main__article
+ p.b-content--main__article__indent
+ | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central
+ | location,
+ | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the
+ | ability
+ | to make crucial decisions.
+ p.b-content--main__article__indent
+ | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
+ | the field. The more time-critical the need for data and the more remote the location, the more organizations
+ | can benefit from a mobile phone based solution.
+ p.b-content--main__article__indent
+ | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data,
+ | including
+ | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
+ p.b-content--main__article__indent
+ | Because mobile devices can transmit data even from remote locations, the information collected can be available
+ | for analysis in near-real time.
+ .b-content-main__image
+ img(src='../assets/images/collage.jpg'
+ alt='Pictures of MDG in use')
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | How It Works
+ .b-content__col-left
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_1.png'
+ alt='First step of how MDG works. Create a questionnaire')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 1
+ span.b-content__col-left__item__caption__text--blue
| Create a questionnaire on
br
| the survey editor
- li
- a(href='#/getStarted#step2')
- img(src='../resources/images/howitworks_2.png')
- span 2
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_2.png'
+ alt='Second step of how MDG works. Publish the data for data collectors.')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 2
+ span.b-content__col-left__item__caption__text--blue
| Publish the data for data
br
| collectors
- li
- a(href='#/getStarted#step3')
- img(src='../resources/images/howitworks_3.png')
- span 3
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_3.png'
+ alt='Third step of how MDG works. Fill in the questionnaire on the device')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 3
+ span.b-content__col-left__item__caption__text--blue
| Fill in the questionnaire on
br
- | your mobile device
- .col-right
- li
- a(href='#/getStarted#step4')
- img(src='../resources/images/howitworks_4.png')
- span 4
- span
+ | your mobile device
+ .b-content__col-right
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_4.png'
+ alt='Fourth step of how MDG works. Send your data to the server')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 4
+ span.b-content__col-right__item__caption__text--blue
| Send your data to the
br
- | server over the mobile
- br
- | network
- li
- a(href='#/getStarted#step5')
- img(src='../resources/images/howitworks_5.png')
- span 5
- span
+ | server over the mobile network
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_5.png'
+ alt='Fifth step of how MDG works. View, map or export your data')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 5
+ span.b-content__col-right__item__caption__text--blue
| View, map, and export
br
| your data
- section.videoBlock
- div
- p
- i
- | This video is about the use of Microsoft Data Gathering to
- b.bold combat dengue fever
- | in Amazonas State, Brazil.
- iframe.video(src='//www.youtube.com/embed/kP1v9Snz6HA')
- section#benefits
- div
- h2 BENEFITS
- ul
- .col-left
- li
- img(src='../resources/icons/speed.png')
- h3 Speed
- | Compared to using paper forms, mobile solutions cut down delays
- | caused by transportation and manual digitalization of collected
- | data.
- li
- img(src='../resources/icons/cost-efficiency.png')
- h3 Cost efficiency
- | Transportation and logistics costs are reduced, as are the needs
- | for manual data entry and cleaning. There is also a cost of
- | inaction saved with the ability to make critical decisions and
- | react rapidly.
- .col-right
- li
- img(src='../resources/icons/accuracy.png')
- h3 Accuracy
- | Data entry occurs at the point of collection, without needing to
- | transcribe hand-written information. This lowers the frequency of
- | transcription and data entry errors.
- li
- img(src='../resources/icons/usability.png')
- h3 Usability
- | Mobile phones are small, easy to carry, have battery longevity,
- | and enable the capture of rich data such as GPS location tags
- | and images.
- section#awards
- div
- .col-left
- h2 AWARDS
- ul
- li
- b 2012
- | : Microsoft Data Gathering was a Featured Project of the
- br
- | Month for July in the Developer Community Blog.
- li
- b 2011
- | : Microsoft Data Gathering won the Justmeans Social
- br
- | Innovation Award in the category "Philanthropy: Most Strategic
- br
- | Use of Philanthropic Funds".
- li
- | The Justmeans international awards program is considered one of
- | the top honours in the field of sustainability, giving recognition to
- | companies implementing groundbreaking strategies and programs
- | that drive social and environmental innovation.
- .col-right
- h2 ACKNOWLEDGEMENTS
- p
- | We would like to extend our thanks to these organizations, which
- br
- | have been instrumental in getting Microsoft Data Gathering to
- br
- | where it is today.
- ul.markedList
- li
- a(href='http://www.indt.org/?lang=en') Nokia Technology Institute
- li
- a(href='http://www.uonbi.ac.ke/') University of Nairobi
- li
- a(href='http://cmri.shu.edu/') The Center for Mobile Research and Innovation
- li
- a(href='http://www.ayalafoundation.org/') The Ayala Foundation
- ul#footer
- li
- a(href='http://www.nokia.com/global/privacy/privacy/policy/privacy-policy/') Privacy Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/cookie/cookie-policy/') Cookie Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/service-terms/nokia-service-terms/') Service Policy
- li
- a(href="https://github.com/nokiadatagathering") Code
- article#getStarted.hidden
- section
- div
- h1 GET STARTED
- p
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title#benefits
+ | Benefits
+ .b-content__col-left
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits1.png'
+ alt='Compared to using paper forms, mobile solutions cut down delays')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Speed
+ p.b-content__col-left__item__caption__text
+ | Compared to using paper forms, mobile solutions cut down delays
+ | caused by transportation and manual digitalization of collected
+ | data.
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits2.png'
+ alt='Transportation and logistics costs are reduced')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Cost efficiency
+ p.b-content__col-left__item__caption__text
+ | Transportation and logistics costs are reduced, as are the needs
+ | for manual data entry and cleaning. There is also a cost of
+ | inaction saved with the ability to make critical decisions and
+ | react rapidly.
+ | data.
+ .b-content__col-right
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits3.png'
+ alt='Data entry occurs at the point of collection')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Accuracy
+ p.b-content__col-right__item__caption__text
+ | Data entry occurs at the point of collection, without needing to
+ | transcribe hand-written information. This lowers the frequency of
+ | transcription and data entry errors.
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits4.png'
+ alt='Mobile devices are easy to carry')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Usability
+ p.b-content__col-right__item__caption__text
+ | Mobile phones are small, easy to carry, have battery longevity,
+ | and enable the capture of rich data such as GPS location tags
+ | and images.
+ .b-page__line
+ .b-content.b-content-line
+ .b-content__col-left
+ h2.b-content-title Awards
+ p.b-content__paragraph
+ b 2012
+ | Microsoft Data Gathering was a Featured Project of the
+ br
+ | Month for July in the Developer Community Blog.
+ p.b-content__paragraph
+ b 2011
+ | Microsoft Data Gathering won the Justmeans Social
+ br
+ | Innovation Award in the category "Philanthropy: Most Strategic
+ br
+ | Use of Philanthropic Funds".
+ p.b-content__paragraph
+ | The Justmeans international awards program is considered one of
+ br
+ | the top honours in the field of sustainability, giving recognition to
+ br
+ | companies implementing groundbreaking strategies and programs
+ br
+ | that drive social and environmental innovation.
+ br
+ .b-content__col-right
+ .b-content__col-right__item
+ h2.b-content-title Acknowledgements
+ p.b-content__paragraph
+ | We would like to extend our thanks to these organizations, which
+ br
+ | have been instrumental in getting Microsoft Data Gathering to
+ br
+ | where it is today.
+ .b-content--acknowledge-list
+ a.b-content--acknowledge-list__link(href='http://www.indt.org/?lang=en', target='_blank') Nokia Technology Institute
+ a.b-content--acknowledge-list__link(href='http://www.uonbi.ac.ke/', target='_blank') University of Nairobi
+ a.b-content--acknowledge-list__link(href='http://cmri.shu.edu/', target='_blank') The Center for Mobile Research and Innovation
+ a.b-content--acknowledge-list__link(href='http://www.ayalafoundation.org/', target='_blank') The Ayala Foundation
+
+ article#getStarted.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Get Started
+ p.b-content-header__text
| If you have your own server and wish to migrate your data
- | to this release of MDG the tool to do that is available
- a(href="http://github.com/nokiadatagathering/ndg-migration") here
- ul
- li(data-step='step1')
- img(src='../resources/images/getstarted_step1.png')
- h2 Step 1: Register to the Microsoft Data Gathering Playground Server
- p
- | The first thing you need to do is to fill in the user registration form and create
- | an account on the Microsoft Data Gathering playground server. You can do this by
- | clicking
- a(href='#/register') register on the homepage
- | .
- li(data-step='step2')
- img(src='../resources/images/getstarted_step2.png')
- h2 Step 2: Create a survey
- p
- | After you've confirmed your account and logged in to the server, you can start
- | writing your own questionnaire using the survey editor. You can choose different
- | question types, set default answers or limits and even use skip logic to write your
- | questionnaire.
- li(data-step='step3')
- img(src='../resources/images/getstarted_step3.png')
- h2 Step 3: Download the Microsoft Data Gathering mobile application
- p
- | Download and install one of the Microsoft Data Gathering mobile applications.
- p
- i
- | Please note that until the branding change is completed please use the server https://nokiadatagathering.net in the app settings.
- | Apps marked as 'New!' have been updated to use the https://microsoftdatagathering.net server and those marked as 'To be updated' still
- | default to https://nokiadatagathering.net
- p
- | Download the
- a(href="http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848") Windows Phone app
- |.
- img(src="../resources/icons/1-new.png")
- em New!
- br
- | Download the
- a(href="https://nokiadatagathering.net/ndg-ota/client/ndg.jad") Java app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- br
- | Download the
- a(href="http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42") Windows Tablet app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- li(data-step='step4')
- img(src='../resources/images/getstarted_step4.png')
- h2 Step 4: Add users and make your survey available to them
- p
- | You can publish your questionnaire to your field data collectors by adding them to
- | your main account in the Users section, organizing them into groups and giving
- | them different access permissions. You can make your questionnaire available to
- | as many users as you like. You can also send SMS notifications to your user groups.
- li(data-step='step5')
- img(src='../resources/images/getstarted_step5.png')
- h2 Step 5: Fill in the survey and send your results on your mobile device
- p
- | Open the Microsoft Data Gathering app you downloaded onto your mobile device
- | in Step 3, and login with your user credentials. The surveys that were made available
- | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
- | result by entering the requested data in the blank fields.
- p
- | You can send your results back to the server immediately, or save them on the
- | phone to send later.
- li(data-step='step6')
- img(src='../resources/images/getstarted_step6.png')
- h2 Step 6: View and export your results
- p
- | Go back to your Playground Server account and take a look at all the results you've received.
- | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
- | your data in XLS or KML formats for further data analysis.
- article#useCases.hidden
- section
- div
- h1 USE CASES
- ul
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Uganda - FAO
- img(src='../resources/images/usecase_1.jpg')
- .col-left
- p
- | As part of a regional initiative to reduce risk
- | of drought in Eastern Africa with Early Warning Systems,
- | the Food and Agriculture Organization of the United Nations
- | (FAO) in Uganda is collecting geo-spatial and qualitative
- | data about community animal health workers and providers
- | of veterinary services and shops, among the rural pastoral
- | communities of the Karamoja region.
- p
- | The move from paper-based questionnaires to Microsoft Data Gathering
- | has allowed more efficient operations by reducing the time to produce
- | Drought Bulletins by 50%.
- p
- | Furthermore, the project has enhanced participation of the community
- | and the local government, and is supporting the capacity of the
- | Department of Meteorology in issuing monthly weather updates
- | for Karamoja.
- p
- | FAO's efforts were recognized by the World Bank in recent study
- | on mobile applications for the agriculture and forestry sector,
- | published in December 2013.
- .col-right
- blockquote
+ br
+ | to this release of MDG the tool to do that is available
+ a.b-content-header__text__link(href='http://github.com/nokiadatagathering/ndg-migration', target='_blank') here
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step1.png'
+ alt='Register to the Microsoft Data Gathering Playground Server')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 1
+ | Register to the Microsoft Data Gathering Playground Server
+ p.b-step__right__paragraph
+ | The first thing you need to do is to fill in the user registration form and create
+ br
+ | an account on the Microsoft Data Gathering playground server. You can do this by
+ br
+ | clicking
+ a.b-step__right__paragraph__link(href='#/register') register on the homepage
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step2.png'
+ alt='Create a survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 2
+ | Create a survey
+ p.b-step__right__paragraph
+ | After you've confirmed your account and logged in to the server, you can start
+ br
+ | writing your own questionnaire using the survey editor. You can choose different
+ br
+ | question types, set default answers or limits and even use skip logic to write your
+ br
+ | questionnaire.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step3.png'
+ alt='Download the MDG mobile application')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 3
+ | Download the Microsoft Data Gathering mobile application
+ p.b-step__right__paragraph
+ | Download and install one of the Microsoft Data Gathering mobile applications.
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848', target='_blank')
+ | Windows Phone app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='https://nokiadatagathering.net/ndg-ota/client/ndg.jad', target='_blank')
+ | Java app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42', target='_blank')
+ | Windows Tablet app
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step4.png'
+ alt='Add users')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 4
+ | Add users and make your survey available to them
+ p.b-step__right__paragraph
+ | You can publish your questionnaire to your field data collectors by adding them to
+ br
+ | your main account in the Users section, organizing them into groups and giving
+ br
+ | them different access permissions. You can make your questionnaire available to
+ br
+ | as many users as you like. You can also send SMS notifications to your user groups.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step5.png'
+ alt='Fill in the survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 5
+ | Fill in the survey and send your results on your mobile device
+ p.b-step__right__paragraph
+ | Open the Microsoft Data Gathering app you downloaded onto your mobile device
+ br
+ | in Step 3, and login with your user credentials. The surveys that were made available
+ br
+ | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
+ br
+ | result by entering the requested data in the blank fields.
+ p.b-step__right__paragraph
+ | You can send your results back to the server immediately, or save them on the
+ | phone to send later.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step6.png'
+ alt='View and Export')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 6
+ | View and export your results
+ p.b-step__right__paragraph
+ | Go back to your Playground Server account and take a look at all the results you've received.
+ br
+ | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
+ br
+ | your data in XLS or KML formats for further data analysis.
+
+
+ article#useCases.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Use Cases
+ p.b-content-header__text
+ | A Real Solution to Real Problems
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities
+ br
+ | in Uganda - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | As part of a regional initiative to reduce risk
+ | of drought in Eastern Africa with Early Warning Systems,
+ | the Food and Agriculture Organization of the United Nations
+ | (FAO) in Uganda is collecting geo-spatial and qualitative
+ | data about community animal health workers and providers
+ | of veterinary services and shops, among the rural pastoral
+ | communities of the Karamoja region.
+ p.b-content__paragraph
+ | The move from paper-based questionnaires to Microsoft Data Gathering
+ | has allowed more efficient operations by reducing the time to produce
+ | Drought Bulletins by 50%.
+ p.b-content__paragraph
+ | Furthermore, the project has enhanced participation of the community
+ | and the local government, and is supporting the capacity of the
+ | Department of Meteorology in issuing monthly weather updates
+ | for Karamoja.
+ p.b-content__paragraph
+ | FAO's efforts were recognized by the World Bank in recent study
+ | on mobile applications for the agriculture and forestry sector,
+ | published in December 2013.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_1.jpg'
+ alt='FAO in Eastern Africa')
+ blockquote.b-content__col-right__item__photo-caption
| "We strive to improve the humanitarian situation by increasing
| the coping capacities of populations vulnerable to recurrent
| drought hazards and their effects through the provision of
| multi-sectorial assistance in the Horn of Africa.
| Microsoft Data Gathering is one of the most convenient
| and cost-effective tools for collecting data from remote areas."
- p
- b Bernard 0. Mwesigwa
- | ,
- | Programme Officer, M&E/Data Management, FAO Uganda
- li
- h2.nptlHeader Giving children the right to an identity in Kenya - Plan
- img(src='../resources/images/usecase_2.jpg')
- .col-left
- p
- | An official identity is the foundation for child rights,
- | child protection and later child's ticket to services such as
- | secondary schooling. Official identity is obtained by parents
- | through birth registration.
- p
- | Today only five out of ten children in Kenya are registered.
- p
- | Poor accessibility to offices and officers, slow processing
- | of both birth notifications and certificates, and costs involved
- | together with a lack of incentives for parents to register their
- | children contribute to the current situation.
- p
- | Plan together with the Ministry of Foreign Affairs in Finland is
- | running a universal birth registration project in the Kwale district
- | using Microsoft Data Gathering that has resulted in dramatically increased
- | registration rates (from 30 to 68%).
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Bernard O. Mwesigwa,
+ br
+ | Programme Officer, M&E/Data Management, FAO Uganda
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Giving children the right to an identity in Kenya - Plan
+ .b-content__col-left
+ p.b-content__paragraph
+ | An official identity is the foundation for child rights,
+ | child protection and later child's ticket to services such as
+ | secondary schooling. Official identity is obtained by parents
+ | through birth registration.
+ p.b-content__paragraph
+ | Today only five out of ten children in Kenya are registered.
+ p.b-content__paragraph
+ | Poor accessibility to offices and officers, slow processing
+ | of both birth notifications and certificates, and costs involved
+ | together with a lack of incentives for parents to register their
+ | children contribute to the current situation.
+ p.b-content__paragraph
+ | Plan together with the Ministry of Foreign Affairs in Finland is
+ | running a universal birth registration project in the Kwale district
+ | using Microsoft Data Gathering that has resulted in dramatically increased
+ | registration rates (from 30 to 68%).
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_2.jpg'
+ alt='Plan in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "The use of ICTs including mobile technology has great potential to support
| communities and governments in civil registration. Right to citizenship and
| identity are fundamental prerequisites in development."
- p
- b Mika Välitalo
- | , Manager - ICT for Development, Plan Finland
- li
- h2.nptlHeader
- | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
- img(src='../resources/images/usecase_3.jpg')
- .col-left
- p
- | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
- | Microsoft Data Gathering to help fight the spread of dengue fever
- | and increase the effectiveness of treatment.
- p
- | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
- | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
- b.bold 93% cut
- | in the number of cases.
- p
- | Microsoft Data Gathering helped the health workers to do their jobs, by making their
- | reports both faster and more accurate.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Mika Välitalo,
+ br
+ | Manager - ICT for Development, Plan Finland
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
+ .b-content__col-left
+ p.b-content__paragraph
+ | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
+ | Microsoft Data Gathering to help fight the spread of dengue fever
+ | and increase the effectiveness of treatment.
+ p.b-content__paragraph
+ | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
+ | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
+ bold 93% cut
+ | in the number of cases.
+ p.b-content__paragraph
+ | Microsoft Data Gathering helped the health workers to do their jobs, by making their
+ | reports both faster and more accurate.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_3.jpg'
+ alt='Malaria in Amazonas')
+ blockquote.b-content__col-right__item__photo-caption
| "Microsofts technology will help us to more rapidly identify and investigate the results
| and symptoms of the surveyed population. The transmission of data immediately after
| the interviews improves agility, increases public safety and avoids manual filling-in of forms."
- p
- b Agnaldo Costa
- | , State Health Secretary of Amazonas State
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Kenya - FAO
- img(src='../resources/images/usecase_4.jpg')
- .col-left
- p
- | Accurate, timely and geo-tagged data on water points and sources is
- | an important basis to reduce the impact of drought among vulnerable communities
- | living in recurrent drought Food Agriculture Organization (FAO) is working along
- | with their NGO partners in Greater Horn of Africa to alleviate the risk
- | to drought among pastoralist communities.
- p
- | Microsoft Data Gathering is bringing mobile technology to water point surveys,
- | reducing the amount of effort, time and cost to collect the information and
- | enabling proper and timely preparedness activities.
- p
- | To date information from over 500 points has been collected - and more into come.
- | The collected information is also published in Disaster Risk Reduction website
- | for public good.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Agnaldo Costa,
+ br
+ | State Health Secretary of Amazonas State
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities in Kenya - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | Accurate, timely and geo-tagged data on water points and sources is
+ | an important basis to reduce the impact of drought among vulnerable communities
+ | living in recurrent drought Food Agriculture Organization (FAO) is working along
+ | with their NGO partners in Greater Horn of Africa to alleviate the risk
+ | to drought among pastoralist communities.
+ p.b-content__paragraph
+ | Microsoft Data Gathering is bringing mobile technology to water point surveys,
+ | reducing the amount of effort, time and cost to collect the information and
+ | enabling proper and timely preparedness activities.
+ p.b-content__paragraph
+ | To date information from over 500 points has been collected - and more into come.
+ | The collected information is also published in Disaster Risk Reduction website
+ | for public good.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_4.jpg'
+ alt='Vulnerable communities in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "A huge burden is put on organizations, especially small scale NG05,
| to collect, capture and process data timely for response and planning with
| no supported technology tools. Microsoft Data Gathering provides a simple and
| effective field solution with a centralized data administration system."
- p
- b Phillip Fong
- | , Regional Data and Information Coordinator, FAO
- article#openSource.hidden
- section
- div
- h1 OPEN SOURCE
- h2.nptlHeader Microsoft Data Gathering is an Open Source solution
- .col-left
- p
- | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
- | making the source code available to anyone for download, deployment and development.
- | There are no licensing costs for using the software, the code base is public,
- | and development occurs in a collaborative and community-driven manner.
- p
- | The open source model also empowers universities and local developers to participate
- | in creating tools and services on top of the core solution, helping to build local capacity.
- | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
- | technology adoption.
- p
- | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
- | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
- | of covered software.
- .col-right
- p
- | You can read the BSD license terms
- a(href='http://opensource.org/licenses/BSD-2-Clause') here
- | .
- p
- | The Microsoft Data Gathering Playground Server and the Java client
- | are both licensed under the GNU Lesser General Public License,
- a(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html') LGPL
- | which allows developers and companies to use and integrate the software into
- | their own (even proprietary) software without being required to release the source
- | code of their own software-parts.
- p
- | Microsoft Data Gathering complies with Open Rosa standards for data collection.
- p
- | The Microsoft Data Gathering source code and documentation repository is at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- section
- div
- h1 GET INVOLVED
- p
- | Here's how you can be a part of the Microsoft Data Gathering
- | developer and user community:
- ul.markedList
- li
- a(href='https://github.com/nokiadatagathering') Get the source code
- | and develop
- | Microsoft Data Gathering
- li
- | Become a Microsoft Data Gathering service partner
- li
- | Help us plan future software releases
- li
- | Translate the Microsoft Data Gathering application into your language
- article#support.hidden
- section
- div
- h1 SUPPORT
- p How to get support:
- ul.markedList
- li
- a(href='/docs') Read the Microsoft Data Gathering user guide and documentation
- li
- | Access the
- a(href='https://github.com/nokiadatagathering') Microsoft Data Gathering code repository
- li
- | Send an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- h1 FREQUENTLY ASKED QUESTIONS
- ul.questionList
- .col-left
- li
- h2.blueHeader 1) What are the benefits of mobile data collection?
- p
+ p.b-content__col-right__item__photo-location
+ | Phillip Fong,
+ br
+ | Regional Data and Information Coordinator, FAO
+ article#openSource.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Open Source
+ p.b-content-header__text
+ | Microsoft Data Gathering is an Open Source solution
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ p.b-content__paragraph
+ | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
+ | making the source code available to anyone for download, deployment and development.
+ | There are no licensing costs for using the software, the code base is public,
+ | and development occurs in a collaborative and community-driven manner.
+ p.b-content__paragraph
+ | The open source model also empowers universities and local developers to participate
+ | in creating tools and services on top of the core solution, helping to build local capacity.
+ | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
+ | technology adoption.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
+ | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
+ | of covered software.
+ .b-content__col-right
+ .b-content__col-right__item
+ p.b-content__paragraph
+ | You can read the BSD license terms
+ a.b-content__paragraph__link(href='http://opensource.org/licenses/BSD-2-Clause', target='_blank') here
+ | .
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Playground Server and the Java client
+ | are both licensed under the GNU Lesser General Public License,
+ a.b-content__paragraph__link(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html', target='_blank') LGPL
+ | which allows developers and companies to use and integrate the software into
+ | their own (even proprietary) software without being required to release the source
+ | code of their own software-parts.
+ p.b-content__paragraph
+ | Microsoft Data Gathering complies with Open Rosa standards for data collection.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering source code and documentation repository is at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') https://github.com/nokiadatagathering
+ | .
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | Get Involved
+ p.b-content__paragraph
+ | Here's how you can be a part of the Microsoft Data Gathering
+ | developer and user community:
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') Get the source code
+ | and develop
+ | Microsoft Data Gathering
+ p.b-content__paragraph.b-content__paragraph--item
+ | Become a Microsoft Data Gathering service partner
+ p.b-content__paragraph.b-content__paragraph--item
+ | Help us plan future software releases
+ p.b-content__paragraph.b-content__paragraph--item
+ | Translate the Microsoft Data Gathering application into your language
+
+ article#support.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Support
+ p.b-content-header__text
+ | Microsoft Data Gathering support page
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | How to get support
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='/docs')
+ | Read the Microsoft Data Gathering user guide and
+ | documentation
+ p.b-content__paragraph.b-content__paragraph--item
+ | Access the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering',, target='_blank')
+ | Microsoft Data Gathering code repository
+ p.b-content__paragraph.b-content__paragraph--item
+ | Send an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com')
+ | mdgspprt@microsoft.com
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Frequently Asked Questions
+ .b-content__col-left
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 1
+ | What are the benefits of mobile data collection?
+ p.b-content__paragraph
| The key benefits of mobile data collection are speed,
- | accuracy, cost efficiency and usability. Please see the
- a(href='#/home') benefits section on the homepage
+ | accuracy, cost efficiency and usability. Please see the
+ a.b-content__paragraph__link(href='#') benefits section on the homepage
| for more on benefits.
- li
- h2.blueHeader 2) How is Microsoft Data Gathering used in the field?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 2
+ | How is Microsoft Data Gathering used in the field?
+ p.b-content__paragraph
| When time is of the essence, rapidly available, accurate information
| is critical for sound decision-making in any kind of organization.
- p
+ p.b-content__paragraph
| For example: In Brazil, the Amazonas State Health Department and
| the Health Vigilance Foundation have used Microsoft Data Gathering
| to monitor and control the spread of dengue fever.
- p
+ p.b-content__paragraph
| In East Africa, the Food and Agriculture Organization has conducted
| water and livestock surveys to reduce the risk of vulnerable
| communities to drought.
- p
+ p.b-content__paragraph
| In Kenya, Plan Finland has worked with the Kenyan government
| to register births using Microsoft Data Gathering.
- p
- | For more on use cases, please see the
- a(href='#') use cases page
- | .
- li
- h2.blueHeader 3) Does it cost anything to use Microsoft Data Gathering?
- p
- | Nokia Data Gathering is an open source solution so there are no licensing fees
- | or charges for using the software. For more on open source, please see the
- a(href='#/openSource') open source page
- | .
- p
+ p.b-content__paragraph
+ | For more on use cases, please see the
+ a.b-content__paragraph__link(href='#/useCases') use cases page
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 3
+ | Does it cost anything to use Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Microsoft Data Gathering is an open source solution so there are no licensing fees
+ | or charges for using the software. For more on open source, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ p.b-content__paragraph
| Of course, there are costs associated with the hardware
| (mobile phones, servers, SIM cards) necessary for using
- | Nokia Data Gathering, as well as the implementation of a data collection project.
+ | Microsoft Data Gathering, as well as the implementation of a data collection project.
| These costs must be scoped and borne by the organization using the solution.
- li
- h2.blueHeader 4) What are the license terms for Microsoft Data Gathering?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 4
+ | What are the license terms for Microsoft Data Gathering?
+ p.b-content__paragraph
| The Microsoft Data Gathering Windows Phone client is licensed under the open source
| Berkeley Software Distribution (BSD) License family. The Microsoft
| Data Gathering Playground Server and the Java client are both licensed under
| the GNU Lesser General Public License (ILGPL).Microsoft Data Gathering complies with
| the standards of the OpenROSA Consortium on mobile data collection.
- p
- | For more on our licenses, please see the
- a(href='#/openSource') open source page
- | .
- .col-right
- li
- h2.blueHeader 5) Which devices are compatible with Microsoft Data Gathering?
- p
+ p.b-content__paragraph
+ | For more on our licenses, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ .b-content__col-right
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 5
+ | Which devices are compatible with Microsoft Data Gathering?
+ p.b-content__paragraph
| The Windows Phone version of the Microsft Data Gathering mobile client is
| a Silverlight application for Windows Phone 7 and a Cordova/Sensa Touch application for
| Windows Phone 8. The Windows Tablet version runs on Windows RT devices. The Java application runs
| on Symbian and Nokia OS devices.
- p
+ p.b-content__paragraph
| If you have a specific query about device compatibility, please let
- | us know by sending an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- li
- h2.blueHeader 6) Where can I find the Microsoft Data Gathering source code?
- p
- | You can get the source code at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- li
- h2.blueHeader 7) How can I host my own server data?
- p
+ | us know by sending an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com' ) mdgspprt@microsoft.com
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 6
+ | Where can I find the Microsoft Data Gathering source code?
+ p.b-content__paragraph
+ | You can get the source code at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 7
+ | How can I host my own server data?
+ p.b-content__paragraph
| The instructions for setting up and hosting your own
- | server are contained in the
- a(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
- | .
- li
- h2.blueHeader 8) What are the previous versions of Microsoft Data Gathering?
- p
- | Please see our
- a(href='#') release archive
- | . for more information on previous releases of
- | Microsoft Data Gathering.
- li
- h2.blueHeader 9) Can students work on Microsoft Data Gathering?
+ | server are contained in the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 8
+ | What are the previous versions of Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Please see our
+ a.b-content__paragraph__link(href='#') release archive
+ | for more information on previous releases of
+ | Microsoft Data Gathering..
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 9
+ | Can students work on Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Yes. Please see the description of our
+ a.b-content__paragraph__link(href='#') University Collaboration Program
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 10
+ | Can I translate the Microsoft Data Gathering mobile client into my language?
+ p.b-content__paragraph
+ | Yes. Please get in touch with us at
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com', target='_blank') mdgspprt@microsoft.com
+ | and work with us to provide a translation of
+ | the software in your language. We will then push this out
+ | and make the language version available to all users.
+
+ article#login.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Login
+ p.b-content-header__text
+ | Log in to the server below
+ .b-page__line
+ .b-content
+ form.e-form
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", placeholder="Enter your username...", tabindex="0")
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", placeholder="Enter your password...")
+ .error
+ button.e-form__button(type="submit" title='Login') Login
+ p.b-content__paragraph
+ a.b-content__paragraph__link(href="#/forgotPassword") Forgot your password?
+ p.b-content__paragraph
+ | Don’t have an account?
+ a.b-content__paragraph__link(href="#/register") Register here
+
+ article#register.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Register
+ p.b-content-header__text
+ | Create an account below
+ .b-page__line
+ .b-content
+ form.e-form(action='signup', method='POST', autocomplete="off")
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='firstName') First Name
+ input.e-form__field#firstName(type="text", name="firstName", data-validation='len(2, 60);', placeholder="Enter your First Name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label(for='lastName') Last name
+ input.e-form__field#lastName(type="text", name="lastName", data-validation='len(2, 60);', placeholder="Enter your Last name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", data-validation='len(5,13);isAlpha;uniqeUsrName;', placeholder="Enter your Username...")
+ .error
+ span(data-validation-msg='uniqeUsrName')
+ | This username is already used.
+ span(data-validation-msg='len')
+ | This field must have at least 5 and cannot be longer than 13 characters.
+ span(data-validation-msg='isAlpha')
+ | Nickname can contain only numbers, periods and Latin letters.
+ .b-form-row__col
+ label.e-form__label(for='email') Email
+ input.e-form__field#email(type="email", name="email", data-validation='isEmail;', placeholder="Enter your Email...")
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", data-validation='len(8,20);', placeholder="Enter your Password...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ .b-form-row__col
+ label.e-form__label(for='confirmpass') Confirm Password
+ input.e-form__field#confirmpass(type="password", name="confirmpass", data-validation='isMatch(password)', placeholder="Confirm your Password...")
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='phone') Phone Number
+ input.e-form__field#phone(type="text", name="phone", data-validation='len(10,15);isNumber;', placeholder="Enter your Phone Number...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 10 and cannot be longer than 15 characters.
+ span(data-validation-msg='isNumber')
+ | This is not a valid phone number.
+ .b-form-row__col
+ label.e-form__label(for='company') Company
+ input.e-form__field#company(type="text", name="company", data-validation='len(2, 60);', placeholder="Enter your Company...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='industry') Industry
+ input.e-form__field#industry(type="text", name="industry", data-validation='len(2, 60);', placeholder="Enter your industry...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label Country
+ .e-select
+ label.e-select__label(for='country')
+ select.e-select__box#country(placeholder='Country', name='country', data-validation='len(1);')
+ option(value='') Country
+ each country in countries
+ option(value=country) #{country}
+ .error
+ span(data-validation-msg='len')
+ | This field cannot be blank.
+
+ button.e-form__button.e-form__button--offset(type="submit") Create Account
+
+ article#forgotPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-forgot-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | FORGOT YOUR PASSWORD?
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ .msg.hidden
+ p If you have entered a valid email, please check it for further instructions.
+ form.e-form(method='POST')
p
- | Yes. Please see the description of our
- a(href='#') University Collaboration Program
- | .
- li
- h2.blueHeader 10) Can I translate the Microsoft Data Gathering mobile client into my language?
+ | Please enter your username and email to reset your password.
p
- | Yes. Please get in touch with us at
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | and work with us to provide a translation of
- | the software in your language. We will then push this out
- | and make the language version available to all users.
- article#login.hidden
- section
- div
- h1 LOGIN
- form
- label.col-left
- input(type='text', name='username', placeholder='Enter your username...')
- label.col-right
- input(type='password', name='password', placeholder='Enter your password...')
- .error
- a(href='#/forgotPassword') Forgot your password?
- button(type='submit') Login
- article#register.hidden
- section
- div
- h1 REGISTER
- form(action='signup', met='post', autocomplete="off")
- label.col-left
- input(type='text', placeholder='First name', name='firstName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- input(type='text', placeholder='Last name', name='lastName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 characters.
- label.col-left
- input(type='text', placeholder='Username', name='username', data-validation='len(5,13);isAlpha;uniqeUsrName;')
- .error
- span(data-validation-msg='uniqeUsrName')
- | This username is already used.
- span(data-validation-msg='len')
- | This field must have at least 5 and cannot be longer than 13 characters.
- span(data-validation-msg='isAlpha')
- | Nickname can contain only numbers, periods and Latin letters.
- label.col-right
- input(type='text', placeholder='Email', name='email', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- label.col-left
- input(type='password', placeholder='Password', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm password', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- label.col-left
- input(type='text', placeholder='Phone number', name='phone', data-validation='len(10,15);isNumber;')
- .error
- span(data-validation-msg='len')
- | This field must have at least 10 and cannot be longer than 15 characters.
- span(data-validation-msg='isNumber')
- | This is not a valid phone number.
- label.col-right
- input(type='text', placeholder='Company', name='company', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-left
- input(type='text', placeholder='Industry', name='industry', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- select(placeholder='Country', name='country', data-validation='len(1);')
- option(value='') Country
- each country in countries
- option(value=country) #{country}
- .error
- span(data-validation-msg='len')
- | This field cannot be blank.
- button(type='submit') Create Account
- article#forgotPassword.hidden
- section
- div
- h1 FORGOT YOUR PASSWORD?
- .msg.hidden
- p If you have entered a valid email, please check it for further instructions.
- form
- p
- | Please enter your username and email to reset your password.
- p
- | If you forgot your username, please enter your email
- | only and we will send all usernames related to this email.
- label.col-left
- input(type='text', name='username', placeholder='Username...')
- label.col-right
- input(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- button(type='submit') Proceed
- article#resetPassword.hidden
- section
- div
- h1 RESET PASSWORD
- form
- label.col-left
- input(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- button(type='submit') Apply
- article#resetPasswordError.hidden
- section
- div
- h1 RESET PASSWORD
- .msg
- p Password reset token is invalid or has expired.
-
- .modal.success-registration.hidden
- .overlay
- .window
- .window-body
- div You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
- input(type="button" value="OK")
+ | If you forgot your username, please enter your email
+ | only and we will send all usernames related to this email.
+ label.e-form__label(for='username_forgot-pass')
+ input.e-form__field#username_forgot-pass(type='text', name='username', placeholder='Username...')
+ label.e-form__label(for='email_forgot-pass')
+ input.e-form__field#email_forgot-pass(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ button.e-form__button(type='submit') Proceed
+ article#resetPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ form.e-form(method='POST', autocomplete="off")
+ label.e-form__label(for='password_reset-pass')
+ input.e-form__field#password_reset-pass(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ label.e-form__label(for='confirmpass_reset-pass')
+ input.e-form__field#confirmpass_reset-pass(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ button.e-form__button(type='submit') Apply
+ article#resetPasswordError.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass-error
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/resetPassword')
+ .b-modal-window__main-block__body
+ .modal.success-registration.hidden
+ .msg
+ p Password reset token is invalid or has expired.
+
+ article#successRegistration.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-success-registration
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | Successfully Registration
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href="#/register")
+ .b-modal-window__main-block__body
+ .modal.success-registration
+ .msg
+ p You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
+ button.b-success-registration__btn(type="button")
+ a(href='#/login')
+ span.fa.fa-check.b-success-registration__btn--icon
+ span() OK
+ .b-page__footer
+ ul.b-page__footer__box
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/policy/privacy-policy/')
+ | Privacy Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/cookie/cookie-policy/')
+ | Cookie Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/service-terms/service-terms/')
+ | Service Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='https://github.com/nokiadatagathering')
+ | Code
diff --git a/app/views/getStarted/jade/vi/error404.jade b/app/views/getStarted/jade/vi/error404.jade
index 43dd92b..c753292 100644
--- a/app/views/getStarted/jade/vi/error404.jade
+++ b/app/views/getStarted/jade/vi/error404.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -6,7 +6,7 @@ html
meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
meta(name='viewport', content='initial-scale=1.0')
- link(rel="stylesheet" type="text/css" href="/resources/stylesheets/404.css")
+ link(rel="stylesheet" type="text/css" href="/styles/404.css")
body
div(class="content")
diff --git a/app/views/getStarted/jade/vi/home.jade b/app/views/getStarted/jade/vi/home.jade
index 1ca225a..fc3782c 100644
--- a/app/views/getStarted/jade/vi/home.jade
+++ b/app/views/getStarted/jade/vi/home.jade
@@ -1,695 +1,904 @@
-!!! 5
+doctype html
html
head
title= title
- include ../../../../../web/index.js
- include ../../../../../web/resources/stylesheets/style.css
+ script(src='home.js')
+ link(rel='stylesheet' href='styles/home.css')
+ link(rel='stylesheet' href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' )
meta(charset='utf-8')
body
- header#mainMenu
- nav
- a(href='#')
- img(src='../resources/icons/lolgo-30px.png')
- h1
- | MICROSOFT
- b DATA GATHERING
- ul
- li
- a(href='#/getStarted') Get Started
- li
- a(href='#/useCases') Use Cases
- li
- a(href='#/openSource') Open Source
- li
- a(href='#/support') Support
- li
- a.language-select #{language}
- ul.dropdown
- each lang in languages
- li(value=lang.value) #{lang.text}
- a(href='#/login') Login
- | /
- a(href='#/register') Register
- article#home.hidden
- section.headDescrip
- div
- | Microsoft Data Gathering offers organizations a fast,
- br
- | accurate, cost effective and
- br
- | user-friendly way to collect data using mobile devices.
- section.contentDescrip
- div
- .col-left
- p
- | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central location,
- | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the ability
- | to make crucial decisions.
- p
- | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
- | the field. The more time-critical the need for data and the more remote the location, the more organizations
- | can benefit from a mobile phone based solution.
- p
- | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data, including
- | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
- p
- | Because mobile devices can transmit data even from remote locations, the information collected can be available
- | for analysis in near-real time.
- .col-right
- img(src='../resources/images/collage.jpg')
- section#instruction
- div
- h2 HOW IT WORKS
- ul
- .col-left
- li
- a(href='#/getStarted#step1')
- img(src='../resources/images/howitworks_1.png')
- span 1
- span
+ .g-page-wrapper
+ .b-page__head-line
+ .b-line-bit.b-line-bit--red
+ .b-line-bit.b-line-bit--green
+ .b-line-bit.b-line-bit--blue
+ .b-line-bit.b-line-bit--yellow
+ div
+ header.b-page__header
+ .b-head-logo
+ a.b-logo__title(href='#/home')
+ img.b-logo__img(src='assets/images/logo-30px.png'
+ alt='Microsoft Data Gathering Icon')
+ span Microsoft Data Gathering
+ .b-menu
+ nav.b-menu-nav
+ a.b-menu-nav__link(href='#/getStarted')
+ | Get Started
+ a.b-menu-nav__link(href='#/useCases')
+ | Use Cases
+ a.b-menu-nav__link(href='#/openSource')
+ | Open Source
+ a.b-menu-nav__link(href='#/support')
+ | Support
+ .b-account-menu
+ a.language-select.b-account-menu__locale(href='#') #{language}
+ ul.dropdown
+ each lang in languages
+ li: a.b-account-menu__language(href='#' value=lang.value title=lang.title lang=lang.value)
+ span.hide-text #{lang.title}
+ span.screnreder-ignore(role='presentation' aria-hidden='true') #{lang.text}
+ .b-account-menu__user
+ a(href='#/login') Login
+ | /
+ a(href='#/register') Register
+ article#home.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Microsoft Data Gathering
+ p.b-content-header__text
+ | Offers organizations a fast, accurate, cost effective and
+ br
+ | user-friendly way to collect data using mobile devices.
+ .b-page__line
+ .b-content.b-content--line.b-content--main
+ .b-content--main__article
+ p.b-content--main__article__indent
+ | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central
+ | location,
+ | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the
+ | ability
+ | to make crucial decisions.
+ p.b-content--main__article__indent
+ | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
+ | the field. The more time-critical the need for data and the more remote the location, the more organizations
+ | can benefit from a mobile phone based solution.
+ p.b-content--main__article__indent
+ | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data,
+ | including
+ | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
+ p.b-content--main__article__indent
+ | Because mobile devices can transmit data even from remote locations, the information collected can be available
+ | for analysis in near-real time.
+ .b-content-main__image
+ img(src='../assets/images/collage.jpg'
+ alt='Pictures of MDG in use')
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | How It Works
+ .b-content__col-left
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_1.png'
+ alt='First step of how MDG works. Create a questionnaire')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 1
+ span.b-content__col-left__item__caption__text--blue
| Create a questionnaire on
br
| the survey editor
- li
- a(href='#/getStarted#step2')
- img(src='../resources/images/howitworks_2.png')
- span 2
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_2.png'
+ alt='Second step of how MDG works. Publish the data for data collectors.')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 2
+ span.b-content__col-left__item__caption__text--blue
| Publish the data for data
br
| collectors
- li
- a(href='#/getStarted#step3')
- img(src='../resources/images/howitworks_3.png')
- span 3
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_3.png'
+ alt='Third step of how MDG works. Fill in the questionnaire on the device')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 3
+ span.b-content__col-left__item__caption__text--blue
| Fill in the questionnaire on
br
- | your mobile device
- .col-right
- li
- a(href='#/getStarted#step4')
- img(src='../resources/images/howitworks_4.png')
- span 4
- span
+ | your mobile device
+ .b-content__col-right
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_4.png'
+ alt='Fourth step of how MDG works. Send your data to the server')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 4
+ span.b-content__col-right__item__caption__text--blue
| Send your data to the
br
- | server over the mobile
- br
- | network
- li
- a(href='#/getStarted#step5')
- img(src='../resources/images/howitworks_5.png')
- span 5
- span
+ | server over the mobile network
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_5.png'
+ alt='Fifth step of how MDG works. View, map or export your data')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 5
+ span.b-content__col-right__item__caption__text--blue
| View, map, and export
br
| your data
- section.videoBlock
- div
- p
- i
- | This video is about the use of Microsoft Data Gathering to
- b.bold combat dengue fever
- | in Amazonas State, Brazil.
- iframe.video(src='//www.youtube.com/embed/kP1v9Snz6HA')
- section#benefits
- div
- h2 BENEFITS
- ul
- .col-left
- li
- img(src='../resources/icons/speed.png')
- h3 Speed
- | Compared to using paper forms, mobile solutions cut down delays
- | caused by transportation and manual digitalization of collected
- | data.
- li
- img(src='../resources/icons/cost-efficiency.png')
- h3 Cost efficiency
- | Transportation and logistics costs are reduced, as are the needs
- | for manual data entry and cleaning. There is also a cost of
- | inaction saved with the ability to make critical decisions and
- | react rapidly.
- .col-right
- li
- img(src='../resources/icons/accuracy.png')
- h3 Accuracy
- | Data entry occurs at the point of collection, without needing to
- | transcribe hand-written information. This lowers the frequency of
- | transcription and data entry errors.
- li
- img(src='../resources/icons/usability.png')
- h3 Usability
- | Mobile phones are small, easy to carry, have battery longevity,
- | and enable the capture of rich data such as GPS location tags
- | and images.
- section#awards
- div
- .col-left
- h2 AWARDS
- ul
- li
- b 2012
- | : Microsoft Data Gathering was a Featured Project of the
- br
- | Month for July in the Developer Community Blog.
- li
- b 2011
- | : Microsoft Data Gathering won the Justmeans Social
- br
- | Innovation Award in the category "Philanthropy: Most Strategic
- br
- | Use of Philanthropic Funds".
- li
- | The Justmeans international awards program is considered one of
- | the top honours in the field of sustainability, giving recognition to
- | companies implementing groundbreaking strategies and programs
- | that drive social and environmental innovation.
- .col-right
- h2 ACKNOWLEDGEMENTS
- p
- | We would like to extend our thanks to these organizations, which
- br
- | have been instrumental in getting Microsoft Data Gathering to
- br
- | where it is today.
- ul.markedList
- li
- a(href='http://www.indt.org/?lang=en') Nokia Technology Institute
- li
- a(href='http://www.uonbi.ac.ke/') University of Nairobi
- li
- a(href='http://cmri.shu.edu/') The Center for Mobile Research and Innovation
- li
- a(href='http://www.ayalafoundation.org/') The Ayala Foundation
- ul#footer
- li
- a(href='http://www.nokia.com/global/privacy/privacy/policy/privacy-policy/') Privacy Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/cookie/cookie-policy/') Cookie Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/service-terms/nokia-service-terms/') Service Policy
- li
- a(href="https://github.com/nokiadatagathering") Code
- article#getStarted.hidden
- section
- div
- h1 GET STARTED
- p
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title#benefits
+ | Benefits
+ .b-content__col-left
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits1.png'
+ alt='Compared to using paper forms, mobile solutions cut down delays')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Speed
+ p.b-content__col-left__item__caption__text
+ | Compared to using paper forms, mobile solutions cut down delays
+ | caused by transportation and manual digitalization of collected
+ | data.
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits2.png'
+ alt='Transportation and logistics costs are reduced')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Cost efficiency
+ p.b-content__col-left__item__caption__text
+ | Transportation and logistics costs are reduced, as are the needs
+ | for manual data entry and cleaning. There is also a cost of
+ | inaction saved with the ability to make critical decisions and
+ | react rapidly.
+ | data.
+ .b-content__col-right
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits3.png'
+ alt='Data entry occurs at the point of collection')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Accuracy
+ p.b-content__col-right__item__caption__text
+ | Data entry occurs at the point of collection, without needing to
+ | transcribe hand-written information. This lowers the frequency of
+ | transcription and data entry errors.
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits4.png'
+ alt='Mobile devices are easy to carry')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Usability
+ p.b-content__col-right__item__caption__text
+ | Mobile phones are small, easy to carry, have battery longevity,
+ | and enable the capture of rich data such as GPS location tags
+ | and images.
+ .b-page__line
+ .b-content.b-content-line
+ .b-content__col-left
+ h2.b-content-title Awards
+ p.b-content__paragraph
+ b 2012
+ | Microsoft Data Gathering was a Featured Project of the
+ br
+ | Month for July in the Developer Community Blog.
+ p.b-content__paragraph
+ b 2011
+ | Microsoft Data Gathering won the Justmeans Social
+ br
+ | Innovation Award in the category "Philanthropy: Most Strategic
+ br
+ | Use of Philanthropic Funds".
+ p.b-content__paragraph
+ | The Justmeans international awards program is considered one of
+ br
+ | the top honours in the field of sustainability, giving recognition to
+ br
+ | companies implementing groundbreaking strategies and programs
+ br
+ | that drive social and environmental innovation.
+ br
+ .b-content__col-right
+ .b-content__col-right__item
+ h2.b-content-title Acknowledgements
+ p.b-content__paragraph
+ | We would like to extend our thanks to these organizations, which
+ br
+ | have been instrumental in getting Microsoft Data Gathering to
+ br
+ | where it is today.
+ .b-content--acknowledge-list
+ a.b-content--acknowledge-list__link(href='http://www.indt.org/?lang=en', target='_blank') Nokia Technology Institute
+ a.b-content--acknowledge-list__link(href='http://www.uonbi.ac.ke/', target='_blank') University of Nairobi
+ a.b-content--acknowledge-list__link(href='http://cmri.shu.edu/', target='_blank') The Center for Mobile Research and Innovation
+ a.b-content--acknowledge-list__link(href='http://www.ayalafoundation.org/', target='_blank') The Ayala Foundation
+
+ article#getStarted.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Get Started
+ p.b-content-header__text
| If you have your own server and wish to migrate your data
- | to this release of MDG the tool to do that is available
- a(href="http://github.com/nokiadatagathering/ndg-migration") here
- ul
- li(data-step='step1')
- img(src='../resources/images/getstarted_step1.png')
- h2 Step 1: Register to the Microsoft Data Gathering Playground Server
- p
- | The first thing you need to do is to fill in the user registration form and create
- | an account on the Microsoft Data Gathering playground server. You can do this by
- | clicking
- a(href='#/register') register on the homepage
- | .
- li(data-step='step2')
- img(src='../resources/images/getstarted_step2.png')
- h2 Step 2: Create a survey
- p
- | After you've confirmed your account and logged in to the server, you can start
- | writing your own questionnaire using the survey editor. You can choose different
- | question types, set default answers or limits and even use skip logic to write your
- | questionnaire.
- li(data-step='step3')
- img(src='../resources/images/getstarted_step3.png')
- h2 Step 3: Download the Microsoft Data Gathering mobile application
- p
- | Download and install one of the Microsoft Data Gathering mobile applications.
- p
- i
- | Please note that until the branding change is completed please use the server https://nokiadatagathering.net in the app settings.
- | Apps marked as 'New!' have been updated to use the https://microsoftdatagathering.net server and those marked as 'To be updated' still
- | default to https://nokiadatagathering.net
- p
- | Download the
- a(href="http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848") Windows Phone app
- |.
- img(src="../resources/icons/1-new.png")
- em New!
- br
- | Download the
- a(href="https://nokiadatagathering.net/ndg-ota/client/ndg.jad") Java app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- br
- | Download the
- a(href="http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42") Windows Tablet app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- li(data-step='step4')
- img(src='../resources/images/getstarted_step4.png')
- h2 Step 4: Add users and make your survey available to them
- p
- | You can publish your questionnaire to your field data collectors by adding them to
- | your main account in the Users section, organizing them into groups and giving
- | them different access permissions. You can make your questionnaire available to
- | as many users as you like. You can also send SMS notifications to your user groups.
- li(data-step='step5')
- img(src='../resources/images/getstarted_step5.png')
- h2 Step 5: Fill in the survey and send your results on your mobile device
- p
- | Open the Microsoft Data Gathering app you downloaded onto your mobile device
- | in Step 3, and login with your user credentials. The surveys that were made available
- | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
- | result by entering the requested data in the blank fields.
- p
- | You can send your results back to the server immediately, or save them on the
- | phone to send later.
- li(data-step='step6')
- img(src='../resources/images/getstarted_step6.png')
- h2 Step 6: View and export your results
- p
- | Go back to your Playground Server account and take a look at all the results you've received.
- | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
- | your data in XLS or KML formats for further data analysis.
- article#useCases.hidden
- section
- div
- h1 USE CASES
- ul
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Uganda - FAO
- img(src='../resources/images/usecase_1.jpg')
- .col-left
- p
- | As part of a regional initiative to reduce risk
- | of drought in Eastern Africa with Early Warning Systems,
- | the Food and Agriculture Organization of the United Nations
- | (FAO) in Uganda is collecting geo-spatial and qualitative
- | data about community animal health workers and providers
- | of veterinary services and shops, among the rural pastoral
- | communities of the Karamoja region.
- p
- | The move from paper-based questionnaires to Microsoft Data Gathering
- | has allowed more efficient operations by reducing the time to produce
- | Drought Bulletins by 50%.
- p
- | Furthermore, the project has enhanced participation of the community
- | and the local government, and is supporting the capacity of the
- | Department of Meteorology in issuing monthly weather updates
- | for Karamoja.
- p
- | FAO's efforts were recognized by the World Bank in recent study
- | on mobile applications for the agriculture and forestry sector,
- | published in December 2013.
- .col-right
- blockquote
+ br
+ | to this release of MDG the tool to do that is available
+ a.b-content-header__text__link(href='http://github.com/nokiadatagathering/ndg-migration', target='_blank') here
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step1.png'
+ alt='Register to the Microsoft Data Gathering Playground Server')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 1
+ | Register to the Microsoft Data Gathering Playground Server
+ p.b-step__right__paragraph
+ | The first thing you need to do is to fill in the user registration form and create
+ br
+ | an account on the Microsoft Data Gathering playground server. You can do this by
+ br
+ | clicking
+ a.b-step__right__paragraph__link(href='#/register') register on the homepage
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step2.png'
+ alt='Create a survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 2
+ | Create a survey
+ p.b-step__right__paragraph
+ | After you've confirmed your account and logged in to the server, you can start
+ br
+ | writing your own questionnaire using the survey editor. You can choose different
+ br
+ | question types, set default answers or limits and even use skip logic to write your
+ br
+ | questionnaire.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step3.png'
+ alt='Download the MDG mobile application')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 3
+ | Download the Microsoft Data Gathering mobile application
+ p.b-step__right__paragraph
+ | Download and install one of the Microsoft Data Gathering mobile applications.
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848', target='_blank')
+ | Windows Phone app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='https://nokiadatagathering.net/ndg-ota/client/ndg.jad', target='_blank')
+ | Java app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42', target='_blank')
+ | Windows Tablet app
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step4.png'
+ alt='Add users')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 4
+ | Add users and make your survey available to them
+ p.b-step__right__paragraph
+ | You can publish your questionnaire to your field data collectors by adding them to
+ br
+ | your main account in the Users section, organizing them into groups and giving
+ br
+ | them different access permissions. You can make your questionnaire available to
+ br
+ | as many users as you like. You can also send SMS notifications to your user groups.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step5.png'
+ alt='Fill in the survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 5
+ | Fill in the survey and send your results on your mobile device
+ p.b-step__right__paragraph
+ | Open the Microsoft Data Gathering app you downloaded onto your mobile device
+ br
+ | in Step 3, and login with your user credentials. The surveys that were made available
+ br
+ | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
+ br
+ | result by entering the requested data in the blank fields.
+ p.b-step__right__paragraph
+ | You can send your results back to the server immediately, or save them on the
+ | phone to send later.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step6.png'
+ alt='View and Export')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 6
+ | View and export your results
+ p.b-step__right__paragraph
+ | Go back to your Playground Server account and take a look at all the results you've received.
+ br
+ | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
+ br
+ | your data in XLS or KML formats for further data analysis.
+
+
+ article#useCases.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Use Cases
+ p.b-content-header__text
+ | A Real Solution to Real Problems
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities
+ br
+ | in Uganda - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | As part of a regional initiative to reduce risk
+ | of drought in Eastern Africa with Early Warning Systems,
+ | the Food and Agriculture Organization of the United Nations
+ | (FAO) in Uganda is collecting geo-spatial and qualitative
+ | data about community animal health workers and providers
+ | of veterinary services and shops, among the rural pastoral
+ | communities of the Karamoja region.
+ p.b-content__paragraph
+ | The move from paper-based questionnaires to Microsoft Data Gathering
+ | has allowed more efficient operations by reducing the time to produce
+ | Drought Bulletins by 50%.
+ p.b-content__paragraph
+ | Furthermore, the project has enhanced participation of the community
+ | and the local government, and is supporting the capacity of the
+ | Department of Meteorology in issuing monthly weather updates
+ | for Karamoja.
+ p.b-content__paragraph
+ | FAO's efforts were recognized by the World Bank in recent study
+ | on mobile applications for the agriculture and forestry sector,
+ | published in December 2013.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_1.jpg'
+ alt='FAO in Eastern Africa')
+ blockquote.b-content__col-right__item__photo-caption
| "We strive to improve the humanitarian situation by increasing
| the coping capacities of populations vulnerable to recurrent
| drought hazards and their effects through the provision of
| multi-sectorial assistance in the Horn of Africa.
| Microsoft Data Gathering is one of the most convenient
| and cost-effective tools for collecting data from remote areas."
- p
- b Bernard 0. Mwesigwa
- | ,
- | Programme Officer, M&E/Data Management, FAO Uganda
- li
- h2.nptlHeader Giving children the right to an identity in Kenya - Plan
- img(src='../resources/images/usecase_2.jpg')
- .col-left
- p
- | An official identity is the foundation for child rights,
- | child protection and later child's ticket to services such as
- | secondary schooling. Official identity is obtained by parents
- | through birth registration.
- p
- | Today only five out of ten children in Kenya are registered.
- p
- | Poor accessibility to offices and officers, slow processing
- | of both birth notifications and certificates, and costs involved
- | together with a lack of incentives for parents to register their
- | children contribute to the current situation.
- p
- | Plan together with the Ministry of Foreign Affairs in Finland is
- | running a universal birth registration project in the Kwale district
- | using Microsoft Data Gathering that has resulted in dramatically increased
- | registration rates (from 30 to 68%).
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Bernard O. Mwesigwa,
+ br
+ | Programme Officer, M&E/Data Management, FAO Uganda
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Giving children the right to an identity in Kenya - Plan
+ .b-content__col-left
+ p.b-content__paragraph
+ | An official identity is the foundation for child rights,
+ | child protection and later child's ticket to services such as
+ | secondary schooling. Official identity is obtained by parents
+ | through birth registration.
+ p.b-content__paragraph
+ | Today only five out of ten children in Kenya are registered.
+ p.b-content__paragraph
+ | Poor accessibility to offices and officers, slow processing
+ | of both birth notifications and certificates, and costs involved
+ | together with a lack of incentives for parents to register their
+ | children contribute to the current situation.
+ p.b-content__paragraph
+ | Plan together with the Ministry of Foreign Affairs in Finland is
+ | running a universal birth registration project in the Kwale district
+ | using Microsoft Data Gathering that has resulted in dramatically increased
+ | registration rates (from 30 to 68%).
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_2.jpg'
+ alt='Plan in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "The use of ICTs including mobile technology has great potential to support
| communities and governments in civil registration. Right to citizenship and
| identity are fundamental prerequisites in development."
- p
- b Mika Välitalo
- | , Manager - ICT for Development, Plan Finland
- li
- h2.nptlHeader
- | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
- img(src='../resources/images/usecase_3.jpg')
- .col-left
- p
- | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
- | Microsoft Data Gathering to help fight the spread of dengue fever
- | and increase the effectiveness of treatment.
- p
- | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
- | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
- b.bold 93% cut
- | in the number of cases.
- p
- | Microsoft Data Gathering helped the health workers to do their jobs, by making their
- | reports both faster and more accurate.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Mika Välitalo,
+ br
+ | Manager - ICT for Development, Plan Finland
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
+ .b-content__col-left
+ p.b-content__paragraph
+ | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
+ | Microsoft Data Gathering to help fight the spread of dengue fever
+ | and increase the effectiveness of treatment.
+ p.b-content__paragraph
+ | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
+ | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
+ bold 93% cut
+ | in the number of cases.
+ p.b-content__paragraph
+ | Microsoft Data Gathering helped the health workers to do their jobs, by making their
+ | reports both faster and more accurate.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_3.jpg'
+ alt='Malaria in Amazonas')
+ blockquote.b-content__col-right__item__photo-caption
| "Microsofts technology will help us to more rapidly identify and investigate the results
| and symptoms of the surveyed population. The transmission of data immediately after
| the interviews improves agility, increases public safety and avoids manual filling-in of forms."
- p
- b Agnaldo Costa
- | , State Health Secretary of Amazonas State
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Kenya - FAO
- img(src='../resources/images/usecase_4.jpg')
- .col-left
- p
- | Accurate, timely and geo-tagged data on water points and sources is
- | an important basis to reduce the impact of drought among vulnerable communities
- | living in recurrent drought Food Agriculture Organization (FAO) is working along
- | with their NGO partners in Greater Horn of Africa to alleviate the risk
- | to drought among pastoralist communities.
- p
- | Microsoft Data Gathering is bringing mobile technology to water point surveys,
- | reducing the amount of effort, time and cost to collect the information and
- | enabling proper and timely preparedness activities.
- p
- | To date information from over 500 points has been collected - and more into come.
- | The collected information is also published in Disaster Risk Reduction website
- | for public good.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Agnaldo Costa,
+ br
+ | State Health Secretary of Amazonas State
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities in Kenya - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | Accurate, timely and geo-tagged data on water points and sources is
+ | an important basis to reduce the impact of drought among vulnerable communities
+ | living in recurrent drought Food Agriculture Organization (FAO) is working along
+ | with their NGO partners in Greater Horn of Africa to alleviate the risk
+ | to drought among pastoralist communities.
+ p.b-content__paragraph
+ | Microsoft Data Gathering is bringing mobile technology to water point surveys,
+ | reducing the amount of effort, time and cost to collect the information and
+ | enabling proper and timely preparedness activities.
+ p.b-content__paragraph
+ | To date information from over 500 points has been collected - and more into come.
+ | The collected information is also published in Disaster Risk Reduction website
+ | for public good.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_4.jpg'
+ alt='Vulnerable communities in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "A huge burden is put on organizations, especially small scale NG05,
| to collect, capture and process data timely for response and planning with
| no supported technology tools. Microsoft Data Gathering provides a simple and
| effective field solution with a centralized data administration system."
- p
- b Phillip Fong
- | , Regional Data and Information Coordinator, FAO
- article#openSource.hidden
- section
- div
- h1 OPEN SOURCE
- h2.nptlHeader Microsoft Data Gathering is an Open Source solution
- .col-left
- p
- | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
- | making the source code available to anyone for download, deployment and development.
- | There are no licensing costs for using the software, the code base is public,
- | and development occurs in a collaborative and community-driven manner.
- p
- | The open source model also empowers universities and local developers to participate
- | in creating tools and services on top of the core solution, helping to build local capacity.
- | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
- | technology adoption.
- p
- | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
- | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
- | of covered software.
- .col-right
- p
- | You can read the BSD license terms
- a(href='http://opensource.org/licenses/BSD-2-Clause') here
- | .
- p
- | The Microsoft Data Gathering Playground Server and the Java client
- | are both licensed under the GNU Lesser General Public License,
- a(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html') LGPL
- | which allows developers and companies to use and integrate the software into
- | their own (even proprietary) software without being required to release the source
- | code of their own software-parts.
- p
- | Microsoft Data Gathering complies with Open Rosa standards for data collection.
- p
- | The Microsoft Data Gathering source code and documentation repository is at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- section
- div
- h1 GET INVOLVED
- p
- | Here's how you can be a part of the Microsoft Data Gathering
- | developer and user community:
- ul.markedList
- li
- a(href='https://github.com/nokiadatagathering') Get the source code
- | and develop
- | Microsoft Data Gathering
- li
- | Become a Microsoft Data Gathering service partner
- li
- | Help us plan future software releases
- li
- | Translate the Microsoft Data Gathering application into your language
- article#support.hidden
- section
- div
- h1 SUPPORT
- p How to get support:
- ul.markedList
- li
- a(href='/docs') Read the Microsoft Data Gathering user guide and documentation
- li
- | Access the
- a(href='https://github.com/nokiadatagathering') Microsoft Data Gathering code repository
- li
- | Send an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- h1 FREQUENTLY ASKED QUESTIONS
- ul.questionList
- .col-left
- li
- h2.blueHeader 1) What are the benefits of mobile data collection?
- p
+ p.b-content__col-right__item__photo-location
+ | Phillip Fong,
+ br
+ | Regional Data and Information Coordinator, FAO
+ article#openSource.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Open Source
+ p.b-content-header__text
+ | Microsoft Data Gathering is an Open Source solution
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ p.b-content__paragraph
+ | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
+ | making the source code available to anyone for download, deployment and development.
+ | There are no licensing costs for using the software, the code base is public,
+ | and development occurs in a collaborative and community-driven manner.
+ p.b-content__paragraph
+ | The open source model also empowers universities and local developers to participate
+ | in creating tools and services on top of the core solution, helping to build local capacity.
+ | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
+ | technology adoption.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
+ | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
+ | of covered software.
+ .b-content__col-right
+ .b-content__col-right__item
+ p.b-content__paragraph
+ | You can read the BSD license terms
+ a.b-content__paragraph__link(href='http://opensource.org/licenses/BSD-2-Clause', target='_blank') here
+ | .
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Playground Server and the Java client
+ | are both licensed under the GNU Lesser General Public License,
+ a.b-content__paragraph__link(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html', target='_blank') LGPL
+ | which allows developers and companies to use and integrate the software into
+ | their own (even proprietary) software without being required to release the source
+ | code of their own software-parts.
+ p.b-content__paragraph
+ | Microsoft Data Gathering complies with Open Rosa standards for data collection.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering source code and documentation repository is at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') https://github.com/nokiadatagathering
+ | .
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | Get Involved
+ p.b-content__paragraph
+ | Here's how you can be a part of the Microsoft Data Gathering
+ | developer and user community:
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') Get the source code
+ | and develop
+ | Microsoft Data Gathering
+ p.b-content__paragraph.b-content__paragraph--item
+ | Become a Microsoft Data Gathering service partner
+ p.b-content__paragraph.b-content__paragraph--item
+ | Help us plan future software releases
+ p.b-content__paragraph.b-content__paragraph--item
+ | Translate the Microsoft Data Gathering application into your language
+
+ article#support.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Support
+ p.b-content-header__text
+ | Microsoft Data Gathering support page
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | How to get support
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='/docs')
+ | Read the Microsoft Data Gathering user guide and
+ | documentation
+ p.b-content__paragraph.b-content__paragraph--item
+ | Access the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering',, target='_blank')
+ | Microsoft Data Gathering code repository
+ p.b-content__paragraph.b-content__paragraph--item
+ | Send an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com')
+ | mdgspprt@microsoft.com
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Frequently Asked Questions
+ .b-content__col-left
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 1
+ | What are the benefits of mobile data collection?
+ p.b-content__paragraph
| The key benefits of mobile data collection are speed,
- | accuracy, cost efficiency and usability. Please see the
- a(href='#/home') benefits section on the homepage
+ | accuracy, cost efficiency and usability. Please see the
+ a.b-content__paragraph__link(href='#') benefits section on the homepage
| for more on benefits.
- li
- h2.blueHeader 2) How is Microsoft Data Gathering used in the field?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 2
+ | How is Microsoft Data Gathering used in the field?
+ p.b-content__paragraph
| When time is of the essence, rapidly available, accurate information
| is critical for sound decision-making in any kind of organization.
- p
+ p.b-content__paragraph
| For example: In Brazil, the Amazonas State Health Department and
| the Health Vigilance Foundation have used Microsoft Data Gathering
| to monitor and control the spread of dengue fever.
- p
+ p.b-content__paragraph
| In East Africa, the Food and Agriculture Organization has conducted
| water and livestock surveys to reduce the risk of vulnerable
| communities to drought.
- p
+ p.b-content__paragraph
| In Kenya, Plan Finland has worked with the Kenyan government
| to register births using Microsoft Data Gathering.
- p
- | For more on use cases, please see the
- a(href='#') use cases page
- | .
- li
- h2.blueHeader 3) Does it cost anything to use Microsoft Data Gathering?
- p
- | Nokia Data Gathering is an open source solution so there are no licensing fees
- | or charges for using the software. For more on open source, please see the
- a(href='#/openSource') open source page
- | .
- p
+ p.b-content__paragraph
+ | For more on use cases, please see the
+ a.b-content__paragraph__link(href='#/useCases') use cases page
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 3
+ | Does it cost anything to use Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Microsoft Data Gathering is an open source solution so there are no licensing fees
+ | or charges for using the software. For more on open source, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ p.b-content__paragraph
| Of course, there are costs associated with the hardware
| (mobile phones, servers, SIM cards) necessary for using
- | Nokia Data Gathering, as well as the implementation of a data collection project.
+ | Microsoft Data Gathering, as well as the implementation of a data collection project.
| These costs must be scoped and borne by the organization using the solution.
- li
- h2.blueHeader 4) What are the license terms for Microsoft Data Gathering?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 4
+ | What are the license terms for Microsoft Data Gathering?
+ p.b-content__paragraph
| The Microsoft Data Gathering Windows Phone client is licensed under the open source
| Berkeley Software Distribution (BSD) License family. The Microsoft
| Data Gathering Playground Server and the Java client are both licensed under
| the GNU Lesser General Public License (ILGPL).Microsoft Data Gathering complies with
| the standards of the OpenROSA Consortium on mobile data collection.
- p
- | For more on our licenses, please see the
- a(href='#/openSource') open source page
- | .
- .col-right
- li
- h2.blueHeader 5) Which devices are compatible with Microsoft Data Gathering?
- p
+ p.b-content__paragraph
+ | For more on our licenses, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ .b-content__col-right
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 5
+ | Which devices are compatible with Microsoft Data Gathering?
+ p.b-content__paragraph
| The Windows Phone version of the Microsft Data Gathering mobile client is
| a Silverlight application for Windows Phone 7 and a Cordova/Sensa Touch application for
| Windows Phone 8. The Windows Tablet version runs on Windows RT devices. The Java application runs
| on Symbian and Nokia OS devices.
- p
+ p.b-content__paragraph
| If you have a specific query about device compatibility, please let
- | us know by sending an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- li
- h2.blueHeader 6) Where can I find the Microsoft Data Gathering source code?
- p
- | You can get the source code at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- li
- h2.blueHeader 7) How can I host my own server data?
- p
+ | us know by sending an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com' ) mdgspprt@microsoft.com
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 6
+ | Where can I find the Microsoft Data Gathering source code?
+ p.b-content__paragraph
+ | You can get the source code at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 7
+ | How can I host my own server data?
+ p.b-content__paragraph
| The instructions for setting up and hosting your own
- | server are contained in the
- a(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
- | .
- li
- h2.blueHeader 8) What are the previous versions of Microsoft Data Gathering?
- p
- | Please see our
- a(href='#') release archive
- | . for more information on previous releases of
- | Microsoft Data Gathering.
- li
- h2.blueHeader 9) Can students work on Microsoft Data Gathering?
+ | server are contained in the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 8
+ | What are the previous versions of Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Please see our
+ a.b-content__paragraph__link(href='#') release archive
+ | for more information on previous releases of
+ | Microsoft Data Gathering..
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 9
+ | Can students work on Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Yes. Please see the description of our
+ a.b-content__paragraph__link(href='#') University Collaboration Program
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 10
+ | Can I translate the Microsoft Data Gathering mobile client into my language?
+ p.b-content__paragraph
+ | Yes. Please get in touch with us at
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com', target='_blank') mdgspprt@microsoft.com
+ | and work with us to provide a translation of
+ | the software in your language. We will then push this out
+ | and make the language version available to all users.
+
+ article#login.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Login
+ p.b-content-header__text
+ | Log in to the server below
+ .b-page__line
+ .b-content
+ form.e-form
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", placeholder="Enter your username...", tabindex="0")
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", placeholder="Enter your password...")
+ .error
+ button.e-form__button(type="submit" title='Login') Login
+ p.b-content__paragraph
+ a.b-content__paragraph__link(href="#/forgotPassword") Forgot your password?
+ p.b-content__paragraph
+ | Don’t have an account?
+ a.b-content__paragraph__link(href="#/register") Register here
+
+ article#register.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Register
+ p.b-content-header__text
+ | Create an account below
+ .b-page__line
+ .b-content
+ form.e-form(action='signup', method='POST', autocomplete="off")
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='firstName') First Name
+ input.e-form__field#firstName(type="text", name="firstName", data-validation='len(2, 60);', placeholder="Enter your First Name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label(for='lastName') Last name
+ input.e-form__field#lastName(type="text", name="lastName", data-validation='len(2, 60);', placeholder="Enter your Last name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", data-validation='len(5,13);isAlpha;uniqeUsrName;', placeholder="Enter your Username...")
+ .error
+ span(data-validation-msg='uniqeUsrName')
+ | This username is already used.
+ span(data-validation-msg='len')
+ | This field must have at least 5 and cannot be longer than 13 characters.
+ span(data-validation-msg='isAlpha')
+ | Nickname can contain only numbers, periods and Latin letters.
+ .b-form-row__col
+ label.e-form__label(for='email') Email
+ input.e-form__field#email(type="email", name="email", data-validation='isEmail;', placeholder="Enter your Email...")
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", data-validation='len(8,20);', placeholder="Enter your Password...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ .b-form-row__col
+ label.e-form__label(for='confirmpass') Confirm Password
+ input.e-form__field#confirmpass(type="password", name="confirmpass", data-validation='isMatch(password)', placeholder="Confirm your Password...")
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='phone') Phone Number
+ input.e-form__field#phone(type="text", name="phone", data-validation='len(10,15);isNumber;', placeholder="Enter your Phone Number...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 10 and cannot be longer than 15 characters.
+ span(data-validation-msg='isNumber')
+ | This is not a valid phone number.
+ .b-form-row__col
+ label.e-form__label(for='company') Company
+ input.e-form__field#company(type="text", name="company", data-validation='len(2, 60);', placeholder="Enter your Company...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='industry') Industry
+ input.e-form__field#industry(type="text", name="industry", data-validation='len(2, 60);', placeholder="Enter your industry...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label Country
+ .e-select
+ label.e-select__label(for='country')
+ select.e-select__box#country(placeholder='Country', name='country', data-validation='len(1);')
+ option(value='') Country
+ each country in countries
+ option(value=country) #{country}
+ .error
+ span(data-validation-msg='len')
+ | This field cannot be blank.
+
+ button.e-form__button.e-form__button--offset(type="submit") Create Account
+
+ article#forgotPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-forgot-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | FORGOT YOUR PASSWORD?
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ .msg.hidden
+ p If you have entered a valid email, please check it for further instructions.
+ form.e-form(method='POST')
p
- | Yes. Please see the description of our
- a(href='#') University Collaboration Program
- | .
- li
- h2.blueHeader 10) Can I translate the Microsoft Data Gathering mobile client into my language?
+ | Please enter your username and email to reset your password.
p
- | Yes. Please get in touch with us at
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | and work with us to provide a translation of
- | the software in your language. We will then push this out
- | and make the language version available to all users.
- article#login.hidden
- section
- div
- h1 LOGIN
- form
- label.col-left
- input(type='text', name='username', placeholder='Enter your username...')
- label.col-right
- input(type='password', name='password', placeholder='Enter your password...')
- .error
- a(href='#/forgotPassword') Forgot your password?
- button(type='submit') Login
- article#register.hidden
- section
- div
- h1 REGISTER
- form(action='signup', met='post', autocomplete="off")
- label.col-left
- input(type='text', placeholder='First name', name='firstName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- input(type='text', placeholder='Last name', name='lastName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 characters.
- label.col-left
- input(type='text', placeholder='Username', name='username', data-validation='len(5,13);isAlpha;uniqeUsrName;')
- .error
- span(data-validation-msg='uniqeUsrName')
- | This username is already used.
- span(data-validation-msg='len')
- | This field must have at least 5 and cannot be longer than 13 characters.
- span(data-validation-msg='isAlpha')
- | Nickname can contain only numbers, periods and Latin letters.
- label.col-right
- input(type='text', placeholder='Email', name='email', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- label.col-left
- input(type='password', placeholder='Password', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm password', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- label.col-left
- input(type='text', placeholder='Phone number', name='phone', data-validation='len(10,15);isNumber;')
- .error
- span(data-validation-msg='len')
- | This field must have at least 10 and cannot be longer than 15 characters.
- span(data-validation-msg='isNumber')
- | This is not a valid phone number.
- label.col-right
- input(type='text', placeholder='Company', name='company', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-left
- input(type='text', placeholder='Industry', name='industry', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- select(placeholder='Country', name='country', data-validation='len(1);')
- option(value='') Country
- each country in countries
- option(value=country) #{country}
- .error
- span(data-validation-msg='len')
- | This field cannot be blank.
- button(type='submit') Create Account
- article#forgotPassword.hidden
- section
- div
- h1 FORGOT YOUR PASSWORD?
- .msg.hidden
- p If you have entered a valid email, please check it for further instructions.
- form
- p
- | Please enter your username and email to reset your password.
- p
- | If you forgot your username, please enter your email
- | only and we will send all usernames related to this email.
- label.col-left
- input(type='text', name='username', placeholder='Username...')
- label.col-right
- input(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- button(type='submit') Proceed
- article#resetPassword.hidden
- section
- div
- h1 RESET PASSWORD
- form
- label.col-left
- input(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- button(type='submit') Apply
- article#resetPasswordError.hidden
- section
- div
- h1 RESET PASSWORD
- .msg
- p Password reset token is invalid or has expired.
-
- .modal.success-registration.hidden
- .overlay
- .window
- .window-body
- div You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
- input(type="button" value="OK")
+ | If you forgot your username, please enter your email
+ | only and we will send all usernames related to this email.
+ label.e-form__label(for='username_forgot-pass')
+ input.e-form__field#username_forgot-pass(type='text', name='username', placeholder='Username...')
+ label.e-form__label(for='email_forgot-pass')
+ input.e-form__field#email_forgot-pass(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ button.e-form__button(type='submit') Proceed
+ article#resetPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ form.e-form(method='POST', autocomplete="off")
+ label.e-form__label(for='password_reset-pass')
+ input.e-form__field#password_reset-pass(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ label.e-form__label(for='confirmpass_reset-pass')
+ input.e-form__field#confirmpass_reset-pass(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ button.e-form__button(type='submit') Apply
+ article#resetPasswordError.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass-error
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/resetPassword')
+ .b-modal-window__main-block__body
+ .modal.success-registration.hidden
+ .msg
+ p Password reset token is invalid or has expired.
+
+ article#successRegistration.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-success-registration
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | Successfully Registration
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href="#/register")
+ .b-modal-window__main-block__body
+ .modal.success-registration
+ .msg
+ p You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
+ button.b-success-registration__btn(type="button")
+ a(href='#/login')
+ span.fa.fa-check.b-success-registration__btn--icon
+ span() OK
+ .b-page__footer
+ ul.b-page__footer__box
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/policy/privacy-policy/')
+ | Privacy Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/cookie/cookie-policy/')
+ | Cookie Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/service-terms/service-terms/')
+ | Service Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='https://github.com/nokiadatagathering')
+ | Code
diff --git a/app/views/getStarted/jade/zh/error404.jade b/app/views/getStarted/jade/zh/error404.jade
index 43dd92b..c753292 100644
--- a/app/views/getStarted/jade/zh/error404.jade
+++ b/app/views/getStarted/jade/zh/error404.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -6,7 +6,7 @@ html
meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
meta(name='viewport', content='initial-scale=1.0')
- link(rel="stylesheet" type="text/css" href="/resources/stylesheets/404.css")
+ link(rel="stylesheet" type="text/css" href="/styles/404.css")
body
div(class="content")
diff --git a/app/views/getStarted/jade/zh/home.jade b/app/views/getStarted/jade/zh/home.jade
index 1ca225a..fc3782c 100644
--- a/app/views/getStarted/jade/zh/home.jade
+++ b/app/views/getStarted/jade/zh/home.jade
@@ -1,695 +1,904 @@
-!!! 5
+doctype html
html
head
title= title
- include ../../../../../web/index.js
- include ../../../../../web/resources/stylesheets/style.css
+ script(src='home.js')
+ link(rel='stylesheet' href='styles/home.css')
+ link(rel='stylesheet' href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' )
meta(charset='utf-8')
body
- header#mainMenu
- nav
- a(href='#')
- img(src='../resources/icons/lolgo-30px.png')
- h1
- | MICROSOFT
- b DATA GATHERING
- ul
- li
- a(href='#/getStarted') Get Started
- li
- a(href='#/useCases') Use Cases
- li
- a(href='#/openSource') Open Source
- li
- a(href='#/support') Support
- li
- a.language-select #{language}
- ul.dropdown
- each lang in languages
- li(value=lang.value) #{lang.text}
- a(href='#/login') Login
- | /
- a(href='#/register') Register
- article#home.hidden
- section.headDescrip
- div
- | Microsoft Data Gathering offers organizations a fast,
- br
- | accurate, cost effective and
- br
- | user-friendly way to collect data using mobile devices.
- section.contentDescrip
- div
- .col-left
- p
- | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central location,
- | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the ability
- | to make crucial decisions.
- p
- | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
- | the field. The more time-critical the need for data and the more remote the location, the more organizations
- | can benefit from a mobile phone based solution.
- p
- | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data, including
- | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
- p
- | Because mobile devices can transmit data even from remote locations, the information collected can be available
- | for analysis in near-real time.
- .col-right
- img(src='../resources/images/collage.jpg')
- section#instruction
- div
- h2 HOW IT WORKS
- ul
- .col-left
- li
- a(href='#/getStarted#step1')
- img(src='../resources/images/howitworks_1.png')
- span 1
- span
+ .g-page-wrapper
+ .b-page__head-line
+ .b-line-bit.b-line-bit--red
+ .b-line-bit.b-line-bit--green
+ .b-line-bit.b-line-bit--blue
+ .b-line-bit.b-line-bit--yellow
+ div
+ header.b-page__header
+ .b-head-logo
+ a.b-logo__title(href='#/home')
+ img.b-logo__img(src='assets/images/logo-30px.png'
+ alt='Microsoft Data Gathering Icon')
+ span Microsoft Data Gathering
+ .b-menu
+ nav.b-menu-nav
+ a.b-menu-nav__link(href='#/getStarted')
+ | Get Started
+ a.b-menu-nav__link(href='#/useCases')
+ | Use Cases
+ a.b-menu-nav__link(href='#/openSource')
+ | Open Source
+ a.b-menu-nav__link(href='#/support')
+ | Support
+ .b-account-menu
+ a.language-select.b-account-menu__locale(href='#') #{language}
+ ul.dropdown
+ each lang in languages
+ li: a.b-account-menu__language(href='#' value=lang.value title=lang.title lang=lang.value)
+ span.hide-text #{lang.title}
+ span.screnreder-ignore(role='presentation' aria-hidden='true') #{lang.text}
+ .b-account-menu__user
+ a(href='#/login') Login
+ | /
+ a(href='#/register') Register
+ article#home.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Microsoft Data Gathering
+ p.b-content-header__text
+ | Offers organizations a fast, accurate, cost effective and
+ br
+ | user-friendly way to collect data using mobile devices.
+ .b-page__line
+ .b-content.b-content--line.b-content--main
+ .b-content--main__article
+ p.b-content--main__article__indent
+ | Collecting field data the old-fashioned way, by filling in paper forms, transporting them, to a central
+ | location,
+ | and transcribing them, is slow and cumbersome. It delays the availability of information and can hamper the
+ | ability
+ | to make crucial decisions.
+ p.b-content--main__article__indent
+ | Data collection with a mobile device can dramatically improve the speed and quality of information obtained from
+ | the field. The more time-critical the need for data and the more remote the location, the more organizations
+ | can benefit from a mobile phone based solution.
+ p.b-content--main__article__indent
+ | Microsoft Data Gathering is a comprehensive solution that allows organizations to collect rich field data,
+ | including
+ | GPS location tags and images, using mobile phones and tablets instead of paper forms or laptops.
+ p.b-content--main__article__indent
+ | Because mobile devices can transmit data even from remote locations, the information collected can be available
+ | for analysis in near-real time.
+ .b-content-main__image
+ img(src='../assets/images/collage.jpg'
+ alt='Pictures of MDG in use')
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | How It Works
+ .b-content__col-left
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_1.png'
+ alt='First step of how MDG works. Create a questionnaire')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 1
+ span.b-content__col-left__item__caption__text--blue
| Create a questionnaire on
br
| the survey editor
- li
- a(href='#/getStarted#step2')
- img(src='../resources/images/howitworks_2.png')
- span 2
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_2.png'
+ alt='Second step of how MDG works. Publish the data for data collectors.')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 2
+ span.b-content__col-left__item__caption__text--blue
| Publish the data for data
br
| collectors
- li
- a(href='#/getStarted#step3')
- img(src='../resources/images/howitworks_3.png')
- span 3
- span
+ .b-content__col-left__item
+ .b-content__col-left__item__picture
+ img.b-content__col-left__item__picture--img(src='../assets/images/howitworks_3.png'
+ alt='Third step of how MDG works. Fill in the questionnaire on the device')
+ .b-content__col-left__item__caption
+ span.b-content__col-left__item__caption__number 3
+ span.b-content__col-left__item__caption__text--blue
| Fill in the questionnaire on
br
- | your mobile device
- .col-right
- li
- a(href='#/getStarted#step4')
- img(src='../resources/images/howitworks_4.png')
- span 4
- span
+ | your mobile device
+ .b-content__col-right
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_4.png'
+ alt='Fourth step of how MDG works. Send your data to the server')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 4
+ span.b-content__col-right__item__caption__text--blue
| Send your data to the
br
- | server over the mobile
- br
- | network
- li
- a(href='#/getStarted#step5')
- img(src='../resources/images/howitworks_5.png')
- span 5
- span
+ | server over the mobile network
+ .b-content__col-right__item
+ .b-content__col-right__item__picture
+ img.b-content__col-right__item__picture--img(src='../assets/images/howitworks_5.png'
+ alt='Fifth step of how MDG works. View, map or export your data')
+ .b-content__col-right__item__caption
+ span.b-content__col-right__item__caption__number 5
+ span.b-content__col-right__item__caption__text--blue
| View, map, and export
br
| your data
- section.videoBlock
- div
- p
- i
- | This video is about the use of Microsoft Data Gathering to
- b.bold combat dengue fever
- | in Amazonas State, Brazil.
- iframe.video(src='//www.youtube.com/embed/kP1v9Snz6HA')
- section#benefits
- div
- h2 BENEFITS
- ul
- .col-left
- li
- img(src='../resources/icons/speed.png')
- h3 Speed
- | Compared to using paper forms, mobile solutions cut down delays
- | caused by transportation and manual digitalization of collected
- | data.
- li
- img(src='../resources/icons/cost-efficiency.png')
- h3 Cost efficiency
- | Transportation and logistics costs are reduced, as are the needs
- | for manual data entry and cleaning. There is also a cost of
- | inaction saved with the ability to make critical decisions and
- | react rapidly.
- .col-right
- li
- img(src='../resources/icons/accuracy.png')
- h3 Accuracy
- | Data entry occurs at the point of collection, without needing to
- | transcribe hand-written information. This lowers the frequency of
- | transcription and data entry errors.
- li
- img(src='../resources/icons/usability.png')
- h3 Usability
- | Mobile phones are small, easy to carry, have battery longevity,
- | and enable the capture of rich data such as GPS location tags
- | and images.
- section#awards
- div
- .col-left
- h2 AWARDS
- ul
- li
- b 2012
- | : Microsoft Data Gathering was a Featured Project of the
- br
- | Month for July in the Developer Community Blog.
- li
- b 2011
- | : Microsoft Data Gathering won the Justmeans Social
- br
- | Innovation Award in the category "Philanthropy: Most Strategic
- br
- | Use of Philanthropic Funds".
- li
- | The Justmeans international awards program is considered one of
- | the top honours in the field of sustainability, giving recognition to
- | companies implementing groundbreaking strategies and programs
- | that drive social and environmental innovation.
- .col-right
- h2 ACKNOWLEDGEMENTS
- p
- | We would like to extend our thanks to these organizations, which
- br
- | have been instrumental in getting Microsoft Data Gathering to
- br
- | where it is today.
- ul.markedList
- li
- a(href='http://www.indt.org/?lang=en') Nokia Technology Institute
- li
- a(href='http://www.uonbi.ac.ke/') University of Nairobi
- li
- a(href='http://cmri.shu.edu/') The Center for Mobile Research and Innovation
- li
- a(href='http://www.ayalafoundation.org/') The Ayala Foundation
- ul#footer
- li
- a(href='http://www.nokia.com/global/privacy/privacy/policy/privacy-policy/') Privacy Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/cookie/cookie-policy/') Cookie Policy
- li
- a(href='http://www.nokia.com/global/privacy/privacy/service-terms/nokia-service-terms/') Service Policy
- li
- a(href="https://github.com/nokiadatagathering") Code
- article#getStarted.hidden
- section
- div
- h1 GET STARTED
- p
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title#benefits
+ | Benefits
+ .b-content__col-left
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits1.png'
+ alt='Compared to using paper forms, mobile solutions cut down delays')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Speed
+ p.b-content__col-left__item__caption__text
+ | Compared to using paper forms, mobile solutions cut down delays
+ | caused by transportation and manual digitalization of collected
+ | data.
+ .b-content__col-left__item.b-content__col-left__item--benefits
+ .b-content__col-left__item__icon
+ img.b-content__col-left__item__icon--img(src='../assets/images/benefits2.png'
+ alt='Transportation and logistics costs are reduced')
+ .b-content__col-left__item__caption
+ h3.b-content__col-left__item__caption__title Cost efficiency
+ p.b-content__col-left__item__caption__text
+ | Transportation and logistics costs are reduced, as are the needs
+ | for manual data entry and cleaning. There is also a cost of
+ | inaction saved with the ability to make critical decisions and
+ | react rapidly.
+ | data.
+ .b-content__col-right
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits3.png'
+ alt='Data entry occurs at the point of collection')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Accuracy
+ p.b-content__col-right__item__caption__text
+ | Data entry occurs at the point of collection, without needing to
+ | transcribe hand-written information. This lowers the frequency of
+ | transcription and data entry errors.
+ .b-content__col-right__item.b-content__col-right__item--benefits
+ .b-content__col-right__item__icon
+ img.b-content__col-right__item__icon--img(src='../assets/images/benefits4.png'
+ alt='Mobile devices are easy to carry')
+ .b-content__col-right__item__caption
+ h3.b-content__col-right__item__caption__title Usability
+ p.b-content__col-right__item__caption__text
+ | Mobile phones are small, easy to carry, have battery longevity,
+ | and enable the capture of rich data such as GPS location tags
+ | and images.
+ .b-page__line
+ .b-content.b-content-line
+ .b-content__col-left
+ h2.b-content-title Awards
+ p.b-content__paragraph
+ b 2012
+ | Microsoft Data Gathering was a Featured Project of the
+ br
+ | Month for July in the Developer Community Blog.
+ p.b-content__paragraph
+ b 2011
+ | Microsoft Data Gathering won the Justmeans Social
+ br
+ | Innovation Award in the category "Philanthropy: Most Strategic
+ br
+ | Use of Philanthropic Funds".
+ p.b-content__paragraph
+ | The Justmeans international awards program is considered one of
+ br
+ | the top honours in the field of sustainability, giving recognition to
+ br
+ | companies implementing groundbreaking strategies and programs
+ br
+ | that drive social and environmental innovation.
+ br
+ .b-content__col-right
+ .b-content__col-right__item
+ h2.b-content-title Acknowledgements
+ p.b-content__paragraph
+ | We would like to extend our thanks to these organizations, which
+ br
+ | have been instrumental in getting Microsoft Data Gathering to
+ br
+ | where it is today.
+ .b-content--acknowledge-list
+ a.b-content--acknowledge-list__link(href='http://www.indt.org/?lang=en', target='_blank') Nokia Technology Institute
+ a.b-content--acknowledge-list__link(href='http://www.uonbi.ac.ke/', target='_blank') University of Nairobi
+ a.b-content--acknowledge-list__link(href='http://cmri.shu.edu/', target='_blank') The Center for Mobile Research and Innovation
+ a.b-content--acknowledge-list__link(href='http://www.ayalafoundation.org/', target='_blank') The Ayala Foundation
+
+ article#getStarted.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Get Started
+ p.b-content-header__text
| If you have your own server and wish to migrate your data
- | to this release of MDG the tool to do that is available
- a(href="http://github.com/nokiadatagathering/ndg-migration") here
- ul
- li(data-step='step1')
- img(src='../resources/images/getstarted_step1.png')
- h2 Step 1: Register to the Microsoft Data Gathering Playground Server
- p
- | The first thing you need to do is to fill in the user registration form and create
- | an account on the Microsoft Data Gathering playground server. You can do this by
- | clicking
- a(href='#/register') register on the homepage
- | .
- li(data-step='step2')
- img(src='../resources/images/getstarted_step2.png')
- h2 Step 2: Create a survey
- p
- | After you've confirmed your account and logged in to the server, you can start
- | writing your own questionnaire using the survey editor. You can choose different
- | question types, set default answers or limits and even use skip logic to write your
- | questionnaire.
- li(data-step='step3')
- img(src='../resources/images/getstarted_step3.png')
- h2 Step 3: Download the Microsoft Data Gathering mobile application
- p
- | Download and install one of the Microsoft Data Gathering mobile applications.
- p
- i
- | Please note that until the branding change is completed please use the server https://nokiadatagathering.net in the app settings.
- | Apps marked as 'New!' have been updated to use the https://microsoftdatagathering.net server and those marked as 'To be updated' still
- | default to https://nokiadatagathering.net
- p
- | Download the
- a(href="http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848") Windows Phone app
- |.
- img(src="../resources/icons/1-new.png")
- em New!
- br
- | Download the
- a(href="https://nokiadatagathering.net/ndg-ota/client/ndg.jad") Java app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- br
- | Download the
- a(href="http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42") Windows Tablet app
- |.
- img(src="../resources/icons/1-to-be-updated.png")
- em To be updated
- li(data-step='step4')
- img(src='../resources/images/getstarted_step4.png')
- h2 Step 4: Add users and make your survey available to them
- p
- | You can publish your questionnaire to your field data collectors by adding them to
- | your main account in the Users section, organizing them into groups and giving
- | them different access permissions. You can make your questionnaire available to
- | as many users as you like. You can also send SMS notifications to your user groups.
- li(data-step='step5')
- img(src='../resources/images/getstarted_step5.png')
- h2 Step 5: Fill in the survey and send your results on your mobile device
- p
- | Open the Microsoft Data Gathering app you downloaded onto your mobile device
- | in Step 3, and login with your user credentials. The surveys that were made available
- | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
- | result by entering the requested data in the blank fields.
- p
- | You can send your results back to the server immediately, or save them on the
- | phone to send later.
- li(data-step='step6')
- img(src='../resources/images/getstarted_step6.png')
- h2 Step 6: View and export your results
- p
- | Go back to your Playground Server account and take a look at all the results you've received.
- | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
- | your data in XLS or KML formats for further data analysis.
- article#useCases.hidden
- section
- div
- h1 USE CASES
- ul
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Uganda - FAO
- img(src='../resources/images/usecase_1.jpg')
- .col-left
- p
- | As part of a regional initiative to reduce risk
- | of drought in Eastern Africa with Early Warning Systems,
- | the Food and Agriculture Organization of the United Nations
- | (FAO) in Uganda is collecting geo-spatial and qualitative
- | data about community animal health workers and providers
- | of veterinary services and shops, among the rural pastoral
- | communities of the Karamoja region.
- p
- | The move from paper-based questionnaires to Microsoft Data Gathering
- | has allowed more efficient operations by reducing the time to produce
- | Drought Bulletins by 50%.
- p
- | Furthermore, the project has enhanced participation of the community
- | and the local government, and is supporting the capacity of the
- | Department of Meteorology in issuing monthly weather updates
- | for Karamoja.
- p
- | FAO's efforts were recognized by the World Bank in recent study
- | on mobile applications for the agriculture and forestry sector,
- | published in December 2013.
- .col-right
- blockquote
+ br
+ | to this release of MDG the tool to do that is available
+ a.b-content-header__text__link(href='http://github.com/nokiadatagathering/ndg-migration', target='_blank') here
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step1.png'
+ alt='Register to the Microsoft Data Gathering Playground Server')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 1
+ | Register to the Microsoft Data Gathering Playground Server
+ p.b-step__right__paragraph
+ | The first thing you need to do is to fill in the user registration form and create
+ br
+ | an account on the Microsoft Data Gathering playground server. You can do this by
+ br
+ | clicking
+ a.b-step__right__paragraph__link(href='#/register') register on the homepage
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step2.png'
+ alt='Create a survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 2
+ | Create a survey
+ p.b-step__right__paragraph
+ | After you've confirmed your account and logged in to the server, you can start
+ br
+ | writing your own questionnaire using the survey editor. You can choose different
+ br
+ | question types, set default answers or limits and even use skip logic to write your
+ br
+ | questionnaire.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step3.png'
+ alt='Download the MDG mobile application')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 3
+ | Download the Microsoft Data Gathering mobile application
+ p.b-step__right__paragraph
+ | Download and install one of the Microsoft Data Gathering mobile applications.
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://www.windowsphone.com/en-us/store/app/nokia-data-gathering/a2bd7f51-6c7f-48d4-9fa7-12b35c550848', target='_blank')
+ | Windows Phone app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='https://nokiadatagathering.net/ndg-ota/client/ndg.jad', target='_blank')
+ | Java app
+ p.b-step__right__paragraph
+ | Download the
+ a.b-step__right__paragraph__link(href='http://apps.microsoft.com/windows/app/nokia-data-gathering/4780fc68-fc8b-4db4-8cf7-110fe07dac42', target='_blank')
+ | Windows Tablet app
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step4.png'
+ alt='Add users')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 4
+ | Add users and make your survey available to them
+ p.b-step__right__paragraph
+ | You can publish your questionnaire to your field data collectors by adding them to
+ br
+ | your main account in the Users section, organizing them into groups and giving
+ br
+ | them different access permissions. You can make your questionnaire available to
+ br
+ | as many users as you like. You can also send SMS notifications to your user groups.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step5.png'
+ alt='Fill in the survey')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 5
+ | Fill in the survey and send your results on your mobile device
+ p.b-step__right__paragraph
+ | Open the Microsoft Data Gathering app you downloaded onto your mobile device
+ br
+ | in Step 3, and login with your user credentials. The surveys that were made available
+ br
+ | to you in Step 4 will be listed on the app. Just open the survey you want and create a new
+ br
+ | result by entering the requested data in the blank fields.
+ p.b-step__right__paragraph
+ | You can send your results back to the server immediately, or save them on the
+ | phone to send later.
+ .b-page__line
+ .b-content
+ .b-step
+ .b-step__left
+ img.b-step__left__image(src='../assets/images/getstarted_step6.png'
+ alt='View and Export')
+ .b-step__right
+ h2.b-step__right__title
+ span.b-step__right__title__count Step 6
+ | View and export your results
+ p.b-step__right__paragraph
+ | Go back to your Playground Server account and take a look at all the results you've received.
+ br
+ | You can map your geo-tagged data on Microsoft Maps, look at trends as simple graphs, or export
+ br
+ | your data in XLS or KML formats for further data analysis.
+
+
+ article#useCases.hidden
+ .b-content-header
+ h1.b-content-header__title
+ | Use Cases
+ p.b-content-header__text
+ | A Real Solution to Real Problems
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities
+ br
+ | in Uganda - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | As part of a regional initiative to reduce risk
+ | of drought in Eastern Africa with Early Warning Systems,
+ | the Food and Agriculture Organization of the United Nations
+ | (FAO) in Uganda is collecting geo-spatial and qualitative
+ | data about community animal health workers and providers
+ | of veterinary services and shops, among the rural pastoral
+ | communities of the Karamoja region.
+ p.b-content__paragraph
+ | The move from paper-based questionnaires to Microsoft Data Gathering
+ | has allowed more efficient operations by reducing the time to produce
+ | Drought Bulletins by 50%.
+ p.b-content__paragraph
+ | Furthermore, the project has enhanced participation of the community
+ | and the local government, and is supporting the capacity of the
+ | Department of Meteorology in issuing monthly weather updates
+ | for Karamoja.
+ p.b-content__paragraph
+ | FAO's efforts were recognized by the World Bank in recent study
+ | on mobile applications for the agriculture and forestry sector,
+ | published in December 2013.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_1.jpg'
+ alt='FAO in Eastern Africa')
+ blockquote.b-content__col-right__item__photo-caption
| "We strive to improve the humanitarian situation by increasing
| the coping capacities of populations vulnerable to recurrent
| drought hazards and their effects through the provision of
| multi-sectorial assistance in the Horn of Africa.
| Microsoft Data Gathering is one of the most convenient
| and cost-effective tools for collecting data from remote areas."
- p
- b Bernard 0. Mwesigwa
- | ,
- | Programme Officer, M&E/Data Management, FAO Uganda
- li
- h2.nptlHeader Giving children the right to an identity in Kenya - Plan
- img(src='../resources/images/usecase_2.jpg')
- .col-left
- p
- | An official identity is the foundation for child rights,
- | child protection and later child's ticket to services such as
- | secondary schooling. Official identity is obtained by parents
- | through birth registration.
- p
- | Today only five out of ten children in Kenya are registered.
- p
- | Poor accessibility to offices and officers, slow processing
- | of both birth notifications and certificates, and costs involved
- | together with a lack of incentives for parents to register their
- | children contribute to the current situation.
- p
- | Plan together with the Ministry of Foreign Affairs in Finland is
- | running a universal birth registration project in the Kwale district
- | using Microsoft Data Gathering that has resulted in dramatically increased
- | registration rates (from 30 to 68%).
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Bernard O. Mwesigwa,
+ br
+ | Programme Officer, M&E/Data Management, FAO Uganda
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Giving children the right to an identity in Kenya - Plan
+ .b-content__col-left
+ p.b-content__paragraph
+ | An official identity is the foundation for child rights,
+ | child protection and later child's ticket to services such as
+ | secondary schooling. Official identity is obtained by parents
+ | through birth registration.
+ p.b-content__paragraph
+ | Today only five out of ten children in Kenya are registered.
+ p.b-content__paragraph
+ | Poor accessibility to offices and officers, slow processing
+ | of both birth notifications and certificates, and costs involved
+ | together with a lack of incentives for parents to register their
+ | children contribute to the current situation.
+ p.b-content__paragraph
+ | Plan together with the Ministry of Foreign Affairs in Finland is
+ | running a universal birth registration project in the Kwale district
+ | using Microsoft Data Gathering that has resulted in dramatically increased
+ | registration rates (from 30 to 68%).
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_2.jpg'
+ alt='Plan in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "The use of ICTs including mobile technology has great potential to support
| communities and governments in civil registration. Right to citizenship and
| identity are fundamental prerequisites in development."
- p
- b Mika Välitalo
- | , Manager - ICT for Development, Plan Finland
- li
- h2.nptlHeader
- | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
- img(src='../resources/images/usecase_3.jpg')
- .col-left
- p
- | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
- | Microsoft Data Gathering to help fight the spread of dengue fever
- | and increase the effectiveness of treatment.
- p
- | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
- | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
- b.bold 93% cut
- | in the number of cases.
- p
- | Microsoft Data Gathering helped the health workers to do their jobs, by making their
- | reports both faster and more accurate.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Mika Välitalo,
+ br
+ | Manager - ICT for Development, Plan Finland
+ .b-page__line
+ .b-content.b-content--line
+ h2.b-content-title
+ | Controlling dengue fever - Amazonas State Health Department and Health Vigilance Foundation
+ .b-content__col-left
+ p.b-content__paragraph
+ | Amazonas State Health Department (SUSAM) and the Health Vigilance Foundation (FVS) leverage
+ | Microsoft Data Gathering to help fight the spread of dengue fever
+ | and increase the effectiveness of treatment.
+ p.b-content__paragraph
+ | During 2008,3S22 cases of the dengue were registered in Manaus. With the help of
+ | Microsoft Data Gathering, during 2009 the number of cases was reduced dramatically to just 245 - a
+ bold 93% cut
+ | in the number of cases.
+ p.b-content__paragraph
+ | Microsoft Data Gathering helped the health workers to do their jobs, by making their
+ | reports both faster and more accurate.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_3.jpg'
+ alt='Malaria in Amazonas')
+ blockquote.b-content__col-right__item__photo-caption
| "Microsofts technology will help us to more rapidly identify and investigate the results
| and symptoms of the surveyed population. The transmission of data immediately after
| the interviews improves agility, increases public safety and avoids manual filling-in of forms."
- p
- b Agnaldo Costa
- | , State Health Secretary of Amazonas State
- li
- h2.nptlHeader Reducing the risk to drought in vulnerable communities in Kenya - FAO
- img(src='../resources/images/usecase_4.jpg')
- .col-left
- p
- | Accurate, timely and geo-tagged data on water points and sources is
- | an important basis to reduce the impact of drought among vulnerable communities
- | living in recurrent drought Food Agriculture Organization (FAO) is working along
- | with their NGO partners in Greater Horn of Africa to alleviate the risk
- | to drought among pastoralist communities.
- p
- | Microsoft Data Gathering is bringing mobile technology to water point surveys,
- | reducing the amount of effort, time and cost to collect the information and
- | enabling proper and timely preparedness activities.
- p
- | To date information from over 500 points has been collected - and more into come.
- | The collected information is also published in Disaster Risk Reduction website
- | for public good.
- .col-right
- blockquote
+ p.b-content__col-right__item__photo-location
+ | Agnaldo Costa,
+ br
+ | State Health Secretary of Amazonas State
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Reducing the risk to drought in vulnerable communities in Kenya - FAO
+ .b-content__col-left
+ p.b-content__paragraph
+ | Accurate, timely and geo-tagged data on water points and sources is
+ | an important basis to reduce the impact of drought among vulnerable communities
+ | living in recurrent drought Food Agriculture Organization (FAO) is working along
+ | with their NGO partners in Greater Horn of Africa to alleviate the risk
+ | to drought among pastoralist communities.
+ p.b-content__paragraph
+ | Microsoft Data Gathering is bringing mobile technology to water point surveys,
+ | reducing the amount of effort, time and cost to collect the information and
+ | enabling proper and timely preparedness activities.
+ p.b-content__paragraph
+ | To date information from over 500 points has been collected - and more into come.
+ | The collected information is also published in Disaster Risk Reduction website
+ | for public good.
+ .b-content__col-right
+ .b-content__col-right__item
+ img.b-content__col-right__item__photo(src='../assets/images/usecase_4.jpg'
+ alt='Vulnerable communities in Kenya')
+ blockquote.b-content__col-right__item__photo-caption
| "A huge burden is put on organizations, especially small scale NG05,
| to collect, capture and process data timely for response and planning with
| no supported technology tools. Microsoft Data Gathering provides a simple and
| effective field solution with a centralized data administration system."
- p
- b Phillip Fong
- | , Regional Data and Information Coordinator, FAO
- article#openSource.hidden
- section
- div
- h1 OPEN SOURCE
- h2.nptlHeader Microsoft Data Gathering is an Open Source solution
- .col-left
- p
- | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
- | making the source code available to anyone for download, deployment and development.
- | There are no licensing costs for using the software, the code base is public,
- | and development occurs in a collaborative and community-driven manner.
- p
- | The open source model also empowers universities and local developers to participate
- | in creating tools and services on top of the core solution, helping to build local capacity.
- | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
- | technology adoption.
- p
- | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
- | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
- | of covered software.
- .col-right
- p
- | You can read the BSD license terms
- a(href='http://opensource.org/licenses/BSD-2-Clause') here
- | .
- p
- | The Microsoft Data Gathering Playground Server and the Java client
- | are both licensed under the GNU Lesser General Public License,
- a(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html') LGPL
- | which allows developers and companies to use and integrate the software into
- | their own (even proprietary) software without being required to release the source
- | code of their own software-parts.
- p
- | Microsoft Data Gathering complies with Open Rosa standards for data collection.
- p
- | The Microsoft Data Gathering source code and documentation repository is at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- section
- div
- h1 GET INVOLVED
- p
- | Here's how you can be a part of the Microsoft Data Gathering
- | developer and user community:
- ul.markedList
- li
- a(href='https://github.com/nokiadatagathering') Get the source code
- | and develop
- | Microsoft Data Gathering
- li
- | Become a Microsoft Data Gathering service partner
- li
- | Help us plan future software releases
- li
- | Translate the Microsoft Data Gathering application into your language
- article#support.hidden
- section
- div
- h1 SUPPORT
- p How to get support:
- ul.markedList
- li
- a(href='/docs') Read the Microsoft Data Gathering user guide and documentation
- li
- | Access the
- a(href='https://github.com/nokiadatagathering') Microsoft Data Gathering code repository
- li
- | Send an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- h1 FREQUENTLY ASKED QUESTIONS
- ul.questionList
- .col-left
- li
- h2.blueHeader 1) What are the benefits of mobile data collection?
- p
+ p.b-content__col-right__item__photo-location
+ | Phillip Fong,
+ br
+ | Regional Data and Information Coordinator, FAO
+ article#openSource.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Open Source
+ p.b-content-header__text
+ | Microsoft Data Gathering is an Open Source solution
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ p.b-content__paragraph
+ | We launched the open source version of Microsoft Data Gathering on 30 July 2010,
+ | making the source code available to anyone for download, deployment and development.
+ | There are no licensing costs for using the software, the code base is public,
+ | and development occurs in a collaborative and community-driven manner.
+ p.b-content__paragraph
+ | The open source model also empowers universities and local developers to participate
+ | in creating tools and services on top of the core solution, helping to build local capacity.
+ | This ultimately promotes innovation and entrepreneurship, and increases the sustainability of
+ | technology adoption.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Windows Phone client is licensed under Berkely Software Distribution BSD,
+ | a family of permissive free software licenses, imposing minimal restrictions on the redistribution
+ | of covered software.
+ .b-content__col-right
+ .b-content__col-right__item
+ p.b-content__paragraph
+ | You can read the BSD license terms
+ a.b-content__paragraph__link(href='http://opensource.org/licenses/BSD-2-Clause', target='_blank') here
+ | .
+ p.b-content__paragraph
+ | The Microsoft Data Gathering Playground Server and the Java client
+ | are both licensed under the GNU Lesser General Public License,
+ a.b-content__paragraph__link(href='https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html', target='_blank') LGPL
+ | which allows developers and companies to use and integrate the software into
+ | their own (even proprietary) software without being required to release the source
+ | code of their own software-parts.
+ p.b-content__paragraph
+ | Microsoft Data Gathering complies with Open Rosa standards for data collection.
+ p.b-content__paragraph
+ | The Microsoft Data Gathering source code and documentation repository is at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') https://github.com/nokiadatagathering
+ | .
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | Get Involved
+ p.b-content__paragraph
+ | Here's how you can be a part of the Microsoft Data Gathering
+ | developer and user community:
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering', target='_blank') Get the source code
+ | and develop
+ | Microsoft Data Gathering
+ p.b-content__paragraph.b-content__paragraph--item
+ | Become a Microsoft Data Gathering service partner
+ p.b-content__paragraph.b-content__paragraph--item
+ | Help us plan future software releases
+ p.b-content__paragraph.b-content__paragraph--item
+ | Translate the Microsoft Data Gathering application into your language
+
+ article#support.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Support
+ p.b-content-header__text
+ | Microsoft Data Gathering support page
+ .b-page__line
+ .b-content
+ .b-content__col-left
+ h2.b-content-title
+ | How to get support
+ p.b-content__paragraph.b-content__paragraph--item
+ a.b-content__paragraph__link(href='/docs')
+ | Read the Microsoft Data Gathering user guide and
+ | documentation
+ p.b-content__paragraph.b-content__paragraph--item
+ | Access the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering',, target='_blank')
+ | Microsoft Data Gathering code repository
+ p.b-content__paragraph.b-content__paragraph--item
+ | Send an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com')
+ | mdgspprt@microsoft.com
+ .b-page__line
+ .b-content
+ h2.b-content-title
+ | Frequently Asked Questions
+ .b-content__col-left
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 1
+ | What are the benefits of mobile data collection?
+ p.b-content__paragraph
| The key benefits of mobile data collection are speed,
- | accuracy, cost efficiency and usability. Please see the
- a(href='#/home') benefits section on the homepage
+ | accuracy, cost efficiency and usability. Please see the
+ a.b-content__paragraph__link(href='#') benefits section on the homepage
| for more on benefits.
- li
- h2.blueHeader 2) How is Microsoft Data Gathering used in the field?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 2
+ | How is Microsoft Data Gathering used in the field?
+ p.b-content__paragraph
| When time is of the essence, rapidly available, accurate information
| is critical for sound decision-making in any kind of organization.
- p
+ p.b-content__paragraph
| For example: In Brazil, the Amazonas State Health Department and
| the Health Vigilance Foundation have used Microsoft Data Gathering
| to monitor and control the spread of dengue fever.
- p
+ p.b-content__paragraph
| In East Africa, the Food and Agriculture Organization has conducted
| water and livestock surveys to reduce the risk of vulnerable
| communities to drought.
- p
+ p.b-content__paragraph
| In Kenya, Plan Finland has worked with the Kenyan government
| to register births using Microsoft Data Gathering.
- p
- | For more on use cases, please see the
- a(href='#') use cases page
- | .
- li
- h2.blueHeader 3) Does it cost anything to use Microsoft Data Gathering?
- p
- | Nokia Data Gathering is an open source solution so there are no licensing fees
- | or charges for using the software. For more on open source, please see the
- a(href='#/openSource') open source page
- | .
- p
+ p.b-content__paragraph
+ | For more on use cases, please see the
+ a.b-content__paragraph__link(href='#/useCases') use cases page
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 3
+ | Does it cost anything to use Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Microsoft Data Gathering is an open source solution so there are no licensing fees
+ | or charges for using the software. For more on open source, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ p.b-content__paragraph
| Of course, there are costs associated with the hardware
| (mobile phones, servers, SIM cards) necessary for using
- | Nokia Data Gathering, as well as the implementation of a data collection project.
+ | Microsoft Data Gathering, as well as the implementation of a data collection project.
| These costs must be scoped and borne by the organization using the solution.
- li
- h2.blueHeader 4) What are the license terms for Microsoft Data Gathering?
- p
+ .b-content__col-left__item
+ h3.b-content__col-left__item__title
+ span.b-content__col-left__item__title-number
+ | 4
+ | What are the license terms for Microsoft Data Gathering?
+ p.b-content__paragraph
| The Microsoft Data Gathering Windows Phone client is licensed under the open source
| Berkeley Software Distribution (BSD) License family. The Microsoft
| Data Gathering Playground Server and the Java client are both licensed under
| the GNU Lesser General Public License (ILGPL).Microsoft Data Gathering complies with
| the standards of the OpenROSA Consortium on mobile data collection.
- p
- | For more on our licenses, please see the
- a(href='#/openSource') open source page
- | .
- .col-right
- li
- h2.blueHeader 5) Which devices are compatible with Microsoft Data Gathering?
- p
+ p.b-content__paragraph
+ | For more on our licenses, please see the
+ a.b-content__paragraph__link(href='#/openSource') open source page
+ .b-content__col-right
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 5
+ | Which devices are compatible with Microsoft Data Gathering?
+ p.b-content__paragraph
| The Windows Phone version of the Microsft Data Gathering mobile client is
| a Silverlight application for Windows Phone 7 and a Cordova/Sensa Touch application for
| Windows Phone 8. The Windows Tablet version runs on Windows RT devices. The Java application runs
| on Symbian and Nokia OS devices.
- p
+ p.b-content__paragraph
| If you have a specific query about device compatibility, please let
- | us know by sending an email to
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | .
- li
- h2.blueHeader 6) Where can I find the Microsoft Data Gathering source code?
- p
- | You can get the source code at
- a(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
- | .
- li
- h2.blueHeader 7) How can I host my own server data?
- p
+ | us know by sending an email to
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com' ) mdgspprt@microsoft.com
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 6
+ | Where can I find the Microsoft Data Gathering source code?
+ p.b-content__paragraph
+ | You can get the source code at
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering') https://github.com/nokiadatagathering
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 7
+ | How can I host my own server data?
+ p.b-content__paragraph
| The instructions for setting up and hosting your own
- | server are contained in the
- a(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
- | .
- li
- h2.blueHeader 8) What are the previous versions of Microsoft Data Gathering?
- p
- | Please see our
- a(href='#') release archive
- | . for more information on previous releases of
- | Microsoft Data Gathering.
- li
- h2.blueHeader 9) Can students work on Microsoft Data Gathering?
+ | server are contained in the
+ a.b-content__paragraph__link(href='https://github.com/nokiadatagathering/ndgdocs/blob/master/README') README
+ | .
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 8
+ | What are the previous versions of Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Please see our
+ a.b-content__paragraph__link(href='#') release archive
+ | for more information on previous releases of
+ | Microsoft Data Gathering..
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 9
+ | Can students work on Microsoft Data Gathering?
+ p.b-content__paragraph
+ | Yes. Please see the description of our
+ a.b-content__paragraph__link(href='#') University Collaboration Program
+ .b-content__col-right__item
+ h3.b-content__col-right__item__title
+ span.b-content__col-right__item__title-number
+ | 10
+ | Can I translate the Microsoft Data Gathering mobile client into my language?
+ p.b-content__paragraph
+ | Yes. Please get in touch with us at
+ a.b-content__paragraph__link(href='mailto:mdgspprt@microsoft.com', target='_blank') mdgspprt@microsoft.com
+ | and work with us to provide a translation of
+ | the software in your language. We will then push this out
+ | and make the language version available to all users.
+
+ article#login.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Login
+ p.b-content-header__text
+ | Log in to the server below
+ .b-page__line
+ .b-content
+ form.e-form
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", placeholder="Enter your username...", tabindex="0")
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", placeholder="Enter your password...")
+ .error
+ button.e-form__button(type="submit" title='Login') Login
+ p.b-content__paragraph
+ a.b-content__paragraph__link(href="#/forgotPassword") Forgot your password?
+ p.b-content__paragraph
+ | Don’t have an account?
+ a.b-content__paragraph__link(href="#/register") Register here
+
+ article#register.hidden
+ .b-page__line
+ .b-content-header
+ h1.b-content-header__title
+ | Register
+ p.b-content-header__text
+ | Create an account below
+ .b-page__line
+ .b-content
+ form.e-form(action='signup', method='POST', autocomplete="off")
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='firstName') First Name
+ input.e-form__field#firstName(type="text", name="firstName", data-validation='len(2, 60);', placeholder="Enter your First Name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label(for='lastName') Last name
+ input.e-form__field#lastName(type="text", name="lastName", data-validation='len(2, 60);', placeholder="Enter your Last name...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='username') Username
+ input.e-form__field#username(type="text", name="username", data-validation='len(5,13);isAlpha;uniqeUsrName;', placeholder="Enter your Username...")
+ .error
+ span(data-validation-msg='uniqeUsrName')
+ | This username is already used.
+ span(data-validation-msg='len')
+ | This field must have at least 5 and cannot be longer than 13 characters.
+ span(data-validation-msg='isAlpha')
+ | Nickname can contain only numbers, periods and Latin letters.
+ .b-form-row__col
+ label.e-form__label(for='email') Email
+ input.e-form__field#email(type="email", name="email", data-validation='isEmail;', placeholder="Enter your Email...")
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='password') Password
+ input.e-form__field#password(type="password", name="password", data-validation='len(8,20);', placeholder="Enter your Password...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ .b-form-row__col
+ label.e-form__label(for='confirmpass') Confirm Password
+ input.e-form__field#confirmpass(type="password", name="confirmpass", data-validation='isMatch(password)', placeholder="Confirm your Password...")
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='phone') Phone Number
+ input.e-form__field#phone(type="text", name="phone", data-validation='len(10,15);isNumber;', placeholder="Enter your Phone Number...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 10 and cannot be longer than 15 characters.
+ span(data-validation-msg='isNumber')
+ | This is not a valid phone number.
+ .b-form-row__col
+ label.e-form__label(for='company') Company
+ input.e-form__field#company(type="text", name="company", data-validation='len(2, 60);', placeholder="Enter your Company...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row
+ .b-form-row__col
+ label.e-form__label(for='industry') Industry
+ input.e-form__field#industry(type="text", name="industry", data-validation='len(2, 60);', placeholder="Enter your industry...")
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 2 and cannot be longer than 60 characters.
+ .b-form-row__col
+ label.e-form__label Country
+ .e-select
+ label.e-select__label(for='country')
+ select.e-select__box#country(placeholder='Country', name='country', data-validation='len(1);')
+ option(value='') Country
+ each country in countries
+ option(value=country) #{country}
+ .error
+ span(data-validation-msg='len')
+ | This field cannot be blank.
+
+ button.e-form__button.e-form__button--offset(type="submit") Create Account
+
+ article#forgotPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-forgot-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | FORGOT YOUR PASSWORD?
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ .msg.hidden
+ p If you have entered a valid email, please check it for further instructions.
+ form.e-form(method='POST')
p
- | Yes. Please see the description of our
- a(href='#') University Collaboration Program
- | .
- li
- h2.blueHeader 10) Can I translate the Microsoft Data Gathering mobile client into my language?
+ | Please enter your username and email to reset your password.
p
- | Yes. Please get in touch with us at
- a(href='mdgspprt@microsoft.com') mdgspprt@microsoft.com
- | and work with us to provide a translation of
- | the software in your language. We will then push this out
- | and make the language version available to all users.
- article#login.hidden
- section
- div
- h1 LOGIN
- form
- label.col-left
- input(type='text', name='username', placeholder='Enter your username...')
- label.col-right
- input(type='password', name='password', placeholder='Enter your password...')
- .error
- a(href='#/forgotPassword') Forgot your password?
- button(type='submit') Login
- article#register.hidden
- section
- div
- h1 REGISTER
- form(action='signup', met='post', autocomplete="off")
- label.col-left
- input(type='text', placeholder='First name', name='firstName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- input(type='text', placeholder='Last name', name='lastName', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 characters.
- label.col-left
- input(type='text', placeholder='Username', name='username', data-validation='len(5,13);isAlpha;uniqeUsrName;')
- .error
- span(data-validation-msg='uniqeUsrName')
- | This username is already used.
- span(data-validation-msg='len')
- | This field must have at least 5 and cannot be longer than 13 characters.
- span(data-validation-msg='isAlpha')
- | Nickname can contain only numbers, periods and Latin letters.
- label.col-right
- input(type='text', placeholder='Email', name='email', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- label.col-left
- input(type='password', placeholder='Password', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm password', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- label.col-left
- input(type='text', placeholder='Phone number', name='phone', data-validation='len(10,15);isNumber;')
- .error
- span(data-validation-msg='len')
- | This field must have at least 10 and cannot be longer than 15 characters.
- span(data-validation-msg='isNumber')
- | This is not a valid phone number.
- label.col-right
- input(type='text', placeholder='Company', name='company', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-left
- input(type='text', placeholder='Industry', name='industry', data-validation='len(2, 60);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 2 and cannot be longer than 60 characters.
- label.col-right
- select(placeholder='Country', name='country', data-validation='len(1);')
- option(value='') Country
- each country in countries
- option(value=country) #{country}
- .error
- span(data-validation-msg='len')
- | This field cannot be blank.
- button(type='submit') Create Account
- article#forgotPassword.hidden
- section
- div
- h1 FORGOT YOUR PASSWORD?
- .msg.hidden
- p If you have entered a valid email, please check it for further instructions.
- form
- p
- | Please enter your username and email to reset your password.
- p
- | If you forgot your username, please enter your email
- | only and we will send all usernames related to this email.
- label.col-left
- input(type='text', name='username', placeholder='Username...')
- label.col-right
- input(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
- .error
- span(data-validation-msg='isEmail')
- | This is not a valid email.
- button(type='submit') Proceed
- article#resetPassword.hidden
- section
- div
- h1 RESET PASSWORD
- form
- label.col-left
- input(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
- .error
- span(data-validation-msg='len')
- | This field must have at least 8 and cannot be longer than 20 characters.
- label.col-right
- input(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
- .error
- span(data-validation-msg='isMatch')
- | Passwords do not match
- button(type='submit') Apply
- article#resetPasswordError.hidden
- section
- div
- h1 RESET PASSWORD
- .msg
- p Password reset token is invalid or has expired.
-
- .modal.success-registration.hidden
- .overlay
- .window
- .window-body
- div You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
- input(type="button" value="OK")
+ | If you forgot your username, please enter your email
+ | only and we will send all usernames related to this email.
+ label.e-form__label(for='username_forgot-pass')
+ input.e-form__field#username_forgot-pass(type='text', name='username', placeholder='Username...')
+ label.e-form__label(for='email_forgot-pass')
+ input.e-form__field#email_forgot-pass(type='text', name='email', placeholder='Email...', data-validation='isEmail;')
+ .error
+ span(data-validation-msg='isEmail')
+ | This is not a valid email.
+ button.e-form__button(type='submit') Proceed
+ article#resetPassword.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/login')
+ .b-modal-window__main-block__body
+ form.e-form(method='POST', autocomplete="off")
+ label.e-form__label(for='password_reset-pass')
+ input.e-form__field#password_reset-pass(type='password', placeholder='Enter new password...', name='password', data-validation='len(8,20);')
+ .error
+ span(data-validation-msg='len')
+ | This field must have at least 8 and cannot be longer than 20 characters.
+ label.e-form__label(for='confirmpass_reset-pass')
+ input.e-form__field#confirmpass_reset-pass(type='password', placeholder='Confirm new password...', name='confirmpass', data-validation='isMatch(password)')
+ .error
+ span(data-validation-msg='isMatch')
+ | Passwords do not match
+ button.e-form__button(type='submit') Apply
+ article#resetPasswordError.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-reset-pass-error
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | RESET PASSWORD
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href='#/resetPassword')
+ .b-modal-window__main-block__body
+ .modal.success-registration.hidden
+ .msg
+ p Password reset token is invalid or has expired.
+
+ article#successRegistration.hidden
+ .b-modal-window
+ .b-modal-window__main-block.b-success-registration
+ .b-modal-window__main-block__header
+ h2.b-modal-window__main-block__header--title
+ | Successfully Registration
+ span.b-modal-window__main-block__header--icon-close()
+ a.fa.fa-times(href="#/register")
+ .b-modal-window__main-block__body
+ .modal.success-registration
+ .msg
+ p You have successfully created an account on the server! Please check your email to continue with the registration process. If you cannot find the email in your inbox then please check your Spam folder
+ button.b-success-registration__btn(type="button")
+ a(href='#/login')
+ span.fa.fa-check.b-success-registration__btn--icon
+ span() OK
+ .b-page__footer
+ ul.b-page__footer__box
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/policy/privacy-policy/')
+ | Privacy Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/cookie/cookie-policy/')
+ | Cookie Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='http://www.microsoft.com/en/mobile/privacy/privacy/service-terms/service-terms/')
+ | Service Policy
+ li.b-page__footer__box__item
+ a.b-page__footer__box__item__link(target='_blank', href='https://github.com/nokiadatagathering')
+ | Code
diff --git a/app/views/index-development.jade b/app/views/index-development.jade
deleted file mode 100644
index 4ff4b07..0000000
--- a/app/views/index-development.jade
+++ /dev/null
@@ -1,53 +0,0 @@
-!!!
-html(manifest="mdgcache.manifest")
- head
- title= title
- meta(charset='utf-8')
- meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
- meta(name='viewport', content='initial-scale=1.0')
-
- link(rel='stylesheet/less', type='text/css', href='/resources/stylesheets/styles.less')
- link(rel='stylesheet', href='bower_components/jquery-ui/themes/smoothness/jquery-ui.css')
- link(rel='stylesheet', href='//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css')
-
- //-
- script(src='bower_components/jquery/jquery.js')
- script(src='bower_components/jquery-ui/ui/jquery-ui.js')
- script(src='bower_components/d3/d3.js')
- script(src='bower_components/d3-tip/index.js')
- script(src='bower_components/angular/angular.js')
- script(src='bower_components/angular-dragdrop/src/angular-dragdrop.js')
- script(src='bower_components/angular-ui-router/release/angular-ui-router.js')
- script(src='bower_components/underscore/underscore.js')
- script(src='bower_components/angular-base64/angular-base64.js')
- script(src='bower_components/angular-sanitize/angular-sanitize.min.js')
- script(src='bower_components/angular-dropdowns/dist/angular-dropdowns.js')
- script(src='bower_components/uuid-js/lib/uuid.js')
- script(src='bower_components/angular-cache-buster/angular-cache-buster.js')
- script(src='bower_components/angular-ui-sortable/sortable.js')
- script(src='bower_components/angular-translate/angular-translate.js')
- script(src='bower_components/angular-cookies/angular-cookies.js')
- script(src='bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js')
- script(src='bower_components/angular-translate-storage-local/angular-translate-storage-local.js')
- script(src='bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js')
- script(src='bower_components/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js')
- script(src='bower_components/messageformat/messageformat.js')
- script(src='bower_components/messageformat/locale/en.js')
- script(src='bower_components/messageformat/locale/ru.js')
- script(src='bower_components/messageformat/locale/zh.js')
- script(src='bower_components/messageformat/locale/vi.js')
- script(src='bower_components/async/lib/async.js')
- //-
-
- script(src='bower_components/less/dist/less-1.6.2.min.js', type='text/javascript')
- script(src='bower_components/requirejs/require.js', 'data-main'='/main')
-
- script(src='//tags.tiqcdn.com/utag/nokia/datagathering/dev/utag.js')
- script(src="https://js.cit.api.here.com/ee/2.5.3/jsl.js?with=all")
-
- if (version)
- script.
- window.version = '!{version}';
- body
- div('ui-view'='' class='templates')
-
diff --git a/app/views/index-production.jade b/app/views/index-production.jade
deleted file mode 100644
index d7b22c8..0000000
--- a/app/views/index-production.jade
+++ /dev/null
@@ -1,28 +0,0 @@
-!!!
-html
- head
- title= title
- meta(charset='utf-8')
- meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
- meta(name='viewport', content='initial-scale=1.0')
-
- link(rel='stylesheet', type='text/css', href='/resources/stylesheets/styles.css')
- link(rel='stylesheet', href='/resources/jquery-ui/jquery-ui.css')
- link(rel='stylesheet', href='//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css')
-
- script(src="https://js.cit.api.here.com/ee/2.5.3/jsl.js?with=all")
- script(src='//tags.tiqcdn.com/utag/nokia/datagathering/dev/utag.js')
-
- script(src='/vendor.js')
- script(src='/app.min.js')
-
- script.
- //nokia analytics
- var nkT = {
- pName : "index",
- sCountry : "ww",
- sLang : "en"
- };
- body
- div('ui-view'='' class='templates')
-
diff --git a/app/views/index.jade b/app/views/index.jade
new file mode 100644
index 0000000..cfe107f
--- /dev/null
+++ b/app/views/index.jade
@@ -0,0 +1,49 @@
+doctype html
+html( ng-app='mdg' manifest = manifest )
+ head
+ title= title
+ meta(charset='utf-8')
+ meta('http-equiv'='X-UA-Compatible', content='IE=edge,chrome=1')
+ meta(name='viewport', content='initial-scale=1.0')
+
+ link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css')
+
+ // build:css({.tmp/serve,src}) styles/app.css
+ link(rel='stylesheet', href='../bower_components/jquery-ui/themes/excite-bike/jquery-ui.css')
+
+ // bower:css
+ // endbower
+ //- inject:css
+ //- endinject
+ // endbuild
+
+ script(src="https://js.cit.api.here.com/ee/2.5.3/jsl.js?with=all")
+
+ // build:js(src) scripts/vendor.js
+ //- bower:js
+ // run `gulp wiredep` to automaticaly populate bower script dependencies
+ //- endbower
+ // endbuild
+
+ // build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js
+
+ script(src="../../src/application.js")
+ script(src="../../src/config.js")
+ //- inject:js
+ // js files will be automaticaly insert here
+ //- endinject
+
+ //- inject:partials
+ //- endinject
+
+ script(src='../../bower_components/messageformat/locale/en.js')
+ script(src='../../bower_components/messageformat/locale/ru.js')
+ script(src='../../bower_components/messageformat/locale/zh.js')
+ script(src='../../bower_components/messageformat/locale/vi.js')
+ // endbuild
+ if (version)
+ script.
+ window.version = '!{version}';
+ body.b-page
+ div('ui-view'='' class='templates')
+
diff --git a/app/views/monthlyReport.jade b/app/views/monthlyReport.jade
index 349de7b..d602718 100644
--- a/app/views/monthlyReport.jade
+++ b/app/views/monthlyReport.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -24,4 +24,4 @@ html
each month in months
option(value=month) #{month}
- input(type="submit", class="btn", value="Send")
\ No newline at end of file
+ input(type="submit", class="btn", value="Send")
diff --git a/app/views/sentMonthlyReport.jade b/app/views/sentMonthlyReport.jade
index 7521bef..9e12037 100644
--- a/app/views/sentMonthlyReport.jade
+++ b/app/views/sentMonthlyReport.jade
@@ -1,4 +1,4 @@
-!!!
+doctype html
html
head
title= title
@@ -10,4 +10,4 @@ html
body
h1 MONTHLY REPORT
- div(class="content") Report was sent to email #{email}
\ No newline at end of file
+ div(class="content") Report was sent to email #{email}
diff --git a/bower.json b/bower.json
index 1f9b78b..54d3f64 100644
--- a/bower.json
+++ b/bower.json
@@ -1,12 +1,14 @@
{
- "name": "ndg",
+ "name": "mdg",
+ "version": "0.0.0",
"dependencies": {
"angular": "1.2.*",
+ "ng-file-upload": "~11.0.2",
"angular-ui-router": "0.2.5",
"angular-base64": "2.0.1",
"angular-sanitize": "1.2.*",
"angular-dragdrop": "1.0.6",
- "angular-dropdowns": "https://github.com/annavernidub/angular-dropdowns.git#master",
+ "angular-dropdowns": "*",
"angular-cache-buster": "0.3.1",
"angular-ui-sortable": "0.12.6",
"angular-translate": "~2.2.0",
@@ -14,7 +16,7 @@
"angular-translate-loader-static-files": "~2.2.0",
"angular-translate-interpolation-messageformat": "~2.1.0",
"angular-cookies": "~1.2.19",
- "requirejs": "2.1.*",
+ "clipboard": "~1.5.5",
"jquery": "2.0.3",
"jquery-ui": "1.10.3",
"underscore": "1.5.*",
@@ -23,6 +25,7 @@
"d3-tip": "0.6.4",
"uuid-js": "~0.7.5",
"almond": "~0.2.9",
- "async": "0.9.0"
+ "async": "0.9.0",
+ "font-awesome": "~4.3.0"
}
}
diff --git a/config.js b/config.js
index f8bc3ea..5bd2acf 100644
--- a/config.js
+++ b/config.js
@@ -3,7 +3,7 @@ module.exports = {
general: {
siteName: 'Microsoft Data Gathering',
protocolType: 'http',
- port: 3000,
+ port: 3001,
mongodbUrl: 'mongodb://127.0.0.1:27017/MDG-test'
},
basicAuth: {
@@ -17,7 +17,7 @@ module.exports = {
},
mail: {
from: {
- registration: 'registration@nokiadatagathering.net',
+ registration: 'mdgspprt@microsoft.com',
subscription: 'noreply@nokiadatagathering.net',
report: 'report@nokiadatagathering.net'
},
diff --git a/configurationSchema.js b/configurationSchema.js
index 681174f..7299ee8 100644
--- a/configurationSchema.js
+++ b/configurationSchema.js
@@ -7,7 +7,7 @@ module.exports = {
type: String,
title: 'Site Name',
description: '',
- defaults: 'NOKIA DATA GATHERING'
+ defaults: 'MICROSOFT DATA GATHERING'
},
protocolType: {
type: String,
@@ -53,6 +53,24 @@ module.exports = {
}
}
},
+ enketo: {
+ title: 'Enketo',
+ description: 'Parameters for Enketo',
+ children: {
+ token: {
+ type: String,
+ title: 'enketo token',
+ description: 'enketo token',
+ defaults: '5aslore4vgmvlsor'
+ },
+ server: {
+ type: String,
+ title: 'enketo server url',
+ description: 'enketo server',
+ defaults: 'http://mdg-test.wookieelabs.com:9090/api/v1/survey'
+ }
+ }
+ },
languages: {
title: 'Languages',
description: 'Parameters for Digest Authorization. Do NOT change these unless you know what you are doing',
@@ -68,10 +86,10 @@ module.exports = {
title: 'Supported languages',
description: '',
defaults: [
- {value: 'en', text: 'English'},
- {value: 'ru', text: 'Русский'},
- {value: 'zh', text: '中文'},
- {value: 'vi', text: 'Việt' }
+ {value: 'en', text: 'English', title: 'English'},
+ {value: 'ru', text: 'Русский', title: 'Russian'},
+ {value: 'zh', text: '中文', title: 'Chinese'},
+ {value: 'vi', text: 'Việt', title: 'Vietnamese' }
]
},
supported_languages_mobile: {
@@ -208,7 +226,7 @@ module.exports = {
type: String,
title: 'Registration Email from',
description: '',
- defaults: 'registration@nokiadatagathering.net'
+ defaults: 'mdgspprt@microsoft.com'
},
subscription: {
type: String,
@@ -246,7 +264,7 @@ module.exports = {
type: String,
title: 'Mandrill Api Key',
description: 'Defines Mandrill Api Key',
- defaults: ''
+ defaults: 'WO6r_NFfdABIKOTEgdvuvQ' /* test api KEY */
},
emailsForUsersReport: {
type: Object,
diff --git a/e2e/main.po.js b/e2e/main.po.js
new file mode 100644
index 0000000..6b88871
--- /dev/null
+++ b/e2e/main.po.js
@@ -0,0 +1,15 @@
+/**
+ * This file uses the Page Object pattern to define the main page for tests
+ * https://docs.google.com/presentation/d/1B6manhG0zEXkC-H-tPo2vwU06JhL8w9-XCF9oehXzAQ
+ */
+
+'use strict';
+
+var MainPage = function() {
+ this.jumbEl = element(by.css('.jumbotron'));
+ this.h1El = this.jumbEl.element(by.css('h1'));
+ this.imgEl = this.jumbEl.element(by.css('img'));
+ this.thumbnailEls = element(by.css('body')).all(by.repeater('awesomeThing in awesomeThings'));
+};
+
+module.exports = new MainPage();
diff --git a/e2e/main.spec.js b/e2e/main.spec.js
new file mode 100644
index 0000000..da89d22
--- /dev/null
+++ b/e2e/main.spec.js
@@ -0,0 +1,21 @@
+'use strict';
+
+describe('The main view', function () {
+ var page;
+
+ beforeEach(function () {
+ browser.get('http://localhost:3000/index.html');
+ page = require('./main.po');
+ });
+
+ it('should include jumbotron with correct data', function() {
+ expect(page.h1El.getText()).toBe('\'Allo, \'Allo!');
+ expect(page.imgEl.getAttribute('src')).toMatch(/assets\/images\/yeoman.png$/);
+ expect(page.imgEl.getAttribute('alt')).toBe('I\'m Yeoman');
+ });
+
+ it('list more than 5 awesome things', function () {
+ expect(page.thumbnailEls.count()).toBeGreaterThan(5);
+ });
+
+});
diff --git a/gulp/build.js b/gulp/build.js
new file mode 100644
index 0000000..832ccdd
--- /dev/null
+++ b/gulp/build.js
@@ -0,0 +1,99 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+
+var $ = require('gulp-load-plugins')({
+ pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del']
+});
+
+gulp.task('partials', [], function () {
+ return gulp.src([
+ paths.src + '/{app,components}/**/*.html',
+ paths.tmp + '/{app,components}/**/*.html'
+ ])
+ .pipe($.minifyHtml({
+ empty: true,
+ spare: true,
+ quotes: true
+ }))
+ .pipe($.angularTemplatecache('templateCacheHtml.js', {
+ module: 'mdg'
+ }))
+ .pipe(gulp.dest(paths.tmp + '/partials/'));
+});
+
+gulp.task('html', ['inject'], function () {
+
+ var htmlFilter = $.filter('*.html');
+ var jsFilter = $.filter('**/*.js');
+ var cssFilter = $.filter('**/index.css');
+ var assets;
+
+ return gulp.src(paths.tmp + '/serve/*.html')
+ .pipe(assets = $.useref.assets())
+ .pipe($.rev())
+ .pipe(jsFilter)
+ .pipe($.ngAnnotate())
+ //.pipe($.uglify({preserveComments: $.uglifySaveLicense}))
+ .pipe(jsFilter.restore())
+ .pipe(cssFilter)
+ .pipe($.csso())
+ .pipe(cssFilter.restore())
+ .pipe(assets.restore())
+ .pipe($.useref())
+ .pipe($.revReplace())
+ .pipe(htmlFilter)
+ .pipe($.minifyHtml({
+ empty: true,
+ spare: true,
+ quotes: true
+ }))
+ .pipe(htmlFilter.restore())
+ .pipe(gulp.dest(paths.dist + '/'))
+ .pipe($.size({ title: paths.dist + '/', showFiles: true }));
+});
+
+gulp.task('html2jade',['html'], function () {
+ return gulp.src((paths.dist + '/index.html'))
+ .pipe($.html2jade())
+ .pipe(gulp.dest(paths.dist + '/'));
+});
+
+gulp.task('images', function () {
+ return gulp.src(paths.src + '/assets/images/**/*')
+ .pipe(gulp.dest(paths.dist + '/assets/images/'))
+ .pipe(gulp.dest(paths.tmp + '/serve/assets/images/'));
+});
+
+gulp.task('icons', function () {
+ return gulp.src(paths.src + '/assets/icons/**/*')
+ .pipe(gulp.dest(paths.dist + '/assets/icons/'))
+ .pipe(gulp.dest(paths.tmp + '/serve/assets/icons/'));
+});
+
+gulp.task('fonts', function () {
+ return gulp.src($.mainBowerFiles())
+ .pipe($.filter('**/*.{eot,svg,ttf,woff}'))
+ .pipe($.flatten())
+ .pipe(gulp.dest(paths.dist + '/fonts/'));
+});
+
+gulp.task('misc', function () {
+ return gulp.src(paths.src + '/**/*.ico')
+ .pipe(gulp.dest(paths.dist + '/'));
+});
+
+
+gulp.task('clean', function (done) {
+ $.del([paths.dist + '/', paths.tmp + '/'], done);
+});
+
+gulp.task('testing',['build'], function (done) {
+ return gulp.src('specs/**/*.js')
+ .pipe($.vows({reporter: 'spec'}));
+});
+
+gulp.task('build', ['html2jade', 'images', 'icons', 'fonts', 'misc']);
diff --git a/gulp/develop.js b/gulp/develop.js
new file mode 100644
index 0000000..c33d7b7
--- /dev/null
+++ b/gulp/develop.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')();
+
+gulp.task('develop', function () {
+
+ return $.nodemon({
+ script: 'app.js',
+ ext: 'html js jade',
+ tasks: ['styles', 'inject'], /*requires Node v0.12*/
+ env: {'NODE_ENV': 'development'}
+ })
+ .on('restart', function () {
+ console.log('restarted!')
+ })
+});
+
+gulp.task('prod', function () {
+
+ return $.nodemon({
+ script: 'app.js',
+ ext: 'html js jade',
+ tasks: ['styles', 'inject'], /*requires Node v0.12*/
+ env: {'NODE_ENV': 'production'}
+ })
+ .on('restart', function () {
+ console.log('restarted!')
+ })
+});
diff --git a/gulp/e2e-tests.js b/gulp/e2e-tests.js
new file mode 100644
index 0000000..99ab2c5
--- /dev/null
+++ b/gulp/e2e-tests.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var $ = require('gulp-load-plugins')();
+
+var browserSync = require('browser-sync');
+
+var paths = gulp.paths;
+
+// Downloads the selenium webdriver
+gulp.task('webdriver-update', $.protractor.webdriver_update);
+
+gulp.task('webdriver-standalone', $.protractor.webdriver_standalone);
+
+function runProtractor (done) {
+
+ gulp.src(paths.e2e + '/**/*.js')
+ .pipe($.protractor.protractor({
+ configFile: 'protractor.conf.js',
+ }))
+ .on('error', function (err) {
+ // Make sure failed tests cause gulp to exit non-zero
+ throw err;
+ })
+ .on('end', function () {
+ // Close browser sync server
+ browserSync.exit();
+ done();
+ });
+}
+
+gulp.task('protractor', ['protractor:src']);
+gulp.task('protractor:src', ['serve:e2e', 'webdriver-update'], runProtractor);
+gulp.task('protractor:dist', ['serve:e2e-dist', 'webdriver-update'], runProtractor);
diff --git a/gulp/inject.js b/gulp/inject.js
new file mode 100644
index 0000000..8b006dd
--- /dev/null
+++ b/gulp/inject.js
@@ -0,0 +1,70 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')();
+
+var wiredep = require('wiredep').stream;
+
+gulp.task('inject', ['partials', 'styles', 'home_inject', 'lang_inject', 'adminpage_inject'], function () {
+
+ var partialsInjectFile = gulp.src(paths.tmp + '/partials/templateCacheHtml.js');
+ var partialsInjectOptions = {
+ starttag: '//- inject:partials',
+ addRootSlash: false,
+ addPrefix: '../..'
+ };
+
+ var injectStyles = gulp.src([
+ paths.tmp + '/serve/{app,components}/*.css',
+ '!' + paths.tmp + '/serve/app/404.css',
+ ]);
+
+ var injectScripts = gulp.src([
+ paths.src + '/{app,components}/**/*.js',
+ '!' + paths.src + '/application.js',
+ '!' + paths.src + '/config.js'
+ ]).pipe($.angularFilesort());
+
+ var injectOptions = {
+ relative: true
+ };
+
+ var wiredepOptions = {
+ src: [paths.tmp + '/serve/index.jade', '/async/lib/async.js'],
+ directory: 'bower_components',
+ ignorePath: ['/..'],
+ exclude: ['/angular-dropdowns/angular-dropdowns.css', '/angular-dropdowns/dist/angular-dropdowns.css',
+ '/angular-dropdowns/angular-dropdowns.min.css', '/angular-dropdowns/dist/angular-dropdowns.min.css']
+ };
+
+ return gulp.src(paths.jade + '/index.jade')
+ .pipe($.inject(injectStyles, injectOptions))
+ .pipe($.inject(injectScripts, injectOptions))
+ .pipe($.inject(partialsInjectFile, partialsInjectOptions))
+ .pipe(wiredep(wiredepOptions))
+ .pipe(gulp.dest(paths.tmp + '/serve'))
+ .pipe($.jade({ pretty: true}))
+ .pipe(gulp.dest(paths.tmp + '/serve'));
+
+});
+
+gulp.task('home_inject', function () {
+ return gulp.src('app/resources/home.js')
+ .pipe(gulp.dest(paths.dist + '/'))
+ .pipe(gulp.dest(paths.tmp + '/'));
+});
+
+gulp.task('adminpage_inject', function () {
+ return gulp.src('app/resources/adminPage.js')
+ .pipe(gulp.dest(paths.dist + '/'))
+ .pipe(gulp.dest(paths.tmp + '/'));
+});
+
+gulp.task('lang_inject', function () {
+ return gulp.src(paths.src + '/languages/*.json')
+ .pipe(gulp.dest(paths.dist + '/languages'))
+ .pipe(gulp.dest(paths.tmp + '/languages'));
+});
diff --git a/gulp/proxy.js b/gulp/proxy.js
new file mode 100644
index 0000000..2fcd734
--- /dev/null
+++ b/gulp/proxy.js
@@ -0,0 +1,65 @@
+ /*jshint unused:false */
+
+/***************
+
+ This file allow to configure a proxy system plugged into BrowserSync
+ in order to redirect backend requests while still serving and watching
+ files from the web project
+
+ IMPORTANT: The proxy is disabled by default.
+
+ If you want to enable it, watch at the configuration options and finally
+ change the `module.exports` at the end of the file
+
+***************/
+
+'use strict';
+
+var httpProxy = require('http-proxy');
+var chalk = require('chalk');
+
+/*
+ * Location of your backend server
+ */
+var proxyTarget = 'http://server/context/';
+
+var proxy = httpProxy.createProxyServer({
+ target: proxyTarget
+});
+
+proxy.on('error', function(error, req, res) {
+ res.writeHead(500, {
+ 'Content-Type': 'text/plain'
+ });
+
+ console.error(chalk.red('[Proxy]'), error);
+});
+
+/*
+ * The proxy middleware is an Express middleware added to BrowserSync to
+ * handle backend request and proxy them to your backend.
+ */
+function proxyMiddleware(req, res, next) {
+ /*
+ * This test is the switch of each request to determine if the request is
+ * for a static file to be handled by BrowserSync or a backend request to proxy.
+ *
+ * The existing test is a standard check on the files extensions but it may fail
+ * for your needs. If you can, you could also check on a context in the url which
+ * may be more reliable but can't be generic.
+ */
+ if (/\.(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff|cur)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/.test(req.url)) {
+ next();
+ } else {
+ proxy.web(req, res);
+ }
+}
+
+/*
+ * This is where you activate or not your proxy.
+ *
+ * The first line activate if and the second one ignored it
+ */
+
+//module.exports = [proxyMiddleware];
+module.exports = [];
diff --git a/gulp/server.js b/gulp/server.js
new file mode 100644
index 0000000..58d7ad6
--- /dev/null
+++ b/gulp/server.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var util = require('util');
+
+var browserSync = require('browser-sync');
+
+var middleware = require('./proxy');
+
+function browserSyncInit(baseDir, files, browser) {
+ browser = browser === undefined ? 'default' : browser;
+
+ var routes = null;
+ if(baseDir === paths.src || (util.isArray(baseDir) && baseDir.indexOf(paths.src) !== -1)) {
+ routes = {
+ '/bower_components': 'bower_components'
+ };
+ }
+
+ browserSync.instance = browserSync.init(files, {
+ startPath: '/',
+ server: {
+ baseDir: baseDir,
+ middleware: middleware,
+ routes: routes
+ },
+ browser: browser
+ });
+}
+
+gulp.task('serve', ['watch'], function () {
+ browserSyncInit([
+ paths.tmp + '/serve',
+ paths.src
+ ], [
+ paths.tmp + '/serve/{app,components}/**/*.css',
+ paths.src + '/{app,components}/**/*.js',
+ paths.src + 'src/assets/images/**/*',
+ paths.tmp + '/serve/*.html',
+ paths.tmp + '/serve/*.jade',
+ paths.tmp + '/serve/{app,components}/**/*.html',
+ paths.tmp + '/serve/{app,components}/**/*.jade',
+ paths.src + '/{app,components}/**/*.html'
+ ]);
+});
+
+gulp.task('serve:dist', ['build'], function () {
+ browserSyncInit(paths.dist);
+});
+
+gulp.task('serve:e2e', ['inject'], function () {
+ browserSyncInit([paths.tmp + '/serve', paths.src], null, []);
+});
+
+gulp.task('serve:e2e-dist', ['build'], function () {
+ browserSyncInit(paths.dist, null, []);
+});
diff --git a/gulp/styles.js b/gulp/styles.js
new file mode 100644
index 0000000..96ed1fd
--- /dev/null
+++ b/gulp/styles.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')();
+
+gulp.task('styles', ['home_css'], function () {
+
+ var sassOptions = {
+ style: 'expanded'
+ };
+
+ var injectFiles = gulp.src([
+ paths.src + '/{app,components}/**/*.scss',
+ '!' + paths.src + '/app/index.scss'
+ ], {read: false});
+
+ var injectOptions = {
+ transform: function (filePath) {
+ filePath = filePath.replace(paths.src + '/app/', '');
+ filePath = filePath.replace(paths.src + '/components/', '../components/');
+ return '@import \'' + filePath + '\';';
+ },
+ starttag: '// injector',
+ endtag: '// endinjector',
+ addRootSlash: false
+ };
+
+ var indexFilter = $.filter('index.scss');
+
+ return gulp.src([
+ paths.src + '/app/index.scss',
+
+ ])
+ .pipe(indexFilter)
+ .pipe($.inject(injectFiles, injectOptions))
+ .pipe(indexFilter.restore())
+ .pipe($.sass(sassOptions))
+
+ .pipe($.autoprefixer())
+ .on('error', function handleError(err) {
+ console.error(err.toString());
+ this.emit('end');
+ })
+ .pipe(gulp.dest(paths.tmp + '/serve/app/'));
+});
+
+gulp.task('home_css', function () {
+ return gulp.src('app/resources/*.css')
+ .pipe(gulp.dest(paths.dist + '/styles'))
+ .pipe(gulp.dest(paths.tmp + '/styles'));
+});
diff --git a/gulp/unit-tests.js b/gulp/unit-tests.js
new file mode 100644
index 0000000..f13a9c0
--- /dev/null
+++ b/gulp/unit-tests.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var $ = require('gulp-load-plugins')();
+
+var wiredep = require('wiredep');
+
+var paths = gulp.paths;
+
+function runTests (singleRun, done) {
+ var bowerDeps = wiredep({
+ directory: 'bower_components',
+ exclude: ['bootstrap-sass-official'],
+ dependencies: true,
+ devDependencies: true
+ });
+
+ var testFiles = bowerDeps.js.concat([
+ paths.src + '/{app,components}/**/*.js'
+ ]);
+
+ gulp.src(testFiles)
+ .pipe($.karma({
+ configFile: 'karma.conf.js',
+ action: (singleRun)? 'run': 'watch'
+ }))
+ .on('error', function (err) {
+ // Make sure failed tests cause gulp to exit non-zero
+ throw err;
+ });
+}
+
+gulp.task('test', function (done) { runTests(true /* singleRun */, done) });
+gulp.task('test:auto', function (done) { runTests(false /* singleRun */, done) });
diff --git a/gulp/watch.js b/gulp/watch.js
new file mode 100644
index 0000000..8e87812
--- /dev/null
+++ b/gulp/watch.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+gulp.task('watch', ['inject'], function () {
+ gulp.watch([
+ paths.src + '/*.html',
+ paths.src + '/{app,components}/**/*.scss',
+ paths.src + '/{app,components}/**/*.js',
+ 'bower.json'
+ ], []);
+ gulp.watch(paths.src + '/{app,components}/**/*.jade', []);
+});
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 0000000..10c3f8e
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var gulp = require('gulp');
+var nodemon = require('gulp-nodemon');
+
+gulp.paths = {
+ src: 'src',
+ dist: 'dist',
+ tmp: '.tmp',
+ e2e: 'e2e',
+ jade: 'app/views'
+};
+
+require('require-dir')('./gulp');
+
+gulp.task('default', ['clean'], function () {
+ gulp.start('build');
+});
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 0000000..12e3ff3
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,17 @@
+'use strict';
+
+module.exports = function(config) {
+
+ config.set({
+ autoWatch : false,
+
+ frameworks: ['jasmine'],
+
+ browsers : ['PhantomJS'],
+
+ plugins : [
+ 'karma-phantomjs-launcher',
+ 'karma-jasmine'
+ ]
+ });
+};
diff --git a/mdgcache-dev.manifest b/mdgcache-dev.manifest
new file mode 100644
index 0000000..0fc6fb0
--- /dev/null
+++ b/mdgcache-dev.manifest
@@ -0,0 +1,102 @@
+CACHE MANIFEST
+# 2
+CACHE:
+
+
+/supportedLanguages
+/src/languages/locale-cn.json
+/src/languages/locale-en.json
+/src/languages/locale-ru.json
+
+/src/assets/icons/folder.png
+/src/assets/icons/pen.png
+/src/assets/icons/upload.png
+
+//js.cit.api.here.com/ee/2.5.3/jsl.js?with=all
+
+//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css
+//tags.tiqcdn.com/utag/nokia/datagathering/dev/utag.js
+
+
+/bower_components/jquery/jquery.js
+/bower_components/angular/angular.js
+/bower_components/angular-ui-router/release/angular-ui-router.js
+/bower_components/angular-base64/angular-base64.js
+/bower_components/angular-base64/angular-base64.min.js
+/bower_components/angular-sanitize/angular-sanitize.js
+/bower_components/jquery-ui/ui/jquery-ui.js
+/bower_components/angular-dragdrop/src/angular-dragdrop.js
+/bower_components/angular-dropdowns/dist/angular-dropdowns.js
+/bower_components/angular-cache-buster/angular-cache-buster.js
+/bower_components/angular-ui-sortable/sortable.js
+/bower_components/angular-translate/angular-translate.js
+/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
+/bower_components/angular-translate-storage-local/angular-translate-storage-local.js
+/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js
+/bower_components/messageformat/messageformat.js
+/bower_components/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js
+/bower_components/angular-cookies/angular-cookies.js
+/bower_components/underscore/underscore.js
+/bower_components/less/dist/less-1.6.2.js
+/bower_components/d3/d3.js
+/bower_components/d3-tip/index.js
+/bower_components/uuid-js/lib/uuid.js
+/bower_components/almond/almond.js
+
+/src/application.js
+/src/config.js
+/src/components/ui/validate-phone-number/validate-phone-number.directive.js
+/src/components/ui/validate-pattern/validate-pattern.directive.js
+/src/components/ui/time-selector/time-selector.directive.js
+/src/components/ui/question-builder/question-builder.directive.js
+/src/components/ui/notifications/notifications.directive.js
+/src/components/ui/nf-event/nf-event.directive.js
+/src/components/ui/focus-me/focus-me.directive.js
+/src/components/ui/file-select/file-select.directive.js
+/src/components/ui/expand/expand.directive.js
+/src/components/ui/errorsblock/errorsblock.directive.js
+/src/components/ui/date-range/date-range.directive.js
+/src/components/ui/date-input/date-input.directive.js
+/src/components/ui/csv-options-import/csv-options-import.directive.js
+/src/components/ui/cascade-question/cascade-question.directive.js
+/src/components/ui/auto-complete/auto-complete.service.js
+/src/components/ui/auto-complete/auto-complete.directive.js
+/src/components/helpers/validate/validate.service.js
+/src/components/helpers/subscription/subscription.service.js
+/src/components/helpers/offline/offline.service.js
+/src/components/helpers/errors/errors.service.js
+/src/components/api/sms/sms.service.js
+/src/app/users/users.module.js
+/src/app/users/sms-to-user/user.sms.controller.js
+/src/app/users/sms-to-group/user.group.sms.controller.js
+/src/app/users/groups/users.groups.service.js
+/src/app/users/groups/users.groups.controller.js
+/src/app/users/edit/user.edit.controller.js
+/src/app/users/add/user.add.controller.js
+/src/app/surveys/surveys.module.js
+/src/app/surveys/send/surveys.send.controller.js
+/src/app/surveys/edit/surveys.edit.controller.js
+/src/app/results/results.module.js
+/src/app/results/map/results.map.service.js
+/src/app/results/map/results.map.comtroller.js
+/src/app/results/export/results.export.controller.js
+/src/app/results/details/results.details.controller.js
+/src/app/results/chart/results.chart.service.js
+/src/app/results/chart/results.chart.controller.js
+/src/components/authorization/authorization.service.js
+/src/app/users/users.service.js
+/src/app/users/users.controller.js
+/src/app/sync/sync.module.js
+/src/app/sync/sync.service.js
+/src/app/sync/sync.controller.js
+/src/app/surveys/surveys.service.js
+/src/app/surveys/surveys.controller.js
+/src/app/results/results.service.js
+/src/app/results/results.controller.js
+/src/app/page/page.controller.js
+
+/.tmp/partials/templateCacheHtml.js
+
+
+NETWORK:
+*
diff --git a/mdgcache.manifest b/mdgcache.manifest
index 99be81d..cf57b2e 100644
--- a/mdgcache.manifest
+++ b/mdgcache.manifest
@@ -1,159 +1,29 @@
CACHE MANIFEST
-# 4
+# 3
CACHE:
-/main.js
-/application.js
-/config.js
-/partials/templates/cascadeQuestion.html
-/partials/templates/dateRange.html
-/partials/templates/questionBuilder.html
-/partials/templates/timeSelector.html
-/partials/EditSurvey.html
-/partials/ModalSyncOfflineMode.html
-/partials/Page.html
-/partials/SurveyList.html
+# these filenames should be updated at each build
+/styles/app-d6f3974b.css
+/scripts/vendor-bdc00d12.js
+/scripts/app-7e3772b3.js
+#
-/controllers/controllers.js
-/controllers/AddUserCtrl.js
-/controllers/BuilderCtrl.js
-/controllers/EditSurveyCtrl.js
-/controllers/EditUserCtrl.js
-/controllers/ForgotPasswordCtrl.js
-/controllers/GroupsCtrl.js
-/controllers/LoginCtrl.js
-/controllers/PageCtrl.js
-/controllers/RegisterCtrl.js
-/controllers/ResetPasswordCtrl.js
-/controllers/ResultDetailsCtrl.js
-/controllers/ResultsChartCtrl.js
-/controllers/ResultsCtrl.js
-/controllers/ResultsOnMapCtrl.js
-/controllers/SendSurveyCtrl.js
-/controllers/SurveysCtrl.js
-/controllers/SyncCtrl.js
-/controllers/UsersCtrl.js
-/directives/directives.js
-/directives/autoComplete.js
-/directives/cascadeQuestion.js
-/directives/csvOptioinsImport.js
-/directives/dateInput.js
-/directives/dateRange.js
-/directives/errorsblock.js
-/directives/expand.js
-/directives/fileSelect.js
-/directives/focusMe.js
-/directives/nfEvent.js
-/directives/notifications.js
-/directives/questionBuilder.js
-/directives/timeSelector.js
-/directives/validatePattern.js
-/directives/validatephonenumber.js
/supportedLanguages
-/languages/locale-zh.json
+/languages/locale-cn.json
/languages/locale-en.json
/languages/locale-ru.json
-/languages/locale-vi.json
-/services/services.js
-/services/autocompleteManager.js
-/services/chartManager.js
-/services/errorsManager.js
-/services/groupsManager.js
-/services/offlineManager.js
-/services/profileManager.js
-/services/resultsManager.js
-/services/smsManager.js
-/services/subscriptionManager.js
-/services/surveysManager.js
-/services/syncManager.js
-/services/usersManager.js
-/services/validateManager.js
+/assets/icons/folder.png
+/assets/icons/pen.png
+/assets/icons/upload.png
-/resources/fonts/NokiaPureText/nokiapuretext-webfont.eot
-/resources/fonts/NokiaPureText/nokiapuretext-webfont.svg
-/resources/fonts/NokiaPureText/nokiapuretext-webfont.ttf
-/resources/fonts/NokiaPureText/nokiapuretext-webfont.woff
-/resources/fonts/NokiaPureTextBold/nokiapuretextbold-webfont.eot
-/resources/fonts/NokiaPureTextBold/nokiapuretextbold-webfont.svg
-/resources/fonts/NokiaPureTextBold/nokiapuretextbold-webfont.ttf
-/resources/fonts/NokiaPureTextBold/nokiapuretextbold-webfont.woff
-
-/resources/fonts/NokiaPureTextLight/nokiapuretextlight-webfont.eot
-/resources/fonts/NokiaPureTextLight/nokiapuretextlight-webfont.svg
-/resources/fonts/NokiaPureTextLight/nokiapuretextlight-webfont.ttf
-/resources/fonts/NokiaPureTextLight/nokiapuretextlight-webfont.woff
-
-/resources/fonts/ProximaNovaTextBold/ProximaNovaTextBold.eot
-/resources/fonts/ProximaNovaTextBold/ProximaNovaTextBold.svg
-/resources/fonts/ProximaNovaTextBold/ProximaNovaTextBold.ttf
-/resources/fonts/ProximaNovaTextBold/ProximaNovaTextBold.woff
-
-/resources/fonts/ProximaNovaTextSemibold/ProximaNovaTextSemibold.eot
-/resources/fonts/ProximaNovaTextSemibold/ProximaNovaTextSemibold.svg
-/resources/fonts/ProximaNovaTextSemibold/ProximaNovaTextSemibold.ttf
-/resources/fonts/ProximaNovaTextSemibold/ProximaNovaTextSemibold.woff
-
-/resources/icons/accuracy.png
-/resources/icons/alert.png
-/resources/icons/arrow-20px.png
-/resources/icons/browse-archive.png
-/resources/icons/circle-tick-22px.png
-/resources/icons/copy-20px.png
-/resources/icons/cross-20px.png
-/resources/icons/cross-red-13px.png
-/resources/icons/delete-20px.png
-/resources/icons/download-20px.png
-/resources/icons/edit-20px.png
-/resources/icons/lolgo-30px.png
-/resources/icons/move-to-archive.png
-/resources/icons/plus-16px.png
-/resources/icons/search-20px.png
-/resources/icons/send-20px.png
-/resources/icons/upload-20px.png
-
-/resources/stylesheets/styles.less
-
-/bower_components/jquery/jquery.js
-/bower_components/jquery-ui/ui/jquery-ui.js
-/bower_components/angular/angular.js
-/bower_components/d3/d3.js
-/bower_components/d3-tip/index.js
-/bower_components/angular-dragdrop/src/angular-dragdrop.js
-/bower_components/angular-ui-router/release/angular-ui-router.js
-/bower_components/underscore/underscore.js
-/bower_components/angular-base64/angular-base64.js
-/bower_components/angular-sanitize/angular-sanitize.min.js
-/bower_components/angular-sanitize/angular-sanitize.min.js.map
-/bower_components/angular-dropdowns/dist/angular-dropdowns.js
-/bower_components/uuid-js/lib/uuid.js
-/bower_components/angular-cache-buster/angular-cache-buster.js
-/bower_components/angular-ui-sortable/sortable.js
-/bower_components/async/lib/async.js
//js.cit.api.here.com/ee/2.5.3/jsl.js?with=all
-/bower_components/d3/d3.js
-/bower_components/d3-tip/index.js
-/bower_components/requirejs/require.js
-/bower_components/less/dist/less-1.6.2.min.js
-/bower_components/angular-translate/angular-translate.js
-/bower_components/angular-cookies/angular-cookies.js
-/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
-/bower_components/angular-translate-storage-local/angular-translate-storage-local.js
-/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js
-/bower_components/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js
-/bower_components/messageformat/messageformat.js
-/bower_components/messageformat/locale/en.js
-/bower_components/messageformat/locale/ru.js
-/bower_components/messageformat/locale/zh.js
-/bower_components/messageformat/locale/vi.js
-/bower_components/async/lib/async.js
-//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css
+//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css')
//tags.tiqcdn.com/utag/nokia/datagathering/dev/utag.js
-bower_components/jquery-ui/themes/smoothness/jquery-ui.css
NETWORK:
*
diff --git a/package.json b/package.json
index 5ac1431..4008bc7 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "MDGServer",
+ "name": "mdg",
"version": "1.0.0",
"repository": {
"type": "git",
@@ -21,8 +21,12 @@
"express-resource-new": "0.1.1",
"forever": "^0.11.1",
"gridfs-stream": "0.5.1",
+ "gulp-html2jade": "^1.1.1",
+ "gulp-jade": "^1.0.1",
+ "gulp-nodemon": "^2.0.3",
+ "gulp-vows": "^0.1.2",
"jade": "0.35.0",
- "libxmljs": "~0.8.1",
+ "libxmljs": "~0.14.1",
"mandrill-api": "1.0.40",
"manifesto": "0.0.4",
"method-override": "2.1.2",
@@ -34,36 +38,57 @@
"passport-http": "~0.2.2",
"passport-local": "0.1.6",
"password-generator": "0.2.1",
+ "request": "~2.31.0",
"sax": "~0.5.8",
"stream-buffers": "0.2.5",
"temp": "0.7.0",
"twilio": "1.4.0",
"underscore": "1.5.1",
- "xmldom": "0.1.19",
- "request": "~2.31.0"
+ "xmldom": "0.1.19"
},
"devDependencies": {
"api-easy": "~0.3.8",
- "bower": "1.3.9",
- "grunt": "~0.4.2",
- "grunt-angular-templates": "^0.5.7",
- "grunt-cli": "~0.1.11",
- "grunt-contrib-concat": "^0.5.0",
- "grunt-contrib-copy": "^0.5.0",
- "grunt-contrib-jshint": "~0.7.2",
- "grunt-contrib-less": "^0.11.4",
- "grunt-contrib-requirejs": "^0.4.4",
- "grunt-contrib-uglify": "^0.5.1",
- "grunt-jade-usemin": "^0.6.0",
- "grunt-jscs-checker": "~0.2.6",
- "grunt-vows": "~0.4.0",
+ "gulp": "~3.8.10",
+ "gulp-autoprefixer": "~2.0.0",
+ "gulp-angular-templatecache": "~1.4.2",
+ "del": "~0.1.3",
+ "gulp-consolidate": "~0.1.2",
+ "gulp-csso": "~0.2.9",
+ "gulp-filter": "~1.0.2",
+ "gulp-flatten": "~0.0.4",
+ "gulp-jshint": "~1.9.0",
+ "gulp-load-plugins": "~0.7.1",
+ "gulp-size": "~1.1.0",
+ "gulp-uglify": "~1.0.1",
+ "gulp-useref": "~1.0.2",
+ "gulp-ng-annotate": "*",
+ "gulp-replace": "~0.5.0",
+ "gulp-rename": "~1.2.0",
+ "gulp-rev": "~2.0.1",
+ "gulp-rev-replace": "~0.3.1",
+ "gulp-minify-html": "~0.1.7",
+ "gulp-inject": "~1.0.2",
+ "gulp-protractor": "~0.0.11",
+ "gulp-karma": "~0.0.4",
+ "gulp-sass": "~1.1.0",
+ "gulp-angular-filesort": "~1.0.4",
+ "jade": "~1.8.1",
+ "main-bower-files": "~2.4.0",
+ "jshint-stylish": "~1.0.0",
+ "wiredep": "~2.2.0",
+ "karma-jasmine": "~0.3.1",
+ "karma-phantomjs-launcher": "~0.1.4",
+ "require-dir": "~0.1.0",
+ "browser-sync": "~1.7.1",
+ "http-proxy": "~1.7.0",
+ "chalk": "~0.5.1",
+ "protractor": "~1.4.0",
+ "uglify-save-license": "~0.4.1",
"lodash": "^2.4.1",
"pow-mongodb-fixtures": "^0.10.0",
"vows": "git://github.com/wookieelabs/vows#fix-isolate-on-windows"
},
- "scripts": {
- "start": "node app",
- "stop": "./node_modules/forever/bin/forever stop app.js",
- "logs": "./node_modules/forever/bin/forever logs app.js"
+ "engines": {
+ "node": ">=0.10.0"
}
}
diff --git a/protractor.conf.js b/protractor.conf.js
new file mode 100644
index 0000000..0f43a9e
--- /dev/null
+++ b/protractor.conf.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var paths = require('./.yo-rc.json')['generator-gulp-angular'].props.paths;
+
+// An example configuration file.
+exports.config = {
+ // The address of a running selenium server.
+ //seleniumAddress: 'http://localhost:4444/wd/hub',
+ //seleniumServerJar: deprecated, this should be set on node_modules/protractor/config.json
+
+ // Capabilities to be passed to the webdriver instance.
+ capabilities: {
+ 'browserName': 'chrome'
+ },
+
+ // Spec patterns are relative to the current working directly when
+ // protractor is called.
+ specs: [paths.e2e + '/**/*.js'],
+
+ // Options to be passed to Jasmine-node.
+ jasmineNodeOpts: {
+ showColors: true,
+ defaultTimeoutInterval: 30000
+ }
+};
diff --git a/src/404.html b/src/404.html
new file mode 100644
index 0000000..fdace4a
--- /dev/null
+++ b/src/404.html
@@ -0,0 +1,157 @@
+
+
+
+
+ Page Not Found :(
+
+
+
+
+
Not found :(
+
Sorry, but the page you were trying to view does not exist.