open_conference_ware 1.0.0.pre3 → 1.0.0.pre4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.travis.yml +6 -0
  3. data/CHANGES.md +13 -0
  4. data/app/assets/javascripts/open_conference_ware/application.js +2 -0
  5. data/app/assets/javascripts/open_conference_ware/proposals.js +8 -12
  6. data/app/assets/stylesheets/open_conference_ware/application.css +1 -0
  7. data/app/controllers/open_conference_ware/application_controller.rb +8 -6
  8. data/app/controllers/open_conference_ware/authentications_controller.rb +1 -1
  9. data/app/controllers/open_conference_ware/events_controller.rb +5 -1
  10. data/app/controllers/open_conference_ware/proposals_controller.rb +9 -8
  11. data/app/controllers/open_conference_ware/session_types_controller.rb +2 -2
  12. data/app/mixins/open_conference_ware/public_attributes_mixin.rb +1 -1
  13. data/app/models/open_conference_ware/event.rb +7 -4
  14. data/app/models/open_conference_ware/room.rb +4 -0
  15. data/app/models/open_conference_ware/track.rb +3 -0
  16. data/app/models/open_conference_ware/user.rb +20 -10
  17. data/app/views/layouts/open_conference_ware/_header.html.erb +3 -0
  18. data/app/views/layouts/open_conference_ware/application.html.erb +1 -22
  19. data/app/views/open_conference_ware/authentications/_openid.html.erb +24 -10
  20. data/app/views/open_conference_ware/proposals/_admin_controls.html.erb +1 -1
  21. data/app/views/open_conference_ware/proposals/_form.html.erb +2 -2
  22. data/app/views/open_conference_ware/proposals/_list_concise.html.erb +2 -2
  23. data/app/views/open_conference_ware/proposals/_selector_voting.html.erb +52 -0
  24. data/app/views/open_conference_ware/proposals/_sub_list.html.erb +1 -1
  25. data/app/views/open_conference_ware/proposals/_sub_list_for_kind.html.erb +1 -1
  26. data/app/views/open_conference_ware/proposals/create.html.erb +2 -25
  27. data/app/views/open_conference_ware/proposals/show.html.erb +1 -53
  28. data/app/views/open_conference_ware/proposals/stats.html.erb +1 -1
  29. data/app/views/open_conference_ware/selector_votes/index.html.erb +3 -1
  30. data/app/views/open_conference_ware/tracks/_form.html.erb +2 -2
  31. data/app/views/open_conference_ware/users/_account_box.html.erb +1 -1
  32. data/config/routes.rb +1 -1
  33. data/gem-public_cert.pem +20 -20
  34. data/lib/open_conference_ware/version.rb +1 -1
  35. data/lib/tasks/export.rake +1 -1
  36. data/open_conference_ware.gemspec +7 -7
  37. data/spec/controllers/open_conference_ware/proposals_controller_spec.rb +1 -1
  38. data/util/README.md +3 -0
  39. data/util/assign_rooms.rb +40 -0
  40. data/util/seed_schedule.rb +2 -2
  41. data/util/user_favorites_contention_report.rb +2 -2
  42. data/vendor/assets/images/openid-selector/openid-providers-en.png +0 -0
  43. data/vendor/assets/javascripts/openid-selector/openid-en.js +61 -0
  44. data/vendor/assets/javascripts/openid-selector/openid-jquery.js +201 -0
  45. data/vendor/assets/stylesheets/openid-selector/openid.css.scss +79 -0
  46. metadata +55 -61
  47. metadata.gz.sig +0 -0
  48. data/vendor/assets/images/idselector/aol.ico +0 -0
  49. data/vendor/assets/images/idselector/arrow.gif +0 -0
  50. data/vendor/assets/images/idselector/arrow_white_back.png +0 -0
  51. data/vendor/assets/images/idselector/arrow_white_forward.png +0 -0
  52. data/vendor/assets/images/idselector/blogger.ico +0 -0
  53. data/vendor/assets/images/idselector/claimid.ico +0 -0
  54. data/vendor/assets/images/idselector/flickr.ico +0 -0
  55. data/vendor/assets/images/idselector/google.ico +0 -0
  56. data/vendor/assets/images/idselector/lj.ico +0 -0
  57. data/vendor/assets/images/idselector/myopenid.ico +0 -0
  58. data/vendor/assets/images/idselector/openid.ico +0 -0
  59. data/vendor/assets/images/idselector/technorati.ico +0 -0
  60. data/vendor/assets/images/idselector/verisign.ico +0 -0
  61. data/vendor/assets/images/idselector/vidoop2.ico +0 -0
  62. data/vendor/assets/images/idselector/vox.ico +0 -0
  63. data/vendor/assets/images/idselector/yahoo.ico +0 -0
