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
|
@@ -24,7 +24,7 @@ module Zena
|
|
|
24
24
|
v_pub = record['publish_from']
|
|
25
25
|
|
|
26
26
|
if v_pub.kind_of?(String)
|
|
27
|
-
v_pub = DateTime.parse(record['publish_from']) rescue Time.now
|
|
27
|
+
v_pub = DateTime.parse(record['publish_from']) rescue Time.now.utc
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
if n_pub.nil? || v_pub < n_pub
|
|
@@ -37,7 +37,10 @@ module Zena
|
|
|
37
37
|
elsif record['status'].to_i == Zena::Status::Pub
|
|
38
38
|
# ok for readers
|
|
39
39
|
r_hash[lang] = record['id'].to_i
|
|
40
|
-
v_pub =
|
|
40
|
+
v_pub = record['publish_from']
|
|
41
|
+
if v_pub.kind_of?(String)
|
|
42
|
+
v_pub = DateTime.parse(record['publish_from']) rescue Time.now.utc
|
|
43
|
+
end
|
|
41
44
|
if n_pub.nil? || v_pub < n_pub
|
|
42
45
|
n_pub = v_pub
|
|
43
46
|
end
|
data/lib/zena/use/workflow.rb
CHANGED
|
@@ -12,7 +12,7 @@ module Zena
|
|
|
12
12
|
module VersionMethods
|
|
13
13
|
attr_reader :stored_workflow, :status_set
|
|
14
14
|
# Enable the use of version.backup = 'true' to force clone
|
|
15
|
-
attr_accessor :backup
|
|
15
|
+
attr_accessor :backup, :no_clone_on_change
|
|
16
16
|
|
|
17
17
|
def self.included(base)
|
|
18
18
|
base.before_save :store_workflow_changes
|
|
@@ -43,20 +43,28 @@ module Zena
|
|
|
43
43
|
|
|
44
44
|
# Return true if the version should be cloned if it was changed.
|
|
45
45
|
def clone_on_change?
|
|
46
|
-
#
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
# List of changed versioned properties
|
|
47
|
+
if @no_clone_on_change
|
|
48
|
+
false
|
|
49
|
+
else
|
|
50
|
+
# not same user
|
|
51
|
+
user_id != visitor.id ||
|
|
52
|
+
# changed lang
|
|
53
|
+
lang_changed? ||
|
|
54
|
+
# new version on top of publication
|
|
55
|
+
status_changed? ||
|
|
56
|
+
# not in redit time
|
|
57
|
+
Time.now > created_at + current_site[:redit_time].to_i
|
|
58
|
+
end
|
|
54
59
|
end
|
|
55
60
|
|
|
56
61
|
# Returns true if the version has been edited (not just a status change)
|
|
57
62
|
def edited?
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
new_record? ||
|
|
64
|
+
(changes.keys - WORKFLOW_ATTRIBUTES != []) ||
|
|
65
|
+
# The node loaded here is guaranteed to be the same as the one where props are changed:
|
|
66
|
+
# node.version.node.object_id == node.object_id
|
|
67
|
+
nprop.changed?
|
|
60
68
|
end
|
|
61
69
|
|
|
62
70
|
private
|
|
@@ -70,6 +78,10 @@ module Zena
|
|
|
70
78
|
@status_set = nil
|
|
71
79
|
true
|
|
72
80
|
end
|
|
81
|
+
|
|
82
|
+
def nprop
|
|
83
|
+
@nprop ||= node.prop
|
|
84
|
+
end
|
|
73
85
|
|
|
74
86
|
end
|
|
75
87
|
|
|
@@ -208,14 +220,22 @@ module Zena
|
|
|
208
220
|
node.can_drive? && !version.edited?
|
|
209
221
|
end
|
|
210
222
|
|
|
223
|
+
# This is when destroy goes through version removal.
|
|
224
|
+
# When destroy is triggered directly, node_before_destroy is used for validation.
|
|
211
225
|
add_transition(:destroy_version, :from => (-1..Zena::Status::Rep),
|
|
212
226
|
:to => -1) do |node, version|
|
|
213
|
-
if node.can_drive? && !visitor.is_anon?
|
|
214
|
-
|
|
227
|
+
if node.can_drive? && !visitor.is_anon?
|
|
228
|
+
if node.versions.count > 1
|
|
229
|
+
true
|
|
230
|
+
elsif !node.empty?
|
|
231
|
+
[false, "Cannot destroy last version: node is not empty."]
|
|
232
|
+
elsif !visitor.is_manager? && node.auth_users
|
|
233
|
+
[false, "Cannot destroy last version: node is a user."]
|
|
234
|
+
else
|
|
235
|
+
true
|
|
236
|
+
end
|
|
215
237
|
elsif visitor.is_anon?
|
|
216
238
|
[false, "Anonymous users are not allowed to destroy versions."]
|
|
217
|
-
elsif node.versions.count > 1 || node.empty?
|
|
218
|
-
[false, "Cannot destroy last version: node is not empty."]
|
|
219
239
|
else
|
|
220
240
|
false
|
|
221
241
|
end
|
|
@@ -353,19 +373,6 @@ module Zena
|
|
|
353
373
|
transition && (transition[:validate].nil? || transition[:validate].call(self, version))
|
|
354
374
|
end
|
|
355
375
|
|
|
356
|
-
#def allowed_transitions
|
|
357
|
-
# @allowed_transitions ||= begin
|
|
358
|
-
# prev_status = version.status_was.to_i
|
|
359
|
-
# allowed = []
|
|
360
|
-
# self.class.transitions.each do |t|
|
|
361
|
-
# if t[:from].include?(prev_status)
|
|
362
|
-
# allowed << t if transition_allowed?(t)
|
|
363
|
-
# end
|
|
364
|
-
# end
|
|
365
|
-
# allowed
|
|
366
|
-
# end
|
|
367
|
-
#end
|
|
368
|
-
|
|
369
376
|
# Returns false is the current visitor does not have enough rights to perform the action.
|
|
370
377
|
def can_apply?(method)
|
|
371
378
|
case method
|
|
@@ -375,36 +382,57 @@ module Zena
|
|
|
375
382
|
can_drive?
|
|
376
383
|
else
|
|
377
384
|
# All the other actions are version transition changes
|
|
378
|
-
transition_allowed?(method)
|
|
385
|
+
allowed, msg = transition_allowed?(method)
|
|
386
|
+
allowed
|
|
379
387
|
end
|
|
380
388
|
end
|
|
381
389
|
|
|
382
390
|
# Gateway to all modifications of the node or it's versions.
|
|
383
391
|
def apply(method, *args)
|
|
384
|
-
|
|
392
|
+
case method
|
|
385
393
|
when :update_attributes
|
|
386
394
|
self.attributes = args.first
|
|
387
|
-
save
|
|
388
395
|
when :propose
|
|
389
396
|
# TODO: replace with version.status = ...
|
|
390
397
|
self.version_attributes = {'status' => args[0] || Zena::Status::Prop}
|
|
391
|
-
save
|
|
392
398
|
when :publish
|
|
393
399
|
self.version_attributes = {'status' => Zena::Status::Pub}
|
|
394
|
-
save
|
|
395
400
|
when :refuse, :redit
|
|
396
401
|
self.version_attributes = {'status' => Zena::Status::Red}
|
|
397
|
-
save
|
|
398
402
|
when :unpublish, :remove
|
|
399
403
|
self.version_attributes = {'status' => Zena::Status::Rem}
|
|
400
|
-
save
|
|
401
404
|
when :destroy_version
|
|
402
405
|
if versions.count == 1 && empty?
|
|
403
|
-
self.destroy # will destroy last version
|
|
406
|
+
return self.destroy # will destroy last version
|
|
404
407
|
else
|
|
405
408
|
self.version_attributes = {:__destroy => true}
|
|
409
|
+
end
|
|
410
|
+
else
|
|
411
|
+
return
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
if @version
|
|
415
|
+
# We accessed version, make sure '@node' in version is self
|
|
416
|
+
@version.instance_variable_set(:@node, self)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
# Determine if we need to lock version cloning
|
|
420
|
+
if @no_clone_on_change || (prop.changed? && !changed_versioned_properties?)
|
|
421
|
+
# We only lock if properties are changed (not in case of status changes: publication, etc)
|
|
422
|
+
begin
|
|
423
|
+
Node.record_timestamps = false
|
|
424
|
+
Version.record_timestamps = false
|
|
425
|
+
version.no_clone_on_change = true
|
|
426
|
+
# Make sure indices are rebuilt
|
|
406
427
|
save
|
|
428
|
+
ensure
|
|
429
|
+
@no_clone_on_change = nil
|
|
430
|
+
Node.record_timestamps = true
|
|
431
|
+
Version.record_timestamps = true
|
|
432
|
+
version.no_clone_on_change = nil
|
|
407
433
|
end
|
|
434
|
+
else
|
|
435
|
+
save
|
|
408
436
|
end
|
|
409
437
|
end
|
|
410
438
|
|
|
@@ -487,34 +515,64 @@ module Zena
|
|
|
487
515
|
end
|
|
488
516
|
|
|
489
517
|
# Update an node's attributes or the node's version/content attributes. If the attributes contains only
|
|
490
|
-
#
|
|
491
|
-
#
|
|
518
|
+
# properties, then only the version will be saved. If the attributes does not contain any properties
|
|
519
|
+
# only the node is saved, without creating a new version.
|
|
492
520
|
def update_attributes(new_attributes)
|
|
493
521
|
apply(:update_attributes, new_attributes)
|
|
494
522
|
end
|
|
523
|
+
|
|
524
|
+
# Used when we want to update properties *without* changing author and/or creating new versions. This
|
|
525
|
+
# is needed when we want to synchronise some properties with an external application.
|
|
526
|
+
def update_attributes_without_clone(new_attributes)
|
|
527
|
+
@no_clone_on_change = true
|
|
528
|
+
apply(:update_attributes, new_attributes)
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
# Used when we want to save changed properties *without* changing author and/or creating new versions.
|
|
532
|
+
# This is needed when we want to synchronise some properties with an external application.
|
|
533
|
+
def save_without_clone
|
|
534
|
+
@no_clone_on_change = true
|
|
535
|
+
apply(:update_attributes, {})
|
|
536
|
+
end
|
|
495
537
|
|
|
496
538
|
private
|
|
539
|
+
def changed_versioned_properties?
|
|
540
|
+
columns = vclass.db_columns
|
|
541
|
+
prop.changes.keys.select do |k|
|
|
542
|
+
if type = columns[k]
|
|
543
|
+
if type.versioned?
|
|
544
|
+
return true
|
|
545
|
+
end
|
|
546
|
+
else
|
|
547
|
+
# Properties defined in the model are versioned.
|
|
548
|
+
return true
|
|
549
|
+
end
|
|
550
|
+
end
|
|
551
|
+
false
|
|
552
|
+
end
|
|
553
|
+
|
|
497
554
|
def set_workflow_defaults
|
|
498
555
|
version = self.version
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
556
|
+
if !@no_clone_on_change
|
|
557
|
+
# Alter version status or set default value
|
|
558
|
+
if version.edited? || version.new_record?
|
|
559
|
+
if version.status_set?
|
|
560
|
+
if version.status == Zena::Status::Pub &&
|
|
561
|
+
version.edited? && !full_drive?
|
|
562
|
+
# We silently revert to redaction: refuse auto_publish by setting version status.
|
|
563
|
+
version.status = Zena::Status::Red
|
|
564
|
+
end
|
|
565
|
+
else
|
|
566
|
+
# Set default version status
|
|
567
|
+
version.status = (auto_publish? && full_drive?) ? Zena::Status::Pub : Zena::Status::Red
|
|
507
568
|
end
|
|
508
569
|
else
|
|
509
|
-
#
|
|
510
|
-
version.status = (auto_publish? && full_drive?) ? Zena::Status::Pub : Zena::Status::Red
|
|
570
|
+
# keep status value set
|
|
511
571
|
end
|
|
512
|
-
else
|
|
513
|
-
# keep status value set
|
|
514
|
-
end
|
|
515
572
|
|
|
516
|
-
|
|
517
|
-
|
|
573
|
+
# Set default version's publish_from date
|
|
574
|
+
version.publish_from = version.status.to_i == Zena::Status::Pub ? (version.publish_from || Time.now) : version.publish_from
|
|
575
|
+
end
|
|
518
576
|
|
|
519
577
|
# Store transition before any validation takes place
|
|
520
578
|
set_current_transition
|
|
@@ -532,21 +590,6 @@ module Zena
|
|
|
532
590
|
else
|
|
533
591
|
errors.add(:base, message || "You do not have the rights to #{transition[:name].to_s.gsub('_', ' ')}.")
|
|
534
592
|
end
|
|
535
|
-
#unless transition_allowed?(transition)
|
|
536
|
-
# if transition_allowed?(transition)
|
|
537
|
-
# if [Zena::Status::Prop, Zena::Status::PropWith].include?(@original_version.status)
|
|
538
|
-
# errors.add(:base, "You do not have the rights to change a proposition's attributes.")
|
|
539
|
-
# else
|
|
540
|
-
# errors.add(:base, "You do not have the rights to #{transition[:name].to_s.gsub('_', ' ')} and change attributes.")
|
|
541
|
-
# end
|
|
542
|
-
# elsif @original_version &&
|
|
543
|
-
# (Zena::Status::Prop..Zena::Status::PropWith).include?(@original_version.status) &&
|
|
544
|
-
# version.edited?
|
|
545
|
-
# errors.add(:base, "You cannot edit while a proposition is beeing reviewed.")
|
|
546
|
-
# else
|
|
547
|
-
# errors.add(:base, "You do not have the rights to #{transition[:name].to_s.gsub('_', ' ')}.")
|
|
548
|
-
# end
|
|
549
|
-
#end
|
|
550
593
|
elsif version.edited? && (Zena::Status::Prop..Zena::Status::PropWith).include?(version.status_was)
|
|
551
594
|
errors.add(:base, 'You cannot edit while a proposition is beeing reviewed.')
|
|
552
595
|
else
|
|
@@ -611,8 +654,11 @@ module Zena
|
|
|
611
654
|
self.publish_from = get_publish_from(version.id)
|
|
612
655
|
end
|
|
613
656
|
end
|
|
614
|
-
|
|
615
|
-
|
|
657
|
+
|
|
658
|
+
unless version.no_clone_on_change
|
|
659
|
+
# Do not force updated_at sync when using "update_attributes_without_clone"
|
|
660
|
+
self.updated_at = Time.now unless changed? # force 'updated_at' sync
|
|
661
|
+
end
|
|
616
662
|
true
|
|
617
663
|
end
|
|
618
664
|
|
data/lib/zena/use/zafu_eval.rb
CHANGED
|
@@ -1,7 +1,48 @@
|
|
|
1
1
|
module Zena
|
|
2
2
|
module Use
|
|
3
3
|
module ZafuEval
|
|
4
|
+
module ViewMethods
|
|
5
|
+
def zafu_eval(node, code, opts)
|
|
6
|
+
# Setup macro rendering context
|
|
7
|
+
if opts[:template]
|
|
8
|
+
master_template = secure(Node) { Node.find_by_zip(opts[:template]) }
|
|
9
|
+
end
|
|
10
|
+
path = opts[:zafu_url]
|
|
11
|
+
parser = ::Zena::ZafuCompiler.new(code,
|
|
12
|
+
:helper => self,
|
|
13
|
+
:base_path => path,
|
|
14
|
+
:included_history => [path],
|
|
15
|
+
:root => path,
|
|
16
|
+
:master_template => master_template
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Setup starting context (note that a lot of the contextual information
|
|
20
|
+
# is lost: no up values).
|
|
21
|
+
_node = node
|
|
22
|
+
node_context = Zena::Use::NodeContext.new('_node', node.vclass)
|
|
23
|
+
|
|
24
|
+
erb = parser.to_erb(
|
|
25
|
+
:dev => false,
|
|
26
|
+
:node => node_context,
|
|
27
|
+
:master_template => master_template
|
|
28
|
+
)
|
|
29
|
+
# Geez if this works...
|
|
30
|
+
ERB.new(erb).result(binding)
|
|
31
|
+
rescue => err
|
|
32
|
+
err.message
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
4
36
|
module ZafuMethods
|
|
37
|
+
def r_zafu_eval
|
|
38
|
+
return parser_error("Missing 'code' parameter.") unless code = params[:code]
|
|
39
|
+
return parser_error("Not a node context.") unless node.will_be?(Node)
|
|
40
|
+
code = RubyLess.translate(self, code)
|
|
41
|
+
zafu_url = @options[:root]
|
|
42
|
+
master = @context[:master_template]
|
|
43
|
+
out "<%= zafu_eval(#{node.to_s}, #{code}, :zafu_url => #{zafu_url.inspect}, :template => #{master ? master.zip : 'nil'}) %>"
|
|
44
|
+
end
|
|
45
|
+
|
|
5
46
|
def r_eval
|
|
6
47
|
text = @blocks.first
|
|
7
48
|
if !text.kind_of?(String) || @blocks.size > 1
|
|
@@ -186,6 +186,7 @@ module Zena
|
|
|
186
186
|
|
|
187
187
|
safe_method_for Range, :to_a => {:class => [Number]}
|
|
188
188
|
|
|
189
|
+
safe_method_for NilClass, :to_s => {:class => String, :pre_processor => true}
|
|
189
190
|
safe_method_for NilClass, :to_f => {:class => Number, :pre_processor => true}
|
|
190
191
|
safe_method_for NilClass, :to_i => {:class => Number, :pre_processor => true}
|
|
191
192
|
safe_method_for NilClass, :to_json => {:class => String, :pre_processor => true}
|
|
@@ -247,14 +247,31 @@ module Zena
|
|
|
247
247
|
# Return the path of a template for the given skin, mode and format. Compiles the zafu template if needed.
|
|
248
248
|
def template_url(opts={})
|
|
249
249
|
# opts[:skin] option removed
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
250
|
+
if vclass = opts[:vclass]
|
|
251
|
+
# We know the skin title, skip 'get_skin'
|
|
252
|
+
@skins ||= {}
|
|
253
|
+
|
|
254
|
+
if opts[:skin].to_s =~ /^\$(.*)/
|
|
255
|
+
# The skin passed through the url is $brick-bar if using fs_skin and this does not work.
|
|
256
|
+
@skin = @skins[opts[:skin]] ||= secure(Skin) { visitor.site.root_node.find("skin where z_fs_skin = '#{$1}' in site") }
|
|
257
|
+
else
|
|
258
|
+
@skin = @skins[opts[:skin]] ||= secure(Skin) { Skin.find_by_title(opts[:skin]) }
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# possible classes for the master template :
|
|
262
|
+
kpaths = [vclass.kpath]
|
|
263
|
+
else
|
|
264
|
+
@skin = get_skin
|
|
265
|
+
vclass = @node.vclass
|
|
266
|
+
|
|
267
|
+
# possible classes for the master template :
|
|
268
|
+
kpaths = []
|
|
269
|
+
vclass.kpath.split(//).each_index { |i| kpaths << vclass.kpath[0..i] }
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
mode = opts[:mode]
|
|
273
|
+
mode = nil if mode.blank?
|
|
274
|
+
format = opts[:format] || 'html'
|
|
258
275
|
|
|
259
276
|
if @skin
|
|
260
277
|
zafu_url, template = get_best_template(kpaths, format, mode, @skin)
|
|
@@ -264,11 +281,8 @@ module Zena
|
|
|
264
281
|
|
|
265
282
|
path = SITES_ROOT + rel_path
|
|
266
283
|
if !File.exists?(path) || params[:rebuild]
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
else
|
|
270
|
-
nil
|
|
271
|
-
end
|
|
284
|
+
# Use the template's target vclass as starting context
|
|
285
|
+
zafu_node('@node', VirtualClass.find_by_kpath(template.tkpath))
|
|
272
286
|
|
|
273
287
|
# template is a new record when template is returned for
|
|
274
288
|
# a static file.
|
|
@@ -320,7 +334,7 @@ module Zena
|
|
|
320
334
|
end
|
|
321
335
|
|
|
322
336
|
template_url = template_url.split('/')
|
|
323
|
-
base_p = [
|
|
337
|
+
base_p = [current_site.zafu_path] + template_url[0..-2]
|
|
324
338
|
lang_p = [dev_mode? ? "dev_#{lang}" : lang]
|
|
325
339
|
part_p = template_url[-1]
|
|
326
340
|
|
|
@@ -328,21 +342,13 @@ module Zena
|
|
|
328
342
|
if !File.exist?(main_fullpath) && build
|
|
329
343
|
skin = template_url[0]
|
|
330
344
|
template_name = template_url[-2]
|
|
345
|
+
|
|
331
346
|
if template_name =~ ::Template::MODE_FORMAT_FROM_TITLE
|
|
332
|
-
# title changed force update
|
|
333
347
|
klass = $1
|
|
334
348
|
mode = $4 || ''
|
|
335
349
|
format = $6 || 'html'
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
# Find first node matching klass
|
|
339
|
-
vclass = VirtualClass[klass]
|
|
340
|
-
@node = Node.sfind("#{klass.underscore} in site", :first)
|
|
341
|
-
if @node.skin.title != skin
|
|
342
|
-
@node.skin = secure(Skin) { Skin.find_by_title(skin) }
|
|
343
|
-
end
|
|
344
|
-
template_url(:mode => mode, :format => format)
|
|
345
|
-
@node = node_bak
|
|
350
|
+
|
|
351
|
+
template_url(:mode => mode, :format => format, :vclass => VirtualClass[klass], :skin => skin)
|
|
346
352
|
end
|
|
347
353
|
end
|
|
348
354
|
|
|
@@ -451,7 +457,7 @@ module Zena
|
|
|
451
457
|
end
|
|
452
458
|
end
|
|
453
459
|
end
|
|
454
|
-
|
|
460
|
+
|
|
455
461
|
res = ZafuCompiler.new_with_url(zafu_url, :helper => zafu_helper).to_erb(:dev => dev_mode?, :node => get_node_context, :master_template => template)
|
|
456
462
|
|
|
457
463
|
unless valid_template?(res, opts)
|