zena 1.2.2 → 1.2.3
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/History.txt +25 -0
- data/app/controllers/documents_controller.rb +3 -25
- data/app/controllers/nodes_controller.rb +34 -24
- data/app/controllers/user_sessions_controller.rb +5 -4
- data/app/controllers/versions_controller.rb +44 -17
- data/app/models/acl.rb +2 -7
- data/app/models/group.rb +6 -2
- data/app/models/link.rb +14 -0
- data/app/models/node.rb +2 -2
- data/app/models/site.rb +13 -4
- data/app/models/text_document.rb +1 -1
- data/app/models/user.rb +11 -2
- data/app/models/virtual_class.rb +1 -1
- data/app/views/groups/_form.rhtml +6 -6
- data/app/views/nodes/render_error.rhtml +15 -0
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
- data/app/views/templates/document_create_tabs/_import.rhtml +1 -1
- data/app/views/templates/document_create_tabs/_template.rhtml +1 -1
- data/app/views/templates/document_create_tabs/_text_document.rhtml +1 -1
- data/app/views/templates/edit_tabs/_title.rhtml +1 -1
- data/app/views/zafu/default/Node-admin.zafu +1 -1
- data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
- data/bricks/acls/zena/test/unit/acl_test.rb +2 -1
- data/bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb +1 -0
- data/bricks/fs_skin/zena/skins/blog/img/style.css +4 -4
- data/bricks/grid/lib/bricks/grid.rb +9 -3
- data/bricks/passenger/zena/deploy.rb +2 -1
- data/bricks/pdf/lib/bricks/pdf.rb +1 -1
- data/bricks/tags/zena/test/zafu/tags.yml +5 -1
- data/bricks/zena/zena/migrate/20120904071601_change_link_status_to_float.rb +13 -0
- data/config/bricks.yml +10 -10
- data/config/deploy.rb +1 -5
- data/config/gems.yml +2 -2
- data/db/init/base/skins/default/Node.zafu +7 -3
- data/db/init/base/skins/default/notes.zafu +3 -1
- data/lib/zafu/all.rb +0 -9
- data/lib/zafu/compiler.rb +0 -4
- data/lib/zafu/controller_methods.rb +0 -2
- data/lib/zafu/handler.rb +0 -5
- data/lib/zafu/markup.rb +4 -6
- data/lib/zafu/ordered_hash.rb +3 -2
- data/lib/zafu/parsing_rules.rb +1 -3
- data/lib/zafu/process/ajax.rb +4 -2
- data/lib/zafu/process/context.rb +34 -4
- data/lib/zafu/process/forms.rb +2 -2
- data/lib/zafu/process/ruby_less_processing.rb +5 -10
- data/lib/zafu/template.rb +0 -2
- data/lib/zafu/test_helper.rb +0 -2
- data/lib/zafu/view_methods.rb +0 -1
- data/lib/zafu.rb +1 -1
- data/lib/zena/acts/secure_node.rb +5 -4
- data/lib/zena/console.rb +19 -17
- data/lib/zena/core_ext/string.rb +3 -2
- data/lib/zena/deploy/app_init.rhtml +6 -1
- data/lib/zena/deploy/httpd.rhtml +16 -13
- data/lib/zena/deploy/stats.vhost.rhtml +1 -1
- data/lib/zena/deploy/vhost.rhtml +31 -11
- data/lib/zena/deploy/vhost_ssl_redir.rhtml +12 -0
- data/lib/zena/deploy/vhost_www.rhtml +1 -1
- data/lib/zena/deploy.rb +55 -11
- data/lib/zena/info.rb +1 -1
- data/lib/zena/parser/zazen_rules.rb +18 -9
- data/lib/zena/routes.rb +1 -3
- data/lib/zena/site_worker.rb +8 -1
- data/lib/zena/use/ajax.rb +29 -3
- data/lib/zena/use/ancestry.rb +2 -1
- data/lib/zena/use/authlogic.rb +12 -18
- data/lib/zena/use/context.rb +1 -1
- data/lib/zena/use/dates.rb +28 -18
- data/lib/zena/use/display.rb +49 -7
- data/lib/zena/use/forms.rb +51 -18
- data/lib/zena/use/html_tags.rb +6 -6
- data/lib/zena/use/i18n.rb +13 -4
- data/lib/zena/use/image_builder.rb +2 -0
- data/lib/zena/use/query_builder.rb +39 -14
- data/lib/zena/use/query_link.rb +57 -0
- data/lib/zena/use/query_node.rb +68 -32
- data/lib/zena/use/relations.rb +25 -15
- data/lib/zena/use/rendering.rb +66 -15
- data/lib/zena/use/upload.rb +34 -5
- data/lib/zena/use/urls.rb +28 -25
- data/lib/zena/use/version_hash.rb +14 -2
- data/lib/zena/use/zafu_safe_definitions.rb +72 -3
- data/lib/zena/use/zazen.rb +16 -4
- data/lib/zena.rb +1 -0
- data/public/javascripts/grid.js +213 -64
- data/public/javascripts/raphael.js +10 -0
- data/public/javascripts/zena.js +146 -22
- data/public/stylesheets/reset.css +12 -12
- data/public/stylesheets/zena.css +1 -1
- data/test/custom_queries/complex.host.yml +19 -0
- data/test/fixtures/files/TestNode.zafu +40 -4
- data/test/functional/nodes_controller_test.rb +84 -39
- data/test/functional/versions_controller_test.rb +2 -2
- data/test/integration/navigation_test.rb +61 -35
- data/test/integration/query_node/basic.yml +7 -7
- data/test/integration/query_node/comments.yml +1 -1
- data/test/integration/query_node/complex.yml +3 -3
- data/test/integration/query_node/filters.yml +32 -8
- data/test/integration/query_node/idx_key_value.yml +10 -10
- data/test/integration/query_node/idx_scope.yml +7 -7
- data/test/integration/query_node/relations.yml +4 -4
- data/test/integration/zafu_compiler/ajax.yml +19 -11
- data/test/integration/zafu_compiler/apphelper.yml +1 -1
- data/test/integration/zafu_compiler/asset.yml +2 -2
- data/test/integration/zafu_compiler/comments.yml +1 -1
- data/test/integration/zafu_compiler/dates.yml +1 -1
- data/test/integration/zafu_compiler/display.yml +49 -21
- data/test/integration/zafu_compiler/eval.yml +4 -4
- data/test/integration/zafu_compiler/forms.yml +25 -11
- data/test/integration/zafu_compiler/i18n.yml +5 -0
- data/test/integration/zafu_compiler/meta.yml +3 -3
- data/test/integration/zafu_compiler/query.yml +27 -9
- data/test/integration/zafu_compiler/relations.yml +9 -9
- data/test/integration/zafu_compiler/roles.yml +6 -6
- data/test/integration/zafu_compiler/rubyless.yml +7 -2
- data/test/integration/zafu_compiler/safe_definitions.yml +33 -4
- data/test/integration/zafu_compiler/security.yml +46 -1
- data/test/integration/zafu_compiler/urls.yml +28 -13
- data/test/integration/zafu_compiler/user.yml +12 -7
- data/test/integration/zafu_compiler/zafu_attributes.yml +1 -1
- data/test/integration/zafu_compiler/zazen.yml +5 -5
- data/test/integration/zafu_compiler_test.rb +18 -0
- data/test/selenium/Filter/filter3.rsel +20 -0
- data/test/selenium/Filter/filter4.rsel +20 -0
- data/test/sites/zena/versions.yml +2 -0
- data/test/unit/exif_data_test.rb +6 -1
- data/test/unit/group_test.rb +18 -3
- data/test/unit/node_test.rb +0 -7
- data/test/unit/project_test.rb +4 -0
- data/test/unit/relation_proxy_test.rb +2 -2
- data/test/unit/remote_test.rb +0 -9
- data/test/unit/role_test.rb +1 -1
- data/test/unit/string_hash_test.rb +1 -1
- data/test/unit/text_document_test.rb +13 -13
- data/test/unit/zena/use/html_tags_test.rb +6 -6
- data/test/unit/zena/use/rendering_test.rb +20 -10
- data/test/unit/zena/use/urls_test.rb +21 -18
- data/test/unit/zena/use/zafu_template_test.rb +0 -5
- data/test/unit/zena/use/zazen_test.rb +25 -25
- data/zena.gemspec +63 -57
- metadata +136 -130
- data/test/functional/nodes_controller_commit_test.rb +0 -67
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
class NodesControllerTest < Zena::Controller::TestCase
|
|
4
|
+
include Zena::Use::Urls::Common
|
|
4
5
|
context 'An anonymous user' do
|
|
5
6
|
setup do
|
|
6
7
|
login(:anon)
|
|
@@ -165,22 +166,21 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
165
166
|
|
|
166
167
|
context 'asking for show' do
|
|
167
168
|
subject do
|
|
169
|
+
@stamp = make_cachestamp(secure(Node) { Node.find(nodes_id(:projects))}, nil)
|
|
168
170
|
{
|
|
169
171
|
:action => 'show', :controller => 'nodes',
|
|
170
|
-
:path => ["page#{nodes_zip(:projects)}_info.js"],
|
|
172
|
+
:path => ["page#{nodes_zip(:projects)}_info.#{@stamp}.js"],
|
|
171
173
|
:prefix => 'en'
|
|
172
174
|
}
|
|
173
175
|
end
|
|
174
176
|
|
|
175
177
|
should 'recognize show page' do
|
|
176
|
-
assert_recognizes subject, "/en/page#{nodes_zip(:projects)}_info.js"
|
|
178
|
+
assert_recognizes subject, "/en/page#{nodes_zip(:projects)}_info.#{@stamp}.js"
|
|
177
179
|
end
|
|
178
180
|
|
|
179
181
|
should 'insert cachestamp and render template' do
|
|
180
182
|
get_subject
|
|
181
|
-
|
|
182
|
-
assert_redirected_to "/en/page18_info.js?#{nodes(:projects).updated_at.to_i}"
|
|
183
|
-
get 'show', :path => subject[:path], :cachestamp => nodes(:projects).updated_at.to_i.to_s, :prefix => 'en'
|
|
183
|
+
get 'show', :path => subject[:path], :prefix => 'en'
|
|
184
184
|
assert_response :success
|
|
185
185
|
assert_equal '{some:"json"}', @response.body
|
|
186
186
|
end
|
|
@@ -650,12 +650,12 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
650
650
|
end # trying to destroy an inaccessible node
|
|
651
651
|
end # A user
|
|
652
652
|
|
|
653
|
-
|
|
653
|
+
|
|
654
654
|
def test_foo
|
|
655
|
-
assert_generates '/en/img.jpg
|
|
655
|
+
assert_generates '/en/img.ff823.jpg', :controller => :nodes, :action => :show, :prefix => 'en', :path => ["img.ff823.jpg"]
|
|
656
656
|
assert_recognizes(
|
|
657
|
-
{:controller => 'nodes', :action => 'show', :prefix => 'en', :path => ["img.jpg"]
|
|
658
|
-
'/en/img.jpg
|
|
657
|
+
{:controller => 'nodes', :action => 'show', :prefix => 'en', :path => ["img.ff823.jpg"]},
|
|
658
|
+
'/en/img.ff823.jpg'
|
|
659
659
|
)
|
|
660
660
|
end
|
|
661
661
|
|
|
@@ -664,12 +664,12 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
664
664
|
node = secure!(Node) { nodes(:bird_jpg) }
|
|
665
665
|
get 'show', :prefix => 'oo', :path => ["image#{node.zip}.jpg"]
|
|
666
666
|
# missing cache info
|
|
667
|
-
assert_redirected_to "/en/image#{node.zip}
|
|
667
|
+
assert_redirected_to "/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"
|
|
668
668
|
# bad cache info
|
|
669
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
670
|
-
assert_redirected_to "/en/image#{node.zip}
|
|
669
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.1234.jpg"]
|
|
670
|
+
assert_redirected_to "/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"
|
|
671
671
|
# cache info ok
|
|
672
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
672
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"]
|
|
673
673
|
assert_response :success
|
|
674
674
|
end
|
|
675
675
|
|
|
@@ -678,12 +678,12 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
678
678
|
node = secure!(Node) { nodes(:bird_jpg) }
|
|
679
679
|
get 'show', :prefix => 'oo', :path => ["image#{node.zip}_pv.jpg"]
|
|
680
680
|
# missing cache info, can use public image
|
|
681
|
-
assert_redirected_to "/en/image#{node.zip}_pv
|
|
681
|
+
assert_redirected_to "/en/image#{node.zip}_pv.#{make_cachestamp(node,'pv')}.jpg"
|
|
682
682
|
# bad cache info
|
|
683
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
684
|
-
assert_redirected_to "/en/image#{node.zip}
|
|
683
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.1234.jpg"]
|
|
684
|
+
assert_redirected_to "/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"
|
|
685
685
|
# cache info ok
|
|
686
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
686
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"]
|
|
687
687
|
assert_response :success
|
|
688
688
|
end
|
|
689
689
|
|
|
@@ -692,12 +692,12 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
692
692
|
node = secure!(Node) { nodes(:style_css) }
|
|
693
693
|
get 'show', :prefix => 'oo', :path => ["textdocument#{node.zip}.css"]
|
|
694
694
|
# missing cache info, should use public lang
|
|
695
|
-
assert_redirected_to "/en/textdocument#{node.zip}
|
|
695
|
+
assert_redirected_to "/en/textdocument#{node.zip}.#{make_cachestamp(node,nil)}.css"
|
|
696
696
|
# bad cache info
|
|
697
|
-
get 'show', :prefix => 'en', :path => ["textdocument#{node.zip}.css"]
|
|
698
|
-
assert_redirected_to "/en/textdocument#{node.zip}
|
|
697
|
+
get 'show', :prefix => 'en', :path => ["textdocument#{node.zip}.1234.css"]
|
|
698
|
+
assert_redirected_to "/en/textdocument#{node.zip}.#{make_cachestamp(node,nil)}.css"
|
|
699
699
|
# cache info ok
|
|
700
|
-
get 'show', :prefix => 'en', :path => ["textdocument#{node.zip}.css"]
|
|
700
|
+
get 'show', :prefix => 'en', :path => ["textdocument#{node.zip}.#{make_cachestamp(node,nil)}.css"]
|
|
701
701
|
assert_response :success
|
|
702
702
|
end
|
|
703
703
|
|
|
@@ -708,16 +708,16 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
|
708
708
|
node = secure!(Node) { nodes(:bird_jpg) }
|
|
709
709
|
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
710
710
|
# missing cache info
|
|
711
|
-
assert_redirected_to "/en/image#{node.zip}
|
|
711
|
+
assert_redirected_to "/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"
|
|
712
712
|
assert !File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.jpg")
|
|
713
713
|
# bad cache info
|
|
714
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
715
|
-
assert_redirected_to "/en/image#{node.zip}
|
|
716
|
-
assert !File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.jpg")
|
|
714
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.1234.jpg"]
|
|
715
|
+
assert_redirected_to "/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"
|
|
716
|
+
assert !File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg")
|
|
717
717
|
# cache info ok
|
|
718
|
-
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"]
|
|
718
|
+
get 'show', :prefix => 'en', :path => ["image#{node.zip}.#{make_cachestamp(node,nil)}.jpg"]
|
|
719
719
|
assert_response :success
|
|
720
|
-
assert File.exist?(
|
|
720
|
+
assert File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.#{make_cachestamp(node,nil)}.jpg")
|
|
721
721
|
end
|
|
722
722
|
end
|
|
723
723
|
end
|
|
@@ -778,10 +778,6 @@ END:VCALENDAR
|
|
|
778
778
|
end
|
|
779
779
|
end
|
|
780
780
|
|
|
781
|
-
def make_cache_path(file, node)
|
|
782
|
-
"#{file}.#{node.updated_at.to_i}"
|
|
783
|
-
end
|
|
784
|
-
|
|
785
781
|
def test_cache_css_auto_publish
|
|
786
782
|
test_site('zena')
|
|
787
783
|
Site.connection.execute "UPDATE sites set auto_publish = #{Zena::Db::TRUE}, redit_time = 7200 WHERE id = #{sites_id(:zena)}"
|
|
@@ -789,14 +785,15 @@ END:VCALENDAR
|
|
|
789
785
|
login(:tiger)
|
|
790
786
|
node = secure!(Node) { nodes(:style_css) }
|
|
791
787
|
without_files('/test.host/public') do
|
|
792
|
-
name =
|
|
793
|
-
|
|
788
|
+
name = 'textdocument54.11fbc.css'
|
|
789
|
+
base = "#{SITES_ROOT}/test.host/public/en"
|
|
790
|
+
filename = [base, name].join('/')
|
|
794
791
|
with_caching do
|
|
795
792
|
assert !File.exist?(filename)
|
|
796
|
-
get 'show', :prefix => 'en', :path => [name]
|
|
793
|
+
get 'show', :prefix => 'en', :path => [name]
|
|
797
794
|
assert_response :success
|
|
798
|
-
cache1 =
|
|
799
|
-
assert File.exist?(cache1) # cached page created
|
|
795
|
+
cache1 = filename
|
|
796
|
+
assert File.exist?(cache1), "Cache exists #{cache1}" # cached page created
|
|
800
797
|
assert_match %r[body \{ background: #eee; color:#444;], File.read(cache1)
|
|
801
798
|
put 'save_text', :id => nodes_zip(:style_css), :node => {'text' => '/* empty */'}
|
|
802
799
|
node = assigns['node']
|
|
@@ -804,9 +801,12 @@ END:VCALENDAR
|
|
|
804
801
|
assert_equal Zena::Status::Pub, node.version.status
|
|
805
802
|
assert_equal versions_id(:style_css_en), node.version.id # auto publish
|
|
806
803
|
assert !File.exist?(cache1) # old cached page removed
|
|
807
|
-
|
|
804
|
+
name2 = "textdocument54.#{make_cachestamp(node, nil)}.css"
|
|
805
|
+
get 'show', :prefix => 'en', :path => [name]
|
|
806
|
+
assert_redirected_to "/en/#{name2}"
|
|
807
|
+
get 'show', :prefix => 'en', :path => [name2]
|
|
808
808
|
assert_response :success
|
|
809
|
-
cache2 =
|
|
809
|
+
cache2 = [base, name2].join('/')
|
|
810
810
|
assert File.exist?(cache2) # cached page created again
|
|
811
811
|
assert_match %r[/\* empty \*/], File.read(cache2)
|
|
812
812
|
end
|
|
@@ -859,6 +859,51 @@ END:VCALENDAR
|
|
|
859
859
|
assert_match %r{deux}, doc_versions[1].text
|
|
860
860
|
end
|
|
861
861
|
end
|
|
862
|
+
|
|
863
|
+
def test_import_xhtml
|
|
864
|
+
without_files('/test.host/data') do
|
|
865
|
+
without_files('/test.host/zafu') do
|
|
866
|
+
login(:lion)
|
|
867
|
+
post 'import', :id => nodes(:skins).zip, :node => {:klass => 'Skin', :v_status => Zena::Status::Pub}, :attachment => uploaded_archive('jet_30.zip')
|
|
868
|
+
|
|
869
|
+
node_list = assigns(:nodes)
|
|
870
|
+
nodes = {}
|
|
871
|
+
node_list.each do |n|
|
|
872
|
+
nodes[n.title] = n
|
|
873
|
+
end
|
|
874
|
+
assert skin = nodes['jet_30']
|
|
875
|
+
assert_kind_of Skin, skin
|
|
876
|
+
assert zafu = nodes['Node']
|
|
877
|
+
assert_kind_of Template, zafu
|
|
878
|
+
assert_equal 'html', zafu.format
|
|
879
|
+
assert_equal 'Node', zafu.target_klass
|
|
880
|
+
assert_equal 'N', zafu.tkpath
|
|
881
|
+
assert style = nodes['style']
|
|
882
|
+
assert_kind_of TextDocument, style
|
|
883
|
+
assert navBar = nodes['nav_bar']
|
|
884
|
+
assert_kind_of Image, navBar
|
|
885
|
+
assert xhtmlBgHover = nodes['xhtml_bg_hover']
|
|
886
|
+
assert_kind_of Image, xhtmlBgHover
|
|
887
|
+
assert topIcon = nodes['top_icon']
|
|
888
|
+
assert_kind_of Image, topIcon
|
|
889
|
+
['lft_pic1', 'lft_pic2', 'lft_pic3'].each do |p|
|
|
890
|
+
assert nodes[p]
|
|
891
|
+
assert_kind_of Image, nodes[p]
|
|
892
|
+
end
|
|
893
|
+
assert_match %r{#header ul\{\s*background:url\('/en/image#{navBar.zip}.[0-9a-f]+.gif'\)}m, style.text
|
|
894
|
+
assert_match %r{a\.xht:hover\{\s*background:url\('/en/image#{xhtmlBgHover.zip}.[0-9a-f]+.gif'\)}, style.text
|
|
895
|
+
|
|
896
|
+
# use this template
|
|
897
|
+
status = nodes(:status)
|
|
898
|
+
status.visitor = Thread.current[:visitor]
|
|
899
|
+
assert status.update_attributes(:skin_id => skin.id, :inherit => 0)
|
|
900
|
+
get 'show', 'prefix'=>'oo', 'path'=>['projects-list', 'Clean-Water-project', "page#{status.zip}.html"]
|
|
901
|
+
assert_response :success
|
|
902
|
+
|
|
903
|
+
assert_match %r{posuere eleifend arcu</p>\s*<img [^>]*src\s*=\s*./en/image#{topIcon.zip}.[0-9a-f]+.gif}, @response.body
|
|
904
|
+
end
|
|
905
|
+
end
|
|
906
|
+
end
|
|
862
907
|
|
|
863
908
|
def test_edit_attribute_publish
|
|
864
909
|
login(:tiger)
|
|
@@ -970,7 +1015,7 @@ END:VCALENDAR
|
|
|
970
1015
|
|
|
971
1016
|
def test_search_qb
|
|
972
1017
|
login(:anon)
|
|
973
|
-
get 'search', 'qb' => '
|
|
1018
|
+
get 'search', 'qb' => 'projects where (set_tag.id = 33 and hot.id = 22) in site'
|
|
974
1019
|
assert_response :success
|
|
975
1020
|
assert nodes = assigns(:nodes)
|
|
976
1021
|
assert_equal [nodes_id(:cleanWater)], nodes.map(&:id)
|
|
@@ -88,8 +88,8 @@ class VersionsControllerTest < Zena::Controller::TestCase
|
|
|
88
88
|
|
|
89
89
|
res =<<-END_CSS
|
|
90
90
|
body { font-size:10px; }
|
|
91
|
-
#header { background:url('/en/image30.jpg
|
|
92
|
-
#footer { background:url('/en/image31.jpg
|
|
91
|
+
#header { background:url('/en/image30.11fbc.jpg') }
|
|
92
|
+
#footer { background:url('/en/image31.11fbc.jpg') }
|
|
93
93
|
END_CSS
|
|
94
94
|
assert_equal res, node.text
|
|
95
95
|
get 'edit', :node_id => node.zip, :id => 0, :unparse_assets => 'true'
|
|
@@ -23,8 +23,7 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
23
23
|
assert_redirected_to 'http://test.host/oo'
|
|
24
24
|
follow_redirect!
|
|
25
25
|
assert_response :success
|
|
26
|
-
get 'http://test.host/fr/textdocument54.css
|
|
27
|
-
assert_response :success
|
|
26
|
+
get 'http://test.host/fr/textdocument54.11fbc.css' # data with timestamp
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
def test_should_not_redirect_to_css
|
|
@@ -54,7 +53,7 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
54
53
|
|
|
55
54
|
subject do
|
|
56
55
|
[
|
|
57
|
-
"http://
|
|
56
|
+
"http://test.host:1234/oo/project19.html",
|
|
58
57
|
{},
|
|
59
58
|
@headers
|
|
60
59
|
]
|
|
@@ -71,7 +70,7 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
71
70
|
context 'but invalid host' do
|
|
72
71
|
subject do
|
|
73
72
|
[
|
|
74
|
-
"http://
|
|
73
|
+
"http://ocean.host:1234/oo/project19.html",
|
|
75
74
|
{},
|
|
76
75
|
@headers
|
|
77
76
|
]
|
|
@@ -82,8 +81,8 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
82
81
|
reset!
|
|
83
82
|
get *subject
|
|
84
83
|
assert_response :redirect
|
|
85
|
-
assert_redirected_to 'http://
|
|
86
|
-
assert_equal users_id(:
|
|
84
|
+
assert_redirected_to 'http://ocean.host/login'
|
|
85
|
+
assert_equal users_id(:incognito), visitor.id
|
|
87
86
|
end
|
|
88
87
|
end # but invalid host
|
|
89
88
|
end # with a valid http auth
|
|
@@ -103,35 +102,6 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
103
102
|
end
|
|
104
103
|
end # Rescue template rendering
|
|
105
104
|
|
|
106
|
-
|
|
107
|
-
# HTTP_AUTH disabled
|
|
108
|
-
# def test_authorize_http_auth
|
|
109
|
-
# Site.connection.execute "UPDATE sites SET http_auth = 1 WHERE id = #{sites_id(:zena)}"
|
|
110
|
-
# get 'http://test.host/'
|
|
111
|
-
# assert_redirected_to 'http://test.host/en'
|
|
112
|
-
# follow_redirect!
|
|
113
|
-
# assert_response :success
|
|
114
|
-
#
|
|
115
|
-
# # 1. site forces authentication
|
|
116
|
-
# Site.connection.execute "UPDATE sites SET authentication = 1 WHERE id = #{sites_id(:zena)}"
|
|
117
|
-
# get 'http://test.host/'
|
|
118
|
-
# assert_response 401 # http_auth
|
|
119
|
-
#
|
|
120
|
-
# reset!
|
|
121
|
-
# post 'http://test.host/session', :login => 'tiger', :password => 'tiger'
|
|
122
|
-
# assert_redirected_to "http://test.host/users/#{users_id(:tiger)}"
|
|
123
|
-
#
|
|
124
|
-
# # 2. navigating out of '/oo' but logged in and format is not data
|
|
125
|
-
# get 'http://test.host/fr'
|
|
126
|
-
# assert_redirected_to 'http://test.host/oo'
|
|
127
|
-
# follow_redirect!
|
|
128
|
-
# assert_response :success
|
|
129
|
-
# assert_equal 'fr', session[:lang]
|
|
130
|
-
# get 'http://test.host/en/textdocument53.css' # data
|
|
131
|
-
# assert_response :success
|
|
132
|
-
# assert_equal 'fr', session[:lang]
|
|
133
|
-
# end
|
|
134
|
-
|
|
135
105
|
def test_out_of_oo_custom_base_set_lang
|
|
136
106
|
post 'http://test.host/session', :login => 'tiger', :password => 'tiger'
|
|
137
107
|
assert_redirected_to "http://test.host/oo"
|
|
@@ -440,6 +410,62 @@ class NavigationTest < Zena::Integration::TestCase
|
|
|
440
410
|
follow_redirect!
|
|
441
411
|
assert_response :missing
|
|
442
412
|
end
|
|
413
|
+
|
|
414
|
+
def test_cache_root
|
|
415
|
+
without_files('test.host/public') do
|
|
416
|
+
preserving_files('/test.host/data') do
|
|
417
|
+
with_caching do
|
|
418
|
+
login(:anon)
|
|
419
|
+
root_path = "#{SITES_ROOT}#{visitor.site.public_path}/en.html"
|
|
420
|
+
assert !File.exists?(root_path), "No cached file yet"
|
|
421
|
+
get 'http://test.host/en'
|
|
422
|
+
assert_response :success
|
|
423
|
+
|
|
424
|
+
# en.html exist
|
|
425
|
+
assert File.exists?(root_path), "Cached file created"
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
def test_cache_query_string
|
|
432
|
+
without_files('test.host/public') do
|
|
433
|
+
preserving_files('/test.host/data') do
|
|
434
|
+
with_caching do
|
|
435
|
+
login(:anon)
|
|
436
|
+
base = "#{SITES_ROOT}#{visitor.site.public_path}"
|
|
437
|
+
good = {
|
|
438
|
+
'/en?p=1' => '/enp=1.html',
|
|
439
|
+
'/en?p=2' => '/enp=2.html',
|
|
440
|
+
'/en?p=9' => '/enp=9.html',
|
|
441
|
+
'/en/blog29.html?p=2' => '/en/blog29.htmlp=2.html',
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
bad = {
|
|
445
|
+
'/en?x=1' => '/en.htmlx=1.html',
|
|
446
|
+
'/en?ap=2' => '/en.htmlap=2.html',
|
|
447
|
+
'/en?p=99' => '/en.htmlp=99.html',
|
|
448
|
+
'/en/blog29.html?p=21' => '/en/blog29.htmlp=21.html',
|
|
449
|
+
'/en/blog29.html?x=2' => '/en/blog29.htmlx=2.html',
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
good.each do |p, c|
|
|
453
|
+
assert !File.exists?(base + c), "No cached file #{c} yet"
|
|
454
|
+
get "http://test.host#{p}"
|
|
455
|
+
assert_response :success
|
|
456
|
+
assert File.exists?(base + c), "Cached file #{c} created"
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
bad.each do |p, c|
|
|
460
|
+
assert !File.exists?(base + c), "No cached file #{c} yet"
|
|
461
|
+
get "http://test.host#{p}"
|
|
462
|
+
assert_response :success
|
|
463
|
+
assert !File.exists?(base + c), "No cached file #{c} created"
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
end
|
|
443
469
|
|
|
444
470
|
def test_should_not_change_session_lang_on_login
|
|
445
471
|
get 'http://test.host/'
|
|
@@ -44,7 +44,7 @@ pages_or_letters:
|
|
|
44
44
|
context:
|
|
45
45
|
node: zena
|
|
46
46
|
src: pages or letters
|
|
47
|
-
sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND ((nodes.kpath LIKE 'NP%' AND nodes.parent_id = ?) OR (nodes.kpath LIKE 'NNL%' AND nodes.parent_id = ?)) GROUP BY id ORDER BY nodes.zip ASC}, @node.id, @node.id]"
|
|
47
|
+
sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND ((nodes.kpath LIKE 'NP%' AND nodes.parent_id = ?) OR (nodes.kpath LIKE 'NNL%' AND nodes.parent_id = ?)) GROUP BY nodes.id ORDER BY nodes.zip ASC}, @node.id, @node.id]"
|
|
48
48
|
res: "people, projects list, Collections, Kill the bugs, Nature, zena enhancements, Skins (layout themes)"
|
|
49
49
|
|
|
50
50
|
project:
|
|
@@ -62,19 +62,19 @@ min:
|
|
|
62
62
|
|
|
63
63
|
many_alternatives:
|
|
64
64
|
src: tagged in site or images in site or tags in site
|
|
65
|
-
sql: "%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
65
|
+
sql: "%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND ((nodes.id = links.source_id AND links.relation_id = _ID(node_has_tags)) OR (nodes.kpath LIKE 'NDI%' AND links.id = 0) OR (nodes.kpath LIKE 'NPT%' AND links.id = 0)) GROUP BY nodes.id ORDER BY nodes.zip ASC}"
|
|
66
66
|
# res: "art, bird, Clean Water project, flower, it's a lake, menu, news, opening, tree"
|
|
67
67
|
|
|
68
68
|
alternatives_same_join:
|
|
69
69
|
src: tagged in site or icons
|
|
70
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
70
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND ((nodes.id = links.source_id AND links.relation_id = _ID(node_has_tags)) OR (nodes.id = links.target_id AND links.relation_id = _ID(node_has_an_icon) AND links.source_id = ?)) GROUP BY nodes.id ORDER BY nodes.zip ASC}, @node.id]"
|
|
71
71
|
res: "Clean Water project, it's a lake, super ouverture"
|
|
72
72
|
|
|
73
73
|
same_name_as_class:
|
|
74
74
|
context:
|
|
75
75
|
node: 'opening'
|
|
76
76
|
src: "set_tags"
|
|
77
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
77
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND nodes.id = links.target_id AND links.relation_id = _ID(node_has_tags) AND links.source_id = ? ORDER BY nodes.zip ASC}, @node.id]"
|
|
78
78
|
res: "Art, News list"
|
|
79
79
|
|
|
80
80
|
|
|
@@ -109,19 +109,19 @@ children_with_order_clause:
|
|
|
109
109
|
notes_or_news:
|
|
110
110
|
context:
|
|
111
111
|
class: Project
|
|
112
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
112
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND ((nodes.kpath LIKE 'NN%' AND nodes.parent_id = ? AND links.id = 0) OR (nodes.id = links.source_id AND links.relation_id = _ID(note_has_calendars) AND links.target_id = ?)) GROUP BY nodes.id ORDER BY nodes.zip ASC}, @node.id, @node.id]"
|
|
113
113
|
|
|
114
114
|
news_or_notes:
|
|
115
115
|
context:
|
|
116
116
|
class: Project
|
|
117
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
117
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND ((nodes.id = links.source_id AND links.relation_id = _ID(note_has_calendars) AND links.target_id = ?) OR (nodes.kpath LIKE 'NN%' AND nodes.parent_id = ? AND links.id = 0)) GROUP BY nodes.id ORDER BY nodes.zip ASC}, @node.id, @node.id]"
|
|
118
118
|
|
|
119
119
|
order_l_status:
|
|
120
120
|
context:
|
|
121
121
|
node: art
|
|
122
122
|
class: Tag
|
|
123
123
|
src: "tagged order by l_status ASC, zip ASC"
|
|
124
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
124
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND nodes.id = links.source_id AND links.relation_id = _ID(node_has_tags) AND links.target_id = ? ORDER BY links.status ASC, nodes.zip ASC}, @node.id]"
|
|
125
125
|
res: "super ouverture, Clean Water project"
|
|
126
126
|
|
|
127
127
|
order_random:
|
|
@@ -9,7 +9,7 @@ default:
|
|
|
9
9
|
comments_from_nodes_in_site:
|
|
10
10
|
context:
|
|
11
11
|
visitor: lion
|
|
12
|
-
sql: "Comment: %Q{SELECT comments.* FROM comments
|
|
12
|
+
sql: "Comment: %Q{SELECT comments.* FROM comments JOIN discussions JOIN nodes AS no1 WHERE comments.discussion_id = discussions.id AND discussions.node_id = no1.id AND #{secure_scope('no1')} GROUP BY comments.id ORDER BY comments.created_at ASC}"
|
|
13
13
|
res: "Comment: I agree, I think this is bad, OK for me, Why ?, Travailleurs, unissez-vous !, Nice site, What about rivers ?, re: What about rivers ?, I want to become queen"
|
|
14
14
|
|
|
15
15
|
does_not_see_secret:
|
|
@@ -49,7 +49,7 @@ all_courses_for_mike:
|
|
|
49
49
|
class: Employee
|
|
50
50
|
src: assigned_courses from pages in project from assigned_jobs
|
|
51
51
|
# TODO: optimization
|
|
52
|
-
#sql: "[%Q{SELECT no1.*,li1.id AS link_id,links.status AS l_status,links.comment AS l_comment,links.date AS l_date FROM links
|
|
52
|
+
#sql: "[%Q{SELECT no1.*,li1.id AS link_id,links.status AS l_status,links.comment AS l_comment,links.date AS l_date FROM links JOIN nodes JOIN nodes AS no1,links AS li1 WHERE no1.id = li1.target_id AND li1.relation_id = 512923747 AND li1.source_id = nodes.id AND nodes.kpath LIKE 'NP%' AND nodes.project_id = links.target_id AND links.relation_id = 813976280 AND links.source_id = \#{@node.id} AND (\#{@node.secure_scope('no1')}) GROUP BY no1.id ORDER BY no1.position ASC, no1.node_name ASC}]"
|
|
53
53
|
res: "problem formulation, information transmission, secure a site, how to use the winch, how to use the radio, fiber junction, responsabilities management, motivate your team, our vision"
|
|
54
54
|
|
|
55
55
|
all_achieved_formations_for_roger:
|
|
@@ -63,8 +63,8 @@ custom_query_form_date:
|
|
|
63
63
|
context:
|
|
64
64
|
node: roger
|
|
65
65
|
class: Employee
|
|
66
|
-
src:
|
|
67
|
-
res: "
|
|
66
|
+
src: det_programs order by title ASC
|
|
67
|
+
res: ""
|
|
68
68
|
|
|
69
69
|
custom_query_form_with_where:
|
|
70
70
|
context:
|
|
@@ -27,7 +27,7 @@ filter_l_status:
|
|
|
27
27
|
node: art
|
|
28
28
|
class: Tag
|
|
29
29
|
src: "tagged where l_status > 5"
|
|
30
|
-
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links
|
|
30
|
+
sql: "[%Q{SELECT nodes.*,links.id AS `link_id`,links.status AS `l_status`,links.comment AS `l_comment`,links.date AS `l_date` FROM links JOIN nodes WHERE #{secure_scope('nodes')} AND links.status > 5 AND nodes.id = links.source_id AND links.relation_id = _ID(node_has_tags) AND links.target_id = ? ORDER BY nodes.zip ASC}, @node.id]"
|
|
31
31
|
res: "Clean Water project"
|
|
32
32
|
|
|
33
33
|
param_filter:
|
|
@@ -79,8 +79,8 @@ negative_value:
|
|
|
79
79
|
sql: "%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND nodes.custom_a <> -10 AND nodes.kpath LIKE 'NN%' ORDER BY nodes.zip ASC}"
|
|
80
80
|
|
|
81
81
|
filter_through_links:
|
|
82
|
-
src: "
|
|
83
|
-
sql: "
|
|
82
|
+
src: "projects where (set_tag.id = 33 and hot.id = 22) in site"
|
|
83
|
+
sql: "/.*li1.source_id = nodes.id.*li2.source_id = nodes.id.*jn1\.zip = 33 AND jn2\.zip = 22/"
|
|
84
84
|
res: "Clean Water project"
|
|
85
85
|
|
|
86
86
|
filter_with_fullpath:
|
|
@@ -91,7 +91,7 @@ filter_with_fullpath:
|
|
|
91
91
|
|
|
92
92
|
class_filter:
|
|
93
93
|
src: "nodes where class like Image or class = Project in site"
|
|
94
|
-
sql: "%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND (nodes.kpath LIKE 'NDI%' OR nodes.kpath = 'NPP') GROUP BY id ORDER BY nodes.zip ASC}"
|
|
94
|
+
sql: "%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND (nodes.kpath LIKE 'NDI%' OR nodes.kpath = 'NPP') GROUP BY nodes.id ORDER BY nodes.zip ASC}"
|
|
95
95
|
res: "Zena the wild CMS, Clean Water project, it's a lake, bird, flower, Autumn Tree"
|
|
96
96
|
|
|
97
97
|
class_filter_with_quotes:
|
|
@@ -104,7 +104,7 @@ klass_filter:
|
|
|
104
104
|
|
|
105
105
|
role_filter:
|
|
106
106
|
src: "nodes where role = Original in site"
|
|
107
|
-
sql: "%Q{SELECT nodes.* FROM nodes
|
|
107
|
+
sql: "%Q{SELECT nodes.* FROM nodes JOIN nodes_roles WHERE #{secure_scope('nodes')} AND (nodes_roles.node_id = nodes.id AND nodes_roles.role_id = 493147733) ORDER BY nodes.zip ASC}"
|
|
108
108
|
res: 'Autumn Tree'
|
|
109
109
|
|
|
110
110
|
role_filter_string:
|
|
@@ -113,13 +113,37 @@ role_filter_string:
|
|
|
113
113
|
|
|
114
114
|
role_as_relation_filter:
|
|
115
115
|
src: "originals in site"
|
|
116
|
-
sql: "%Q{SELECT nodes.* FROM nodes
|
|
116
|
+
sql: "%Q{SELECT nodes.* FROM nodes JOIN nodes_roles WHERE #{secure_scope('nodes')} AND nodes_roles.role_id = 493147733 AND nodes_roles.node_id = nodes.id ORDER BY nodes.zip ASC}"
|
|
117
117
|
res: 'Autumn Tree'
|
|
118
118
|
|
|
119
|
+
relation_filter:
|
|
120
|
+
context:
|
|
121
|
+
node: status
|
|
122
|
+
params:
|
|
123
|
+
list: 22
|
|
124
|
+
src: "projects where hot.id in (#{params[:list]}) in site"
|
|
125
|
+
sql: "[%Q{SELECT nodes.* FROM nodes LEFT JOIN links AS li1 ON li1.source_id = nodes.id AND li1.relation_id = 126629661 LEFT JOIN nodes AS jn1 ON jn1.id = li1.target_id WHERE #{secure_scope('nodes')} AND jn1.zip IN (?) AND nodes.kpath LIKE 'NPP%' GROUP BY nodes.id ORDER BY nodes.zip ASC}, params[:list]]"
|
|
126
|
+
res: "Clean Water project"
|
|
127
|
+
|
|
128
|
+
relation_filter_null:
|
|
129
|
+
context:
|
|
130
|
+
node: status
|
|
131
|
+
src: "projects where hot.id is null in site"
|
|
132
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN links AS li1 ON li1.source_id = nodes.id AND li1.relation_id = 126629661 LEFT JOIN nodes AS jn1 ON jn1.id = li1.target_id WHERE #{secure_scope('nodes')} AND jn1.zip IS NULL AND nodes.kpath LIKE 'NPP%' GROUP BY nodes.id ORDER BY nodes.zip ASC}"
|
|
133
|
+
# NOT CleanWater
|
|
134
|
+
res: "Zena the wild CMS, a wiki with Zena"
|
|
135
|
+
|
|
136
|
+
relation_filter_attr:
|
|
137
|
+
context:
|
|
138
|
+
node: status
|
|
139
|
+
src: "projects where hot.title = 'Etat des travaux' in site"
|
|
140
|
+
sql: "/ON ml1.node_id = jn1.id AND ml1.key = 'title' AND ml1.lang = 'fr'.*ml1.value = 'Etat des travaux'/"
|
|
141
|
+
res: "Clean Water project"
|
|
142
|
+
|
|
119
143
|
filter_by_parent:
|
|
120
144
|
src: "nodes where parent_id = 11 in site"
|
|
121
145
|
# nodes where parent.zip = ...
|
|
122
|
-
sql: "%Q{SELECT nodes.* FROM nodes
|
|
146
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN nodes AS jn1 ON jn1.id = nodes.parent_id AND jn1.site_id = nodes.site_id WHERE #{secure_scope('nodes')} AND jn1.zip = 11 ORDER BY nodes.zip ASC}"
|
|
123
147
|
res: 'people, projects list, Collections, Kill the bugs, Nature, zena enhancements, Skins (layout themes)'
|
|
124
148
|
#many_role_filter:
|
|
125
149
|
# This is not working (or clause on 'indexed' fields is not supported right now)
|
|
@@ -129,7 +153,7 @@ filter_by_parent:
|
|
|
129
153
|
|
|
130
154
|
quoted_literal:
|
|
131
155
|
src: "nodes where tag=\"10'000\" in site"
|
|
132
|
-
sql: "%Q{SELECT nodes.* FROM links AS ta1
|
|
156
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN links AS ta1 ON nodes.id = ta1.source_id AND ta1.relation_id IS NULL WHERE #{secure_scope('nodes')} AND ta1.comment = '10\\\\'000' ORDER BY nodes.zip ASC}"
|
|
133
157
|
res: ''
|
|
134
158
|
# filters on ml strings are in properties.yml
|
|
135
159
|
|
|
@@ -6,17 +6,17 @@ default:
|
|
|
6
6
|
|
|
7
7
|
ml_title_where:
|
|
8
8
|
src: "nodes where title like 'Etat%' in site"
|
|
9
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
9
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND ml1.value LIKE 'Etat%' ORDER BY nodes.zip ASC}"
|
|
10
10
|
res: 'Etat des travaux'
|
|
11
11
|
|
|
12
12
|
ml_title_where_with_or:
|
|
13
13
|
src: "nodes where title like 'Etat%' or class = Letter in site"
|
|
14
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
14
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND (ml1.value LIKE 'Etat%' OR nodes.kpath = 'NNL') GROUP BY nodes.id ORDER BY nodes.zip ASC}"
|
|
15
15
|
res: 'Etat des travaux, zena enhancements'
|
|
16
16
|
|
|
17
17
|
name_where:
|
|
18
18
|
src: "contacts where name like 'Inv%' in site"
|
|
19
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_strings AS st1
|
|
19
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_strings AS st1 ON st1.node_id = nodes.id AND st1.key = 'name' WHERE #{secure_scope('nodes')} AND st1.value LIKE 'Inv%' AND nodes.kpath LIKE 'NRC%' ORDER BY nodes.zip ASC}"
|
|
20
20
|
res: 'Solenopsis Invicta'
|
|
21
21
|
|
|
22
22
|
# TODO: Only implement with a proper use case. Ref [#190]
|
|
@@ -31,13 +31,13 @@ ml_title_order:
|
|
|
31
31
|
context:
|
|
32
32
|
node: 'cleanWater'
|
|
33
33
|
src: "pages in site order by title asc limit 7"
|
|
34
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
34
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND nodes.kpath LIKE 'NP%' ORDER BY ml1.value ASC LIMIT 7}"
|
|
35
35
|
res: "a wiki with Zena, Art, Clean Water project, Collections, crocodiles, Default skin, Etat des travaux"
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
ml_title_filter_in_relation:
|
|
39
39
|
src: "references where title = 'important'"
|
|
40
|
-
sql: "/idx_nodes_ml_strings AS ml1.*
|
|
40
|
+
sql: "/idx_nodes_ml_strings AS ml1.*key = 'title'.*lang = 'fr'.*ml1.value = 'important'.*nodes.id = links.target_id.*source_id = \?/"
|
|
41
41
|
res: ""
|
|
42
42
|
|
|
43
43
|
|
|
@@ -45,19 +45,19 @@ filter_ml_string:
|
|
|
45
45
|
context:
|
|
46
46
|
lang: 'de'
|
|
47
47
|
src: "nodes where title = 'foo' in site"
|
|
48
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
48
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND ml1.value = 'foo' ORDER BY nodes.zip ASC}"
|
|
49
49
|
|
|
50
50
|
filter_ml_string_order:
|
|
51
51
|
context:
|
|
52
52
|
lang: 'de'
|
|
53
53
|
src: "nodes where title = 'foo' in site order by title"
|
|
54
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
54
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND ml1.value = 'foo' ORDER BY ml1.value}"
|
|
55
55
|
|
|
56
56
|
filter_ml_string_twice:
|
|
57
57
|
context:
|
|
58
58
|
lang: 'de'
|
|
59
59
|
src: "nodes where title = 'foo' and title = 'baz' in site"
|
|
60
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
60
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND ml1.value = 'foo' AND ml1.value = 'baz' ORDER BY nodes.zip ASC}"
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
ml_title_with_name:
|
|
@@ -67,11 +67,11 @@ ml_title_with_name:
|
|
|
67
67
|
|
|
68
68
|
ml_title_with_name_with_sort:
|
|
69
69
|
src: "contacts where title like '%Invicta%' or name = 'Leo Verneyi' in site order by title"
|
|
70
|
-
sql: "/ml1.*
|
|
70
|
+
sql: "/ml1.*st1/"
|
|
71
71
|
res: 'Panthera Leo Verneyi, Solenopsis Invicta'
|
|
72
72
|
|
|
73
73
|
# Group by property
|
|
74
74
|
group_by_ml_title:
|
|
75
75
|
src: 'contacts in site group by title'
|
|
76
|
-
sql: "%Q{SELECT nodes.* FROM idx_nodes_ml_strings AS ml1
|
|
76
|
+
sql: "%Q{SELECT nodes.* FROM nodes LEFT JOIN idx_nodes_ml_strings AS ml1 ON ml1.node_id = nodes.id AND ml1.key = 'title' AND ml1.lang = 'fr' WHERE #{secure_scope('nodes')} AND nodes.kpath LIKE 'NRC%' GROUP BY ml1.value ORDER BY nodes.zip ASC}"
|
|
77
77
|
res: "Solenopsis Invicta, Panthera Tigris Sumatran, Panthera Leo Verneyi, The lake we love, Mr nobody"
|