fine_print 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +124 -0
- data/Rakefile +23 -0
- data/app/assets/javascripts/fine_print/agreements.js +19 -0
- data/app/assets/javascripts/fine_print/agreements.js~ +19 -0
- data/app/assets/javascripts/fine_print/application.js +4 -0
- data/app/assets/javascripts/fine_print/application.js~ +5 -0
- data/app/assets/javascripts/fine_print/dialog.js +2 -0
- data/app/assets/javascripts/fine_print/dialog.js~ +2 -0
- data/app/assets/javascripts/fine_print/user_agreements.js +20 -0
- data/app/assets/javascripts/fine_print/user_agreements.js~ +20 -0
- data/app/assets/stylesheets/fine_print/agreements.css +11 -0
- data/app/assets/stylesheets/fine_print/agreements.css~ +11 -0
- data/app/assets/stylesheets/fine_print/application.css +5 -0
- data/app/assets/stylesheets/fine_print/application.css~ +60 -0
- data/app/assets/stylesheets/fine_print/scaffold.css +56 -0
- data/app/assets/stylesheets/fine_print/user_agreements.css~ +3 -0
- data/app/assets/stylesheets/scaffold.css~ +56 -0
- data/app/controllers/fine_print/agreements_controller.rb +114 -0
- data/app/controllers/fine_print/agreements_controller.rb~ +113 -0
- data/app/controllers/fine_print/application_controller.rb +13 -0
- data/app/controllers/fine_print/application_controller.rb~ +13 -0
- data/app/controllers/fine_print/home_controller.rb +14 -0
- data/app/controllers/fine_print/home_controller.rb~ +15 -0
- data/app/controllers/fine_print/user_agreements_controller.rb +63 -0
- data/app/controllers/fine_print/user_agreements_controller.rb~ +63 -0
- data/app/models/fine_print/agreement.rb +50 -0
- data/app/models/fine_print/agreement.rb~ +50 -0
- data/app/models/fine_print/user_agreement.rb +19 -0
- data/app/models/fine_print/user_agreement.rb~ +21 -0
- data/app/views/fine_print/agreements/_agreement.html.erb +77 -0
- data/app/views/fine_print/agreements/_agreement.html.erb~ +77 -0
- data/app/views/fine_print/agreements/_dialog.html.erb +27 -0
- data/app/views/fine_print/agreements/_dialog.html.erb~ +27 -0
- data/app/views/fine_print/agreements/_form.html.erb +51 -0
- data/app/views/fine_print/agreements/_form.html.erb~ +51 -0
- data/app/views/fine_print/agreements/edit.html.erb +8 -0
- data/app/views/fine_print/agreements/edit.html.erb~ +8 -0
- data/app/views/fine_print/agreements/index.html.erb +32 -0
- data/app/views/fine_print/agreements/index.html.erb~ +32 -0
- data/app/views/fine_print/agreements/new.html.erb +7 -0
- data/app/views/fine_print/agreements/new.html.erb~ +7 -0
- data/app/views/fine_print/agreements/new_version.html.erb +7 -0
- data/app/views/fine_print/agreements/new_version.html.erb~ +7 -0
- data/app/views/fine_print/agreements/show.html.erb +15 -0
- data/app/views/fine_print/agreements/show.html.erb~ +14 -0
- data/app/views/fine_print/home/index.html.erb +7 -0
- data/app/views/fine_print/home/index.html.erb~ +7 -0
- data/app/views/fine_print/user_agreements/cancel.js.erb +1 -0
- data/app/views/fine_print/user_agreements/cancel.js.erb~ +2 -0
- data/app/views/fine_print/user_agreements/create.js.erb +2 -0
- data/app/views/fine_print/user_agreements/create.js.erb~ +2 -0
- data/app/views/fine_print/user_agreements/index.html.erb +25 -0
- data/app/views/fine_print/user_agreements/index.html.erb~ +25 -0
- data/app/views/layouts/fine_print/application.html.erb +14 -0
- data/config/initializers/fine_print.rb +53 -0
- data/config/initializers/fine_print.rb~ +53 -0
- data/config/routes.rb +7 -0
- data/config/routes.rb~ +7 -0
- data/db/migrate/0_create_fine_print_agreements.rb~ +22 -0
- data/db/migrate/0_install.rb +28 -0
- data/db/migrate/0_install.rb~ +28 -0
- data/lib/fine_print/agreements_helper.rb +13 -0
- data/lib/fine_print/agreements_helper.rb~ +11 -0
- data/lib/fine_print/engine.rb +5 -0
- data/lib/fine_print/fine_print_agreement.rb +26 -0
- data/lib/fine_print/fine_print_agreement.rb~ +26 -0
- data/lib/fine_print/require_agreement.rb~ +22 -0
- data/lib/fine_print/security_transgression.rb +4 -0
- data/lib/fine_print/security_transgression.rb~ +3 -0
- data/lib/fine_print/version.rb +3 -0
- data/lib/fine_print/version.rb~ +3 -0
- data/lib/fine_print.rb +69 -0
- data/lib/fine_print.rb~ +68 -0
- data/lib/tasks/fine_print_tasks.rake +42 -0
- data/lib/tasks/fine_print_tasks.rake~ +85 -0
- data/spec/dummy/README.md +3 -0
- data/spec/dummy/README.md~ +3 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +36 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +41 -0
- data/spec/dummy/log/test.log +3 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/fine_print_spec.rb +7 -0
- data/spec/fine_print_spec.rb~ +7 -0
- data/spec/minitest_helper.rb +12 -0
- metadata +277 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2013 Rice University
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# FinePrint
|
2
|
+
|
3
|
+
FinePrint is a Rails gem that makes managing web site agreements (terms, privacy policy, etc) simple and easy.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```rb
|
10
|
+
gem 'fine_print'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```sh
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself:
|
20
|
+
|
21
|
+
```sh
|
22
|
+
$ gem install fine_print
|
23
|
+
```
|
24
|
+
|
25
|
+
Then execute the following command to copy the necessary migration and the initializer to your application:
|
26
|
+
|
27
|
+
```sh
|
28
|
+
$ rake fine_print:install
|
29
|
+
```
|
30
|
+
|
31
|
+
And then migrate your database:
|
32
|
+
|
33
|
+
```sh
|
34
|
+
$ rake db:migrate
|
35
|
+
```
|
36
|
+
|
37
|
+
Also add FinePrint to your application's routes:
|
38
|
+
|
39
|
+
```rb
|
40
|
+
mount FinePrint::Engine => "/fine_print"
|
41
|
+
```
|
42
|
+
|
43
|
+
And provide a link on your site for administrators to access the fine_print engine to manage agreements.
|
44
|
+
|
45
|
+
```erb
|
46
|
+
<%= link_to 'FinePrint', fine_print_path %>
|
47
|
+
```
|
48
|
+
|
49
|
+
Finally, make sure your `application.js` requires jquery and jquery_ujs (it usually does by default):
|
50
|
+
|
51
|
+
```js
|
52
|
+
//= require jquery
|
53
|
+
//= require jquery_ujs
|
54
|
+
```
|
55
|
+
|
56
|
+
**Note:** FinePrint will **automatically** add the fine_print/dialog.js file to your asset precompilation list.
|
57
|
+
|
58
|
+
## Configuration
|
59
|
+
|
60
|
+
After installation, the initializer for FinePrint will be located under `config/initializers/fine_print.rb`.
|
61
|
+
Make sure to configure it to suit your needs.
|
62
|
+
Pay particular attention to `user_admin_proc`, as you will be unable to manage your agreements unless you set up this proc to return true for your admins.
|
63
|
+
|
64
|
+
If you want to use FinePrint's modal dialogs, then make sure `application.js` also requires jquery-ui:
|
65
|
+
|
66
|
+
```js
|
67
|
+
//= require jquery-ui
|
68
|
+
```
|
69
|
+
|
70
|
+
## Usage
|
71
|
+
|
72
|
+
FinePrint adds a new method to all controllers that behaves like a before_filter.
|
73
|
+
It can be accessed by calling `fine_print_agreement` from any controller.
|
74
|
+
This method takes an agreement name and an options hash.
|
75
|
+
Accepted options are (see initializer for more explanation):
|
76
|
+
|
77
|
+
- `only` and `except` just like a before_filter
|
78
|
+
|
79
|
+
- `agreement_notice` notice to be shown to the user above the agreement
|
80
|
+
|
81
|
+
- `accept_path` path to redirect users to when an agreement is accepted and no referer information is available
|
82
|
+
- `cancel_path` path to redirect users to when an agreement is not accepted and no referer information is available
|
83
|
+
- `use_referers` false if you want users to always be redirected to the above paths
|
84
|
+
|
85
|
+
- `use_modal_dialogs` true if you want to use FinePrint's modal dialogs
|
86
|
+
|
87
|
+
Example:
|
88
|
+
|
89
|
+
```rb
|
90
|
+
fine_print_agreement 'terms of use', :except => :index, :use_modal_dialogs => true
|
91
|
+
```
|
92
|
+
|
93
|
+
This gem also adds the `fine_print_dialog` helper method, which needs to be called (usually from your layout) if you want to use FinePrint's modal dialogs.
|
94
|
+
This method only takes an options hash. Accepted options are:
|
95
|
+
|
96
|
+
- `width`
|
97
|
+
- `height`
|
98
|
+
|
99
|
+
Example:
|
100
|
+
|
101
|
+
```erb
|
102
|
+
<%= fine_print_dialog, :width => 800, :height => 600 %>
|
103
|
+
```
|
104
|
+
|
105
|
+
## Managing Agreements
|
106
|
+
|
107
|
+
Here are some important notes about managing your agreements with FinePrint:
|
108
|
+
|
109
|
+
- Agreements are referred to on your controller by the name you specified
|
110
|
+
- Creating another agreement with the same name will make it a new version of a previous agreement
|
111
|
+
- Agreements need to be marked as `ready` to be able to be accepted by users
|
112
|
+
- The latest version of each agreement that is marked as `ready` will always be used
|
113
|
+
- Agreements cannot be modified after at least one user has accepted them, but you can always create new versions
|
114
|
+
- When a new version is present, users will be asked to accept it the next time they visit a controller action that calls `fine_print_agreement`
|
115
|
+
|
116
|
+
## Contributing
|
117
|
+
|
118
|
+
1. Fork it
|
119
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
120
|
+
3. Create specs for your feature
|
121
|
+
4. Ensure that all specs pass
|
122
|
+
5. Commit your changes (`git commit -am 'Add some feature'`)
|
123
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
124
|
+
7. Create new pull request
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
|
8
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
9
|
+
load 'rails/tasks/engine.rake'
|
10
|
+
|
11
|
+
Bundler::GemHelper.install_tasks
|
12
|
+
|
13
|
+
require 'rake/testtask'
|
14
|
+
|
15
|
+
Rake::TestTask.new(:test => 'app:db:test:prepare') do |t|
|
16
|
+
t.libs << 'lib'
|
17
|
+
t.libs << 'spec'
|
18
|
+
t.pattern = 'spec/**/*_spec.rb'
|
19
|
+
t.verbose = false
|
20
|
+
end
|
21
|
+
|
22
|
+
task :default => :test
|
23
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
function fine_print_agreement_checkbox(index) {
|
2
|
+
var checkbox = $("#fine_print_confirmation_checkbox_" + index);
|
3
|
+
if (!checkbox) {
|
4
|
+
return;
|
5
|
+
}
|
6
|
+
checkbox.change(function() {
|
7
|
+
$("#fine_print_submit_ok_" + index).attr("disabled", !this.checked);
|
8
|
+
try {
|
9
|
+
if (this.checked) {
|
10
|
+
$("#fine_print_submit_ok_" + index).button("enable");
|
11
|
+
}
|
12
|
+
else {
|
13
|
+
$("#fine_print_submit_ok_" + index).button("disable");
|
14
|
+
}
|
15
|
+
}
|
16
|
+
catch(e) {}
|
17
|
+
});
|
18
|
+
$("#fine_print_submit_ok_" + index).attr("disabled", !checkbox.checked);
|
19
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
function fine_print_agreement_checkbox(index) {
|
2
|
+
var checkbox = $("#fine_print_confirmation_checkbox_" + index);
|
3
|
+
if (!checkbox) {
|
4
|
+
return;
|
5
|
+
}
|
6
|
+
checkbox.change(function() {
|
7
|
+
$("#fine_print_submit_ok_" + index).attr("disabled", !this.checked);
|
8
|
+
try {
|
9
|
+
if (this.checked) {
|
10
|
+
$("#fine_print_submit_ok_" + index).button("enable");
|
11
|
+
}
|
12
|
+
else {
|
13
|
+
$("#fine_print_submit_ok_" + index).button("disable");
|
14
|
+
}
|
15
|
+
}
|
16
|
+
catch (e) {}
|
17
|
+
});
|
18
|
+
$("#fine_print_submit_ok_" + index).attr("disabled", !checkbox.checked);
|
19
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
function fine_print_init_dialog(index, width, height) {
|
2
|
+
$("#fine_print_dialog_" + index).dialog({
|
3
|
+
autoOpen: false,
|
4
|
+
draggable: false,
|
5
|
+
modal: true,
|
6
|
+
resizable: false,
|
7
|
+
width: width,
|
8
|
+
height: height
|
9
|
+
}).on("dialogbeforeclose", function(event, ui) {
|
10
|
+
window.history.back();
|
11
|
+
return false;
|
12
|
+
});
|
13
|
+
}
|
14
|
+
|
15
|
+
$(function () {
|
16
|
+
try {
|
17
|
+
$("#fine_print_dialog_0").dialog("open");
|
18
|
+
}
|
19
|
+
catch(e) {}
|
20
|
+
});
|
@@ -0,0 +1,20 @@
|
|
1
|
+
function fine_print_init_dialog(index, width, height) {
|
2
|
+
$("#fine_print_dialog_" + index).dialog({
|
3
|
+
autoOpen: false,
|
4
|
+
draggable: false,
|
5
|
+
modal: true,
|
6
|
+
resizable: false,
|
7
|
+
width: 640,
|
8
|
+
height: 480
|
9
|
+
}).on("dialogbeforeclose", function(event, ui) {
|
10
|
+
window.history.back();
|
11
|
+
return false;
|
12
|
+
});
|
13
|
+
}
|
14
|
+
|
15
|
+
$(function () {
|
16
|
+
try {
|
17
|
+
$("#fine_print_dialog_0").dialog("open");
|
18
|
+
}
|
19
|
+
catch(e) {}
|
20
|
+
});
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/*
|
2
|
+
*= require_self
|
3
|
+
*= require_tree .
|
4
|
+
*/
|
5
|
+
body { background-color: #fff; color: #333; }
|
6
|
+
|
7
|
+
body, p, ol, ul, td {
|
8
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
9
|
+
font-size: 13px;
|
10
|
+
line-height: 18px;
|
11
|
+
}
|
12
|
+
|
13
|
+
pre {
|
14
|
+
background-color: #eee;
|
15
|
+
padding: 10px;
|
16
|
+
font-size: 11px;
|
17
|
+
}
|
18
|
+
|
19
|
+
a { color: #000; }
|
20
|
+
a:visited { color: #666; }
|
21
|
+
a:hover { color: #fff; background-color:#000; }
|
22
|
+
|
23
|
+
div.field, div.actions {
|
24
|
+
margin-bottom: 10px;
|
25
|
+
}
|
26
|
+
|
27
|
+
#notice {
|
28
|
+
color: green;
|
29
|
+
}
|
30
|
+
|
31
|
+
.field_with_errors {
|
32
|
+
padding: 2px;
|
33
|
+
background-color: red;
|
34
|
+
display: table;
|
35
|
+
}
|
36
|
+
|
37
|
+
#error_explanation {
|
38
|
+
width: 450px;
|
39
|
+
border: 2px solid red;
|
40
|
+
padding: 7px;
|
41
|
+
padding-bottom: 0;
|
42
|
+
margin-bottom: 20px;
|
43
|
+
background-color: #f0f0f0;
|
44
|
+
}
|
45
|
+
|
46
|
+
#error_explanation h2 {
|
47
|
+
text-align: left;
|
48
|
+
font-weight: bold;
|
49
|
+
padding: 5px 5px 5px 15px;
|
50
|
+
font-size: 12px;
|
51
|
+
margin: -7px;
|
52
|
+
margin-bottom: 0px;
|
53
|
+
background-color: #c00;
|
54
|
+
color: #fff;
|
55
|
+
}
|
56
|
+
|
57
|
+
#error_explanation ul li {
|
58
|
+
font-size: 12px;
|
59
|
+
list-style: square;
|
60
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require_dependency "fine_print/application_controller"
|
2
|
+
|
3
|
+
module FinePrint
|
4
|
+
class AgreementsController < ApplicationController
|
5
|
+
# GET /agreements
|
6
|
+
# GET /agreements.json
|
7
|
+
def index
|
8
|
+
raise SecurityTransgression unless Agreement.can_be_listed_by?(@user)
|
9
|
+
@agreements = Agreement.all
|
10
|
+
|
11
|
+
respond_to do |format|
|
12
|
+
format.html # index.html.erb
|
13
|
+
format.json { render json: @agreements }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /agreements/1
|
18
|
+
# GET /agreements/1.json
|
19
|
+
def show
|
20
|
+
@agreement = Agreement.find(params[:id])
|
21
|
+
raise SecurityTransgression unless @agreement.can_be_read_by?(@user)
|
22
|
+
@user_agreement = UserAgreement.new(:agreement => @agreement) if @agreement.can_be_accepted_by?(@user)
|
23
|
+
@accept_path = session.delete(:fine_print_accept_path)
|
24
|
+
@cancel_path = session.delete(:fine_print_cancel_path)
|
25
|
+
@url = session.delete(:fine_print_request_url)
|
26
|
+
@ref = session.delete(:fine_print_request_ref)
|
27
|
+
|
28
|
+
respond_to do |format|
|
29
|
+
format.html # show.html.erb
|
30
|
+
format.json { render json: @agreement }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# GET /agreements/new
|
35
|
+
# GET /agreements/new.json
|
36
|
+
def new
|
37
|
+
@agreement = Agreement.new
|
38
|
+
raise SecurityTransgression unless @agreement.can_be_created_by?(@user)
|
39
|
+
|
40
|
+
respond_to do |format|
|
41
|
+
format.html # new.html.erb
|
42
|
+
format.json { render json: @agreement }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# GET /agreements/1/edit
|
47
|
+
def edit
|
48
|
+
@agreement = Agreement.find(params[:id])
|
49
|
+
raise SecurityTransgression unless @agreement.can_be_edited_by?(@user)
|
50
|
+
end
|
51
|
+
|
52
|
+
# GET /agreements/1/new_version
|
53
|
+
def new_version
|
54
|
+
@agreement = Agreement.find(params[:agreement_id]).dup
|
55
|
+
raise SecurityTransgression unless @agreement.can_be_created_by?(@user)
|
56
|
+
|
57
|
+
respond_to do |format|
|
58
|
+
format.html # new_version.html.erb
|
59
|
+
format.json { render json: @agreement }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# POST /agreements
|
64
|
+
# POST /agreements.json
|
65
|
+
def create
|
66
|
+
@agreement = Agreement.new(params[:agreement])
|
67
|
+
raise SecurityTransgression unless @agreement.can_be_created_by?(@user)
|
68
|
+
@agreement.version = Agreement.next_version(@agreement.name)
|
69
|
+
|
70
|
+
respond_to do |format|
|
71
|
+
if @agreement.save
|
72
|
+
format.html { redirect_to @agreement, notice: 'Agreement was successfully created.' }
|
73
|
+
format.json { render json: @agreement, status: :created, location: @agreement }
|
74
|
+
else
|
75
|
+
format.html { render action: "new" }
|
76
|
+
format.json { render json: @agreement.errors, status: :unprocessable_entity }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# PUT /agreements/1
|
82
|
+
# PUT /agreements/1.json
|
83
|
+
def update
|
84
|
+
@agreement = Agreement.find(params[:id])
|
85
|
+
raise SecurityTransgression unless @agreement.can_be_edited_by?(@user)
|
86
|
+
if params[:agreement][:name].try(:downcase) != @agreement.name.downcase
|
87
|
+
params[:agreement][:version] = Agreement.next_version(params[:agreement][:name])
|
88
|
+
end
|
89
|
+
|
90
|
+
respond_to do |format|
|
91
|
+
if @agreement.update_attributes(params[:agreement])
|
92
|
+
format.html { redirect_to @agreement, notice: 'Agreement was successfully updated.' }
|
93
|
+
format.json { head :no_content }
|
94
|
+
else
|
95
|
+
format.html { render action: "edit" }
|
96
|
+
format.json { render json: @agreement.errors, status: :unprocessable_entity }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# DELETE /agreements/1
|
102
|
+
# DELETE /agreements/1.json
|
103
|
+
def destroy
|
104
|
+
@agreement = Agreement.find(params[:id])
|
105
|
+
raise SecurityTransgression unless @agreement.can_be_destroyed_by?(@user)
|
106
|
+
@agreement.destroy
|
107
|
+
|
108
|
+
respond_to do |format|
|
109
|
+
format.html { redirect_to agreements_url }
|
110
|
+
format.json { head :no_content }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|