Commit 553a5c2f5513bcfc1f1fe366c47e5219af21d7bf
Exists in
staging
and in
4 other branches
Merge branch 'staging' into login-captcha
Showing
1497 changed files
with
19942 additions
and
65211 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 1497 files displayed.
.gitlab-ci.yml
1 | +image: noosfero/ci | |
2 | + | |
1 | 3 | before_script: |
2 | - - mkdir -p tmp/{pids,cache} log | |
3 | - - bundle check || bundle install | |
4 | -# workaround for plugins with Gemfile | |
5 | - - perl -pi -e 's/--local //' script/noosfero-plugins | |
6 | - - script/noosfero-plugins disableall | |
7 | - - bundle exec rake makemo &>/dev/null | |
8 | -# database | |
9 | - - cp config/database.yml.gitlab-ci config/database.yml | |
10 | - - createdb gitlab_ci_test || true | |
11 | - - bundle exec rake db:schema:load &>/dev/null | |
12 | - - bundle exec rake db:migrate &>/dev/null | |
4 | + - mkdir -p locale # makes quick-start skip compiling translations | |
5 | + - ./script/silent-quick-start | |
13 | 6 | |
14 | 7 | units: |
15 | 8 | script: bundle exec rake test:units | ... | ... |
.gitmodules
... | ... | @@ -34,3 +34,6 @@ |
34 | 34 | [submodule "plugins/serpro_captcha"] |
35 | 35 | path = plugins/serpro_captcha |
36 | 36 | url = https://softwarepublico.gov.br/gitlab/noosfero-plugins/serpro_captcha.git |
37 | +[submodule "plugins/insight"] | |
38 | + path = plugins/insight | |
39 | + url = https://softwarepublico.gov.br/gitlab/noosfero-plugins/insight.git | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +ruby-2.2.1@noosfero | ... | ... |
.travis.yml
... | ... | @@ -8,8 +8,7 @@ notifications: |
8 | 8 | |
9 | 9 | language: ruby |
10 | 10 | rvm: |
11 | -# for 2.2 support we need to upgrade the pg gem | |
12 | - - 2.1.6 | |
11 | + - 2.2.3 | |
13 | 12 | |
14 | 13 | sudo: false |
15 | 14 | addons: |
... | ... | @@ -26,19 +25,16 @@ addons: |
26 | 25 | - libsqlite3-dev |
27 | 26 | - libxslt1-dev |
28 | 27 | |
29 | -before_install: | |
30 | - - gem env | |
31 | - | |
32 | 28 | # workaround for https://github.com/travis-ci/travis-ci/issues/4536 |
33 | 29 | before_install: |
34 | - - export GEM_HOME=$PWD/vendor/bundle/ruby/2.1.0 | |
30 | + - export GEM_HOME=$PWD/vendor/bundle/ruby/2.2.0 | |
35 | 31 | - gem install bundler |
36 | 32 | cache: bundler |
37 | 33 | |
38 | 34 | before_script: |
39 | 35 | - mkdir -p tmp/{pids,cache} log |
40 | 36 | - script/noosfero-plugins disableall |
41 | - - bundle exec rake makemo &>/dev/null | |
37 | + #- bundle exec rake makemo &>/dev/null | |
42 | 38 | # database |
43 | 39 | - cp config/database.yml.travis config/database.yml |
44 | 40 | - psql -c 'create database myapp_test;' -U postgres |
... | ... | @@ -49,7 +45,7 @@ env: |
49 | 45 | - TASK=test:units |
50 | 46 | - TASK=test:functionals |
51 | 47 | - TASK=test:integration |
52 | - - TASK=cucumber | |
48 | + - TASK=cucumber LANG=en | |
53 | 49 | - TASK=selenium |
54 | 50 | - TASK=test:noosfero_plugins BUNDLE_OPTS=install |
55 | 51 | ... | ... |
Gemfile
1 | 1 | source "https://rubygems.org" |
2 | -gem 'rails', '~> 3.2.22' | |
3 | -gem 'minitest', '~> 3.2.0' | |
4 | -gem 'fast_gettext', '~> 0.6.8' | |
5 | -gem 'acts-as-taggable-on', '~> 3.4.2' | |
2 | + | |
3 | +platform :ruby do | |
4 | + gem 'pg', '~> 0.17' | |
5 | + gem 'rmagick', '~> 2.13' | |
6 | +end | |
7 | +platform :jruby do | |
8 | + gem 'activerecord-jdbcpostgresql-adapter' | |
9 | + gem 'rmagick4j' | |
10 | +end | |
11 | + | |
12 | +gem 'rails', '~> 4.2.4' | |
13 | +gem 'fast_gettext', '~> 0.9' | |
14 | +gem 'acts-as-taggable-on', '~> 3.5' | |
6 | 15 | gem 'rails_autolink', '~> 1.1.5' |
7 | -gem 'pg', '~> 0.13.2' | |
8 | -gem 'rmagick', '~> 2.13.1' | |
9 | -gem 'RedCloth', '~> 4.2.9' | |
10 | -gem 'will_paginate', '~> 3.0.3' | |
16 | +gem 'RedCloth', '~> 4.2' | |
11 | 17 | gem 'ruby-feedparser', '~> 0.7' |
12 | -gem 'daemons', '~> 1.1.5' | |
13 | -#gem 'thin', '~> 1.3.1' | |
14 | -gem 'nokogiri', '~> 1.6.0' | |
18 | +gem 'daemons', '~> 1.1' | |
15 | 19 | gem 'unicorn', '~> 4.8' |
16 | -#gem 'nokogiri', '~> 1.5.5' | |
20 | +gem 'nokogiri', '~> 1.6.0' | |
21 | +gem 'will_paginate' | |
22 | +gem 'pothoven-attachment_fu', '~> 3.2.16' | |
23 | +gem 'delayed_job' | |
24 | +gem 'delayed_job_active_record' | |
17 | 25 | gem 'rake', :require => false |
18 | -gem 'rest-client', '~> 1.6.7' | |
26 | +gem 'rest-client', '~> 1.6' | |
19 | 27 | gem 'exception_notification', '~> 4.0.1' |
20 | -gem 'gettext', '~> 2.2.1', :require => false | |
21 | -gem 'locale', '~> 2.0.5' | |
28 | +gem 'gettext', '~> 3.1', :require => false | |
29 | +gem 'locale', '~> 2.1' | |
22 | 30 | gem 'whenever', :require => false |
23 | -gem 'eita-jrails', '~> 0.9.5', require: 'jrails' | |
31 | +gem 'eita-jrails', '~> 0.10.0', require: 'jrails' | |
32 | +gem 'diffy', '~> 3.0' | |
33 | +gem 'slim' | |
24 | 34 | |
25 | 35 | # API dependencies |
26 | 36 | gem 'grape', '~> 0.12' |
27 | 37 | gem 'grape-entity' |
38 | +gem 'grape_logging' | |
28 | 39 | gem 'grape-swagger' |
29 | 40 | gem 'swagger-ui_rails' |
30 | 41 | gem 'kramdown' |
31 | - | |
32 | -#FIXME Get the Grape Loggin from master yo solve this issue https://github.com/intridea/grape/issues/1059 | |
33 | -#We have to remove this commit referenve code when update the next release of grape_logging. Actualy we are using (1.1.2) | |
34 | -gem 'grape_logging', :git => 'https://github.com/aceunreal/grape_logging.git', :ref => 'f1755ae' | |
35 | -#gem 'grape_logging' | |
36 | 42 | gem 'rack-cors' |
37 | 43 | gem 'rack-contrib' |
38 | 44 | gem 'liquid', '~> 3.0.3' |
39 | -#gem 'grape-swagger-rails' | |
40 | -gem 'rubyzip' | |
41 | - | |
42 | -gem 'execjs' | |
43 | -gem 'therubyracer' | |
44 | - | |
45 | -# FIXME list here all actual dependencies (i.e. the ones in debian/control), | |
46 | -# with their GEM names (not the Debian package names) | |
47 | 45 | |
48 | 46 | gem 'api-pagination', '~> 4.1.1' |
49 | 47 | |
50 | 48 | # asset pipeline |
51 | 49 | gem 'uglifier', '>= 1.0.3' |
52 | 50 | gem 'sass-rails' |
53 | -gem 'sass', '~> 3.1.19' | |
51 | + | |
52 | +# gems to enable rails3 behaviour | |
53 | +gem 'protected_attributes' | |
54 | +gem 'rails-observers' | |
55 | +gem 'actionpack-page_caching' | |
56 | +gem 'actionpack-action_caching' | |
57 | +gem 'activerecord-session_store' | |
58 | +gem 'activerecord-deprecated_finders', require: 'active_record/deprecated_finders' | |
54 | 59 | |
55 | 60 | group :production do |
56 | 61 | gem 'dalli', '~> 2.7.0' |
57 | 62 | end |
58 | 63 | |
64 | +group :development, :test do | |
65 | + gem 'spring' | |
66 | +end | |
67 | + | |
59 | 68 | group :test do |
60 | - gem 'rspec', '~> 2.14.0' | |
61 | - gem 'rspec-rails', '~> 2.14.1' | |
69 | + gem 'rspec', '~> 3.3', require: false | |
70 | + gem 'rspec-rails', '~> 3.2', require: false | |
62 | 71 | gem 'mocha', '~> 1.1.0', :require => false |
72 | + gem 'test-unit' if RUBY_VERSION >= '2.2.0' | |
73 | + gem 'minitest' | |
74 | + gem 'minitest-reporters' | |
63 | 75 | end |
64 | 76 | |
65 | 77 | group :cucumber do |
66 | - gem 'cucumber-rails', '~> 1.0.6', :require => false | |
67 | - gem 'capybara', '~> 2.1.0' | |
68 | - gem 'cucumber', '~> 1.0.6' | |
69 | - gem 'database_cleaner', '~> 1.2.0' | |
70 | - gem 'selenium-webdriver', '~> 2.47.0' | |
78 | + gem 'capybara', '~> 2.2' | |
79 | + gem 'launchy' | |
80 | + gem 'cucumber' | |
81 | + gem 'cucumber-rails', '~> 1.4.2', :require => false | |
82 | + gem 'database_cleaner', '~> 1.3' | |
83 | + gem 'selenium-webdriver' | |
71 | 84 | end |
72 | 85 | |
73 | 86 | # Requires custom dependencies |
74 | 87 | eval(File.read('config/Gemfile'), binding) rescue nil |
75 | 88 | |
89 | +vendor = Dir.glob('vendor/{,plugins/}*') - ['vendor/plugins'] | |
90 | +vendor.each do |dir| | |
91 | + plugin = File.basename dir | |
92 | + version = if Dir.glob("#{dir}/*.gemspec").length > 0 then '> 0.0.0' else '0.0.0' end | |
93 | + | |
94 | + gem plugin, version, path: dir | |
95 | +end | |
96 | + | |
76 | 97 | # include gemfiles from enabled plugins |
77 | 98 | # plugins in baseplugins/ are not included on purpose. They should not have any |
78 | 99 | # dependencies. | ... | ... |
Gemfile.lock
1 | -GIT | |
2 | - remote: https://github.com/aceunreal/grape_logging.git | |
3 | - revision: f1755ae4e1d897a65b20218d40681f59a9630f1b | |
4 | - ref: f1755ae | |
1 | +PATH | |
2 | + remote: vendor/contacts | |
5 | 3 | specs: |
6 | - grape_logging (1.1.2) | |
7 | - grape | |
4 | + contacts (1.2.0) | |
5 | + gdata (>= 1.1.1) | |
6 | + json (>= 1.1.1) | |
7 | + | |
8 | +PATH | |
9 | + remote: vendor/ezcrypto | |
10 | + specs: | |
11 | + ezcrypto (0.0.0) | |
12 | + | |
13 | +PATH | |
14 | + remote: vendor/gdata | |
15 | + specs: | |
16 | + gdata (1.1.1) | |
17 | + | |
18 | +PATH | |
19 | + remote: vendor/plugins/access_control | |
20 | + specs: | |
21 | + access_control (0.0.0) | |
22 | + | |
23 | +PATH | |
24 | + remote: vendor/plugins/action_tracker | |
25 | + specs: | |
26 | + action_tracker (0.0.1) | |
27 | + | |
28 | +PATH | |
29 | + remote: vendor/plugins/action_tracker_has_comments | |
30 | + specs: | |
31 | + action_tracker_has_comments (0.0.0) | |
32 | + | |
33 | +PATH | |
34 | + remote: vendor/plugins/acts_as_list | |
35 | + specs: | |
36 | + acts_as_list (0.0.0) | |
37 | + | |
38 | +PATH | |
39 | + remote: vendor/plugins/acts_as_tree | |
40 | + specs: | |
41 | + acts_as_tree (0.0.0) | |
42 | + | |
43 | +PATH | |
44 | + remote: vendor/plugins/acts_as_versioned | |
45 | + specs: | |
46 | + acts_as_versioned (3.2.1) | |
47 | + activerecord | |
48 | + | |
49 | +PATH | |
50 | + remote: vendor/plugins/honeypot | |
51 | + specs: | |
52 | + honeypot (0.0.0) | |
53 | + | |
54 | +PATH | |
55 | + remote: vendor/plugins/i18n_deprecation | |
56 | + specs: | |
57 | + i18n_deprecation (0.0.0) | |
58 | + | |
59 | +PATH | |
60 | + remote: vendor/plugins/kandadaboggu-vote_fu | |
61 | + specs: | |
62 | + kandadaboggu-vote_fu (0.0.15) | |
63 | + | |
64 | +PATH | |
65 | + remote: vendor/plugins/monkey_patches | |
66 | + specs: | |
67 | + monkey_patches (0.0.0) | |
68 | + | |
69 | +PATH | |
70 | + remote: vendor/plugins/noosfero_caching | |
71 | + specs: | |
72 | + noosfero_caching (0.0.0) | |
73 | + | |
74 | +PATH | |
75 | + remote: vendor/plugins/rails_rcov | |
76 | + specs: | |
77 | + rails_rcov (0.0.0) | |
78 | + | |
79 | +PATH | |
80 | + remote: vendor/plugins/recaptcha | |
81 | + specs: | |
82 | + recaptcha (0.3.2) | |
83 | + i18n | |
84 | + | |
85 | +PATH | |
86 | + remote: vendor/plugins/ruby_bosh | |
87 | + specs: | |
88 | + ruby_bosh (0.5.4) | |
89 | + builder | |
90 | + rest-client | |
91 | + | |
92 | +PATH | |
93 | + remote: vendor/plugins/validates_as_cnpj | |
94 | + specs: | |
95 | + validates_as_cnpj (0.0.0) | |
96 | + | |
97 | +PATH | |
98 | + remote: vendor/plugins/validates_multiparameter_assignments | |
99 | + specs: | |
100 | + validates_multiparameter_assignments (0.0.0) | |
101 | + | |
102 | +PATH | |
103 | + remote: vendor/plugins/xss_terminate | |
104 | + specs: | |
105 | + xss_terminate (0.0.0) | |
8 | 106 | |
9 | 107 | GEM |
10 | 108 | remote: https://rubygems.org/ |
11 | 109 | specs: |
12 | 110 | RedCloth (4.2.9) |
13 | - actionmailer (3.2.22) | |
14 | - actionpack (= 3.2.22) | |
15 | - mail (~> 2.5.4) | |
16 | - actionpack (3.2.22) | |
17 | - activemodel (= 3.2.22) | |
18 | - activesupport (= 3.2.22) | |
19 | - builder (~> 3.0.0) | |
111 | + actionmailer (4.2.5) | |
112 | + actionpack (= 4.2.5) | |
113 | + actionview (= 4.2.5) | |
114 | + activejob (= 4.2.5) | |
115 | + mail (~> 2.5, >= 2.5.4) | |
116 | + rails-dom-testing (~> 1.0, >= 1.0.5) | |
117 | + actionpack (4.2.5) | |
118 | + actionview (= 4.2.5) | |
119 | + activesupport (= 4.2.5) | |
120 | + rack (~> 1.6) | |
121 | + rack-test (~> 0.6.2) | |
122 | + rails-dom-testing (~> 1.0, >= 1.0.5) | |
123 | + rails-html-sanitizer (~> 1.0, >= 1.0.2) | |
124 | + actionpack-action_caching (1.1.1) | |
125 | + actionpack (>= 4.0.0, < 5.0) | |
126 | + actionpack-page_caching (1.0.2) | |
127 | + actionpack (>= 4.0.0, < 5) | |
128 | + actionview (4.2.5) | |
129 | + activesupport (= 4.2.5) | |
130 | + builder (~> 3.1) | |
20 | 131 | erubis (~> 2.7.0) |
21 | - journey (~> 1.0.4) | |
22 | - rack (~> 1.4.5) | |
23 | - rack-cache (~> 1.2) | |
24 | - rack-test (~> 0.6.1) | |
25 | - sprockets (~> 2.2.1) | |
26 | - activemodel (3.2.22) | |
27 | - activesupport (= 3.2.22) | |
28 | - builder (~> 3.0.0) | |
29 | - activerecord (3.2.22) | |
30 | - activemodel (= 3.2.22) | |
31 | - activesupport (= 3.2.22) | |
32 | - arel (~> 3.0.2) | |
33 | - tzinfo (~> 0.3.29) | |
34 | - activeresource (3.2.22) | |
35 | - activemodel (= 3.2.22) | |
36 | - activesupport (= 3.2.22) | |
37 | - activesupport (3.2.22) | |
38 | - i18n (~> 0.6, >= 0.6.4) | |
39 | - multi_json (~> 1.0) | |
40 | - acts-as-taggable-on (3.4.4) | |
132 | + rails-dom-testing (~> 1.0, >= 1.0.5) | |
133 | + rails-html-sanitizer (~> 1.0, >= 1.0.2) | |
134 | + activejob (4.2.5) | |
135 | + activesupport (= 4.2.5) | |
136 | + globalid (>= 0.3.0) | |
137 | + activemodel (4.2.5) | |
138 | + activesupport (= 4.2.5) | |
139 | + builder (~> 3.1) | |
140 | + activerecord (4.2.5) | |
141 | + activemodel (= 4.2.5) | |
142 | + activesupport (= 4.2.5) | |
143 | + arel (~> 6.0) | |
144 | + activerecord-deprecated_finders (1.0.4) | |
145 | + activerecord-session_store (0.1.2) | |
146 | + actionpack (>= 4.0.0, < 5) | |
147 | + activerecord (>= 4.0.0, < 5) | |
148 | + railties (>= 4.0.0, < 5) | |
149 | + activesupport (4.2.5) | |
150 | + i18n (~> 0.7) | |
151 | + json (~> 1.7, >= 1.7.7) | |
152 | + minitest (~> 5.1) | |
153 | + thread_safe (~> 0.3, >= 0.3.4) | |
154 | + tzinfo (~> 1.1) | |
155 | + acts-as-taggable-on (3.5.0) | |
41 | 156 | activerecord (>= 3.2, < 5) |
157 | + addressable (2.3.8) | |
158 | + ansi (1.5.0) | |
42 | 159 | api-pagination (4.1.1) |
43 | - arel (3.0.3) | |
160 | + arel (6.0.3) | |
44 | 161 | axiom-types (0.1.1) |
45 | 162 | descendants_tracker (~> 0.0.4) |
46 | 163 | ice_nine (~> 0.11.0) |
47 | 164 | thread_safe (~> 0.3, >= 0.3.1) |
48 | - builder (3.0.4) | |
49 | - capybara (2.1.0) | |
165 | + builder (3.2.2) | |
166 | + capybara (2.5.0) | |
50 | 167 | mime-types (>= 1.16) |
51 | 168 | nokogiri (>= 1.3.3) |
52 | 169 | rack (>= 1.0.0) |
53 | 170 | rack-test (>= 0.5.4) |
54 | 171 | xpath (~> 2.0) |
55 | - childprocess (0.5.6) | |
172 | + childprocess (0.5.8) | |
56 | 173 | ffi (~> 1.0, >= 1.0.11) |
57 | 174 | chronic (0.10.2) |
58 | 175 | coercible (1.0.0) |
59 | 176 | descendants_tracker (~> 0.0.1) |
60 | - cucumber (1.0.6) | |
177 | + cucumber (1.3.20) | |
61 | 178 | builder (>= 2.1.2) |
62 | - diff-lcs (>= 1.1.2) | |
63 | - gherkin (~> 2.4.18) | |
64 | - json (>= 1.4.6) | |
65 | - term-ansicolor (>= 1.0.6) | |
66 | - cucumber-rails (1.0.6) | |
67 | - capybara (>= 1.1.1) | |
68 | - cucumber (>= 1.0.6) | |
69 | - nokogiri (>= 1.5.0) | |
70 | - daemons (1.1.9) | |
179 | + diff-lcs (>= 1.1.3) | |
180 | + gherkin (~> 2.12) | |
181 | + multi_json (>= 1.7.5, < 2.0) | |
182 | + multi_test (>= 0.1.2) | |
183 | + cucumber-rails (1.4.2) | |
184 | + capybara (>= 1.1.2, < 3) | |
185 | + cucumber (>= 1.3.8, < 2) | |
186 | + mime-types (>= 1.16, < 3) | |
187 | + nokogiri (~> 1.5) | |
188 | + rails (>= 3, < 5) | |
189 | + daemons (1.2.3) | |
71 | 190 | dalli (2.7.4) |
72 | - database_cleaner (1.2.0) | |
191 | + database_cleaner (1.5.1) | |
192 | + delayed_job (4.1.1) | |
193 | + activesupport (>= 3.0, < 5.0) | |
194 | + delayed_job_active_record (4.1.0) | |
195 | + activerecord (>= 3.0, < 5) | |
196 | + delayed_job (>= 3.0, < 5) | |
73 | 197 | descendants_tracker (0.0.4) |
74 | 198 | thread_safe (~> 0.3, >= 0.3.1) |
75 | 199 | diff-lcs (1.2.5) |
76 | - eita-jrails (0.9.8) | |
200 | + diffy (3.0.7) | |
201 | + domain_name (0.5.25) | |
202 | + unf (>= 0.0.5, < 1.0.0) | |
203 | + eita-jrails (0.10.0) | |
77 | 204 | actionpack (>= 3.1.0) |
78 | 205 | activesupport (>= 3.0.0) |
79 | 206 | equalizer (0.0.11) |
... | ... | @@ -82,13 +209,16 @@ GEM |
82 | 209 | actionmailer (>= 3.0.4) |
83 | 210 | activesupport (>= 3.0.4) |
84 | 211 | execjs (2.6.0) |
85 | - fast_gettext (0.6.12) | |
212 | + fast_gettext (0.9.2) | |
86 | 213 | ffi (1.9.10) |
87 | - gettext (2.2.1) | |
88 | - locale | |
89 | - gherkin (2.4.21) | |
90 | - json (>= 1.4.6) | |
214 | + gettext (3.1.7) | |
215 | + locale (>= 2.0.5) | |
216 | + text (>= 1.3.0) | |
217 | + gherkin (2.12.2) | |
218 | + multi_json (~> 1.3) | |
91 | 219 | git-version-bump (0.15.1) |
220 | + globalid (0.3.6) | |
221 | + activesupport (>= 4.1.0) | |
92 | 222 | grape (0.13.0) |
93 | 223 | activesupport |
94 | 224 | builder |
... | ... | @@ -105,125 +235,157 @@ GEM |
105 | 235 | grape-swagger (0.10.2) |
106 | 236 | grape (>= 0.8.0) |
107 | 237 | grape-entity |
108 | - hashie (3.4.2) | |
109 | - hike (1.2.3) | |
238 | + grape_logging (1.1.2) | |
239 | + grape | |
240 | + hashie (3.4.3) | |
241 | + http-cookie (1.0.2) | |
242 | + domain_name (~> 0.5) | |
110 | 243 | i18n (0.7.0) |
111 | 244 | ice_nine (0.11.1) |
112 | - journey (1.0.4) | |
113 | 245 | json (1.8.3) |
114 | 246 | kgio (2.10.0) |
115 | 247 | kramdown (1.9.0) |
116 | - libv8 (3.16.14.11) | |
248 | + launchy (2.4.3) | |
249 | + addressable (~> 2.3) | |
117 | 250 | liquid (3.0.6) |
118 | - locale (2.0.9) | |
251 | + locale (2.1.2) | |
252 | + loofah (2.0.3) | |
253 | + nokogiri (>= 1.5.9) | |
119 | 254 | magic (0.2.9) |
120 | 255 | ffi (>= 0.6.3) |
121 | - mail (2.5.4) | |
122 | - mime-types (~> 1.16) | |
123 | - treetop (~> 1.4.8) | |
256 | + mail (2.6.3) | |
257 | + mime-types (>= 1.16, < 3) | |
124 | 258 | metaclass (0.0.4) |
125 | - mime-types (1.25.1) | |
259 | + mime-types (2.6.2) | |
126 | 260 | mini_portile (0.6.2) |
127 | - minitest (3.2.0) | |
261 | + minitest (5.8.2) | |
262 | + minitest-reporters (1.1.5) | |
263 | + ansi | |
264 | + builder | |
265 | + minitest (>= 5.0) | |
266 | + ruby-progressbar | |
128 | 267 | mocha (1.1.0) |
129 | 268 | metaclass (~> 0.0.1) |
130 | 269 | multi_json (1.11.2) |
270 | + multi_test (0.1.2) | |
131 | 271 | multi_xml (0.5.5) |
272 | + netrc (0.11.0) | |
132 | 273 | nokogiri (1.6.6.2) |
133 | 274 | mini_portile (~> 0.6.0) |
134 | - pg (0.13.2) | |
135 | - polyglot (0.3.5) | |
136 | - rack (1.4.7) | |
275 | + pg (0.18.4) | |
276 | + pothoven-attachment_fu (3.2.16) | |
277 | + power_assert (0.2.6) | |
278 | + protected_attributes (1.1.3) | |
279 | + activemodel (>= 4.0.1, < 5.0) | |
280 | + rack (1.6.4) | |
137 | 281 | rack-accept (0.4.5) |
138 | 282 | rack (>= 0.4) |
139 | - rack-cache (1.5.0) | |
140 | - rack (>= 0.4) | |
141 | 283 | rack-contrib (1.4.0) |
142 | 284 | git-version-bump (~> 0.15) |
143 | 285 | rack (~> 1.4) |
144 | 286 | rack-cors (0.4.0) |
145 | 287 | rack-mount (0.8.3) |
146 | 288 | rack (>= 1.0.0) |
147 | - rack-ssl (1.3.4) | |
148 | - rack | |
149 | 289 | rack-test (0.6.3) |
150 | 290 | rack (>= 1.0) |
151 | - rails (3.2.22) | |
152 | - actionmailer (= 3.2.22) | |
153 | - actionpack (= 3.2.22) | |
154 | - activerecord (= 3.2.22) | |
155 | - activeresource (= 3.2.22) | |
156 | - activesupport (= 3.2.22) | |
157 | - bundler (~> 1.0) | |
158 | - railties (= 3.2.22) | |
291 | + rails (4.2.5) | |
292 | + actionmailer (= 4.2.5) | |
293 | + actionpack (= 4.2.5) | |
294 | + actionview (= 4.2.5) | |
295 | + activejob (= 4.2.5) | |
296 | + activemodel (= 4.2.5) | |
297 | + activerecord (= 4.2.5) | |
298 | + activesupport (= 4.2.5) | |
299 | + bundler (>= 1.3.0, < 2.0) | |
300 | + railties (= 4.2.5) | |
301 | + sprockets-rails | |
302 | + rails-deprecated_sanitizer (1.0.3) | |
303 | + activesupport (>= 4.2.0.alpha) | |
304 | + rails-dom-testing (1.0.7) | |
305 | + activesupport (>= 4.2.0.beta, < 5.0) | |
306 | + nokogiri (~> 1.6.0) | |
307 | + rails-deprecated_sanitizer (>= 1.0.1) | |
308 | + rails-html-sanitizer (1.0.2) | |
309 | + loofah (~> 2.0) | |
310 | + rails-observers (0.1.2) | |
311 | + activemodel (~> 4.0) | |
159 | 312 | rails_autolink (1.1.6) |
160 | 313 | rails (> 3.1) |
161 | - railties (3.2.22) | |
162 | - actionpack (= 3.2.22) | |
163 | - activesupport (= 3.2.22) | |
164 | - rack-ssl (~> 1.3.2) | |
314 | + railties (4.2.5) | |
315 | + actionpack (= 4.2.5) | |
316 | + activesupport (= 4.2.5) | |
165 | 317 | rake (>= 0.8.7) |
166 | - rdoc (~> 3.4) | |
167 | - thor (>= 0.14.6, < 2.0) | |
318 | + thor (>= 0.18.1, < 2.0) | |
168 | 319 | raindrops (0.15.0) |
169 | 320 | rake (10.4.2) |
170 | - rdoc (3.12.2) | |
171 | - json (~> 1.4) | |
172 | - ref (2.0.0) | |
173 | - rest-client (1.6.9) | |
174 | - mime-types (~> 1.16) | |
175 | - rmagick (2.13.4) | |
176 | - rspec (2.14.1) | |
177 | - rspec-core (~> 2.14.0) | |
178 | - rspec-expectations (~> 2.14.0) | |
179 | - rspec-mocks (~> 2.14.0) | |
180 | - rspec-core (2.14.8) | |
181 | - rspec-expectations (2.14.5) | |
182 | - diff-lcs (>= 1.1.3, < 2.0) | |
183 | - rspec-mocks (2.14.6) | |
184 | - rspec-rails (2.14.2) | |
185 | - actionpack (>= 3.0) | |
186 | - activemodel (>= 3.0) | |
187 | - activesupport (>= 3.0) | |
188 | - railties (>= 3.0) | |
189 | - rspec-core (~> 2.14.0) | |
190 | - rspec-expectations (~> 2.14.0) | |
191 | - rspec-mocks (~> 2.14.0) | |
321 | + rest-client (1.8.0) | |
322 | + http-cookie (>= 1.0.2, < 2.0) | |
323 | + mime-types (>= 1.16, < 3.0) | |
324 | + netrc (~> 0.7) | |
325 | + rmagick (2.15.4) | |
326 | + rspec (3.4.0) | |
327 | + rspec-core (~> 3.4.0) | |
328 | + rspec-expectations (~> 3.4.0) | |
329 | + rspec-mocks (~> 3.4.0) | |
330 | + rspec-core (3.4.0) | |
331 | + rspec-support (~> 3.4.0) | |
332 | + rspec-expectations (3.4.0) | |
333 | + diff-lcs (>= 1.2.0, < 2.0) | |
334 | + rspec-support (~> 3.4.0) | |
335 | + rspec-mocks (3.4.0) | |
336 | + diff-lcs (>= 1.2.0, < 2.0) | |
337 | + rspec-support (~> 3.4.0) | |
338 | + rspec-rails (3.4.0) | |
339 | + actionpack (>= 3.0, < 4.3) | |
340 | + activesupport (>= 3.0, < 4.3) | |
341 | + railties (>= 3.0, < 4.3) | |
342 | + rspec-core (~> 3.4.0) | |
343 | + rspec-expectations (~> 3.4.0) | |
344 | + rspec-mocks (~> 3.4.0) | |
345 | + rspec-support (~> 3.4.0) | |
346 | + rspec-support (3.4.0) | |
192 | 347 | ruby-feedparser (0.9.3) |
193 | 348 | magic |
349 | + ruby-progressbar (1.7.5) | |
194 | 350 | rubyzip (1.1.7) |
195 | - sass (3.1.21) | |
196 | - sass-rails (3.2.6) | |
197 | - railties (~> 3.2.0) | |
198 | - sass (>= 3.1.10) | |
199 | - tilt (~> 1.3) | |
200 | - selenium-webdriver (2.47.1) | |
351 | + sass (3.4.19) | |
352 | + sass-rails (5.0.4) | |
353 | + railties (>= 4.0.0, < 5.0) | |
354 | + sass (~> 3.1) | |
355 | + sprockets (>= 2.8, < 4.0) | |
356 | + sprockets-rails (>= 2.0, < 4.0) | |
357 | + tilt (>= 1.1, < 3) | |
358 | + selenium-webdriver (2.48.1) | |
201 | 359 | childprocess (~> 0.5) |
202 | 360 | multi_json (~> 1.0) |
203 | 361 | rubyzip (~> 1.0) |
204 | 362 | websocket (~> 1.0) |
205 | - sprockets (2.2.3) | |
206 | - hike (~> 1.2) | |
207 | - multi_json (~> 1.0) | |
208 | - rack (~> 1.0) | |
209 | - tilt (~> 1.1, != 1.3.0) | |
363 | + slim (3.0.6) | |
364 | + temple (~> 0.7.3) | |
365 | + tilt (>= 1.3.3, < 2.1) | |
366 | + spring (1.4.1) | |
367 | + sprockets (3.4.0) | |
368 | + rack (> 1, < 3) | |
369 | + sprockets-rails (2.3.3) | |
370 | + actionpack (>= 3.0) | |
371 | + activesupport (>= 3.0) | |
372 | + sprockets (>= 2.8, < 4.0) | |
210 | 373 | swagger-ui_rails (0.1.7) |
211 | - term-ansicolor (1.3.2) | |
212 | - tins (~> 1.0) | |
213 | - therubyracer (0.12.2) | |
214 | - libv8 (~> 3.16.14.0) | |
215 | - ref | |
374 | + temple (0.7.6) | |
375 | + test-unit (3.1.5) | |
376 | + power_assert | |
377 | + text (1.3.1) | |
216 | 378 | thor (0.19.1) |
217 | 379 | thread_safe (0.3.5) |
218 | - tilt (1.4.1) | |
219 | - tins (1.6.0) | |
220 | - treetop (1.4.15) | |
221 | - polyglot | |
222 | - polyglot (>= 0.3.1) | |
223 | - tzinfo (0.3.45) | |
380 | + tilt (2.0.1) | |
381 | + tzinfo (1.2.2) | |
382 | + thread_safe (~> 0.1) | |
224 | 383 | uglifier (2.7.2) |
225 | 384 | execjs (>= 0.3.0) |
226 | 385 | json (>= 1.8.0) |
386 | + unf (0.1.4) | |
387 | + unf_ext | |
388 | + unf_ext (0.0.7.1) | |
227 | 389 | unicorn (4.9.0) |
228 | 390 | kgio (~> 2.6) |
229 | 391 | rack |
... | ... | @@ -244,48 +406,81 @@ PLATFORMS |
244 | 406 | ruby |
245 | 407 | |
246 | 408 | DEPENDENCIES |
247 | - RedCloth (~> 4.2.9) | |
248 | - acts-as-taggable-on (~> 3.4.2) | |
409 | + RedCloth (~> 4.2) | |
410 | + access_control (= 0.0.0)! | |
411 | + action_tracker (> 0.0.0)! | |
412 | + action_tracker_has_comments (= 0.0.0)! | |
413 | + actionpack-action_caching | |
414 | + actionpack-page_caching | |
415 | + activerecord-deprecated_finders | |
416 | + activerecord-jdbcpostgresql-adapter | |
417 | + activerecord-session_store | |
418 | + acts-as-taggable-on (~> 3.5) | |
419 | + acts_as_list (= 0.0.0)! | |
420 | + acts_as_tree (= 0.0.0)! | |
421 | + acts_as_versioned (> 0.0.0)! | |
249 | 422 | api-pagination (~> 4.1.1) |
250 | - capybara (~> 2.1.0) | |
251 | - cucumber (~> 1.0.6) | |
252 | - cucumber-rails (~> 1.0.6) | |
253 | - daemons (~> 1.1.5) | |
423 | + capybara (~> 2.2) | |
424 | + contacts (> 0.0.0)! | |
425 | + cucumber | |
426 | + cucumber-rails (~> 1.4.2) | |
427 | + daemons (~> 1.1) | |
254 | 428 | dalli (~> 2.7.0) |
255 | - database_cleaner (~> 1.2.0) | |
256 | - eita-jrails (~> 0.9.5) | |
429 | + database_cleaner (~> 1.3) | |
430 | + delayed_job | |
431 | + delayed_job_active_record | |
432 | + diffy (~> 3.0) | |
433 | + eita-jrails (~> 0.10.0) | |
257 | 434 | exception_notification (~> 4.0.1) |
258 | - execjs | |
259 | - fast_gettext (~> 0.6.8) | |
260 | - gettext (~> 2.2.1) | |
435 | + ezcrypto (= 0.0.0)! | |
436 | + fast_gettext (~> 0.9) | |
437 | + gdata (> 0.0.0)! | |
438 | + gettext (~> 3.1) | |
261 | 439 | grape (~> 0.12) |
262 | 440 | grape-entity |
263 | 441 | grape-swagger |
264 | - grape_logging! | |
442 | + grape_logging | |
443 | + honeypot (= 0.0.0)! | |
444 | + i18n_deprecation (= 0.0.0)! | |
445 | + kandadaboggu-vote_fu (> 0.0.0)! | |
265 | 446 | kramdown |
447 | + launchy | |
266 | 448 | liquid (~> 3.0.3) |
267 | - locale (~> 2.0.5) | |
268 | - minitest (~> 3.2.0) | |
449 | + locale (~> 2.1) | |
450 | + minitest | |
451 | + minitest-reporters | |
269 | 452 | mocha (~> 1.1.0) |
453 | + monkey_patches (= 0.0.0)! | |
270 | 454 | nokogiri (~> 1.6.0) |
271 | - pg (~> 0.13.2) | |
455 | + noosfero_caching (= 0.0.0)! | |
456 | + pg (~> 0.17) | |
457 | + pothoven-attachment_fu (~> 3.2.16) | |
458 | + protected_attributes | |
272 | 459 | rack-contrib |
273 | 460 | rack-cors |
274 | - rails (~> 3.2.22) | |
461 | + rails (~> 4.2.4) | |
462 | + rails-observers | |
275 | 463 | rails_autolink (~> 1.1.5) |
464 | + rails_rcov (= 0.0.0)! | |
276 | 465 | rake |
277 | - rest-client (~> 1.6.7) | |
278 | - rmagick (~> 2.13.1) | |
279 | - rspec (~> 2.14.0) | |
280 | - rspec-rails (~> 2.14.1) | |
466 | + recaptcha (> 0.0.0)! | |
467 | + rest-client (~> 1.6) | |
468 | + rmagick (~> 2.13) | |
469 | + rmagick4j | |
470 | + rspec (~> 3.3) | |
471 | + rspec-rails (~> 3.2) | |
281 | 472 | ruby-feedparser (~> 0.7) |
282 | - rubyzip | |
283 | - sass (~> 3.1.19) | |
473 | + ruby_bosh (> 0.0.0)! | |
284 | 474 | sass-rails |
285 | - selenium-webdriver (~> 2.47.0) | |
475 | + selenium-webdriver | |
476 | + slim | |
477 | + spring | |
286 | 478 | swagger-ui_rails |
287 | - therubyracer | |
479 | + test-unit | |
288 | 480 | uglifier (>= 1.0.3) |
289 | 481 | unicorn (~> 4.8) |
482 | + validates_as_cnpj (= 0.0.0)! | |
483 | + validates_multiparameter_assignments (= 0.0.0)! | |
290 | 484 | whenever |
291 | - will_paginate (~> 3.0.3) | |
485 | + will_paginate | |
486 | + xss_terminate (= 0.0.0)! | ... | ... |
Vagrantfile
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | |
4 | 4 | VAGRANTFILE_API_VERSION = "2" |
5 | 5 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
6 | - config.vm.box = ENV.fetch('VAGRANT_BOX', "debian-wheezy") | |
6 | + config.vm.box = ENV.fetch('VAGRANT_BOX', "debian/jessie64") | |
7 | 7 | config.vm.network :forwarded_port, host: 3000, guest: 3000 |
8 | 8 | config.vm.provision :shell do |shell| |
9 | 9 | shell.inline = 'su vagrant -c /vagrant/script/vagrant' | ... | ... |
app/controllers/admin/admin_panel_controller.rb
... | ... | @@ -12,7 +12,7 @@ class AdminPanelController < AdminController |
12 | 12 | if params[:environment][:languages] |
13 | 13 | params[:environment][:languages] = params[:environment][:languages].map {|lang, value| lang if value=='true'}.compact |
14 | 14 | end |
15 | - if @environment.update_attributes(params[:environment]) | |
15 | + if @environment.update(params[:environment]) | |
16 | 16 | session[:notice] = _('Environment settings updated') |
17 | 17 | redirect_to :action => 'index' |
18 | 18 | end |
... | ... | @@ -54,7 +54,7 @@ class AdminPanelController < AdminController |
54 | 54 | |
55 | 55 | if request.post? |
56 | 56 | env = environment |
57 | - folders = params[:folders].map{|fid| Folder.find(:first, :conditions => {:profile_id => env.portal_community, :id => fid})} if params[:folders] | |
57 | + folders = env.portal_community.folders.where(id: params[:folders]).order(params[:folders].reverse.map{ |f| "id=#{f}" }) if params[:folders] | |
58 | 58 | env.portal_folders = folders |
59 | 59 | if env.save |
60 | 60 | session[:notice] = _('Saved the portal folders') |
... | ... | @@ -65,7 +65,7 @@ class AdminPanelController < AdminController |
65 | 65 | |
66 | 66 | def set_portal_news_amount |
67 | 67 | if request.post? |
68 | - if @environment.update_attributes(params[:environment]) | |
68 | + if @environment.update(params[:environment]) | |
69 | 69 | session[:notice] = _('Saved the number of news on folders') |
70 | 70 | redirect_to :action => 'index' |
71 | 71 | end | ... | ... |
app/controllers/admin/categories_controller.rb
1 | 1 | class CategoriesController < AdminController |
2 | 2 | |
3 | 3 | protect 'manage_environment_categories', :environment |
4 | - | |
4 | + | |
5 | 5 | helper :categories |
6 | 6 | |
7 | 7 | def index |
8 | - @categories = environment.categories.find(:all, :conditions => "parent_id is null AND type is null") | |
9 | - @regions = environment.regions.find(:all, :conditions => {:parent_id => nil}) | |
10 | - @product_categories = environment.product_categories.find(:all, :conditions => {:parent_id => nil}) | |
8 | + @categories = environment.categories.where("parent_id is null AND type is null") | |
9 | + @regions = environment.regions.where(:parent_id => nil) | |
10 | + @product_categories = environment.product_categories.where(:parent_id => nil) | |
11 | 11 | end |
12 | 12 | |
13 | 13 | def get_children |
... | ... | @@ -43,7 +43,7 @@ class CategoriesController < AdminController |
43 | 43 | begin |
44 | 44 | @category = environment.categories.find(params[:id]) |
45 | 45 | if request.post? |
46 | - @category.update_attributes!(params[:category]) | |
46 | + @category.update!(params[:category]) | |
47 | 47 | @saved = true |
48 | 48 | session[:notice] = _("Category %s saved." % @category.name) |
49 | 49 | redirect_to :action => 'index' | ... | ... |
app/controllers/admin/environment_role_manager_controller.rb
... | ... | @@ -2,7 +2,7 @@ class EnvironmentRoleManagerController < AdminController |
2 | 2 | protect 'manage_environment_roles', :environment |
3 | 3 | |
4 | 4 | def index |
5 | - @admins = Person.find(:all, :conditions => ['role_assignments.resource_type = ?', 'Environment'], :include => :role_assignments ) | |
5 | + @admins = Person.where('role_assignments.resource_type = ?', 'Environment').includes(:role_assignments) | |
6 | 6 | end |
7 | 7 | |
8 | 8 | def change_roles | ... | ... |
app/controllers/admin/features_controller.rb
1 | 1 | class FeaturesController < AdminController |
2 | 2 | |
3 | 3 | protect 'edit_environment_features', :environment |
4 | + helper CustomFieldsHelper | |
4 | 5 | |
5 | 6 | def index |
6 | 7 | @features = Environment.available_features.sort_by{|k,v|v} |
... | ... | @@ -36,7 +37,7 @@ class FeaturesController < AdminController |
36 | 37 | |
37 | 38 | post_only :update |
38 | 39 | def update |
39 | - if @environment.update_attributes(params[:environment]) | |
40 | + if @environment.update(params[:environment]) | |
40 | 41 | session[:notice] = _('Features updated successfully.') |
41 | 42 | redirect_to :action => 'index' |
42 | 43 | else |
... | ... | @@ -91,9 +92,37 @@ class FeaturesController < AdminController |
91 | 92 | redirect_to :action => 'manage_fields' |
92 | 93 | end |
93 | 94 | |
95 | + def manage_custom_fields | |
96 | + custom_field_list = params[:custom_fields] || {} | |
97 | + | |
98 | + custom_fields_to_destroy = | |
99 | + params[:customized_type].constantize.custom_fields(environment).map(&:id) - custom_field_list.keys.map(&:to_i) | |
100 | + CustomField.destroy(custom_fields_to_destroy) | |
101 | + | |
102 | + custom_field_list.each_pair do |id, custom_field| | |
103 | + field = CustomField.find_by_id(id) | |
104 | + if not field.blank? | |
105 | + params_to_update = custom_field.except(:format, :extras, :customized_type,:environment) | |
106 | + field.update_attributes(params_to_update) | |
107 | + else | |
108 | + if !custom_field[:extras].nil? | |
109 | + tmp = [] | |
110 | + custom_field[:extras].each_pair do |k, v| | |
111 | + tmp << v | |
112 | + end | |
113 | + custom_field[:extras] = tmp | |
114 | + end | |
115 | + field = CustomField.new custom_field.except(:environment) | |
116 | + field.environment=environment | |
117 | + field.save if field.valid? | |
118 | + end | |
119 | + end | |
120 | + redirect_to :action => 'manage_fields' | |
121 | + end | |
122 | + | |
94 | 123 | def search_members |
95 | 124 | arg = params[:q].downcase |
96 | - result = environment.people.find(:all, :conditions => ['LOWER(name) LIKE ? OR identifier LIKE ?', "%#{arg}%", "%#{arg}%"]) | |
125 | + result = environment.people.where('LOWER(name) LIKE ? OR identifier LIKE ?', "%#{arg}%", "%#{arg}%") | |
97 | 126 | render :text => prepare_to_token_input(result).to_json |
98 | 127 | end |
99 | 128 | ... | ... |
app/controllers/admin/licenses_controller.rb
... | ... | @@ -23,7 +23,7 @@ class LicensesController < AdminController |
23 | 23 | @license = environment.licenses.find(params[:license_id]) |
24 | 24 | if request.post? |
25 | 25 | begin |
26 | - @license.update_attributes!(params[:license]) | |
26 | + @license.update!(params[:license]) | |
27 | 27 | session[:notice] = _('License updated') |
28 | 28 | redirect_to :action => 'index' |
29 | 29 | rescue | ... | ... |
app/controllers/admin/plugins_controller.rb
... | ... | @@ -8,7 +8,7 @@ class PluginsController < AdminController |
8 | 8 | post_only :update |
9 | 9 | def update |
10 | 10 | params[:environment][:enabled_plugins].delete('') |
11 | - if @environment.update_attributes(params[:environment]) | |
11 | + if @environment.update(params[:environment]) | |
12 | 12 | session[:notice] = _('Plugins updated successfully.') |
13 | 13 | else |
14 | 14 | session[:error] = _('Plugins were not updated successfully.') | ... | ... |
app/controllers/admin/role_controller.rb
... | ... | @@ -29,7 +29,7 @@ class RoleController < AdminController |
29 | 29 | |
30 | 30 | def update |
31 | 31 | @role = environment.roles.find(params[:id]) |
32 | - if @role.update_attributes(params[:role]) | |
32 | + if @role.update(params[:role]) | |
33 | 33 | redirect_to :action => 'show', :id => @role |
34 | 34 | else |
35 | 35 | session[:notice] = _('Failed to edit role') | ... | ... |
app/controllers/admin/users_controller.rb
... | ... | @@ -63,7 +63,7 @@ class UsersController < AdminController |
63 | 63 | respond_to do |format| |
64 | 64 | format.html |
65 | 65 | format.xml do |
66 | - users = User.find(:all, :conditions => {:environment_id => environment.id}, :include => [:person]) | |
66 | + users = User.where(:environment_id => environment.id).includes(:person) | |
67 | 67 | send_data users.to_xml( |
68 | 68 | :skip_types => true, |
69 | 69 | :only => %w[email login created_at updated_at], | ... | ... |
app/controllers/application.rb
... | ... | @@ -1 +0,0 @@ |
1 | -require 'application_controller' |
app/controllers/application_controller.rb
... | ... | @@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base |
8 | 8 | before_filter :init_noosfero_plugins |
9 | 9 | before_filter :allow_cross_domain_access |
10 | 10 | |
11 | - before_filter :login_from_cookie | |
11 | + include AuthenticatedSystem | |
12 | 12 | before_filter :require_login_for_environment, :if => :private_environment? |
13 | 13 | |
14 | 14 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] |
... | ... | @@ -50,7 +50,7 @@ class ApplicationController < ActionController::Base |
50 | 50 | include ApplicationHelper |
51 | 51 | layout :get_layout |
52 | 52 | def get_layout |
53 | - return nil if request.format == :js or request.xhr? | |
53 | + return false if request.format == :js or request.xhr? | |
54 | 54 | |
55 | 55 | theme_layout = theme_option(:layout) |
56 | 56 | if theme_layout |
... | ... | @@ -74,15 +74,12 @@ class ApplicationController < ActionController::Base |
74 | 74 | helper :language |
75 | 75 | |
76 | 76 | include DesignHelper |
77 | - | |
78 | - # Be sure to include AuthenticationSystem in Application Controller instead | |
79 | - include AuthenticatedSystem | |
80 | 77 | include PermissionCheck |
81 | 78 | |
82 | 79 | before_filter :set_locale |
83 | 80 | def set_locale |
84 | 81 | FastGettext.available_locales = environment.available_locales |
85 | - FastGettext.default_locale = environment.default_locale | |
82 | + FastGettext.default_locale = environment.default_locale || 'en' | |
86 | 83 | FastGettext.locale = (params[:lang] || session[:lang] || environment.default_locale || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en') |
87 | 84 | I18n.locale = FastGettext.locale.to_s.gsub '_', '-' |
88 | 85 | I18n.default_locale = FastGettext.default_locale.to_s.gsub '_', '-' |
... | ... | @@ -153,7 +150,7 @@ class ApplicationController < ActionController::Base |
153 | 150 | # Check if the requested profile belongs to another domain |
154 | 151 | if @profile && !params[:profile].blank? && params[:profile] != @profile.identifier |
155 | 152 | @profile = @environment.profiles.find_by_identifier params[:profile] |
156 | - redirect_to params.merge(:host => @profile.default_hostname) | |
153 | + redirect_to url_for(params.merge host: @profile.default_hostname) | |
157 | 154 | end |
158 | 155 | end |
159 | 156 | end |
... | ... | @@ -168,7 +165,8 @@ class ApplicationController < ActionController::Base |
168 | 165 | def render_not_found(path = nil) |
169 | 166 | @no_design_blocks = true |
170 | 167 | @path ||= request.path |
171 | - render :template => 'shared/not_found.html.erb', :status => 404, :layout => get_layout | |
168 | + # force html template even if the browser asked for a image | |
169 | + render template: 'shared/not_found', status: 404, layout: get_layout, formats: [:html] | |
172 | 170 | end |
173 | 171 | alias :render_404 :render_not_found |
174 | 172 | |
... | ... | @@ -176,7 +174,8 @@ class ApplicationController < ActionController::Base |
176 | 174 | @no_design_blocks = true |
177 | 175 | @message = message |
178 | 176 | @title = title |
179 | - render :template => 'shared/access_denied.html.erb', :status => 403 | |
177 | + # force html template even if the browser asked for a image | |
178 | + render template: 'shared/access_denied', status: 403, formats: [:html] | |
180 | 179 | end |
181 | 180 | |
182 | 181 | def load_category |
... | ... | @@ -190,13 +189,7 @@ class ApplicationController < ActionController::Base |
190 | 189 | end |
191 | 190 | |
192 | 191 | include SearchTermHelper |
193 | - | |
194 | - def find_by_contents(asset, context, scope, query, paginate_options={:page => 1}, options={}) | |
195 | - scope = scope.with_templates(options[:template_id]) unless options[:template_id].blank? | |
196 | - search = plugins.dispatch_first(:find_by_contents, asset, scope, query, paginate_options, options) | |
197 | - register_search_term(query, scope.count, search[:results].count, context, asset) | |
198 | - search | |
199 | - end | |
192 | + include FindByContents | |
200 | 193 | |
201 | 194 | def find_suggestions(query, context, asset, options={}) |
202 | 195 | plugins.dispatch_first(:find_suggestions, query, context, asset, options) |
... | ... | @@ -209,7 +202,7 @@ class ApplicationController < ActionController::Base |
209 | 202 | def redirect_to_current_user |
210 | 203 | if params[:profile] == '~' |
211 | 204 | if logged_in? |
212 | - redirect_to params.merge(:profile => user.identifier) | |
205 | + redirect_to url_for(params.merge profile: user.identifier) | |
213 | 206 | else |
214 | 207 | render_not_found |
215 | 208 | end | ... | ... |
app/controllers/box_organizer_controller.rb
... | ... | @@ -69,9 +69,9 @@ class BoxOrganizerController < ApplicationController |
69 | 69 | if request.xhr? and params[:query] |
70 | 70 | search = params[:query] |
71 | 71 | path_list = if boxes_holder.is_a?(Environment) && boxes_holder.enabled?('use_portal_community') && boxes_holder.portal_community |
72 | - boxes_holder.portal_community.articles.find(:all, :conditions=>"name ILIKE '%#{search}%' or path ILIKE '%#{search}%'", :limit=>20).map { |content| "/{portal}/"+content.path } | |
72 | + boxes_holder.portal_community.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{portal}/"+content.path } | |
73 | 73 | elsif boxes_holder.is_a?(Profile) |
74 | - boxes_holder.articles.find(:all, :conditions=>"name ILIKE '%#{search}%' or path ILIKE '%#{search}%'", :limit=>20).map { |content| "/{profile}/"+content.path } | |
74 | + boxes_holder.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{profile}/"+content.path } | |
75 | 75 | else |
76 | 76 | [] |
77 | 77 | end |
... | ... | @@ -86,7 +86,7 @@ class BoxOrganizerController < ApplicationController |
86 | 86 | if @block.kind_of?(RawHTMLBlock) && !user.is_admin?(environment) |
87 | 87 | render_access_denied |
88 | 88 | else |
89 | - @block.update_attributes(params[:block]) | |
89 | + @block.update(params[:block]) | |
90 | 90 | redirect_to :action => 'index' |
91 | 91 | end |
92 | 92 | end | ... | ... |
app/controllers/my_profile/cms_controller.rb
... | ... | @@ -6,7 +6,7 @@ class CmsController < MyProfileController |
6 | 6 | |
7 | 7 | def search_tags |
8 | 8 | arg = params[:term].downcase |
9 | - result = ActsAsTaggableOn::Tag.where('name ILIKE ?', "%#{arg}%").limit(10) | |
9 | + result = Tag.where('name ILIKE ?', "%#{arg}%").limit(10) | |
10 | 10 | render :text => prepare_to_token_input_by_label(result).to_json, :content_type => 'application/json' |
11 | 11 | end |
12 | 12 | |
... | ... | @@ -50,16 +50,9 @@ class CmsController < MyProfileController |
50 | 50 | |
51 | 51 | def view |
52 | 52 | @article = profile.articles.find(params[:id]) |
53 | - conditions = [] | |
54 | - if @article.has_posts? | |
55 | - conditions = ['type != ?', 'RssFeed'] | |
56 | - end | |
57 | - | |
58 | - @articles = @article.children.reorder("case when type = 'Folder' then 0 when type ='Blog' then 1 else 2 end, updated_at DESC, name").paginate( | |
59 | - :conditions => conditions, | |
60 | - :per_page => per_page, | |
61 | - :page => params[:npage] | |
62 | - ) | |
53 | + @articles = @article.children.reorder("case when type = 'Folder' then 0 when type ='Blog' then 1 else 2 end, updated_at DESC, name") | |
54 | + @articles = @articles.where "type <> ?", 'RssFeed' if @article.has_posts? | |
55 | + @articles = @articles.paginate per_page: per_page, page: params[:npage] | |
63 | 56 | end |
64 | 57 | |
65 | 58 | def index |
... | ... | @@ -99,7 +92,7 @@ class CmsController < MyProfileController |
99 | 92 | @article.image.save! |
100 | 93 | end |
101 | 94 | @article.last_changed_by = user |
102 | - if @article.update_attributes(params[:article]) | |
95 | + if @article.update(params[:article]) | |
103 | 96 | if !continue |
104 | 97 | if @article.content_type.nil? || @article.image? |
105 | 98 | success_redirect |
... | ... | @@ -230,7 +223,7 @@ class CmsController < MyProfileController |
230 | 223 | else |
231 | 224 | session[:notice] = _('File(s) successfully uploaded') |
232 | 225 | if @back_to |
233 | - redirect_to @back_to | |
226 | + redirect_to url_for(@back_to) | |
234 | 227 | elsif @parent |
235 | 228 | redirect_to :action => 'view', :id => @parent.id |
236 | 229 | else |
... | ... | @@ -381,7 +374,7 @@ class CmsController < MyProfileController |
381 | 374 | |
382 | 375 | def search_article_privacy_exceptions |
383 | 376 | arg = params[:q].downcase |
384 | - result = profile.members.find(:all, :conditions => ['LOWER(name) LIKE ?', "%#{arg}%"]) | |
377 | + result = profile.members.where('LOWER(name) LIKE ?', "%#{arg}%") | |
385 | 378 | render :text => prepare_to_token_input(result).to_json |
386 | 379 | end |
387 | 380 | ... | ... |
app/controllers/my_profile/enterprise_validation_controller.rb
... | ... | @@ -54,7 +54,7 @@ class EnterpriseValidationController < MyProfileController |
54 | 54 | def edit_validation_info |
55 | 55 | @info = profile.validation_info |
56 | 56 | if request.post? |
57 | - if @info.update_attributes(params[:info]) | |
57 | + if @info.update(params[:info]) | |
58 | 58 | redirect_to :action => 'index' |
59 | 59 | end |
60 | 60 | end | ... | ... |
app/controllers/my_profile/manage_products_controller.rb
... | ... | @@ -69,7 +69,7 @@ class ManageProductsController < ApplicationController |
69 | 69 | field = params[:field] |
70 | 70 | if request.post? |
71 | 71 | begin |
72 | - @product.update_attributes!(params[:product]) | |
72 | + @product.update!(params[:product]) | |
73 | 73 | render :partial => "display_#{field}", :locals => {:product => @product} |
74 | 74 | rescue Exception => e |
75 | 75 | render :partial => "edit_#{field}", :locals => {:product => @product, :errors => true} |
... | ... | @@ -86,7 +86,7 @@ class ManageProductsController < ApplicationController |
86 | 86 | @edit = true |
87 | 87 | @level = @category.level |
88 | 88 | if request.post? |
89 | - if @product.update_attributes({:product_category_id => params[:selected_category_id]}, :without_protection => true) | |
89 | + if @product.update({:product_category_id => params[:selected_category_id]}, :without_protection => true) | |
90 | 90 | render :partial => 'shared/redirect_via_javascript', |
91 | 91 | :locals => { :url => url_for(:controller => 'manage_products', :action => 'show', :id => @product) } |
92 | 92 | else |
... | ... | @@ -115,7 +115,7 @@ class ManageProductsController < ApplicationController |
115 | 115 | @categories = ProductCategory.top_level_for(environment) |
116 | 116 | @level = 0 |
117 | 117 | if request.post? |
118 | - if @input.update_attributes(:product_category_id => params[:selected_category_id]) | |
118 | + if @input.update(:product_category_id => params[:selected_category_id]) | |
119 | 119 | @inputs = @product.inputs |
120 | 120 | render :partial => 'display_inputs' |
121 | 121 | else |
... | ... | @@ -172,7 +172,7 @@ class ManageProductsController < ApplicationController |
172 | 172 | @input = @profile.inputs.find_by_id(params[:id]) |
173 | 173 | if @input |
174 | 174 | if request.post? |
175 | - if @input.update_attributes(params[:input]) | |
175 | + if @input.update(params[:input]) | |
176 | 176 | render :partial => 'display_input', :locals => {:input => @input} |
177 | 177 | else |
178 | 178 | render :partial => 'edit_input' | ... | ... |
app/controllers/my_profile/maps_controller.rb
... | ... | @@ -15,7 +15,7 @@ class MapsController < MyProfileController |
15 | 15 | end |
16 | 16 | |
17 | 17 | Profile.transaction do |
18 | - if profile.update_attributes!(params[:profile_data]) | |
18 | + if profile.update!(params[:profile_data]) | |
19 | 19 | BlockSweeper.expire_blocks profile.blocks.select{ |b| b.class == LocationBlock } |
20 | 20 | session[:notice] = _('Address was updated successfully!') |
21 | 21 | redirect_to :action => 'edit_location' | ... | ... |
app/controllers/my_profile/memberships_controller.rb
app/controllers/my_profile/profile_editor_controller.rb
... | ... | @@ -8,6 +8,7 @@ class ProfileEditorController < MyProfileController |
8 | 8 | before_filter :forbid_destroy_profile, :only => [:destroy_profile] |
9 | 9 | before_filter :check_user_can_edit_header_footer, :only => [:header_footer] |
10 | 10 | helper_method :has_welcome_page |
11 | + helper CustomFieldsHelper | |
11 | 12 | |
12 | 13 | def index |
13 | 14 | @pending_tasks = Task.to(profile).pending.without_spam.select{|i| user.has_permission?(i.permission, profile)} |
... | ... | @@ -30,7 +31,7 @@ class ProfileEditorController < MyProfileController |
30 | 31 | Image.transaction do |
31 | 32 | begin |
32 | 33 | @plugins.dispatch(:profile_editor_transaction_extras) |
33 | - @profile_data.update_attributes!(params[:profile_data]) | |
34 | + @profile_data.update!(params[:profile_data]) | |
34 | 35 | redirect_to :action => 'index', :profile => profile.identifier |
35 | 36 | rescue Exception => ex |
36 | 37 | profile.identifier = params[:profile] if profile.identifier.blank? |
... | ... | @@ -86,7 +87,7 @@ class ProfileEditorController < MyProfileController |
86 | 87 | if @profile.destroy |
87 | 88 | session[:notice] = _('The profile was deleted.') |
88 | 89 | if(params[:return_to]) |
89 | - redirect_to params[:return_to] | |
90 | + redirect_to url_for(params[:return_to]) | |
90 | 91 | else |
91 | 92 | redirect_to :controller => 'home' |
92 | 93 | end |
... | ... | @@ -100,7 +101,7 @@ class ProfileEditorController < MyProfileController |
100 | 101 | @welcome_page = profile.welcome_page || TinyMceArticle.new(:name => 'Welcome Page', :profile => profile, :published => false) |
101 | 102 | if request.post? |
102 | 103 | begin |
103 | - @welcome_page.update_attributes!(params[:welcome_page]) | |
104 | + @welcome_page.update!(params[:welcome_page]) | |
104 | 105 | profile.welcome_page = @welcome_page |
105 | 106 | profile.save! |
106 | 107 | session[:notice] = _('Welcome page saved successfully.') | ... | ... |
app/controllers/my_profile/profile_members_controller.rb
... | ... | @@ -47,7 +47,7 @@ class ProfileMembersController < MyProfileController |
47 | 47 | end |
48 | 48 | |
49 | 49 | def remove_role |
50 | - @association = RoleAssignment.find(:all, :conditions => {:id => params[:id], :target_id => profile.id}) | |
50 | + @association = RoleAssignment.where(:id => params[:id], :target_id => profile.id) | |
51 | 51 | if @association.destroy |
52 | 52 | session[:notice] = 'Member succefully unassociated' |
53 | 53 | else |
... | ... | @@ -120,7 +120,7 @@ class ProfileMembersController < MyProfileController |
120 | 120 | |
121 | 121 | def search_user |
122 | 122 | role = Role.find(params[:role]) |
123 | - render :text => environment.people.find(:all, :conditions => ['LOWER(name) LIKE ? OR LOWER(identifier) LIKE ?', "%#{params['q_'+role.key]}%", "%#{params['q_'+role.key]}%"]). | |
123 | + render :text => environment.people.where('LOWER(name) LIKE ? OR LOWER(identifier) LIKE ?', "%#{params['q_'+role.key]}%", "%#{params['q_'+role.key]}%"). | |
124 | 124 | select { |person| !profile.members_by_role(role).include?(person) }. |
125 | 125 | map {|person| {:id => person.id, :name => person.name} }. |
126 | 126 | to_json | ... | ... |
app/controllers/my_profile/profile_roles_controller.rb
... | ... | @@ -58,7 +58,7 @@ class ProfileRolesController < MyProfileController |
58 | 58 | |
59 | 59 | def update |
60 | 60 | @role = environment.roles.find(params[:id]) |
61 | - if @role.update_attributes(params[:role]) | |
61 | + if @role.update(params[:role]) | |
62 | 62 | redirect_to :action => 'show', :id => @role |
63 | 63 | else |
64 | 64 | session[:notice] = _('Failed to edit role') | ... | ... |
app/controllers/my_profile/tasks_controller.rb
... | ... | @@ -71,7 +71,7 @@ class TasksController < MyProfileController |
71 | 71 | if VALID_DECISIONS.include?(decision) && id && decision != 'skip' |
72 | 72 | task ||= profile.find_in_all_tasks(id) |
73 | 73 | begin |
74 | - task.update_attributes(value[:task]) | |
74 | + task.update(value[:task]) | |
75 | 75 | task.send(decision, current_person) |
76 | 76 | rescue Exception => ex |
77 | 77 | message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})" |
... | ... | @@ -85,7 +85,6 @@ class TasksController < MyProfileController |
85 | 85 | end |
86 | 86 | |
87 | 87 | url = { :action => 'index' } |
88 | - | |
89 | 88 | if failed.blank? |
90 | 89 | session[:notice] = _("All decisions were applied successfully.") |
91 | 90 | else |
... | ... | @@ -113,7 +112,7 @@ class TasksController < MyProfileController |
113 | 112 | end |
114 | 113 | |
115 | 114 | def ticket_details |
116 | - @ticket = Ticket.find(:first, :conditions => ['(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]]) | |
115 | + @ticket = Ticket.where('(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]).first | |
117 | 116 | end |
118 | 117 | |
119 | 118 | def search_tasks |
... | ... | @@ -179,7 +178,7 @@ class TasksController < MyProfileController |
179 | 178 | end |
180 | 179 | |
181 | 180 | def filter_tasks(filter, tasks) |
182 | - tasks = tasks.includes(:requestor, :closed_by) | |
181 | + tasks = tasks.eager_load(:requestor, :closed_by) | |
183 | 182 | tasks = tasks.of(filter[:type].presence) |
184 | 183 | tasks = tasks.where(:status => filter[:status]) unless filter[:status].blank? |
185 | 184 | tasks = filter_by_creation_date(filter, tasks) | ... | ... |
app/controllers/public/account_controller.rb
... | ... | @@ -6,6 +6,9 @@ class AccountController < ApplicationController |
6 | 6 | before_filter :redirect_if_logged_in, :only => [:login, :signup] |
7 | 7 | before_filter :protect_from_bots, :only => :signup |
8 | 8 | |
9 | + protect_from_forgery except: [:login] | |
10 | + | |
11 | + helper CustomFieldsHelper | |
9 | 12 | # say something nice, you goof! something sweet. |
10 | 13 | def index |
11 | 14 | unless logged_in? |
... | ... | @@ -125,9 +128,9 @@ class AccountController < ApplicationController |
125 | 128 | @user.signup! |
126 | 129 | owner_role = Role.find_by_name('owner') |
127 | 130 | @user.person.affiliate(@user.person, [owner_role]) if owner_role |
128 | - invitation = Task.find_by_code(@invitation_code) | |
131 | + invitation = Task.from_code(@invitation_code).first | |
129 | 132 | if invitation |
130 | - invitation.update_attributes!({:friend => @user.person}) | |
133 | + invitation.update! friend: @user.person | |
131 | 134 | invitation.finish |
132 | 135 | end |
133 | 136 | |
... | ... | @@ -222,7 +225,7 @@ class AccountController < ApplicationController |
222 | 225 | # |
223 | 226 | # Posts back. |
224 | 227 | def new_password |
225 | - @change_password = ChangePassword.find_by_code(params[:code]) | |
228 | + @change_password = ChangePassword.from_code(params[:code]).first | |
226 | 229 | |
227 | 230 | unless @change_password |
228 | 231 | render :action => 'invalid_change_password_code', :status => 403 |
... | ... | @@ -231,7 +234,7 @@ class AccountController < ApplicationController |
231 | 234 | |
232 | 235 | if request.post? |
233 | 236 | begin |
234 | - @change_password.update_attributes!(params[:change_password]) | |
237 | + @change_password.update!(params[:change_password]) | |
235 | 238 | @change_password.finish |
236 | 239 | render :action => 'new_password_ok' |
237 | 240 | rescue ActiveRecord::RecordInvalid => e |
... | ... | @@ -415,7 +418,7 @@ class AccountController < ApplicationController |
415 | 418 | end |
416 | 419 | |
417 | 420 | def load_enterprise_activation |
418 | - @enterprise_activation ||= EnterpriseActivation.find_by_code(params[:enterprise_code]) | |
421 | + @enterprise_activation ||= EnterpriseActivation.from_code(params[:enterprise_code]).first | |
419 | 422 | end |
420 | 423 | |
421 | 424 | def load_enterprise |
... | ... | @@ -439,7 +442,7 @@ class AccountController < ApplicationController |
439 | 442 | |
440 | 443 | def go_to_initial_page |
441 | 444 | if params[:return_to] |
442 | - redirect_to params[:return_to] | |
445 | + redirect_to url_for(params[:return_to]) | |
443 | 446 | elsif environment.enabled?('allow_change_of_redirection_after_login') |
444 | 447 | check_redirection_options(user, user.preferred_login_redirection, user.admin_url) |
445 | 448 | else |
... | ... | @@ -500,7 +503,7 @@ class AccountController < ApplicationController |
500 | 503 | def check_redirection |
501 | 504 | unless params[:redirection].blank? |
502 | 505 | session[:return_to] = @user.return_to |
503 | - @user.update_attributes(:return_to => nil) | |
506 | + @user.update(:return_to => nil) | |
504 | 507 | end |
505 | 508 | end |
506 | 509 | ... | ... |
app/controllers/public/chat_controller.rb
... | ... | @@ -67,7 +67,7 @@ class ChatController < PublicController |
67 | 67 | |
68 | 68 | def update_presence_status |
69 | 69 | if request.xhr? |
70 | - current_user.update_attributes({:chat_status_at => DateTime.now}.merge(params[:status] || {})) | |
70 | + current_user.update({:chat_status_at => DateTime.now}.merge(params[:status] || {})) | |
71 | 71 | end |
72 | 72 | render :nothing => true |
73 | 73 | end | ... | ... |
app/controllers/public/comment_controller.rb
... | ... | @@ -78,7 +78,7 @@ class CommentController < ApplicationController |
78 | 78 | respond_to do |format| |
79 | 79 | format.js do |
80 | 80 | comment_to_render = @comment.comment_root |
81 | - render :json => { | |
81 | + render :json => { | |
82 | 82 | :render_target => comment_to_render.anchor, |
83 | 83 | :html => render_to_string(:partial => 'comment', :locals => {:comment => comment_to_render, :display_link => true}), |
84 | 84 | :msg => _('Comment successfully created.') |
... | ... | @@ -114,7 +114,7 @@ class CommentController < ApplicationController |
114 | 114 | end |
115 | 115 | |
116 | 116 | def update |
117 | - if @comment.update_attributes(params[:comment]) | |
117 | + if @comment.update(params[:comment]) | |
118 | 118 | @plugins.dispatch(:process_extra_comment_params, [@comment,params]) |
119 | 119 | |
120 | 120 | respond_to do |format| | ... | ... |
app/controllers/public/enterprise_registration_controller.rb
... | ... | @@ -4,7 +4,7 @@ class EnterpriseRegistrationController < ApplicationController |
4 | 4 | before_filter :login_required |
5 | 5 | |
6 | 6 | # Just go to the first step. |
7 | - # | |
7 | + # | |
8 | 8 | # FIXME: shouldn't this action present some sort of welcome message and point |
9 | 9 | # to the first step explicitly? |
10 | 10 | def index |
... | ... | @@ -15,7 +15,7 @@ class EnterpriseRegistrationController < ApplicationController |
15 | 15 | @create_enterprise.target = Profile.find(params[:create_enterprise][:target_id]) |
16 | 16 | end |
17 | 17 | elsif @validation == :admin || @validation == :none |
18 | - @create_enterprise.target = environment | |
18 | + @create_enterprise.target = environment | |
19 | 19 | end |
20 | 20 | @create_enterprise.requestor = user |
21 | 21 | the_action = |
... | ... | @@ -40,7 +40,7 @@ class EnterpriseRegistrationController < ApplicationController |
40 | 40 | |
41 | 41 | protected |
42 | 42 | |
43 | - # Fill in the form and select your Region. | |
43 | + # Fill in the form and select your Region. | |
44 | 44 | # |
45 | 45 | # Posts back. |
46 | 46 | def basic_information | ... | ... |
app/controllers/public/profile_controller.rb
... | ... | @@ -7,6 +7,7 @@ class ProfileController < PublicController |
7 | 7 | |
8 | 8 | helper TagsHelper |
9 | 9 | helper ActionTrackerHelper |
10 | + helper CustomFieldsHelper | |
10 | 11 | |
11 | 12 | protect 'send_mail_to_members', :profile, :only => [:send_mail] |
12 | 13 | |
... | ... | @@ -37,7 +38,7 @@ class ProfileController < PublicController |
37 | 38 | |
38 | 39 | def tag_feed |
39 | 40 | @tag = params[:id] |
40 | - tagged = profile.articles.paginate(:per_page => 20, :page => 1, :order => 'published_at DESC', :include => :tags, :conditions => ['tags.name LIKE ?', @tag]) | |
41 | + tagged = profile.articles.paginate(:per_page => 20, :page => 1).order('published_at DESC').joins(:tags).where('tags.name LIKE ?', @tag) | |
41 | 42 | feed_writer = FeedWriter.new |
42 | 43 | data = feed_writer.write( |
43 | 44 | tagged, |
... | ... | @@ -228,7 +229,7 @@ class ProfileController < PublicController |
228 | 229 | end |
229 | 230 | |
230 | 231 | def more_replies |
231 | - activity = Scrap.find(:first, :conditions => {:id => params[:activity], :receiver_id => @profile, :scrap_id => nil}) | |
232 | + activity = Scrap.where(:id => params[:activity], :receiver_id => @profile, :scrap_id => nil).first | |
232 | 233 | comments_count = activity.replies.count |
233 | 234 | comment_page = (params[:comment_page] || 1).to_i |
234 | 235 | comments_per_page = 5 |
... | ... | @@ -275,7 +276,7 @@ class ProfileController < PublicController |
275 | 276 | def remove_notification |
276 | 277 | begin |
277 | 278 | raise if !can_edit_profile |
278 | - notification = ActionTrackerNotification.find(:first, :conditions => {:profile_id => profile.id, :action_tracker_id => params[:activity_id]}) | |
279 | + notification = ActionTrackerNotification.where(profile_id: profile.id, action_tracker_id: params[:activity_id]).first | |
279 | 280 | notification.destroy |
280 | 281 | render :text => _('Notification successfully removed.') |
281 | 282 | rescue | ... | ... |
app/controllers/public/search_controller.rb
... | ... | @@ -17,7 +17,7 @@ class SearchController < PublicController |
17 | 17 | # Backwards compatibility with old URLs |
18 | 18 | def redirect_asset_param |
19 | 19 | return unless params.has_key?(:asset) |
20 | - redirect_to params.merge(:action => params.delete(:asset)) | |
20 | + redirect_to url_for(params.merge action: params.delete(:asset)) | |
21 | 21 | end |
22 | 22 | |
23 | 23 | no_design_blocks |
... | ... | @@ -65,12 +65,12 @@ class SearchController < PublicController |
65 | 65 | end |
66 | 66 | |
67 | 67 | def articles |
68 | - @scope = @environment.articles.public | |
68 | + @scope = @environment.articles.is_public | |
69 | 69 | full_text_search |
70 | 70 | end |
71 | 71 | |
72 | 72 | def contents |
73 | - redirect_to params.merge(:action => :articles) | |
73 | + redirect_to url_for(params.merge action: :articles) | |
74 | 74 | end |
75 | 75 | |
76 | 76 | def people |
... | ... | @@ -125,7 +125,7 @@ class SearchController < PublicController |
125 | 125 | # keep old URLs workings |
126 | 126 | def assets |
127 | 127 | params[:action] = params[:asset].is_a?(Array) ? :index : params.delete(:asset) |
128 | - redirect_to params | |
128 | + redirect_to url_for(params) | |
129 | 129 | end |
130 | 130 | |
131 | 131 | def tags | ... | ... |
app/controllers/themes_controller.rb
... | ... | @@ -13,7 +13,7 @@ class ThemesController < ApplicationController |
13 | 13 | |
14 | 14 | def index |
15 | 15 | @environment = environment |
16 | - @themes = (environment.themes + Theme.approved_themes(target)).sort_by { |t| t.name } | |
16 | + @themes = (environment.themes + Theme.approved_themes(target)).uniq.sort_by { |t| t.name } | |
17 | 17 | |
18 | 18 | @current_theme = target.theme |
19 | 19 | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -8,6 +8,10 @@ module ApplicationHelper |
8 | 8 | |
9 | 9 | include PermissionNameHelper |
10 | 10 | |
11 | + include UrlHelper | |
12 | + | |
13 | + include PartialsHelper | |
14 | + | |
11 | 15 | include ModalHelper |
12 | 16 | |
13 | 17 | include BoxesHelper |
... | ... | @@ -283,36 +287,6 @@ module ApplicationHelper |
283 | 287 | concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options)) |
284 | 288 | end |
285 | 289 | |
286 | - | |
287 | - def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil) | |
288 | - return nil if klass.nil? | |
289 | - name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_') | |
290 | - | |
291 | - search_name = String.new(name) | |
292 | - if search_name.include?("/") | |
293 | - search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2') | |
294 | - name = File.join(params[:controller], name) if defined?(params) && params[:controller] | |
295 | - else | |
296 | - search_name = "_" + search_name | |
297 | - end | |
298 | - | |
299 | - path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb') | |
300 | - return name if File.exists?(File.join(path)) | |
301 | - | |
302 | - partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix) | |
303 | - end | |
304 | - | |
305 | - def partial_for_class(klass, prefix=nil, suffix=nil) | |
306 | - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? | |
307 | - name = klass.name.underscore | |
308 | - controller.view_paths.each do |view_path| | |
309 | - partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix) | |
310 | - return partial if partial | |
311 | - end | |
312 | - | |
313 | - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' | |
314 | - end | |
315 | - | |
316 | 290 | def render_profile_actions klass |
317 | 291 | name = klass.to_s.underscore |
318 | 292 | begin |
... | ... | @@ -909,8 +883,14 @@ module ApplicationHelper |
909 | 883 | end |
910 | 884 | alias :top_url :base_url |
911 | 885 | |
886 | + class View < ActionView::Base | |
887 | + def url_for *args | |
888 | + self.controller.url_for *args | |
889 | + end | |
890 | + end | |
891 | + | |
912 | 892 | def helper_for_article(article) |
913 | - article_helper = ActionView::Base.new | |
893 | + article_helper = View.new | |
914 | 894 | article_helper.controller = controller |
915 | 895 | article_helper.extend ArticleHelper |
916 | 896 | article_helper.extend Rails.application.routes.url_helpers | ... | ... |
app/helpers/block_helper.rb
... | ... | @@ -19,7 +19,7 @@ module BlockHelper |
19 | 19 | content_tag('span', _('Title')) + |
20 | 20 | text_field_tag('block[images][][title]', image[:title], :class => 'highlight-title', :size => 45) |
21 | 21 | }</label></td> |
22 | - <td>#{button_without_text(:delete, _('Remove'), '#', class: 'delete-highlight', :confirm=>_('Are you sure you want to remove this highlight'))}</td> | |
22 | + <td>#{button_without_text(:delete, _('Remove'), '#', class: 'delete-highlight', data: {confirm: _('Are you sure you want to remove this highlight')})}</td> | |
23 | 23 | </tr> |
24 | 24 | " |
25 | 25 | end | ... | ... |
app/helpers/boxes_helper.rb
... | ... | @@ -255,7 +255,7 @@ module BoxesHelper |
255 | 255 | end |
256 | 256 | |
257 | 257 | if movable?(block) && !block.main? |
258 | - buttons << icon_button(:delete, _('Remove block'), { :action => 'remove', :id => block.id }, { :method => 'post', :confirm => _('Are you sure you want to remove this block?')}) | |
258 | + buttons << icon_button(:delete, _('Remove block'), { action: 'remove', id: block.id }, method: 'post', data: {confirm: _('Are you sure you want to remove this block?')}) | |
259 | 259 | buttons << icon_button(:clone, _('Clone'), { :action => 'clone_block', :id => block.id }, { :method => 'post' }) |
260 | 260 | end |
261 | 261 | ... | ... |
app/helpers/cms_helper.rb
... | ... | @@ -34,7 +34,7 @@ module CmsHelper |
34 | 34 | end |
35 | 35 | |
36 | 36 | def display_delete_button(article) |
37 | - expirable_button article, :delete, _('Delete'), { :action => 'destroy', :id => article.id }, :method => :post, :confirm => delete_article_message(article) | |
37 | + expirable_button article, :delete, _('Delete'), { :action => 'destroy', :id => article.id }, :method => :post, 'data-confirm' => delete_article_message(article) | |
38 | 38 | end |
39 | 39 | |
40 | 40 | def expirable_button(content, action, title, url, options = {}) |
... | ... | @@ -42,7 +42,7 @@ module CmsHelper |
42 | 42 | if reason.present? |
43 | 43 | options[:class] = (options[:class] || '') + ' disabled' |
44 | 44 | options[:disabled] = 'disabled' |
45 | - options.delete(:confirm) | |
45 | + options.delete('data-confirm') | |
46 | 46 | options.delete(:method) |
47 | 47 | title = reason |
48 | 48 | end | ... | ... |
... | ... | @@ -0,0 +1,58 @@ |
1 | +module CustomFieldsHelper | |
2 | + | |
3 | + def format_name(format) | |
4 | + names = {} | |
5 | + names['string'] = _('String') | |
6 | + names['text'] = _('Text') | |
7 | + names['date'] = _('Date') | |
8 | + names['numeric'] = _('Numeric') | |
9 | + names['link'] = _('Link') | |
10 | + names['list'] = _('List') | |
11 | + names['checkbox'] = _('Checkbox') | |
12 | + names[format] | |
13 | + end | |
14 | + | |
15 | + def custom_field_forms(customized_type) | |
16 | + forms = [] | |
17 | + forms << [_('String'), form_for_format(customized_type,'string')] | |
18 | + forms << [_('Text'), form_for_format(customized_type,'text')] | |
19 | + forms << [_('Date'), form_for_format(customized_type,'date')] | |
20 | + forms << [_('Numeric'), form_for_format(customized_type,'numeric')] | |
21 | + forms << [_('Link'), form_for_format(customized_type,'link')] | |
22 | + forms << [_('List'), form_for_format(customized_type,'list')] | |
23 | + forms << [_('Checkbox'), form_for_format(customized_type,'checkbox')] | |
24 | + forms | |
25 | + end | |
26 | + | |
27 | + def render_extras_field(id, extra=nil, field=nil) | |
28 | + if extra.nil? | |
29 | + CGI::escapeHTML((render(:partial => 'features/custom_fields/extras_field', :locals => {:id => id, :extra => nil, :field => field}))) | |
30 | + else | |
31 | + render :partial => 'features/custom_fields/extras_field', :locals => {:id => id, :extra => extra, :field => field} | |
32 | + end | |
33 | + end | |
34 | + | |
35 | + def form_for_field(field, customized_type) | |
36 | + render :partial => 'features/custom_fields/form', :locals => {:field => field} | |
37 | + end | |
38 | + | |
39 | + def display_custom_field_value(custom_field_value) | |
40 | + value = profile.custom_value(custom_field_value.custom_field.name) | |
41 | + case custom_field_value.custom_field.format | |
42 | + when 'text', 'list', 'numeric', 'date', 'string' | |
43 | + value | |
44 | + when 'checkbox' | |
45 | + value == "1" ? _('Yes') : _('No') | |
46 | + when 'link' | |
47 | + url = value[/\Ahttps?:\/\//i] ? value : "http://#{value}" | |
48 | + link_to(value, url, :target => '_blank') | |
49 | + end | |
50 | + end | |
51 | + | |
52 | + private | |
53 | + | |
54 | + def form_for_format(customized_type, format) | |
55 | + field = CustomField.new(:format => format, :customized_type => customized_type, :environment => environment) | |
56 | + CGI::escapeHTML((render(:partial => 'features/custom_fields/form', :locals => {:field => field}))) | |
57 | + end | |
58 | +end | ... | ... |
app/helpers/events_helper.rb
... | ... | @@ -24,7 +24,8 @@ module EventsHelper |
24 | 24 | end |
25 | 25 | |
26 | 26 | def populate_calendar(selected_date, events) |
27 | - events.reject! {|event| !event.display_to?(user)} | |
27 | + selected_date = selected_date.to_date | |
28 | + events = events.reject{ |event| !event.display_to? user } | |
28 | 29 | calendar = Event.date_range(selected_date.year, selected_date.month).map do |date| |
29 | 30 | [ |
30 | 31 | # the day itself | ... | ... |
app/helpers/folder_helper.rb
... | ... | @@ -5,13 +5,11 @@ module FolderHelper |
5 | 5 | def list_contents(configure={}) |
6 | 6 | configure[:recursive] ||= false |
7 | 7 | configure[:list_type] ||= :folder |
8 | - if !configure[:contents].blank? | |
9 | - configure[:contents] = configure[:contents].paginate( | |
10 | - :order => "name ASC", | |
11 | - :per_page => 30, | |
12 | - :page => params[:npage] | |
13 | - ) | |
14 | - | |
8 | + contents = configure[:contents] | |
9 | + contents = contents.order('name ASC') unless contents.is_a? Array | |
10 | + contents = contents.paginate per_page: 30, page: params[:npage] | |
11 | + configure[:contents] = contents | |
12 | + if contents.present? | |
15 | 13 | render :file => 'shared/content_list', :locals => configure |
16 | 14 | else |
17 | 15 | content_tag('em', _('(empty folder)')) | ... | ... |
app/helpers/forms_helper.rb
... | ... | @@ -184,9 +184,9 @@ module FormsHelper |
184 | 184 | datepicker_options[:year_suffix] ||= '' |
185 | 185 | |
186 | 186 | element_id = html_options[:id] || 'datepicker-date' |
187 | - value_js_formatted = value.present? ? value.strftime('%Y-%m-%d %H:%S') : nil | |
188 | 187 | value = value.strftime(format) if value.present? |
189 | 188 | method = datepicker_options[:time] ? 'datetimepicker' : 'datepicker' |
189 | + current_date_or_nil = value.present? ? "new Date('#{value}')" : "null" | |
190 | 190 | result = text_field_tag(name, value, html_options) |
191 | 191 | result += |
192 | 192 | " |
... | ... | @@ -237,7 +237,7 @@ module FormsHelper |
237 | 237 | weekHeader: #{datepicker_options[:week_header].to_json}, |
238 | 238 | yearRange: #{datepicker_options[:year_range].to_json}, |
239 | 239 | yearSuffix: #{datepicker_options[:year_suffix].to_json} |
240 | - }).datepicker('setDate', new Date('#{value_js_formatted}')) | |
240 | + }).datepicker('setDate', current_date_or_nil) | |
241 | 241 | </script> |
242 | 242 | ".html_safe |
243 | 243 | result | ... | ... |
... | ... | @@ -0,0 +1,43 @@ |
1 | +module PartialsHelper | |
2 | + | |
3 | + def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil) | |
4 | + return nil if klass.nil? | |
5 | + name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_') | |
6 | + | |
7 | + search_name = String.new(name) | |
8 | + if search_name.include?("/") | |
9 | + search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2') | |
10 | + name = File.join(params[:controller], name) if defined?(params) && params[:controller] | |
11 | + else | |
12 | + search_name = "_" + search_name | |
13 | + end | |
14 | + | |
15 | + path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb') | |
16 | + return name if File.exists?(File.join(path)) | |
17 | + | |
18 | + partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix) | |
19 | + end | |
20 | + | |
21 | + def partial_for_class(klass, prefix=nil, suffix=nil) | |
22 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? | |
23 | + name = klass.name.underscore | |
24 | + controller.view_paths.each do |view_path| | |
25 | + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix) | |
26 | + return partial if partial | |
27 | + end | |
28 | + | |
29 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' | |
30 | + end | |
31 | + | |
32 | + def render_partial_for_class klass, *args | |
33 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? | |
34 | + begin | |
35 | + partial = klass.name.underscore | |
36 | + partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/' | |
37 | + return render partial, *args | |
38 | + rescue ActionView::MissingTemplate | |
39 | + return render_partial_for_class klass.superclass, *args | |
40 | + end | |
41 | + end | |
42 | + | |
43 | +end | ... | ... |
app/helpers/tinymce_helper.rb
... | ... | @@ -20,18 +20,9 @@ module TinymceHelper |
20 | 20 | :image_advtab => true, |
21 | 21 | :language => tinymce_language |
22 | 22 | |
23 | - options[:toolbar1] = "fullscreen | insertfile undo redo | copy paste | bold italic underline | styleselect fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image" | |
24 | - if options[:mode] == 'simple' | |
25 | - options[:menubar] = false | |
26 | - else | |
27 | - options[:menubar] = 'edit insert view tools' | |
28 | - options[:toolbar2] = 'print preview code media | table' | |
29 | - | |
30 | - options[:toolbar2] += ' | macros' | |
31 | - macros_with_buttons.each do |macro| | |
32 | - options[:toolbar2] += " #{macro.identifier}" | |
33 | - end | |
34 | - end | |
23 | + options[:toolbar1] = toolbar1(options[:mode]) | |
24 | + options[:menubar] = menubar(options[:mode]) | |
25 | + options[:toolbar2] = toolbar2(options[:mode]) | |
35 | 26 | |
36 | 27 | options[:macros_setup] = macros_with_buttons.map do |macro| |
37 | 28 | <<-EOS |
... | ... | @@ -49,4 +40,29 @@ module TinymceHelper |
49 | 40 | "noosfero.tinymce.init(#{options.to_json})" |
50 | 41 | end |
51 | 42 | |
43 | + def menubar mode | |
44 | + if mode =='restricted' || mode == 'simple' | |
45 | + return false | |
46 | + end | |
47 | + return 'edit insert view tools' | |
48 | + end | |
49 | + | |
50 | + def toolbar1 mode | |
51 | + if mode == 'restricted' | |
52 | + return "bold italic underline | link" | |
53 | + end | |
54 | + return "fullscreen | insertfile undo redo | copy paste | bold italic underline | styleselect fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image" | |
55 | + end | |
56 | + | |
57 | + def toolbar2 mode | |
58 | + if mode.blank? | |
59 | + toolbar2 = 'print preview code media | table' | |
60 | + toolbar2 += ' | macros' | |
61 | + macros_with_buttons.each do |macro| | |
62 | + toolbar2 += " #{macro.identifier}" | |
63 | + end | |
64 | + return toolbar2 | |
65 | + end | |
66 | + end | |
67 | + | |
52 | 68 | end | ... | ... |
... | ... | @@ -0,0 +1,18 @@ |
1 | +require_relative '../helpers/application_helper' | |
2 | + | |
3 | +class ApplicationMailer < ActionMailer::Base | |
4 | + | |
5 | + include AuthenticatedSystem | |
6 | + | |
7 | + helper ApplicationHelper | |
8 | + | |
9 | + attr_accessor :environment | |
10 | + | |
11 | + def default_url_options options = nil | |
12 | + options ||= {} | |
13 | + options[:host] = environment.default_hostname if environment | |
14 | + options | |
15 | + end | |
16 | + | |
17 | +end | |
18 | + | ... | ... |
app/mailers/comment_notifier.rb
1 | -class CommentNotifier < ActionMailer::Base | |
1 | +class CommentNotifier < ApplicationMailer | |
2 | + | |
2 | 3 | def notification(comment) |
3 | 4 | profile = comment.article.profile |
5 | + self.environment = profile.environment | |
4 | 6 | @recipient = profile.nickname || profile.name |
5 | 7 | @sender = comment.author_name |
6 | 8 | @sender_link = comment.author_link |
... | ... | @@ -8,7 +10,6 @@ class CommentNotifier < ActionMailer::Base |
8 | 10 | @comment_url = comment.url |
9 | 11 | @comment_title = comment.title |
10 | 12 | @comment_body = comment.body |
11 | - @environment = profile.environment.name | |
12 | 13 | @url = profile.environment.top_url |
13 | 14 | |
14 | 15 | mail( |
... | ... | @@ -20,6 +21,8 @@ class CommentNotifier < ActionMailer::Base |
20 | 21 | |
21 | 22 | def mail_to_followers(comment, emails) |
22 | 23 | profile = comment.article.profile |
24 | + self.environment = profile.environment | |
25 | + | |
23 | 26 | @recipient = profile.nickname || profile.name |
24 | 27 | @sender = comment.author_name |
25 | 28 | @sender_link = comment.author_link |
... | ... | @@ -28,7 +31,6 @@ class CommentNotifier < ActionMailer::Base |
28 | 31 | @unsubscribe_url = comment.article.view_url.merge({:unfollow => true}) |
29 | 32 | @comment_title = comment.title |
30 | 33 | @comment_body = comment.body |
31 | - @environment = profile.environment.name | |
32 | 34 | @url = profile.environment.top_url |
33 | 35 | |
34 | 36 | mail( | ... | ... |
app/mailers/contact.rb
... | ... | @@ -30,14 +30,16 @@ class Contact |
30 | 30 | Contact::Sender.notification(self).deliver |
31 | 31 | end |
32 | 32 | |
33 | - class Sender < ActionMailer::Base | |
33 | + class Sender < ApplicationMailer | |
34 | + | |
34 | 35 | def notification(contact) |
36 | + self.environment = contact.dest.environment | |
37 | + | |
35 | 38 | @name = contact.name |
36 | 39 | @email = contact.email |
37 | 40 | @city = contact.city |
38 | 41 | @state = contact.state |
39 | 42 | @message = contact.message |
40 | - @environment = contact.dest.environment.name | |
41 | 43 | @url = url_for(:host => contact.dest.environment.default_hostname, :controller => 'home') |
42 | 44 | @target = contact.dest.name |
43 | 45 | ... | ... |
app/mailers/environment_mailing.rb
1 | 1 | class EnvironmentMailing < Mailing |
2 | 2 | |
3 | 3 | def recipients(offset=0, limit=100) |
4 | - source.people.all(:order => :id, :offset => offset, :limit => limit, :joins => "LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)", :conditions => { "m.person_id" => nil }) | |
4 | + source.people.order(:id).offset(offset).limit(limit) | |
5 | + .joins("LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)") | |
6 | + .where("m.person_id" => nil) | |
5 | 7 | end |
6 | 8 | |
7 | 9 | def each_recipient | ... | ... |
app/mailers/mailing.rb
... | ... | @@ -46,7 +46,8 @@ class Mailing < ActiveRecord::Base |
46 | 46 | end |
47 | 47 | end |
48 | 48 | |
49 | - class Sender < ActionMailer::Base | |
49 | + class Sender < ApplicationMailer | |
50 | + | |
50 | 51 | def notification(mailing, recipient) |
51 | 52 | @message = mailing.body |
52 | 53 | @signature_message = mailing.signature_message | ... | ... |
app/mailers/organization_mailing.rb
... | ... | @@ -5,7 +5,9 @@ class OrganizationMailing < Mailing |
5 | 5 | end |
6 | 6 | |
7 | 7 | def recipients(offset=0, limit=100) |
8 | - source.members.all(:order => :id, :offset => offset, :limit => limit, :joins => "LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)", :conditions => { "m.person_id" => nil }) | |
8 | + source.members.order(:id).offset(offset).limit(limit) | |
9 | + .joins("LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)") | |
10 | + .where("m.person_id" => nil) | |
9 | 11 | end |
10 | 12 | |
11 | 13 | def each_recipient | ... | ... |
app/mailers/pending_task_notifier.rb
1 | -class PendingTaskNotifier < ActionMailer::Base | |
1 | +class PendingTaskNotifier < ApplicationMailer | |
2 | 2 | |
3 | 3 | def notification(person) |
4 | + self.environment = person.environment | |
5 | + | |
4 | 6 | @person = person |
5 | 7 | @tasks = person.tasks.pending |
6 | 8 | @organizations_with_pending_tasks = person.organizations_with_pending_tasks |
7 | - @environment = person.environment.name | |
8 | 9 | @url = url_for(:host => person.environment.default_hostname, :controller => 'home') |
9 | 10 | @default_hostname = person.environment.default_hostname |
10 | 11 | @url_for_pending_tasks = url_for(:host => person.environment.default_hostname, :controller => 'tasks', :profile => person.identifier) | ... | ... |
app/mailers/scrap_notifier.rb
1 | -class ScrapNotifier < ActionMailer::Base | |
1 | +class ScrapNotifier < ApplicationMailer | |
2 | + | |
2 | 3 | def notification(scrap) |
3 | 4 | sender, receiver = scrap.sender, scrap.receiver |
5 | + self.environment = sender.environment | |
4 | 6 | # for tests |
5 | 7 | return unless receiver.email |
6 | 8 | |
... | ... | @@ -9,7 +11,6 @@ class ScrapNotifier < ActionMailer::Base |
9 | 11 | @sender_link = sender.url |
10 | 12 | @scrap_content = scrap.content |
11 | 13 | @wall_url = scrap.scrap_wall_url |
12 | - @environment = sender.environment.name | |
13 | 14 | @url = sender.environment.top_url |
14 | 15 | mail( |
15 | 16 | to: receiver.email, | ... | ... |
app/mailers/task_mailer.rb
1 | -class TaskMailer < ActionMailer::Base | |
1 | +class TaskMailer < ApplicationMailer | |
2 | 2 | |
3 | 3 | include EmailTemplateHelper |
4 | 4 | |
5 | 5 | def target_notification(task, message) |
6 | + self.environment = task.environment | |
7 | + | |
6 | 8 | @message = extract_message(message) |
7 | 9 | @target = task.target.name |
8 | - @environment = task.environment.name | |
9 | 10 | @url = generate_environment_url(task, :controller => 'home') |
10 | 11 | url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url.merge(:script_name => Noosfero.root('/'))) |
11 | 12 | @tasks_url = url_for_tasks_list |
... | ... | @@ -13,35 +14,38 @@ class TaskMailer < ActionMailer::Base |
13 | 14 | mail( |
14 | 15 | to: task.target.notification_emails.compact, |
15 | 16 | from: self.class.generate_from(task), |
16 | - subject: "[%s] %s" % [task.environment.name, task.target_notification_description] | |
17 | + subject: "[%s] %s" % [self.environment.name, task.target_notification_description] | |
17 | 18 | ) |
18 | 19 | end |
19 | 20 | |
20 | 21 | def invitation_notification(task) |
22 | + self.environment = task.requestor.environment | |
23 | + | |
21 | 24 | msg = task.expanded_message |
22 | 25 | @message = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) |
23 | 26 | |
24 | 27 | mail( |
25 | 28 | to: task.friend_email, |
26 | 29 | from: self.class.generate_from(task), |
27 | - subject: '[%s] %s' % [ task.requestor.environment.name, task.target_notification_description ] | |
30 | + subject: '[%s] %s' % [ self.environment.name, task.target_notification_description ] | |
28 | 31 | ) |
29 | 32 | end |
30 | 33 | |
31 | 34 | def generic_message(name, task) |
35 | + self.environment = task.requestor.environment | |
36 | + | |
32 | 37 | return if !task.respond_to?("#{name}_message") |
33 | 38 | |
34 | 39 | @message = extract_message(task.send("#{name}_message")) |
35 | 40 | @requestor = task.requestor.name |
36 | - @environment = task.requestor.environment.name | |
37 | - @url = url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') | |
41 | + @url = url_for(:host => self.environment.default_hostname, :controller => 'home') | |
38 | 42 | |
39 | 43 | mail_with_template( |
40 | 44 | to: task.requestor.notification_emails, |
41 | 45 | from: self.class.generate_from(task), |
42 | - subject: '[%s] %s' % [task.requestor.environment.name, task.target_notification_description], | |
46 | + subject: '[%s] %s' % [self.environment.name, task.target_notification_description], | |
43 | 47 | email_template: task.email_template, |
44 | - template_params: {:environment => task.requestor.environment, :task => task, :message => @message, :url => @url, :requestor => task.requestor} | |
48 | + template_params: {:environment => self.environment, :task => task, :message => @message, :url => @url, :requestor => task.requestor} | |
45 | 49 | ) |
46 | 50 | end |
47 | 51 | ... | ... |
app/mailers/user_mailer.rb
1 | -class UserMailer < ActionMailer::Base | |
1 | +class UserMailer < ApplicationMailer | |
2 | 2 | |
3 | 3 | include EmailTemplateHelper |
4 | 4 | |
5 | 5 | def activation_email_notify(user) |
6 | + self.environment = user.environment | |
7 | + | |
6 | 8 | user_email = "#{user.login}@#{user.email_domain}" |
7 | 9 | @name = user.name |
8 | 10 | @email = user_email |
9 | 11 | @webmail = MailConf.webmail_url(user.login, user.email_domain) |
10 | - @environment = user.environment.name | |
11 | 12 | @url = url_for(:host => user.environment.default_hostname, :controller => 'home') |
12 | 13 | |
13 | 14 | mail( |
... | ... | @@ -18,9 +19,10 @@ class UserMailer < ActionMailer::Base |
18 | 19 | end |
19 | 20 | |
20 | 21 | def activation_code(user) |
22 | + self.environment = user.environment | |
23 | + | |
21 | 24 | @recipient = user.name |
22 | 25 | @activation_code = user.activation_code |
23 | - @environment = user.environment.name | |
24 | 26 | @url = user.environment.top_url |
25 | 27 | @redirection = (true if user.return_to) |
26 | 28 | @join = (user.community_to_join if user.community_to_join) |
... | ... | @@ -35,6 +37,8 @@ class UserMailer < ActionMailer::Base |
35 | 37 | end |
36 | 38 | |
37 | 39 | def signup_welcome_email(user) |
40 | + self.environment = user.environment | |
41 | + | |
38 | 42 | @body = user.environment.signup_welcome_text_body.gsub('{user_name}', user.name) |
39 | 43 | email_subject = user.environment.signup_welcome_text_subject |
40 | 44 | mail( |
... | ... | @@ -47,8 +51,9 @@ class UserMailer < ActionMailer::Base |
47 | 51 | end |
48 | 52 | |
49 | 53 | def profiles_suggestions_email(user) |
54 | + self.environment = user.environment | |
55 | + | |
50 | 56 | @recipient = user.name |
51 | - @environment = user.environment.name | |
52 | 57 | @url = user.environment.top_url |
53 | 58 | @people_suggestions_url = user.people_suggestions_url |
54 | 59 | @people_suggestions = user.suggested_people.sample(3) | ... | ... |
app/models/add_member.rb
app/models/approve_comment.rb
... | ... | @@ -8,7 +8,7 @@ class ApproveComment < Task |
8 | 8 | def comment |
9 | 9 | unless @comment || self.comment_attributes.nil? |
10 | 10 | @comment = Comment.new |
11 | - @comment.assign_attributes(ActiveSupport::JSON.decode(self.comment_attributes), :without_protection => true) | |
11 | + @comment.assign_attributes(ActiveSupport::JSON.decode(self.comment_attributes.to_s), :without_protection => true) | |
12 | 12 | end |
13 | 13 | @comment |
14 | 14 | end | ... | ... |
app/models/article.rb
... | ... | @@ -83,7 +83,7 @@ class Article < ActiveRecord::Base |
83 | 83 | |
84 | 84 | has_many :comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc' |
85 | 85 | |
86 | - has_many :article_categorizations, :conditions => [ 'articles_categories.virtual = ?', false ] | |
86 | + has_many :article_categorizations, -> { where 'articles_categories.virtual = ?', false } | |
87 | 87 | has_many :categories, :through => :article_categorizations |
88 | 88 | |
89 | 89 | has_many :article_categorizations_including_virtual, :class_name => 'ArticleCategorization' |
... | ... | @@ -135,17 +135,15 @@ class Article < ActiveRecord::Base |
135 | 135 | |
136 | 136 | xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' |
137 | 137 | |
138 | - scope :in_category, lambda { |category| | |
139 | - {:include => 'categories_including_virtual', :conditions => { 'categories.id' => category.id }} | |
138 | + scope :in_category, -> category { | |
139 | + includes('categories_including_virtual').where('categories.id' => category.id) | |
140 | 140 | } |
141 | 141 | |
142 | 142 | include TimeScopes |
143 | 143 | |
144 | - scope :by_range, lambda { |range| { | |
145 | - :conditions => [ | |
146 | - 'articles.published_at BETWEEN :start_date AND :end_date', { :start_date => range.first, :end_date => range.last } | |
147 | - ] | |
148 | - }} | |
144 | + scope :by_range, -> range { | |
145 | + where 'articles.published_at BETWEEN :start_date AND :end_date', { start_date: range.first, end_date: range.last } | |
146 | + } | |
149 | 147 | |
150 | 148 | URL_FORMAT = /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\Z/ix |
151 | 149 | |
... | ... | @@ -269,19 +267,21 @@ class Article < ActiveRecord::Base |
269 | 267 | |
270 | 268 | # retrieves all articles belonging to the given +profile+ that are not |
271 | 269 | # sub-articles of any other article. |
272 | - scope :top_level_for, lambda { |profile| | |
273 | - {:conditions => [ 'parent_id is null and profile_id = ?', profile.id ]} | |
270 | + scope :top_level_for, -> profile { | |
271 | + where 'parent_id is null and profile_id = ?', profile.id | |
274 | 272 | } |
275 | 273 | |
276 | - scope :public, | |
277 | - :conditions => [ "articles.advertise = ? AND articles.published = ? AND profiles.visible = ? AND profiles.public_profile = ?", true, true, true, true ], :joins => [:profile] | |
274 | + scope :is_public, -> { | |
275 | + joins(:profile). | |
276 | + where("articles.advertise = ? AND articles.published = ? AND profiles.visible = ? AND profiles.public_profile = ?", true, true, true, true) | |
277 | + } | |
278 | 278 | |
279 | - scope :more_recent, | |
280 | - :conditions => [ "advertise = ? AND published = ? AND profiles.visible = ? AND profiles.public_profile = ? AND | |
281 | - ((articles.type != ?) OR articles.type is NULL)", | |
282 | - true, true, true, true, 'RssFeed' | |
283 | - ], | |
284 | - :order => 'articles.published_at desc, articles.id desc' | |
279 | + scope :more_recent, -> { | |
280 | + order('articles.published_at desc, articles.id desc') | |
281 | + .where("articles.advertise = ? AND articles.published = ? AND profiles.visible = ? AND profiles.public_profile = ? AND | |
282 | + ((articles.type != ?) OR articles.type is NULL)", | |
283 | + true, true, true, true, 'RssFeed') | |
284 | + } | |
285 | 285 | |
286 | 286 | # retrives the most commented articles, sorted by the comment count (largest |
287 | 287 | # first) |
... | ... | @@ -289,12 +289,14 @@ class Article < ActiveRecord::Base |
289 | 289 | paginate(:order => 'comments_count DESC', :page => 1, :per_page => limit) |
290 | 290 | end |
291 | 291 | |
292 | - scope :more_popular, :order => 'hits DESC' | |
293 | - scope :relevant_as_recent, :conditions => ["(articles.type != 'UploadedFile' and articles.type != 'RssFeed' and articles.type != 'Blog') OR articles.type is NULL"] | |
292 | + scope :more_popular, -> { order 'hits DESC' } | |
293 | + scope :relevant_as_recent, -> { | |
294 | + where "(articles.type != 'UploadedFile' and articles.type != 'RssFeed' and articles.type != 'Blog') OR articles.type is NULL" | |
295 | + } | |
294 | 296 | |
295 | 297 | def self.recent(limit = nil, extra_conditions = {}, pagination = true) |
296 | 298 | result = scoped({:conditions => extra_conditions}). |
297 | - public. | |
299 | + is_public. | |
298 | 300 | relevant_as_recent. |
299 | 301 | limit(limit). |
300 | 302 | order(['articles.published_at desc', 'articles.id desc']) |
... | ... | @@ -419,7 +421,7 @@ class Article < ActiveRecord::Base |
419 | 421 | self.translations.map(&:language) |
420 | 422 | end |
421 | 423 | |
422 | - scope :native_translations, :conditions => { :translation_of_id => nil } | |
424 | + scope :native_translations, -> { where :translation_of_id => nil } | |
423 | 425 | |
424 | 426 | def translatable? |
425 | 427 | false |
... | ... | @@ -461,7 +463,7 @@ class Article < ActiveRecord::Base |
461 | 463 | |
462 | 464 | def rotate_translations |
463 | 465 | unless self.translations.empty? |
464 | - rotate = self.translations | |
466 | + rotate = self.translations.all | |
465 | 467 | root = rotate.shift |
466 | 468 | root.update_attribute(:translation_of_id, nil) |
467 | 469 | root.translations = rotate |
... | ... | @@ -474,7 +476,7 @@ class Article < ActiveRecord::Base |
474 | 476 | elsif self.native_translation.language == locale |
475 | 477 | self.native_translation |
476 | 478 | else |
477 | - self.native_translation.translations.first(:conditions => { :language => locale }) | |
479 | + self.native_translation.translations.where(:language => locale).first | |
478 | 480 | end |
479 | 481 | end |
480 | 482 | |
... | ... | @@ -502,19 +504,19 @@ class Article < ActiveRecord::Base |
502 | 504 | ['TextArticle', 'TextileArticle', 'TinyMceArticle'] |
503 | 505 | end |
504 | 506 | |
505 | - scope :published, :conditions => ['articles.published = ?', true] | |
506 | - scope :folders, lambda {|profile|{:conditions => ['articles.type IN (?)', profile.folder_types] }} | |
507 | - scope :no_folders, lambda {|profile|{:conditions => ['articles.type NOT IN (?)', profile.folder_types]}} | |
508 | - scope :galleries, :conditions => [ "articles.type IN ('Gallery')" ] | |
509 | - scope :images, :conditions => { :is_image => true } | |
510 | - scope :no_images, :conditions => { :is_image => false } | |
511 | - scope :text_articles, :conditions => [ 'articles.type IN (?)', text_article_types ] | |
512 | - scope :files, :conditions => { :type => 'UploadedFile' } | |
513 | - scope :with_types, lambda { |types| { :conditions => [ 'articles.type IN (?)', types ] } } | |
507 | + scope :published, -> { where 'articles.published = ?', true } | |
508 | + scope :folders, -> profile { where 'articles.type IN (?)', profile.folder_types } | |
509 | + scope :no_folders, -> profile { where 'articles.type NOT IN (?)', profile.folder_types } | |
510 | + scope :galleries, -> { where "articles.type IN ('Gallery')" } | |
511 | + scope :images, -> { where :is_image => true } | |
512 | + scope :no_images, -> { where :is_image => false } | |
513 | + scope :text_articles, -> { where 'articles.type IN (?)', text_article_types } | |
514 | + scope :files, -> { where :type => 'UploadedFile' } | |
515 | + scope :with_types, -> types { where 'articles.type IN (?)', types } | |
514 | 516 | |
515 | - scope :more_popular, :order => 'hits DESC' | |
516 | - scope :more_comments, :order => "comments_count DESC" | |
517 | - scope :more_recent, :order => "created_at DESC" | |
517 | + scope :more_popular, -> { order 'hits DESC' } | |
518 | + scope :more_comments, -> { order "comments_count DESC" } | |
519 | + scope :more_recent, -> { order "created_at DESC" } | |
518 | 520 | |
519 | 521 | scope :display_filter, lambda {|user, profile| |
520 | 522 | return published if (user.nil? && profile && profile.public?) |
... | ... | @@ -636,7 +638,7 @@ class Article < ActiveRecord::Base |
636 | 638 | ] |
637 | 639 | |
638 | 640 | def self.find_by_old_path(old_path) |
639 | - find(:first, :include => :versions, :conditions => ['article_versions.path = ?', old_path], :order => 'article_versions.id desc') | |
641 | + self.includes(:versions).where('article_versions.path = ?', old_path).order('article_versions.id DESC').first | |
640 | 642 | end |
641 | 643 | |
642 | 644 | def hit |
... | ... | @@ -722,11 +724,11 @@ class Article < ActiveRecord::Base |
722 | 724 | end |
723 | 725 | |
724 | 726 | def get_version(version_number = nil) |
725 | - version_number ? versions.find(:first, :order => 'version', :offset => version_number - 1) : versions.earliest | |
727 | + if version_number then self.versions.order('version').offset(version_number - 1).first else self.versions.earliest end | |
726 | 728 | end |
727 | 729 | |
728 | 730 | def author_by_version(version_number = nil) |
729 | - version_number ? profile.environment.people.find_by_id(get_version(version_number).author_id) : author | |
731 | + if version_number then profile.environment.people.where(id: get_version(version_number).author_id).first else author end | |
730 | 732 | end |
731 | 733 | |
732 | 734 | def author_name(version_number = nil) |
... | ... | @@ -822,7 +824,7 @@ class Article < ActiveRecord::Base |
822 | 824 | end |
823 | 825 | |
824 | 826 | def activity |
825 | - ActionTracker::Record.find_by_target_type_and_target_id 'Article', self.id | |
827 | + ActionTracker::Record.where(target_type: 'Article', target_id: self.id).first | |
826 | 828 | end |
827 | 829 | |
828 | 830 | def create_activity | ... | ... |
app/models/article_categorization.rb
app/models/block.rb
... | ... | @@ -20,7 +20,7 @@ class Block < ActiveRecord::Base |
20 | 20 | |
21 | 21 | acts_as_having_settings |
22 | 22 | |
23 | - scope :enabled, :conditions => { :enabled => true } | |
23 | + scope :enabled, -> { where :enabled => true } | |
24 | 24 | |
25 | 25 | after_save do |block| |
26 | 26 | if block.owner.kind_of?(Profile) && block.owner.is_template? && block.mirror? | ... | ... |
app/models/blog_archives_block.rb
... | ... | @@ -15,7 +15,7 @@ class BlogArchivesBlock < Block |
15 | 15 | _('Blog posts') |
16 | 16 | end |
17 | 17 | |
18 | - settings_items :blog_id, Integer | |
18 | + settings_items :blog_id, type: Integer | |
19 | 19 | |
20 | 20 | def blog |
21 | 21 | blog_id && owner.blogs.exists?(blog_id) ? owner.blogs.find(blog_id) : owner.blog |
... | ... | @@ -33,10 +33,10 @@ class BlogArchivesBlock < Block |
33 | 33 | results = '' |
34 | 34 | posts = visible_posts(args[:person]) |
35 | 35 | posts.except(:order).count(:all, :group => 'EXTRACT(YEAR FROM published_at)').sort_by {|year, count| -year.to_i}.each do |year, count| |
36 | - results << content_tag('li', content_tag('strong', "#{year} (#{count})")) | |
37 | - results << "<ul class='#{year}-archive'>" | |
38 | - posts.except(:order).count(:all, :conditions => ['EXTRACT(YEAR FROM published_at)=?', year], :group => 'EXTRACT(MONTH FROM published_at)').sort_by {|month, count| -month.to_i}.each do |month, count| | |
39 | - results << content_tag('li', link_to("#{month_name(month.to_i)} (#{count})", owner_blog.url.merge(:year => year, :month => month))) | |
36 | + results << content_tag('li', content_tag('strong', "#{year.to_i} (#{count})")) | |
37 | + results << "<ul class='#{year.to_i}-archive'>" | |
38 | + posts.except(:order).where('EXTRACT(YEAR FROM published_at)=?', year.to_i).group('EXTRACT(MONTH FROM published_at)').count.sort_by {|month, count| -month.to_i}.each do |month, count| | |
39 | + results << content_tag('li', link_to("#{month_name(month.to_i)} (#{count})", owner_blog.url.merge(year: year.to_i, month: month.to_i))) | |
40 | 40 | end |
41 | 41 | results << "</ul>" |
42 | 42 | end | ... | ... |
app/models/box.rb
... | ... | @@ -7,7 +7,7 @@ class Box < ActiveRecord::Base |
7 | 7 | |
8 | 8 | include Noosfero::Plugin::HotSpot |
9 | 9 | |
10 | - scope :with_position, :conditions => ['boxes.position > 0'] | |
10 | + scope :with_position, -> { where 'boxes.position > 0' } | |
11 | 11 | |
12 | 12 | def environment |
13 | 13 | owner ? (owner.kind_of?(Environment) ? owner : owner.environment) : nil | ... | ... |
app/models/categorization.rb
1 | 1 | module Categorization |
2 | 2 | |
3 | 3 | def add_category_to_object(category, object) |
4 | - if !find(:first, :conditions => {object_id_column => object, :category_id => category} ) | |
4 | + if !self.where(object_id_column => object, :category_id => category).first | |
5 | 5 | connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})") |
6 | 6 | |
7 | 7 | c = category.parent |
8 | - while !c.nil? && !self.find(:first, :conditions => {object_id_column => object, :category_id => c}) | |
8 | + while !c.nil? && !self.where(object_id_column => object, :category_id => c).first | |
9 | 9 | connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)") |
10 | 10 | c = c.parent |
11 | 11 | end | ... | ... |
app/models/category.rb
... | ... | @@ -14,12 +14,12 @@ class Category < ActiveRecord::Base |
14 | 14 | validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('{fn} is already being used by another category.').fix_i18n |
15 | 15 | belongs_to :environment |
16 | 16 | |
17 | - # Finds all top level categories for a given environment. | |
18 | - scope :top_level_for, lambda { |environment| | |
19 | - {:conditions => ['parent_id is null and environment_id = ?', environment.id ]} | |
17 | + # Finds all top level categories for a given environment. | |
18 | + scope :top_level_for, -> environment { | |
19 | + where 'parent_id is null and environment_id = ?', environment.id | |
20 | 20 | } |
21 | 21 | |
22 | - scope :on_level, lambda { |parent| {:conditions => {:parent_id => parent}} } | |
22 | + scope :on_level, -> parent { where :parent_id => parent } | |
23 | 23 | |
24 | 24 | acts_as_filesystem |
25 | 25 | |
... | ... | @@ -46,26 +46,26 @@ class Category < ActiveRecord::Base |
46 | 46 | display_color = nil if display_color.blank? |
47 | 47 | end |
48 | 48 | |
49 | - scope :from_types, lambda { |types| | |
50 | - types.select{ |t| t.blank? }.empty? ? | |
51 | - { :conditions => { :type => types } } : | |
52 | - { :conditions => [ "type IN (?) OR type IS NULL", types.reject{ |t| t.blank? } ] } | |
49 | + scope :from_types, -> types { | |
50 | + if types.select{ |t| t.blank? }.empty? then | |
51 | + where(type: types) else | |
52 | + where("type IN (?) OR type IS NULL", types.reject{ |t| t.blank? }) end | |
53 | 53 | } |
54 | 54 | |
55 | 55 | def recent_people(limit = 10) |
56 | - self.people.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) | |
56 | + self.people.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit) | |
57 | 57 | end |
58 | 58 | |
59 | 59 | def recent_enterprises(limit = 10) |
60 | - self.enterprises.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) | |
60 | + self.enterprises.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit) | |
61 | 61 | end |
62 | 62 | |
63 | 63 | def recent_communities(limit = 10) |
64 | - self.communities.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) | |
64 | + self.communities.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit) | |
65 | 65 | end |
66 | 66 | |
67 | 67 | def recent_products(limit = 10) |
68 | - self.products.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) | |
68 | + self.products.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit) | |
69 | 69 | end |
70 | 70 | |
71 | 71 | def recent_articles(limit = 10) |
... | ... | @@ -73,7 +73,7 @@ class Category < ActiveRecord::Base |
73 | 73 | end |
74 | 74 | |
75 | 75 | def recent_comments(limit = 10) |
76 | - comments.paginate(:order => 'created_at DESC, comments.id DESC', :page => 1, :per_page => limit) | |
76 | + self.comments.reorder('created_at DESC, comments.id DESC').paginate(page: 1, per_page: limit) | |
77 | 77 | end |
78 | 78 | |
79 | 79 | def most_commented_articles(limit = 10) |
... | ... | @@ -81,7 +81,7 @@ class Category < ActiveRecord::Base |
81 | 81 | end |
82 | 82 | |
83 | 83 | def upcoming_events(limit = 10) |
84 | - self.events.paginate(:conditions => [ 'start_date >= ?', DateTime.now.beginning_of_day ], :order => 'start_date', :page => 1, :per_page => limit) | |
84 | + self.events.where('start_date >= ?', DateTime.now.beginning_of_day).order('start_date').paginate(page: 1, per_page: limit) | |
85 | 85 | end |
86 | 86 | |
87 | 87 | def display_in_menu? |
... | ... | @@ -90,11 +90,11 @@ class Category < ActiveRecord::Base |
90 | 90 | |
91 | 91 | def children_for_menu |
92 | 92 | results = [] |
93 | - pending = children.find(:all, :conditions => { :display_in_menu => true}) | |
94 | - while !pending.empty? | |
93 | + pending = children.where(display_in_menu: true).all | |
94 | + while pending.present? | |
95 | 95 | cat = pending.shift |
96 | 96 | results << cat |
97 | - pending += cat.children.find(:all, :conditions => { :display_in_menu => true} ) | |
97 | + pending += cat.children.where :display_in_menu => true | |
98 | 98 | end |
99 | 99 | |
100 | 100 | results |
... | ... | @@ -102,7 +102,7 @@ class Category < ActiveRecord::Base |
102 | 102 | |
103 | 103 | def is_leaf_displayable_in_menu? |
104 | 104 | return false if self.display_in_menu == false |
105 | - self.children.find(:all, :conditions => {:display_in_menu => true}).empty? | |
105 | + self.children.where(:display_in_menu => true).empty? | |
106 | 106 | end |
107 | 107 | |
108 | 108 | def with_color | ... | ... |
app/models/certifier.rb
... | ... | @@ -20,7 +20,7 @@ class Certifier < ActiveRecord::Base |
20 | 20 | validates_presence_of :name |
21 | 21 | |
22 | 22 | def destroy |
23 | - product_qualifiers.each { |pq| pq.update_attributes! :certifier => nil } | |
23 | + product_qualifiers.each { |pq| pq.update! :certifier => nil } | |
24 | 24 | super |
25 | 25 | end |
26 | 26 | ... | ... |
app/models/comment.rb
... | ... | @@ -18,7 +18,7 @@ class Comment < ActiveRecord::Base |
18 | 18 | has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy |
19 | 19 | belongs_to :reply_of, :class_name => 'Comment', :foreign_key => 'reply_of_id' |
20 | 20 | |
21 | - scope :without_reply, :conditions => ['reply_of_id IS NULL'] | |
21 | + scope :without_reply, -> { where 'reply_of_id IS NULL' } | |
22 | 22 | |
23 | 23 | include TimeScopes |
24 | 24 | ... | ... |
app/models/community.rb
... | ... | @@ -29,7 +29,7 @@ class Community < Organization |
29 | 29 | # places that call this method are safe from mass-assignment by setting the |
30 | 30 | # environment key themselves. |
31 | 31 | def self.create_after_moderation(requestor, attributes = {}) |
32 | - environment = attributes.delete(:environment) | |
32 | + environment = attributes[:environment] | |
33 | 33 | community = Community.new(attributes) |
34 | 34 | community.environment = environment |
35 | 35 | if community.environment.enabled?('admin_must_approve_new_communities') | ... | ... |
app/models/create_community.rb
... | ... | @@ -34,7 +34,7 @@ class CreateCommunity < Task |
34 | 34 | ! DATA_FIELDS.include?(key.to_s) |
35 | 35 | end |
36 | 36 | |
37 | - community.update_attributes(community_data) | |
37 | + community.update(community_data) | |
38 | 38 | community.image = image if image |
39 | 39 | community.environment = self.environment |
40 | 40 | community.save! | ... | ... |
app/models/create_enterprise.rb
... | ... | @@ -16,13 +16,13 @@ class CreateEnterprise < Task |
16 | 16 | settings_items field.to_sym |
17 | 17 | end |
18 | 18 | |
19 | - # checks for virtual attributes | |
19 | + # checks for virtual attributes | |
20 | 20 | validates_presence_of :name, :identifier |
21 | 21 | |
22 | 22 | #checks if the validation method is region to validates |
23 | 23 | validates_presence_of :region_id, :if => lambda { |obj| obj.environment.organization_approval_method == :region } |
24 | 24 | |
25 | - validates_format_of :foundation_year, :with => /^\d*$/ | |
25 | + validates_numericality_of :foundation_year, only_integer: true, if: -> o { o.foundation_year.present? } | |
26 | 26 | |
27 | 27 | # checks for actual attributes |
28 | 28 | validates_presence_of :requestor_id, :target_id |
... | ... | @@ -129,7 +129,7 @@ class CreateEnterprise < Task |
129 | 129 | finish |
130 | 130 | end |
131 | 131 | |
132 | - # tells if this request was appoved | |
132 | + # tells if this request was appoved | |
133 | 133 | def approved? |
134 | 134 | self.status == Task::Status::FINISHED |
135 | 135 | end | ... | ... |
... | ... | @@ -0,0 +1,34 @@ |
1 | +class CustomField < ActiveRecord::Base | |
2 | + attr_accessible :name, :default_value, :format, :extras, :customized_type, :active, :required, :signup, :environment | |
3 | + serialize :customized_type | |
4 | + serialize :extras | |
5 | + has_many :custom_field_values, :dependent => :delete_all | |
6 | + belongs_to :environment | |
7 | + | |
8 | + validates_presence_of :name, :format, :customized_type, :environment | |
9 | + validate :related_to_other? | |
10 | + validate :unique? | |
11 | + | |
12 | + def unique? | |
13 | + if environment.custom_fields.any?{|cf| cf.name==name && cf.environment == environment && cf.customized_type==customized_type && new_record?} | |
14 | + errors.add(:body, N_("There is a field with the same name for this type in this environment")) | |
15 | + return false | |
16 | + end | |
17 | + true | |
18 | + end | |
19 | + | |
20 | + def related_to_other? | |
21 | + environment.custom_fields.any? do |cf| | |
22 | + if cf.name == name && cf.customized_type != customized_type | |
23 | + ancestor = cf.customized_type.constantize < customized_type.constantize | |
24 | + descendant = cf.customized_type.constantize > customized_type.constantize | |
25 | + if ancestor || descendant | |
26 | + errors.add(:body, N_("New field related to existent one with same name")) | |
27 | + return false | |
28 | + end | |
29 | + end | |
30 | + end | |
31 | + true | |
32 | + end | |
33 | +end | |
34 | + | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +class CustomFieldValue < ActiveRecord::Base | |
2 | + belongs_to :custom_field | |
3 | + belongs_to :customized, :polymorphic => true | |
4 | + attr_accessible :value, :public, :customized, :custom_field, :customized_type | |
5 | + validate :can_save? | |
6 | + | |
7 | + def can_save? | |
8 | + if value.blank? && custom_field.required | |
9 | + errors.add(custom_field.name, _("can't be blank")) | |
10 | + return false | |
11 | + end | |
12 | + return true | |
13 | + end | |
14 | +end | ... | ... |
app/models/domain.rb
... | ... | @@ -14,7 +14,7 @@ class Domain < ActiveRecord::Base |
14 | 14 | |
15 | 15 | # <tt>name</tt> must be sequences of alphanumeric characters (a to z, |
16 | 16 | # 0 to 9), plus '_' or '-', separated by dots. Letters must be lowercase. |
17 | - validates_format_of :name, :with => /^([a-z0-9_-]+\.)+[a-z0-9_-]+$/, :message => N_('{fn} must be composed of sequences of lowercase letters (a to z), numbers (0 to 9), "_" and "-", separated by dots.').fix_i18n | |
17 | + validates_format_of :name, with: /\A([a-z0-9_-]+\.)+[a-z0-9_-]+\z/, message: N_('{fn} must be composed of sequences of lowercase letters (a to z), numbers (0 to 9), "_" and "-", separated by dots.').fix_i18n | |
18 | 18 | |
19 | 19 | # checks validations that could not be expressed using Rails' predefined |
20 | 20 | # validations. In particular: |
... | ... | @@ -37,7 +37,7 @@ class Domain < ActiveRecord::Base |
37 | 37 | # "www.", but it will be removed before searching. So searching for |
38 | 38 | # 'www.example.net' is exactly the same as searching for just 'example.net' |
39 | 39 | def self.find_by_name(name) |
40 | - self.find(:first, :conditions => [ 'name = ?', self.extract_domain_name(name) ]) | |
40 | + self.where('name = ?', self.extract_domain_name(name)).first | |
41 | 41 | end |
42 | 42 | |
43 | 43 | # turns the argument (expected to be a String) into a domain name that is | ... | ... |
app/models/enterprise.rb
... | ... | @@ -71,7 +71,7 @@ class Enterprise < Organization |
71 | 71 | end |
72 | 72 | |
73 | 73 | def highlighted_products_with_image(options = {}) |
74 | - Product.find(:all, {:conditions => {:highlighted => true}, :joins => :image}.merge(options)) | |
74 | + Product.where(:highlighted => true).joins(:image) | |
75 | 75 | end |
76 | 76 | |
77 | 77 | def required_fields | ... | ... |
app/models/environment.rb
... | ... | @@ -17,10 +17,14 @@ class Environment < ActiveRecord::Base |
17 | 17 | |
18 | 18 | has_many :users |
19 | 19 | |
20 | - self.partial_updates = false | |
20 | + # allow roles use | |
21 | + def self.dangerous_attribute_method? name | |
22 | + false | |
23 | + end | |
21 | 24 | |
22 | 25 | has_many :tasks, :dependent => :destroy, :as => 'target' |
23 | 26 | has_many :search_terms, :as => :context |
27 | + has_many :custom_fields, :dependent => :destroy | |
24 | 28 | has_many :email_templates, :foreign_key => :owner_id |
25 | 29 | |
26 | 30 | IDENTIFY_SCRIPTS = /(php[0-9s]?|[sp]htm[l]?|pl|py|cgi|rb)/ |
... | ... | @@ -110,7 +114,7 @@ class Environment < ActiveRecord::Base |
110 | 114 | def admins |
111 | 115 | admin_role = Environment::Roles.admin(self) |
112 | 116 | return [] if admin_role.blank? |
113 | - Person.members_of(self).all(:conditions => ['role_assignments.role_id = ?', admin_role.id]) | |
117 | + Person.members_of(self).where 'role_assignments.role_id = ?', admin_role.id | |
114 | 118 | end |
115 | 119 | |
116 | 120 | # returns the available features for a Environment, in the form of a |
... | ... | @@ -225,9 +229,11 @@ class Environment < ActiveRecord::Base |
225 | 229 | has_many :licenses |
226 | 230 | |
227 | 231 | has_many :categories |
228 | - has_many :display_categories, :class_name => 'Category', :conditions => 'display_color is not null and parent_id is null', :order => 'display_color' | |
232 | + has_many :display_categories, -> { | |
233 | + order('display_color').where('display_color is not null and parent_id is null') | |
234 | + }, class_name: 'Category' | |
229 | 235 | |
230 | - has_many :product_categories, :conditions => { :type => 'ProductCategory'} | |
236 | + has_many :product_categories, -> { where type: 'ProductCategory'} | |
231 | 237 | has_many :regions |
232 | 238 | has_many :states |
233 | 239 | has_many :cities |
... | ... | @@ -349,7 +355,7 @@ class Environment < ActiveRecord::Base |
349 | 355 | settings_items :signup_welcome_screen_body, :type => String |
350 | 356 | |
351 | 357 | #Captcha settings |
352 | - settings_items :api_captcha_settings, :type => ActiveSupport::HashWithIndifferentAccess, :default => {} | |
358 | + settings_items :api_captcha_settings, :default => {} | |
353 | 359 | |
354 | 360 | def has_custom_welcome_screen? |
355 | 361 | settings[:signup_welcome_screen_body].present? |
... | ... | @@ -495,8 +501,7 @@ class Environment < ActiveRecord::Base |
495 | 501 | end |
496 | 502 | |
497 | 503 | def custom_person_fields |
498 | - self.settings[:custom_person_fields] = {} if self.settings[:custom_person_fields].nil? | |
499 | - self.settings[:custom_person_fields] | |
504 | + self.settings[:custom_person_fields].nil? ? {} : self.settings[:custom_person_fields] | |
500 | 505 | end |
501 | 506 | |
502 | 507 | def custom_person_fields=(values) |
... | ... | @@ -696,7 +701,7 @@ class Environment < ActiveRecord::Base |
696 | 701 | |
697 | 702 | # the default Environment. |
698 | 703 | def self.default |
699 | - self.find(:first, :conditions => [ 'is_default = ?', true ] ) | |
704 | + self.where('is_default = ?', true).first | |
700 | 705 | end |
701 | 706 | |
702 | 707 | # returns an array with the top level categories for this environment. |
... | ... | @@ -877,7 +882,7 @@ class Environment < ActiveRecord::Base |
877 | 882 | end |
878 | 883 | |
879 | 884 | def portal_folders |
880 | - (settings[:portal_folders] || []).map{|fid| portal_community.articles.find(:first, :conditions => { :id => fid }) }.compact | |
885 | + (settings[:portal_folders] || []).map{|fid| portal_community.articles.where(id: fid).first }.compact | |
881 | 886 | end |
882 | 887 | |
883 | 888 | def portal_folders=(folders) |
... | ... | @@ -964,7 +969,7 @@ class Environment < ActiveRecord::Base |
964 | 969 | end |
965 | 970 | |
966 | 971 | def highlighted_products_with_image(options = {}) |
967 | - Product.find(:all, {:conditions => {:highlighted => true, :profile_id => self.enterprises.find(:all, :select => :id) }, :joins => :image}.merge(options)) | |
972 | + self.products.where(highlighted: true).joins(:image).order('created_at ASC') | |
968 | 973 | end |
969 | 974 | |
970 | 975 | settings_items :home_cache_in_minutes, :type => :integer, :default => 5 | ... | ... |
app/models/event.rb
... | ... | @@ -13,14 +13,14 @@ class Event < Article |
13 | 13 | settings_items :presenter, :type => :string |
14 | 14 | |
15 | 15 | def link=(value) |
16 | - self.setting[:link] = maybe_add_http(value) | |
16 | + self.setting[:link] = maybe_add_http(URI.escape value.to_s) | |
17 | 17 | end |
18 | 18 | |
19 | 19 | def link |
20 | 20 | maybe_add_http(self.setting[:link]) |
21 | 21 | end |
22 | 22 | |
23 | - xss_terminate :only => [ :name, :body, :link, :address ], :with => 'white_list', :on => 'validation' | |
23 | + xss_terminate :only => [ :name, :body, :address ], :with => 'white_list', :on => 'validation' | |
24 | 24 | |
25 | 25 | def initialize(*args) |
26 | 26 | super(*args) |
... | ... | @@ -35,23 +35,21 @@ class Event < Article |
35 | 35 | end |
36 | 36 | end |
37 | 37 | |
38 | - scope :by_day, lambda { |date| | |
39 | - { :conditions => [' start_date >= :start_date AND start_date <= :end_date AND end_date IS NULL OR (start_date <= :end_date AND end_date >= :start_date)', {:start_date => date.beginning_of_day, :end_date => date.end_of_day}], | |
40 | - :order => 'start_date ASC' | |
41 | - } | |
38 | + scope :by_day, -> date { | |
39 | + where('start_date >= :start_date AND start_date <= :end_date AND end_date IS NULL OR (start_date <= :end_date AND end_date >= :start_date)', | |
40 | + start_date: date.beginning_of_day, end_date: date.end_of_day). | |
41 | + order('start_date ASC') | |
42 | 42 | } |
43 | 43 | |
44 | - scope :next_events_from_month, lambda { |date| | |
44 | + scope :next_events_from_month, -> date { | |
45 | 45 | date_temp = date.strftime("%Y-%m-%d") |
46 | - { :conditions => ["start_date >= ?","#{date_temp}"], | |
47 | - :order => 'start_date ASC' | |
48 | - } | |
46 | + order('start_date ASC') | |
47 | + .where("start_date >= ?","#{date_temp}") | |
49 | 48 | } |
50 | 49 | |
51 | - scope :by_month, lambda { |date| | |
52 | - { :conditions => ["EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?",date.year,date.month], | |
53 | - :order => 'start_date ASC' | |
54 | - } | |
50 | + scope :by_month, -> date { | |
51 | + order('start_date ASC') | |
52 | + .where("EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?", date.year, date.month) | |
55 | 53 | } |
56 | 54 | |
57 | 55 | include WhiteListFilter |
... | ... | @@ -72,12 +70,10 @@ class Event < Article |
72 | 70 | 'event' |
73 | 71 | end |
74 | 72 | |
75 | - scope :by_range, lambda { |range| { | |
76 | - :conditions => [ | |
77 | - 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', | |
78 | - { :start_day => range.first, :end_day => range.last } | |
79 | - ] | |
80 | - }} | |
73 | + scope :by_range, -> range { | |
74 | + where('start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', | |
75 | + {:start_day => range.first, :end_day => range.last}) | |
76 | + } | |
81 | 77 | |
82 | 78 | def self.date_range(year, month) |
83 | 79 | if year.nil? || month.nil? |
... | ... | @@ -92,11 +88,11 @@ class Event < Article |
92 | 88 | first_day = DateTime.new(year, month, 1) |
93 | 89 | last_day = first_day + 1.month - 1.day |
94 | 90 | |
95 | - first_day..last_day | |
91 | + first_day.to_date..last_day.to_date | |
96 | 92 | end |
97 | 93 | |
98 | 94 | def date_range |
99 | - start_date..(end_date||start_date) | |
95 | + start_date.to_date..(end_date||start_date).to_date | |
100 | 96 | end |
101 | 97 | |
102 | 98 | def first_paragraph |
... | ... | @@ -115,7 +111,7 @@ class Event < Article |
115 | 111 | end |
116 | 112 | |
117 | 113 | def duration |
118 | - (((self.end_date || self.start_date) - self.start_date).to_i/60/60/24) | |
114 | + (((self.end_date || self.start_date) - self.start_date).to_i/60/60/24) + 1 | |
119 | 115 | end |
120 | 116 | |
121 | 117 | alias_method :article_lead, :lead | ... | ... |
app/models/external_feed.rb
... | ... | @@ -5,9 +5,9 @@ class ExternalFeed < ActiveRecord::Base |
5 | 5 | validates_presence_of :address, :if => lambda {|efeed| efeed.enabled} |
6 | 6 | validates_uniqueness_of :blog_id |
7 | 7 | |
8 | - scope :enabled, :conditions => { :enabled => true } | |
9 | - scope :expired, lambda { | |
10 | - { :conditions => ['(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } | |
8 | + scope :enabled, -> { where enabled: true } | |
9 | + scope :expired, -> { | |
10 | + where '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval | |
11 | 11 | } |
12 | 12 | |
13 | 13 | attr_accessible :address, :enabled, :only_once | ... | ... |
app/models/featured_products_block.rb
... | ... | @@ -11,7 +11,7 @@ class FeaturedProductsBlock < Block |
11 | 11 | if block.owner.kind_of?(Environment) && block.product_ids.blank? |
12 | 12 | total = block.owner.products.count |
13 | 13 | offset = rand([(total - block.groups_of * 3) + 1, 1].max) |
14 | - block.product_ids = block.owner.highlighted_products_with_image(:offset => offset, :limit => block.groups_of * 3).map(&:id) | |
14 | + block.product_ids = block.owner.highlighted_products_with_image.offset(offset).limit(block.groups_of * 3).map(&:id) | |
15 | 15 | end |
16 | 16 | block.groups_of = block.groups_of.to_i |
17 | 17 | end | ... | ... |
app/models/feed_reader_block.rb
... | ... | @@ -27,8 +27,8 @@ class FeedReaderBlock < Block |
27 | 27 | settings_items :update_errors, :type => :integer, :default => 0 |
28 | 28 | settings_items :error_message, :type => :string |
29 | 29 | |
30 | - scope :expired, lambda { | |
31 | - { :conditions => [ '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } | |
30 | + scope :expired, -> { | |
31 | + where '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval | |
32 | 32 | } |
33 | 33 | |
34 | 34 | before_create do |block| | ... | ... |
app/models/folder.rb
... | ... | @@ -56,10 +56,11 @@ class Folder < Article |
56 | 56 | profile.recent_documents(limit, ["articles.type != ? AND articles.highlighted = ? AND articles.parent_id = ?", 'Folder', highlight, id]) |
57 | 57 | end |
58 | 58 | |
59 | - has_many :images, :class_name => 'Article', | |
60 | - :foreign_key => 'parent_id', | |
61 | - :order => 'articles.type, articles.name', | |
62 | - :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types] | |
59 | + has_many :images, -> { | |
60 | + order('articles.type, articles.name'). | |
61 | + where("articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types) | |
62 | + }, class_name: 'Article', foreign_key: 'parent_id' | |
63 | + | |
63 | 64 | |
64 | 65 | def accept_uploads? |
65 | 66 | !self.has_posts? || self.gallery? | ... | ... |
app/models/image.rb
1 | 1 | class Image < ActiveRecord::Base |
2 | 2 | |
3 | + attr_accessible :uploaded_data, :label, :remove_image | |
4 | + attr_accessor :remove_image | |
5 | + | |
3 | 6 | def self.max_size |
4 | 7 | Image.attachment_options[:max_size] |
5 | 8 | end |
6 | 9 | |
7 | 10 | sanitize_filename |
8 | 11 | |
9 | - has_attachment :content_type => :image, | |
10 | - :storage => :file_system, | |
12 | + has_attachment :content_type => :image, | |
13 | + :storage => :file_system, | |
11 | 14 | :path_prefix => 'public/image_uploads', |
12 | 15 | :resize_to => '800x600>', |
13 | 16 | :thumbnails => { :big => '150x150', |
... | ... | @@ -15,7 +18,8 @@ class Image < ActiveRecord::Base |
15 | 18 | :portrait => '64x64', |
16 | 19 | :minor => '50x50>', |
17 | 20 | :icon => '20x20!' }, |
18 | - :max_size => 5.megabytes # remember to update validate message below | |
21 | + :max_size => 5.megabytes, # remember to update validate message below | |
22 | + processor: 'Rmagick' | |
19 | 23 | |
20 | 24 | validates_attachment :size => N_("{fn} of uploaded file was larger than the maximum size of 5.0 MB").fix_i18n |
21 | 25 | |
... | ... | @@ -23,10 +27,8 @@ class Image < ActiveRecord::Base |
23 | 27 | |
24 | 28 | postgresql_attachment_fu |
25 | 29 | |
26 | - attr_accessible :uploaded_data, :label, :remove_image | |
27 | - attr_accessor :remove_image | |
28 | - | |
29 | 30 | def current_data |
30 | 31 | File.file?(full_filename) ? File.read(full_filename) : nil |
31 | 32 | end |
33 | + | |
32 | 34 | end | ... | ... |
app/models/input.rb
app/models/invite_friend.rb
... | ... | @@ -45,7 +45,7 @@ class InviteFriend < Invitation |
45 | 45 | private |
46 | 46 | def check_for_invitation_existence |
47 | 47 | if friend |
48 | - friend.tasks.pending.of("InviteFriend").find(:all, :conditions => {:requestor_id => person.id, :target_id => friend.id}).blank? | |
48 | + friend.tasks.pending.of("InviteFriend").where(requestor_id: person.id, target_id: friend.id).blank? | |
49 | 49 | end |
50 | 50 | end |
51 | 51 | ... | ... |
app/models/invite_member.rb
... | ... | @@ -65,7 +65,7 @@ class InviteMember < Invitation |
65 | 65 | private |
66 | 66 | def check_for_invitation_existence |
67 | 67 | if friend |
68 | - friend.tasks.pending.of("InviteMember").find(:all, :conditions => {:requestor_id => person.id}).select { |t| t.data[:community_id] == community_id }.blank? | |
68 | + friend.tasks.pending.of("InviteMember").where(requestor_id: person.id).select{ |t| t.data[:community_id] == community_id }.blank? | |
69 | 69 | end |
70 | 70 | end |
71 | 71 | ... | ... |
app/models/link_list_block.rb
... | ... | @@ -41,7 +41,7 @@ class LinkListBlock < Block |
41 | 41 | [N_('New window'), '_new'], |
42 | 42 | ] |
43 | 43 | |
44 | - settings_items :links, Array, :default => [] | |
44 | + settings_items :links, type: Array, :default => [] | |
45 | 45 | |
46 | 46 | before_save do |block| |
47 | 47 | block.links = block.links.delete_if {|i| i[:name].blank? and i[:address].blank?} | ... | ... |
app/models/organization.rb
... | ... | @@ -84,7 +84,7 @@ class Organization < Profile |
84 | 84 | end |
85 | 85 | |
86 | 86 | def find_pending_validation(code) |
87 | - validations.pending.find(:first, :conditions => {:code => code}) | |
87 | + validations.pending.where(code: code).first | |
88 | 88 | end |
89 | 89 | |
90 | 90 | def processed_validations |
... | ... | @@ -92,7 +92,7 @@ class Organization < Profile |
92 | 92 | end |
93 | 93 | |
94 | 94 | def find_processed_validation(code) |
95 | - validations.finished.find(:first, :conditions => {:code => code}) | |
95 | + validations.finished.where(code: code).first | |
96 | 96 | end |
97 | 97 | |
98 | 98 | def is_validation_entity? |
... | ... | @@ -116,6 +116,7 @@ class Organization < Profile |
116 | 116 | tag_list |
117 | 117 | template_id |
118 | 118 | district |
119 | + address_line2 | |
119 | 120 | address_reference |
120 | 121 | ] |
121 | 122 | |
... | ... | @@ -136,11 +137,11 @@ class Organization < Profile |
136 | 137 | end |
137 | 138 | |
138 | 139 | N_('Display name'); N_('Description'); N_('Contact person'); N_('Contact email'); N_('Acronym'); N_('Foundation year'); N_('Legal form'); N_('Economic activity'); N_('Management information'); N_('Tag list'); N_('District'); N_('Address reference') |
139 | - settings_items :display_name, :description, :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :district, :address_reference | |
140 | + settings_items :display_name, :description, :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :district, :address_line2, :address_reference | |
140 | 141 | |
141 | 142 | settings_items :zip_code, :city, :state, :country |
142 | 143 | |
143 | - validates_format_of :foundation_year, :with => Noosfero::Constants::INTEGER_FORMAT | |
144 | + validates_numericality_of :foundation_year, only_integer: true, if: -> o { o.foundation_year.present? } | |
144 | 145 | validates_format_of :contact_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |org| !org.contact_email.blank? }) |
145 | 146 | validates_as_cnpj :cnpj |
146 | 147 | |
... | ... | @@ -194,7 +195,7 @@ class Organization < Profile |
194 | 195 | end |
195 | 196 | |
196 | 197 | def already_request_membership?(person) |
197 | - self.tasks.pending.find_by_requestor_id(person.id, :conditions => { :type => 'AddMember' }) | |
198 | + self.tasks.pending.where(type: 'AddMember', requestor_id: person.id).first | |
198 | 199 | end |
199 | 200 | |
200 | 201 | def jid(options = {}) | ... | ... |
app/models/person.rb
... | ... | @@ -19,45 +19,41 @@ class Person < Profile |
19 | 19 | acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)} |
20 | 20 | acts_as_accessor |
21 | 21 | |
22 | - | |
23 | - scope :members_of, lambda { |resources, extra_joins = nil| | |
24 | - resources = [resources] if !resources.kind_of?(Array) | |
22 | + scope :members_of, -> resources { | |
23 | + resources = Array(resources) | |
25 | 24 | conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ') |
26 | - joins = [:role_assignments] | |
27 | - joins += extra_joins if extra_joins.is_a? Array | |
28 | - { :select => 'DISTINCT profiles.*', :joins => joins, :conditions => [conditions] } | |
25 | + select('DISTINCT profiles.*').joins(:role_assignments).where([conditions]) | |
29 | 26 | } |
30 | 27 | |
31 | - scope :not_members_of, lambda { |resources| | |
32 | - resources = [resources] if !resources.kind_of?(Array) | |
28 | + scope :not_members_of, -> resources { | |
29 | + resources = Array(resources) | |
33 | 30 | conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ') |
34 | - { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "role_assignments" ON "role_assignments"."accessor_id" = "profiles"."id" AND "role_assignments"."accessor_type" = (\'Profile\') WHERE "profiles"."type" IN (\'Person\') AND (%s))' % conditions] } | |
31 | + select('DISTINCT profiles.*').where('"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "role_assignments" ON "role_assignments"."accessor_id" = "profiles"."id" AND "role_assignments"."accessor_type" = (\'Profile\') WHERE "profiles"."type" IN (\'Person\') AND (%s))' % conditions) | |
35 | 32 | } |
36 | 33 | |
37 | - scope :by_role, lambda { |roles, extra_joins = nil| | |
38 | - roles = [roles] unless roles.kind_of?(Array) | |
39 | - joins = [:role_assignments] | |
40 | - joins += extra_joins if extra_joins.is_a? Array | |
41 | - { :select => 'DISTINCT profiles.*', :joins => joins, :conditions => ['role_assignments.role_id IN (?)',roles] } | |
34 | + scope :by_role, -> roles { | |
35 | + roles = Array(roles) | |
36 | + select('DISTINCT profiles.*').joins(:role_assignments).where('role_assignments.role_id IN (?)', roles) | |
42 | 37 | } |
43 | 38 | |
44 | - scope :not_friends_of, lambda { |resources| | |
39 | + scope :not_friends_of, -> resources { | |
45 | 40 | resources = Array(resources) |
46 | - { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id)] } | |
41 | + select('DISTINCT profiles.*').where('"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id)) | |
47 | 42 | } |
48 | 43 | |
49 | 44 | scope :visible_for_person, lambda { |person| |
50 | - joins('LEFT JOIN "role_assignments" ON | |
51 | - "role_assignments"."resource_id" = "profiles"."environment_id" AND | |
52 | - "role_assignments"."resource_type" = \'Environment\'') | |
53 | - .joins('LEFT JOIN "roles" ON "role_assignments"."role_id" = "roles"."id"') | |
54 | - .joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') | |
55 | - .where( | |
56 | - ['( roles.key = ? AND role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR ( | |
57 | - ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true] | |
58 | - ).uniq | |
45 | + joins('LEFT JOIN "role_assignments" ON | |
46 | + "role_assignments"."resource_id" = "profiles"."environment_id" AND | |
47 | + "role_assignments"."resource_type" = \'Environment\'') | |
48 | + .joins('LEFT JOIN "roles" ON "role_assignments"."role_id" = "roles"."id"') | |
49 | + .joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') | |
50 | + .where( | |
51 | + ['( roles.key = ? AND role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR ( | |
52 | + ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true] | |
53 | + ).uniq | |
59 | 54 | } |
60 | 55 | |
56 | + | |
61 | 57 | def has_permission_with_admin?(permission, resource) |
62 | 58 | return true if resource.blank? || resource.admins.include?(self) |
63 | 59 | return true if resource.kind_of?(Profile) && resource.environment.admins.include?(self) |
... | ... | @@ -74,6 +70,9 @@ class Person < Profile |
74 | 70 | end |
75 | 71 | alias_method_chain :has_permission?, :plugins |
76 | 72 | |
73 | + # for eager loading | |
74 | + has_many :memberships, through: :role_assignments, source: :resource, source_type: 'Profile' | |
75 | + | |
77 | 76 | def memberships |
78 | 77 | scopes = [] |
79 | 78 | plugins_scopes = plugins.dispatch_scopes(:person_memberships, self) |
... | ... | @@ -95,7 +94,9 @@ class Person < Profile |
95 | 94 | has_many :friendships, :dependent => :destroy |
96 | 95 | has_many :friends, :class_name => 'Person', :through => :friendships |
97 | 96 | |
98 | - scope :online, lambda { { :include => :user, :conditions => ["users.chat_status != '' AND users.chat_status_at >= ?", DateTime.now - User.expires_chat_status_every.minutes] } } | |
97 | + scope :online, -> { | |
98 | + joins(:user).where("users.chat_status != '' AND users.chat_status_at >= ?", DateTime.now - User.expires_chat_status_every.minutes) | |
99 | + } | |
99 | 100 | |
100 | 101 | has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy |
101 | 102 | |
... | ... | @@ -111,21 +112,31 @@ class Person < Profile |
111 | 112 | has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people' |
112 | 113 | has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions' |
113 | 114 | |
114 | - has_many :suggested_profiles, :class_name => 'ProfileSuggestion', :foreign_key => :person_id, :order => 'score DESC', :dependent => :destroy | |
115 | - has_many :suggested_people, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true] | |
116 | - has_many :suggested_communities, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true] | |
115 | + has_many :suggested_profiles, class_name: 'ProfileSuggestion', foreign_key: :person_id, order: 'score DESC', dependent: :destroy | |
116 | + has_many :suggested_people, -> { | |
117 | + where 'profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true | |
118 | + }, through: :suggested_profiles, source: :suggestion | |
119 | + has_many :suggested_communities, -> { | |
120 | + where 'profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true | |
121 | + }, through: :suggested_profiles, source: :suggestion | |
117 | 122 | |
118 | - scope :more_popular, :order => 'friends_count DESC' | |
123 | + scope :more_popular, -> { order 'friends_count DESC' } | |
119 | 124 | |
120 | - scope :abusers, :joins => :abuse_complaints, :conditions => ['tasks.status = 3'], :select => 'DISTINCT profiles.*' | |
121 | - scope :non_abusers, :joins => "LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'", :conditions => ["tasks.status != 3 OR tasks.id is NULL"], :select => "DISTINCT profiles.*" | |
125 | + scope :abusers, -> { | |
126 | + joins(:abuse_complaints).where('tasks.status = 3').select('DISTINCT profiles.*') | |
127 | + } | |
128 | + scope :non_abusers, -> { | |
129 | + select("DISTINCT profiles.*"). | |
130 | + joins("LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'"). | |
131 | + where("tasks.status != 3 OR tasks.id is NULL") | |
132 | + } | |
122 | 133 | |
123 | - scope :admins, :joins => [:role_assignments => :role], :conditions => ['roles.key = ?', 'environment_administrator' ] | |
124 | - scope :activated, :joins => :user, :conditions => ['users.activation_code IS NULL AND users.activated_at IS NOT NULL'] | |
125 | - scope :deactivated, :joins => :user, :conditions => ['NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)'] | |
134 | + scope :admins, -> { joins(:role_assignments => :role).where('roles.key = ?', 'environment_administrator') } | |
135 | + scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') } | |
136 | + scope :deactivated, -> { joins(:user).where('NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)') } | |
126 | 137 | |
127 | 138 | after_destroy do |person| |
128 | - Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy } | |
139 | + Friendship.where(friend_id: person.id).each{ |friendship| friendship.destroy } | |
129 | 140 | end |
130 | 141 | |
131 | 142 | belongs_to :user, :dependent => :delete |
... | ... | @@ -188,7 +199,7 @@ class Person < Profile |
188 | 199 | end |
189 | 200 | |
190 | 201 | def remove_friend(friend) |
191 | - Friendship.find(:first, :conditions => {:friend_id => friend, :person_id => id}).destroy | |
202 | + Friendship.where(friend_id: friend, person_id: id).first.destroy | |
192 | 203 | end |
193 | 204 | |
194 | 205 | FIELDS = %w[ |
... | ... | @@ -205,6 +216,7 @@ class Person < Profile |
205 | 216 | district |
206 | 217 | zip_code |
207 | 218 | address |
219 | + address_line2 | |
208 | 220 | address_reference |
209 | 221 | cell_phone |
210 | 222 | comercial_phone |
... | ... | @@ -219,7 +231,7 @@ class Person < Profile |
219 | 231 | organization |
220 | 232 | organization_website |
221 | 233 | contact_phone |
222 | - contact_informatioin | |
234 | + contact_information | |
223 | 235 | ] |
224 | 236 | |
225 | 237 | xss_terminate :only => [ :custom_footer, :custom_header, :description, :nickname, :sex, :nationality, :country, :district, :zip_code, :address, :address_reference, :cell_phone, :comercial_phone, :personal_website, :jabber_id, :schooling, :formation, :custom_formation, :area_of_study, :custom_area_of_study, :professional_activity, :organization, :organization_website, :contact_phone, :contact_information ], :with => 'white_list' |
... | ... | @@ -272,7 +284,7 @@ class Person < Profile |
272 | 284 | settings_items :formation, :custom_formation, :custom_area_of_study |
273 | 285 | |
274 | 286 | N_('Contact information'); N_('City'); N_('State'); N_('Country'); N_('Sex'); N_('Zip code'); N_('District'); N_('Address reference') |
275 | - settings_items :photo, :contact_information, :sex, :city, :state, :country, :zip_code, :district, :address_reference | |
287 | + settings_items :photo, :contact_information, :sex, :city, :state, :country, :zip_code, :district, :address_line2, :address_reference | |
276 | 288 | |
277 | 289 | extend SetProfileRegionFromCityState::ClassMethods |
278 | 290 | set_profile_region_from_city_state |
... | ... | @@ -301,7 +313,7 @@ class Person < Profile |
301 | 313 | end |
302 | 314 | |
303 | 315 | validates_each :email, :on => :update do |record,attr,value| |
304 | - if User.find(:first, :conditions => ['email = ? and id != ? and environment_id = ?', value, record.user.id, record.environment.id]) | |
316 | + if User.where('email = ? and id != ? and environment_id = ?', value, record.user.id, record.environment.id).first | |
305 | 317 | record.errors.add(attr, _('{fn} is already used by other user').fix_i18n) |
306 | 318 | end |
307 | 319 | end |
... | ... | @@ -410,7 +422,7 @@ class Person < Profile |
410 | 422 | def ask_to_join?(community) |
411 | 423 | return false if !community.visible? |
412 | 424 | return false if memberships.include?(community) |
413 | - return false if AddMember.find(:first, :conditions => {:requestor_id => self.id, :target_id => community.id}) | |
425 | + return false if AddMember.where(requestor_id: self.id, target_id: community.id).first | |
414 | 426 | !refused_communities.include?(community) |
415 | 427 | end |
416 | 428 | ... | ... |
app/models/person_notifier.rb
1 | +# FIXME needed by test/units/application_helper.rb | |
2 | +require_dependency 'application_helper' | |
3 | + | |
1 | 4 | class PersonNotifier |
2 | 5 | |
3 | 6 | def initialize(person) |
... | ... | @@ -28,7 +31,7 @@ class PersonNotifier |
28 | 31 | |
29 | 32 | def notify |
30 | 33 | if @person.notification_time && @person.notification_time > 0 |
31 | - notifications = @person.tracked_notifications.find(:all, :conditions => ["created_at > ?", notify_from]) | |
34 | + notifications = @person.tracked_notifications.where("created_at > ?", notify_from) | |
32 | 35 | tasks = Task.to(@person).without_spam.pending.where("created_at > ?", notify_from).order_by('created_at', 'asc') |
33 | 36 | |
34 | 37 | Noosfero.with_locale @person.environment.default_language do |
... | ... | @@ -74,9 +77,8 @@ class PersonNotifier |
74 | 77 | |
75 | 78 | end |
76 | 79 | |
77 | - class Mailer < ActionMailer::Base | |
80 | + class Mailer < ApplicationMailer | |
78 | 81 | |
79 | - helper ApplicationHelper | |
80 | 82 | helper ActionTrackerHelper |
81 | 83 | |
82 | 84 | def session |
... | ... | @@ -85,8 +87,8 @@ class PersonNotifier |
85 | 87 | |
86 | 88 | def content_summary(person, notifications, tasks) |
87 | 89 | if person.environment |
88 | - ActionMailer::Base.asset_host = person.environment.top_url | |
89 | - ActionMailer::Base.default_url_options[:host] = person.environment.default_hostname | |
90 | + ApplicationMailer.asset_host = person.environment.top_url | |
91 | + ApplicationMailer.default_url_options[:host] = person.environment.default_hostname | |
90 | 92 | end |
91 | 93 | |
92 | 94 | @current_theme = 'default' |
... | ... | @@ -94,7 +96,7 @@ class PersonNotifier |
94 | 96 | @recipient = @profile.nickname || @profile.name |
95 | 97 | @notifications = notifications |
96 | 98 | @tasks = tasks |
97 | - @environment = @profile.environment.name | |
99 | + @environment = @profile.environment | |
98 | 100 | @url = @profile.environment.top_url |
99 | 101 | mail( |
100 | 102 | content_type: "text/html", | ... | ... |
app/models/product.rb
... | ... | @@ -52,8 +52,8 @@ class Product < ActiveRecord::Base |
52 | 52 | |
53 | 53 | scope :more_recent, :order => "created_at DESC" |
54 | 54 | |
55 | - scope :from_category, lambda { |category| | |
56 | - {:joins => :product_category, :conditions => ['categories.path LIKE ?', "%#{category.slug}%"]} if category | |
55 | + scope :from_category, -> category { | |
56 | + joins(:product_category).where('categories.path LIKE ?', "%#{category.slug}%") if category | |
57 | 57 | } |
58 | 58 | |
59 | 59 | scope :visible_for_person, lambda { |person| | ... | ... |
app/models/product_category.rb
... | ... | @@ -6,22 +6,19 @@ class ProductCategory < Category |
6 | 6 | attr_accessible :name, :parent, :environment |
7 | 7 | |
8 | 8 | scope :unique, :select => 'DISTINCT ON (path) categories.*' |
9 | - scope :by_enterprise, lambda { |enterprise| { | |
10 | - :joins => :products, | |
11 | - :conditions => ['products.profile_id = ?', enterprise.id] | |
12 | - }} | |
13 | - scope :by_environment, lambda { |environment| { | |
14 | - :conditions => ['environment_id = ?', environment.id] | |
15 | - }} | |
16 | - | |
17 | - # updated scope method to avoid sql injection vunerabillity (http://brakemanscanner.org/docs/warning_types/sql_injection/) | |
18 | - # explicited to_i on level argument | |
19 | - scope :unique_by_level, lambda { |level| { | |
20 | - :select => "DISTINCT ON (filtered_category) split_part(path, '/', #{level.to_i}) AS filtered_category, categories.*" | |
21 | - }} | |
9 | + scope :by_enterprise, -> enterprise { | |
10 | + joins(:products). | |
11 | + where('products.profile_id = ?', enterprise.id) | |
12 | + } | |
13 | + scope :by_environment, -> environment { | |
14 | + where 'environment_id = ?', environment.id | |
15 | + } | |
16 | + scope :unique_by_level, -> level { | |
17 | + select "DISTINCT ON (filtered_category) split_part(path, '/', #{level}) AS filtered_category, categories.*" | |
18 | + } | |
22 | 19 | |
23 | 20 | def all_products |
24 | - Product.find(:all, :conditions => { :product_category_id => (all_children << self).map(&:id) }) | |
21 | + Product.where(product_category_id: (all_children << self).map(&:id)) | |
25 | 22 | end |
26 | 23 | |
27 | 24 | def self.menu_categories(top_category, env) | ... | ... |
app/models/products_block.rb
... | ... | @@ -39,7 +39,7 @@ class ProductsBlock < Block |
39 | 39 | link_to(_('View all products'), owner.public_profile_url.merge(:controller => 'catalog', :action => 'index')) |
40 | 40 | end |
41 | 41 | |
42 | - settings_items :product_ids, Array | |
42 | + settings_items :product_ids, type: Array | |
43 | 43 | def product_ids=(array) |
44 | 44 | self.settings[:product_ids] = array |
45 | 45 | if self.settings[:product_ids] | ... | ... |
app/models/profile.rb
... | ... | @@ -79,7 +79,7 @@ class Profile < ActiveRecord::Base |
79 | 79 | all_roles(env_id).select{ |r| r.key.match(/^profile_/) unless r.key.blank? || !r.profile_id.nil?} |
80 | 80 | end |
81 | 81 | def self.all_roles(env_id) |
82 | - Role.all :conditions => { :environment_id => env_id } | |
82 | + Role.where(environment_id: env_id) | |
83 | 83 | end |
84 | 84 | def self.method_missing(m, *args, &block) |
85 | 85 | role = find_role(m, args[0]) |
... | ... | @@ -114,23 +114,32 @@ class Profile < ActiveRecord::Base |
114 | 114 | } |
115 | 115 | |
116 | 116 | acts_as_accessible |
117 | + acts_as_customizable | |
117 | 118 | |
118 | 119 | include Noosfero::Plugin::HotSpot |
119 | 120 | |
120 | - scope :memberships_of, lambda { |person| { :select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => ['role_assignments.accessor_type = ? AND role_assignments.accessor_id = ?', person.class.base_class.name, person.id ] } } | |
121 | + scope :memberships_of, -> person { | |
122 | + select('DISTINCT profiles.*'). | |
123 | + joins(:role_assignments). | |
124 | + where('role_assignments.accessor_type = ? AND role_assignments.accessor_id = ?', person.class.base_class.name, person.id) | |
125 | + } | |
121 | 126 | #FIXME: these will work only if the subclass is already loaded |
122 | - scope :enterprises, lambda { {:conditions => (Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } | |
123 | - scope :communities, lambda { {:conditions => (Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } | |
124 | - scope :templates, lambda { |template_id = nil| | |
125 | - conditions = {:conditions => {:is_template => true}} | |
126 | - conditions[:conditions].merge!({:id => template_id}) unless template_id.nil? | |
127 | - conditions | |
127 | + scope :enterprises, -> { | |
128 | + where((Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")) | |
129 | + } | |
130 | + scope :communities, -> { | |
131 | + where((Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")) | |
132 | + } | |
133 | + scope :templates, -> template_id = nil { | |
134 | + s = where is_template: true | |
135 | + s = s.where id: template_id if template_id | |
136 | + s | |
128 | 137 | } |
129 | 138 | |
130 | - scope :with_templates, lambda { |templates| | |
131 | - {:conditions => {:template_id => templates}} | |
139 | + scope :with_templates, -> templates { | |
140 | + where template_id: templates | |
132 | 141 | } |
133 | - scope :no_templates, {:conditions => {:is_template => false}} | |
142 | + scope :no_templates, -> { where is_template: false } | |
134 | 143 | |
135 | 144 | # Returns a scoped object to select profiles in a given location or in a radius |
136 | 145 | # distance from the given location center. |
... | ... | @@ -195,8 +204,8 @@ class Profile < ActiveRecord::Base |
195 | 204 | alias_method_chain :count, :distinct |
196 | 205 | end |
197 | 206 | |
198 | - def members_by_role(roles, with_entities = nil) | |
199 | - Person.members_of(self, with_entities).by_role(roles, with_entities) | |
207 | + def members_by_role(roles) | |
208 | + Person.members_of(self).by_role(roles) | |
200 | 209 | end |
201 | 210 | |
202 | 211 | acts_as_having_boxes |
... | ... | @@ -207,10 +216,10 @@ class Profile < ActiveRecord::Base |
207 | 216 | Profile.column_names.map{|n| [Profile.table_name, n].join('.')}.join(',') |
208 | 217 | end |
209 | 218 | |
210 | - scope :visible, :conditions => { :visible => true, :secret => false } | |
211 | - scope :disabled, :conditions => { :visible => false } | |
212 | - scope :public, :conditions => { :visible => true, :public_profile => true, :secret => false } | |
213 | - scope :enabled, :conditions => { :enabled => true } | |
219 | + scope :visible, -> { where visible: true, secret: false } | |
220 | + scope :disabled, -> { where visible: false } | |
221 | + scope :is_public, -> { where visible: true, public_profile: true, secret: false } | |
222 | + scope :enabled, -> { where enabled: true } | |
214 | 223 | |
215 | 224 | # Subclasses must override this method |
216 | 225 | scope :more_popular |
... | ... | @@ -262,7 +271,7 @@ class Profile < ActiveRecord::Base |
262 | 271 | validates_length_of :description, :maximum => 550, :allow_nil => true |
263 | 272 | |
264 | 273 | # Valid identifiers must match this format. |
265 | - IDENTIFIER_FORMAT = /^#{Noosfero.identifier_format}$/ | |
274 | + IDENTIFIER_FORMAT = /\A#{Noosfero.identifier_format}\Z/ | |
266 | 275 | |
267 | 276 | # These names cannot be used as identifiers for Profiles |
268 | 277 | RESERVED_IDENTIFIERS = %w[ |
... | ... | @@ -314,7 +323,7 @@ class Profile < ActiveRecord::Base |
314 | 323 | end |
315 | 324 | end |
316 | 325 | |
317 | - has_many :profile_categorizations, :conditions => [ 'categories_profiles.virtual = ?', false ] | |
326 | + has_many :profile_categorizations, -> { where 'categories_profiles.virtual = ?', false } | |
318 | 327 | has_many :categories, :through => :profile_categorizations |
319 | 328 | |
320 | 329 | has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization' |
... | ... | @@ -541,14 +550,13 @@ class Profile < ActiveRecord::Base |
541 | 550 | self.articles.recent(limit, options, pagination) |
542 | 551 | end |
543 | 552 | |
544 | - def last_articles(limit = 10, options = {}) | |
545 | - options = { :limit => limit, | |
546 | - :conditions => ["advertise = ? AND published = ? AND | |
547 | - ((articles.type != ? and articles.type != ? and articles.type != ?) OR | |
548 | - articles.type is NULL)", | |
549 | - true, true, 'UploadedFile', 'RssFeed', 'Blog'], | |
550 | - :order => 'articles.published_at desc, articles.id desc' }.merge(options) | |
551 | - self.articles.find(:all, options) | |
553 | + def last_articles limit = 10 | |
554 | + self.articles.limit(limit).where( | |
555 | + "advertise = ? AND published = ? AND | |
556 | + ((articles.type != ? and articles.type != ? and articles.type != ?) OR | |
557 | + articles.type is NULL)", | |
558 | + true, true, 'UploadedFile', 'RssFeed', 'Blog' | |
559 | + ).order('articles.published_at desc, articles.id desc') | |
552 | 560 | end |
553 | 561 | |
554 | 562 | def to_liquid |
... | ... | @@ -752,7 +760,7 @@ private :generate_url, :url_options |
752 | 760 | num = num + 1 |
753 | 761 | new_name = original_article.name + ' ' + num.to_s |
754 | 762 | end |
755 | - original_article.update_attributes!(:name => new_name) | |
763 | + original_article.update!(:name => new_name) | |
756 | 764 | end |
757 | 765 | article_copy = article.copy(:profile => self, :parent => parent, :advertise => false) |
758 | 766 | if article.profile.home_page == article |
... | ... | @@ -942,11 +950,11 @@ private :generate_url, :url_options |
942 | 950 | self.forums.count.nonzero? |
943 | 951 | end |
944 | 952 | |
945 | - def admins(with_entities = nil) | |
953 | + def admins | |
946 | 954 | return [] if environment.blank? |
947 | 955 | admin_role = Profile::Roles.admin(environment.id) |
948 | 956 | return [] if admin_role.blank? |
949 | - self.members_by_role(admin_role, with_entities) | |
957 | + self.members_by_role(admin_role) | |
950 | 958 | end |
951 | 959 | |
952 | 960 | def enable_contact? | ... | ... |
app/models/profile_activity.rb
... | ... | @@ -25,8 +25,8 @@ class ProfileActivity < ActiveRecord::Base |
25 | 25 | protected |
26 | 26 | |
27 | 27 | def copy_timestamps |
28 | - self.created_at = self.activity.created_at | |
29 | - self.updated_at = self.activity.updated_at | |
28 | + self.created_at = self.activity.created_at if self.activity.created_at | |
29 | + self.updated_at = self.activity.updated_at if self.activity.updated_at | |
30 | 30 | end |
31 | 31 | |
32 | 32 | end | ... | ... |
app/models/profile_categorization.rb
1 | 1 | class ProfileCategorization < ActiveRecord::Base |
2 | - set_table_name :categories_profiles | |
2 | + self.table_name = :categories_profiles | |
3 | 3 | belongs_to :profile |
4 | 4 | belongs_to :category |
5 | 5 | |
... | ... | @@ -13,7 +13,7 @@ class ProfileCategorization < ActiveRecord::Base |
13 | 13 | end |
14 | 14 | |
15 | 15 | def self.remove_region(profile) |
16 | - region = profile.categories.find(:first, :conditions => { :type => [Region, State, City].map(&:name) }) | |
16 | + region = profile.categories.where(type: [Region, State, City].map(&:name)).first | |
17 | 17 | if region |
18 | 18 | ids = region.hierarchy.map(&:id) |
19 | 19 | self.delete_all(:profile_id => profile.id, :category_id => ids) | ... | ... |
app/models/profile_list_block.rb
... | ... | @@ -16,7 +16,7 @@ class ProfileListBlock < Block |
16 | 16 | |
17 | 17 | def profile_list |
18 | 18 | result = nil |
19 | - public_profiles = profiles.public.includes([:image,:domains,:preferred_domain,:environment]) | |
19 | + public_profiles = profiles.is_public.includes([:image,:domains,:preferred_domain,:environment]) | |
20 | 20 | if !prioritize_profiles_with_image |
21 | 21 | result = public_profiles.all(:limit => get_limit, :order => 'profiles.updated_at DESC').sort_by{ rand } |
22 | 22 | elsif profiles.visible.with_image.count >= get_limit |
... | ... | @@ -28,7 +28,7 @@ result = public_profiles.all(:limit => get_limit, :order => 'profiles.updated_at |
28 | 28 | end |
29 | 29 | |
30 | 30 | def profile_count |
31 | - profiles.public.length | |
31 | + profiles.is_public.length | |
32 | 32 | end |
33 | 33 | |
34 | 34 | # the title of the block. Probably will be overriden in subclasses. | ... | ... |
app/models/profile_suggestion.rb
... | ... | @@ -26,9 +26,9 @@ class ProfileSuggestion < ActiveRecord::Base |
26 | 26 | end |
27 | 27 | |
28 | 28 | validates_uniqueness_of :suggestion_id, :scope => [ :person_id ] |
29 | - scope :of_person, :conditions => { :suggestion_type => 'Person' } | |
30 | - scope :of_community, :conditions => { :suggestion_type => 'Community' } | |
31 | - scope :enabled, :conditions => { :enabled => true } | |
29 | + scope :of_person, -> { where suggestion_type: 'Person' } | |
30 | + scope :of_community, -> { where suggestion_type: 'Community' } | |
31 | + scope :enabled, -> { where enabled: true } | |
32 | 32 | |
33 | 33 | # {:category_type => ['category-icon', 'category-label']} |
34 | 34 | CATEGORIES = { |
... | ... | @@ -55,13 +55,13 @@ class ProfileSuggestion < ActiveRecord::Base |
55 | 55 | :threshold => 2, :weight => 1, :connection => 'Profile' |
56 | 56 | }, |
57 | 57 | :people_with_common_tags => { |
58 | - :threshold => 2, :weight => 1, :connection => 'ActsAsTaggableOn::Tag' | |
58 | + :threshold => 2, :weight => 1, :connection => 'Tag' | |
59 | 59 | }, |
60 | 60 | :communities_with_common_friends => { |
61 | 61 | :threshold => 2, :weight => 1, :connection => 'Profile' |
62 | 62 | }, |
63 | 63 | :communities_with_common_tags => { |
64 | - :threshold => 2, :weight => 1, :connection => 'ActsAsTaggableOn::Tag' | |
64 | + :threshold => 2, :weight => 1, :connection => 'Tag' | |
65 | 65 | } |
66 | 66 | } |
67 | 67 | |
... | ... | @@ -127,17 +127,15 @@ class ProfileSuggestion < ActiveRecord::Base |
127 | 127 | rescue NoMethodError |
128 | 128 | next |
129 | 129 | end |
130 | - connections = suggested_profile.send("#{rule}_connections") | |
131 | - if connections.present? | |
132 | - connections = connections[1..-2].split(',') | |
133 | - else | |
134 | - connections = [] | |
135 | - end | |
136 | - suggestion.send("#{rule}=", value) | |
130 | + | |
131 | + connections = suggested_profile.send("#{rule}_connections") || [] | |
132 | + connections = connections[1..-2] if connections.present? | |
137 | 133 | connections.each do |connection_id| |
138 | 134 | next if SuggestionConnection.where(:suggestion_id => suggestion.id, :connection_id => connection_id, :connection_type => options[:connection]).present? |
139 | - SuggestionConnection.create!(:suggestion => suggestion, :connection_id => connection_id, :connection_type => options[:connection]) | |
135 | + SuggestionConnection.create!(:suggestion => suggestion, :connection_id => connection_id, :connection_type => options[:connection]) | |
140 | 136 | end |
137 | + | |
138 | + suggestion.send("#{rule}=", value) | |
141 | 139 | suggestion.score += value * options[:weight] |
142 | 140 | end |
143 | 141 | suggestion.save! | ... | ... |
app/models/reported_image.rb
app/models/rss_feed.rb
... | ... | @@ -40,7 +40,7 @@ class RssFeed < Article |
40 | 40 | |
41 | 41 | # FIXME this should be validates_numericality_of, but Rails 2.0.2 does not |
42 | 42 | # support validates_numericality_of with virtual attributes |
43 | - validates_format_of :limit, :with => /^\d+$/, :if => :limit | |
43 | + validates_format_of :limit, :with => /\d+/, :if => :limit | |
44 | 44 | |
45 | 45 | # determinates what to include in the feed. Possible values are +:all+ |
46 | 46 | # (include everything from the profile) and :parent_and_children (include |
... | ... | @@ -69,7 +69,7 @@ class RssFeed < Article |
69 | 69 | def fetch_articles |
70 | 70 | if parent && parent.has_posts? |
71 | 71 | language = self.language.blank? ? {} : { :language => self.language } |
72 | - return parent.posts.find(:all, :conditions => { :published => true }.merge(language), :limit => self.limit, :order => 'id desc') | |
72 | + return parent.posts.where({published: true}.merge language).limit(self.limit).order('id desc') | |
73 | 73 | end |
74 | 74 | |
75 | 75 | articles = | ... | ... |
app/models/scrap.rb
... | ... | @@ -18,9 +18,9 @@ class Scrap < ActiveRecord::Base |
18 | 18 | after_create :create_activity |
19 | 19 | after_update :update_activity |
20 | 20 | |
21 | - scope :all_scraps, lambda {|profile| {:conditions => ["receiver_id = ? OR sender_id = ?", profile, profile], :limit => 30}} | |
21 | + scope :all_scraps, -> profile { limit(30).where("receiver_id = ? OR sender_id = ?", profile, profile) } | |
22 | 22 | |
23 | - scope :not_replies, :conditions => {:scrap_id => nil} | |
23 | + scope :not_replies, -> { where scrap_id: nil } | |
24 | 24 | |
25 | 25 | track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.sender != s.receiver && s.sender != s.top_root.receiver}, :custom_target => :action_tracker_target, :custom_user => :sender |
26 | 26 | ... | ... |
app/models/search_term_occurrence.rb
1 | 1 | class SearchTermOccurrence < ActiveRecord::Base |
2 | + | |
2 | 3 | belongs_to :search_term |
3 | 4 | validates_presence_of :search_term |
4 | 5 | attr_accessible :search_term, :created_at, :total, :indexed |
5 | 6 | |
6 | 7 | EXPIRATION_TIME = 1.year |
7 | 8 | |
8 | - scope :valid, :conditions => ["search_term_occurrences.created_at > ?", DateTime.now - EXPIRATION_TIME] | |
9 | + scope :valid, -> { where "search_term_occurrences.created_at > ?", DateTime.now - EXPIRATION_TIME } | |
10 | + | |
9 | 11 | end | ... | ... |
app/models/slideshow_block.rb
... | ... | @@ -13,7 +13,7 @@ class SlideshowBlock < Block |
13 | 13 | end |
14 | 14 | |
15 | 15 | def gallery |
16 | - gallery_id ? Gallery.find(:first, :conditions => { :id => gallery_id }) : nil | |
16 | + if gallery_id then Gallery.where(id: gallery_id).first else nil end | |
17 | 17 | end |
18 | 18 | |
19 | 19 | def public_filename_for(image) | ... | ... |