mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
Consistent naming of upsell, not upsale
This commit is contained in:
@@ -28,5 +28,5 @@
|
||||
@import "work_package_relations_tab/relation_component"
|
||||
@import "users/hover_card_component"
|
||||
@import "enterprise_edition/banner_component"
|
||||
@import "enterprise_edition/upsale_page_component"
|
||||
@import "enterprise_edition/upsell_page_component"
|
||||
@import "work_packages/types/pattern_input"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
title_flex.with_column do
|
||||
render(Primer::Beta::Octicon.new(icon: :"op-enterprise-addons",
|
||||
size: :medium,
|
||||
classes: "upsale-colored"))
|
||||
classes: "upsell-colored"))
|
||||
end
|
||||
|
||||
title_flex.with_column(ml: 2) do
|
||||
@@ -42,7 +42,7 @@
|
||||
end
|
||||
|
||||
flex.with_row(mt: 2) do
|
||||
render EnterpriseEdition::UpsaleButtonsComponent.new(feature_key)
|
||||
render EnterpriseEdition::UpsellButtonsComponent.new(feature_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -65,7 +65,7 @@
|
||||
href: dismiss_enterprise_banner_path(feature_key: @dismiss_key),
|
||||
data: { turbo_stream: true, turbo_method: :post },
|
||||
icon: :x,
|
||||
aria: { label: t("ee.upsale.hide_banner") }
|
||||
aria: { label: t("ee.upsell.hide_banner") }
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
@@ -47,7 +47,7 @@ module EnterpriseEdition
|
||||
# @param image [String, NilClass] Path to the image to show on the banner, or nil.
|
||||
# Required when variant is :medium.
|
||||
# @param i18n_scope [String] Provide the i18n scope to look for title, description, and features.
|
||||
# Defaults to "ee.upsale.{feature_key}"
|
||||
# Defaults to "ee.upsell.{feature_key}"
|
||||
# @param dismissable [boolean] Allow this banner to be dismissed.
|
||||
# @param show_always [boolean] Always show the banner, regardless of the dismissed or feature state.
|
||||
# @param dismiss_key [String] Provide a string to identify this banner when being dismissed. Defaults to feature_key
|
||||
@@ -55,7 +55,7 @@ module EnterpriseEdition
|
||||
def initialize(feature_key, # rubocop:disable Metrics/AbcSize
|
||||
variant: DEFAULT_VARIANT,
|
||||
image: nil,
|
||||
i18n_scope: "ee.upsale.#{feature_key}",
|
||||
i18n_scope: "ee.upsell.#{feature_key}",
|
||||
dismissable: false,
|
||||
show_always: false,
|
||||
dismiss_key: feature_key,
|
||||
|
||||
@@ -71,12 +71,12 @@
|
||||
padding: var(--base-size-6) var(--base-size-8)
|
||||
|
||||
&--icon
|
||||
color: var(--enterprise-upsale-color)
|
||||
color: var(--enterprise-upsell-color)
|
||||
margin-block: var(--base-size-2)
|
||||
|
||||
&--close-icon
|
||||
.Button-visual
|
||||
color: var(--enterprise-upsale-color)
|
||||
color: var(--enterprise-upsell-color)
|
||||
|
||||
&_hovering
|
||||
position: absolute
|
||||
|
||||
@@ -74,11 +74,11 @@ module EnterpriseEdition
|
||||
end
|
||||
|
||||
def plan_text
|
||||
plan_name = render(Primer::Beta::Text.new(font_weight: :bold, classes: "upsale-colored")) do
|
||||
I18n.t("ee.upsale.plan_name", plan:)
|
||||
plan_name = render(Primer::Beta::Text.new(font_weight: :bold, classes: "upsell-colored")) do
|
||||
I18n.t("ee.upsell.plan_name", plan:)
|
||||
end
|
||||
|
||||
I18n.t("ee.upsale.plan_text_html", plan_name:).html_safe
|
||||
I18n.t("ee.upsell.plan_text_html", plan_name:).html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@
|
||||
# ++
|
||||
|
||||
module EnterpriseEdition
|
||||
class UpsaleButtonsComponent < ApplicationComponent
|
||||
class UpsellButtonsComponent < ApplicationComponent
|
||||
include OpPrimer::ComponentHelpers
|
||||
|
||||
# @param feature_key [Symbol, NilClass] The key of the feature to show the banner for.
|
||||
@@ -84,7 +84,7 @@ module EnterpriseEdition
|
||||
end
|
||||
|
||||
def link_title
|
||||
I18n.t("ee.upsale.#{feature_key}.link_title", default: I18n.t(:label_more_information))
|
||||
I18n.t("ee.upsell.#{feature_key}.link_title", default: I18n.t(:label_more_information))
|
||||
end
|
||||
|
||||
def enterprise_link
|
||||
+4
-4
@@ -3,13 +3,13 @@
|
||||
<% helpers.write_trial_key_to_gon if !EnterpriseToken.current.present? %>
|
||||
<% end %>
|
||||
|
||||
<div class="op-enterprise-upsale-page" data-test-selector="op-enterprise-upsale-page">
|
||||
<div class="op-enterprise-upsell-page" data-test-selector="op-enterprise-upsell-page">
|
||||
<%=
|
||||
render(Primer::OpenProject::FlexLayout.new(justify_content: :center, align_items: :center)) do |flex|
|
||||
flex.with_column do
|
||||
render(Primer::Beta::Octicon.new(icon: :"op-enterprise-addons",
|
||||
size: :medium,
|
||||
classes: "upsale-colored"))
|
||||
classes: "upsell-colored"))
|
||||
end
|
||||
|
||||
flex.with_column(ml: 2) do
|
||||
@@ -18,7 +18,7 @@
|
||||
end
|
||||
%>
|
||||
|
||||
<p class="upsale--feature-reference">
|
||||
<p class="upsell--feature-reference">
|
||||
<%= render(Primer::Beta::Text.new) { description } %>
|
||||
<%= render(Primer::Beta::Text.new) { plan_text } %>
|
||||
</p>
|
||||
@@ -42,5 +42,5 @@
|
||||
<%= image_tag "enterprise-add-on.svg", class: "widget-box--teaser-image widget-box--teaser-image_default" %>
|
||||
<% end %>
|
||||
|
||||
<%= render EnterpriseEdition::UpsaleButtonsComponent.new(feature_key, justify_content: :center) %>
|
||||
<%= render EnterpriseEdition::UpsellButtonsComponent.new(feature_key, justify_content: :center) %>
|
||||
</div>
|
||||
+6
-6
@@ -30,16 +30,16 @@
|
||||
|
||||
module EnterpriseEdition
|
||||
# A full page banner for the enterprise edition
|
||||
class UpsalePageComponent < ApplicationComponent
|
||||
class UpsellPageComponent < ApplicationComponent
|
||||
include OpPrimer::ComponentHelpers
|
||||
include PlanForFeature
|
||||
|
||||
# @param feature_key [Symbol, NilClass] The key of the feature to show the upsale page for.
|
||||
# @param feature_key [Symbol, NilClass] The key of the feature to show the upsell page for.
|
||||
# @param i18n_scope [String] Provide the i18n scope to look for title, description, and features.
|
||||
# Defaults to "ee.upsale.{feature_key}"
|
||||
# @param image [String, NilClass] Path to the image to show on the upsale page, or nil.
|
||||
# @param video [String, NilClass] Path to the video to show on the upsale page, or nil.
|
||||
def initialize(feature_key, i18n_scope: "ee.upsale.#{feature_key}", image: nil, video: nil)
|
||||
# Defaults to "ee.upsell.{feature_key}"
|
||||
# @param image [String, NilClass] Path to the image to show on the upsell page, or nil.
|
||||
# @param video [String, NilClass] Path to the video to show on the upsell page, or nil.
|
||||
def initialize(feature_key, i18n_scope: "ee.upsell.#{feature_key}", image: nil, video: nil)
|
||||
super
|
||||
|
||||
self.feature_key = feature_key
|
||||
+1
-1
@@ -27,7 +27,7 @@
|
||||
/ See COPYRIGHT and LICENSE files for more details.
|
||||
/ ++
|
||||
/
|
||||
.op-enterprise-upsale-page
|
||||
.op-enterprise-upsell-page
|
||||
max-width: 50vw
|
||||
margin: auto
|
||||
padding-top: 20px
|
||||
@@ -42,7 +42,7 @@
|
||||
<%= menu_item.title %>
|
||||
|
||||
<% if menu_item.show_enterprise_icon %>
|
||||
<%= render Primer::Beta::Octicon.new(icon: "op-enterprise-addons", "aria-label": I18n.t(:label_enterprise_edition), classes: "upsale-colored", ml: 2) %>
|
||||
<%= render Primer::Beta::Octicon.new(icon: "op-enterprise-addons", "aria-label": I18n.t(:label_enterprise_edition), classes: "upsell-colored", ml: 2) %>
|
||||
<% end %>
|
||||
</span>
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<%= child_item.title %>
|
||||
|
||||
<% if child_item.show_enterprise_icon %>
|
||||
<%= render Primer::Beta::Octicon.new(icon: "op-enterprise-addons", "aria-label": I18n.t(:label_enterprise_edition), classes: "upsale-colored", ml: 2) %>
|
||||
<%= render Primer::Beta::Octicon.new(icon: "op-enterprise-addons", "aria-label": I18n.t(:label_enterprise_edition), classes: "upsell-colored", ml: 2) %>
|
||||
<% end %>
|
||||
|
||||
<% if child_item.favored %>
|
||||
|
||||
@@ -62,7 +62,7 @@ module Settings
|
||||
def activity_title
|
||||
label = t("label_activity").html_safe
|
||||
unless EnterpriseToken.allows_to?(:internal_comments)
|
||||
label << render(Primer::Beta::Octicon.new(icon: "op-enterprise-addons", classes: "upsale-colored", ml: 2))
|
||||
label << render(Primer::Beta::Octicon.new(icon: "op-enterprise-addons", classes: "upsell-colored", ml: 2))
|
||||
end
|
||||
label
|
||||
end
|
||||
|
||||
+5
-5
@@ -1,10 +1,10 @@
|
||||
<%=
|
||||
modal_content.with_row(data: { "test-selector": "op-share-dialog-upsale-block" }) do
|
||||
render Primer::OpenProject::FeedbackMessage.new(icon_arguments: { icon: :"op-enterprise-addons", classes: "upsale-colored" }, border: true) do |component|
|
||||
component.with_heading(tag: :h2, classes: "upsale-colored").with_content(I18n.t(:"ee.upsale.title"))
|
||||
component.with_description { I18n.t("sharing.project_queries.upsale.message") }
|
||||
modal_content.with_row(data: { "test-selector": "op-share-dialog-upsell-block" }) do
|
||||
render Primer::OpenProject::FeedbackMessage.new(icon_arguments: { icon: :"op-enterprise-addons", classes: "upsell-colored" }, border: true) do |component|
|
||||
component.with_heading(tag: :h2, classes: "upsell-colored").with_content(I18n.t(:"ee.upsell.title"))
|
||||
component.with_description { I18n.t("sharing.project_queries.upsell.message") }
|
||||
|
||||
href = "#{OpenProject::Static::Links.links[:upsale][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=project-list-sharing-modal"
|
||||
href = "#{OpenProject::Static::Links.links[:upsell][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=project-list-sharing-modal"
|
||||
component.with_secondary_action(href:) do |link|
|
||||
link.with_trailing_visual_icon(icon: "link-external")
|
||||
I18n.t("admin.enterprise.enterprise_link")
|
||||
+1
-1
@@ -28,7 +28,7 @@
|
||||
|
||||
module Shares
|
||||
module ProjectQueries
|
||||
class UpsaleComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent
|
||||
class UpsellComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent
|
||||
include OpPrimer::ComponentHelpers
|
||||
|
||||
def initialize(modal_content:)
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
<%=
|
||||
component_wrapper(tag: "turbo-frame") do
|
||||
render Primer::OpenProject::FeedbackMessage.new(icon_arguments: { icon: :"op-enterprise-addons", classes: "upsale-colored" }, border: true) do |component|
|
||||
component.with_heading(tag: :h2, classes: "upsale-colored").with_content(I18n.t(:"ee.upsale.title"))
|
||||
render Primer::OpenProject::FeedbackMessage.new(icon_arguments: { icon: :"op-enterprise-addons", classes: "upsell-colored" }, border: true) do |component|
|
||||
component.with_heading(tag: :h2, classes: "upsell-colored").with_content(I18n.t(:"ee.upsell.title"))
|
||||
component.with_description { I18n.t("mail.sharing.work_packages.enterprise_text") }
|
||||
|
||||
href = "#{OpenProject::Static::Links.links[:upsale][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=work-package-sharing-modal"
|
||||
href = "#{OpenProject::Static::Links.links[:upsell][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=work-package-sharing-modal"
|
||||
component.with_secondary_action(href:) do |link|
|
||||
link.with_trailing_visual_icon(icon: "link-external")
|
||||
I18n.t("admin.enterprise.enterprise_link")
|
||||
+1
-1
@@ -28,7 +28,7 @@
|
||||
|
||||
module Shares
|
||||
module WorkPackages
|
||||
class ModalUpsaleComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent
|
||||
class ModalUpsellComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent
|
||||
include ApplicationHelper
|
||||
include OpTurbo::Streamable
|
||||
include OpPrimer::ComponentHelpers
|
||||
@@ -39,7 +39,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
feature = tab[:enterprise_feature]
|
||||
|
||||
if feature && !EnterpriseToken.allows_to?(feature)
|
||||
t.with_icon(icon: :"op-enterprise-addons", classes: "upsale-colored")
|
||||
t.with_icon(icon: :"op-enterprise-addons", classes: "upsell-colored")
|
||||
end
|
||||
t.with_text { I18n.t(tab[:label]) }
|
||||
end
|
||||
|
||||
@@ -44,7 +44,7 @@ module WorkPackages
|
||||
render(Primer::Beta::Octicon.new(
|
||||
icon: "op-enterprise-addons",
|
||||
"aria-label": I18n.t(:label_enterprise_edition),
|
||||
classes: "upsale-colored", ml: 2
|
||||
classes: "upsell-colored", ml: 2
|
||||
))
|
||||
end
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ class CustomActionsController < ApplicationController
|
||||
return if EnterpriseToken.allows_to?(:custom_actions)
|
||||
|
||||
if request.get?
|
||||
render template: "custom_actions/upsale"
|
||||
render template: "custom_actions/upsell"
|
||||
else
|
||||
render_403
|
||||
end
|
||||
|
||||
@@ -39,7 +39,7 @@ class CustomStylesController < ApplicationController
|
||||
before_action :require_admin,
|
||||
except: UNGUARDED_ACTIONS
|
||||
before_action :require_ee_token,
|
||||
except: UNGUARDED_ACTIONS + %i[upsale]
|
||||
except: UNGUARDED_ACTIONS + %i[upsell]
|
||||
skip_before_action :check_if_login_required,
|
||||
only: UNGUARDED_ACTIONS
|
||||
no_authorization_required! *UNGUARDED_ACTIONS
|
||||
@@ -58,7 +58,7 @@ class CustomStylesController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def upsale; end
|
||||
def upsell; end
|
||||
|
||||
def create
|
||||
@custom_style = CustomStyle.create(custom_style_params)
|
||||
@@ -180,7 +180,7 @@ class CustomStylesController < ApplicationController
|
||||
|
||||
def require_ee_token
|
||||
unless EnterpriseToken.allows_to?(:define_custom_style)
|
||||
redirect_to custom_style_upsale_path
|
||||
redirect_to custom_style_upsell_path
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ class NotificationsController < ApplicationController
|
||||
|
||||
before_action :require_login
|
||||
before_action :filtered_query, only: :mark_all_read
|
||||
no_authorization_required! :index, :split_view, :update_counter, :mark_all_read, :date_alerts, :share_upsale
|
||||
no_authorization_required! :index, :split_view, :update_counter, :mark_all_read, :date_alerts, :share_upsell
|
||||
|
||||
before_action :check_filter, only: %i[index]
|
||||
|
||||
@@ -65,7 +65,7 @@ class NotificationsController < ApplicationController
|
||||
render_notifications_layout
|
||||
end
|
||||
|
||||
def share_upsale
|
||||
def share_upsell
|
||||
render_notifications_layout
|
||||
end
|
||||
|
||||
@@ -98,7 +98,7 @@ class NotificationsController < ApplicationController
|
||||
return if EnterpriseToken.allows_to?(:date_alerts)
|
||||
|
||||
if params[:filter] == "reason" && params[:name] == "dateAlert"
|
||||
redirect_to notifications_date_alert_upsale_path
|
||||
redirect_to notifications_date_alert_upsell_path
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -42,7 +42,7 @@ class WorkPackagesController < ApplicationController
|
||||
:check_allowed_export,
|
||||
:protect_from_unauthorized_export, only: %i[index export_dialog]
|
||||
|
||||
before_action :authorize, only: %i[show_conflict_flash_message share_upsale]
|
||||
before_action :authorize, only: %i[show_conflict_flash_message share_upsell]
|
||||
authorization_checked! :index, :show, :export_dialog, :generate_pdf_dialog, :generate_pdf
|
||||
|
||||
before_action :load_and_validate_query, only: :index, unless: -> { request.format.html? }
|
||||
@@ -128,8 +128,8 @@ class WorkPackagesController < ApplicationController
|
||||
respond_with_turbo_streams
|
||||
end
|
||||
|
||||
def share_upsale
|
||||
render :share_upsale,
|
||||
def share_upsell
|
||||
render :share_upsell,
|
||||
locals: { menu_name: project_or_global_menu }
|
||||
end
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ module CustomFieldsHelper
|
||||
label = format.label.is_a?(Proc) ? format.label.call : I18n.t(format.label)
|
||||
|
||||
show_enterprise_text = format_string == "hierarchy" && !EnterpriseToken.allows_to?(:custom_field_hierarchies)
|
||||
suffix = show_enterprise_text ? " (#{I18n.t(:"ee.upsale.title")})" : ""
|
||||
suffix = show_enterprise_text ? " (#{I18n.t(:"ee.upsell.title")})" : ""
|
||||
|
||||
"#{label}#{suffix}"
|
||||
end
|
||||
|
||||
@@ -113,9 +113,9 @@ module Notifications
|
||||
|
||||
def query_path(query_params)
|
||||
if query_params[:name] == "shared" && show_enterprise_icon?("shared")
|
||||
return notifications_share_upsale_path(query_params)
|
||||
return notifications_share_upsell_path(query_params)
|
||||
elsif query_params[:name] == "dateAlert" && show_enterprise_icon?("dateAlert")
|
||||
return notifications_date_alert_upsale_path(query_params)
|
||||
return notifications_date_alert_upsell_path(query_params)
|
||||
end
|
||||
|
||||
notifications_center_path(query_params)
|
||||
|
||||
@@ -51,7 +51,7 @@ module WorkPackages
|
||||
|
||||
def query_path(query_params)
|
||||
if query_params[:show_enterprise_icon].present?
|
||||
return ee_upsale_path(query_params)
|
||||
return ee_upsell_path(query_params)
|
||||
end
|
||||
|
||||
if project.present?
|
||||
@@ -76,8 +76,8 @@ module WorkPackages
|
||||
params[:on_work_package_path] == "true"
|
||||
end
|
||||
|
||||
def ee_upsale_path(query_params)
|
||||
share_upsale_work_packages_path({ name: query_params[:name] })
|
||||
def ee_upsell_path(query_params)
|
||||
share_upsell_work_packages_path({ name: query_params[:name] })
|
||||
end
|
||||
|
||||
def check_for_redirected_urls(query_params)
|
||||
|
||||
@@ -109,7 +109,7 @@ module SharingStrategies
|
||||
if EnterpriseToken.allows_to?(:project_list_sharing)
|
||||
super
|
||||
else
|
||||
Shares::ProjectQueries::UpsaleComponent.new(modal_content:)
|
||||
Shares::ProjectQueries::UpsellComponent.new(modal_content:)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ module SharingStrategies
|
||||
if EnterpriseToken.allows_to?(:work_package_sharing)
|
||||
super
|
||||
else
|
||||
Shares::WorkPackages::ModalUpsaleComponent.new
|
||||
Shares::WorkPackages::ModalUpsellComponent.new
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
|
||||
++#%>
|
||||
|
||||
<% html_title t(:label_administration), t("ee.upsale.custom_actions.title") %>
|
||||
<% html_title t(:label_administration), t("ee.upsell.custom_actions.title") %>
|
||||
|
||||
<%=
|
||||
render EnterpriseEdition::UpsalePageComponent.new(
|
||||
render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:custom_actions,
|
||||
video: "enterprise/custom-actions.mp4"
|
||||
)
|
||||
@@ -29,7 +29,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
|
||||
<% html_title t(:label_administration), t(:label_custom_style) %>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:define_custom_style,
|
||||
video: "enterprise/custom-design.mp4"
|
||||
) %>
|
||||
@@ -4,9 +4,9 @@
|
||||
data-company="<%= @current_token.try(:company) %>"
|
||||
data-domain="<%= @current_token.try(:domain) %>"
|
||||
data-plan="<%= enterprise_token_plan_name(@current_token) %>"
|
||||
data-user-count="<%= @current_token.restrictions.nil? ? t("js.admin.enterprise.upsale.unlimited") : @current_token.restrictions[:active_user_count] %>"
|
||||
data-user-count="<%= @current_token.restrictions.nil? ? t("js.admin.enterprise.upsell.unlimited") : @current_token.restrictions[:active_user_count] %>"
|
||||
data-starts-at="<%= format_date @current_token.starts_at %>"
|
||||
data-expires-at="<%= @current_token.will_expire? ? (format_date @current_token.expires_at) : t("js.admin.enterprise.upsale.unlimited") %>"
|
||||
data-expires-at="<%= @current_token.will_expire? ? (format_date @current_token.expires_at) : t("js.admin.enterprise.upsell.unlimited") %>"
|
||||
data-is-expired="<%= @current_token.expired?(reprieve: false) %>"
|
||||
data-additional-features="<%= enterprise_plan_additional_features(@current_token) %>"
|
||||
data-reprieve-days-left="<%= @current_token.reprieve_days_left %>">
|
||||
|
||||
@@ -31,12 +31,12 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
"data-cb-site": OpenProject::Configuration.enterprise_chargebee_site %>
|
||||
<% end %>
|
||||
|
||||
<div class="upsale--information-container">
|
||||
<div class='upsale-information'>
|
||||
<div class="upsell--information-container">
|
||||
<div class='upsell-information'>
|
||||
<opce-enterprise-base></opce-enterprise-base>
|
||||
</div>
|
||||
|
||||
<div class='upsale-actions'>
|
||||
<div class='upsell-actions'>
|
||||
<a href="#"
|
||||
class="button -highlight-inverted"
|
||||
data-cb-type="checkout"
|
||||
@@ -44,7 +44,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<%= t("admin.enterprise.book_now") %>
|
||||
</a>
|
||||
|
||||
<% quote_link = OpenProject::Static::Links.links.fetch :upsale_get_quote %>
|
||||
<% quote_link = OpenProject::Static::Links.links.fetch :upsell_get_quote %>
|
||||
<%= link_to t(quote_link[:label]),
|
||||
quote_link[:href],
|
||||
target: "_blank",
|
||||
@@ -54,21 +54,21 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<%= static_link_to :contact %>
|
||||
</div>
|
||||
|
||||
<div class="info-boxes upsale-benefits">
|
||||
<h3 class="info-boxes--title -no-border"><%= t("js.admin.enterprise.upsale.benefits.description") %></h3>
|
||||
<div class="info-boxes upsell-benefits">
|
||||
<h3 class="info-boxes--title -no-border"><%= t("js.admin.enterprise.upsell.benefits.description") %></h3>
|
||||
|
||||
<div class="info-boxes--container">
|
||||
<div class="info-boxes--item">
|
||||
<%= image_tag "installation_alerts.svg",
|
||||
class: "info-boxes--teaser-image",
|
||||
title: t("js.admin.enterprise.upsale.benefits.installation"),
|
||||
alt: t("js.admin.enterprise.upsale.benefits.installation") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsale.benefits.installation") %></h4>
|
||||
title: t("js.admin.enterprise.upsell.benefits.installation"),
|
||||
alt: t("js.admin.enterprise.upsell.benefits.installation") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsell.benefits.installation") %></h4>
|
||||
<div class="info-boxes--item-content">
|
||||
<p><%= t("js.admin.enterprise.upsale.benefits.installation_text") %></p>
|
||||
<p><%= t("js.admin.enterprise.upsell.benefits.installation_text") %></p>
|
||||
<ul class="widget-box--arrow-links">
|
||||
<li>
|
||||
<%= static_link_to :upsale_benefits_installation %>
|
||||
<%= static_link_to :upsell_benefits_installation %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -76,14 +76,14 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<div class="info-boxes--item">
|
||||
<%= image_tag "professional_support.svg",
|
||||
class: "info-boxes--teaser-image",
|
||||
title: t("js.admin.enterprise.upsale.benefits.professional_support"),
|
||||
alt: t("js.admin.enterprise.upsale.benefits.professional_support") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsale.benefits.professional_support") %></h4>
|
||||
title: t("js.admin.enterprise.upsell.benefits.professional_support"),
|
||||
alt: t("js.admin.enterprise.upsell.benefits.professional_support") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsell.benefits.professional_support") %></h4>
|
||||
<div class="info-boxes--item-content">
|
||||
<p><%= t("js.admin.enterprise.upsale.benefits.professional_support_text") %></p>
|
||||
<p><%= t("js.admin.enterprise.upsell.benefits.professional_support_text") %></p>
|
||||
<ul class="widget-box--arrow-links">
|
||||
<li>
|
||||
<%= static_link_to :upsale_benefits_support %>
|
||||
<%= static_link_to :upsell_benefits_support %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -91,14 +91,14 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<div class="info-boxes--item">
|
||||
<%= image_tag "enterprise-add-on.svg",
|
||||
class: "info-boxes--teaser-image",
|
||||
title: t("js.admin.enterprise.upsale.benefits.premium_features"),
|
||||
alt: t("js.admin.enterprise.upsale.benefits.premium_features") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsale.benefits.premium_features") %></h4>
|
||||
title: t("js.admin.enterprise.upsell.benefits.premium_features"),
|
||||
alt: t("js.admin.enterprise.upsell.benefits.premium_features") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsell.benefits.premium_features") %></h4>
|
||||
<div class="info-boxes--item-content">
|
||||
<p><%= t("js.admin.enterprise.upsale.benefits.premium_features_text") %></p>
|
||||
<p><%= t("js.admin.enterprise.upsell.benefits.premium_features_text") %></p>
|
||||
<ul class="widget-box--arrow-links">
|
||||
<li>
|
||||
<%= static_link_to :upsale_benefits_features %>
|
||||
<%= static_link_to :upsell_benefits_features %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -106,14 +106,14 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<div class="info-boxes--item">
|
||||
<%= image_tag "security_alerts.svg",
|
||||
class: "info-boxes--teaser-image",
|
||||
title: t("js.admin.enterprise.upsale.benefits.high_security"),
|
||||
alt: t("js.admin.enterprise.upsale.benefits.high_security") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsale.benefits.high_security") %></h4>
|
||||
title: t("js.admin.enterprise.upsell.benefits.high_security"),
|
||||
alt: t("js.admin.enterprise.upsell.benefits.high_security") %>
|
||||
<h4 class="info-boxes--item-title"><%= t("js.admin.enterprise.upsell.benefits.high_security") %></h4>
|
||||
<div class="info-boxes--item-content">
|
||||
<p><%= t("js.admin.enterprise.upsale.benefits.high_security_text") %></p>
|
||||
<p><%= t("js.admin.enterprise.upsell.benefits.high_security_text") %></p>
|
||||
<ul class="widget-box--arrow-links">
|
||||
<li>
|
||||
<%= static_link_to :upsale_benefits_security %>
|
||||
<%= static_link_to :upsell_benefits_security %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+12
-12
@@ -1,27 +1,27 @@
|
||||
<div class="widget-box--description">
|
||||
<%= image_tag "enterprise-add-on.svg", role: "presentation", class: "widget-box--blocks--upsale-image" %>
|
||||
<div class="widget-box--blocks--upsale-text">
|
||||
<div class="widget-box--blocks--upsale-title">
|
||||
<%= image_tag "enterprise-add-on.svg", role: "presentation", class: "widget-box--blocks--upsell-image" %>
|
||||
<div class="widget-box--blocks--upsell-text">
|
||||
<div class="widget-box--blocks--upsell-title">
|
||||
<%= spot_icon("enterprise-addons") %>
|
||||
<span><%= t("homescreen.blocks.upsale.title") %></span>
|
||||
<span><%= t("homescreen.blocks.upsell.title") %></span>
|
||||
</div>
|
||||
<p class="widget-box--blocks--upsale-description">
|
||||
<%= t("js.admin.enterprise.upsale.text") %>
|
||||
<p class="widget-box--blocks--upsell-description">
|
||||
<%= t("js.admin.enterprise.upsell.text") %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b><%= t("js.admin.enterprise.upsale.become_hero") %></b> <%= t("js.admin.enterprise.upsale.you_contribute") %>
|
||||
<b><%= t("js.admin.enterprise.upsell.become_hero") %></b> <%= t("js.admin.enterprise.upsell.you_contribute") %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b><%= t("js.admin.enterprise.upsale.confidence") %></b>
|
||||
<b><%= t("js.admin.enterprise.upsell.confidence") %></b>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget-box--blocks--upsale-buttons">
|
||||
<%= link_to "#{OpenProject::Static::Links.links[:upsale][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=home-screen",
|
||||
class: "button--link widget-box--blocks--upsale-info-button",
|
||||
<div class="widget-box--blocks--upsell-buttons">
|
||||
<%= link_to "#{OpenProject::Static::Links.links[:upsell][:href]}/?utm_source=unknown&utm_medium=community-edition&utm_campaign=home-screen",
|
||||
class: "button--link widget-box--blocks--upsell-info-button",
|
||||
target: "_blank",
|
||||
rel: "noopener" do %>
|
||||
<%= spot_icon("external-link") %>
|
||||
@@ -40,6 +40,6 @@
|
||||
<% end %>
|
||||
|
||||
<% if current_user.admin? %>
|
||||
<%= link_to t("js.admin.enterprise.upsale.button_start_trial"), enterprise_path, class: "button -primary" %>
|
||||
<%= link_to t("js.admin.enterprise.upsell.button_start_trial"), enterprise_path, class: "button -primary" %>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<% html_title t("js.notifications.title") %>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:date_alerts,
|
||||
video: "enterprise/date-alert-notifications.mp4"
|
||||
) %>
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<% html_title t("js.notifications.title") %>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:work_package_sharing,
|
||||
video: "enterprise/share-work-package.mp4"
|
||||
) %>
|
||||
@@ -62,6 +62,6 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
|
||||
<%= render PlaceholderUsers::TableComponent.new(rows: @placeholder_users) %>
|
||||
<% else %>
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(:placeholder_users,
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(:placeholder_users,
|
||||
video: "enterprise/placeholder_users.mp4") %>
|
||||
<% end %>
|
||||
|
||||
@@ -39,7 +39,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
"enterprise-addons",
|
||||
inline: true,
|
||||
size: "1_25",
|
||||
classnames: "upsale-colored"
|
||||
classnames: "upsell-colored"
|
||||
) %>
|
||||
<% end %>
|
||||
</label>
|
||||
|
||||
@@ -40,5 +40,5 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<%= render(Projects::Settings::WorkPackages::Activities::Form.new(f)) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render(EnterpriseEdition::UpsalePageComponent.new(:internal_comments)) %>
|
||||
<%= render(EnterpriseEdition::UpsellPageComponent.new(:internal_comments)) %>
|
||||
<% end %>
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<% html_title t(:label_work_package_plural) %>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:work_package_sharing,
|
||||
video: "enterprise/share-work-package.mp4"
|
||||
) %>
|
||||
@@ -152,7 +152,7 @@ ignore_unused:
|
||||
- 'permission_*'
|
||||
- '{devise,kaminari,will_paginate}.*'
|
||||
- '*.permission_header_explanation'
|
||||
- 'storages.upsale.*'
|
||||
- 'storages.upsell.*'
|
||||
- 'services.*'
|
||||
- 'storages.health.connection_validation.{one_drive,nextcloud}.*'
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ OpenProject::Static::Homescreen.manage :blocks do |blocks|
|
||||
if: Proc.new { User.current.admin? }
|
||||
},
|
||||
{
|
||||
partial: "upsale",
|
||||
partial: "upsell",
|
||||
if: Proc.new { !EnterpriseToken.hide_banners? }
|
||||
}
|
||||
)
|
||||
|
||||
@@ -215,7 +215,7 @@ Rails.application.reloader.to_prepare do
|
||||
map.permission :edit_attribute_help_texts,
|
||||
{
|
||||
admin: %i[index],
|
||||
attribute_help_texts: %i[index new edit upsale create update destroy]
|
||||
attribute_help_texts: %i[index new edit upsell create update destroy]
|
||||
},
|
||||
permissible_on: :global,
|
||||
require: :loggedin,
|
||||
@@ -245,7 +245,7 @@ Rails.application.reloader.to_prepare do
|
||||
{
|
||||
versions: %i[index show status_by],
|
||||
journals: %i[index],
|
||||
work_packages: %i[show index show_conflict_flash_message share_upsale],
|
||||
work_packages: %i[show index show_conflict_flash_message share_upsell],
|
||||
work_packages_api: [:get],
|
||||
"work_packages/reports": %i[report report_details],
|
||||
"work_packages/activities_tab": %i[index update_streams update_sorting update_filter],
|
||||
|
||||
@@ -2069,11 +2069,11 @@ en:
|
||||
work_package_query_relation_columns: Work Package Query Relation Columns
|
||||
work_package_sharing: Share work packages with external users
|
||||
work_package_subject_generation: Work Package Subject Generation
|
||||
upsale:
|
||||
upsell:
|
||||
title: "Enterprise add-on"
|
||||
plan_title: "Enterprise %{plan} add-on"
|
||||
plan_name: "%{plan} enterprise plan"
|
||||
plan_text_html: "Available only through the %{plan_name}."
|
||||
plan_text_html: "Available starting with the %{plan_name}."
|
||||
hide_banner: "Hide this banner"
|
||||
baseline_comparison:
|
||||
description: Highlight changes made to this list since any point in the past.
|
||||
@@ -2351,7 +2351,7 @@ en:
|
||||
users: "Newest registered users in this instance."
|
||||
blocks:
|
||||
community: "OpenProject community"
|
||||
upsale:
|
||||
upsell:
|
||||
title: "Upgrade to Enterprise edition"
|
||||
links:
|
||||
upgrade_enterprise_edition: "Upgrade to Enterprise edition"
|
||||
@@ -4471,7 +4471,7 @@ en:
|
||||
view_description: "Can view this project list."
|
||||
edit: "Edit"
|
||||
edit_description: "Can view, share and edit this project list."
|
||||
upsale:
|
||||
upsell:
|
||||
message: "Sharing project lists with individual users is an enterprise add-on."
|
||||
working_days:
|
||||
info: >
|
||||
|
||||
@@ -263,7 +263,7 @@ en:
|
||||
status_waiting: "email sent - waiting for confirmation"
|
||||
test_ee: "Test the Enterprise edition 14 days for free"
|
||||
quick_overview: "Get a quick overview of project management and team collaboration with OpenProject Enterprise edition."
|
||||
upsale:
|
||||
upsell:
|
||||
become_hero: "Become a hero!"
|
||||
enterprise_info_html: "%{feature_title} is an Enterprise <span class='spot-icon spot-icon_inline spot-icon_enterprise-addons'></span> add-on."
|
||||
upgrade_info: "Please upgrade to a paid plan to activate and start using it in your team."
|
||||
@@ -945,7 +945,7 @@ en:
|
||||
tl_toolbar:
|
||||
zooms: "Zoom level"
|
||||
outlines: "Hierarchy level"
|
||||
upsale:
|
||||
upsell:
|
||||
ee_only: "Enterprise edition add-on"
|
||||
wiki_formatting:
|
||||
strong: "Strong"
|
||||
|
||||
+4
-4
@@ -482,7 +482,7 @@ Rails.application.routes.draw do
|
||||
delete "design/export_cover" => "custom_styles#export_cover_delete", as: "custom_style_export_cover_delete"
|
||||
delete "design/favicon" => "custom_styles#favicon_delete", as: "custom_style_favicon_delete"
|
||||
delete "design/touch_icon" => "custom_styles#touch_icon_delete", as: "custom_style_touch_icon_delete"
|
||||
get "design/upsale" => "custom_styles#upsale", as: "custom_style_upsale"
|
||||
get "design/upsell" => "custom_styles#upsell", as: "custom_style_upsell"
|
||||
post "design/colors" => "custom_styles#update_colors", as: "update_design_colors"
|
||||
post "design/themes" => "custom_styles#update_themes", as: "update_design_themes"
|
||||
post "design/export_cover_text_color" => "custom_styles#update_export_cover_text_color",
|
||||
@@ -710,7 +710,7 @@ Rails.application.routes.draw do
|
||||
get "/new" => "work_packages#index", on: :collection, as: "new", state: "new"
|
||||
# We do not want to match the work package export routes
|
||||
get "(/*state)" => "work_packages#show", on: :member, as: "", constraints: { id: /\d+/, state: /(?!(shares|split_view)).+/ }
|
||||
get "/share_upsale" => "work_packages#share_upsale", on: :collection, as: "share_upsale"
|
||||
get "/share_upsell" => "work_packages#share_upsell", on: :collection, as: "share_upsell"
|
||||
get "/edit" => "work_packages#show", on: :member, as: "edit"
|
||||
end
|
||||
|
||||
@@ -868,8 +868,8 @@ Rails.application.routes.draw do
|
||||
end
|
||||
|
||||
scope :notifications do
|
||||
get "/share_upsale" => "notifications#share_upsale", as: "notifications_share_upsale"
|
||||
get "/date_alerts" => "notifications#date_alerts", as: "notifications_date_alert_upsale"
|
||||
get "/share_upsell" => "notifications#share_upsell", as: "notifications_share_upsell"
|
||||
get "/date_alerts" => "notifications#date_alerts", as: "notifications_date_alert_upsell"
|
||||
get "/", to: "notifications#index", as: :notifications_center
|
||||
end
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
upsale:
|
||||
upsell:
|
||||
href: https://www.openproject.org/enterprise-edition
|
||||
label: homescreen.links.upgrade_enterprise_edition
|
||||
upsale_benefits_features:
|
||||
upsell_benefits_features:
|
||||
href: https://www.openproject.org/enterprise-edition/#premium-features
|
||||
label: noscript_learn_more
|
||||
upsale_benefits_installation:
|
||||
upsell_benefits_installation:
|
||||
href: https://www.openproject.org/enterprise-edition/#installation
|
||||
label: noscript_learn_more
|
||||
upsale_benefits_security:
|
||||
upsell_benefits_security:
|
||||
href: https://www.openproject.org/enterprise-edition/#security-features
|
||||
label: noscript_learn_more
|
||||
upsale_benefits_support:
|
||||
upsell_benefits_support:
|
||||
href: https://www.openproject.org/enterprise-edition/#professional-support
|
||||
label: noscript_learn_more
|
||||
upsale_get_quote:
|
||||
upsell_get_quote:
|
||||
href: https://www.openproject.org/request-quote/
|
||||
label: admin.enterprise.get_quote
|
||||
user_guides:
|
||||
|
||||
@@ -185,7 +185,7 @@ OpenProject 10 significantly improves the performance, especially for the work p
|
||||
- Fixed: Overview page: click on link opens edit mode, instead of following the link [[#30948](https://community.openproject.org/wp/30948)]
|
||||
- Fixed: Custom Action. Exception on OP Edge. "undefined method `iso8601' for "%CURRENT_DATE%":String" [[#30949](https://community.openproject.org/wp/30949)]
|
||||
- Fixed: Wrong formatting of scroll bars on overview page in Windows [[#30951](https://community.openproject.org/wp/30951)]
|
||||
- Fixed: Boards. EE upsale. Translation missing. [[#30954](https://community.openproject.org/wp/30954)]
|
||||
- Fixed: Boards. EE upsell. Translation missing. [[#30954](https://community.openproject.org/wp/30954)]
|
||||
- Fixed: Drag and drop in embedded tables does not work (or should be deactivated for now) [[#30967](https://community.openproject.org/wp/30967)]
|
||||
- Fixed: Picture slider in for BCF issues even if there is only one picture [[#30969](https://community.openproject.org/wp/30969)]
|
||||
- Fixed: Members: Error message overlapping form but not X-icon to remove it [[#30971](https://community.openproject.org/wp/30971)]
|
||||
|
||||
@@ -95,7 +95,7 @@ We added a new “Files” tab in the work package details. This way, you will h
|
||||
- Changed: Updated placement and design of the create button in the sidebar \[[#40958](https://community.openproject.org/wp/40958)\]
|
||||
- Changed: Replace work strips on the team planner calendar with full cards \[[#40962](https://community.openproject.org/wp/40962)\]
|
||||
- Changed: Change scrolling behavior of team planner \[[#40981](https://community.openproject.org/wp/40981)\]
|
||||
- Changed: Show "Start trial" button in EE upsale templates \[[#40990](https://community.openproject.org/wp/40990)\]
|
||||
- Changed: Show "Start trial" button in EE upsell templates \[[#40990](https://community.openproject.org/wp/40990)\]
|
||||
- Changed: Add team planner to onboarding tour \[[#41050](https://community.openproject.org/wp/41050)\]
|
||||
- Changed: Empty team planner view needs some more love \[[#41073](https://community.openproject.org/wp/41073)\]
|
||||
- Changed: The date indicators must update when dragging a card in the planner horizontally \[[#41075](https://community.openproject.org/wp/41075)\]
|
||||
|
||||
+2
-2
@@ -63,8 +63,8 @@ export class BoardPartitionedPageComponent extends UntilDestroyedMixin {
|
||||
unnamedBoard: this.I18n.t('js.boards.label_unnamed_board'),
|
||||
loadingError: 'No such board found',
|
||||
addList: this.I18n.t('js.boards.add_list'),
|
||||
upsaleBoards: this.I18n.t('js.boards.upsale.teaser_text'),
|
||||
upsaleCheckOutLink: this.I18n.t('js.work_packages.table_configuration.upsale.check_out_link'),
|
||||
upsellBoards: this.I18n.t('js.boards.upsell.teaser_text'),
|
||||
upsellCheckOutLink: this.I18n.t('js.work_packages.table_configuration.upsell.check_out_link'),
|
||||
unnamed_list: this.I18n.t('js.boards.label_unnamed_list'),
|
||||
};
|
||||
|
||||
|
||||
@@ -41,14 +41,14 @@ import { EnterpriseTrialService } from 'core-app/features/enterprise/enterprise-
|
||||
})
|
||||
export class EnterpriseBaseComponent {
|
||||
public text = {
|
||||
button_trial: this.I18n.t('js.admin.enterprise.upsale.button_start_trial'),
|
||||
button_book: this.I18n.t('js.admin.enterprise.upsale.button_book_now'),
|
||||
link_quote: this.I18n.t('js.admin.enterprise.upsale.link_quote'),
|
||||
become_hero: this.I18n.t('js.admin.enterprise.upsale.become_hero'),
|
||||
you_contribute: this.I18n.t('js.admin.enterprise.upsale.you_contribute'),
|
||||
button_trial: this.I18n.t('js.admin.enterprise.upsell.button_start_trial'),
|
||||
button_book: this.I18n.t('js.admin.enterprise.upsell.button_book_now'),
|
||||
link_quote: this.I18n.t('js.admin.enterprise.upsell.link_quote'),
|
||||
become_hero: this.I18n.t('js.admin.enterprise.upsell.become_hero'),
|
||||
you_contribute: this.I18n.t('js.admin.enterprise.upsell.you_contribute'),
|
||||
email_not_received: this.I18n.t('js.admin.enterprise.trial.email_not_received'),
|
||||
enterprise_edition: this.I18n.t('js.admin.enterprise.upsale.text'),
|
||||
confidence: this.I18n.t('js.admin.enterprise.upsale.confidence'),
|
||||
enterprise_edition: this.I18n.t('js.admin.enterprise.upsell.text'),
|
||||
confidence: this.I18n.t('js.admin.enterprise.upsell.confidence'),
|
||||
try_another_email: this.I18n.t('js.admin.enterprise.trial.try_another_email'),
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ export class FreeTrialButtonComponent implements OnInit {
|
||||
email = '';
|
||||
|
||||
public text = {
|
||||
button_trial: this.I18n.t('js.admin.enterprise.upsale.button_start_trial'),
|
||||
button_trial: this.I18n.t('js.admin.enterprise.upsell.button_start_trial'),
|
||||
confirmation_info: (date:string, email:string):string => this.I18n.t('js.admin.enterprise.trial.confirmation_info', {
|
||||
date,
|
||||
email,
|
||||
|
||||
+2
-2
@@ -81,8 +81,8 @@ export class QueryFilterComponent implements OnInit {
|
||||
open_filter: this.I18n.t('js.filter.description.text_open_filter'),
|
||||
close_filter: this.I18n.t('js.filter.description.text_close_filter'),
|
||||
label_filter_add: this.I18n.t('js.work_packages.label_filter_add'),
|
||||
upsale_for_more: this.I18n.t('js.filter.upsale_for_more'),
|
||||
upsale_link: this.I18n.t('js.filter.upsale_link'),
|
||||
upsell_for_more: this.I18n.t('js.filter.upsell_for_more'),
|
||||
upsell_link: this.I18n.t('js.filter.upsell_link'),
|
||||
button_delete: this.I18n.t('js.button_delete'),
|
||||
incompatible_filter: this.I18n.t('js.work_packages.filters.baseline_incompatible'),
|
||||
};
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
<svg
|
||||
*ngIf="showEnterpriseIcon"
|
||||
op-enterprise-addons-icon
|
||||
class="button--icon upsale-colored"
|
||||
class="button--icon upsell-colored"
|
||||
size="small"
|
||||
></svg>
|
||||
|
||||
|
||||
+2
-2
@@ -27,8 +27,8 @@ export class WpTableConfigurationFiltersTabComponent implements TabComponent, On
|
||||
selectedColumns: this.I18n.t('js.description_selected_columns'),
|
||||
multiSelectLabel: this.I18n.t('js.work_packages.label_column_multiselect'),
|
||||
|
||||
upsaleRelationColumns: this.I18n.t('js.modals.upsale_relation_columns'),
|
||||
upsaleRelationColumnsLink: this.I18n.t('js.modals.upsale_relation_columns_link'),
|
||||
upsellRelationColumns: this.I18n.t('js.modals.upsell_relation_columns'),
|
||||
upsellRelationColumnsLink: this.I18n.t('js.modals.upsell_relation_columns_link'),
|
||||
};
|
||||
|
||||
constructor(
|
||||
|
||||
+2
-2
@@ -52,8 +52,8 @@ export class WpTableConfigurationHighlightingTabComponent implements TabComponen
|
||||
priority: this.I18n.t('js.work_packages.table_configuration.highlighting_mode.priority'),
|
||||
entire_row_by: this.I18n.t('js.work_packages.table_configuration.highlighting_mode.entire_row_by'),
|
||||
},
|
||||
upsaleAttributeHighlighting: this.I18n.t('js.work_packages.table_configuration.upsale.attribute_highlighting'),
|
||||
upsaleCheckOutLink: this.I18n.t('js.work_packages.table_configuration.upsale.check_out_link'),
|
||||
upsellAttributeHighlighting: this.I18n.t('js.work_packages.table_configuration.upsell.attribute_highlighting'),
|
||||
upsellCheckOutLink: this.I18n.t('js.work_packages.table_configuration.upsell.check_out_link'),
|
||||
more_info_link: enterpriseDocsUrl.tableHighlighting,
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -52,8 +52,8 @@ export class WpTableConfigurationModalComponent extends OpModalComponent impleme
|
||||
applyButton: this.I18n.t('js.modals.button_apply'),
|
||||
cancelButton: this.I18n.t('js.modals.button_cancel'),
|
||||
|
||||
upsaleRelationColumns: this.I18n.t('js.modals.upsale_relation_columns'),
|
||||
upsaleRelationColumnsLink: this.I18n.t('js.modals.upsale_relation_columns_link'),
|
||||
upsellRelationColumns: this.I18n.t('js.modals.upsell_relation_columns'),
|
||||
upsellRelationColumnsLink: this.I18n.t('js.modals.upsell_relation_columns_link'),
|
||||
};
|
||||
|
||||
public onDataUpdated = new EventEmitter<void>();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.upsale-actions
|
||||
.upsell-actions
|
||||
display: flex
|
||||
flex-wrap: wrap
|
||||
align-items: baseline
|
||||
@@ -6,14 +6,14 @@
|
||||
.openproject--static-link
|
||||
margin-left: 1rem
|
||||
|
||||
.upsale--information-container
|
||||
.upsell--information-container
|
||||
margin-bottom: 40px
|
||||
|
||||
.token-form textarea
|
||||
font-family: "Lucida Console", Monaco, monospace
|
||||
max-width: 560px
|
||||
|
||||
.widget-box--blocks--upsale-buttons
|
||||
.widget-box--blocks--upsell-buttons
|
||||
display: flex
|
||||
justify-content: flex-end
|
||||
|
||||
@@ -22,32 +22,32 @@
|
||||
text-decoration: none
|
||||
margin: 0.625rem 0.625rem 0 0
|
||||
|
||||
.widget-box--blocks--upsale-info-button
|
||||
.widget-box--blocks--upsell-info-button
|
||||
display: flex
|
||||
justify-content: center
|
||||
align-items: center
|
||||
|
||||
.upsale-colored
|
||||
color: var(--enterprise-upsale-color) !important
|
||||
.upsell-colored
|
||||
color: var(--enterprise-upsell-color) !important
|
||||
|
||||
.upsale-colored-background
|
||||
background: var(--enterprise-upsale-color) !important
|
||||
.upsell-colored-background
|
||||
background: var(--enterprise-upsell-color) !important
|
||||
color: white !important
|
||||
|
||||
.widget-box--blocks--upsale-title
|
||||
.widget-box--blocks--upsell-title
|
||||
font-weight: 400
|
||||
font-size: 20px
|
||||
margin-top: 10px
|
||||
display: flex
|
||||
|
||||
.widget-box--blocks--upsale-text
|
||||
.widget-box--blocks--upsell-text
|
||||
line-height: 24px
|
||||
margin-top: 10px
|
||||
|
||||
.widget-box--blocks--upsale-description
|
||||
.widget-box--blocks--upsell-description
|
||||
margin: 10px 0 10px 0
|
||||
display: flex
|
||||
|
||||
.widget-box--blocks--upsale-image
|
||||
.widget-box--blocks--upsell-image
|
||||
width: 200px
|
||||
margin: auto
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
.advanced-filters--add-filter
|
||||
max-width: 100%
|
||||
|
||||
.ee-attribute-highlighting-upsale
|
||||
.ee-attribute-highlighting-upsell
|
||||
margin-bottom: 1.5rem
|
||||
|
||||
.tab-content
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
.widget-box
|
||||
box-shadow: none
|
||||
|
||||
&.upsale
|
||||
&.upsell
|
||||
background: var(--bgColor-accent-muted)
|
||||
flex-basis: 100%
|
||||
border-color: var(--borderColor-accent-muted)
|
||||
|
||||
@@ -137,6 +137,6 @@
|
||||
--split-screen-width: 550px;
|
||||
--full-view-split-right-width: 550px;
|
||||
--gantt-split-width: 50%;
|
||||
--enterprise-upsale-color: #FB8F44;
|
||||
--enterprise-upsale-border-color: var(--borderColor-severe-muted);
|
||||
--enterprise-upsell-color: #FB8F44;
|
||||
--enterprise-upsell-border-color: var(--borderColor-severe-muted);
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ module Redmine::MenuManager::MenuHelper
|
||||
title_text = "".html_safe + content_tag(:span, caption, class: "ellipsis") + badge_for(item)
|
||||
if item.enterprise_feature.present? && !EnterpriseToken.allows_to?(item.enterprise_feature)
|
||||
title_text += ("".html_safe + render(Primer::Beta::Octicon.new(icon: "op-enterprise-addons",
|
||||
classes: "upsale-colored",
|
||||
classes: "upsell-colored",
|
||||
ml: 2)))
|
||||
end
|
||||
title_text
|
||||
|
||||
@@ -91,8 +91,8 @@ module Redmine::MenuManager::TopMenu::HelpMenu
|
||||
title: I18n.t("top_menu.help_and_support")
|
||||
end
|
||||
unless EnterpriseToken.hide_banners? && EnterpriseToken.active?
|
||||
result << static_link_item(:upsale,
|
||||
href_suffix: "/?utm_source=unknown&utm_medium=op-instance&utm_campaign=ee-upsale-help-menu")
|
||||
result << static_link_item(:upsell,
|
||||
href_suffix: "/?utm_source=unknown&utm_medium=op-instance&utm_campaign=ee-upsell-help-menu")
|
||||
end
|
||||
result << static_link_item(:user_guides)
|
||||
result << content_tag(:li, class: "op-menu--item") do
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
OpenProject provides multiple ways to render upsale components. This document describes the different components and how to use them.
|
||||
OpenProject provides multiple ways to render upsell components. This document describes the different components and how to use them.
|
||||
|
||||
# Requirements
|
||||
|
||||
@@ -13,8 +13,8 @@ To use the banners below, you need to add translations and links.
|
||||
|
||||
**Translations**
|
||||
|
||||
You need to add translations for the feature and the upsale banner.
|
||||
The feature translation is used in the feature list, the upsale translation is used in the upsale banner.
|
||||
You need to add translations for the feature and the upsell banner.
|
||||
The feature translation is used in the feature list, the upsell translation is used in the upsell banner.
|
||||
|
||||
This is the default convention:
|
||||
|
||||
@@ -25,7 +25,7 @@ en:
|
||||
feature:
|
||||
# ...
|
||||
your_feature_name: "Fancy EE feature!"
|
||||
upsale:
|
||||
upsell:
|
||||
# ...
|
||||
your_feature_name:
|
||||
title: "Title of the banner"
|
||||
@@ -36,7 +36,7 @@ en:
|
||||
```
|
||||
|
||||
You can optionally provide a `i18n_scope` parameter to the components below to customize the place to look
|
||||
for the upsale translation keys.
|
||||
for the upsell translation keys.
|
||||
|
||||
**docs/static_links.yml**
|
||||
|
||||
@@ -46,21 +46,21 @@ file under the `enterprise_features` section.
|
||||
|
||||
If none is provided, the link will go to the enterprise landing page.
|
||||
|
||||
## Full-page upsale pages
|
||||
## Full-page upsell pages
|
||||
|
||||
Use when: You have a feature video / image and a full page to fill
|
||||
|
||||
```ruby
|
||||
render EnterpriseEdition::UpsalePageComponent.new(
|
||||
render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:enterprise_feature,
|
||||
video: "enterprise/some-video.mp4",
|
||||
# or image: "enterprise/some-image.png"
|
||||
)
|
||||
```
|
||||
|
||||
<%= embed OpenProject::EnterpriseEdition::UpsalePageComponentPreview, :default, panels: %i[] %>
|
||||
<%= embed OpenProject::EnterpriseEdition::UpsellPageComponentPreview, :default, panels: %i[] %>
|
||||
|
||||
## Inline upsale banners
|
||||
## Inline upsell banners
|
||||
|
||||
Use when: You want to show content below the banners, e.g. in administrative setting pages.
|
||||
|
||||
@@ -70,7 +70,7 @@ render EnterpriseEdition::BannerComponent.new(:enterprise_feature)
|
||||
|
||||
<%= embed OpenProject::EnterpriseEdition::BannerComponentPreview, :default, panels: %i[] %>
|
||||
|
||||
## Dismissible upsale banners
|
||||
## Dismissible upsell banners
|
||||
|
||||
Use when: You want to show a feature to regular users, but allow them to hide it for good.
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ module OpenProject
|
||||
# ee:
|
||||
# # Title used unless it is overwritten for the specific feature
|
||||
# title: "Enterprise add-on"
|
||||
# upsale:
|
||||
# upsell:
|
||||
# [feature_key]:
|
||||
# # Title used for this feature only. If this is missing, the default feature key is used.
|
||||
# title: "A splendid feature"
|
||||
|
||||
+6
-6
@@ -31,8 +31,8 @@
|
||||
module OpenProject
|
||||
module EnterpriseEdition
|
||||
# @logical_path OpenProject/EnterpriseEdition
|
||||
class UpsalePageComponentPreview < Lookbook::Preview
|
||||
# Render a full-screen upsale page, with optional video or image features.
|
||||
class UpsellPageComponentPreview < Lookbook::Preview
|
||||
# Render a full-screen upsell page, with optional video or image features.
|
||||
# The easiest way to render the banner component is to provide a feature key and
|
||||
# have the assorted data structures match the expectations.
|
||||
# The text will be fetched from the i18n files:
|
||||
@@ -41,7 +41,7 @@ module OpenProject
|
||||
# ee:
|
||||
# # Title used unless it is overwritten for the specific feature
|
||||
# title: "Enterprise add-on"
|
||||
# upsale:
|
||||
# upsell:
|
||||
# [feature_key]:
|
||||
# # Title used for this feature only. If this is missing, the default title is used.
|
||||
# title: "A splendid feature"
|
||||
@@ -61,12 +61,12 @@ module OpenProject
|
||||
# The href is inferred from `OpenProject::Static::Links.enterprise_features[feature_key][:href]`.
|
||||
# @display min_height 450px
|
||||
def default
|
||||
render ::EnterpriseEdition::UpsalePageComponent.new(:customize_life_cycle)
|
||||
render ::EnterpriseEdition::UpsellPageComponent.new(:customize_life_cycle)
|
||||
end
|
||||
|
||||
def video
|
||||
render(
|
||||
::EnterpriseEdition::UpsalePageComponent
|
||||
::EnterpriseEdition::UpsellPageComponent
|
||||
.new(:date_alerts,
|
||||
video: "enterprise/date-alert-notifications.mp4")
|
||||
)
|
||||
@@ -74,7 +74,7 @@ module OpenProject
|
||||
|
||||
def image
|
||||
render(
|
||||
::EnterpriseEdition::UpsalePageComponent
|
||||
::EnterpriseEdition::UpsellPageComponent
|
||||
.new(:ldap_groups, image: "enterprise/ldap-groups.jpg")
|
||||
)
|
||||
end
|
||||
@@ -24,5 +24,5 @@
|
||||
end %>
|
||||
<% end %>
|
||||
|
||||
<%= render EnterpriseEdition::BannerComponent.new(:sso_auth_providers, i18n_scope: "saml.providers.upsale")%>
|
||||
<%= render EnterpriseEdition::BannerComponent.new(:sso_auth_providers, i18n_scope: "saml.providers.upsell")%>
|
||||
<%= render ::Saml::Providers::TableComponent.new(rows: @providers) %>
|
||||
|
||||
@@ -66,7 +66,7 @@ en:
|
||||
are used to provide user attributes in OpenProject
|
||||
metadata:
|
||||
dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:"
|
||||
upsale:
|
||||
upsell:
|
||||
title: "Single Sign-On (SSO) with SAML"
|
||||
description: Connect OpenProject to a SAML identity provider
|
||||
request_attributes:
|
||||
|
||||
@@ -193,7 +193,7 @@ RSpec.describe "SAML administration CRUD",
|
||||
end
|
||||
|
||||
context "without EE", without_ee: %i[sso_auth_providers] do
|
||||
it "renders the upsale page" do
|
||||
it "renders the upsell page" do
|
||||
visit "/admin/saml/providers"
|
||||
expect(page).to have_enterprise_banner(:professional)
|
||||
end
|
||||
|
||||
@@ -9,7 +9,7 @@ en:
|
||||
project_module_board_view: "Boards"
|
||||
|
||||
ee:
|
||||
upsale:
|
||||
upsell:
|
||||
board_view:
|
||||
description: 'Would you like to automate your workflows with Boards? Advanced boards are an Enterprise add-on. Please upgrade to a paid plan.'
|
||||
boards:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# English strings go here
|
||||
en:
|
||||
ee:
|
||||
upsale:
|
||||
upsell:
|
||||
board_view:
|
||||
description: 'Would you like to automate your workflows with Boards? Advanced boards are an Enterprise add-on. Please upgrade to a paid plan.'
|
||||
js:
|
||||
|
||||
@@ -234,6 +234,6 @@ en:
|
||||
ee:
|
||||
features:
|
||||
time_entry_time_restrictions: Require exact time tracking
|
||||
upsale:
|
||||
upsell:
|
||||
time_entry_time_restrictions:
|
||||
description: "Improve your time tracking by requiring exact start and finish times when logging time."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
en:
|
||||
ee:
|
||||
upsale:
|
||||
upsell:
|
||||
grid_widget_wp_graph:
|
||||
description: "Some widgets, like the work package graph widget, are only available in the Enterprise edition."
|
||||
js:
|
||||
|
||||
@@ -57,7 +57,7 @@ module Pages
|
||||
def expect_add_widget_enterprise_edition_notice(row_number, column_number, location)
|
||||
within_add_widget_modal(row_number, column_number, location) do
|
||||
expect(page).to have_content(I18n.t("js.grid.add_widget"))
|
||||
expect(page).to have_text "Available only through the Basic enterprise plan"
|
||||
expect(page).to have_text "Available starting with the Basic enterprise plan"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ module LdapGroups
|
||||
|
||||
def check_ee
|
||||
unless EnterpriseToken.allows_to?(:ldap_groups)
|
||||
render template: "ldap_groups/synchronized_groups/upsale"
|
||||
render template: "ldap_groups/synchronized_groups/upsell"
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
@@ -56,7 +56,7 @@ module LdapGroups
|
||||
|
||||
def check_ee
|
||||
unless EnterpriseToken.allows_to?(:ldap_groups)
|
||||
render template: "ldap_groups/synchronized_groups/upsale"
|
||||
render template: "ldap_groups/synchronized_groups/upsell"
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
<% html_title(t(:label_administration), t("ldap_groups.synchronized_groups.plural")) -%>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(:ldap_groups, image: "enterprise/ldap-groups.jpg") %>
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(:ldap_groups, image: "enterprise/ldap-groups.jpg") %>
|
||||
@@ -1,6 +1,6 @@
|
||||
en:
|
||||
ee:
|
||||
upsale:
|
||||
upsell:
|
||||
ldap_groups:
|
||||
title: 'LDAP group synchronization'
|
||||
description: 'Synchronize LDAP groups with OpenProject groups to manage users, change their permissions and facilitate user management across groups.'
|
||||
@@ -82,5 +82,5 @@ en:
|
||||
Without it, only existing accounts in OpenProject will be added to groups.
|
||||
dn_text: 'Enter the full DN of the group in LDAP'
|
||||
group_text: 'Select an existing OpenProject group that members of the LDAP group shall be synchronized with'
|
||||
upsale:
|
||||
upsell:
|
||||
description: 'Take advantage of synchronised LDAP groups to manage users, change their permissions and facilitate user management across groups.'
|
||||
|
||||
@@ -9,9 +9,9 @@ RSpec.describe "LDAP group sync administration spec", :js do
|
||||
end
|
||||
|
||||
context "without EE" do
|
||||
it "shows upsale" do
|
||||
expect(page).to have_enterprise_upsale_page
|
||||
expect(page).to have_text "Available only through the Premium enterprise plan"
|
||||
it "shows upsell" do
|
||||
expect(page).to have_enterprise_upsell_page
|
||||
expect(page).to have_text "Available starting with the Premium enterprise plan"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ RSpec.describe "LDAP group sync administration spec", :js do
|
||||
let!(:auth_source) { create(:ldap_auth_source, name: "ldap") }
|
||||
|
||||
it "allows synced group administration flow" do
|
||||
expect(page).not_to have_enterprise_upsale_page
|
||||
expect(page).not_to have_enterprise_upsell_page
|
||||
# Open create menu
|
||||
page.find_test_selector("op-admin-synchronized-groups--button-new", text: I18n.t(:button_add)).click
|
||||
# Create group
|
||||
|
||||
@@ -40,5 +40,5 @@
|
||||
end
|
||||
%>
|
||||
|
||||
<%= render EnterpriseEdition::BannerComponent.new(:sso_auth_providers, i18n_scope: "openid_connect.providers.upsale") %>
|
||||
<%= render EnterpriseEdition::BannerComponent.new(:sso_auth_providers, i18n_scope: "openid_connect.providers.upsell") %>
|
||||
<%= render ::OpenIDConnect::Providers::TableComponent.new(rows: @providers) %>
|
||||
|
||||
@@ -96,7 +96,7 @@ en:
|
||||
name: Microsoft Entra
|
||||
custom:
|
||||
name: Custom
|
||||
upsale:
|
||||
upsell:
|
||||
title: "Single Sign-On (SSO) with OpenID connect"
|
||||
description: Connect OpenProject to an OpenID connect identity provider
|
||||
label_add_new: Add a new OpenID provider
|
||||
|
||||
@@ -173,7 +173,7 @@ RSpec.describe "OIDC administration CRUD",
|
||||
end
|
||||
|
||||
context "without EE", without_ee: %i[sso_auth_providers] do
|
||||
it "renders the upsale page" do
|
||||
it "renders the upsell page" do
|
||||
visit "/admin/openid_connect/providers"
|
||||
expect(page).to have_enterprise_banner(:premium)
|
||||
end
|
||||
|
||||
@@ -79,7 +79,7 @@ class Storages::Admin::StoragesController < ApplicationController
|
||||
@target_step = @wizard.prepare_next_step
|
||||
end
|
||||
|
||||
def upsale; end
|
||||
def upsell; end
|
||||
|
||||
def create
|
||||
service_result = Storages::Storages::CreateService
|
||||
@@ -268,7 +268,7 @@ class Storages::Admin::StoragesController < ApplicationController
|
||||
|
||||
def require_ee_token_for_one_drive
|
||||
if ::Storages::Storage::one_drive_without_ee_token?(@provider_type)
|
||||
redirect_to action: :upsale
|
||||
redirect_to action: :upsell
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ end %>
|
||||
) do |item|
|
||||
item.with_trailing_visual_icon(
|
||||
icon: "op-enterprise-addons",
|
||||
classes: "upsale-colored"
|
||||
classes: "upsell-colored"
|
||||
) if ::Storages::Storage::one_drive_without_ee_token?(provider_type)
|
||||
end
|
||||
end
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<% html_title(t(:label_administration), t("storages.upsale.title")) -%>
|
||||
<% html_title(t(:label_administration), t("storages.upsell.title")) -%>
|
||||
|
||||
<%= render EnterpriseEdition::UpsalePageComponent.new(:one_drive_sharepoint_file_storage,
|
||||
<%= render EnterpriseEdition::UpsellPageComponent.new(:one_drive_sharepoint_file_storage,
|
||||
video: "enterprise/one_drive_sharepoint_integration.mp4",
|
||||
i18n_scope: "storages.upsale") %>
|
||||
i18n_scope: "storages.upsell") %>
|
||||
@@ -484,7 +484,7 @@ en:
|
||||
description: Add a storage to see them here.
|
||||
heading: You don't have any storages yet.
|
||||
successful_storage_connection: Storage connected successfully! Remember to activate the storage in the Projects tab for each desired project to use it.
|
||||
upsale:
|
||||
upsell:
|
||||
description: |-
|
||||
Integrate your OneDrive/SharePoint as a file storage with OpenProject. Upload files and link them directly to
|
||||
work packages in a project.
|
||||
|
||||
@@ -66,7 +66,7 @@ Rails.application.routes.draw do
|
||||
delete :replace_oauth_application
|
||||
end
|
||||
|
||||
get :upsale, on: :collection
|
||||
get :upsell, on: :collection
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -266,7 +266,7 @@ RSpec.describe "Admin Create a new file storage",
|
||||
end
|
||||
|
||||
context "with OneDrive Storage and enterprise token missing", with_ee: false do
|
||||
it "renders enterprise icon and redirects to upsale", :webmock do
|
||||
it "renders enterprise icon and redirects to upsell", :webmock do
|
||||
visit admin_settings_storages_path
|
||||
|
||||
within(".SubHeader") do
|
||||
@@ -278,7 +278,7 @@ RSpec.describe "Admin Create a new file storage",
|
||||
end
|
||||
end
|
||||
|
||||
expect(page).to have_current_path(upsale_admin_settings_storages_path)
|
||||
expect(page).to have_current_path(upsell_admin_settings_storages_path)
|
||||
wait_for { page }.to have_text("OneDrive/SharePoint integration")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ module ::TeamPlanner
|
||||
include Layout
|
||||
before_action :load_and_authorize_in_optional_project
|
||||
before_action :build_plan_view, only: %i[new]
|
||||
before_action :require_ee_token, except: %i[upsale]
|
||||
before_action :require_ee_token, except: %i[upsell]
|
||||
before_action :find_plan_view, only: %i[destroy]
|
||||
|
||||
menu_item :team_planner_view
|
||||
@@ -38,7 +38,7 @@ module ::TeamPlanner
|
||||
render layout: "angular/angular"
|
||||
end
|
||||
|
||||
def upsale; end
|
||||
def upsell; end
|
||||
|
||||
def destroy
|
||||
if @view.destroy
|
||||
@@ -52,7 +52,7 @@ module ::TeamPlanner
|
||||
|
||||
def require_ee_token
|
||||
unless EnterpriseToken.allows_to?(:team_planner_view)
|
||||
redirect_to action: :upsale
|
||||
redirect_to action: :upsell
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<% html_title(t(:label_administration), t("ee.upsale.team_planner_view.title")) -%>
|
||||
|
||||
<%=
|
||||
render EnterpriseEdition::UpsalePageComponent.new(
|
||||
:team_planner_view,
|
||||
video: "enterprise/team-planner-animation.mp4"
|
||||
)
|
||||
%>
|
||||
@@ -0,0 +1,8 @@
|
||||
<% html_title(t(:label_administration), t("ee.upsell.team_planner_view.title")) -%>
|
||||
|
||||
<%=
|
||||
render EnterpriseEdition::UpsellPageComponent.new(
|
||||
:team_planner_view,
|
||||
video: "enterprise/team-planner-animation.mp4"
|
||||
)
|
||||
%>
|
||||
@@ -11,7 +11,7 @@ en:
|
||||
ee:
|
||||
feature_names:
|
||||
team_planner_view: "Team planner"
|
||||
upsale:
|
||||
upsell:
|
||||
team_planner_view:
|
||||
title: "Team planner"
|
||||
description: "Get a complete overview of your team’s planning with Team Planner. Stretch, shorten and drag-and-drop work packages to modify dates, move them or change assignees."
|
||||
|
||||
@@ -5,7 +5,7 @@ Rails.application.routes.draw do
|
||||
collection do
|
||||
get "/", to: "team_planner/team_planner#overview"
|
||||
get "/new", to: "team_planner/team_planner#new"
|
||||
get "/upsale", to: "team_planner/team_planner#upsale", as: :upsale
|
||||
get "/upsell", to: "team_planner/team_planner#upsell", as: :upsell
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ Rails.application.routes.draw do
|
||||
as: :team_planners do
|
||||
collection do
|
||||
get "menu" => "team_planner/menus#show"
|
||||
get "/upsale", to: "team_planner/team_planner#upsale", as: :upsale
|
||||
get "/upsell", to: "team_planner/team_planner#upsell", as: :upsell
|
||||
get "/new", to: "team_planner/team_planner#show", as: :new
|
||||
end
|
||||
|
||||
|
||||
@@ -40,13 +40,13 @@ module OpenProject::TeamPlanner
|
||||
dependencies: :work_package_tracking,
|
||||
enterprise_feature: "team_planner_view" do
|
||||
permission :view_team_planner,
|
||||
{ "team_planner/team_planner": %i[index show upsale overview],
|
||||
{ "team_planner/team_planner": %i[index show upsell overview],
|
||||
"team_planner/menus": %i[show] },
|
||||
permissible_on: :project,
|
||||
dependencies: %i[view_work_packages],
|
||||
contract_actions: { team_planner: %i[read] }
|
||||
permission :manage_team_planner,
|
||||
{ "team_planner/team_planner": %i[index show new create destroy upsale] },
|
||||
{ "team_planner/team_planner": %i[index show new create destroy upsell] },
|
||||
permissible_on: :project,
|
||||
dependencies: %i[view_team_planner
|
||||
add_work_packages
|
||||
|
||||
+5
-5
@@ -40,21 +40,21 @@ RSpec.describe "Team planner index",
|
||||
login_as current_user
|
||||
end
|
||||
|
||||
it "redirects routes to upsale" do
|
||||
it "redirects routes to upsell" do
|
||||
visit team_planners_path
|
||||
|
||||
expect(page).to have_enterprise_upsale_page(:premium)
|
||||
expect(page).to have_enterprise_upsell_page(:premium)
|
||||
|
||||
visit project_team_planners_path(project)
|
||||
|
||||
expect(page).to have_enterprise_upsale_page(:premium)
|
||||
expect(page).to have_enterprise_upsell_page(:premium)
|
||||
|
||||
visit new_project_team_planners_path(project)
|
||||
|
||||
expect(page).to have_enterprise_upsale_page(:premium)
|
||||
expect(page).to have_enterprise_upsell_page(:premium)
|
||||
|
||||
visit project_team_planner_path(project, id: "new")
|
||||
|
||||
expect(page).to have_enterprise_upsale_page(:premium)
|
||||
expect(page).to have_enterprise_upsell_page(:premium)
|
||||
end
|
||||
end
|
||||
@@ -48,10 +48,10 @@ RSpec.describe "Team planner routing" do
|
||||
end
|
||||
|
||||
context "with :project_id" do
|
||||
it "routes to team_planner#upsale" do
|
||||
it "routes to team_planner#upsell" do
|
||||
expect(subject)
|
||||
.to route(:get, "/projects/foobar/team_planners/upsale")
|
||||
.to(controller: "team_planner/team_planner", action: :upsale, project_id: "foobar")
|
||||
.to route(:get, "/projects/foobar/team_planners/upsell")
|
||||
.to(controller: "team_planner/team_planner", action: :upsell, project_id: "foobar")
|
||||
end
|
||||
|
||||
it "routes to team_planner#show" do
|
||||
@@ -62,10 +62,10 @@ RSpec.describe "Team planner routing" do
|
||||
end
|
||||
|
||||
context "without :project_id" do
|
||||
it "routes to team_planner#upsale" do
|
||||
it "routes to team_planner#upsell" do
|
||||
expect(subject)
|
||||
.to route(:get, "/team_planners/upsale")
|
||||
.to(controller: "team_planner/team_planner", action: :upsale)
|
||||
.to route(:get, "/team_planners/upsell")
|
||||
.to(controller: "team_planner/team_planner", action: :upsell)
|
||||
end
|
||||
|
||||
it "routes to team_planner#new" do
|
||||
|
||||
@@ -86,7 +86,7 @@ en:
|
||||
text_2fa_enabled: "Upon every login, this user will be requested to enter a OTP token from their default 2FA device."
|
||||
text_2fa_disabled: "The user did not set up a 2FA device through their 'My account page'"
|
||||
only_sms_allowed: "Only SMS delivery can be set up for other users."
|
||||
upsale:
|
||||
upsell:
|
||||
title: "Two-factor authentication"
|
||||
description: "Strenghten the security of your OpenProject instance by offering (or enforcing) two-factor authentification to all project members."
|
||||
backup_codes:
|
||||
|
||||
@@ -39,7 +39,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
let(:component_test_selector) { "op-enterprise-banner" }
|
||||
let(:features) { nil }
|
||||
let(:enforce_available_locales) { I18n.config.enforce_available_locales }
|
||||
let(:i18n_upsale) do
|
||||
let(:i18n_upsell) do
|
||||
{
|
||||
some_enterprise_feature: {
|
||||
title:,
|
||||
@@ -63,7 +63,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
features: {
|
||||
some_enterprise_feature: "Enterprise feature translation"
|
||||
},
|
||||
upsale: i18n_upsale
|
||||
upsell: i18n_upsell
|
||||
}
|
||||
}
|
||||
end
|
||||
@@ -166,7 +166,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
end
|
||||
|
||||
context "without a title, but a description_html" do
|
||||
let(:i18n_upsale) do
|
||||
let(:i18n_upsell) do
|
||||
{
|
||||
some_enterprise_feature: {
|
||||
description_html: description
|
||||
@@ -179,7 +179,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
end
|
||||
|
||||
context "without a title, but a description" do
|
||||
let(:i18n_upsale) do
|
||||
let(:i18n_upsell) do
|
||||
{
|
||||
some_enterprise_feature: {
|
||||
description:
|
||||
@@ -192,7 +192,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
end
|
||||
|
||||
context "with a more specific title in the i18n file" do
|
||||
let(:i18n_upsale) do
|
||||
let(:i18n_upsell) do
|
||||
{
|
||||
some_enterprise_feature: {
|
||||
title:,
|
||||
@@ -209,7 +209,7 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
{
|
||||
my: {
|
||||
custom: {
|
||||
upsale: {
|
||||
upsell: {
|
||||
title: "Foo",
|
||||
description: "Bar"
|
||||
}
|
||||
@@ -224,13 +224,13 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do
|
||||
end
|
||||
let(:expected_title) { "Foo" }
|
||||
let(:expected_description) { "Bar" }
|
||||
let(:component_args) { { i18n_scope: "my.custom.upsale" } }
|
||||
let(:component_args) { { i18n_scope: "my.custom.upsell" } }
|
||||
|
||||
it_behaves_like "renders the component"
|
||||
end
|
||||
|
||||
context "without a description key in the i18n file" do
|
||||
let(:i18n_upsale) do
|
||||
let(:i18n_upsell) do
|
||||
{
|
||||
some_enterprise_feature: {}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ RSpec.describe CustomActionsController, with_ee: %i[custom_actions] do
|
||||
end
|
||||
|
||||
it "renders enterprise_token" do
|
||||
expect(response).to render_template "custom_actions/upsale"
|
||||
expect(response).to render_template "custom_actions/upsell"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,18 +50,18 @@ RSpec.describe CustomStylesController do
|
||||
allow(EnterpriseToken).to receive(:current).and_return(nil)
|
||||
end
|
||||
|
||||
it "redirects to #upsale" do
|
||||
expect(subject).to redirect_to action: :upsale
|
||||
it "redirects to #upsell" do
|
||||
expect(subject).to redirect_to action: :upsell
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#upsale" do
|
||||
subject { get :upsale }
|
||||
describe "#upsell" do
|
||||
subject { get :upsell }
|
||||
|
||||
it "renders upsale" do
|
||||
it "renders upsell" do
|
||||
expect(subject).to be_successful
|
||||
expect(subject).to render_template "upsale"
|
||||
expect(subject).to render_template "upsell"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ RSpec.describe EnterprisesController do
|
||||
|
||||
it "still renders #show with form" do
|
||||
expect(response).not_to render_template partial: "enterprises/_current"
|
||||
expect(response.body).to have_css ".upsale-benefits"
|
||||
expect(response.body).to have_css ".upsell-benefits"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -196,13 +196,13 @@ RSpec.describe SharesController do
|
||||
context "when the strategy allows viewing but enterprise check fails" do
|
||||
before do
|
||||
allow_any_instance_of(SharingStrategies::ProjectQueryStrategy).to receive_messages(viewable?: true, manageable?: false)
|
||||
allow(Shares::ProjectQueries::UpsaleComponent).to receive(:new).and_call_original
|
||||
allow(Shares::ProjectQueries::UpsellComponent).to receive(:new).and_call_original
|
||||
end
|
||||
|
||||
it "renders the upsale component" do
|
||||
it "renders the upsell component" do
|
||||
make_request
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(Shares::ProjectQueries::UpsaleComponent).to have_received(:new)
|
||||
expect(Shares::ProjectQueries::UpsellComponent).to have_received(:new)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -230,13 +230,13 @@ RSpec.describe SharesController do
|
||||
allow_any_instance_of(SharingStrategies::ProjectQueryStrategy).to receive_messages(
|
||||
viewable?: false, manageable?: true
|
||||
)
|
||||
allow(Shares::ProjectQueries::UpsaleComponent).to receive(:new).and_call_original
|
||||
allow(Shares::ProjectQueries::UpsellComponent).to receive(:new).and_call_original
|
||||
end
|
||||
|
||||
it "renders the upsale component" do
|
||||
it "renders the upsell component" do
|
||||
make_request
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(Shares::ProjectQueries::UpsaleComponent).to have_received(:new)
|
||||
expect(Shares::ProjectQueries::UpsellComponent).to have_received(:new)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ RSpec.describe "Tabs navigation and content switching on the admin/design page"
|
||||
visit custom_style_path(tab: "interface")
|
||||
end
|
||||
|
||||
it "redirects to upsale page" do
|
||||
expect(page).to have_enterprise_upsale_page
|
||||
expect(page).to have_text "Available only through the Basic enterprise plan"
|
||||
it "redirects to upsell page" do
|
||||
expect(page).to have_enterprise_upsell_page
|
||||
expect(page).to have_text "Available starting with the Basic enterprise plan"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user