etabliocms_pages 0.0.1 → 0.0.2

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.
@@ -3,15 +3,17 @@ module EtabliocmsPages
3
3
  class PagesController < EtabliocmsCore::Admin::BaseController
4
4
 
5
5
  def new
6
- @page = Page.new
6
+ @page = EtabliocmsPages::Page.new
7
+ @page.build_contents_for_available_locales
7
8
  end
8
9
 
9
10
  def create
10
- @page = Page.new(params[:page])
11
+ @page = Page.new(params[:etabliocms_pages_page])
11
12
  if @page.save
12
13
  flash[:notice] = t('page.created')
13
14
  redirect_to :action => 'index'
14
15
  else
16
+ @page.build_contents_for_available_locales
15
17
  render :action => 'new'
16
18
  end
17
19
  end
@@ -22,7 +24,7 @@ module EtabliocmsPages
22
24
 
23
25
  def update
24
26
  @page = Page.find(params[:id])
25
- if @page.update_attributes(params[:page])
27
+ if @page.update_attributes(params[:etabliocms_pages_page])
26
28
  flash[:notice] = t('page.updated')
27
29
  redirect_to :action => 'index'
28
30
  else
@@ -0,0 +1,14 @@
1
+ module EtabliocmsPages
2
+ class Content < ActiveRecord::Base
3
+
4
+ validates :title, :presence => true
5
+ validates :locale, :presence => true
6
+
7
+ belongs_to :page, :inverse_of => :contents
8
+
9
+ serialize :areas, Hash
10
+
11
+ has_slug :to_param => "path"
12
+
13
+ end
14
+ end
@@ -1,26 +1,48 @@
1
1
  module EtabliocmsPages
2
2
  class Page < ActiveRecord::Base
3
3
 
4
+ delegate :title, :areas, :slug, :to => :content, :allow_nil => true
5
+ def content
6
+ contents.where(:locale => I18n.locale).first
7
+ end
8
+
4
9
  acts_as_nested_set
5
10
  attr_accessor :child_of
6
11
  after_save :update_position
7
12
 
8
- validates :title, :presence => true
9
- validates :locale, :presence => true
13
+ has_many :contents, :class_name => "EtabliocmsPages::Content", :inverse_of => :page, :order => "locale asc", :dependent => :destroy
14
+ accepts_nested_attributes_for :contents, :reject_if => proc { |attributes| attributes['title'].blank? }
10
15
 
11
- has_slug :to_param => "path"
16
+ validate :at_least_one_content_has_title
12
17
 
13
18
  def path
14
- self_and_ancestors.map(&:slug).join("/")
19
+ self_and_ancestors.map{|p| p.slug }.join("/")
20
+ end
21
+
22
+ def to_param
23
+ path
24
+ end
25
+
26
+ def titles
27
+ contents.map(&:title).join(" / ")
28
+ end
29
+
30
+ def locales
31
+ contents.map(&:locale).join(", ")
15
32
  end
16
33
 
17
34
  def other_pages_for_select
18
35
  pages = EtabliocmsPages::Page.order("lft ASC")
19
36
  pages = pages.where("id != ?", id) unless new_record?
20
- pages.map { |d| [d.title, d.id] }
37
+ pages.map { |d| [d.titles, d.id] }
38
+ end
39
+
40
+ def build_contents_for_available_locales
41
+ I18n.available_locales.each do |available_locale|
42
+ contents.build(:locale => available_locale) unless contents.detect { |c| c.locale == available_locale.to_s }
43
+ end
21
44
  end
22
45
 
23
- scope :for_locale, lambda { |locale| where(:locale => locale) }
24
46
  scope :visible, where(:visible => true)
25
47
 
26
48
  private
@@ -38,6 +60,12 @@ module EtabliocmsPages
38
60
  self.child_of = nil
39
61
  end
40
62
 
63
+ def at_least_one_content_has_title
64
+ if contents.select { |c| c.title.present? }.blank?
65
+ errors[:base] << I18n.t('activerecord.errors.messages.at_least_one_content_has_title')
66
+ end
67
+ end
68
+
41
69
  end
42
70
 
43
71
  end
@@ -0,0 +1,30 @@
1
+ <% content = f.object %>
2
+ <div class="fields" id="tabs-<%= content.object_id %>">
3
+
4
+ <%= render "layouts/errors", :target => content %>
5
+
6
+ <%= f.hidden_field :locale, :value => content.locale %>
7
+
8
+ <p>
9
+ <%= f.label :title %>
10
+ <%= f.text_field :title, :class => 'text-field' %>
11
+ </p>
12
+
13
+ <% EtabliocmsPages.areas.each do |area| %>
14
+ <p>
15
+ <%= label_tag "#{content.object_id}_#{area}", t("helpers.label.etabliocms_pages_page.contents.#{area}") %>
16
+ <%= f.textile_text_area "areas[#{area}]",
17
+ :id => "#{content.object_id}_#{area}",
18
+ :value => content.areas[area].to_s, :width => 460, :height => 200 %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <% if !@page.new_record? && respond_to?(:page_path) %>
23
+ <p>
24
+ <% I18n.locale = content.locale %>
25
+ <strong>Náhled: </strong>
26
+ <%= link_to @page.title, page_path(@page), :"data-popup" => "true" %>
27
+ </p>
28
+ <% end %>
29
+
30
+ </div>
@@ -1,48 +1,54 @@
1
1
  <%= render "layouts/errors", :target => @page %>
