Pimki 1.6.092 → 1.7.092

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/README-PIMKI +13 -4
  2. data/app/controllers/wiki.rb +157 -62
  3. data/app/models/chunks/acronym.rb +19 -0
  4. data/app/models/chunks/category.rb +4 -2
  5. data/app/models/chunks/todo.rb +0 -1
  6. data/app/models/chunks/wiki.rb +19 -5
  7. data/app/models/revision.rb +2 -0
  8. data/app/models/web.rb +38 -38
  9. data/app/models/web_test.rb +1 -1
  10. data/app/models/wiki_service.rb +8 -7
  11. data/app/models/wiki_words.rb +3 -2
  12. data/app/models/wiki_words_test.rb +10 -0
  13. data/app/views/error.rhtml +4 -2
  14. data/app/views/menu.rhtml +1 -5
  15. data/app/views/navigation.rhtml +6 -6
  16. data/app/views/static_style_sheet.rhtml +25 -5
  17. data/app/views/textile_help.rhtml +1 -1
  18. data/app/views/top.rhtml +59 -57
  19. data/app/views/wiki/adv_search.rhtml +2 -2
  20. data/app/views/wiki/authors.rhtml +1 -1
  21. data/app/views/wiki/bliki.rhtml +7 -5
  22. data/app/views/wiki/bliki_edit.rhtml +2 -1
  23. data/app/views/wiki/bliki_new.rhtml +2 -1
  24. data/app/views/wiki/bliki_revision.rhtml +12 -19
  25. data/app/views/wiki/edit.rhtml +4 -4
  26. data/app/views/wiki/edit_menu.rhtml +2 -1
  27. data/app/views/wiki/edit_web.rhtml +83 -21
  28. data/app/views/wiki/export.rhtml +7 -0
  29. data/app/views/wiki/feeds.rhtml +7 -3
  30. data/app/views/wiki/glossary.rhtml +27 -0
  31. data/app/views/wiki/list.rhtml +5 -1
  32. data/app/views/wiki/login.rhtml +1 -0
  33. data/app/views/wiki/mind.rhtml +14 -2
  34. data/app/views/wiki/new_system.rhtml +3 -3
  35. data/app/views/wiki/new_web.rhtml +5 -1
  36. data/app/views/wiki/page.rhtml +1 -8
  37. data/app/views/wiki/published.rhtml +38 -0
  38. data/app/views/wiki/recently_revised.rhtml +6 -0
  39. data/app/views/wiki/rss_feed.rhtml +46 -0
  40. data/app/views/wiki/test.rhtml +25 -0
  41. data/app/views/wiki/todo.rhtml +5 -2
  42. data/app/views/wiki/web_list.rhtml +5 -1
  43. data/libraries/secure_web_controller_server.rb +106 -0
  44. data/pimki.rb +11 -7
  45. metadata +11 -4
@@ -31,12 +31,15 @@ Pimki added features:
31
31
  * Bliki: a blog integrated with the wiki. Blog entries are simply wiki-pages in
32
32
  a special space. Can link from an entry to wiki pages via PageName or [[page name]]
33
33
  and from pages to Bliki entries via [bliki[page name]].
34
+ * c2 Wiki links, via [c2[PageName]]. If you run multiple webs within Pimki, you
35
+ can now link between them using [web_address[PageName]].
34
36
  * Todo Items & List:
35
37
  * 'todo:' items are highlighted on each page.
36
38
  * Added a capacity to pull and list todo items from all pages.
37
39
  * On main list, items are highlighted according to date (if there is one).
38
40
  * Added capacity to (persistently :) delete/rename pages through the 'All Pages'
39
41
  list.
42
+ * Lots of web customization and administration options through the edit_web template.
40
43
  * Added left-side menu. Content options are:
41
44
  * Only pages that reference other pages (default)
42
45
  * Only pages that belong to a specific category
@@ -45,6 +48,7 @@ Pimki added features:
45
48
  * All pages: recently visited
46
49
  * All pages: most often visited
47
50
  * User definable wiki-text
51
+ * Added Glossary function: shows all acronyms defined in the web
48
52
  * Expanded Search:
49
53
  * Search also tries to match the page names (not just contents).
50
54
  * Now showing part of sentance around match in search-results page
@@ -63,11 +67,16 @@ Pimki added features:
63
67
  Command-line options:
64
68
  Run "ruby pimki.rb --help"
65
69
 
