zena 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. data/.gitignore +20 -0
  2. data/CREDITS +27 -0
  3. data/Capfile +3 -0
  4. data/DEVELOPERS +46 -0
  5. data/History.txt +15 -0
  6. data/MIT-LICENSE +19 -0
  7. data/Rakefile +44 -0
  8. data/TODO +24 -0
  9. data/TODO_ZENA_1_0 +23 -0
  10. data/app/controllers/application_controller.rb +3 -0
  11. data/app/controllers/documents_controller.rb +22 -56
  12. data/app/controllers/nodes_controller.rb +42 -27
  13. data/app/controllers/pings_controller.rb +19 -0
  14. data/app/controllers/relations_controller.rb +5 -1
  15. data/app/controllers/sites_controller.rb +1 -46
  16. data/app/controllers/user_sessions_controller.rb +47 -0
  17. data/app/controllers/users_controller.rb +1 -0
  18. data/app/controllers/versions_controller.rb +25 -7
  19. data/app/controllers/virtual_classes_controller.rb +1 -1
  20. data/app/helpers/application_helper.rb +1 -1
  21. data/app/models/comment.rb +2 -1
  22. data/app/models/contact_content.rb +2 -2
  23. data/app/models/data_entry.rb +5 -6
  24. data/app/models/document.rb +14 -10
  25. data/app/models/document_content.rb +4 -6
  26. data/app/models/iformat.rb +2 -2
  27. data/app/models/image_content.rb +6 -9
  28. data/app/models/node.rb +106 -164
  29. data/app/models/page.rb +0 -20
  30. data/app/models/site.rb +42 -12
  31. data/app/models/template.rb +3 -8
  32. data/app/models/template_content.rb +2 -0
  33. data/app/models/text_document.rb +13 -8
  34. data/app/models/user.rb +47 -100
  35. data/app/models/user_session.rb +4 -0
  36. data/app/models/version.rb +1 -1
  37. data/app/views/comments/create.rjs +3 -3
  38. data/app/views/comments/edit.rjs +1 -1
  39. data/app/views/comments/update.rjs +1 -1
  40. data/app/views/nodes/_import_results.rhtml +1 -1
  41. data/app/views/nodes/create.rjs +3 -3
  42. data/app/views/templates/document_create_tabs/_file.rhtml +1 -2
  43. data/app/views/templates/document_create_tabs/_import.rhtml +7 -2
  44. data/app/views/templates/edit_tabs/_document.rhtml +1 -3
  45. data/app/views/templates/edit_tabs/_image.rhtml +1 -3
  46. data/app/views/versions/_tr.rhtml +1 -1
  47. data/app/views/versions/edit.rhtml +2 -26
  48. data/bin/zena +6 -1
  49. data/bricks/delayed_job/README +18 -0
  50. data/bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb +19 -0
  51. data/bricks/delayed_job/misc/init.rb +8 -0
  52. data/bricks/delayed_job/misc/tasks.rb +2 -0
  53. data/bricks/math/patch/application_helper.rb +1 -1
  54. data/bricks/sphinx/MIT-LICENSE +19 -0
  55. data/bricks/sphinx/README +19 -0
  56. data/bricks/sphinx/lib/use_sphinx.rb +78 -0
  57. data/bricks/sphinx/migrate/20091102171258_add_delta_for_sphinx.rb +9 -0
  58. data/bricks/sphinx/misc/deploy.rb +20 -0
  59. data/bricks/sphinx/misc/sphinx.yml +12 -0
  60. data/bricks/sphinx/misc/tasks.rb +21 -0
  61. data/bricks/sphinx/patch/node.rb +8 -0
  62. data/bricks/tags/lib/has_tags.rb +5 -3
  63. data/bricks/tags/test/zafu/tags.yml +13 -1
  64. data/config/bricks.yml +35 -0
  65. data/config/deploy.rb +8 -1
  66. data/config/environment.rb +1 -1
  67. data/config/environments/production.rb +1 -1
  68. data/config/gems.yml +28 -5
  69. data/config/sphinx.yml +12 -0
  70. data/db/init/base/skins/default/Node-+popupLayout.zafu +1 -16
  71. data/db/migrate/20091026161708_add_persistence_token.rb +13 -0
  72. data/db/migrate/20091101184952_add_session_table.rb +16 -0
  73. data/db/migrate/20091123175137_add_single_access_token.rb +9 -0
  74. data/db/migrate/20091124161608_rebuild_fullpath.rb +11 -0
  75. data/db/schema.rb +21 -8
  76. data/doc/README_FOR_APP +24 -0
  77. data/doc/fixtures.graffle +19568 -0
  78. data/doc/fixtures.pdf +0 -0
  79. data/doc/template/LICENSE +184 -0
  80. data/doc/template/README +37 -0
  81. data/doc/template/allison.css +283 -0
  82. data/doc/template/allison.js +307 -0
  83. data/doc/template/allison.rb +260 -0
  84. data/doc/template/cache/BODY +588 -0
  85. data/doc/template/cache/CLASS_INDEX +4 -0
  86. data/doc/template/cache/CLASS_PAGE +1 -0
  87. data/doc/template/cache/FILE_INDEX +4 -0
  88. data/doc/template/cache/FILE_PAGE +1 -0
  89. data/doc/template/cache/FONTS +1 -0
  90. data/doc/template/cache/FR_INDEX_BODY +1 -0
  91. data/doc/template/cache/IMGPATH +1 -0
  92. data/doc/template/cache/INDEX +1 -0
  93. data/doc/template/cache/JAVASCRIPT +307 -0
  94. data/doc/template/cache/METHOD_INDEX +4 -0
  95. data/doc/template/cache/METHOD_LIST +1 -0
  96. data/doc/template/cache/SRC_PAGE +1 -0
  97. data/doc/template/cache/STYLE +283 -0
  98. data/doc/template/cache/URL +1 -0
  99. data/doc/zafu_changes.yml +29 -0
  100. data/lib/base_additions.rb +1 -1
  101. data/lib/bricks.rb +9 -0
  102. data/lib/bricks/loader.rb +86 -0
  103. data/lib/bricks/requirements_validation.rb +71 -0
  104. data/lib/tasks/zena.rake +42 -4
  105. data/lib/zafu/action.rb +285 -0
  106. data/lib/zafu/ajax.rb +93 -0
  107. data/lib/zafu/attributes.rb +117 -0
  108. data/lib/zafu/calendar.rb +159 -0
  109. data/lib/zafu/context.rb +330 -0
  110. data/lib/zafu/core/html.rb +102 -0
  111. data/lib/zafu/core/move_to_parser.rb +167 -0
  112. data/lib/zafu/dates.rb +58 -0
  113. data/lib/zafu/display.rb +502 -0
  114. data/lib/zafu/eval.rb +66 -0
  115. data/lib/zafu/experimental.rb +66 -0
  116. data/lib/zafu/i18n.rb +64 -0
  117. data/lib/zafu/meta.rb +25 -0
  118. data/lib/zafu/refactor.rb +73 -0
  119. data/lib/zafu/support/context.rb +265 -0
  120. data/lib/zafu/support/dom.rb +145 -0
  121. data/lib/zafu/support/erb.rb +62 -0
  122. data/lib/zafu/support/flow.rb +401 -0
  123. data/lib/zafu/support/forms.rb +461 -0
  124. data/lib/zafu/support/links.rb +306 -0
  125. data/lib/zafu_parser.rb +26 -2
  126. data/lib/zena.rb +34 -15
  127. data/lib/zena/acts/multiversion.rb +2 -2
  128. data/lib/zena/acts/secure.rb +41 -30
  129. data/lib/zena/app.rb +7 -10
  130. data/lib/zena/controller/test_case.rb +12 -7
  131. data/lib/zena/crypto_provider/initial.rb +15 -0
  132. data/lib/zena/db.rb +6 -1
  133. data/lib/zena/deploy.rb +34 -6
  134. data/lib/zena/deploy/logrotate_app.rhtml +9 -0
  135. data/lib/zena/deploy/logrotate_host.rhtml +34 -0
  136. data/lib/zena/deploy/template.rb +1 -9
  137. data/lib/zena/foxy_parser.rb +1 -1
  138. data/lib/zena/info.rb +3 -1
  139. data/lib/zena/migrator.rb +1 -1
  140. data/lib/zena/parser.rb +12 -4
  141. data/lib/zena/parser/zazen_rules.rb +6 -6
  142. data/lib/zena/parser/zena_rules.rb +1 -7
  143. data/lib/zena/routes.rb +5 -5
  144. data/lib/zena/test_controller.rb +7 -2
  145. data/lib/zena/unit/test_case.rb +6 -8
  146. data/lib/zena/use/ajax.rb +10 -10
  147. data/lib/zena/use/authlogic.rb +93 -0
  148. data/lib/zena/use/dyn_attributes.rb +5 -0
  149. data/lib/zena/use/html_tags.rb +16 -34
  150. data/lib/zena/use/i18n.rb +4 -1
  151. data/lib/zena/use/node_query_finders.rb +8 -4
  152. data/lib/zena/use/refactor.rb +8 -20
  153. data/lib/zena/use/relations.rb +1 -0
  154. data/lib/zena/use/rendering.rb +4 -2
  155. data/lib/zena/use/search.rb +52 -0
  156. data/lib/zena/use/test_helper.rb +27 -28
  157. data/lib/zena/use/upload.rb +188 -0
  158. data/lib/zena/use/urls.rb +16 -14
  159. data/lib/zena/use/zafu.rb +16 -63
  160. data/lib/zena/use/zazen.rb +8 -8
  161. data/lib/zena/view/test_case.rb +8 -4
  162. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  163. data/locale/en/zena.po +3 -3
  164. data/public/.htaccess +40 -0
  165. data/public/javascripts/upload-progress.js +17 -8
  166. data/public/javascripts/zena.js +8 -2
  167. data/public/stylesheets/popup.css +1 -0
  168. data/script/about +3 -0
  169. data/script/apache_logging +25 -0
  170. data/script/breakpointer +3 -0
  171. data/script/console +3 -0
  172. data/script/dbconsole +3 -0
  173. data/script/destroy +3 -0
  174. data/script/generate +3 -0
  175. data/script/performance/benchmarker +3 -0
  176. data/script/performance/profiler +3 -0
  177. data/script/plugin +3 -0
  178. data/script/process/inspector +3 -0
  179. data/script/process/reaper +3 -0
  180. data/script/process/spawner +3 -0
  181. data/script/runner +3 -0
  182. data/script/server +3 -0
  183. data/script/set_revision +29 -0
  184. data/spec/controllers/versions_controller_spec.rb +11 -0
  185. data/test/fixtures/files/Node-test.zafu +1 -1
  186. data/test/functional/nodes_controller_test.rb +25 -0
  187. data/test/functional/pings_controller_test.rb +8 -0
  188. data/test/functional/user_sessions_controller_test.rb +59 -0
  189. data/test/functional/users_controller_test.rb +81 -19
  190. data/test/helpers/node_query/filters.yml +5 -0
  191. data/test/helpers/node_query_test.rb +3 -3
  192. data/test/integration/multiple_hosts_test.rb +1 -1
  193. data/test/integration/navigation_test.rb +1 -1
  194. data/test/sites/complex/users.yml +1 -1
  195. data/test/sites/ocean/users.yml +3 -3
  196. data/test/sites/zena/users.yml +5 -4
  197. data/test/test_zena.rb +38 -38
  198. data/test/unit/cached_page_test.rb +2 -2
  199. data/test/unit/comment_test.rb +0 -1
  200. data/test/unit/document_test.rb +23 -11
  201. data/test/unit/helpers/ping_helper_test.rb +4 -0
  202. data/test/unit/multiversion_test.rb +24 -16
  203. data/test/unit/node_test.rb +32 -93
  204. data/test/unit/note_test.rb +9 -0
  205. data/test/unit/page_test.rb +2 -2
  206. data/test/unit/secure_test.rb +2 -12
  207. data/test/unit/site_test.rb +43 -24
  208. data/test/unit/template_test.rb +45 -3
  209. data/test/unit/text_document_test.rb +4 -3
  210. data/test/unit/user_test.rb +13 -33
  211. data/test/unit/zena/db_test.rb +8 -0
  212. data/test/unit/zena/parser/zazen.yml +4 -4
  213. data/test/unit/zena/use/dates_view_methods_test.rb +2 -1
  214. data/test/unit/zena/use/html_tags_test.rb +12 -4
  215. data/test/unit/zena/use/refactor_test.rb +4 -3
  216. data/test/unit/zena/use/rendering_test.rb +1 -0
  217. data/test/unit/zena/use/upload_test.rb +76 -0
  218. data/test/unit/zena/use/urls_test.rb +4 -0
  219. data/test/unit/zena/use/zafu_test.rb +8 -0
  220. data/test/unit/zena/workflow/status_version_test.rb +6 -0
  221. data/test/unit/zena/zena_tags/ajax.yml +4 -4
  222. data/test/unit/zena/zena_tags/basic.yml +21 -10
  223. data/test/unit/zena/zena_tags/relations.yml +0 -6
  224. data/test/unit/zena/zena_tags/rubyless.yml +35 -0
  225. data/test/unit/zena/zena_tags/zazen.yml +4 -4
  226. data/test/unit/zena/zena_tags_test.rb +36 -4
  227. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +1 -1
  228. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +2 -3
  229. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  230. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +102 -58
  231. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  232. data/vendor/TextMate/Zena.tmbundle/info.plist +2 -0
  233. data/zena.gemspec +2085 -0
  234. metadata +265 -90
  235. data/app/controllers/sessions_controller.rb +0 -41
  236. data/app/views/sites/zena_up.html.erb +0 -11
  237. data/config/database.yml +0 -40
  238. data/db/production.sqlite3 +0 -0
  239. data/lib/bricks/patcher.rb +0 -68
  240. data/lib/zena/parser/zena_tags.rb +0 -3562
  241. data/lib/zena/use/authentification.rb +0 -120
  242. data/public/images/ext/contact_pv.png +0 -0
  243. data/public/images/ext/other_pv.png +0 -0
  244. data/public/images/ext/page_pv.png +0 -0
  245. data/public/images/ext/page_tiny.png +0 -0
  246. data/public/images/ext/pdf_pv.png +0 -0
  247. data/public/images/ext/post_pv.png +0 -0
  248. data/public/images/ext/post_tiny.png +0 -0
  249. data/public/images/ext/project_pv.png +0 -0
  250. data/public/images/ext/project_tiny.png +0 -0
  251. data/public/images/ext/tag_pv.png +0 -0
  252. data/public/images/ext/zip_pv.png +0 -0
  253. data/tasks/ann.rake +0 -80
  254. data/tasks/bones.rake +0 -20
  255. data/tasks/gem.rake +0 -201
  256. data/tasks/git.rake +0 -40
  257. data/tasks/notes.rake +0 -27
  258. data/tasks/post_load.rake +0 -34
  259. data/tasks/rdoc.rake +0 -51
  260. data/tasks/rubyforge.rake +0 -55
  261. data/tasks/setup.rb +0 -292
  262. data/tasks/spec.rake +0 -54
  263. data/tasks/svn.rake +0 -47
  264. data/tasks/test.rake +0 -40
  265. data/tasks/zentest.rake +0 -36
  266. data/test/fixtures/comments.yml +0 -126
  267. data/test/fixtures/contact_contents.yml +0 -132
  268. data/test/fixtures/data_entries.yml +0 -65
  269. data/test/fixtures/discussions.yml +0 -48
  270. data/test/fixtures/document_contents.yml +0 -108
  271. data/test/fixtures/dyn_attributes.yml +0 -66
  272. data/test/fixtures/groups.yml +0 -86
  273. data/test/fixtures/groups_users.yml +0 -81
  274. data/test/fixtures/iformats.yml +0 -29
  275. data/test/fixtures/links.yml +0 -313
  276. data/test/fixtures/nodes.yml +0 -2592
  277. data/test/fixtures/relations.yml +0 -126
  278. data/test/fixtures/sites.yml +0 -58
  279. data/test/fixtures/template_contents.yml +0 -172
  280. data/test/fixtures/users.yml +0 -167
  281. data/test/fixtures/versions.yml +0 -1911
  282. data/test/fixtures/virtual_classes.yml +0 -87
  283. data/test/fixtures/zips.yml +0 -15
  284. data/test/functional/sessions_controller_test.rb +0 -73
