Module: Decidim

Includes:
ActiveSupport::Configurable
Defined in:
lib/decidim/core.rb,
lib/decidim/menu.rb,
lib/decidim/events.rb,
lib/decidim/core/api.rb,
lib/decidim/features.rb,
lib/decidim/scopable.rb,
lib/decidim/abilities.rb,
lib/decidim/exporters.rb,
lib/decidim/has_scope.rb,
lib/decidim/menu_item.rb,
app/forms/decidim/form.rb,
lib/decidim/attributes.rb,
lib/decidim/authorable.rb,
lib/decidim/followable.rb,
lib/decidim/publicable.rb,
lib/decidim/reportable.rb,
app/models/decidim/user.rb,
lib/decidim/core/engine.rb,
lib/decidim/file_zipper.rb,
lib/decidim/has_feature.rb,
lib/decidim/page_finder.rb,
app/models/decidim/scope.rb,
lib/decidim/core/version.rb,
lib/decidim/form_builder.rb,
lib/decidim/has_category.rb,
lib/decidim/has_settings.rb,
lib/decidim/participable.rb,
lib/decidim/resourceable.rb,
app/models/decidim/follow.rb,
app/models/decidim/report.rb,
lib/decidim/engine_router.rb,
lib/decidim/exporters/csv.rb,
lib/decidim/has_reference.rb,
lib/decidim/menu_registry.rb,
app/models/decidim/feature.rb,
lib/decidim/exporters/json.rb,
lib/decidim/features/namer.rb,
lib/decidim/stats_registry.rb,
app/jobs/decidim/export_job.rb,
app/models/decidim/category.rb,
app/models/decidim/identity.rb,
lib/decidim/exporters/excel.rb,
lib/decidim/faker/localized.rb,
lib/decidim/has_attachments.rb,
lib/decidim/feature_manifest.rb,
lib/decidim/query_extensions.rb,
app/forms/decidim/follow_form.rb,
app/forms/decidim/report_form.rb,
app/models/decidim/attachment.rb,
app/models/decidim/moderation.rb,
app/models/decidim/newsletter.rb,
app/models/decidim/scope_type.rb,
app/models/decidim/user_group.rb,
lib/decidim/events/base_event.rb,
lib/decidim/manifest_registry.rb,
lib/decidim/resource_manifest.rb,
lib/decidim/settings_manifest.rb,
app/forms/decidim/account_form.rb,
app/helpers/decidim/map_helper.rb,
app/models/decidim/static_page.rb,
lib/decidim/core/api/user_type.rb,
lib/decidim/devise_failure_app.rb,
lib/decidim/events/email_event.rb,
lib/decidim/exporters/exporter.rb,
app/helpers/decidim/icon_helper.rb,
app/helpers/decidim/menu_helper.rb,
app/models/decidim/notification.rb,
app/models/decidim/organization.rb,
lib/decidim/filter_form_builder.rb,
app/commands/decidim/invite_user.rb,
app/jobs/decidim/application_job.rb,
app/models/decidim/authorization.rb,
app/models/decidim/resource_link.rb,
lib/decidim/exporters/serializer.rb,
app/commands/decidim/remove_admin.rb,
app/forms/decidim/attachment_form.rb,
app/helpers/decidim/layout_helper.rb,
app/helpers/decidim/orders_helper.rb,
app/helpers/decidim/scopes_helper.rb,
app/mailers/decidim/export_mailer.rb,
app/models/decidim/categorization.rb,
lib/decidim/core/api/decidim_type.rb,
lib/decidim/core/api/process_type.rb,
lib/decidim/core/api/session_type.rb,
lib/decidim/exporters/export_data.rb,
app/commands/decidim/create_follow.rb,
app/commands/decidim/create_report.rb,
app/commands/decidim/delete_follow.rb,
app/forms/decidim/invite_user_form.rb,
app/helpers/decidim/cookies_helper.rb,
app/helpers/decidim/filters_helper.rb,
app/commands/decidim/authorize_user.rb,
app/commands/decidim/update_account.rb,
app/forms/decidim/registration_form.rb,
app/helpers/decidim/omniauth_helper.rb,
app/helpers/decidim/paginate_helper.rb,
app/helpers/decidim/resource_helper.rb,
app/mailers/decidim/reported_mailer.rb,
app/queries/decidim/freetext_scopes.rb,
app/services/decidim/events_manager.rb,
lib/decidim/translatable_attributes.rb,
app/commands/decidim/destroy_account.rb,
app/helpers/decidim/meta_tags_helper.rb,
app/models/decidim/impersonation_log.rb,
app/services/decidim/resource_search.rb,
app/uploaders/decidim/image_uploader.rb,
lib/decidim/core/api/user_group_type.rb,
lib/decidim/features/export_manifest.rb,
app/forms/decidim/delete_account_form.rb,
app/helpers/decidim/cta_button_helper.rb,
app/mailers/decidim/newsletter_mailer.rb,
app/models/decidim/application_record.rb,
app/presenters/decidim/menu_presenter.rb,
app/queries/decidim/stats_users_count.rb,
app/uploaders/decidim/avatar_uploader.rb,
lib/decidim/attributes/time_with_zone.rb,
lib/decidim/core/api/author_interface.rb,
lib/decidim/events/notification_event.rb,
app/commands/decidim/invite_user_again.rb,
app/helpers/decidim/application_helper.rb,
app/helpers/decidim/attachments_helper.rb,
app/helpers/decidim/widget_urls_helper.rb,
app/mailers/decidim/application_mailer.rb,
app/services/decidim/action_authorizer.rb,
lib/decidim/authorization_form_builder.rb,
lib/decidim/core/api/process_step_type.rb,
app/constraints/decidim/current_feature.rb,
app/helpers/decidim/decidim_form_helper.rb,
app/helpers/decidim/feature_path_helper.rb,
app/helpers/decidim/translations_helper.rb,
app/helpers/decidim/user_profile_helper.rb,
app/mailers/decidim/notification_mailer.rb,
app/commands/decidim/create_registration.rb,
app/controllers/decidim/pages_controller.rb,
app/models/decidim/user_group_membership.rb,
lib/decidim/participatory_space_manifest.rb,
app/controllers/concerns/decidim/settings.rb,
app/controllers/decidim/errors_controller.rb,
app/controllers/decidim/scopes_controller.rb,
app/mailers/decidim/decidim_devise_mailer.rb,
app/models/decidim/abilities/base_ability.rb,
app/services/decidim/static_map_generator.rb,
app/uploaders/decidim/attachment_uploader.rb,
app/uploaders/decidim/hero_image_uploader.rb,
app/controllers/concerns/decidim/paginable.rb,
app/controllers/decidim/account_controller.rb,
app/controllers/decidim/follows_controller.rb,
app/controllers/decidim/locales_controller.rb,
app/controllers/decidim/reports_controller.rb,
app/controllers/decidim/widgets_controller.rb,
app/helpers/decidim/replace_buttons_helper.rb,
app/models/decidim/abilities/admin_ability.rb,
app/presenters/decidim/menu_item_presenter.rb,
app/services/decidim/authorization_handler.rb,
app/uploaders/decidim/application_uploader.rb,
lib/decidim/core/api/localized_string_type.rb,
lib/decidim/core/api/translated_field_type.rb,
app/helpers/decidim/language_chooser_helper.rb,
app/jobs/decidim/notification_generator_job.rb,
app/middleware/decidim/current_organization.rb,
app/presenters/decidim/home_stats_presenter.rb,
app/services/decidim/notification_generator.rb,
app/uploaders/decidim/banner_image_uploader.rb,
app/forms/decidim/omniauth_registration_form.rb,
app/helpers/decidim/feature_reference_helper.rb,
app/helpers/decidim/humanize_booleans_helper.rb,
app/helpers/decidim/localized_locales_helper.rb,
app/controllers/concerns/decidim/form_factory.rb,
app/controllers/concerns/decidim/payload_info.rb,
app/controllers/concerns/decidim/user_profile.rb,
app/controllers/decidim/static_map_controller.rb,
app/forms/decidim/notifications_settings_form.rb,
app/helpers/decidim/authorization_form_helper.rb,
app/mailers/concerns/decidim/localised_mailer.rb,
app/models/decidim/abilities/everyone_ability.rb,
app/uploaders/decidim/homepage_image_uploader.rb,
app/controllers/decidim/application_controller.rb,
app/helpers/decidim/action_authorization_helper.rb,
app/controllers/concerns/decidim/filter_resource.rb,
app/controllers/concerns/decidim/locale_switcher.rb,
app/controllers/decidim/cookie_policy_controller.rb,
app/controllers/decidim/features/base_controller.rb,
app/controllers/decidim/notifications_controller.rb,
app/helpers/decidim/aria_selected_link_to_helper.rb,
app/uploaders/decidim/organization_logo_uploader.rb,
app/commands/decidim/create_omniauth_registration.rb,
app/controllers/decidim/authorizations_controller.rb,
app/jobs/decidim/email_notification_generator_job.rb,
app/models/decidim/abilities/user_manager_ability.rb,
app/presenters/decidim/resource_locator_presenter.rb,
app/services/decidim/email_notification_generator.rb,
app/commands/decidim/update_notifications_settings.rb,
app/controllers/concerns/decidim/impersonate_users.rb,
app/controllers/decidim/devise/sessions_controller.rb,
app/controllers/decidim/own_user_groups_controller.rb,
app/models/decidim/participatory_process_user_role.rb,
app/controllers/concerns/decidim/devise_controllers.rb,
app/controllers/concerns/decidim/needs_organization.rb,
app/controllers/decidim/devise/passwords_controller.rb,
app/uploaders/decidim/organization_favicon_uploader.rb,
app/controllers/concerns/decidim/needs_authorization.rb,
app/uploaders/decidim/official_image_footer_uploader.rb,
app/uploaders/decidim/official_image_header_uploader.rb,
app/controllers/concerns/decidim/action_authorization.rb,
app/controllers/decidim/devise/invitations_controller.rb,
app/controllers/decidim/devise/confirmations_controller.rb,
app/controllers/decidim/devise/registrations_controller.rb,
lib/decidim/abilities/participatory_process_role_ability.rb,
app/controllers/decidim/notifications_settings_controller.rb,
app/jobs/decidim/notification_generator_for_recipient_job.rb,
app/services/decidim/notification_generator_for_recipient.rb,
app/queries/decidim/participatory_processes_with_user_role.rb,
app/controllers/decidim/devise/omniauth_registrations_controller.rb,
app/models/decidim/abilities/participatory_process_admin_ability.rb,
app/models/decidim/abilities/participatory_process_moderator_ability.rb,
app/models/decidim/abilities/participatory_process_collaborator_ability.rb

