parlement 0.2 → 0.3
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.
- data/CHANGES +14 -4
- data/README +25 -5
- data/Rakefile +21 -21
- data/app/controllers/account_controller.rb +5 -1
- data/app/controllers/elt_controller.rb +7 -10
- data/app/controllers/person_controller.rb +9 -0
- data/app/controllers/subscriber_controller.rb +21 -0
- data/app/helpers/elt_helper.rb +25 -13
- data/app/helpers/mailman.rb +9 -92
- data/app/helpers/subscriber_helper.rb +2 -0
- data/app/models/attachment.rb +2 -0
- data/app/models/elt.rb +64 -2
- data/app/models/mail.rb +198 -0
- data/app/models/mail_notify.rb +63 -0
- data/app/models/person.rb +8 -1
- data/app/views/account/_login.rhtml +31 -28
- data/app/views/account/_show.rhtml +4 -4
- data/app/views/elt/_elt.rhtml +23 -28
- data/app/views/elt/_list.rhtml +6 -2
- data/app/views/elt/new.rhtml +1 -1
- data/app/views/elt/show.rhtml +32 -10
- data/app/views/layouts/top.rhtml +16 -10
- data/app/views/mail_notify/publish.text.html.rhtml +46 -0
- data/app/views/mail_notify/publish.text.plain.rhtml +2 -0
- data/app/views/person/_listElts.rhtml +33 -0
- data/app/views/person/show.rhtml +21 -19
- data/config/boot.rb +2 -0
- data/config/environment.rb +19 -13
- data/config/environments/development.rb +3 -1
- data/config/environments/production.rb +2 -0
- data/config/environments/test.rb +2 -0
- data/config/routes.rb +5 -2
- data/db/ROOT/mail.txt +2 -0
- data/db/ROOT/parlement/news/release0.2.txt +8 -0
- data/db/ROOT/parlement/news/release0.3.txt +11 -0
- data/db/ROOT/parlement/test.txt +6 -1
- data/db/ROOT/parlement.txt +23 -30
- data/db/ROOT/perso.txt +17 -18
- data/db/development_structure.sql +133 -217
- data/db/schema.rb +83 -0
- data/db/schema.sql +11 -15
- data/lib/data_import.rb +3 -1
- data/public/attachment/file/architecture.png +0 -0
- data/public/attachment/file/architecture.svg +8972 -0
- data/public/attachment/file/security.svg +8960 -0
- data/public/images/Sleep-Deprivation-5.JPG +0 -0
- data/public/images/eltBackground.png +0 -0
- data/public/images/eltBackground.svg +89 -0
- data/public/images/orange_by_darren_Hester_350o.jpg +0 -0
- data/public/images/rails.png +0 -0
- data/public/images/smile.png +0 -0
- data/public/images/smile.svg +257 -0
- data/public/images/world.png +0 -0
- data/public/images/world.svg +170 -0
- data/public/javascripts/controls.js +30 -1
- data/public/javascripts/dragdrop.js +210 -145
- data/public/javascripts/effects.js +261 -399
- data/public/javascripts/ie7.js +6 -0
- data/public/javascripts/prototype.js +131 -72
- data/public/oldindex.html +270 -71
- data/public/stylesheets/default.css +189 -215
- data/script/about +1 -1
- data/script/breakpointer +1 -1
- data/script/console +1 -1
- data/script/destroy +1 -1
- data/script/generate +1 -1
- data/script/performance/benchmarker +1 -1
- data/script/performance/profiler +1 -1
- data/script/plugin +1 -1
- data/script/process/reaper +1 -1
- data/script/process/spawner +1 -1
- data/script/process/spinner +1 -1
- data/script/runner +1 -1
- data/script/server +1 -1
- data/test/fixtures/elts.yml +2 -0
- data/test/fixtures/mail/mail_ruby +27 -0
- data/test/fixtures/mail/mail_rubyChild +28 -0
- data/test/fixtures/mail/mail_rubyWithAttachment +7932 -0
- data/test/fixtures/mail/mail_rubyWithSubject +27 -0
- data/test/fixtures/mails.yml +7 -1
- data/test/fixtures/people.yml +5 -0
- data/test/fixtures/subscribers.yml +11 -0
- data/test/functional/account_controller_test.rb +38 -37
- data/test/functional/subscriber_controller_test.rb +128 -0
- data/test/test_helper.rb +44 -0
- data/test/unit/attachment_test.rb +1 -1
- data/test/unit/elt_test.rb +3 -2
- data/test/unit/mail_notify_test.rb +37 -0
- data/test/unit/mail_test.rb +124 -1
- data/test/unit/notifier_test.rb +0 -14
- data/test/unit/person_test.rb +2 -1
- data/test/unit/subscriber_test.rb +35 -0
- data/test/unit/user_test.rb +3 -3
- data/vendor/plugins/file_column/CHANGELOG +64 -0
- data/vendor/plugins/file_column/README +54 -0
- data/vendor/plugins/file_column/Rakefile +36 -0
- data/vendor/plugins/file_column/TODO +6 -0
- data/vendor/plugins/file_column/init.rb +12 -0
- data/vendor/plugins/file_column/lib/file_column.rb +719 -0
- data/vendor/plugins/file_column/lib/file_column_helper.rb +145 -0
- data/vendor/plugins/file_column/lib/file_compat.rb +28 -0
- data/vendor/plugins/file_column/lib/magick_file_column.rb +188 -0
- data/vendor/plugins/file_column/lib/validations.rb +112 -0
- data/vendor/plugins/file_column/test/abstract_unit.rb +90 -0
- data/vendor/plugins/file_column/test/connection.rb +17 -0
- data/vendor/plugins/file_column/test/file_column_helper_test.rb +97 -0
- data/vendor/plugins/file_column/test/file_column_test.rb +630 -0
- data/vendor/plugins/file_column/test/fixtures/entry.rb +32 -0
- data/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +1 -0
- data/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
- data/vendor/plugins/file_column/test/fixtures/mysql.sql +25 -0
- data/vendor/plugins/file_column/test/fixtures/schema.rb +10 -0
- data/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
- data/vendor/plugins/file_column/test/magick_test.rb +251 -0
- data/vendor/plugins/file_column/test/magick_view_only_test.rb +21 -0
- data/vendor/plugins/guid/README.TXT +19 -0
- data/vendor/plugins/guid/init.rb +23 -0
- data/vendor/plugins/guid/lib/usesguid.rb +37 -0
- data/vendor/plugins/guid/lib/uuid22.rb +43 -0
- data/vendor/plugins/guid/lib/uuidtools.rb +565 -0
- metadata +83 -15
- data/db/ROOT/CV.txt +0 -166
- data/lib/file_column.rb +0 -263
- data/lib/file_column_helper.rb +0 -45
- /data/{lib → vendor/plugins/file_column/lib}/rails_file_column.rb +0 -0
metadata
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
!ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: parlement
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: "0.
|
|
7
|
-
date:
|
|
6
|
+
version: "0.3"
|
|
7
|
+
date: 2006-02-23 00:00:00 +01:00
|
|
8
8
|
summary: Trusted Direct Democracy on a forum
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
@@ -12,7 +12,7 @@ email: emmanuel.charpentier@free.fr
|
|
|
12
12
|
homepage: http://leparlement.org
|
|
13
13
|
rubyforge_project: parlement
|
|
14
14
|
description: "This is a forum and mailing list project, which aims to be a complete Direct Democracy implementation where everybody can propose polls, vote on them, or delegate their voice to someone else. Trust through: - cluster - PGP signatures - electoral lists"
|
|
15
|
-
autorequire: rails
|
|
15
|
+
autorequire: rails
|
|
16
16
|
default_executable:
|
|
17
17
|
bindir: bin
|
|
18
18
|
has_rdoc: false
|
|
@@ -28,10 +28,10 @@ cert_chain:
|
|
|
28
28
|
authors:
|
|
29
29
|
- Emmanuel Charpentier
|
|
30
30
|
files:
|
|
31
|
+
- CHANGES
|
|
32
|
+
- COPYING
|
|
31
33
|
- Rakefile
|
|
32
34
|
- README
|
|
33
|
-
- COPYING
|
|
34
|
-
- CHANGES
|
|
35
35
|
- app/apis
|
|
36
36
|
- app/controllers
|
|
37
37
|
- app/helpers
|
|
@@ -41,25 +41,30 @@ files:
|
|
|
41
41
|
- app/controllers/elt_controller.rb
|
|
42
42
|
- app/controllers/account_controller.rb
|
|
43
43
|
- app/controllers/person_controller.rb
|
|
44
|
+
- app/controllers/subscriber_controller.rb
|
|
44
45
|
- app/helpers/application_helper.rb
|
|
45
46
|
- app/helpers/elt_helper.rb
|
|
46
47
|
- app/helpers/person_helper.rb
|
|
47
48
|
- app/helpers/live_tree.rb
|
|
48
49
|
- app/helpers/mailman.rb
|
|
49
50
|
- app/helpers/account_helper.rb
|
|
50
|
-
- app/
|
|
51
|
-
- app/models/
|
|
51
|
+
- app/helpers/subscriber_helper.rb
|
|
52
|
+
- app/models/notifier.rb
|
|
52
53
|
- app/models/user.rb
|
|
54
|
+
- app/models/person.rb
|
|
53
55
|
- app/models/mail.rb
|
|
54
|
-
- app/models/
|
|
55
|
-
- app/models/
|
|
56
|
+
- app/models/elt.rb
|
|
57
|
+
- app/models/mail_notify.rb
|
|
56
58
|
- app/models/user_notify.rb
|
|
59
|
+
- app/models/attachment.rb
|
|
57
60
|
- app/views/layouts
|
|
58
61
|
- app/views/elt
|
|
59
62
|
- app/views/account
|
|
60
63
|
- app/views/notifier
|
|
61
64
|
- app/views/person
|
|
62
65
|
- app/views/_help.rhtml
|
|
66
|
+
- app/views/subscriber
|
|
67
|
+
- app/views/mail_notify
|
|
63
68
|
- app/views/layouts/top.rhtml
|
|
64
69
|
- app/views/layouts/scaffold.rhtml
|
|
65
70
|
- app/views/elt/_elt.rhtml
|
|
@@ -76,6 +81,9 @@ files:
|
|
|
76
81
|
- app/views/account/_show.rhtml
|
|
77
82
|
- app/views/notifier/changeEmail.rhtml
|
|
78
83
|
- app/views/person/show.rhtml
|
|
84
|
+
- app/views/person/_listElts.rhtml
|
|
85
|
+
- app/views/mail_notify/publish.text.html.rhtml
|
|
86
|
+
- app/views/mail_notify/publish.text.plain.rhtml
|
|
79
87
|
- config/environments
|
|
80
88
|
- config/database.yml
|
|
81
89
|
- config/routes.rb
|
|
@@ -88,12 +96,13 @@ files:
|
|
|
88
96
|
- db/schema.sql
|
|
89
97
|
- db/development_structure.sql
|
|
90
98
|
- db/ROOT
|
|
99
|
+
- db/schema.rb
|
|
91
100
|
- db/ROOT/perso
|
|
92
101
|
- db/ROOT/parlement.txt
|
|
93
102
|
- db/ROOT/perso.txt
|
|
94
|
-
- db/ROOT/CV.txt
|
|
95
103
|
- db/ROOT/parlement
|
|
96
104
|
- db/ROOT/parleR.txt
|
|
105
|
+
- db/ROOT/mail.txt
|
|
97
106
|
- db/ROOT/parlement/security.txt
|
|
98
107
|
- db/ROOT/parlement/test.txt
|
|
99
108
|
- db/ROOT/parlement/security
|
|
@@ -101,11 +110,10 @@ files:
|
|
|
101
110
|
- db/ROOT/parlement/news.txt
|
|
102
111
|
- db/ROOT/parlement/security/anonymity.txt
|
|
103
112
|
- db/ROOT/parlement/news/release0.1.txt
|
|
113
|
+
- db/ROOT/parlement/news/release0.2.txt
|
|
114
|
+
- db/ROOT/parlement/news/release0.3.txt
|
|
104
115
|
- lib/localization.rb
|
|
105
116
|
- lib/tasks
|
|
106
|
-
- lib/file_column_helper.rb
|
|
107
|
-
- lib/file_column.rb
|
|
108
|
-
- lib/rails_file_column.rb
|
|
109
117
|
- lib/data_import.rb
|
|
110
118
|
- lib/login_system.rb
|
|
111
119
|
- lib/user_system.rb
|
|
@@ -132,6 +140,15 @@ files:
|
|
|
132
140
|
- public/images/live_tree_loading_spinner.gif
|
|
133
141
|
- public/images/image
|
|
134
142
|
- public/images/webfeed.gif
|
|
143
|
+
- public/images/rails.png
|
|
144
|
+
- public/images/orange_by_darren_Hester_350o.jpg
|
|
145
|
+
- public/images/Sleep-Deprivation-5.JPG
|
|
146
|
+
- public/images/eltBackground.png
|
|
147
|
+
- public/images/smile.png
|
|
148
|
+
- public/images/smile.svg
|
|
149
|
+
- public/images/eltBackground.svg
|
|
150
|
+
- public/images/world.png
|
|
151
|
+
- public/images/world.svg
|
|
135
152
|
- public/javascripts/prototype.js
|
|
136
153
|
- public/javascripts/effects.js
|
|
137
154
|
- public/javascripts/dragdrop.js
|
|
@@ -139,11 +156,15 @@ files:
|
|
|
139
156
|
- public/javascripts/live_tree.js
|
|
140
157
|
- public/javascripts/scriptaculous.js
|
|
141
158
|
- public/javascripts/slider.js
|
|
159
|
+
- public/javascripts/ie7.js
|
|
142
160
|
- public/stylesheets/scaffold.css
|
|
143
161
|
- public/stylesheets/default.css
|
|
144
162
|
- public/stylesheets/live_tree.css
|
|
145
163
|
- public/attachment/file
|
|
146
164
|
- public/attachment/file/tmp
|
|
165
|
+
- public/attachment/file/architecture.png
|
|
166
|
+
- public/attachment/file/architecture.svg
|
|
167
|
+
- public/attachment/file/security.svg
|
|
147
168
|
- public/engine_files/README
|
|
148
169
|
- public/engine_files/login_engine
|
|
149
170
|
- public/engine_files/login_engine/stylesheets
|
|
@@ -177,9 +198,17 @@ files:
|
|
|
177
198
|
- test/fixtures/attachments.yml
|
|
178
199
|
- test/fixtures/mails.yml
|
|
179
200
|
- test/fixtures/notifier
|
|
180
|
-
- test/
|
|
201
|
+
- test/fixtures/mail
|
|
202
|
+
- test/fixtures/subscribers.yml
|
|
203
|
+
- test/fixtures/mail_notify
|
|
204
|
+
- test/fixtures/mail/mail_ruby
|
|
205
|
+
- test/fixtures/mail/mail_rubyWithSubject
|
|
206
|
+
- test/fixtures/mail/mail_rubyWithAttachment
|
|
207
|
+
- test/fixtures/mail/mail_rubyChild
|
|
208
|
+
- test/functional/subscriber_controller_test.rb
|
|
181
209
|
- test/functional/account_controller_test.rb
|
|
182
210
|
- test/functional/person_controller_test.rb
|
|
211
|
+
- test/functional/elt_controller_test.rb
|
|
183
212
|
- test/mocks/development
|
|
184
213
|
- test/mocks/test
|
|
185
214
|
- test/mocks/test/user_notify.rb
|
|
@@ -190,9 +219,13 @@ files:
|
|
|
190
219
|
- test/unit/person_test.rb
|
|
191
220
|
- test/unit/attachment_test.rb
|
|
192
221
|
- test/unit/user_test.rb
|
|
222
|
+
- test/unit/mail_notify_test.rb
|
|
223
|
+
- test/unit/subscriber_test.rb
|
|
193
224
|
- vendor/plugins
|
|
194
225
|
- vendor/plugins/login_engine
|
|
195
226
|
- vendor/plugins/engines
|
|
227
|
+
- vendor/plugins/guid
|
|
228
|
+
- vendor/plugins/file_column
|
|
196
229
|
- vendor/plugins/login_engine/test
|
|
197
230
|
- vendor/plugins/login_engine/app
|
|
198
231
|
- vendor/plugins/login_engine/db
|
|
@@ -257,6 +290,39 @@ files:
|
|
|
257
290
|
- vendor/plugins/engines/lib/action_mailer_extensions.rb
|
|
258
291
|
- vendor/plugins/engines/lib/dependencies_extensions.rb
|
|
259
292
|
- vendor/plugins/engines/lib/action_view_extensions.rb
|
|
293
|
+
- vendor/plugins/guid/lib
|
|
294
|
+
- vendor/plugins/guid/README.TXT
|
|
295
|
+
- vendor/plugins/guid/init.rb
|
|
296
|
+
- vendor/plugins/guid/lib/usesguid.rb
|
|
297
|
+
- vendor/plugins/guid/lib/uuid22.rb
|
|
298
|
+
- vendor/plugins/guid/lib/uuidtools.rb
|
|
299
|
+
- vendor/plugins/file_column/test
|
|
300
|
+
- vendor/plugins/file_column/lib
|
|
301
|
+
- vendor/plugins/file_column/Rakefile
|
|
302
|
+
- vendor/plugins/file_column/TODO
|
|
303
|
+
- vendor/plugins/file_column/init.rb
|
|
304
|
+
- vendor/plugins/file_column/CHANGELOG
|
|
305
|
+
- vendor/plugins/file_column/README
|
|
306
|
+
- vendor/plugins/file_column/test/fixtures
|
|
307
|
+
- vendor/plugins/file_column/test/connection.rb
|
|
308
|
+
- vendor/plugins/file_column/test/abstract_unit.rb
|
|
309
|
+
- vendor/plugins/file_column/test/file_column_helper_test.rb
|
|
310
|
+
- vendor/plugins/file_column/test/magick_view_only_test.rb
|
|
311
|
+
- vendor/plugins/file_column/test/file_column_test.rb
|
|
312
|
+
- vendor/plugins/file_column/test/magick_test.rb
|
|
313
|
+
- vendor/plugins/file_column/test/public
|
|
314
|
+
- vendor/plugins/file_column/test/fixtures/schema.rb
|
|
315
|
+
- vendor/plugins/file_column/test/fixtures/kerb.jpg
|
|
316
|
+
- vendor/plugins/file_column/test/fixtures/mysql.sql
|
|
317
|
+
- vendor/plugins/file_column/test/fixtures/entry.rb
|
|
318
|
+
- vendor/plugins/file_column/test/fixtures/invalid-image.jpg
|
|
319
|
+
- vendor/plugins/file_column/test/fixtures/skanthak.png
|
|
320
|
+
- vendor/plugins/file_column/lib/rails_file_column.rb
|
|
321
|
+
- vendor/plugins/file_column/lib/validations.rb
|
|
322
|
+
- vendor/plugins/file_column/lib/file_compat.rb
|
|
323
|
+
- vendor/plugins/file_column/lib/magick_file_column.rb
|
|
324
|
+
- vendor/plugins/file_column/lib/file_column_helper.rb
|
|
325
|
+
- vendor/plugins/file_column/lib/file_column.rb
|
|
260
326
|
test_files:
|
|
261
327
|
- test/unit/mail_test.rb
|
|
262
328
|
- test/unit/elt_test.rb
|
|
@@ -264,6 +330,8 @@ test_files:
|
|
|
264
330
|
- test/unit/person_test.rb
|
|
265
331
|
- test/unit/attachment_test.rb
|
|
266
332
|
- test/unit/user_test.rb
|
|
333
|
+
- test/unit/mail_notify_test.rb
|
|
334
|
+
- test/unit/subscriber_test.rb
|
|
267
335
|
rdoc_options: []
|
|
268
336
|
|
|
269
337
|
extra_rdoc_files: []
|
data/db/ROOT/CV.txt
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
Chef de projet, Architecte, J2EE, rails
|
|
2
|
-
|
|
3
|
-
<style>
|
|
4
|
-
body { text-align:left; }
|
|
5
|
-
br, .sidebar, .parent, .eltInfo { display:none; }
|
|
6
|
-
h1 {
|
|
7
|
-
padding-bottom:0px;
|
|
8
|
-
text-align:center; }
|
|
9
|
-
h2 {
|
|
10
|
-
text-transform:uppercase;
|
|
11
|
-
border-bottom:solid 2pt #333;
|
|
12
|
-
font-weight:bolder;
|
|
13
|
-
font-size:normal; }
|
|
14
|
-
h3 {
|
|
15
|
-
font-weight:bolder;
|
|
16
|
-
font-size:larger;
|
|
17
|
-
margin-left:1em; }
|
|
18
|
-
h1, h2, h3 { background:none; }
|
|
19
|
-
p { margin-left:2em; }
|
|
20
|
-
ul { margin-left:1em; }
|
|
21
|
-
.eltSubs { border:none; }
|
|
22
|
-
|
|
23
|
-
@media print {
|
|
24
|
-
html, body { border:none; padding:0px; margin:0px; }
|
|
25
|
-
a, a:link, a:visited, a:hover, a:active {
|
|
26
|
-
color:black;
|
|
27
|
-
text-decoration:none; }
|
|
28
|
-
}
|
|
29
|
-
</style>
|
|
30
|
-
|
|
31
|
-
!{float:right;margin-left:1em;}/images/image/20030520echarp.jpg!
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<div style="text-align:center; margin-left:8em">
|
|
35
|
-
<div class="title">Emmanuel Charpentier</div>
|
|
36
|
-
<div>75015 Paris</div>
|
|
37
|
-
<div>N� en F�vrier 1973</div>
|
|
38
|
-
<div>email: emmanuel.charpentier@free.fr</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
Prendre en charge depuis le d�but un projet ambitieux, le mener jusqu'� ses
|
|
42
|
-
utilisateurs.
|
|
43
|
-
|
|
44
|
-
Etre p�renne et ind�pendant avec les Logiciels Libres.
|
|
45
|
-
|
|
46
|
-
h2. Comp�tences
|
|
47
|
-
|
|
48
|
-
Langages : java, ruby, J2EE, XML/XSLT, SQL, UML.
|
|
49
|
-
|
|
50
|
-
Bases de donn�es : "PostgreSQL":http://www.postgresql.org,
|
|
51
|
-
"HsqlDB":http://hsqldb.org, "MySQL":http://www.mysql.com.
|
|
52
|
-
|
|
53
|
-
Frameworks : "Cocoon":http://cocoon.apache.org, "Ruby on
|
|
54
|
-
Rails":http://rubyonrails.org, "struts":http://struts.apache.org.
|
|
55
|
-
|
|
56
|
-
Logiciels : "JBoss":http://jboss.org, "JOnAS":http://jonas.objectweb.org,
|
|
57
|
-
"Tomcat":http://tomcat.apache.org, "Jetty":http://jetty.mortbay.org,
|
|
58
|
-
"Middlegen":http://boss.bekk.no/boss/middlegen/,
|
|
59
|
-
"XDoclet":http://xdoclet.sourceforge.net, "Ant":http://ant.apache.org,
|
|
60
|
-
"Docbook":http://www.docbook.org, "vi":http://vim.sourceforge.net,
|
|
61
|
-
"planner":http://planner.imendio.org.
|
|
62
|
-
|
|
63
|
-
Syst�me d'exploitation : gnu/Linux, "debian":http://debian.org.
|
|
64
|
-
|
|
65
|
-
Langue �trang�re : Anglais bilingue (Bac+4 en �cosse).
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
h2. Exp�rience professionnelle
|
|
69
|
-
|
|
70
|
-
h3. Chef de projet -- Editronics Education puis projet de cr�ation d'entreprise
|
|
71
|
-
|
|
72
|
-
D�cembre 2002 - Avril 2005
|
|
73
|
-
|
|
74
|
-
Conception, architecture et r�alisation du projet
|
|
75
|
-
"OpenCartable":http://ecolecolier.dyndns.org : un site web de m�diation
|
|
76
|
-
p�dagogique � destination des professeurs et de leurs �l�ves, et organis�
|
|
77
|
-
autour des manuels des �diteurs scolaires.
|
|
78
|
-
|
|
79
|
-
Condition notable: monter en charge jusqu'� 1 million d'utilisateurs,
|
|
80
|
-
l'�ducation nationale.
|
|
81
|
-
|
|
82
|
-
Participation � la conception fonctionnelle, d�finition de modules permettant
|
|
83
|
-
de diviser les fonctionnalit�s en �l�ments techniques ind�pendants.
|
|
84
|
-
|
|
85
|
-
Mise en place et gestion d'une �quipe de 6 personnes, organisation et
|
|
86
|
-
r�partition des t�ches, suivi et participation aux r�alisations. R�le de
|
|
87
|
-
d�veloppeur senior et de formateur.
|
|
88
|
-
|
|
89
|
-
Choix des outils: _java, cocoon, JBoss, PostgreSQL, XML/XSLT, DocBook, cvs_.
|
|
90
|
-
M�thode de d�veloppement dite "agile programming".
|
|
91
|
-
|
|
92
|
-
D�finition du format des manuels: xml DocBook enrichi du namespace LOM
|
|
93
|
-
(Learning Object Metadata).
|
|
94
|
-
|
|
95
|
-
Passage du projet en GPL et d�veloppement sur le GForge de l'adullact � partir
|
|
96
|
-
de 2004.
|
|
97
|
-
|
|
98
|
-
h3. D�veloppeur -- "Soft and Com":http://www.soft-and-com.fr
|
|
99
|
-
|
|
100
|
-
Novembre 2004 - D�cembre 2004
|
|
101
|
-
|
|
102
|
-
Prise en charge d'un projet web EDI (Electronic Data Interchange) permettant
|
|
103
|
-
aux constructeurs et fournisseurs automobiles de g�rer leurs �changes de
|
|
104
|
-
pi�ces. Cycle complet commande-livraison-facture.
|
|
105
|
-
|
|
106
|
-
_java, cocoon, HsqlDB, PostgreSQL, XML/XSLT, svn_
|
|
107
|
-
|
|
108
|
-
h3. Auditeur -- "Apog�e Communications":http://www.colt-telecom.fr
|
|
109
|
-
|
|
110
|
-
Novembre 2003 - D�cembre 2003
|
|
111
|
-
|
|
112
|
-
Audit de s�curit� sur une application bancaire. Analyse de l'environnement, du
|
|
113
|
-
serveur applicatif et de librairies d'encryption. _java, WebMethods_
|
|
114
|
-
|
|
115
|
-
h3. Consultant, chef de projet -- "Alcove":http://www.alcove.com
|
|
116
|
-
|
|
117
|
-
Mars 2001 - Novembre 2002
|
|
118
|
-
|
|
119
|
-
* D�buts sur le projet i-cart@ble (devenu OpenCartable) comme chef de projet d'une �quipe Alcove. Reprise du fonctionnel du projet i-m@nuel, en le reconstruisant autour de logiciels libres
|
|
120
|
-
* Formations et pr�sentations _java/J2EE/XML_, notamment � LinuxExpo (http://emmanuel.charpentier.free.fr/FreeJ2EE/)
|
|
121
|
-
* Audit de s�curit� d'une application web bancaire (_vignette, tcl/tk_).
|
|
122
|
-
* R�ponses � appels d'offres, support aux commerciaux
|
|
123
|
-
|
|
124
|
-
h3. Projet personnel -- "VeniVidiVoti":http://sf.net/projects/vvv
|
|
125
|
-
|
|
126
|
-
Novembre 2000 - F�vrier 2001
|
|
127
|
-
|
|
128
|
-
Site web d'�criture collaborative.
|
|
129
|
-
|
|
130
|
-
Moteur d'un outil permettant � un groupe d'utilisateurs d'�crire
|
|
131
|
-
d�mocratiquement presque tout type de texte structur�. M�lange de d�mocratie
|
|
132
|
-
directe et repr�sentative.
|
|
133
|
-
|
|
134
|
-
_java, JBoss, Cocoon, PostgreSQL, XML/XSLT, cvs_
|
|
135
|
-
|
|
136
|
-
h3. D�veloppeur, Chef de projet technique -- Fi System
|
|
137
|
-
|
|
138
|
-
Juin 1999 - Octobre 2000
|
|
139
|
-
|
|
140
|
-
* InfoVista: prise en charge de la g�n�ration de rapports synth�tisant les donn�es recueillies par les logiciels de cet �diteur. _jsp, XML_
|
|
141
|
-
* Renault: conception et r�alisation de l'intranet de gestion du parc v�hiculaires. _jsp, WebSphere, Oracle_
|
|
142
|
-
* France T�l�com: r�alisation du site de prise de commandes pour les entreprises. _jsp, base de donn�es objet_
|
|
143
|
-
|
|
144
|
-
h3. D�veloppeur -- Altran Technologies
|
|
145
|
-
|
|
146
|
-
Janvier 1998 - Mai 1999
|
|
147
|
-
|
|
148
|
-
* IDMatics (Thomson): analyse et r�alisation des modules de consultation et contr�le qualit� d'un syst�me de production de permis de conduire. _WinDev_
|
|
149
|
-
* Bouygues: passage � l'euro du syst�me de gestion. Cr�ation d'une calculatrice/convertisseur graphique. _C++, MFC, SQL Serveur_
|
|
150
|
-
* General Electric Medical Systems: sp�cifications et d�veloppement d'�volutions de la plate-forme de supervision d'un syst�me � rayons X. _PLM, temps r�el_
|
|
151
|
-
* Noos: d�veloppement d'un module de remise clients li� � une base de donn�es de grand volume. _Oracle, PL/SQL_
|
|
152
|
-
* Syseca (Thomson): d�veloppement d'un serveur de situation temps r�el (enregistrement/playback des donn�es) d'un syst�me de commandement H24. _C++, OMT_
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
h2. Formation
|
|
156
|
-
|
|
157
|
-
h3. 1997 -- Ing�nieur en Informatique
|
|
158
|
-
|
|
159
|
-
"UTBM":http://www.utbm.fr (Belfort, France). Sp�cialisation en ing�nierie des
|
|
160
|
-
logiciels et de la connaissance.
|
|
161
|
-
|
|
162
|
-
h3. 1995 -- Ing�nieur en M�canique
|
|
163
|
-
|
|
164
|
-
"Strathclyde University":http://www.strath.ac.uk (Glasgow, Ecosse).
|
|
165
|
-
Sp�cialisation en thermodynamique et m�canique des fluides.
|
|
166
|
-
|
data/lib/file_column.rb
DELETED
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
require 'tempfile'
|
|
3
|
-
|
|
4
|
-
module FileColumn # :nodoc:
|
|
5
|
-
def self.append_features(base)
|
|
6
|
-
super
|
|
7
|
-
base.extend(ClassMethods)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# The FileColumn module allows you to easily handle file uploads. You can designate
|
|
11
|
-
# one or more columns of your model's table as "file columns" like this:
|
|
12
|
-
#
|
|
13
|
-
# class Entry < ActiveRecord::Base
|
|
14
|
-
#
|
|
15
|
-
# file_column :image
|
|
16
|
-
# end
|
|
17
|
-
#
|
|
18
|
-
# Now, by default, an uploaded file "test.png" for an entry object with primary key 42 will
|
|
19
|
-
# be stored in in "public/entry/image/42/test.png". The filename "test.png" will be stored
|
|
20
|
-
# in the record's +image+ column.
|
|
21
|
-
#
|
|
22
|
-
# The methods of this module are automatically included into ActiveRecord::Base as class
|
|
23
|
-
# methods, so that you can use them in your models.
|
|
24
|
-
#
|
|
25
|
-
# == Generated Methods
|
|
26
|
-
#
|
|
27
|
-
# After calling "<tt>file_column :image</tt>" as in the example above, a number of instance methods
|
|
28
|
-
# will automatically be generated, all prefixed by "image":
|
|
29
|
-
#
|
|
30
|
-
# * <tt>Entry#image=(uploaded_file)</tt>: this will handle a newly uploaded file (see below). Note that
|
|
31
|
-
# you can simply call your upload field "entry[image]" in your view (or use the helper).
|
|
32
|
-
# * <tt>Entry#image</tt>: This will return an absolute path (as a string) to the currently uploaded file
|
|
33
|
-
# or nil if no file has been uploaded
|
|
34
|
-
# * <tt>Entry#image_relative_path</tt>: This will return a path relative to this file column's base
|
|
35
|
-
# directory
|
|
36
|
-
# as a string or nil if no file has been uploaded. This would be "42/test.png" in the example.
|
|
37
|
-
# * <tt>Entry#image_just_uploaded?</tt>: Returns true if a new file has been uploaded to this instance.
|
|
38
|
-
# You can use this in <tt>before_validation</tt> to resize images on newly uploaded files, for example.
|
|
39
|
-
#
|
|
40
|
-
# You can access the raw value of the "image" column (which will contain the filename) via the
|
|
41
|
-
# <tt>ActiveRecord::Base#attributes</tt> or <tt>ActiveRecord::Base#[]</tt> methods like this:
|
|
42
|
-
#
|
|
43
|
-
# entry['image'] # e.g."test.png"
|
|
44
|
-
#
|
|
45
|
-
# == Storage of uploaded file
|
|
46
|
-
#
|
|
47
|
-
# For a model class +Entry+ and a column +image+, all files will be stored under
|
|
48
|
-
# "public/entry/image". A sub-directory named after the primary key of the object will
|
|
49
|
-
# be created, so that files can be stored using their real filename. For example, a file
|
|
50
|
-
# "test.png" stored in an Entry object with id 42 will be stored in
|
|
51
|
-
#
|
|
52
|
-
# public/entry/image/42/test.png
|
|
53
|
-
#
|
|
54
|
-
# Files will be moved to this location in an +after_save+ callback. They will be stored in
|
|
55
|
-
# a temporary location previously as explained in the next section.
|
|
56
|
-
#
|
|
57
|
-
# == Handling of form redisplay
|
|
58
|
-
#
|
|
59
|
-
# Suppose you have a form for creating a new object where the user can upload an image. The form may
|
|
60
|
-
# have to be re-displayed because of validation errors. The uploaded file has to be stored somewhere so
|
|
61
|
-
# that the user does not have to upload it again. FileColumn will store these in a temporary directory
|
|
62
|
-
# (called "tmp" and located under the column's base directory by default) so that it can be moved to
|
|
63
|
-
# the final location if the object is successfully created. If the form is never completed, though, you
|
|
64
|
-
# can easily remove all the images in this "tmp" directory once per day or so.
|
|
65
|
-
#
|
|
66
|
-
# So in the example above, the image "test.png" would first be stored in
|
|
67
|
-
# "public/entry/image/tmp/<some_random_key>/test.png" and be moved to
|
|
68
|
-
# "public/entry/image/<primary_key>/test.png".
|
|
69
|
-
#
|
|
70
|
-
# This temporary location of newly uploaded files has another advantage when updating objects. If the
|
|
71
|
-
# update fails for some reasons (e.g. due to validations), the existing image will not be overwritten, so
|
|
72
|
-
# it has a kind of "transactional behaviour".
|
|
73
|
-
module ClassMethods
|
|
74
|
-
|
|
75
|
-
DEFAULT_OPTIONS = {
|
|
76
|
-
"root_path" => File.join(RAILS_ROOT, "public"),
|
|
77
|
-
"web_root" => ""
|
|
78
|
-
}.freeze
|
|
79
|
-
|
|
80
|
-
# handle one or more attributes as "file-upload" columns, generating additional methods as explained
|
|
81
|
-
# above. You should pass the names of the attributes as symbols, like this:
|
|
82
|
-
#
|
|
83
|
-
# file_column :image, :another_image
|
|
84
|
-
def file_column(*args)
|
|
85
|
-
options = DEFAULT_OPTIONS.dup
|
|
86
|
-
options.update(args.pop) if args.last.is_a?(Hash)
|
|
87
|
-
|
|
88
|
-
options["base_path"] ||= File.join(options["root_path"], Inflector.underscore(self.name).to_s)
|
|
89
|
-
options["base_url"] ||= options["web_root"]+"/"+Inflector.underscore(self.name).to_s+"/"
|
|
90
|
-
args.each do |attr|
|
|
91
|
-
store_dir = File.join(options["base_path"], attr.to_s)
|
|
92
|
-
tmp_base_dir = File.join(store_dir, "tmp")
|
|
93
|
-
FileUtils.mkpath([store_dir,tmp_base_dir])
|
|
94
|
-
|
|
95
|
-
column_attr = attr.to_s
|
|
96
|
-
column_read_method = attr.to_sym
|
|
97
|
-
column_write_method = (attr.to_s+"=").to_sym
|
|
98
|
-
read_temp_method = "#{attr}_temp".to_sym
|
|
99
|
-
write_temp_method = "#{attr}_temp=".to_sym
|
|
100
|
-
column_relative_path_method = (attr.to_s+"_relative_path").to_sym
|
|
101
|
-
column_options_method = "#{attr}_options".to_sym
|
|
102
|
-
just_uploaded_method = "#{attr}_just_uploaded?".to_sym
|
|
103
|
-
|
|
104
|
-
# symbols for callback methods
|
|
105
|
-
column_after_save_method = (attr.to_s+"_after_save").to_sym
|
|
106
|
-
column_after_destroy_method = (attr.to_s+"_after_destroy").to_sym
|
|
107
|
-
|
|
108
|
-
tmp_dir_attribute = "@#{attr}_temp".to_sym
|
|
109
|
-
just_uploaded_attribute = "@#{attr}_just_uploaded".to_sym
|
|
110
|
-
|
|
111
|
-
define_method column_read_method do
|
|
112
|
-
relative_path = self.send column_relative_path_method
|
|
113
|
-
return nil unless relative_path
|
|
114
|
-
File.join(store_dir, relative_path)
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
define_method column_relative_path_method do
|
|
118
|
-
filename = read_attribute column_attr
|
|
119
|
-
return nil unless filename and !filename.empty?
|
|
120
|
-
tmp_dir = instance_variable_get tmp_dir_attribute
|
|
121
|
-
if tmp_dir
|
|
122
|
-
File.join("tmp",tmp_dir,filename)
|
|
123
|
-
else
|
|
124
|
-
File.join(self.id.to_s,filename)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
define_method column_write_method do |file|
|
|
130
|
-
if file.nil? and read_attribute(column_attr)
|
|
131
|
-
if (tmp_dir = instance_variable_get tmp_dir_attribute)
|
|
132
|
-
# delete temporary image immediately
|
|
133
|
-
FileColumn.remove_file_with_dir(File.join(tmp_base_dir,tmp_dir,
|
|
134
|
-
read_attribute(column_attr)))
|
|
135
|
-
remove_instance_variable tmp_dir_attribute
|
|
136
|
-
end
|
|
137
|
-
write_attribute column_attr, nil
|
|
138
|
-
end
|
|
139
|
-
return nil unless file and file.size > 0
|
|
140
|
-
|
|
141
|
-
tmp_dir = FileColumn.generate_temp_name
|
|
142
|
-
FileUtils.mkdir(File.join(tmp_base_dir, tmp_dir))
|
|
143
|
-
|
|
144
|
-
filename = FileColumn::sanitize_filename(file.original_filename)
|
|
145
|
-
local_file_path = File.join(tmp_base_dir,tmp_dir,filename)
|
|
146
|
-
|
|
147
|
-
# stored uploaded file into local_file_path
|
|
148
|
-
# If it was a Tempfile object, the temporary file will be
|
|
149
|
-
# cleaned up automatically, so we do not have to care for this
|
|
150
|
-
if file.respond_to?(:local_path) and file.local_path and File.exists?(file.local_path)
|
|
151
|
-
FileUtils.copy_file(file.local_path, local_file_path)
|
|
152
|
-
elsif file.respond_to?(:read)
|
|
153
|
-
File.open(local_file_path, "wb") { |f| f.write(file.read) }
|
|
154
|
-
else
|
|
155
|
-
raise ArgumentError.new("Do not know how to handle #{file.inspect}")
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# if there already was an old temporary file, remove it
|
|
159
|
-
if (old_tmp_dir = instance_variable_get tmp_dir_attribute)
|
|
160
|
-
FileColumn.remove_file_with_dir(File.join(tmp_base_dir,old_tmp_dir,
|
|
161
|
-
read_attribute(column_attr)))
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
instance_variable_set tmp_dir_attribute, tmp_dir
|
|
165
|
-
write_attribute column_attr, filename
|
|
166
|
-
instance_variable_set just_uploaded_attribute, true
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
define_method read_temp_method do
|
|
170
|
-
tmp_dir = instance_variable_get tmp_dir_attribute
|
|
171
|
-
return nil unless tmp_dir
|
|
172
|
-
File.join(tmp_dir, read_attribute(column_attr))
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
define_method write_temp_method do |temp_path|
|
|
176
|
-
return nil if temp_path == ""
|
|
177
|
-
raise ArgumentError.new("invalid format of '#{temp_path}'") unless temp_path =~ %r{^((\d+\.)+\d+)/([^/].+)$}
|
|
178
|
-
tmp_dir, filename = $1, FileColumn.sanitize_filename($3)
|
|
179
|
-
|
|
180
|
-
if instance_variable_get(tmp_dir_attribute).nil?
|
|
181
|
-
instance_variable_set tmp_dir_attribute, tmp_dir
|
|
182
|
-
write_attribute column_attr, filename
|
|
183
|
-
else
|
|
184
|
-
# if tmp_dir_attribute is already set we have already uploaded
|
|
185
|
-
# a new file via column=, which takes precedence over the old
|
|
186
|
-
# temporary image. However, we can clean up the old image right now
|
|
187
|
-
FileColumn.remove_file_with_dir(File.join(tmp_base_dir,tmp_dir,filename))
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
define_method column_after_save_method do
|
|
192
|
-
if instance_variable_get tmp_dir_attribute
|
|
193
|
-
# we have a newly uploaded image, move it to the correct location
|
|
194
|
-
|
|
195
|
-
# create a directory named after the primary key, first
|
|
196
|
-
dir = File.join(store_dir,self.id.to_s)
|
|
197
|
-
FileUtils.mkdir(dir) unless File.exists?(dir)
|
|
198
|
-
|
|
199
|
-
# move the temporary file over
|
|
200
|
-
local_path = self.send(column_read_method)
|
|
201
|
-
FileUtils.mv local_path, dir
|
|
202
|
-
|
|
203
|
-
# remove all old files in the directory
|
|
204
|
-
# we do this _after_ moving the file to avoid a short period of
|
|
205
|
-
# time where none of the two files is available
|
|
206
|
-
filename = File.basename(local_path)
|
|
207
|
-
FileUtils.rm(
|
|
208
|
-
Dir.entries(dir).reject!{ |e| [".",".."].include?(e) or e == filename }.
|
|
209
|
-
collect{ |e| File.join(dir,e) }
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
# cleanup temporary file
|
|
213
|
-
Dir.rmdir(File.dirname(local_path))
|
|
214
|
-
remove_instance_variable tmp_dir_attribute
|
|
215
|
-
elsif read_attribute(column_attr).nil?
|
|
216
|
-
# we do not have a file stored anymore, make sure
|
|
217
|
-
# to remove it from disk if needed
|
|
218
|
-
FileUtils.rm_rf File.join(store_dir, self.id.to_s)
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
after_save column_after_save_method
|
|
222
|
-
|
|
223
|
-
define_method column_after_destroy_method do
|
|
224
|
-
local_path = self.send(column_read_method)
|
|
225
|
-
FileColumn.remove_file_with_dir(local_path) if local_path
|
|
226
|
-
end
|
|
227
|
-
after_destroy column_after_destroy_method
|
|
228
|
-
|
|
229
|
-
define_method just_uploaded_method do
|
|
230
|
-
instance_variable_get just_uploaded_attribute
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
define_method column_options_method do
|
|
234
|
-
options
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
private column_after_save_method, column_after_destroy_method
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
private
|
|
244
|
-
|
|
245
|
-
def self.generate_temp_name
|
|
246
|
-
now = Time.now
|
|
247
|
-
"#{now.to_i}.#{now.usec}.#{Process.pid}"
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
def self.sanitize_filename(filename)
|
|
251
|
-
filename = File.basename(filename.gsub("\\", "/")) # work-around for IE
|
|
252
|
-
filename.gsub(/[^a-zA-Z0-9\.\-\+_]/,"_")
|
|
253
|
-
filename = "_#{filename}" if filename =~ /^\.+$/
|
|
254
|
-
filename
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
def self.remove_file_with_dir(path)
|
|
258
|
-
return unless File.file?(path)
|
|
259
|
-
FileUtils.rm_f path
|
|
260
|
-
dir = File.dirname(path)
|
|
261
|
-
Dir.rmdir(dir) if File.exists?(dir)
|
|
262
|
-
end
|
|
263
|
-
end
|