@@ -16,7 +16,7 @@ proposal ||= @proposal
16
16
  Status
17
17
  <%= render :partial => 'open_conference_ware/proposals/transition_control', :locals => {:proposal => proposal} %>
18
18
  <% end %>
19
- <div class="proposal_admin_controls_dependent_on_confirmed_status" style="<%= 'display:none' unless proposal.confirmed? %>">
19
+ <div>
20
20
  <% if event_rooms? %>
21
21
  Room
22
22
  <%= render :partial => 'open_conference_ware/proposals/room_control', :locals => {:proposal => proposal, :form => f} %>
@@ -137,7 +137,7 @@
137
137
  <label for="proposal_track_id_<%= track.id %>">
138
138
  <strong class="<%= track_css_class(track) %>"><%= track.title %></strong>
139
139
  <% unless track.excerpt.blank? %>
140
- <p class='excerpt'><%= track.excerpt %> <%= link_to "more&hellip;", track_path(track), :target => "_blank" %></p>
140
+ <p class='excerpt'><%= track.excerpt %> <%= link_to "more&hellip;".html_safe, track_path(track), :target => "_blank" %></p>
141
141
  <% end %>
142
142
  </label>
143
143
  </li>
@@ -235,7 +235,7 @@
235
235
  <% unless OpenConferenceWare.agreement.blank? %>
236
236
  <%= OpenConferenceWare.agreement.try(:html_safe) %>
237
237
  <% else %>
238
- I understand that my talk may be recorded and posted online for the whole world to see. I understand that <%= OpenConferenceWare.organization %> is not the appropriate place for commercial promotion ("spam") of a product, service or solution and this not welcomed by the audience.
238
+ I understand that my talk may be recorded and posted online for the whole world to see. I understand that <%= OpenConferenceWare.organization %> is not the appropriate place for commercial promotion ("spam") of a product, service or solution and this is not welcomed by the audience.
239
239
  <% end %>
240
240
  </td>
241
241
  </tr>
@@ -18,7 +18,7 @@ hide_rooms ||= false
18
18
  item_class << ' light ' << track_css_class(track) if track
19
19
  item_class << ' generic_item' if item.is_a?(OpenConferenceWare::ScheduleItem)
20
20
  %>
21
- <li class='<%= item_class %>' id='<%= item.class.name.underscore %>-<%= item.id %>'>
21
+ <li class='<%= item_class %>' id='<%= item.class.name.demodulize.underscore %>-<%= item.id %>'>
22
22
  <div class='concise'>
23
23
  <% if item.is_a?(OpenConferenceWare::ScheduleItem) %>
24
24
  <span class='summary'><%= h item.title %></span>
@@ -84,7 +84,7 @@ hide_rooms ||= false
84
84
  <% unless users.empty? %>
85
85
  <li>
86
86
  <strong>Speakers:</strong>
87
- <%= users.map{|user| link_to(h(user.fullname), user_path(user))}.join(', ') %>
87
+ <%= users.map{|user| link_to(h(user.fullname), user_path(user))}.join(', ').html_safe %>
88
88
  </li>
89
89
  <% end %>
90
90
  </ul>
