zena 1.2.7 → 1.2.8
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 +80 -25
- data/Rakefile +2 -2
- data/app/controllers/columns_controller.rb +2 -2
- data/app/controllers/nodes_controller.rb +22 -29
- data/app/controllers/user_sessions_controller.rb +35 -10
- data/app/controllers/users_controller.rb +2 -2
- data/app/controllers/versions_controller.rb +2 -2
- data/app/models/group.rb +15 -1
- data/app/models/node.rb +109 -8
- data/app/models/role.rb +4 -0
- data/app/models/site.rb +64 -58
- data/app/models/template.rb +1 -1
- data/app/models/user.rb +135 -29
- data/app/models/user_session.rb +0 -1
- data/app/models/virtual_class.rb +11 -6
- data/app/views/columns/_form.html.erb +3 -1
- data/app/views/columns/_li.html.erb +1 -1
- data/app/views/columns/create.rjs +1 -1
- data/app/views/groups/_form.rhtml +16 -13
- data/app/views/relations/_form.erb +18 -6
- data/app/views/sites/_form.erb +12 -6
- data/app/views/users/_form.rhtml +23 -8
- data/app/views/users/_li.rhtml +14 -3
- data/app/views/users/index.rhtml +1 -1
- data/app/views/virtual_classes/_form.erb +12 -2
- data/app/views/zafu/default/Node-+login.zafu +8 -1
- data/app/views/zafu/default/Node-+search.zafu +1 -1
- data/bricks/acls/lib/bricks/acls.rb +1 -0
- data/bricks/acls/zena/migrate/20130903150356_longer_names_for_acl.rb +9 -0
- data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
- data/bricks/currency/lib/bricks/currency.rb +120 -0
- data/bricks/currency/zena/test/unit/currency_test.rb +43 -0
- data/bricks/fs_skin/lib/bricks/fs_skin.rb +1 -1
- data/bricks/fs_skin/zena/skins/blog/Node-+search.zafu +1 -1
- data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
- data/bricks/fs_skin/zena/test/unit/fs_skin_view_test.rb +35 -0
- data/bricks/pdf/lib/bricks/pdf.rb +1 -1
- data/bricks/sphinx/lib/bricks/sphinx.rb +2 -0
- data/bricks/sphinx/zena/init.rb +14 -0
- data/bricks/tags/zena/test/zafu/tags.yml +5 -1
- data/bricks/worker/lib/bricks/worker.rb +3 -2
- data/bricks/zena/zena/migrate/20130829093753_add_versioned_flag_to_column.rb +10 -0
- data/bricks/zena/zena/migrate/20130903084909_count_login_attempts.rb +11 -0
- data/bricks/zena/zena/migrate/20131104153126_index_fullpath.rb +10 -0
- data/bricks/zena/zena/migrate/20131104210011_rebuild_fullpath_after_change.rb +10 -0
- data/bricks/zena/zena/migrate/20131105160420_add_skin_id_to_sites.rb +9 -0
- data/bricks/zena/zena/migrate/20131105175822_add_profile_to_users.rb +11 -0
- data/bricks/zena/zena/migrate/20140213120038_fix_idx_scope.rb +13 -0
- data/bricks/zena/zena/migrate/20140628140247_add_site_readonly.rb +9 -0
- data/config/bricks.yml +8 -4
- data/config/gems.yml +5 -3
- data/db/init/base/skins/default/Node-+login.zafu +8 -1
- data/db/init/base/skins/default/Node-+search.zafu +1 -1
- data/lib/bricks/loader.rb +5 -5
- data/lib/gettext_strings.rb +3 -0
- data/lib/tasks/zena.rake +25 -22
- data/lib/zafu/process/context.rb +4 -0
- data/lib/zena/acts/secure_node.rb +3 -3
- data/lib/zena/app.rb +1 -0
- data/lib/zena/deploy.rb +1 -1
- data/lib/zena/deploy/template.rb +1 -1
- data/lib/zena/foxy_parser.rb +5 -2
- data/lib/zena/info.rb +1 -1
- data/lib/zena/site_worker.rb +2 -2
- data/lib/zena/test_controller.rb +5 -2
- data/lib/zena/use/action.rb +9 -2
- data/lib/zena/use/ajax.rb +20 -4
- data/lib/zena/use/ancestry.rb +89 -15
- data/lib/zena/use/authlogic.rb +8 -2
- data/lib/zena/use/context.rb +1 -0
- data/lib/zena/use/display.rb +1 -97
- data/lib/zena/use/forms.rb +28 -8
- data/lib/zena/use/html_tags.rb +16 -7
- data/lib/zena/use/i18n.rb +1 -1
- data/lib/zena/use/prop_eval.rb +6 -1
- data/lib/zena/use/query_node.rb +69 -4
- data/lib/zena/use/recursion.rb +1 -1
- data/lib/zena/use/refactor.rb +5 -2
- data/lib/zena/use/relations.rb +1 -0
- data/lib/zena/use/rendering.rb +7 -4
- data/lib/zena/use/test_helper.rb +8 -4
- data/lib/zena/use/upload.rb +14 -0
- data/lib/zena/use/urls.rb +39 -23
- data/lib/zena/use/version_hash.rb +5 -2
- data/lib/zena/use/workflow.rb +116 -70
- data/lib/zena/use/zafu_eval.rb +41 -0
- data/lib/zena/use/zafu_safe_definitions.rb +1 -0
- data/lib/zena/use/zafu_templates.rb +32 -26
- data/lib/zena/use/zazen.rb +8 -7
- data/locale/app.pot +5 -1
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.po +385 -281
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +378 -271
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.po +387 -272
- data/locale/it/LC_MESSAGES/zena.mo +0 -0
- data/locale/it/zena.po +433 -404
- data/locale/zena.pot +362 -268
- data/public/javascripts/grid.js +280 -104
- data/public/javascripts/zena.js +43 -15
- data/public/stylesheets/admin.css +8 -2
- data/public/stylesheets/grid.css +5 -2
- data/public/stylesheets/popup.css +1 -1
- data/test/fixtures/files/TestNode.zafu +51 -0
- data/test/functional/nodes_controller_test.rb +20 -5
- data/test/functional/user_sessions_controller_test.rb +41 -6
- data/test/functional/users_controller_test.rb +1 -2
- data/test/integration/navigation_test.rb +22 -4
- data/test/integration/query_node/basic.yml +7 -0
- data/test/integration/query_node/complex.yml +1 -1
- data/test/integration/query_node/errors.yml +1 -1
- data/test/integration/query_node/filters.yml +34 -1
- data/test/integration/query_node/relations.yml +6 -13
- data/test/integration/query_node_test.rb +22 -3
- data/test/integration/zafu_compiler/action.yml +1 -1
- data/test/integration/zafu_compiler/alias_site.yml +52 -0
- data/test/integration/zafu_compiler/complex.yml +1 -1
- data/test/integration/zafu_compiler/complex_ok.yml +5 -5
- data/test/integration/zafu_compiler/context.yml +1 -1
- data/test/integration/zafu_compiler/display.yml +56 -5
- data/test/integration/zafu_compiler/forms.yml +35 -2
- data/test/integration/zafu_compiler/meta.yml +4 -0
- data/test/integration/zafu_compiler/rubyless.yml +1 -1
- data/test/integration/zafu_compiler/safe_definitions.yml +4 -0
- data/test/integration/zafu_compiler/security.yml +10 -0
- data/test/integration/zafu_compiler/site.yml +5 -1
- data/test/integration/zafu_compiler/urls.yml +8 -2
- data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
- data/test/integration/zafu_compiler/zazen.yml +4 -0
- data/test/integration/zafu_compiler_test.rb +47 -4
- data/test/selenium/Grid/grid1.rsel +8 -8
- data/test/sites/complex/sites.yml +2 -2
- data/test/sites/complex/users.yml +1 -0
- data/test/sites/zena/columns.yml +4 -0
- data/test/sites/zena/sites.yml +1 -0
- data/test/sites/zena/users.yml +1 -0
- data/test/unit/node_test.rb +53 -5
- data/test/unit/note_test.rb +1 -1
- data/test/unit/relation_proxy_test.rb +20 -0
- data/test/unit/role_test.rb +2 -0
- data/test/unit/site_test.rb +28 -6
- data/test/unit/user_test.rb +332 -1
- data/test/unit/virtual_class_test.rb +55 -0
- data/test/unit/workflow_test.rb +175 -0
- data/test/unit/zena/use/ancestry_test.rb +52 -10
- data/test/unit/zena/use/prop_eval_test.rb +44 -0
- data/test/unit/zena/use/rendering_test.rb +48 -2
- data/test/unit/zena/use/upload_test.rb +15 -13
- data/test/unit/zena/use/urls_test.rb +1 -0
- data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +39 -25
- data/zena.gemspec +69 -307
- metadata +143 -368
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
- data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
- data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
- data/vendor/plugins/selenium-on-rails/CHANGELOG +0 -125
- data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +0 -202
- data/vendor/plugins/selenium-on-rails/README.md +0 -202
- data/vendor/plugins/selenium-on-rails/Rakefile +0 -38
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +0 -265
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +0 -148
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +0 -126
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +0 -231
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +0 -195
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +0 -295
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +0 -219
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +0 -156
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +0 -179
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +0 -223
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +0 -441
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +0 -3098
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +0 -2080
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +0 -116
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +0 -116
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +0 -150
- data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +0 -422
- data/vendor/plugins/selenium-on-rails/doc/files/README.html +0 -321
- data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +0 -108
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +0 -101
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +0 -222
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +0 -109
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +0 -111
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +0 -101
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +0 -101
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +0 -118
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +0 -101
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +0 -101
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +0 -114
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +0 -113
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +0 -120
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +0 -108
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +0 -115
- data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +0 -42
- data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +0 -43
- data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +0 -182
- data/vendor/plugins/selenium-on-rails/doc/index.html +0 -24
- data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +0 -208
- data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +0 -19
- data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +0 -50
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +0 -16
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +0 -14
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +0 -11
- data/vendor/plugins/selenium-on-rails/init.rb +0 -15
- data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +0 -122
- data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +0 -16
- data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +0 -8
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +0 -11
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +0 -215
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +0 -57
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +0 -36
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +0 -61
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +0 -20
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +0 -44
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +0 -87
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +0 -56
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +0 -116
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +0 -1002
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +0 -514
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +0 -91
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +0 -24
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +0 -30
- data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +0 -18
- data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +0 -5
- data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +0 -9
- data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +0 -67
- data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +0 -26
- data/vendor/plugins/selenium-on-rails/routes.rb +0 -24
- data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +0 -7
- data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +0 -8
- data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +0 -110
- data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +0 -109
- data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +0 -145
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +0 -55
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +0 -177
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +0 -177
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +0 -298
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +0 -16
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +0 -205
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +0 -1759
- data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +0 -1800
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +0 -2006
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +0 -101
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +0 -815
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +0 -958
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +0 -283
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +0 -383
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +0 -91
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +0 -69
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +0 -1616
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +0 -72
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +0 -3184
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +0 -2300
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +0 -153
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +0 -377
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +0 -175
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +0 -148
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +0 -695
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +0 -1362
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +0 -5
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +0 -803
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +0 -1537
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +0 -979
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +0 -3
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +0 -75
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +0 -153
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +0 -43
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +0 -316
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +0 -566
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +0 -2816
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +0 -549
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +0 -149
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +0 -2450
- data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +0 -8
- data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +0 -37
- data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +0 -27
- data/vendor/plugins/selenium-on-rails/test/paths_test.rb +0 -72
- data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +0 -157
- data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +0 -708
- data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +0 -242
- data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +0 -67
- data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +0 -43
- data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +0 -35
- data/vendor/plugins/selenium-on-rails/test/setup_test.rb +0 -31
- data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +0 -109
- data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +0 -17
- data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +0 -51
- data/vendor/plugins/selenium-on-rails/test/test_helper.rb +0 -101
- data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +0 -1
- data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +0 -12
- data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +0 -6
- data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +0 -2
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +0 -6
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +0 -1
- data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +0 -5
- data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +0 -5
- data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +0 -7
- data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +0 -8
- data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +0 -7
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +0 -1
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +0 -1
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +0 -1
- data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +0 -1
data/lib/zafu/process/context.rb
CHANGED
|
@@ -53,6 +53,10 @@ module Zafu
|
|
|
53
53
|
end
|
|
54
54
|
@markup.set_param(:'data-a', sort_attr)
|
|
55
55
|
@markup.set_dyn_param(:'data-p', "<%= #{node}.#{RubyLess.translate(node.klass, sort_attr)} %>")
|
|
56
|
+
if sort_attr == 'l_status'
|
|
57
|
+
@markup.set_dyn_param(:'data-l', "<%= #{node}.link_id %>")
|
|
58
|
+
end
|
|
59
|
+
|
|
56
60
|
s = 'drag_handle' if s == 'true'
|
|
57
61
|
unless s == 'all' || @blocks.detect{|b| b.kind_of?(String) ? b =~ /class=.#{s}/ : (b.params[:class] == s || (b.markup && b.markup.params[:class] == s))}
|
|
58
62
|
before_wrap << "<span class='#{s}'> </span>"
|
|
@@ -72,7 +72,7 @@ module Zena
|
|
|
72
72
|
# * super user
|
|
73
73
|
# * members of +write_group+ if there status is at least 'user'.
|
|
74
74
|
def can_write?(vis=visitor, ugps=visitor.group_ids)
|
|
75
|
-
( ugps.include?(wgroup_id) && visitor.user?) # write group
|
|
75
|
+
!current_site.site_readonly? && ( ugps.include?(wgroup_id) && visitor.user?) # write group
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
# Returns true if the current visitor can see redactions (unpublished versions)
|
|
@@ -101,7 +101,7 @@ module Zena
|
|
|
101
101
|
# * super user
|
|
102
102
|
# * members of +drive_group+ if member status is at least 'user'
|
|
103
103
|
def can_drive?(vis=visitor, ugps=visitor.group_ids)
|
|
104
|
-
( vis.user? && (ugps.include?(dgroup_id) || draft?) )
|
|
104
|
+
!current_site.site_readonly? && ( vis.user? && (ugps.include?(dgroup_id) || draft?) )
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
# 'can_drive?' before attribute change
|
|
@@ -111,7 +111,7 @@ module Zena
|
|
|
111
111
|
|
|
112
112
|
# 'can_drive?' without draft? exceptions
|
|
113
113
|
def full_drive?(vis=visitor, ugps=visitor.group_ids)
|
|
114
|
-
( vis.user? && ugps.include?(dgroup_id) )
|
|
114
|
+
!current_site.site_readonly? && ( vis.user? && ugps.include?(dgroup_id) )
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
# 'full_drive?' before attribute change
|
data/lib/zena/app.rb
CHANGED
data/lib/zena/deploy.rb
CHANGED
|
@@ -164,7 +164,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
|
164
164
|
|
|
165
165
|
desc "create a new site alias [-s host='...' -s alias='...' -s pass='...']"
|
|
166
166
|
task :mkalias, :roles => :app do
|
|
167
|
-
run "#{in_current} rake zena:
|
|
167
|
+
run "#{in_current} rake zena:mkalias HOST='#{self[:host]}' ALIAS='#{self[:alias]}' RAILS_ENV='production'"
|
|
168
168
|
|
|
169
169
|
# Same as mksite
|
|
170
170
|
self[:host] = self[:alias]
|
data/lib/zena/deploy/template.rb
CHANGED
data/lib/zena/foxy_parser.rb
CHANGED
|
@@ -438,7 +438,7 @@ module Zena
|
|
|
438
438
|
begin
|
|
439
439
|
eval(klass).kpath =~ /^#{Page.kpath}/
|
|
440
440
|
if node['custom_base']
|
|
441
|
-
node['basepath'] = node['fullpath']
|
|
441
|
+
node['basepath'] = node['fullpath'].split('/')[1..-1].join('/')
|
|
442
442
|
else
|
|
443
443
|
node['basepath'] = parent['basepath']
|
|
444
444
|
end
|
|
@@ -447,8 +447,8 @@ module Zena
|
|
|
447
447
|
end
|
|
448
448
|
else
|
|
449
449
|
# If we do not quote the content, FoxyParser will insert NULL.
|
|
450
|
+
node['fullpath'] = "#{node['zip']}"
|
|
450
451
|
node['basepath'] = "''"
|
|
451
|
-
node['fullpath'] = "''"
|
|
452
452
|
end
|
|
453
453
|
end
|
|
454
454
|
node['fullpath']
|
|
@@ -785,6 +785,9 @@ module Zena
|
|
|
785
785
|
col[:header_keys] << :role
|
|
786
786
|
col[:header_keys] << :name
|
|
787
787
|
end
|
|
788
|
+
if !col['versioned']
|
|
789
|
+
col['versioned'] = 1
|
|
790
|
+
end
|
|
788
791
|
end
|
|
789
792
|
end
|
|
790
793
|
end
|
data/lib/zena/info.rb
CHANGED
data/lib/zena/site_worker.rb
CHANGED
|
@@ -58,8 +58,8 @@ module Zena
|
|
|
58
58
|
|
|
59
59
|
# Return a textual description of the operation.
|
|
60
60
|
def info
|
|
61
|
-
if site_id == current_site.
|
|
62
|
-
"
|
|
61
|
+
if site_id == current_site.id
|
|
62
|
+
"<b>#{action}</b>, #{_('page')} #{page}/#{page_count}"
|
|
63
63
|
else
|
|
64
64
|
# Do not show jobs from other sites
|
|
65
65
|
"-"
|
data/lib/zena/test_controller.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Zena
|
|
|
5
5
|
include Zena::Use::Fixtures
|
|
6
6
|
include Zena::Use::TestHelper
|
|
7
7
|
helper_method :get_template_text, :template_url_for_asset, :save_erb_to_url
|
|
8
|
-
skip_before_filter :set_visitor
|
|
8
|
+
skip_before_filter :set_visitor, :redirect_to_https
|
|
9
9
|
prepend_before_filter :set_context
|
|
10
10
|
|
|
11
11
|
include Zena::Use::HtmlTags::ViewMethods
|
|
@@ -70,11 +70,14 @@ module Zena
|
|
|
70
70
|
|
|
71
71
|
# We skip authlogic
|
|
72
72
|
def set_context
|
|
73
|
-
login(params[:user])
|
|
73
|
+
login(params[:user], request.host)
|
|
74
74
|
set_visitor_lang(params[:prefix])
|
|
75
75
|
@node = secure!(Node) { Node.find(params[:node_id])}
|
|
76
76
|
@text = params[:text]
|
|
77
77
|
@test_url = params[:url]
|
|
78
|
+
if f = params.delete(:flash)
|
|
79
|
+
flash.now[:error] = f
|
|
80
|
+
end
|
|
78
81
|
params.delete(:user_id)
|
|
79
82
|
params.delete(:user)
|
|
80
83
|
params.delete(:prefix)
|
data/lib/zena/use/action.rb
CHANGED
|
@@ -41,6 +41,11 @@ module Zena
|
|
|
41
41
|
|
|
42
42
|
module ControllerMethods
|
|
43
43
|
include Common
|
|
44
|
+
|
|
45
|
+
# /login?lang=fr
|
|
46
|
+
def login_path
|
|
47
|
+
super(:lang => params[:lang] || visitor.lang)
|
|
48
|
+
end
|
|
44
49
|
end
|
|
45
50
|
|
|
46
51
|
module ViewMethods
|
|
@@ -154,11 +159,13 @@ module Zena
|
|
|
154
159
|
end
|
|
155
160
|
end
|
|
156
161
|
end
|
|
157
|
-
|
|
162
|
+
|
|
163
|
+
# /oo
|
|
158
164
|
def login_path
|
|
159
165
|
if params[:controller] == 'nodes'
|
|
160
|
-
zen_path(@node, :prefix => AUTHENTICATED_PREFIX)
|
|
166
|
+
zen_path(@node, :prefix => AUTHENTICATED_PREFIX, :lang => visitor.lang)
|
|
161
167
|
else
|
|
168
|
+
# ?
|
|
162
169
|
super
|
|
163
170
|
end
|
|
164
171
|
end
|
data/lib/zena/use/ajax.rb
CHANGED
|
@@ -37,7 +37,15 @@ module Zena
|
|
|
37
37
|
end
|
|
38
38
|
return
|
|
39
39
|
end
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
# Make sure we render requests in chronological order
|
|
42
|
+
page << "if (Zena.stampOk('#{params[:dom_id]}', #{params[:zs].to_i})) {"
|
|
43
|
+
# We cannot 'return' in Firefox, the eval script is not in a function
|
|
44
|
+
do_update_page_content(page, obj)
|
|
45
|
+
page << "}"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def do_update_page_content(page, obj)
|
|
41
49
|
if params[:t_id] && obj.errors.empty?
|
|
42
50
|
obj = secure(Node) { Node.find_by_zip(params[:t_id])}
|
|
43
51
|
@node = obj
|
|
@@ -47,6 +55,12 @@ module Zena
|
|
|
47
55
|
|
|
48
56
|
if obj.new_record?
|
|
49
57
|
# A. could not create object: show form with errors
|
|
58
|
+
# FIXME: We should return the errors as JSON (at least if the form does not exist)
|
|
59
|
+
|
|
60
|
+
obj.errors.each_error do |er, msg|
|
|
61
|
+
Rails.logger.warn " [#{err}] #{msg}"
|
|
62
|
+
end
|
|
63
|
+
|
|
50
64
|
page.replace ndom_id, :file => template_path_from_template_url('_form')
|
|
51
65
|
elsif @errors || !obj.errors.empty?
|
|
52
66
|
# B. could not update/delete: show errors
|
|
@@ -191,15 +205,17 @@ module Zena
|
|
|
191
205
|
list << dom_id
|
|
192
206
|
end
|
|
193
207
|
|
|
194
|
-
def filter_form(node,
|
|
208
|
+
def filter_form(node, form_id, loading, upd)
|
|
195
209
|
if loading
|
|
196
210
|
loading = "\n#{loading}($('#{upd}'));"
|
|
197
211
|
else
|
|
198
212
|
loading = ''
|
|
199
213
|
end
|
|
200
214
|
# Disable 'redir' parameter during preview or filter.
|
|
201
|
-
js_data << %Q{new Form.Observer('#{
|
|
202
|
-
var data = Form.serialize('#{
|
|
215
|
+
js_data << %Q{new Form.Observer('#{form_id}', 0.3, function(element, value) {#{loading}
|
|
216
|
+
var data = Form.serialize('#{form_id}', {hash: true})
|
|
217
|
+
delete data.redir
|
|
218
|
+
data.zs = Zena.stamp(data.dom_id)
|
|
203
219
|
new Ajax.Request('#{zafu_node_path(node)}', {asynchronous:true, evalScripts:true, method:'post', parameters:data})
|
|
204
220
|
});}
|
|
205
221
|
end
|
data/lib/zena/use/ancestry.rb
CHANGED
|
@@ -2,6 +2,78 @@ module Zena
|
|
|
2
2
|
module Use
|
|
3
3
|
# This module handles the creation and maintenance of a 'fullpath' and cached project/section_id.
|
|
4
4
|
module Ancestry
|
|
5
|
+
|
|
6
|
+
def self.basepath_from_fullpath(fullpath)
|
|
7
|
+
return '' if !fullpath # This happens with pseudo root/home when node is not accessible
|
|
8
|
+
fullpath.split('/')[1..-1].join('/')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Makes a fullpath from the node's zip and parent zip Array.
|
|
12
|
+
# Returns fullpath as an Array.
|
|
13
|
+
def self.make_fullpath(zip, parent_fullpath)
|
|
14
|
+
if parent_fullpath
|
|
15
|
+
parent_fullpath + [zip]
|
|
16
|
+
else
|
|
17
|
+
[zip]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Rebuild basepath and return new value
|
|
22
|
+
def self.make_basepath(fullpath, custom_base, parent_basepath)
|
|
23
|
+
if custom_base
|
|
24
|
+
fullpath[1..-1]
|
|
25
|
+
else
|
|
26
|
+
parent_basepath || []
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Forces rebuild of paths. Returns the new paths.
|
|
31
|
+
def self.rebuild_paths(rec, parent_fullpath, parent_basepath)
|
|
32
|
+
id, zip, custom_base = rec['id'], rec['zip'], rec['custom_base']
|
|
33
|
+
custom_base = custom_base == true || custom_base == Zena::Db::TRUE_RESULT
|
|
34
|
+
fullpath = make_fullpath(zip, parent_fullpath)
|
|
35
|
+
basepath = make_basepath(fullpath, custom_base, parent_basepath)
|
|
36
|
+
new_paths = {'fullpath' => fullpath.join('/'), 'basepath' => basepath.join('/')}
|
|
37
|
+
if !new_paths.keys.inject(true){|s,e| s && rec[e] == new_paths[e]}
|
|
38
|
+
# Need to save
|
|
39
|
+
log = "[#{zip}] Fix paths: #{rec['fullpath']} => #{new_paths['fullpath']}, #{rec['basepath']} => #{new_paths['basepath']}"
|
|
40
|
+
Rails.logger.warn log
|
|
41
|
+
if RAILS_ENV != 'test'
|
|
42
|
+
# When running rake task
|
|
43
|
+
puts log
|
|
44
|
+
end
|
|
45
|
+
Zena::Db.execute "UPDATE nodes SET #{new_paths.map {|k,v| "#{Zena::Db.connection.quote_column_name(k)}=#{Zena::Db.quote(v)}"}.join(', ')} WHERE id = #{id} AND site_id = #{current_site.id}"
|
|
46
|
+
end
|
|
47
|
+
return fullpath, basepath
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Forces a full recursive basepath and fullpath rebuild. If parent_fullpath and parent_basepath
|
|
51
|
+
# are nil, base is the root node. parent_fullpath and parent_basepath should be provided as Array.
|
|
52
|
+
def self.rebuild_all_paths(rec, parent_fullpath = nil, parent_basepath = nil, visited = {})
|
|
53
|
+
raise Zena::InvalidRecord, "Infinit loop in 'ancestors'. Node zip = #{rec['zip']}." if visited[rec['id']]
|
|
54
|
+
fullpath, basepath = rebuild_paths(rec, parent_fullpath, parent_basepath)
|
|
55
|
+
visited[rec['id']] = true
|
|
56
|
+
|
|
57
|
+
# Do the same for each child. Depth first. Batch of 100 for children listing.
|
|
58
|
+
i = 0
|
|
59
|
+
batch_size = 100
|
|
60
|
+
while true
|
|
61
|
+
list = Zena::Db.fetch_attributes(['id', 'zip', 'custom_base', 'fullpath', 'basepath'], 'nodes', "parent_id = #{rec['id']} AND site_id = #{current_site.id} ORDER BY id ASC LIMIT #{batch_size} OFFSET #{i * batch_size}")
|
|
62
|
+
|
|
63
|
+
break if list.empty?
|
|
64
|
+
list.each do |child|
|
|
65
|
+
rebuild_all_paths(child, fullpath, basepath, visited)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
if list.size == batch_size
|
|
69
|
+
# 100 more
|
|
70
|
+
i += 1
|
|
71
|
+
else
|
|
72
|
+
break
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
5
77
|
module ClassMethods
|
|
6
78
|
def title_join
|
|
7
79
|
%Q{INNER JOIN idx_nodes_ml_strings AS id1 ON id1.node_id = nodes.id AND id1.key = 'title' AND id1.lang = '#{visitor.lang}'}
|
|
@@ -10,7 +82,7 @@ module Zena
|
|
|
10
82
|
TITLE_ML_JOIN = %Q{INNER JOIN idx_nodes_ml_strings AS id1 ON id1.node_id = nodes.id AND id1.key = 'title'}
|
|
11
83
|
|
|
12
84
|
# (slow). Find a node by it's path. This is used during node importation when stored as zml files or to resolve custom_base url until we have an "alias" table.
|
|
13
|
-
def find_by_path(path, parent_id = current_site.
|
|
85
|
+
def find_by_path(path, parent_id = current_site.home_id, multilingual = false)
|
|
14
86
|
res = nil
|
|
15
87
|
path = path.split('/') unless path.kind_of?(Array)
|
|
16
88
|
last = path.size - 1
|
|
@@ -61,6 +133,7 @@ module Zena
|
|
|
61
133
|
zip == '..' ? '..' : (list[zip.to_i] || (sym == :node ? nil : '*'))
|
|
62
134
|
end.compact
|
|
63
135
|
end
|
|
136
|
+
|
|
64
137
|
end # ClassMethods
|
|
65
138
|
|
|
66
139
|
module ModelMethods
|
|
@@ -103,7 +176,7 @@ module Zena
|
|
|
103
176
|
elsif parent_id.nil?
|
|
104
177
|
[]
|
|
105
178
|
else
|
|
106
|
-
path = fullpath.split('/')[
|
|
179
|
+
path = fullpath.split('/')[1..-2]
|
|
107
180
|
[current_site.root_node].compact + (secure(Node) { Node.fullpath_map(path, :node) } || [])
|
|
108
181
|
end
|
|
109
182
|
end
|
|
@@ -137,8 +210,10 @@ module Zena
|
|
|
137
210
|
end
|
|
138
211
|
|
|
139
212
|
# (slow). Transform a list of zips into a fullpath.
|
|
140
|
-
def fullpath_as_title(path =
|
|
141
|
-
if path
|
|
213
|
+
def fullpath_as_title(path = nil)
|
|
214
|
+
if !path
|
|
215
|
+
# When using fullpath, we remove first element (root)
|
|
216
|
+
path = fullpath.split('/')[1..-1]
|
|
142
217
|
# secure returns nil instead of [] so we fix this.
|
|
143
218
|
@fullpath_as_title ||= secure(Node) { Node.fullpath_map(path, :title) } || []
|
|
144
219
|
else
|
|
@@ -162,22 +237,20 @@ module Zena
|
|
|
162
237
|
def rebuild_fullpath
|
|
163
238
|
return unless new_record? || parent_id_changed? || fullpath.nil?
|
|
164
239
|
if parent = parent(false)
|
|
165
|
-
|
|
240
|
+
self[:fullpath] = Ancestry.make_fullpath(zip, parent.fullpath.split('/')).join('/')
|
|
166
241
|
else
|
|
167
|
-
|
|
242
|
+
self[:fullpath] = Ancestry.make_fullpath(zip, nil).join('/')
|
|
168
243
|
end
|
|
169
|
-
self.fullpath = path.join('/')
|
|
170
244
|
end
|
|
171
|
-
|
|
245
|
+
|
|
172
246
|
def rebuild_basepath
|
|
173
247
|
return unless new_record? || parent_id_changed? || custom_base_changed? || basepath.nil?
|
|
174
|
-
if
|
|
175
|
-
|
|
176
|
-
elsif parent = parent(false)
|
|
177
|
-
self[:basepath] = parent.basepath || ""
|
|
248
|
+
if parent = parent(false)
|
|
249
|
+
parent_basepath = parent.basepath.split('/')
|
|
178
250
|
else
|
|
179
|
-
|
|
251
|
+
parent_basepath = nil
|
|
180
252
|
end
|
|
253
|
+
self[:basepath] = Ancestry.make_basepath(self.fullpath.split('/'), custom_base, parent_basepath).join('/')
|
|
181
254
|
end
|
|
182
255
|
|
|
183
256
|
def rebuild_children_fullpath
|
|
@@ -185,7 +258,7 @@ module Zena
|
|
|
185
258
|
|
|
186
259
|
# Update descendants
|
|
187
260
|
fullpath_new = self.fullpath
|
|
188
|
-
fullpath_new = "#{fullpath_new}/" if fullpath_was
|
|
261
|
+
fullpath_new = "#{fullpath_new}/" if fullpath_was.blank?
|
|
189
262
|
fullpath_re = fullpath_changed? ? %r{\A#{self.fullpath_was}} : nil
|
|
190
263
|
|
|
191
264
|
bases = [self.basepath]
|
|
@@ -199,7 +272,7 @@ module Zena
|
|
|
199
272
|
list.each do |rec|
|
|
200
273
|
rec['fullpath'].sub!(fullpath_re, fullpath_new) if fullpath_re
|
|
201
274
|
if rec['custom_base'] == Zena::Db::TRUE_RESULT
|
|
202
|
-
rec['basepath'] = rec['fullpath']
|
|
275
|
+
rec['basepath'] = Ancestry.basepath_from_fullpath(rec['fullpath'])
|
|
203
276
|
bases << rec['basepath']
|
|
204
277
|
else
|
|
205
278
|
while rec['fullpath'].size <= bases.last.size
|
|
@@ -215,6 +288,7 @@ module Zena
|
|
|
215
288
|
end
|
|
216
289
|
true
|
|
217
290
|
end
|
|
291
|
+
|
|
218
292
|
end # ModelMethods
|
|
219
293
|
end # Ancestry
|
|
220
294
|
end # Use
|
data/lib/zena/use/authlogic.rb
CHANGED
|
@@ -75,6 +75,11 @@ module Zena
|
|
|
75
75
|
raise ActiveRecord::RecordNotFound unless visitor.is_admin?
|
|
76
76
|
@admin = true
|
|
77
77
|
end
|
|
78
|
+
|
|
79
|
+
# Returns true if the site is not in readonly mode.
|
|
80
|
+
def check_not_readonly
|
|
81
|
+
raise ActiveRecord::ReadOnlyRecord if current_site.site_readonly?
|
|
82
|
+
end
|
|
78
83
|
|
|
79
84
|
def lang
|
|
80
85
|
visitor.lang
|
|
@@ -136,9 +141,10 @@ module Zena
|
|
|
136
141
|
def redirect_to_https
|
|
137
142
|
if current_site.ssl_on_auth
|
|
138
143
|
if !ssl_request? && !visitor.is_anon? && !local_request?
|
|
139
|
-
|
|
144
|
+
# Note that this does not work for PUT or DELETE verbs...
|
|
145
|
+
redirect_to(params.merge({:protocol => 'https'}), :flash => flash)
|
|
140
146
|
elsif ssl_request? && visitor.is_anon?
|
|
141
|
-
redirect_to
|
|
147
|
+
redirect_to(params.merge({:protocol => 'http'}), :flash => flash)
|
|
142
148
|
end
|
|
143
149
|
end
|
|
144
150
|
end
|
data/lib/zena/use/context.rb
CHANGED
|
@@ -22,6 +22,7 @@ module Zena
|
|
|
22
22
|
safe_method :visitor_node => visitor_node_proc
|
|
23
23
|
safe_method :main => Proc.new {|h, r, s| {:method => '@node', :class => VirtualClass['Node']}}
|
|
24
24
|
safe_method :root => Proc.new {|h, r, s| {:method => 'visitor.site.root_node', :class => VirtualClass['Project'], :nil => true}}
|
|
25
|
+
safe_method :home => Proc.new {|h, r, s| {:method => 'visitor.site.home_node', :class => visitor.site.home_node.vclass, :nil => true}}
|
|
25
26
|
safe_method :site => {:class => Site, :method => 'visitor.site'}
|
|
26
27
|
|
|
27
28
|
# Group an array of records by key.
|
data/lib/zena/use/display.rb
CHANGED
|
@@ -325,102 +325,6 @@ module Zena
|
|
|
325
325
|
nil
|
|
326
326
|
end
|
|
327
327
|
end
|
|
328
|
-
|
|
329
|
-
=begin
|
|
330
|
-
def title(node, opts = {})
|
|
331
|
-
if node.kind_of?(Version)
|
|
332
|
-
node = node.node
|
|
333
|
-
end
|
|
334
|
-
title_params = {}
|
|
335
|
-
|
|
336
|
-
title_params[:check_lang] = @params[:check_lang] if @params.include?(:check_lang)
|
|
337
|
-
|
|
338
|
-
if @params[:link]
|
|
339
|
-
value, static = parse_attributes_in_value(@params[:link], :erb => false)
|
|
340
|
-
link_param = ", :link=>\"#{value}\""
|
|
341
|
-
else
|
|
342
|
-
link_param = ''
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
res = "<%= show_title(:node=>#{node}#{link_param}#{params_to_erb(title_params)}"
|
|
346
|
-
if @params[:text]
|
|
347
|
-
res << ", :text=>#{@params[:text].inspect}"
|
|
348
|
-
elsif @params[:attr]
|
|
349
|
-
res << ", :text=>#{node_attribute(@params[:attr])}"
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
if @params.include?(:project)
|
|
353
|
-
res << ", :project=>#{@params[:project] == 'true'}"
|
|
354
|
-
end
|
|
355
|
-
res << ")"
|
|
356
|
-
if @params[:actions]
|
|
357
|
-
res << " + node_actions(:node=>#{node}#{params_to_erb(:actions=>@params[:actions], :publish_after_save=>auto_publish_param)})"
|
|
358
|
-
end
|
|
359
|
-
res << "%>"
|
|
360
|
-
res
|
|
361
|
-
end
|
|
362
|
-
# TODO: test
|
|
363
|
-
# display the title with necessary id and checks for 'lang'. Options :
|
|
364
|
-
# * :link if true, the title is a link to the object's page
|
|
365
|
-
# default = true if obj is not the current node '@node'
|
|
366
|
-
# * :project if true , the project name is added before the object title as 'project / .....'
|
|
367
|
-
# default = obj project is different from current node project
|
|
368
|
-
# if no options are provided show the current object title
|
|
369
|
-
def title(obj, opts={})
|
|
370
|
-
|
|
371
|
-
unless opts.include?(:link)
|
|
372
|
-
# we show the link if the object is not the current node or when it is being created by zafu ajax.
|
|
373
|
-
opts[:link] = (obj[:id] != @node[:id] || params[:t_url]) ? 'true' : nil
|
|
374
|
-
end
|
|
375
|
-
|
|
376
|
-
unless opts.include?(:project)
|
|
377
|
-
opts[:project] = (obj.get_project_id != @node.get_project_id && obj[:id] != @node[:id])
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
title = opts[:text] || obj.title
|
|
381
|
-
if opts[:project] && project = obj.project
|
|
382
|
-
title = "#{project.name} / #{title}"
|
|
383
|
-
end
|
|
384
|
-
|
|
385
|
-
title += check_lang(obj) unless opts[:check_lang] == 'false'
|
|
386
|
-
title = "<span id='title#{obj.zip}'>#{title}</span>"
|
|
387
|
-
|
|
388
|
-
if (link = opts[:link]) && opts[:link] != 'false'
|
|
389
|
-
if link =~ /\A(\d+)/
|
|
390
|
-
zip = $1
|
|
391
|
-
obj = secure(Node) { Node.find_by_zip(zip) }
|
|
392
|
-
link = link[(zip.length)..-1]
|
|
393
|
-
if link[0..0] == '_'
|
|
394
|
-
link = link[1..-1]
|
|
395
|
-
end
|
|
396
|
-
end
|
|
397
|
-
if link =~ /\Ahttp/
|
|
398
|
-
"<a href='#{link}'>#{title}</a>"
|
|
399
|
-
else
|
|
400
|
-
link_opts = {}
|
|
401
|
-
if link == 'true'
|
|
402
|
-
# nothing special for the link format
|
|
403
|
-
elsif link =~ /(\w+\.|)data$/
|
|
404
|
-
link_opts[:mode] = $1[0..-2] if $1 != ''
|
|
405
|
-
if obj.kind_of?(Document)
|
|
406
|
-
link_opts[:format] = obj.ext
|
|
407
|
-
else
|
|
408
|
-
link_opts[:format] = 'html'
|
|
409
|
-
end
|
|
410
|
-
elsif link =~ /(\w+)\.(\w+)/
|
|
411
|
-
link_opts[:mode] = $1
|
|
412
|
-
link_opts[:format] = $2
|
|
413
|
-
elsif !link.blank?
|
|
414
|
-
link_opts[:mode] = link
|
|
415
|
-
end
|
|
416
|
-
"<a href='#{zen_path(obj, link_opts)}'>#{title}</a>"
|
|
417
|
-
end
|
|
418
|
-
else
|
|
419
|
-
title
|
|
420
|
-
end
|
|
421
|
-
end
|
|
422
|
-
end
|
|
423
|
-
=end
|
|
424
328
|
end # ViewMethods
|
|
425
329
|
|
|
426
330
|
module ZafuMethods
|
|
@@ -524,7 +428,7 @@ module Zena
|
|
|
524
428
|
def extract_label(res, attribute)
|
|
525
429
|
return res if @params[:type] == 'hidden'
|
|
526
430
|
attribute ||= @params[:param]
|
|
527
|
-
if (label = param(:label) || param(:tlabel)) && attribute
|
|
431
|
+
if (label = @params[:tlabel] || param(:label) || param(:tlabel)) && attribute
|
|
528
432
|
case label
|
|
529
433
|
when 'true'
|
|
530
434
|
"<label>#{attribute}</label> <span>#{res}</span>"
|