decidim-core 0.9.3 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 +1 -1
- data/app/assets/javascripts/decidim/data_picker.js.es6 +32 -28
- data/app/assets/javascripts/decidim/form_filter.component.js.es6 +2 -2
- data/app/assets/javascripts/decidim/foundation.js.es6 +1 -2
- data/app/assets/stylesheets/decidim/_decidim.scss +6 -1
- data/app/assets/stylesheets/decidim/modules/_address.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_block-banner.scss +39 -0
- data/app/assets/stylesheets/decidim/modules/_buttons.scss +76 -1
- data/app/assets/stylesheets/decidim/modules/_callout.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_cards.scss +117 -16
- data/app/assets/stylesheets/decidim/modules/_collapsible-list.scss +19 -0
- data/app/assets/stylesheets/decidim/modules/_data-picker.scss +0 -1
- data/app/assets/stylesheets/decidim/modules/_docs-manager.scss +16 -0
- data/app/assets/stylesheets/decidim/modules/_icons.scss +13 -4
- data/app/assets/stylesheets/decidim/modules/_margins.scss +39 -0
- data/app/assets/stylesheets/decidim/modules/_modules.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_navbar.scss +26 -0
- data/app/assets/stylesheets/decidim/modules/_process-phase.scss +49 -0
- data/app/assets/stylesheets/decidim/modules/_reveal.scss +39 -0
- data/app/assets/stylesheets/decidim/modules/_typography.scss +45 -0
- data/app/assets/stylesheets/decidim/modules/_wizard-steps.scss +45 -0
- data/app/assets/stylesheets/decidim/utils/_helpers.scss +14 -0
- data/app/assets/stylesheets/decidim/utils/_mixins.scss +34 -0
- data/app/assets/stylesheets/decidim/utils/_settings.scss +6 -3
- data/app/commands/decidim/create_report.rb +2 -2
- data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
- data/app/controllers/decidim/features/base_controller.rb +1 -1
- data/app/controllers/decidim/locales_controller.rb +1 -1
- data/app/forms/decidim/registration_form.rb +1 -1
- data/app/helpers/decidim/decidim_form_helper.rb +26 -1
- data/app/helpers/decidim/meta_tags_helper.rb +2 -0
- data/app/helpers/decidim/resource_reference_helper.rb +24 -0
- data/app/helpers/decidim/scopes_helper.rb +22 -4
- data/app/helpers/decidim/view_hooks_helper.rb +6 -3
- data/app/mailers/decidim/messaging/conversation_mailer.rb +2 -0
- data/app/models/decidim/abilities/base_ability.rb +1 -1
- data/app/models/decidim/action_log.rb +57 -0
- data/app/models/decidim/area.rb +25 -0
- data/app/models/decidim/area_type.rb +20 -0
- data/app/models/decidim/attachment.rb +3 -0
- data/app/models/decidim/attachment_collection.rb +16 -0
- data/app/models/decidim/authorization.rb +1 -0
- data/app/models/decidim/categorization.rb +2 -0
- data/app/models/decidim/category.rb +8 -0
- data/app/models/decidim/feature.rb +6 -1
- data/app/models/decidim/moderation.rb +7 -0
- data/app/models/decidim/newsletter.rb +7 -0
- data/app/models/decidim/organization.rb +9 -0
- data/app/models/decidim/participatory_process_user_role.rb +9 -0
- data/app/models/decidim/resource_link.rb +8 -1
- data/app/models/decidim/scope.rb +7 -0
- data/app/models/decidim/static_page.rb +7 -0
- data/app/models/decidim/user.rb +5 -1
- data/app/models/decidim/user_group.rb +7 -0
- data/app/presenters/decidim/admin_log/feature_presenter.rb +43 -0
- data/app/presenters/decidim/admin_log/moderation_presenter.rb +48 -0
- data/app/presenters/decidim/admin_log/newsletter_presenter.rb +47 -0
- data/app/presenters/decidim/admin_log/newsletter_resource_presenter.rb +18 -0
- data/app/presenters/decidim/admin_log/organization_presenter.rb +84 -0
- data/app/presenters/decidim/admin_log/scope_presenter.rb +54 -0
- data/app/presenters/decidim/admin_log/static_page_presenter.rb +48 -0
- data/app/presenters/decidim/admin_log/static_page_resource_presenter.rb +18 -0
- data/app/presenters/decidim/admin_log/user_group_presenter.rb +31 -0
- data/app/presenters/decidim/admin_log/user_presenter.rb +59 -0
- data/app/presenters/decidim/area_presenter.rb +14 -0
- data/app/presenters/decidim/area_type_presenter.rb +14 -0
- data/app/presenters/decidim/category_presenter.rb +14 -0
- data/app/presenters/decidim/log/base_presenter.rb +253 -0
- data/app/presenters/decidim/log/diff_presenter.rb +120 -0
- data/app/presenters/decidim/log/resource_presenter.rb +71 -0
- data/app/presenters/decidim/log/space_presenter.rb +63 -0
- data/app/presenters/decidim/log/user_presenter.rb +85 -0
- data/app/presenters/decidim/log/value_types/area_presenter.rb +28 -0
- data/app/presenters/decidim/log/value_types/date_presenter.rb +20 -0
- data/app/presenters/decidim/log/value_types/default_presenter.rb +43 -0
- data/app/presenters/decidim/log/value_types/locale_presenter.rb +20 -0
- data/app/presenters/decidim/log/value_types/percentage_presenter.rb +21 -0
- data/app/presenters/decidim/log/value_types/scope_presenter.rb +28 -0
- data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +28 -0
- data/app/presenters/decidim/user_presenter.rb +1 -1
- data/app/services/decidim/action_authorizer.rb +1 -1
- data/app/services/decidim/action_logger.rb +108 -0
- data/app/services/decidim/events_manager.rb +1 -1
- data/app/services/decidim/log/diff_changeset_calculator.rb +135 -0
- data/app/services/decidim/resource_search.rb +2 -8
- data/app/services/decidim/settings_change.rb +31 -0
- data/app/services/decidim/traceability.rb +57 -11
- data/app/types/decidim/core/component_type.rb +12 -0
- data/app/types/decidim/core/date_time_type.rb +12 -0
- data/app/types/decidim/core/date_type.rb +13 -0
- data/app/types/decidim/core/decidim_type.rb +23 -0
- data/app/types/decidim/core/localized_string_type.rb +14 -0
- data/app/types/decidim/core/organization_type.rb +20 -0
- data/app/types/decidim/core/participatory_space_type.rb +12 -0
- data/app/types/decidim/core/session_type.rb +19 -0
- data/app/types/decidim/core/statistic_type.rb +22 -0
- data/app/types/decidim/core/translated_field_type.rb +45 -0
- data/app/types/decidim/core/user_group_type.rb +39 -0
- data/app/types/decidim/core/user_type.rb +41 -0
- data/app/validators/etiquette_validator.rb +1 -1
- data/app/views/decidim/application/_attachments.html.erb +4 -0
- data/app/views/decidim/application/_collection.html.erb +14 -0
- data/app/views/decidim/application/_document.html.erb +19 -0
- data/app/views/decidim/application/_documents.html.erb +8 -23
- data/app/views/decidim/shared/_announcement.html.erb +3 -2
- data/app/views/decidim/shared/_tags.html.erb +1 -0
- data/app/views/decidim/widgets/_data_picker.html.erb +6 -0
- data/app/views/layouts/decidim/mailer.html.erb +2 -2
- data/config/initializers/devise.rb +3 -3
- data/config/locales/ca.yml +65 -11
- data/config/locales/en.yml +64 -10
- data/config/locales/es.yml +66 -12
- data/config/locales/eu.yml +61 -10
- data/config/locales/fi.yml +64 -10
- data/config/locales/fr.yml +64 -10
- data/config/locales/gl.yml +64 -10
- data/config/locales/it.yml +64 -10
- data/config/locales/nl.yml +64 -10
- data/config/locales/pl.yml +60 -10
- data/config/locales/pt-BR.yml +64 -10
- data/config/locales/pt.yml +64 -10
- data/config/locales/sv.yml +64 -10
- data/config/locales/uk.yml +72 -0
- data/db/migrate/20170215115407_add_organization_custom_reference.rb +1 -1
- data/db/migrate/20170313095436_add_available_authorizations_to_organization.rb +1 -1
- data/db/migrate/20171207182729_create_decidim_attachment_collections.rb +12 -0
- data/db/migrate/20180130093153_add_action_log.rb +18 -0
- data/db/migrate/20180206143340_fix_reference_for_all_resources.rb +13 -0
- data/db/migrate/20180215104821_create_decidim_area_types.rb +11 -0
- data/db/migrate/20180215104945_create_decidim_areas.rb +12 -0
- data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
- data/db/migrate/20180226140756_add_version_to_action_logs.rb +19 -0
- data/db/migrate/20180314085339_rename_maximum_votes_per_proposal_to_threshold_per_proposal.rb +27 -0
- data/db/migrate/20180326075746_change_event_name_and_class_to_rename_to_publish_proposal_event.rb +17 -0
- data/db/seeds.rb +28 -0
- data/lib/decidim/abilities/participatory_process_role_ability.rb +2 -2
- data/lib/decidim/api/author_interface.rb +25 -0
- data/lib/decidim/api/component_interface.rb +16 -0
- data/lib/decidim/api/participatory_space_interface.rb +38 -0
- data/lib/decidim/authorable.rb +8 -0
- data/lib/decidim/core.rb +27 -9
- data/lib/decidim/core/engine.rb +3 -4
- data/lib/decidim/core/test.rb +2 -0
- data/lib/decidim/core/test/factories.rb +62 -6
- data/lib/decidim/core/test/shared_examples/announcements_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +47 -5
- data/lib/decidim/core/test/shared_examples/component_type.rb +7 -0
- data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +63 -0
- data/lib/decidim/core/test/shared_examples/has_attachments.rb +21 -0
- data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
- data/lib/decidim/core/test/shared_examples/simple_event.rb +27 -1
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/events/author_event.rb +1 -1
- data/lib/decidim/events/base_event.rb +1 -1
- data/lib/decidim/events/simple_event.rb +21 -0
- data/lib/decidim/exporters/excel.rb +1 -1
- data/lib/decidim/feature_manifest.rb +2 -0
- data/lib/decidim/form_builder.rb +37 -3
- data/lib/decidim/has_attachment_collections.rb +18 -0
- data/lib/decidim/has_attachments.rb +14 -0
- data/lib/decidim/has_category.rb +5 -0
- data/lib/decidim/has_reference.rb +4 -4
- data/lib/decidim/loggable.rb +32 -0
- data/lib/decidim/participable.rb +0 -2
- data/lib/decidim/participatory_space_manifest.rb +2 -0
- data/lib/decidim/publicable.rb +2 -2
- data/lib/decidim/query_extensions.rb +46 -14
- data/lib/decidim/resourceable.rb +15 -6
- data/lib/decidim/scopable.rb +35 -1
- data/lib/decidim/scopable_feature.rb +16 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ca.js +0 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es.js +0 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.eu.js +0 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fi.js +0 -0
- data/vendor/assets/javascripts/leaflet.markercluster.js +0 -0
- metadata +91 -38
- data/app/commands/decidim/remove_admin.rb +0 -25
- data/app/helpers/decidim/feature_reference_helper.rb +0 -25
- data/lib/decidim/core/api.rb +0 -13
- data/lib/decidim/core/api/author_interface.rb +0 -18
- data/lib/decidim/core/api/decidim_type.rb +0 -17
- data/lib/decidim/core/api/localized_string_type.rb +0 -12
- data/lib/decidim/core/api/process_step_type.rb +0 -19
- data/lib/decidim/core/api/process_type.rb +0 -17
- data/lib/decidim/core/api/session_type.rb +0 -17
- data/lib/decidim/core/api/translated_field_type.rb +0 -43
- data/lib/decidim/core/api/user_group_type.rb +0 -37
- data/lib/decidim/core/api/user_type.rb +0 -39
- data/lib/decidim/devise_failure_app.rb +0 -36
- data/lib/decidim/has_scope.rb +0 -25
- data/lib/decidim/i18n_exceptions.rb +0 -15
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
ComponentType = GraphQL::ObjectType.define do
|
6
|
+
interfaces [-> { ComponentInterface }]
|
7
|
+
|
8
|
+
name "Component"
|
9
|
+
description "A base component with no particular specificities."
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
DateTimeType = GraphQL::ScalarType.define do
|
6
|
+
name "DateTime"
|
7
|
+
description "An ISO8601 date with time"
|
8
|
+
coerce_input ->(value, _ctx) { Time.iso8601(value) }
|
9
|
+
coerce_result ->(value, _ctx) { value.to_datetime.iso8601 }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
DateType = GraphQL::ScalarType.define do
|
6
|
+
name "Date"
|
7
|
+
description "An ISO8601 date"
|
8
|
+
|
9
|
+
coerce_input ->(value, _ctx) { Date.iso8601(value) }
|
10
|
+
coerce_result ->(value, _ctx) { value.to_date.iso8601 }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents a Decidim's global property.
|
6
|
+
DecidimType = GraphQL::ObjectType.define do
|
7
|
+
name "Decidim"
|
8
|
+
description "Decidim's framework-related properties."
|
9
|
+
|
10
|
+
field :version, !types.String, "The current decidim's version of this deployment." do
|
11
|
+
resolve ->(obj, _args, _ctx) { obj.version }
|
12
|
+
end
|
13
|
+
|
14
|
+
field :applicationName, !types.String, "The current installation's name." do
|
15
|
+
resolve ->(obj, _args, _ctx) { obj.application_name }
|
16
|
+
end
|
17
|
+
|
18
|
+
field :rubyVersion, !types.String, "The current ruby version" do
|
19
|
+
resolve ->(_, _, _) { RUBY_VERSION }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents a localized string in a single language.
|
6
|
+
LocalizedStringType = GraphQL::ObjectType.define do
|
7
|
+
name "LocalizedString"
|
8
|
+
description "Represents a particular translation of a LocalizedStringType"
|
9
|
+
|
10
|
+
field :locale, !types.String, "The standard locale of this translation."
|
11
|
+
field :text, types.String, "The content of this translation."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
OrganizationType = GraphQL::ObjectType.define do
|
6
|
+
name "Organization"
|
7
|
+
description "The current organization"
|
8
|
+
|
9
|
+
field :name, types.String, "The name of the current organization"
|
10
|
+
|
11
|
+
field :stats do
|
12
|
+
type types[Core::StatisticType]
|
13
|
+
description "The statistics associated to this object"
|
14
|
+
resolve ->(object, _args, _ctx) {
|
15
|
+
Decidim.stats.with_context(object)
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
ParticipatorySpaceType = GraphQL::ObjectType.define do
|
6
|
+
interfaces [-> { ParticipatorySpaceInterface }]
|
7
|
+
|
8
|
+
name "ParticipatorySpace"
|
9
|
+
description "A participatory space"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents the current user session.
|
6
|
+
SessionType = GraphQL::ObjectType.define do
|
7
|
+
name "Session"
|
8
|
+
description "The current session"
|
9
|
+
|
10
|
+
field :user, UserType, "The current user" do
|
11
|
+
resolve ->(obj, _args, _ctx) { obj }
|
12
|
+
end
|
13
|
+
|
14
|
+
field :verifiedUserGroups, !types[!UserGroupType], "The current user verified user groups" do
|
15
|
+
resolve ->(obj, _args, _ctx) { obj.user_groups.verified }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
StatisticType = GraphQL::ObjectType.define do
|
6
|
+
name "Statistic"
|
7
|
+
description "Represents a single statistic"
|
8
|
+
|
9
|
+
field :name, !types.String, "The name of the statistic" do
|
10
|
+
resolve ->(statistic, _args, _ctx) {
|
11
|
+
statistic[0]
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
field :value, !types.Int, "The actual value of the statistic" do
|
16
|
+
resolve ->(statistic, _args, _ctx) {
|
17
|
+
statistic[1]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents a translated field in multiple languages.
|
6
|
+
TranslatedFieldType = GraphQL::ObjectType.define do
|
7
|
+
name "TranslatedField"
|
8
|
+
description "A translated field"
|
9
|
+
|
10
|
+
field :locales do
|
11
|
+
type types[types.String]
|
12
|
+
description "Lists all the locales in which this translation is available"
|
13
|
+
resolve ->(obj, _args, _ctx) { obj.keys }
|
14
|
+
end
|
15
|
+
|
16
|
+
field :translations do
|
17
|
+
type !types[LocalizedStringType]
|
18
|
+
description "All the localized strings for this translation."
|
19
|
+
|
20
|
+
argument :locales do
|
21
|
+
type types[!types.String]
|
22
|
+
description "A list of locales to scope the translations to."
|
23
|
+
end
|
24
|
+
|
25
|
+
resolve lambda { |obj, args, _ctx|
|
26
|
+
translations = obj.stringify_keys
|
27
|
+
translations = translations.slice(*args["locales"]) if args["locales"]
|
28
|
+
|
29
|
+
translations.map { |locale, text| OpenStruct.new(locale: locale, text: text) }
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
field :translation do
|
34
|
+
type types.String
|
35
|
+
description "Returns a single translation given a locale."
|
36
|
+
argument :locale, !types.String, "A locale to search for"
|
37
|
+
|
38
|
+
resolve lambda { |obj, args, _ctx|
|
39
|
+
translations = obj.stringify_keys
|
40
|
+
translations[args["locale"]]
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents a UserGroup
|
6
|
+
UserGroupType = GraphQL::ObjectType.define do
|
7
|
+
name "UserGroup"
|
8
|
+
description "A user group"
|
9
|
+
|
10
|
+
interfaces [
|
11
|
+
-> { Decidim::Core::AuthorInterface }
|
12
|
+
]
|
13
|
+
|
14
|
+
field :id, !types.ID, "The user group's id"
|
15
|
+
|
16
|
+
field :name, !types.String, "The user group's name"
|
17
|
+
|
18
|
+
field :nickname, !types.String, "User groups have no nickname" do
|
19
|
+
resolve ->(obj, _args, _ctx) { UserGroupPresenter.new(obj).nickname }
|
20
|
+
end
|
21
|
+
|
22
|
+
field :avatarUrl, !types.String, "The user's avatar url" do
|
23
|
+
resolve ->(obj, _args, _ctx) { UserGroupPresenter.new(obj).avatar_url }
|
24
|
+
end
|
25
|
+
|
26
|
+
field :profilePath, !types.String, "The user's profile url" do
|
27
|
+
resolve ->(obj, _args, _ctx) { UserGroupPresenter.new(obj).profile_path }
|
28
|
+
end
|
29
|
+
|
30
|
+
field :deleted, !types.Boolean, "Whether the user group's has been deleted or not" do
|
31
|
+
resolve ->(obj, _args, _ctx) { UserGroupPresenter.new(obj).deleted? }
|
32
|
+
end
|
33
|
+
|
34
|
+
field :badge, !types.String, "A badge for the user group" do
|
35
|
+
resolve ->(obj, _args, _ctx) { UserGroupPresenter.new(obj).badge }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This type represents a User.
|
6
|
+
UserType = GraphQL::ObjectType.define do
|
7
|
+
name "User"
|
8
|
+
description "A user"
|
9
|
+
|
10
|
+
interfaces [
|
11
|
+
Decidim::Core::AuthorInterface
|
12
|
+
]
|
13
|
+
|
14
|
+
field :name, !types.String, "The user's name"
|
15
|
+
|
16
|
+
field :nickname, !types.String, "The user's nickname" do
|
17
|
+
resolve ->(obj, _args, _ctx) { UserPresenter.new(obj).nickname }
|
18
|
+
end
|
19
|
+
|
20
|
+
field :avatarUrl, !types.String, "The user's avatar url" do
|
21
|
+
resolve ->(obj, _args, _ctx) { UserPresenter.new(obj).avatar_url(:thumb) }
|
22
|
+
end
|
23
|
+
|
24
|
+
field :profilePath, !types.String, "The user's profile url" do
|
25
|
+
resolve ->(obj, _args, _ctx) { UserPresenter.new(obj).profile_path }
|
26
|
+
end
|
27
|
+
|
28
|
+
field :organizationName, !types.String, "The user's organization name" do
|
29
|
+
resolve ->(obj, _args, _ctx) { obj.organization.name }
|
30
|
+
end
|
31
|
+
|
32
|
+
field :deleted, !types.Boolean, "Whether the user's account has been deleted or not" do
|
33
|
+
resolve ->(obj, _args, _ctx) { UserPresenter.new(obj).deleted? }
|
34
|
+
end
|
35
|
+
|
36
|
+
field :badge, !types.String, "A badge for the user group" do
|
37
|
+
resolve ->(obj, _args, _ctx) { UserPresenter.new(obj).badge }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -31,7 +31,7 @@ class EtiquetteValidator < ActiveModel::EachValidator
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def validate_caps_first(record, attribute, value)
|
34
|
-
return if value.scan(
|
34
|
+
return if value.scan(/\A[a-z]{1}/).empty?
|
35
35
|
record.errors.add(attribute, options[:message] || :must_start_with_caps)
|
36
36
|
end
|
37
37
|
|
@@ -2,6 +2,10 @@
|
|
2
2
|
<div class="row attachments">
|
3
3
|
<div class="columns large-12">
|
4
4
|
<%= render partial: "documents", locals: { documents: attached_to.documents } %>
|
5
|
+
</div>
|
6
|
+
</div>
|
7
|
+
<div class="row attachments">
|
8
|
+
<div class="columns large-12">
|
5
9
|
<%= render partial: "photos", locals: { photos: attached_to.photos } %>
|
6
10
|
</div>
|
7
11
|
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% unless attachment_collection.unused? %>
|
2
|
+
<div class="docs__container">
|
3
|
+
<h6 data-toggle="docs-collection-<%= attachment_collection.id %>"><%= icon "caret-right", class: "icon--small" %> 
|
4
|
+
<strong><%= translated_attribute(attachment_collection.name) %></strong>
|
5
|
+
<small>(<%= attachment_collection.attachments.count %> <%= t(".documents", count: attachment_collection.attachments.count) %>)</small>
|
6
|
+
</h6>
|
7
|
+
<div id="docs-collection-<%= attachment_collection.id %>" class="docs__content hide" data-toggler=".hide">
|
8
|
+
<p><%= translated_attribute(attachment_collection.description) %></p>
|
9
|
+
<div class="card card--list">
|
10
|
+
<%= render partial: "document", collection: documents %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div class="card--list__item">
|
2
|
+
<div class="card--list__text">
|
3
|
+
<div>
|
4
|
+
<a href="<%= document.url %>" class="card__link">
|
5
|
+
<h6 class="card--list__heading heading6">
|
6
|
+
<%= attachment_title(document) %> <small><%= document.file_type %> <%= number_to_human_size(document.file_size) %></small>
|
7
|
+
</h6>
|
8
|
+
<% if document.description.present? %>
|
9
|
+
<span class="text-small"><%= translated_attribute(document.description) %></span>
|
10
|
+
<% end %>
|
11
|
+
</a>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<div class="card--list__data">
|
15
|
+
<%= link_to document.url, class: "card--list__data__icon" do %>
|
16
|
+
<%= icon "cloud-download" %>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
</div>
|
@@ -1,28 +1,13 @@
|
|
1
1
|
<% if documents.any? %>
|
2
2
|
<div class="section documents">
|
3
3
|
<h4 class="section-heading"><%= t(".related_documents") %></h4>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
</h6>
|
13
|
-
<% if document.description.present? %>
|
14
|
-
<span class="text-small"><%= translated_attribute(document.description) %></span>
|
15
|
-
<% end %>
|
16
|
-
</a>
|
17
|
-
</div>
|
18
|
-
</div>
|
19
|
-
<div class="card--list__data">
|
20
|
-
<%= link_to document.url, class: "card--list__data__icon" do %>
|
21
|
-
<%= icon "cloud-download" %>
|
22
|
-
<% end %>
|
23
|
-
</div>
|
24
|
-
</div>
|
25
|
-
<% end %>
|
26
|
-
</div>
|
4
|
+
<% if (documents_without_collection = documents.reject(&:attachment_collection_id?)).any? %>
|
5
|
+
<div class="card card--list">
|
6
|
+
<%= render partial: "document", collection: documents_without_collection %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
9
|
+
<% documents.select(&:attachment_collection_id?).group_by(&:attachment_collection).sort_by { |c, d| c.weight }.each do |collection, documents| %>
|
10
|
+
<%= render partial: "collection", locals: { attachment_collection: collection, documents: documents } %>
|
11
|
+
<% end %>
|
27
12
|
</div>
|
28
13
|
<% end %>
|
@@ -1,5 +1,6 @@
|
|
1
1
|
<div class="row column">
|
2
|
-
|
2
|
+
<% callout_class ||= "secondary" %>
|
3
|
+
<%= content_tag :div, class: "callout announcement mb-sm #{callout_class}" do %>
|
3
4
|
<%= decidim_sanitize translated_attribute announcement %>
|
4
|
-
|
5
|
+
<% end %>
|
5
6
|
</div>
|
@@ -3,6 +3,7 @@
|
|
3
3
|
<% if resource.category.present? %>
|
4
4
|
<li><%= link_to translated_attribute(resource.category.name), resource_locator(resource).index(filter: { category_id: resource.category.id }) %></li>
|
5
5
|
<% end %>
|
6
|
+
|
6
7
|
<% if has_visible_scopes?(resource) %>
|
7
8
|
<li><%= link_to translated_attribute(resource.scope.name), resource_locator(resource).index(filter: { scope_id: [resource.scope.id] }) %></li>
|
8
9
|
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<div id="<%=picker_options[:id]%>" class="data-picker <%=picker_options[:class]%>" data-picker-name="<%=picker_options[:name]%>">
|
2
|
+
<div class="picker-values"><% items.each do |item, params| %>
|
3
|
+
<div><a href="<%=params[:url]%>" data-picker-value="<%=item.id%>"><%=params[:text]%></a></div>
|
4
|
+
<% end %></div>
|
5
|
+
<div class="picker-prompt"><a href="<%=prompt_params[:url]%>"><%=prompt_params[:text]%></a></div>
|
6
|
+
</div>
|
@@ -94,9 +94,9 @@
|
|
94
94
|
<th class="small-12 first columns cityhall-bar">
|
95
95
|
<div class="decidim-logo" style="float: right; text-align: right; padding-right: 16px">
|
96
96
|
<% if @custom_url_for_mail_root.present? %>
|
97
|
-
<%= link_to @organization.name, @custom_url_for_mail_root %>
|
97
|
+
<%= link_to @organization.name.html_safe, @custom_url_for_mail_root %>
|
98
98
|
<% else %>
|
99
|
-
<%= link_to @organization.name, decidim.root_url(host: @organization.host) %>
|
99
|
+
<%= link_to @organization.name.html_safe, decidim.root_url(host: @organization.host) %>
|
100
100
|
<% end %>
|
101
101
|
</div>
|
102
102
|
</th>
|
@@ -323,9 +323,9 @@ Devise.setup do |config|
|
|
323
323
|
# If you want to use other strategies, that are not supported by Devise, or
|
324
324
|
# change the failure app, you can configure them inside the config.warden block.
|
325
325
|
#
|
326
|
-
config.warden do |manager|
|
327
|
-
|
328
|
-
end
|
326
|
+
# config.warden do |manager|
|
327
|
+
# manager.failure_app = Decidim::DeviseFailureApp
|
328
|
+
# end
|
329
329
|
|
330
330
|
# ==> Mountable engine configurations
|
331
331
|
# When using Devise inside an engine, let's call it `MyEngine`, and this engine
|