hackathon_manager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +90 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/hackathon_manager_manifest.js +0 -0
  6. data/app/assets/javascripts/hackathon_manager/application.js +16 -0
  7. data/app/assets/javascripts/hackathon_manager/jquery.transit.min.js +1 -0
  8. data/app/assets/javascripts/hackathon_manager/main.js +237 -0
  9. data/app/assets/javascripts/hackathon_manager/manage/application.js +20 -0
  10. data/app/assets/javascripts/hackathon_manager/manage/lib/emailEvents.js +25 -0
  11. data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.bulkRowSelect.js +13 -0
  12. data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.bulkRowedit.js +42 -0
  13. data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.chartkickAutoReload.js +8 -0
  14. data/app/assets/javascripts/hackathon_manager/manage/lib/setupDataTables.js +98 -0
  15. data/app/assets/javascripts/hackathon_manager/manage/lib/setupHighcharts.js +34 -0
  16. data/app/assets/javascripts/hackathon_manager/manage/map.js +58 -0
  17. data/app/assets/javascripts/hackathon_manager/registrations.js +26 -0
  18. data/app/assets/javascripts/hackathon_manager/us.json +1 -0
  19. data/app/assets/javascripts/hackathon_manager/vendor/buttons.html5.min.js +22 -0
  20. data/app/assets/javascripts/hackathon_manager/vendor/d3.v3.min.js +5 -0
  21. data/app/assets/javascripts/hackathon_manager/vendor/dataTables.buttons.min.js +35 -0
  22. data/app/assets/javascripts/hackathon_manager/vendor/jquery.dataTables.min.js +164 -0
  23. data/app/assets/javascripts/hackathon_manager/vendor/pdfmake.min.js +22 -0
  24. data/app/assets/javascripts/hackathon_manager/vendor/queue.v1.min.js +1 -0
  25. data/app/assets/javascripts/hackathon_manager/vendor/topojson.v1.min.js +1 -0
  26. data/app/assets/javascripts/hackathon_manager/vendor/vfs_fonts.js +1 -0
  27. data/app/assets/stylesheets/hackathon_manager/core.sass +20 -0
  28. data/app/assets/stylesheets/hackathon_manager/datatables/buttons.dataTables.min.css +1 -0
  29. data/app/assets/stylesheets/hackathon_manager/datatables/jquery.dataTables.min.css +1 -0
  30. data/app/assets/stylesheets/hackathon_manager/forms/_confirmation.sass +21 -0
  31. data/app/assets/stylesheets/hackathon_manager/forms/_forms.sass +243 -0
  32. data/app/assets/stylesheets/hackathon_manager/general/_base.sass +105 -0
  33. data/app/assets/stylesheets/hackathon_manager/general/_button.sass +49 -0
  34. data/app/assets/stylesheets/hackathon_manager/general/_footer.sass +21 -0
  35. data/app/assets/stylesheets/hackathon_manager/general/_main.sass +4 -0
  36. data/app/assets/stylesheets/hackathon_manager/general/_media-queries.sass +52 -0
  37. data/app/assets/stylesheets/hackathon_manager/general/_mixins.sass +58 -0
  38. data/app/assets/stylesheets/hackathon_manager/general/_mlh.sass +13 -0
  39. data/app/assets/stylesheets/hackathon_manager/general/_sidebar.sass +70 -0
  40. data/app/assets/stylesheets/hackathon_manager/general/_status-colors.sass +14 -0
  41. data/app/assets/stylesheets/hackathon_manager/general/_table.sass +26 -0
  42. data/app/assets/stylesheets/hackathon_manager/mailer.sass +108 -0
  43. data/app/assets/stylesheets/hackathon_manager/manage.sass +119 -0
  44. data/app/assets/stylesheets/hackathon_manager/scaffolds.scss +50 -0
  45. data/app/assets/stylesheets/variables.sass +41 -0
  46. data/app/controllers/bus_lists_controller.rb +37 -0
  47. data/app/controllers/concerns/questionnaires_controllable.rb +15 -0
  48. data/app/controllers/manage/admins_controller.rb +55 -0
  49. data/app/controllers/manage/application_controller.rb +13 -0
  50. data/app/controllers/manage/bus_lists_controller.rb +71 -0
  51. data/app/controllers/manage/dashboard_controller.rb +112 -0
  52. data/app/controllers/manage/messages_controller.rb +88 -0
  53. data/app/controllers/manage/questionnaires_controller.rb +172 -0
  54. data/app/controllers/manage/schools_controller.rb +87 -0
  55. data/app/controllers/manage/stats_controller.rb +77 -0
  56. data/app/controllers/questionnaires_controller.rb +145 -0
  57. data/app/controllers/rsvps_controller.rb +97 -0
  58. data/app/controllers/users/omniauth_callbacks_controller.rb +18 -0
  59. data/app/controllers/users/registrations_controller.rb +63 -0
  60. data/app/datatables/admin_datatable.rb +29 -0
  61. data/app/datatables/message_datatable.rb +30 -0
  62. data/app/datatables/questionnaire_datatable.rb +39 -0
  63. data/app/datatables/school_datatable.rb +34 -0
  64. data/app/helpers/hackathon_manager_helper.rb +36 -0
  65. data/app/helpers/manage/dashboard_helper.rb +9 -0
  66. data/app/inputs/deletable_attachment_input.rb +11 -0
  67. data/app/inputs/formatted_boolean_input.rb +26 -0
  68. data/app/inputs/school_selection_input.rb +9 -0
  69. data/app/mailers/application_mailer.rb +4 -0
  70. data/app/mailers/mail_preview.rb +42 -0
  71. data/app/mailers/mailer.rb +84 -0
  72. data/app/models/bus_list.rb +24 -0
  73. data/app/models/deletable_attachment.rb +17 -0
  74. data/app/models/fips.rb +3 -0
  75. data/app/models/message.rb +76 -0
  76. data/app/models/questionnaire.rb +166 -0
  77. data/app/models/schedule.rb +53 -0
  78. data/app/models/school.rb +31 -0
  79. data/app/models/school_name_duplicate.rb +7 -0
  80. data/app/models/user.rb +52 -0
  81. data/app/views/application/_bus_list_info.html.haml +20 -0
  82. data/app/views/application/_bus_list_stats.html.haml +9 -0
  83. data/app/views/application/_questionnaire_summary.html.haml +54 -0
  84. data/app/views/bus_lists/show.html.haml +45 -0
  85. data/app/views/devise/passwords/_form.html.haml +9 -0
  86. data/app/views/devise/passwords/edit.html.haml +14 -0
  87. data/app/views/devise/passwords/new.html.haml +5 -0
  88. data/app/views/devise/registrations/_form.html.haml +8 -0
  89. data/app/views/devise/registrations/edit.html.haml +20 -0
  90. data/app/views/devise/registrations/new.html.haml +18 -0
  91. data/app/views/devise/sessions/_form.html.haml +8 -0
  92. data/app/views/devise/sessions/new.html.haml +9 -0
  93. data/app/views/layouts/_shared_footer.html.haml +1 -0
  94. data/app/views/layouts/_sidebar.html.haml +22 -0
  95. data/app/views/layouts/blank.html.haml +12 -0
  96. data/app/views/layouts/dayof.html.haml +12 -0
  97. data/app/views/layouts/hackathon_manager.html.haml +12 -0
  98. data/app/views/layouts/mailer.html.erb +51 -0
  99. data/app/views/layouts/manage/application.html.haml +26 -0
  100. data/app/views/mailer/_getting_there.html.erb +14 -0
  101. data/app/views/mailer/_questions.html.erb +2 -0
  102. data/app/views/mailer/accepted_email.html.erb +13 -0
  103. data/app/views/mailer/application_confirmation_email.html.erb +13 -0
  104. data/app/views/mailer/bulk_message_email.html.erb +1 -0
  105. data/app/views/mailer/bulk_templates/_default.html.erb +1 -0
  106. data/app/views/mailer/bus_captain_confirmation_email.html.erb +12 -0
  107. data/app/views/mailer/bus_list_update_email.html.erb +7 -0
  108. data/app/views/mailer/denied_email.html.erb +5 -0
  109. data/app/views/mailer/incomplete_reminder_email.html.erb +6 -0
  110. data/app/views/mailer/rsvp_confirmation_email.html.erb +8 -0
  111. data/app/views/mailer/slack_invite_email.html.erb +10 -0
  112. data/app/views/manage/admins/_form.html.haml +18 -0
  113. data/app/views/manage/admins/edit.html.haml +12 -0
  114. data/app/views/manage/admins/index.html.haml +15 -0
  115. data/app/views/manage/admins/new.html.haml +8 -0
  116. data/app/views/manage/admins/show.html.haml +17 -0
  117. data/app/views/manage/bus_lists/_form.html.haml +14 -0
  118. data/app/views/manage/bus_lists/edit.html.haml +8 -0
  119. data/app/views/manage/bus_lists/index.html.haml +26 -0
  120. data/app/views/manage/bus_lists/new.html.haml +6 -0
  121. data/app/views/manage/bus_lists/show.html.haml +92 -0
  122. data/app/views/manage/dashboard/index.html.haml +64 -0
  123. data/app/views/manage/dashboard/map_data.tsv.erb +48 -0
  124. data/app/views/manage/messages/_form.html.haml +15 -0
  125. data/app/views/manage/messages/edit.html.haml +10 -0
  126. data/app/views/manage/messages/index.html.haml +17 -0
  127. data/app/views/manage/messages/new.html.haml +8 -0
  128. data/app/views/manage/messages/show.html.haml +50 -0
  129. data/app/views/manage/questionnaires/_form.html.haml +54 -0
  130. data/app/views/manage/questionnaires/edit.html.haml +12 -0
  131. data/app/views/manage/questionnaires/index.html.haml +36 -0
  132. data/app/views/manage/questionnaires/new.html.haml +8 -0
  133. data/app/views/manage/questionnaires/show.html.haml +63 -0
  134. data/app/views/manage/schools/_form.html.haml +16 -0
  135. data/app/views/manage/schools/edit.html.haml +12 -0
  136. data/app/views/manage/schools/index.html.haml +18 -0
  137. data/app/views/manage/schools/merge.html.haml +35 -0
  138. data/app/views/manage/schools/new.html.haml +8 -0
  139. data/app/views/manage/schools/show.html.haml +52 -0
  140. data/app/views/manage/stats/index.html.haml +55 -0
  141. data/app/views/questionnaires/_form.html.haml +70 -0
  142. data/app/views/questionnaires/edit.html.haml +10 -0
  143. data/app/views/questionnaires/new.html.haml +7 -0
  144. data/app/views/questionnaires/show.html.haml +30 -0
  145. data/app/views/rsvps/show.html.haml +61 -0
  146. data/app/workers/bulk_message_worker.rb +86 -0
  147. data/app/workers/slack_invite_worker.rb +49 -0
  148. data/config/blazer.yml +56 -0
  149. data/config/initializers/ajax_datatables_rails.rb +7 -0
  150. data/config/initializers/chartkick.rb +4 -0
  151. data/config/initializers/devise.rb +265 -0
  152. data/config/initializers/hackathon.rb +9 -0
  153. data/config/initializers/mime_types.rb +5 -0
  154. data/config/initializers/new_framework_defaults.rb +20 -0
  155. data/config/initializers/sidekiq.rb +11 -0
  156. data/config/initializers/simple_form.rb +164 -0
  157. data/config/initializers/static_data.rb +7 -0
  158. data/config/initializers/wrap_parameters.rb +14 -0
  159. data/config/routes.rb +74 -0
  160. data/db/migrate/20141011210642_create_participants.rb +18 -0
  161. data/db/migrate/20141029055313_create_schools.rb +12 -0
  162. data/db/migrate/20150104071608_add_shirt_and_dietary_medical_to_participants.rb +6 -0
  163. data/db/migrate/20150104190233_add_attachment_resume_to_participants.rb +13 -0
  164. data/db/migrate/20150110020958_add_international_to_participants.rb +5 -0
  165. data/db/migrate/20150110215933_change_participants_to_registration.rb +5 -0
  166. data/db/migrate/20150110222214_create_users.rb +5 -0
  167. data/db/migrate/20150110222455_add_portfolio_and_vcs_urls_to_registrations.rb +6 -0
  168. data/db/migrate/20150110222655_add_devise_to_users.rb +48 -0
  169. data/db/migrate/20150111000224_change_resgistrations_to_questionnaire.rb +5 -0
  170. data/db/migrate/20150111012709_add_questionnaire_ref_to_users.rb +8 -0
  171. data/db/migrate/20150113205638_add_amin_to_users.rb +5 -0
  172. data/db/migrate/20150113233730_add_questionnaire_count_to_schools.rb +12 -0
  173. data/db/migrate/20150125213100_set_default_admin_value.rb +17 -0
  174. data/db/migrate/20150216232155_add_agreement_accepted_to_questionnaires.rb +5 -0
  175. data/db/migrate/20150218051450_add_admin_read_only_to_users.rb +5 -0
  176. data/db/migrate/20150221165513_create_messages.rb +15 -0
  177. data/db/migrate/20150225235817_add_status_to_user.rb +7 -0
  178. data/db/migrate/20150302011457_create_fips.rb +11 -0
  179. data/db/migrate/20150326031423_add_template_to_message.rb +5 -0
  180. data/db/migrate/20150410175056_create_bus_lists.rb +12 -0
  181. data/db/migrate/20150411161432_add_capacity_notes_captain_to_bus_lists.rb +8 -0
  182. data/db/migrate/20150415165844_add_is_bus_captain_to_questionnaire.rb +5 -0
  183. data/db/migrate/20150415181114_add_check_in_data_to_questionnaire.rb +8 -0
  184. data/db/migrate/20151224015223_change_read_only_user_to_limited.rb +5 -0
  185. data/db/migrate/20160110012217_add_code_of_conduct_accepted_to_questionnaire.rb +5 -0
  186. data/db/migrate/20160110222639_add_omniauth_to_users.rb +8 -0
  187. data/db/migrate/20160111020817_update_questionnaire_for_my_mlh.rb +14 -0
  188. data/db/migrate/20160112222137_add_option_for_alt_travel_to_questionnaire.rb +6 -0
  189. data/db/migrate/20160208061253_rename_can_share_resume_to_info.rb +5 -0
  190. data/db/migrate/20161020032736_remove_resume_from_questionnaires.rb +14 -0
  191. data/db/migrate/20161024145452_add_data_sharing_to_questionnaire.rb +5 -0
  192. data/db/migrate/20161206073921_rename_graduation_to_level_of_study.rb +6 -0
  193. data/db/migrate/20161206084722_add_reminder_sent_at_to_users.rb +5 -0
  194. data/db/migrate/20161208055809_add_attachment_resume_to_questionnaires.rb +11 -0
  195. data/db/migrate/20161212030010_add_interest_to_questionnaire.rb +5 -0
  196. data/db/migrate/20170107210122_create_school_name_duplicates.rb +10 -0
  197. data/db/migrate/20170128063020_install_blazer.rb +45 -0
  198. data/db/schools.csv +1 -0
  199. data/db/seeds.rb +17 -0
  200. data/lib/hackathon_manager/engine.rb +35 -0
  201. data/lib/hackathon_manager/version.rb +3 -0
  202. data/lib/hackathon_manager.rb +5 -0
  203. data/lib/tasks/coverage.rake +14 -0
  204. data/lib/tasks/hackathon_manager_tasks.rake +4 -0
  205. metadata +667 -0