66
- Please note also that RedCloth (http://redcloth.rubyforge.org) is set to
67
- version 2.0.11 by default. Version 3.0.1 is a bit experimental. You can select
68
- which version of redcloth via --redcloth command line argument.
69
-
70
70
  History:
71
+
72
+ 1.7.092 New features
73
+ - Better control on multiple webs, including web administration and links between webs via [web_address[PageName]]
74
+ - Added Glossary function: shows all acronyms defined in the web
75
+ - Better export in anticipation of Pimki2
76
+ - Moved things back to the nav-bar
77
+ - Even more and better things at the web setup (edit_web) template
78
+ - Lots of bug fixes
79
+
71
80
  1.6.092 Mainly bug fixes with some minor enhancements
72
81
  - Squashed horrible restart bug
73
82
  - Several bug fixes
@@ -4,17 +4,27 @@ require "redcloth_for_tex"
4
4
  RenderedTodo = Struct.new( :text, :context, :due_date )
5
5
 
6
6
  class WikiController < ActionControllerServlet
7
- EXPORT_DIRECTORY = WikiService.storage_path unless const_defined?("EXPORT_DIRECTORY")
7
+ EXPORT_DIRECTORY = WikiService.storage_path
8
8
 
9
9
  def index
10
10
  if web_address
11
- redirect_show "HomePage"
11
+ check_external_req_and_redirect web
12
12
  elsif !wiki.setup?
13
13
  redirect_path "/new_system/"
14
14
  elsif wiki.webs.length == 1
15
- redirect_show "HomePage", wiki.webs.values.first.address
15
+ check_external_req_and_redirect wiki.webs.values.first
16
16
  else
17
- redirect_path "/web_list/"
17
+ wiki.default_web ?
18
+ check_external_req_and_redirect(wiki.webs[wiki.default_web]) :
19
+ redirect_path("/web_list/")
20
+ end
21
+ end
22
+
23
+ def check_external_req_and_redirect web
24
+ if web.default_to_published and @req.addr[2] != @req.peeraddr[2]
25
+ redirect_action("published/", web.address)
26
+ else
27
+ redirect_show("HomePage", web.address)
18
28
  end
19
29
  end
20
30
 
@@ -166,8 +176,28 @@ class WikiController < ActionControllerServlet
166
176
  redirect_path("/#{web_address}/bliki_revision/#{@bliki_results.first.name}?rev=#{@bliki_results.first.revisions.size-1}") if @results.length == 0 && @bliki_results.length == 1
167
177
  render_action "search"
168
178
  end
169
-
179
+
180
+ def glossary
181
+ set_menu_pages
182
+
183
+ rex = %r{([A-Z\d]+)\(([\w\s]+)\)}
184
+ scan_results = web.select.map { |page| [page.link, page.content.scan(rex)] }
185
+ scan_results += web.bliki.values.map { |entry| [link_to_bliki(entry), entry.content.scan(rex)] }
186
+ results = Hash.new { Array.new }
187
+ scan_results.each { |page, acronyms| acronyms.each { |ac| results[ac] += [page] } }
188
+ @results = results.map{ |(ac, df), pg|[[ac,df], pg.uniq] }.sort_by{ |(ac, df), pg| ac }
189
+
190
+ acronyms = @results.map { |(ac, df), pg| ac }
191
+ rex = %r{(#{acronyms.join('|')})[^\(]}
192
+ results = web.select.map { |page| [page.link, page.content.scan(rex)] }
193
+ results += web.bliki.values.map { |entry| [link_to_bliki(entry), entry.content.scan(rex)] }
194
+ @undefined_on = Hash.new { Array.new }
195
+ results.each { |page, acronyms| acronyms.each { |ac| @undefined_on[ac[0]] += [page] } }
196
+ @undefined_on = @undefined_on.inject({}) { |hsh, (k, v)| hsh[k] = v.uniq; hsh }
197
+ end
198
+
170
199
  def authors
200
+ set_menu_pages
171
201
  @authors = web.select.authors
172
202
  end
173
203
 
@@ -178,7 +208,7 @@ class WikiController < ActionControllerServlet
178
208
  end
179
209
 
180
210
  def rss_with_content
181
- @pages_by_revision = web.select.by_revision.first(15)
211
+ @pages_by_revision = @rss_bliki_only ? [] : web.select.by_revision.first(15)
182
212
  @bliki_entries = web.bliki_entries_by_date
183
213
  @uri = @req.request_uri
184
214
  host = @req.meta_vars["HTTP_X_FORWARDED_HOST"] || "#{@uri.host}:#{@uri.port.to_s}"
@@ -191,7 +221,22 @@ class WikiController < ActionControllerServlet
191
221
  @hide_description = true
192
222
  rss_with_content
193
223
  end
194
-
224
+
225
+ def rss_bliki_only
226
+ @rss_bliki_only = true
227
+ rss_with_content
228
+ end
229
+
230
+ def rss_todo_items
231
+ todo
232
+ @display_todo = true
233
+ rss_with_content
234
+ end
235
+
236
+ def feeds
237
+ set_menu_pages
238
+ end
239
+
195
240
  def list
196
241
  parse_category
197
242
  set_menu_pages
@@ -200,16 +245,16 @@ class WikiController < ActionControllerServlet
200
245
  @pages_that_are_orphaned = @pages_in_category.orphaned_pages
201
246
 
202
247
  if @req.query['Action']
203
- redirect_action 'list/' if web.check_pass_on_edit and not authenticate
248
+ # redirect_action 'list/' if web.check_pass_on_edit and not password_check(@params['password'])
204
249
 
205
250
  case @req.query['Action']
206
251
  when 'Delete' # Handle page deletion
207
252
  wiki.delete_page(web_address, @req.query['del_sel_page_name'])
208
253
  redirect_action "list/"
209
-
254
+
210
255
  when 'Create' # Handle page creation
211
256
  redirect_show @req.query['newpage']
212
-
257
+
213
258
  when 'Rename' # Handle page rename
214
259
  wiki.rename_page(web_address, @req.query['ren_sel_page_name'], @req.query['newpage'])
215
260
  redirect_action "list/"
@@ -218,9 +263,13 @@ class WikiController < ActionControllerServlet
218
263
 
219
264
  end
220
265
 
266
+ def export
267
+ set_menu_pages
268
+ end
269
+
221
270
  def export_html
222
271
  file_name = "#{web.address}-html-#{web.revised_on.strftime("%Y-%m-%d-%H-%M")}.zip"
223
- file_path = EXPORT_DIRECTORY + file_name
272
+ file_path = File.join EXPORT_DIRECTORY, file_name
224
273
 
225
274
  export_pages_to_zip_file(file_path) unless FileTest.exists?(file_path)
226
275
  send_export(file_name, file_path)
@@ -228,7 +277,7 @@ class WikiController < ActionControllerServlet
228
277
 
229
278
  def export_markup
230
279
  file_name = "#{web.address}-markup-#{web.revised_on.strftime("%Y-%m-%d-%H-%M")}.zip"
231
- file_path = EXPORT_DIRECTORY + file_name
280
+ file_path = File.join EXPORT_DIRECTORY, file_name
232
281
 
233
282
  export_markup_to_zip_file(file_path) unless FileTest.exists?(file_path)
234
283
  send_export(file_name, file_path)
@@ -236,7 +285,7 @@ class WikiController < ActionControllerServlet
236
285
 
237
286
  def export_pdf
238
287
  file_name = "#{web.address}-tex-#{web.revised_on.strftime('%Y-%m-%d-%H-%M')}"
239
- file_path = EXPORT_DIRECTORY + file_name
288
+ file_path = File.join EXPORT_DIRECTORY, file_name
240
289
 
241
290
  export_web_to_tex(file_path + ".tex") unless FileTest.exists?(file_path + ".tex")
242
291
  convert_tex_to_pdf(file_path + ".tex")
@@ -245,7 +294,7 @@ class WikiController < ActionControllerServlet
245
294
 
246
295
  def export_tex
247
296
  file_name = "#{web.address}-tex-#{web.revised_on.strftime('%Y-%m-%d-%H-%M')}.tex"
248
- file_path = EXPORT_DIRECTORY + file_name
297
+ file_path = File.join EXPORT_DIRECTORY, file_name
249
298
 
250
299
  export_web_to_tex(file_path) unless FileTest.exists?(file_path)
251
300
  send_export(file_name, file_path)
@@ -268,7 +317,8 @@ class WikiController < ActionControllerServlet
268
317
  @params["color"], @params["additional_style"],
269
318
  @params["safe_mode"] ? true : false,
270
319
  @params["password"].empty? ? nil : @params["password"],
271
- @params["published"] ? true : false,
320
+ @params["published"] ? true : false,
321
+ @params['default_to_published'] ? true : false,
272
322
  @params["brackets_only"] ? true : false,
273
323
  @params["count_pages"] ? true : false,
274
324
  @params['mind_map_size'],
@@ -276,6 +326,7 @@ class WikiController < ActionControllerServlet
276
326
  @params['links_map'],
277
327
  @params['snapshots_interval'],
278
328
  @params['enable_dclick_edit'],
329
+ @params['enable_menu'],
279
330
  @params['check_pass_on_edit'] == 'each_edit',
280
331
  @prog, @graph_type, @missing, @show_authors, @show_leaves, @selected_categories
281
332
  )
@@ -285,30 +336,34 @@ class WikiController < ActionControllerServlet
285
336
 
286
337
  def administrate
287
338
  @logger.info "Taking administrative action: #{@params['action']}"
288
- if wiki.authenticate(@params['system_password'])
289
- case @params['action']
290
- when 'Delete Orphan Pages'
291
- wiki.remove_orphaned_pages(web_address)
339
+ redirect_show 'HomePage' unless wiki.authenticate(@params['system_password'])
340
+ case @params['action']
341
+ when 'Delete Orphan Pages'
342
+ wiki.remove_orphaned_pages(web_address)
343
+
344
+ when 'Clear Render Cache'
345
+ clear_render_cache true
346
+
347
+ when 'Force Data Snapshot'
348
+ WikiService.take_snapshot
292
349
 
293
- when 'Clear Render Cache'
294
- clear_render_cache true
350
+ when 'Clean Storage'
351
+ WikiService.clean_old_snapshots
295
352
 
296
- when 'Force Data Snapshot'
297
- WikiService.take_snapshot
298
-
299
- when 'Clean Storage'
300
- WikiService.clean_old_snapshots
353
+ when 'Make This Web Default'
354
+ wiki.default_web = web_address
301
355
 
302
- end
303
- @message = 'Operation succeeded'
304
- redirect_action 'edit_web/'
305
- else
306
- redirect_show 'HomePage'
356
+ when 'Remove This Web'
357
+ wiki.webs.delete web_address
358
+ redirect_path '/'
359
+
307
360
  end
361
+ @message = 'Operation succeeded'
362
+ redirect_action 'edit_web/'
308
363
  end
309
364
 
310
365
  FAR_FUTURE = Date.new(4000,1,1).freeze
311
- TODO_RE = %r{<todo-tag context='(.*?)' due_date='(.*?)'><span class="todo"><strong>TODO(?:.*)?:</strong> (.*?)</span></todo-tag>}
366
+ TODO_RE = %r{<todo-tag context='(.*?)' due_date='(.*?)'><span class="todo"><strong>TODO(?:[^:]*)?:</strong> (.*?)</span></todo-tag>}
312
367
 
313
368
  def todo #{{{
314
369
  parse_category
@@ -441,14 +496,14 @@ class WikiController < ActionControllerServlet
441
496
  case @graph_type
442
497
  when 'normal'
443
498
  @pngFile, @mapFile = web.create_mind_map(@prog, @missing,
444
- @show_authors, @show_leaves, @selected_categories)
499
+ @show_authors, @show_leaves, @selected_categories, @mm_size)
445
500
 
446
501
  when 'author'
447
- @pngFile, @mapFile = web.create_author_graph(@prog, @selected_categories)
502
+ @pngFile, @mapFile = web.create_author_graph(@prog, @selected_categories, @mm_size)
448
503
 
449
504
  when 'category'
450
505
  @pngFile, @mapFile = web.create_category_graph(@prog,
451
- @show_authors, @selected_categories)
506
+ @show_authors, @selected_categories, @mm_size)
452
507
  end
