diff --git a/app/assets/stylesheets/admin/menu.scss b/app/assets/stylesheets/admin/menu.scss index 076a1f291..a3ea2801d 100644 --- a/app/assets/stylesheets/admin/menu.scss +++ b/app/assets/stylesheets/admin/menu.scss @@ -17,9 +17,7 @@ @include has-fa-icon($name, $style); &::before { - font-size: rem-calc(20); - margin-left: rem-calc(8); - margin-right: rem-calc(10); + @extend %admin-menu-icon; } } diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 0e4d08318..daa8ffc81 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -28,3 +28,4 @@ @import "leaflet"; @import "sticky_overrides"; @import "admin/*"; +@import "sdg_management/*"; diff --git a/app/assets/stylesheets/mixins.scss b/app/assets/stylesheets/mixins.scss index 47ab61b2e..060e31d83 100644 --- a/app/assets/stylesheets/mixins.scss +++ b/app/assets/stylesheets/mixins.scss @@ -141,6 +141,13 @@ } } +%font-icon { + @extend %fa-icon; + font-family: "Font Awesome 5 Free"; + margin-right: rem-calc(4); + vertical-align: middle; +} + %svg-icon { background: currentcolor; content: ""; @@ -150,14 +157,17 @@ width: 1em; } +%admin-menu-icon { + font-size: rem-calc(20); + margin-left: rem-calc(8); + margin-right: rem-calc(10); +} + @mixin has-fa-icon($icon, $style) { @extend .fa-#{$icon}; &::before { - @extend %fa-icon; - font-family: "Font Awesome 5 Free"; - margin-right: rem-calc(4); - vertical-align: middle; + @extend %font-icon; @if $style == "regular" { font-weight: normal; diff --git a/app/assets/stylesheets/sdg_management/menu.scss b/app/assets/stylesheets/sdg_management/menu.scss new file mode 100644 index 000000000..744234610 --- /dev/null +++ b/app/assets/stylesheets/sdg_management/menu.scss @@ -0,0 +1,10 @@ +.sdg-content-menu { + + .goals-link::before { + @extend %font-icon; + @extend %svg-icon; + @extend %admin-menu-icon; + + mask-image: image-url("sdg.svg"); + } +} diff --git a/app/components/sdg_management/goals/index_component.html.erb b/app/components/sdg_management/goals/index_component.html.erb new file mode 100644 index 000000000..03d21e27d --- /dev/null +++ b/app/components/sdg_management/goals/index_component.html.erb @@ -0,0 +1,21 @@ +<%= header %> + + + + + + + + + + + + <% goals.each do |goal| %> + + + + + + <% end %> + +
<%= attribute_name(:code) %><%= attribute_name(:title) %><%= attribute_name(:description) %>
<%= goal.code %><%= goal.title %><%= goal.description %>
diff --git a/app/components/sdg_management/goals/index_component.rb b/app/components/sdg_management/goals/index_component.rb new file mode 100644 index 000000000..7413be712 --- /dev/null +++ b/app/components/sdg_management/goals/index_component.rb @@ -0,0 +1,19 @@ +class SDGManagement::Goals::IndexComponent < ApplicationComponent + include SDGManagement::Header + + attr_reader :goals + + def initialize(goals) + @goals = goals + end + + private + + def title + SDG::Goal.model_name.human(count: 2).titleize + end + + def attribute_name(attribute) + SDG::Goal.human_attribute_name(attribute) + end +end diff --git a/app/components/sdg_management/header.rb b/app/components/sdg_management/header.rb new file mode 100644 index 000000000..0a9370031 --- /dev/null +++ b/app/components/sdg_management/header.rb @@ -0,0 +1,11 @@ +module SDGManagement::Header + extend ActiveSupport::Concern + + def header + provide(:title) do + "#{t("sdg_management.header.title")} - #{title}" + end + + tag.h2 title + end +end diff --git a/app/components/sdg_management/menu_component.html.erb b/app/components/sdg_management/menu_component.html.erb new file mode 100644 index 000000000..bd5783962 --- /dev/null +++ b/app/components/sdg_management/menu_component.html.erb @@ -0,0 +1,5 @@ + diff --git a/app/components/sdg_management/menu_component.rb b/app/components/sdg_management/menu_component.rb new file mode 100644 index 000000000..a4dfcb7a4 --- /dev/null +++ b/app/components/sdg_management/menu_component.rb @@ -0,0 +1,7 @@ +class SDGManagement::MenuComponent < ApplicationComponent + private + + def sdg? + controller_name == "goals" + end +end diff --git a/app/controllers/sdg_management/base_controller.rb b/app/controllers/sdg_management/base_controller.rb new file mode 100644 index 000000000..a5028f7d0 --- /dev/null +++ b/app/controllers/sdg_management/base_controller.rb @@ -0,0 +1,14 @@ +class SDGManagement::BaseController < ApplicationController + layout "admin" + + before_action :authenticate_user! + before_action :verify_sdg_manager + + skip_authorization_check + + private + + def verify_sdg_manager + raise CanCan::AccessDenied unless current_user&.administrator? + end +end diff --git a/app/controllers/sdg_management/goals_controller.rb b/app/controllers/sdg_management/goals_controller.rb new file mode 100644 index 000000000..1eb68c6f3 --- /dev/null +++ b/app/controllers/sdg_management/goals_controller.rb @@ -0,0 +1,5 @@ +class SDGManagement::GoalsController < SDGManagement::BaseController + def index + @goals = SDG::Goal.order(:code) + end +end diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index b531bf82a..dd5d9c6d4 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -42,6 +42,6 @@ module AdminHelper private def namespace - controller.class.name.downcase.split("::").first + controller.class.name.split("::").first.underscore end end diff --git a/app/models/sdg.rb b/app/models/sdg.rb new file mode 100644 index 000000000..67c0b0fcd --- /dev/null +++ b/app/models/sdg.rb @@ -0,0 +1,5 @@ +module SDG + def self.table_name_prefix + "sdg_" + end +end diff --git a/app/models/sdg/goal.rb b/app/models/sdg/goal.rb new file mode 100644 index 000000000..f65488ca7 --- /dev/null +++ b/app/models/sdg/goal.rb @@ -0,0 +1,15 @@ +class SDG::Goal < ApplicationRecord + validates :code, presence: true, uniqueness: true, inclusion: { in: 1..17 } + + def title + I18n.t("sdg.goals.goal_#{code}.title") + end + + def description + I18n.t("sdg.goals.goal_#{code}.description") + end + + def self.[](code) + find_by!(code: code) + end +end diff --git a/app/views/layouts/admin.html.erb b/app/views/layouts/admin.html.erb index ff29aa5d5..8c3176b12 100644 --- a/app/views/layouts/admin.html.erb +++ b/app/views/layouts/admin.html.erb @@ -15,6 +15,8 @@