@@ -0,0 +1,70 @@
1
+ #sidebar-toggle
2
+ background: $primary
3
+ color: $white
4
+ cursor: pointer
5
+ display: none
6
+ font-size: 2rem
7
+ left: 100%
8
+ padding: 10px 15px 10px 15px
9
+ position: absolute
10
+
11
+ .sidebar, .sidebar.open
12
+ background: $black
13
+ bottom: 0
14
+ left: 0
15
+ min-height: 100%
16
+ position: fixed
17
+ text-align: center
18
+ top: 0
19
+ @include transition(200ms, left, ease-in-out, 0s)
20
+ width: $sidebar-width
21
+ z-index: 10001
22
+ .pusher
23
+ height: 100%
24
+ overflow-y: auto
25
+ padding-bottom: 33px
26
+ z-index: 1000
27
+
28
+ #logo
29
+ display: block
30
+ margin: auto
31
+ width: 80%
32
+ padding: 10% 0
33
+
34
+ .nav-list
35
+ font-size: 1.125rem
36
+ list-style: none
37
+ margin: 10px 0 0
38
+ padding: 0
39
+ .nav-link
40
+ color: $white
41
+ display: block
42
+ padding: 15px 20px
43
+ text-align: center
44
+ @include transition(250ms, all, ease-in-out, 0ms)
45
+ width: 100%
46
+ &:hover
47
+ background: darken($primary, 10%)
48
+
49
+ .social-list
50
+ font-size: 0.875rem
51
+ list-style: none
52
+ padding: 25px 0
53
+ li
54
+ margin: 3px 10px
55
+ .fa
56
+ text-align: center
57
+ width: 20px
58
+ .sm-link
59
+ color: $white
60
+ display: inline-block
61
+ padding: 8px
62
+ margin-top: 3px
63
+ @include transition(250ms, all, ease-in-out, 0ms)
64
+ &:hover
65
+ background: darken($primary, 10%)
66
+ .social-list-inverse
67
+ .sm-link
68
+ color: $secondary
69
+ &:hover
70
+ background: $primary
@@ -0,0 +1,14 @@
1
+ .acc-status-denied
2
+ color: darken(#f00, 7%)
3
+ .acc-status-accepted
4
+ color: darken(#0f5, 7%)
5
+ .acc-status-waitlist
6
+ color: darken(#0df, 7%)
7
+ .acc-status-late_waitlist
8
+ color: darken($primary, 20%)
9
+ .acc-status-pending
10
+ color: $primary
11
+ .acc-status-rsvp_denied
12
+ color: darken(#f00, 7%)
13
+ .acc-status-rsvp_confirmed
14
+ color: darken(#0f5, 7%)
@@ -0,0 +1,26 @@
1
+ .table
2
+ border: 0
3
+ border-spacing: 0
4
+ color: $black
5
+ margin: 20px 0
6
+ width: 100%
7
+ th, td
8
+ margin: 0
9
+ border: 0
10
+ th
11
+ background: $secondary
12
+ color: $white
13
+ font-size: 1em
14
+ font-weight: $font-light
15
+ text-align: left
16
+ padding: 9px 13px
17
+ td
18
+ padding: 6px 10px
19
+ vertical-align: top
20
+ &:first-child
21
+ padding-left: 10px
22
+ tr
23
+ &:nth-child(odd)
24
+ background: $grey-light
25
+ &.accent
26
+ background: lighten($grey-med, 20%)
@@ -0,0 +1,108 @@
1
+ @import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600')
2
+
3
+ body
4
+ background: #ccc
5
+ color: #201e1f
6
+ font-family: 'Open Sans', sans-serif
7
+ font-size: 16px
8
+ font-weight: 300
9
+ text-align: center
10
+ margin: 0
11
+ body *
12
+ font-family: 'Open Sans', sans-serif
13
+
14
+ html
15
+ margin: 0
16
+
17
+ ul
18
+ list-style: none
19
+ padding: 0
20
+
21
+ li
22
+ margin: 5px 0
23
+
24
+ table
25
+ border: 0
26
+ padding: 0
27
+ width: 100%
28
+
29
+ .coderit-logo
30
+ display: inline-block
31
+ width: 76px
32
+ vertical-align: bottom
33
+
34
+ #content
35
+ max-width: 800px
36
+ width: 100%
37
+ margin: 56px auto
38
+ background: white
39
+
40
+ #main-content
41
+ background: white
42
+ padding: 20px 48px 64px
43
+
44
+
45
+ .banner
46
+ width: 100%
47
+
48
+ .email-footer
49
+ background: #201e1f
50
+ padding: 18px 0
51
+
52
+ .email-footer td span
53
+ margin-right: 20px
54
+ color: white
55
+
56
+ .email-footer td span a
57
+ color: white
58
+
59
+ h1
60
+ line-height: 1.27
61
+
62
+ h1, h2
63
+ font-weight: 300
64
+ text-transform: uppercase
65
+ font-size: 36px
66
+ color: #f58625
67
+
68
+ h3
69
+ font-weight: 600
70
+ font-size: 24px
71
+ text-transform: uppercase
72
+ color: #fc401c
73
+
74
+ h4
75
+ font-weight: 200
76
+ font-size: 13px
77
+ text-transform: uppercase
78
+
79
+ a.nodecor
80
+ text-decoration: none
81
+
82
+ p
83
+ font-weight: 300
84
+ font-size: 16px
85
+ line-height: 1.7
86
+ text-align: justify
87
+
88
+ strong
89
+ font-weight: 600
90
+
91
+ div.center
92
+ margin: 0 auto
93
+
94
+ h1.center,h2.center,h3.center,h4.center,h5.center,h6.center,p.center
95
+ text-align: center
96
+
97
+ .button
98
+ background: #3413ac
99
+ display: inline-block
100
+ padding: 0.8em 1.5em
101
+ font-size: 15px
102
+ border-radius: 30px
103
+ text-transform: uppercase
104
+ letter-spacing: 0.07em
105
+ color: white
106
+ font-weight: 600
107
+ margin: 12px 5px
108
+ text-decoration: none
@@ -0,0 +1,119 @@
1
+ @import core
2
+ @import dataTables/jquery.dataTables
3
+ @import datatables/buttons.dataTables.min
4
+ @import selectize
5
+ @import selectize.default
6
+
7
+ .manage
8
+ padding-left: 20px
9
+ padding-right: 20px
10
+ padding-top: 100px
11
+
12
+ .container-half, .container-full
13
+ max-width: none
14
+ @media (max-width: 600px)
15
+ padding-left: 0
16
+ padding-right: 0
17
+ .container-half
18
+ display: inline-block
19
+ width: 49.6% // weird issue with percentaces
20
+ vertical-align: top
21
+ @media (max-width: 600px)
22
+ width: 100%
23
+ .container-full
24
+ display: inline-block
25
+ width: 100%
26
+ vertical-align: top
27
+ margin: 0
28
+
29
+ #manageNav
30
+ position: absolute
31
+ z-index: 1
32
+ width: 100%
33
+ background: $black
34
+ color: $white
35
+ padding: 16px 20px 6px
36
+ @media(max-width: 840px)
37
+ padding-left: 70px
38
+ p, a
39
+ margin: 0 5px 10px
40
+ p
41
+ color: $primary
42
+ display: inline-block
43
+ margin-top: 0
44
+ &:first-child
45
+ margin-right: 10px
46
+ a
47
+ color: $white
48
+ display: inline-block
49
+ &:hover
50
+ color: darken($grey-light, 5%)
51
+
52
+ .land
53
+ fill: $grey-light
54
+
55
+ .border
56
+ fill: none
57
+ stroke: #eee
58
+ stroke-linejoin: round
59
+ stroke-linecap: round
60
+ stroke-width: 2px
61
+
62
+ .county
63
+ fill: $primary
64
+ fill-opacity: .5
65
+ stroke: #eee
66
+ stroke-width: .5px
67
+
68
+ .county :hover
69
+ stroke: #000
70
+
71
+ #map
72
+ text-align: center
73
+
74
+ .dashboard-container-title
75
+ color: $grey-dark
76
+ border-bottom: 5px solid $primary
77
+ padding: 9px 12px
78
+ font-size: 17px
79
+ color: lighten($grey-dark, 10%)
80
+
81
+ .graph-overlay
82
+ text-align: center
83
+ vertical-align: top
84
+ position: absolute
85
+ z-index: 1
86
+ background: rgba(#f0f0f0,0.86)
87
+ margin-left: 33px
88
+ padding: 0 6%
89
+ height: 136px
90
+ h3
91
+ color: $black
92
+ font-weight: 500
93
+ margin: 1.2em 0 0
94
+ p
95
+ font-size: 14px
96
+ margin: 0.5em 0 1.2em
97
+ &.double-metrics
98
+ h3
99
+ margin-top: 0.45em
100
+ font-size: 21px
101
+ p
102
+ font-size: 13px
103
+ margin-top: 0.3em
104
+
105
+ .chart-details
106
+ list-style: none
107
+ margin: 0 0 10px
108
+ padding: 0
109
+ li
110
+ margin: 0
111
+ padding: 2px
112
+ display: inline-block
113
+ width: 49%
114
+ font-size: 15px
115
+
116
+ .email-preview
117
+ width: 100%
118
+ border: 2px solid $grey-med
119
+ min-height: 500px
@@ -0,0 +1,50 @@
1
+ p, ol, ul, td {
2
+ font-family: verdana, arial, helvetica, sans-serif;
3
+ font-size: 13px;
4
+ line-height: 18px;
5
+ }
6
+
7
+ pre {
8
+ background-color: #eee;
9
+ padding: 10px;
10
+ font-size: 11px;
11
+ }
12
+
13
+ div {
14
+ &.field, &.actions {
15
+ margin-bottom: 10px;
16
+ }
17
+ }
18
+
19
+ #notice {
20
+ color: green;
21
+ }
22
+
23
+ .field_with_errors {
24
+ padding: 2px;
25
+ background-color: red;
26
+ display: table;
27
+ }
28
+
29
+ #error_explanation {
30
+ width: 450px;
31
+ border: 2px solid red;
32
+ padding: 7px;
33
+ padding-bottom: 0;
34
+ margin-bottom: 20px;
35
+ background-color: #f0f0f0;
36
+ h2 {
37
+ text-align: left;
38
+ font-weight: bold;
39
+ padding: 5px 5px 5px 15px;
40
+ font-size: 12px;
41
+ margin: -7px;
42
+ margin-bottom: 0px;
43
+ background-color: #c00;
44
+ color: #fff;
45
+ }
46
+ ul li {
47
+ font-size: 12px;
48
+ list-style: square;
49
+ }
50
+ }
@@ -0,0 +1,41 @@
1
+ // TODO: automatically generate a /app/assets/stylesheets/variables.sass
2
+ // so people know they can override them
3
+
4
+ $orange : #f58625 !default
5
+ $black : #201e1f !default
6
+ $grey : #4d4d4d !default
7
+ $blue : #3413ac !default
8
+ $white : darken(#fff, 1%) !default
9
+ $white-grey : darken($white, 5%) !default
10
+ $red : #fc401c !default
11
+
12
+ // site colors
13
+ $primary : $orange !default
14
+ $secondary : $blue !default
15
+ // general colors
16
+ $white_pure : #FFFFFF !default
17
+ $grey-light : #E4E4E4 !default
18
+ $grey-med : #888888 !default
19
+ $grey-dark : #343434 !default
20
+ $grey-blue : #3B4C57 !default
21
+ // logo colors
22
+ $orange-light : #F98728 !default
23
+ $orange-med : #F36321 !default
24
+ $orange-dark : #CE5F15 !default
25
+ $blue-light : #22619E !default
26
+ $offwhite : #FCF7F2 !default
27
+ // fonts
28
+ $font-body-family : 'Open Sans', sans-serif !default
29
+ $font-headlines-family : 'Open Sans', sans-serif !default
30
+ $font-bold : 600 !default
31
+ $font-reg : 300 !default
32
+ $font-light : 200 !default
33
+ $font-thin : 100 !default
34
+
35
+ // constants
36
+ $sidebar-width: 200px !default
37
+
38
+ // media
39
+ $breakpoint-tablet: 1000px !default
40
+
41
+ @import variable-overrides
@@ -0,0 +1,37 @@
1
+ class BusListsController < ApplicationController
2
+ before_action :logged_in
3
+ before_action :check_user_has_questionnaire
4
+ before_action :find_questionnaire
5
+ before_action :find_bus_list
6
+ before_action :require_bus_captian
7
+
8
+ layout 'hackathon_manager'
9
+
10
+ def logged_in
11
+ authenticate_user!
12
+ end
13
+
14
+ # GET /bus_list
15
+ def show
16
+ end
17
+
18
+ private
19
+
20
+ def find_questionnaire
21
+ @questionnaire = current_user.questionnaire
22
+ redirect_to root_path unless @questionnaire
23
+ end
24
+
25
+ def find_bus_list
26
+ @bus_list = @questionnaire.bus_list
27
+ redirect_to root_path unless @bus_list
28
+ end
29
+
30
+ def check_user_has_questionnaire
31
+ redirect_to root_path if current_user.questionnaire.nil?
32
+ end
33
+
34
+ def require_bus_captian
35
+ redirect_to root_path unless @questionnaire.is_bus_captain?
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ module QuestionnairesControllable
2
+ extend ActiveSupport::Concern
3
+
4
+ private
5
+
6
+ def convert_school_name_to_id(questionnaire)
7
+ if questionnaire[:school_name]
8
+ school = School.where(name: questionnaire[:school_name]).first
9
+ school = School.create(name: questionnaire[:school_name]) if school.blank?
10
+ questionnaire[:school_id] = school.id
11
+ questionnaire.delete :school_name
12
+ end
13
+ questionnaire
14
+ end
15
+ end
@@ -0,0 +1,55 @@
1
+ class Manage::AdminsController < Manage::ApplicationController
2
+ before_action :find_user, only: [:show, :edit, :update, :destroy]
3
+
4
+ respond_to :html
5
+
6
+ def index
7
+ end
8
+
9
+ def datatable
10
+ render json: AdminDatatable.new(view_context)
11
+ end
12
+
13
+ def show
14
+ respond_with(:manage, @user)
15
+ end
16
+
17
+ def new
18
+ @user = ::User.new
19
+ respond_with(:manage, @user)
20
+ end
21
+
22
+ def edit
23
+ end
24
+
25
+ def create
26
+ @user = ::User.new(user_params.merge(password: Devise.friendly_token.first(10)))
27
+ if @user.save
28
+ @user.update_attribute(:admin, true)
29
+ @user.send_reset_password_instructions
30
+ end
31
+ respond_with(:manage, @user, location: manage_admins_path)
32
+ end
33
+
34
+ def update
35
+ @user.update_attributes(user_params)
36
+ respond_with(:manage, @user, location: manage_admins_path)
37
+ end
38
+
39
+ def destroy
40
+ @user.destroy
41
+ respond_with(:manage, @user, location: manage_admins_path)
42
+ end
43
+
44
+ private
45
+
46
+ def user_params
47
+ params.require(:user).permit(
48
+ :email, :password, :password_confirmation, :remember_me, :admin_limited_access
49
+ )
50
+ end
51
+
52
+ def find_user
53
+ @user = ::User.find(params[:id])
54
+ end
55
+ end
@@ -0,0 +1,13 @@
1
+ class Manage::ApplicationController < ApplicationController
2
+ before_action :logged_in
3
+ before_action :limit_admin_access, only: ["edit", "update", "new", "create", "destroy", "convert_to_admin", "deliver", "merge", "perform_merge", "toggle_bus_captain", "duplicate", "update_acc_status", "send_update_email"]
4
+
5
+ def logged_in
6
+ authenticate_user!
7
+ return redirect_to root_path unless current_user.try(:admin?)
8
+ end
9
+
10
+ def limit_admin_access
11
+ redirect_to url_for(controller: controller_name, action: :index) if current_user.admin_limited_access
12
+ end
13
+ end
@@ -0,0 +1,71 @@
1
+ class Manage::BusListsController < Manage::ApplicationController
2
+ before_action :set_bus_list, only: [:show, :edit, :update, :destroy, :toggle_bus_captain, :send_update_email]
3
+
4
+ respond_to :html
5
+
6
+ def index
7
+ @bus_lists = BusList.all
8
+ respond_with(:manage, @bus_lists)
9
+ end
10
+
11
+ def show
12
+ respond_with(:manage, @bus_list)
13
+ end
14
+
15
+ def new
16
+ @bus_list = BusList.new
17
+ respond_with(:manage, @bus_list)
18
+ end
19
+
20
+ def edit
21
+ end
22
+
23
+ def create
24
+ @bus_list = BusList.new(bus_list_params)
25
+ @bus_list.save
26
+ respond_with(:manage, @bus_list)
27
+ end
28
+
29
+ def update
30
+ @bus_list.update_attributes(bus_list_params)
31
+ respond_with(:manage, @bus_list)
32
+ end
33
+
34
+ def destroy
35
+ School.where(bus_list_id: @bus_list.id).each do |school|
36
+ school.questionnaires.where(riding_bus: true).map { |q| q.update_attribute(:riding_bus, false) }
37
+ school.update_attribute(:bus_list_id, nil)
38
+ end
39
+ @bus_list.destroy
40
+ respond_with(:manage, @bus_list)
41
+ end
42
+
43
+ def toggle_bus_captain
44
+ @questionnaire = Questionnaire.find(params[:questionnaire_id])
45
+ is_bus_captain = params[:bus_captain] == "1"
46
+ @questionnaire.update_attribute(:is_bus_captain, is_bus_captain)
47
+ if @questionnaire.reload.is_bus_captain
48
+ Mailer.delay.bus_captain_confirmation_email(@bus_list.id, @questionnaire.user.id)
49
+ end
50
+ redirect_to [:manage, @bus_list]
51
+ end
52
+
53
+ def send_update_email
54
+ @bus_list.passengers.each do |passenger|
55
+ Mailer.delay.bus_list_update_email(passenger.id)
56
+ end
57
+ redirect_to [:manage, @bus_list]
58
+ end
59
+
60
+ private
61
+
62
+ def bus_list_params
63
+ params.require(:bus_list).permit(
64
+ :name, :capacity, :notes, :needs_bus_captain
65
+ )
66
+ end
67
+
68
+ def set_bus_list
69
+ @bus_list = BusList.find(params[:id])
70
+ end
71
+ end