453
508
  end #}}}
454
509
 
@@ -460,6 +515,7 @@ class WikiController < ActionControllerServlet
460
515
  @show_authors = web.mm_show_authors
461
516
  @show_leaves = web.mm_show_leaves
462
517
  @selected_categories = web.mm_selected_categories
518
+ @mm_size = web.mind_map_size
463
519
  else
464
520
  @prog = @req.query['draw_type'] || 'neato'
465
521
  @graph_type = @req.query['graph_type'] || 'normal'
@@ -469,6 +525,7 @@ class WikiController < ActionControllerServlet
469
525
 
470
526
  @selected_categories = parse_multi_select 'selected_categs'
471
527
  @selected_categories = [] if @selected_categories.include? 'all'
528
+ @mm_size = @params['mind_map_size'] || web.mind_map_size
472
529
  end
473
530
  end #}}}
474
531
 
@@ -487,6 +544,7 @@ class WikiController < ActionControllerServlet
487
544
  @menu_content = web.menu_content
488
545
  @list_limit = web.menu_limit
489
546
  @list_limit += 1 if @list_limit >= -1
547
+ @author = default_author
490
548
  end #}}}
491
549
 
492
550
  def save_menu #{{{
@@ -506,20 +564,7 @@ class WikiController < ActionControllerServlet
506
564
  wiki.save_menu_pref(web_address, type, limit, content, category, Author.new(author, remote_ip))
507
565
  end
508
566
 
509
- # redirect to the most recently viewed page, or the home page.
510
- if web_address
511
- pname = begin
512
- web.select{ true }.by_last_visited.first.name
513
- rescue
514
- "HomePage"
515
- end
516
- redirect_show pname
517
- elsif wiki.webs.length == 1
518
- # only one web, so go there.
519
- redirect_show "HomePage", wiki.webs.values.first.address
520
- else
521
- redirect_path "/web_list/"
522
- end
567
+ redirect_action 'edit_web/' # go back to web options page
523
568
  end #}}}
524
569
 
525
570
  def get_map_img
@@ -528,6 +573,11 @@ class WikiController < ActionControllerServlet
528
573
  send_export(file_name, file_path, "image/png")
529
574
  end
530
575
 
576
+ def adv_search
577
+ parse_category
578
+ set_menu_pages
579
+ end
580
+
531
581
  # Within a single page --------------------------------------------------------
532
582
 
533
583
  def show
@@ -571,7 +621,7 @@ class WikiController < ActionControllerServlet
571
621
  page = wiki.read_page(web_address, page_name)
572
622
  safe_page_name = page.name.gsub(/\W/, "")
573
623
  file_name = "#{safe_page_name}-#{web.address}-#{page.created_at.strftime("%Y-%m-%d-%H-%M")}"
574
- file_path = EXPORT_DIRECTORY + file_name
624
+ file_path = File.join EXPORT_DIRECTORY, file_name
575
625
 
576
626
  export_page_to_tex(file_path + ".tex") unless FileTest.exists?(file_path + ".tex")
577
627
  convert_tex_to_pdf(file_path + ".tex")
@@ -579,7 +629,7 @@ class WikiController < ActionControllerServlet
579
629
  end
580
630
 
581
631
  def new
582
- redirect_show("HomePage") if web.check_pass_on_edit and not authenticate
632
+ # redirect_show("HomePage") if web.check_pass_on_edit and not password_check(@params['password'])
583
633
  @page_name, @author = page_name, default_author
584
634
  end
585
635
 
@@ -602,10 +652,10 @@ class WikiController < ActionControllerServlet
602
652
  end
603
653
 
604
654
  def save
605
- if web.check_pass_on_edit and not authenticate
606
- wiki.read_page(web_address, page_name).unlock if web.pages[page_name]
607
- redirect_show("HomePage")
608
- end
655
+ # if web.check_pass_on_edit and not password_check(@params['password'])
656
+ # wiki.read_page(web_address, page_name).unlock if web.pages[page_name]
657
+ # redirect_show("HomePage")
658
+ # end
609
659
 
610
660
  if web.pages[page_name]
