alchemy_cms 2.1.9 → 2.1.9.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.
@@ -181,8 +181,7 @@ module Alchemy
181
181
  new_language_root = Page.copy(
182
182
  original_language_root,
183
183
  :language_id => params[:languages][:new_lang_id],
184
- :language_code => session[:language_code],
185
- :layoutpage => params[:layoutpage]
184
+ :language_code => session[:language_code]
186
185
  )
187
186
  new_language_root.move_to_child_of Page.root
188
187
  original_language_root.copy_children_to(new_language_root)
@@ -17,7 +17,7 @@ module Alchemy
17
17
  :cache_path => proc { show_page_url(:urlname => params[:urlname], :lang => multi_language? ? params[:lang] : nil) },
18
18
  :if => proc {
19
19
  if Alchemy::Config.get(:cache_pages)
20
- page = Page.find_by_urlname_and_language_id_and_public(
20
+ page = Page.contentpages.find_by_urlname_and_language_id_and_public(
21
21
  params[:urlname],
22
22
  session[:language_id],
23
23
  true,
@@ -70,10 +70,10 @@ module Alchemy
70
70
  if params[:urlname].blank?
71
71
  @page = Page.language_root_for(Language.get_default.id)
72
72
  else
73
- @page = Page.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
73
+ @page = Page.contentpages.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
74
74
  # try to find the page in another language
75
75
  if @page.nil?
76
- @page = Page.find_by_urlname(params[:urlname])
76
+ @page = Page.contentpages.find_by_urlname(params[:urlname])
77
77
  else
78
78
  return @page
79
79
  end
@@ -24,11 +24,11 @@ module Alchemy
24
24
  attr_accessor :do_not_sweep
25
25
  attr_accessor :do_not_validate_language
26
26
 
27
- before_validation :set_url_name, :unless => proc { |page| page.systempage? || page.redirects_to_external? }
28
- before_save :set_title, :unless => proc { |page| page.systempage? || page.redirects_to_external? || !page.title.blank? }
27
+ before_validation :set_url_name, :if => :contentpage?
28
+ before_save :set_title, :if => :contentpage?, :unless => proc { |page| !page.title.blank? }
29
29
  before_save :set_language_code, :unless => :systempage?
30
- before_save :set_restrictions_to_child_pages, :if => proc { |page| !page.systempage? && page.restricted_changed? }
31
- before_save :inherit_restricted_status, :if => proc { |page| !page.systempage? && page.parent && page.parent.restricted? }
30
+ before_save :set_restrictions_to_child_pages, :if => proc { |page| page.contentpage? && page.restricted_changed? }
31
+ before_save :inherit_restricted_status, :if => proc { |page| page.contentpage? && page.parent && page.parent.restricted? }
32
32
  after_create :autogenerate_elements, :unless => proc { |page| page.systempage? || page.do_not_autogenerate }
33
33
  after_create :create_cells, :unless => :systempage?
34
34
 
@@ -48,9 +48,9 @@ module Alchemy
48
48
  scope :all_last_edited_from, lambda { |user| where(:updater_id => user.id).order('`alchemy_pages`.`updated_at` DESC').limit(5) }
49
49
  # Returns all pages that have the given language_id
50
50
  scope :with_language, lambda { |language_id| where(:language_id => language_id) }
51
+ scope :contentpages, where(:layoutpage => [false, nil]).where("`alchemy_pages`.`parent_id` IS NOT NULL")
51
52
  # Returns all pages that are not locked and public.
52
53
  # Used for flushing all page caches at once.
53
- scope :contentpages, where("`alchemy_pages`.`layoutpage` = 0 AND `alchemy_pages`.`parent_id` IS NOT NULL")
54
54
  scope :flushables, not_locked.published.contentpages
55
55
  scope :searchables, not_restricted.published.contentpages
56
56
 
@@ -496,6 +496,10 @@ module Alchemy
496
496
  rootpage? || (self.parent_id == Page.root.id && !self.language_root?)
497
497
  end
498
498
 
499
+ def contentpage?
500
+ !systempage? && !redirects_to_external? && !layoutpage?
501
+ end
502
+
499
503
  def self.rootpage
500
504
  self.root
501
505
  end
@@ -1,5 +1,5 @@
1
1
  module Alchemy
2
2
 
3
- VERSION = "2.1.9"
3
+ VERSION = "2.1.9.1"
4
4
 
5
5
  end
@@ -16,4 +16,35 @@ describe Alchemy::Admin::PagesController do
16
16
 
17
17
  end
18
18
 
19
+ describe '#copy_language_tree' do
20
+
21
+ before(:each) do
22
+ @language = Alchemy::Language.get_default
23
+ @language_root = Factory(:language_root_page, :language => @language, :name => 'Intro')
24
+ @level_1 = Factory(:public_page, :language => @language, :parent_id => @language_root.id, :visible => true, :name => 'Level 1')
25
+ @level_2 = Factory(:public_page, :language => @language, :parent_id => @level_1.id, :visible => true, :name => 'Level 2')
26
+ @level_3 = Factory(:public_page, :language => @language, :parent_id => @level_2.id, :visible => true, :name => 'Level 3')
27
+ @level_4 = Factory(:public_page, :language => @language, :parent_id => @level_3.id, :visible => true, :name => 'Level 4')
28
+ @new_language = Factory(:language)
29
+ session[:language_code] = @new_language.code
30
+ session[:language_id] = @new_language.id
31
+ post :copy_language_tree, {:languages => {:new_lang_id => @new_language.id, :old_lang_id => @language.id}}
32
+ @new_lang_root = Alchemy::Page.language_root_for(@new_language.id)
33
+ end
34
+
35
+ it "should copy all pages" do
36
+ @new_lang_root.descendants.count.should == 4
37
+ @new_lang_root.descendants.collect(&:name).should == ["Level 1 (Copy)", "Level 2 (Copy)", "Level 3 (Copy)", "Level 4 (Copy)"]
38
+ end
39
+
40
+ it "should not set layoutpage attribute to nil" do
41
+ @new_lang_root.layoutpage.should_not be_nil
42
+ end
43
+
44
+ it "should not set layoutpage attribute to true" do
45
+ @new_lang_root.layoutpage.should_not be_true
46
+ end
47
+
48
+ end
49
+
19
50
  end
@@ -26,6 +26,19 @@ describe Alchemy::PagesController do
26
26
  within('div#navigation ul') { page.should have_selector('li a[href="/alchemy/page-1"], li a[href="/alchemy/page-2"]') }
27
27
  end
28
28
 
29
+ context "when a global page with the same urlname as the requested page exists in the language tree" do
30
+
31
+ it "should render the content page, not the global page" do
32
+ globalpage = Factory(:public_page, :layoutpage => true, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
33
+ contentpage = Factory(:public_page, :layoutpage => false, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
34
+ article = contentpage.elements.find_by_name('article')
35
+ article.content_by_name('intro').essence.update_attributes(:body => 'rendered on contentpage', :public => true)
36
+ visit("/alchemy/samename")
37
+ within('div#content div.article div.intro') { page.should have_content('rendered on contentpage') }
38
+ end
39
+
40
+ end
41
+
29
42
  end
30
43
 
31
44
  describe "fulltext search" do
@@ -105,6 +105,38 @@ describe Alchemy::Page do
105
105
 
106
106
  end
107
107
 
108
+ describe "#contentpage" do
109
+
110
+ it "should return false if its a systempage" do
111
+ @page = Factory(:page, :language => @language, :parent_id => @language_root.id)
112
+ @page.stub!(:systempage?).and_return(true)
113
+ @page.stub!(:redirects_to_external?).and_return(false)
114
+ @page.contentpage?.should be_false
115
+ end
116
+
117
+ it "should return false if it redirects to an external website" do
118
+ @page = Factory(:page, :layoutpage => false, :language => @language, :parent_id => @language_root.id)
119
+ @page.stub!(:systempage?).and_return(false)
120
+ @page.stub!(:redirects_to_external?).and_return(true)
121
+ @page.contentpage?.should be_false
122
+ end
123
+
124
+ it "should return false if its a layoutpage" do
125
+ @page = Factory(:page, :layoutpage => true, :language => @language, :parent_id => @language_root.id)
126
+ @page.stub!(:systempage?).and_return(false)
127
+ @page.stub!(:redirects_to_external?).and_return(false)
128
+ @page.contentpage?.should be_false
129
+ end
130
+
131
+ it "should return true if its not a layoutpage, does not redirect to an external website and its not a systempage" do
132
+ @page = Factory(:page, :language => @language, :parent_id => @language_root.id)
133
+ @page.stub!(:systempage?).and_return(false)
134
+ @page.stub!(:redirects_to_external?).and_return(false)
135
+ @page.contentpage?.should be_true
136
+ end
137
+
138
+ end
139
+
108
140
  describe '#create' do
109
141
 
110
142
  context "before/after filter" do
@@ -134,6 +166,20 @@ describe Alchemy::Page do
134
166
  page.urlname.should == '--a'
135
167
  end
136
168
 
169
+ context "with attribute :layoutpage set to true (global page)" do
170
+
171
+ it "should not set the title from its name if its a global page" do
172
+ page = Factory(:page, :layoutpage => true, :name => 'Page with no title', :language => @language, :parent_id => @language_root.id)
173
+ page.title.should be_blank
174
+ end
175
+
176
+ it "should not set an urlname" do
177
+ page = Factory(:page, :layoutpage => true, :name => 'Page with no urlname', :language => @language, :parent_id => @language_root.id)
178
+ page.urlname.should be_blank
179
+ end
180
+
181
+ end
182
+
137
183
  end
138
184
 
139
185
  end
@@ -180,6 +226,30 @@ describe Alchemy::Page do
180
226
 
181
227
  end
182
228
 
229
+ context ".contentpages" do
230
+
231
+ before(:each) do
232
+ @klingonian = Factory(:language)
233
+ @layoutroot = Alchemy::Page.find_or_create_layout_root_for(@klingonian.id)
234
+ @layoutpage = Factory(:public_page, :name => 'layoutpage', :layoutpage => true, :parent_id => @layoutroot.id, :language => @klingonian)
235
+ @klingonian_lang_root = Factory(:language_root_page, :name => 'klingonian_lang_root', :layoutpage => nil, :language => @klingonian)
236
+ @contentpage = Factory(:public_page, :name => 'contentpage', :parent_id => @language_root.id, :language => @language)
237
+ end
238
+
239
+ it "should return a collection of contentpages" do
240
+ Alchemy::Page.contentpages.to_a.should == [@language_root, @klingonian_lang_root, @contentpage]
241
+ end
242
+
243
+ it "should not contain pages with attribute :layoutpage set to true" do
244
+ Alchemy::Page.contentpages.to_a.select { |p| p.layoutpage == true }.should be_empty
245
+ end
246
+
247
+ it "should contain pages with attribute :layoutpage set to nil" do
248
+ Alchemy::Page.contentpages.to_a.select { |p| p.layoutpage == nil }.should == [@klingonian_lang_root]
249
+ end
250
+
251
+ end
252
+
183
253
  context ".public" do
184
254
 
185
255
  it "should return pages that are public" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.9
4
+ version: 2.1.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-04-13 00:00:00.000000000 Z
14
+ date: 2012-04-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
18
- requirement: &70348038225060 !ruby/object:Gem::Requirement
18
+ requirement: &70284747089940 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 3.1.4
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70348038225060
26
+ version_requirements: *70284747089940
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: authlogic
29
- requirement: &70348038223480 !ruby/object:Gem::Requirement
29
+ requirement: &70284747092840 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '0'
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *70348038223480
37
+ version_requirements: *70284747092840
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: awesome_nested_set
40
- requirement: &70348038222140 !ruby/object:Gem::Requirement
40
+ requirement: &70284747084300 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ~>
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '2.0'
46
46
  type: :runtime
47
47
  prerelease: false
48
- version_requirements: *70348038222140
48
+ version_requirements: *70284747084300
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: declarative_authorization
51
- requirement: &70348038221160 !ruby/object:Gem::Requirement
51
+ requirement: &70284746634060 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ~>
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.5.4
57
57
  type: :runtime
58
58
  prerelease: false
59
- version_requirements: *70348038221160
59
+ version_requirements: *70284746634060
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: tvdeyen-fleximage
62
- requirement: &70348038219940 !ruby/object:Gem::Requirement
62
+ requirement: &70284746630840 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ~>
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: 1.2.0
68
68
  type: :runtime
69
69
  prerelease: false
70
- version_requirements: *70348038219940
70
+ version_requirements: *70284746630840
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: kaminari
73
- requirement: &70348038218800 !ruby/object:Gem::Requirement
73
+ requirement: &70284740758960 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ~>
@@ -78,10 +78,10 @@ dependencies:
78
78
  version: 0.13.0
79
79
  type: :runtime
80
80
  prerelease: false
81
- version_requirements: *70348038218800
81
+ version_requirements: *70284740758960
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: acts_as_ferret
84
- requirement: &70348038231900 !ruby/object:Gem::Requirement
84
+ requirement: &70284740785920 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
87
87
  - - ~>
@@ -89,10 +89,10 @@ dependencies:
89
89
  version: '0.5'
90
90
  type: :runtime
91
91
  prerelease: false
92
- version_requirements: *70348038231900
92
+ version_requirements: *70284740785920
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: acts_as_list
95
- requirement: &70348038230440 !ruby/object:Gem::Requirement
95
+ requirement: &70284740784760 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
98
  - - ~>
@@ -100,10 +100,10 @@ dependencies:
100
100
  version: '0.1'
101
101
  type: :runtime
102
102
  prerelease: false
103
- version_requirements: *70348038230440
103
+ version_requirements: *70284740784760
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: magiclabs-userstamp
106
- requirement: &70348038227800 !ruby/object:Gem::Requirement
106
+ requirement: &70284740782660 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
109
109
  - - ~>
@@ -111,10 +111,10 @@ dependencies:
111
111
  version: 2.0.2
112
112
  type: :runtime
113
113
  prerelease: false
114
- version_requirements: *70348038227800
114
+ version_requirements: *70284740782660
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: dynamic_form
117
- requirement: &70348038242760 !ruby/object:Gem::Requirement
117
+ requirement: &70284740797300 !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
120
120
  - - ~>
@@ -122,10 +122,10 @@ dependencies:
122
122
  version: '1.1'
123
123
  type: :runtime
124
124
  prerelease: false
125
- version_requirements: *70348038242760
125
+ version_requirements: *70284740797300
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: jquery-rails
128
- requirement: &70348038241540 !ruby/object:Gem::Requirement
128
+ requirement: &70284740796020 !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
131
  - - ~>
@@ -133,10 +133,10 @@ dependencies:
133
133
  version: 1.0.16
134
134
  type: :runtime
135
135
  prerelease: false
136
- version_requirements: *70348038241540
136
+ version_requirements: *70284740796020
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: attachment_magic
139
- requirement: &70348038240380 !ruby/object:Gem::Requirement
139
+ requirement: &70284740792180 !ruby/object:Gem::Requirement
140
140
  none: false
141
141
  requirements:
142
142
  - - ~>
@@ -144,10 +144,10 @@ dependencies:
144
144
  version: 0.2.1
145
145
  type: :runtime
146
146
  prerelease: false
147
- version_requirements: *70348038240380
147
+ version_requirements: *70284740792180
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: sass-rails
150
- requirement: &70348038239560 !ruby/object:Gem::Requirement
150
+ requirement: &70284740791220 !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements:
153
153
  - - ~>
@@ -155,10 +155,10 @@ dependencies:
155
155
  version: 3.1.4
156
156
  type: :runtime
157
157
  prerelease: false
158
- version_requirements: *70348038239560
158
+ version_requirements: *70284740791220
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: rspec-rails
161
- requirement: &70348038238780 !ruby/object:Gem::Requirement
161
+ requirement: &70284740804680 !ruby/object:Gem::Requirement
162
162
  none: false
163
163
  requirements:
164
164
  - - ~>
@@ -166,10 +166,10 @@ dependencies:
166
166
  version: '2.8'
167
167
  type: :development
168
168
  prerelease: false
169
- version_requirements: *70348038238780
169
+ version_requirements: *70284740804680
170
170
  - !ruby/object:Gem::Dependency
171
171
  name: sqlite3
172
- requirement: &70348038238080 !ruby/object:Gem::Requirement
172
+ requirement: &70284740803480 !ruby/object:Gem::Requirement
173
173
  none: false
174
174
  requirements:
175
175
  - - ! '>='
@@ -177,7 +177,7 @@ dependencies:
177
177
  version: '0'
178
178
  type: :development
179
179
  prerelease: false
180
- version_requirements: *70348038238080
180
+ version_requirements: *70284740803480
181
181
  description: Alchemy is a Rails 3 CMS with a flexible content storing architecture.
182
182
  email:
183
183
  - alchemy@magiclabs.de
@@ -816,7 +816,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
816
816
  version: '0'
817
817
  segments:
818
818
  - 0
819
- hash: -2174257304759105634
819
+ hash: 219358527196005840
820
820
  required_rubygems_version: !ruby/object:Gem::Requirement
821
821
  none: false
822
822
  requirements:
@@ -825,7 +825,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
825
825
  version: '0'
826
826
  segments:
827
827
  - 0
828
- hash: -2174257304759105634
828
+ hash: 219358527196005840
829
829
  requirements:
830
830
  - ImageMagick (libmagick), v6.6 or greater.
831
831
  rubyforge_project: