Sha256: 88082e7c4fe9f3347b621d3e5b8975d14280389b934df45b229dbcad03cb0773

Contents?: true

Size: 1.56 KB

Versions: 23

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true

module Decidim
  # This command updates the user's account.
  class UpdateAccount < Rectify::Command
    # Updates a user's account.
    #
    # user - The user to be updated.
    # form - The form with the data.
    def initialize(user, form)
      @user = user
      @form = form
    end

    def call
      return broadcast(:invalid) unless @form.valid?

      update_personal_data
      update_avatar
      update_password

      if @user.valid?
        @user.save!
        notify_followers
        broadcast(:ok, @user.unconfirmed_email.present?)
      else
        @form.errors.add :avatar, @user.errors[:avatar] if @user.errors.has_key? :avatar
        broadcast(:invalid)
      end
    end

    private

    def update_personal_data
      @user.name = @form.name
      @user.nickname = @form.nickname
      @user.email = @form.email
      @user.personal_url = @form.personal_url
      @user.about = @form.about
    end

    def update_avatar
      @user.avatar = @form.avatar
      @user.remove_avatar = @form.remove_avatar
    end

    def update_password
      return if @form.password.blank?

      @user.password = @form.password
      @user.password_confirmation = @form.password_confirmation
    end

    def notify_followers
      return if (@user.previous_changes.keys & %w(about personal_url)).empty?

      Decidim::EventsManager.publish(
        event: "decidim.events.users.profile_updated",
        event_class: Decidim::ProfileUpdatedEvent,
        resource: @user,
        recipient_ids: @user.followers.pluck(:id)
      )
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
decidim-core-0.15.2 app/commands/decidim/update_account.rb
decidim-core-0.15.1 app/commands/decidim/update_account.rb
decidim-core-0.15.0 app/commands/decidim/update_account.rb
decidim-core-0.14.4 app/commands/decidim/update_account.rb
decidim-core-0.14.3 app/commands/decidim/update_account.rb
decidim-core-0.14.2 app/commands/decidim/update_account.rb
decidim-core-0.14.1 app/commands/decidim/update_account.rb
decidim-core-0.13.1 app/commands/decidim/update_account.rb
decidim-core-0.12.2 app/commands/decidim/update_account.rb
decidim-core-0.13.0 app/commands/decidim/update_account.rb
decidim-core-0.12.1 app/commands/decidim/update_account.rb
decidim-core-0.13.0.pre1 app/commands/decidim/update_account.rb
decidim-core-0.12.0 app/commands/decidim/update_account.rb
decidim-core-0.11.2 app/commands/decidim/update_account.rb
decidim-core-0.12.0.pre app/commands/decidim/update_account.rb
decidim-core-0.11.1 app/commands/decidim/update_account.rb
decidim-core-0.11.0.pre1 app/commands/decidim/update_account.rb
decidim-core-0.10.1 app/commands/decidim/update_account.rb
decidim-core-0.10.0 app/commands/decidim/update_account.rb
decidim-core-0.9.3 app/commands/decidim/update_account.rb