Overview

Decidim configuration.

Defined Under Namespace

Modules: Abilities, ActionAuthorization, ActionAuthorizationHelper, ApplicationHelper, AriaSelectedLinkToHelper, AttachmentsHelper, Attributes, Authorable, AuthorizationFormHelper, CookiesHelper, Core, CtaButtonHelper, DecidimFormHelper, Devise, DeviseControllers, Events, Exporters, Faker, FeaturePathHelper, FeatureReferenceHelper, Features, FilterResource, FiltersHelper, Followable, FormFactory, HasAttachments, HasCategory, HasFeature, HasReference, HasScope, HasSettings, HumanizeBooleansHelper, IconHelper, ImpersonateUsers, LanguageChooserHelper, LayoutHelper, LocaleSwitcher, LocalisedMailer, LocalizedLocalesHelper, MapHelper, MenuHelper, MetaTagsHelper, NeedsAuthorization, NeedsOrganization, OmniauthHelper, OrdersHelper, Paginable, PaginateHelper, Participable, PayloadInfo, Publicable, QueryExtensions, ReplaceButtonsHelper, Reportable, ResourceHelper, Resourceable, Scopable, ScopesHelper, Settings, TranslatableAttributes, TranslationsHelper, UserProfile, UserProfileHelper, WidgetUrlsHelper Classes: AccountController, AccountForm, ActionAuthorizer, ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, ApplicationUploader, Attachment, AttachmentForm, AttachmentUploader, Authorization, AuthorizationFormBuilder, AuthorizationHandler, AuthorizationsController, AuthorizeUser, AvatarUploader, BannerImageUploader, Categorization, Category, CookiePolicyController, CreateFollow, CreateOmniauthRegistration, CreateRegistration, CreateReport, CurrentFeature, CurrentOrganization, DecidimDeviseMailer, DeleteAccountForm, DeleteFollow, DestroyAccount, DeviseFailureApp, EmailNotificationGenerator, EmailNotificationGeneratorJob, EngineRouter, ErrorsController, EventsManager, ExportJob, ExportMailer, Feature, FeatureManifest, FileZipper, FilterFormBuilder, Follow, FollowForm, FollowsController, Form, FormBuilder, FreetextScopes, HeroImageUploader, HomeStatsPresenter, HomepageImageUploader, Identity, ImageUploader, ImpersonationLog, InvalidOauthSignature, InviteUser, InviteUserAgain, InviteUserForm, LocalesController, ManifestRegistry, Menu, MenuItem, MenuItemPresenter, MenuPresenter, MenuRegistry, Moderation, Newsletter, NewsletterMailer, Notification, NotificationGenerator, NotificationGeneratorForRecipient, NotificationGeneratorForRecipientJob, NotificationGeneratorJob, NotificationMailer, NotificationsController, NotificationsSettingsController, NotificationsSettingsForm, OfficialImageFooterUploader, OfficialImageHeaderUploader, OmniauthRegistrationForm, Organization, OrganizationFaviconUploader, OrganizationLogoUploader, OwnUserGroupsController, PageFinder, PagesController, ParticipatoryProcessUserRole, ParticipatoryProcessesWithUserRole, ParticipatorySpaceManifest, RegistrationForm, RemoveAdmin, Report, ReportForm, ReportedMailer, ReportsController, ResourceLink, ResourceLocatorPresenter, ResourceManifest, ResourceSearch, Scope, ScopeType, ScopesController, SettingsManifest, StaticMapController, StaticMapGenerator, StaticPage, StatsRegistry, StatsUsersCount, UpdateAccount, UpdateNotificationsSettings, User, UserGroup, UserGroupMembership, WidgetsController