611
661
  page = wiki.revise_page(
@@ -626,12 +676,14 @@ class WikiController < ActionControllerServlet
626
676
  end
627
677
 
628
678
  def revision
679
+ redirect_show 'HomePage' if page_name.nil?
680
+ set_menu_pages
629
681
  @page = wiki.read_page(web_address, page_name)
630
682
  @revision = @page.revisions[@params["rev"].to_i]
631
683
  end
632
684
 
633
685
  def rollback
634
- redirect_show("HomePage") if web.check_pass_on_edit and not authenticate
686
+ # redirect_show("HomePage") if web.check_pass_on_edit and not password_check(@params['password'])
635
687
 
636
688
  @page = wiki.read_page(web_address, page_name)
637
689
  @revision = @page.revisions[@params["rev"].to_i]
@@ -640,14 +692,14 @@ class WikiController < ActionControllerServlet
640
692
  # Bliki ----------------------------------------------------------------------
641
693
 
642
694
  def bliki_delete
643
- redirect_bliki if web.check_pass_on_edit and not authenticate
695
+ # redirect_bliki if web.check_pass_on_edit and not password_check(@params['password'])
644
696
 
645
697
  wiki.delete_bliki_entry(web_address, page_name)
646
698
  redirect_bliki
647
699
  end
648
700
 
649
701
  def bliki_edit
650
- redirect_bliki if web.check_pass_on_edit and not authenticate
702
+ # redirect_bliki if web.check_pass_on_edit and not password_check(@params['password'])
651
703
 
652
704
  @page = wiki.read_bliki_entry(web_address, page_name)
653
705
 
@@ -656,7 +708,8 @@ class WikiController < ActionControllerServlet
656
708
  @author = default_author
657
709
  render
658
710
  else
659
- redirect_path "#{web_address}/locked"
711
+ @bliki_entry = true
712
+ render "wiki/locked"
660
713
  end
661
714
  end
662
715
 
@@ -666,8 +719,13 @@ class WikiController < ActionControllerServlet
666
719
  redirect_bliki
667
720
  end
668
721
 
722
+ def bliki_new
723
+ @entry_name = @params['entry_name']
724
+ @author = default_author
725
+ end
726
+
669
727
  def bliki_save
670
- redirect_bliki if web.check_pass_on_edit and not authenticate
728
+ # redirect_bliki if web.check_pass_on_edit and not password_check(@params['password'])
671
729
 
672
730
  pname = page_name || @params["pagename"]
673
731
  if web.bliki[pname]
@@ -689,7 +747,7 @@ class WikiController < ActionControllerServlet
689
747
  end
690
748
 
691
749
  def rollback_bliki
692
- redirect_bliki if web.check_pass_on_edit and not authenticate
750
+ # redirect_bliki if web.check_pass_on_edit and not password_check(@params['password'])
693
751
 
694
752
  @page = wiki.read_bliki_entry(web_address, page_name)
695
753
  wiki.rollback_bliki_entry(web_address, page_name, @params["rev"].to_i, Time.now)
@@ -777,6 +835,21 @@ class WikiController < ActionControllerServlet
777
835
  zos.put_next_entry(@page.name + ".html")
778
836
  zos.puts(template_engine("print").result(binding))
779
837
  end
838
+
839
+ zos.put_next_entry "pages-metadata.txt"
840
+ web.select.by_name.each do |page|
841
+ zos.puts "#{page.name}: by #{page.author}, created on #{page.pretty_created_at}"
842
+ end
843
+
844
+ web.select_bliki.by_name.each do |@page|
845
+ zos.put_next_entry("bliki/#{@page.name}.html")
846
+ zos.puts(template_engine("print").result(binding))
847
+ end
848
+
849
+ zos.put_next_entry "bliki/bliki-metadata.txt"
850
+ web.select_bliki.by_name.each do |page|
851
+ zos.puts "#{page.name}: by #{page.author}, created on #{page.revisions.first.pretty_created_at}"
852
+ end
780
853
 
781
854
  zos.put_next_entry("index.html")
782
855
  zos.puts('<html><head><META HTTP-EQUIV="Refresh" CONTENT="0;URL=HomePage.html"></head></html>')
@@ -789,6 +862,21 @@ class WikiController < ActionControllerServlet
789
862
  zos.put_next_entry(page.name + ".#{web.markup}")
790
863
  zos.puts(page.content)
791
864
  end
865
+
866
+ zos.put_next_entry "pages-metadata.txt"
867
+ web.select.by_name.each do |page|
868
+ zos.puts "#{page.name}: by #{page.author}, created on #{page.pretty_created_at}"
869
+ end
870
+
871
+ web.select_bliki.by_name.each do |page|
872
+ zos.put_next_entry("bliki/#{page.name}.#{web.markup}")
873
+ zos.puts(page.content)
874
+ end
875
+
876
+ zos.put_next_entry "bliki/bliki-metadata.txt"
877
+ web.select_bliki.by_name.each do |page|
878
+ zos.puts "#{page.name}: by #{page.author}, created on #{page.revisions.first.pretty_created_at}"
879
+ end
792
880
  end
793
881
  end
794
882
 
@@ -799,10 +887,17 @@ class WikiController < ActionControllerServlet
799
887
  end
800
888
 
801
889
  def render_tex_web
802
- web.select.by_name.inject({}) do |tex_web, page|
890
+ pages = web.select.by_name.inject({}) do |tex_web, page|
803
891
  tex_web[page.name] = RedClothForTex.new(page.content).to_tex
804
892
  tex_web
805
893
  end
894
+
895
+ bliki_entries = web.select_bliki.by_name.inject({}) do |tex_web, page|
896
+ tex_web["bliki/#{page.name}"] = RedClothForTex.new(page.content).to_tex
897
+ tex_web
898
+ end
899
+
900
+ pages.update bliki_entries
806
901
  end
807
902
 
808
903
  def export_page_to_tex(file_path)