diff --git a/app/controllers/admin/communication/websites_controller.rb b/app/controllers/admin/communication/websites_controller.rb index 9b80c06793ff4faf892daf1e07a2667f358a7564..1936d45763cbe41195cc9df1ef2253576e3c0fc5 100644 --- a/app/controllers/admin/communication/websites_controller.rb +++ b/app/controllers/admin/communication/websites_controller.rb @@ -1,7 +1,7 @@ class Admin::Communication::WebsitesController < Admin::Communication::Websites::ApplicationController include Admin::Localizable - before_action :set_feature_nav, only: [:edit, :update] + before_action :set_feature_nav, only: [:edit, :edit_language, :edit_technical, :update] def index @websites = @websites.filter_by(params[:filters], current_language) @@ -52,6 +52,20 @@ class Admin::Communication::WebsitesController < Admin::Communication::Websites: add_breadcrumb t('admin.subnav.settings') end + def edit_language + @l10n = @website.localization_for(current_language) + breadcrumb + add_breadcrumb t('admin.subnav.settings'), edit_admin_communication_website_path(@website, website_id: nil) + add_breadcrumb current_language + end + + def edit_technical + @l10n = @website.localization_for(current_language) + breadcrumb + add_breadcrumb t('admin.subnav.settings'), edit_admin_communication_website_path(@website, website_id: nil) + add_breadcrumb t('admin.communication.website.technical.label') + end + def create if @website.save_and_sync redirect_to [:admin, @website], notice: t('admin.successfully_created_html', model: @website.to_s_in(current_language)) diff --git a/app/views/admin/communication/websites/_form.html.erb b/app/views/admin/communication/websites/_form.html.erb deleted file mode 100644 index 3522a5facff72cdb7f26829b23e4a20532c868aa..0000000000000000000000000000000000000000 --- a/app/views/admin/communication/websites/_form.html.erb +++ /dev/null @@ -1,146 +0,0 @@ -<%= simple_form_for [:admin, website] do |f| %> - <%= f.simple_fields_for :localizations, l10n do |lf| %> - <%= f.error_notification %> - <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> - - <%= lf.hidden_field :language_id, value: current_language.id %> - - <div class="row"> - <div class="col-lg-4"> - <%= lf.input :name %> - <% if website.localizations.many? %> - <%= lf.input :published, - wrapper: :custom_boolean_switch, - disabled: l10n.published? && website.active_languages.one? %> - <%= f.association :default_language, - include_blank: false, - collection: website.languages, - label_method: lambda { |l| language_name(l.iso_code) } %> - <% end %> - </div> - <div class="col-lg-8"> - <section> - <p class="float-end blocks__category__description"><%= t "admin.communication.website.editorial.description" %></p> - <h2 class="h3 category blocks__category__title"><%= t "admin.communication.website.editorial.label" %></h2> - <%= osuny_panel Communication::Website.human_attribute_name('features') do %> - <div class="row"> - <div class="col-lg-6"> - <%= f.input :feature_posts %> - </div> - <div class="col-lg-6"> - <%= f.input :feature_agenda %> - </div> - <div class="col-lg-6"> - <%= f.input :feature_portfolio %> - </div> - </div> - <% end %> - - <%= osuny_panel Communication::Website.human_attribute_name('appearance') do %> - <div class="row"> - <div class="col-lg-6"> - <p class="form-text"> - <%= t('admin.communication.website.default_image') %> - </p> - <%= f.input :default_image, - as: :single_deletable_file, - direct_upload: true, - hint: images_formats_accepted_hint, - input_html: { accept: default_images_formats_accepted }, - preview: 300 %> - <%= f.input :default_shared_image, - as: :single_deletable_file, - direct_upload: true, - hint: images_formats_accepted_hint, - input_html: { accept: default_images_formats_accepted }, - preview: 300 %> - </div> - </div> - <% end %> - - <%= osuny_panel Communication::Website.human_attribute_name('feature_agenda') do %> - <div class="row"> - <div class="col-lg-6"> - <%= f.input :default_time_zone, - collection: time_zones_for_select, - include_blank: false, - selected: f.object.default_time_zone || Time.zone.name %> - </div> - </div> - <% end %> - - <%= osuny_panel Communication::Website.human_attribute_name('social') do %> - <div class="row"> - <div class="col-lg-6"> - <p><%= t('admin.communication.website.social.free') %></p> - <%= lf.input :social_email %> - <%= lf.input :social_mastodon %> - <%= lf.input :social_peertube %> - </div> - <div class="col-lg-6"> - <p><%= t('admin.communication.website.social.private') %></p> - <%= lf.input :social_x %> - <%= lf.input :social_github %> - <%= lf.input :social_linkedin %> - <%= lf.input :social_youtube %> - <%= lf.input :social_vimeo %> - <%= lf.input :social_instagram %> - <%= lf.input :social_facebook %> - <%= lf.input :social_tiktok %> - </div> - </div> - <% end %> - </section> - - <section> - <p class="float-end blocks__category__description"><%= t "admin.communication.website.technical.description" %></p> - <h2 class="h3 category blocks__category__title"><%= t "admin.communication.website.technical.label" %></h2> - - <%= osuny_panel t('metadata') do %> - <%= f.input :url %> - <%= f.input :in_production %> - <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/website.about_' %> - <% end %> - - <%= osuny_panel t('communication.website.showcase') do %> - <%= f.input :in_showcase, hint: link_to(t('admin.communication.website.see_showcase'), "https://#{ENV['OSUNY_SHOWCASE']}", target: :_blank) %> - <%= f.association :showcase_tags, as: :check_boxes %> - <% end %> - - <%= osuny_panel t('communication.website.hosting') do %> - <%= f.input :deuxfleurs_hosting, hint: website.deuxfleurs_identifier %> - <%= f.input :autoupdate_theme %> - <%= f.input :plausible_url %> - <% end %> - - <%= osuny_panel t('communication.website.git') do %> - <%= f.input :git_provider, include_blank: false %> - <%= f.input :git_endpoint %> - <%= f.input :access_token, - as: :string, - placeholder: masked_string(f.object.access_token), - hint: t("simple_form.hints.communication_website.access_token_#{f.object.access_token.blank? ? 'without' : 'with'}_existing").html_safe, - input_html: { - autocomplete: 'access_token', - role: 'presentation', - value: '' - } - %> - <%= f.input :repository %> - <%= f.input :git_branch %> - <%= f.input :deployment_status_badge, - as: :string, - input_html: { - autocomplete: 'deployment_status_badge', - role: 'presentation' - } - %> - <% end %> - </section> - </div> - </div> - <% content_for :action_bar_right do %> - <%= submit f %> - <% end %> - <% end %> -<% end %> diff --git a/app/views/admin/communication/websites/edit.html.erb b/app/views/admin/communication/websites/edit.html.erb index 49eca46c66968feca9cf4ae9d8db4a4f52f35084..f5ed33f404925b240ac6fa80977639cab15f3588 100644 --- a/app/views/admin/communication/websites/edit.html.erb +++ b/app/views/admin/communication/websites/edit.html.erb @@ -1,3 +1,50 @@ <% content_for :title, t('admin.subnav.settings') %> -<%= render 'form', website: @website, l10n: @l10n %> +<%= simple_form_for [:admin, @website] do |f| %> + <%= f.simple_fields_for :localizations, @l10n do |lf| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + + <%= lf.hidden_field :language_id, value: current_language.id %> + + <%= render 'admin/communication/websites/form/features', f: f %> + <%= osuny_separator %> + <div class="row"> + <div class="col-lg-4"> + <%= lf.input :name unless @website.persisted? %> + <% if @website.localizations.many? %> + <%= f.association :default_language, + include_blank: false, + collection: website.languages, + label_method: lambda { |l| language_name(l.iso_code) } %> + <% end %> + <%= f.input :default_time_zone, + collection: time_zones_for_select, + include_blank: false, + selected: f.object.default_time_zone || Time.zone.name %> + </div> + <div class="col-lg-4"> + <%= f.input :default_image, + as: :single_deletable_file, + direct_upload: true, + hint: images_formats_accepted_hint, + input_html: { accept: default_images_formats_accepted }, + preview: 300 %> + <p class="form-text"> + <%= t('admin.communication.website.default_image') %> + </p> + </div> + <div class="col-lg-4"> + <%= f.input :default_shared_image, + as: :single_deletable_file, + direct_upload: true, + hint: images_formats_accepted_hint, + input_html: { accept: default_images_formats_accepted }, + preview: 300 %> + </div> + </div> + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> + <% end %> +<% end %> diff --git a/app/views/admin/communication/websites/edit_language.html.erb b/app/views/admin/communication/websites/edit_language.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..3b42b091c1ba86d424cbe6e2d8134de837f7d277 --- /dev/null +++ b/app/views/admin/communication/websites/edit_language.html.erb @@ -0,0 +1,50 @@ +<% content_for :title, current_language %> + +<%= simple_form_for [:admin, @website] do |f| %> + <%= f.simple_fields_for :localizations, @l10n do |lf| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + + <%= lf.hidden_field :language_id, value: current_language.id %> + + <div class="row"> + <div class="col-lg-4"> + <% if @website.localizations.many? %> + <%= lf.input :published, + wrapper: :custom_boolean_switch, + disabled: @l10n.published? && @website.active_languages.one? %> + <% end %> + <%= lf.input :name %> + </div> + <div class="col-lg-8"> + <%= osuny_panel Communication::Website.human_attribute_name('social') do %> + <div class="row"> + <div class="col-lg-6"> + <p><%= t('admin.communication.website.social.free') %></p> + <%= lf.input :social_email %> + <%= lf.input :social_mastodon %> + <%= lf.input :social_peertube %> + </div> + <div class="col-lg-6"> + <p><%= t('admin.communication.website.social.private') %></p> + <%= lf.input :social_x %> + <%= lf.input :social_github %> + <%= lf.input :social_linkedin %> + <%= lf.input :social_youtube %> + <%= lf.input :social_vimeo %> + <%= lf.input :social_instagram %> + <%= lf.input :social_facebook %> + <%= lf.input :social_tiktok %> + </div> + </div> + <% end %> + </div> + <div class="col-lg-6 col-xxl-4"> + </div> + </div> + + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> + <% end %> +<% end %> diff --git a/app/views/admin/communication/websites/edit_technical.html.erb b/app/views/admin/communication/websites/edit_technical.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..1d4f000ff18b86aea2e986cbac7425d2d3e81f3c --- /dev/null +++ b/app/views/admin/communication/websites/edit_technical.html.erb @@ -0,0 +1,60 @@ +<% content_for :title, t('admin.communication.website.technical.label') %> + +<%= simple_form_for [:admin, @website] do |f| %> + <%= f.simple_fields_for :localizations, @l10n do |lf| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + + <%= lf.hidden_field :language_id, value: current_language.id %> + + <div class="row"> + <div class="col-lg-6 col-xxl-4"> + <%= osuny_panel t('metadata') do %> + <%= f.input :url %> + <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/website.about_' %> + <%= f.input :in_production %> + <% end %> + </div> + <div class="col-lg-6 col-xxl-4"> + <%= osuny_panel t('communication.website.git') do %> + <%= f.input :git_provider, include_blank: false %> + <%= f.input :git_endpoint %> + <%= f.input :access_token, + as: :string, + placeholder: masked_string(f.object.access_token), + hint: t("simple_form.hints.communication_website.access_token_#{f.object.access_token.blank? ? 'without' : 'with'}_existing").html_safe, + input_html: { + autocomplete: 'access_token', + role: 'presentation', + value: '' + } + %> + <%= f.input :repository %> + <%= f.input :git_branch %> + <%= f.input :deployment_status_badge, + as: :string, + input_html: { + autocomplete: 'deployment_status_badge', + role: 'presentation' + } + %> + <% end %> + </div> + <div class="col-lg-6 col-xxl-4"> + <%= osuny_panel t('communication.website.hosting') do %> + <%= f.input :deuxfleurs_hosting, hint: @website.deuxfleurs_identifier %> + <%= f.input :autoupdate_theme %> + <%= f.input :plausible_url %> + <% end %> + <%= osuny_panel t('communication.website.showcase') do %> + <%= f.input :in_showcase, hint: link_to(t('admin.communication.website.see_showcase'), "https://#{ENV['OSUNY_SHOWCASE']}", target: :_blank) %> + <%= f.association :showcase_tags, as: :check_boxes %> + <% end %> + </div> + </div> + + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> + <% end %> +<% end %> diff --git a/app/views/admin/communication/websites/form/_features.html.erb b/app/views/admin/communication/websites/form/_features.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..57758dd226c53695e83351d3d304fb953a683738 --- /dev/null +++ b/app/views/admin/communication/websites/form/_features.html.erb @@ -0,0 +1,13 @@ +<%= osuny_panel Communication::Website.human_attribute_name('features') do %> + <div class="row"> + <div class="col-lg-4"> + <%= f.input :feature_posts %> + </div> + <div class="col-lg-4"> + <%= f.input :feature_agenda %> + </div> + <div class="col-lg-4"> + <%= f.input :feature_portfolio %> + </div> + </div> +<% end %> \ No newline at end of file diff --git a/app/views/admin/communication/websites/new.html.erb b/app/views/admin/communication/websites/new.html.erb index 568aedf3f04e0b1cd428338f36b4ba07e19d5fba..c1fda73ede32ab26f140fd46920fc5c81acdcdcb 100644 --- a/app/views/admin/communication/websites/new.html.erb +++ b/app/views/admin/communication/websites/new.html.erb @@ -1,3 +1,20 @@ <% content_for :title, Communication::Website.model_name.human %> -<%= render 'form', website: @website, l10n: @l10n %> +<%= simple_form_for [:admin, @website] do |f| %> + <%= f.simple_fields_for :localizations, @l10n do |lf| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + + <%= lf.hidden_field :language_id, value: current_language.id %> + + <div class="row mb-5"> + <div class="col-lg-6"> + <%= lf.input :name %> + </div> + </div> + <%= render 'admin/communication/websites/form/features', f: f %> + <% content_for :action_bar_right do %> + <%= submit f %> + <% end %> + <% end %> +<% end %> diff --git a/app/views/admin/communication/websites/posts/categories/index.html.erb b/app/views/admin/communication/websites/posts/categories/index.html.erb index f1207a9bed1e0d8cf8b73cc30a61f35045b2eb3f..c86895a8b636f1d24f945297d3bad957c01db509 100644 --- a/app/views/admin/communication/websites/posts/categories/index.html.erb +++ b/app/views/admin/communication/websites/posts/categories/index.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, "#{Communication::Website::Post::Category.model_name.human(count: 2)} (#{@categories.count})" %> +<% content_for :title, Communication::Website::Post::Category.model_name.human(count: 2) %> <%= render 'admin/application/categories/list', root_categories: @root_categories, diff --git a/app/views/admin/communication/websites/show.html.erb b/app/views/admin/communication/websites/show.html.erb index 77ada0a20a3edf5df0c6c8a60448e77839667b4c..f6d37f57f5fc94f49fd098cc0cac68928f1acbf6 100644 --- a/app/views/admin/communication/websites/show.html.erb +++ b/app/views/admin/communication/websites/show.html.erb @@ -1,11 +1,11 @@ <% content_for :title, @l10n %> -<% content_for :title_left do %> +<% content_for :title_right do %> <%= render 'admin/application/favorites/widget', about: @website %> <%= link_to @website.url, @website.url, target: :_blank unless @website.url.blank? %> <div class="small"> - <%= I18n.t("activerecord.attributes.communication/website.about_#{@website.about_type}") %> <% if @website.about.present? %> + <%= I18n.t("activerecord.attributes.communication/website.about_#{@website.about_type}") %> — <%= osuny_link_localized_if can?(:read, @website.about), @website.about, [:admin, @website.about] %> <% end %> </div> diff --git a/config/navigation/admin/communication/website/settings_navigation.rb b/config/navigation/admin/communication/website/settings_navigation.rb index 55ea7ccc8546b50d2eb7573031f7258ac9d149b6..342fb8f44b991073fbb04b90467a0ad10c9db5c2 100644 --- a/config/navigation/admin/communication/website/settings_navigation.rb +++ b/config/navigation/admin/communication/website/settings_navigation.rb @@ -6,6 +6,15 @@ SimpleNavigation::Configuration.run do |navigation| navigation.items do |primary| primary.item :subnav_settings, t('admin.subnav.settings'), - edit_admin_communication_website_path(id: @website.id, website_id: nil) if can?(:edit, @website) + edit_admin_communication_website_path(id: @website.id, website_id: nil), + highlights_on: lambda { + controller_name == "websites" && action_name == "edit" + } if can?(:edit, @website) + primary.item :subnav_language, + current_language, + edit_language_admin_communication_website_path(id: @website.id, website_id: nil) if can?(:edit, @website) + primary.item :subnav_technical, + t('admin.communication.website.technical.label'), + edit_technical_admin_communication_website_path(id: @website.id, website_id: nil) if can?(:edit, @website) end end diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb index 6c163fad9d1a5ad5a79eaddc3c2293798a80828a..c350547757e58009b3de193385c7d42e1fa4d6a4 100644 --- a/config/routes/admin/communication.rb +++ b/config/routes/admin/communication.rb @@ -5,6 +5,8 @@ namespace :communication do end resources :websites do member do + get 'edit/language' => 'websites#edit_language', as: :edit_language + get 'edit/technical' => 'websites#edit_technical', as: :edit_technical get :analytics get :security get :static