Constant Summary collapse

UserType =

This type represents a User.

GraphQL::ObjectType.define do
  name "User"
  description "A user"

  interfaces [
    Decidim::AuthorInterface
  ]

  field :name, !types.String, "The user's name"

  field :avatarUrl, !types.String, "The user's avatar url" do
    resolve ->(obj, _args, _ctx) { obj.avatar.url }
  end

  field :organizationName, !types.String, "The user's organization name" do
    resolve ->(obj, _args, _ctx) { obj.organization.name }
  end

  field :isVerified, !types.Boolean, "Whether the author is verified or not" do
    resolve ->(_obj, _args, _ctx) { false }
  end

  field :deleted, !types.Boolean, "Whether the user's account has been deleted or not", property: :deleted?

  field :isUser, !types.Boolean, "User groups are not users" do
    resolve ->(_obj, _args, _ctx) { true }
  end
end
DecidimType =

This type represents a Decidim’s global property.

GraphQL::ObjectType.define do
  name "Decidim"
  description "Decidim's framework-related properties."

  field :version, !types.String, "The current decidim's version of this deployment." do
    resolve ->(obj, _args, _ctx) { obj.version }
  end

  field :application_name, !types.String, "The current installation's name." do
    resolve ->(obj, _args, _ctx) { obj.application_name }
  end
end
ProcessType =

This type represents a ParticipatoryProcess.

GraphQL::ObjectType.define do
  name "Process"
  description "A participatory process"

  field :id, !types.ID, "The Process' unique ID"

  field :title, !TranslatedFieldType, "The title of this process."

  connection :steps, ProcessStepType.connection_type do
    description "All the steps of this process."
  end
end
SessionType =

This type represents the current user session.

GraphQL::ObjectType.define do
  name "Session"
  description "The current session"

  field :user, UserType, "The current user" do
    resolve ->(obj, _args, _ctx) { obj }
  end

  field :verifiedUserGroups, !types[!UserGroupType], "The current user verified user groups" do
    resolve ->(obj, _args, _ctx) { obj.user_groups.verified }
  end
end
UserGroupType =

This type represents a UserGroup

GraphQL::ObjectType.define do
  name "UserGroup"
  description "A user group"

  interfaces [
    Decidim::AuthorInterface
  ]

  field :id, !types.ID, "The user group's id"

  field :name, !types.String, "The user group's name"

  field :avatarUrl, !types.String, "The user's avatar url" do
    resolve ->(obj, _args, _ctx) { obj.avatar.url }
  end

  field :isVerified, !types.Boolean, "Whether the user group is verified or not" do
    resolve lambda { |obj, _args, _ctx|
      obj.verified?
    }
  end

  field :deleted, !types.Boolean, "Whether the user group's has been deleted or not" do
    resolve ->(_obj, _args, _ctx) { false }
  end

  field :isUser, !types.Boolean, "User groups are not users" do
    resolve ->(_obj, _args, _ctx) { false }
  end
