Sha256: c07e8e9496836abea08428f7aae68bf363968c54aa4abb3b86f6e9b869105a00

Contents?: true

Size: 1.47 KB

Versions: 13

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

module Decidim
  module Blogs
    module Admin
      # This class holds a Form to update pages from Decidim's admin panel.
      class PostForm < Decidim::Form
        include TranslatableAttributes

        translatable_attribute :title, String
        translatable_attribute :body, String

        attribute :decidim_author_id, Integer
        attribute :published_at, Decidim::Attributes::TimeWithZone

        validates :title, translatable_presence: true
        validates :body, translatable_presence: true
        validate :can_set_author

        def map_model(model)
          self.decidim_author_id = nil if model.author.is_a? Decidim::Organization
        end

        def user_or_group
          @user_or_group ||= Decidim::UserBaseEntity.find_by(
            organization: current_organization,
            id: decidim_author_id
          )
        end

        def author
          user_or_group || current_organization
        end

        private

        def can_set_author
          return if author == current_user.organization
          return if author == current_user
          return if user_groups.include? author
          return if author == post&.author

          errors.add(:decidim_author_id, :invalid)
        end

        def post
          @post ||= Post.find_by(id:)
        end

        def user_groups
          @user_groups ||= Decidim::UserGroups::ManageableUserGroups.for(current_user).verified
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
decidim-blogs-0.29.1 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.4 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.29.0 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.3 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.29.0.rc4 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.29.0.rc3 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.29.0.rc2 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.29.0.rc1 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.2 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.1 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.0 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.0.rc5 app/forms/decidim/blogs/admin/post_form.rb
decidim-blogs-0.28.0.rc4 app/forms/decidim/blogs/admin/post_form.rb