@@ -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::Patcher.foreach_brick do |brick_path|
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
@@ -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.15.2'
12
+ VERSION = '0.16.0'
11
13
  REVISION = 1336
12
14
  ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
13
15
  end
@@ -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 = 'zena' # use NULL so that rails migrations work the same
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
@@ -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
- if self.respond_to?("r_#{@method}".to_sym)
151
- res = self.do_method("r_#{@method}".to_sym)
150
+
151
+ if respond_to?("r_#{@method}".to_sym)
152
+ res = do_method("r_#{@method}".to_sym)
152
153
  else
153
- res = self.do_method(:r_unknown)
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 has of all descendants. Find a specific descendant with descendant['form'] for example.
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, sharp = $1, $2
191
- sharp = 'true' if sharp == ''
190
+ id, anchor = $1, $2
191
+ anchor = 'true' if anchor == ''
192
192
  end
193
- store @helper.make_link(:title=>title,:id=>id,:sharp=>sharp)
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, sharp = $1, $2
213
- sharp = 'true' if sharp == ''
212
+ id, anchor = $1, $2
213
+ anchor = 'true' if anchor == ''
214
214
  end
215
- store @helper.make_link(:title=>title,:id=>id,:sharp=>sharp,:node=>node)
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
@@ -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 => 'sessions', :action => 'new', :requirements => { :method => :get }
7
- logout 'logout', :controller => 'sessions', :action => 'destroy'
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, :file_form => :get },
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 },
@@ -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
- before_filter :set_context
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
- @visitor = User.make_visitor(:id => params[:user_id], :host => request.host)
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)
@@ -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
- def self.helper_attr(*args)
9
- # Ignore since we include helpers in the TestCase itself
10
- end
9
+ setup :activate_authlogic
11
10
 