end
AuthorInterface =

This interface represents an author who owns a resource.

GraphQL::InterfaceType.define do
  name "Author"
  description "An author"

  field :name, !types.String, "The author's name"

  field :avatarUrl, !types.String, "The author's avatar url"

  field :isVerified, !types.Boolean, "Whether the author is verified or not"

  field :deleted, !types.Boolean, "Whether the author's account has been deleted or not"
  field :isUser, !types.Boolean, "Whether the author is a user or another kind of author (User Group)"
end
ProcessStepType =

This type represents a step on a participatory process.

GraphQL::ObjectType.define do
  name "ProcessStep"
  description "A participatory process step"

  field :id, !types.ID, "The unique ID of this step."

  field :process do
    type !ProcessType
    description "The participatory process in which this step belongs to."
    property :participatory_process
  end

  field :title, !TranslatedFieldType, "The title of this step"
end
LocalizedStringType =

This type represents a localized string in a single language.

GraphQL::ObjectType.define do
  name "LocalizedString"
  description "Represents a particular translation of a LocalizedStringType"

  field :locale, !types.String, "The standard locale of this translation."
  field :text, types.String, "The content of this translation."
end
TranslatedFieldType =

This type represents a translated field in multiple languages.

GraphQL::ObjectType.define do
  name "TranslatedField"
  description "A translated field"

  field :locales do
    type types[!types.String]
    description "Lists all the locales in which this translation is available"
    resolve ->(obj, _args, _ctx) { obj.keys }
  end

  field :translations do
    type !types[!LocalizedStringType]
    description "All the localized strings for this translation."

    argument :locales do
      type types[!types.String]
      description "A list of locales to scope the translations to."
    end

    resolve lambda { |obj, args, _ctx|
      translations = obj.stringify_keys
      translations = translations.slice(*args["locales"]) if args["locales"]

      translations.map { |locale, text| OpenStruct.new(locale: locale, text: text) }
    }
  end

  field :translation do
    type types.String
    description "Returns a single translation given a locale."
    argument :locale, !types.String, "A locale to search for"

    resolve lambda { |obj, args, _ctx|
      translations = obj.stringify_keys
      translations[args["locale"]]
    }
  end
end

Class Method Summary collapse

Class Method Details

.feature_manifestsObject