2
2
 
3
3
  <fieldset>
4
- <legend><%= t('page.admin_legend') %></legend>
5
-
6
- <p>
7
- <%= f.label :title, :id => "page_title_label" %>
8
- <%= f.text_field :title, :class => 'text-field' %>
9
- </p>
4
+ <legend><%= t('page.admin_legend_basic') %></legend>
10
5
 
11
6
  <p>
12
7
  <%= f.label :child_of, :id => "page_child_of_label" %>
13
8
  <%= f.select :child_of, [[t('hierarchy.top_level'), nil]] + @page.other_pages_for_select,
14
- :selected => @page.parent ? [@page.parent.title, @page.parent_id] : nil %>
15
- </p>
16
-
17
- <p>
18
- <%= f.label :locale, :id => "page_locale_label" %>
19
- <%= f.select :locale, [[t('admin.locale.cs'), 'cs'], [t('admin.locale.en'), 'en']] %>
9
+ :selected => @page.parent ? [@page.parent.titles, @page.parent_id] : nil %>
20
10
  </p>
21
11
 
22
-
23
12
  <p>
24
13
  <%= f.label :visible, :id => "page_visible_label" %>
25
14
  <%= f.boolean_yes_no_select :visible %>
26
15
  </p>
27
16
 
28
- <p>
29
- <%= f.textile_text_area :text, :width => 560, :height => 200 %>
30
- </p>
31
-
32
17
  <p>
33
18
  <%= f.label :url, :id => "page_url_label" %>
34
19
  <%= f.text_field :url, :class => 'text-field' %>
35
20
  </p>
36
21
 
37
- <% if !@page.new_record? && respond_to?(:page_path) %>
38
- <p>
39
- <strong>Náhled: </strong>
40
- <%= link_to @page.title, page_url(@page, :locale => @page.locale), :"data-popup" => "true" %>
41
- </p>
42
- <% end %>
22
+ </fieldset>
23
+
24
+ <fieldset>
25
+ <legend><%= t('page.admin_legend_contents') %></legend>
26
+
27
+ <div id="contents">
28
+ <ul>
29
+ <%@page.contents.sort_by{|a| a.locale.to_s }.each do |content| %>
30
+ <li><a href="#tabs-<%= content.object_id %>"><%= t("admin.locales.#{content.locale}") %></a></li>
31
+ <% end %>
32
+ </ul>
33
+
34
+ <%= f.fields_for :contents do |builder| %>
35
+ <%= render "content_fields", :f => builder %>
36
+ <% end %>
37
+ </div>
43
38
 
39
+ </fieldset>
40
+
41
+ <fieldset>
42
+
43
+ <% I18n.locale = I18n.default_locale %>
44
44
  <p>
45
45
  <%= submit_tag t('admin.save'), :class => 'submit' %>
46
46
  </p>
47
47
 
48
48
  </fieldset>
49
+
50
+ <script>
51
+ $(function() {
52
+ $("#contents").tabs();
53
+ });
54
+ </script>
@@ -2,6 +2,6 @@
2
2
 
3
3
  <h1><%= @page.title %></h1>
4
4
 
5
- <%= form_for :page, :url => admin_page_path(@page.id), :html => {:method => :put, :id => "admin-form"} do |f| -%>
5
+ <%= form_for @page, :url => admin_page_path(@page.id), :html => {:method => :put, :id => "admin-form"} do |f| -%>
6
6
  <%= render :partial => 'form', :locals => { :f => f } %>
7
7
  <% end %>
@@ -2,6 +2,6 @@
2
2
 
3
3
  <h1><%= t('page.new') %></h1>
4
4
 
5
- <%= form_for :page, :url => admin_pages_url, :html => {:method => :post, :id => "admin-form"} do |f| -%>
5
+ <%= form_for @page, :url => admin_pages_url, :html => {:method => :post, :id => "admin-form"} do |f| -%>
6
6
  <%= render :partial => 'form', :locals => { :f => f } %>
7
7
  <% end %>
@@ -9,10 +9,26 @@ cs:
9
9
  moved: Stránka byla úspěšně přesunuta.
10
10
  not_moved: Stránka nebyla přesunuta.
11
11
  destroy_confirmation: Skutečně chcete smazat tuto stránku?
