zena 0.15.2 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|