parlement 0.10 → 0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +11 -0
- data/MEMORY +9 -1
- data/README +5 -4
- data/app/controllers/account_controller.rb +10 -13
- data/app/controllers/application.rb +4 -5
- data/app/controllers/elt_controller.rb +9 -7
- data/app/controllers/person_controller.rb +1 -3
- data/app/controllers/subscriber_controller.rb +10 -10
- data/app/helpers/elt_helper.rb +2 -0
- data/app/models/elt.rb +28 -19
- data/app/models/mail.rb +26 -14
- data/app/models/mail_notify.rb +5 -4
- data/app/models/person.rb +11 -2
- data/app/views/account/_login.rhtml +3 -3
- data/app/views/account/_show.rhtml +12 -14
- data/app/views/elt/_choice.rhtml +3 -3
- data/app/views/elt/_elt.rhtml +4 -4
- data/app/views/elt/_list.rhtml +2 -2
- data/app/views/elt/_listByDate.rhtml +1 -1
- data/app/views/elt/_listByVote.rhtml +1 -1
- data/app/views/elt/new.rhtml +3 -3
- data/app/views/elt/show.rhtml +2 -2
- data/app/views/layouts/top.rhtml +6 -0
- data/app/views/mail_notify/publish.text.html.rhtml +1 -1
- data/app/views/person/_listElts.rhtml +5 -3
- data/app/views/person/show.rhtml +1 -2
- data/config/boot.rb +5 -4
- data/config/environment.rb +6 -4
- data/config/routes.rb +3 -2
- data/db/development_structure.sql +15 -4
- data/db/migrate/006_last_activity.rb +10 -0
- data/db/schema.rb +67 -49
- data/public/dispatch.fcgi +1 -0
- data/public/javascripts/controls.js +41 -23
- data/public/javascripts/dragdrop.js +317 -99
- data/public/javascripts/effects.js +301 -166
- data/public/javascripts/prototype.js +932 -402
- data/public/stylesheets/default.css +3 -2
- data/test/unit/elt_test.rb +13 -0
- data/test/unit/mail_test.rb +3 -1
- data/vendor/plugins/engines/CHANGELOG +203 -99
- data/vendor/plugins/engines/MIT-LICENSE +1 -1
- data/vendor/plugins/engines/README +32 -384
- data/vendor/plugins/engines/Rakefile +14 -0
- data/vendor/plugins/engines/UPGRADING +93 -0
- data/vendor/plugins/engines/about.yml +7 -0
- data/vendor/plugins/engines/generators/plugin_migration/USAGE +45 -0
- data/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb +79 -0
- data/vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb +13 -0
- data/vendor/plugins/engines/init.rb +34 -47
- data/vendor/plugins/engines/install.rb +32 -0
- data/vendor/plugins/engines/lib/engines/{ruby_extensions.rb → deprecated_config_support.rb} +135 -113
- data/vendor/plugins/engines/lib/engines/plugin.rb +214 -0
- data/vendor/plugins/engines/lib/engines/plugin_list.rb +31 -0
- data/vendor/plugins/engines/lib/engines/plugin_migrator.rb +60 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/active_record.rb +19 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb +143 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb +155 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/public_asset_helpers.rb +116 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/rails.rb +20 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/rails_initializer.rb +86 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb +77 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions/templates.rb +140 -0
- data/vendor/plugins/engines/lib/engines/rails_extensions.rb +6 -0
- data/vendor/plugins/engines/lib/engines/testing.rb +88 -0
- data/vendor/plugins/engines/lib/engines.rb +281 -425
- data/vendor/plugins/engines/tasks/engines.rake +108 -137
- metadata +218 -250
- data/db/ROOT/perso.txt +0 -214
- data/public/images/indicator.gif +0 -0
- data/public/images/orange_by_darren_Hester_350o.jpg +0 -0
- data/public/images/smile.png +0 -0
- data/vendor/plugins/engines/generators/engine/USAGE +0 -26
- data/vendor/plugins/engines/generators/engine/engine_generator.rb +0 -199
- data/vendor/plugins/engines/generators/engine/templates/README +0 -85
- data/vendor/plugins/engines/generators/engine/templates/init_engine.erb +0 -15
- data/vendor/plugins/engines/generators/engine/templates/install.erb +0 -4
- data/vendor/plugins/engines/generators/engine/templates/lib/engine.erb +0 -6
- data/vendor/plugins/engines/generators/engine/templates/licenses/GPL +0 -18
- data/vendor/plugins/engines/generators/engine/templates/licenses/LGPL +0 -19
- data/vendor/plugins/engines/generators/engine/templates/licenses/MIT +0 -22
- data/vendor/plugins/engines/generators/engine/templates/licenses/None +0 -1
- data/vendor/plugins/engines/generators/engine/templates/public/javascripts/engine.js +0 -0
- data/vendor/plugins/engines/generators/engine/templates/public/stylesheets/engine.css +0 -0
- data/vendor/plugins/engines/generators/engine/templates/tasks/engine.rake +0 -0
- data/vendor/plugins/engines/generators/engine/templates/test/test_helper.erb +0 -17
- data/vendor/plugins/engines/lib/bundles/require_resource.rb +0 -124
- data/vendor/plugins/engines/lib/bundles.rb +0 -77
- data/vendor/plugins/engines/lib/engines/action_mailer_extensions.rb +0 -140
- data/vendor/plugins/engines/lib/engines/action_view_extensions.rb +0 -141
- data/vendor/plugins/engines/lib/engines/active_record_extensions.rb +0 -21
- data/vendor/plugins/engines/lib/engines/dependencies_extensions.rb +0 -129
- data/vendor/plugins/engines/lib/engines/migration_extensions.rb +0 -53
- data/vendor/plugins/engines/lib/engines/routing_extensions.rb +0 -28
- data/vendor/plugins/engines/lib/engines/testing_extensions.rb +0 -327
- data/vendor/plugins/engines/tasks/deprecated_engines.rake +0 -7
- data/vendor/plugins/engines/test/action_view_extensions_test.rb +0 -9
- data/vendor/plugins/engines/test/ruby_extensions_test.rb +0 -115
- data/vendor/plugins/guid/README.TXT +0 -29
- data/vendor/plugins/guid/init.rb +0 -30
- data/vendor/plugins/guid/lib/usesguid.rb +0 -37
- data/vendor/plugins/guid/lib/uuid22.rb +0 -43
- data/vendor/plugins/guid/lib/uuidtools.rb +0 -572
- data/vendor/plugins/responds_to_parent/MIT-LICENSE +0 -20
- data/vendor/plugins/responds_to_parent/README +0 -42
- data/vendor/plugins/responds_to_parent/Rakefile +0 -22
- data/vendor/plugins/responds_to_parent/init.rb +0 -1
- data/vendor/plugins/responds_to_parent/lib/responds_to_parent.rb +0 -46
- data/vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb +0 -115
data/app/views/elt/_list.rhtml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
<%e_pages = ActionController::Pagination::Paginator.new(
|
2
|
-
self, elt.elts_count, PAGE_LENGTH,
|
2
|
+
self, elt.elts_count, PAGE_LENGTH, params['page'])
|
3
3
|
elts = Elt.find(:all,
|
4
4
|
:conditions => "parent_id = '#{elt.id}'",
|
5
|
-
:order => 'position, elts.created_on DESC',
|
5
|
+
:order => 'position, last_activity DESC, elts.created_on DESC',
|
6
6
|
:include => :person,
|
7
7
|
:limit => e_pages.items_per_page,
|
8
8
|
:offset => e_pages.current.offset) %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%e_pages = ActionController::Pagination::Paginator.new(
|
2
|
-
self, (@elt.rgt-@elt.lft-1)/2, LIST_LENGTH,
|
2
|
+
self, (@elt.rgt-@elt.lft-1)/2, LIST_LENGTH, params['page'])
|
3
3
|
elts = Elt.find :all,
|
4
4
|
:conditions => "lft > #{@elt.lft} AND rgt < #{@elt.rgt}",
|
5
5
|
:order => 'elts.created_on DESC',
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%e_pages = ActionController::Pagination::Paginator.new(
|
2
|
-
self, (@elt.rgt-@elt.lft-1)/2, LIST_LENGTH,
|
2
|
+
self, (@elt.rgt-@elt.lft-1)/2, LIST_LENGTH, params['page'])
|
3
3
|
elts = Elt.find :all,
|
4
4
|
:select => 'SUM(value) AS resultLocal, elts.id, parent_id, elts.created_on, parent_id,' \
|
5
5
|
+'elts_count, position, elts.person_id, subject, body, lft, rgt',
|
data/app/views/elt/new.rhtml
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
|
5
5
|
<%= error_messages_for 'elt' %>
|
6
6
|
|
7
|
-
|
7
|
+
<% form_remote_tag(
|
8
8
|
:update => 'eltSubs_'+@elt.parent_id,
|
9
9
|
:url => { :action => 'create', :id => @elt.parent },
|
10
10
|
:position => 'top',
|
11
11
|
:before => visual_effect(:BlindUp, 'eltNew_'+@elt.parent_id),
|
12
12
|
:loading => "Element.show('eltSubs_#{@elt.parent_id}');
|
13
|
-
Element.show('eltSubsClose_#{@elt.parent_id}')") %>
|
13
|
+
Element.show('eltSubsClose_#{@elt.parent_id}')") do %>
|
14
14
|
|
15
15
|
<%= hidden_field 'elt', 'parent_id' %>
|
16
16
|
|
@@ -81,7 +81,7 @@
|
|
81
81
|
|
82
82
|
<%= submit_tag 'Propose!' %>
|
83
83
|
</div>
|
84
|
-
|
84
|
+
<% end %>
|
85
85
|
|
86
86
|
<span class="elt" id="eltNewPreview_<%= @elt.parent_id %>"/>
|
87
87
|
|
data/app/views/elt/show.rhtml
CHANGED
@@ -32,14 +32,14 @@
|
|
32
32
|
<div class="box">
|
33
33
|
<form action="http://google.com/search">
|
34
34
|
<input type="hidden" name="q"
|
35
|
-
value="site:<%= ActionMailer::Base.
|
35
|
+
value="site:<%= ActionMailer::Base.smtp_settings[:domain] %>"/>
|
36
36
|
<input type="text" name="q"/>
|
37
37
|
<%= submit_tag 'OK' %>
|
38
38
|
</form>
|
39
39
|
</div>
|
40
40
|
</div>
|
41
41
|
|
42
|
-
<%
|
42
|
+
<% flash.each do |key, value| %>
|
43
43
|
<div class="<%= key %>"><%= value %></div>
|
44
44
|
<% end %>
|
45
45
|
|
data/app/views/layouts/top.rhtml
CHANGED
@@ -3,6 +3,12 @@
|
|
3
3
|
|
4
4
|
<html>
|
5
5
|
<head>
|
6
|
+
<META name="verify-v1" content="5f3d3AgFwXPbIg9jJA/vBU8lZEz8m/F9InWWVNeJWMU=" />
|
7
|
+
<META name="verify-v1" content="GQG8JPKekfUN1haTZYQRLP+PvKkH43Rg2HQ53OTLgTg=" />
|
8
|
+
<!-- For www.echarp.org -->
|
9
|
+
<META name="verify-v1" content="GQG8JPKekfUN1haTZYQRLP+PvKkH43Rg2HQ53OTLgTg=" />
|
10
|
+
<!-- echarp.dyndns.org -->
|
11
|
+
<META name="verify-v1" content="6espv1bly2noRX0tNze9x9In903DuzgvEzmAQdDw250=" />
|
6
12
|
<title><%= @title %></title>
|
7
13
|
|
8
14
|
<link rel="alternate" type="application/rss+xml" title="Latest Posts - <%= @title %>"
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title><%= @elt.subject %></title>
|
7
7
|
|
8
8
|
<!-- Yes I use the mail domain for lack of another variable :-( -->
|
9
|
-
<base href="http://<%= ActionMailer::Base.
|
9
|
+
<base href="http://<%= ActionMailer::Base.smtp_settings[:domain] %>"/>
|
10
10
|
|
11
11
|
<link href="/stylesheets/default.css" media="screen" rel="Stylesheet" type="text/css" />
|
12
12
|
<script src="/javascripts/prototype.js" type="text/javascript"></script>
|
@@ -1,7 +1,9 @@
|
|
1
1
|
<% e_pages = ActionController::Pagination::Paginator.new(
|
2
|
-
self, person.elts.count, PAGE_LENGTH,
|
3
|
-
|
4
|
-
'created_on DESC',
|
2
|
+
self, person.elts.count, PAGE_LENGTH, params['page'])
|
3
|
+
e = Elt.find(:all, :conditions => ["person_id = '#{person.id}'"],
|
4
|
+
:order => 'created_on DESC',
|
5
|
+
:limit => e_pages.items_per_page,
|
6
|
+
:offset => e_pages.current.offset) %>
|
5
7
|
|
6
8
|
<% if e_pages.length > 1 %>
|
7
9
|
<li class="pager">
|
data/app/views/person/show.rhtml
CHANGED
@@ -11,14 +11,13 @@
|
|
11
11
|
<div class="box">
|
12
12
|
<% for elt in @person.subscribed_elts.reverse[0...LIST_LENGTH] %>
|
13
13
|
<div class="boxLine">
|
14
|
-
<span class="choice result"><%= sprintf("%+d", elt.result) %></span>
|
15
14
|
<%= link_to(elt.subject.gsub(/\[.*\]/, ''), :controller => 'elt', :action => 'show', :id => elt) %>
|
15
|
+
<span class="choice result"><%= sprintf("%+d", elt.result) %></span>
|
16
16
|
</div>
|
17
17
|
<% end %>
|
18
18
|
</div>
|
19
19
|
</div>
|
20
20
|
|
21
|
-
|
22
21
|
<p class="created_on"><%= @person.created_on %></p>
|
23
22
|
|
24
23
|
<h1><%= @person.name %></h1>
|
data/config/boot.rb
CHANGED
@@ -22,20 +22,21 @@ unless defined?(Rails::Initializer)
|
|
22
22
|
rails_gem_version = $1
|
23
23
|
|
24
24
|
if version = defined?(RAILS_GEM_VERSION) ? RAILS_GEM_VERSION : rails_gem_version
|
25
|
-
|
25
|
+
# Asking for 1.1.6 will give you 1.1.6.5206, if available -- makes it easier to use beta gems
|
26
|
+
rails_gem = Gem.cache.search('rails', "~>#{version}.0").sort_by { |g| g.version.version }.last
|
26
27
|
|
27
28
|
if rails_gem
|
28
|
-
|
29
|
+
gem "rails", "=#{rails_gem.version.version}"
|
29
30
|
require rails_gem.full_gem_path + '/lib/initializer'
|
30
31
|
else
|
31
|
-
STDERR.puts %(Cannot find gem for Rails
|
32
|
+
STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
|
32
33
|
Install the missing gem with 'gem install -v=#{version} rails', or
|
33
34
|
change environment.rb to define RAILS_GEM_VERSION with your desired version.
|
34
35
|
)
|
35
36
|
exit 1
|
36
37
|
end
|
37
38
|
else
|
38
|
-
|
39
|
+
gem "rails"
|
39
40
|
require 'initializer'
|
40
41
|
end
|
41
42
|
end
|
data/config/environment.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Uncomment below to force Rails into production mode
|
4
4
|
# you don't control web/app server and can't set it the proper way
|
5
|
-
#
|
5
|
+
#ENV['RAILS_ENV'] ||= 'production'
|
6
6
|
|
7
7
|
# Bootstrap the Rails environment, frameworks, and default configuration
|
8
8
|
require File.join(File.dirname(__FILE__), 'boot')
|
@@ -83,7 +83,7 @@ CONFIG = { :default_language => 'en' }
|
|
83
83
|
|
84
84
|
# This variable is of course used for mails, but also in the html mail
|
85
85
|
# template, to set the base url for the generated html
|
86
|
-
ActionMailer::Base.
|
86
|
+
ActionMailer::Base.smtp_settings = {
|
87
87
|
:domain => 'leparlement.org'
|
88
88
|
}
|
89
89
|
|
@@ -96,6 +96,9 @@ ActionMailer::Base.server_settings = {
|
|
96
96
|
# :authentication => :login
|
97
97
|
#
|
98
98
|
|
99
|
+
require File.join(RAILS_ROOT, "vendor", "plugins", "engines", "lib", "engines",
|
100
|
+
"deprecated_config_support")
|
101
|
+
|
99
102
|
module LoginEngine
|
100
103
|
config :salt, 'parle'
|
101
104
|
config :email_from, 'facteur@leparlement.org'
|
@@ -104,9 +107,8 @@ module LoginEngine
|
|
104
107
|
config :app_name, 'parlement'
|
105
108
|
config :use_email_notification, true
|
106
109
|
end
|
107
|
-
Engines.start :login
|
108
110
|
|
109
111
|
Rubaidh::GoogleAnalytics.tracker_id = 'UA-317241-1'
|
110
112
|
|
111
|
-
PARLEMENT_VERSION='0.
|
113
|
+
PARLEMENT_VERSION='0.11'
|
112
114
|
|
data/config/routes.rb
CHANGED
@@ -14,8 +14,6 @@ ActionController::Routing::Routes.draw do |map|
|
|
14
14
|
map.connect 'index.rss', :controller => 'elt', :action => 'rss', :id => 'parlement'
|
15
15
|
map.connect 'vote.rss', :controller => 'elt', :action => 'vote_rss', :id => 'parlement'
|
16
16
|
|
17
|
-
map.connect ':id', :controller => 'elt', :action => 'rss', :requirements => { :id => /.*\.rss/ }
|
18
|
-
map.connect ':id', :controller => 'elt', :action => 'show'
|
19
17
|
map.connect ':id/index.rss', :controller => 'elt', :action => 'rss'
|
20
18
|
map.connect ':id/vote.rss', :controller => 'elt', :action => 'vote_rss'
|
21
19
|
map.connect ':id//index.rss', :controller => 'elt', :action => 'rss'
|
@@ -33,4 +31,7 @@ ActionController::Routing::Routes.draw do |map|
|
|
33
31
|
|
34
32
|
# Install the default route as the lowest priority.
|
35
33
|
map.connect ':controller/:action/:id'
|
34
|
+
|
35
|
+
map.connect ':id', :controller => 'elt', :action => 'rss', :requirements => { :id => /.*\.rss/ }
|
36
|
+
map.connect ':id', :controller => 'elt', :action => 'show'
|
36
37
|
end
|
@@ -85,7 +85,8 @@ CREATE TABLE elts (
|
|
85
85
|
body text,
|
86
86
|
lft integer,
|
87
87
|
rgt integer,
|
88
|
-
elts_count integer DEFAULT 0
|
88
|
+
elts_count integer DEFAULT 0,
|
89
|
+
last_activity timestamp without time zone
|
89
90
|
);
|
90
91
|
|
91
92
|
|
@@ -171,6 +172,16 @@ CREATE TABLE person_mails (
|
|
171
172
|
);
|
172
173
|
|
173
174
|
|
175
|
+
--
|
176
|
+
-- Name: plugin_schema_info; Type: TABLE; Schema: public; Owner: manu; Tablespace:
|
177
|
+
--
|
178
|
+
|
179
|
+
CREATE TABLE plugin_schema_info (
|
180
|
+
plugin_name character varying(255),
|
181
|
+
version integer
|
182
|
+
);
|
183
|
+
|
184
|
+
|
174
185
|
--
|
175
186
|
-- Name: schema_info; Type: TABLE; Schema: public; Owner: manu; Tablespace:
|
176
187
|
--
|
@@ -305,11 +316,11 @@ ALTER TABLE ONLY people
|
|
305
316
|
|
306
317
|
|
307
318
|
--
|
308
|
-
-- Name:
|
319
|
+
-- Name: person_mails_pkey; Type: CONSTRAINT; Schema: public; Owner: manu; Tablespace:
|
309
320
|
--
|
310
321
|
|
311
322
|
ALTER TABLE ONLY person_mails
|
312
|
-
ADD CONSTRAINT
|
323
|
+
ADD CONSTRAINT person_mails_pkey PRIMARY KEY (id);
|
313
324
|
|
314
325
|
|
315
326
|
--
|
@@ -448,4 +459,4 @@ ALTER TABLE ONLY choices
|
|
448
459
|
-- PostgreSQL database dump complete
|
449
460
|
--
|
450
461
|
|
451
|
-
INSERT INTO schema_info (version) VALUES (
|
462
|
+
INSERT INTO schema_info (version) VALUES (6)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class LastActivity < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :elts, :last_activity, :datetime
|
4
|
+
execute 'UPDATE elts SET last_activity = (SELECT MAX(created_on) FROM elts c WHERE elts.lft <= c.lft AND c.rgt <= elts.rgt)'
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_column :elts, :last_activity
|
9
|
+
end
|
10
|
+
end
|
data/db/schema.rb
CHANGED
@@ -2,88 +2,106 @@
|
|
2
2
|
# migrations feature of ActiveRecord to incrementally modify your database, and
|
3
3
|
# then regenerate this schema definition.
|
4
4
|
|
5
|
-
ActiveRecord::Schema.define(:version =>
|
5
|
+
ActiveRecord::Schema.define(:version => 6) do
|
6
6
|
|
7
7
|
create_table "attachments", :force => true do |t|
|
8
|
-
t.column "elt_id",
|
9
|
-
t.column "created_on",
|
8
|
+
t.column "elt_id", :text, :null => false
|
9
|
+
t.column "created_on", :datetime, :null => false
|
10
10
|
t.column "content_type", :text
|
11
|
-
t.column "file",
|
11
|
+
t.column "file", :text
|
12
12
|
end
|
13
13
|
|
14
|
-
create_table "choices", :
|
15
|
-
t.column "elt_id",
|
16
|
-
t.column "person_id",
|
17
|
-
t.column "created_on", :datetime,
|
14
|
+
create_table "choices", :force => true do |t|
|
15
|
+
t.column "elt_id", :string, :null => false
|
16
|
+
t.column "person_id", :string
|
17
|
+
t.column "created_on", :datetime, :null => false
|
18
|
+
t.column "value", :integer, :default => 1, :null => false
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
t.column "
|
24
|
-
t.column "
|
25
|
-
t.column "
|
21
|
+
add_index "choices", ["elt_id", "person_id"], :name => "elt_person_key", :unique => true
|
22
|
+
|
23
|
+
create_table "delegations", :force => true do |t|
|
24
|
+
t.column "elt_id", :text, :null => false
|
25
|
+
t.column "person_id", :text, :null => false
|
26
|
+
t.column "created_on", :datetime, :null => false
|
27
|
+
t.column "temporary", :boolean, :default => false, :null => false
|
28
|
+
t.column "delegate_to", :text, :null => false
|
26
29
|
end
|
27
30
|
|
28
31
|
create_table "elts", :force => true do |t|
|
29
|
-
t.column "parent_id",
|
30
|
-
t.column "position",
|
31
|
-
t.column "created_on",
|
32
|
-
t.column "person_id",
|
33
|
-
t.column "subject",
|
34
|
-
t.column "body",
|
32
|
+
t.column "parent_id", :text
|
33
|
+
t.column "position", :float
|
34
|
+
t.column "created_on", :datetime, :null => false
|
35
|
+
t.column "person_id", :text
|
36
|
+
t.column "subject", :text
|
37
|
+
t.column "body", :text
|
38
|
+
t.column "lft", :integer
|
39
|
+
t.column "rgt", :integer
|
40
|
+
t.column "elts_count", :integer, :default => 0
|
41
|
+
t.column "last_activity", :datetime
|
35
42
|
end
|
36
43
|
|
44
|
+
add_index "elts", ["parent_id"], :name => "elts_parent"
|
45
|
+
add_index "elts", ["parent_id"], :name => "elts_parent_key"
|
46
|
+
add_index "elts", ["lft"], :name => "lft"
|
47
|
+
add_index "elts", ["rgt"], :name => "rgt"
|
48
|
+
|
37
49
|
create_table "engine_schema_info", :id => false, :force => true do |t|
|
38
50
|
t.column "engine_name", :string
|
39
|
-
t.column "version",
|
51
|
+
t.column "version", :integer
|
40
52
|
end
|
41
53
|
|
42
54
|
create_table "mails", :force => true do |t|
|
43
|
-
t.column "elt_id",
|
44
|
-
t.column "message",
|
55
|
+
t.column "elt_id", :text, :null => false
|
56
|
+
t.column "message", :text
|
45
57
|
t.column "mail_parents", :text
|
46
|
-
t.column "file",
|
58
|
+
t.column "file", :text
|
47
59
|
end
|
48
60
|
|
49
61
|
create_table "people", :force => true do |t|
|
50
62
|
t.column "created_on", :datetime, :null => false
|
51
|
-
t.column "name",
|
52
|
-
t.column "email",
|
63
|
+
t.column "name", :text
|
64
|
+
t.column "email", :text
|
65
|
+
t.column "image", :text
|
53
66
|
end
|
54
67
|
|
55
68
|
add_index "people", ["name"], :name => "people_name_key", :unique => true
|
56
69
|
|
57
|
-
create_table "
|
58
|
-
t.column "
|
59
|
-
t.column "person_id",
|
70
|
+
create_table "person_mails", :force => true do |t|
|
71
|
+
t.column "mail_id", :string, :null => false
|
72
|
+
t.column "person_id", :string
|
73
|
+
t.column "created_on", :datetime, :null => false
|
74
|
+
end
|
75
|
+
|
76
|
+
create_table "subscriptions", :force => true do |t|
|
77
|
+
t.column "elt_id", :text, :null => false
|
78
|
+
t.column "person_id", :text, :null => false
|
79
|
+
t.column "filter", :integer, :default => 0
|
80
|
+
t.column "created_on", :datetime, :null => false
|
60
81
|
end
|
61
82
|
|
62
83
|
create_table "users", :force => true do |t|
|
63
|
-
t.column "login",
|
64
|
-
t.column "salted_password", :string,
|
65
|
-
t.column "email",
|
66
|
-
t.column "firstname",
|
67
|
-
t.column "lastname",
|
68
|
-
t.column "salt",
|
69
|
-
t.column "verified",
|
70
|
-
t.column "role",
|
71
|
-
t.column "security_token",
|
72
|
-
t.column "token_expiry",
|
73
|
-
t.column "
|
74
|
-
t.column "
|
75
|
-
t.column "logged_in_at", :datetime
|
76
|
-
t.column "deleted", :integer, :default => 0
|
77
|
-
t.column "delete_after", :datetime
|
84
|
+
t.column "login", :text, :null => false
|
85
|
+
t.column "salted_password", :string, :limit => 40, :null => false
|
86
|
+
t.column "email", :string, :limit => 60
|
87
|
+
t.column "firstname", :string, :limit => 40
|
88
|
+
t.column "lastname", :string, :limit => 40
|
89
|
+
t.column "salt", :string, :limit => 40, :null => false
|
90
|
+
t.column "verified", :integer, :default => 0
|
91
|
+
t.column "role", :string, :limit => 40
|
92
|
+
t.column "security_token", :string, :limit => 40
|
93
|
+
t.column "token_expiry", :datetime
|
94
|
+
t.column "deleted", :integer, :default => 0
|
95
|
+
t.column "delete_after", :datetime
|
78
96
|
end
|
79
97
|
|
80
98
|
create_table "usersold", :force => true do |t|
|
81
|
-
t.column "person_id",
|
99
|
+
t.column "person_id", :text, :null => false
|
82
100
|
t.column "salted_password", :text
|
83
|
-
t.column "salt",
|
84
|
-
t.column "verified",
|
85
|
-
t.column "new_email",
|
86
|
-
t.column "security_token",
|
101
|
+
t.column "salt", :text
|
102
|
+
t.column "verified", :integer, :default => 0
|
103
|
+
t.column "new_email", :text
|
104
|
+
t.column "security_token", :text
|
87
105
|
end
|
88
106
|
|
89
107
|
add_index "usersold", ["person_id"], :name => "usersold_person_id_key", :unique => true
|
data/public/dispatch.fcgi
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
2
|
-
// (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
|
3
|
-
// (c) 2005 Jon Tirsen (http://www.tirsen.com)
|
1
|
+
// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
2
|
+
// (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
|
3
|
+
// (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
|
4
4
|
// Contributors:
|
5
5
|
// Richard Livsey
|
6
6
|
// Rahul Bhargava
|
7
7
|
// Rob Wills
|
8
8
|
//
|
9
|
-
//
|
9
|
+
// script.aculo.us is freely distributable under the terms of an MIT-style license.
|
10
|
+
// For details, see the script.aculo.us web site: http://script.aculo.us/
|
10
11
|
|
11
12
|
// Autocompleter.Base handles all the autocompletion functionality
|
12
13
|
// that's independent of the data source for autocompletion. This
|
@@ -33,6 +34,9 @@
|
|
33
34
|
// useful when one of the tokens is \n (a newline), as it
|
34
35
|
// allows smart autocompletion after linebreaks.
|
35
36
|
|
37
|
+
if(typeof Effect == 'undefined')
|
38
|
+
throw("controls.js requires including script.aculo.us' effects.js library");
|
39
|
+
|
36
40
|
var Autocompleter = {}
|
37
41
|
Autocompleter.Base = function() {};
|
38
42
|
Autocompleter.Base.prototype = {
|
@@ -45,7 +49,7 @@ Autocompleter.Base.prototype = {
|
|
45
49
|
this.index = 0;
|
46
50
|
this.entryCount = 0;
|
47
51
|
|
48
|
-
if
|
52
|
+
if(this.setOptions)
|
49
53
|
this.setOptions(options);
|
50
54
|
else
|
51
55
|
this.options = options || {};
|
@@ -55,17 +59,20 @@ Autocompleter.Base.prototype = {
|
|
55
59
|
this.options.frequency = this.options.frequency || 0.4;
|
56
60
|
this.options.minChars = this.options.minChars || 1;
|
57
61
|
this.options.onShow = this.options.onShow ||
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
function(element, update){
|
63
|
+
if(!update.style.position || update.style.position=='absolute') {
|
64
|
+
update.style.position = 'absolute';
|
65
|
+
Position.clone(element, update, {
|
66
|
+
setHeight: false,
|
67
|
+
offsetTop: element.offsetHeight
|
68
|
+
});
|
69
|
+
}
|
70
|
+
Effect.Appear(update,{duration:0.15});
|
71
|
+
};
|
65
72
|
this.options.onHide = this.options.onHide ||
|
66
|
-
|
73
|
+
function(element, update){ new Effect.Fade(update,{duration:0.15}) };
|
67
74
|
|
68
|
-
if
|
75
|
+
if(typeof(this.options.tokens) == 'string')
|
69
76
|
this.options.tokens = new Array(this.options.tokens);
|
70
77
|
|
71
78
|
this.observer = null;
|
@@ -94,7 +101,7 @@ Autocompleter.Base.prototype = {
|
|
94
101
|
},
|
95
102
|
|
96
103
|
fixIEOverlapping: function() {
|
97
|
-
Position.clone(this.update, this.iefix);
|
104
|
+
Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
|
98
105
|
this.iefix.style.zIndex = 1;
|
99
106
|
this.update.style.zIndex = 2;
|
100
107
|
Element.show(this.iefix);
|
@@ -202,11 +209,13 @@ Autocompleter.Base.prototype = {
|
|
202
209
|
markPrevious: function() {
|
203
210
|
if(this.index > 0) this.index--
|
204
211
|
else this.index = this.entryCount-1;
|
212
|
+
this.getEntry(this.index).scrollIntoView(true);
|
205
213
|
},
|
206
214
|
|
207
215
|
markNext: function() {
|
208
216
|
if(this.index < this.entryCount-1) this.index++
|
209
217
|
else this.index = 0;
|
218
|
+
this.getEntry(this.index).scrollIntoView(false);
|
210
219
|
},
|
211
220
|
|
212
221
|
getEntry: function(index) {
|
@@ -254,11 +263,11 @@ Autocompleter.Base.prototype = {
|
|
254
263
|
if(!this.changed && this.hasFocus) {
|
255
264
|
this.update.innerHTML = choices;
|
256
265
|
Element.cleanWhitespace(this.update);
|
257
|
-
Element.cleanWhitespace(this.update.
|
266
|
+
Element.cleanWhitespace(this.update.down());
|
258
267
|
|
259
|
-
if(this.update.firstChild && this.update.
|
268
|
+
if(this.update.firstChild && this.update.down().childNodes) {
|
260
269
|
this.entryCount =
|
261
|
-
this.update.
|
270
|
+
this.update.down().childNodes.length;
|
262
271
|
for (var i = 0; i < this.entryCount; i++) {
|
263
272
|
var entry = this.getEntry(i);
|
264
273
|
entry.autocompleteIndex = i;
|
@@ -269,9 +278,14 @@ Autocompleter.Base.prototype = {
|
|
269
278
|
}
|
270
279
|
|
271
280
|
this.stopIndicator();
|
272
|
-
|
273
281
|
this.index = 0;
|
274
|
-
|
282
|
+
|
283
|
+
if(this.entryCount==1 && this.options.autoSelect) {
|
284
|
+
this.selectEntry();
|
285
|
+
this.hide();
|
286
|
+
} else {
|
287
|
+
this.render();
|
288
|
+
}
|
275
289
|
}
|
276
290
|
},
|
277
291
|
|
@@ -459,6 +473,7 @@ Ajax.InPlaceEditor.prototype = {
|
|
459
473
|
this.element = $(element);
|
460
474
|
|
461
475
|
this.options = Object.extend({
|
476
|
+
paramName: "value",
|
462
477
|
okButton: true,
|
463
478
|
okText: "ok",
|
464
479
|
cancelLink: true,
|
@@ -531,7 +546,7 @@ Ajax.InPlaceEditor.prototype = {
|
|
531
546
|
Element.hide(this.element);
|
532
547
|
this.createForm();
|
533
548
|
this.element.parentNode.insertBefore(this.form, this.element);
|
534
|
-
Field.scrollFreeActivate(this.editField);
|
549
|
+
if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
|
535
550
|
// stop the event to avoid a page refresh in Safari
|
536
551
|
if (evt) {
|
537
552
|
Event.stop(evt);
|
@@ -590,7 +605,7 @@ Ajax.InPlaceEditor.prototype = {
|
|
590
605
|
var textField = document.createElement("input");
|
591
606
|
textField.obj = this;
|
592
607
|
textField.type = "text";
|
593
|
-
textField.name =
|
608
|
+
textField.name = this.options.paramName;
|
594
609
|
textField.value = text;
|
595
610
|
textField.style.backgroundColor = this.options.highlightcolor;
|
596
611
|
textField.className = 'editor_field';
|
@@ -603,7 +618,7 @@ Ajax.InPlaceEditor.prototype = {
|
|
603
618
|
this.options.textarea = true;
|
604
619
|
var textArea = document.createElement("textarea");
|
605
620
|
textArea.obj = this;
|
606
|
-
textArea.name =
|
621
|
+
textArea.name = this.options.paramName;
|
607
622
|
textArea.value = this.convertHTMLLineBreaks(text);
|
608
623
|
textArea.rows = this.options.rows;
|
609
624
|
textArea.cols = this.options.cols || 40;
|
@@ -636,6 +651,7 @@ Ajax.InPlaceEditor.prototype = {
|
|
636
651
|
Element.removeClassName(this.form, this.options.loadingClassName);
|
637
652
|
this.editField.disabled = false;
|
638
653
|
this.editField.value = transport.responseText.stripTags();
|
654
|
+
Field.scrollFreeActivate(this.editField);
|
639
655
|
},
|
640
656
|
onclickCancel: function() {
|
641
657
|
this.onComplete();
|
@@ -772,6 +788,8 @@ Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
|
|
772
788
|
collection.each(function(e,i) {
|
773
789
|
optionTag = document.createElement("option");
|
774
790
|
optionTag.value = (e instanceof Array) ? e[0] : e;
|
791
|
+
if((typeof this.options.value == 'undefined') &&
|
792
|
+
((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
|
775
793
|
if(this.options.value==optionTag.value) optionTag.selected = true;
|
776
794
|
optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
|
777
795
|
selectTag.appendChild(optionTag);
|