@@ -0,0 +1,52 @@
1
+ <div class="admin-only selector-vote-form">
2
+ <strong>SELECTION COMMITTEE MEMBER:</strong>
3
+ <%= @proposal.user_favorites.count %> users have favorited this proposal.
4
+
5
+ <%= form_for(@selector_vote, :url => proposal_selector_vote_path(@proposal), :html => {:method => :post}) do |f| %>
6
+ <table cellspacing="0">
7
+ <tr>
8
+ <td><%= f.label :rating %></td>
9
+ <td><%= f.label :comment %></td>
10
+ <td></td>
11
+ </tr>
12
+ <tr>
13
+ <td>
14
+ <%= f.select :rating, [ ["Choose one:", ""],
15
+ ["0 - Horrible", 0],
16
+ ["1 - Poor" , 1],
17
+ ["2 - Fair", 2],
18
+ ["3 - Average", 3],
19
+ ["4 - Good", 4],
20
+ ["5 - Awesome", 5],
21
+ ["x - I don't know", -1]] %>
22
+ <% focus(:selector_vote_rating) %>
23
+ </td>
24
+ <td class="selector-vote-form-comment-cell">
25
+ <%= f.text_area :comment, :rows => 2 %>
26
+ </td>
27
+ <td>
28
+ <%= f.submit "Vote and next!" %>
29
+ <br />
30
+
31
+ <span class="nowrap">
32
+ <% if previous_proposal_path = previous_proposal_path_from(@proposal) %>
33
+ <%= link_to("&larr; Previous".html_safe, previous_proposal_path) %>
34
+ <% else %>
35
+ First proposal!
36
+ <% end %>
37
+ |
38
+ <% if next_proposal_path = next_proposal_path_from(@proposal) %>
39
+ <%= link_to("Next &rarr;".html_safe, next_proposal_path) %>
40
+ <% else %>
41
+ Last proposal!
42
+ <% end %>
43
+ </span>
44
+ </td>
45
+ </tr>
46
+ </table>
47
+ <% end %>
48
+ <div class="selector-vote-form-protip">
49
+ <strong>Protip:</strong> You can vote quickly by just pressing the number of rating to choose it because it's focused on page load, then <code>Tab</code> to the comment field and fill it, then <code>Tab</code> to the "Vote" button and <code>Enter</code> to submit!
50
+ </div>
51
+ </div>
52
+
@@ -13,7 +13,7 @@ header_tag ||= :h3
13
13
  header_prefix = local_assigns[:header_prefix]
14
14
  show_sorter = local_assigns[:show_sorter]
15
15
 
16
- cache_key = "proposals,sub_list,container_#{container.class.name}_#{container.id},title_#{title}_#{header_prefix},admin_#{admin?},order_#{params[:sort]},dir_#{params[:dir]}"
16
+ cache_key = "proposals,sub_list,container_#{container.class.name.demodulize}_#{container.id},title_#{title}_#{header_prefix},admin_#{admin?},order_#{params[:sort]},dir_#{params[:dir]}"
17
17
 
18
18
  include_user_favorites_javascript
19
19
  %>
@@ -24,7 +24,7 @@ show_sorter = local_assigns[:show_sorter]
24
24
  <%= link_to "Display #{kind}...", "#" %>
25
25
  </div>
26
26
  <div class="proposals_sub_list_for_kind_content">
27
- <%= content_tag header_tag, "#{header_prefix} #{kind} for this #{title || container.class.name.singularize}".strip.humanize %>
27
+ <%= content_tag header_tag, "#{header_prefix} #{kind} for this #{title || container.class.name.demodulize.singularize}".strip.humanize %>
28
28
  <%= render :partial => "open_conference_ware/proposals/list", :locals => {:kind => kind, :records => records, :sorter => show_sorter} %>
29
29
  </div>
30
30
  </div>
@@ -1,29 +1,6 @@
1
- <p><strong>Thanks for submitting <%= link_to "your proposal", proposal_path(@proposal) %> to Open Source Bridge!</strong></p>
1
+ <p><strong>Thank you for submitting <%= link_to "your proposal", proposal_path(@proposal) %> to <%= @event.title %>!</strong></p>
2
2
 
3
3
  <h3>Next Steps</h3>
4
4
 
5
- <p>You'll hear back from us after March 9th, when proposal submissions close.</p>
5
+ <p>You'll hear back from us after <%= @event.deadline.to_date.to_s(:long) %>, when proposal submissions close.</p>
6
6
 
