zena 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +23 -1
- data/MIT-LICENSE +2 -2
- data/README.rdoc +2 -15
- data/app/controllers/acls_controller.rb +1 -1
- data/app/controllers/documents_controller.rb +12 -3
- data/app/controllers/nodes_controller.rb +1 -3
- data/app/controllers/sites_controller.rb +7 -0
- data/app/controllers/versions_controller.rb +1 -1
- data/app/controllers/virtual_classes_controller.rb +7 -8
- data/app/models/acl.rb +3 -2
- data/app/models/relation_proxy.rb +2 -1
- data/app/models/role.rb +16 -0
- data/app/models/site.rb +48 -0
- data/app/models/text_document.rb +2 -1
- data/app/models/user.rb +2 -1
- data/app/models/zip.rb +2 -1
- data/app/views/acls/index.rhtml +11 -1
- data/app/views/documents/show.rhtml +1 -1
- data/app/views/relations/_add.erb +2 -2
- data/app/views/relations/_form.erb +5 -2
- data/app/views/relations/_li.erb +4 -1
- data/app/views/relations/index.erb +3 -3
- data/app/views/sites/_form.erb +1 -1
- data/app/views/sites/_job.erb +4 -0
- data/app/views/sites/index.erb +1 -1
- data/app/views/sites/jobs.erb +10 -0
- data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
- data/app/views/zafu/default/Node-+search.zafu +2 -2
- data/bricks/acls/zena/init.rb +2 -1
- data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
- data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
- data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
- data/bricks/grid/lib/bricks/grid.rb +110 -0
- data/bricks/grid/zena/init.rb +4 -0
- data/bricks/math/lib/bricks/math.rb +1 -0
- data/bricks/pdf/lib/bricks/pdf.rb +10 -1
- data/bricks/sphinx/zena/tasks.rb +8 -40
- data/bricks/spreadsheet/README +31 -0
- data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
- data/bricks/spreadsheet/zena/init.rb +3 -0
- data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
- data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
- data/bricks/spreadsheet/zena/test/zafu/README +27 -0
- data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
- data/bricks/worker/lib/bricks/worker.rb +11 -5
- data/bricks/worker/zena/init.rb +8 -0
- data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
- data/bricks/zena/zena/migrate/01_base.rb +0 -7
- data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
- data/config/bricks.yml +15 -1
- data/config/environments/production.rb +2 -2
- data/config/gems.yml +6 -1
- data/doc/zafu_changes.yml +1 -1
- data/lib/tasks/zena.rake +6 -2
- data/lib/zena/app.rb +1 -1
- data/lib/zena/code/default_syntax.rb +5 -1
- data/lib/zena/db_helper/mysql.rb +5 -1
- data/lib/zena/deploy/app_init.rhtml +11 -7
- data/lib/zena/deploy/awstats.conf.rhtml +1 -1
- data/lib/zena/deploy/start_stop.rhtml +5 -5
- data/lib/zena/deploy/vhost.rhtml +16 -2
- data/lib/zena/deploy.rb +5 -3
- data/lib/zena/info.rb +1 -1
- data/lib/zena/parser/zazen_rules.rb +7 -7
- data/lib/zena/remote/node.rb +7 -0
- data/lib/zena/routes.rb +4 -5
- data/lib/zena/test_controller.rb +18 -1
- data/lib/zena/use/action.rb +13 -4
- data/lib/zena/use/ajax.rb +10 -4
- data/lib/zena/use/authlogic.rb +1 -1
- data/lib/zena/use/calendar.rb +4 -0
- data/lib/zena/use/conditional.rb +3 -0
- data/lib/zena/use/dates.rb +44 -4
- data/lib/zena/use/display.rb +45 -15
- data/lib/zena/use/forms.rb +59 -30
- data/lib/zena/use/query_builder.rb +12 -12
- data/lib/zena/use/recursion.rb +1 -1
- data/lib/zena/use/rendering.rb +18 -17
- data/lib/zena/use/urls.rb +2 -1
- data/lib/zena/use/zafu_safe_definitions.rb +0 -9
- data/lib/zena/use/zafu_templates.rb +2 -2
- data/lib/zena/use/zazen.rb +1 -3
- data/lib/zena/use.rb +13 -2
- data/lib/zena.rb +8 -2
- data/public/images/bullet_back.png +0 -0
- data/public/javascripts/grid.js +535 -0
- data/public/javascripts/tablekit.js +0 -0
- data/public/javascripts/window.js +0 -0
- data/public/javascripts/zena.js +17 -7
- data/public/stylesheets/admin.css +5 -1
- data/public/stylesheets/grid.css +19 -0
- data/test/fixtures/files/TestNode.zafu +123 -311
- data/test/fixtures/files/translations_fr.yml +6 -1
- data/test/functional/acls_controller_test.rb +2 -2
- data/test/functional/nodes_controller_test.rb +17 -11
- data/test/functional/virtual_classes_controller_test.rb +1 -1
- data/test/integration/query_node/basic.yml +9 -0
- data/test/integration/query_node/dates.yml +1 -1
- data/test/integration/zafu_compiler/ajax.yml +9 -9
- data/test/integration/zafu_compiler/basic.yml +0 -24
- data/test/integration/zafu_compiler/dates.yml +24 -7
- data/test/integration/zafu_compiler/display.yml +45 -2
- data/test/integration/zafu_compiler/errors.yml +0 -6
- data/test/integration/zafu_compiler/forms.yml +41 -3
- data/test/integration/zafu_compiler/query.yml +29 -3
- data/test/integration/zafu_compiler/roles.yml +0 -4
- data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
- data/test/integration/zafu_compiler_test.rb +11 -3
- data/test/selenium/Add/add3.rsel +8 -8
- data/test/selenium/Drop/drop1.rsel +12 -12
- data/test/selenium/Drop/drop2.rsel +14 -14
- data/test/selenium/Drop/drop3.rsel +21 -21
- data/test/selenium/Drop/drop4.rsel +1 -1
- data/test/selenium/Edit/edit2.rsel +9 -9
- data/test/selenium/Edit/edit4.rsel +55 -0
- data/test/selenium/Edit/edit5.rsel +41 -0
- data/test/selenium/Edit/edit6.rsel +53 -0
- data/test/selenium/Filter/0setup.rsel +12 -0
- data/test/selenium/Filter/filter1.rsel +9 -0
- data/test/selenium/Filter/filter2.rsel +9 -0
- data/test/selenium/Form/form1.rsel +1 -1
- data/test/selenium/Form/form2.rsel +1 -1
- data/test/selenium/Form/form3.rsel +15 -0
- data/test/selenium/Grid/0setup.rsel +13 -0
- data/test/selenium/Grid/grid1.rsel +11 -0
- data/test/selenium/Swap/0setup.rsel +12 -0
- data/test/selenium/Swap/swap1.rsel +13 -0
- data/test/selenium/Swap/swap2.rsel +11 -0
- data/test/selenium/Toggle/toggle1.rsel +6 -6
- data/test/sites/zena/versions.yml +1 -1
- data/test/unit/relation_proxy_test.rb +36 -0
- data/test/unit/site_test.rb +10 -2
- data/test/unit/zena/use/rendering_test.rb +7 -6
- data/test/unit/zena/use/zazen_test.rb +1 -2
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
- data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
- data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
- data/vendor/plugins/selenium-on-rails/README.md +202 -0
- data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
- data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
- data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
- data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
- data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
- data/vendor/plugins/selenium-on-rails/init.rb +15 -0
- data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
- data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
- data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
- data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
- data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
- data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
- data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
- data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
- 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 +298 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
- 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 +1759 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
- data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
- data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
- data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
- data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
- data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
- data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
- data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
- data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
- data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
- data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
- data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
- data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
- data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
- data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
- data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
- data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
- data/zena.gemspec +290 -7
- metadata +346 -52
- data/app/views/nodes/_table.rhtml +0 -14
- data/lib/zena/use/grid.rb +0 -154
data/History.txt
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
== 1.2.0
|
2
|
+
|
3
|
+
* Major changes
|
4
|
+
* Added 'remove_from_db' method to remove a site from the database.
|
5
|
+
* Fixed asset caching PLEASE FIX YOUR VHOST FILES: rake zena:create_vhost -s host='xxxxx'.
|
6
|
+
* Fixed deadlock_retry (a bug in the error message aborted the retry).
|
7
|
+
* Created 'spreadsheet' brick to ease xlsx and csv generation. <===== TODO: Document
|
8
|
+
* Better JS based grid editor.
|
9
|
+
|
10
|
+
* Minor changes
|
11
|
+
* Enabled Acl during document upload.
|
12
|
+
* Fixed a bug when using [edit] in a list with [add].
|
13
|
+
* Fixed 'unknown this' bug in [calendar] when rendering in a [block].
|
14
|
+
* Enabled 'alt_class' to work on multiple elements ([each]).
|
15
|
+
* Fixed ajax bugs with dom_ids in nested partials.
|
16
|
+
* Better Acl display, comments on relations.
|
17
|
+
* Support for 'to_date' on time object with proper timezone translation. <===== TODO: Document
|
18
|
+
* Time to 'year' should use timezone.
|
19
|
+
* Added tprefix to [select] (with default value) to ease translated options for select. <===== TODO: Document
|
20
|
+
* Fixed bug when using [input] checkbox with param.
|
21
|
+
* Added jobs list in admin links.
|
22
|
+
|
1
23
|
== 1.1.3 2011-11-09
|
2
24
|
|
3
25
|
* Major changes
|
@@ -263,4 +285,4 @@
|
|
263
285
|
== 0.11.1 2009-04-03
|
264
286
|
|
265
287
|
* Minor enhancements
|
266
|
-
* Better testing of custom queries using latest querybuilder (0.5.2)
|
288
|
+
* Better testing of custom queries using latest querybuilder (0.5.2)
|
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2007-
|
1
|
+
Copyright (c) 2007-2012 Gaspard Bucher
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
16
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
17
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
18
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
THE SOFTWARE.
|
19
|
+
THE SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -108,18 +108,5 @@ Versions:
|
|
108
108
|
monit (debian package to monitor your mongrel processes)
|
109
109
|
|
110
110
|
|
111
|
-
===
|
112
|
-
|
113
|
-
|
114
|
-
add this to nodes_controller macros:
|
115
|
-
act_as_railsdav
|
116
|
-
include Zena::WebDav
|
117
|
-
|
118
|
-
add this to 'config/environment.rb'
|
119
|
-
require File.join(File.dirname(__FILE__), '../lib/webdav_adapter')
|
120
|
-
|
121
|
-
install railsdav
|
122
|
-
# script/plugin install http://svn.liverail.net/svn/plugins/railsdav
|
123
|
-
|
124
|
-
install dependencies
|
125
|
-
# sudo gem install mime-types, unicode
|
111
|
+
=== Install MySQL on Lion (with rbenv: remove the sudo)
|
112
|
+
http://stackoverflow.com/questions/6340174/mysql-gem-on-osx-10-7-lion
|
@@ -6,7 +6,7 @@ class AclsController < ApplicationController
|
|
6
6
|
|
7
7
|
def index
|
8
8
|
secure(Acl) do
|
9
|
-
@acls = Acl.paginate(:all, :order => 'priority DESC, name ASC', :per_page => 20, :page => params[:page])
|
9
|
+
@acls = Acl.paginate(:all, :order => 'action ASC, priority DESC, name ASC', :per_page => 20, :page => params[:page])
|
10
10
|
end
|
11
11
|
@acl = Acl.new
|
12
12
|
|
@@ -61,7 +61,15 @@ class DocumentsController < ApplicationController
|
|
61
61
|
else
|
62
62
|
page.call 'UploadProgress.setAsFinished'
|
63
63
|
page.delay(1) do # allow the progress bar fade to complete
|
64
|
-
|
64
|
+
if params[:redir]
|
65
|
+
page << "Zena.reload_and_close(#{params[:redir].inspect})"
|
66
|
+
end
|
67
|
+
if params[:js]
|
68
|
+
page << params[:js]
|
69
|
+
end
|
70
|
+
if !params[:redir] && !params[:js]
|
71
|
+
page.redirect_to document_url(@node[:zip])
|
72
|
+
end
|
65
73
|
end
|
66
74
|
end
|
67
75
|
end
|
@@ -90,9 +98,10 @@ class DocumentsController < ApplicationController
|
|
90
98
|
def find_node
|
91
99
|
|
92
100
|
if params[:id]
|
93
|
-
@node =
|
101
|
+
@node = visitor.find_node(nil, params[:id], nil, request)
|
102
|
+
raise ActiveRecord::RecordNotFound unless @node.kind_of?(Document)
|
94
103
|
elsif parent_zip = (params[:node] || params)[:parent_id]
|
95
|
-
@parent =
|
104
|
+
@parent = visitor.find_node(nil, parent_zip, nil, request)
|
96
105
|
else
|
97
106
|
# TODO: a better error message
|
98
107
|
raise ActiveRecord::RecordNotFound
|
@@ -25,8 +25,6 @@ class NodesController < ApplicationController
|
|
25
25
|
before_filter :check_path, :only => [:index, :show]
|
26
26
|
layout :popup_layout, :only => [:edit, :import]
|
27
27
|
|
28
|
-
include Zena::Use::Grid::ControllerMethods
|
29
|
-
|
30
28
|
def index
|
31
29
|
if @node = secure(Node) { Node.find(current_site.root_id) }
|
32
30
|
respond_to do |format|
|
@@ -235,7 +233,7 @@ class NodesController < ApplicationController
|
|
235
233
|
if @node.errors.empty?
|
236
234
|
flash.now[:notice] = 'Node was successfully created.'
|
237
235
|
format.html {
|
238
|
-
redirect_to params[:redir] || zen_path(@node, :mode => params[:mode])
|
236
|
+
redirect_to params[:redir] || zen_path(@node, :mode => params[:mode], :new => 'true')
|
239
237
|
}
|
240
238
|
format.js
|
241
239
|
format.xml { render :xml => @node.to_xml(:root => 'node'), :status => :created, :location => node_url(@node) }
|
@@ -74,7 +74,7 @@ class VersionsController < ApplicationController
|
|
74
74
|
@edit = true
|
75
75
|
end
|
76
76
|
if params[:close] == 'true'
|
77
|
-
js_data << "Zena.
|
77
|
+
js_data << "Zena.reload_and_close();"
|
78
78
|
else
|
79
79
|
js_data << <<-END_TXT
|
80
80
|
Zena.editor_setup('#{preview_node_version_path(:node_id=>@node[:zip], :id=>(@node.version.number || 0), :escape => false)}');
|
@@ -63,18 +63,17 @@ class VirtualClassesController < ApplicationController
|
|
63
63
|
@yaml.gsub!(/\A---\s*\n/, "--- \n")
|
64
64
|
current = current_compared_to(data)
|
65
65
|
a = clean_yaml(current).gsub('{}', '')
|
66
|
-
|
66
|
+
a = Zena::CodeSyntax.new(a, 'yaml').to_html
|
67
67
|
b = @yaml
|
68
|
-
|
68
|
+
b = Zena::CodeSyntax.new(b, 'yaml').to_html
|
69
69
|
@diff = Differ.diff_by_line(b, a).format_as(:html)
|
70
70
|
|
71
71
|
# UGLY HACK to not escape <ins> and <del>
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
72
|
+
#@diff.gsub!(/<((ins|del)[^>]*)>/, '_ZYAML__\2_')
|
73
|
+
#@diff.gsub!(/<\/(ins|del)>/, '_ZYAMLC__\1_')
|
74
|
+
#@diff = Zena::CodeSyntax.new(@diff, 'yaml').to_html
|
75
|
+
#@diff.gsub!(/_ZYAML__(\w+)_/, '<\1 class="differ">')
|
76
|
+
#@diff.gsub!(/_ZYAMLC__(\w+)_/, '</\1>')
|
78
77
|
end
|
79
78
|
end
|
80
79
|
end
|
data/app/models/acl.rb
CHANGED
@@ -77,9 +77,10 @@ class Acl < ActiveRecord::Base
|
|
77
77
|
@node = node
|
78
78
|
@params = params
|
79
79
|
@asset_host = request ? request.port.to_i == Zena::ASSET_PORT : false
|
80
|
+
query_str = safe_eval(self.query)
|
80
81
|
|
81
82
|
# We add a stupid order clause to avoid the 'order by title' thing.
|
82
|
-
query = Node.build_query(:first,
|
83
|
+
query = Node.build_query(:first, query_str + ' order by id asc',
|
83
84
|
:node_name => '@node',
|
84
85
|
:main_class => @node.virtual_class,
|
85
86
|
:rubyless_helper => self
|
@@ -94,7 +95,7 @@ class Acl < ActiveRecord::Base
|
|
94
95
|
errors.add(:query, err.message)
|
95
96
|
end
|
96
97
|
nil
|
97
|
-
rescue
|
98
|
+
rescue => err
|
98
99
|
errors.add(:query, err.message)
|
99
100
|
nil
|
100
101
|
end
|
@@ -160,7 +160,7 @@ class RelationProxy < Relation
|
|
160
160
|
end
|
161
161
|
attributes_to_update[:id] = v.map{|r| r.id.to_i}
|
162
162
|
else
|
163
|
-
attributes_to_update[:id] = v.map(&:to_i)
|
163
|
+
attributes_to_update[:id] = v.select {|e| !e.blank?}.map(&:to_i)
|
164
164
|
end
|
165
165
|
else
|
166
166
|
attributes_to_update[:id] = v.blank? ? nil : v.to_i
|
@@ -176,6 +176,7 @@ class RelationProxy < Relation
|
|
176
176
|
if zip_values.kind_of?(Array)
|
177
177
|
attributes_to_update[:id] = []
|
178
178
|
zip_values.each do |zip|
|
179
|
+
next if zip.blank?
|
179
180
|
if id = secure(Node) { Node.translate_pseudo_id(zip, :id, @start) }
|
180
181
|
# ok
|
181
182
|
id_to_zip[id] = zip
|
data/app/models/role.rb
CHANGED
@@ -22,6 +22,7 @@ class Role < ActiveRecord::Base
|
|
22
22
|
include RubyLess
|
23
23
|
# Columns defined in the role.
|
24
24
|
safe_method :columns => {:class => ['Column'], :method => 'defined_safe_columns'}
|
25
|
+
safe_method [:column, String] => {:class => 'Column', :nil => true, :method => 'defined_safe_column'}
|
25
26
|
|
26
27
|
safe_method :name => String
|
27
28
|
|
@@ -191,6 +192,21 @@ class Role < ActiveRecord::Base
|
|
191
192
|
@safe_column ||= defined_columns.values.sort {|a,b| a.name <=> b.name}
|
192
193
|
end
|
193
194
|
|
195
|
+
# By default, all defined columns are safe (see )
|
196
|
+
def defined_safe_column(name)
|
197
|
+
if real_class?
|
198
|
+
# Get columns from the 'native' schema of the real class (this schema is a Property::Role,
|
199
|
+
# not a VirtualClass or ::Role).
|
200
|
+
#
|
201
|
+
# Only columns explicitly declared safe are safe here
|
202
|
+
if real_class.safe_method_type(name)
|
203
|
+
real_class.schema.defined_columns[name]
|
204
|
+
end
|
205
|
+
else
|
206
|
+
defined_columns[name]
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
194
210
|
def export
|
195
211
|
res = Zafu::OrderedHash.new
|
196
212
|
res['type'] = real_class? ? 'Class' : type
|
data/app/models/site.rb
CHANGED
@@ -16,6 +16,39 @@ The #Site model holds configuration information for a site:
|
|
16
16
|
+default_lang+:: The default language of the site.
|
17
17
|
=end
|
18
18
|
class Site < ActiveRecord::Base
|
19
|
+
CLEANUP_SQL = [
|
20
|
+
['attachments' , 'site_id = ?'],
|
21
|
+
['cached_pages' , 'site_id = ?'],
|
22
|
+
['cached_pages_nodes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
23
|
+
['caches' , 'site_id = ?'],
|
24
|
+
['columns' , 'site_id = ?'],
|
25
|
+
['comments' , 'site_id = ?'],
|
26
|
+
['data_entries' , 'site_id = ?'],
|
27
|
+
['discussions' , 'site_id = ?'],
|
28
|
+
['groups_users' , 'group_id IN (SELECT id FROM groups WHERE site_id = ?)'],
|
29
|
+
['groups' , 'site_id = ?'],
|
30
|
+
|
31
|
+
['idx_nodes_datetimes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
32
|
+
['idx_nodes_floats' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
33
|
+
['idx_nodes_integers' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
34
|
+
['idx_nodes_ml_strings', 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
35
|
+
['idx_nodes_strings' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
36
|
+
['idx_projects' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
37
|
+
['idx_templates' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
38
|
+
|
39
|
+
['iformats' , 'site_id = ?'],
|
40
|
+
['links' , 'source_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
41
|
+
['links' , 'target_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
42
|
+
|
43
|
+
['nodes_roles' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
44
|
+
['relations' , 'site_id = ?'],
|
45
|
+
['roles' , 'site_id = ?'],
|
46
|
+
['sites' , 'id = ?'],
|
47
|
+
['users' , 'site_id = ?'],
|
48
|
+
['versions' , 'site_id = ?'],
|
49
|
+
['zips' , 'site_id = ?'],
|
50
|
+
['nodes' , 'site_id = ?'],
|
51
|
+
]
|
19
52
|
ACTIONS = %w{clear_cache rebuild_index}
|
20
53
|
include RubyLess
|
21
54
|
safe_method :host => String, :lang_list => [String], :default_lang => String
|
@@ -439,6 +472,21 @@ class Site < ActiveRecord::Base
|
|
439
472
|
true
|
440
473
|
end
|
441
474
|
|
475
|
+
# This is only called from the console (not accessible through controllers)
|
476
|
+
def remove_from_db
|
477
|
+
node_cleanup = nil
|
478
|
+
site_id = self.id.to_s
|
479
|
+
CLEANUP_SQL.each do |table, clause|
|
480
|
+
clause = clause.gsub('?', site_id)
|
481
|
+
begin
|
482
|
+
Zena::Db.execute("DELETE FROM #{table} WHERE (#{clause})")
|
483
|
+
rescue => err
|
484
|
+
puts clause
|
485
|
+
puts err
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
442
490
|
private
|
443
491
|
def valid_site
|
444
492
|
errors.add(:host, 'invalid') if self[:host].nil? || (self[:host] =~ /^\./) || (self[:host] =~ /[^\w\.\-]/)
|
data/app/models/text_document.rb
CHANGED
@@ -15,7 +15,8 @@ class TextDocument < Document
|
|
15
15
|
class << self
|
16
16
|
# Return true if a new text document can be created with the content_type. Used by the superclass Document to choose the corret subclass when creating a new object.
|
17
17
|
def accept_content_type?(content_type)
|
18
|
-
(content_type =~ /^(text)/ &&
|
18
|
+
(content_type =~ /^(text|image\/svg\+xml|x-javascript)/) &&
|
19
|
+
(Zena::TYPE_TO_EXT[content_type.chomp] != ['rtf'])
|
19
20
|
end
|
20
21
|
|
21
22
|
# Return true if the content_type can change independantly from the file
|
data/app/models/user.rb
CHANGED
@@ -14,7 +14,8 @@ If you want to give administrative rights to a user, simply put him/her into the
|
|
14
14
|
|
15
15
|
Users have access rights defined by the groups they belong to. They also have a 'status' indicating the kind of
|
16
16
|
things they can/cannot do :
|
17
|
-
+:
|
17
|
+
+:admin+:: (60): can read/write/publish in any group, can create users/groups
|
18
|
+
+:user+:: (50): can read/write/publish
|
18
19
|
+:commentator+:: (40): can write comments
|
19
20
|
+:moderated+:: (30): can write moderated comments
|
20
21
|
+:reader+:: (20): can only read
|
data/app/models/zip.rb
CHANGED
data/app/views/acls/index.rhtml
CHANGED
@@ -12,6 +12,16 @@
|
|
12
12
|
<th><%= _('exec group') %></th>
|
13
13
|
<th><%= _('exec skin') %></th>
|
14
14
|
</tr>
|
15
|
-
|
15
|
+
|
16
|
+
<% action = nil; @acls.each do |acl| -%>
|
17
|
+
<% if acl.action != action; action= acl.action -%>
|
18
|
+
<tr>
|
19
|
+
<th class='nav sub constant' colspan='9'>
|
20
|
+
<%= action %>
|
21
|
+
</th>
|
22
|
+
</tr>
|
23
|
+
<% end -%>
|
24
|
+
<%= render :partial=>'acls/li', :collection=>[acl] %>
|
25
|
+
<% end -%>
|
16
26
|
<%= render :partial=>'acls/add' %>
|
17
27
|
</table>
|
@@ -12,6 +12,6 @@
|
|
12
12
|
<td class='preview'><p><%= img_tag(@node, :mode=>'pv') %></p><p class='size'><%= fsize(@node.size) %></p></td>
|
13
13
|
<td class='description'><h3 class='title s<%= @node.version.status %>'><span class='doc_id'><%= @node[:zip] %></span> <%= @node.title %> <%= node_actions(@node, :actions => :all) %></h3><p class='summary'><%= zazen(@node.summary) %></p></td></tr>
|
14
14
|
</table>
|
15
|
-
<p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.
|
15
|
+
<p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.reload_and_close();" %></p>
|
16
16
|
</div>
|
17
17
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<tr id='add_relation' class='btn_add'>
|
2
2
|
<td class='add'><%= link_to_function _('btn_relation_add'), "['add_relation', 'add_relation_form'].each(Element.toggle); $('relation_source_role').focus();" %></td>
|
3
|
-
<td colspan='
|
3
|
+
<td colspan='4' class='add_relation'></td>
|
4
4
|
</tr>
|
5
5
|
<tr id='add_relation_form' style='display:none;'>
|
6
6
|
<%= render :partial=>'relations/form' %>
|
7
|
-
</tr>
|
7
|
+
</tr>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
link_to_function _('btn_x'), "['add_relation', 'add_relation_form'].each(Element.toggle)"
|
6
6
|
end %>
|
7
7
|
</td>
|
8
|
-
<td class="add" colspan="
|
8
|
+
<td class="add" colspan="4">
|
9
9
|
<div id='relation_errors'><%= error_messages_for(:relation, :object => @relation) %></div>
|
10
10
|
<% unless @relation.new_record? %>
|
11
11
|
<%= form_remote_tag(:url => relation_path(@relation), :method => :put ) %>
|
@@ -36,6 +36,9 @@
|
|
36
36
|
<td class="light" ><%= text_field('relation', 'target_icon', :size=>18 ) %></td>
|
37
37
|
<td class="dark" ><%= text_field('relation', 'source_icon', :size=>18 ) %></td>
|
38
38
|
</tr>
|
39
|
+
<tr><td colspan='3'>
|
40
|
+
<%= text_area('relation', 'comment', :rows => 2, :cols => 40) %></td>
|
41
|
+
</td></tr>
|
39
42
|
<tr><td colspan='3'><p class='btn_validate'><input type='submit' value='<%= _('validate') %>'/></p></td></tr>
|
40
43
|
</table>
|
41
44
|
</form>
|
@@ -44,4 +47,4 @@
|
|
44
47
|
<p class='destroy'><%= _('destroy relation (with all links)') %> <input type='submit' value='<%= _('destroy') %>'></p>
|
45
48
|
</form>
|
46
49
|
<% end -%>
|
47
|
-
</td>
|
50
|
+
</td>
|
data/app/views/relations/_li.erb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
<h2 class='title'><%= _('relations') %></h2>
|
2
2
|
<table id='relation_list' class='admin' cellspacing="0">
|
3
|
-
<tr><th class='nav' colspan='
|
3
|
+
<tr><th class='nav' colspan='5'><%= will_paginate @relations %></th></tr>
|
4
4
|
<% @classes.keys.sort.each do |kpath| -%>
|
5
5
|
<tr class='virtual_class'>
|
6
|
-
<th class='nav sub constant' colspan='
|
6
|
+
<th class='nav sub constant' colspan='5'>
|
7
7
|
<span class='kpath'><%= kpath %></span> <%= VirtualClass.find_by_kpath(kpath).to_s %>
|
8
8
|
</th>
|
9
9
|
</tr>
|
@@ -12,4 +12,4 @@
|
|
12
12
|
<% end -%>
|
13
13
|
<% end -%>
|
14
14
|
<%= render :partial=>'relations/add' %>
|
15
|
-
</table>
|
15
|
+
</table>
|
data/app/views/sites/_form.erb
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
<tr><td class='label'><%= _('options') %></td><td>
|
26
26
|
<% Site.attributes_for_form[:bool].each do |sym| -%>
|
27
27
|
<input type='hidden' name='site[<%= sym %>]' value=''/>
|
28
|
-
<input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site
|
28
|
+
<input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site.send(sym) ? " checked='checked'" : '' %>/> <%= _(sym.to_s) %><br/>
|
29
29
|
<% end -%>
|
30
30
|
</td></tr>
|
31
31
|
<% if !@site.new_record? %>
|
data/app/views/sites/index.erb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<h2 class='title'><%= _('sites') %></h2>
|
2
2
|
|
3
3
|
<table id='site_list' class='admin' cellspacing="0">
|
4
|
-
<tr><th class='nav' colspan='10'><%= will_paginate @sites
|
4
|
+
<tr><th class='nav' colspan='10'><%= will_paginate @sites %></th></tr>
|
5
5
|
<%= render :partial=>'sites/li', :collection=>@sites %>
|
6
6
|
</table>
|
@@ -1,5 +1,8 @@
|
|
1
1
|
<%= upload_form_tag(:action => 'upload') %>
|
2
2
|
<%= hidden_field 'node', 'parent_id', :value=>@node.parent_zip %>
|
3
|
+
<% [:redir, :js].each do |p|; next unless params[p] %>
|
4
|
+
<input type='hidden' name='<%= p %>' value='<%= h params[p] %>'/>
|
5
|
+
<% end %>
|
3
6
|
<p class="btn_validate"><input type="submit" value='<%= _('validate') %>'/></p>
|
4
7
|
|
5
8
|
<%= upload_field %>
|
@@ -6,13 +6,13 @@
|
|
6
6
|
|
7
7
|
<ul id='search_results' do='search_results'>
|
8
8
|
<li class='result_entry' do='each'>
|
9
|
-
<p class='result_image' do='Document'>
|
9
|
+
<p class='result_image' do='Document?'>
|
10
10
|
<r:link format='data' do='img' alt_src='icon' mode='pv'/>
|
11
11
|
<r:else do='link' do='img' alt_src='icon' mode='pv'/>
|
12
12
|
</p>
|
13
13
|
<p class='result_name'><r:link/></p>
|
14
14
|
<p class='result_path'><r:show attr='short_path'/></p>
|
15
|
-
<r:summary/>
|
15
|
+
<r:zazen attr='summary'/>
|
16
16
|
<div class='clear'></div>
|
17
17
|
</li>
|
18
18
|
<r:else>
|
data/bricks/acls/zena/init.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
Zena.use Bricks::Acls
|
1
|
+
Zena.use Bricks::Acls
|
2
|
+
Site::CLEANUP_SQL.unshift ['acls', 'site_id = ?']
|
@@ -82,7 +82,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
82
82
|
Zena::Db.execute "UPDATE acls SET format = 'csv' WHERE id = #{acls_id(:rap)}"
|
83
83
|
login(:hades)
|
84
84
|
# Create special mode template
|
85
|
-
secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text =>
|
85
|
+
secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text => %q{<r:spreadsheet><r:row><r:cell>foo</r:cell><r:cell eval='title'/></r:row></r:spreadsheet>}) }
|
86
86
|
post 'http://erebus.host/session', :login=>'demeter', :password=>'demeter'
|
87
87
|
end
|
88
88
|
|
@@ -94,7 +94,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
94
94
|
should 'allow given mode' do
|
95
95
|
get "http://erebus.host/oo/project#{nodes_zip(:queen)}.csv"
|
96
96
|
assert_response :success
|
97
|
-
assert_equal
|
97
|
+
assert_equal "foo;My Queen;\n", response.body
|
98
98
|
end
|
99
99
|
end # with fixed format
|
100
100
|
|
@@ -144,7 +144,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
144
144
|
context 'with acl for create enabled' do
|
145
145
|
setup do
|
146
146
|
# The visitor can create objects in assigned_project as direct parent
|
147
|
-
Zena::Db.execute "UPDATE acls SET query = 'assigned_project', action = 'create' WHERE id = #{acls_id(:rap)}"
|
147
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{assigned_project}', action = 'create' WHERE id = #{acls_id(:rap)}"
|
148
148
|
@create_url = "http://erebus.host/nodes?node[parent_id]=#{nodes_zip(:queen)}&node[klass]=Page&node[title]=foobar"
|
149
149
|
end
|
150
150
|
|
@@ -197,7 +197,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
197
197
|
context 'with acl for update enabled' do
|
198
198
|
setup do
|
199
199
|
# The visitor can update objects in assigned_project
|
200
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'update' WHERE id = #{acls_id(:rap)}"
|
200
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'update' WHERE id = #{acls_id(:rap)}"
|
201
201
|
@update_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}?node[title]=foobar"
|
202
202
|
end
|
203
203
|
|
@@ -241,7 +241,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
241
241
|
context 'with acl for delete enabled' do
|
242
242
|
setup do
|
243
243
|
# The visitor can delete objects in assigned_project
|
244
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'delete' WHERE id = #{acls_id(:rap)}"
|
244
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'delete' WHERE id = #{acls_id(:rap)}"
|
245
245
|
@delete_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}"
|
246
246
|
end
|
247
247
|
|
@@ -6,7 +6,7 @@ rap:
|
|
6
6
|
# can read
|
7
7
|
action: read
|
8
8
|
# all 'assigned_projects' and the visitor's home node
|
9
|
-
query: assigned_projects or self
|
9
|
+
query: "%q{assigned_projects or self}"
|
10
10
|
# by receiving the 'erebus' access group
|
11
11
|
exec_group: erebus
|
12
12
|
# and viewing it through the 'sky' Skin.
|
@@ -25,7 +25,7 @@ self:
|
|
25
25
|
# can read
|
26
26
|
action: read
|
27
27
|
# self
|
28
|
-
query: nodes where 1=0
|
28
|
+
query: '%q{nodes where 1=0}'
|
29
29
|
# by receiving the 'erebus' access group
|
30
30
|
exec_group: erebus
|
31
31
|
# and viewing it through the 'sky' Skin.
|
@@ -59,7 +59,7 @@ class AclTest < Zena::Unit::TestCase
|
|
59
59
|
visitor.instance_eval do
|
60
60
|
@group_ids = self.group_ids + [erebus_id]
|
61
61
|
end
|
62
|
-
assert subject.update_attributes(:query => 'nodes where 1 =
|
62
|
+
assert subject.update_attributes(:query => "'nodes where 1 = \#{asset_host? ? 1 : 0} in site'")
|
63
63
|
assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
|
64
64
|
assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request(:get, {}, 80)).title
|
65
65
|
end
|
@@ -103,7 +103,7 @@ class AclTest < Zena::Unit::TestCase
|
|
103
103
|
|
104
104
|
context 'with many acls' do
|
105
105
|
setup do
|
106
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'read' WHERE id = #{acls_id(:self)}"
|
106
|
+
Zena::Db.execute "UPDATE acls SET query = \"'nodes in project from assigned_project'\", action = 'read' WHERE id = #{acls_id(:self)}"
|
107
107
|
end
|
108
108
|
|
109
109
|
should 'try acls in turn' do
|