authorails 1.0.0
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/AUTHORAILS_README +20 -0
- data/CHANGELOG +1366 -0
- data/MIT-LICENSE +20 -0
- data/README +182 -0
- data/Rakefile +334 -0
- data/bin/about +3 -0
- data/bin/authorails +19 -0
- data/bin/breakpointer +3 -0
- data/bin/console +3 -0
- data/bin/destroy +3 -0
- data/bin/generate +3 -0
- data/bin/performance/benchmarker +3 -0
- data/bin/performance/profiler +3 -0
- data/bin/plugin +3 -0
- data/bin/process/inspector +3 -0
- data/bin/process/reaper +3 -0
- data/bin/process/spawner +3 -0
- data/bin/runner +3 -0
- data/bin/server +3 -0
- data/builtin/rails_info/rails/info.rb +123 -0
- data/builtin/rails_info/rails/info_controller.rb +9 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/rails_info/rails_info_controller.rb +2 -0
- data/configs/apache.conf +40 -0
- data/configs/databases/frontbase.yml +28 -0
- data/configs/databases/mysql.yml +48 -0
- data/configs/databases/oracle.yml +39 -0
- data/configs/databases/postgresql.yml +44 -0
- data/configs/databases/sqlite2.yml +16 -0
- data/configs/databases/sqlite3.yml +19 -0
- data/configs/empty.log +0 -0
- data/configs/lighttpd.conf +54 -0
- data/configs/routes.rb +23 -0
- data/controllers/accounts_controller.rb +11 -0
- data/controllers/admin_controller.rb +76 -0
- data/controllers/begin_controller.rb +5 -0
- data/controllers/login_controller.rb +101 -0
- data/controllers/permission_controller.rb +91 -0
- data/controllers/roles_controller.rb +58 -0
- data/controllers/tables_controller.rb +714 -0
- data/dispatches/dispatch.fcgi +24 -0
- data/dispatches/dispatch.rb +10 -0
- data/dispatches/gateway.cgi +97 -0
- data/doc/README_FOR_APP +2 -0
- data/environments/boot.rb +45 -0
- data/environments/development.rb +21 -0
- data/environments/environment.rb +63 -0
- data/environments/production.rb +18 -0
- data/environments/test.rb +19 -0
- data/fresh_rakefile +10 -0
- data/helpers/application.rb +607 -0
- data/helpers/application_helper.rb +315 -0
- data/helpers/permission_helper.rb +27 -0
- data/helpers/test_helper.rb +28 -0
- data/html/404.html +30 -0
- data/html/500.html +30 -0
- data/html/favicon.ico +0 -0
- data/html/images/ArrowDn.png +0 -0
- data/html/images/ArrowUp.png +0 -0
- data/html/images/arrow.gif +0 -0
- data/html/images/authorails_logo.gif +0 -0
- data/html/images/delete.png +0 -0
- data/html/images/edit.png +0 -0
- data/html/images/minus.gif +0 -0
- data/html/images/plus.gif +0 -0
- data/html/images/rails.png +0 -0
- data/html/images/show.png +0 -0
- data/html/images/spinner.gif +0 -0
- data/html/index.html +273 -0
- data/html/javascripts/application.js +2 -0
- data/html/javascripts/controls.js +833 -0
- data/html/javascripts/dragdrop.js +942 -0
- data/html/javascripts/effects.js +1088 -0
- data/html/javascripts/live_validation.js +4 -0
- data/html/javascripts/prototype.js +2515 -0
- data/html/robots.txt +1 -0
- data/lib/authorails/version.rb +9 -0
- data/lib/binding_of_caller.rb +85 -0
- data/lib/breakpoint.rb +553 -0
- data/lib/breakpoint_client.rb +196 -0
- data/lib/code_statistics.rb +107 -0
- data/lib/commands.rb +17 -0
- data/lib/commands/about.rb +2 -0
- data/lib/commands/breakpointer.rb +1 -0
- data/lib/commands/console.rb +25 -0
- data/lib/commands/destroy.rb +6 -0
- data/lib/commands/generate.rb +6 -0
- data/lib/commands/ncgi/listener +86 -0
- data/lib/commands/ncgi/tracker +69 -0
- data/lib/commands/performance/benchmarker.rb +24 -0
- data/lib/commands/performance/profiler.rb +50 -0
- data/lib/commands/plugin.rb +918 -0
- data/lib/commands/process/inspector.rb +68 -0
- data/lib/commands/process/reaper.rb +149 -0
- data/lib/commands/process/spawner.rb +209 -0
- data/lib/commands/process/spinner.rb +57 -0
- data/lib/commands/runner.rb +48 -0
- data/lib/commands/server.rb +39 -0
- data/lib/commands/servers/base.rb +19 -0
- data/lib/commands/servers/lighttpd.rb +94 -0
- data/lib/commands/servers/mongrel.rb +65 -0
- data/lib/commands/servers/webrick.rb +59 -0
- data/lib/commands/update.rb +4 -0
- data/lib/console_app.rb +27 -0
- data/lib/console_sandbox.rb +6 -0
- data/lib/console_with_helpers.rb +23 -0
- data/lib/dispatcher.rb +173 -0
- data/lib/fcgi_handler.rb +225 -0
- data/lib/initializer.rb +702 -0
- data/lib/rails_generator.rb +43 -0
- data/lib/rails_generator/base.rb +261 -0
- data/lib/rails_generator/commands.rb +581 -0
- data/lib/rails_generator/generated_attribute.rb +42 -0
- data/lib/rails_generator/generators/applications/app/USAGE +16 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +341 -0
- data/lib/rails_generator/generators/components/controller/USAGE +30 -0
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +37 -0
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +10 -0
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +18 -0
- data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/controller/templates/view.rhtml +2 -0
- data/lib/rails_generator/generators/components/integration_test/USAGE +14 -0
- data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
- data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
- data/lib/rails_generator/generators/components/mailer/USAGE +18 -0
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +34 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +13 -0
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +37 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +3 -0
- data/lib/rails_generator/generators/components/migration/USAGE +14 -0
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +7 -0
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +7 -0
- data/lib/rails_generator/generators/components/model/USAGE +26 -0
- data/lib/rails_generator/generators/components/model/model_generator.rb +38 -0
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/model/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/observer/USAGE +15 -0
- data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
- data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
- data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/plugin/USAGE +35 -0
- data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +38 -0
- data/lib/rails_generator/generators/components/plugin/templates/README +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +22 -0
- data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/resource_generator.rb +76 -0
- data/lib/rails_generator/generators/components/resource/templates/USAGE +18 -0
- data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +20 -0
- data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/resource/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/scaffold/USAGE +32 -0
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +208 -0
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +134 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +3 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form_scaffolding.rhtml +35 -0
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +102 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/partial_list_elements.rhtml +127 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +74 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +75 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +30 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +8 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +37 -0
- data/lib/rails_generator/generators/components/scaffold_resource/USAGE +29 -0
- data/lib/rails_generator/generators/components/scaffold_resource/scaffold_resource_generator.rb +92 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/controller.rb +79 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/functional_test.rb +57 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/layout.rhtml +17 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/style.css +74 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_edit.rhtml +19 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_index.rhtml +24 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_new.rhtml +18 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_show.rhtml +10 -0
- data/lib/rails_generator/generators/components/session_migration/USAGE +15 -0
- data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
- data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
- data/lib/rails_generator/generators/components/web_service/USAGE +28 -0
- data/lib/rails_generator/generators/components/web_service/templates/api_definition.rb +5 -0
- data/lib/rails_generator/generators/components/web_service/templates/controller.rb +8 -0
- data/lib/rails_generator/generators/components/web_service/templates/functional_test.rb +19 -0
- data/lib/rails_generator/generators/components/web_service/web_service_generator.rb +29 -0
- data/lib/rails_generator/lookup.rb +209 -0
- data/lib/rails_generator/manifest.rb +53 -0
- data/lib/rails_generator/options.rb +143 -0
- data/lib/rails_generator/scripts.rb +83 -0
- data/lib/rails_generator/scripts/destroy.rb +7 -0
- data/lib/rails_generator/scripts/generate.rb +7 -0
- data/lib/rails_generator/scripts/update.rb +12 -0
- data/lib/rails_generator/simple_logger.rb +46 -0
- data/lib/rails_generator/spec.rb +44 -0
- data/lib/railties_path.rb +1 -0
- data/lib/ruby_version_check.rb +17 -0
- data/lib/rubyprof_ext.rb +35 -0
- data/lib/tasks/databases.rake +187 -0
- data/lib/tasks/documentation.rake +82 -0
- data/lib/tasks/framework.rake +112 -0
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/misc.rake +4 -0
- data/lib/tasks/pre_namespace_aliases.rake +53 -0
- data/lib/tasks/rails.rb +8 -0
- data/lib/tasks/statistics.rake +18 -0
- data/lib/tasks/testing.rake +120 -0
- data/lib/tasks/tmp.rake +37 -0
- data/lib/test_help.rb +19 -0
- data/lib/webrick_server.rb +166 -0
- data/libs/migration_helper.rb +11 -0
- data/migrations/001_create_logins.rb +22 -0
- data/migrations/002_create_admins.rb +16 -0
- data/migrations/003_create_roles.rb +13 -0
- data/migrations/004_create_tables.rb +11 -0
- data/migrations/005_create_attr_types.rb +13 -0
- data/migrations/006_create_table_fields.rb +22 -0
- data/migrations/007_create_tab_operations.rb +13 -0
- data/migrations/008_create_attr_operations.rb +13 -0
- data/migrations/009_create_tab_permissions.rb +21 -0
- data/migrations/010_create_attr_permissions.rb +21 -0
- data/migrations/011_create_relations.rb +23 -0
- data/migrations/012_create_scaffolds.rb +11 -0
- data/migrations/013_create_relation_permissions.rb +20 -0
- data/models/admin.rb +38 -0
- data/models/attr_operation.rb +3 -0
- data/models/attr_permission.rb +5 -0
- data/models/attr_type.rb +3 -0
- data/models/login.rb +51 -0
- data/models/relation.rb +5 -0
- data/models/relation_permission.rb +4 -0
- data/models/role.rb +13 -0
- data/models/scaffold.rb +2 -0
- data/models/tab_operation.rb +3 -0
- data/models/tab_permission.rb +5 -0
- data/models/table.rb +18 -0
- data/models/table_field.rb +6 -0
- data/plugins/redhillonrails_core/CHANGELOG +186 -0
- data/plugins/redhillonrails_core/MIT-LICENSE +20 -0
- data/plugins/redhillonrails_core/README +152 -0
- data/plugins/redhillonrails_core/init.rb +1 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +54 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/abstract_adapter.rb +46 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/column.rb +21 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/foreign_key_definition.rb +26 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/index_definition.rb +11 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_adapter.rb +94 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_column.rb +8 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/postgresql_adapter.rb +131 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/schema_statements.rb +23 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/sqlite3_adapter.rb +9 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/table_definition.rb +27 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema.rb +25 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema_dumper.rb +58 -0
- data/plugins/redhillonrails_core/lib/redhillonrails_core.rb +19 -0
- data/plugins/redhillonrails_core/tasks/db/comments.rake +9 -0
- data/plugins/schema_validations/CHANGELOG +149 -0
- data/plugins/schema_validations/MIT-LICENSE +20 -0
- data/plugins/schema_validations/README +54 -0
- data/plugins/schema_validations/about.yml +5 -0
- data/plugins/schema_validations/init.rb +1 -0
- data/plugins/schema_validations/install.rb +1 -0
- data/plugins/schema_validations/lib/red_hill_consulting/schema_validations/active_record/base.rb +108 -0
- data/plugins/schema_validations/lib/schema_validations.rb +1 -0
- data/plugins/svn/README +69 -0
- data/plugins/svn/Rakefile +22 -0
- data/plugins/svn/assets/javascripts/live_validation.js +4 -0
- data/plugins/svn/assets/stylesheets/live_validation.css +28 -0
- data/plugins/svn/init.rb +2 -0
- data/plugins/svn/install.rb +1 -0
- data/plugins/svn/lib/form_helpers.rb +49 -0
- data/plugins/svn/lib/live_validations.rb +73 -0
- data/plugins/svn/tasks/live_validation_tasks.rake +17 -0
- data/plugins/svn/test/form_helpers_test.rb +214 -0
- data/plugins/svn/test/live_validations_test.rb +124 -0
- data/plugins/svn/test/resource.rb +17 -0
- data/plugins/svn/uninstall.rb +1 -0
- data/stylesheets/live_validation.css +28 -0
- data/stylesheets/print.css +72 -0
- data/stylesheets/scaffold.css +175 -0
- data/views/accounts/index.rhtml +12 -0
- data/views/accounts/show.rhtml +5 -0
- data/views/admin/_form.rhtml +15 -0
- data/views/admin/add_user.rhtml +21 -0
- data/views/admin/change_pwd.rhtml +23 -0
- data/views/admin/edit_user.rhtml +12 -0
- data/views/admin/index.rhtml +19 -0
- data/views/begin/index.rhtml +0 -0
- data/views/layouts/general.rhtml +59 -0
- data/views/layouts/login.rhtml +18 -0
- data/views/login/change_pwd.rhtml +21 -0
- data/views/login/expired_pwd.rhtml +19 -0
- data/views/login/index.rhtml +15 -0
- data/views/permission/index.rhtml +17 -0
- data/views/permission/relations.rhtml +28 -0
- data/views/permission/roles.rhtml +45 -0
- data/views/permission/tables.rhtml +53 -0
- data/views/roles/_form.rhtml +8 -0
- data/views/roles/edit.rhtml +11 -0
- data/views/roles/list.rhtml +28 -0
- data/views/roles/new.rhtml +8 -0
- data/views/roles/show.rhtml +14 -0
- data/views/shared_views/_advanced_search.rhtml +35 -0
- data/views/shared_views/_child_elements.rhtml +30 -0
- data/views/shared_views/_childs.rhtml +20 -0
- data/views/shared_views/_father_elements.rhtml +27 -0
- data/views/shared_views/_fathers.rhtml +21 -0
- data/views/shared_views/_fathers_header.rhtml +58 -0
- data/views/shared_views/_many_to_many_elements.rhtml +50 -0
- data/views/shared_views/_many_to_manys.rhtml +18 -0
- data/views/shared_views/_one_to_one_elements.rhtml +24 -0
- data/views/shared_views/_one_to_one_father_elements.rhtml +26 -0
- data/views/shared_views/_one_to_ones.rhtml +42 -0
- data/views/shared_views/_one_to_ones_header.rhtml +117 -0
- data/views/shared_views/edit_child.rhtml +89 -0
- data/views/shared_views/edit_many.rhtml +75 -0
- data/views/tables/_cascade.rhtml +10 -0
- data/views/tables/_field.rhtml +10 -0
- data/views/tables/_fk.rhtml +9 -0
- data/views/tables/_form.rhtml +9 -0
- data/views/tables/_join_table_name.rhtml +16 -0
- data/views/tables/_relation_types.rhtml +5 -0
- data/views/tables/_tables.rhtml +15 -0
- data/views/tables/attributes.rhtml +15 -0
- data/views/tables/edit.rhtml +11 -0
- data/views/tables/edit_field.rhtml +18 -0
- data/views/tables/list.rhtml +39 -0
- data/views/tables/new.rhtml +8 -0
- data/views/tables/new_field.rhtml +25 -0
- data/views/tables/relations.rhtml +24 -0
- data/views/tables/show.rhtml +24 -0
- metadata +518 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/local/bin/ruby
|
|
2
|
+
#
|
|
3
|
+
# You may specify the path to the FastCGI crash log (a log of unhandled
|
|
4
|
+
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
|
5
|
+
# and the number of requests to process before running garbage collection.
|
|
6
|
+
#
|
|
7
|
+
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
|
|
8
|
+
# and the GC period is nil (turned off). A reasonable number of requests
|
|
9
|
+
# could range from 10-100 depending on the memory footprint of your app.
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
# # Default log path, normal GC behavior.
|
|
13
|
+
# RailsFCGIHandler.process!
|
|
14
|
+
#
|
|
15
|
+
# # Default log path, 50 requests between GC.
|
|
16
|
+
# RailsFCGIHandler.process! nil, 50
|
|
17
|
+
#
|
|
18
|
+
# # Custom log path, normal GC behavior.
|
|
19
|
+
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
|
20
|
+
#
|
|
21
|
+
require File.dirname(__FILE__) + "/../config/environment"
|
|
22
|
+
require 'fcgi_handler'
|
|
23
|
+
|
|
24
|
+
RailsFCGIHandler.process!
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/local/bin/ruby
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
|
4
|
+
|
|
5
|
+
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
|
6
|
+
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
|
7
|
+
require "dispatcher"
|
|
8
|
+
|
|
9
|
+
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
|
10
|
+
Dispatcher.dispatch
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/local/bin/ruby
|
|
2
|
+
|
|
3
|
+
require 'drb'
|
|
4
|
+
|
|
5
|
+
# This file includes an experimental gateway CGI implementation. It will work
|
|
6
|
+
# only on platforms which support both fork and sockets.
|
|
7
|
+
#
|
|
8
|
+
# To enable it edit public/.htaccess and replace dispatch.cgi with gateway.cgi.
|
|
9
|
+
#
|
|
10
|
+
# Next, create the directory log/drb_gateway and grant the apache user rw access
|
|
11
|
+
# to said directory.
|
|
12
|
+
#
|
|
13
|
+
# On the next request to your server, the gateway tracker should start up, along
|
|
14
|
+
# with a few listener processes. This setup should provide you with much better
|
|
15
|
+
# speeds than dispatch.cgi.
|
|
16
|
+
#
|
|
17
|
+
# Keep in mind that the first request made to the server will be slow, as the
|
|
18
|
+
# tracker and listeners will have to load. Also, the tracker and listeners will
|
|
19
|
+
# shutdown after a period if inactivity. You can set this value below -- the
|
|
20
|
+
# default is 90 seconds.
|
|
21
|
+
|
|
22
|
+
TrackerSocket = File.expand_path(File.join(File.dirname(__FILE__), '../log/drb_gateway/tracker.sock'))
|
|
23
|
+
DieAfter = 90 # Seconds
|
|
24
|
+
Listeners = 3
|
|
25
|
+
|
|
26
|
+
def message(s)
|
|
27
|
+
$stderr.puts "gateway.cgi: #{s}" if ENV && ENV["DEBUG_GATEWAY"]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def listener_socket(number)
|
|
31
|
+
File.expand_path(File.join(File.dirname(__FILE__), "../log/drb_gateway/listener_#{number}.sock"))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
unless File.exists? TrackerSocket
|
|
35
|
+
message "Starting tracker and #{Listeners} listeners"
|
|
36
|
+
fork do
|
|
37
|
+
Process.setsid
|
|
38
|
+
STDIN.reopen "/dev/null"
|
|
39
|
+
STDOUT.reopen "/dev/null", "a"
|
|
40
|
+
|
|
41
|
+
root = File.expand_path(File.dirname(__FILE__) + '/..')
|
|
42
|
+
|
|
43
|
+
message "starting tracker"
|
|
44
|
+
fork do
|
|
45
|
+
ARGV.clear
|
|
46
|
+
ARGV << TrackerSocket << Listeners.to_s << DieAfter.to_s
|
|
47
|
+
load File.join(root, 'script', 'tracker')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
message "starting listeners"
|
|
51
|
+
require File.join(root, 'config/environment.rb')
|
|
52
|
+
Listeners.times do |number|
|
|
53
|
+
fork do
|
|
54
|
+
ARGV.clear
|
|
55
|
+
ARGV << listener_socket(number) << DieAfter.to_s
|
|
56
|
+
load File.join(root, 'script', 'listener')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
message "waiting for tracker and listener to arise..."
|
|
62
|
+
ready = false
|
|
63
|
+
10.times do
|
|
64
|
+
sleep 0.5
|
|
65
|
+
break if (ready = File.exists?(TrackerSocket) && File.exists?(listener_socket(0)))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
if ready
|
|
69
|
+
message "tracker and listener are ready"
|
|
70
|
+
else
|
|
71
|
+
message "Waited 5 seconds, listener and tracker not ready... dropping request"
|
|
72
|
+
Kernel.exit 1
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
DRb.start_service
|
|
77
|
+
|
|
78
|
+
message "connecting to tracker"
|
|
79
|
+
tracker = DRbObject.new_with_uri("drbunix:#{TrackerSocket}")
|
|
80
|
+
|
|
81
|
+
input = $stdin.read
|
|
82
|
+
$stdin.close
|
|
83
|
+
|
|
84
|
+
env = ENV.inspect
|
|
85
|
+
|
|
86
|
+
output = nil
|
|
87
|
+
tracker.with_listener do |number|
|
|
88
|
+
message "connecting to listener #{number}"
|
|
89
|
+
socket = listener_socket(number)
|
|
90
|
+
listener = DRbObject.new_with_uri("drbunix:#{socket}")
|
|
91
|
+
output = listener.process(env, input)
|
|
92
|
+
message "listener #{number} has finished, writing output"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
$stdout.write output
|
|
96
|
+
$stdout.flush
|
|
97
|
+
$stdout.close
|
data/doc/README_FOR_APP
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Don't change this file. Configuration is done in config/environment.rb and config/environments/*.rb
|
|
2
|
+
|
|
3
|
+
unless defined?(RAILS_ROOT)
|
|
4
|
+
root_path = File.join(File.dirname(__FILE__), '..')
|
|
5
|
+
|
|
6
|
+
unless RUBY_PLATFORM =~ /(:?mswin|mingw)/
|
|
7
|
+
require 'pathname'
|
|
8
|
+
root_path = Pathname.new(root_path).cleanpath(true).to_s
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
RAILS_ROOT = root_path
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
unless defined?(Rails::Initializer)
|
|
15
|
+
if File.directory?("#{RAILS_ROOT}/vendor/authorails")
|
|
16
|
+
require "#{RAILS_ROOT}/vendor/authorails/railties/lib/initializer"
|
|
17
|
+
else
|
|
18
|
+
require 'rubygems'
|
|
19
|
+
|
|
20
|
+
environment_without_comments = IO.readlines(File.dirname(__FILE__) + '/environment.rb').reject { |l| l =~ /^#/ }.join
|
|
21
|
+
environment_without_comments =~ /[^#]AUTHORAILS_GEM_VERSION = '([\d.]+)'/
|
|
22
|
+
authorails_gem_version = $1
|
|
23
|
+
|
|
24
|
+
if version = defined?(AUTHORAILS_GEM_VERSION) ? AUTHORAILS_GEM_VERSION : authorails_gem_version
|
|
25
|
+
# Asking for 1.1.6 will give you 1.1.6.5206, if available -- makes it easier to use beta gems
|
|
26
|
+
authorails_gem = Gem.cache.search('authorails', "~>#{version}.0").sort_by { |g| g.version.version }.last
|
|
27
|
+
|
|
28
|
+
if authorails_gem
|
|
29
|
+
gem "authorails", "=#{authorails_gem.version.version}"
|
|
30
|
+
require authorails_gem.full_gem_path + '/lib/initializer'
|
|
31
|
+
else
|
|
32
|
+
STDERR.puts %(Cannot find gem for AuthoRails ~>#{version}.0:
|
|
33
|
+
Install the missing gem with 'gem install -v=#{version} authorails', or
|
|
34
|
+
change environment.rb to define AUTHORAILS_GEM_VERSION with your desired version.
|
|
35
|
+
)
|
|
36
|
+
exit 1
|
|
37
|
+
end
|
|
38
|
+
else
|
|
39
|
+
gem "authorails"
|
|
40
|
+
require 'initializer'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Rails::Initializer.run(:set_load_path)
|
|
45
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# In the development environment your application's code is reloaded on
|
|
4
|
+
# every request. This slows down response time but is perfect for development
|
|
5
|
+
# since you don't have to restart the webserver when you make code changes.
|
|
6
|
+
config.cache_classes = false
|
|
7
|
+
|
|
8
|
+
# Log error messages when you accidentally call methods on nil.
|
|
9
|
+
config.whiny_nils = true
|
|
10
|
+
|
|
11
|
+
# Enable the breakpoint server that script/breakpointer connects to
|
|
12
|
+
config.breakpoint_server = true
|
|
13
|
+
|
|
14
|
+
# Show full error reports and disable caching
|
|
15
|
+
config.action_controller.consider_all_requests_local = true
|
|
16
|
+
config.action_controller.perform_caching = false
|
|
17
|
+
config.action_view.cache_template_extensions = false
|
|
18
|
+
config.action_view.debug_rjs = true
|
|
19
|
+
|
|
20
|
+
# Don't care if the mailer can't send
|
|
21
|
+
config.action_mailer.raise_delivery_errors = false
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Be sure to restart your web server when you modify this file.
|
|
2
|
+
|
|
3
|
+
# Uncomment below to force Rails into production mode when
|
|
4
|
+
# you don't control web/app server and can't set it the proper way
|
|
5
|
+
# ENV['RAILS_ENV'] ||= 'production'
|
|
6
|
+
|
|
7
|
+
# Specifies gem version of Rails to use when vendor/rails is not present
|
|
8
|
+
AUTHORAILS_GEM_VERSION = '1.0.0' unless defined? AUTHORAILS_GEM_VERSION
|
|
9
|
+
|
|
10
|
+
# Bootstrap the Rails environment, frameworks, and default configuration
|
|
11
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
|
12
|
+
|
|
13
|
+
Rails::Initializer.run do |config|
|
|
14
|
+
# Settings in config/environments/* take precedence over those specified here
|
|
15
|
+
|
|
16
|
+
# Skip frameworks you're not going to use (only works if using vendor/rails)
|
|
17
|
+
# config.frameworks -= [ :action_web_service, :action_mailer ]
|
|
18
|
+
|
|
19
|
+
# Only load the plugins named here, by default all plugins in vendor/plugins are loaded
|
|
20
|
+
# config.plugins = %W( exception_notification ssl_requirement )
|
|
21
|
+
|
|
22
|
+
# Add additional load paths for your own custom dirs
|
|
23
|
+
# config.load_paths += %W( #{RAILS_ROOT}/extras )
|
|
24
|
+
|
|
25
|
+
# Force all environments to use the same logger level
|
|
26
|
+
# (by default production uses :info, the others :debug)
|
|
27
|
+
# config.log_level = :debug
|
|
28
|
+
|
|
29
|
+
# Use the database for sessions instead of the file system
|
|
30
|
+
# (create the session table with 'rake db:sessions:create')
|
|
31
|
+
# config.action_controller.session_store = :active_record_store
|
|
32
|
+
|
|
33
|
+
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
|
34
|
+
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
|
35
|
+
# like if you have constraints or database-specific column types
|
|
36
|
+
# config.active_record.schema_format = :sql
|
|
37
|
+
|
|
38
|
+
# Activate observers that should always be running
|
|
39
|
+
# config.active_record.observers = :cacher, :garbage_collector
|
|
40
|
+
|
|
41
|
+
# Make Active Record use UTC-base instead of local time
|
|
42
|
+
# config.active_record.default_timezone = :utc
|
|
43
|
+
|
|
44
|
+
# See Rails::Configuration for more options
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#Enables input live validation. Switch to false to disable it
|
|
48
|
+
ActionView::live_validations = true
|
|
49
|
+
|
|
50
|
+
# Add new inflection rules using the following format
|
|
51
|
+
# (all these examples are active by default):
|
|
52
|
+
# Inflector.inflections do |inflect|
|
|
53
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
|
54
|
+
# inflect.singular /^(ox)en/i, '\1'
|
|
55
|
+
# inflect.irregular 'person', 'people'
|
|
56
|
+
# inflect.uncountable %w( fish sheep )
|
|
57
|
+
# end
|
|
58
|
+
|
|
59
|
+
# Add new mime types for use in respond_to blocks:
|
|
60
|
+
# Mime::Type.register "text/richtext", :rtf
|
|
61
|
+
# Mime::Type.register "application/x-mobile", :mobile
|
|
62
|
+
|
|
63
|
+
# Include your application configuration below
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# The production environment is meant for finished, "live" apps.
|
|
4
|
+
# Code is not reloaded between requests
|
|
5
|
+
config.cache_classes = true
|
|
6
|
+
|
|
7
|
+
# Use a different logger for distributed setups
|
|
8
|
+
# config.logger = SyslogLogger.new
|
|
9
|
+
|
|
10
|
+
# Full error reports are disabled and caching is turned on
|
|
11
|
+
config.action_controller.consider_all_requests_local = false
|
|
12
|
+
config.action_controller.perform_caching = true
|
|
13
|
+
|
|
14
|
+
# Enable serving of images, stylesheets, and javascripts from an asset server
|
|
15
|
+
# config.action_controller.asset_host = "http://assets.example.com"
|
|
16
|
+
|
|
17
|
+
# Disable delivery errors, bad email addresses will be ignored
|
|
18
|
+
# config.action_mailer.raise_delivery_errors = false
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# The test environment is used exclusively to run your application's
|
|
4
|
+
# test suite. You never need to work with it otherwise. Remember that
|
|
5
|
+
# your test database is "scratch space" for the test suite and is wiped
|
|
6
|
+
# and recreated between test runs. Don't rely on the data there!
|
|
7
|
+
config.cache_classes = true
|
|
8
|
+
|
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
|
10
|
+
config.whiny_nils = true
|
|
11
|
+
|
|
12
|
+
# Show full error reports and disable caching
|
|
13
|
+
config.action_controller.consider_all_requests_local = true
|
|
14
|
+
config.action_controller.perform_caching = false
|
|
15
|
+
|
|
16
|
+
# Tell ActionMailer not to deliver emails to the real world.
|
|
17
|
+
# The :test delivery method accumulates sent emails in the
|
|
18
|
+
# ActionMailer::Base.deliveries array.
|
|
19
|
+
config.action_mailer.delivery_method = :test
|
data/fresh_rakefile
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
|
3
|
+
|
|
4
|
+
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
|
|
5
|
+
|
|
6
|
+
require 'rake'
|
|
7
|
+
require 'rake/testtask'
|
|
8
|
+
require 'rake/rdoctask'
|
|
9
|
+
|
|
10
|
+
require 'tasks/rails'
|
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
|
3
|
+
|
|
4
|
+
class ApplicationController < ActionController::Base
|
|
5
|
+
# Pick a unique cookie name to distinguish our session data from others'
|
|
6
|
+
session :session_key => '_<%= app_name%>_session_id'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
layout 'general' #all views will share this layout
|
|
10
|
+
#:authorize checks if the user is logged
|
|
11
|
+
before_filter :authorize
|
|
12
|
+
before_filter :find_relations
|
|
13
|
+
#:initialize loads necessary variables; :privileges checks all user's privileges
|
|
14
|
+
before_filter :initialize,:privileges
|
|
15
|
+
before_filter :find_fkeys,:only => [:new,:create,:edit,:update]
|
|
16
|
+
before_filter :privileges_for_create, :only => [:new,:create] #check if the user can create
|
|
17
|
+
before_filter :privileges_for_destroy, :only => [:destroy] #check if the user can destroy
|
|
18
|
+
before_filter :check_privileges_for_update, :only => [:update] #against attempting to edit fields without permission
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def edit_child
|
|
22
|
+
@child_table = params[:child_table]
|
|
23
|
+
@father = controller_name.singularize.camelize.constantize.find(params[:id])
|
|
24
|
+
if session[:superuser]
|
|
25
|
+
@all = @child_table.singularize.camelize.constantize.find_all
|
|
26
|
+
else
|
|
27
|
+
@all=[]
|
|
28
|
+
all_rows_of_related_table=[]
|
|
29
|
+
@child_table.singularize.camelize.constantize.find_all.each {|r| all_rows_of_related_table << r.id}
|
|
30
|
+
|
|
31
|
+
role=Login.find_by_usernameMail(session[:username]).role_id
|
|
32
|
+
relation=Relation.find_by_sql("SELECT r.id as id
|
|
33
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
34
|
+
WHERE r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and ((t1.name=\"#{controller_name}\" and t2.name=\"#{@child_table}\") or (t2.name=\"#{controller_name}\" and t1.name=\"#{@child_table}\"))")
|
|
35
|
+
relation=relation[0].id unless relation.empty?
|
|
36
|
+
|
|
37
|
+
#if user can create a relation, he can show the rows not even related with the current element
|
|
38
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"create")
|
|
39
|
+
already_defined=[] #rows related with the current element
|
|
40
|
+
@child_table.singularize.camelize.constantize.find(:all,:conditions => "#{controller_name.singularize.foreign_key}=#{params[:id]}").each {|r| already_defined << r.id}
|
|
41
|
+
to_show = all_rows_of_related_table - already_defined
|
|
42
|
+
to_show.each {|r| @all << @child_table.singularize.camelize.constantize.find(r)}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#if user can destroy a relation, he can show the rows related with the current element
|
|
46
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"destroy")
|
|
47
|
+
@child_table.singularize.camelize.constantize.find(:all,:conditions => "#{controller_name.singularize.foreign_key}=#{params[:id]}").each {|r| @all << @child_table.singularize.camelize.constantize.find(r)}
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
render :template => 'shared_views/edit_child'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def update_child
|
|
54
|
+
@child_table = params[:child_table]
|
|
55
|
+
@father = controller_name.singularize.camelize.constantize.find(params[:id])
|
|
56
|
+
@childs= params[@child_table]
|
|
57
|
+
@child_as_class = @child_table.singularize.camelize.constantize
|
|
58
|
+
@child_as_class.transaction do
|
|
59
|
+
fk_name = controller_name.singularize.foreign_key
|
|
60
|
+
|
|
61
|
+
unless session[:superuser]
|
|
62
|
+
role=Login.find_by_usernameMail(session[:username]).role_id
|
|
63
|
+
relation=Relation.find_by_sql("SELECT r.id as id
|
|
64
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
65
|
+
WHERE r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and ((t1.name=\"#{controller_name}\" and t2.name=\"#{@child_table}\") or (t2.name=\"#{controller_name}\" and t1.name=\"#{@child_table}\"))")[0].id
|
|
66
|
+
end
|
|
67
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"destroy")
|
|
68
|
+
#deleting old childs
|
|
69
|
+
@child_as_class.find(:all, :conditions => "#{fk_name} = #{@father.id}").each {|child| child.update_attribute fk_name, nil}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
unless @childs.nil?
|
|
73
|
+
@childs.each do |one|
|
|
74
|
+
@child_as_class.find(one).update_attribute fk_name, @father.id
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
flash[:notice] = @child_table.titleize + " succesfully updated."
|
|
79
|
+
redirect_to :action => 'show', :id => @father
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def edit_many
|
|
83
|
+
@table = params[:table]
|
|
84
|
+
@join_table = params[:join_table]
|
|
85
|
+
@current = controller_name.singularize.camelize.constantize.find(params[:id],:include => @childs)
|
|
86
|
+
if session[:superuser]
|
|
87
|
+
@all = @table.singularize.camelize.constantize.find_all
|
|
88
|
+
else
|
|
89
|
+
@all=[]
|
|
90
|
+
all_rows_of_related_table=[]
|
|
91
|
+
@table.singularize.camelize.constantize.find_all.each {|r| all_rows_of_related_table << r.id}
|
|
92
|
+
|
|
93
|
+
role=Login.find_by_usernameMail(session[:username]).role_id
|
|
94
|
+
relation=Relation.find_by_sql("SELECT r.id as id
|
|
95
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
96
|
+
WHERE r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and ((t1.name=\"#{controller_name}\" and t2.name=\"#{@table}\") or (t2.name=\"#{controller_name}\" and t1.name=\"#{@table}\"))")
|
|
97
|
+
relation=relation[0].id unless relation.empty?
|
|
98
|
+
|
|
99
|
+
#if user can create a relation, he can show the rows not even related with the current element
|
|
100
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"create")
|
|
101
|
+
already_defined=[] #rows related with the current element
|
|
102
|
+
@join_table.singularize.camelize.constantize.find(:all,:conditions => "#{controller_name.singularize.foreign_key}=#{params[:id]}").each {|r| already_defined << r.send(@table.singularize.foreign_key)}
|
|
103
|
+
to_show = all_rows_of_related_table - already_defined
|
|
104
|
+
to_show.each {|r| @all << @table.singularize.camelize.constantize.find(r)}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
#if user can destroy a relation, he can show the rows related with the current element
|
|
108
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"destroy")
|
|
109
|
+
@join_table.singularize.camelize.constantize.find(:all,:conditions => "#{controller_name.singularize.foreign_key}=#{params[:id]}").each {|r| @all << @table.singularize.camelize.constantize.find(r.send(@table.singularize.foreign_key))}
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
render :template => 'shared_views/edit_many'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def update_many
|
|
116
|
+
@table = params[:table]
|
|
117
|
+
@join_table = params[:join_table]
|
|
118
|
+
@current = controller_name.singularize.camelize.constantize.find(params[:id],:include => @childs)
|
|
119
|
+
@related = params[@table]
|
|
120
|
+
@join_table_as_class = @join_table.singularize.camelize.constantize
|
|
121
|
+
fk_name1 = controller_name.singularize.foreign_key
|
|
122
|
+
fk_name2 = @table.singularize.foreign_key
|
|
123
|
+
@new_ids=[] #list of rows choosed
|
|
124
|
+
unless @related.nil?
|
|
125
|
+
@related.each {|r| @new_ids << r.to_i}
|
|
126
|
+
end
|
|
127
|
+
@all = [] #list of all related rows already present
|
|
128
|
+
@current.send(@join_table).each {|r| @all << r.send(@table.singularize).id.to_i unless r.send(@table.singularize).nil?}#all related rows
|
|
129
|
+
@to_insert = @new_ids - @all #new rows that needs to be insert
|
|
130
|
+
@to_delete = @all - @new_ids #old rows that needs to be erased
|
|
131
|
+
@join_table_as_class.transaction do
|
|
132
|
+
@to_insert.each {|r| @join_table_as_class.create(
|
|
133
|
+
fk_name1 => @current.id,
|
|
134
|
+
fk_name2 => r
|
|
135
|
+
)}
|
|
136
|
+
|
|
137
|
+
unless session[:superuser]
|
|
138
|
+
role=Login.find_by_usernameMail(session[:username]).role_id
|
|
139
|
+
relation=Relation.find_by_sql("SELECT r.id as id
|
|
140
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
141
|
+
WHERE r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and ((t1.name=\"#{controller_name}\" and t2.name=\"#{@table}\") or (t2.name=\"#{controller_name}\" and t1.name=\"#{@table}\"))")[0].id
|
|
142
|
+
end
|
|
143
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id_and_action(role,relation,"destroy")
|
|
144
|
+
@to_delete.each {|r| @join_table_as_class.find(:first,:conditions => "#{fk_name1}=#{@current.id} and #{fk_name2}=#{r}").destroy}
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
flash[:notice] = @table.titleize + " succesfully updated."
|
|
148
|
+
redirect_to :action => 'show', :id => @current
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def show_related #for hide/show associated elements from the show action
|
|
152
|
+
object = controller_name.singularize.camelize.constantize.find(params[:id])
|
|
153
|
+
case params[:relation]
|
|
154
|
+
when "one-to-one"
|
|
155
|
+
render :partial => 'shared_views/one_to_one_elements', :locals => {:one => params[:referenced], :object => object}
|
|
156
|
+
when "one-to-one-father"
|
|
157
|
+
render :partial => 'shared_views/one_to_one_father_elements', :locals => {:one => params[:referenced], :object => object}
|
|
158
|
+
when "one-to-many"
|
|
159
|
+
render :partial => 'shared_views/father_elements', :locals => {:father => params[:referenced], :object => object}
|
|
160
|
+
when "one-to-many-child"
|
|
161
|
+
render :partial => 'shared_views/child_elements', :locals => {:child => params[:referenced], :object => object}
|
|
162
|
+
when "many-to-many"
|
|
163
|
+
render :partial => 'shared_views/many_to_many_elements', :locals => {:many => { :join_table => params[:join_table], :name => params[:referenced]}, :object => object}
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
private
|
|
168
|
+
|
|
169
|
+
def authorize #action for login
|
|
170
|
+
if !session[:superuser] #if the user is not the superuser
|
|
171
|
+
unless @user=Login.find_by_usernameMail(session[:username])
|
|
172
|
+
flash[:notice] = "Please login first!"
|
|
173
|
+
redirect_to(:controller => "login") and return false
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def initialize
|
|
179
|
+
@tables=Table.find(:all) #application table's list
|
|
180
|
+
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def privileges
|
|
184
|
+
unless session[:superuser]
|
|
185
|
+
@fields_readable={
|
|
186
|
+
:self => check_field_level_privilege("read",controller_name) #finding readable fields of the current table
|
|
187
|
+
}
|
|
188
|
+
#for each father,loading the fields readable
|
|
189
|
+
@fathers.each {|father| @fields_readable[father] = check_field_level_privilege("read",father.pluralize)}
|
|
190
|
+
#for each father in a one-to-one relation, loading the fields readable
|
|
191
|
+
@one_to_one_fathers.each {|one_father| @fields_readable[one_father] = check_field_level_privilege("read",one_father.pluralize)}
|
|
192
|
+
#for each child in a one-to-one relation, loading the fields readable
|
|
193
|
+
@one_to_ones.each {|one| @fields_readable[one] = check_field_level_privilege("read",one.pluralize)}
|
|
194
|
+
@childs.each {|child| @fields_readable[child] = check_field_level_privilege("read",child)}
|
|
195
|
+
@many_to_manys.each {|many|
|
|
196
|
+
@fields_readable[many[:name]] = check_field_level_privilege("read",many[:name])
|
|
197
|
+
@fields_readable[many[:join_table]] = check_field_level_privilege("read",many[:join_table])
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
editables = check_field_level_privilege("update",controller_name)
|
|
201
|
+
editables.each {|f|
|
|
202
|
+
@fields_editable << f.name
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@can_create=can?("create")
|
|
206
|
+
@can_destroy=can?("destroy")
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def can?(operation)
|
|
211
|
+
find_role_table_operation(operation)
|
|
212
|
+
return check_privilege
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def find_role_table_operation(op)
|
|
216
|
+
@role=Login.find_by_usernameMail(session[:username]).role_id
|
|
217
|
+
@table=Table.find_by_name(controller_name).id
|
|
218
|
+
@operation=TabOperation.find_by_operation(op).id
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def check_privilege
|
|
222
|
+
TabPermission.find_by_role_id_and_table_id_and_tab_operation_id(@role,@table,@operation)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def privileges_for_create
|
|
226
|
+
check_table_level_privilege("create")
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def privileges_for_destroy
|
|
230
|
+
check_table_level_privilege("destroy")
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def check_table_level_privilege(op)
|
|
234
|
+
if !session[:superuser]
|
|
235
|
+
find_role_table_operation(op)
|
|
236
|
+
unless check_privilege
|
|
237
|
+
flash[:notice] = "Not enough privileges for #{op}!"
|
|
238
|
+
redirect_to(:action => "list")
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def check_field_level_privilege(oper,table)
|
|
244
|
+
begin
|
|
245
|
+
if !session[:superuser]
|
|
246
|
+
find_fields(oper,table)
|
|
247
|
+
end
|
|
248
|
+
rescue
|
|
249
|
+
flash[:notice] = "No table fields in database!"
|
|
250
|
+
redirect_to(:action => "list")
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def find_fkeys #helpful for create a select with associated tables
|
|
255
|
+
@fkeys=Relation.find_by_sql(
|
|
256
|
+
"SELECT tf.name,t2.name as referenced_table
|
|
257
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
258
|
+
WHERE r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and t1.name=\"#{controller_name}\" and relation_type <> \"many-to-many\"")
|
|
259
|
+
@rows=[]
|
|
260
|
+
@fkeys.each {|key|
|
|
261
|
+
row={
|
|
262
|
+
:name => key.name,
|
|
263
|
+
:referented_table => key.referenced_table,
|
|
264
|
+
:object => key.referenced_table.singularize.camelize.constantize.find(:all).map {|u| [columns_of(u,key.referenced_table),u.id] }
|
|
265
|
+
}
|
|
266
|
+
@rows << row
|
|
267
|
+
}
|
|
268
|
+
@one_to_one_for_select=[]
|
|
269
|
+
@one_to_ones.each {|one|
|
|
270
|
+
row={
|
|
271
|
+
:name => one,
|
|
272
|
+
:object => one.camelize.constantize.find(:all).map {|u| [columns_of(u,one.pluralize),u.id] }
|
|
273
|
+
}
|
|
274
|
+
@one_to_one_for_select << row
|
|
275
|
+
}
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def columns_of(object,ref_table)
|
|
279
|
+
string=""
|
|
280
|
+
columns=TableField.find(:all,:include => :table,:conditions => "tables.name=\"#{ref_table}\" and table_fields.name <> \"id\" and table_fields.name not like \"%_id\"")
|
|
281
|
+
columns.each {|col|
|
|
282
|
+
if session[:superuser]
|
|
283
|
+
string += "#{object.send(col.name)} "
|
|
284
|
+
else
|
|
285
|
+
unless @fields_readable[ref_table.singularize].empty?
|
|
286
|
+
@fields_readable[ref_table.singularize].each do |field|
|
|
287
|
+
if col.name == field.name
|
|
288
|
+
string += "#{object.send(col.name)} "
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
}
|
|
294
|
+
return string
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def find_fields(oper,table)
|
|
298
|
+
role=Login.find_by_usernameMail(session[:username]).role_id
|
|
299
|
+
#query for select the field-level privileges
|
|
300
|
+
return Table.find_by_sql(
|
|
301
|
+
"SELECT tf.name FROM tables t,table_fields tf,attr_permissions a,attr_operations op
|
|
302
|
+
where t.id=tf.table_id and tf.id=a.table_field_id and a.attr_operation_id=op.id
|
|
303
|
+
and op.operation=\"#{oper}\" and a.role_id=#{role} and t.name=\"#{table}\""
|
|
304
|
+
)
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def check_privileges_for_update
|
|
308
|
+
begin
|
|
309
|
+
if !session[:superuser]
|
|
310
|
+
unless params[controller_name.singularize].nil?
|
|
311
|
+
@string=""
|
|
312
|
+
params[controller_name.singularize].each do |p|
|
|
313
|
+
permission = false
|
|
314
|
+
@string=p[0]
|
|
315
|
+
#we skip the columns that acts as foreign key
|
|
316
|
+
if p[0] =~ /_id$/
|
|
317
|
+
permission = true
|
|
318
|
+
end
|
|
319
|
+
@fields_editable.each do |field|
|
|
320
|
+
if field == p[0] #if user can update the field
|
|
321
|
+
permission = true
|
|
322
|
+
end
|
|
323
|
+
#dates are splitten in date(1i),date(2i),date(3i)
|
|
324
|
+
if p[0] =~ /#{field}(\(.i\))$/
|
|
325
|
+
permission = true
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
unless permission #se invece non ce l'ha,viene reindirizzato all'azione list
|
|
330
|
+
flash[:notice] = "Attempting to update a field without permission."
|
|
331
|
+
redirect_to :action => 'list'+@string and return #return to avoid multiple redirect
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
rescue
|
|
337
|
+
flash[:notice] = "No table fields in database!"
|
|
338
|
+
redirect_to(:action => "list")
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def find_relations
|
|
343
|
+
unless session[:superuser]
|
|
344
|
+
@role=Login.find_by_usernameMail(session[:username]).role_id
|
|
345
|
+
end
|
|
346
|
+
@fields_editable = [] #will contain all fields editable
|
|
347
|
+
@rel_permissions=[] #will contain all relations between tables that user can define
|
|
348
|
+
@relations_to_create=[] #will contain all relations that user can create
|
|
349
|
+
@relations_to_destroy=[] #will contain all relations that user can destroy
|
|
350
|
+
@relations_to_update=[] #will contain all relations that user can update
|
|
351
|
+
@child_relations=Relation.find(:all,:conditions => "tables.name=\"#{controller_name}\" and relation_type <> \"many-to-many\" and for_join_table <> \"yes\"",:include => :table)
|
|
352
|
+
@childs=[] #will contain child tables with a one-to-many relation
|
|
353
|
+
@one_to_ones=[] #will contain child tables with a one-to-one relation
|
|
354
|
+
@child_relations.each do |child|
|
|
355
|
+
case child.relation_type
|
|
356
|
+
when "one-to-one"
|
|
357
|
+
@one_to_ones << child.table_field.table.name.singularize
|
|
358
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,child.id)
|
|
359
|
+
@rel_permissions << child.table_field.table.name
|
|
360
|
+
unless session[:superuser]
|
|
361
|
+
@fields_editable << child.table_field.table.name #so we can add a select when editing an element
|
|
362
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,child.id,'create')
|
|
363
|
+
@relations_to_create << child.table_field.table.name
|
|
364
|
+
end
|
|
365
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,child.id,'destroy')
|
|
366
|
+
@relations_to_destroy << child.table_field.table.name
|
|
367
|
+
end
|
|
368
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,child.id,'update')
|
|
369
|
+
@relations_to_update << child.table_field.table.name
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
when "one-to-many"
|
|
374
|
+
@childs << child.table_field.table.name
|
|
375
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,child.id)
|
|
376
|
+
@rel_permissions << child.table_field.table.name
|
|
377
|
+
unless session[:superuser]
|
|
378
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,child.id,'create')
|
|
379
|
+
@relations_to_create << child.table_field.table.name
|
|
380
|
+
end
|
|
381
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,child.id,'destroy')
|
|
382
|
+
@relations_to_destroy << child.table_field.table.name
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
@father_relations=Relation.find_by_sql(
|
|
391
|
+
"SELECT r.id as id,t2.name as referenced_table,relation_type
|
|
392
|
+
FROM relations r,table_fields tf,tables t1,tables t2
|
|
393
|
+
where r.table_field_id=tf.id and tf.table_id=t1.id and r.table_id=t2.id and t1.name=\"#{controller_name}\" and relation_type <> \"many-to-many\"")
|
|
394
|
+
@fathers=[]
|
|
395
|
+
@one_to_one_fathers=[]
|
|
396
|
+
@father_relations.each {|father|
|
|
397
|
+
if father.relation_type=="one-to-many"
|
|
398
|
+
@fathers << father.referenced_table.singularize
|
|
399
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,father.id)
|
|
400
|
+
@rel_permissions << father.referenced_table
|
|
401
|
+
unless session[:superuser]
|
|
402
|
+
@fields_editable << father.referenced_table
|
|
403
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'create')
|
|
404
|
+
@relations_to_create << father.referenced_table
|
|
405
|
+
end
|
|
406
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'destroy')
|
|
407
|
+
@relations_to_destroy << father.referenced_table
|
|
408
|
+
end
|
|
409
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'update')
|
|
410
|
+
@relations_to_update << father.referenced_table
|
|
411
|
+
end
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
if father.relation_type=="one-to-one"
|
|
416
|
+
@one_to_one_fathers << father.referenced_table.singularize
|
|
417
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,father.id)
|
|
418
|
+
@rel_permissions << father.referenced_table
|
|
419
|
+
unless session[:superuser]
|
|
420
|
+
@fields_editable << father.referenced_table
|
|
421
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'create')
|
|
422
|
+
@relations_to_create << father.referenced_table
|
|
423
|
+
end
|
|
424
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'destroy')
|
|
425
|
+
@relations_to_destroy << father.referenced_table
|
|
426
|
+
end
|
|
427
|
+
if RelationPermission.find_by_role_id_and_relation_id_and_action(@role,father.id,'update')
|
|
428
|
+
@relations_to_update << father.referenced_table
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
#many to many associated tables from a verse
|
|
436
|
+
@many_to_many_relations_1=Relation.find_by_sql("SELECT r.id as id,t1.name as name,join_table
|
|
437
|
+
FROM relations r,tables t1,tables t2,table_fields tf
|
|
438
|
+
WHERE r.table_field_id=tf.id and r.table_id=t1.id and tf.table_id=t2.id and relation_type=\"many-to-many\" and t2.name=\"#{controller_name}\"")
|
|
439
|
+
@many_to_manys=[]
|
|
440
|
+
@many_to_many_relations_1.each {|many|
|
|
441
|
+
row={
|
|
442
|
+
:name => many.name,
|
|
443
|
+
:join_table => many.join_table
|
|
444
|
+
}
|
|
445
|
+
@many_to_manys << row
|
|
446
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,many.id)
|
|
447
|
+
@rel_permissions << many.name
|
|
448
|
+
|
|
449
|
+
end
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
#many to many associated tables from the other verse
|
|
453
|
+
@many_to_many_relations_2=Relation.find_by_sql("SELECT r.id as id,t2.name as name,join_table
|
|
454
|
+
FROM relations r,tables t1,tables t2,table_fields tf
|
|
455
|
+
WHERE r.table_field_id=tf.id and r.table_id=t1.id and tf.table_id=t2.id and relation_type=\"many-to-many\" and t1.name=\"#{controller_name}\"")
|
|
456
|
+
@many_to_many_relations_2.each { |many|
|
|
457
|
+
row={
|
|
458
|
+
:name => many.name,
|
|
459
|
+
:join_table => many.join_table
|
|
460
|
+
}
|
|
461
|
+
@many_to_manys << row
|
|
462
|
+
if session[:superuser] or RelationPermission.find_by_role_id_and_relation_id(@role,many.id)
|
|
463
|
+
@rel_permissions << many.name
|
|
464
|
+
end
|
|
465
|
+
}
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
def find_related_columns
|
|
469
|
+
@fathers.each {|f|
|
|
470
|
+
for column in f.camelize.constantize.content_columns
|
|
471
|
+
if session[:superuser]
|
|
472
|
+
@columns << "#{f.camelize.constantize.table_name}.#{column.name}"
|
|
473
|
+
else
|
|
474
|
+
@fields_readable[f].each do |field|
|
|
475
|
+
if column.name == field.name
|
|
476
|
+
@columns << "#{f.camelize.constantize.table_name}.#{column.name}"
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
}
|
|
482
|
+
@one_to_ones.each {|one|
|
|
483
|
+
for column in one.camelize.constantize.content_columns
|
|
484
|
+
if session[:superuser]
|
|
485
|
+
@columns << "#{one.camelize.constantize.table_name}.#{column.name}"
|
|
486
|
+
else
|
|
487
|
+
@fields_readable[one].each do |f|
|
|
488
|
+
if column.name == f.name
|
|
489
|
+
@columns << "#{one.camelize.constantize.table_name}.#{column.name}"
|
|
490
|
+
end
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
}
|
|
495
|
+
@one_to_one_fathers.each {|one|
|
|
496
|
+
for column in one.camelize.constantize.content_columns
|
|
497
|
+
if session[:superuser]
|
|
498
|
+
@columns << "#{one.camelize.constantize.table_name}.#{column.name}"
|
|
499
|
+
else
|
|
500
|
+
@fields_readable[one].each do |f|
|
|
501
|
+
if column.name == f.name
|
|
502
|
+
@columns << "#{one.camelize.constantize.table_name}.#{column.name}"
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
}
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
def find_conditions_for_search
|
|
511
|
+
if params[:order]==""
|
|
512
|
+
@order = ""
|
|
513
|
+
else
|
|
514
|
+
@order = params[:order]
|
|
515
|
+
end
|
|
516
|
+
@conditions= ""
|
|
517
|
+
if params[:search_type].nil? or params[:search_type].empty? #if an advanced query isn't done
|
|
518
|
+
@filter=params[:query]
|
|
519
|
+
@filter="" if @filter.nil?
|
|
520
|
+
i=1
|
|
521
|
+
unless @filter.empty?
|
|
522
|
+
@conditions_string="Showing rows where each column like '%#{@filter}%'"
|
|
523
|
+
end
|
|
524
|
+
@columns.each {|c|
|
|
525
|
+
@conditions += "#{c} LIKE :filter"
|
|
526
|
+
@conditions += " or " unless i==@columns.length
|
|
527
|
+
i+=1
|
|
528
|
+
}
|
|
529
|
+
@conditions = "true" if @conditions=="" #else an exception will be thrown
|
|
530
|
+
else #an advanced query is done
|
|
531
|
+
@query_advanced=params[:query_advanced]
|
|
532
|
+
@criteria=params[:criteria]
|
|
533
|
+
@search_type=params[:search_type]
|
|
534
|
+
@selected_columns=params[:columns]
|
|
535
|
+
@min=params[:min]
|
|
536
|
+
@max=params[:max]
|
|
537
|
+
if params[:columns].is_a?(String)
|
|
538
|
+
@selected_columns=Array.new
|
|
539
|
+
params[:columns].split("/").each do |col|
|
|
540
|
+
@selected_columns << col
|
|
541
|
+
end
|
|
542
|
+
end
|
|
543
|
+
if !@selected_columns.nil? and ((!@query_advanced.nil? and !@query_advanced.empty? and @search_type=="unilateral") or ((!@min.nil? and !@min.empty? and @search_type=="bilateral") or (!@max.nil? and !@max.empty? and @search_type=="bilateral")))
|
|
544
|
+
@conditions_string="Showing rows where:<br />"
|
|
545
|
+
i=1
|
|
546
|
+
if @search_type == "unilateral"
|
|
547
|
+
unless params[:not_for_unilateral_search].nil? #the checkbox for the negation has been checked
|
|
548
|
+
case @criteria
|
|
549
|
+
when "like" then @criteria="not like"
|
|
550
|
+
when "=" then @criteria="<>"
|
|
551
|
+
when "<" then @criteria=">="
|
|
552
|
+
when ">" then @criteria="<="
|
|
553
|
+
end
|
|
554
|
+
end
|
|
555
|
+
@selected_columns.each do |column|
|
|
556
|
+
@conditions_string += "- #{column} #{@criteria} '#{@query_advanced}'"
|
|
557
|
+
@conditions += "#{column} #{@criteria} :filter"
|
|
558
|
+
@conditions += " or " unless i==@selected_columns.length
|
|
559
|
+
@conditions_string += "<br /> Or<br />" unless i==@selected_columns.length
|
|
560
|
+
i+=1
|
|
561
|
+
end
|
|
562
|
+
elsif @search_type == "bilateral"
|
|
563
|
+
@selected_columns.each do |column|
|
|
564
|
+
if !@min.nil? and !@min.empty? and !@max.nil? and !@max.empty?
|
|
565
|
+
unless params[:not_for_interval_search].nil? #the checkbox for the negation has been checked
|
|
566
|
+
@conditions += "(#{column} <= :min or #{column} >= :max)"
|
|
567
|
+
@conditions_string += "- #{column} not between [#{@min},#{@max}]"
|
|
568
|
+
else
|
|
569
|
+
@conditions += "(#{column} >= :min and #{column} <= :max)"
|
|
570
|
+
@conditions_string += "- #{column} between [#{@min},#{@max}]"
|
|
571
|
+
end
|
|
572
|
+
elsif !@min.nil? and !@min.empty?
|
|
573
|
+
if params[:not_for_interval_search].nil?
|
|
574
|
+
@conditions += "(#{column} >= :min)"
|
|
575
|
+
@conditions_string += "- #{column} between [#{@min},inf]"
|
|
576
|
+
else
|
|
577
|
+
@conditions += "(#{column} < :min)"
|
|
578
|
+
@conditions_string += "- #{column} not between [#{@min},inf]"
|
|
579
|
+
end
|
|
580
|
+
else
|
|
581
|
+
if params[:not_for_interval_search].nil?
|
|
582
|
+
@conditions += "(#{column} <= :max)"
|
|
583
|
+
@conditions_string += "- #{column} between [-inf,#{@max}]"
|
|
584
|
+
else
|
|
585
|
+
@conditions += "(#{column} > :max)"
|
|
586
|
+
@conditions_string += "- #{column} not between [-inf,#{@max}]"
|
|
587
|
+
end
|
|
588
|
+
end
|
|
589
|
+
@conditions += " or " unless i==@selected_columns.length
|
|
590
|
+
@conditions_string += "<br /> Or<br />" unless i==@selected_columns.length
|
|
591
|
+
i+=1
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
@conditions_string += "<br />Search type: #{@search_type}"
|
|
595
|
+
else
|
|
596
|
+
if @selected_columns.nil? #if no columns has been selected
|
|
597
|
+
flash[:notice] = "No columns selected for searching. Showing all rows."
|
|
598
|
+
else #if no filter has been written
|
|
599
|
+
flash[:notice] = "No filter text has been written for #{@search_type} search. Showing all rows."
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
@conditions = "true" if @conditions=="" #else an exception will be thrown
|
|
603
|
+
|
|
604
|
+
end
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
end
|