effective_posts 0.6.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +9 -1
- data/app/controllers/admin/posts_controller.rb +5 -10
- data/app/controllers/effective/posts_controller.rb +9 -15
- data/app/datatables/effective_posts_datatable.rb +23 -25
- data/app/helpers/effective_posts_helper.rb +19 -5
- data/app/models/effective/post.rb +8 -15
- data/app/models/effective/snippets/read_more_divider.rb +1 -4
- data/app/views/admin/posts/_actions.html.haml +10 -13
- data/app/views/admin/posts/_form.html.haml +13 -24
- data/app/views/effective/posts/_additional_fields.html.haml +10 -12
- data/app/views/effective/posts/_form.html.haml +13 -19
- data/app/views/effective/posts/submitted.html.haml +2 -2
- data/app/views/effective/posts_mailer/post_submitted_to_admin.html.haml +2 -2
- data/config/effective_posts.rb +0 -15
- data/lib/effective_posts/version.rb +1 -1
- data/lib/effective_posts.rb +14 -5
- data/lib/generators/effective_posts/install_generator.rb +1 -1
- metadata +13 -28
- data/Rakefile +0 -24
- data/app/helpers/effective_kaminari_helper.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c022efd2bcc520c8c917470ed78cfc6d59383a6d
|
4
|
+
data.tar.gz: 7b0e965d6149141d91764bff9405ba0bf5407d17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fdd4fe4cbb4e0a5bd4ca0d965464bea38a54075470cd326529d9b3d297626dc1235a14292aa90093b99863d91a5596adc58b27e667c309f883303967fece7ca
|
7
|
+
data.tar.gz: fcc25d31d20948003c2759801034cf981a522a3e5cc8541751e11f46bad4552ecbd9abab7fb769f2317b4464c2b705e36a64bcc0f8c07bf5631574f889fab35b
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -7,11 +7,19 @@ Built ontop of effective_regions for post content entry and Kaminari for paginat
|
|
7
7
|
Rails 3.2.x and 4.x
|
8
8
|
|
9
9
|
|
10
|
+
## effective_posts 1.0
|
11
|
+
|
12
|
+
This is the 1.0 series of effective_posts.
|
13
|
+
|
14
|
+
This requires Twitter Bootstrap 4 and Rails 5.1+
|
15
|
+
|
16
|
+
Please check out [Effective Posts 0.x](https://github.com/code-and-effect/effective_posts/tree/bootstrap3) for more information using this gem with Bootstrap 3.
|
17
|
+
|
10
18
|
## Getting Started
|
11
19
|
|
12
20
|
Please first install the [effective_regions](https://github.com/code-and-effect/effective_regions) and [effective_datatables](https://github.com/code-and-effect/effective_datatables) gems.
|
13
21
|
|
14
|
-
Please download and install [Twitter
|
22
|
+
Please download and install [Twitter Bootstrap4](http://getbootstrap.com)
|
15
23
|
|
16
24
|
Add to your Gemfile:
|
17
25
|
|
@@ -6,12 +6,7 @@ module Admin
|
|
6
6
|
|
7
7
|
def index
|
8
8
|
@page_title = 'Posts'
|
9
|
-
|
10
|
-
if Gem::Version.new(EffectiveDatatables::VERSION) < Gem::Version.new('3.0')
|
11
|
-
@datatable = Effective::Datatables::Posts.new()
|
12
|
-
else
|
13
|
-
@datatable = EffectivePostsDatatable.new(self)
|
14
|
-
end
|
9
|
+
@datatable = EffectivePostsDatatable.new(self)
|
15
10
|
|
16
11
|
authorize_effective_posts!
|
17
12
|
end
|
@@ -60,7 +55,7 @@ module Admin
|
|
60
55
|
|
61
56
|
authorize_effective_posts!
|
62
57
|
|
63
|
-
if @post.
|
58
|
+
if @post.update_attributes(post_params)
|
64
59
|
if params[:commit] == 'Save and Edit Content'
|
65
60
|
redirect_to effective_regions.edit_path(effective_posts.post_path(@post), :exit => effective_posts.edit_admin_post_path(@post))
|
66
61
|
elsif params[:commit] == 'Save and Add New'
|
@@ -107,7 +102,7 @@ module Admin
|
|
107
102
|
|
108
103
|
authorize_effective_posts!
|
109
104
|
|
110
|
-
if @post.
|
105
|
+
if @post.update_attributes(draft: false)
|
111
106
|
flash[:success] = 'Successfully approved post. It is now displayed on the website.'
|
112
107
|
else
|
113
108
|
flash[:danger] = "Unable to approve post: #{@post.errors.full_messages.join(', ')}"
|
@@ -126,8 +121,8 @@ module Admin
|
|
126
121
|
private
|
127
122
|
|
128
123
|
def authorize_effective_posts!
|
129
|
-
EffectivePosts.
|
130
|
-
EffectivePosts.
|
124
|
+
EffectivePosts.authorize!(self, :admin, :effective_posts)
|
125
|
+
EffectivePosts.authorize!(self, action_name.to_sym, @post || Effective::Post)
|
131
126
|
end
|
132
127
|
|
133
128
|
def post_params
|
@@ -5,8 +5,6 @@ module Effective
|
|
5
5
|
before_action :authenticate_user!, only: [:new, :create, :edit, :update],
|
6
6
|
if: -> { EffectivePosts.submissions_require_current_user }
|
7
7
|
|
8
|
-
after_action :monkey_patch_for_kaminari, only: [:index]
|
9
|
-
|
10
8
|
def index
|
11
9
|
@posts ||= Effective::Post.posts(user: current_user, category: params[:category])
|
12
10
|
@posts = @posts.page(params[:page]).per(EffectivePosts.per_page)
|
@@ -20,7 +18,7 @@ module Effective
|
|
20
18
|
@posts = @posts.where(search) if search.present?
|
21
19
|
end
|
22
20
|
|
23
|
-
EffectivePosts.
|
21
|
+
EffectivePosts.authorize!(self, :index, Effective::Post)
|
24
22
|
|
25
23
|
@page_title = (params[:page_title] || params[:category] || params[:defaults].try(:[], :category) || 'Posts').titleize
|
26
24
|
end
|
@@ -30,10 +28,10 @@ module Effective
|
|
30
28
|
@post = @posts.find(params[:id])
|
31
29
|
|
32
30
|
if @post.respond_to?(:roles_permit?)
|
33
|
-
raise Effective::AccessDenied unless @post.roles_permit?(current_user)
|
31
|
+
raise Effective::AccessDenied.new('Access Denied', :show, @post) unless @post.roles_permit?(current_user)
|
34
32
|
end
|
35
33
|
|
36
|
-
EffectivePosts.
|
34
|
+
EffectivePosts.authorize!(self, :show, @post)
|
37
35
|
|
38
36
|
@page_title = @post.title
|
39
37
|
end
|
@@ -43,7 +41,7 @@ module Effective
|
|
43
41
|
@post ||= Effective::Post.new(published_at: Time.zone.now)
|
44
42
|
@page_title = 'New Post'
|
45
43
|
|
46
|
-
EffectivePosts.
|
44
|
+
EffectivePosts.authorize!(self, :new, @post)
|
47
45
|
end
|
48
46
|
|
49
47
|
def create
|
@@ -51,7 +49,7 @@ module Effective
|
|
51
49
|
@post.user = current_user if defined?(current_user)
|
52
50
|
@post.draft = (EffectivePosts.submissions_require_approval == true)
|
53
51
|
|
54
|
-
EffectivePosts.
|
52
|
+
EffectivePosts.authorize!(self, :create, @post)
|
55
53
|
|
56
54
|
if @post.save
|
57
55
|
@page_title ||= 'Post Submitted'
|
@@ -73,7 +71,7 @@ module Effective
|
|
73
71
|
@post ||= Effective::Post.find(params[:id])
|
74
72
|
@page_title ||= 'Edit Post'
|
75
73
|
|
76
|
-
EffectivePosts.
|
74
|
+
EffectivePosts.authorize!(self, :edit, @post)
|
77
75
|
end
|
78
76
|
|
79
77
|
def update
|
@@ -81,9 +79,9 @@ module Effective
|
|
81
79
|
draft_was = @post.draft
|
82
80
|
@post.draft = (EffectivePosts.submissions_require_approval == true)
|
83
81
|
|
84
|
-
EffectivePosts.
|
82
|
+
EffectivePosts.authorize!(self, :update, @post)
|
85
83
|
|
86
|
-
if @post.
|
84
|
+
if @post.update_attributes(post_params)
|
87
85
|
@page_title ||= 'Post Submitted'
|
88
86
|
flash.now[:success] = 'Successfully re-submitted post'
|
89
87
|
|
@@ -102,7 +100,7 @@ module Effective
|
|
102
100
|
def destroy
|
103
101
|
@post ||= Effective::Post.find(params[:id])
|
104
102
|
|
105
|
-
EffectivePosts.
|
103
|
+
EffectivePosts.authorize!(self, :destroy, @post)
|
106
104
|
|
107
105
|
if @post.destroy
|
108
106
|
flash[:success] = 'Successfully deleted post'
|
@@ -119,9 +117,5 @@ module Effective
|
|
119
117
|
params.require(:effective_post).permit(EffectivePosts.permitted_params)
|
120
118
|
end
|
121
119
|
|
122
|
-
def monkey_patch_for_kaminari
|
123
|
-
@template = @template.tap { |template| template.extend(EffectiveKaminariHelper) }
|
124
|
-
end
|
125
|
-
|
126
120
|
end
|
127
121
|
end
|
@@ -1,35 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
order :published_at, :desc
|
1
|
+
class EffectivePostsDatatable < Effective::Datatable
|
2
|
+
datatable do
|
3
|
+
order :published_at, :desc
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
col :published_at
|
6
|
+
col :id, visible: false
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
col :title
|
9
|
+
col :category, search: { collection: EffectivePosts.categories }
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
col :draft, visible: false
|
18
|
-
else
|
19
|
-
col :draft
|
11
|
+
if EffectivePosts.submissions_enabled
|
12
|
+
col :approved, sql_column: 'NOT(draft)', as: :boolean do |post|
|
13
|
+
post.draft? ? 'No' : 'Yes'
|
20
14
|
end
|
21
15
|
|
22
|
-
col :
|
23
|
-
|
24
|
-
col :
|
16
|
+
col :draft, visible: false
|
17
|
+
else
|
18
|
+
col :draft
|
19
|
+
end
|
25
20
|
|
26
|
-
|
21
|
+
col :start_at
|
22
|
+
col :end_at, visible: false
|
23
|
+
col :location, visible: false
|
27
24
|
|
28
|
-
|
29
|
-
end
|
25
|
+
col :created_at, label: 'Submitted at', visible: false
|
30
26
|
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
actions_col partial: '/admin/posts/actions', partial_as: :post
|
28
|
+
end
|
29
|
+
|
30
|
+
collection do
|
31
|
+
Effective::Post.all
|
34
32
|
end
|
35
33
|
end
|
@@ -8,7 +8,20 @@ module EffectivePostsHelper
|
|
8
8
|
if EffectivePosts.use_category_routes
|
9
9
|
effective_posts.post_path(post, opts).sub('/posts', "/#{category}")
|
10
10
|
else
|
11
|
-
effective_posts.post_path(post, opts)
|
11
|
+
effective_posts.post_path(post, opts.merge(category: category))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def effective_post_category_path(category, opts = nil)
|
16
|
+
return effective_posts.posts_path unless category.present?
|
17
|
+
|
18
|
+
category = category.to_s.downcase
|
19
|
+
opts ||= {}
|
20
|
+
|
21
|
+
if EffectivePosts.use_category_routes
|
22
|
+
"/#{category}"
|
23
|
+
else
|
24
|
+
effective_posts.posts_path(opts.merge(category: category))
|
12
25
|
end
|
13
26
|
end
|
14
27
|
|
@@ -16,12 +29,13 @@ module EffectivePostsHelper
|
|
16
29
|
render(partial: 'effective/posts/post', locals: { post: post })
|
17
30
|
end
|
18
31
|
|
19
|
-
def post_meta(post)
|
32
|
+
def post_meta(post, date: true, datetime: false, category: true, author: true)
|
20
33
|
[
|
21
34
|
'Published',
|
22
|
-
"on #{post.published_at.strftime('%B %d, %Y
|
23
|
-
("
|
24
|
-
("
|
35
|
+
("on #{post.published_at.strftime('%B %d, %Y')}" if date),
|
36
|
+
("on #{post.published_at.strftime('%B %d, %Y at %l:%M %p')}" if datetime),
|
37
|
+
("to #{link_to_post_category(post.category)}" if category && Array(EffectivePosts.categories).length > 1),
|
38
|
+
("by #{post.user.to_s.presence || 'Unknown'}" if author && EffectivePosts.post_meta_author && post.user.present?)
|
25
39
|
].compact.join(' ').html_safe
|
26
40
|
end
|
27
41
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Effective
|
2
2
|
class Post < ActiveRecord::Base
|
3
|
-
acts_as_role_restricted if defined?(EffectiveRoles)
|
4
|
-
acts_as_asset_box :image if defined?(EffectiveAssets)
|
3
|
+
acts_as_role_restricted if defined?(EffectiveRoles) && EffectivePosts.use_effective_roles
|
5
4
|
acts_as_regionable
|
6
5
|
|
7
6
|
self.table_name = EffectivePosts.posts_table_name.to_s
|
@@ -33,21 +32,19 @@ module Effective
|
|
33
32
|
|
34
33
|
scope :drafts, -> { where(draft: true) }
|
35
34
|
scope :published, -> { where(draft: false).where("#{EffectivePosts.posts_table_name}.published_at < ?", Time.zone.now) }
|
35
|
+
scope :with_category, -> (category) { where(category: category.to_s.downcase) }
|
36
36
|
|
37
37
|
scope :posts, -> (user: nil, category: nil, drafts: false) {
|
38
|
-
scope = (
|
39
|
-
scope = scope.includes(:regions).order(published_at: :desc)
|
38
|
+
scope = all.includes(:regions).order(published_at: :desc)
|
40
39
|
|
41
|
-
if defined?(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if user.present? && user.respond_to?(:roles) && defined?(EffectiveRoles)
|
46
|
-
scope = scope.for_role(user.roles)
|
40
|
+
if defined?(EffectiveRoles) && EffectivePosts.use_effective_roles
|
41
|
+
if user.present? && user.respond_to?(:roles)
|
42
|
+
scope = scope.for_role(user.roles)
|
43
|
+
end
|
47
44
|
end
|
48
45
|
|
49
46
|
if category.present?
|
50
|
-
scope = scope.
|
47
|
+
scope = scope.with_category(category)
|
51
48
|
end
|
52
49
|
|
53
50
|
if drafts.blank?
|
@@ -96,10 +93,6 @@ module Effective
|
|
96
93
|
post.title = post.title + ' (Copy)'
|
97
94
|
post.draft = true
|
98
95
|
|
99
|
-
if defined?(EffectiveAssets) && image.present?
|
100
|
-
post.add_to_asset_box(:image, image)
|
101
|
-
end
|
102
|
-
|
103
96
|
regions.each do |region|
|
104
97
|
post.regions.build(region.attributes.except('id', 'updated_at', 'created_at'))
|
105
98
|
end
|
@@ -1,16 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
= dropdown(variation: :dropleft) do
|
2
|
+
- if datatable.admin_namespace?
|
3
|
+
- if EffectivePosts.submissions_enabled && EffectivePosts.submissions_require_approval && !post.approved?
|
4
|
+
= dropdown_link_to 'Approve', effective_posts.admin_approve_post_path(post)
|
4
5
|
|
5
|
-
=
|
6
|
-
|
6
|
+
= dropdown_link_to 'Edit', effective_posts.edit_admin_post_path(post)
|
7
|
+
- if EffectivePosts.use_fullscreen_editor
|
8
|
+
= dropdown_link_to 'Edit Content', effective_post_path(post, edit: true), title: 'Edit Content', 'data-no-turbolink': true, target: '_blank'
|
7
9
|
|
8
|
-
=
|
9
|
-
%span.glyphicon.glyphicon-eye-open
|
10
|
+
= dropdown_link_to 'View', effective_post_path(post, preview: true), target: '_blank'
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
%span.glyphicon.glyphicon-edit
|
14
|
-
|
15
|
-
= link_to effective_posts.admin_post_path(post.id), title: 'Delete', data: { method: :delete, confirm: 'Are you sure you want to delete? This cannot be undone.' } do
|
16
|
-
%span.glyphicon.glyphicon-trash
|
12
|
+
= dropdown_link_to "Delete", effective_posts.admin_post_path(post),
|
13
|
+
data: { method: :delete, confirm: "Really delete #{post}?" }
|
@@ -1,36 +1,25 @@
|
|
1
|
-
=
|
2
|
-
= f.
|
1
|
+
= effective_form_with(model: post, url: post.persisted? ? effective_posts.admin_post_path(post.id) : effective_posts.admin_posts_path) do |f|
|
2
|
+
= f.text_field :title, hint: 'The title of your post.'
|
3
3
|
|
4
4
|
- if Array(EffectivePosts.categories).length > 1
|
5
|
-
= f.
|
6
|
-
as: (defined?(EffectiveFormInputs) ? :effective_select : :select),
|
7
|
-
collection: EffectivePosts.categories,
|
8
|
-
include_blank: false
|
5
|
+
= f.select :category, EffectivePosts.categories
|
9
6
|
- else
|
10
|
-
= f.
|
7
|
+
= f.hidden_field :category, (EffectivePosts.categories.first || 'posts')
|
11
8
|
|
12
9
|
= render partial: '/effective/posts/additional_fields', locals: { post: post, form: f, f: f }
|
13
10
|
|
14
|
-
= f.
|
11
|
+
= f.datetime_field :published_at, label: 'Publish date', hint: 'When should this be displayed on the website.'
|
15
12
|
|
16
|
-
= f.
|
17
|
-
as: (defined?(EffectiveFormInputs) ? :effective_date_time_picker : :datetime),
|
18
|
-
label: 'Publish date',
|
19
|
-
hint: 'When your post will be displayed on the website.'
|
13
|
+
= f.check_box :draft, hint: 'Save this post as a draft. It will not be accessible on the website.'
|
20
14
|
|
21
|
-
= f.
|
22
|
-
as: (defined?(EffectiveFormInputs) ? :effective_ckeditor_text_area : :text),
|
23
|
-
hint: 'The body of your post.',
|
24
|
-
toolbar: 'full',
|
25
|
-
required: true
|
15
|
+
= f.editor :body, delta: false
|
26
16
|
|
27
17
|
- if defined?(EffectiveRoles) and f.object.respond_to?(:roles) && EffectivePosts.use_effective_roles
|
28
|
-
= f.
|
18
|
+
= f.checks :roles, EffectiveRoles.roles_collection(f.object), hint: '* leave blank for a regular public post that anyone can view'
|
29
19
|
|
30
|
-
.
|
31
|
-
= f.
|
20
|
+
= f.submit do
|
21
|
+
= f.save 'Save'
|
32
22
|
- if EffectivePosts.use_fullscreen_editor
|
33
|
-
= f.
|
34
|
-
= f.
|
35
|
-
= f.
|
36
|
-
= link_to 'Cancel', effective_posts.admin_posts_path
|
23
|
+
= f.save 'Save and Edit Content'
|
24
|
+
= f.save 'Save and Add New'
|
25
|
+
= f.save 'Save and Duplicate'
|
@@ -1,19 +1,17 @@
|
|
1
1
|
-# Adding additional .effective-posts-category-#{category} will correctly show/hide on Posts#new forms
|
2
2
|
|
3
3
|
- # Event specific fields
|
4
|
-
.effective-post-category-events.
|
5
|
-
|
6
|
-
|
7
|
-
required: false,
|
8
|
-
hint: 'Display a start time for this event.'
|
4
|
+
.effective-post-category-events.card.mb-4{style: ('display: none' unless f.object.category == 'events')}
|
5
|
+
.card-body
|
6
|
+
%h5.card-title Event Info
|
7
|
+
= form.datetime_field :start_at, required: false, hint: 'Display a start time for this event.'
|
9
8
|
|
10
|
-
|
11
|
-
hint: 'Display an end time of this event.'
|
9
|
+
= form.datetime_field :end_at, required: false, hint: 'Display an end time of this event.'
|
12
10
|
|
13
|
-
|
11
|
+
= form.text_field :location, required: false, hint: 'Display a location where this event is taking place.'
|
14
12
|
|
15
|
-
|
16
|
-
|
13
|
+
= form.text_field :website_name, label: 'External website',
|
14
|
+
placeholder: 'Buy Tickets', hint: 'The label of an external website.'
|
17
15
|
|
18
|
-
|
19
|
-
|
16
|
+
= form.url_field :website_href, label: 'External website address',
|
17
|
+
placeholder: 'http://', hint: 'The address of an external website (start with http:// or https://).'
|
@@ -1,27 +1,21 @@
|
|
1
|
-
=
|
2
|
-
= f.
|
1
|
+
= effective_form_with(model: post, url: post.persisted? ? effective_posts.post_path(post.id) : effective_posts.posts_path) do |f|
|
2
|
+
= f.text_field :title, hint: 'The title of your post.'
|
3
3
|
|
4
4
|
- if Array(EffectivePosts.categories).length > 1
|
5
|
-
= f.
|
6
|
-
as: (defined?(EffectiveFormInputs) ? :effective_select : :select),
|
7
|
-
collection: EffectivePosts.categories,
|
8
|
-
include_blank: false
|
5
|
+
= f.select :category, EffectivePosts.categories
|
9
6
|
- else
|
10
|
-
= f.
|
7
|
+
= f.hidden_field :category, (EffectivePosts.categories.first || 'posts')
|
11
8
|
|
12
9
|
= render partial: '/effective/posts/additional_fields', locals: { post: post, form: f, f: f }
|
13
10
|
|
14
|
-
= f.
|
15
|
-
as: (defined?(EffectiveFormInputs) ? :effective_date_time_picker : :datetime),
|
16
|
-
label: 'Publish date',
|
17
|
-
hint: 'When should this be displayed on the website.'
|
11
|
+
= f.datetime_field :published_at, label: 'Publish date', hint: 'When should this be displayed on the website.'
|
18
12
|
|
19
|
-
= f.
|
20
|
-
as: (defined?(EffectiveFormInputs) ? :effective_ckeditor_text_area : :text),
|
21
|
-
hint: 'The body of your post. You can add content here, or with the full screen editor on the next page.',
|
22
|
-
toolbar: 'simple',
|
23
|
-
required: true
|
13
|
+
= f.text_area :body
|
24
14
|
|
25
|
-
.
|
26
|
-
|
27
|
-
|
15
|
+
/ = f.input :body,
|
16
|
+
/ as: (defined?(EffectiveFormInputs) ? :effective_ckeditor_text_area : :text),
|
17
|
+
/ hint: 'The body of your post. You can add content here, or with the full screen editor on the next page.',
|
18
|
+
/ toolbar: 'simple',
|
19
|
+
/ required: true
|
20
|
+
|
21
|
+
= f.submit 'Save'
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
%p= EffectivePosts.submissions_note
|
4
4
|
|
5
|
-
- if
|
5
|
+
- if EffectivePosts.authorized?(controller, :edit, @post)
|
6
6
|
%p= link_to 'Edit Post', effective_posts.edit_post_path(@post), class: 'btn btn-primary btn-edit-post'
|
7
7
|
|
8
8
|
%hr
|
9
9
|
|
10
|
-
= render
|
10
|
+
= render file: '/effective/posts/show'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
%p A new post has been submitted and needs your approval before it may be displayed on the website:
|
2
2
|
|
3
|
-
%p= link_to 'Approve Post', effective_posts.
|
3
|
+
%p= link_to 'Approve Post', effective_posts.admin_approve_post_path(@post)
|
4
4
|
|
5
5
|
%hr
|
6
6
|
|
@@ -19,4 +19,4 @@
|
|
19
19
|
|
20
20
|
%hr
|
21
21
|
|
22
|
-
%p= link_to 'Approve Post', effective_posts.
|
22
|
+
%p= link_to 'Approve Post', effective_posts.admin_approve_post_path(@post)
|
data/config/effective_posts.rb
CHANGED
@@ -56,21 +56,6 @@ EffectivePosts.setup do |config|
|
|
56
56
|
# Add additional permitted params
|
57
57
|
# config.permitted_params += [:additional_field]
|
58
58
|
|
59
|
-
# SimpleForm Options
|
60
|
-
# This Hash of options will be passed into any client facing simple_form_for() calls
|
61
|
-
config.simple_form_options = {}
|
62
|
-
config.admin_simple_form_options = {} # For the /admin/posts/new form
|
63
|
-
|
64
|
-
# config.simple_form_options = {
|
65
|
-
# html: {class: 'form-horizontal'},
|
66
|
-
# wrapper: :horizontal_form,
|
67
|
-
# wrapper_mappings: {
|
68
|
-
# boolean: :horizontal_boolean,
|
69
|
-
# check_boxes: :horizontal_radio_and_checkboxes,
|
70
|
-
# radio_buttons: :horizontal_radio_and_checkboxes
|
71
|
-
# }
|
72
|
-
# }
|
73
|
-
|
74
59
|
# Display the effective roles 'choose roles' input when an admin creates a new post
|
75
60
|
config.use_effective_roles = true
|
76
61
|
|
data/lib/effective_posts.rb
CHANGED
@@ -37,17 +37,26 @@ module EffectivePosts
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.authorized?(controller, action, resource)
|
40
|
-
if
|
41
|
-
|
40
|
+
@_exceptions ||= [Effective::AccessDenied, (CanCan::AccessDenied if defined?(CanCan)), (Pundit::NotAuthorizedError if defined?(Pundit))].compact
|
41
|
+
|
42
|
+
return !!authorization_method unless authorization_method.respond_to?(:call)
|
43
|
+
controller = controller.controller if controller.respond_to?(:controller)
|
44
|
+
|
45
|
+
begin
|
46
|
+
!!(controller || self).instance_exec((controller || self), action, resource, &authorization_method)
|
47
|
+
rescue *@_exceptions
|
48
|
+
false
|
42
49
|
end
|
43
|
-
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.authorize!(controller, action, resource)
|
53
|
+
raise Effective::AccessDenied.new('Access Denied', action, resource) unless authorized?(controller, action, resource)
|
44
54
|
end
|
45
55
|
|
46
56
|
def self.permitted_params
|
47
57
|
@@permitted_params ||= [
|
48
58
|
:title, :draft, :category, :published_at, :body, :tags, :extra,
|
49
|
-
:start_at, :end_at, :location, :website_name, :website_href,
|
50
|
-
(EffectiveAssets.permitted_params if defined?(EffectiveAssets)), roles: []
|
59
|
+
:start_at, :end_at, :location, :website_name, :website_href, roles: []
|
51
60
|
].compact
|
52
61
|
end
|
53
62
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_posts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: sass
|
28
|
+
name: sass
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: effective_ckeditor
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -80,48 +80,34 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: effective_ckeditor
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.2.0
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.2.0
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: effective_datatables
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 4.0.0
|
104
90
|
type: :runtime
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 4.0.0
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: effective_regions
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: '0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
110
|
+
version: '0'
|
125
111
|
description: A blog implementation with WYSIWYG content editing, post scheduling,
|
126
112
|
pagination and optional top level routes for each post category.
|
127
113
|
email:
|
@@ -132,7 +118,6 @@ extra_rdoc_files: []
|
|
132
118
|
files:
|
133
119
|
- MIT-LICENSE
|
134
120
|
- README.md
|
135
|
-
- Rakefile
|
136
121
|
- app/assets/javascripts/effective/snippets/read_more_divider.js.coffee
|
137
122
|
- app/assets/javascripts/effective_pages/additional_fields.js.coffee
|
138
123
|
- app/assets/javascripts/effective_posts.js
|
@@ -140,7 +125,6 @@ files:
|
|
140
125
|
- app/controllers/admin/posts_controller.rb
|
141
126
|
- app/controllers/effective/posts_controller.rb
|
142
127
|
- app/datatables/effective_posts_datatable.rb
|
143
|
-
- app/helpers/effective_kaminari_helper.rb
|
144
128
|
- app/helpers/effective_posts_helper.rb
|
145
129
|
- app/helpers/effective_truncate_html_helper.rb
|
146
130
|
- app/mailers/effective/posts_mailer.rb
|
@@ -188,7 +172,7 @@ homepage: https://github.com/code-and-effect/effective_posts
|
|
188
172
|
licenses:
|
189
173
|
- MIT
|
190
174
|
metadata: {}
|
191
|
-
post_install_message:
|
175
|
+
post_install_message:
|
192
176
|
rdoc_options: []
|
193
177
|
require_paths:
|
194
178
|
- lib
|
@@ -203,8 +187,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
187
|
- !ruby/object:Gem::Version
|
204
188
|
version: '0'
|
205
189
|
requirements: []
|
206
|
-
|
207
|
-
|
190
|
+
rubyforge_project:
|
191
|
+
rubygems_version: 2.5.2.3
|
192
|
+
signing_key:
|
208
193
|
specification_version: 4
|
209
194
|
summary: A blog implementation with WYSIWYG content editing, post scheduling, pagination
|
210
195
|
and optional top level routes for each post category.
|
data/Rakefile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
|
-
begin
|
3
|
-
require 'bundler/setup'
|
4
|
-
rescue LoadError
|
5
|
-
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
-
end
|
7
|
-
|
8
|
-
# Our tasks
|
9
|
-
load 'lib/tasks/effective_posts_tasks.rake'
|
10
|
-
|
11
|
-
# Testing tasks
|
12
|
-
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
13
|
-
load 'rails/tasks/engine.rake'
|
14
|
-
|
15
|
-
require "bundler/vendored_thor"
|
16
|
-
Bundler::GemHelper.install_tasks
|
17
|
-
|
18
|
-
require 'rspec/core'
|
19
|
-
require 'rspec/core/rake_task'
|
20
|
-
|
21
|
-
desc "Run all specs in spec directory (excluding plugin specs)"
|
22
|
-
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
23
|
-
|
24
|
-
task :default => :spec
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# This extends the @template.url_for method to work with Kaminari
|
2
|
-
# It is only extended on the posts#index method, for minimal pollution
|
3
|
-
|
4
|
-
module EffectiveKaminariHelper
|
5
|
-
def url_for(params)
|
6
|
-
if params.kind_of?(Hash) && params[:controller] == 'effective/posts' && params[:action] == 'index'
|
7
|
-
params.delete(:page) if params[:page].blank?
|
8
|
-
params.delete(:category) if EffectivePosts.use_category_routes
|
9
|
-
params = params.except(:action, :controller, :only_path)
|
10
|
-
|
11
|
-
request.path.to_s + (params.present? ? '?' : '') + params.to_param
|
12
|
-
else
|
13
|
-
super
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|