12
11
  def setup
13
- login(:anon, 'zena')
12
+ #log anonymously by default
13
+ login(:anon)
14
14
  end
15
15
 
16
- def err(obj)
17
- obj.errors.each_error do |er,msg|
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
@@ -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 => fullpath_from_template_url + "_form.erb"
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 => fullpath_from_template_url + "_form.erb"
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 => fullpath_from_template_url(params[:u_url]) + ".erb"
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 => fullpath_from_template_url + ".erb"
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 => fullpath_from_template_url + "_form.erb"
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 => fullpath_from_template_url + ".erb"
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 => fullpath_from_template_url + "_form.erb"
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 => fullpath_from_template_url + ".erb"
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 => fullpath_from_template_url + ".erb"
108
+ page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
109
109
  else
110
- page.replace params[:dom_id], :file => fullpath_from_template_url + ".erb"
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
@@ -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 < 30
285
- sql = "SELECT zip, name FROM nodes WHERE kpath LIKE '#{kpath}%' AND #{secure_write_scope} ORDER BY name ASC"
286
- values = Node.connection.select_all(sql, "Node Load").map do |record|
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
- link_to _('login'), :overwrite_params => { :prefix => AUTHENTICATED_PREFIX }
394
- else
395
- "<a href='/login'>#{_('login')}</a>"
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