alchemy_domains 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +27 -0
  3. data/Rakefile +39 -0
  4. data/app/controllers/alchemy/alchemy_base_controller_extension.rb +60 -0
  5. data/app/controllers/alchemy/pages_controller_extension.rb +40 -0
  6. data/app/controllers/alchemy_domains/admin/domains_controller.rb +48 -0
  7. data/app/controllers/alchemy_domains/admin/localizations_controller.rb +17 -0
  8. data/app/helpers/base_helper_extension.rb +9 -0
  9. data/app/helpers/pages_helper_extension.rb +70 -0
  10. data/app/models/alchemy_domains/domain.rb +48 -0
  11. data/app/models/alchemy_domains/localization.rb +29 -0
  12. data/app/models/language_extension.rb +11 -0
  13. data/app/models/page_extension.rb +8 -0
  14. data/app/views/alchemy_domains/admin/domains/_domain.html.erb +31 -0
  15. data/app/views/alchemy_domains/admin/domains/_form.html.erb +36 -0
  16. data/app/views/alchemy_domains/admin/domains/edit.html.erb +1 -0
  17. data/app/views/alchemy_domains/admin/domains/index.html.erb +38 -0
  18. data/app/views/alchemy_domains/admin/domains/new.html.erb +1 -0
  19. data/app/views/alchemy_domains/admin/localizations/_localization.html.erb +21 -0
  20. data/config/authorization_rules.rb +8 -0
  21. data/config/locales/alchemy.de.yml +18 -0
  22. data/config/module_definition.yml +12 -0
  23. data/config/routes.rb +7 -0
  24. data/db/migrate/20120224143542_create_alchemy_domains.rb +10 -0
  25. data/db/migrate/20120224144137_create_alchemy_localizations.rb +12 -0
  26. data/lib/alchemy_domains.rb +2 -0
  27. data/lib/alchemy_domains/engine.rb +25 -0
  28. data/lib/alchemy_domains/version.rb +3 -0
  29. 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 [![Build Status](https://secure.travis-ci.org/magiclabs/alchemy_domains.png?branch=master)](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,9 @@
1
+ module Alchemy
2
+ BaseHelper.class_eval do
3
+
4
+ def multi_language?
5
+ Alchemy::Language.current_domain(session[:domain_id]).published.count > 1
6
+ end
7
+
8
+ end
9
+ 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,8 @@
1
+ # encoding: UTF-8
2
+ # Extending Alchemy::Page
3
+
4
+ module Alchemy
5
+ Page.class_eval do
6
+ scope :current_domain, lambda{ |domain_id| includes(:language => :localizations).where('alchemy_localizations.domain_id' => domain_id) }
7
+ end
8
+ 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,8 @@
1
+ authorization do
2
+
3
+ role :admin do
4
+ has_permission_on :alchemy_domains_admin_domains, :to => [:manage]
5
+ has_permission_on :alchemy_domains_admin_localizations, :to => [:manage]
6
+ end
7
+
8
+ end
@@ -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,7 @@
1
+ AlchemyDomains::Engine.routes.draw do
2
+ namespace :admin do
3
+ resources :domains
4
+ resources :localizations, :only => [:update]
5
+ end
6
+ end
7
+
@@ -0,0 +1,10 @@
1
+ class CreateAlchemyDomains < ActiveRecord::Migration
2
+ def change
3
+ create_table :alchemy_domains do |t|
4
+ t.boolean :default, :default => false
5
+ t.string :hostname
6
+ t.timestamps
7
+ end
8
+ add_index :alchemy_domains, :hostname
9
+ end
10
+ end
@@ -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,2 @@
1
+ require "alchemy_cms"
2
+ require "alchemy_domains/engine"
@@ -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
@@ -0,0 +1,3 @@
1
+ module AlchemyDomains
2
+ VERSION = "0.0.1"
3
+ 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: []