Class: CamaleonCms::Admin::PostsController

Inherits:
CamaleonCms::AdminController
  • Object
show all
Defined in:
app/controllers/camaleon_cms/admin/posts_controller.rb

Instance Method Summary collapse

Instance Method Details

#ajaxObject

ajax options



169
170
171
172
173
174
175
176
177
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 169

def ajax
  json = {error: 'Not Found'}
  case params[:method]
    when 'exist_slug'
      slug = current_site.get_valid_post_slug(params[:slug].to_s, params[:post_id])
      json = {slug: slug, index: 1}
  end
  render json: json
end

#createObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 72

def create
  authorize! :create_post, @post_type
  post_data = get_post_data(true)
  CamaleonCms::Post.drafts.find(post_data[:draft_id]).destroy rescue nil
  @post = @post_type.posts.new(post_data)
  r = {post: @post, post_type: @post_type}; hooks_run("create_post", r)
  @post = r[:post]
  if @post.save
    @post.set_metas(params[:meta])
    @post.set_field_values(params[:field_options])
    @post.set_options(params[:options])
    flash[:notice] = t('camaleon_cms.admin.post.message.created', post_type: @post_type.decorate.the_title)
    r = {post: @post, post_type: @post_type}; hooks_run("created_post", r)
    redirect_to action: :edit, id: @post.id
  else
    # render 'form'
    new
  end
end

#destroyObject



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 152

def destroy
  authorize! :destroy, @post
  r = {post: @post, post_type: @post_type, flag: true}
  hooks_run("destroy_post", r)
  if r[:flag]
    if @post.destroy
      hooks_run("destroyed_post", {post: @post, post_type: @post_type})
      flash[:notice] = t('camaleon_cms.admin.post.message.deleted', post_type: @post_type.decorate.the_title)
      return redirect_to action: :index, s: params[:s]
    else
      flash[:error] = @post.errors.full_messages.join(', ')
    end
  end
  redirect_to(request.referer || url_for(action: :index, s: params[:s]))
end

#editObject



92
93
94
95
96
97
98
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 92

def edit
  add_breadcrumb I18n.t("camaleon_cms.admin.button.edit")
  authorize! :update, @post
  @post_form_extra_settings = []
  r = {post: @post, post_type: @post_type, extra_settings: @post_form_extra_settings, render: "form"}; hooks_run("edit_post", r)
  render r[:render]
end

#indexObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 8

def index
  authorize! :posts, @post_type
  per_page = current_site.admin_per_page
  posts_all = @post_type.posts.eager_load(:parent, :post_type)
  if params[:taxonomy].present? && params[:taxonomy_id].present?
    if params[:taxonomy] == "category"
      cat_owner = current_site.full_categories.find(params[:taxonomy_id]).decorate
      posts_all = cat_owner.posts
      add_breadcrumb t("camaleon_cms.admin.post_type.category"), @post_type.the_admin_url("category")
      add_breadcrumb cat_owner.the_title, cat_owner.the_edit_url
    end

    if params[:taxonomy] == "post_tag"
      tag_owner = current_site..find(params[:taxonomy_id]).decorate
      posts_all = tag_owner.posts
      add_breadcrumb t("camaleon_cms.admin.post_type.tags"), @post_type.the_admin_url("tag")
      add_breadcrumb tag_owner.the_title, tag_owner.the_edit_url
    end
  end

  if params[:q].present?
    params[:q] = (params[:q] || '').downcase
    posts_all = posts_all.where(
      "LOWER(#{CamaleonCms::Post.table_name}.title) LIKE ? OR LOWER(#{CamaleonCms::Post.table_name}.slug) LIKE ?",
      "%#{params[:q]}%", 
      "%#{params[:q]}%"
    )  
  end

  posts_all = posts_all.where(user_id: cama_current_user) if cannot?(:edit_other, @post_type) # filter only own contents 
  
  @posts = posts_all
  params[:s] = 'published' unless params[:s].present?
  @lists_tab = params[:s]
  case params[:s]
    when "published", "pending", "trash"
      @posts = @posts.send(params[:s])
    when "draft"
      @posts = @posts.drafts
    when "all"
      @posts = @posts.no_trash
  end

  @btns = {published: "#{t('camaleon_cms.admin.post_type.published')} (#{posts_all.published.size})", all: "#{t('camaleon_cms.admin.post_type.all')} (#{posts_all.no_trash.size})", pending: "#{t('camaleon_cms.admin.post_type.pending')} (#{posts_all.pending.size})", draft: "#{t('camaleon_cms.admin.post_type.draft')} (#{posts_all.drafts.size})", trash: "#{t('camaleon_cms.admin.post_type.trash')} (#{posts_all.trash.size})"}
  per_page = 9999999 if @post_type.manage_hierarchy?
  r = {posts: @posts, post_type: @post_type, btns: @btns, all_posts: posts_all, render: 'index', per_page: per_page }
  hooks_run("list_post", r)
  add_breadcrumb "#{@btns[params[:s].to_sym]}" if params[:s].present?
  @posts = r[:posts].paginate(:page => params[:page], :per_page => r[:per_page])
  render r[:render]
end

#newObject



63
64
65
66
67
68
69
70
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 63

def new
  add_breadcrumb I18n.t("camaleon_cms.admin.button.new")
  authorize! :create_post, @post_type
  @post_form_extra_settings = []
  @post ||= @post_type.posts.new
  r = {post: @post, post_type: @post_type, extra_settings: @post_form_extra_settings, render: "form"}; hooks_run("new_post", r)
  render r[:render]
end

#restoreObject



142
143
144
145
146
147
148
149
150
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 142

def restore
  @post = @post_type.posts.find(params[:post_id])
  authorize! :update, @post
  @post.update_column('status', @post.options[:status_default] || 'pending')
  @post.update_extra_data
  hooks_run("restored_post", {post: @post, post_type: @post_type})
  flash[:notice] = t('camaleon_cms.admin.post.message.restore', post_type: @post_type.decorate.the_title)
  redirect_to action: :index, s: params[:s]
end

#showObject



60
61
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 60

def show
end

#trashObject



130
131
132
133
134
135
136
137
138
139
140
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 130

def trash
  @post = @post_type.posts.find(params[:post_id])
  authorize! :destroy, @post
  @post.set_option('status_default', @post.status)
  # @post.children.destroy_all unless @post.draft? TODO: why delete children?
  @post.update_column('status', 'trash')
  @post.update_extra_data
  hooks_run("trashed_post", {post: @post, post_type: @post_type})
  flash[:notice] = t('camaleon_cms.admin.post.message.trash', post_type: @post_type.decorate.the_title)
  redirect_to action: :index, s: params[:s]
end

#updateObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/controllers/camaleon_cms/admin/posts_controller.rb', line 100

def update
  post_data = get_post_data
  delete_drafts = false
  if @post.draft_child? && @post.parent.present?
    # This is a draft (as a child of the original post)
    original_parent = @post.parent.parent
    post_data[:post_parent] = original_parent.present? ? original_parent.id : nil
    @post = @post.parent
    delete_drafts = true
  elsif @post.draft?
    # This is a normal draft (post whose status was set to 'draft')
    @post.status = 'published' if post_data[:status].blank?
  end
  authorize! :update, @post
  r = {post: @post, post_type: @post_type}; hooks_run("update_post", r)
  @post = r[:post]
  if @post.update(post_data)
    # delete drafts only on successful update operation
    @post.drafts.destroy_all if delete_drafts
    @post.set_metas(params[:meta])
    @post.set_field_values(params[:field_options])
    @post.set_options(params[:options])
    hooks_run("updated_post", {post: @post, post_type: @post_type})
    flash[:notice] = t('camaleon_cms.admin.post.message.updated', post_type: @post_type.decorate.the_title)
    redirect_to action: :edit, id: @post.id
  else
    edit
  end
end