diff --git a/app/controllers/admin/communication/websites/pages_controller.rb b/app/controllers/admin/communication/websites/pages_controller.rb index c6c290817899f759a8648cd5b61c6146260fafc3..b7c8e6a92b9c313266f33ed7f1a74eb749d8fce1 100644 --- a/app/controllers/admin/communication/websites/pages_controller.rb +++ b/app/controllers/admin/communication/websites/pages_controller.rb @@ -71,6 +71,11 @@ class Admin::Communication::Websites::PagesController < Admin::Communication::We end end + def duplicate + redirect_to [:admin, @page.duplicate], + notice: t('admin.successfully_duplicated_html', model: @page.to_s) + end + def destroy if @page.is_special_page? redirect_back(fallback_location: admin_communication_website_page_path(@page), alert: t('admin.communication.website.pages.delete_special_page_notice')) diff --git a/app/helpers/admin/application_helper.rb b/app/helpers/admin/application_helper.rb index 16d3c914b50005f4ee99f47f9d664b55b9ca7494..5fc82b00583fa0e3604fcc76d3131ad65797214c 100644 --- a/app/helpers/admin/application_helper.rb +++ b/app/helpers/admin/application_helper.rb @@ -45,6 +45,13 @@ module Admin::ApplicationHelper aria-controls=\"preview\">#{ t 'preview.button'}</button>" end + def duplicate_link(object) + link_to t('admin.duplicate'), + [:duplicate, :admin, object], + method: :post, + class: button_classes + end + def button_classes(additional = '', **options) classes = "btn btn-primary btn-xs #{additional}" classes += ' disabled' if options[:disabled] @@ -68,13 +75,6 @@ module Admin::ApplicationHelper form: form.options.dig(:html, :id) end - def duplicate(object) - link_to t('admin.duplicate'), - [:duplicate, :admin, object], - method: :post, - class: button_classes - end - def prepare_html_for_static(html, university) text = html.to_s text = sanitize text diff --git a/app/models/communication/website/page.rb b/app/models/communication/website/page.rb index ad4e22bd9ef15307423e01999ed6457684374a37..85c2006d56dd76368a4f13c530897f78ceea8c49 100644 --- a/app/models/communication/website/page.rb +++ b/app/models/communication/website/page.rb @@ -145,6 +145,18 @@ class Communication::Website::Page < ApplicationRecord "/#{language.iso_code}" if website.languages.any? && language_id end + def duplicate + page = self.dup + page.published = false + page.save + blocks.each do |block| + b = block.duplicate + b.about = page + b.save + end + page + end + def to_s "#{title}" end diff --git a/app/views/admin/communication/blocks/_list.html.erb b/app/views/admin/communication/blocks/_list.html.erb index 0d172f9597ae2d3d50731ee754de8dad495829f9..4f407759b07e695e229ca57b0b80b846bf9db95f 100644 --- a/app/views/admin/communication/blocks/_list.html.erb +++ b/app/views/admin/communication/blocks/_list.html.erb @@ -32,8 +32,10 @@ <td><%= block.template_kind_i18n %></td> <td><%= render 'admin/application/a11y/status', about: block %></td> <td class="text-end"> - <%= duplicate block %> - <%= edit_link block %> + <div class="btn-group"> + <%= duplicate_link block %> + <%= edit_link block %> + </div> </td> </tr> <% end %> diff --git a/app/views/admin/communication/blocks/edit.html.erb b/app/views/admin/communication/blocks/edit.html.erb index 117a5a802bde92ad9beff96496d4030f4dcc3db9..940c473ec23af60f7dbb6806b0974377a349e4b5 100644 --- a/app/views/admin/communication/blocks/edit.html.erb +++ b/app/views/admin/communication/blocks/edit.html.erb @@ -14,7 +14,7 @@ <%= f.input :title %> </div> <div class="col-xxl-3 col-lg-6"> - <label class="form-label"> </label> + <label class="form-label d-none d-lg-block"> </label> <%= f.input :published %> </div> </div> diff --git a/app/views/admin/communication/websites/pages/_treebranch.html.erb b/app/views/admin/communication/websites/pages/_treebranch.html.erb index 370aac563f0fdb3dffa7a8562a91506164fed5eb..47459b77cb0ef3f89570c4337ac36c47a8e379b9 100644 --- a/app/views/admin/communication/websites/pages/_treebranch.html.erb +++ b/app/views/admin/communication/websites/pages/_treebranch.html.erb @@ -28,6 +28,7 @@ <span class="me-3 show-on-hover"><%= t("communication.website.pages.defaults.#{page.kind}.admin_description") %></span> <% end %> <div class="btn-group"> + <%= duplicate_link page if page.is_regular_page?%> <%= edit_link page %> <%= destroy_link page, confirm_message: page.children.any? ? t('please_confirm_with_children') : t('please_confirm') if page.is_regular_page? %> </div> diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb index 99410189a417e71f2a0fec24e28dc5b8d5786983..c8f3af92d272bf049aa7c52cf9552f8fa054dd93 100644 --- a/config/routes/admin/communication.rb +++ b/config/routes/admin/communication.rb @@ -15,6 +15,7 @@ namespace :communication do get :children get :static get :preview + post :duplicate end end resources :categories, controller: 'websites/categories' do