Public: Finds all registered feature manifest’s via the ‘register_feature` method.

Returns an Array.



188
189
190
# File 'lib/decidim/core.rb', line 188

def self.feature_manifests
  feature_registry.manifests
end

.feature_registryObject

Public: Stores the registry of features



230
231
232
# File 'lib/decidim/core.rb', line 230

def self.feature_registry
  @feature_registry ||= ManifestRegistry.new(:features)
end

.find_feature_manifest(name) ⇒ Object

Public: Finds a feature manifest by the feature’s name.

name - The name of the FeatureManifest to find.

Returns a FeatureManifest if found, nil otherwise.



205
206
207
# File 'lib/decidim/core.rb', line 205

def self.find_feature_manifest(name)
  feature_registry.find(name.to_sym)
end

.find_participatory_space_manifest(name) ⇒ Object

Public: Finds a participatory space manifest by the participatory space’s name.

name - The name of the ParticipatorySpaceManifest to find.

Returns a ParticipatorySpaceManifest if found, nil otherwise.



215
216
217
# File 'lib/decidim/core.rb', line 215

def self.find_participatory_space_manifest(name)
  participatory_space_registry.find(name.to_sym)
end

.find_resource_manifest(resource_name_or_klass) ⇒ Object

Public: Finds a resource manifest by the resource’s name.

resource_name_or_class - The String of the ResourceManifest name or the class of the ResourceManifest model_class to find.

Returns a ResourceManifest if found, nil otherwise.



225
226
227
# File 'lib/decidim/core.rb', line 225

def self.find_resource_manifest(resource_name_or_klass)
  feature_registry.find_resource_manifest(resource_name_or_klass)
end

Public: Registers configuration for a new or existing menu

name - A string or symbol with the name of the menu &block - A block using the DSL defined in ‘Decidim::MenuItem`



249
250
251
# File 'lib/decidim/core.rb', line 249

def self.menu(name, &block)
  MenuRegistry.register(name.to_sym, &block)
end

.participatory_space_manifestsObject

Public: Finds all registered participatory space manifest’s via the ‘register_participatory_space` method.

Returns an Array.



196
197
198
# File 'lib/decidim/core.rb', line 196

def self.participatory_space_manifests
  participatory_space_registry.manifests
end

.participatory_space_registryObject

Public: Stores the registry of participatory spaces



235
236
237
# File 'lib/decidim/core.rb', line 235

def self.participatory_space_registry
  @participatory_space_registry ||= ManifestRegistry.new(:participatory_spaces)
end

.register_feature(name, &block) ⇒ Object

Public: Registers a feature, usually held in an external library or in a separate folder in the main repository. Exposes a DSL defined by ‘Decidim::FeatureManifest`.

Feature manifests are held in a global registry and are used in all kinds of places to figure out what new components or functionalities the feature provides.

name - A Symbol with the feature’s unique name.

Returns nothing.



165
166
167
# File 'lib/decidim/core.rb', line 165

def self.register_feature(name, &block)
  feature_registry.register(name, &block)
end

.register_participatory_space(name, &block) ⇒ Object

Public: Registers a participatory space, usually held in an external library or in a separate folder in the main repository. Exposes a DSL defined by ‘Decidim::ParticipatorySpaceManifest`.

Participatory space manifests are held in a global registry and are used in all kinds of places to figure out what new components or functionalities the participatory space provides.

name - A Symbol with the participatory space’s unique name.

Returns nothing.



180
181
182
# File 'lib/decidim/core.rb', line 180

def self.register_participatory_space(name, &block)
  participatory_space_registry.register(name, &block)
end

.seed!Object

Loads seeds from all engines.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/decidim/core.rb', line 47

def self.seed!
  # Faker needs to have the `:en` locale in order to work properly, so we
  # must enforce it during the seeds.
  original_locale = I18n.available_locales
  I18n.available_locales = original_locale + [:en] unless original_locale.include?(:en)

  Rails.application.railties.to_a.uniq.each do |railtie|
    next unless railtie.respond_to?(:load_seed) && railtie.class.name.include?("Decidim::")

    railtie.load_seed
  end

  Decidim.participatory_space_manifests.each(&:seed!)

  I18n.available_locales = original_locale
end

.statsObject

Public: Stores an instance of StatsRegistry



240
241
242
# File 'lib/decidim/core.rb', line 240

def self.stats
  @stats ||= StatsRegistry.new
end