alchemy_domains 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.md +27 -0
- data/Rakefile +39 -0
- data/app/controllers/alchemy/alchemy_base_controller_extension.rb +60 -0
- data/app/controllers/alchemy/pages_controller_extension.rb +40 -0
- data/app/controllers/alchemy_domains/admin/domains_controller.rb +48 -0
- data/app/controllers/alchemy_domains/admin/localizations_controller.rb +17 -0
- data/app/helpers/base_helper_extension.rb +9 -0
- data/app/helpers/pages_helper_extension.rb +70 -0
- data/app/models/alchemy_domains/domain.rb +48 -0
- data/app/models/alchemy_domains/localization.rb +29 -0
- data/app/models/language_extension.rb +11 -0
- data/app/models/page_extension.rb +8 -0
- data/app/views/alchemy_domains/admin/domains/_domain.html.erb +31 -0
- data/app/views/alchemy_domains/admin/domains/_form.html.erb +36 -0
- data/app/views/alchemy_domains/admin/domains/edit.html.erb +1 -0
- data/app/views/alchemy_domains/admin/domains/index.html.erb +38 -0
- data/app/views/alchemy_domains/admin/domains/new.html.erb +1 -0
- data/app/views/alchemy_domains/admin/localizations/_localization.html.erb +21 -0
- data/config/authorization_rules.rb +8 -0
- data/config/locales/alchemy.de.yml +18 -0
- data/config/module_definition.yml +12 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20120224143542_create_alchemy_domains.rb +10 -0
- data/db/migrate/20120224144137_create_alchemy_localizations.rb +12 -0
- data/lib/alchemy_domains.rb +2 -0
- data/lib/alchemy_domains/engine.rb +25 -0
- data/lib/alchemy_domains/version.rb +3 -0
- metadata +113 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#AlchemyDomains [](http://travis-ci.org/magiclabs/alchemy_domains)
|
2
|
+
|
3
|
+
### This gem extends Alchemy CMS with a Localization/Domain management.
|
4
|
+
If your website is multilingual and the provided languages should depend on the requested (sub)domain, this gem is what you need.
|
5
|
+
|
6
|
+
|
7
|
+
1.) You just need to require it in your `Gemfile`
|
8
|
+
|
9
|
+
gem 'alchemy_domains'
|
10
|
+
|
11
|
+
2.) bundle all dependencies
|
12
|
+
|
13
|
+
bundle install
|
14
|
+
|
15
|
+
3.) Then you need to mount it in your application´s `routes.rb`
|
16
|
+
|
17
|
+
mount AlchemyDomains::Engine => '/'
|
18
|
+
|
19
|
+
4.) Copy the migrations to your application
|
20
|
+
|
21
|
+
rake alchemy_domains:install:migrations
|
22
|
+
|
23
|
+
5.) Migrate the database
|
24
|
+
|
25
|
+
rake db:migrate
|
26
|
+
|
27
|
+
Ready!
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'AlchemyDomains'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.md')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
|
27
|
+
Bundler::GemHelper.install_tasks
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
|
31
|
+
Rake::TestTask.new(:test) do |t|
|
32
|
+
t.libs << 'lib'
|
33
|
+
t.libs << 'test'
|
34
|
+
t.pattern = 'test/**/*_test.rb'
|
35
|
+
t.verbose = false
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
task :default => :test
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Extending Alchemy::BaseController
|
3
|
+
|
4
|
+
module Alchemy
|
5
|
+
BaseController.class_eval do
|
6
|
+
|
7
|
+
prepend_before_filter :set_domain
|
8
|
+
|
9
|
+
def multi_language?
|
10
|
+
Language.current_domain(session[:domain_id]).published.count > 1
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def set_domain
|
16
|
+
@domain = AlchemyDomains::Domain.find_by_hostname(request.host)
|
17
|
+
if @domain
|
18
|
+
session[:domain_id] ||= @domain.id
|
19
|
+
else
|
20
|
+
redirect_to request.protocol + AlchemyDomains::Domain.find_by_default(true).hostname, :status => 301
|
21
|
+
return false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Sets the language for rendering pages in pages controller
|
26
|
+
def set_language
|
27
|
+
if params[:lang].blank? and session[:language_id].blank?
|
28
|
+
set_language_to_default
|
29
|
+
elsif !params[:lang].blank?
|
30
|
+
set_language_from(params[:lang])
|
31
|
+
::I18n.locale = params[:lang]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the language from the given params
|
36
|
+
def set_language_from(language_code_or_id)
|
37
|
+
if language_code_or_id.is_a?(String) && language_code_or_id.match(/^\d+$/)
|
38
|
+
language_code_or_id = language_code_or_id.to_i
|
39
|
+
end
|
40
|
+
case language_code_or_id.class.name
|
41
|
+
when "String"
|
42
|
+
@language = Language.current_domain(session[:domain_id]).find_by_code(language_code_or_id)
|
43
|
+
when "Fixnum"
|
44
|
+
@language = Language.find(language_code_or_id)
|
45
|
+
end
|
46
|
+
store_language_in_session(@language)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Sets the language to the domain´s default language
|
50
|
+
def set_language_to_default
|
51
|
+
@language = AlchemyDomains::Domain.find(session[:domain_id]).default_language
|
52
|
+
if @language
|
53
|
+
store_language_in_session(@language)
|
54
|
+
else
|
55
|
+
raise "No Default Language for requested Domain found! Did you run `rake alchemy:db:seed` task?"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Alchemy
|
2
|
+
|
3
|
+
PagesController.class_eval do
|
4
|
+
|
5
|
+
def perform_search
|
6
|
+
searchresult_page_layouts = PageLayout.get_all_by_attributes({:searchresults => true})
|
7
|
+
if searchresult_page_layouts.any?
|
8
|
+
@search_result_page = Page.find_by_page_layout_and_public_and_language_id(searchresult_page_layouts.first["name"], true, session[:language_id])
|
9
|
+
if !params[:query].blank? && @search_result_page
|
10
|
+
@search_results = []
|
11
|
+
%w(Alchemy::EssenceText Alchemy::EssenceRichtext).each do |e|
|
12
|
+
@search_results += e.constantize.includes(:contents => {:element => :page}).find_with_ferret(
|
13
|
+
"*#{params[:query]}*",
|
14
|
+
{:limit => :all},
|
15
|
+
{:conditions => [
|
16
|
+
'alchemy_pages.language_id = ? AND alchemy_pages.public = ? AND alchemy_pages.layoutpage = ? AND alchemy_pages.restricted = ?',
|
17
|
+
@search_result_page.language_id, true, false, false
|
18
|
+
]}
|
19
|
+
)
|
20
|
+
end
|
21
|
+
return @search_results.sort{ |y, x| x.ferret_score <=> y.ferret_score } if @search_results.any?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# If merged into Alchemy Core, this can be deleted.
|
29
|
+
def load_page
|
30
|
+
return @page if @page
|
31
|
+
if params[:urlname].blank?
|
32
|
+
@page = Page.language_root_for(Language.get_default.id)
|
33
|
+
else
|
34
|
+
@page = Page.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module AlchemyDomains
|
2
|
+
module Admin
|
3
|
+
class DomainsController < Alchemy::Admin::ResourcesController
|
4
|
+
|
5
|
+
def new
|
6
|
+
@domain = Domain.new
|
7
|
+
@languages = Alchemy::Language.published.all
|
8
|
+
@languages.map { |l| @domain.localizations.build(:language => l) }
|
9
|
+
render :layout => !request.xhr?
|
10
|
+
end
|
11
|
+
|
12
|
+
def edit
|
13
|
+
@domain = Domain.find(params[:id])
|
14
|
+
@languages = Alchemy::Language.published.all
|
15
|
+
(@languages - @domain.languages).map { |l| @domain.localizations.build(:language => l) }
|
16
|
+
render :layout => !request.xhr?
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
params[:domain][:localizations_attributes].map do |k, v|
|
21
|
+
if v[:language_id] == "0"
|
22
|
+
v[:_destroy] = '1'
|
23
|
+
v.delete(:language_id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
@domain = Domain.find(params[:id])
|
27
|
+
@domain.update_attributes(params[:domain])
|
28
|
+
render_errors_or_redirect(
|
29
|
+
@domain,
|
30
|
+
url_for({:action => :index}),
|
31
|
+
flash_notice_for_resource_action
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def create
|
36
|
+
params[:domain][:localizations_attributes].delete_if { |k, v| v[:language_id] == "0" }
|
37
|
+
@domain = Domain.new(params[:domain])
|
38
|
+
@domain.save
|
39
|
+
render_errors_or_redirect(
|
40
|
+
@domain,
|
41
|
+
admin_domains_path,
|
42
|
+
flash_notice_for_resource_action
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module AlchemyDomains
|
2
|
+
module Admin
|
3
|
+
class LocalizationsController < Alchemy::Admin::ResourcesController
|
4
|
+
|
5
|
+
def update
|
6
|
+
@localization = Localization.find(params[:id])
|
7
|
+
@localization.update_attributes(params[:localization])
|
8
|
+
render_errors_or_redirect(
|
9
|
+
@localization,
|
10
|
+
admin_domains_path,
|
11
|
+
flash_notice_for_resource_action
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Extending Alchemy::PagesHelper
|
3
|
+
|
4
|
+
module Alchemy
|
5
|
+
PagesHelper.class_eval do
|
6
|
+
|
7
|
+
def language_switcher(options={})
|
8
|
+
default_options = {
|
9
|
+
:linkname => :name,
|
10
|
+
:spacer => "",
|
11
|
+
:link_to_public_child => configuration(:redirect_to_public_child),
|
12
|
+
:link_to_page_with_layout => nil,
|
13
|
+
:show_title => true,
|
14
|
+
:reverse => false,
|
15
|
+
:as_select_box => false,
|
16
|
+
:show_flags => false
|
17
|
+
}
|
18
|
+
options = default_options.merge(options)
|
19
|
+
if multi_language?
|
20
|
+
language_links = []
|
21
|
+
pages = (options[:link_to_public_child] == true) ? Page.language_roots.current_domain(session[:domain_id]) : Page.public_language_roots.current_domain(session[:domain_id])
|
22
|
+
return nil if (pages.blank? || pages.length == 1)
|
23
|
+
pages.each_with_index do |page, i|
|
24
|
+
if(options[:link_to_page_with_layout] != nil)
|
25
|
+
page_found_by_layout = Page.current_domain(session[:domain_id]).where(:page_layout => options[:link_to_page_with_layout].to_s, :language_id => page.language_id)
|
26
|
+
end
|
27
|
+
page = page_found_by_layout || page
|
28
|
+
page = (options[:link_to_public_child] ? (page.first_public_child.blank? ? nil : page.first_public_child) : nil) if !page.public?
|
29
|
+
if !page.blank?
|
30
|
+
active = session[:language_id] == page.language.id
|
31
|
+
linkname = page.language.label(options[:linkname])
|
32
|
+
if options[:as_select_box]
|
33
|
+
language_links << [linkname, show_page_url(:urlname => page.urlname, :lang => page.language.code)]
|
34
|
+
else
|
35
|
+
language_links << link_to(
|
36
|
+
"#{content_tag(:span, '', :class => "flag") if options[:show_flags]}#{ content_tag(:span, linkname)}".html_safe,
|
37
|
+
alchemy.show_page_path(:urlname => page.urlname, :lang => page.language.code),
|
38
|
+
:class => "#{(active ? 'active ' : nil)}#{page.language.code} #{(i == 0) ? 'first' : (i==pages.length-1) ? 'last' : nil}",
|
39
|
+
:title => options[:show_title] ? Alchemy::I18n.t("alchemy.language_links.#{page.language.code}.title", :default => page.language.name) : nil
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# when last iteration and we have just one language_link,
|
44
|
+
# we dont need to render it.
|
45
|
+
if (i==pages.length-1) && language_links.length == 1
|
46
|
+
return nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
return nil if language_links.empty? || language_links.length == 1
|
50
|
+
language_links.reverse! if options[:reverse]
|
51
|
+
if options[:as_select_box]
|
52
|
+
return select_tag(
|
53
|
+
'language',
|
54
|
+
options_for_select(
|
55
|
+
language_links,
|
56
|
+
show_page_url(:urlname => @page.urlname, :lang => @page.language.code)
|
57
|
+
),
|
58
|
+
:onchange => "window.location=this.value"
|
59
|
+
)
|
60
|
+
else
|
61
|
+
raw(language_links.join(options[:spacer]))
|
62
|
+
end
|
63
|
+
else
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
alias_method :language_switches, :language_switcher
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module AlchemyDomains
|
2
|
+
class Domain < ActiveRecord::Base
|
3
|
+
set_table_name :alchemy_domains
|
4
|
+
has_many :localizations, :dependent => :destroy
|
5
|
+
has_many :languages, :through => :localizations
|
6
|
+
accepts_nested_attributes_for :localizations, :allow_destroy => true
|
7
|
+
|
8
|
+
validates_presence_of :hostname
|
9
|
+
validates_presence_of :default, :message => "Es muss eine Standard Domain geben", :if => proc { |m| m.default_changed? && m.default_was == true }
|
10
|
+
validates_format_of :hostname, :with => /^[a-z\d]+([\-\.][a-z\d]+)*\.[a-z]{2,6}/
|
11
|
+
|
12
|
+
before_create :set_to_default, :if => proc { |m| Domain.default.blank? && self.default == false }
|
13
|
+
before_save :remove_old_default, :if => proc { |m| m.default_changed? && m != Domain.default }
|
14
|
+
|
15
|
+
def default_localization
|
16
|
+
self.localizations.where(:default_for_domain => true).first
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_language
|
20
|
+
default_localization.language if default_localization.present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_language_name
|
24
|
+
default_language.name if default_language.present?
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.find_by_hostname_or_default(hostname)
|
28
|
+
Domain.find_by_hostname(hostname) || Domain.default # || raise "No Default Domain Found!"
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.default
|
32
|
+
Domain.find_by_default(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def set_to_default
|
38
|
+
self.default = true
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_old_default
|
42
|
+
domain = Domain.default
|
43
|
+
return true if domain.nil?
|
44
|
+
domain.update_attribute(:default, false)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module AlchemyDomains
|
2
|
+
class Localization < ActiveRecord::Base
|
3
|
+
set_table_name :alchemy_localizations
|
4
|
+
belongs_to :domain
|
5
|
+
belongs_to :language, :class_name => "Alchemy::Language"
|
6
|
+
|
7
|
+
before_create :set_to_default_for_domain, :if => proc { |m| m.domain.default_localization.blank? && self.default_for_domain == false }
|
8
|
+
before_save :remove_old_default, :if => proc { |m| m.default_for_domain_changed? && m != Localization.default_for_domain(domain_id) }
|
9
|
+
|
10
|
+
scope :domain_languages
|
11
|
+
|
12
|
+
def self.default_for_domain(domain_id)
|
13
|
+
find_by_default_for_domain_and_domain_id(true, domain_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def set_to_default_for_domain
|
19
|
+
self.default_for_domain = true
|
20
|
+
end
|
21
|
+
|
22
|
+
def remove_old_default
|
23
|
+
localization = Localization.default_for_domain(domain_id)
|
24
|
+
return true if localization.nil?
|
25
|
+
localization.update_attribute(:default_for_domain, false)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Extending Alchemy::Language
|
3
|
+
|
4
|
+
module Alchemy
|
5
|
+
Language.class_eval do
|
6
|
+
has_many :localizations, :dependent => :destroy, :class_name => "AlchemyDomains::Localization"
|
7
|
+
has_many :domains, :through => :localizations, :class_name => "AlchemyDomains::Domain"
|
8
|
+
|
9
|
+
scope :current_domain, lambda{ |domain_id| includes(:localizations).where("alchemy_localizations.domain_id" => domain_id) }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<tr class="<%= cycle('even', 'odd') %>">
|
2
|
+
<td><%= domain.hostname -%></td>
|
3
|
+
<td style="text-align: center"><%= render_icon(true) if domain.default? %></td>
|
4
|
+
<td></td>
|
5
|
+
<td></td>
|
6
|
+
<td class="tools">
|
7
|
+
<%- permitted_to?(:destroy, :alchemy_domains_admin_domains) do -%>
|
8
|
+
<%= link_to_confirmation_window(
|
9
|
+
'',
|
10
|
+
t("Are you sure?"),
|
11
|
+
admin_domain_path(domain),
|
12
|
+
:title => t("Delete"),
|
13
|
+
:class => "icon destroy"
|
14
|
+
) -%>
|
15
|
+
<%- end -%>
|
16
|
+
<%- permitted_to?(:edit, :alchemy_domains_admin_domains) do -%>
|
17
|
+
<%= link_to_overlay_window(
|
18
|
+
'',
|
19
|
+
edit_admin_domain_path(domain),
|
20
|
+
{
|
21
|
+
:title => t("Edit")
|
22
|
+
},
|
23
|
+
{
|
24
|
+
:class => "icon edit",
|
25
|
+
:title => t("Edit")
|
26
|
+
}
|
27
|
+
) -%>
|
28
|
+
<%- end -%>
|
29
|
+
</td>
|
30
|
+
</tr>
|
31
|
+
<%= render domain.localizations %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<%= form_for [:admin, @domain], :remote => true do |f| %>
|
2
|
+
<div id="errors" style="display: none"></div>
|
3
|
+
<table>
|
4
|
+
|
5
|
+
<tr>
|
6
|
+
<td class="label"><%= f.label :hostname %></td>
|
7
|
+
<td class="input">
|
8
|
+
<%= f.text_field :hostname, :class => 'thin_border' -%>
|
9
|
+
</td>
|
10
|
+
</tr>
|
11
|
+
<tr>
|
12
|
+
<td class="label"><%= f.label :default, t('default') %></td>
|
13
|
+
<td class="checkbox">
|
14
|
+
<%= f.check_box(:default) -%>
|
15
|
+
</td>
|
16
|
+
</tr>
|
17
|
+
<tr>
|
18
|
+
<td class="label"><%= f.label :languages, t('languages') %></td>
|
19
|
+
<td class="checkbox">
|
20
|
+
<% @domain.localizations.each_with_index do |localization, i| -%>
|
21
|
+
<%= f.fields_for :localizations, localization do |l| %>
|
22
|
+
<div>
|
23
|
+
<%= l.check_box(:language_id, {:checked => !l.object.new_record?, :id => "domain_localization_#{i}"}, localization.language.id) %>
|
24
|
+
<label for="domain_localization_<%= i%>"><%= localization.language.name -%></label>
|
25
|
+
</div>
|
26
|
+
<% end %>
|
27
|
+
<% end -%>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td class="submit" colspan="2">
|
32
|
+
<%= f.button t('save'), :class => 'button' %>
|
33
|
+
</td>
|
34
|
+
</tr>
|
35
|
+
</table>
|
36
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%- label_title = t("Create domain", :default => t('Create')) -%>
|
2
|
+
|
3
|
+
<%- toolbar(
|
4
|
+
:buttons => [
|
5
|
+
{
|
6
|
+
:icon => 'create',
|
7
|
+
:label => label_title,
|
8
|
+
:url => new_admin_domain_path,
|
9
|
+
:title => label_title,
|
10
|
+
:overlay_options => {
|
11
|
+
:title => label_title
|
12
|
+
},
|
13
|
+
:if_permitted_to => [:new, :alchemy_domains_admin_domains]
|
14
|
+
}
|
15
|
+
],
|
16
|
+
:search => true,
|
17
|
+
:search_url => admin_domains_path
|
18
|
+
) -%>
|
19
|
+
|
20
|
+
<%- if @domains.any? -%>
|
21
|
+
<table class="list" id="domain_list">
|
22
|
+
<tr>
|
23
|
+
<th style="width: 180px"><%= ::I18n.t(:hostname, :scope => 'activerecord.attributes.alchemy_domains/domain') %></th>
|
24
|
+
<th style="width: 150px; text-align: center"><%= t('default_domain') %></th>
|
25
|
+
<th><%= t('languages') %></th>
|
26
|
+
<th style="width: 150px; text-align: center"><%= t('default_language') %></th>
|
27
|
+
<th class="tools"></th>
|
28
|
+
</tr>
|
29
|
+
|
30
|
+
<%= render @domains %>
|
31
|
+
|
32
|
+
</table>
|
33
|
+
|
34
|
+
<%- elsif params[:query] -%>
|
35
|
+
<p><%= t('Nothing found') %></p>
|
36
|
+
<%- end -%>
|
37
|
+
|
38
|
+
<%= render 'alchemy/admin/partials/pagination_links', :items => @domains, :scope => alchemy_domains %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<tr class="<%= cycle("even", "odd") %>">
|
2
|
+
<td></td>
|
3
|
+
<td></td>
|
4
|
+
<td><%= localization.language.name %></td>
|
5
|
+
<td style="text-align: center">
|
6
|
+
<% if localization.default_for_domain? -%>
|
7
|
+
<%= render_icon(true) %>
|
8
|
+
<% else -%>
|
9
|
+
<%= link_to(
|
10
|
+
t('make default'),
|
11
|
+
admin_localization_path(
|
12
|
+
:id => localization.id,
|
13
|
+
:localization => {:default_for_domain => true}
|
14
|
+
),
|
15
|
+
:method => :put,
|
16
|
+
:remote => true
|
17
|
+
) %>
|
18
|
+
<% end -%>
|
19
|
+
</td>
|
20
|
+
<td></td>
|
21
|
+
</tr>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
de:
|
2
|
+
alchemy:
|
3
|
+
|
4
|
+
"make default": "als Standard festlegen"
|
5
|
+
default: "Standard"
|
6
|
+
languages: "Sprachen"
|
7
|
+
|
8
|
+
modules:
|
9
|
+
domains: "Domains"
|
10
|
+
|
11
|
+
languages: Sprachen
|
12
|
+
default_language: "Standard Sprache"
|
13
|
+
default_domain: "Standard Domain"
|
14
|
+
|
15
|
+
activerecord:
|
16
|
+
attributes:
|
17
|
+
alchemy_domains/domain:
|
18
|
+
hostname: Domain
|
@@ -0,0 +1,12 @@
|
|
1
|
+
name: domains
|
2
|
+
engine_name: alchemy_domains
|
3
|
+
order: 1
|
4
|
+
navigation:
|
5
|
+
name: modules.domains
|
6
|
+
controller: alchemy_domains/admin/domains
|
7
|
+
action: index
|
8
|
+
icon: /assets/module_icon.png
|
9
|
+
sub_navigation:
|
10
|
+
- name: domains
|
11
|
+
controller: alchemy_domains/admin/domains
|
12
|
+
action: index
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateAlchemyLocalizations < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :alchemy_localizations do |t|
|
4
|
+
t.references :domain
|
5
|
+
t.references :language
|
6
|
+
t.boolean :default_for_domain, :default => false
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :alchemy_localizations, :domain_id
|
10
|
+
add_index :alchemy_localizations, :language_id
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module AlchemyDomains
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
|
4
|
+
engine_name "alchemy_domains"
|
5
|
+
isolate_namespace AlchemyDomains
|
6
|
+
|
7
|
+
# Registering module in Alchemy CMS
|
8
|
+
initializer 'alchemy_domains.register_as_alchemy_module' do
|
9
|
+
Alchemy::Modules.register_module(YAML.load_file(File.join(File.dirname(__FILE__), '../..', 'config/module_definition.yml')))
|
10
|
+
end
|
11
|
+
|
12
|
+
# Loading authorization rules and register them to auth engine instance
|
13
|
+
initializer 'alchemy_domains.add_authorization_rules' do
|
14
|
+
Alchemy::AuthEngine.get_instance.load(File.join(File.dirname(__FILE__), '../..', 'config/authorization_rules.rb'))
|
15
|
+
end
|
16
|
+
|
17
|
+
# Loading all alchemy core extensions found in app folder.
|
18
|
+
config.to_prepare do
|
19
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_extension.rb")) do |e|
|
20
|
+
Rails.env.production? ? require(e) : load(e)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alchemy_domains
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Robin Böning
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &70254542699920 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70254542699920
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: alchemy_cms
|
27
|
+
requirement: &70254542712280 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.1.7
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70254542712280
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sqlite3
|
38
|
+
requirement: &70254542709340 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70254542709340
|
47
|
+
description: This gem adds domains and associats them with languages. Your website
|
48
|
+
can provide certain languages depending on the requested domain.
|
49
|
+
email:
|
50
|
+
- rb@magiclabs.de
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- app/controllers/alchemy/alchemy_base_controller_extension.rb
|
56
|
+
- app/controllers/alchemy/pages_controller_extension.rb
|
57
|
+
- app/controllers/alchemy_domains/admin/domains_controller.rb
|
58
|
+
- app/controllers/alchemy_domains/admin/localizations_controller.rb
|
59
|
+
- app/helpers/base_helper_extension.rb
|
60
|
+
- app/helpers/pages_helper_extension.rb
|
61
|
+
- app/models/alchemy_domains/domain.rb
|
62
|
+
- app/models/alchemy_domains/localization.rb
|
63
|
+
- app/models/language_extension.rb
|
64
|
+
- app/models/page_extension.rb
|
65
|
+
- app/views/alchemy_domains/admin/domains/_domain.html.erb
|
66
|
+
- app/views/alchemy_domains/admin/domains/_form.html.erb
|
67
|
+
- app/views/alchemy_domains/admin/domains/edit.html.erb
|
68
|
+
- app/views/alchemy_domains/admin/domains/index.html.erb
|
69
|
+
- app/views/alchemy_domains/admin/domains/new.html.erb
|
70
|
+
- app/views/alchemy_domains/admin/localizations/_localization.html.erb
|
71
|
+
- config/authorization_rules.rb
|
72
|
+
- config/locales/alchemy.de.yml
|
73
|
+
- config/module_definition.yml
|
74
|
+
- config/routes.rb
|
75
|
+
- db/migrate/20120224143542_create_alchemy_domains.rb
|
76
|
+
- db/migrate/20120224144137_create_alchemy_localizations.rb
|
77
|
+
- lib/alchemy_domains/engine.rb
|
78
|
+
- lib/alchemy_domains/version.rb
|
79
|
+
- lib/alchemy_domains.rb
|
80
|
+
- MIT-LICENSE
|
81
|
+
- Rakefile
|
82
|
+
- README.md
|
83
|
+
homepage: http://magiclabs.de
|
84
|
+
licenses: []
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
hash: -4503359689990071848
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
hash: -4503359689990071848
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 1.8.10
|
110
|
+
signing_key:
|
111
|
+
specification_version: 3
|
112
|
+
summary: This gem adds the functionality for managing domains in Alchemy CMS.
|
113
|
+
test_files: []
|