12
- admin_legend: Základní údaje o stránce
12
+ admin_legend_basic: Základní údaje o stránce
13
+ admin_legend_contents: Obsah stránky
13
14
  edit: "Editace stránky %{title}"
14
15
  new: Nová stránka
16
+ helpers:
17
+ label:
18
+ etabliocms_pages_page:
19
+ child_of: Rodič
20
+ text: Text
21
+ visible: Viditelné
22
+ page_title: Meta title
23
+ page_description: Meta description
24
+ contents:
25
+ title: Nadpis
26
+ locale: Jazyk
27
+ text: Text
15
28
  activerecord:
29
+ errors:
30
+ messages:
31
+ at_least_one_content_has_title: Alespoň jedna jazyková mutace musí mít nadpis.
16
32
  attributes:
17
33
  "etabliocms_pages/page":
18
34
  title: Nadpis
@@ -0,0 +1,26 @@
1
+ class CreateContents < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :contents do |t|
5
+ t.string :title, :null => false
6
+ t.string :slug, :null => false
7
+
8
+ t.text :areas
9
+ t.string :locale, :null => false
10
+ t.integer :page_id, :null => false
11
+ t.timestamps
12
+ end
13
+
14
+ EtabliocmsPages::Page.all.each do |page|
15
+ page.contents.create(:title => page.title,
16
+ :slug => page.slug,
17
+ :locale => page.locale,
18
+ :areas => {:text => page.text})
19
+ end
20
+ remove_column :pages, :title
21
+ remove_column :pages, :slug
22
+ remove_column :pages, :locale
23
+ remove_column :pages, :text
24
+ end
25
+
26
+ end
@@ -1,6 +1,13 @@
1
1
  require "active_support/dependencies"
2
2
 
3
3
  module EtabliocmsPages
4
+
5
+ mattr_accessor :areas
6
+
7
+ def self.setup
8
+ yield self
9
+ end
10
+
4
11
  end
5
12
 
6
13
  require "etabliocms_pages/engine"
@@ -1,3 +1,5 @@
1
+ require 'awesome_nested_set'
2
+
1
3
  module EtabliocmsPages
2
4
 
3
5
  class Engine < ::Rails::Engine
@@ -9,6 +11,12 @@ module EtabliocmsPages
9
11
  end
10
12
  end
11
13
 
14
+ initializer "etabliocms_pages.initialize" do |app|
15
+ EtabliocmsPages.setup do |config|
16
+ config.areas ||= [:text]
17
+ end
18
+ end
19
+
12
20
  end
13
21
 
14
22
  end
@@ -1,3 +1,3 @@
1
1
  module EtabliocmsPages
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etabliocms_pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-25 00:00:00.000000000 Z
12
+ date: 2012-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &14094540 !ruby/object:Gem::Requirement
16
+ requirement: &8748920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.2.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *14094540
24
+ version_requirements: *8748920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: etabliocms_core
27
- requirement: &14094060 !ruby/object:Gem::Requirement
27
+ requirement: &8748500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *14094060
35
+ version_requirements: *8748500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: awesome_nested_set
38
- requirement: &14093460 !ruby/object:Gem::Requirement
38
+ requirement: &8747940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.1.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *14093460
46
+ version_requirements: *8747940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &14092960 !ruby/object:Gem::Requirement
49
+ requirement: &8747440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *14092960
57
+ version_requirements: *8747440
58
58
  description: Small CMS - module for pages
59
59
  email:
60
60
  - patrikjira@gmail.com
@@ -64,15 +64,18 @@ extra_rdoc_files: []
64
64
  files:
65
65
  - app/views/layouts/_sidebar_pages.html.erb
66
66
  - app/views/etabliocms_pages/admin/pages/_form.html.erb
67
+ - app/views/etabliocms_pages/admin/pages/_content_fields.html.erb
67
68
  - app/views/etabliocms_pages/admin/pages/new.html.erb
68
69
  - app/views/etabliocms_pages/admin/pages/edit.html.erb
69
70
  - app/views/etabliocms_pages/admin/pages/index.html.erb
70
71
  - app/assets/images/admin/sidebar-pages.png
71
72
  - app/controllers/etabliocms_pages/admin/pages_controller.rb
73
+ - app/models/etabliocms_pages/content.rb
72
74
  - app/models/etabliocms_pages/page.rb
73
75
  - config/routes.rb
74
76
  - config/locales/pages.cs.yml
75
- - db/migrate/20120223140555_create_pages.etabliocms_core_engine.rb
77
+ - db/migrate/20120223140555_create_pages.etabliocms_pages_engine.rb
78
+ - db/migrate/20120301175455_create_contents.etabliocms_pages_engine.rb
76
79
  - lib/etabliocms_pages/version.rb
77
80
  - lib/etabliocms_pages/engine.rb
78
81
  - lib/etabliocms_pages.rb