parlement 0.9 → 0.10
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.
- data/CHANGES +20 -1
- data/MEMORY +51 -0
- data/README +11 -38
- data/Rakefile +2 -2
- data/app/controllers/account_controller.rb +83 -50
- data/app/controllers/application.rb +3 -0
- data/app/controllers/elt_controller.rb +14 -3
- data/app/controllers/subscriber_controller.rb +25 -9
- data/app/helpers/elt_helper.rb +1 -1
- data/app/models/elt.rb +23 -13
- data/app/models/mail.rb +37 -17
- data/app/models/mail_notify.rb +6 -5
- data/app/models/person.rb +6 -5
- data/app/models/person_mail.rb +4 -0
- data/app/models/person_notify.rb +13 -0
- data/app/models/subscription.rb +4 -0
- data/app/views/account/_login.rhtml +9 -12
- data/app/views/account/_show.rhtml +35 -16
- data/app/views/elt/_elt.rhtml +8 -20
- data/app/views/elt/_listByVote.rhtml +9 -9
- data/app/views/elt/show.rhtml +6 -33
- data/app/views/layouts/top.rhtml +6 -0
- data/app/views/person_notify/setEmail.rhtml +24 -0
- data/app/views/subscriber/_list.rhtml +18 -0
- data/config/environment.rb +6 -4
- data/config/environments/development.rb +2 -0
- data/db/ROOT/parlement/{news → News}/Version_01.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_02.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_03.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_04.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_05.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_06.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_07.txt +0 -0
- data/db/ROOT/parlement/{news → News}/Version_08.txt +0 -0
- data/db/ROOT/parlement/{security → Security}/anonymity.txt +0 -0
- data/db/ROOT/parlement.txt +1 -1
- data/db/development_structure.sql +49 -34
- data/db/migrate/003_elt_children_count.rb +1 -1
- data/db/migrate/005_filter_mail.rb +22 -0
- data/public/javascripts/mybehaviour.js +10 -2
- data/public/stylesheets/default.css +21 -15
- data/test/unit/choice_test.rb +1 -1
- data/test/unit/elt_test.rb +1 -1
- data/test/unit/mail_notify_test.rb +24 -8
- data/test/unit/mail_test.rb +61 -6
- data/test/unit/{notifier_test.rb → person_notify_test.rb} +2 -2
- data/test/unit/person_test.rb +1 -1
- data/test/unit/subscriber_test.rb +12 -12
- metadata +24 -20
- data/app/models/notifier.rb +0 -13
- data/app/views/notifier/changeEmail.rhtml +0 -10
- data/public/images/comments.gif +0 -0
data/app/models/mail.rb
CHANGED
@@ -8,6 +8,8 @@ class Mail < ActiveRecord::Base
|
|
8
8
|
usesguid
|
9
9
|
|
10
10
|
belongs_to :elt
|
11
|
+
has_many :person_mails, :dependent => :destroy
|
12
|
+
has_many :recipients, :through => :person_mails, :source => :person
|
11
13
|
|
12
14
|
#
|
13
15
|
# Receive this new elt as an email, sent through app/helpers/mailman.rb
|
@@ -44,6 +46,7 @@ class Mail < ActiveRecord::Base
|
|
44
46
|
#
|
45
47
|
def receive(mail)
|
46
48
|
logger.info "Receive mail #{mail.message_id}"
|
49
|
+
#puts "Receive mail #{mail.message_id}"
|
47
50
|
build_elt :created_on => mail.date,
|
48
51
|
:subject => unquote(mail.subject),
|
49
52
|
:body => '',
|
@@ -51,7 +54,7 @@ class Mail < ActiveRecord::Base
|
|
51
54
|
|
52
55
|
# Try to find its mail parent in the db
|
53
56
|
if mail.in_reply_to and Mail.find_by_message mail.in_reply_to
|
54
|
-
elt.parent_id = mail.in_reply_to
|
57
|
+
elt.parent_id = Mail.find_by_message(mail.in_reply_to).elt.id
|
55
58
|
end
|
56
59
|
|
57
60
|
# Try to find its mail parent in the db
|
@@ -85,6 +88,8 @@ class Mail < ActiveRecord::Base
|
|
85
88
|
end
|
86
89
|
|
87
90
|
rescue ActiveRecord::RecordNotFound
|
91
|
+
logger.info "Creating a parent elt with id #{parentId}"
|
92
|
+
#puts "Creating a parent elt with id #{parentId}"
|
88
93
|
elt.build_parent :parent_id => 'mail', :subject => parentId, :body => ''
|
89
94
|
elt.parent.id = parentId
|
90
95
|
elt.parent.publish
|
@@ -125,10 +130,14 @@ class Mail < ActiveRecord::Base
|
|
125
130
|
# An elt needs to be published as a mail
|
126
131
|
#
|
127
132
|
def publish
|
128
|
-
logger.info "Publish mail"
|
133
|
+
logger.info "Publish mail for elt #{elt.subject} [#{elt.id}]"
|
134
|
+
#puts "Publish mail for elt #{elt.subject} [#{elt.id}]"
|
129
135
|
|
130
136
|
if message and not message.blank? and file
|
131
137
|
mail = TMail::Mail.parse file
|
138
|
+
# Let's reuse an eventual id if it is simply resent (for example after a vote)
|
139
|
+
# TODO add a test
|
140
|
+
mail.message_id = message
|
132
141
|
else
|
133
142
|
mail = MailNotify.create_publish elt
|
134
143
|
self.mail_parents = mail.references
|
@@ -140,11 +149,21 @@ class Mail < ActiveRecord::Base
|
|
140
149
|
mail['List-Archive'] = "http://"+ActionMailer::Base.server_settings[:domain]
|
141
150
|
mail['Errors-To'] = "errors@"+ActionMailer::Base.server_settings[:domain]
|
142
151
|
|
143
|
-
|
144
|
-
.select { |
|
145
|
-
.
|
146
|
-
|
147
|
-
.
|
152
|
+
subscriptions = elt.all_subscriptions \
|
153
|
+
.select { |s| s.person.email and not s.person.email.blank? } \
|
154
|
+
.select { |s| #puts "Person: #{s.person.name}, elt: #{s.elt.id}, filter: #{s.filter}";
|
155
|
+
not s.filter or (elt.result and elt.result >= s.filter) } \
|
156
|
+
.reject { |s| recipients.include? s.person } \
|
157
|
+
.uniq
|
158
|
+
|
159
|
+
# Record all people to whom it was sent
|
160
|
+
subscriptions.each { |r| person_mails.create :person => r.person }
|
161
|
+
# mostly because otherwise the tests don't see it
|
162
|
+
person_mails.reload
|
163
|
+
recipients.reload
|
164
|
+
|
165
|
+
mail.bcc = subscriptions.collect { |i| i.person.email }.uniq.join(', ')
|
166
|
+
#puts "mail.bcc: #{mail.bcc}"
|
148
167
|
|
149
168
|
#
|
150
169
|
# Redefine the recipients used when delivering the mail to the local smtp server
|
@@ -162,21 +181,19 @@ class Mail < ActiveRecord::Base
|
|
162
181
|
ret.empty? ? default : ret
|
163
182
|
end
|
164
183
|
|
184
|
+
# Added to make sure it is not lost, but not modified if already existant
|
185
|
+
mail['X-Message-Id'] = mail.message_id if not mail['X-Message-Id']
|
186
|
+
|
165
187
|
if mail.message_id
|
166
188
|
# Let's not change the message id
|
167
189
|
def mail.add_message_id
|
168
190
|
end
|
169
191
|
end
|
170
192
|
|
171
|
-
|
172
|
-
mail['X-Message-Id'] = mail.message_id if not mail['X-Message-Id']
|
173
|
-
|
174
|
-
MailNotify::deliver(mail) if mail.destinations and not mail.destinations.empty?
|
193
|
+
MailNotify::deliver(mail) if mail.bcc and not mail.bcc.empty?
|
175
194
|
|
176
195
|
# Do it after sending, to get the actual message id as generated by the MTA
|
177
|
-
|
178
|
-
# we record the initial id
|
179
|
-
self.message = mail.message_id if not self.message or self.message.blank?
|
196
|
+
self.message = mail.message_id if not message or message.blank?
|
180
197
|
|
181
198
|
logger.info "Published with id \"#{message}\""
|
182
199
|
end
|
@@ -184,9 +201,10 @@ class Mail < ActiveRecord::Base
|
|
184
201
|
|
185
202
|
private
|
186
203
|
|
187
|
-
# This is to make sure we only have text, no iso-8859
|
204
|
+
# This is to make sure we only have text, no iso-8859
|
188
205
|
def unquote(text)
|
189
|
-
text.gsub(/\=\?(.*)\?(Q|q)\?.*?\?\=/) { |m| TMail::Unquoter.unquote_and_convert_to m, Regexp.last_match(1) }
|
206
|
+
#text.gsub(/\=\?(.*)\?(Q|q)\?.*?\?\=/) { |m| TMail::Unquoter.unquote_and_convert_to m, Regexp.last_match(1) }
|
207
|
+
text.gsub(/\=\?.*?\?.\?.*?\?\=/) { |m| TMail::Unquoter.unquote_and_convert_to m, "utf8" }
|
190
208
|
end
|
191
209
|
|
192
210
|
# Get and store the attachments
|
@@ -212,8 +230,10 @@ class Mail < ActiveRecord::Base
|
|
212
230
|
# It looks like ==0 or ^@ !!!
|
213
231
|
# Otherwise the elt can not be saved in the db :(
|
214
232
|
elt.body += Iconv.new(charset, 'iso-8859-1').iconv(attachment.body).gsub(/\0/, '')
|
215
|
-
|
233
|
+
elsif !charset =~ 'uft-8'
|
216
234
|
elt.body += Iconv.new(charset, 'iso-8859-1').iconv(attachment.body)
|
235
|
+
else
|
236
|
+
elt.body += attachment.body
|
217
237
|
end
|
218
238
|
else
|
219
239
|
# Here too have to remove any eventual null character!
|
data/app/models/mail_notify.rb
CHANGED
@@ -11,7 +11,7 @@ class MailNotify < ActionMailer::Base
|
|
11
11
|
|
12
12
|
ml = mailing_list(elt.parent)
|
13
13
|
|
14
|
-
recipients
|
14
|
+
recipients ml.subject.to_s \
|
15
15
|
+ " <#{ml.id}@#{ActionMailer::Base.server_settings[:domain]}>"
|
16
16
|
|
17
17
|
from ((elt.person and elt.person.name) ? elt.person.name : ANONYMOUS_POSTER) \
|
@@ -58,6 +58,7 @@ class MailNotify < ActionMailer::Base
|
|
58
58
|
|
59
59
|
parentMsg = elt.parent.mail
|
60
60
|
if parentMsg
|
61
|
+
parentMsg.reload # Mostly necessary for tests
|
61
62
|
@headers['references'] = ''
|
62
63
|
@headers['references'] << parentMsg.mail_parents if parentMsg.mail_parents
|
63
64
|
@headers['references'] << parentMsg.message if parentMsg.message
|
@@ -71,13 +72,13 @@ class MailNotify < ActionMailer::Base
|
|
71
72
|
private
|
72
73
|
|
73
74
|
#
|
74
|
-
# Try to
|
75
|
+
# Try to find, define, the mailing list id this elt is part of
|
75
76
|
#
|
76
|
-
# The algo used is simple: find a parent id
|
77
|
-
#
|
77
|
+
# The algo used is simple: find a small parent id which does not correspond
|
78
|
+
# to an answer
|
78
79
|
#
|
79
80
|
def mailing_list(elt)
|
80
|
-
if (elt
|
81
|
+
if (elt and elt.parent_id and elt.parent_id != 'ROOT' and (elt.id.size > 21 or elt.subject =~ /Re:\s/)) then
|
81
82
|
mailing_list elt.parent
|
82
83
|
else
|
83
84
|
elt
|
data/app/models/person.rb
CHANGED
@@ -2,8 +2,13 @@ class Person < ActiveRecord::Base
|
|
2
2
|
usesguid
|
3
3
|
|
4
4
|
has_many :elts
|
5
|
-
|
5
|
+
|
6
|
+
has_many :choices, :dependent => :destroy
|
6
7
|
has_many :issues, :through => :choices, :source => :elt
|
8
|
+
has_many :subscriptions, :dependent => :destroy
|
9
|
+
has_many :subscribed_elts, :through => :subscriptions, :source => :elt
|
10
|
+
has_many :person_mails, :dependent => :destroy
|
11
|
+
has_many :mails, :through => :person_mails, :source => :mail
|
7
12
|
|
8
13
|
validates_presence_of :name, :on => :create
|
9
14
|
validates_length_of :name, :within => 3..80, :on => :create
|
@@ -11,10 +16,6 @@ class Person < ActiveRecord::Base
|
|
11
16
|
validates_uniqueness_of :email, :on => :create,
|
12
17
|
:if => Proc.new { |p| p.email and p.email.length > 0 }
|
13
18
|
|
14
|
-
has_and_belongs_to_many :subscribed_elts,
|
15
|
-
:class_name => "Elt",
|
16
|
-
:join_table => "subscribers"
|
17
|
-
|
18
19
|
# Convenience method, because User is as it was from the salted login plugin
|
19
20
|
def user
|
20
21
|
return User.find_by_login(name)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class PersonNotify < ActionMailer::Base
|
2
|
+
def setEmail(person, url=nil)
|
3
|
+
# Email header info MUST be added here
|
4
|
+
@recipients = person.user.email
|
5
|
+
@subject = "[parlement] email verification"
|
6
|
+
@from = LoginEngine.config(:email_from).to_s
|
7
|
+
|
8
|
+
# Email body substitutions go here
|
9
|
+
@body["name"] = person.name
|
10
|
+
@body["url"] = url
|
11
|
+
@body["app_name"] = LoginEngine.config(:app_name).to_s
|
12
|
+
end
|
13
|
+
end
|
@@ -1,11 +1,8 @@
|
|
1
1
|
<%= form_remote_tag(
|
2
|
-
:update =>
|
3
|
-
:url => { :controller => 'account', :action => 'login', :
|
4
|
-
:before => visual_effect(:
|
5
|
-
:loaded => visual_effect(:BlindDown,
|
6
|
-
|
7
|
-
<%= hidden_field 'elt', 'id' if @elt %>
|
8
|
-
<input type="hidden" id="divId" name="divId" value="<%= divId %>"/>
|
2
|
+
:update => 'identity',
|
3
|
+
:url => { :controller => 'account', :action => 'login', :elt => @elt },
|
4
|
+
:before => visual_effect(:BlindUp, 'identity')+";resetChoices();",
|
5
|
+
:loaded => visual_effect(:BlindDown, 'identity')) %>
|
9
6
|
|
10
7
|
<div class="login">Please, choose a pseudo</div>
|
11
8
|
|
@@ -16,10 +13,10 @@
|
|
16
13
|
|
17
14
|
<%= link_to_function('<span class="icon">>></span>',
|
18
15
|
"Element.toggle(this);" \
|
19
|
-
+visual_effect(:Grow, '
|
16
|
+
+visual_effect(:Grow, 'user_password_identity') \
|
20
17
|
+"Form.focusFirstElement(document.forms[0])") %>
|
21
18
|
|
22
|
-
<span style="display: none;" id="
|
19
|
+
<span style="display: none;" id="user_password_identity">
|
23
20
|
<br/>
|
24
21
|
<label for="user_password">Password:
|
25
22
|
<%= password_field "user", "password", :size => 10 %>
|
@@ -27,11 +24,11 @@
|
|
27
24
|
|
28
25
|
<%= link_to_function('<span class="icon">>></span>',
|
29
26
|
"Element.toggle(this);" \
|
30
|
-
+visual_effect(:Grow, '
|
27
|
+
+visual_effect(:Grow, 'person_email_identity') \
|
31
28
|
+"Form.focusFirstElement(document.forms[0])") %>
|
32
29
|
</span>
|
33
30
|
|
34
|
-
<span style="display: none;" id="
|
31
|
+
<span style="display: none;" id="person_email_identity">
|
35
32
|
<br/>
|
36
33
|
<label for="person_email">Email (or check key):</label>
|
37
34
|
<%= text_field "person", "email", :size => 20 %>
|
@@ -40,7 +37,7 @@
|
|
40
37
|
<%= submit_tag 'OK' %>
|
41
38
|
|
42
39
|
<%= render :partial => '/help',
|
43
|
-
:locals => { :divId => 'login'
|
40
|
+
:locals => { :divId => 'login', :content => '
|
44
41
|
<p>You can participate with:</p>
|
45
42
|
<ul>
|
46
43
|
<li>no pseudo</li>
|
@@ -21,13 +21,12 @@
|
|
21
21
|
<% if @person = session[:person] %>
|
22
22
|
<span class="logout">
|
23
23
|
<%= link_to_remote('[X]',
|
24
|
-
{ :update =>
|
25
|
-
:url => { :controller => 'account', :action => 'logout', :
|
26
|
-
:before => visual_effect(:
|
27
|
-
:
|
24
|
+
{ :update => 'identity',
|
25
|
+
:url => { :controller => 'account', :action => 'logout', :elt => @elt },
|
26
|
+
:before => visual_effect(:BlindUp, 'identity')+";resetChoices();",
|
27
|
+
:loaded => visual_effect(:BlindDown, 'identity') },
|
28
28
|
{ :href => url_for(:controller => 'account', :action => 'logout') }) %>
|
29
29
|
</span>
|
30
|
-
|
31
30
|
<span class="author">
|
32
31
|
<<%= link_to session[:person].name,
|
33
32
|
:controller => 'person',
|
@@ -40,21 +39,41 @@
|
|
40
39
|
:id => "person_avatar", :class => "avatar" %>
|
41
40
|
</div>
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
<fieldset id="edit"><legend>Edit</legend>
|
43
|
+
<%= form_remote_tag(
|
44
|
+
:update => 'identity',
|
45
|
+
:url => { :controller => 'account', :action => 'setPassword' },
|
46
|
+
:before => visual_effect(:BlindUp, 'identity'),
|
47
|
+
:loaded => visual_effect(:BlindDown, 'identity')) %>
|
48
|
+
<label for="user_password">Password:</label>
|
49
|
+
<%= password_field "user", "password", :size => 12 %>
|
50
|
+
<%= submit_tag 'OK' %>
|
51
|
+
<%= end_form_tag %>
|
52
|
+
|
53
|
+
<%= form_remote_tag(
|
54
|
+
:update => 'identity',
|
55
|
+
:url => { :controller => 'account', :action => 'setEmail' },
|
56
|
+
:before => visual_effect(:BlindUp, 'identity'),
|
57
|
+
:loaded => visual_effect(:BlindDown, 'identity')) %>
|
58
|
+
<label for="person_email">Email:</label>
|
59
|
+
<%= text_field "person", "email", :size => 16 %>
|
60
|
+
<%= submit_tag 'OK' %>
|
61
|
+
<%= end_form_tag %>
|
62
|
+
|
63
|
+
<%= form_tag( { :controller => "account", :action => "setAvatar"},
|
64
|
+
:multipart => true, :target => "avatar", :class => "setAvatar") %>
|
65
|
+
<label>Avatar:</label>
|
66
|
+
<%= file_field "person", "image", :onchange => "submit()", :size => 3 %>
|
67
|
+
<%= submit_tag 'OK' %>
|
68
|
+
<%= end_form_tag %>
|
69
|
+
</fieldset>
|
51
70
|
|
52
71
|
<iframe id="avatar" name="avatar" style="display: none"></iframe>
|
53
72
|
|
54
|
-
<script language="JavaScript">Element.show($('
|
73
|
+
<script language="JavaScript">Element.show($('subscriptionLink'));</script>
|
55
74
|
<% else %>
|
56
75
|
|
57
|
-
<%= render :partial => '/account/login'
|
58
|
-
<script language="JavaScript">Element.hide($('
|
76
|
+
<%= render :partial => '/account/login' %>
|
77
|
+
<script language="JavaScript">Element.hide($('subscriptionLink'));</script>
|
59
78
|
<% end %>
|
60
79
|
|
data/app/views/elt/_elt.rhtml
CHANGED
@@ -57,38 +57,26 @@
|
|
57
57
|
<% end %>
|
58
58
|
|
59
59
|
<span class="eltMore" id="eltMore_<%= elt.id %>"
|
60
|
-
<%= 'style="display: none"' if (eltTop or elt.elts_count <
|
61
|
-
<%= link_to_remote(elt.elts_count.to_s+' more',
|
60
|
+
<%= 'style="display: none"' if (eltTop or elt.elts_count < SUB_THREAD_LENGTH) %>>
|
61
|
+
<%= link_to_remote(elt.elts_count.to_s+' more...',
|
62
62
|
{ :update => 'eltSubs_'+elt.id.to_s,
|
63
63
|
:url => { :controller => 'elt', :action => 'list', :id => elt },
|
64
|
-
:
|
65
|
-
visual_effect(:BlindDown, "
|
66
|
-
|
64
|
+
:before => visual_effect(:BlindUp, "eltMore_#{elt.id.to_s}")+
|
65
|
+
visual_effect(:BlindDown, "eltSubsClose_#{elt.id.to_s}"),
|
66
|
+
:loading => visual_effect(:BlindDown, "eltSubs_#{elt.id.to_s}") },
|
67
67
|
{ :href => url_for(:controller => 'elt', :action => 'show', :id => elt) }) %>
|
68
|
-
<!--
|
69
|
-
-
|
70
|
-
<%= link_to_remote('Write <span class="icon">>></span>',
|
71
|
-
{ :update => "eltNew_#{elt.id.to_s}",
|
72
|
-
:url => { :controller => 'elt', :action => 'new', :id => elt },
|
73
|
-
:loaded => visual_effect(:BlindDown, "eltNew_#{elt.id.to_s}")+
|
74
|
-
visual_effect(:BlindDown, "eltSubsClose_#{elt.id.to_s}")},
|
75
|
-
{ :href => url_for(:controller => 'elt', :action => 'new', :id => elt)}) %>
|
76
|
-
-->
|
77
68
|
</span>
|
78
69
|
<!-- The choice end form, here to make sure it looks nice in text browsers -->
|
79
70
|
<%= end_form_tag %>
|
80
71
|
|
81
72
|
<ul class="eltNew" id="eltNew_<%= elt.id %>"></ul>
|
82
73
|
|
83
|
-
|
84
|
-
<ul <%= 'style="display: none"' unless (eltTop or elt.elts_count == 1) %>
|
74
|
+
<ul <%= 'style="display: none"' unless (eltTop or elt.elts_count < SUB_THREAD_LENGTH) %>
|
85
75
|
id="eltSubs_<%= elt.id %>" class="eltSub">
|
86
|
-
|
87
|
-
<%= render :partial => '/elt/list', :locals => { :elt => elt } %>
|
88
|
-
<% end %>
|
76
|
+
<%= render :partial => '/elt/list', :locals => { :elt => elt } if (eltTop or elt.elts_count < SUB_THREAD_LENGTH) %>
|
89
77
|
</ul>
|
90
78
|
|
91
|
-
<span <%= 'style="display: none"' unless (
|
79
|
+
<span <%= 'style="display: none"' unless (elt.elts_count > 0 and (eltTop or elt.elts_count < SUB_THREAD_LENGTH)) %>
|
92
80
|
id="eltSubsClose_<%= elt.id %>" title="<%= elt.created_on %>"
|
93
81
|
class="eltSubsClose">
|
94
82
|
<%= link_to_function('<span class="icon"><<</span> Close',
|
@@ -45,15 +45,15 @@
|
|
45
45
|
<ul>
|
46
46
|
<% elts.each do |elt| %>
|
47
47
|
<li class="boxLine elt" title="<%= elt.created_on.strftime('%d/%m %H:%M') %>">
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
48
|
+
<span>
|
49
|
+
<%= link_to_remote("%+d" % elt.resultlocal,
|
50
|
+
{ :update => 'resultList_'+elt.id,
|
51
|
+
:position => :top,
|
52
|
+
:url => { :action => 'choices', :id => elt } },
|
53
|
+
{ :class => 'result', :id => "resultList_#{ elt.id}",
|
54
|
+
:href => url_for(:controller => 'elt', :action => 'choices', :id => elt) }
|
55
|
+
) if elt.resultlocal %>
|
56
|
+
</span>
|
57
57
|
|
58
58
|
<% if elt.person %>
|
59
59
|
<span class="author">
|
data/app/views/elt/show.rhtml
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
<% voters = Choice.count :select => 'person_id', :distinct => true %>
|
2
2
|
<div class="sidebar">
|
3
3
|
<h3 class="boxTitle">Identity</h3>
|
4
|
-
<div class="box" id="identity">
|
5
|
-
<div id="author_<%= @elt.id %>">
|
6
|
-
<%= render :partial => 'account/show', :locals => { :divId => 'author_'+@elt.id } %>
|
7
|
-
</div>
|
8
|
-
</div>
|
4
|
+
<div class="box" id="identity"><%= render :partial => 'account/show' %></div>
|
9
5
|
|
10
6
|
<h3 class="boxTitle">Filter</h3>
|
11
7
|
<div class="box">
|
@@ -23,37 +19,14 @@
|
|
23
19
|
<script>setFilterFromCookie();</script>
|
24
20
|
</div>
|
25
21
|
|
26
|
-
<h3 class="boxTitle">Highest posts</h3>
|
27
|
-
<div class="box listByVote">
|
28
|
-
<%= render :partial => '/elt/listByVote' %>
|
29
|
-
</div>
|
30
|
-
|
31
|
-
<h3 class="boxTitle">Latest posts</h3>
|
32
|
-
<div class="box listByDate">
|
33
|
-
<%= render :partial => '/elt/listByDate' %>
|
34
|
-
</div>
|
35
|
-
|
36
22
|
<h3 class="boxTitle">Subscribers</h3>
|
37
|
-
<div class="box">
|
38
|
-
<div id="subscription" <%= "style='display: none'" unless session[:person] %> >
|
39
|
-
<%= link_to_remote(((@session[:person] and @elt.subscribers.include?(@session[:person])) ? 'Unsubscribe!' : 'Subscribe!'),
|
40
|
-
:update => 'subscription',
|
41
|
-
:url => { :controller => 'subscriber', :action => 'subscribe', :id => @elt },
|
42
|
-
:loaded => visual_effect(:BlindDown, 'subscription')) %>
|
43
|
-
</div>
|
23
|
+
<div class="box"><%= render :partial => '/subscriber/list' %></div>
|
44
24
|
|
45
|
-
|
46
|
-
|
47
|
-
<%= link_to(i.name, :controller => 'person', :action => 'show', :id => i) %>
|
48
|
-
<% end %>
|
49
|
-
</div>
|
25
|
+
<h3 class="boxTitle">Highest posts</h3>
|
26
|
+
<div class="box listByVote"><%= render :partial => '/elt/listByVote' %></div>
|
50
27
|
|
51
|
-
|
52
|
-
|
53
|
-
<%= link_to(i.name, :controller => 'person', :action => 'show', :id => i) %>
|
54
|
-
<% end %>
|
55
|
-
</div>
|
56
|
-
</div>
|
28
|
+
<h3 class="boxTitle">Latest posts</h3>
|
29
|
+
<div class="box listByDate"><%= render :partial => '/elt/listByDate' %></div>
|
57
30
|
|
58
31
|
<h3 class="boxTitle">Search</h3>
|
59
32
|
<div class="box">
|
data/app/views/layouts/top.rhtml
CHANGED
@@ -4,6 +4,12 @@
|
|
4
4
|
<html>
|
5
5
|
<head>
|
6
6
|
<title><%= @title %></title>
|
7
|
+
|
8
|
+
<link rel="alternate" type="application/rss+xml" title="Latest Posts - <%= @title %>"
|
9
|
+
href="<%= url_for :action => 'rss', :id => @elt %>"/>
|
10
|
+
<link rel="alternate" type="application/rss+xml" title="Highest posts - <%= @title %>"
|
11
|
+
href="<%= url_for :action => 'vote_rss', :id => @elt %>"/>
|
12
|
+
|
7
13
|
<%= stylesheet_link_tag 'default.css' %>
|
8
14
|
<%= javascript_include_tag "/javascripts/prototype" %>
|
9
15
|
<%= javascript_include_tag "/javascripts/scriptaculous" %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Welcome to <%= @app_name %>, <%= @name %>.
|
2
|
+
|
3
|
+
Please click on the following link to confirm your email:
|
4
|
+
<a href="<%= @url%>">Click me!</a>
|
5
|
+
|
6
|
+
<%= @url %>
|
7
|
+
|
8
|
+
If you received this email by mistake, just ignore it.
|
9
|
+
|
10
|
+
Thank you
|
11
|
+
|
12
|
+
====================================================================
|
13
|
+
|
14
|
+
Bienvenue à <%= @app_name %>, <%= @name %>.
|
15
|
+
|
16
|
+
Veuillez cliquer sur le lien ci dessous pour confirmer votre email:
|
17
|
+
<a href="<%= @url%>">cliquez moi</a>
|
18
|
+
|
19
|
+
<%= @url %>
|
20
|
+
|
21
|
+
Si vous avez reçu ce mail par erreur, ignorez le tout simplement.
|
22
|
+
|
23
|
+
Merci
|
24
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<div id="subscription">
|
2
|
+
<div class="boxLine">
|
3
|
+
<% @elt.all_subscriptions.each do |p| %>
|
4
|
+
<%= link_to p.person.name, :controller => 'person', :action => 'show', :id => p.person %>
|
5
|
+
<%= "(#{ p.filter })" if p.filter %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div id="subscriptionLink" class="boxLineR"
|
10
|
+
<%= "style='display: none'" unless session[:person] %> >
|
11
|
+
<%= link_to_remote 'Add/remove me!',
|
12
|
+
:update => 'subscription',
|
13
|
+
:url => { :controller => 'subscriber', :action => 'subscribe', :id => @elt },
|
14
|
+
:before => visual_effect(:BlindUp, 'subscription'),
|
15
|
+
:loaded => visual_effect(:BlindDown, 'subscription') %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
|
data/config/environment.rb
CHANGED
@@ -64,14 +64,16 @@ require 'rails_file_column'
|
|
64
64
|
require 'jcode'
|
65
65
|
$KCODE = 'u'
|
66
66
|
|
67
|
+
# What is the name of a quick anonymous poster
|
68
|
+
ANONYMOUS_POSTER = 'anon'
|
69
|
+
|
67
70
|
# How many elements are displayed at once in a page
|
68
71
|
PAGE_LENGTH = 20
|
72
|
+
# How many elements are displayed at once in a sub thread
|
73
|
+
SUB_THREAD_LENGTH = 5
|
69
74
|
# How many elements are displayed at once in a sidebar list
|
70
75
|
LIST_LENGTH = 10
|
71
76
|
|
72
|
-
# What is the name of a quick anonymous poster
|
73
|
-
ANONYMOUS_POSTER = 'anon'
|
74
|
-
|
75
77
|
# Number of elt's paragraphs to show initially
|
76
78
|
NB_PARAGRAPH_TO_DISPLAY = 4
|
77
79
|
|
@@ -106,5 +108,5 @@ Engines.start :login
|
|
106
108
|
|
107
109
|
Rubaidh::GoogleAnalytics.tracker_id = 'UA-317241-1'
|
108
110
|
|
109
|
-
PARLEMENT_VERSION='0.
|
111
|
+
PARLEMENT_VERSION='0.10'
|
110
112
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/db/ROOT/parlement.txt
CHANGED