diff --git a/app/components/projects/creation_wizard_status_component.rb b/app/components/projects/creation_wizard_status_component.rb index ea2a852d9c5..a56884f7b5f 100644 --- a/app/components/projects/creation_wizard_status_component.rb +++ b/app/components/projects/creation_wizard_status_component.rb @@ -30,7 +30,7 @@ class Projects::CreationWizardStatusComponent < ApplicationComponent include ApplicationHelper - include ProjectHelper + include ProjectsHelper attr_reader :project, :current_user, :artifact_id, :artifact_work_package diff --git a/app/components/projects/wizard/page_component.rb b/app/components/projects/wizard/page_component.rb index 263cbb3cf21..66e88078fa6 100644 --- a/app/components/projects/wizard/page_component.rb +++ b/app/components/projects/wizard/page_component.rb @@ -34,7 +34,7 @@ module Projects include OpPrimer::ComponentHelpers include OpTurbo::Streamable include ApplicationHelper - include ProjectHelper + include ProjectsHelper def initialize(project:, custom_fields_by_section:, current_section:) super diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 374ff30d74a..124afd6d046 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -345,13 +345,4 @@ class ProjectsController < ApplicationController def login_back_url_params params.permit(:parent_id, :template_id, :step, :next_section) end - - def portfolio_management_feature_required? = params[:workspace_type].in?(%w[portfolio program]) - - def portfolio_management_feature_missing? - portfolio_management_feature_required? && !EnterpriseToken.allows_to?(:portfolio_management) - end - - helper_method :supported_export_formats, - :portfolio_management_feature_missing? end diff --git a/app/helpers/project_helper.rb b/app/helpers/project_helper.rb deleted file mode 100644 index f93abb512f6..00000000000 --- a/app/helpers/project_helper.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -module ProjectHelper - def project_creation_wizard_name(project) - I18n.t(project.project_creation_wizard_artifact_name, - default: :project_initiation_request, - scope: "settings.project_initiation_request.name.options") - end -end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index ed371d9655b..d435162a1a2 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -93,4 +93,20 @@ module ProjectsHelper def projects_query_params safe_query_params(PROJECTS_QUERY_PARAM_NAMES) end + + def supported_export_formats + ::Exports::Register.list_formats(Project).map(&:to_s) + end + + def project_creation_wizard_name(project) + I18n.t(project.project_creation_wizard_artifact_name, + default: :project_initiation_request, + scope: "settings.project_initiation_request.name.options") + end + + def portfolio_management_feature_required? = params[:workspace_type].in?(%w[portfolio program]) + + def portfolio_management_feature_missing? + portfolio_management_feature_required? && !EnterpriseToken.allows_to?(:portfolio_management) + end end diff --git a/app/mailers/project_artifacts_mailer.rb b/app/mailers/project_artifacts_mailer.rb index f84dfdab591..1e6b1fd1d97 100644 --- a/app/mailers/project_artifacts_mailer.rb +++ b/app/mailers/project_artifacts_mailer.rb @@ -29,7 +29,7 @@ #++ class ProjectArtifactsMailer < ApplicationMailer - include ProjectHelper + include ProjectsHelper include Exports::PDF::Common::Macro def creation_wizard_submitted(user, project, artifact_work_package) diff --git a/app/models/project/pdf_export/project_initiation.rb b/app/models/project/pdf_export/project_initiation.rb index b7055a3e82f..cf39ae9ad79 100644 --- a/app/models/project/pdf_export/project_initiation.rb +++ b/app/models/project/pdf_export/project_initiation.rb @@ -39,7 +39,7 @@ class Project::PDFExport::ProjectInitiation < Exports::Exporter include Project::PDFExport::Common::ProjectAttributes include Project::PDFExport::ProjectInitiation::Cover include Project::PDFExport::ProjectInitiation::Styles - include ProjectHelper + include ProjectsHelper attr_accessor :pdf diff --git a/app/services/projects/creation_wizard/create_artifact_work_package_service.rb b/app/services/projects/creation_wizard/create_artifact_work_package_service.rb index 3661668e220..b2640ea2cac 100644 --- a/app/services/projects/creation_wizard/create_artifact_work_package_service.rb +++ b/app/services/projects/creation_wizard/create_artifact_work_package_service.rb @@ -31,7 +31,7 @@ module Projects::CreationWizard class CreateArtifactWorkPackageService < ::BaseServices::BaseContracted include Contracted - include ProjectHelper + include ProjectsHelper include ArtifactExporter include Rails.application.routes.url_helpers prepend Projects::Concerns::UpdateDemoData diff --git a/app/services/projects/creation_wizard/reupload_artifact_on_status_changes_service.rb b/app/services/projects/creation_wizard/reupload_artifact_on_status_changes_service.rb index 1e124a78e26..687f6e7f836 100644 --- a/app/services/projects/creation_wizard/reupload_artifact_on_status_changes_service.rb +++ b/app/services/projects/creation_wizard/reupload_artifact_on_status_changes_service.rb @@ -31,7 +31,7 @@ module Projects::CreationWizard class ReuploadArtifactOnStatusChangesService include Contracted - include ProjectHelper + include ProjectsHelper include ArtifactExporter include Rails.application.routes.url_helpers prepend Projects::Concerns::UpdateDemoData diff --git a/modules/overviews/app/components/overviews/page_header_component.rb b/modules/overviews/app/components/overviews/page_header_component.rb index 6f174190784..858a37a92e0 100644 --- a/modules/overviews/app/components/overviews/page_header_component.rb +++ b/modules/overviews/app/components/overviews/page_header_component.rb @@ -33,7 +33,7 @@ module Overviews extend Dry::Initializer include ApplicationHelper - include ProjectHelper + include ProjectsHelper include Redmine::I18n option :project diff --git a/spec/components/projects/creation_wizard_status_component_spec.rb b/spec/components/projects/creation_wizard_status_component_spec.rb index 225117d7a7c..047085fa7a9 100644 --- a/spec/components/projects/creation_wizard_status_component_spec.rb +++ b/spec/components/projects/creation_wizard_status_component_spec.rb @@ -32,7 +32,7 @@ require "rails_helper" RSpec.describe Projects::CreationWizardStatusComponent, type: :component do include ApplicationHelper - include ProjectHelper + include ProjectsHelper include Rails.application.routes.url_helpers let(:current_user) { build_stubbed(:user) } diff --git a/spec/features/projects/persisted_lists_spec.rb b/spec/features/projects/persisted_lists_spec.rb index d54665db07a..6e465e6c9ef 100644 --- a/spec/features/projects/persisted_lists_spec.rb +++ b/spec/features/projects/persisted_lists_spec.rb @@ -37,7 +37,9 @@ RSpec.describe "Persisted lists on projects index page", shared_let(:user) { create(:user) } shared_let(:manager) { create(:project_role, name: "Manager") } - shared_let(:developer) { create(:project_role, name: "Developer") } + # The permission is not necessary for any of the tests. But it enables one more code path + # where a regression occured before (#72362). + shared_let(:developer) { create(:project_role, name: "Developer", permissions: %i(export_projects)) } shared_let(:custom_field) { create(:text_project_custom_field) } shared_let(:invisible_custom_field) { create(:project_custom_field, admin_only: true) } diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index d3dc98b7577..cc9c2809b05 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -99,4 +99,11 @@ RSpec.describe ProjectsHelper do ]) end end + + describe "#supported_export_formats" do + it "returns the supported export formats" do + expect(helper.supported_export_formats) + .to match_array(%w[xls csv pdf]) + end + end end diff --git a/spec/models/project/pdf_export/project_initiation_spec.rb b/spec/models/project/pdf_export/project_initiation_spec.rb index 1a1945ce736..24175cb77a1 100644 --- a/spec/models/project/pdf_export/project_initiation_spec.rb +++ b/spec/models/project/pdf_export/project_initiation_spec.rb @@ -34,7 +34,7 @@ require_relative "../../projects/exporter/exportable_project_context" RSpec.describe Project::PDFExport::ProjectInitiation do include PDFExportSpecUtils - include ProjectHelper + include ProjectsHelper include Redmine::I18n include_context "with a project with an arrangement of custom fields"