hackathon_manager 0.6.6 → 0.7.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 (76) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +7 -1
  3. data/app/assets/javascripts/hackathon_manager/manage/application.js +4 -6
  4. data/app/assets/javascripts/hackathon_manager/manage/lib/datatables.js +82 -0
  5. data/app/assets/javascripts/hackathon_manager/manage/lib/setupDataTables.js +13 -64
  6. data/app/assets/javascripts/hackathon_manager/vendor/datatables.min.js +290 -0
  7. data/app/assets/stylesheets/hackathon_manager/dashboard.css +109 -0
  8. data/app/assets/stylesheets/hackathon_manager/datatables.min.css +18 -0
  9. data/app/assets/stylesheets/hackathon_manager/manage.sass +64 -47
  10. data/app/controllers/manage/stats_controller.rb +66 -30
  11. data/app/controllers/rsvps_controller.rb +2 -0
  12. data/app/datatables/admin_datatable.rb +3 -3
  13. data/app/datatables/message_datatable.rb +5 -5
  14. data/app/datatables/questionnaire_datatable.rb +6 -5
  15. data/app/datatables/school_datatable.rb +3 -3
  16. data/app/helpers/hackathon_manager_helper.rb +63 -4
  17. data/app/helpers/manage/bootstrap_form_helper.rb +98 -0
  18. data/app/models/bus_list.rb +1 -1
  19. data/app/models/message.rb +3 -3
  20. data/app/models/questionnaire.rb +1 -1
  21. data/app/models/school.rb +10 -4
  22. data/app/models/user.rb +3 -1
  23. data/app/views/application/_triggered_email_summary.html.haml +11 -9
  24. data/app/views/layouts/hackathon_manager/application.html.haml +4 -0
  25. data/app/views/layouts/manage/_flashes.html.haml +4 -0
  26. data/app/views/layouts/manage/_page_title.html.haml +8 -0
  27. data/app/views/layouts/manage/application.html.haml +72 -19
  28. data/app/views/manage/admins/_form.html.haml +4 -5
  29. data/app/views/manage/admins/edit.html.haml +5 -10
  30. data/app/views/manage/admins/index.html.haml +4 -8
  31. data/app/views/manage/admins/new.html.haml +5 -6
  32. data/app/views/manage/admins/show.html.haml +12 -14
  33. data/app/views/manage/bus_lists/_form.html.haml +3 -6
  34. data/app/views/manage/bus_lists/edit.html.haml +3 -7
  35. data/app/views/manage/bus_lists/index.html.haml +16 -23
  36. data/app/views/manage/bus_lists/new.html.haml +2 -5
  37. data/app/views/manage/bus_lists/show.html.haml +78 -66
  38. data/app/views/manage/configs/show.html.haml +31 -27
  39. data/app/views/manage/dashboard/index.html.haml +28 -19
  40. data/app/views/manage/dashboard/map_data.tsv.erb +6 -13
  41. data/app/views/manage/messages/_form.html.haml +3 -3
  42. data/app/views/manage/messages/edit.html.haml +3 -10
  43. data/app/views/manage/messages/index.html.haml +5 -10
  44. data/app/views/manage/messages/new.html.haml +2 -7
  45. data/app/views/manage/messages/show.html.haml +65 -67
  46. data/app/views/manage/questionnaires/_acc_status_badge.html.haml +2 -0
  47. data/app/views/manage/questionnaires/_check_in_badge.html.haml +4 -0
  48. data/app/views/manage/questionnaires/_checkin.html.haml +40 -0
  49. data/app/views/manage/questionnaires/_form.html.haml +21 -21
  50. data/app/views/manage/questionnaires/_history.html.haml +7 -0
  51. data/app/views/manage/questionnaires/_overview.html.haml +126 -0
  52. data/app/views/manage/questionnaires/edit.html.haml +5 -11
  53. data/app/views/manage/questionnaires/index.html.haml +19 -23
  54. data/app/views/manage/questionnaires/new.html.haml +2 -7
  55. data/app/views/manage/questionnaires/show.html.haml +28 -65
  56. data/app/views/manage/schools/_form.html.haml +2 -2
  57. data/app/views/manage/schools/edit.html.haml +5 -11
  58. data/app/views/manage/schools/index.html.haml +4 -8
  59. data/app/views/manage/schools/merge.html.haml +6 -8
  60. data/app/views/manage/schools/new.html.haml +2 -7
  61. data/app/views/manage/schools/show.html.haml +58 -55
  62. data/app/views/manage/stats/index.html.haml +18 -15
  63. data/app/views/questionnaires/_form.html.haml +2 -2
  64. data/config/initializers/simple_form.rb +4 -0
  65. data/config/initializers/simple_form_bootstrap.rb +412 -0
  66. data/config/locales/en.yml +73 -0
  67. data/db/migrate/20180701160855_remove_email_from_questionnaires.rb +5 -0
  68. data/lib/hackathon_manager/version.rb +1 -1
  69. metadata +39 -31
  70. data/app/assets/javascripts/hackathon_manager/vendor/buttons.colVis.min.js +0 -6
  71. data/app/assets/javascripts/hackathon_manager/vendor/buttons.html5.min.js +0 -22
  72. data/app/assets/javascripts/hackathon_manager/vendor/dataTables.buttons.min.js +0 -35
  73. data/app/assets/javascripts/hackathon_manager/vendor/jquery.dataTables.min.js +0 -164
  74. data/app/assets/javascripts/hackathon_manager/vendor/pdfmake.min.js +0 -22
  75. data/app/assets/stylesheets/hackathon_manager/datatables/buttons.dataTables.min.css +0 -1
  76. data/app/assets/stylesheets/hackathon_manager/datatables/jquery.dataTables.min.css +0 -1
