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.
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