formol 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +147 -0
- data/Rakefile +29 -0
- data/app/assets/images/formol/read.png +0 -0
- data/app/assets/images/formol/unread.png +0 -0
- data/app/assets/javascripts/formol/admin/categories.js.coffee +55 -0
- data/app/assets/javascripts/formol/admin/forums.js +2 -0
- data/app/assets/javascripts/formol/application.js +9 -0
- data/app/assets/javascripts/formol/categories.js +2 -0
- data/app/assets/javascripts/formol/forums.js +2 -0
- data/app/assets/javascripts/formol/poll_votes.js +2 -0
- data/app/assets/javascripts/formol/posts.js.coffee +9 -0
- data/app/assets/javascripts/formol/preferences.js +2 -0
- data/app/assets/javascripts/formol/subscriptions.js.coffee +13 -0
- data/app/assets/javascripts/formol/topics.js.coffee +54 -0
- data/app/assets/javascripts/lib/jquery.prevent_double_submit.js.coffee +11 -0
- data/app/assets/javascripts/markitup/jquery.markitup.js +593 -0
- data/app/assets/javascripts/markitup/sets/markdown/set.js +53 -0
- data/app/assets/stylesheets/form_struct.css.scss +39 -0
- data/app/assets/stylesheets/formol/admin/categories.css.scss +30 -0
- data/app/assets/stylesheets/formol/admin/forums.css +4 -0
- data/app/assets/stylesheets/formol/categories.css.scss +3 -0
- data/app/assets/stylesheets/formol/development.css +4 -0
- data/app/assets/stylesheets/formol/forums.css.scss +3 -0
- data/app/assets/stylesheets/formol/mixins/after_clear.css.scss +7 -0
- data/app/assets/stylesheets/formol/partials/breadcrumb.css.scss +9 -0
- data/app/assets/stylesheets/formol/partials/categories/list.css.scss +101 -0
- data/app/assets/stylesheets/formol/partials/formol_lists.css.scss +6 -0
- data/app/assets/stylesheets/formol/partials/forums/list.css.scss +97 -0
- data/app/assets/stylesheets/formol/partials/polls/poll.css.scss +9 -0
- data/app/assets/stylesheets/formol/partials/posts/post.css.scss +116 -0
- data/app/assets/stylesheets/formol/posts.css.scss +8 -0
- data/app/assets/stylesheets/formol/topics.css.scss +42 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/block_code.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/bold.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/code.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h1.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h2.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h3.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h4.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h5.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/h6.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/italic.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/link.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/list-bullet.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/list-numeric.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/picture.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/preview.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/images/quotes.png +0 -0
- data/app/assets/stylesheets/markitup/sets/markdown/style.css +57 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-container.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-bbcode.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-dotclear.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-html.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-json.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-markdown.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-textile.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-wiki.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor-xml.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/bg-editor.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/handle.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/menu.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/images/submenu.png +0 -0
- data/app/assets/stylesheets/markitup/skins/markitup/style.css +147 -0
- data/app/assets/stylesheets/markitup/skins/simple/images/handle.png +0 -0
- data/app/assets/stylesheets/markitup/skins/simple/images/menu.png +0 -0
- data/app/assets/stylesheets/markitup/skins/simple/images/submenu.png +0 -0
- data/app/assets/stylesheets/markitup/skins/simple/style.css +118 -0
- data/app/assets/stylesheets/pygments/autumn.css +58 -0
- data/app/assets/stylesheets/pygments/borland.css +46 -0
- data/app/assets/stylesheets/pygments/bw.css +34 -0
- data/app/assets/stylesheets/pygments/colorful.css +61 -0
- data/app/assets/stylesheets/pygments/default.css +62 -0
- data/app/assets/stylesheets/pygments/emacs.css +61 -0
- data/app/assets/stylesheets/pygments/friendly.css +61 -0
- data/app/assets/stylesheets/pygments/fruity.css +70 -0
- data/app/assets/stylesheets/pygments/manni.css +61 -0
- data/app/assets/stylesheets/pygments/murphy.css +61 -0
- data/app/assets/stylesheets/pygments/native.css +70 -0
- data/app/assets/stylesheets/pygments/pastie.css +60 -0
- data/app/assets/stylesheets/pygments/perldoc.css +58 -0
- data/app/assets/stylesheets/pygments/tango.css +69 -0
- data/app/assets/stylesheets/pygments/trac.css +59 -0
- data/app/assets/stylesheets/pygments/vim.css +70 -0
- data/app/assets/stylesheets/pygments/vs.css +33 -0
- data/app/controllers/formol/admin/admin_controller.rb +11 -0
- data/app/controllers/formol/admin/categories_controller.rb +60 -0
- data/app/controllers/formol/admin/forums_controller.rb +56 -0
- data/app/controllers/formol/application_controller.rb +47 -0
- data/app/controllers/formol/categories_controller.rb +21 -0
- data/app/controllers/formol/forums_controller.rb +19 -0
- data/app/controllers/formol/poll_votes_controller.rb +23 -0
- data/app/controllers/formol/posts_controller.rb +71 -0
- data/app/controllers/formol/preferences_controller.rb +32 -0
- data/app/controllers/formol/subscriptions_controller.rb +29 -0
- data/app/controllers/formol/topics_controller.rb +91 -0
- data/app/helpers/formol/admin/categories_helper.rb +4 -0
- data/app/helpers/formol/admin/forums_helper.rb +4 -0
- data/app/helpers/formol/application_helper.rb +35 -0
- data/app/helpers/formol/categories_helper.rb +15 -0
- data/app/helpers/formol/forums_helper.rb +19 -0
- data/app/helpers/formol/poll_votes_helper.rb +4 -0
- data/app/helpers/formol/posts_helper.rb +27 -0
- data/app/helpers/formol/preferences_helper.rb +4 -0
- data/app/helpers/formol/subscriptions_helper.rb +4 -0
- data/app/helpers/formol/topics_helper.rb +27 -0
- data/app/mailers/formol/subscription_mailer.rb +13 -0
- data/app/models/formol/category.rb +42 -0
- data/app/models/formol/forum.rb +77 -0
- data/app/models/formol/poll/option.rb +20 -0
- data/app/models/formol/poll/vote.rb +32 -0
- data/app/models/formol/poll.rb +107 -0
- data/app/models/formol/post.rb +162 -0
- data/app/models/formol/post_observer.rb +9 -0
- data/app/models/formol/topic/subscription.rb +16 -0
- data/app/models/formol/topic/track.rb +57 -0
- data/app/models/formol/topic.rb +185 -0
- data/app/models/formol/tracking.rb +45 -0
- data/app/models/formol/user_preference.rb +18 -0
- data/app/views/formol/admin/categories/_category.html.erb +9 -0
- data/app/views/formol/admin/categories/_form.html.erb +8 -0
- data/app/views/formol/admin/categories/edit.html.erb +3 -0
- data/app/views/formol/admin/categories/index.html.erb +3 -0
- data/app/views/formol/admin/categories/new.html.erb +3 -0
- data/app/views/formol/admin/forums/_form.html.erb +9 -0
- data/app/views/formol/admin/forums/_forum.html.erb +12 -0
- data/app/views/formol/admin/forums/edit.html.erb +3 -0
- data/app/views/formol/admin/forums/new.html.erb +3 -0
- data/app/views/formol/categories/_category.html.erb +5 -0
- data/app/views/formol/categories/index.html.erb +5 -0
- data/app/views/formol/categories/show.html.erb +3 -0
- data/app/views/formol/forums/_forum.html.erb +13 -0
- data/app/views/formol/forums/_list.html.erb +16 -0
- data/app/views/formol/forums/show.html.erb +18 -0
- data/app/views/formol/poll/options/_form.html.erb +1 -0
- data/app/views/formol/poll_votes/_form.html.erb +8 -0
- data/app/views/formol/polls/_form.html.erb +14 -0
- data/app/views/formol/polls/_poll.html.erb +24 -0
- data/app/views/formol/posts/_form.html.erb +7 -0
- data/app/views/formol/posts/_last_post.html.erb +9 -0
- data/app/views/formol/posts/_list.html.erb +3 -0
- data/app/views/formol/posts/_post.html.erb +47 -0
- data/app/views/formol/posts/edit.html.erb +10 -0
- data/app/views/formol/posts/new.html.erb +14 -0
- data/app/views/formol/preferences/show.html.erb +11 -0
- data/app/views/formol/subscription_mailer/topic_reply.en.html.erb +8 -0
- data/app/views/formol/subscription_mailer/topic_reply.fr.html.erb +8 -0
- data/app/views/formol/topics/_form.html.erb +20 -0
- data/app/views/formol/topics/_list.html.erb +16 -0
- data/app/views/formol/topics/_topic.html.erb +13 -0
- data/app/views/formol/topics/edit.html.erb +5 -0
- data/app/views/formol/topics/new.html.erb +5 -0
- data/app/views/formol/topics/show.html.erb +25 -0
- data/app/views/layouts/formol/mail.html.erb +9 -0
- data/config/locales/en.yml +3 -0
- data/config/locales/formol/views/forums/en.yml +13 -0
- data/config/locales/formol/views/forums/fr.yml +13 -0
- data/config/locales/formol/views/poll_votes/en.yml +5 -0
- data/config/locales/formol/views/polls/en.yml.yml +5 -0
- data/config/locales/formol/views/posts/en.yml +23 -0
- data/config/locales/formol/views/posts/fr.yml +20 -0
- data/config/locales/formol/views/topics/en.yml +23 -0
- data/config/locales/formol/views/topics/fr.yml +20 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20111221101158_create_formol_categories.rb +7 -0
- data/db/migrate/20111221111417_create_formol_forums.rb +10 -0
- data/db/migrate/20111221121010_create_formol_topics.rb +9 -0
- data/db/migrate/20111221123515_create_formol_posts.rb +9 -0
- data/db/migrate/20111221151653_add_index_on_tables.rb +15 -0
- data/db/migrate/20120103163438_add_user_to_models.rb +13 -0
- data/db/migrate/20120104132631_add_counter_cache_to_models.rb +12 -0
- data/db/migrate/20120104163741_add_pinned_to_topics.rb +7 -0
- data/db/migrate/20120105133522_add_position_to_categories.rb +7 -0
- data/db/migrate/20120105190708_add_position_to_forums.rb +7 -0
- data/db/migrate/20120105212559_add_lock_to_topics.rb +7 -0
- data/db/migrate/20120106130944_add_first_post_and_last_post_to_topics.rb +8 -0
- data/db/migrate/20120106192951_change_forum_description_to_string.rb +9 -0
- data/db/migrate/20120107012517_add_last_post_to_forum.rb +7 -0
- data/db/migrate/20120107122921_add_missing_indexes.rb +12 -0
- data/db/migrate/20120107123654_add_default_on_forum_counters.rb +10 -0
- data/db/migrate/20120108114030_add_views_to_topics.rb +7 -0
- data/db/migrate/20120108131533_create_formol_topic_tracks.rb +13 -0
- data/db/migrate/20120109115141_create_formol_topic_subscriptions.rb +10 -0
- data/db/migrate/20120109220633_create_formol_user_preferences.rb +11 -0
- data/db/migrate/20120109223624_add_display_signature_to_posts.rb +7 -0
- data/db/migrate/20120109233054_add_display_signatures_and_avatars_to_user_preferences.rb +8 -0
- data/db/migrate/20120110152548_create_formol_polls.rb +14 -0
- data/db/migrate/20120110152618_create_formol_poll_options.rb +11 -0
- data/db/migrate/20120110152632_create_formol_poll_votes.rb +12 -0
- data/lib/formol/config.rb +12 -0
- data/lib/formol/controllers/auth.rb +9 -0
- data/lib/formol/controllers/nested/has_parent_category.rb +11 -0
- data/lib/formol/controllers/nested/has_parent_forum.rb +11 -0
- data/lib/formol/controllers/nested/has_parent_topic.rb +11 -0
- data/lib/formol/controllers.rb +5 -0
- data/lib/formol/engine.rb +18 -0
- data/lib/formol/formatters/redcarpet/formatter.rb +36 -0
- data/lib/formol/formatters/redcarpet/syntax_highlighter.rb +23 -0
- data/lib/formol/formatters.rb +2 -0
- data/lib/formol/generators/install/install_generator.rb +94 -0
- data/lib/formol/generators/install/templates/config/formol.yml +29 -0
- data/lib/formol/generators/install/templates/initializer/formol.rb.erb +21 -0
- data/lib/formol/generators/install/templates/lib/permissions/special_rights.rb +24 -0
- data/lib/formol/generators/install/templates/migrations/add_formol_profile_to_users.rb.erb +7 -0
- data/lib/formol/generators/install/templates/migrations/add_posts_count_to_user.rb.erb +7 -0
- data/lib/formol/generators.rb +1 -0
- data/lib/formol/integration/user.rb +76 -0
- data/lib/formol/integration.rb +1 -0
- data/lib/formol/permissions/controllers.rb +30 -0
- data/lib/formol/permissions/manager.rb +29 -0
- data/lib/formol/permissions/profile.rb +24 -0
- data/lib/formol/permissions/profiles.rb +44 -0
- data/lib/formol/permissions/user.rb +29 -0
- data/lib/formol/permissions.rb +5 -0
- data/lib/formol/rails/engine.rb +81 -0
- data/lib/formol/rails.rb +1 -0
- data/lib/formol/version.rb +10 -0
- data/lib/formol/view_helpers/assets_helper.rb +11 -0
- data/lib/formol/view_helpers/format_helper.rb +12 -0
- data/lib/formol/view_helpers.rb +2 -0
- data/lib/formol/will_paginate/list_link_renderer.rb +29 -0
- data/lib/formol/will_paginate.rb +1 -0
- data/lib/formol.rb +61 -0
- data/lib/formol_.rb +13 -0
- data/lib/tasks/formol_tasks.rake +0 -0
- metadata +348 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
module Formol
|
2
|
+
module Tracking
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
|
7
|
+
# SQL condition corresponding to an unread topic
|
8
|
+
# A topic is considered as unread if:
|
9
|
+
# * it's been tracked before last_post creation
|
10
|
+
# * OR last_post created after a given date
|
11
|
+
def unread_condition(date)
|
12
|
+
posts_table = Formol::Post.table_name
|
13
|
+
|
14
|
+
cond = "
|
15
|
+
(
|
16
|
+
tt.id IS NOT NULL
|
17
|
+
AND marked_at < #{posts_table}.created_at
|
18
|
+
) OR (
|
19
|
+
tt.id IS NULL
|
20
|
+
AND #{posts_table}.created_at >= ?
|
21
|
+
)
|
22
|
+
".squish #to keep logs clean
|
23
|
+
|
24
|
+
where(cond, date)
|
25
|
+
end
|
26
|
+
|
27
|
+
# return common conditions to get unread topics / forums
|
28
|
+
def unread_scope_base(user, opts = {})
|
29
|
+
tracks_table = Formol::Topic::Track.table_name
|
30
|
+
topics_table = Formol::Topic.table_name
|
31
|
+
|
32
|
+
sql_join = "LEFT OUTER JOIN #{tracks_table} "
|
33
|
+
sql_join << "tt ON tt.topic_id = #{topics_table}.id "
|
34
|
+
sql_join << "AND tt.user_id = #{user.id}"
|
35
|
+
|
36
|
+
scope = joins(sql_join).unread_condition(user.created_at)
|
37
|
+
|
38
|
+
scope = scope.where("#{topics_table}.forum_id = ?", opts[:forum_id]) if opts[:forum_id]
|
39
|
+
scope = scope.where("#{topics_table}.id IN (?)", opts[:topic_ids]) if opts[:topic_ids]
|
40
|
+
|
41
|
+
scope
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Formol
|
2
|
+
class UserPreference < ActiveRecord::Base
|
3
|
+
# Security
|
4
|
+
attr_protected :user_id
|
5
|
+
attr_readonly :user_id
|
6
|
+
|
7
|
+
#Associations
|
8
|
+
belongs_to :user, :class_name => Formol.config.user_class
|
9
|
+
|
10
|
+
#Validations
|
11
|
+
validates :user, :presence => true
|
12
|
+
validates :signature, :length => { :maximum => 120,
|
13
|
+
:allow_blank => true }
|
14
|
+
|
15
|
+
#Normalization
|
16
|
+
normalize_attribute :signature, :with => [:strip, :blank]
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= content_tag_for(:li, category) do %>
|
2
|
+
<%= category.label %>
|
3
|
+
<%= link_to t('.new_forum'), new_admin_category_forum_path(category) %>
|
4
|
+
<%= link_to t('.edit'), edit_admin_category_path(category) %>
|
5
|
+
<%= link_to t('.destroy'), [:admin, category], :method => :delete %>
|
6
|
+
<ol class="formol_category_forums" id="formol_category_<%= category.id %>_forums">
|
7
|
+
<%= render category.forums, :category => category %>
|
8
|
+
</ol>
|
9
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= content_tag_for(:li, forum) do %>
|
2
|
+
<div class="label">
|
3
|
+
<%= forum.label %>
|
4
|
+
</div>
|
5
|
+
<div class="description">
|
6
|
+
<%= forum.description %>
|
7
|
+
</div>
|
8
|
+
<ul class="actions">
|
9
|
+
<li><%= link_to t('.edit_forum'), edit_admin_category_forum_path(category, forum) %></li>
|
10
|
+
<li><%= link_to t('.destroy_forum'), admin_category_forum_path(category, forum), :method => :delete %></li>
|
11
|
+
</ul>
|
12
|
+
<% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%= content_tag_for(:li, forum, :class => formol_forum_klass(forum, current_formol_user)) do %>
|
2
|
+
<span class="metas">
|
3
|
+
<span class="label"><%= link_to forum.label, forum %></span>
|
4
|
+
<span class="description"><%= forum.description %></span>
|
5
|
+
</span>
|
6
|
+
<span class="topics_count"><%= forum.topics_count %></span>
|
7
|
+
<span class="posts_count"><%= forum.posts_count %></span>
|
8
|
+
<% if forum.last_post %>
|
9
|
+
<%= render 'formol/posts/last_post', :post => forum.last_post, :topic => forum.last_post.topic, :forum => forum %>
|
10
|
+
<% else %>
|
11
|
+
<span class="last_post empty">-</span>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<div class="formol_category_forums list" id="formol_category_<%= category.id %>_forums">
|
2
|
+
<div class="head">
|
3
|
+
<span class="label"><%= t('.forums') %></span>
|
4
|
+
<span class="topics_count"><%= t('.topics') %></span>
|
5
|
+
<span class="posts_count"><%= t('.posts') %></span>
|
6
|
+
<span class="last_post"><%= t('.last_post') %></span>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<ol class="forums">
|
10
|
+
<% if category.forums.blank? %>
|
11
|
+
<li class="empty"><%= t('.no_forums') %></li>
|
12
|
+
<% else %>
|
13
|
+
<%= render category.forums %>
|
14
|
+
<% end %>
|
15
|
+
</ol>
|
16
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= breadcrumb_for(@forum) %>
|
2
|
+
|
3
|
+
<%= div_for(@forum) do %>
|
4
|
+
<hgroup>
|
5
|
+
<h2><%= t('.forum') %>: <%= @forum.label %></h2>
|
6
|
+
<h4><%= @forum.description %></h4>
|
7
|
+
</hgroup>
|
8
|
+
|
9
|
+
<ul class="forum_tools">
|
10
|
+
<% if formol_authorized?(current_formol_user, :create_topic) %>
|
11
|
+
<li class="new_topic"><%= link_to t('.new'), new_forum_topic_path(@forum) %></li>
|
12
|
+
<% end %>
|
13
|
+
</ul>
|
14
|
+
|
15
|
+
<%= render 'formol/topics/list', :forum => @forum, :topics => @topics %>
|
16
|
+
|
17
|
+
<%= will_paginate @topics, :renderer => Formol::WillPaginate::ListLinkRenderer %>
|
18
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= form.input :answer %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= semantic_form_for(poll, :url => topic_poll_votes_path(topic), :method => :post) do |form| %>
|
2
|
+
<%= form.inputs do %>
|
3
|
+
<%= form.input :poll_vote_ids, :as => (poll.multiple? ? :check_boxes : :radio), :collection => poll.options, :member_label => :answer, :label => '' %>
|
4
|
+
<% end %>
|
5
|
+
<%= form.buttons do %>
|
6
|
+
<%= form.commit_button :button_html => { :value => t('.vote') } %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= form.inputs :name => attach_poll_checkbox(topic) << t('.attach_poll'), :class => 'inputs poll' do %>
|
2
|
+
<%= form.input :question %>
|
3
|
+
<%= form.input :duration %>
|
4
|
+
<%= form.input :max_options %>
|
5
|
+
|
6
|
+
<li class="answers">
|
7
|
+
<%= form.inputs :name => t('.answers'), :class => 'inputs answers' do %>
|
8
|
+
<%= form.semantic_fields_for :options do |option_form| %>
|
9
|
+
<%= render 'formol/poll/options/form', :form => option_form %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<a href="#" class="add_poll_option">[+]</a>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<%= div_for(poll) do %> <%#, :class => formol_poll_klass(poll, current_formol_user)) do %>
|
2
|
+
<div class="question">
|
3
|
+
<%= poll.question %>
|
4
|
+
</div>
|
5
|
+
<% unless display_poll_form?(poll, topic, current_formol_user) %>
|
6
|
+
<ol>
|
7
|
+
<% poll.options.each do |option| %>
|
8
|
+
<li>
|
9
|
+
<%= option.answer %>
|
10
|
+
<%= number_to_percentage((option.votes_count.to_f / poll.votes_count.to_f) * 100) %>
|
11
|
+
</li>
|
12
|
+
<% end %>
|
13
|
+
</ol>
|
14
|
+
<% else %>
|
15
|
+
<%= render 'formol/poll_votes/form', :poll => poll, :topic => topic %>
|
16
|
+
|
17
|
+
<div class="metas">
|
18
|
+
<span class="expires_at">
|
19
|
+
<%= t('.expires_at') %>
|
20
|
+
<time><%= distance_of_time_in_words_to_now(poll.expires_at) %></time>
|
21
|
+
</span>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= content_tag_for(:span, post, :class => 'last_post') do %>
|
2
|
+
<span class="created_by">
|
3
|
+
<%= t('.by') %> <strong><%= post.user.display_name %></strong>
|
4
|
+
<%= link_to_last_post(forum, topic, post) %>
|
5
|
+
</span>
|
6
|
+
<time class="created_at" datetime="<%= post.created_at.to_s(:db) %>">
|
7
|
+
<%= time_ago_in_words(post.created_at) %>
|
8
|
+
</time>
|
9
|
+
<% end %>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<%= content_tag_for(:li, post) do %>
|
2
|
+
<div class="metas">
|
3
|
+
<div class="links">
|
4
|
+
<% if (last_fives rescue false) %>
|
5
|
+
<%= link_to_last_fives_post_position(post, topic, post_counter) %>
|
6
|
+
<% else %>
|
7
|
+
<%= link_to_post_position(post, post_counter) %>
|
8
|
+
<% end %>
|
9
|
+
(<%= link_to t('.permalink'), topic_post_path(topic, post) %>)
|
10
|
+
</div>
|
11
|
+
<div class="user">
|
12
|
+
<span class="display_name"><%= post.user.display_name %></span>
|
13
|
+
<% if display_avatars?(current_formol_user) %>
|
14
|
+
<figure>
|
15
|
+
<img alt="<%= post.user.display_name %>" src="/images/emule.png" />
|
16
|
+
</figure>
|
17
|
+
<% end %>
|
18
|
+
<span class="posts_count"><%= t('.user_posts') %>: <%= post.user.formol_posts_count %></span>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<div class="content">
|
22
|
+
<%= formol_format(post.content) %>
|
23
|
+
<% if display_signatures?(current_formol_user, post) %>
|
24
|
+
--
|
25
|
+
<%= formol_format(post.user.preference.signature) %>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
<span class="created_at">
|
29
|
+
<%= t('.posted') %>
|
30
|
+
<time datetime="<%= post.created_at.to_s(:db) %>">
|
31
|
+
<%= time_ago_in_words(post.created_at) %>
|
32
|
+
</time>
|
33
|
+
</span>
|
34
|
+
<ul class="actions">
|
35
|
+
<% if formol_authorized?(current_formol_user, :create_post, topic) %>
|
36
|
+
<li class="quote"><%= link_to(t('.quote'), new_topic_post_path(topic, :quote => post.id)) %></li>
|
37
|
+
<% end %>
|
38
|
+
<% unless topic.first_post?(post) %>
|
39
|
+
<% if formol_authorized?(current_formol_user, :edit_post, post) %>
|
40
|
+
<li class="edit"><%= link_to(t('.edit'), edit_topic_post_path(topic, post)) %></li>
|
41
|
+
<% end %>
|
42
|
+
<% if formol_authorized?(current_formol_user, :destroy_post, post) %>
|
43
|
+
<li class="delete"><%= link_to(t('.destroy'), topic_post_path(topic, post), :method => :delete) %>
|
44
|
+
<% end %>
|
45
|
+
<% end %>
|
46
|
+
</ul>
|
47
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= breadcrumb_for(@topic) %>
|
2
|
+
|
3
|
+
<h2><%= t('.new') %></h2>
|
4
|
+
|
5
|
+
<%= semantic_form_for([@topic, @post]) do |f| %>
|
6
|
+
<%= render f %>
|
7
|
+
<%= f.buttons do %>
|
8
|
+
<%= f.commit_button %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<ol class="list formol_topic_posts last_fives">
|
13
|
+
<%= render @topic.posts.last_fives, :topic => @topic, :last_fives => true %>
|
14
|
+
</ol>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= semantic_form_for(@preference, :url => preference_path) do |form| %>
|
2
|
+
<%= form.inputs do %>
|
3
|
+
<%= form.input :use_signature %>
|
4
|
+
<%= form.input :signature, :as => :text %>
|
5
|
+
<%= form.input :display_signatures %>
|
6
|
+
<%= form.input :display_avatars %>
|
7
|
+
<% end %>
|
8
|
+
<%= form.buttons do %>
|
9
|
+
<%= form.commit_button %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<p>
|
2
|
+
A new reply has been added to the topic <%= @post.topic.title %>.<br />
|
3
|
+
You can read it with following this <%= link_to 'link', topic_post_url(@post.topic, @post) %>
|
4
|
+
</p>
|
5
|
+
<p>
|
6
|
+
You receive this email because you are suscribed to the topic <%= @post.topic.title %>.<br />
|
7
|
+
If you want to unsubscribe, just follow the link given upper and click on 'unsubscribe'
|
8
|
+
</p>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<p>
|
2
|
+
Une nouvelle réponse a été ajoutée au sujet <%= @post.topic.title %>.<br />
|
3
|
+
Vous pouvez la lire en cliquant sur ce <%= link_to 'lien', topic_post_url(@post.topic, @post) %>
|
4
|
+
</p>
|
5
|
+
<p>
|
6
|
+
Vous recevez cet email car vous êtes abonné au sujet <%= @post.topic.title %>.<br />
|
7
|
+
Si vous voulez vous désabonner, suivez simplement le lien fourni au dessus puis cliquez sur 'désabonner'
|
8
|
+
</p>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= semantic_form_for [@forum, @topic] do |form| %>
|
2
|
+
<%= form.inputs do %>
|
3
|
+
<%= form.input :title %>
|
4
|
+
<% end %>
|
5
|
+
<%= form.semantic_fields_for :posts, @topic.posts.first do |post_form| %>
|
6
|
+
<%= render 'formol/posts/form', :form => post_form %>
|
7
|
+
<% end %>
|
8
|
+
<% unless @topic.persisted? %>
|
9
|
+
<%= form.semantic_fields_for :poll do |poll_form| %>
|
10
|
+
<%= render 'formol/polls/form', :form => poll_form, :topic => @topic %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
<%= form.inputs :name => t('.options') do %>
|
14
|
+
<%= form.input :pinned %>
|
15
|
+
<%= form.input :locked %>
|
16
|
+
<% end %>
|
17
|
+
<%= form.buttons do %>
|
18
|
+
<%= form.commit_button %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<div class="formol_forum_topics list" id="formol_forum_<%= forum.id %>_topics">
|
2
|
+
<div class="head">
|
3
|
+
<span class="title"><%= t('.topics') %></span>
|
4
|
+
<span class="posts_count"><%= t('.posts') %></span>
|
5
|
+
<span class="views_count"><%= t('.views') %></span>
|
6
|
+
<span class="last_post"><%= t('.last_post') %></span>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<ol class="topics">
|
10
|
+
<% if topics.blank? %>
|
11
|
+
<li class="empty"><%= t('.no_topics') %></li>
|
12
|
+
<% else %>
|
13
|
+
<%= render topics, :forum => forum %>
|
14
|
+
<% end %>
|
15
|
+
</ol>
|
16
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%= content_tag_for(:li, topic, :class => formol_topic_klass(topic, current_formol_user)) do %>
|
2
|
+
<span class="meta">
|
3
|
+
<span class="title"><%= link_to topic.title, [forum, topic] %></span>
|
4
|
+
<span class="created_by">
|
5
|
+
<%= t('.created_by') %>
|
6
|
+
<%= topic.user.display_name %>
|
7
|
+
<time><%= time_ago_in_words(topic.created_at) %></time>
|
8
|
+
</span>
|
9
|
+
</span>
|
10
|
+
<span class="posts_count"><%= topic.posts_count %></span>
|
11
|
+
<span class="views_count"><%= topic.views_count %></span>
|
12
|
+
<%= render 'formol/posts/last_post', :post => topic.last_post, :topic => topic, :forum => forum %>
|
13
|
+
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<%= breadcrumb_for(@topic) %>
|
2
|
+
|
3
|
+
<%= div_for(@topic) do %>
|
4
|
+
<h2><%= t('.topic') %>: <%= @topic.title %></h2>
|
5
|
+
|
6
|
+
<ul class="topic_tools">
|
7
|
+
<% if formol_authorized?(current_formol_user, :edit_topic, @topic) %>
|
8
|
+
<li class="edit"><%= link_to t('.edit'), edit_forum_topic_path(@forum, @topic) %></li>
|
9
|
+
<% end %>
|
10
|
+
<% if formol_authorized?(current_formol_user, :subscribe_topic, @topic) %>
|
11
|
+
<li class="subscribe"><%= link_to_subscription(@topic, current_formol_user) %></li>
|
12
|
+
<% end %>
|
13
|
+
<% if formol_authorized?(current_formol_user, :create_post, @topic) %>
|
14
|
+
<li class="new_post"><%= link_to t('.new_post'), new_topic_post_path(@topic) %></li>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
<% if @topic.poll %>
|
19
|
+
<%= render @topic.poll, :topic => @topic %>
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
<%= render 'formol/posts/list', :topic => @topic, :posts => @posts %>
|
23
|
+
|
24
|
+
<%= will_paginate @posts, :renderer => Formol::WillPaginate::ListLinkRenderer %>
|
25
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
en:
|
2
|
+
formol:
|
3
|
+
posts:
|
4
|
+
last_post:
|
5
|
+
go_to_last: go to last message
|
6
|
+
by: by
|
7
|
+
|
8
|
+
post:
|
9
|
+
edit: edit
|
10
|
+
destroy: destroy
|
11
|
+
quote: quote
|
12
|
+
posted: posted
|
13
|
+
user_posts: replies
|
14
|
+
permalink: permalink
|
15
|
+
|
16
|
+
form:
|
17
|
+
options: post options
|
18
|
+
|
19
|
+
new:
|
20
|
+
new: new post
|
21
|
+
|
22
|
+
edit:
|
23
|
+
edit: edit post
|
@@ -0,0 +1,20 @@
|
|
1
|
+
fr:
|
2
|
+
formol:
|
3
|
+
posts:
|
4
|
+
last_post:
|
5
|
+
go_to_last: aller au dernier message
|
6
|
+
by: par
|
7
|
+
|
8
|
+
post:
|
9
|
+
edit: éditer
|
10
|
+
destroy: supprimer
|
11
|
+
quote: citer
|
12
|
+
posted: posté
|
13
|
+
user_posts: messages
|
14
|
+
permalink: lien permanent
|
15
|
+
|
16
|
+
new:
|
17
|
+
new: répondre
|
18
|
+
|
19
|
+
edit:
|
20
|
+
edit: éditer réponse
|
@@ -0,0 +1,23 @@
|
|
1
|
+
en:
|
2
|
+
formol:
|
3
|
+
topics:
|
4
|
+
show:
|
5
|
+
new_post: reply
|
6
|
+
topic: topic
|
7
|
+
edit: edit topic
|
8
|
+
subscribe: subscribe
|
9
|
+
unsubscribe: unsubscribe
|
10
|
+
|
11
|
+
topic:
|
12
|
+
created_by: created by
|
13
|
+
|
14
|
+
new:
|
15
|
+
new: new topic
|
16
|
+
|
17
|
+
form:
|
18
|
+
options: topic options
|
19
|
+
|
20
|
+
list:
|
21
|
+
topics: topics
|
22
|
+
posts: posts
|
23
|
+
last_post: last post
|
@@ -0,0 +1,20 @@
|
|
1
|
+
fr:
|
2
|
+
formol:
|
3
|
+
topics:
|
4
|
+
show:
|
5
|
+
new_post: répondre
|
6
|
+
topic: sujet
|
7
|
+
edit: éditer
|
8
|
+
subscribe: s'abonner
|
9
|
+
unsubscribe: se désabonner
|
10
|
+
|
11
|
+
topic:
|
12
|
+
created_by: créé par
|
13
|
+
|
14
|
+
new:
|
15
|
+
new: nouveau sujet
|
16
|
+
|
17
|
+
list:
|
18
|
+
topics: sujets
|
19
|
+
posts: réponses
|
20
|
+
last_post: dernière réponse
|