7
- <h4>Get to Portland</h4>
8
-
9
- <p>Check out the <a href='/attend/'>attend</a> page for useful travel information.
10
-
11
- <h4>Web Badges</h4>
12
-
13
- <p>Share your submission! Help us get the word out about the conference with these handy badges. Just copy the HTML code associated with the image you want below and paste it on your website. Grab one now, or check out the <a href='/web-badges/'>web badges</a> page anytime.</p>
14
-
15
- <table border="0" cellspacing="5" cellpadding="5">
16
- <thead>
17
- <tr><th>Preview</th><th>Code</th></tr>
18
- </thead>
19
- <tbody>
20
- <tr>
21
- <td>
22
- <a href="http://opensourcebridge.org/"><img src="http://opensourcebridge.org/badges/2013/submit125.png" alt="I'm submitting a talk to Open Source Bridge - June 18&ndash;21, 2013 - Portland, OR" border="0" /></a>
23
- </td>
24
- <td>
25
- <textarea rows="6" cols="40"><a href="http://opensourcebridge.org/?ref=submit125"><img src="http://opensourcebridge.org/badges/2013/submit125.png" alt="I'm submitting a talk to Open Source Bridge - June 18&ndash;21, 2013 - Portland, OR" border="0" /></a></textarea>
26
- </td>
27
- </tr>
28
- </tbody>
29
- </table>
@@ -43,59 +43,7 @@ show_private_note = (can_edit?(@proposal) || selector?) && ! @proposal.note_to_o
43
43
  </script>
44
44
  <% end %>
45
45
 
46
- <% if @selector_vote %>
47
- <div class="admin-only selector-vote-form">
48
- <strong>SELECTION COMMITTEE MEMBER:</strong>
49
- <%= @proposal.user_favorites.count %> users have favorited this proposal.
50
-
51
- <%= form_for(@selector_vote, :url => proposal_selector_vote_path(@proposal), :html => {:method => :post}) do |f| %>
52
- <table cellspacing="0">
53
- <tr>
54
- <td><%= f.label :rating %></td>
55
- <td><%= f.label :comment %></td>
56
- <td></td>
57
- </tr>
58
- <tr>
59
- <td>
60
- <%= f.select :rating, [ ["Choose one:", ""],
61
- ["0 - Horrible", 0],
62
- ["1 - Poor" , 1],
63
- ["2 - Fair", 2],
64
- ["3 - Average", 3],
65
- ["4 - Good", 4],
66
- ["5 - Awesome", 5],
67
- ["x - I don't know", -1]] %>
68
- <% focus(:selector_vote_rating) %>
69
- </td>
70
- <td class="selector-vote-form-comment-cell">
71
- <%= f.text_area :comment, :rows => 2 %>
72
- </td>
73
- <td>
74
- <%= f.submit "Vote and next!" %>
75
- <br />
76
-
77
- <span class="nowrap">
78
- <% if previous_proposal_path = previous_proposal_path_from(@proposal) %>
79
- <%= link_to("&larr; Previous", previous_proposal_path) %>
80
- <% else %>
81
- First proposal!
82
- <% end %>
83
- |
84
- <% if next_proposal_path = next_proposal_path_from(@proposal) %>
85
- <%= link_to("Next &rarr;", next_proposal_path) %>
86
- <% else %>
87
- Last proposal!
88
- <% end %>
89
- </span>
90
- </td>
91
- </tr>
92
- </table>
93
- <% end %>
94
- <div class="selector-vote-form-protip">
95
- <strong>Protip:</strong> You can vote quickly by just pressing the number of rating to choose it because it's focused on page load, then <code>Tab</code> to the comment field and fill it, then <code>Tab</code> to the "Vote" button and <code>Enter</code> to submit!
96
- </div>
97
- </div>
98
- <% end %>
46
+ <%= render partial: 'selector_voting' if @selector_vote %>
99
47
 
100
48
  <%= user_favorite_control_for @proposal %>
101
49
  <%= render :partial => "open_conference_ware/proposals/admin_controls" %>
@@ -64,7 +64,7 @@ cache "proposals_stats,event_#{@event.slug}" do
64
64
  session_status_distribution.data "#{status.titleize} (#{count})", count
65
65
  end
66
66
  %>
67
-
67
+ <p><strong>Total proposals: <%= @proposals.count %></strong></p>
68
68
  <p><img src="<%= proposals_over_time.to_url %>" /></p>
69
69
  <p><img src="<%= track_distribution.to_url %>" /></p>
70
70
  <p><img src="<%= session_type_distribution.to_url %>" /></p>
@@ -21,6 +21,7 @@ HERE
21
21
  <th><%= link_to('Track', event_selector_votes_path(@event, order: 'track')) %></th>
22
22
  <th><%= link_to('Vote points', event_selector_votes_path(@event, order: 'vote_points')) %></th>
23
23
  <th><%= link_to('Votes count', event_selector_votes_path(@event, order: 'votes_count')) %></th>
24
+ <th>Average Vote</th>
24
25
  <th><%= link_to('Favorites count', event_selector_votes_path(@event, order: 'favorites_count')) %></th>
25
26
  </tr>
26
27
  <% for proposal in @proposals %>
@@ -39,6 +40,7 @@ HERE
39
40
  <td><%= proposal.track_title %></td>
40
41
  <td><%= proposal.selector_vote_points %></td>
41
42
  <td><%= proposal.selector_votes_count %></td>
43
+ <td><%= proposal.selector_vote_points.to_f / proposal.selector_votes_count.to_f %></td>
42
44
  <td><%= proposal.user_favorites.size %></td>
43
45
  </tr>
44
46
  <% if proposal.selector_votes.size > 0 %>
@@ -51,7 +53,7 @@ HERE
51
53
  <% for selector_vote in proposal.selector_votes.sort_by { |t| 0 - t.rating.to_i } %>
52
54
  <tr class="selector_vote_<%= selector_vote.id %>">
53
55
  <td class="nowrap"><%= selector_vote.rating == -1 ? "Abstain" : selector_vote.rating %></td>
54
- <td><%= selector_vote.comment.blank? ? "&mdash; N/A &mdash;" : h(selector_vote.comment) %></td>
56
+ <td><%= selector_vote.comment.blank? ? "&mdash; N/A &mdash;".html_safe : h(selector_vote.comment) %></td>
55
57
  </tr>
56
58
  <% end %>
57
59
  </table>
@@ -17,11 +17,11 @@
17
17
  </p>
18
18
  <p>
19
19
  <%= f.label :excerpt %> (one line description, used in track selector)
20
- <%= f.text_area :excerpt, :rows => 8, :class => "form-control" %>
20
+ <%= f.text_area :excerpt, :class => "form-control" %>
21
21
  </p>
22
22
  <p>
23
23
  <%= f.label :description %> (<%= display_textile_help_link %>)
24
- <%= f.text_area :description, :class => "form-control" %>
24
+ <%= f.text_area :description, :rows => 8, :class => "form-control" %>
25
25
  </p>
26
26
  <p>
27
27
  <%= f.label :color %>
@@ -5,6 +5,6 @@
5
5
  <% if user_profiles? %>
6
6
  <%= link_to "Edit profile", edit_user_path(current_user) %> |
7
7
  <% end -%>
8
- <%= link_to "Logout", sign_out_path, :method => :delete %>
8
+ <%= link_to "Sign out", sign_out_path %>
9
9
  </div>
10
10
  </div>
@@ -13,7 +13,7 @@ OpenConferenceWare::Engine.routes.draw do
13
13
  end
14
14
  resources :proposals do
15
15
  collection do
16
- :stats
16
+ get :stats
17
17
  end
18
18
  end
19
19
 
