hackathon_manager 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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