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.
- data.tar.gz.sig +0 -0
- data/.travis.yml +6 -0
- data/CHANGES.md +13 -0
- data/app/assets/javascripts/open_conference_ware/application.js +2 -0
- data/app/assets/javascripts/open_conference_ware/proposals.js +8 -12
- data/app/assets/stylesheets/open_conference_ware/application.css +1 -0
- data/app/controllers/open_conference_ware/application_controller.rb +8 -6
- data/app/controllers/open_conference_ware/authentications_controller.rb +1 -1
- data/app/controllers/open_conference_ware/events_controller.rb +5 -1
- data/app/controllers/open_conference_ware/proposals_controller.rb +9 -8
- data/app/controllers/open_conference_ware/session_types_controller.rb +2 -2
- data/app/mixins/open_conference_ware/public_attributes_mixin.rb +1 -1
- data/app/models/open_conference_ware/event.rb +7 -4
- data/app/models/open_conference_ware/room.rb +4 -0
- data/app/models/open_conference_ware/track.rb +3 -0
- data/app/models/open_conference_ware/user.rb +20 -10
- data/app/views/layouts/open_conference_ware/_header.html.erb +3 -0
- data/app/views/layouts/open_conference_ware/application.html.erb +1 -22
- data/app/views/open_conference_ware/authentications/_openid.html.erb +24 -10
- data/app/views/open_conference_ware/proposals/_admin_controls.html.erb +1 -1
- data/app/views/open_conference_ware/proposals/_form.html.erb +2 -2
- data/app/views/open_conference_ware/proposals/_list_concise.html.erb +2 -2
- data/app/views/open_conference_ware/proposals/_selector_voting.html.erb +52 -0
- data/app/views/open_conference_ware/proposals/_sub_list.html.erb +1 -1
- data/app/views/open_conference_ware/proposals/_sub_list_for_kind.html.erb +1 -1
- data/app/views/open_conference_ware/proposals/create.html.erb +2 -25
- data/app/views/open_conference_ware/proposals/show.html.erb +1 -53
- data/app/views/open_conference_ware/proposals/stats.html.erb +1 -1
- data/app/views/open_conference_ware/selector_votes/index.html.erb +3 -1
- data/app/views/open_conference_ware/tracks/_form.html.erb +2 -2
- data/app/views/open_conference_ware/users/_account_box.html.erb +1 -1
- data/config/routes.rb +1 -1
- data/gem-public_cert.pem +20 -20
- data/lib/open_conference_ware/version.rb +1 -1
- data/lib/tasks/export.rake +1 -1
- data/open_conference_ware.gemspec +7 -7
- data/spec/controllers/open_conference_ware/proposals_controller_spec.rb +1 -1
- data/util/README.md +3 -0
- data/util/assign_rooms.rb +40 -0
- data/util/seed_schedule.rb +2 -2
- data/util/user_favorites_contention_report.rb +2 -2
- data/vendor/assets/images/openid-selector/openid-providers-en.png +0 -0
- data/vendor/assets/javascripts/openid-selector/openid-en.js +61 -0
- data/vendor/assets/javascripts/openid-selector/openid-jquery.js +201 -0
- data/vendor/assets/stylesheets/openid-selector/openid.css.scss +79 -0
- metadata +55 -61
- metadata.gz.sig +0 -0
- data/vendor/assets/images/idselector/aol.ico +0 -0
- data/vendor/assets/images/idselector/arrow.gif +0 -0
- data/vendor/assets/images/idselector/arrow_white_back.png +0 -0
- data/vendor/assets/images/idselector/arrow_white_forward.png +0 -0
- data/vendor/assets/images/idselector/blogger.ico +0 -0
- data/vendor/assets/images/idselector/claimid.ico +0 -0
- data/vendor/assets/images/idselector/flickr.ico +0 -0
- data/vendor/assets/images/idselector/google.ico +0 -0
- data/vendor/assets/images/idselector/lj.ico +0 -0
- data/vendor/assets/images/idselector/myopenid.ico +0 -0
- data/vendor/assets/images/idselector/openid.ico +0 -0
- data/vendor/assets/images/idselector/technorati.ico +0 -0
- data/vendor/assets/images/idselector/verisign.ico +0 -0
- data/vendor/assets/images/idselector/vidoop2.ico +0 -0
- data/vendor/assets/images/idselector/vox.ico +0 -0
- 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
|
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…", track_path(track), :target => "_blank" %></p>
|
140
|
+
<p class='excerpt'><%= track.excerpt %> <%= link_to "more…".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("← 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 →".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>
|
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
|
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–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–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
|
-
|
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("← 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 →", 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? ? "— N/A —" : h(selector_vote.comment) %></td>
|
56
|
+
<td><%= selector_vote.comment.blank? ? "— N/A —".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, :
|
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 %>
|
data/config/routes.rb
CHANGED
data/gem-public_cert.pem
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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-----
|
data/lib/tasks/export.rake
CHANGED
@@ -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.
|
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.
|
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.
|
36
|
-
s.add_dependency 'acts-as-taggable-on', '~>
|
37
|
-
s.add_dependency 'color', '~> 1.
|
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', '~>
|
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.
|
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.
|
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
|
data/util/README.md
ADDED
@@ -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
|
data/util/seed_schedule.rb
CHANGED
@@ -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("
|
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 = {}
|