@@ -1,22 +1,22 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDkjCCAnqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQwwCgYDVQQDDANnZW0x
3
- IjAgBgoJkiaJk/IsZAEZFhJvcGVuY29uZmVyZW5jZXdhcmUxEzARBgoJkiaJk/Is
4
- ZAEZFgNvcmcwHhcNMTMxMjEyMDIyNjM5WhcNMTQxMjEyMDIyNjM5WjBHMQwwCgYD
5
- VQQDDANnZW0xIjAgBgoJkiaJk/IsZAEZFhJvcGVuY29uZmVyZW5jZXdhcmUxEzAR
6
- BgoJkiaJk/IsZAEZFgNvcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
7
- AQCrKCjMparnINUvpDuhwIUffdTrCmiqSbstrUKz58mshYWqhJNbq8LLJvfxW+Np
8
- DWNMj6UgQTHIIv9r3qSb+FptleTwhFCHkymdeie6fARiB3t7eyKUXOqkKACrFPC1
9
- yTsBIhNjnVIWceuwskdH6kq9d0je9MUy3GH27U4x4UwvZ+zhWFyEbax7sIwYmTkG
10
- iF0vj1NF4FZcGJMJ8QaQz2Y0eDNcEI9ISmuddNU6YKaXOFcBraIh1IW6XNXgPeAh
11
- 59NrSYUfZGMtpXnTsGpDbBNF+QDz8WNJKLB+EpYmbuMZxrQSBKGw7DCf4KbZlKBF
12
- hDMrAJbHMcCqB98z4LbsGb9NAgMBAAGjgYgwgYUwCQYDVR0TBAIwADALBgNVHQ8E
13
- BAMCBLAwHQYDVR0OBBYEFOJQecIZy19aGG/NCAzUKmUvEDzhMCUGA1UdEQQeMByB
14
- GmdlbUBvcGVuY29uZmVyZW5jZXdhcmUub3JnMCUGA1UdEgQeMByBGmdlbUBvcGVu
15
- Y29uZmVyZW5jZXdhcmUub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQBiKvbxnIBzzbsV
16
- ryx8JpM1pDK9DOw80GD4Kq/LoKeJYq5VtVomHHcEX0Rh7xAXHvMQ/8CSkukIrL/T
17
- sbYUZsokm5OtEgL2vX7fov41UtjFeKbrJKmcX14PiDFT8CHDUoEhCU8ExNPNcysa
18
- jMcibSoXrceNHSW4ricYcgaGlAGfZM4mt6/T5OESUngpqMJhBf1v20yg/jdm0aAm
19
- mT62ObTTt1RZISVE9N2Pl+IFFrUHbHo2nfwZOb1o9Zf/3+oudJ8X3B7mh0S4paOk
20
- TRyJkJYSUkgdnAFMIkY6+/N+TH5gA0PxvBsQ2XxTonoWJrQtFkkgdEuYrMQSWXyf
21
- 1C3tWJJ9
2
+ MIIDjjCCAnagAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMQ0wCwYDVQQDDARyZWlk
3
+ MSAwHgYKCZImiZPyLGQBGRYQb3BlbnNvdXJjZWJyaWRnZTETMBEGCgmSJomT8ixk
4
+ ARkWA29yZzAeFw0xNTAxMjkwMTE4NDRaFw0xNjAxMjkwMTE4NDRaMEYxDTALBgNV
5
+ BAMMBHJlaWQxIDAeBgoJkiaJk/IsZAEZFhBvcGVuc291cmNlYnJpZGdlMRMwEQYK
6
+ CZImiZPyLGQBGRYDb3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
7
+ 51Xh9NhctWQz/eJXjKhQmA/scWjQTCpG0V/oSnDE6iEkFZolIv0WNdjVSA97kTgr
8
+ +T6hcpU/uHYtaMfsv4NyubImDFvtUERhOtkneWsjZrzrandjpPpLYc9IjyfLRDFU
9
+ 6McIB7tWKkPXXjyU0OxS66mUvNXsmPCdSXY84RUczsF4PqhXxBiPHh4wUlCP2Q+s
10
+ X1XMRZwR3P/Uhv6BzEC0/qYxnCYVzTYWo2odhcRbVg0N63FZFlR2zCZVjeIEw5li
11
+ LoWCvYObGJzYPF+GBPU21v36ByEcijU2oKPhmwhtDM1fuq1Jshm4yuPlJwcrwJor
12
+ 7Ur26IEau+Wylzfs4O+wYQIDAQABo4GGMIGDMAkGA1UdEwQCMAAwCwYDVR0PBAQD
13
+ AgSwMB0GA1UdDgQWBBS0lQCdLQL6ya9Tp1WTNzmKT+82wDAkBgNVHREEHTAbgRly
14
+ ZWlkQG9wZW5zb3VyY2VicmlkZ2Uub3JnMCQGA1UdEgQdMBuBGXJlaWRAb3BlbnNv
15
+ dXJjZWJyaWRnZS5vcmcwDQYJKoZIhvcNAQEFBQADggEBAEXQXaFmotiA5nRbvzF8
16
+ AB2jTenrMg2Z9zxqqdI8F4kkzc9UykIGX2qcyijVHRSNpZKWPviyXw3/YmTLcXIm
17
+ pvbxLx3VSJav9VVOMFOR0+WG65m3rxMGSWpr5D9gQqYLbEjH/lRkHcLevXL6iyXS
18
+ 5teh3QVQemlzV7CTzjsZ1AUvn4S5YrCyy2Nra4X1WzfYzEvd6VC1I/a4mDwt8EX3
19
+ 7fP9XGEnkWNQOgWY6n51zywzS/IpRkSVzQAScCRAe2yDIFrrkxcn8ohH88bNHxSX
20
+ Je2AWbjtuEcurXHnvRkTkekvY3Gn/YOhKEA0gIRUzjucOz//jddTehBWOfzIwYlA
21
+ AFg=
22
22
  -----END CERTIFICATE-----
