alchemy_cms 2.1.9 → 2.1.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: