Wiki2Go 1.15.1 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/bin/DebugWiki2GoServer.rb +10 -0
  2. data/bin/{Wiki2Go_make_repository.rb → Wiki2Go_make_cvs_repository.rb} +1 -1
  3. data/lib/Web2Go/WebrickRequest.rb +1 -1
  4. data/lib/Web2Go/WebrickResponse.rb +3 -3
  5. data/lib/Wiki2Go/BlackList.rb +24 -11
  6. data/lib/Wiki2Go/DotGraphics.rb +45 -5
  7. data/lib/Wiki2Go/FileStorage.rb +8 -2
  8. data/lib/Wiki2Go/GreyList.rb +38 -22
  9. data/lib/Wiki2Go/Install/make_repository.rb +351 -36
  10. data/lib/Wiki2Go/Install/make_site.rb +17 -8
  11. data/lib/Wiki2Go/Install/site/ruby.css +18 -0
  12. data/lib/Wiki2Go/Install/templates/admin.htm +11 -0
  13. data/lib/Wiki2Go/Install/templates/admin_pages/commit_site.txt +21 -0
  14. data/lib/Wiki2Go/Install/templates/admin_pages/edit.txt +33 -0
  15. data/lib/Wiki2Go/Install/templates/admin_pages/editfiles.txt +33 -0
  16. data/lib/Wiki2Go/Install/templates/admin_pages/greylist.txt +19 -37
  17. data/lib/Wiki2Go/Install/templates/admin_pages/show_log.txt +21 -0
  18. data/lib/Wiki2Go/Install/templates/admin_pages/update_conflicts.txt +38 -0
  19. data/lib/Wiki2Go/Install/templates/admin_pages/update_site.txt +49 -0
  20. data/lib/Wiki2Go/Install/wiki/ruby.css +18 -0
  21. data/lib/Wiki2Go/LineFormatter.rb +504 -0
  22. data/lib/Wiki2Go/Page.rb +50 -18
  23. data/lib/Wiki2Go/PublicWikiConfig.rb +34 -11
  24. data/lib/Wiki2Go/Server.rb +13 -2
  25. data/lib/Wiki2Go/SpamFilter.rb +27 -8
  26. data/lib/Wiki2Go/SyntaxHighlighter.rb +41 -0
  27. data/lib/Wiki2Go/Web.rb +0 -3
  28. data/lib/Wiki2Go/WebrickServlet.rb +2 -0
  29. data/lib/Wiki2Go/Wiki2Go.rb +19 -8
  30. data/lib/Wiki2Go/Wiki2GoConfig.rb +125 -18
  31. data/lib/Wiki2Go/Wiki2GoServlet.rb +32 -21
  32. data/lib/Wiki2Go/WikiFormatter.rb +55 -468
  33. data/lib/Wiki2Go/cgi/secure/log_rss +21 -0
  34. data/test/All.rb +21 -0
  35. data/test/TestBlackList.rb +82 -0
  36. data/test/TestConfig.rb +205 -0
  37. data/test/TestDot.rb +109 -0
  38. data/test/TestFormatter.rb +491 -0
  39. data/test/TestInstall.rb +120 -0
  40. data/test/TestLineFormatter.rb +553 -0
  41. data/test/TestMail.rb +29 -0
  42. data/test/TestRSS.rb +183 -0
  43. data/test/TestRepositoryMaker.rb +101 -0
  44. data/test/TestServer.rb +65 -0
  45. data/test/TestSpamFilter.rb +130 -0
  46. data/test/TestStorage.rb +212 -0
  47. data/test/TestSyntaxHighlighter.rb +41 -0
  48. data/test/TestUnitTestFiles.rb +27 -0
  49. data/test/TestUrlFinder.rb +39 -0
  50. data/test/TestWeb.rb +197 -0
  51. data/test/TestWeb2Go.rb +90 -0
  52. data/test/TestWiki2Go.rb +184 -0
  53. data/test/TestWiki2GoServlet.rb +747 -0
  54. data/test/UnitTestFiles.rb +102 -0
  55. data/test/Wiki2GoConfigForTest.rb +93 -0
  56. data/test/checksite.rb +56 -0
  57. data/test/testdata/changes.txt +4 -0
  58. data/test/testdata/expected_changes.html +93 -0
  59. data/test/testdata/expected_edit.html +105 -0
  60. data/test/testdata/expected_full_rss.xml +29 -0
  61. data/test/testdata/expected_header_rss.xml +13 -0
  62. data/test/testdata/expected_out.html +97 -0
  63. data/test/testdata/expected_put.html +99 -0
  64. data/test/testdata/expected_save.html +66 -0
  65. data/test/testdata/expected_savehtml.html +66 -0
  66. data/test/testdata/expected_search.html +67 -0
  67. data/test/testdata/expected_upload.html +69 -0
  68. data/test/testdata/expected_versions.html +85 -0
  69. data/test/testdata/expected_view.html +97 -0
  70. data/test/testdata/site/html/Xpday/rss.xml +103 -0
  71. data/test/testdata/templates/Test/child.htm +2 -0
  72. data/test/testdata/templates/Test/grandchild.htm +1 -0
  73. data/test/testdata/templates/Test/master.htm +3 -0
  74. data/test/testdata/texts/Test/FrontPage.txt +7 -0
  75. data/test/testdata/texts/Test/NewPage.txt +3 -0
  76. data/test/testdata/texts/Test/Subdir/Subpage.txt +1 -0
  77. data/test/testdata/texts/Test/empty.txt +3 -0
  78. data/test/testdata/texts/Test/test.txt +3 -0
  79. data/test/testdata/texts/Xpday/FrontPage.txt +36 -0
  80. data/test/testdata/texts/Xpday/Page.txt +3 -0
  81. data/test/testdata/texts/Xpday/VersionedPage.log +14 -0
  82. data/test/testdata/texts/Xpday/VersionedPage.txt +3 -0
  83. data/test/testdata/texts/Xpday/empty.log +3482 -0
  84. data/test/testdata/texts/Xpday/empty.txt +4 -0
  85. data/test/testdata/texts/Xpday/test.log +9425 -0
  86. data/test/testdata/texts/Xpday/test.txt +5 -0
  87. data/test/testdata/texts/whitelist.txt +1 -0
  88. metadata +85 -5
  89. data/lib/Wiki2Go/Install/templates/admin_pages/update.txt +0 -13
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'tmpdir'
4
+ require 'fileutils'
5
+
6
+ module UnitTestFiles
7
+
8
+ def testdata(*path)
9
+ File.join(File.dirname(File.expand_path(__FILE__)),'testdata',*path)
10
+ end
11
+
12
+ def scratchdata(*path)
13
+ UnitTestFiles.scratchdata(path)
14
+ end
15
+
16
+ def UnitTestFiles.scratchdata(*path)
17
+ dir = File.join(Dir.tmpdir,'Wiki2Go','scratch',*path)
18
+ FileUtils.mkdir_p(File.dirname(dir),{ :mode => 0775})
19
+ dir
20
+ end
21
+
22
+ def UnitTestFiles.clean
23
+ dir = File.join(Dir.tmpdir,'Wiki2Go')
24
+ FileUtils.rm_r dir if File.exists?(dir)
25
+ end
26
+
27
+ def write_test_file(name,content)
28
+ begin
29
+ Dir.mkdir(scratchdata) unless FileTest.directory?(scratchdata)
30
+ rescue SystemCallError
31
+ end
32
+ File.open(name,File::CREAT|File::TRUNC|File::RDWR) do |file|
33
+ file.puts content
34
+ end
35
+ end
36
+
37
+ def assert_same_file(expected,name,replace=nil)
38
+ leftlines = contents_of(expected)
39
+ rightlines = contents_of(name)
40
+ assert_same_content(leftlines,rightlines,replace)
41
+ end
42
+
43
+ def assert_same_file_string(expected,name,result,replace=nil)
44
+ write_test_file(name,result)
45
+ assert_same_file(expected,name,replace)
46
+ end
47
+
48
+ def assert_same_content(leftlines,rightlines,replace=nil)
49
+ # assert_equal(leftlines.length,rightlines.length,"Files to compare have different length")
50
+ for i in 0...leftlines.length
51
+ left = leftlines[i]
52
+ right = rightlines[i]
53
+ if ! replace.nil? then
54
+ replace.each do |key,value |
55
+ left.gsub!(key,value)
56
+ end
57
+ end
58
+
59
+ assert_equal(left,right,"Line #{i} does not match")
60
+ end
61
+ end
62
+
63
+ def assert_same_strings(expected,actual,replace=nil)
64
+ assert_same_content(expected.split($/),actual.split($/),replace)
65
+ end
66
+
67
+ def assert_same_markup_strings(expected,actual,replace=nil)
68
+ expected = expected.split($/).collect {|line| line.strip }
69
+ actual = actual.split($/).collect {|line| line.strip }
70
+ assert_same_content(expected,actual,replace)
71
+ end
72
+
73
+ def assert_same_xml_string(expected,name,result,replace=nil)
74
+ return assert_same_file_string(expected,name,result,replace)
75
+ end
76
+
77
+ def assert_same_xml_string_with_changes(expected,expected_gen,name,result)
78
+ assert_same_xml_string(expected,name,result)
79
+ end
80
+
81
+ private
82
+ def next_line(f)
83
+ result = f.gets
84
+ while !result.nil? and result.strip!.length == 0 do
85
+ result = f.gets
86
+ end
87
+ return result
88
+ end
89
+
90
+ def contents_of(filename)
91
+ contents = []
92
+ File.open(filename) do |f|
93
+ contents = f.readlines
94
+ end
95
+ contents = contents.collect do |line|
96
+ line.strip!
97
+ (line.length > 0 ? line : nil)
98
+ end
99
+ return contents.compact
100
+ end
101
+
102
+ end
@@ -0,0 +1,93 @@
1
+
2
+ require 'Wiki2Go/FileStorage.rb'
3
+ require 'Wiki2Go/Wiki2GoConfig.rb'
4
+ require 'Wiki2Go/PrivateWikiConfig.rb'
5
+ require "UnitTestFiles"
6
+ require 'fileutils'
7
+
8
+ class TestWiki2GoConfig < Wiki2Go::Config
9
+
10
+ include UnitTestFiles
11
+
12
+ def initialize
13
+ super(scratchdata)
14
+ @generate_html = false
15
+ end
16
+
17
+ def redirect_url?(web,url)
18
+ url !~ /www\.xp\.be/
19
+ end
20
+
21
+ end
22
+
23
+ class TestDataWiki2GoConfig < Wiki2Go::Config
24
+
25
+ include UnitTestFiles
26
+
27
+ def initialize
28
+ super(testdata)
29
+ @generate_html = false
30
+ end
31
+
32
+ def redirect_url?(web,url)
33
+ url !~ /www\.xp\.be/
34
+ end
35
+
36
+ end
37
+
38
+ class PublicTestWiki2GoConfig < Wiki2Go::Config
39
+
40
+ include UnitTestFiles
41
+
42
+ def initialize
43
+ super(scratchdata)
44
+ @generate_html = false
45
+ end
46
+
47
+ def redirect_url?(web,url)
48
+ false
49
+ end
50
+
51
+ end
52
+
53
+ class PrivateTestWiki2GoConfig < PrivateWikiConfig
54
+
55
+ include UnitTestFiles
56
+
57
+ def initialize
58
+ super(scratchdata('testing'))
59
+ end
60
+
61
+ def cleanup
62
+ close
63
+ dir = scratchdata('testing')
64
+ FileUtils::rm_r dir,:force => true
65
+ end
66
+
67
+ end
68
+
69
+ class ScratchWikiConfig < Wiki2Go::Config
70
+
71
+ include UnitTestFiles
72
+
73
+ def initialize
74
+ super(scratchdata('testing'))
75
+ @generate_html = false
76
+ @redirect = false
77
+ end
78
+
79
+ def cleanup
80
+ close
81
+ dir = scratchdata('testing')
82
+ FileUtils::rm_r dir,:force => true
83
+ end
84
+
85
+ def redirect_url(doit)
86
+ @redirect = doit
87
+ end
88
+
89
+ def redirect_url?(web,url)
90
+ @redirect
91
+ end
92
+
93
+ end
data/test/checksite.rb ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $TIDYLIB='c:/tools/bin/tidylib.dll'
4
+ require 'rubygems'
5
+ require_gem 'tidy'
6
+
7
+ require 'webfetcher'
8
+
9
+ class WebTracker
10
+
11
+ HTTRACK= 'c:/program files/winhttrack/httrack.exe'
12
+
13
+ def WebTracker.track(url,destdir)
14
+ puts "TRacking #{url} -> #{destdir}"
15
+
16
+ command = "#{HTTRACK} -qiC2%P%q0s0b0u1j0N0I0%I0p3DaK0c3H0f2\#f -v -F \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\" -%l \"en, *\" http://#{url} -O #{destdir} -%A \"php3,php,php2,asp,jsp,pl,cfm=text/html\""
17
+ `#{command}`
18
+ end
19
+
20
+ def WebTracker.fetch(url,destdir)
21
+ site = WebFetcher::Page.url('http://' + url) { |page| print "." }
22
+ site.recurse.save(destdir, :notranslate, :overwrite )
23
+ end
24
+
25
+ def WebTracker.check(dest)
26
+ puts
27
+ Dir[dest + '/**/*.html'].each do |file|
28
+ puts file
29
+ File.open(file,"r") do |f|
30
+ content = f.read
31
+ Tidy.open do |tidy|
32
+ clean = tidy.clean(content)
33
+ display_errors (tidy.errors)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def WebTracker.display_errors(errors)
40
+ errors.each do |error|
41
+ if error !~ /<table> lacks "summary" attribute/ then
42
+ puts error
43
+ end
44
+ end
45
+ end
46
+
47
+ def WebTracker.get_and_check(url,dest)
48
+ WebTracker.fetch(url,dest)
49
+
50
+ # WebTracker.check(dest)
51
+
52
+ end
53
+ end
54
+
55
+
56
+ WebTracker.get_and_check('localhost:8081','c:/temp/checksitelocal')
@@ -0,0 +1,4 @@
1
+ FrontPage pvc 1063029260
2
+ RegistrationForm pvc 1063029264
3
+ FrontPage 91.26-136-217.adsl.skynet.be 1063113298
4
+ WikiWeb 91.26-136-217.adsl.skynet.be 1063113673
@@ -0,0 +1,93 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <HTML>
3
+ <HEAD>
4
+ <BASE href="http://localhost/">
5
+ <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6
+ <META http-equiv="Pragma" content="no-cache">
7
+ <META name="Author" content="Pascal Van Cauwenberghe, Vera Peeters, Willem van den Ende,Erik Groeneveld,Marc Evers, Peter Schrier">
8
+ <META name="Keywords" content="the netherlands,belgium,xp,extreme programming,xp day, conference">
9
+ <LINK rel="stylesheet" href="html/xpday.css" type="text/css">
10
+ <LINK rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="html/Xpday/rss.xml">
11
+ <TITLE>Xpday - Changes </TITLE>
12
+ </HEAD>
13
+ <BODY>
14
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
15
+ <TR>
16
+ <TD>
17
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%" class="Header">
18
+ <TR>
19
+ <TD><H1>Recent changes</H1></TD>
20
+ <td align="right"><A href="/view/Xpday/FrontPage"><img src="html/bexpnl.png" width="272" height="66" border="0" alt="XP Day Benelux" /></A></td>
21
+ </TR>
22
+ </TABLE>
23
+ <!-- Interesting bit start -->
24
+ <TABLE border="0" cellpadding="8" cellspacing="0" width="100%" class="Body">
25
+ <TR>
26
+ <TD width="100%">
27
+ <h3>Recent changes</h3>
28
+ <table class="recentchanges">
29
+
30
+ <tr class="even">
31
+ <td class="topic"><a href="view/Xpday/test">test</a></td>
32
+ <td class="author">unknown</td>
33
+ <td class="lastmodified">DATE</td>
34
+ </tr>
35
+
36
+ <tr class="odd">
37
+ <td class="topic"><a href="view/Xpday/empty">empty</a></td>
38
+ <td class="author">pvc</td>
39
+ <td class="lastmodified">DATE</td>
40
+ </tr>
41
+
42
+ </table>
43
+ </TD>
44
+ </TR>
45
+ </TABLE>
46
+ <!-- Interesting bit end -->
47
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%" class="Footer">
48
+ <TR>
49
+ <TD width="50%"><A href="/changes/Xpday">Recent Changes</A></TD>
50
+ <TD width="50%">&nbsp;</TD>
51
+ </TR>
52
+ <TR>
53
+ <TD width="50%">
54
+ <FORM action="/search/Xpday" method="post" id="form1" name="form1">
55
+ Search for: <INPUT name="text" size="30" ID="Text1">
56
+ </FORM>
57
+ </TD>
58
+ <TD width="50%">&nbsp;</TD>
59
+ </TR>
60
+ <TR>
61
+ <td><a href="html/Xpday/rss.xml"><img src="html/xml.gif" width="36" height="14" border="0" alt="Keep up to date"></a>
62
+ </td>
63
+ <TD align="right">Site administrator:
64
+ <script type="text/javascript">
65
+ //<![CDATA[
66
+ function hiveware_enkoder(){var i,j,x,y,x=
67
+ "x=\"{@%253{;@?_%25:%22:E@*><>.;n:P;s>%22A::;k8;;:=;E=d;*=?>@:;A;:=A;;?;;;l" +
68
+ "::;::;j>?;l;?=A>;;:;;<8;;>d>*;C:#;E:/;?>;;<>;;>;/;C>n=w;z?;;A?;;?=;;0;q@E;" +
69
+ "8?C;<>;>><>;;>q8D;%22>6;t<;;>=;;=>;>m;v>o;|9p;;=>;<?;;=<C?q;3AE;:>>;;:;>:=" +
70
+ ";;1;(A5;5>#>3?E;:?;;<?;=;;}>v;m>{;k:;;>>>;>;;>i>x>m;0A/;>?>;=<;;?>-;/;3:%2" +
71
+ "2;6>;;<=;;>>;>{;}>j;{:|;9@;;>:;9;;z;0>q=4;::;;?;;><;;:1;1:C;';#;*>C;r9E:m;" +
72
+ "~Ai;t;0;%22:6;k8p;i>z:I;|;0;8>1;1@C;%22?E8%22;6;{>}:j;{:|;z>0;9:1:C;#jE?/=" +
73
+ "/;C>n;w>zA0;qlE:8?C;q;D>%22<6;t:m?v;oj|>p=C>q;3;E:9>8>1n(?5:5;#:3;E>%22>6:" +
74
+ "{@}>jA{;|<z;0>q;49=l1;C8';njw;z>0;qAE;=>CAq;Dk%22?6>t>m;v;o?|@p:Cmq>3kE;9<" +
75
+ "8;1>(>5>5=#>3mE>%22>6;{;}>j9{?|?z<0>q@4;=?1;C@';#;Ej#>6A{:}?j;{8|;z>0jr;1l" +
76
+ "C;_%25:>;|<@;*>*;>:{A@?xjq?h9v;f?d;sAhA+:{j,;>li;r>u;+Al;@?3=>>lm?>{>1>o=h" +
77
+ ";q>j=w?k;>>l;.;.>,;~>m>@>{91?f8k>d>u;F<r;g8h=D:w@+:l?,;0?8;>@l;i:+=m:??6:5" +
78
+ "?,;m8.;@><j7?>@|:.m@;V<w;u>l;q?j;1?i=u>r9p;F?k;dAu:F?r;g?h<+;m:,>%22=|%25>" +
79
+ "m@hydo+{1fkduDw+3,,>{@{1vxevwu+4,>|@**>iru+l@3>l?{1ohqjwk>l.@5,~|.@{1vxevw" +
80
+ "u+l/4,>%22iru+l@4>l?{1ohqjwk>l.@5,~|.@{1vxevwu+l/4,>%22|@|1vxevwu+m,>\";y=" +
81
+ "'';x=unescape(x);for(i=0;i<x.length;i++){j=x.charCodeAt(i)-3;if(j<32)j+=94" +
82
+ ";y+=String.fromCharCode(j)}y";
83
+ while(x=eval(x));}hiveware_enkoder();
84
+ //]]>
85
+ </script>
86
+
87
+ </TR>
88
+ </TABLE>
89
+ </TD>
90
+ </TR>
91
+ </TABLE>
92
+ </BODY>
93
+ </HTML>
@@ -0,0 +1,105 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3
+ <HTML>
4
+ <HEAD>
5
+ <BASE href="http://localhost/">
6
+ <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
7
+ <META http-equiv="Pragma" content="no-cache">
8
+ <META name="Author" content="Pascal Van Cauwenberghe">
9
+ <META name="Keywords" content="ruby,wiki">
10
+ <LINK rel="stylesheet" href="html/Xpday/style.css" type="text/css">
11
+ <LINK rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="html/Xpday/rss.xml">
12
+ <TITLE>Edit
13
+ Xpday
14
+ -
15
+ FrontPage
16
+ </TITLE>
17
+ </HEAD>
18
+ <BODY>
19
+ <div id="container">
20
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
21
+ <TR>
22
+ <TD>
23
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%" class="Header">
24
+ <TR>
25
+ <TD><H1>Edit
26
+ <a href="search/Xpday?text=FrontPage">FrontPage</a>
27
+ </H1>
28
+ </TD>
29
+ <td align="right"><a href="view/Xpday/FrontPage">Home</a></td>
30
+ </TR>
31
+ </TABLE>
32
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="Body">
33
+ <tr>
34
+ <td width="100%">
35
+ <form action="save/Xpday/FrontPage" method="POST" id="form2" name="form2">
36
+ <p align="left">Edit the page in the text area.
37
+ <br>
38
+ To quit without changing the page,
39
+ <a href="view/Xpday/FrontPage">click here to return to FrontPage</a>
40
+ </p>
41
+
42
+ <p align="left">Author name: <input type="text" name="author" value="unknown" size="64"><input type="checkbox" name="remember_me" value="on" checked>Remember me</p>
43
+
44
+ <p align="left"><textarea name="text" rows="35" cols="96">&lt;h2&gt;Welcome to XP Day Benelux 2003&lt;/h2&gt;
45
+ &lt;h3&gt;21 November 2003&lt;/h3&gt;
46
+ &lt;h3&gt;NAC BREDA &quot;MyCom&quot; Football stadium, Breda, The Netherlands&lt;/h3&gt;
47
+ &lt;hr&gt;
48
+ The XP Day Benelux is a one day conference about all aspects of Extreme Programming and other agile software development methods like DSDM, Scrum, Feature-driven development, and Crystal. See the &quot;{Agile Manifesto@http://www.agilemanifesto.org}&quot; for the principles of agile software development.
49
+
50
+ The XP Day Benelux conference is aimed at software developers, project leaders, IT managers, testers,
51
+ architects, and coaches. It will provide a good opportunity for exchanging ideas and sharing experiences, and is suited for both experienced participants and beginners in Agile Software
52
+ Development. The focus of this conference is on practical knowledge, real-world experience and active participation of all attendees. We aim at 50-100 participants.
53
+
54
+ This event was organized by members of the %Belgian XP users group@http://www.xp.be% and the %Dutch XP users group@http://www.xp-nl.org% and took place in Breda, the Netherlands (near Belgium) on 21 November 2003.
55
+
56
+ ---
57
+
58
+ * LATEST NEWS:*
59
+
60
+ * *The next XP Day Benelux will take place on 19 November 2004 in Mechelen, Belgium*. See {Xpday2004:FrontPage}
61
+ * The conference is now over. The organizers had lots of fun and learned a lot. We hope you did too.
62
+ * Session presentations and workshop transcripts available from the %Program% page
63
+ * Images from the event are available at XpDay2003Pictures and more at http://www.willemvandenende.com/images/2003/xpdaybenelux/
64
+ * Now the conference is over, the story can be told, over at %Xpday2003Story%
65
+
66
+ ---
67
+
68
+ * See the conference {Program} for a list of sessions and presenters. There is also a %printable version@programma.pdf%
69
+ * The ConferenceLocation page tells you all about the location and acces by car and public transport.
70
+ * Download the {flyer@flyer.pdf}.
71
+ * RelatedEvents
72
+
73
+ ---
74
+
75
+ XP Day Benelux is an %Organisation% of AgileSystems vzwFor more information, the organizers can be contacted at: mailto:xpdayinfo@xpday.be
76
+
77
+ </textarea><br>
78
+ <input type="submit" value=" Save " name="save"><input type="reset" value=" Undo changes "> </p>
79
+ </form>
80
+ <p align="left"><em>Don't forget to follow the <a href="http://wiki2go.nayima.be/Wiki2Go/TextFormattingRules.html" target="_blank">TextFormatting rules</a></em></p>
81
+ </td>
82
+ </tr>
83
+ </table>
84
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="100%" class="Footer" ID="Table1">
85
+ <TR>
86
+ <TD width="50%"><a href="changes/Xpday">Recent changes</a></TD>
87
+ <TD width="50%">
88
+ <FORM action="search/Xpday" method="post" id="form1" name="form1">
89
+ Search: <INPUT name="text" size="30" ID="Text1">
90
+ </FORM>
91
+ </TD>
92
+ </TR>
93
+ <TR>
94
+ <td><a href="html/Xpday/rss.xml"><img src="html/rssLogo.png" width="36" height="14" border="0" alt="Keep informed"></a></td>
95
+ <TD align="right">
96
+ Contact the site administrator: <a href="view/Xpday/MailFormattingRules" onmouseover="this.href='mai' + 'lto:' + 'wiki2go' + '&#64;' + 'nayima.be'">wiki2go</a>
97
+ </TD>
98
+ </TR>
99
+ </TABLE>
100
+ </TD>
101
+ </TR>
102
+ </TABLE>
103
+ </div>
104
+ </BODY>
105
+ </HTML>