@@ -1,3 +1,3 @@
1
1
  module OpenConferenceWare
2
- VERSION = "1.0.0.pre3"
2
+ VERSION = "1.0.0.pre4"
3
3
  end
@@ -60,7 +60,7 @@ namespace :open_conference_ware do
60
60
  csv << %w(room start_time title speakers)
61
61
  event.proposals.confirmed.order('start_time ASC').each do |session|
62
62
  row = []
63
- row << session.room.ergo.name
63
+ row << (session.room ? session.room.name : '')
64
64
  row << session.start_time.strftime("%A, %B %d, %I:%M%p")
65
65
  row << session.title
66
66
  row << session.users.map{|u| u.fullname}.join(', ')
@@ -27,17 +27,17 @@ Gem::Specification.new do |s|
27
27
  s.add_dependency "rails-observers", "~> 0.1.2"
28
28
 
29
29
  # Authentication
30
- s.add_dependency "omniauth", '~> 1.1.4'
30
+ s.add_dependency "omniauth", '~> 1.2.0'
31
31
 
32
32
  s.add_dependency "hashery", '~> 2.1.0'
33
33
 
34
34
  s.add_dependency 'RedCloth', '~> 4.2.0'
35
- s.add_dependency 'aasm', '~> 3.0.0'
36
- s.add_dependency 'acts-as-taggable-on', '~> 2.4.1'
37
- s.add_dependency 'color', '~> 1.4.2'
35
+ s.add_dependency 'aasm', '~> 3.1.0'
36
+ s.add_dependency 'acts-as-taggable-on', '~> 3.0.0'
37
+ s.add_dependency 'color', '~> 1.5.1'
38
38
  s.add_dependency 'comma', '~> 3.0'
39
39
  s.add_dependency 'gchartrb', '~> 0.8.0'
40
- s.add_dependency 'paperclip', '~> 3.5.2'
40
+ s.add_dependency 'paperclip', '~> 4.1.0'
41
41
  s.add_dependency 'vpim', '~> 13.11.11'
42
42
  s.add_dependency 'nokogiri', '~> 1.6.0'
43
43
  s.add_dependency 'prawn', '~> 0.12.0'
@@ -45,9 +45,9 @@ Gem::Specification.new do |s|
45
45
  s.add_dependency 'rinku', '~> 1.7.3'
46
46
 
47
47
  # Assets
48
- s.add_dependency 'jquery-rails', '~> 3.0.0'
48
+ s.add_dependency 'jquery-rails', '~> 3.1.0'
49
49
  s.add_dependency 'sass-rails', '~> 4.0.0'
