From aad9244e6806d9c1bd6d434aa02c4419c0233414 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 17 Jun 2014 16:42:40 +0100 Subject: [PATCH 01/13] Add Github ribbon --- application/views/base/html_end.php | 5 +++++ src/styles/_demo_styles.scss | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/application/views/base/html_end.php b/application/views/base/html_end.php index e51eb46..8e29ed7 100644 --- a/application/views/base/html_end.php +++ b/application/views/base/html_end.php @@ -1,4 +1,9 @@ + +

+ View on GitHub +

+ load->view('components/confirm_box') ?> load->view('base/footer_scripts') ?> diff --git a/src/styles/_demo_styles.scss b/src/styles/_demo_styles.scss index 73e0271..ccfd29f 100644 --- a/src/styles/_demo_styles.scss +++ b/src/styles/_demo_styles.scss @@ -82,4 +82,26 @@ margin-bottom: 0; } } +} + +.ribbon { + position: fixed; + z-index: 101; + top: 2rem; + right: -3rem; + margin: 0; + overflow: hidden; + background-color: palette(blue); + box-shadow: 0 4px 0 0 rgba(69, 77, 83, 0.1); + transform: rotate(45deg); + white-space: nowrap; + + a { + color: #fff; + font-size: rem-calc(14); + display: block; + padding: 0.25rem 1rem; + text-align: center; + width: 12rem; + } } \ No newline at end of file From d5f6729911a428b400205c17a3860e2de7c4c8a0 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 17 Jun 2014 16:47:14 +0100 Subject: [PATCH 02/13] Remove unused resources --- resources/valid_results/survey_3_results.xml | 135 -- resources/valid_survey/survey_1_xls.xls | Bin 37376 -> 0 bytes resources/valid_survey/survey_1_xml.xml | 132 -- resources/valid_survey/survey_2_xls.xls | Bin 5144 -> 0 bytes resources/valid_survey/survey_2_xml.xml | 34 - resources/valid_survey/survey_3_xls.xls | Bin 17680 -> 0 bytes resources/valid_survey/survey_3_xml.xml | 1786 ------------------ 7 files changed, 2087 deletions(-) delete mode 100644 resources/valid_results/survey_3_results.xml delete mode 100644 resources/valid_survey/survey_1_xls.xls delete mode 100644 resources/valid_survey/survey_1_xml.xml delete mode 100644 resources/valid_survey/survey_2_xls.xls delete mode 100644 resources/valid_survey/survey_2_xml.xml delete mode 100644 resources/valid_survey/survey_3_xls.xls delete mode 100644 resources/valid_survey/survey_3_xml.xml diff --git a/resources/valid_results/survey_3_results.xml b/resources/valid_results/survey_3_results.xml deleted file mode 100644 index 14af9cf..0000000 --- a/resources/valid_results/survey_3_results.xml +++ /dev/null @@ -1,135 +0,0 @@ - - 2014-03-21T15:42:25.000-00:00 - 2014-03-21T15:42:25.000-00:00 - 999999999999999 - 1 - - - - 1 - 1 - 2 - - 4 - 502305 - Banana - Tree - 2 - - - - - Banana - Tree - 1 - 1 - 1 - 1 - 34 - 17 - 3 - - 6 - - 123 - 1 4 - - 3 - - - - 2 - - - 2 - - - - - 3 - - - - - 3 - 3 - - - - - - - - 34 - 2 - 34 - 2 - - - - - 1 - - - - - - 2 - 4 - 2 - - - - - 1 - - 1 - - 2 - 2 - 2 - - - - 2 - - 3 - 3 - 3 - - - - - - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/valid_survey/survey_1_xls.xls b/resources/valid_survey/survey_1_xls.xls deleted file mode 100644 index a4033a894caf44ce26f3e800a6998c5a7e9de43a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37376 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 - - - survey_1_xls - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - male - - - - female - - - - - - - - - - - You need to be outside for your GPS to work. - - - - - - yes - - - - no - - - - - - - - - - nyc - - - - chitown - - - - - - - - diff --git a/resources/valid_survey/survey_2_xls.xls b/resources/valid_survey/survey_2_xls.xls deleted file mode 100644 index 3a8721e3429ae591c50ec95d01a420fd928b7b9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5144 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�otCHUrU z@QB^$b0E3hXccb4?XX}AU)dLU7_KSPW3!8U-7I4*%k;bi+SstY%)V=)KIHOAc(!7_U0QL^q^s~jGH>Xd(!k) zqMWC4l)BC7ibWaJ>qTRqgI}{vfVjRQhL5|9HB*|+m?%$p#c7mWmP@CA2)}4%7wJ}GYEQAd)NIfaPw*7FS$5V4>k@Ex*6FUx=BZ8xpjJ!XrBe-; zm=9>BXh)r?Rvdo2$b{+en4`g4FP-{psfNOKfZ(lAA>FW>Zd&uNlCkv!O!w(EC~Day z@8{7G#z^9gV{RhUDB8@oG^>KN`XSudON^^zyzS4OG@J<#6h!1W85}sF6lx-8q7{3* zVM4+o-~=-@skIvPRo32_k!O)lqcYMKkyD(|eKKGfl`Tgpce`k$>aYB=XN#8wKrioD~GtAM*eZ7TS)$+b>qL zAwba(nc@0D9v7?fd`O_-v~yD<&y4EmD;H7^_uEpHW1E|AT+Ks-rWbi04JMMWKM|aO zbD#Wl@~MesA@RiI_bgdKPpH>_s=uQ!H^FR=y>MI@&!^qQ8=hyd%`_k%^GZr1lpdJu ztdl3hk}}2u{Tf~erBcG3=*w*t_E%&TjT-kPI~>j_$b~54wtv%ke8x6e+$rfRi9%Ket{!04_tdRl8NN7bf^C}$V?3E=AOzE+p zrVHeZI6ItRR6|#vTEZNAxiSC(aeQPHkL`1wn*{D;E#l2JM7PwbLg_Rg2q*03A2TVl z7GD*RjWu=h>AJidd^2SL*Q4FZU)7G-cabq0n$YUI;rHFEr9Sy9p|yBOtq3kRg1r|G z@(Ug!&`_9LGOKEz$~5aZ&jQxEgQjQ73qMrNg?d=OqTsvXa)*!M>i`+ zHxpeiCo5MY)Nt95*rL`ZNZz@7#-sXfH2;8!Wyc*Tz1i%Qlu}=s<3Ngts65;CD@@M@ z%uel%YV9}f9wU-tVKRqCHRxv|AI^o{wZ!YRzTRb^9F9dOu8P^QBR@ zWhUm)u2WFR1boSS*=4MB*-=fXS_>oE|Huo^JK}#9;ib-C{@{)facQ7^j-X5t1B}^( zL^59KG<^F~EjFcEi`nf#arZ?}lt`29NpxbO1(6tNn1Tv$BHrWKAjb%)aE{y5Y&{w8 zg_*`2zhcKGED<%`Z%zsrX?3>WA<+!kwb9sQ4O6I%IBK&vTk}hQdqpA=RHzMDlVDk3 zmz09x1A4VEfnLuT5xA$2+!)FDFTxE@0t=TR`=PVM{0!~3-ijD!ZB6UUd-{jHAL*Y$ zd%owS`2EF)%*os6M3JCB#6l$#ItDq~uO-g)Ee2|d^S|ZVO6PaQ>q`LClH-@$ME=$9 zE05o`uaj5QqTrX1AtU2o?SIw=zpGzocqoSZOHwia#CLx`=Q`m*@xfnGiNp%YoBt0x z{QZRMEgD6Pe#thnaU)OouQciRQ?8dgR6GAAzDTE_?(uJP|6TQZMxpBAFL5XS_X7V^ l$KRE&M+PeCeu*a1r~f4dwbZb2P!HiDU$RI~wf*J1{{XQtscHZK diff --git a/resources/valid_survey/survey_2_xml.xml b/resources/valid_survey/survey_2_xml.xml deleted file mode 100644 index 12bd6f5..0000000 --- a/resources/valid_survey/survey_2_xml.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - survey_2_xls - - - - - - - - - - - - - - - - - - - - - - - - Enter numbers only. - - - - - - diff --git a/resources/valid_survey/survey_3_xls.xls b/resources/valid_survey/survey_3_xls.xls deleted file mode 100644 index 63657a7bea93da0e5e95e98292e46cd3da1f3adb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17680 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%0DAV1~rUsBBhRTgc7N< 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 LXy$hlf3N*N>&(Qb diff --git a/resources/valid_survey/survey_3_xml.xml b/resources/valid_survey/survey_3_xml.xml deleted file mode 100644 index 3b4fe5b..0000000 --- a/resources/valid_survey/survey_3_xml.xml +++ /dev/null @@ -1,1786 +0,0 @@ - - - - survey_3_xls - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please provide the phone number of the respondent (eg. 256779618452) - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - - - - - - - - - - - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - 11 - - - - 12 - - - - 13 - - - - - - - 502301 - - - - 502302 - - - - 502303 - - - - 502304 - - - - 502305 - - - - 502306 - - - - 502601 - - - - 502602 - - - - 502603 - - - - 502604 - - - - 502605 - - - - 502606 - - - - 502701 - - - - 502702 - - - - 502703 - - - - 11002501 - - - - 11002502 - - - - 11002503 - - - - 11002504 - - - - 11002505 - - - - - Of the respondent - - - - Of the respondent - - - - - - 1 - - - - 2 - - - - - - - - - - - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - 11 - - - - 12 - - - - 13 - - - - 14 - - - - - - - - Including those in boarding school - - - - - - 1 - - - - 2 - - - - - To the nearest year - - - - - - 0 - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - 11 - - - - 12 - - - - 13 - - - - 14 - - - - 15 - - - - 16 - - - - 17 - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - - - - - In UGX - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - - In UGX - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - - - - 1 - - - - 2 - - - - - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - 11 - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - - - - 0 - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - 10 - - - - 11 - - - - - - - - To the nearest hour - - - - - - - In UGX - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - - In liters - - - - In UGX - - - - - - 1 - - - - 2 - - - - 3 - - - - - In UGX - - - - - - - In UGX - - - - - - 1 - - - - 2 - - - - 3 - - - - - In UGX - - - - - - - In UGX (99 = didn't purchase it) - - - - - - - - - - - - 1 - - - - 2 - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - 8 - - - - 9 - - - - - In UGX - - - - - - - - - - - - 1 - - - - 2 - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - - - - - - - - - - - In UGX - - - - - - - - - - - - - - - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - In UGX - - - - Or another device if you already own one - - - 1 - - - - 2 - - - - - - - 1 - - - - 2 - - - - 3 - - - - 4 - - - - 5 - - - - 6 - - - - 7 - - - - - - - - In UGX - - - - Please read the options - - - 1 - - - - 2 - - - - - - - - - - - - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - 1 - - - - 2 - - - - 3 - - - - - - - - From 3195197eb51d4946b8a8a91ff5c67fc570d92afe Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 17 Jun 2014 18:17:41 +0100 Subject: [PATCH 03/13] First work on public README.md --- README.md | 97 ++++++++++++++++++++++++------------------------------- 1 file changed, 43 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 118b0ca..07c7c46 100644 --- a/README.md +++ b/README.md @@ -7,62 +7,67 @@ Built using [Codeigniter](http://ellislab.com/codeigniter) ## Team Daniel da Silva - [Github](https://github.com/danielfdsilva) -Ricardo Mestre - [Github](https://github.com/ricardomestre) -Olaf Veerman - [Github](https://github.com/olafveerman) +Olaf Veerman - [Github](https://github.com/olafveerman) +Nuno Veloso - [Github](https://github.com/nunoveloso) +Ricardo Mestre - [Github](https://github.com/ricardomestre) + +___ ## Development environment -### Requirements +To ease development everything was bundled in a vagrant box. To setup the vagrant box check out the [instructions in the wiki](). + +If you want to develop locally, without using the vagrant box, check the [local development section]() for the needed dependencies. + + +## Requirements +These dependencies and setup are needed to build the app no matter the development environment you choose to use, and must be done on your machine. - Node & Npm - Grunt ( $ npm install -g grunt-cli ) - Bower ($ npm install -g bower) ### Setup -**This is to be done in the local machine, not on vagrant** -After cloning the repository, setup the public files directory and its subfolders at the root of the app: +Update git submodules: ``` -$ mkdir -p files/surveys -$ chmod -R 777 files +$ git submodule update --recursive ``` -Update git submodules (**This should be also done after pulling changes**): +Install airwolf dependencies: ``` -$ git submodule update --recursive +$ npm install + ``` -The enketo library needs to be built. Change into its directory: ``` -$ cd assets/libs/enketo-core -$ npm install -$ grunt +$ bower install ``` -### Task automation -After these basic requirements are met, run the following commands in the website's folder: +The enketo library needs to be built. Change into its directory: ``` +$ cd assets/libs/enketo-core $ npm install - +$ grunt ``` +Edit pyxform (xls2xform.py) ``` -$ bower install +vim application/third_party/pyxform/pyxform/xls2xform.py ``` -Bower will create a ```bower_components``` directory in the src with all the sass and js needed for foundation. Nothing needs to be done there. +On line ```22``` change ```validate=True``` to ```validate=False``` +___ -You might have to run these as sudo. - -#### Getting started +## Getting started ``` $ grunt ``` -Compiles the compass files, javascripts and generates the website. +Compiles the compass files, javascript and generates the website. The system will watch files and execute tasks whenever one of them changes. -#### Other commands +### Other commands Clean the compiled sass and javascript: ``` $ grunt clean ``` -Compile the compass files, javascripts and generate the website. Use this instead of ```grunt``` if you just want to render it once: +Compile the compass files, javascript and generate the website. Use this instead of ```grunt``` if you just want to render it once: ``` $ grunt build ``` @@ -71,37 +76,21 @@ Compile the compass files and javascripts prepared for production (minified, ugl ``` $ grunt prod ``` +___ -### Running -**Temporary**   -The aw-datacollection app requires mongo.   -Ssh into the vagrant machine and start mongo. -``` -$ vagrant ssh -$ mongod -``` - -## Vagrant machine - -### Requirements -- No requirements (Everything needed is installed during bootstrap) +## First run +To setup the application go to ```http://your-domain.com/fixtures``` or ```http://192.168.99.10/work/aw-datacollection/fixtures``` if you're using the vagrant box. +This will give you 2 options to setup the application: +- **Live** + - All the data present in the application will be removed and a user will be added. + - Default credentials: **admin** | admin +- **Development** + - All the data present in the application will be replaced with dummy data. + - This data includes surveys in various statuses and several users. + - @todo: add link with more info. +___ ## Testing -Testing should be done from within the vagrant machine. - -### Code testing - -Server side testing is being done with phpunit. -Check the documentation for more. - -### Behaviour testing - -This is implemented with [CasperJS](http://casperjs.org/) and currently living under `tests/casperjs`. - -``` -@todo -- integration with grunt -- document usage -``` - +Testing is done using phpunit. To rn the tests you just need to run ```phpunit``` in the app root folder. +If you're using the Vagrant box environment be sure to do this inside the vagrant machine. \ No newline at end of file From fb44f523266b25d213f6ab4d992de3a2cf1476c2 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 12:01:16 +0100 Subject: [PATCH 04/13] Minor fixes --- application/config/mongodb.php | 2 +- application/controllers/fixtures.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/config/mongodb.php b/application/config/mongodb.php index 87c71fc..20debae 100644 --- a/application/config/mongodb.php +++ b/application/config/mongodb.php @@ -5,4 +5,4 @@ $config['default']['persist'] = TRUE; $config['default']['persist_key'] = 'ci_persist'; $config['default']['replica_set'] = FALSE; -$config['default']['query_safety'] = 'safe'; +$config['default']['query_safety'] = 'w'; diff --git a/application/controllers/fixtures.php b/application/controllers/fixtures.php index f14e6a6..8c0602e 100644 --- a/application/controllers/fixtures.php +++ b/application/controllers/fixtures.php @@ -107,9 +107,9 @@ public function index() { show_error('Not allowed. Only available during development'); } - echo '

Fixtures:

'; - echo anchor('fixtures/all', 'Setup fixtures') . '

'; - echo anchor('fixtures/live_setup', 'Live (Only admin user is created)'); + echo '

Setup:

'; + echo anchor('fixtures/all', 'Development') . '

'; + echo anchor('fixtures/live_setup', 'Live'); } /** From 3ed4d901bfa903d83e96233bd2b9ad192e325d48 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 14:35:49 +0100 Subject: [PATCH 05/13] Add vagrant box to airwolf --- .gitignore | 1 + Vagrantfile | 121 +++++++++++++++++++++++++ application/config/config.php | 4 +- bootstrap.sh | 161 ++++++++++++++++++++++++++++++++++ index.php | 3 + reset.demo.php | 4 +- 6 files changed, 290 insertions(+), 4 deletions(-) create mode 100644 Vagrantfile create mode 100644 bootstrap.sh diff --git a/.gitignore b/.gitignore index 6193f74..2ec2611 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ tests/tmp #System files .project .DS_Store +.vagrant # Other document-it diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..4255e36 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,121 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + # Every Vagrant virtual environment requires a box to build off of. + config.vm.box = "precise32" + + # Base Box url + config.vm.box_url = "http://files.vagrantup.com/precise32.box" + + # Hostname. + config.vm.hostname = "legoBrick" + + # The url from where the 'config.vm.box' box will be fetched if it + # doesn't already exist on the user's system. + # config.vm.box_url = "http://domain.com/path/to/above.box" + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + config.vm.network :forwarded_port, guest: 80, host: 8081 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + config.vm.network :private_network, ip: "192.168.99.10" + + # Provisioning. + config.vm.provision :shell, :path => "bootstrap.sh" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network :public_network + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + config.vm.synced_folder ".", "/vagrant", owner: "vagrant", group: "www-data", + :mount_options => ['dmode=775', 'fmode=664'] + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider :virtualbox do |vb| + # # Don't boot with headless mode + # vb.gui = true + # + # # Use VBoxManage to customize the VM. For example to change memory: + # vb.customize ["modifyvm", :id, "--memory", "1024"] + # end + # + # View the documentation for the provider you're using for more + # information on available options. + + # Enable provisioning with Puppet stand alone. Puppet manifests + # are contained in a directory path relative to this Vagrantfile. + # You will need to create the manifests directory and a manifest in + # the file precise32.pp in the manifests_path directory. + # + # An example Puppet manifest to provision the message of the day: + # + # # group { "puppet": + # # ensure => "present", + # # } + # # + # # File { owner => 0, group => 0, mode => 0644 } + # # + # # file { '/etc/motd': + # # content => "Welcome to your Vagrant-built virtual machine! + # # Managed by Puppet.\n" + # # } + # + # config.vm.provision :puppet do |puppet| + # puppet.manifests_path = "manifests" + # puppet.manifest_file = "init.pp" + # end + + # Enable provisioning with chef solo, specifying a cookbooks path, roles + # path, and data_bags path (all relative to this Vagrantfile), and adding + # some recipes and/or roles. + # + # config.vm.provision :chef_solo do |chef| + # chef.cookbooks_path = "../my-recipes/cookbooks" + # chef.roles_path = "../my-recipes/roles" + # chef.data_bags_path = "../my-recipes/data_bags" + # chef.add_recipe "mysql" + # chef.add_role "web" + # + # # You may also specify custom JSON attributes: + # chef.json = { :mysql_password => "foo" } + # end + + # Enable provisioning with chef server, specifying the chef server URL, + # and the path to the validation key (relative to this Vagrantfile). + # + # The Opscode Platform uses HTTPS. Substitute your organization for + # ORGNAME in the URL and validation key. + # + # If you have your own Chef Server, use the appropriate URL, which may be + # HTTP instead of HTTPS depending on your configuration. Also change the + # validation key to validation.pem. + # + # config.vm.provision :chef_client do |chef| + # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" + # chef.validation_key_path = "ORGNAME-validator.pem" + # end + # + # If you're using the Opscode platform, your validator client is + # ORGNAME-validator, replacing ORGNAME with your organization name. + # + # If you have your own Chef Server, the default validation client name is + # chef-validator, unless you changed the configuration. + # + # chef.validation_client_name = "ORGNAME-validator" +end diff --git a/application/config/config.php b/application/config/config.php index 7fc0ed3..c80f3a4 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -14,7 +14,7 @@ | path to your installation. | */ -$config['base_url'] = 'http://192.168.99.10/work/aw-datacollection/'; +$config['base_url'] = 'http://192.168.99.10/airwolf/'; //$config['base_url'] = ''; /* @@ -393,4 +393,4 @@ $config['aw_admin_email'] = 'aw-datacollection@airwolf.edispilf.org'; /* End of file config.php */ -/* Location: ./application/config/config.php */ \ No newline at end of file +/* Location: ./application/config/config.php */ diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100644 index 0000000..2a1c620 --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,161 @@ +#!/usr/bin/env bash +VERSION=2 + +if [ -e runonce.vagrant ]; then + CURRENT_VERSION=$(tail -n 1 runonce.vagrant) + # Just an early check to kill the script. + if (( $CURRENT_VERSION >= $VERSION )); then + echo "Provisioning at latest version. VERSION: $CURRENT_VERSION" + exit; + fi +else + CURRENT_VERSION=0 +fi + +if (( $CURRENT_VERSION < 1 )); then + CURRENT_VERSION=1 + echo "Installing version $CURRENT_VERSION" + ####################################### + ## START PROVISIONING ## + ####################################### + sudo apt-get update + + # General Program + sudo apt-get -y install vim + sudo apt-get -y install unzip + sudo apt-get -y install make + sudo apt-get -y install curl + + # Apache + sudo apt-get -y install apache2 + sudo a2enmod rewrite + echo 'ServerName localhost' | sudo tee -a /etc/apache2/httpd.conf + sudo service apache2 restart + + # mysql + sudo echo "mysql-server-5.5 mysql-server/root_password password root" | debconf-set-selections + sudo echo "mysql-server-5.5 mysql-server/root_password_again password root" | debconf-set-selections + sudo apt-get -y install mysql-server-5.5 + + # php + sudo apt-get -y install php5 php5-dev php5-cli php-pear + sudo apt-get -y install php5-mysql php5-suhosin php-pear php5-curl php5-gd php5-imagick php5-mcrypt php5-memcache php5-xdebug php-apc + sudo apt-get -y install libapache2-mod-php5 + sudo service apache2 restart + + # Setup link + sudo ln -s /vagrant /var/www/airwolf + + # Delete index.html to have directory listing + sudo rm /var/www/index.html + + # Install Mongo + sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 + echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list + sudo apt-get update + sudo apt-get -y install mongodb-org + + # Mongo extension for php + no | sudo pecl install mongo + echo 'extension=mongo.so' | sudo tee -a /etc/php5/apache2/php.ini + echo 'extension=mongo.so' | sudo tee -a /etc/php5/cli/php.ini + sudo service apache2 restart + + # Install phpunit + sudo pear config-set auto_discover 1 + sudo pear install pear.phpunit.de/PHPUnit + + # Install php5-xsl extension + sudo apt-get -y install php5-xsl + echo 'extension=php_xsl.so' | sudo tee -a /etc/php5/apache2/php.ini + echo 'extension=php_xsl.so' | sudo tee -a /etc/php5/cli/php.ini + sudo service apache2 restart + + # Python xlrd + sudo apt-get -y install python-pip + sudo pip install xlrd + + # Admin Apps + + # Phpmyadmin + wget https://github.com/phpmyadmin/phpmyadmin/archive/RELEASE_4_1_3.tar.gz + tar -xzf RELEASE_4_1_3.tar.gz + rm RELEASE_4_1_3.tar.gz + sudo mv phpmyadmin-RELEASE_4_1_3/ /var/www/phpmyadmin + + # Genghis App + wget https://github.com/bobthecow/genghis/archive/v2.3.10.zip + unzip v2.3.10.zip + rm v2.3.10.zip + sudo mv genghis-2.3.10 /var/www/genghis + + # Some php configurations + + # Set display errors to On + # Author: olaf@flipside.org + PHP_FILE="/etc/php5/apache2/php.ini" + sudo sed -i "s/display_errors = Off/display_errors = On/" $PHP_FILE + + # Change AllowOverride None to AllowOverride All on line 11 for default site vhost. + # Multiline regex matched don't work with sed so I resorted to php. + # Better solution is welcome! + php -r '$f="/etc/apache2/sites-available/default";$d=file_get_contents($f);$d=preg_replace("/(.*?AllowOverride )None(.*?<\/Directory>)/s","$1All$2",$d);file_put_contents($f,$d);' + + sudo service apache2 restart + + + ####################################### + ## END PROVISIONING ## + ####################################### +fi + +if (( $CURRENT_VERSION < 2 )); then + CURRENT_VERSION=2 + echo "Installing version $CURRENT_VERSION" + ####################################### + ## START PROVISIONING ## + ####################################### + + sudo apt-get update + sudo apt-get install -y python-software-properties python g++ make + sudo add-apt-repository -y ppa:chris-lea/node.js + sudo apt-get update + sudo apt-get install -y nodejs + + sudo npm install -g casperjs + + sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-i686.tar.bz2 + sudo tar -xf phantomjs-1.9.7-linux-i686.tar.bz2 + sudo rm phantomjs-1.9.7-linux-i686.tar.bz2 + sudo mv phantomjs-1.9.7-linux-i686/ /opt/phantomjs + sudo ln -s /opt/phantomjs/bin/phantomjs /usr/bin/phantomjs + + ####################################### + ## END PROVISIONING ## + ####################################### +fi + +# Create file to make it run according to versions. +echo 'File to make Vagrant provisioning run according to versions. Do not delete.' > runonce.vagrant +echo 'Current version:' >> runonce.vagrant +echo $CURRENT_VERSION >> runonce.vagrant +exit; + +# NEW VERSION CODE +# Remove comments and change version number. +# Do not forget to change the version number at the top of the file. +< \ No newline at end of file +?> From 876b8a7b5dcfd853f226e8ffc22f0a2c2d2c18a2 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 15:23:23 +0100 Subject: [PATCH 06/13] Fix demo key leak problem --- application/controllers/fixtures.php | 13 +++++++---- reset.demo.php | 33 +++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/application/controllers/fixtures.php b/application/controllers/fixtures.php index 8c0602e..ac2d870 100644 --- a/application/controllers/fixtures.php +++ b/application/controllers/fixtures.php @@ -115,14 +115,14 @@ public function index() { /** * Populate db. */ - public function all($key = NULL) { + public function all() { if (ENVIRONMENT != 'development' && ENVIRONMENT != 'demo'){ show_error('Not allowed. Only available during development'); } else if (ENVIRONMENT == 'demo') { - $demo_key = @file_get_contents('reset.demo.key'); + $demo_key = trim(@file_get_contents('reset.demo.key')); - if (!$demo_key || $demo_key != $key) { + if (!$demo_key || $demo_key != $_GET['reset_key']) { show_error('Wrong or missing key.'); } } @@ -150,7 +150,12 @@ public function all($key = NULL) { // Indexes. $this->mongo_db->addIndex('call_tasks', array('ctid' => 'asc')); - redirect('/'); + if (ENVIRONMENT == 'development') { + redirect('/'); + } + else { + print "Done"; + } } } diff --git a/reset.demo.php b/reset.demo.php index d735fe5..8ab55ab 100644 --- a/reset.demo.php +++ b/reset.demo.php @@ -17,17 +17,38 @@ // Calculate when the next reset should happen. $last->add(new DateInterval('PT' . $minutes_between_resets . 'M')); $interval = $last->diff(new DateTime()); - + // Is the reset date still in the future? if ($interval->invert === 1) { $seconds = $interval->s + $interval->i * 60 + $interval->h * 60 * 60; define('RESET_SECONDS_LEFT', $seconds); } else { - $demo_key = @file_get_contents($key_file); - // Set reset time and Redirect. - file_put_contents($control_file, serialize(new DateTime())); - header('Location: http://192.168.99.10/airwolf/fixtures/all/' . $demo_key); - exit; + $demo_key = trim(@file_get_contents($key_file)); + + if (empty($demo_key)) { + die('Missing key.'); + } + + // Check if a reset request is already being made by CURL. + // Prevent additional requests from firing. + if (!isset($_GET['reset_key']) || $_GET['reset_key'] != $demo_key) { + $base_url = 'http://192.168.99.10/airwolf/'; + // Set reset time and perform request. + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $base_url . 'fixtures/all/?reset_key=' . $demo_key); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $res = curl_exec($ch); + curl_close($ch); + + if ($res != 'Done') { + print $res; + exit; + } + + file_put_contents($control_file, serialize(new DateTime())); + header('Location: ' . $base_url); + exit; + } } ?> From 2b84c6dd474f9aaec0b37f084398929cd9565eff Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 15:35:53 +0100 Subject: [PATCH 07/13] Update README --- README.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 07c7c46..64fa9f4 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Ricardo Mestre - [Github](https://github.com/ricardomestre) ___ ## Development environment -To ease development everything was bundled in a vagrant box. To setup the vagrant box check out the [instructions in the wiki](). +To ease development everything was bundled in a vagrant box. To setup the vagrant box check out the [instructions in the wiki](https://github.com/flipside-org/aw-datacollection/wiki/Vagrant-box). -If you want to develop locally, without using the vagrant box, check the [local development section]() for the needed dependencies. +If you want to develop locally, without using the vagrant box, check the [local development section](https://github.com/flipside-org/aw-datacollection/wiki/Local-development) for the needed dependencies. ## Requirements @@ -27,10 +27,11 @@ These dependencies and setup are needed to build the app no matter the developme ### Setup -Update git submodules: +Initialize and update git submodules: ``` -$ git submodule update --recursive +$ git submodule update --init --recursive ``` +Subsequent updates of git submodules must be done without the ```--init``` flag Install airwolf dependencies: ``` @@ -47,11 +48,20 @@ $ cd assets/libs/enketo-core $ npm install $ grunt ``` -Edit pyxform (xls2xform.py) +Edit pyxform library (xls2xform.py) ``` vim application/third_party/pyxform/pyxform/xls2xform.py ``` On line ```22``` change ```validate=True``` to ```validate=False``` + +Edit pyxform library (survey.py) +``` +vim application/third_party/pyxform/pyxform/survey.py +``` +On line ```13``` change ```from pyxform import constants``` to ``` import constants``` + + + ___ ## Getting started @@ -79,7 +89,7 @@ $ grunt prod ___ ## First run -To setup the application go to ```http://your-domain.com/fixtures``` or ```http://192.168.99.10/work/aw-datacollection/fixtures``` if you're using the vagrant box. +To setup the application go to ```http://your-domain.com/fixtures``` or ```http://192.168.99.10/work/aw-datacollection/fixtures``` if you're using the vagrant box. This will give you 2 options to setup the application: - **Live** @@ -88,9 +98,14 @@ This will give you 2 options to setup the application: - **Development** - All the data present in the application will be replaced with dummy data. - This data includes surveys in various statuses and several users. - - @todo: add link with more info. + - Administrator: **admin** | admin + - Moderator: **moderator** | moderator + - Agent: **agent** | agent + - User with all roles: **all_roles** | all_roles + +After this setup, change the environment to *production* on ```index.php``` ___ ## Testing -Testing is done using phpunit. To rn the tests you just need to run ```phpunit``` in the app root folder. +Testing is done using phpunit. To run the tests you just need to run ```phpunit``` in the app's root folder. If you're using the Vagrant box environment be sure to do this inside the vagrant machine. \ No newline at end of file From 9915c5e48b0401bbaa3d21636e31bf8780d34f78 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 15:49:49 +0100 Subject: [PATCH 08/13] Add patch for pyxform --- README.md | 14 ++------------ pyxform_validate_and_constants.patch | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 pyxform_validate_and_constants.patch diff --git a/README.md b/README.md index 64fa9f4..5ad76ab 100644 --- a/README.md +++ b/README.md @@ -48,20 +48,10 @@ $ cd assets/libs/enketo-core $ npm install $ grunt ``` -Edit pyxform library (xls2xform.py) +Patch pyxform library: ``` -vim application/third_party/pyxform/pyxform/xls2xform.py +$ git apply --directory=application/third_party/pyxform/ pyxform_validate_and_constants.patch ``` -On line ```22``` change ```validate=True``` to ```validate=False``` - -Edit pyxform library (survey.py) -``` -vim application/third_party/pyxform/pyxform/survey.py -``` -On line ```13``` change ```from pyxform import constants``` to ``` import constants``` - - - ___ ## Getting started diff --git a/pyxform_validate_and_constants.patch b/pyxform_validate_and_constants.patch new file mode 100644 index 0000000..0d2fccb --- /dev/null +++ b/pyxform_validate_and_constants.patch @@ -0,0 +1,26 @@ +diff --git a/pyxform/survey.py b/pyxform/survey.py +index f2eee5f..7271432 100644 +--- a/pyxform/survey.py ++++ b/pyxform/survey.py +@@ -10,7 +10,7 @@ import os + from odk_validate import check_xform + from survey_element import SurveyElement + from errors import PyXFormError +-from pyxform import constants ++import constants + + + nsmap = { +diff --git a/pyxform/xls2xform.py b/pyxform/xls2xform.py +index 81263f3..8cfe48f 100644 +--- a/pyxform/xls2xform.py ++++ b/pyxform/xls2xform.py +@@ -19,7 +19,7 @@ def xls2xform_convert(): + # ODK Validate. + # This may be desirable since ODK Validate requires launching a subprocess + # that runs some java code. +- survey.print_xform_to_file(argv[2], validate=True, warnings=warnings) ++ survey.print_xform_to_file(argv[2], validate=False, warnings=warnings) + + return warnings + From 7ed9406a1aafda0e3f9f6232ae57ede959434373 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 16:27:02 +0100 Subject: [PATCH 09/13] Small README corrections --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5ad76ab..be1aaf3 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ These dependencies and setup are needed to build the app no matter the developme - Node & Npm - Grunt ( $ npm install -g grunt-cli ) - Bower ($ npm install -g bower) +- Sass +- Compass (>= *1.0.0.alpha.19* ```$ sudo gem install compass -v 1.0.0.alpha.19 --pre```) ### Setup @@ -42,13 +44,13 @@ $ npm install $ bower install ``` -The enketo library needs to be built. Change into its directory: +The enketo library needs to be built: ``` $ cd assets/libs/enketo-core $ npm install $ grunt ``` -Patch pyxform library: +Patch pyxform library, from the app root folder: ``` $ git apply --directory=application/third_party/pyxform/ pyxform_validate_and_constants.patch ``` @@ -79,7 +81,7 @@ $ grunt prod ___ ## First run -To setup the application go to ```http://your-domain.com/fixtures``` or ```http://192.168.99.10/work/aw-datacollection/fixtures``` if you're using the vagrant box. +To setup the application go to ```http://your-domain.com/fixtures``` or ```http://192.168.99.10/airwolf/fixtures``` if you're using the vagrant box. This will give you 2 options to setup the application: - **Live** From 1a4c74c8cd2498dbf223027b1106c5b13287e009 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 16:49:57 +0100 Subject: [PATCH 10/13] Remove extra space --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index be1aaf3..50f0aa3 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,6 @@ Subsequent updates of git submodules must be done without the ```--init``` flag Install airwolf dependencies: ``` $ npm install - ``` ``` $ bower install From 27b487dde5391a66e769d23c9d22f73b25c7aa01 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 18 Jun 2014 17:09:17 +0100 Subject: [PATCH 11/13] Add .pydevproject to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2ec2611..9251fe0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ tests/tmp #System files .project +.pydevproject .DS_Store .vagrant From 2be40a4bbec5070d8edfa5cb70fd73c1c8bde258 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 19 Jun 2014 09:47:24 +0100 Subject: [PATCH 12/13] Fix error reported in comment --- application/views/base/html_end.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/views/base/html_end.php b/application/views/base/html_end.php index 8e29ed7..4c84c95 100644 --- a/application/views/base/html_end.php +++ b/application/views/base/html_end.php @@ -1,10 +1,10 @@

- View on GitHub + View on GitHub

load->view('components/confirm_box') ?> load->view('base/footer_scripts') ?> - \ No newline at end of file + From ab00d99eea9be938273e30b6a7a25cf3b26c08d3 Mon Sep 17 00:00:00 2001 From: Olaf Veerman Date: Thu, 19 Jun 2014 10:30:05 +0100 Subject: [PATCH 13/13] Improve install instructions of readme --- README.md | 59 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 50f0aa3..7f52ab2 100644 --- a/README.md +++ b/README.md @@ -7,20 +7,21 @@ Built using [Codeigniter](http://ellislab.com/codeigniter) ## Team Daniel da Silva - [Github](https://github.com/danielfdsilva) +Ricardo Mestre - [Github](https://github.com/ricardomestre) Olaf Veerman - [Github](https://github.com/olafveerman) Nuno Veloso - [Github](https://github.com/nunoveloso) -Ricardo Mestre - [Github](https://github.com/ricardomestre) ___ ## Development environment -To ease development everything was bundled in a vagrant box. To setup the vagrant box check out the [instructions in the wiki](https://github.com/flipside-org/aw-datacollection/wiki/Vagrant-box). +To ease development, everything was bundled in a vagrant box. To set it up, simply run ```vagrant up``` from the root of the project. For more details about the Vagrant box and useful commands, check out the [instructions in the wiki](https://github.com/flipside-org/aw-datacollection/wiki/Vagrant-box). + +If you want to develop locally without using the vagrant box, check the [local development section](https://github.com/flipside-org/aw-datacollection/wiki/Local-development) for the needed dependencies. -If you want to develop locally, without using the vagrant box, check the [local development section](https://github.com/flipside-org/aw-datacollection/wiki/Local-development) for the needed dependencies. +### Requirements +These dependencies are needed to build the app no matter whether you use the Vagrant box or manually set up the environment: -## Requirements -These dependencies and setup are needed to build the app no matter the development environment you choose to use, and must be done on your machine. - Node & Npm - Grunt ( $ npm install -g grunt-cli ) - Bower ($ npm install -g bower) @@ -47,36 +48,18 @@ The enketo library needs to be built: ``` $ cd assets/libs/enketo-core $ npm install -$ grunt +$ grunt --force ``` Patch pyxform library, from the app root folder: ``` $ git apply --directory=application/third_party/pyxform/ pyxform_validate_and_constants.patch ``` -___ -## Getting started -``` -$ grunt -``` -Compiles the compass files, javascript and generates the website. -The system will watch files and execute tasks whenever one of them changes. +Build the CSS and Javascript, from the root folder of the -### Other commands -Clean the compiled sass and javascript: -``` -$ grunt clean -``` - -Compile the compass files, javascript and generate the website. Use this instead of ```grunt``` if you just want to render it once: ``` $ grunt build ``` - -Compile the compass files and javascripts prepared for production (minified, uglyfied). Every time changes will be pushed to production, this command needs to be run: -``` -$ grunt prod -``` ___ ## First run @@ -97,6 +80,32 @@ This will give you 2 options to setup the application: After this setup, change the environment to *production* on ```index.php``` ___ +## Build automation +Grunt is used for the build automation. + +``` +$ grunt +``` +Compiles the compass files, javascript and generates the website. +The system will watch files and execute tasks whenever one of them changes. + +### Other commands +Clean the compiled sass and javascript: +``` +$ grunt clean +``` + +Compile the compass files, javascript and generate the website. Use this instead of ```grunt``` if you just want to render it once: +``` +$ grunt build +``` + +Compile the compass files and javascripts prepared for production (minified, uglyfied). Every time changes will be pushed to production, this command needs to be run: +``` +$ grunt prod +``` +___ + ## Testing Testing is done using phpunit. To run the tests you just need to run ```phpunit``` in the app's root folder. If you're using the Vagrant box environment be sure to do this inside the vagrant machine. \ No newline at end of file