Class: Decidim::Organization

Inherits:
ApplicationRecord show all
Includes:
ActsAsAuthor, HasUploadValidations, Loggable, Traceable, TranslatableResource, TranslationsHelper
Defined in:
decidim-core/app/models/decidim/organization.rb

Overview

Organizations are one of the main models of Decidim. In a single Decidim installation we can find many organizations and each of them can start their own participatory processes.

Constant Summary collapse

SOCIAL_HANDLERS =
[:twitter, :facebook, :instagram, :youtube, :github].freeze
AVAILABLE_MACHINE_TRANSLATION_DISPLAY_PRIORITIES =
%w(original translation).freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from HasUploadValidations

#attached_uploader, #maximum_avatar_size

Methods included from TranslationsHelper

empty_translatable, ensure_translatable, multi_translation, translated_in_current_locale?

Methods included from TranslatableAttributes

#attachment?, #default_locale?

Class Method Details

.log_presenter_class_for(_log) ⇒ Object



81
82
83
# File 'decidim-core/app/models/decidim/organization.rb', line 81

def self.log_presenter_class_for(_log)
  Decidim::AdminLog::OrganizationPresenter
end

Instance Method Details

#admin_terms_of_service_bodyObject



135
136
137
138
# File 'decidim-core/app/models/decidim/organization.rb', line 135

def admin_terms_of_service_body
  self[:admin_terms_of_service_body] ||
    multi_translation("decidim.admin_terms_of_service.default_body", available_locales)
end

#available_authorization_handlersObject



94
95
96
# File 'decidim-core/app/models/decidim/organization.rb', line 94

def available_authorization_handlers
  available_authorizations & Decidim.authorization_handlers.map(&:name)
end

#customize_welcome_notificationObject



121
122
123
# File 'decidim-core/app/models/decidim/organization.rb', line 121

def customize_welcome_notification
  self[:welcome_notification_subject].present? || self[:welcome_notification_body].present?
end

#enabled_omniauth_providersObject



154
155
156
157
158
159
# File 'decidim-core/app/models/decidim/organization.rb', line 154

def enabled_omniauth_providers
  return Decidim::OmniauthProvider.enabled || {} if omniauth_settings.nil?

  default_except_disabled = Decidim::OmniauthProvider.enabled.except(*tenant_disabled_providers_keys)
  default_except_disabled.merge(tenant_enabled_providers)
end

#favicon_icoObject



179
180
181
182
183
184
185
186
# File 'decidim-core/app/models/decidim/organization.rb', line 179

def favicon_ico
  return unless favicon.attached?
  return favicon if favicon.content_type == "image/vnd.microsoft.icon"

  uploader = attached_uploader(:favicon)
  variant = uploader.variant(:favicon)
  variant.processed.image
end

#machine_translation_prioritizes_original?Boolean

Returns:

  • (Boolean)


161
162
163
# File 'decidim-core/app/models/decidim/organization.rb', line 161

def machine_translation_prioritizes_original?
  machine_translation_display_priority == "original"
end

#machine_translation_prioritizes_translation?Boolean

Returns:

  • (Boolean)


165
166
167
# File 'decidim-core/app/models/decidim/organization.rb', line 165

def machine_translation_prioritizes_translation?
  machine_translation_display_priority == "translation"
end

#maximum_upload_sizeObject

This is needed for the upload validations



90
91
92
# File 'decidim-core/app/models/decidim/organization.rb', line 90

def maximum_upload_size
  settings.upload_maximum_file_size
end

#open_data_file_path(resource = nil) ⇒ Object



148
149
150
151
152
# File 'decidim-core/app/models/decidim/organization.rb', line 148

def open_data_file_path(resource = nil)
  return "#{host}-open-data.zip" if resource.nil?

  "#{host}-open-data-#{resource}.csv"
end

#participatory_spacesObject



105
106
107
108
109
# File 'decidim-core/app/models/decidim/organization.rb', line 105

def participatory_spaces
  @participatory_spaces ||= Decidim.participatory_space_manifests.flat_map do |manifest|
    manifest.participatory_spaces.call(self)
  end
end

#presenterObject

Returns the presenter for this author, to be used in the views. Required by ActsAsAuthor.



171
172
173
# File 'decidim-core/app/models/decidim/organization.rb', line 171

def presenter
  Decidim::OfficialAuthorPresenter.new
end

#public_participatory_spacesObject



111
112
113
114
115
# File 'decidim-core/app/models/decidim/organization.rb', line 111

def public_participatory_spaces
  @public_participatory_spaces ||= Decidim.participatory_space_manifests.flat_map do |manifest|
    manifest.participatory_spaces.call(self).public_spaces
  end
end

#published_componentsObject



117
118
119
# File 'decidim-core/app/models/decidim/organization.rb', line 117

def published_components
  @published_components ||= Component.where(participatory_space: public_participatory_spaces).published
end

#settingsObject



85
86
87
# File 'decidim-core/app/models/decidim/organization.rb', line 85

def settings
  Decidim::OrganizationSettings.for(self)
end

#sign_in_enabled?Boolean

Returns:

  • (Boolean)


144
145
146
# File 'decidim-core/app/models/decidim/organization.rb', line 144

def 
  !users_registration_mode_disabled?
end

#sign_up_enabled?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'decidim-core/app/models/decidim/organization.rb', line 140

def 
  users_registration_mode_enabled?
end

#static_pages_accessible_for(user) ⇒ Object



175
176
177
# File 'decidim-core/app/models/decidim/organization.rb', line 175

def static_pages_accessible_for(user)
  static_pages.accessible_for(self, user)
end

#top_scopesObject

Returns top level scopes for this organization.

Returns an ActiveRecord::Relation.



101
102
103
# File 'decidim-core/app/models/decidim/organization.rb', line 101

def top_scopes
  @top_scopes ||= scopes.top_level
end

#unique_nameObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'decidim-core/app/models/decidim/organization.rb', line 62

def unique_name
  base_query = new_record? ? Decidim::Organization.all : Decidim::Organization.where.not(id:).all

  organization_names = []

  base_query.pluck(:name).each do |value|
    organization_names += value.except("machine_translations").values
    organization_names += value.fetch("machine_translations", {}).values
  end

  organization_names = organization_names.map(&:downcase).compact_blank

  name.each do |language, value|
    next if value.is_a?(Hash)

    errors.add("name_#{language}", :taken) if organization_names.include?(value.downcase)
  end
end

#welcome_notification_bodyObject



130
131
132
133
# File 'decidim-core/app/models/decidim/organization.rb', line 130

def welcome_notification_body
  self[:welcome_notification_body] ||
    multi_translation("decidim.welcome_notification.default_body", available_locales)
end

#welcome_notification_subjectObject



125
126
127
128
# File 'decidim-core/app/models/decidim/organization.rb', line 125

def welcome_notification_subject
  self[:welcome_notification_subject] ||
    multi_translation("decidim.welcome_notification.default_subject", available_locales)
end