50
- s.add_dependency 'uglifier', '~> 2.3.0'
50
+ s.add_dependency 'uglifier', '~> 2.4.0'
51
51
 
52
52
  # Development
53
53
  s.add_development_dependency "sqlite3", '~> 1.3.0'
@@ -239,7 +239,7 @@ describe OpenConferenceWare::ProposalsController do
239
239
  describe "when returning ATOM" do
240
240
  def get_entry(proposal_symbol)
241
241
  title = proposals(proposal_symbol).title
242
- return @doc.xpath("//entry/title[text()='#{title}']")
242
+ return @doc.xpath("//atom:entry/atom:title[text()='#{title}']", atom:"http://www.w3.org/2005/Atom")
243
243
  end
244
244
 
245
245
  describe "for /proposals.atom" do
@@ -0,0 +1,3 @@
1
+ # /util
2
+
3
+ This directory contains useful scripts that we've written to automate bits and peices of things that came up while running [Open Source Bridge](http://opensourcebridge.org). It would be nice to wrap some of the more common things up into rake tasks, but for now, they live here.
@@ -0,0 +1,40 @@
1
+ # Assigns rooms, based on user_favorite popularily
2
+ #
3
+ # Usage: rails runner assign_rooms.rb
4
+
5
+ class RoomAllocator
6
+ LARGE_ROOMS = ["B202/203", "B302/303"]
7
+ SMALL_ROOMS = ["B201", "B204", "B301", "B304"]
8
+
9
+ def initialize
10
+ @current_event = OpenConferenceWare::Event.current
11
+ @sessions = @current_event.proposals.confirmed.scheduled.sort_by{|s| s.user_favorites.count }.reverse
12
+ @rooms = (LARGE_ROOMS + SMALL_ROOMS).map{|rn| @current_event.rooms.find_by_name(rn) }
13
+ end
14
+
15
+ def room_available_at?(room, start_time)
16
+ @sessions.select{|s| s.start_time == start_time}.all?{|s| s.room != room}
17
+ end
18
+
19
+ def allocate_rooms
20
+ @sessions.each do |session|
21
+ next if session.room.present?
22
+ first_available_room = @rooms.find{|room| room_available_at?(room, session.start_time)}
23
+ if first_available_room.present?
24
+ puts "[#{session.user_favorites.count}] Assigned #{session.title} to #{first_available_room.name}"
25
+ session.room = first_available_room
26
+ else
27
+ puts "[!!] Could not find a room assignment for #{session.title}"
28
+ end
29
+ end
30
+
31
+ puts "---"
32
+ puts "Accept room assignments? (y/n)"
33
+ if gets.chomp == "y"
34
+ @sessions.each{|s| s.save!}
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+ RoomAllocator.new.allocate_rooms
@@ -2,12 +2,12 @@
2
2
  # (I pre-scheduled all of the long form talks, and excluded their time slots from the available slots here)
3
3
 
4
4
  def seed_schedule
5
- e = Event.find_by_slug("2013")
5
+ e = OpenConferenceWare::Event.find_by_slug("2014")
6
6
 
7
7
  slots = []
8
8
  slots << [10.hours, 11.hours, 13.hours + 30.minutes, 14.hours + 30.minutes, 15.hours + 45.minutes, 16.hours + 45.minutes].map{|offset| e.dates[0] + offset}
9
9
  slots << [13.hours + 30.minutes, 14.hours + 30.minutes, 15.hours + 45.minutes, 16.hours + 45.minutes].map{|offset| e.dates[1] + offset}
10
- slots << [13.hours + 30.minutes, 14.hours + 30.minutes, 15.hours + 45.minutes, 16.hours + 45.minutes].map{|offset| e.dates[2] + offset}
10
+ slots << [10.hours, 11.hours, 13.hours + 30.minutes, 14.hours + 30.minutes, 15.hours + 45.minutes, 16.hours + 45.minutes].map{|offset| e.dates[2] + offset}
11
11
  slots.flatten!
12
12
 
13
13
  schedule_hash = {}