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
data/config/routes.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Formol::Engine.routes.draw do
|
2
|
+
resources :categories, :only => [:index, :show]
|
3
|
+
|
4
|
+
resources :forums, :only => [:show] do
|
5
|
+
resources :topics, :except => [:index]
|
6
|
+
end
|
7
|
+
|
8
|
+
resources :topics do
|
9
|
+
resources :posts, :except => [:index]
|
10
|
+
resources :poll_votes, :only => [:create]
|
11
|
+
|
12
|
+
post '/subscriptions' => 'subscriptions#create'
|
13
|
+
delete '/subscriptions' => 'subscriptions#destroy'
|
14
|
+
end
|
15
|
+
|
16
|
+
resource :preference, :only => [:show, :update]
|
17
|
+
|
18
|
+
root :to => 'categories#index'
|
19
|
+
|
20
|
+
namespace :admin do
|
21
|
+
resources :categories, :except => [:show] do
|
22
|
+
put :sort, :on => :collection
|
23
|
+
|
24
|
+
resources :forums, :except => [:index, :show] do
|
25
|
+
put :reorganize, :on => :collection
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
root :to => 'categories#index'
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddIndexOnTables < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
change_table :formol_posts do |t|
|
4
|
+
t.index :topic_id
|
5
|
+
end
|
6
|
+
|
7
|
+
change_table :formol_topics do |t|
|
8
|
+
t.index :forum_id
|
9
|
+
end
|
10
|
+
|
11
|
+
change_table :formol_forums do |t|
|
12
|
+
t.index :category_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateFormolTopicTracks < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :formol_topic_tracks do |t|
|
4
|
+
t.belongs_to :user
|
5
|
+
t.belongs_to :forum
|
6
|
+
t.belongs_to :topic
|
7
|
+
t.datetime :marked_at
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :formol_topic_tracks, :user_id
|
11
|
+
add_index :formol_topic_tracks, [:user_id, :forum_id]
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CreateFormolTopicSubscriptions < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :formol_topic_subscriptions do |t|
|
4
|
+
t.belongs_to :topic
|
5
|
+
t.belongs_to :subscriber
|
6
|
+
end
|
7
|
+
|
8
|
+
add_index :formol_topic_subscriptions, [:topic_id, :subscriber_id], :unique => true
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateFormolUserPreferences < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :formol_user_preferences do |t|
|
4
|
+
t.belongs_to :user
|
5
|
+
t.string :signature, :limit => 120
|
6
|
+
t.boolean :use_signature, :default => true
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index :formol_user_preferences, :user_id, :unique => true
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateFormolPolls < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :formol_polls do |t|
|
4
|
+
t.belongs_to :topic
|
5
|
+
t.string :question, :limit => 64
|
6
|
+
t.integer :duration
|
7
|
+
t.integer :max_options
|
8
|
+
t.integer :votes_count
|
9
|
+
t.datetime :created_at
|
10
|
+
end
|
11
|
+
|
12
|
+
add_index :formol_polls, :topic_id, :unique => true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateFormolPollVotes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :formol_poll_votes do |t|
|
4
|
+
t.belongs_to :option
|
5
|
+
t.belongs_to :voter
|
6
|
+
t.datetime :created_at
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index :formol_poll_votes, :voter_id
|
10
|
+
add_index :formol_poll_votes, :option_id
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Formol
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
isolate_namespace Formol
|
4
|
+
|
5
|
+
engine_name 'formol'
|
6
|
+
|
7
|
+
config.generators do |g|
|
8
|
+
g.test_framework = :rspec
|
9
|
+
end
|
10
|
+
|
11
|
+
config.i18n.railties_load_path = []
|
12
|
+
|
13
|
+
config.active_record.observers = [:'formol/post_observer']
|
14
|
+
|
15
|
+
#Needed to have proper locales organization
|
16
|
+
paths['config/locales'] << 'config/locales/**/'
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'redcarpet'
|
2
|
+
require 'pygments.rb'
|
3
|
+
|
4
|
+
module Formol
|
5
|
+
module Formatters
|
6
|
+
module Redcarpet
|
7
|
+
class Formatter
|
8
|
+
def initialize
|
9
|
+
@renderer = SyntaxHighlighter.new(:hard_wrap => true,
|
10
|
+
:filter_html => true)
|
11
|
+
@processor = ::Redcarpet::Markdown.new(@renderer, :fenced_code_blocks => true,
|
12
|
+
:no_intra_emphasis => true,
|
13
|
+
:autolink => true,
|
14
|
+
:space_after_headers => false,
|
15
|
+
:superscript => false)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_html(text)
|
19
|
+
@processor.render(text).html_safe
|
20
|
+
end
|
21
|
+
|
22
|
+
def quote(text)
|
23
|
+
quoted_text = ""
|
24
|
+
|
25
|
+
text.split("\n").each_with_index do |l|
|
26
|
+
quoted_text << '> ' if (l.strip.blank? || l.start_with?('>'))
|
27
|
+
quoted_text << l
|
28
|
+
quoted_text << "\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
quoted_text
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'redcarpet'
|
2
|
+
require 'pygments.rb'
|
3
|
+
|
4
|
+
module Formol
|
5
|
+
module Formatters
|
6
|
+
module Redcarpet
|
7
|
+
class SyntaxHighlighter < ::Redcarpet::Render::XHTML
|
8
|
+
def block_code(code, language)
|
9
|
+
title_block(language) + Pygments.highlight(code, :lexer => language,
|
10
|
+
:options => {
|
11
|
+
:linenos => 'inline'
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def title_block(language)
|
18
|
+
%{<div class="highlight_title #{language.downcase}">#{language.downcase.capitalize}</div>}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Formol
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
attr_accessor :user_class, :current_user_helper
|
7
|
+
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
|
10
|
+
desc 'Formol installation...'
|
11
|
+
|
12
|
+
def get_user_class
|
13
|
+
self.user_class = ask("What is you user model called? [User]")
|
14
|
+
self.user_class = 'user' if user_class.blank?
|
15
|
+
|
16
|
+
self.user_class = user_class.classify
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_current_user_helper
|
20
|
+
self.current_user_helper = ask("What is the 'current_user' helper called in your main app? [current_user]")
|
21
|
+
self.current_user_helper = 'current_user' if current_user_helper.blank?
|
22
|
+
end
|
23
|
+
|
24
|
+
def install_migrations
|
25
|
+
rake 'formol:install:migrations'
|
26
|
+
end
|
27
|
+
|
28
|
+
def install_formol_user_migrations
|
29
|
+
template 'migrations/add_formol_profile_to_users.rb.erb', "#{Rails.root}/db/migrate/#{next_migration_number}_add_formol_profile_to_user.rb"
|
30
|
+
template 'migrations/add_posts_count_to_user.rb.erb', "#{Rails.root}/db/migrate/#{next_migration_number}_add_posts_count_to_user.rb"
|
31
|
+
end
|
32
|
+
|
33
|
+
def install_formol_initializer
|
34
|
+
template 'initializer/formol.rb.erb', "#{Rails.root}/config/initializers/formol.rb"
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy_formol_config_yml
|
38
|
+
template 'config/formol.yml', "#{Rails.root}/config/formol.yml"
|
39
|
+
end
|
40
|
+
|
41
|
+
def copy_special_rights
|
42
|
+
template 'lib/permissions/special_rights.rb', "#{Rails.root}/lib/formol/permissions/special_rights.rb"
|
43
|
+
end
|
44
|
+
|
45
|
+
def mount_engine
|
46
|
+
inject_into_file("#{Rails.root}/config/routes.rb", %{ mount Formol::Engine => "/forums", :as => :formol\n}, :after => /routes.draw.do\n/)
|
47
|
+
end
|
48
|
+
|
49
|
+
def finished
|
50
|
+
puts <<END
|
51
|
+
#{'=' * 90}
|
52
|
+
Formol is now installed into your application
|
53
|
+
You can access it with http://yourhost/forums
|
54
|
+
|
55
|
+
* Formol migrations were copied into db/migrate and there was also two migrations for #{user_class} created.
|
56
|
+
* A new initializer called formol has been added to 'config/initializers'
|
57
|
+
* A yaml file wich contains profiles and permissions has been added to 'config'
|
58
|
+
* A module to define special rights has been added to 'lib/formol/permissions/special_rights'
|
59
|
+
* The formol engine was mounted in 'config/routes.rb'
|
60
|
+
|
61
|
+
What you need to do if you wanna formol work:
|
62
|
+
|
63
|
+
* run 'rake db:migrate'
|
64
|
+
* add '<%= include_formol_javascripts %>' in the head section of your application layout
|
65
|
+
* add 'include Formol::Integration::User' in your #{user_class} model
|
66
|
+
|
67
|
+
If you want to change where the forums are located, just change the "forums" path in 'config/routes.rb'.
|
68
|
+
|
69
|
+
Formol is delivered with no warranty under MIT license.
|
70
|
+
However, if you have any question, suggestion or issue, you can post them on our github repository, at the following address: https://github.com/mulasse/formol/issues
|
71
|
+
|
72
|
+
Thank your for using Formol.
|
73
|
+
#{'=' * 90}
|
74
|
+
|
75
|
+
END
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def next_migration_number
|
81
|
+
@prev_migration_number = if @prev_migration_number.blank?
|
82
|
+
last_migration = Dir[Rails.root.join('db/migrate/*.rb')].sort.last.split("/").last
|
83
|
+
last_migration_number = last_migration.split('_').first
|
84
|
+
|
85
|
+
last_migration_number.to_i + 1
|
86
|
+
else
|
87
|
+
@prev_migration_number + 1
|
88
|
+
end
|
89
|
+
|
90
|
+
@prev_migration_number.to_s
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
formol:
|
2
|
+
profiles:
|
3
|
+
admin:
|
4
|
+
rights:
|
5
|
+
- administrate
|
6
|
+
#administrate right grants all rights
|
7
|
+
|
8
|
+
#default profile is used for unregistered users
|
9
|
+
default:
|
10
|
+
rights:
|
11
|
+
- read_category
|
12
|
+
- read_forum
|
13
|
+
- read_topic
|
14
|
+
|
15
|
+
registered:
|
16
|
+
extends: default
|
17
|
+
rights:
|
18
|
+
- create_topic
|
19
|
+
- create_post
|
20
|
+
- vote_poll
|
21
|
+
- subscribe_topic
|
22
|
+
|
23
|
+
moderator:
|
24
|
+
extends: registered
|
25
|
+
rights:
|
26
|
+
- edit_topic
|
27
|
+
- edit_post
|
28
|
+
- lock_topic
|
29
|
+
- pin_topic
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Formol.configure do
|
2
|
+
# formol needs to know what is your User class
|
3
|
+
# almost everything (topics, posts, votes ...) is attached to a user
|
4
|
+
# this params must be a string, not a constant
|
5
|
+
config.user_class = '<%= user_class %>'
|
6
|
+
|
7
|
+
# formol need to know how to access to authenticated user
|
8
|
+
# usually, helper method is called 'current_user'
|
9
|
+
config.current_user_helper_method = :<%= current_user_helper %>
|
10
|
+
|
11
|
+
# choose what text formatter you need
|
12
|
+
# actually only :markdown is available
|
13
|
+
# we will add :bbcode in a near future
|
14
|
+
config.text_formatter = :markdown
|
15
|
+
|
16
|
+
# you need to provide an email adress wich will be used as sender adress in all
|
17
|
+
# email that formol will send
|
18
|
+
#
|
19
|
+
# actually, only subscriptions send emails
|
20
|
+
config.email_from = 'noreply@example.com'
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Formol
|
2
|
+
module Permissions
|
3
|
+
# add methods to this module to define some rights that acts
|
4
|
+
# differently than just checking if user has right for his profile.
|
5
|
+
#
|
6
|
+
# For instance, a user can edit a post without having 'edit_post' right
|
7
|
+
# if he wrotes it, he's able to edit it
|
8
|
+
module SpecialRights
|
9
|
+
# a user can edit a topic if he wrotes it
|
10
|
+
def able_to_edit_topic?(topic)
|
11
|
+
has_right?(:edit_topic) || (!topic.locked? && topic.user_id == user.id)
|
12
|
+
end
|
13
|
+
|
14
|
+
# a user can edit a post if he wrotes it
|
15
|
+
def able_to_edit_post?(post)
|
16
|
+
has_right?(:edit_post) || (!post.topic.locked? && post.user_id == user.id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def able_to_create_post?(topic)
|
20
|
+
has_right?(:create_post) && !topic.locked?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'formol/generators/install/install_generator'
|