zena 0.15.2 → 0.16.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/.gitignore +20 -0
- data/CREDITS +27 -0
- data/Capfile +3 -0
- data/DEVELOPERS +46 -0
- data/History.txt +15 -0
- data/MIT-LICENSE +19 -0
- data/Rakefile +44 -0
- data/TODO +24 -0
- data/TODO_ZENA_1_0 +23 -0
- data/app/controllers/application_controller.rb +3 -0
- data/app/controllers/documents_controller.rb +22 -56
- data/app/controllers/nodes_controller.rb +42 -27
- data/app/controllers/pings_controller.rb +19 -0
- data/app/controllers/relations_controller.rb +5 -1
- data/app/controllers/sites_controller.rb +1 -46
- data/app/controllers/user_sessions_controller.rb +47 -0
- data/app/controllers/users_controller.rb +1 -0
- data/app/controllers/versions_controller.rb +25 -7
- data/app/controllers/virtual_classes_controller.rb +1 -1
- data/app/helpers/application_helper.rb +1 -1
- data/app/models/comment.rb +2 -1
- data/app/models/contact_content.rb +2 -2
- data/app/models/data_entry.rb +5 -6
- data/app/models/document.rb +14 -10
- data/app/models/document_content.rb +4 -6
- data/app/models/iformat.rb +2 -2
- data/app/models/image_content.rb +6 -9
- data/app/models/node.rb +106 -164
- data/app/models/page.rb +0 -20
- data/app/models/site.rb +42 -12
- data/app/models/template.rb +3 -8
- data/app/models/template_content.rb +2 -0
- data/app/models/text_document.rb +13 -8
- data/app/models/user.rb +47 -100
- data/app/models/user_session.rb +4 -0
- data/app/models/version.rb +1 -1
- data/app/views/comments/create.rjs +3 -3
- data/app/views/comments/edit.rjs +1 -1
- data/app/views/comments/update.rjs +1 -1
- data/app/views/nodes/_import_results.rhtml +1 -1
- data/app/views/nodes/create.rjs +3 -3
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -2
- data/app/views/templates/document_create_tabs/_import.rhtml +7 -2
- data/app/views/templates/edit_tabs/_document.rhtml +1 -3
- data/app/views/templates/edit_tabs/_image.rhtml +1 -3
- data/app/views/versions/_tr.rhtml +1 -1
- data/app/views/versions/edit.rhtml +2 -26
- data/bin/zena +6 -1
- data/bricks/delayed_job/README +18 -0
- data/bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb +19 -0
- data/bricks/delayed_job/misc/init.rb +8 -0
- data/bricks/delayed_job/misc/tasks.rb +2 -0
- data/bricks/math/patch/application_helper.rb +1 -1
- data/bricks/sphinx/MIT-LICENSE +19 -0
- data/bricks/sphinx/README +19 -0
- data/bricks/sphinx/lib/use_sphinx.rb +78 -0
- data/bricks/sphinx/migrate/20091102171258_add_delta_for_sphinx.rb +9 -0
- data/bricks/sphinx/misc/deploy.rb +20 -0
- data/bricks/sphinx/misc/sphinx.yml +12 -0
- data/bricks/sphinx/misc/tasks.rb +21 -0
- data/bricks/sphinx/patch/node.rb +8 -0
- data/bricks/tags/lib/has_tags.rb +5 -3
- data/bricks/tags/test/zafu/tags.yml +13 -1
- data/config/bricks.yml +35 -0
- data/config/deploy.rb +8 -1
- data/config/environment.rb +1 -1
- data/config/environments/production.rb +1 -1
- data/config/gems.yml +28 -5
- data/config/sphinx.yml +12 -0
- data/db/init/base/skins/default/Node-+popupLayout.zafu +1 -16
- data/db/migrate/20091026161708_add_persistence_token.rb +13 -0
- data/db/migrate/20091101184952_add_session_table.rb +16 -0
- data/db/migrate/20091123175137_add_single_access_token.rb +9 -0
- data/db/migrate/20091124161608_rebuild_fullpath.rb +11 -0
- data/db/schema.rb +21 -8
- data/doc/README_FOR_APP +24 -0
- data/doc/fixtures.graffle +19568 -0
- data/doc/fixtures.pdf +0 -0
- data/doc/template/LICENSE +184 -0
- data/doc/template/README +37 -0
- data/doc/template/allison.css +283 -0
- data/doc/template/allison.js +307 -0
- data/doc/template/allison.rb +260 -0
- data/doc/template/cache/BODY +588 -0
- data/doc/template/cache/CLASS_INDEX +4 -0
- data/doc/template/cache/CLASS_PAGE +1 -0
- data/doc/template/cache/FILE_INDEX +4 -0
- data/doc/template/cache/FILE_PAGE +1 -0
- data/doc/template/cache/FONTS +1 -0
- data/doc/template/cache/FR_INDEX_BODY +1 -0
- data/doc/template/cache/IMGPATH +1 -0
- data/doc/template/cache/INDEX +1 -0
- data/doc/template/cache/JAVASCRIPT +307 -0
- data/doc/template/cache/METHOD_INDEX +4 -0
- data/doc/template/cache/METHOD_LIST +1 -0
- data/doc/template/cache/SRC_PAGE +1 -0
- data/doc/template/cache/STYLE +283 -0
- data/doc/template/cache/URL +1 -0
- data/doc/zafu_changes.yml +29 -0
- data/lib/base_additions.rb +1 -1
- data/lib/bricks.rb +9 -0
- data/lib/bricks/loader.rb +86 -0
- data/lib/bricks/requirements_validation.rb +71 -0
- data/lib/tasks/zena.rake +42 -4
- data/lib/zafu/action.rb +285 -0
- data/lib/zafu/ajax.rb +93 -0
- data/lib/zafu/attributes.rb +117 -0
- data/lib/zafu/calendar.rb +159 -0
- data/lib/zafu/context.rb +330 -0
- data/lib/zafu/core/html.rb +102 -0
- data/lib/zafu/core/move_to_parser.rb +167 -0
- data/lib/zafu/dates.rb +58 -0
- data/lib/zafu/display.rb +502 -0
- data/lib/zafu/eval.rb +66 -0
- data/lib/zafu/experimental.rb +66 -0
- data/lib/zafu/i18n.rb +64 -0
- data/lib/zafu/meta.rb +25 -0
- data/lib/zafu/refactor.rb +73 -0
- data/lib/zafu/support/context.rb +265 -0
- data/lib/zafu/support/dom.rb +145 -0
- data/lib/zafu/support/erb.rb +62 -0
- data/lib/zafu/support/flow.rb +401 -0
- data/lib/zafu/support/forms.rb +461 -0
- data/lib/zafu/support/links.rb +306 -0
- data/lib/zafu_parser.rb +26 -2
- data/lib/zena.rb +34 -15
- data/lib/zena/acts/multiversion.rb +2 -2
- data/lib/zena/acts/secure.rb +41 -30
- data/lib/zena/app.rb +7 -10
- data/lib/zena/controller/test_case.rb +12 -7
- data/lib/zena/crypto_provider/initial.rb +15 -0
- data/lib/zena/db.rb +6 -1
- data/lib/zena/deploy.rb +34 -6
- data/lib/zena/deploy/logrotate_app.rhtml +9 -0
- data/lib/zena/deploy/logrotate_host.rhtml +34 -0
- data/lib/zena/deploy/template.rb +1 -9
- data/lib/zena/foxy_parser.rb +1 -1
- data/lib/zena/info.rb +3 -1
- data/lib/zena/migrator.rb +1 -1
- data/lib/zena/parser.rb +12 -4
- data/lib/zena/parser/zazen_rules.rb +6 -6
- data/lib/zena/parser/zena_rules.rb +1 -7
- data/lib/zena/routes.rb +5 -5
- data/lib/zena/test_controller.rb +7 -2
- data/lib/zena/unit/test_case.rb +6 -8
- data/lib/zena/use/ajax.rb +10 -10
- data/lib/zena/use/authlogic.rb +93 -0
- data/lib/zena/use/dyn_attributes.rb +5 -0
- data/lib/zena/use/html_tags.rb +16 -34
- data/lib/zena/use/i18n.rb +4 -1
- data/lib/zena/use/node_query_finders.rb +8 -4
- data/lib/zena/use/refactor.rb +8 -20
- data/lib/zena/use/relations.rb +1 -0
- data/lib/zena/use/rendering.rb +4 -2
- data/lib/zena/use/search.rb +52 -0
- data/lib/zena/use/test_helper.rb +27 -28
- data/lib/zena/use/upload.rb +188 -0
- data/lib/zena/use/urls.rb +16 -14
- data/lib/zena/use/zafu.rb +16 -63
- data/lib/zena/use/zazen.rb +8 -8
- data/lib/zena/view/test_case.rb +8 -4
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +3 -3
- data/public/.htaccess +40 -0
- data/public/javascripts/upload-progress.js +17 -8
- data/public/javascripts/zena.js +8 -2
- data/public/stylesheets/popup.css +1 -0
- data/script/about +3 -0
- data/script/apache_logging +25 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/dbconsole +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/inspector +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/set_revision +29 -0
- data/spec/controllers/versions_controller_spec.rb +11 -0
- data/test/fixtures/files/Node-test.zafu +1 -1
- data/test/functional/nodes_controller_test.rb +25 -0
- data/test/functional/pings_controller_test.rb +8 -0
- data/test/functional/user_sessions_controller_test.rb +59 -0
- data/test/functional/users_controller_test.rb +81 -19
- data/test/helpers/node_query/filters.yml +5 -0
- data/test/helpers/node_query_test.rb +3 -3
- data/test/integration/multiple_hosts_test.rb +1 -1
- data/test/integration/navigation_test.rb +1 -1
- data/test/sites/complex/users.yml +1 -1
- data/test/sites/ocean/users.yml +3 -3
- data/test/sites/zena/users.yml +5 -4
- data/test/test_zena.rb +38 -38
- data/test/unit/cached_page_test.rb +2 -2
- data/test/unit/comment_test.rb +0 -1
- data/test/unit/document_test.rb +23 -11
- data/test/unit/helpers/ping_helper_test.rb +4 -0
- data/test/unit/multiversion_test.rb +24 -16
- data/test/unit/node_test.rb +32 -93
- data/test/unit/note_test.rb +9 -0
- data/test/unit/page_test.rb +2 -2
- data/test/unit/secure_test.rb +2 -12
- data/test/unit/site_test.rb +43 -24
- data/test/unit/template_test.rb +45 -3
- data/test/unit/text_document_test.rb +4 -3
- data/test/unit/user_test.rb +13 -33
- data/test/unit/zena/db_test.rb +8 -0
- data/test/unit/zena/parser/zazen.yml +4 -4
- data/test/unit/zena/use/dates_view_methods_test.rb +2 -1
- data/test/unit/zena/use/html_tags_test.rb +12 -4
- data/test/unit/zena/use/refactor_test.rb +4 -3
- data/test/unit/zena/use/rendering_test.rb +1 -0
- data/test/unit/zena/use/upload_test.rb +76 -0
- data/test/unit/zena/use/urls_test.rb +4 -0
- data/test/unit/zena/use/zafu_test.rb +8 -0
- data/test/unit/zena/workflow/status_version_test.rb +6 -0
- data/test/unit/zena/zena_tags/ajax.yml +4 -4
- data/test/unit/zena/zena_tags/basic.yml +21 -10
- data/test/unit/zena/zena_tags/relations.yml +0 -6
- data/test/unit/zena/zena_tags/rubyless.yml +35 -0
- data/test/unit/zena/zena_tags/zazen.yml +4 -4
- data/test/unit/zena/zena_tags_test.rb +36 -4
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +1 -1
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +2 -3
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +102 -58
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Zena.tmbundle/info.plist +2 -0
- data/zena.gemspec +2085 -0
- metadata +265 -90
- data/app/controllers/sessions_controller.rb +0 -41
- data/app/views/sites/zena_up.html.erb +0 -11
- data/config/database.yml +0 -40
- data/db/production.sqlite3 +0 -0
- data/lib/bricks/patcher.rb +0 -68
- data/lib/zena/parser/zena_tags.rb +0 -3562
- data/lib/zena/use/authentification.rb +0 -120
- data/public/images/ext/contact_pv.png +0 -0
- data/public/images/ext/other_pv.png +0 -0
- data/public/images/ext/page_pv.png +0 -0
- data/public/images/ext/page_tiny.png +0 -0
- data/public/images/ext/pdf_pv.png +0 -0
- data/public/images/ext/post_pv.png +0 -0
- data/public/images/ext/post_tiny.png +0 -0
- data/public/images/ext/project_pv.png +0 -0
- data/public/images/ext/project_tiny.png +0 -0
- data/public/images/ext/tag_pv.png +0 -0
- data/public/images/ext/zip_pv.png +0 -0
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -51
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -292
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
- data/tasks/zentest.rake +0 -36
- data/test/fixtures/comments.yml +0 -126
- data/test/fixtures/contact_contents.yml +0 -132
- data/test/fixtures/data_entries.yml +0 -65
- data/test/fixtures/discussions.yml +0 -48
- data/test/fixtures/document_contents.yml +0 -108
- data/test/fixtures/dyn_attributes.yml +0 -66
- data/test/fixtures/groups.yml +0 -86
- data/test/fixtures/groups_users.yml +0 -81
- data/test/fixtures/iformats.yml +0 -29
- data/test/fixtures/links.yml +0 -313
- data/test/fixtures/nodes.yml +0 -2592
- data/test/fixtures/relations.yml +0 -126
- data/test/fixtures/sites.yml +0 -58
- data/test/fixtures/template_contents.yml +0 -172
- data/test/fixtures/users.yml +0 -167
- data/test/fixtures/versions.yml +0 -1911
- data/test/fixtures/virtual_classes.yml +0 -87
- data/test/fixtures/zips.yml +0 -15
- data/test/functional/sessions_controller_test.rb +0 -73
data/lib/zena/foxy_parser.rb
CHANGED
|
@@ -150,7 +150,7 @@ module Zena
|
|
|
150
150
|
def get_content(site, table)
|
|
151
151
|
fixtures_paths = {'zena' => File.join("#{Zena::ROOT}/test/sites",site,"#{table}.yml")}
|
|
152
152
|
fixtures_bricks = ['zena']
|
|
153
|
-
Bricks
|
|
153
|
+
Bricks.foreach_brick do |brick_path|
|
|
154
154
|
brick_name = brick_path.split('/').last
|
|
155
155
|
fixtures_paths[brick_name] = File.join(brick_path,'test','sites',site,"#{table}.yml")
|
|
156
156
|
fixtures_bricks << brick_name
|
data/lib/zena/info.rb
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
|
|
1
2
|
if defined?(RAILS_ROOT)
|
|
2
3
|
SITES_ROOT = "#{RAILS_ROOT}/sites"
|
|
3
4
|
end
|
|
5
|
+
|
|
4
6
|
AUTHENTICATED_PREFIX = "oo"
|
|
5
7
|
PASSWORD_SALT = "jf93jfnvnas09093nas0923" # type anything here (but change this line !)
|
|
6
8
|
ZENA_CALENDAR_LANGS = ["en", "fr"] # FIXME: build this dynamically from existing files
|
|
7
9
|
ENABLE_XSENDFILE = false
|
|
8
10
|
|
|
9
11
|
module Zena
|
|
10
|
-
VERSION = '0.
|
|
12
|
+
VERSION = '0.16.0'
|
|
11
13
|
REVISION = 1336
|
|
12
14
|
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
13
15
|
end
|
data/lib/zena/migrator.rb
CHANGED
|
@@ -85,7 +85,7 @@ module Zena
|
|
|
85
85
|
raise StandardError.new("This database does not yet support migrations") unless ActiveRecord::Base.connection.supports_migrations?
|
|
86
86
|
self.class.init_bricks_migration_table
|
|
87
87
|
@direction, @migrations_path, @brick_name, @target_version = direction, migrations_path, brick_name, target_version
|
|
88
|
-
@brick_name = nil if @brick_name
|
|
88
|
+
@brick_name = nil if @brick_name == 'zena' # use NULL so that rails migrations work the same
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def migrated
|
data/lib/zena/parser.rb
CHANGED
|
@@ -147,10 +147,11 @@ module Zena
|
|
|
147
147
|
return @result unless before_render
|
|
148
148
|
@pass = {} # used to pass information to the parent
|
|
149
149
|
res = nil
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
|
|
151
|
+
if respond_to?("r_#{@method}".to_sym)
|
|
152
|
+
res = do_method("r_#{@method}".to_sym)
|
|
152
153
|
else
|
|
153
|
-
res =
|
|
154
|
+
res = do_method(:r_unknown)
|
|
154
155
|
end
|
|
155
156
|
|
|
156
157
|
after_render(res + @text)
|
|
@@ -286,7 +287,7 @@ module Zena
|
|
|
286
287
|
@blocks = included_blocks + not_found
|
|
287
288
|
end
|
|
288
289
|
|
|
289
|
-
# Return a
|
|
290
|
+
# Return a hash of all descendants. Find a specific descendant with descendant['form'] for example.
|
|
290
291
|
def all_descendants
|
|
291
292
|
@all_descendants ||= begin
|
|
292
293
|
d = {}
|
|
@@ -304,6 +305,13 @@ module Zena
|
|
|
304
305
|
end
|
|
305
306
|
end
|
|
306
307
|
|
|
308
|
+
# Find a direct child with +child[method]+.
|
|
309
|
+
def child
|
|
310
|
+
Hash[*@blocks.map do |b|
|
|
311
|
+
b.kind_of?(String) ? nil : [b.method, b]
|
|
312
|
+
end.compact.flatten]
|
|
313
|
+
end
|
|
314
|
+
|
|
307
315
|
def descendants(key)
|
|
308
316
|
all_descendants[key] || []
|
|
309
317
|
end
|
|
@@ -187,10 +187,10 @@ module Zena
|
|
|
187
187
|
# link inside the cms "":34
|
|
188
188
|
title, id = $1, $2
|
|
189
189
|
if id =~ /(.*?)#(.*)/
|
|
190
|
-
id,
|
|
191
|
-
|
|
190
|
+
id, anchor = $1, $2
|
|
191
|
+
anchor = 'true' if anchor == ''
|
|
192
192
|
end
|
|
193
|
-
store @helper.make_link(:title=>title,:id=>id,:
|
|
193
|
+
store @helper.make_link(:title=>title,:id=>id,:anchor=>anchor)
|
|
194
194
|
end
|
|
195
195
|
elsif @text =~ /\A"([^"]*)":(#{PSEUDO_ID_REGEXP})((_[a-z]+|)(\.[a-z]+|)(#[a-z_\/\[\]]*|))/m
|
|
196
196
|
#puts "SHORTCUT_LINK:[#{$&}]"
|
|
@@ -209,10 +209,10 @@ module Zena
|
|
|
209
209
|
title = "#{node.fullpath}#{mode_format}"
|
|
210
210
|
end
|
|
211
211
|
if id =~ /(.*?)#(.*)/
|
|
212
|
-
id,
|
|
213
|
-
|
|
212
|
+
id, anchor = $1, $2
|
|
213
|
+
anchor = 'true' if anchor == ''
|
|
214
214
|
end
|
|
215
|
-
store @helper.make_link(:title=>title,:id=>id,:
|
|
215
|
+
store @helper.make_link(:title=>title,:id=>id,:anchor=>anchor,:node=>node)
|
|
216
216
|
end
|
|
217
217
|
elsif @translate_ids
|
|
218
218
|
store $&
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Zena
|
|
2
2
|
module Parser
|
|
3
3
|
module ZenaRules
|
|
4
|
+
# FIXME: remove all this when rubyless is in place !
|
|
4
5
|
def start(mode)
|
|
5
6
|
super
|
|
6
7
|
if @method =~ /^\[(.*)\]$/
|
|
@@ -16,13 +17,6 @@ module Zena
|
|
|
16
17
|
@params[:select] = @method
|
|
17
18
|
@method = 'context'
|
|
18
19
|
end
|
|
19
|
-
|
|
20
|
-
if @method == 'with' || self.respond_to?("r_#{@method}")
|
|
21
|
-
# ok
|
|
22
|
-
else
|
|
23
|
-
@params[:select] = @method
|
|
24
|
-
@method = 'context'
|
|
25
|
-
end
|
|
26
20
|
end
|
|
27
21
|
end # ZenaRules
|
|
28
22
|
end # Parser
|
data/lib/zena/routes.rb
CHANGED
|
@@ -3,12 +3,13 @@ module Zena
|
|
|
3
3
|
def zen_routes
|
|
4
4
|
home ':prefix', :controller => 'nodes', :action => 'index', :prefix => /[a-zA-Z]{0,2}/
|
|
5
5
|
not_found ':prefix/404.html', :controller => 'nodes', :action => 'not_found', :prefix => /\w\w/
|
|
6
|
-
login 'login', :controller => '
|
|
7
|
-
logout 'logout', :controller => '
|
|
6
|
+
login 'login', :controller => 'user_sessions', :action => 'new', :requirements => { :method => :get }
|
|
7
|
+
logout 'logout', :controller => 'user_sessions', :action => 'destroy'
|
|
8
8
|
|
|
9
9
|
upload_progress 'upload_progress', :controller => 'documents', :action => 'upload_progress'
|
|
10
10
|
|
|
11
|
-
resource :session # singleton resource
|
|
11
|
+
resource :session, :controller => "user_sessions" # singleton resource
|
|
12
|
+
resources :pings
|
|
12
13
|
resources :users, :member => { :preferences => :get, :swap_dev => :get }
|
|
13
14
|
resources :groups
|
|
14
15
|
resources :iformats
|
|
@@ -47,13 +48,12 @@ module Zena
|
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
# FIXME: merge 'documents' controller into 'nodes' (keep module for clarity)
|
|
50
|
-
resources :documents, :collection => { :upload => :post, :
|
|
51
|
+
resources :documents, :collection => { :upload => :post, :get_uf => :get },
|
|
51
52
|
:member => { :crop_form => :get }
|
|
52
53
|
|
|
53
54
|
resources :relations
|
|
54
55
|
resources :virtual_classes
|
|
55
56
|
resources :sites,
|
|
56
|
-
:collection => { :zena_up => :get },
|
|
57
57
|
:member => { :clear_cache => :post }
|
|
58
58
|
resources :comments,
|
|
59
59
|
:collection => { :empty_bin => :delete },
|
data/lib/zena/test_controller.rb
CHANGED
|
@@ -2,8 +2,11 @@ ActionController::Routing::Routes.add_route '----/test/:action', :controller =>
|
|
|
2
2
|
|
|
3
3
|
module Zena
|
|
4
4
|
class TestController < ApplicationController
|
|
5
|
+
include Zena::Use::Fixtures
|
|
6
|
+
include Zena::Use::TestHelper
|
|
5
7
|
helper_method :get_template_text, :template_url_for_asset, :save_erb_to_url
|
|
6
|
-
|
|
8
|
+
skip_before_filter :set_visitor
|
|
9
|
+
prepend_before_filter :set_context
|
|
7
10
|
|
|
8
11
|
class << self
|
|
9
12
|
def templates=(templates)
|
|
@@ -40,14 +43,16 @@ module Zena
|
|
|
40
43
|
def set_lang
|
|
41
44
|
end
|
|
42
45
|
|
|
46
|
+
# We skip authlogic
|
|
43
47
|
def set_context
|
|
44
|
-
|
|
48
|
+
login(params[:user])
|
|
45
49
|
set_visitor_lang(params[:prefix])
|
|
46
50
|
@node = secure!(Node) { Node.find(params[:node_id])}
|
|
47
51
|
@text = params[:text]
|
|
48
52
|
@test_url = params[:url]
|
|
49
53
|
@date = Date.parse(params[:date]) if params[:date]
|
|
50
54
|
params.delete(:user_id)
|
|
55
|
+
params.delete(:user)
|
|
51
56
|
params.delete(:prefix)
|
|
52
57
|
params.delete(:node_id)
|
|
53
58
|
params.delete(:text)
|
data/lib/zena/unit/test_case.rb
CHANGED
|
@@ -4,19 +4,17 @@ module Zena
|
|
|
4
4
|
include Zena::Use::Fixtures
|
|
5
5
|
include Zena::Use::TestHelper
|
|
6
6
|
include Zena::Acts::Secure
|
|
7
|
+
include ::Authlogic::TestCase
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
# Ignore since we include helpers in the TestCase itself
|
|
10
|
-
end
|
|
9
|
+
setup :activate_authlogic
|
|
11
10
|
|
|
12
11
|
def setup
|
|
13
|
-
|
|
12
|
+
#log anonymously by default
|
|
13
|
+
login(:anon)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
17
|
-
|
|
18
|
-
puts "[#{er}] #{msg}"
|
|
19
|
-
end
|
|
16
|
+
def self.helper_attr(*args)
|
|
17
|
+
# Ignore since we include helpers in the TestCase itself
|
|
20
18
|
end
|
|
21
19
|
|
|
22
20
|
end
|
data/lib/zena/use/ajax.rb
CHANGED
|
@@ -32,14 +32,14 @@ module Zena
|
|
|
32
32
|
|
|
33
33
|
if obj.new_record?
|
|
34
34
|
# A. could not create object: show form with errors
|
|
35
|
-
page.replace "#{params[:dom_id]}_form", :file =>
|
|
35
|
+
page.replace "#{params[:dom_id]}_form", :file => template_path_from_template_url + "_form.erb"
|
|
36
36
|
elsif @errors || !obj.errors.empty?
|
|
37
37
|
# B. could not update/delete: show errors
|
|
38
38
|
case params[:action]
|
|
39
39
|
when 'destroy', 'drop'
|
|
40
40
|
page.insert_html :top, params[:dom_id], :inline => render_errors
|
|
41
41
|
else
|
|
42
|
-
page.replace "#{params[:dom_id]}_form", :file =>
|
|
42
|
+
page.replace "#{params[:dom_id]}_form", :file => template_path_from_template_url + "_form.erb"
|
|
43
43
|
end
|
|
44
44
|
elsif params[:udom_id]
|
|
45
45
|
if params[:udom_id] == '_page'
|
|
@@ -56,10 +56,10 @@ module Zena
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
|
-
page.replace params[:udom_id], :file =>
|
|
59
|
+
page.replace params[:udom_id], :file => template_path_from_template_url(params[:u_url]) + ".erb"
|
|
60
60
|
if params[:upd_both]
|
|
61
61
|
@dom_id = params[:dom_id]
|
|
62
|
-
page.replace params[:dom_id], :file =>
|
|
62
|
+
page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
|
|
63
63
|
end
|
|
64
64
|
if params[:done] && params[:action] == 'create'
|
|
65
65
|
page.toggle "#{params[:dom_id]}_form", "#{params[:dom_id]}_add"
|
|
@@ -76,25 +76,25 @@ module Zena
|
|
|
76
76
|
#
|
|
77
77
|
case params[:action]
|
|
78
78
|
when 'edit'
|
|
79
|
-
page.replace params[:dom_id], :file =>
|
|
79
|
+
page.replace params[:dom_id], :file => template_path_from_template_url + "_form.erb"
|
|
80
80
|
# page << "$('#{params[:dom_id]}_form_t').focusFirstElement();"
|
|
81
81
|
when 'create'
|
|
82
82
|
pos = params[:position] || :before
|
|
83
83
|
ref = params[:reference] || "#{params[:dom_id]}_add"
|
|
84
|
-
page.insert_html pos.to_sym, ref, :file =>
|
|
84
|
+
page.insert_html pos.to_sym, ref, :file => template_path_from_template_url + ".erb"
|
|
85
85
|
if obj.kind_of?(Node)
|
|
86
86
|
@node = @node.parent.new_child(:class => @node.class)
|
|
87
87
|
else
|
|
88
88
|
instance_variable_set("@#{base_class.to_s.underscore}", obj.clone)
|
|
89
89
|
end
|
|
90
|
-
page.replace "#{params[:dom_id]}_form", :file =>
|
|
90
|
+
page.replace "#{params[:dom_id]}_form", :file => template_path_from_template_url + "_form.erb"
|
|
91
91
|
if params[:done]
|
|
92
92
|
page << params[:done]
|
|
93
93
|
else
|
|
94
94
|
page.toggle "#{params[:dom_id]}_form", "#{params[:dom_id]}_add"
|
|
95
95
|
end
|
|
96
96
|
when 'update'
|
|
97
|
-
page.replace params[:dom_id], :file =>
|
|
97
|
+
page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
|
|
98
98
|
page << params[:done] if params[:done]
|
|
99
99
|
when 'destroy'
|
|
100
100
|
page.visual_effect :highlight, params[:dom_id], :duration => 0.3
|
|
@@ -105,9 +105,9 @@ module Zena
|
|
|
105
105
|
page.visual_effect :highlight, params[:drop], :duration => 0.3
|
|
106
106
|
page.visual_effect :fade, params[:drop], :duration => 0.3
|
|
107
107
|
end
|
|
108
|
-
page.replace params[:dom_id], :file =>
|
|
108
|
+
page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
|
|
109
109
|
else
|
|
110
|
-
page.replace params[:dom_id], :file =>
|
|
110
|
+
page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
|
|
111
111
|
end
|
|
112
112
|
end
|
|
113
113
|
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Zena
|
|
2
|
+
module Use
|
|
3
|
+
module Authlogic
|
|
4
|
+
module Common
|
|
5
|
+
|
|
6
|
+
def visitor
|
|
7
|
+
Thread.current[:visitor]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
end # Common
|
|
11
|
+
|
|
12
|
+
module ControllerMethods
|
|
13
|
+
|
|
14
|
+
def self.included(base)
|
|
15
|
+
base.before_filter :set_after_login, :set_visitor, :force_authentication?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
include Common
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def set_after_login
|
|
23
|
+
Thread.current[:after_login_url] = request.parameters
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def set_visitor
|
|
27
|
+
unless site = Site.find_by_host(request.host)
|
|
28
|
+
raise ActiveRecord::RecordNotFound.new("host not found #{request.host}")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# We temporarily set the locale so that any error message raised during authentification can be properly shown
|
|
32
|
+
::I18n.locale = site.default_lang
|
|
33
|
+
|
|
34
|
+
User.send(:with_scope, :find => {:conditions => ['site_id = ?', site.id]}) do
|
|
35
|
+
Thread.current[:visitor] = registered_visitor || http_visitor(site) || token_visitor || anonymous_visitor(site)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def registered_visitor
|
|
40
|
+
visitor_session && visitor_session.user
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def visitor_session
|
|
44
|
+
UserSession.find
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def anonymous_visitor(site)
|
|
48
|
+
site.anon.tap do |v|
|
|
49
|
+
v.ip = request.headers['REMOTE_ADDR']
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def check_is_admin
|
|
54
|
+
render_404(ActiveRecord::RecordNotFound) unless visitor.is_admin?
|
|
55
|
+
@admin = true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def lang
|
|
59
|
+
visitor.lang
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def token_visitor
|
|
63
|
+
if user_token = params[:user_token] && request.format == Mime::XML
|
|
64
|
+
User.find_by_single_access_token(user_token)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def http_visitor(site)
|
|
69
|
+
if site.http_auth && request.format == Mime::XML
|
|
70
|
+
authenticate_or_request_with_http_basic do |login, password|
|
|
71
|
+
user = User.find_allowed_user_by_login(login)
|
|
72
|
+
user if (user && user.valid_password?(password))
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def force_authentication?
|
|
78
|
+
if current_site.authentication? && visitor.is_anon?
|
|
79
|
+
redirect_to login_url
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
module ViewMethods
|
|
86
|
+
|
|
87
|
+
include Common
|
|
88
|
+
|
|
89
|
+
end # ViewMethods
|
|
90
|
+
|
|
91
|
+
end # Authlogic
|
|
92
|
+
end # Use
|
|
93
|
+
end # Zena
|
|
@@ -186,6 +186,9 @@ module Zena
|
|
|
186
186
|
nested_attributes_alias nested_alias
|
|
187
187
|
end
|
|
188
188
|
|
|
189
|
+
# This is used by Sphinx brick or other 'rails association crawlers'.
|
|
190
|
+
self.has_many :dynamic_attributes, :foreign_key => 'owner_id', :table_name => options[:table_name], :class_name => 'DynAttribute'
|
|
191
|
+
|
|
189
192
|
class_eval <<-END
|
|
190
193
|
def self.dyn_attribute_options
|
|
191
194
|
#{options.inspect}
|
|
@@ -200,6 +203,8 @@ module Zena
|
|
|
200
203
|
# add all methods from the module "AddActsAsMethod" to the 'base' module
|
|
201
204
|
base.extend Zena::Use::DynAttributes::ClassMethods
|
|
202
205
|
|
|
206
|
+
# This is used by Sphinx brick or other 'rails association crawlers'.
|
|
207
|
+
base.has_many :dynamic_attributes, :foreign_key => 'owner_id', :table_name => 'dyn_attributes', :class_name => 'DynAttribute'
|
|
203
208
|
base.after_save :save_dynamic_attributes
|
|
204
209
|
base.after_destroy :destroy_attributes
|
|
205
210
|
base.class_eval <<-END
|
data/lib/zena/use/html_tags.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'will_paginate'
|
|
2
|
-
require 'uuidtools'
|
|
3
2
|
|
|
4
3
|
module Zena
|
|
5
4
|
module Use
|
|
@@ -9,7 +8,7 @@ module Zena
|
|
|
9
8
|
# This is used by _crop.rhtml
|
|
10
9
|
def crop_formats(obj)
|
|
11
10
|
buttons = ['jpg', 'png']
|
|
12
|
-
ext = TYPE_TO_EXT[obj.c_conten_type]
|
|
11
|
+
ext = Zena::TYPE_TO_EXT[obj.c_conten_type]
|
|
13
12
|
ext = ext ? ext[0] : obj.c_ext
|
|
14
13
|
buttons << ext unless buttons.include?(ext)
|
|
15
14
|
buttons.map do |e|
|
|
@@ -198,8 +197,8 @@ module Zena
|
|
|
198
197
|
|
|
199
198
|
# date_box seizure setup
|
|
200
199
|
def uses_datebox(opt={})
|
|
201
|
-
if ZENA_CALENDAR_LANGS.include?(lang)
|
|
202
|
-
l = lang
|
|
200
|
+
if ZENA_CALENDAR_LANGS.include?(visitor.lang)
|
|
201
|
+
l = visitor.lang
|
|
203
202
|
else
|
|
204
203
|
l = visitor.site[:default_lang]
|
|
205
204
|
end
|
|
@@ -227,23 +226,6 @@ module Zena
|
|
|
227
226
|
@form_skins ||= secure!(Skin) { Skin.find(:all, :order=>'name ASC') }.map {|r| r[:name]}
|
|
228
227
|
end
|
|
229
228
|
|
|
230
|
-
|
|
231
|
-
def upload_form_tag(url_opts, html_opts = {})
|
|
232
|
-
@uuid = UUIDTools::UUID.random_create.to_s.gsub('-','')
|
|
233
|
-
html_opts.reverse_merge!(:multipart => true, :id => "UploadForm#{@uuid}")
|
|
234
|
-
if html_opts[:multipart]
|
|
235
|
-
html_opts[:onsubmit] = "submitUploadForm('#{html_opts[:id]}', '#{@uuid}');"
|
|
236
|
-
url_opts[UPLOAD_KEY] = @uuid
|
|
237
|
-
end
|
|
238
|
-
if block_given?
|
|
239
|
-
form_tag( url_opts, html_opts ) do |f|
|
|
240
|
-
yield(f)
|
|
241
|
-
end
|
|
242
|
-
else
|
|
243
|
-
form_tag( url_opts, html_opts )
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
|
|
247
229
|
# Date selection tool
|
|
248
230
|
def date_box(obj, var, opts = {})
|
|
249
231
|
rnd_id = rand(100000000000)
|
|
@@ -281,9 +263,10 @@ module Zena
|
|
|
281
263
|
end
|
|
282
264
|
|
|
283
265
|
count = secure_write(Node) { Node.count(:all, :conditions => ['kpath LIKE ?', "#{kpath}%"]) }
|
|
284
|
-
if count
|
|
285
|
-
|
|
286
|
-
|
|
266
|
+
if count == 0
|
|
267
|
+
return select(obj, sym, [], {:include_blank => opt[:include_blank]})
|
|
268
|
+
elsif count < 30
|
|
269
|
+
values = secure_write(Node) { Node.all(:order=>:name, :conditions=>["kpath LIKE ?", "#{kpath}%"]) }.map do |record|
|
|
287
270
|
[record['name'], record['zip']]
|
|
288
271
|
end
|
|
289
272
|
return select(obj, sym, values, { :include_blank => opt[:include_blank] })
|
|
@@ -389,13 +372,15 @@ module Zena
|
|
|
389
372
|
# Shows 'login' or 'logout' button.
|
|
390
373
|
def login_link(opts={})
|
|
391
374
|
if visitor.is_anon?
|
|
392
|
-
if params[:prefix]
|
|
393
|
-
|
|
394
|
-
else
|
|
395
|
-
|
|
396
|
-
end
|
|
375
|
+
# if params[:prefix]
|
|
376
|
+
# link_to _('login'), :overwrite_params => { :prefix => AUTHENTICATED_PREFIX }
|
|
377
|
+
# else
|
|
378
|
+
# "<a href='/login'>#{_('login')}</a>"
|
|
379
|
+
# end
|
|
380
|
+
link_to "login", login_url
|
|
397
381
|
else
|
|
398
|
-
"<a href='/logout'>#{_('logout')}</a>"
|
|
382
|
+
# "<a href='/logout'>#{_('logout')}</a>"
|
|
383
|
+
link_to "logout", logout_url
|
|
399
384
|
end
|
|
400
385
|
end
|
|
401
386
|
|
|
@@ -441,9 +426,6 @@ module Zena
|
|
|
441
426
|
when :sites
|
|
442
427
|
return '' unless visitor.is_admin?
|
|
443
428
|
link_to_with_state(_('manage sites'), sites_path)
|
|
444
|
-
when :zena_up
|
|
445
|
-
return '' unless ENABLE_ZENA_UP && visitor.is_admin?
|
|
446
|
-
link_to_with_state(_('update zena'), zena_up_sites_path)
|
|
447
429
|
when :dev
|
|
448
430
|
return '' unless visitor.is_admin?
|
|
449
431
|
if @controller.session[:dev]
|
|
@@ -466,7 +448,7 @@ module Zena
|
|
|
466
448
|
end
|
|
467
449
|
res = []
|
|
468
450
|
visitor.site.lang_list.each do |l|
|
|
469
|
-
if l == lang
|
|
451
|
+
if l == visitor.lang
|
|
470
452
|
if opts[:wrap]
|
|
471
453
|
res << "<#{opts[:wrap]} class='on'>#{l}" + tag_out
|
|
472
454
|
else
|