@@ -0,0 +1,109 @@
1
+ body {
2
+ font-size: .875rem;
3
+ }
4
+
5
+ /*
6
+ * Sidebar
7
+ */
8
+
9
+ .sidebar {
10
+ position: fixed;
11
+ top: 0;
12
+ bottom: 0;
13
+ left: 0;
14
+ z-index: 100; /* Behind the navbar */
15
+ padding: 48px 0 0; /* Height of navbar */
16
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
17
+ }
18
+
19
+ .sidebar-sticky {
20
+ position: relative;
21
+ top: 0;
22
+ height: calc(100vh - 48px);
23
+ padding-top: .5rem;
24
+ overflow-x: hidden;
25
+ overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
26
+ }
27
+
28
+ @supports ((position: -webkit-sticky) or (position: sticky)) {
29
+ .sidebar-sticky {
30
+ position: -webkit-sticky;
31
+ position: sticky;
32
+ }
33
+ }
34
+
35
+ .sidebar .nav-link {
36
+ font-weight: 500;
37
+ color: #333;
38
+ }
39
+
40
+ .sidebar .nav-link .fa {
41
+ margin-right: 4px;
42
+ color: #999;
43
+ }
44
+
45
+ .sidebar .nav-link.active {
46
+ color: #007bff;
47
+ }
48
+
49
+ .sidebar .nav-link:hover .fa,
50
+ .sidebar .nav-link.active .fa {
51
+ color: inherit;
52
+ }
53
+
54
+ .sidebar-heading {
55
+ font-size: .75rem;
56
+ text-transform: uppercase;
57
+ }
58
+
59
+ .nav-item-description {
60
+ font-size: 10px;
61
+ margin-top: 1px;
62
+ margin-left: 26px;
63
+ color: #999;
64
+ line-height: 1.2;
65
+ }
66
+
67
+ /*
68
+ * Content
69
+ */
70
+
71
+ [role="main"] {
72
+ padding-top: 48px; /* Space for fixed navbar */
73
+ }
74
+
75
+ /*
76
+ * Navbar
77
+ */
78
+
79
+ .navbar-brand {
80
+ padding-top: .75rem;
81
+ padding-bottom: .75rem;
82
+ font-size: 1rem;
83
+ background-color: rgba(0, 0, 0, .25);
84
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
85
+ }
86
+
87
+ .navbar .form-control {
88
+ padding: .75rem 1rem;
89
+ border-width: 0;
90
+ border-radius: 0;
91
+ }
92
+
93
+ .form-control-dark {
94
+ color: #fff;
95
+ background-color: rgba(255, 255, 255, .1);
96
+ border-color: rgba(255, 255, 255, .1);
97
+ }
98
+
99
+ .form-control-dark:focus {
100
+ border-color: transparent;
101
+ box-shadow: 0 0 0 3px rgba(255, 255, 255, .25);
102
+ }
103
+
104
+ /*
105
+ * Utilities
106
+ */
107
+
108
+ .border-top { border-top: 1px solid #e5e5e5; }
109
+ .border-bottom { border-bottom: 1px solid #e5e5e5; }
@@ -0,0 +1,18 @@
1
+ /*
2
+ * This combined file was created by the DataTables downloader builder:
3
+ * https://datatables.net/download
4
+ *
5
+ * To rebuild or modify this file with the latest versions of the included
6
+ * software please visit:
7
+ * https://datatables.net/download/#bs4/pdfmake-0.1.36/dt-1.10.18/b-1.5.2/b-colvis-1.5.1/b-html5-1.5.2
8
+ *
9
+ * Included libraries:
10
+ * pdfmake 0.1.36, DataTables 1.10.18, Buttons 1.5.2, Column visibility 1.5.1, HTML5 export 1.5.2
11
+ */
12
+
13
+ table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-sm>thead>tr>th{padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
14
+
15
+
16
+ @keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-button-collection.dropdown-menu{display:block;z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.dropdown-menu.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.dropdown-menu.fixed.two-column{margin-left:-150px}ul.dt-button-collection.dropdown-menu.fixed.three-column{margin-left:-225px}ul.dt-button-collection.dropdown-menu.fixed.four-column{margin-left:-300px}ul.dt-button-collection.dropdown-menu>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.dropdown-menu.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.dropdown-menu.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.dropdown-menu.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection.dropdown-menu .dt-button{border-radius:0}ul.dt-button-collection{-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.fixed.two-column{margin-left:-150px}ul.dt-button-collection.fixed.three-column{margin-left:-225px}ul.dt-button-collection.fixed.four-column{margin-left:-300px}ul.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection .dt-button{border-radius:0}ul.dt-button-collection.fixed{max-width:none}ul.dt-button-collection.fixed:before,ul.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
17
+
18
+
@@ -1,50 +1,68 @@
1
- @import core
2
- @import dataTables/jquery.dataTables
3
- @import datatables/buttons.dataTables.min
1
+ @import bootstrap
2
+ @import dashboard
3
+
4
+ $grey-dark: #555
5
+ $grey-med: #999
6
+
7
+ // external dependencies
8
+ @import font-awesome
9
+ @import datatables.min
4
10
  @import selectize
5
11
  @import selectize.default
6
12
 
7
- .manage
8
- padding-left: 20px
9
- padding-right: 20px
10
- padding-top: 50px
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
13
+ .icon-space-r
14
+ margin-right: 0.5em
28
15
 
29
- #manageNav
30
- z-index: 1
31
- width: 100%
32
- background: $black
33
- color: $white
34
- padding: 16px 20px 6px
35
- p, a
36
- margin: 0 5px 10px
37
- p
38
- color: $primary
39
- display: inline-block
40
- margin-top: 0
41
- &:first-child
42
- margin-right: 10px
43
- a
44
- color: $white
45
- display: inline-block
46
- &:hover
47
- color: darken($grey-light, 5%)
16
+ .icon-space-l
17
+ margin-left: 0.5em
18
+
19
+ .icon-space-r-half
20
+ margin-right: 0.25em
21
+
22
+ .icon-space-l-half
23
+ margin-left: 0.25em
24
+
25
+ // .manage
26
+ // padding-left: 20px
27
+ // padding-right: 20px
28
+ // padding-top: 50px
29
+
30
+ // .container-half, .container-full
31
+ // max-width: none
32
+ // @media (max-width: 600px)
33
+ // padding-left: 0
34
+ // padding-right: 0
35
+ // .container-half
36
+ // display: inline-block
37
+ // width: 49.6% // weird issue with percentaces
38
+ // vertical-align: top
39
+ // @media (max-width: 600px)
40
+ // width: 100%
41
+ // .container-full
42
+ // display: inline-block
43
+ // width: 100%
44
+ // vertical-align: top
45
+ // margin: 0
46
+
47
+ // #manageNav
48
+ // z-index: 1
49
+ // width: 100%
50
+ // background: $black
51
+ // color: $white
52
+ // padding: 16px 20px 6px
53
+ // p, a
54
+ // margin: 0 5px 10px
55
+ // p
56
+ // color: $primary
57
+ // display: inline-block
58
+ // margin-top: 0
59
+ // &:first-child
60
+ // margin-right: 10px
61
+ // a
62
+ // color: $white
63
+ // display: inline-block
64
+ // &:hover
65
+ // color: darken($grey-light, 5%)
48
66
 
49
67
  .land
50
68
  fill: #dadada
@@ -69,11 +87,10 @@
69
87
  text-align: center
70
88
 
71
89
  .dashboard-container-title
72
- color: $grey-dark
73
- border-bottom: 5px solid $primary
90
+ border-bottom: 3px solid #e5e5e5
74
91
  padding: 9px 12px
75
- font-size: 17px
76
- color: lighten($grey-dark, 10%)
92
+ margin-top: 12px
93
+ margin-bottom: 8px
77
94
 
78
95
  .graph-overlay
79
96
  text-align: center
@@ -4,31 +4,51 @@ class Manage::StatsController < Manage::ApplicationController
4
4
 
5
5
  def dietary_special_needs
6
6
  data = Rails.cache.fetch(cache_key_for_questionnaires("dietary_special_needs")) do
7
- attributes = [:first_name,
8
- :last_name,
9
- :email,
10
- :phone,
11
- :checked_in_at,
12
- :dietary_restrictions,
13
- :special_needs]
14
- select_attributes = Array.new(attributes) << :user_id
7
+ select_attributes = [
8
+ :first_name,
9
+ :last_name,
10
+ :phone,
11
+ :checked_in_at,
12
+ :dietary_restrictions,
13
+ :special_needs,
14
+ :user_id
15
+ ]
16
+ json_attributes = [
17
+ :first_name,
18
+ :last_name,
19
+ :email,
20
+ :phone,
21
+ :checked_in_at,
22
+ :dietary_restrictions,
23
+ :special_needs
24
+ ]
15
25
  data = Questionnaire.where("dietary_restrictions != '' AND acc_status = 'rsvp_confirmed' OR special_needs != '' AND acc_status = 'rsvp_confirmed'").select(select_attributes)
16
- to_json_array(data, attributes)
26
+ to_json_array(data, json_attributes)
17
27
  end
18
28
  render json: { data: data }
19
29
  end
20
30
 
21
31
  def sponsor_info
22
32
  data = Rails.cache.fetch(cache_key_for_questionnaires("sponsor_info")) do
23
- attributes = [:first_name,
24
- :last_name,
25
- :email,
26
- :vcs_url,
27
- :portfolio_url]
28
- select_attributes = Array.new(attributes) << [:user_id, :school_id, :resume_file_name]
29
- json_attribute = Array.new(attributes) << :school_name
33
+ select_attributes = [
34
+ :first_name,
35
+ :last_name,
36
+ :vcs_url,
37
+ :portfolio_url,
38
+ :user_id,
39
+ :school_id,
40
+ :resume_file_name
41
+ ]
42
+ json_attributes = [
43
+ :first_name,
44
+ :last_name,
45
+ :email,
46
+ :school_name,
47
+ :vcs_url,
48
+ :portfolio_url
49
+ ]
30
50
  data = Questionnaire.where("can_share_info = '1' AND checked_in_at != 0").select(select_attributes)
31
- json = to_json_array(data, json_attribute)
51
+ json = to_json_array(data, json_attributes)
32
52
  json.map.with_index { |item, index| item.insert(5, data[index].resume? ? data[index].resume.url : '') }
33
53
  end
34
54
  render json: { data: data }
@@ -36,15 +56,25 @@ class Manage::StatsController < Manage::ApplicationController
36
56
 
37
57
  def alt_travel
38
58
  data = Rails.cache.fetch(cache_key_for_questionnaires("alt_travel")) do
39
- attributes = [:id,
40
- :first_name,
41
- :last_name,
42
- :email,
43
- :travel_location,
44
- :acc_status]
45
- select_attributes = Array.new(attributes) << [:user_id, :school_id]
59
+ select_attributes = [
60
+ :id,
61
+ :first_name,
62
+ :last_name,
63
+ :travel_location,
64
+ :acc_status,
65
+ :user_id,
66
+ :school_id
67
+ ]
68
+ json_attributes = [
69
+ :id,
70
+ :first_name,
71
+ :last_name,
72
+ :email,
73
+ :travel_location,
74
+ :acc_status
75
+ ]
46
76
  data = Questionnaire.where("travel_not_from_school = '1'").select(select_attributes)
47
- json = to_json_array(data, attributes)
77
+ json = to_json_array(data, json_attributes)
48
78
  json.each do |e|
49
79
  e[0] = view_context.link_to("View &raquo;".html_safe, manage_questionnaire_path(e[0]))
50
80
  end
@@ -54,16 +84,22 @@ class Manage::StatsController < Manage::ApplicationController
54
84
 
55
85
  def mlh_info
56
86
  data = Rails.cache.fetch(cache_key_for_questionnaires("mlh_info")) do
57
- attributes = [
87
+ select_attributes = [
88
+ :first_name,
89
+ :last_name,
90
+ :phone,
91
+ :user_id,
92
+ :school_id
93
+ ]
94
+ json_attributes = [
58
95
  :first_name,
59
96
  :last_name,
60
97
  :email,
61
- :phone
98
+ :phone,
99
+ :school_name
62
100
  ]
63
- select_attributes = Array.new(attributes) << [:user_id, :school_id]
64
- json_attribute = Array.new(attributes) << :school_name
65
101
  data = Questionnaire.joins(:school).select(select_attributes)
66
- to_json_array(data, json_attribute)
102
+ to_json_array(data, json_attributes)
67
103
  end
68
104
  render json: { data: data }
69
105
  end
@@ -86,6 +86,8 @@ class RsvpsController < ApplicationController
86
86
 
87
87
  redirect_to rsvp_path
88
88
  end
89
+ # rubocop:enable CyclomaticComplexity
90
+ # rubocop:enable PerceivedComplexity
89
91
 
90
92
  private
91
93
 
@@ -14,16 +14,16 @@ class AdminDatatable < AjaxDatatablesRails::Base
14
14
  def data
15
15
  records.map do |record|
16
16
  {
17
- link: link_to('<i class="fa fa-search"></i>'.html_safe, manage_admin_path(record)),
18
17
  id: record.id,
19
- email: record.email,
18
+ email: link_to(record.email, manage_admin_path(record)),
20
19
  admin_limited_access: record.admin_limited_access ? 'Limited Access' : 'Full Access'
21
20
  }
22
21
  end
23
22
  end
24
23
 
25
- # rubocop:disable Style/AccessorMethodName
24
+ # rubocop:disable Naming/AccessorMethodName
26
25
  def get_raw_records
27
26
  User.where(admin: true)
28
27
  end
28
+ # rubocop:enable Naming/AccessorMethodName
29
29
  end
@@ -1,5 +1,5 @@
1
1
  class MessageDatatable < AjaxDatatablesRails::Base
2
- def_delegators :@view, :link_to, :manage_message_path
2
+ def_delegators :@view, :link_to, :manage_message_path, :display_datetime
3
3
 
4
4
  def view_columns
5
5
  @view_columns ||= {
@@ -16,19 +16,19 @@ class MessageDatatable < AjaxDatatablesRails::Base
16
16
  def data
17
17
  records.map do |record|
18
18
  {
19
- link: link_to('<i class="fa fa-search"></i>'.html_safe, manage_message_path(record)),
20
19
  id: record.id,
21
- name: record.name,
20
+ name: link_to(record.name, manage_message_path(record)),
22
21
  subject: record.subject,
23
22
  trigger: Message::POSSIBLE_TRIGGERS[record.trigger],
24
23
  status: record.status.titleize,
25
- delivered_at: record.delivered_at.present? ? record.delivered_at.strftime("%B %d, %Y at %I:%M %p") : ''
24
+ delivered_at: record.delivered_at.present? ? display_datetime(record.delivered_at) : ''
26
25
  }
27
26
  end
28
27
  end
29
28
 
30
- # rubocop:disable Style/AccessorMethodName
29
+ # rubocop:disable Naming/AccessorMethodName
31
30
  def get_raw_records
32
31
  Message.unscoped
33
32
  end
33
+ # rubocop:enable Naming/AccessorMethodName
34
34
  end
@@ -1,5 +1,5 @@
1
1
  class QuestionnaireDatatable < AjaxDatatablesRails::Base
2
- def_delegators :@view, :link_to, :manage_questionnaire_path, :manage_school_path, :current_user
2
+ def_delegators :@view, :link_to, :manage_questionnaire_path, :manage_school_path, :current_user, :acc_status_class, :display_datetime
3
3
 
4
4
  def view_columns
5
5
  @view_columns ||= {
@@ -33,16 +33,17 @@ class QuestionnaireDatatable < AjaxDatatablesRails::Base
33
33
  phone: record.phone,
34
34
  gender: record.gender,
35
35
  date_of_birth: record.date_of_birth_formatted,
36
- acc_status: "<span class=\"acc-status-#{record.acc_status}\">#{record.acc_status.titleize}</span>".html_safe,
37
- checked_in: record.checked_in? ? '<span class="acc-status-accepted">Yes</span>'.html_safe : 'No',
36
+ acc_status: "<span class=\"text-#{acc_status_class(record.acc_status)}\">#{record.acc_status.titleize}</span>".html_safe,
37
+ checked_in: record.checked_in? ? '<span class="text-success">Yes</span>'.html_safe : 'No',
38
38
  school: link_to(record.school.name, manage_school_path(record.school)),
39
- created_at: record.created_at.present? ? record.created_at.strftime("%B %d, %Y at %I:%M %p") : ''
39
+ created_at: record.created_at.present? ? display_datetime(record.created_at) : ''
40
40
  }
41
41
  end
42
42
  end
43
43
 
44
- # rubocop:disable Style/AccessorMethodName
44
+ # rubocop:disable Naming/AccessorMethodName
45
45
  def get_raw_records
46
46
  Questionnaire.includes(:user, :school).references(:user, :school)
47
47
  end
48
+ # rubocop:enable Naming/AccessorMethodName
48
49
  end