Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

On Boarding Flow #1770

Merged
merged 13 commits into from
Apr 3, 2020
Merged
1 change: 0 additions & 1 deletion app/assets/stylesheets/alchemy/base.scss
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ hr {
max-width: 500px;
margin: 2em auto;
padding: 4*$default-padding;
border: $default-border;
background: $medium-gray;
border-radius: $default-border-radius;
}
Expand Down
5 changes: 5 additions & 0 deletions app/assets/stylesheets/alchemy/forms.scss
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@ form {
.input .hint {
@include form-hint;
margin-left: $form-left-width;

a[href] {
color: $very-dark-gray;
text-decoration: underline;
}
}

.submit {
Expand Down
37 changes: 32 additions & 5 deletions app/controllers/alchemy/admin/languages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,54 @@
module Alchemy
module Admin
class LanguagesController < ResourcesController
before_action unless: -> { Alchemy::Site.any? } do
flash[:warning] = Alchemy.t('Please create a site first.')
redirect_to admin_sites_path
end
before_action :load_current_site, only: %i[index new]

def index
@query = Language.on_current_site.ransack(search_filter_params[:q])
@query = Language.on_site(@current_site).ransack(search_filter_params[:q])
@query.sorts = default_sort_order if @query.sorts.empty?
@languages = @query.result.page(params[:page] || 1).per(items_per_page)
end

def new
@language = Language.new(
site: @current_site,
page_layout: Config.get(:default_language)['page_layout']
)
end

def create
tvdeyen marked this conversation as resolved.
Show resolved Hide resolved
@language = Alchemy::Language.new(resource_params)
if @language.save
flash[:notice] = Alchemy.t('Language successfully created')
redirect_to alchemy.admin_pages_path(language_id: @language)
else
render :new
end
end

def destroy
if @language.destroy
flash[:notice] = Alchemy.t('Language successfully removed')
else
flash[:warning] = @language.errors.full_messages.to_sentence
end
do_redirect_to alchemy.admin_languages_path
end

def switch
set_alchemy_language(params[:language_id])
do_redirect_to request.referer || alchemy.admin_dashboard_path
end

private

def load_current_site
@current_site = Alchemy::Site.current
if @current_site.nil?
flash[:warning] = Alchemy.t('Please create a site first.')
redirect_to admin_sites_path
end
end
end
end
end
6 changes: 3 additions & 3 deletions app/controllers/alchemy/admin/layoutpages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ module Admin
class LayoutpagesController < Alchemy::Admin::BaseController
authorize_resource class: :alchemy_admin_layoutpages

include Alchemy::Admin::LanguageNeededRedirect
include Alchemy::Admin::CurrentLanguage

helper Alchemy::Admin::PagesHelper

def index
@layout_root = Page.find_or_create_layout_root_for(Language.current.id)
@layout_root = Page.find_or_create_layout_root_for(@current_language.id)
@languages = Language.on_current_site
end

def edit
@page = Page.find(params[:id])
@page_layouts = PageLayout.layouts_with_own_for_select(@page.page_layout, Language.current.id, true)
@page_layouts = PageLayout.layouts_with_own_for_select(@page.page_layout, @current_language.id, true)
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/alchemy/admin/nodes_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module Alchemy
module Admin
class NodesController < Admin::ResourcesController
include Alchemy::Admin::LanguageNeededRedirect
include Alchemy::Admin::CurrentLanguage

def index
@root_nodes = Node.language_root_nodes
Expand All @@ -13,7 +13,7 @@ def new
@node = Node.new(
site: Alchemy::Site.current,
parent_id: params[:parent_id],
language: Language.current
language: @current_language
)
end

Expand Down
20 changes: 10 additions & 10 deletions app/controllers/alchemy/admin/pages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class PagesController < Alchemy::Admin::BaseController
authorize! :index, :alchemy_admin_pages
end

include Alchemy::Admin::LanguageNeededRedirect
include Alchemy::Admin::CurrentLanguage

before_action :set_translation,
except: [:show]
Expand All @@ -29,7 +29,7 @@ class PagesController < Alchemy::Admin::BaseController

def index
if !@page_root
@language = Language.current
@language = @current_language
@languages_with_page_tree = Language.on_current_site.with_root_page
@page_layouts = PageLayout.layouts_for_select(@language.id)
end
Expand Down Expand Up @@ -57,9 +57,9 @@ def info

def new
@page ||= Page.new(layoutpage: params[:layoutpage] == 'true', parent_id: params[:parent_id])
@page_layouts = PageLayout.layouts_for_select(Language.current&.id, @page.layoutpage?)
@page_layouts = PageLayout.layouts_for_select(@current_language.id, @page.layoutpage?)
@clipboard = get_clipboard('pages')
@clipboard_items = Page.all_from_clipboard_for_select(@clipboard, Language.current&.id, @page.layoutpage?)
@clipboard_items = Page.all_from_clipboard_for_select(@clipboard, @current_language.id, @page.layoutpage?)
end

def create
Expand Down Expand Up @@ -90,7 +90,7 @@ def edit

# Set page configuration like page names, meta tags and states.
def configure
@page_layouts = PageLayout.layouts_with_own_for_select(@page.page_layout, Language.current.id, @page.layoutpage?)
@page_layouts = PageLayout.layouts_with_own_for_select(@page.page_layout, @current_language.id, @page.layoutpage?)
end

# Updates page
Expand Down Expand Up @@ -139,7 +139,7 @@ def link
@attachments = Attachment.all.collect { |f|
[f.name, download_attachment_path(id: f.id, name: f.urlname)]
}
@url_prefix = prefix_locale? ? "#{Language.current.code}/" : ""
@url_prefix = prefix_locale? ? "#{@current_language.code}/" : ""
end

def fold
Expand Down Expand Up @@ -210,11 +210,11 @@ def order
end

def flush
Language.current.pages.flushables.update_all(published_at: Time.current)
@current_language.pages.flushables.update_all(published_at: Time.current)
# We need to ensure, that also all layoutpages get the +published_at+ timestamp set,
# but not set to public true, because the cache_key for an element is +published_at+
# and we don't want the layout pages to be present in +Page.published+ scope.
Language.current.pages.flushable_layoutpages.update_all(published_at: Time.current)
@current_language.pages.flushable_layoutpages.update_all(published_at: Time.current)
respond_to { |format| format.js }
end

Expand All @@ -224,7 +224,7 @@ def copy_of_language_root
page_copy = Page.copy(
language_root_to_copy_from,
language_id: params[:languages][:new_lang_id],
language_code: Language.current.code
language_code: @current_language.code
)
page_copy.move_to_child_of Page.root
page_copy
Expand Down Expand Up @@ -368,7 +368,7 @@ def paste_from_clipboard
end

def set_root_page
@page_root = Language.current_root_page
@page_root = @current_language.root_page
end

def serialized_page_tree
Expand Down
18 changes: 18 additions & 0 deletions app/controllers/alchemy/admin/sites_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,24 @@
module Alchemy
module Admin
class SitesController < ResourcesController
def create
tvdeyen marked this conversation as resolved.
Show resolved Hide resolved
@site = Alchemy::Site.new(resource_params)
if @site.save
flash[:notice] = Alchemy.t('Please create a default language for this site.')
redirect_to alchemy.admin_languages_path(site_id: @site)
else
render :new
end
end

def destroy
if @site.destroy
flash[:notice] = Alchemy.t('Site successfully removed')
else
flash[:warning] = @site.errors.full_messages.to_sentence
end
do_redirect_to alchemy.admin_sites_path
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@

module Alchemy
module Admin
module LanguageNeededRedirect
module CurrentLanguage
extend ActiveSupport::Concern

included do
before_action unless: -> { Alchemy::Language.current }, only: :index do
before_action :load_current_language
end

private

def load_current_language
@current_language = Alchemy::Language.current
if @current_language.nil?
flash[:warning] = Alchemy.t('Please create a language first.')
redirect_to admin_languages_path
end
Expand Down
14 changes: 4 additions & 10 deletions app/models/alchemy/language.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ class Language < BaseRecord
after_update :unpublish_pages,
if: :should_unpublish_pages?

before_destroy :check_for_default
after_destroy :delete_language_root_page
before_destroy if: -> { pages.any? } do
errors.add(:pages, :still_present)
throw(:abort)
end

scope :published, -> { where(public: true) }
scope :with_root_page, -> { joins(:pages).where(Page.table_name => {language_root: true}) }
Expand Down Expand Up @@ -176,14 +178,6 @@ def set_pages_language
pages.update_all language_code: code
end

def check_for_default
raise DefaultLanguageNotDeletable if default?
end

def delete_language_root_page
root_page.try(:destroy) && layout_root_page.try(:destroy)
end

def should_unpublish_pages?
if active_record_5_1?
saved_changes[:public] == [true, false]
Expand Down
5 changes: 5 additions & 0 deletions app/models/alchemy/site.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ class Site < BaseRecord
# associations
has_many :languages

before_destroy if: -> { languages.any? } do
errors.add(:languages, :still_present)
throw(:abort)
end

scope :published, -> { where(public: true) }

# concerns
Expand Down
10 changes: 5 additions & 5 deletions app/views/alchemy/admin/languages/_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<%= alchemy_form_for [alchemy, :admin, @language] do |f| %>
<%= alchemy_form_for [alchemy, :admin, language] do |f| %>
<%= f.input :name, autofocus: true %>
<%= f.input :language_code, placeholder: Alchemy.t(:language_code_placeholder) %>
<%= f.input :country_code,
as: 'string',
placeholder: Alchemy.t(:country_code_placeholder),
hint: Alchemy.t(:country_code_foot_note) %>
<% if @language.errors[:locale].present? || @language.locale.present? %>
<% if language.errors[:locale].present? || language.locale.present? %>
<%= f.input :locale,
collection: @language.matching_locales.presence || ::I18n.available_locales,
selected: @language.locale || @language.language_code || ::I18n.default_locale.to_s,
collection: language.matching_locales.presence || ::I18n.available_locales,
selected: language.locale || language.language_code || ::I18n.default_locale.to_s,
input_html: {class: 'alchemy_selectbox'} %>
<% end %>
<%= f.input :frontpage_name %>
Expand All @@ -19,6 +19,6 @@
input_html: {class: 'alchemy_selectbox'} %>
<%= f.input :public %>
<%= f.input :default %>
<%= f.hidden_field :site_id, value: Alchemy::Site.current.id %>
<%= f.hidden_field :site_id %>
<%= f.submit Alchemy.t(:save) %>
<% end %>
1 change: 1 addition & 0 deletions app/views/alchemy/admin/languages/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<%= render 'form', language: @language %>
27 changes: 23 additions & 4 deletions app/views/alchemy/admin/languages/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
<% content_for :toolbar do %>
<div class="toolbar_buttons">
<%= render 'alchemy/admin/partials/site_select' %>
<%= toolbar_button icon: :plus,
<%= toolbar_button(
icon: :plus,
label: label_title,
url: new_resource_path,
title: label_title,
Expand All @@ -12,12 +13,30 @@
title: label_title,
size: "430x415"
},
if_permitted_to: [:create, Alchemy::Language] %>
if_permitted_to: [:create, Alchemy::Language]
) if @languages.any? %>
</div>
<%= render 'alchemy/admin/partials/search_form' %>
<% end %>

<div id="archive_all" class="resources-table-wrapper">
<%= render 'alchemy/admin/resources/table_header' %>
<%= render 'table' %>
<% if @languages.any? %>
<%= render 'alchemy/admin/resources/table_header' %>
<%= render 'table' %>
<% elsif search_filter_params[:q].present? %>
<%= render_message { Alchemy.t('Nothing found') } %>
<% else %>
<div class="panel no-resource-found">
<%= render_message do %>
<%== Alchemy.t('alchemy/language', scope: :no_resource_found) %>
<% end %>
<%= render 'form', language: Alchemy::Language.new(
Alchemy::Config.get(:default_language).merge(
site: Alchemy::Site.current,
default: true,
public: true
)
) %>
</div>
<% end %>
</div>
1 change: 1 addition & 0 deletions app/views/alchemy/admin/languages/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<%= render 'form', language: @language %>
4 changes: 2 additions & 2 deletions app/views/alchemy/admin/nodes/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
size: '450x120'
},
if_permitted_to: [:create, Alchemy::Node]
) %>
) if @root_nodes.any? %>
</div>
<% end %>

Expand All @@ -31,7 +31,7 @@
<% else %>
<div class="panel no-resource-found">
<%= render_message do %>
<%= Alchemy.t(:no_resource_found) % { resource: Alchemy.t(:menu) } %>
<%== Alchemy.t('alchemy/node', scope: :no_resource_found) %>
<% end %>
<%= render 'form', node: Alchemy::Node.new(
site: Alchemy::Site.current,
Expand Down
8 changes: 8 additions & 0 deletions app/views/alchemy/admin/sites/_form.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<%= alchemy_form_for site, url: alchemy.admin_sites_path(site, search_filter_params) do |f| %>
<%= f.input :host, hint: resource_handler.help_text_for(name: :host).html_safe %>
<%= f.input :name %>
<%= f.input :public %>
<%= f.input :aliases, hint: resource_handler.help_text_for(name: :aliases), input_html: {rows: 4} %>
<%= f.input :redirect_to_primary_host %>
<%= f.submit Alchemy.t(:save) %>
<% end %>
1 change: 1 addition & 0 deletions app/views/alchemy/admin/sites/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<%= render 'form', site: @site %>
Loading