Compare commits
83
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bdf0fe27a | ||
|
|
229830b52b | ||
|
|
5f9ea11d77 | ||
|
|
de231092a2 | ||
|
|
e7035fc8c5 | ||
|
|
f0b34f96ff | ||
|
|
58a576e011 | ||
|
|
4c8f3b8643 | ||
|
|
b753511096 | ||
|
|
2fb44885ce | ||
|
|
4e45e94f4b | ||
|
|
d8106e7b08 | ||
|
|
018ddce8cf | ||
|
|
a4c8b2beba | ||
|
|
59aa0ecbaf | ||
|
|
94d2d733e9 | ||
|
|
7bd9a0ab22 | ||
|
|
299097e13f | ||
|
|
037030a140 | ||
|
|
bd95513f59 | ||
|
|
e4a2b26d6e | ||
|
|
93a77e12a4 | ||
|
|
e9a73ea5cb | ||
|
|
06922e9316 | ||
|
|
421f9907b9 | ||
|
|
cd6bff99e7 | ||
|
|
c82f8e1ab8 | ||
|
|
aa4c9d5704 | ||
|
|
b55a2ac434 | ||
|
|
8c772b1e43 | ||
|
|
3c6a23036c | ||
|
|
df5f4df90d | ||
|
|
c5b7b79b7b | ||
|
|
bdddba4e07 | ||
|
|
e44d5935f2 | ||
|
|
9387735ae6 | ||
|
|
050a4a88e7 | ||
|
|
7f540bc3c5 | ||
|
|
add8550617 | ||
|
|
5834b42266 | ||
|
|
fec35cfa1b | ||
|
|
45e96470af | ||
|
|
82db449769 | ||
|
|
ca2aea6022 | ||
|
|
49ddc08550 | ||
|
|
8957724102 | ||
|
|
506665e991 | ||
|
|
03848cb6e8 | ||
|
|
dfa2c02820 | ||
|
|
63f514144a | ||
|
|
8d0fdf9210 | ||
|
|
10727a1302 | ||
|
|
1440cfcc1e | ||
|
|
71a5c8ee64 | ||
|
|
d7d42ae241 | ||
|
|
0a20c632b8 | ||
|
|
d247560fca | ||
|
|
ebe53e40d2 | ||
|
|
36d8787306 | ||
|
|
a1fbcac477 | ||
|
|
572c21a310 | ||
|
|
a4b267056d | ||
|
|
867078a437 | ||
|
|
e244e592ed | ||
|
|
6b7feefa16 | ||
|
|
9c6414477d | ||
|
|
d4566c7446 | ||
|
|
1bc5f9aa7a | ||
|
|
d288f26286 | ||
|
|
515519a537 | ||
|
|
2111fe9b46 | ||
|
|
1ea3806a7d | ||
|
|
ed461a7c3e | ||
|
|
8cb8aea9ca | ||
|
|
cb1bf34588 | ||
|
|
93dc7b0c50 | ||
|
|
7a2187e839 | ||
|
|
5579877589 | ||
|
|
c65513fd0a | ||
|
|
7bd771dbc7 | ||
|
|
281caaf0fd | ||
|
|
dd5e22ea48 | ||
|
|
b30bd91f3d |
+3
-1
@@ -8,8 +8,10 @@
|
||||
/.bundle
|
||||
/.rspec
|
||||
.ruby-version
|
||||
|
||||
.env
|
||||
/avatars
|
||||
# Ignore all logfiles and tempfiles.
|
||||
/log/*
|
||||
!/log/.keep
|
||||
/tmp
|
||||
.Rproj.user
|
||||
|
||||
@@ -11,6 +11,33 @@ gem 'coffee-rails', '~> 4.1.0'
|
||||
# See https://github.com/rails/execjs#readme for more supported runtimes
|
||||
# gem 'therubyracer', platforms: :ruby
|
||||
|
||||
# Integrate Paperclip into Mongoid.
|
||||
gem 'mongoid-paperclip'
|
||||
|
||||
# Adds support for multiparameter fields to mongoid 4.x series.
|
||||
gem 'mongoid-sadstory'
|
||||
|
||||
# Markdown rendering
|
||||
gem 'redcarpet'
|
||||
|
||||
# Stripe integration
|
||||
gem 'stripe'
|
||||
|
||||
# Render your navigation as HTML list, link list or breadcrumbs.
|
||||
gem 'simple-navigation'
|
||||
|
||||
# To extend paperclip with locales
|
||||
gem 'paperclip-i18n'
|
||||
|
||||
# Amazon's S3 file hosting service
|
||||
gem 'aws-sdk', '< 3.0' # see https://github.com/thoughtbot/paperclip/issues/2484
|
||||
|
||||
# A fixtures replacement
|
||||
gem 'factory_girl'
|
||||
|
||||
# It's a small library to provide the Rails I18n translations on the JavaScript.
|
||||
gem "i18n-js"
|
||||
|
||||
# Use jquery as the JavaScript library
|
||||
gem 'jquery-rails'
|
||||
|
||||
@@ -19,9 +46,6 @@ gem 'jbuilder', '~> 2.0'
|
||||
# bundle exec rake doc:rails generates the API under doc/api.
|
||||
gem 'sdoc', '~> 0.4.0', group: :doc
|
||||
|
||||
# Easily generate a Twitter Bootstrap navbar in your Rails app
|
||||
gem 'rails_bootstrap_navbar'
|
||||
|
||||
# Kaminari Mongoid adapter.
|
||||
gem 'kaminari-mongoid'
|
||||
gem 'kaminari-actionview'
|
||||
@@ -33,7 +57,7 @@ gem 'route_translator'
|
||||
gem 'roadie-rails', '~> 1.0'
|
||||
|
||||
# Devise is a flexible authentication solution for Rails based on Warden.
|
||||
gem 'devise'
|
||||
gem 'devise'
|
||||
|
||||
# Translations for devise
|
||||
gem 'devise-i18n'
|
||||
@@ -66,14 +90,12 @@ gem 'rails_admin'
|
||||
|
||||
gem 'mongoid_paranoia'
|
||||
|
||||
gem 'mailchimp-api', require: 'mailchimp'
|
||||
|
||||
group :development, :test do
|
||||
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
|
||||
gem 'byebug'
|
||||
gem 'mongoid-rspec', '3.0.0'
|
||||
gem 'rspec-rails', '~> 3.0'
|
||||
|
||||
|
||||
gem 'pry-rails'
|
||||
gem 'dotenv-rails'
|
||||
end
|
||||
@@ -81,13 +103,17 @@ end
|
||||
group :development do
|
||||
# A series of things you can use to benchmark a Rails or Ruby app.
|
||||
gem 'derailed_benchmarks'
|
||||
|
||||
|
||||
# To use all profiling methods available
|
||||
gem 'stackprof'
|
||||
|
||||
|
||||
# Access an IRB console on exception pages or by using <%= console %> in views
|
||||
gem 'web-console', '~> 2.0'
|
||||
|
||||
# Better Errors replaces the standard Rails error page with a much better and more useful error page.
|
||||
gem "better_errors"
|
||||
gem "binding_of_caller"
|
||||
|
||||
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
|
||||
# gem 'spring'
|
||||
end
|
||||
|
||||
+188
-131
@@ -1,65 +1,78 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actionmailer (4.2.8)
|
||||
actionpack (= 4.2.8)
|
||||
actionview (= 4.2.8)
|
||||
activejob (= 4.2.8)
|
||||
actionmailer (4.2.10)
|
||||
actionpack (= 4.2.10)
|
||||
actionview (= 4.2.10)
|
||||
activejob (= 4.2.10)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
actionpack (4.2.8)
|
||||
actionview (= 4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
actionpack (4.2.10)
|
||||
actionview (= 4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
rack (~> 1.6)
|
||||
rack-test (~> 0.6.2)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
actionview (4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
||||
activejob (4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
activejob (4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
globalid (>= 0.3.0)
|
||||
activemodel (4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
activemodel (4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.2.8)
|
||||
activemodel (= 4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
activerecord (4.2.10)
|
||||
activemodel (= 4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.8)
|
||||
activesupport (4.2.10)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.0)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
arel (6.0.4)
|
||||
autoprefixer-rails (6.7.7.1)
|
||||
autoprefixer-rails (7.1.4.1)
|
||||
execjs
|
||||
aws-sdk (2.10.61)
|
||||
aws-sdk-resources (= 2.10.61)
|
||||
aws-sdk-core (2.10.61)
|
||||
aws-sigv4 (~> 1.0)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-resources (2.10.61)
|
||||
aws-sdk-core (= 2.10.61)
|
||||
aws-sigv4 (1.0.2)
|
||||
bcrypt (3.1.11)
|
||||
benchmark-ips (2.7.2)
|
||||
better_errors (2.4.0)
|
||||
coderay (>= 1.0.0)
|
||||
erubi (>= 1.0.0)
|
||||
rack (>= 0.9.0)
|
||||
binding_of_caller (0.7.2)
|
||||
debug_inspector (>= 0.0.1)
|
||||
bootstrap-navbar (2.4.0)
|
||||
gem_config (~> 0.3)
|
||||
bootstrap-sass (3.3.7)
|
||||
autoprefixer-rails (>= 5.2.1)
|
||||
sass (>= 3.3.4)
|
||||
bson (4.2.1)
|
||||
bson (4.2.2)
|
||||
builder (3.2.3)
|
||||
byebug (9.0.6)
|
||||
capybara (2.13.0)
|
||||
byebug (9.1.0)
|
||||
capybara (2.15.1)
|
||||
addressable
|
||||
mime-types (>= 1.16)
|
||||
mini_mime (>= 0.1.3)
|
||||
nokogiri (>= 1.3.3)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (>= 0.5.4)
|
||||
xpath (~> 2.0)
|
||||
coderay (1.1.1)
|
||||
climate_control (0.2.0)
|
||||
cocaine (0.5.8)
|
||||
climate_control (>= 0.0.3, < 1.0)
|
||||
coderay (1.1.2)
|
||||
coffee-rails (4.1.1)
|
||||
coffee-script (>= 2.2.0)
|
||||
railties (>= 4.0.0, < 5.1.x)
|
||||
@@ -68,9 +81,10 @@ GEM
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
concurrent-ruby (1.0.5)
|
||||
css_parser (1.4.10)
|
||||
crass (1.0.2)
|
||||
css_parser (1.6.0)
|
||||
addressable
|
||||
debug_inspector (0.0.2)
|
||||
debug_inspector (0.0.3)
|
||||
derailed_benchmarks (1.3.2)
|
||||
benchmark-ips (~> 2)
|
||||
get_process_mem (~> 0)
|
||||
@@ -79,37 +93,45 @@ GEM
|
||||
rack (>= 1)
|
||||
rake (> 10, < 13)
|
||||
thor (~> 0.19)
|
||||
devise (4.2.1)
|
||||
devise (4.3.0)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 5.1)
|
||||
railties (>= 4.1.0, < 5.2)
|
||||
responders
|
||||
warden (~> 1.2.3)
|
||||
devise-i18n (1.1.2)
|
||||
devise-i18n (1.2.0)
|
||||
diff-lcs (1.3)
|
||||
dotenv (2.2.0)
|
||||
dotenv-rails (2.2.0)
|
||||
dotenv (= 2.2.0)
|
||||
railties (>= 3.2, < 5.1)
|
||||
dotenv (2.2.1)
|
||||
dotenv-rails (2.2.1)
|
||||
dotenv (= 2.2.1)
|
||||
railties (>= 3.2, < 5.2)
|
||||
erubi (1.7.0)
|
||||
erubis (2.7.0)
|
||||
excon (0.55.0)
|
||||
execjs (2.7.0)
|
||||
faker (1.7.2)
|
||||
factory_girl (4.8.1)
|
||||
activesupport (>= 3.0.0)
|
||||
faker (1.8.4)
|
||||
i18n (~> 0.5)
|
||||
font-awesome-rails (4.7.0.1)
|
||||
railties (>= 3.2, < 5.1)
|
||||
gem_config (0.3.1)
|
||||
geocoder (1.4.3)
|
||||
faraday (0.13.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.9.18)
|
||||
font-awesome-rails (4.7.0.2)
|
||||
railties (>= 3.2, < 5.2)
|
||||
geocoder (1.4.4)
|
||||
get_process_mem (0.2.1)
|
||||
globalid (0.3.7)
|
||||
activesupport (>= 4.1.0)
|
||||
haml (4.0.7)
|
||||
globalid (0.4.0)
|
||||
activesupport (>= 4.2.0)
|
||||
haml (5.0.3)
|
||||
temple (>= 0.8.0)
|
||||
tilt
|
||||
heapy (0.1.2)
|
||||
i18n (0.8.1)
|
||||
jbuilder (2.6.3)
|
||||
activesupport (>= 3.0.0, < 5.2)
|
||||
multi_json (~> 1.2)
|
||||
heapy (0.1.3)
|
||||
i18n (0.8.6)
|
||||
i18n-js (3.0.1)
|
||||
i18n (~> 0.6, >= 0.6.6)
|
||||
jbuilder (2.7.0)
|
||||
activesupport (>= 4.2.0)
|
||||
multi_json (>= 1.2)
|
||||
jmespath (1.3.1)
|
||||
jquery-rails (4.3.1)
|
||||
rails-dom-testing (>= 1, < 3)
|
||||
railties (>= 4.2.0)
|
||||
@@ -117,77 +139,94 @@ GEM
|
||||
jquery-ui-rails (5.0.5)
|
||||
railties (>= 3.2.16)
|
||||
json (1.8.6)
|
||||
kaminari (0.17.0)
|
||||
actionpack (>= 3.0.0)
|
||||
activesupport (>= 3.0.0)
|
||||
kaminari (1.0.1)
|
||||
activesupport (>= 4.1.0)
|
||||
kaminari-actionview (= 1.0.1)
|
||||
kaminari-activerecord (= 1.0.1)
|
||||
kaminari-core (= 1.0.1)
|
||||
kaminari-actionview (1.0.1)
|
||||
actionview
|
||||
kaminari-core (= 1.0.1)
|
||||
kaminari-activerecord (1.0.1)
|
||||
activerecord
|
||||
kaminari-core (= 1.0.1)
|
||||
kaminari-core (1.0.1)
|
||||
kaminari-mongoid (1.0.1)
|
||||
kaminari-core (~> 1.0)
|
||||
mongoid
|
||||
loofah (2.0.3)
|
||||
loofah (2.1.1)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.6.4)
|
||||
mail (2.6.6)
|
||||
mime-types (>= 1.16, < 4)
|
||||
mailchimp-api (2.0.6)
|
||||
excon (>= 0.16.0)
|
||||
json (>= 1.7.7)
|
||||
memory_profiler (0.9.8)
|
||||
method_source (0.8.2)
|
||||
method_source (0.9.0)
|
||||
mime-types (3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2016.0521)
|
||||
mini_portile2 (2.1.0)
|
||||
minitest (5.10.1)
|
||||
mongo (2.4.1)
|
||||
mimemagic (0.3.2)
|
||||
mini_mime (0.1.4)
|
||||
mini_portile2 (2.3.0)
|
||||
minitest (5.10.3)
|
||||
mongo (2.4.3)
|
||||
bson (>= 4.2.1, < 5.0.0)
|
||||
mongoid (5.0.2)
|
||||
activemodel (~> 4.0)
|
||||
mongo (~> 2.1)
|
||||
origin (~> 2.1)
|
||||
tzinfo (>= 0.3.37)
|
||||
mongoid-compatibility (0.4.1)
|
||||
mongoid-compatibility (0.5.0)
|
||||
activesupport
|
||||
mongoid (>= 2.0)
|
||||
mongoid-paperclip (0.0.11)
|
||||
mongoid
|
||||
paperclip (>= 2.3.6, != 4.3.0)
|
||||
mongoid-rspec (3.0.0)
|
||||
mongoid (~> 5.0)
|
||||
rake
|
||||
rspec (~> 3.3)
|
||||
mongoid-sadstory (0.0.2)
|
||||
mongoid
|
||||
mongoid_paranoia (0.2.1)
|
||||
mongoid (>= 4)
|
||||
mongoid-compatibility
|
||||
multi_json (1.12.1)
|
||||
multi_json (1.12.2)
|
||||
multipart-post (2.0.0)
|
||||
nested_form (0.3.2)
|
||||
nokogiri (1.7.1)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
origin (2.3.0)
|
||||
nokogiri (1.8.1)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
origin (2.3.1)
|
||||
orm_adapter (0.5.0)
|
||||
pry (0.10.4)
|
||||
paperclip (5.1.0)
|
||||
activemodel (>= 4.2.0)
|
||||
activesupport (>= 4.2.0)
|
||||
cocaine (~> 0.5.5)
|
||||
mime-types
|
||||
mimemagic (~> 0.3.0)
|
||||
paperclip-i18n (4.3.0)
|
||||
pry (0.11.1)
|
||||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.8.1)
|
||||
slop (~> 3.4)
|
||||
method_source (~> 0.9.0)
|
||||
pry-rails (0.3.6)
|
||||
pry (>= 0.10.4)
|
||||
public_suffix (2.0.5)
|
||||
puma (3.8.2)
|
||||
rack (1.6.5)
|
||||
public_suffix (3.0.0)
|
||||
puma (3.10.0)
|
||||
rack (1.6.8)
|
||||
rack-pjax (1.0.0)
|
||||
nokogiri (~> 1.5)
|
||||
rack (>= 1.1)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rails (4.2.8)
|
||||
actionmailer (= 4.2.8)
|
||||
actionpack (= 4.2.8)
|
||||
actionview (= 4.2.8)
|
||||
activejob (= 4.2.8)
|
||||
activemodel (= 4.2.8)
|
||||
activerecord (= 4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
rails (4.2.10)
|
||||
actionmailer (= 4.2.10)
|
||||
actionpack (= 4.2.10)
|
||||
actionview (= 4.2.10)
|
||||
activejob (= 4.2.10)
|
||||
activemodel (= 4.2.10)
|
||||
activerecord (= 4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.2.8)
|
||||
railties (= 4.2.10)
|
||||
sprockets-rails
|
||||
rails-deprecated_sanitizer (1.0.3)
|
||||
activesupport (>= 4.2.0.alpha)
|
||||
@@ -203,65 +242,71 @@ GEM
|
||||
rails_12factor (0.0.3)
|
||||
rails_serve_static_assets
|
||||
rails_stdout_logging
|
||||
rails_admin (1.1.1)
|
||||
rails_admin (1.2.0)
|
||||
builder (~> 3.1)
|
||||
coffee-rails (~> 4.0)
|
||||
font-awesome-rails (>= 3.0, < 5)
|
||||
haml (~> 4.0)
|
||||
haml (>= 4.0, < 6)
|
||||
jquery-rails (>= 3.0, < 5)
|
||||
jquery-ui-rails (~> 5.0)
|
||||
kaminari (~> 0.14)
|
||||
kaminari (>= 0.14, < 2.0)
|
||||
nested_form (~> 0.3)
|
||||
rack-pjax (>= 0.7)
|
||||
rails (>= 4.0, < 6)
|
||||
remotipart (~> 1.3)
|
||||
sass-rails (>= 4.0, < 6)
|
||||
rails_bootstrap_navbar (2.0.1)
|
||||
bootstrap-navbar (~> 2.0)
|
||||
rails (>= 3.0.0)
|
||||
rails_serve_static_assets (0.0.5)
|
||||
rails_stdout_logging (0.0.5)
|
||||
railties (4.2.8)
|
||||
actionpack (= 4.2.8)
|
||||
activesupport (= 4.2.8)
|
||||
railties (4.2.10)
|
||||
actionpack (= 4.2.10)
|
||||
activesupport (= 4.2.10)
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (12.0.0)
|
||||
rake (12.1.0)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rdoc (4.3.0)
|
||||
redcarpet (3.4.0)
|
||||
remotipart (1.3.1)
|
||||
responders (2.3.0)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
roadie (3.2.1)
|
||||
css_parser (~> 1.4.5)
|
||||
nokogiri (>= 1.5.0, < 1.8.0)
|
||||
roadie-rails (1.1.1)
|
||||
railties (>= 3.0, < 5.1)
|
||||
responders (2.4.0)
|
||||
actionpack (>= 4.2.0, < 5.3)
|
||||
railties (>= 4.2.0, < 5.3)
|
||||
roadie (3.2.2)
|
||||
css_parser (~> 1.4)
|
||||
nokogiri (~> 1.5)
|
||||
roadie-rails (1.2.1)
|
||||
railties (>= 3.0, < 5.2)
|
||||
roadie (~> 3.1)
|
||||
route_translator (4.4.1)
|
||||
actionpack (>= 3.2, < 5.0)
|
||||
activesupport (>= 3.2, < 5.0)
|
||||
rspec (3.5.0)
|
||||
rspec-core (~> 3.5.0)
|
||||
rspec-expectations (~> 3.5.0)
|
||||
rspec-mocks (~> 3.5.0)
|
||||
rspec-core (3.5.4)
|
||||
rspec-support (~> 3.5.0)
|
||||
rspec-expectations (3.5.0)
|
||||
rspec (3.6.0)
|
||||
rspec-core (~> 3.6.0)
|
||||
rspec-expectations (~> 3.6.0)
|
||||
rspec-mocks (~> 3.6.0)
|
||||
rspec-core (3.6.0)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-expectations (3.6.0)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.5.0)
|
||||
rspec-mocks (3.5.0)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-mocks (3.6.0)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.5.0)
|
||||
rspec-rails (3.5.2)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-rails (3.6.1)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
railties (>= 3.0)
|
||||
rspec-core (~> 3.5.0)
|
||||
rspec-expectations (~> 3.5.0)
|
||||
rspec-mocks (~> 3.5.0)
|
||||
rspec-support (~> 3.5.0)
|
||||
rspec-support (3.5.0)
|
||||
sass (3.4.23)
|
||||
rspec-core (~> 3.6.0)
|
||||
rspec-expectations (~> 3.6.0)
|
||||
rspec-mocks (~> 3.6.0)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-support (3.6.0)
|
||||
sass (3.5.1)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sass-rails (5.0.6)
|
||||
railties (>= 4.0.0, < 6)
|
||||
sass (~> 3.1)
|
||||
@@ -271,32 +316,35 @@ GEM
|
||||
sdoc (0.4.2)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
rdoc (~> 4.0)
|
||||
simple_form (3.4.0)
|
||||
actionpack (> 4, < 5.1)
|
||||
activemodel (> 4, < 5.1)
|
||||
slim (3.0.7)
|
||||
temple (~> 0.7.6)
|
||||
simple-navigation (4.0.5)
|
||||
activesupport (>= 2.3.2)
|
||||
simple_form (3.5.0)
|
||||
actionpack (> 4, < 5.2)
|
||||
activemodel (> 4, < 5.2)
|
||||
slim (3.0.8)
|
||||
temple (>= 0.7.6, < 0.9)
|
||||
tilt (>= 1.3.3, < 2.1)
|
||||
slim-rails (3.1.2)
|
||||
actionpack (>= 3.1)
|
||||
railties (>= 3.1)
|
||||
slim (~> 3.0)
|
||||
slop (3.6.0)
|
||||
sprockets (3.7.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.2.0)
|
||||
sprockets-rails (3.2.1)
|
||||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
stackprof (0.2.10)
|
||||
temple (0.7.7)
|
||||
thor (0.19.4)
|
||||
stripe (3.6.0)
|
||||
faraday (~> 0.10)
|
||||
temple (0.8.0)
|
||||
thor (0.20.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.7)
|
||||
tilt (2.0.8)
|
||||
tzinfo (1.2.3)
|
||||
thread_safe (~> 0.1)
|
||||
uglifier (3.1.10)
|
||||
uglifier (3.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
warden (1.2.7)
|
||||
rack (>= 1.0)
|
||||
@@ -305,13 +353,16 @@ GEM
|
||||
binding_of_caller (>= 0.7.2)
|
||||
railties (>= 4.0)
|
||||
sprockets-rails (>= 2.0, < 4.0)
|
||||
xpath (2.0.0)
|
||||
xpath (2.1.0)
|
||||
nokogiri (~> 1.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
aws-sdk (< 3.0)
|
||||
better_errors
|
||||
binding_of_caller
|
||||
bootstrap-sass (~> 3.3.5)
|
||||
byebug
|
||||
capybara
|
||||
@@ -320,32 +371,38 @@ DEPENDENCIES
|
||||
devise
|
||||
devise-i18n
|
||||
dotenv-rails
|
||||
factory_girl
|
||||
faker
|
||||
geocoder
|
||||
i18n-js
|
||||
jbuilder (~> 2.0)
|
||||
jquery-rails
|
||||
kaminari-actionview
|
||||
kaminari-mongoid
|
||||
mailchimp-api
|
||||
mongoid (~> 5.0.0)
|
||||
mongoid-paperclip
|
||||
mongoid-rspec (= 3.0.0)
|
||||
mongoid-sadstory
|
||||
mongoid_paranoia
|
||||
paperclip-i18n
|
||||
pry-rails
|
||||
puma
|
||||
rails (~> 4.2)
|
||||
rails-i18n
|
||||
rails_12factor
|
||||
rails_admin
|
||||
rails_bootstrap_navbar
|
||||
redcarpet
|
||||
roadie-rails (~> 1.0)
|
||||
route_translator
|
||||
rspec-rails (~> 3.0)
|
||||
sass-rails (~> 5.0)
|
||||
sdoc (~> 0.4.0)
|
||||
simple-navigation
|
||||
simple_form
|
||||
slim
|
||||
slim-rails
|
||||
stackprof
|
||||
stripe
|
||||
uglifier (>= 1.3.0)
|
||||
web-console (~> 2.0)
|
||||
|
||||
@@ -353,4 +410,4 @@ RUBY VERSION
|
||||
ruby 2.3.1p112
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.6
|
||||
1.16.0
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
@@ -15,4 +15,5 @@
|
||||
//= require bootstrap-sprockets
|
||||
//= require typeahead.bundle
|
||||
//= require markerclusterer_compiled
|
||||
//= require i18n/translations
|
||||
//= require_tree .
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# Place all the behaviors and hooks related to the matching controller here.
|
||||
# All this logic will automatically be available in application.js.
|
||||
# You can use CoffeeScript in this file: http://coffeescript.org/
|
||||
@@ -0,0 +1,3 @@
|
||||
# Place all the behaviors and hooks related to the matching controller here.
|
||||
# All this logic will automatically be available in application.js.
|
||||
# You can use CoffeeScript in this file: http://coffeescript.org/
|
||||
@@ -0,0 +1,25 @@
|
||||
$(document).ready(function(){
|
||||
$('.statement article').each(function(){
|
||||
var trimLength = 300;
|
||||
var trimMargin = 1.2; // don't trim just a couple of words
|
||||
if($(this).text().length > (trimLength * trimMargin)) {
|
||||
var text = $(this).text();
|
||||
var trimPoint = $(this).text().indexOf(" ", trimLength);
|
||||
var newContent = text.substring(0, trimPoint)+'<span class="read-more">'+text.substring(trimPoint)+'</span><span class="toggle">... <a href="#">' + I18n.t("pages.statements.read_more");
|
||||
+ '</a></span>';
|
||||
$(this).html(newContent);
|
||||
}
|
||||
});
|
||||
$('.toggle a').click(function(e){
|
||||
e.preventDefault();
|
||||
var para = $(this).closest('article');
|
||||
var initialHeight = $(this).closest('article').innerHeight();
|
||||
para.find('.read-more').show();
|
||||
para.find('.toggle').hide();
|
||||
var newHeight = para.innerHeight();
|
||||
para.css('max-height', initialHeight+'px');
|
||||
para.animate({ maxHeight: newHeight }, 300, function(){
|
||||
para.css('max-height', 'none');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -13,64 +13,93 @@
|
||||
*= require_tree .
|
||||
*= require_self
|
||||
*/
|
||||
|
||||
$brand-success: #66903F
|
||||
$navbar-default-bg: #FFF
|
||||
$navbar-default-border: none
|
||||
$font-size-base: 14px
|
||||
$navbar-padding-horizontal: none
|
||||
$navbar-default-link-color: #66903F
|
||||
$navbar-default-link-active-bg: #FFF
|
||||
$font-size-h1: floor($font-size-base * 1.8)
|
||||
$font-size-h2: floor($font-size-base * 1.5)
|
||||
$font-size-h3: floor($font-size-base * 1.2)
|
||||
|
||||
@import "variables"
|
||||
@import "bootstrap-sprockets"
|
||||
@import "bootstrap"
|
||||
@import "typeaheadjs"
|
||||
@import "footnotes"
|
||||
@import "statements"
|
||||
@import "donations"
|
||||
@import "nav"
|
||||
|
||||
*:focus
|
||||
outline: 0
|
||||
-webkit-box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.075), 0 0 8px red
|
||||
box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.075), 0 0 8px red
|
||||
|
||||
.form-control:focus, input:focus
|
||||
outline: 0
|
||||
-webkit-box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.075), 0 0 8px $brand-success
|
||||
box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.075), 0 0 8px $brand-success
|
||||
|
||||
.alert-alert
|
||||
@extend .alert-danger
|
||||
|
||||
.alert-notice
|
||||
@extend .alert-info
|
||||
|
||||
.form-inline > *
|
||||
margin: 5px
|
||||
|
||||
|
||||
body.admin
|
||||
background: repeating-linear-gradient(45deg, yellow, yellow 50px, black 50px, black 100px)
|
||||
|
||||
body
|
||||
> .container
|
||||
nav.languages
|
||||
position: relative
|
||||
padding: 3px
|
||||
|
||||
.container.content
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
|
||||
padding: 20px
|
||||
margin-top: 10px
|
||||
|
||||
background: #FFF
|
||||
|
||||
.anouncement
|
||||
margin-top: 10px
|
||||
|
||||
.lead
|
||||
margin: 0px
|
||||
|
||||
header
|
||||
.pagelogo
|
||||
max-height: 91px
|
||||
h1
|
||||
font-size: 20px
|
||||
margin-top: 35px
|
||||
|
||||
|
||||
.navbar
|
||||
.container
|
||||
padding-left: 0px
|
||||
|
||||
|
||||
header > .row
|
||||
margin-bottom: 12px
|
||||
|
||||
main > h1
|
||||
margin-top: 0px
|
||||
|
||||
ul#topnav
|
||||
font-size: 1.2em
|
||||
|
||||
|
||||
li
|
||||
text-transform: uppercase
|
||||
|
||||
|
||||
ul
|
||||
li
|
||||
li
|
||||
text-transform: none
|
||||
|
||||
|
||||
li.active
|
||||
border-bottom: 1px solid #66903F
|
||||
|
||||
|
||||
.lead
|
||||
font-weight: normal
|
||||
|
||||
|
||||
#new_supporter
|
||||
label.required
|
||||
abbr
|
||||
display: none
|
||||
|
||||
|
||||
#counter
|
||||
background-color: $brand-success
|
||||
margin-top: 24px
|
||||
@@ -78,7 +107,7 @@ body
|
||||
border: 1px solid $brand-success
|
||||
border-radius: 5px
|
||||
color: white
|
||||
|
||||
|
||||
.counter_char
|
||||
background-color: white
|
||||
width: 20px
|
||||
@@ -89,7 +118,7 @@ body
|
||||
display: inline-block
|
||||
text-align: center
|
||||
color: $brand-success
|
||||
|
||||
|
||||
.text-success
|
||||
color: $brand-success
|
||||
|
||||
@@ -97,15 +126,37 @@ body
|
||||
display: block
|
||||
float: left
|
||||
margin: 12px
|
||||
|
||||
|
||||
.table-inherit
|
||||
width: inherit
|
||||
|
||||
footer
|
||||
|
||||
footer
|
||||
h2
|
||||
margin: 0px
|
||||
font-size: $font-size-base
|
||||
|
||||
ol
|
||||
ol
|
||||
padding-left: 1em
|
||||
|
||||
.donation_button
|
||||
height: 50px
|
||||
background: $brand-success
|
||||
width: 200px
|
||||
text-align: center
|
||||
font-size: 18px
|
||||
line-height: 50px
|
||||
font-family: sans-serif
|
||||
color: #FFF
|
||||
transform: rotate(-45deg)
|
||||
position: relative
|
||||
top: 26px
|
||||
left: -47px
|
||||
box-shadow: inset 0px 0px 0px 4px rgba(255, 255, 255, 0.34)
|
||||
|
||||
a
|
||||
color: #FFF
|
||||
|
||||
.row.fix
|
||||
display: flex
|
||||
flex-wrap: wrap
|
||||
width: 100%
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
// Place all the styles related to the charges controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
||||
@@ -0,0 +1,17 @@
|
||||
.progress
|
||||
.progress-bar-default
|
||||
background-color: #f5f5f5
|
||||
color: green
|
||||
font-size: 1.2em
|
||||
|
||||
.progress-target
|
||||
border-right: 2px solid black
|
||||
text-align: right
|
||||
padding: 1em
|
||||
display: inline-block
|
||||
|
||||
.donatebox
|
||||
font-size: 24px
|
||||
margin: 15px
|
||||
width: 80px
|
||||
height: 80px
|
||||
@@ -0,0 +1,11 @@
|
||||
// Place all the styles related to the Greendays controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
||||
|
||||
.well > h2
|
||||
margin-top: 0px
|
||||
|
||||
#map
|
||||
width: 100%
|
||||
height: 300px
|
||||
margin-bottom: 12px
|
||||
@@ -0,0 +1,34 @@
|
||||
@import "variables"
|
||||
|
||||
nav#mainnav
|
||||
marign-top: 12px
|
||||
font-size: 16pt
|
||||
|
||||
a
|
||||
color: $brand-success
|
||||
|
||||
a.selected
|
||||
font-weight: bold
|
||||
|
||||
|
||||
ul
|
||||
list-style: none
|
||||
padding: 0px
|
||||
|
||||
li
|
||||
padding: 5px 5px 5px 10px
|
||||
|
||||
ul
|
||||
padding-left: 20px
|
||||
|
||||
li
|
||||
font-size: 12pt
|
||||
|
||||
li.selected
|
||||
background-color: $brand-success
|
||||
a
|
||||
color: white
|
||||
|
||||
#greendays
|
||||
margin-bottom: 12px
|
||||
border: 1px solid $brand-success
|
||||
@@ -0,0 +1,30 @@
|
||||
.field_with_errors {
|
||||
padding: 2px;
|
||||
background-color: red;
|
||||
display: table;
|
||||
}
|
||||
|
||||
#error_explanation {
|
||||
width: 450px;
|
||||
border: 2px solid red;
|
||||
padding: 7px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 20px;
|
||||
background-color: #f0f0f0;
|
||||
|
||||
h2 {
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
padding: 5px 5px 5px 15px;
|
||||
font-size: 12px;
|
||||
margin: -7px;
|
||||
margin-bottom: 0px;
|
||||
background-color: #c00;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
ul li {
|
||||
font-size: 12px;
|
||||
list-style: square;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
@import "variables"
|
||||
|
||||
.statement
|
||||
display: inline-table
|
||||
width: 45%
|
||||
margin: 5px
|
||||
|
||||
img
|
||||
margin-right: 14px
|
||||
float: left
|
||||
|
||||
h2
|
||||
font-size: $font-size-base
|
||||
margin: 0px
|
||||
display: inline
|
||||
|
||||
.read-more
|
||||
display: none
|
||||
|
||||
@media (max-width: 800px)
|
||||
.statement
|
||||
display: block
|
||||
width: 100%
|
||||
margin: 5px
|
||||
@@ -0,0 +1,10 @@
|
||||
$brand-success: #4b7d1c
|
||||
$navbar-default-bg: #FFF
|
||||
$navbar-default-border: none
|
||||
$font-size-base: 14px
|
||||
$navbar-padding-horizontal: none
|
||||
$navbar-default-link-color: #66903F
|
||||
$navbar-default-link-active-bg: #FFF
|
||||
$font-size-h1: floor($font-size-base * 1.8)
|
||||
$font-size-h2: floor($font-size-base * 1.5)
|
||||
$font-size-h3: floor($font-size-base * 1.2)
|
||||
@@ -1,5 +1,15 @@
|
||||
module Admin
|
||||
class ApplicationController < ::ApplicationController
|
||||
http_basic_authenticate_with name: 'admin', password: ENV['ADMIN_PASSWORD'] unless Rails.env.development?
|
||||
before_action :authenticate_supporter!
|
||||
before_action :authenticate_admin!
|
||||
|
||||
def authenticate_admin!
|
||||
return true if current_supporter.admin?
|
||||
head(:forbidden)
|
||||
end
|
||||
|
||||
def admin_area
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
module Admin
|
||||
class PublicitiesController < Admin::ApplicationController
|
||||
def index
|
||||
@pending = Supporter.where('publicity.state' => :pending).asc(:created_at)
|
||||
@active = Supporter.where('publicity.state' => :approved).asc(:created_at)
|
||||
end
|
||||
|
||||
def edit
|
||||
@publicity = Supporter.find(params[:id]).publicity
|
||||
end
|
||||
|
||||
def update
|
||||
@publicity = Supporter.find(params[:id]).publicity
|
||||
return redirect_to(admin_publicities_path) if @publicity.update_attributes(publicity_params)
|
||||
render :edit
|
||||
end
|
||||
|
||||
def destroy
|
||||
current_supporter.publicity&.destroy
|
||||
redirect_to(admin_publicities_path)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def publicity_params
|
||||
params.require(:publicity).permit(:organisation, :statement, :avatar, :state)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -29,9 +29,18 @@ class ApplicationController < ActionController::Base
|
||||
options.merge locale: I18n.locale
|
||||
end
|
||||
|
||||
def admin_area
|
||||
false
|
||||
end
|
||||
|
||||
def only_admin
|
||||
return true if current_supporter && current_supporter.admin?
|
||||
raise ActionController::RoutingError, 'Not Found'
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def configure_permitted_parameters
|
||||
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :street, :city, :zip, :support, :language, :age_category, :unsubscribed])
|
||||
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :street, :city, :zip, :support, :language, :age_category])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
class ChargesController < ApplicationController
|
||||
def new; end
|
||||
|
||||
def create
|
||||
@amount = params[:amount]
|
||||
|
||||
begin
|
||||
@amount = Float(@amount).round(2)
|
||||
rescue
|
||||
flash[:error] = 'Bitte geben sie einen Betrag in CHF ein.'
|
||||
redirect_to donation_path
|
||||
return
|
||||
end
|
||||
|
||||
@amount = (@amount * 100).to_i # Must be an integer!
|
||||
|
||||
if @amount < 500
|
||||
flash[:error] = 'Ihre Spende muss mindestens 5.- CHF betragen.'
|
||||
redirect_to donation_path
|
||||
return
|
||||
end
|
||||
|
||||
Stripe::Charge.create(amount: @amount, currency: 'CHF', source: params[:stripeToken], description: 'Initiativspende')
|
||||
|
||||
rescue Stripe::CardError => e
|
||||
flash[:error] = e.message
|
||||
redirect_to donation_path
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,60 @@
|
||||
class GreendaysController < ApplicationController
|
||||
before_action :only_admin, except: [:index, :show]
|
||||
before_action :set_greenday, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
@greendays = Greenday.all.sort(title: 1)
|
||||
end
|
||||
|
||||
def new
|
||||
@greenday = Greenday.new
|
||||
end
|
||||
|
||||
def edit; end
|
||||
|
||||
def create
|
||||
@greenday = Greenday.new(greenday_params)
|
||||
|
||||
respond_to do |format|
|
||||
if @greenday.save
|
||||
format.html { redirect_to greendays_path, success: 'Greenday was successfully created.' }
|
||||
format.json { render :show, status: :created, location: @greenday }
|
||||
else
|
||||
format.html { render :new }
|
||||
format.json { render json: @greenday.errors, status: :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
respond_to do |format|
|
||||
if @greenday.update(greenday_params)
|
||||
format.html { redirect_to greendays_path, notice: 'Greenday was successfully updated.' }
|
||||
format.json { render :show, status: :ok, location: @greenday }
|
||||
else
|
||||
format.html { render :edit }
|
||||
format.json { render json: @greenday.errors, status: :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@greenday.destroy
|
||||
respond_to do |format|
|
||||
format.html { redirect_to greendays_path, notice: 'Greenday was successfully destroyed.' }
|
||||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Use callbacks to share common setup or constraints between actions.
|
||||
def set_greenday
|
||||
@greenday = Greenday.find(params[:id])
|
||||
end
|
||||
|
||||
# Never trust parameters from the scary internet, only allow the white list through.
|
||||
def greenday_params
|
||||
params.require(:greenday).permit(:title, :address, :homepage, :description, :logo, :delete_logo)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,90 @@
|
||||
class Network::SignatureCollectionsController < ApplicationController
|
||||
before_action :only_admin, except: [:index, :show]
|
||||
before_action :set_network_signature_collection, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
# GET /network/signature_collections
|
||||
# GET /network/signature_collections.json
|
||||
def index
|
||||
@query, @location, @distance = params[:query], params[:location], params[:distance]
|
||||
|
||||
@network_signature_collections = Network::SignatureCollection.where(:event_date_start.gte => DateTime.now)
|
||||
|
||||
@network_signature_collections = @network_signature_collections.or(location_zip_s: /#{@query}/i) if @query
|
||||
@network_signature_collections = @network_signature_collections.or(location_name: /#{@query}/i) if @query
|
||||
@network_signature_collections = @network_signature_collections.or(location_address: /#{@query}/i) if @query
|
||||
|
||||
distance_from_location
|
||||
end
|
||||
|
||||
def distance_from_location
|
||||
return unless @location && @distance
|
||||
location_coordinates = Geocoder.coordinates(@location)
|
||||
return unless location_coordinates # only filter when coordinates found
|
||||
@network_signature_collections = @network_signature_collections.geo_near(location_coordinates.reverse).max_distance(@distance.to_f/111)
|
||||
end
|
||||
|
||||
# GET /network/signature_collections/1
|
||||
# GET /network/signature_collections/1.json
|
||||
def show
|
||||
end
|
||||
|
||||
# GET /network/signature_collections/new
|
||||
def new
|
||||
@network_signature_collection = Network::SignatureCollection.new
|
||||
end
|
||||
|
||||
# GET /network/signature_collections/1/edit
|
||||
def edit
|
||||
end
|
||||
|
||||
# POST /network/signature_collections
|
||||
# POST /network/signature_collections.json
|
||||
def create
|
||||
@network_signature_collection = Network::SignatureCollection.new(network_signature_collection_params)
|
||||
|
||||
respond_to do |format|
|
||||
if @network_signature_collection.save
|
||||
format.html { redirect_to @network_signature_collection, notice: 'Signature collection was successfully created.' }
|
||||
format.json { render :show, status: :created, location: @network_signature_collection }
|
||||
else
|
||||
format.html { render :new }
|
||||
format.json { render json: @network_signature_collection.errors, status: :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# PATCH/PUT /network/signature_collections/1
|
||||
# PATCH/PUT /network/signature_collections/1.json
|
||||
def update
|
||||
respond_to do |format|
|
||||
if @network_signature_collection.update(network_signature_collection_params)
|
||||
format.html { redirect_to @network_signature_collection, notice: 'Signature collection was successfully updated.' }
|
||||
format.json { render :show, status: :ok, location: @network_signature_collection }
|
||||
else
|
||||
format.html { render :edit }
|
||||
format.json { render json: @network_signature_collection.errors, status: :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# DELETE /network/signature_collections/1
|
||||
# DELETE /network/signature_collections/1.json
|
||||
def destroy
|
||||
@network_signature_collection.destroy
|
||||
respond_to do |format|
|
||||
format.html { redirect_to network_signature_collections_url, notice: 'Signature collection was successfully destroyed.' }
|
||||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
# Use callbacks to share common setup or constraints between actions.
|
||||
def set_network_signature_collection
|
||||
@network_signature_collection = Network::SignatureCollection.find(params[:id])
|
||||
end
|
||||
|
||||
# Never trust parameters from the scary internet, only allow the white list through.
|
||||
def network_signature_collection_params
|
||||
params.require(:network_signature_collection).permit(:location_name, :location_zip, :location_address, :event_date_start, :event_date_end)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,29 @@
|
||||
class PublicitiesController < ApplicationController
|
||||
before_action :authenticate_supporter!
|
||||
|
||||
def new
|
||||
@publicity = current_supporter.publicity || Publicity.new
|
||||
end
|
||||
|
||||
def create
|
||||
@publicity = Publicity.new(publicity_params.merge(supporter: current_supporter, state: :pending))
|
||||
flash['success'] = t('.success') if @publicity.valid?
|
||||
return redirect_to(root_path) if @publicity.save
|
||||
render :new
|
||||
end
|
||||
|
||||
def update
|
||||
create
|
||||
end
|
||||
|
||||
def destroy
|
||||
current_supporter.publicity&.destroy
|
||||
redirect_to(root_path)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def publicity_params
|
||||
params.require(:publicity).permit(:organisation, :statement, :avatar)
|
||||
end
|
||||
end
|
||||
@@ -10,7 +10,7 @@ class SupportersController < ApplicationController
|
||||
@supporter.password = random_password = SecureRandom.hex(5)
|
||||
if !input_to_fast? && @supporter.save
|
||||
SupporterMailer.welcome_email(@supporter, random_password).deliver_now
|
||||
mailchimp_registration
|
||||
sendy_registraion
|
||||
redirect_to thanks_path
|
||||
else
|
||||
flash.now[:danger] = input_to_fast? ? t('.timeout') : t('input_error')
|
||||
@@ -21,23 +21,14 @@ class SupportersController < ApplicationController
|
||||
private
|
||||
|
||||
def supporter_form_params
|
||||
params.require(:supporter).permit(:first_name, :last_name, :street, :zip, :email, :support, :li_membership, :age_category, :city, :comments)
|
||||
params.require(:supporter).permit(:first_name, :last_name, :street, :zip, :email, :support, :li_membership, :age_category, :city, :comments, :tel)
|
||||
end
|
||||
|
||||
def mailchimp_registration
|
||||
return unless Rails.env.production?
|
||||
mailchimp = Mailchimp::API.new(ENV['MAILCHIMP_API'])
|
||||
mailchimp.lists.subscribe(ENV['CH420_LIST_ID'], { 'email' => @supporter.email }, merge_vars, 'html', false)
|
||||
end
|
||||
|
||||
def merge_vars
|
||||
{ 'EMAIL' => @supporter.email,
|
||||
'FNAME' => @supporter.first_name,
|
||||
'LNAME' => @supporter.last_name,
|
||||
'SUPPORT' => @supporter.support,
|
||||
'MEMBERSHIP' => @supporter.li_membership.to_s,
|
||||
'AGE' => @supporter.age_category,
|
||||
'LANG' => @supporter.language,
|
||||
'ZIP' => @supporter.zip }
|
||||
# We use sendy for newsletters atm
|
||||
def sendy_registraion
|
||||
uri = URI('http://newsletter.cannabis-initiative.ch/subscribe')
|
||||
Net::HTTP.post_form(uri, list: ENV["SENDY_LIST_#{I18n.locale.upcase}"],
|
||||
email: @supporter.email,
|
||||
name: "#{@supporter.first_name} #{@supporter.last_name}")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,4 +3,13 @@ module ApplicationHelper
|
||||
content_for :title, strip_tags(page_title.to_s)
|
||||
page_title
|
||||
end
|
||||
|
||||
def markdown(content)
|
||||
@markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, space_after_headers: true)
|
||||
@markdown.render(content)
|
||||
end
|
||||
|
||||
def admin?
|
||||
current_supporter && current_supporter.admin?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
module ChargesHelper
|
||||
end
|
||||
@@ -0,0 +1,43 @@
|
||||
class Greenday
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Geocoder::Model::Mongoid
|
||||
include Mongoid::Paperclip
|
||||
|
||||
before_save :delete_logo?
|
||||
|
||||
has_mongoid_attached_file :logo,
|
||||
path: ':attachment/:id/:style.:extension',
|
||||
styles: {
|
||||
original: ['1920x1680>', :jpg],
|
||||
small: ['100x100#', :jpg],
|
||||
medium: ['250x250', :jpg],
|
||||
large: ['500x500>', :jpg]
|
||||
},
|
||||
convert_options: { all: '-background white -flatten +matte' }
|
||||
|
||||
field :title, type: String
|
||||
field :address, type: String
|
||||
field :homepage, type: String
|
||||
field :description, type: String
|
||||
field :coordinates, type: Array
|
||||
|
||||
geocoded_by :address
|
||||
after_validation :geocode # auto-fetch coordinates
|
||||
|
||||
validates :title, presence: true
|
||||
validates :address, presence: true
|
||||
validates_attachment_content_type :logo, content_type: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
|
||||
|
||||
def delete_logo
|
||||
@delete_logo ||= '0'
|
||||
end
|
||||
|
||||
attr_writer :delete_logo
|
||||
|
||||
private
|
||||
|
||||
def delete_logo?
|
||||
logo.clear if @delete_logo == '1'
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,30 @@
|
||||
class Network::SignatureCollection
|
||||
include Mongoid::Document
|
||||
include Geocoder::Model::Mongoid
|
||||
|
||||
field :location_name, type: String
|
||||
field :location_zip, type: Integer
|
||||
field :location_zip_s, type: String
|
||||
field :location_address, type: String
|
||||
field :event_date_start, type: Time
|
||||
field :event_date_end, type: Time
|
||||
field :coordinates, type: Array
|
||||
|
||||
geocoded_by :address
|
||||
before_save :update_location # auto-fetch coordinates
|
||||
before_save :stringify_zip # auto-fetch coordinates
|
||||
|
||||
def address
|
||||
"#{location_zip} #{location_name}, Switzerland"
|
||||
end
|
||||
|
||||
def update_location
|
||||
geocode
|
||||
end
|
||||
|
||||
def stringify_zip
|
||||
self.location_zip_s = self.location_zip.to_s
|
||||
end
|
||||
|
||||
index({coordinates: "2d"})
|
||||
end
|
||||
@@ -0,0 +1,26 @@
|
||||
class Publicity
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Paperclip
|
||||
|
||||
has_mongoid_attached_file :avatar,
|
||||
path: ':attachment/:id/:style.:extension',
|
||||
styles: {
|
||||
original: ['1920x1680>', :jpg],
|
||||
small: ['100x100#', :jpg],
|
||||
medium: ['250x250', :jpg],
|
||||
large: ['500x500>', :jpg]
|
||||
},
|
||||
convert_options: { all: '-background white -flatten +matte' }
|
||||
|
||||
embedded_in :supporter
|
||||
|
||||
field :state, type: String, default: 'pending' # Possible states: pending, approved
|
||||
field :organisation, type: String
|
||||
field :statement, type: String
|
||||
|
||||
validates :state, presence: true
|
||||
validates :avatar, presence: true
|
||||
validates :statement, presence: true
|
||||
validates_attachment_content_type :avatar, content_type: /\Aimage/
|
||||
end
|
||||
+10
-17
@@ -1,5 +1,11 @@
|
||||
class Supporter
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Paranoia
|
||||
include Geocoder::Model::Mongoid
|
||||
|
||||
COUNTER_START = 10_003
|
||||
|
||||
# Include default devise modules. Others available are:
|
||||
# :confirmable, :lockable, :timeoutable and :omniauthable
|
||||
devise :database_authenticatable, :registerable,
|
||||
@@ -8,6 +14,7 @@ class Supporter
|
||||
## Database authenticatable
|
||||
field :email, type: String, default: ''
|
||||
field :encrypted_password, type: String, default: ''
|
||||
field :admin, type: Boolean, default: false
|
||||
|
||||
## Recoverable
|
||||
field :reset_password_token, type: String
|
||||
@@ -23,22 +30,6 @@ class Supporter
|
||||
field :current_sign_in_ip, type: String
|
||||
field :last_sign_in_ip, type: String
|
||||
|
||||
## Confirmable
|
||||
# field :confirmation_token, type: String
|
||||
# field :confirmed_at, type: Time
|
||||
# field :confirmation_sent_at, type: Time
|
||||
# field :unconfirmed_email, type: String # Only if using reconfirmable
|
||||
|
||||
## Lockable
|
||||
# field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
||||
# field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
||||
# field :locked_at, type: Time
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Paranoia
|
||||
include Geocoder::Model::Mongoid
|
||||
|
||||
COUNTER_START = 10_003
|
||||
|
||||
geocoded_by :address
|
||||
after_validation :geocode # auto-fetch coordinates
|
||||
|
||||
@@ -53,8 +44,8 @@ class Supporter
|
||||
field :coordinates, type: Array
|
||||
field :comments, type: String
|
||||
field :language, type: String
|
||||
field :unsubscribed, type: Boolean, default: false
|
||||
field :duplicate, type: Boolean, default: false
|
||||
field :tel, type: String
|
||||
|
||||
validates :first_name, presence: true
|
||||
validates :last_name, presence: true
|
||||
@@ -66,6 +57,8 @@ class Supporter
|
||||
validates :age_category, presence: true
|
||||
validates :language, presence: true
|
||||
|
||||
embeds_one :publicity
|
||||
|
||||
def self.counter
|
||||
actual = count.to_i
|
||||
actual > COUNTER_START ? actual : COUNTER_START
|
||||
|
||||
@@ -10,7 +10,6 @@ css:
|
||||
#map
|
||||
|
||||
javascript:
|
||||
|
||||
function pinSymbol(color) {
|
||||
return {
|
||||
path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
|
||||
@@ -24,7 +23,7 @@ javascript:
|
||||
|
||||
function initMap() {
|
||||
var supporters = #{@supporters.to_json.html_safe}
|
||||
|
||||
console.log(@supporters.to_json.html_safe);
|
||||
var customMapType = new google.maps.StyledMapType([{"featureType":"water","elementType":"geometry","stylers":[{"color":"#e9e9e9"},{"lightness":17}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"color":"#f5f5f5"},{"lightness":20}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#ffffff"},{"lightness":17}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"color":"#ffffff"},{"lightness":29},{"weight":0.2}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#ffffff"},{"lightness":18}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#ffffff"},{"lightness":16}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#f5f5f5"},{"lightness":21}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"color":"#dedede"},{"lightness":21}]},{"elementType":"labels.text.stroke","stylers":[{"visibility":"on"},{"color":"#ffffff"},{"lightness":16}]},{"elementType":"labels.text.fill","stylers":[{"saturation":36},{"color":"#333333"},{"lightness":40}]},{"elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"geometry","stylers":[{"color":"#f2f2f2"},{"lightness":19}]},{"featureType":"administrative","elementType":"geometry.fill","stylers":[{"color":"#fefefe"},{"lightness":20}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"color":"#fefefe"},{"lightness":17},{"weight":1.2}]}], {
|
||||
name: 'Black White'
|
||||
});
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
h1= title "#{t('.title')} #{@publicity.supporter.first_name} #{@publicity.supporter.last_name}, #{@publicity.supporter.city}"
|
||||
= simple_form_for(@publicity, url: admin_publicity_path(@publicity.supporter)) do |form|
|
||||
.form-group
|
||||
= "#{@publicity.supporter.first_name} #{@publicity.supporter.last_name}, #{@publicity.supporter.city}"
|
||||
|
||||
= form.input :organisation, required: false
|
||||
= form.input :statement, as: :text, required: false
|
||||
= form.input :avatar, as: :file, required: false
|
||||
- if @publicity.avatar
|
||||
.form-group
|
||||
= image_tag(@publicity.avatar.url(:medium))
|
||||
= form.input :state, as: :radio_buttons, collection: t('publicity_states').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first, required: false
|
||||
= form.submit t('shared.save'), class: 'btn btn-primary'
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
= render 'form'
|
||||
@@ -0,0 +1,19 @@
|
||||
h1 = title t('.title')
|
||||
table.table
|
||||
tbody
|
||||
- @pending.each do | supporter |
|
||||
tr
|
||||
td
|
||||
= "#{supporter.first_name} #{supporter.last_name}"
|
||||
br
|
||||
= supporter.city
|
||||
br
|
||||
= mail_to supporter.email, supporter.email
|
||||
br
|
||||
= supporter.publicity.organisation
|
||||
td width="50%" = supporter.publicity.statement
|
||||
td = image_tag(supporter.publicity.avatar.url(:small))
|
||||
td = link_to t('shared.edit'), edit_admin_publicity_path(supporter)
|
||||
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@ h2 Ziele der Initiative
|
||||
ol
|
||||
li Erwachsene haben genauso die Freiheit und das Recht Cannabis zu konsumieren, wie Alkohol oder Tabak.
|
||||
li Niemand muss gezwungen sein, sich auf dem Schwarzmarkt zu bedienen.
|
||||
li Steuereinnahmen und Einsparungen aus der Strafverfolgung sollen der Prävention, der Forschung oder den Sozialversicherungen zugutekommen.
|
||||
li Steuereinnahmen und Einsparungen aus der Strafverfolgung sollen der Prävention, der Suchtbehandlung, der Forschung oder den Sozialversicherungen zugutekommen.
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
.donation_button
|
||||
=link_to t('donation'), donation_path
|
||||
@@ -0,0 +1,3 @@
|
||||
h1 = title 'Vielen Dank für Ihre Spende'
|
||||
p Auch dank Ihrer Hilfe können wir uns aktiv für die Interessen der Cannabis-Konsumenten einsetzen.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
b Am Samstag 25. November ist Nationaler CBD-Tag!
|
||||
p Um die #{link_to 'Finanzierung der Sammlung und Beglaubigung', donation_path} der eidgenössischen #{link_to 'Volksinitiative zur Cannabislegalisierung', initiative_text_path} in der Schweiz voranzutreiben, lanciert der Verein Legalize it! in Zusammenarbeit mit dem #{link_to 'Branchenverband IG Hanf', 'https://www.ighanf.ch/D_about.html', target: '_blank'} am Samstag 25. November 2017 den ersten nationalen CBD-Tag.
|
||||
p In jedem Laden steht eine Spendenbox, welche für Spenden für die Initiative benutzt werden kann und die dem Verein Legalize it! zugute kommt.
|
||||
p Welche Läden mitmachen, seht ihr auf der Karte:
|
||||
@@ -0,0 +1,14 @@
|
||||
= simple_form_for(@greenday) do |f|
|
||||
= f.error_notification
|
||||
|
||||
.form-inputs
|
||||
= f.input :title
|
||||
= f.input :address, as: :text
|
||||
= f.input :homepage
|
||||
= f.input :description, as: :text
|
||||
= f.input :logo, as: :file, required: false
|
||||
= image_tag f.object.logo.url(:original), alt: '', class: 'img-responsive'
|
||||
= f.input :delete_logo, as: :boolean
|
||||
|
||||
.form-actions
|
||||
= f.button :submit, 'Shop speichern'
|
||||
@@ -0,0 +1,2 @@
|
||||
json.extract! greenday, :id, :title, :address, :coordinates, :homepage, :logo, :description, :created_at, :updated_at
|
||||
json.url greenday_url(greenday, format: :json)
|
||||
@@ -0,0 +1,8 @@
|
||||
h1 Editing greenday
|
||||
|
||||
== render 'form'
|
||||
|
||||
= link_to 'Show', @greenday
|
||||
' |
|
||||
= link_to 'Back', greendays_path
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
|
||||
h1.sr-only = title '#Greensaturday'
|
||||
= render 'description'
|
||||
#map
|
||||
= link_to 'Neuen Shop erfassen', new_greenday_path if admin?
|
||||
|
||||
.row.fix
|
||||
- @greendays.each do |greenday|
|
||||
.col-xs-12.col-sm-6.col-lg-4
|
||||
.well
|
||||
h2 = greenday.title
|
||||
- if greenday.logo.url(:original) != '/logos/original/missing.png'
|
||||
= image_tag greenday.logo.url(:original), alt: '', class: 'img-responsive'
|
||||
address = simple_format(greenday.address)
|
||||
- if greenday.homepage
|
||||
= link_to("Website", greenday.homepage, target: "_blank")
|
||||
p = markdown(greenday.description).html_safe
|
||||
|
||||
- if admin?
|
||||
= link_to 'Bearbeiten', edit_greenday_path(greenday)
|
||||
|
|
||||
= link_to 'Löschen', greenday, data: { confirm: 'Are you sure?' }, method: :delete
|
||||
|
||||
javascript:
|
||||
function initMap() {
|
||||
|
||||
var map = new google.maps.Map(document.getElementById('map'), {
|
||||
zoom: 8, center: {lat: 47.242, lng: 8.133},
|
||||
});
|
||||
|
||||
var greendays_url = "#{greendays_url(format: :json)}"
|
||||
|
||||
var infowindow = new google.maps.InfoWindow({
|
||||
content: '',
|
||||
maxWidth: 200
|
||||
});
|
||||
|
||||
|
||||
$.getJSON(greendays_url, function(json) {
|
||||
$.each(json, function(key, data) {
|
||||
var marker = new google.maps.Marker({
|
||||
position: {lat: data.coordinates[1], lng: data.coordinates[0] },
|
||||
map: map,
|
||||
title: data.title
|
||||
});
|
||||
|
||||
marker.addListener('click', function() {
|
||||
infowindow.open(map, marker);
|
||||
|
||||
var content = '<b>' + data.title + '</b>'
|
||||
if(data.logo) {
|
||||
content += '<img src="' + data.logo + ' alt="" width="100%"/>'
|
||||
}
|
||||
content += '<address>' + data.address.replace(/\n/g,"<br>")
|
||||
if(data.homepage) {
|
||||
content += '<br/><a href="' + data.homepage + '" target="_blank">Website</a>'
|
||||
}
|
||||
content += '</address>'
|
||||
|
||||
if(data.description) {
|
||||
content += '<p>' + data.description + '</p>'
|
||||
}
|
||||
infowindow.setContent(content);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
script async="" defer="" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBbwMtGKDqf4i8x9-OVP1-H_QVAKp92h2M&callback=initMap&libraries=visualization"
|
||||
@@ -0,0 +1 @@
|
||||
json.array! @greendays, partial: 'greendays/greenday', as: :greenday
|
||||
@@ -0,0 +1,5 @@
|
||||
h1 New greenday
|
||||
|
||||
== render 'form'
|
||||
|
||||
= link_to 'Back', greendays_path
|
||||
@@ -22,11 +22,26 @@ html lang="#{I18n.locale}"
|
||||
link href="/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png" /
|
||||
link href="/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png" /
|
||||
link href="/manifest.json" rel="manifest" /
|
||||
|
||||
|
||||
meta name="viewport" content="width=device-width, initial-scale=1.0"
|
||||
|
||||
meta content="#ffffff" name="msapplication-TileColor" /
|
||||
meta content="/ms-icon-144x144.png" name="msapplication-TileImage" /
|
||||
meta content="#ffffff" name="theme-color" /
|
||||
|
||||
body
|
||||
meta property="og:title" content="#{content_for(:title)}"
|
||||
meta property="og:description" content="#{t('shared.description')}"
|
||||
meta property="og:image" content="#{image_url('ch420_logo.png')}"
|
||||
|
||||
meta name="twitter:title" content="#{content_for(:title)}"
|
||||
meta name="twitter:image" content="#{image_url('ch420_logo.png')}"
|
||||
meta name="twitter:site" content="@vereinlegalize"
|
||||
meta name="twitter:description" content="#{t('shared.description')}"
|
||||
meta name="twitter:image:alt" content="#{t('shared.header.logo')}"
|
||||
|
||||
body class="#{'admin' if controller.admin_area}"
|
||||
= render 'donation_button'
|
||||
javascript:
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
@@ -35,13 +50,30 @@ html lang="#{I18n.locale}"
|
||||
|
||||
ga('create', 'UA-79948850-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
|
||||
/ = console if Rails.env.development?
|
||||
.container
|
||||
.container.anouncement
|
||||
/.text-center.lead.alert.alert-success
|
||||
a href="https://wemakeit.com/projects/cannabislegalisierungs-crowd" class="text-success"
|
||||
= t('shared.crowdfunding')
|
||||
|
||||
nav.languages.pull-right
|
||||
h2.sr-only =t('shared.lang')
|
||||
a href='/' lang='de'
|
||||
| Deutsch
|
||||
| |
|
||||
a href='/it' lang='it'
|
||||
| Italiano
|
||||
| |
|
||||
a href='/fr' lang='fr'
|
||||
| Français
|
||||
|
||||
.container.content
|
||||
= render 'shared/flashes'
|
||||
= render 'shared/header'
|
||||
= render 'shared/topnavigation'
|
||||
= yield
|
||||
.row
|
||||
.col-xs-12.col-sm-3
|
||||
nav#mainnav = render_navigation
|
||||
.col-xs-12.col-sm-9
|
||||
main= yield
|
||||
hr
|
||||
footer.row
|
||||
.col-xs-12.col-sm-6
|
||||
@@ -50,4 +82,7 @@ html lang="#{I18n.locale}"
|
||||
= render 'contact'
|
||||
.col-xs-12.col-sm-2
|
||||
= render 'address'
|
||||
|
||||
|
||||
javascript:
|
||||
I18n.defaultLocale = "#{I18n.default_locale}";
|
||||
I18n.locale = "#{I18n.locale}";
|
||||
@@ -0,0 +1,12 @@
|
||||
= simple_form_for(@network_signature_collection) do |f|
|
||||
= f.error_notification
|
||||
|
||||
.form-inputs
|
||||
= f.input :location_name
|
||||
= f.input :location_zip, as: :numeric
|
||||
= f.input :location_address
|
||||
= f.input :event_date_start, as: :datetime
|
||||
= f.input :event_date_end, as: :datetime
|
||||
|
||||
.form-actions
|
||||
= f.button :submit, value: t('shared.save')
|
||||
@@ -0,0 +1,2 @@
|
||||
json.extract! network_signature_collection, :id, :location_name, :location_zip, :location_address, :event_date_start, :event_date_end, :created_at, :updated_at
|
||||
json.url network_signature_collection_url(network_signature_collection, format: :json)
|
||||
@@ -0,0 +1,8 @@
|
||||
h1 Editing network_signature_collection
|
||||
|
||||
== render 'form'
|
||||
|
||||
= link_to 'Show', @network_signature_collection
|
||||
' |
|
||||
= link_to 'Back', network_signature_collections_path
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
h1 = title t('.title')
|
||||
css:
|
||||
.form-inline > * {
|
||||
margin: 5px;
|
||||
}
|
||||
form
|
||||
.form-inline
|
||||
input.form-control placeholder="#{t('.search')}" name="query" value="#{@query}"
|
||||
input.form-control placeholder="#{t('.location')}" name="location" value="#{@location}"
|
||||
select.form-control name="distance"
|
||||
- [5, 10, 20, 50, 100, 150, 200].each do | d |
|
||||
- if d == @distance.to_i
|
||||
option value="#{d}" selected="selected" #{d} Km
|
||||
- else
|
||||
option value="#{d}" #{d} Km
|
||||
|
||||
input.btn.btn-primary type="submit" value="#{t('.search')}"
|
||||
|
||||
table.table
|
||||
thead
|
||||
tr
|
||||
th = Network::SignatureCollection.human_attribute_name :location_name
|
||||
th = Network::SignatureCollection.human_attribute_name :location_zip
|
||||
th = Network::SignatureCollection.human_attribute_name :location_address
|
||||
th = Network::SignatureCollection.human_attribute_name :event_date_start
|
||||
th = Network::SignatureCollection.human_attribute_name :event_date_end
|
||||
- if admin?
|
||||
th
|
||||
th
|
||||
th
|
||||
|
||||
tbody.list
|
||||
- @network_signature_collections.each do |network_signature_collection|
|
||||
tr
|
||||
td.location_name = network_signature_collection.location_name
|
||||
td.location_zip = network_signature_collection.location_zip
|
||||
td.location_address = network_signature_collection.location_address
|
||||
td.event_date_start = l network_signature_collection.event_date_start, format: :short
|
||||
td.event_date_end = l network_signature_collection.event_date_end, format: :short
|
||||
- if admin?
|
||||
td = link_to t('shared.show'), network_signature_collection
|
||||
td = link_to t('shared.edit'), edit_network_signature_collection_path(network_signature_collection)
|
||||
td = link_to t('shared.destroy'), network_signature_collection, data: { confirm: 'Are you sure?' }, method: :delete
|
||||
|
||||
br
|
||||
|
||||
= link_to t('.new'), new_network_signature_collection_path
|
||||
@@ -0,0 +1 @@
|
||||
json.array! @network_signature_collections, partial: 'network_signature_collections/network_signature_collection', as: :network_signature_collection
|
||||
@@ -0,0 +1,5 @@
|
||||
h1 New network_signature_collection
|
||||
|
||||
== render 'form'
|
||||
|
||||
= link_to 'Back', network_signature_collections_path
|
||||
@@ -0,0 +1,21 @@
|
||||
p#notice = notice
|
||||
|
||||
p
|
||||
strong = Network::SignatureCollection.human_attribute_name :location_name
|
||||
= @network_signature_collection.location_name
|
||||
p
|
||||
strong = Network::SignatureCollection.human_attribute_name :location_zip
|
||||
= @network_signature_collection.location_zip
|
||||
p
|
||||
strong = Network::SignatureCollection.human_attribute_name :location_address
|
||||
= @network_signature_collection.location_address
|
||||
p
|
||||
strong = Network::SignatureCollection.human_attribute_name :event_date_start
|
||||
= @network_signature_collection.event_date_start
|
||||
p
|
||||
strong = Network::SignatureCollection.human_attribute_name :event_date_end
|
||||
= @network_signature_collection.event_date_end
|
||||
|
||||
= link_to 'Edit', edit_network_signature_collection_path(@network_signature_collection)
|
||||
' |
|
||||
= link_to 'Back', network_signature_collections_path
|
||||
@@ -0,0 +1 @@
|
||||
json.partial! "network_signature_collections/network_signature_collection", network_signature_collection: @network_signature_collection
|
||||
@@ -0,0 +1,101 @@
|
||||
h1 = title 'Wie macht man eine Volksinitiative?'
|
||||
|
||||
p TL;DR: Wenn wir 100'000 CHF erreichen, versuchen wir Methode C, wenn wir 250'000 CHF erreichen, Methode B und wenn wir 500'000 oder mehr erreichen, Methode A. Wenn wir weniger als 100'000 erreichen, können wir keine Initiative machen. <a href="#{donation_path}">Über Spenden, die wir hier entgegen nehmen</a>, würden wir uns sehr freuen!
|
||||
|
||||
h2 Einleitung
|
||||
p Im April haben wir unseren Initiativtext bei der Bundeskanzlei eingereicht. Jedoch steht die Initiative noch auf der Kippe, denn: Uns fehlen bestimmte Ressourcen für die Sammlung und Beglaubigung der Initiative.
|
||||
h2 Was wir unter Ressourcen verstehen
|
||||
p Die Ressourcen jedes Projekts unterteilen wir in vier Kategorien: Arbeit, Zeit, Personen und Kapital. Ein kleines Beispiel zur Veranschaulichung:
|
||||
p Anna und Bea wollen in einem Tag eine Holzbox bauen. Dafür sitzen die beiden erst zwei Stunden zusammen und planen. Danach läuft Anna innerhalb einer Stunde in den Baumarkt, kauft sechs Bretter à je 5 CHF, einen Hammer à 30 CHF und vier Nägel à 2 CHF und läuft zurück. Bea baut danach innerhalb von zwei Stunden die Holzbox.
|
||||
ul
|
||||
li Personen: 2 (Anna und Bea)
|
||||
li Kapital: 6 Bretter x 5 CHF + 1 Hammer à 30 CHF + 4 Nägel à 2 CHF = 68 CHF
|
||||
li Arbeit: Fahrt Baumarkt Anna (1h) + Bau Holzbox Bea (2h) = 3h
|
||||
li Zeit: Arbeit (3h) + Zweistündige Sitzung à 2 Personen (4h) = 7h
|
||||
p Das Projekt benötigt also 2 Personen, dauert 7 Stunden (wobei 3 Stunden davon die eigentliche Arbeit darstellt) und kostet 68 CHF. Soweit mal unsere simple Methode der Planung.
|
||||
|
||||
|
||||
h2 Die Frage ist jetzt natürlich: Wie viel benötigt die Sammlung und Beglaubigung einer Volksinitiative an...
|
||||
h3 ...Arbeit?
|
||||
p Wenn wir von durchschnittlich 10 Unterschriften, die pro Stunde gesammelt werden, ausgehen (mehr dazu unten im Text), wäre die Anzahl Arbeitsstunden für die Sammlung = ca 10'000h
|
||||
p Bezüglich Beglaubigung haben wir uns Referenzzahlen eingeholt von anderen Kampagnen und rechnen mit Arbeitsstunden von ca. 2'000h.
|
||||
p Wir rechnen also damit, dass insgesamt mindestens 10'000h + 2'000h = 12'000 Arbeit geleistet werden muss, nur für die Sammlung und Beglaubigung einer Volksinitiative.
|
||||
h3 ...Zeit?
|
||||
p Nach vielen Gesprächen mit Personen anderer Initiativen haben wir als Richtwert für die Anzahl Zeitstunden im Vergleich zu den Anzahl Arbeitsstunden den Faktor 2 definiert. Also jede Stunde Arbeit an der Initiative erfordert eine zusätzliche Stunde, die in die Vorplanung geht.
|
||||
ul
|
||||
li Zeit Sammlung: 10'000h
|
||||
li Zeit Beglaubigung: 2'000h.
|
||||
p Wir rechnen also mit zusätzlichen 10'000h + 2'000h = 12'000 Zeitstunden neben den 12'000 Arbeitsstunden, nur für die Sammlung und Beglaubigung einer Volksinitiative.
|
||||
h3 ...Personen?
|
||||
p Grundsätzlich gibt es drei Kategorien:
|
||||
ol
|
||||
li Bezahlte Personen, die ein Arbeitspensum haben.
|
||||
li Aktive Personen, die 7 oder mehr Stunden pro Woche aufwenden können. Und zwar jede Woche über einen Zeitraum von 18 Monaten.
|
||||
li Pikett Personen, die man punktuell für kurze Arbeiten (< 5 Stunden), wie zum Beispiel das Helfen bei einer Sammlung, anfragen kann.
|
||||
p Wie viele Personen man von jeder Kategorie benötigt, wird weiter unten erläutert.
|
||||
h3 ...Geld?
|
||||
p Die wahrscheinliche wichtigste Komponente, wie immer im Leben, ist die Frage des Geldes: Wie viel Geld benötigt man für die Sammlung und Beglaubigung einer Volksinitiative?
|
||||
|
||||
p Wir stellen drei Varianten vor:
|
||||
.well
|
||||
b Variante A - Die 500'000 CHF-Variante
|
||||
br
|
||||
em Geschätzte Erfolgschance: 90 Prozent
|
||||
|
||||
ul
|
||||
li Bezahlte Personen: 2
|
||||
li Aktive Personen > 7h/Woche : Keine
|
||||
li Pikett Personen < 5h: Keine
|
||||
li Lohnkosten: 2 Personen à 100 Prozent à 5'000 CHF / Monat über 18 Monate = 180'000 CHF
|
||||
li Bezahlte Sammler: 2 CHF pro Unterschrift à 110'000 Unterschriften = 220'000 CHF.
|
||||
li Beglaubigungskosten: 100'000 CHF (Externes Büro)
|
||||
li Reserven: Keine
|
||||
|
||||
p <strong>Schlussrechnung</strong>: Lohnkosten (180'000 CHF) + Sammelkosten (220'000 CHF) + Beglaubigungskosten (100'000 CHF) = <strong>500'000 CHF.</strong>
|
||||
hr
|
||||
b Variante B - Die 250'000 CHF-Variante
|
||||
br
|
||||
em Geschätzte Erfolgschance: 50 Prozent
|
||||
|
||||
ul
|
||||
li Bezahlte Personen: 2
|
||||
li Aktive Personen >7h / Woche: 10
|
||||
li Pikett Personen < 5h: ca. 50
|
||||
li Lohnkosten: 2 Personen à 100 Prozent à 5'000 CHF / Monat über 18 Monate = 180'000 CHF
|
||||
li Sammelkosten: 60'000 CHF (Porto, Werbung, Sammeltage)
|
||||
li Beglaubigungskosten: 0 (alles von Aktivisten gemacht)
|
||||
li Reserven: 10'000 CHF
|
||||
|
||||
p <strong>Schlussrechnung</strong>: Lohnkosten (180'000 CHF) + Sammelkosten (60'000 CHF) + Reserven (10'000 CHF) = <strong>250'000 CHF.</strong>
|
||||
p Das Problem bei dieser Variante ist, dass einerseits 250'000 CHF auftreiben sehr schwer ist, noch schwieriger ist aber, 10 Personen zu finden, die über einen 18monativen Zeitraum > 7 Stunden ehrenamtlich pro Woche helfen.
|
||||
hr
|
||||
b Variante C - Die 100'000 CHF-Variante
|
||||
br
|
||||
em Geschätzte Erfolgschance: 25 Prozent
|
||||
|
||||
ul
|
||||
li Bezahlte Personen: 2
|
||||
li Aktive Personen >7h / Woche: (400 à 2 Wochen)
|
||||
li Pikett Personen: ca. 2'000 (à 1 Tag)
|
||||
li Lohnkosten: 84'000 CHF
|
||||
li Sammelkosten: 6'000 CHF
|
||||
li Beglaubigungskosten: 0 (alles von Aktivisten gemacht)
|
||||
li Reserven: 10'000 CHF
|
||||
|
||||
p <strong>Schlussrechnung</strong>: Lohnkosten (84'000 CHF) + Sammelkosten (6'000 CHF) = <strong>100'000 CHF.</strong>
|
||||
p Wir werden das Konzept zu dieser Variante, das sehr bald hier erscheinen wird, noch ganz konkret im Detail beschreiben. In diesem <a href="http://www.tagesanzeiger.ch/zuerich/region/kiffer-wollen-temporekord-im-unterschriftensammeln/story/25552535">TA-Artikel</a> findet ihr aber einen kleinen Vorgeschmack, in welche Richtung wir denken.
|
||||
|
||||
h2 Drei Varianten - Welche wird es?
|
||||
p Welche Variante es wird, hängt also vor allem davon ab, wie viel Geld bis Ende Jahr eingespielt wird. Wir nehmen den 31.12.2017 als Stichdatum, weil wir denken, dass ein halbes Jahr eine sinnvolle Referenzgrösse ist um zu schauen, wie die Situation ausschaut. Welche Variante es wird, hängt also einfach von den Einnahmen zusammen: Um die 100'000 CHF = Variante C, um die 250'000 CHF = Variante B und 500'000 oder mehr = Variante A. Sollten wir weniger als 100'000 CHF einspielen, dann werden wir wohl den Initiativtext zurückziehen, denn einen gewissen Geldbetrag brauchen wir einfach, um eine Initiative durchzuziehen.
|
||||
p Soweit mal die Aussichten. Wir sind positiv eingestellt und überzeugt, dass wir bis Ende Jahr eine gute Bilanz ziehen können. Wenn ihr uns unterstützen wollt, dann könnt ihr das hier tun. Auf die kommende Legalisierung!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
h1 = title 'Deine Spende zählt - Verein Legalize it!'
|
||||
|
||||
script src="https://checkout.stripe.com/checkout.js"
|
||||
javascript:
|
||||
var handler = StripeCheckout.configure({
|
||||
key: "#{Rails.configuration.stripe[:publishable_key]}",
|
||||
locale: '#{I18n.locale}',
|
||||
image: '#{image_url("ch420_logo.png")}',
|
||||
name: 'Verein Legalize it!',
|
||||
currency: 'CHF',
|
||||
description: 'Initiativspende',
|
||||
token: function(token) {
|
||||
$('input#stripeToken').val(token.id);
|
||||
$('form').submit();
|
||||
}
|
||||
});
|
||||
|
||||
h2 Spendenbarometer
|
||||
b Aktueller Stand: 73'000 CHF
|
||||
.row
|
||||
.col-xs-12
|
||||
.progress-target style="width: 20%"
|
||||
= link_to "Variante C:", collection_concept_path
|
||||
br
|
||||
| 100'000 CHF
|
||||
|
||||
.progress-target style="width: 30%"
|
||||
= link_to "Variante B:", collection_concept_path
|
||||
br
|
||||
| 250'000 CHF
|
||||
|
||||
.progress-target style="width: 48%"
|
||||
= link_to "Variante A:", collection_concept_path
|
||||
br
|
||||
| 500'000 CHF
|
||||
|
||||
.progress
|
||||
.progress-bar.progress-bar-success role="progressbar" aria-valuenow="73000" aria-valuemin="0" aria-valuemax="500000" style="width: 14.6%"
|
||||
|
||||
p Detailliertere Informationen, wie dieses Geld eingesetzt wird, findest du unter <a href="#{collection_concept_path}">«Wie macht man eine Volksinitiative?»</a>
|
||||
|
||||
h2 Via Kreditkarte online spenden
|
||||
= form_tag charges_path do
|
||||
= hidden_field_tag(:stripeToken)
|
||||
- if flash[:error].present?
|
||||
#error_explanation.text-danger
|
||||
= flash[:error]
|
||||
.row
|
||||
.col-xs12.col-md-5
|
||||
button.donatebox.btn.btn-success onclick="donate(20)" 20 .-
|
||||
button.donatebox.btn.btn-success onclick="donate(50)" 50 .-
|
||||
button.donatebox.btn.btn-success onclick="donate(100)" 100 .-
|
||||
button.donatebox.btn.btn-success onclick="donate(200)" 200 .-
|
||||
.col-xs12.col-md-6
|
||||
.form-group
|
||||
strong oder einen eigenen Betrag
|
||||
.form-group
|
||||
.input-group
|
||||
.input-group-addon CHF
|
||||
= text_field_tag(:amount, 50 , class: 'form-control')
|
||||
|
||||
.form-group
|
||||
button#donateButton.btn.btn-success Spenden übermitteln
|
||||
|
||||
|
||||
|
||||
h2 Mit Bitcoin und Bitcoin Cash spenden
|
||||
.row
|
||||
.col-md-6.col-xs-12
|
||||
p
|
||||
= image_tag '1LaYbTiCjhrUhxrQ9D5BQUfxPmRqJ7Q3gG.png', alt: 'Bitcoin Adresse: 1LaYbTiCjhrUhxrQ9D5BQUfxPmRqJ7Q3gG', width: '150', class: 'pull-right'
|
||||
div
|
||||
| Gerne nehmen wir auch Spenden via Bitcoin unter folgender Adresse entgegen:
|
||||
br
|
||||
strong 1LaYbTiCjhrUhxrQ9D5BQUfxPmRqJ7Q3gG
|
||||
.col-md-6.col-xs-12
|
||||
p
|
||||
= image_tag '1LVGcneFcYqCkhDFNsnhWb6x7cCHHxakg9.png', alt: 'Bitcoin Cash Adresse: 1LVGcneFcYqCkhDFNsnhWb6x7cCHHxakg9', width: '150', class: 'pull-right'
|
||||
div
|
||||
| Oder Bitcoin Cash unter folgender Adresse:
|
||||
br
|
||||
strong 1LVGcneFcYqCkhDFNsnhWb6x7cCHHxakg9
|
||||
.clearfix
|
||||
|
||||
h2 Per Überweisung spenden
|
||||
.row
|
||||
.col-md-7.col-xs-12
|
||||
dl.dl-horizontal
|
||||
dt Postkonto:
|
||||
dd 87-091354-3, Verein Legalize it!, Postfach 2159, 8031 Zürich
|
||||
dt IBAN:
|
||||
dd CH02 0900 0000 8709 1354 3
|
||||
dt Zahlungszweck:
|
||||
dd Spende Initiative
|
||||
.col-md-5.col-xs-12
|
||||
= link_to asset_path('Einzahlungsschein_Spende_Initiative.pdf') do
|
||||
= image_tag('Einzahlungsschein_Spende_Initiative.jpg', class:'img-responsive', alt: 'Einzahlungsschein Spende initiative')
|
||||
|
||||
|
||||
p
|
||||
b Wir würden uns freuen, wenn ihr das macht und uns finanziell unter die Arme greift.
|
||||
|
||||
p Danke, dein Verein Legalize it!
|
||||
|
||||
javascript:
|
||||
$('.donatebox').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
function donate(amount) {
|
||||
$('#amount').val(amount);
|
||||
$('#donateButton').click();
|
||||
}
|
||||
|
||||
$('#donateButton').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#error_explanation').html('');
|
||||
|
||||
var amount = $('input#amount').val();
|
||||
amount = parseFloat(amount);
|
||||
|
||||
if (isNaN(amount)) {
|
||||
$('#error_explanation').html('<p>Bitte geben sie einen Betrag in CHF ein.</p>');
|
||||
}
|
||||
else if (amount < 5.00) {
|
||||
$('#error_explanation').html('<p>Ihre Spende muss mindestens 5.- CHF betragen.</p>');
|
||||
}
|
||||
else {
|
||||
amount = amount * 100; // Needs to be an integer!
|
||||
handler.open({
|
||||
amount: Math.round(amount)
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -6,7 +6,7 @@
|
||||
ul
|
||||
li Erwachsene haben genauso die Freiheit und das Recht Cannabis zu konsumieren, wie Alkohol oder Tabak.
|
||||
li Niemand muss gezwungen sein, sich auf dem Schwarzmarkt zu bedienen.
|
||||
li Steuereinnahmen und Einsparungen aus der Strafverfolgung sollen der Prävention, der Forschung oder den Sozialversicherungen zugutekommen.
|
||||
li Steuereinnahmen und Einsparungen aus der Strafverfolgung sollen der Prävention, der Suchtbehandlung, der Forschung oder den Sozialversicherungen zugutekommen.
|
||||
|
||||
h2 Wem nützt die Initiative?
|
||||
p Jeder Schweizer Bürger profitiert von der Annahme der Initiative. Gelder, die über den Schwarzmarkt in internationale Terror-Organisationen fliessen, werden versteuert und Millionen von Steuergeldern in der Strafverfolgung eingespart. Zehntausende von Patienten profitieren von der Möglichkeit einer alternativen Behandlung mittels Cannabis. Hunderttausende Schweizer Bürger werden entkriminalisiert und in Freiheit Cannabis als Genussmittel konsumieren.
|
||||
@@ -59,7 +59,12 @@
|
||||
p Nein, man müsste sich in einem geschlossenen Raum befinden und Unmengen von Cannabis verbrennen, um eine Wirkung zu erzielen. Das Einatmen einer vorbeiziehenden süsslichen Rauchschwade hat absolut keine Wirkung.
|
||||
|
||||
h2 Verführt Cannabis zum Konsum anderer Drogen?
|
||||
p Nein, die sogenannte Einstiegsdrogen-Theorie gilt bei allen Experten als überholt. Im Gegenteil, die Trennung von sogenannten weichen und harten Drogen kann nur durch eine konsequente Legalisierung vollzogen werden. Wenn Personen, welche nicht mehr in Kontakt mit Dealern kommen, die auch noch harte Drogen verkaufen, greifen sie weniger zu anderen Drogen. Ein Modell, dass in Holland seit Jahrzehnten erfolgreich umgesetzt wird.
|
||||
p Nein, die sogenannte Einstiegsdrogen-Theorie gilt bei allen Experten als überholt. Im Gegenteil, die Trennung von sogenannten weichen und harten Drogen kann nur durch eine konsequente Legalisierung vollzogen werden. Personen kommen weniger in Kontakt mit anderen Drogen, wenn sie keinen Kontakt mit Dealern haben müssen. Ein Modell, dass in Holland seit Jahrzehnten erfolgreich umgesetzt wird.
|
||||
|
||||
h2 Führt Cannabis-Konsum zu Psychosen?
|
||||
p Das Risiko, durch das Rauchen von Cannabis eine psychische Erkrankung zu entwickeln, ist in Relation zur gesamten Zahl aller Cannabis-Konsumenten sehr gering und wissenschaftlich nicht bewiesen.
|
||||
p <a href="http://www.sciencedirect.com/science/article/pii/S0955395909001182" target="_blank">Studien, die sich mit dieser Thematik befassen, liefern lediglich Hinweise</a>. Die meisten Studien sind nicht oder quasi experimentell. Das heisst sie Untersuchen das Geschehene erst im Nachhinein. Die konsumierte Menge wird oft gar nicht erhoben oder kann nicht exakt bestimmt werden. Die Qualität und der Wirkstoffgehalt kann nicht überprüft werden, da auf dem Schwarzmarkt bezogenes Cannabis weder geprüft, noch deklariert ist. Es ist, als ob man ein Weizenbier mit gepanschtem Wodka vergleichen würde. Meist kann also nicht einmal aussgeschlossen werden ob nicht auch Verunreinigungen den Effekt erklären und zur Psychose führen könnte.
|
||||
p Wird die Ursache und Wirkung untersucht, muss die zeitliche Abfolge der Ereignisse berücksichtig werden. Es muss also die Erkrankung nach dem Konsum nachgewiesen sein. Psychische Erkrankungen beginnen oft schleichend und werden von den Betroffenen erst spät als solche wahrgenommen. Cannabis-Konsum, der zwischen Erkrankung und Diagnose beginnt, ist demnach nicht mehr Ursache, sondern Wirkung. Dieses Phänomen kann als eine unbewusste Selbstmedikation interpretiert werden. Bei vielen Studien wird, gerade diese Annahme der Kausalität schlicht nicht berücksichtigt – ein methodischer Mangel der Studie.
|
||||
|
||||
h2 Wie wird Cannabis hergestellt und gewonnen?
|
||||
p Cannabinoide, also die verschiedenen Wirkstoffe sind in der Cannabispflanze, insbesondere in der weiblichen Blüte vorhanden. Die Pflanze kann relativ einfach angepflanzt werden, danach können die getrockneten Blüten direkt konsumiert oder weiter verarbeitet werden. Im Prinzip reicht es ein Samen in einem Blumentopf zu setzen und regelmässig zu giessen.
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
sass:
|
||||
.initiative_text
|
||||
ol
|
||||
counter-reset: item
|
||||
list-style: none
|
||||
li
|
||||
counter-increment: item
|
||||
|
||||
li:before
|
||||
content: counter(item)
|
||||
vertical-align: super
|
||||
font-size: 0.8em
|
||||
display: inline-block
|
||||
|
||||
h1= title 'Der Initiativtext im Wortlaut'
|
||||
.well
|
||||
.well.initiative_text
|
||||
p Die Bundesverfassung vom 18. April 1999 wird wie folgt geändert:
|
||||
p Art. 105a (neu) Cannabis:
|
||||
ul
|
||||
li Der Konsum von Stoffen und Präparaten des Wirkungstyps Cannabis sowie die Vorbereitung zum eigenen Konsum sind straffrei. Der gemeinschaftliche Anbau von Cannabis für den Eigenbedarf ist ebenfalls straffrei.
|
||||
ol
|
||||
li Der Konsum von Stoffen und Präparaten des Wirkungstyps Cannabis sowie die Vorbereitung zum eigenen Konsum ist straffrei. Der Anbau von Pflanzen, welche die Herstellung von Stoffen und Präparaten dieses Wirkungstyps für den Eigenbedarf ermöglichen, ist ebenfalls straffrei.
|
||||
li Der Bund erlässt Vorschriften über den gewerblichen Anbau und die Herstellung sowie den Handel mit Stoffen und Präparaten des Wirkungstyps Cannabis.
|
||||
li Die Abgabe von Stoffen und Präparaten des Wirkungstyps Cannabis an Minderjährige ohne medizinische Indikation ist verboten.
|
||||
p Art. 131 Abs.1 Bst. f
|
||||
ul
|
||||
ol
|
||||
li
|
||||
| Der Bund kann besondere Verbrauchssteuern erheben auf
|
||||
| Der Bund kann besondere Verbrauchssteuern erheben auf:
|
||||
br
|
||||
| f. Stoffe und Präparate des Wirkungstyps Cannabis, welche nicht der medizinischen Anwendung dienen.
|
||||
| f. Stoffe und Präparate des Wirkungstyps Cannabis, welche nicht der medizinischen Anwendung dienen.
|
||||
p Feedback und konstruktive Kritik ist per E-Mail herzlich willkommen. Als Cannabis im Sinne dieses Artikels gelten alle Stadien der Hanfpflanze (inkl. Saatgut) und deren Produkte, unabhängig von ihrem Gehalt an Tetrahydrocannabinol (THC). Als „Vorbereitung“ gilt vor allem der Besitz, der Erwerb und der Anbau für den eigenen Konsum.
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
h1= title 'Il testo dell’iniziativa'
|
||||
.well
|
||||
p La Costituzione Federale del 18 aprile 1999 é stata modifata come segue
|
||||
p Art. 105a (nuovo) Cannabis:
|
||||
ul
|
||||
li Il consume di sostanze e preparati a base di cannabis, derivati o sostanze con effetto simile alla cannabis, e la preparazione per il proprio consumo non sono punibili. La coltivazione di cannabis per uso proprio non è punibile.
|
||||
li La Confederazione emana prescrizioni sulla coltivazione commerciale e la produzione e il commercio di sostanze e preparati del tipo di effetto di cannabis.
|
||||
li Il rilascio di sostanze e preparati a base di cannabis e di sostanze con effetto simile alla cannabis ai minori senza indicazione medica è vietata.
|
||||
|
||||
p Art. 131 Abs.1 Bst. f
|
||||
ul
|
||||
li
|
||||
| La Confederazione può riscuotere imposte speciali di consumo su
|
||||
br
|
||||
| f. cannabis o sostanze con effetto simile alla cannabis, che non necessitano l'applicazione medica.
|
||||
|
||||
p In questo articolo tutte le fasi della pianta della canapa (semi incl.) e applicare i loro prodotti, indipendentemente dal loro contenuto di tetraidrocannabinolo (THC). Come „preparazione“ è particolarmente vero per il possesso, l'acquisto e la coltivazione per il consumo personale.
|
||||
@@ -0,0 +1,18 @@
|
||||
h1 = title 'Netzwerk Legalisierung'
|
||||
|
||||
p Liebe Legalisierende
|
||||
p Du bist auf der offiziellen Webseite für die Volksinitiative zur Legalisierung von Cannabis in der Schweiz.
|
||||
p Das Netzwerk Legalisierung ist ein Versuch, eine Kampagne völlig neu zu organisieren. Konkret ermöglicht dir das Netzwerk, die Kampagne für die Legalisierung selbst zu gestalten und die Legalisierung dann auch mit den anderen im Netzwerk voranzutreiben. Das Netzwerk Legalisierung ist also ein grosses Werkzeug, aufgebaut aus vielen kleinen Werkzeugen.
|
||||
p Entstanden ist die Idee, weil der Verein Legalize it!, der die Initiative lanciert hat, kaum Ressourcen zur Verfügung stehen. Im Gegensatz zu Parteien und grossen Organisationen ist Legalize it! kein durchorganisierter politischer Verein mit tausenden Mitgliedern und einem immer-vollen Konto. Der Verein Legalize it! kann also die Initiative nicht alleine meistern.
|
||||
p Letztendlich bedeutet dies: Ob die Legalisierung durchkommt, hängt entscheidend von dir und allen anderen Mitwirkenden im Netzwerk ab. Legalisierung passiert nicht, sondern muss gemacht werden.
|
||||
p Wenig überraschend werden wir beim Verein dafür immer wieder gefragt, wie man sich für die Legalisierung konkret einsetzen kann. Denn Hunderttausende sind von der heutigen Bevormundungspolitik als Konsumierende direkt betroffen. Und sie alle wissen, dass sie direkt betroffen sind.
|
||||
p Um die Legalisierung voranzubringen, bracht es verschieden Vorgehensweisen. Darum sammeln wir all eure Aktionen auf dieser Plattform. Das Netzwerk Legalisierung ist daher so aufgebaut, dass alle Möglichkeiten, sich für die Legalisierung von Cannabis einzusetzen, auf einer Plattform gesammelt werden.
|
||||
p Ohne einen stramm-durchorganisierten Verein im Eiltempo hochzuziehen, wollen wir so als schlank-organisiertes und smart organisiertes Netzwerk gemeinsam die Legalisierung erreichen.
|
||||
h2 So funktioniert es
|
||||
p Das Netzwerk ist in drei Hauptkategorien und sieben Unterkategorien aufgeteilt. Schau dir die Seiten am besten von links nach rechts mal an, damit du einen Überblick bekommst.
|
||||
p Die erste Hauptkategorie beschäftigt sich mit dem, was nötig ist, damit die Initiative überhaupt zu Stande kommt. Es geht also um die Unterschriftensammlung und Finanzierung. Erreichen wir die Ziele in der ersten Kategorie nicht, ist es nicht möglich, diese Initiative durchzuführen.
|
||||
p In der zweiten Hauptkategorie in der Mitte werden die Grundlagen der Überzeugungs- und Kampagnenarbeit thematisiert. Das ist zum einen die Selbstbildung, zum anderen der Aufbau von Netzwerk-Cliquen.
|
||||
p In der dritten Hauptkategorie rechts geht es um die eigentliche Überzeugungs- und Kampagnenarbeit. Es geht um die Überzeugungsarbeit in deinem eignen Umfeld, halb-öffentliche und öffentliche Überzeugungsarbeit mittels Social Media und politischer Aktionen, sowie die Möglichkeiten das Netzwerk intern zu stärken. In der dritten Hauptkategorie geht es also um deine konkreten Möglichkeiten, die Kampagne selbst zu gestalten und zu organisieren, um die Leute gezielt zu überzeugen. Du findest in der dritten Hauptkategorie dazu einen einführenden Text, das Aktionen- und Veranstaltungstool, sowie Möglichkeiten zum Ideen-Austausch.
|
||||
p Damit du das Netzwerk nutzen kannst musst du dich lediglich hier registrieren:
|
||||
- @supporter = Supporter.new
|
||||
= render 'supporters/form'
|
||||
@@ -1,15 +1,15 @@
|
||||
article
|
||||
h1 = title t("Die Cannabis-Legalisierung in Zahlen: Der Staat wirft Geld aus dem Fenster und verpasst Millionen an Steuereinnahmen")
|
||||
h1 = title "Die Cannabis-Legalisierung in Zahlen: Der Staat wirft Geld aus dem Fenster und verpasst Millionen an Steuereinnahmen"
|
||||
h2 Cannabis-Konsum
|
||||
table.table.table-bordered.table-condensed.table-inherit
|
||||
caption Cannabis-Konsum im Jahr 2014 gemäss <a href="http://www.suchtmonitoring.ch/de/4/1-2.html?cannabis-pravalenz-gebrauch-in-der-gesamtbevolkerung" target="_blank">Suchtmonitoring</a>
|
||||
tbody
|
||||
tr
|
||||
td Gelegenheitskonsumenten (Konsum innerhalb von 12 Monaten)
|
||||
td Mindestens einmaliger Konsum innerhalb der letzten 12 Monaten
|
||||
td ca. 536’000
|
||||
td 6.7%
|
||||
tr
|
||||
td Regelmässige Konsumenten (Konsum innerhalb von 30 Tagen)
|
||||
td Mindestens einmaliger Konsum innerhalb der letzten 30 Tage
|
||||
td ca. 240’000
|
||||
td 3%
|
||||
tr
|
||||
@@ -19,7 +19,7 @@ article
|
||||
|
||||
h2 Strafverfolgung
|
||||
table.table.table-bordered.table-condensed.table-inherit
|
||||
caption Strafverfolgung im Jahr 2015 gemäss <a href="http://www.bfs.admin.ch/bfs/portal/de/index/themen/19/03/02/key/05/03.html" target="_blank">Bundesamt für Statistik</a>
|
||||
caption Strafverfolgung im Jahr 2015 gemäss <a href="https://www.bfs.admin.ch/bfs/de/home/statistiken/kriminalitaet-strafrecht/polizei/betaebungsmittelsubstanzen.html" target="_blank">Bundesamt für Statistik</a>
|
||||
tbody
|
||||
tr
|
||||
td Jährliche Kosten für die Strafverfolgung (gemäss <a href="http://cannabis-irrsinn.info/wp/" target="_blank">«Der Cannabis-Irrsinn»</a>)
|
||||
@@ -71,4 +71,4 @@ article
|
||||
a href="#prevalenz-ref" aria-label="Zurück zum Inhalt"↵
|
||||
li#preis
|
||||
| Der Verkaufspreis auf dem Schwarzmarkt liegt derzeit bei ca. 10 - 15 Fr. pro Gramm. Um den Schwarzmarkt wirksam zu bekämpfen, darf der Verkaufspreis inklusive Steuern nicht höher ausfallen, als der Preis auf dem Schwarzmarkt. Reine Produktionskosten liegen bei ca. 0.8 Fr. pro Gramm.
|
||||
a href="#preis-ref" aria-label="Zurück zum Inhalt"↵
|
||||
a href="#preis-ref" aria-label="Zurück zum Inhalt"↵
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
h1 = title 'Deine Spende zählt - Verein Legalize it!'
|
||||
p
|
||||
dl.dl-horizontal
|
||||
dt Postkonto:
|
||||
dd 87-091354-3, Verein Legalize it!, Postfach 2159, 8031 Zürich
|
||||
dt IBAN:
|
||||
dd CH02 0900 0000 8709 1354 3
|
||||
dt Zahlungszweck:
|
||||
dd Spende Initiative
|
||||
.row
|
||||
.col-xs-12.col-md-9
|
||||
= link_to asset_path('Einzahlungsschein_Spende_Initiative.pdf') do
|
||||
= image_tag('Einzahlungsschein_Spende_Initiative.jpg', class:'img-responsive pagelogo', alt: 'Einzahlungsschein Spende initiative')
|
||||
|
||||
h2 Warum kann ich nicht auch online oder per Kreditkarte spenden?
|
||||
p Wir haben mehrere Versuche unternommen, dies mittels verschiedener (zahlbaren) Payment-Service-Providern zu ermöglichen, sind jedoch immer wieder gescheitert. Die Gründe dafür sind vielfältig: Zum einen bieten viele solche Dienstleister ihren Service gar nicht für Vereine an, zum anderen ist das Schweizer Vereinsrecht relativ liberal. Ein zentrales Register für Vereine wie in anderen Ländern üblich, gibt es nicht. Einzig ein Handelsregistereintrag könnte ein wenig Klarheit schaffen. Dies ist jedoch zu kostspielig und würde momentan zu viel Zeit in Anspruch nehmen. Selbst wenn wir einen solchen hätten, wäre es nicht sicher, dass Dienste wie beispielsweise PayPal uns akzeptieren würden.
|
||||
p Eine andere schwierigere Hürde ist unser Umfeld. Wir haben, genau wie in Amerika, die Schwierigkeit, dass unser Themenbereich Cannabis ist. Da der Umgang mit Cannabis illegal ist, scheinen die Banken der Logik verfallen zu sein, dass alles was mit Cannabis zu tun hat, auch illegal sei, notabene auch das Ändern des illegalen Status. Viele Finanzdienstleister wie etwa Stripe.com lehnen daher jegliche Zusammenarbeit kategorisch ab.
|
||||
|
||||
p Somit bleibt nur zum guten alten Einzahlungsschein zu greifen beziehungsweise die richtigen Zahlenkombinationen beim E-Banking an den richtigen Stellen einzufügen.
|
||||
p
|
||||
b Wir würden uns freuen, wenn ihr das macht und uns finanziell unter die Arme greift.
|
||||
|
||||
p Danke, dein Verein Legalize it!
|
||||
|
||||
h3 Weitere Informationen zur Initiative findest du hier:
|
||||
ul
|
||||
li = link_to 'Initiativ-Seite', 'https://www.hanflegal.ch/initiative'
|
||||
li = link_to 'Onlineformular', root_path
|
||||
@@ -1,45 +1,17 @@
|
||||
h1 = t("Unsere Sponsoren")
|
||||
.row
|
||||
.col-xs-12.col-sm-6.col-md-3
|
||||
= image_tag 'dummy.png', alt: 'Platzhalter für Logo', class: 'img-responsive'
|
||||
.col-xs-12.col-sm-6.col-md-9
|
||||
h2 Ihr Firmenname
|
||||
p Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
.row
|
||||
.col-xs-12.col-sm-6.col-md-9
|
||||
h2 Ihr Firmenname
|
||||
p Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
.col-xs-12.col-sm-6.col-md-3
|
||||
= image_tag 'dummy.png', alt: 'Platzhalter für Logo', class: 'img-responsive'
|
||||
|
||||
.row
|
||||
.col-xs-12.col-sm-6.col-md-3
|
||||
= image_tag 'dummy.png', alt: 'Platzhalter für Logo', class: 'img-responsive'
|
||||
.col-xs-12.col-sm-6.col-md-9
|
||||
h2 Ihr Firmenname
|
||||
p Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
hr
|
||||
.row
|
||||
.col-xs-12.col-md-6
|
||||
h1 = title 'Deine Spende zählt - Verein Legalize it!'
|
||||
p
|
||||
dl.dl-horizontal
|
||||
dt Postkonto:
|
||||
dd 87-091354-3, Verein Legalize it!, Postfach 2159, 8031 Zürich
|
||||
dt IBAN:
|
||||
dd CH02 0900 0000 8709 1354 3
|
||||
dt Zahlungszweck:
|
||||
dd Spende Initiative
|
||||
h2 Warum kann ich nicht auch online oder per Kreditkarte spenden?
|
||||
p Wir haben mehrere Versuche unternommen, dies mittels verschiedener (zahlbaren) Payment-Service-Providern zu ermöglichen, sind jedoch immer wieder gescheitert. Die Gründe dafür sind vielfältig: Zum einen bieten viele solche Dienstleister ihren Service gar nicht für Vereine an, zum anderen ist das Schweizer Vereinsrecht relativ liberal. Ein zentrales Register für Vereine wie in anderen Ländern üblich, gibt es nicht. Einzig ein Handelsregistereintrag könnte ein wenig Klarheit schaffen. Dies ist jedoch zu kostspielig und würde momentan zu viel Zeit in Anspruch nehmen. Selbst wenn wir einen solchen hätten, wäre es nicht sicher, dass Dienste wie beispielsweise PayPal uns akzeptieren würden.
|
||||
p Eine andere schwierigere Hürde ist unser Umfeld. Wir haben, genau wie in Amerika, die Schwierigkeit, dass unser Themenbereich Cannabis ist. Da der Umgang mit Cannabis illegal ist, scheinen die Banken der Logik verfallen zu sein, dass alles was mit Cannabis zu tun hat, auch illegal sei, notabene auch das Ändern des illegalen Status. Viele Finanzdienstleister wie etwa Stripe.com lehnen daher jegliche Zusammenarbeit kategorisch ab.
|
||||
|
||||
p Somit bleibt nur zum guten alten Einzahlungsschein zu greifen beziehungsweise die richtigen Zahlenkombinationen beim E-Banking an den richtigen Stellen einzufügen.
|
||||
p
|
||||
b Wir würden uns freuen, wenn ihr das macht und uns finanziell unter die Arme greift.
|
||||
|
||||
p Danke, dein Verein Legalize it!
|
||||
.col-xs-12.col-md-6
|
||||
= link_to asset_path('Einzahlungsschein_Spende_Initiative.pdf') do
|
||||
= image_tag('Einzahlungsschein_Spende_Initiative.jpg', class:'img-responsive pagelogo', alt: 'Einzahlungsschein Spende initiative')
|
||||
|
||||
h1 = title "Unsere Sponsoren"
|
||||
.lead
|
||||
| Wir suchen tatkräftige Sponsoren, die uns bei der Sammlung der Unterschriften und im späteren Wahlkampf finanziell unterstützen. Im Gegenzug ermöglichen wir den Sponsoren, sich mit Logo, einem kleinen Text und Link zu präsentieren.
|
||||
h2 Beispiel...
|
||||
.well
|
||||
.row
|
||||
.col-xs-12.col-sm-6.col-md-3
|
||||
= image_tag 'dummy.png', alt: 'Platzhalter für Logo', class: 'img-responsive'
|
||||
.col-xs-12.col-sm-6.col-md-9
|
||||
h2 Ihr Firmenname
|
||||
p Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
.row
|
||||
.col-xs-12.col-sm-6.col-md-9
|
||||
h2 Ihr Firmenname
|
||||
p Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
.col-xs-12.col-sm-6.col-md-3
|
||||
= image_tag 'dummy.png', alt: 'Platzhalter für Logo', class: 'img-responsive'
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
- supporters = Supporter.where('publicity.state' => :approved).desc('publicity.created_at')
|
||||
h1 = title t('.title')
|
||||
- supporters.each do |supporter|
|
||||
.statement
|
||||
= image_tag supporter.publicity.avatar.url(:small), alt: "#{supporter.first_name} #{supporter.last_name}"
|
||||
h2= "#{supporter.first_name} #{supporter.last_name}, #{supporter.city}"
|
||||
- unless supporter.publicity.organisation.blank?
|
||||
em= ", #{supporter.publicity.organisation}"
|
||||
br
|
||||
article= supporter.publicity.statement
|
||||
hr.clearfix
|
||||
|
||||
.text-center = link_to t(".submit_your_own_statement"), new_publicity_path
|
||||
@@ -9,13 +9,13 @@ p
|
||||
|
||||
h2 Was kannst du machen?
|
||||
ul
|
||||
li = link_to 'Spende für die Legalisierung', donation_path
|
||||
li Versende den <a href="mailto:?subject=Es wird Zeit, Cannabis in der Schweiz legalisieren&body=Ich hab meine Unterstützung zugesichert unter https://ch420.herokuapp.com. Unterstütze uns auch du.">Link zum Online-Formular</a> an all deine Freunde und Bekannte
|
||||
li Folge uns auf <a href="https://www.facebook.com/vereinlegalizeit">Facebook</a> und <a href="https://twitter.com/VereinLegalize">Twitter</a>
|
||||
li Teile unser Projekt in den sozialen Medien mit dem Hashtag #CH420
|
||||
li Erzähle allen von unserem Vorhaben und bitte Sie mitzumachen
|
||||
li Werde Mitglied beim <a href="https://www.hanflegal.ch">Verein Legalize it!</a>
|
||||
li = link_to 'Spende für die Legalisierung', spenden_path
|
||||
li Besuche unser <a href="https://forum.hanflegal.ch">Forum</a>. Da findest du eine Jobbörse und spannende Projekte bei denen wir deine Hilfe brauchen können
|
||||
|
||||
|
||||
h2 Folge uns auf Facebook
|
||||
#fb-root
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
h1= title t('.title')
|
||||
= simple_form_for(@publicity, url: publicity_path) do |form|
|
||||
= form.input :organisation, required: false, label: t('.organisation'), placeholder: t('.organisation_placeholder')
|
||||
= form.input :statement, as: :text, required: false
|
||||
= form.input :avatar, as: :file, label: t('.avatar'), required: false
|
||||
= form.submit t('.save'), class: 'btn btn-primary'
|
||||
@@ -0,0 +1 @@
|
||||
= render 'form'
|
||||
@@ -2,19 +2,8 @@ header
|
||||
.row
|
||||
.col-md-1.col-xs-4
|
||||
= image_tag('ch420_logo.png', class:'img-responsive pagelogo', alt: t('.logo'))
|
||||
.col-md-8.col-xs-8
|
||||
.col-md-7.col-xs-8
|
||||
h1
|
||||
= t('.title_html')
|
||||
.col-xs-12.col-md-3
|
||||
nav.pull-right
|
||||
h2.sr-only =t('.lang')
|
||||
a href='/' lang='de'
|
||||
| Deutsch
|
||||
| |
|
||||
a href='/it' lang='it'
|
||||
| Italiano
|
||||
| |
|
||||
a href='/fr' lang='fr'
|
||||
| Français
|
||||
br/
|
||||
.col-xs-12.col-md-4.hidden-xs.hidden-sm
|
||||
= render 'shared/counter'
|
||||
@@ -1,13 +0,0 @@
|
||||
= navbar do
|
||||
= navbar_header
|
||||
= navbar_collapse do
|
||||
= navbar_group id: 'topnav' do
|
||||
= navbar_item "Home", "/#{I18n.locale}"
|
||||
= navbar_dropdown t('.initiative') do
|
||||
= navbar_item t('.initiative_text'), initiative_text_path
|
||||
= navbar_item t('.arguments'), arguments_path
|
||||
= navbar_item t('.faq'), faq_path
|
||||
= navbar_item t('.numbers'), numbers_path
|
||||
= navbar_item t('.sponsoring'), sponsoring_path
|
||||
= navbar_item t('.sign_in'), new_supporter_session_path unless supporter_signed_in?
|
||||
= navbar_item t('.sign_out'), destroy_supporter_session_path, nil, 'data-method' => :delete if supporter_signed_in?
|
||||
@@ -1,66 +1,61 @@
|
||||
- title(t('shared.header.title_html'))
|
||||
.row
|
||||
.col-xs-12.col-md-7
|
||||
h2.sr-only = t('.form')
|
||||
= simple_form_for @supporter do |f|
|
||||
= f.input :first_name, placeholder: t('.placeholders.first_name')
|
||||
= f.input :last_name, placeholder: t('.placeholders.last_name')
|
||||
= f.input :street, placeholder: t('.placeholders.street')
|
||||
= f.input :city, placeholder: t('.placeholders.city')
|
||||
= f.input :zip, placeholder: t('.placeholders.zip')
|
||||
= f.input :email, placeholder: t('.placeholders.email')
|
||||
= f.input :support, as: :radio_buttons, collection: t('support_type').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first
|
||||
= f.input :li_membership, as: :boolean
|
||||
= f.input :age_category, as: :radio_buttons, collection: t('age_category'), label_method: :last, value_method: :first
|
||||
= f.input :comments, as: :text
|
||||
.form-group
|
||||
= f.submit value: t('.submit'), class: 'btn btn-success'
|
||||
.form-group
|
||||
= link_to t('.terms_and_conditions'), terms_and_conditions_path, class: 'small'
|
||||
= simple_form_for @supporter do |f|
|
||||
= f.input :first_name, placeholder: t('.placeholders.first_name')
|
||||
= f.input :last_name, placeholder: t('.placeholders.last_name')
|
||||
= f.input :street, placeholder: t('.placeholders.street')
|
||||
= f.input :city, placeholder: t('.placeholders.city')
|
||||
= f.input :zip, placeholder: t('.placeholders.zip')
|
||||
= f.input :email, placeholder: t('.placeholders.email')
|
||||
= f.input :tel, placeholder: '+41 (0) xxxx'
|
||||
= f.input :support, as: :radio_buttons, collection: t('support_type').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first
|
||||
= f.input :li_membership, as: :boolean
|
||||
= f.input :age_category, as: :radio_buttons, collection: t('age_category'), label_method: :last, value_method: :first
|
||||
= f.input :comments, as: :text
|
||||
.form-group
|
||||
= f.submit value: t('.submit'), class: 'btn btn-success'
|
||||
.form-group
|
||||
= link_to t('.terms_and_conditions'), terms_and_conditions_path, class: 'small'
|
||||
|
||||
|
||||
javascript:
|
||||
var cities = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: '/cities_autocomplete.json?query=%QUERY',
|
||||
wildcard: '%QUERY',
|
||||
}
|
||||
});
|
||||
|
||||
var suggestion_template = function (data) {
|
||||
return '<p>' + data.plz + ' - ' + data.city + '</p>';
|
||||
javascript:
|
||||
var cities = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: '/cities_autocomplete.json?query=%QUERY',
|
||||
wildcard: '%QUERY',
|
||||
}
|
||||
});
|
||||
|
||||
var suggestion_template = function (data) {
|
||||
return '<p>' + data.plz + ' - ' + data.city + '</p>';
|
||||
}
|
||||
|
||||
$('#supporter_city').typeahead({
|
||||
minLength: 2,
|
||||
},{
|
||||
limit: 20,
|
||||
display: 'city',
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
return suggestion_template(data);
|
||||
}
|
||||
},
|
||||
source: cities
|
||||
}).on('typeahead:selected', function(event, datum) {
|
||||
$("#supporter_zip").val(datum.plz);
|
||||
});
|
||||
|
||||
$('#supporter_zip').typeahead({
|
||||
minLength: 2,
|
||||
},{
|
||||
limit: 20,
|
||||
display: 'plz',
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
return suggestion_template(data);
|
||||
}
|
||||
|
||||
$('#supporter_city').typeahead({
|
||||
minLength: 2,
|
||||
},{
|
||||
limit: 20,
|
||||
display: 'city',
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
return suggestion_template(data);
|
||||
}
|
||||
},
|
||||
source: cities
|
||||
}).on('typeahead:selected', function(event, datum) {
|
||||
$("#supporter_zip").val(datum.plz);
|
||||
});
|
||||
|
||||
$('#supporter_zip').typeahead({
|
||||
minLength: 2,
|
||||
},{
|
||||
limit: 20,
|
||||
display: 'plz',
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
return suggestion_template(data);
|
||||
}
|
||||
},
|
||||
source: cities
|
||||
}).on('typeahead:selected', function(event, datum) {
|
||||
$("#supporter_city").val(datum.city);
|
||||
});
|
||||
aside.col-md-5.col-xs-12
|
||||
= render 'right_side'
|
||||
},
|
||||
source: cities
|
||||
}).on('typeahead:selected', function(event, datum) {
|
||||
$("#supporter_city").val(datum.city);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
- if current_supporter.publicity
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
h2.panel-title
|
||||
= t '.title'
|
||||
.panel-body
|
||||
dl.dl-horizontal
|
||||
dt = Publicity.human_attribute_name(:status)
|
||||
dd= t("publicity_states.#{current_supporter.publicity.state}")
|
||||
- unless current_supporter.publicity.organisation.blank?
|
||||
dt = Publicity.human_attribute_name(:organisation)
|
||||
dd = current_supporter.publicity.organisation
|
||||
dt = Publicity.human_attribute_name(:statement)
|
||||
dd = current_supporter.publicity.statement
|
||||
dt = Publicity.human_attribute_name(:avatar)
|
||||
dd = image_tag current_supporter.publicity.avatar.url(:small), alt: ''
|
||||
|
||||
.pull-right
|
||||
= link_to t(".renew"), new_publicity_path
|
||||
br
|
||||
= link_to t(".delete"), publicity_path, data: { confirm: t("shared.are_you_sure") }, method: :delete, class: 'text-danger'
|
||||
|
||||
- else
|
||||
.alert.alert-notice
|
||||
= link_to t('.create_publicity'), new_publicity_path
|
||||
@@ -23,16 +23,22 @@
|
||||
dd == t("age_category.#{current_supporter.age_category}")
|
||||
dt = Supporter.human_attribute_name(:language)
|
||||
dd = t("languages.#{current_supporter.language}")
|
||||
dt = Supporter.human_attribute_name(:unsubscribed)
|
||||
dd = current_supporter.unsubscribed? ? t('shared.yes') : t('shared.no')
|
||||
dt = Supporter.human_attribute_name(:tel)
|
||||
dd = current_supporter.tel
|
||||
|
||||
p
|
||||
= link_to t('.edit'), edit_supporter_registration_path(), class: 'pull-right'
|
||||
|
||||
|
||||
= render 'publicity'
|
||||
|
||||
aside.col-md-5.col-xs-12
|
||||
= render 'right_side'
|
||||
|
||||
- else
|
||||
= render 'form'
|
||||
|
||||
- title(t('shared.header.title_html'))
|
||||
.row
|
||||
.col-xs-12.col-md-7
|
||||
h2.sr-only = t('.form')
|
||||
= render 'form'
|
||||
aside.col-md-5.col-xs-12
|
||||
= render 'right_side'
|
||||
|
||||
@@ -19,10 +19,8 @@
|
||||
= f.input :support, as: :radio_buttons, collection: t('support_type').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first
|
||||
= f.input :age_category, as: :radio_buttons, collection: t('age_category'), label_method: :last, value_method: :first
|
||||
= f.input :language, as: :radio_buttons, collection: t('languages').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first
|
||||
= f.input :unsubscribed, as: :boolean
|
||||
.form-actions
|
||||
= f.button :submit, t("devise.registrations.edit.update"), class: 'btn btn-primary'
|
||||
p = link_to t("devise.shared.links.back"), :back
|
||||
hr
|
||||
p = link_to t("devise.registrations.edit.cancel_my_account"), registration_path(resource_name), data: { confirm: t("devise.registrations.edit.are_you_sure") }, method: :delete, class: 'btn btn-danger btn-sm pull-right'
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
library(mongolite)
|
||||
library(xlsx)
|
||||
|
||||
Sys.setlocale("LC_ALL", "de_DE")
|
||||
|
||||
# Connect to the databes with the supporter collection
|
||||
m <- mongo(db="heroku_t242kdp0", collection = "supporters")
|
||||
|
||||
# Find all datasets not marked as dublicates
|
||||
dt <- m$find('{"duplicate": { "$ne": true }}')
|
||||
dt$created_at <- as.Date(dt$created_at)
|
||||
# Filter erroneous data
|
||||
dt <- subset(dt, zip >=1000)
|
||||
dt <- subset(dt, zip < 10000)
|
||||
|
||||
# Read BFS-Data with statistics of population from 2014
|
||||
population_per_plz4 <- read.xlsx(file = "external_data/su-d-01.02.03.07.xls", sheetName = "2014", startRow = 5, endRow = 3189, colIndex = c(1,2))
|
||||
colnames(population_per_plz4) <- c('zip', 'popuplation')
|
||||
|
||||
# Read canton name and zip from
|
||||
ktkz_plz4 <- read.xlsx(file = "external_data/be-b-00.04-osv-01.xls", sheetName = "PLZ4 -> GDE - NPA4 -> COM", startRow = 12,colIndex = c(1,2,4,5))
|
||||
colnames(ktkz_plz4) <- c('zip', 'percent_of_community', 'canton', 'name')
|
||||
|
||||
ktkz_plz4 <- ktkz_plz4[order(100-ktkz_plz4$percent_of_community),]
|
||||
ktkz_plz4_uniq <- ktkz_plz4[!duplicated(ktkz_plz4$zip),]
|
||||
|
||||
# Merge population and canton by zip together
|
||||
location_description <- merge(ktkz_plz4_uniq, population_per_plz4, by='zip')
|
||||
|
||||
# Total participants per zip
|
||||
participants <- as.data.frame(table(dt$zip))
|
||||
colnames(participants) <- c('zip','total_participants')
|
||||
|
||||
# Signers only
|
||||
signers <- as.data.frame(table(subset(dt, support=="signer")$zip))
|
||||
colnames(signers) <- c('zip','signers')
|
||||
|
||||
# Supporters only
|
||||
supporters <- as.data.frame(table(subset(dt, support=="supporter")$zip))
|
||||
colnames(supporters) <- c('zip','supporters')
|
||||
|
||||
# Merge everything to one big table
|
||||
main_table <- merge(location_description, participants, by="zip", all.x=T)
|
||||
main_table <- merge(main_table, signers, by="zip", all.x=T)
|
||||
main_table <- merge(main_table, supporters, by="zip", all.x=T)
|
||||
|
||||
# Calculate ratio in population
|
||||
main_table$total_participants_ratio <- main_table$total_participants / main_table$popuplation
|
||||
main_table$total_signers_ratio <- main_table$signers / main_table$popuplation
|
||||
main_table$total_supporters_ratio <- main_table$supporters / main_table$popuplation
|
||||
|
||||
# Export as xlsx
|
||||
write.xlsx2(main_table, file = "20170703_tagi_export.xlsx", row.names=F)
|
||||
@@ -31,7 +31,7 @@ module Ch420
|
||||
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
||||
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||
config.i18n.default_locale = :de
|
||||
config.i18n.available_locales = [:de, :it, :fr]
|
||||
config.i18n.available_locales = [:de, :it, :fr, :en]
|
||||
|
||||
config.generators do |g|
|
||||
g.orm :mongoid
|
||||
|
||||
@@ -41,4 +41,16 @@ Rails.application.configure do
|
||||
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = { address: 'localhost', port: 1025 }
|
||||
|
||||
config.paperclip_defaults = {
|
||||
storage: :s3,
|
||||
s3_protocol: :https,
|
||||
s3_region: ENV["S3_REGION"],
|
||||
s3_host_name: ENV["S3_HOST_NAME"],
|
||||
s3_credentials: {
|
||||
bucket: "cannabis-initiative-development",
|
||||
access_key_id: ENV["S3_ACCESS_KEY"],
|
||||
secret_access_key: ENV["S3_ACCESS_SECRET"]
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@@ -74,8 +74,8 @@ Rails.application.configure do
|
||||
# Use default logging formatter so that PID and timestamp are not suppressed.
|
||||
config.log_formatter = ::Logger::Formatter.new
|
||||
|
||||
config.action_mailer.default_url_options = { host: 'ch420.herokuapp.com' }
|
||||
config.action_mailer.asset_host = 'https://ch420.herokuapp.com'
|
||||
config.action_mailer.default_url_options = { host: 'www.cannabis-initiative.ch' }
|
||||
config.action_mailer.asset_host = 'https://www.cannabis-initiative.ch'
|
||||
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = {
|
||||
@@ -87,4 +87,16 @@ Rails.application.configure do
|
||||
authentication: :plain,
|
||||
enable_starttls_auto: true
|
||||
}
|
||||
|
||||
config.paperclip_defaults = {
|
||||
storage: :s3,
|
||||
s3_protocol: :https,
|
||||
s3_region: ENV["S3_REGION"],
|
||||
s3_host_name: ENV["S3_HOST_NAME"],
|
||||
s3_credentials: {
|
||||
bucket: "cannabis-initiative-production",
|
||||
access_key_id: ENV["S3_ACCESS_KEY"],
|
||||
secret_access_key: ENV["S3_ACCESS_SECRET"]
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
Rails.application.configure do
|
||||
# Settings specified here will take precedence over those in config/application.rb.
|
||||
|
||||
config.middleware.insert_before(::Rack::Runtime, "::Rack::Auth::Basic", "Staging") do |_u, p|
|
||||
p == ENV['STAGING_PASSWORD']
|
||||
end
|
||||
|
||||
|
||||
# Code is not reloaded between requests.
|
||||
config.cache_classes = true
|
||||
|
||||
# Eager load code on boot. This eager loads most of Rails and
|
||||
# your application in memory, allowing both threaded web servers
|
||||
# and those relying on copy on write to perform better.
|
||||
# Rake tasks automatically ignore this option for performance.
|
||||
config.eager_load = true
|
||||
|
||||
# Full error reports are disabled and caching is turned on.
|
||||
config.consider_all_requests_local = false
|
||||
config.action_controller.perform_caching = true
|
||||
|
||||
# Enable Rack::Cache to put a simple HTTP cache in front of your application
|
||||
# Add `rack-cache` to your Gemfile before enabling this.
|
||||
# For large-scale production use, consider using a caching reverse proxy like
|
||||
# NGINX, varnish or squid.
|
||||
# config.action_dispatch.rack_cache = true
|
||||
|
||||
# Disable serving static files from the `/public` folder by default since
|
||||
# Apache or NGINX already handles this.
|
||||
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
||||
|
||||
# Compress JavaScripts and CSS.
|
||||
config.assets.js_compressor = :uglifier
|
||||
# config.assets.css_compressor = :sass
|
||||
|
||||
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
||||
config.assets.compile = false
|
||||
|
||||
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
||||
# yet still be able to expire them through the digest params.
|
||||
config.assets.digest = true
|
||||
|
||||
# `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
|
||||
|
||||
# Specifies the header that your server uses for sending files.
|
||||
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
|
||||
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
|
||||
|
||||
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
||||
config.force_ssl = true
|
||||
|
||||
# Use the lowest log level to ensure availability of diagnostic information
|
||||
# when problems arise.
|
||||
config.log_level = :warn
|
||||
|
||||
# Prepend all log lines with the following tags.
|
||||
# config.log_tags = [ :subdomain, :uuid ]
|
||||
|
||||
# Use a different logger for distributed setups.
|
||||
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
||||
|
||||
# Use a different cache store in production.
|
||||
# config.cache_store = :mem_cache_store
|
||||
|
||||
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
|
||||
# config.action_controller.asset_host = 'http://assets.example.com'
|
||||
|
||||
# Ignore bad email addresses and do not raise email delivery errors.
|
||||
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
|
||||
# config.action_mailer.raise_delivery_errors = false
|
||||
|
||||
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
||||
# the I18n.default_locale when a translation cannot be found).
|
||||
config.i18n.fallbacks = true
|
||||
|
||||
# Send deprecation notices to registered listeners.
|
||||
config.active_support.deprecation = :notify
|
||||
|
||||
# Use default logging formatter so that PID and timestamp are not suppressed.
|
||||
config.log_formatter = ::Logger::Formatter.new
|
||||
|
||||
config.action_mailer.default_url_options = { host: 'ch420-staging.herokuapp.com' }
|
||||
config.action_mailer.asset_host = 'https://ch420-staging.herokuapp.com'
|
||||
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = {
|
||||
port: '587',
|
||||
address: ENV['SMTP_HOST'],
|
||||
user_name: ENV['SMTP_USER'],
|
||||
password: ENV['SMTP_PASSWORD'],
|
||||
domain: 'hanflegal.ch',
|
||||
authentication: :plain,
|
||||
enable_starttls_auto: true
|
||||
}
|
||||
|
||||
config.paperclip_defaults = {
|
||||
storage: :s3,
|
||||
s3_protocol: :https,
|
||||
s3_region: ENV["S3_REGION"],
|
||||
s3_host_name: ENV["S3_HOST_NAME"],
|
||||
s3_credentials: {
|
||||
bucket: "cannabis-initiative-staging",
|
||||
access_key_id: ENV["S3_ACCESS_KEY"],
|
||||
secret_access_key: ENV["S3_ACCESS_SECRET"]
|
||||
}
|
||||
}
|
||||
end
|
||||
@@ -12,7 +12,7 @@ Devise.setup do |config|
|
||||
# Configure the e-mail address which will be shown in Devise::Mailer,
|
||||
# note that it will be overwritten if you use your own mailer class
|
||||
# with default "from" parameter.
|
||||
config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
|
||||
config.mailer_sender = ENV['FROM_MAIL']
|
||||
|
||||
# Configure the class responsible to send e-mails.
|
||||
# config.mailer = 'Devise::Mailer'
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Geocoder.configure(
|
||||
lookup: :google,
|
||||
api_key: ENV['GEOCODING_API'])
|
||||
@@ -1,4 +0,0 @@
|
||||
BootstrapNavbar.configure do |config|
|
||||
config.bootstrap_version = '3.3.6'
|
||||
config.root_paths = ['/', '/de', '/fr', '/it'] # default: ['/']
|
||||
end
|
||||
@@ -1 +1 @@
|
||||
Slim::Engine.set_default_options pretty: true
|
||||
Slim::Engine.set_options pretty: true
|
||||
@@ -0,0 +1,5 @@
|
||||
Rails.configuration.stripe = {
|
||||
:publishable_key => ENV['PUBLISHABLE_KEY'],
|
||||
:secret_key => ENV['SECRET_KEY']
|
||||
}
|
||||
Stripe.api_key = Rails.configuration.stripe[:secret_key]
|
||||
@@ -0,0 +1,8 @@
|
||||
de:
|
||||
admin:
|
||||
title: Administration
|
||||
publicities:
|
||||
index:
|
||||
title: Unveröffentlichte Statements
|
||||
form:
|
||||
title: Statement
|
||||
@@ -0,0 +1,8 @@
|
||||
fr:
|
||||
admin:
|
||||
title: Administration
|
||||
publicities:
|
||||
index:
|
||||
title: Déclarations non publiées
|
||||
form:
|
||||
title: Déclaration
|
||||
@@ -0,0 +1,8 @@
|
||||
it:
|
||||
admin:
|
||||
title: Amministrazione
|
||||
publicities:
|
||||
index:
|
||||
title: Dichiarazioni non pubblicati
|
||||
form:
|
||||
title: Dichiarazione
|
||||
+80
-16
@@ -1,52 +1,69 @@
|
||||
de:
|
||||
shared:
|
||||
crowdfunding: Unterstütze uns und mach mit beim Crowdfunding zur Finanzierung der Initiative!
|
||||
"yes": Ja
|
||||
"no": Nein
|
||||
header:
|
||||
logo: Logo der Initiative
|
||||
title_html: Ja, ich will <strong class="text-success">Cannabis</strong> in der Schweiz <strong class="text-success">legalisieren</strong>
|
||||
topnavigation:
|
||||
donation: Spenden
|
||||
support: Unterstützen
|
||||
my_account: Mein Konto
|
||||
sign_in: Anmelden
|
||||
sign_out: Abmelden
|
||||
initiative_text: Der Initiativtext im Wortlaut
|
||||
initiative: Die Initiative
|
||||
arguments: Argumentarium
|
||||
faq: Fragen und Antworten
|
||||
sponsoring: Sponsoren & Spenden
|
||||
sponsoring: Sponsoren
|
||||
numbers: Zahlen
|
||||
statements: Statements
|
||||
collection_concept: Wie macht man eine Volksinitiative?
|
||||
network: Netzwerk
|
||||
signature_collections: Unterschriftensammlung
|
||||
|
||||
lang: Sprache
|
||||
are_you_sure: Bist du sicher?
|
||||
edit: Bearbeiten
|
||||
show: Anzeigen
|
||||
destroy: Löschen
|
||||
save: Speichern
|
||||
description: Volksinitiative zur Legalisierung von Cannabis in der Schweiz.
|
||||
|
||||
counter:
|
||||
supporters: "Unterstützer:"
|
||||
amount_of_supporters: Zurzeit haben wir %{amount} Unterstützer.
|
||||
|
||||
input_error: Deine Eingaben konnte nicht gespeichert werden. Überprüfe deine Eingaben.
|
||||
|
||||
donation: Deine Spende
|
||||
welcome_email:
|
||||
subject: Besten Dank für deine Unterstützung!
|
||||
|
||||
|
||||
support_type:
|
||||
signer: Ich würde eine Volksinitiative für die <span class="text-success">Legalisierung von Cannabis</span> unterschreiben.
|
||||
supporter: Ich würde eine Volksinitiative für die <span class="text-success">Legalisierung von Cannabis</span> unterschreiben und helfe aktiv Unterschriften in meiner Umgebung zu sammeln.
|
||||
# activist: Ich unterschreibe eine Volksinitiative für die <span class="text-success">Legalisierung von Cannabis</span> und beteilige mich bei der Planung und Koordination einer Volksinitiative.
|
||||
# nonvoting_supporter: Ich bin nicht stimmberechtigt, helfe aber aktiv Unterschriften in meiner Umgebung zu sammeln um <span class="text-success">Cannabis zu legalisierung</span>.
|
||||
|
||||
|
||||
age_category:
|
||||
underage: Ich bin jünger als 18 Jahre alt
|
||||
young: Ich bin 18 bis 30 Jahre alt
|
||||
middle: Ich bin 30 bis 64 Jahre alt
|
||||
retired: Ich bin über 64 Jahre alt
|
||||
|
||||
publicity_states:
|
||||
pending: Die Veröffentlichung wurde noch nicht genehmigt
|
||||
approved: Das Statement wurde Veröffentlicht
|
||||
declined: Das Statement wurde abgelehnt
|
||||
|
||||
languages:
|
||||
de: Deutsch
|
||||
fr: Français
|
||||
it: Italiano
|
||||
|
||||
|
||||
supporters:
|
||||
form:
|
||||
form: Formular
|
||||
lang: Sprache
|
||||
logo: Logo der Initiative
|
||||
title_html: Ja, ich will <strong class="text-success">Cannabis</strong> in der Schweiz <strong class="text-success">legalisieren</strong>
|
||||
submit: Unterstützung zusichern
|
||||
terms_and_conditions: Mit dem Absenden deiner Daten stimmst du den Nutzungsbedingungen zu.
|
||||
@@ -57,28 +74,64 @@ de:
|
||||
city: Hinterpfupfikon
|
||||
zip: "4200"
|
||||
email: hans.muster@hanflegal.ch
|
||||
|
||||
|
||||
publicity:
|
||||
title: Mein Statement
|
||||
renew: Statement neu einreichen
|
||||
delete: Statement löschen
|
||||
create_publicity: Deine Meinung zählt, darum bitten wir dir hier die Möglichkeit öffentlich deine Meinung zur Cannabis-Initiative kundzutun. Gib ein Starkes Statement ab und zeig dein Gesicht! Meine Unterstützung öffentlich kundtun ...
|
||||
|
||||
create:
|
||||
timeout: Ihre Eingabe war zu schnell.
|
||||
|
||||
|
||||
new:
|
||||
title: Hallo %{name}
|
||||
edit: Meine Daten bearbeiten...
|
||||
edit: Meine Daten bearbeiten
|
||||
my_data: Meine Daten
|
||||
|
||||
|
||||
publicities:
|
||||
form:
|
||||
title: Meine Meinung zur Cannabis-Initiative veröffentlichen
|
||||
organisation: Organisation (Optional)
|
||||
organisation_placeholder: Parteizugehörigkeit, Verband oder sonstige Organisationen
|
||||
avatar: Lade ein Bild von dir Hoch
|
||||
save: Zur Überprüfung einsenden
|
||||
|
||||
create:
|
||||
success: Besten Dank die Daten werden überprüft.
|
||||
update:
|
||||
success: Besten Dank die Daten werden überprüft.
|
||||
|
||||
pages:
|
||||
show:
|
||||
not_found: Die Seite konnte nicht gefunden werden.
|
||||
not_found: Die Seite konnte nicht gefunden werden.
|
||||
|
||||
thanks:
|
||||
title: Besten Dank für deine Unterstützung!
|
||||
|
||||
|
||||
statements:
|
||||
title: Statements von unseren Unterstützern
|
||||
submit_your_own_statement: Veröffentliche dein eigenes Statement...
|
||||
read_more: das ganze Statement lesen.
|
||||
network:
|
||||
signature_collections:
|
||||
index:
|
||||
new: Neue Sammlung erfasssen
|
||||
title: Unterschriftensammlungen
|
||||
search: Suche
|
||||
location: Ort
|
||||
routes:
|
||||
initiative_text: initiativtext
|
||||
arguments: argumentarium
|
||||
faq: fragen_und_antworten
|
||||
sponsoring: sponsoren_und_spenden
|
||||
sponsoring: sponsoren
|
||||
donation: spenden
|
||||
numbers: zahlen
|
||||
statementes: statements
|
||||
collection_concept: Sammelkonzept
|
||||
greendays: greensaturday
|
||||
network: netzwerk
|
||||
signature_collections: unterschriftensammlung
|
||||
|
||||
mongoid:
|
||||
models:
|
||||
@@ -98,6 +151,17 @@ de:
|
||||
remember_me: Angemeldet bleiben
|
||||
password: Passwort
|
||||
language: Sprache
|
||||
unsubscribed: Kein Newsletter
|
||||
password_confirmation: Passwort bestätigen
|
||||
current_password: Aktuelles Passwort
|
||||
tel: Telefon (optional)
|
||||
publicity:
|
||||
state: Status
|
||||
organisation: Organisation
|
||||
statement: Statement
|
||||
avatar: Bild
|
||||
network/signature_collection:
|
||||
location_name: Ort
|
||||
location_zip: Postleitzahl
|
||||
location_address: Adresse
|
||||
event_date_start: Startzeit
|
||||
event_date_end: Endzeit
|
||||
|
||||
+66
-15
@@ -2,49 +2,64 @@ fr:
|
||||
input_error: Vos entrées ne peuvent pas être enregistrées. Vérifiez les entrées.
|
||||
|
||||
shared:
|
||||
crowdfunding: Soutenez-nous et participer à crowdfunding pour financer l'initiative!
|
||||
"yes": Oui
|
||||
"no": Non
|
||||
counter:
|
||||
supporters: "Militant:"
|
||||
amount_of_supporters: Nous avons actuellement %{amount} supporters.
|
||||
supporters: "Partisans:"
|
||||
amount_of_supporters: Nous avons actuellement %{amount} partisans.
|
||||
header:
|
||||
logo: Logo de l'initiative
|
||||
title_html: Oui, je veux <strong class="text-success">légaliser le cannabis</strong> en Suisse.
|
||||
topnavigation:
|
||||
donation: Donation
|
||||
support: Soutenez-nous
|
||||
sign_out: déconnecter
|
||||
sign_in: Connexion
|
||||
initiative: l' initiative
|
||||
initiative_text: L'initiative propose (en allemand)
|
||||
arguments: Arguments (en allemand)
|
||||
faq: Questions et réponses (en allemand)
|
||||
sponsoring: Donation et Sponsors (en allemand)
|
||||
sponsoring: Sponsors (en allemand)
|
||||
numbers: Chiffres (en allemand)
|
||||
|
||||
statements: Déclarations
|
||||
collection_concept: Comment faire une initiative populaire? (en allemand)
|
||||
my_account: Mon compte
|
||||
network: Réseau
|
||||
signature_collections: Collection des signatures
|
||||
|
||||
lang: Langue
|
||||
are_you_sure: Tu es sûre?
|
||||
edit: Éditer
|
||||
save: Sauver
|
||||
description: Initiative populaire pour la légalisation du cannabis en Suisse.
|
||||
|
||||
donation: Donation
|
||||
welcome_email:
|
||||
subject: Merci beaucoup pour ton soutien!
|
||||
|
||||
support_type:
|
||||
signer: Je signerais une initiative populaire pour la <span class="text-success">légalisation du cannabis</span>.
|
||||
supporter: Je signerais une initiative populaire pour la <span class="text-success">légalisation du cannabis</span> et aiderais activement à trouver des signatures dans ma région.
|
||||
# activist: Ich unterschreibe eine Volksinitiative für die <span class="text-success">Legalisierung von Cannabis</span> und beteilige mich bei der Planung und Koordination einer Volksinitiative.
|
||||
# nonvoting_supporter: Ich bin nicht stimmberechtigt, helfe aber aktiv Unterschriften in meiner Umgebung zu sammeln um <span class="text-success">Cannabis zu legalisierung</span>.
|
||||
|
||||
|
||||
age_category:
|
||||
underage: J’ai moins de 18 ans
|
||||
young: J’ai entre 18 et 30 ans
|
||||
middle: J’ai entre 30 et 64 ans
|
||||
retired: J’ai plus que 64 ans
|
||||
|
||||
|
||||
publicity_states:
|
||||
pending: La publication n'a pas été approuvé
|
||||
approved: La déclaration a été publiée
|
||||
declined: La déclaration a été rejetée
|
||||
|
||||
languages:
|
||||
de: Deutsch
|
||||
fr: Français
|
||||
it: Italiano
|
||||
|
||||
|
||||
supporters:
|
||||
form:
|
||||
form: Formulaire
|
||||
lang: Langue
|
||||
submit: Confirmer mon soutien
|
||||
terms_and_conditions: En soumettant vos données, vous acceptez les conditions d'utilisation.
|
||||
placeholders:
|
||||
@@ -54,14 +69,33 @@ fr:
|
||||
city: Hinterpfupfikon
|
||||
zip: "4200"
|
||||
email: hans.muster@hanflegal.ch
|
||||
|
||||
|
||||
publicity:
|
||||
title: Ma déclaration
|
||||
renew: resoumettre déclaration
|
||||
delete: supprimer déclaration
|
||||
create_publicity: Votre opinion compte, nous vous demandons ici d'exprimer publiquement votre avis sur initiative de cannabis possible. Rendre public mon soutien ...
|
||||
|
||||
create:
|
||||
timeout: Ihre Eingabe war zu schnell.
|
||||
|
||||
new:
|
||||
title: Salut %{name}
|
||||
edit: Modifier mes données ...
|
||||
edit: Modifier mes données
|
||||
my_data: Mes données
|
||||
|
||||
publicities:
|
||||
form:
|
||||
title: Donner mon avis sur l'initiative de cannabis
|
||||
organisation: Organisation (Facultatif)
|
||||
organisation_placeholder: Affiliation parti, une association ou d'autres organisations
|
||||
avatar: Ajouter une photo
|
||||
save: Envoyé pour examen
|
||||
|
||||
create:
|
||||
success: Merci, les données sont vérifiées.
|
||||
update:
|
||||
success: Merci, les données sont vérifiées.
|
||||
|
||||
pages:
|
||||
show:
|
||||
@@ -69,13 +103,24 @@ fr:
|
||||
|
||||
thanks:
|
||||
title: Merci beaucoup pour ton soutien!
|
||||
|
||||
statements:
|
||||
title: Les déclarations de nos partisans
|
||||
submit_your_own_statement: Publie tes propres déclaration ...
|
||||
read_more: lire toute la déclaration.
|
||||
|
||||
routes:
|
||||
initiative_text: l_initiative_propose
|
||||
arguments: arguments
|
||||
faq: questions_et_reponses
|
||||
sponsoring: donation_et_sponsor
|
||||
sponsoring: sponsor
|
||||
donation: donation
|
||||
numbers: chiffres
|
||||
statements: declarations
|
||||
collection_concept: plan_de_collecte
|
||||
greendays: greensaturday
|
||||
network: reseau
|
||||
signature_collections: collection_signature
|
||||
|
||||
mongoid:
|
||||
models:
|
||||
@@ -95,6 +140,12 @@ fr:
|
||||
remember_me: Se souvenir de moi
|
||||
password: mot de passe
|
||||
language: Langue
|
||||
unsubscribed: pas de newslettre
|
||||
password_confirmation: confirmer le mot de passe
|
||||
current_password: Mot de passe actuel
|
||||
tel: Téléphone (facultatif)
|
||||
|
||||
publicity:
|
||||
status: Statu
|
||||
organisation: Organisation
|
||||
statement: Déclaration
|
||||
avatar: Photo
|
||||
+61
-10
@@ -2,27 +2,39 @@ it:
|
||||
input_error: I dati immessi non potevano essere salvati. Verificare i dati immessi.
|
||||
|
||||
shared:
|
||||
crowdfunding: Sostienici e ad entrare nel crowdfunding per finanziare l'iniziativa!
|
||||
"yes": Si
|
||||
"No": No
|
||||
header:
|
||||
logo: Logo dell'iniziativa
|
||||
title_html: Si, voglio <strong class="text-success">legalizzare</strong> la <strong class="text-success">cannabis in Svizzera</strong>
|
||||
topnavigation:
|
||||
donation: Donazione
|
||||
support: Sostenici
|
||||
sign_out: Disconnettersi
|
||||
sign_in: Registro
|
||||
initiative_text: Il testo dell’iniziativa
|
||||
initiative_text: Il testo dell’iniziativa (in tedesco)
|
||||
initiative: l'iniziativa
|
||||
arguments: Argomentazioni
|
||||
faq: Domande e risposte (in tedesco)
|
||||
sponsoring: Donazione e Sponsor
|
||||
sponsoring: Sponsor
|
||||
numbers: Numeri (in tedesco)
|
||||
|
||||
statements: Dichiarazioni
|
||||
collection_concept: Come fare un iniziativa popolare? (in tedesco)
|
||||
my_account: Il mio account
|
||||
network: Reticolato
|
||||
signature_collections: collezione di firme
|
||||
|
||||
counter:
|
||||
supporters: "Sostenitore:"
|
||||
amount_of_supporters: Al momento abbiamo %{amount} sostenitori.
|
||||
|
||||
lang: Lingua
|
||||
are_you_sure: Sei sicuro?
|
||||
edit: Modifica
|
||||
save: Salvare
|
||||
description: L’iniziativa popolare per la legalizzazione della Cannabis in Svizzera
|
||||
|
||||
|
||||
donation: Donazione
|
||||
welcome_email:
|
||||
subject: Grazie mille per il tuo sostegno!
|
||||
|
||||
@@ -38,6 +50,11 @@ it:
|
||||
middle: Ho tra i 30 ed i 64 anni
|
||||
retired: Ho più di 64 anni
|
||||
|
||||
publicity_states:
|
||||
pending: La pubblicazione non è stato approvato
|
||||
approved: La dichiarazione è stata rilasciata
|
||||
declined: La dichiarazione è stata respinta
|
||||
|
||||
languages:
|
||||
de: Deutsch
|
||||
fr: Français
|
||||
@@ -46,7 +63,6 @@ it:
|
||||
supporters:
|
||||
form:
|
||||
form: Modulo
|
||||
lang: Lingua
|
||||
logo: Logo dell'iniziativa
|
||||
submit: Garantire il sostengo
|
||||
terms_and_conditions: "Con l'invio dei tuoi dati, accetti le condizioni d'utilizzo."
|
||||
@@ -57,14 +73,33 @@ it:
|
||||
city: Hinterpfupfikon
|
||||
zip: "4200"
|
||||
email: hans.muster@hanflegal.ch
|
||||
|
||||
|
||||
publicity:
|
||||
title: La mia dichiarazione
|
||||
renew: Ripresentare Statement
|
||||
delete: Eliminare la dichiarazione
|
||||
create_publicity: La tua opinione conta, quindi vi chiediamo qui pubblicamente esprimere la tua opinione su iniziativa di cannabis possibile. Girare in una dichiarazione forte e mostrare il tuo volto! Il mio supporto rendere pubblico ...
|
||||
|
||||
create:
|
||||
timeout: Ihre Eingabe war zu schnell.
|
||||
|
||||
new:
|
||||
title: Ciao %{name}
|
||||
edit: Modifica i miei dati ...
|
||||
edit: Modifica i miei dati
|
||||
my_data: Miei dati
|
||||
|
||||
publicities:
|
||||
form:
|
||||
title: Lasciare un commento sull'iniziativa cannabis
|
||||
organisation: Organizzazione (opzionale)
|
||||
organisation_placeholder: Partito di appartenenza, di associazione o di altre organizzazioni
|
||||
avatar: Carica una foto
|
||||
save: Inviato per la revisione
|
||||
|
||||
create:
|
||||
success: Grazie, i dati vengono controllati.
|
||||
update:
|
||||
success: Grazie, i dati vengono controllati.
|
||||
|
||||
pages:
|
||||
thanks:
|
||||
@@ -72,13 +107,24 @@ it:
|
||||
|
||||
show:
|
||||
not_found: La pagina non è stata trovata.
|
||||
|
||||
statements:
|
||||
title: Dichiarazioni di nostri sostenitori
|
||||
submit_your_own_statement: Pubblica il tuo propria dichiarazione ...
|
||||
read_more: leggere l'intero.
|
||||
|
||||
routes:
|
||||
initiative_text: il_testo_dell_iniziativa
|
||||
arguments: argomentazioni
|
||||
faq: domande_e_risposte
|
||||
sponsoring: donazione_e_sponsor
|
||||
sponsoring: sponsor
|
||||
donation: donazione
|
||||
numbers: numeri
|
||||
statements: dichiarazioni
|
||||
collection_concept: sistema_di_raccolta
|
||||
greendays: greensaturday
|
||||
network: reticolato
|
||||
signature_collections: collezione_firme
|
||||
|
||||
mongoid:
|
||||
attributes:
|
||||
@@ -96,6 +142,11 @@ it:
|
||||
remember_me: Ricordati di mel
|
||||
password: Password
|
||||
language: Lingua
|
||||
unsubscribed: No Newsletter
|
||||
password_confirmation: conferma password
|
||||
current_password: Password corrente
|
||||
tel: Telefono (opzionale)
|
||||
publicity:
|
||||
status: Statu
|
||||
organisation: Organizzazione
|
||||
statement: Dichiarazione
|
||||
avatar: Foto
|
||||
@@ -0,0 +1,472 @@
|
||||
de:
|
||||
mongoid:
|
||||
errors:
|
||||
messages:
|
||||
blank_in_locale:
|
||||
"can't be blank in %{location}"
|
||||
message_title: "message"
|
||||
summary_title: "summary"
|
||||
resolution_title: "resolution"
|
||||
ambiguous_relationship:
|
||||
message: "Ambiguous relations %{candidates} defined on %{klass}."
|
||||
summary:
|
||||
"When Mongoid attempts to set an inverse document of a relation
|
||||
in memory, it needs to know which relation it belongs to. When
|
||||
setting %{name}, Mongoid looked on the class %{inverse}
|
||||
for a matching relation, but multiples were found that could
|
||||
potentially match: %{candidates}."
|
||||
resolution: "On the %{name} relation on %{inverse} you must add an
|
||||
:inverse_of option to specify the exact relationship on %{klass}
|
||||
that is the opposite of %{name}."
|
||||
callbacks:
|
||||
message: "Calling %{method} on %{klass} resulted in a false return
|
||||
from a callback."
|
||||
summary: "If a before callback returns false when using Document.create!,
|
||||
Document#save!, or Document#update_attributes! this error will get raised
|
||||
since the document did not actually get saved."
|
||||
resolution: "Double check all before callbacks to make sure they are
|
||||
not unintentionally returning false."
|
||||
calling_document_find_with_nil_is_invalid:
|
||||
message: "Calling Document.find with nil is invalid."
|
||||
summary: "Document.find expects the parameters to be 1 or more ids, and
|
||||
will return a single document if 1 id is provided, otherwise an array
|
||||
of documents if multiple ids are provided."
|
||||
resolution: "Most likely this is caused by passing parameters directly
|
||||
through to the find, and the parameter either is not present or the
|
||||
key from which it is accessed is incorrect."
|
||||
document_not_destroyed:
|
||||
message: "%{klass} with id %{id} was not destroyed."
|
||||
summary: "When calling %{klass}#destroy! and a callback halts the destroy
|
||||
callback chain by returning a false value, the deletion will not
|
||||
actually occur."
|
||||
resolution: "Check the before/after destroy callbacks to ensure that the
|
||||
return values are truthy for the chain to continue."
|
||||
document_not_found:
|
||||
message: "Document(s) not found for class %{klass} with id(s) %{missing}."
|
||||
summary: "When calling %{klass}.find with an id or array of ids, each
|
||||
parameter must match a document in the database or this error will be
|
||||
raised. The search was for the id(s): %{searched} (%{total} total)
|
||||
and the following ids were not found: %{missing}."
|
||||
resolution: "Search for an id that is in the database or set
|
||||
the Mongoid.raise_not_found_error configuration option to false,
|
||||
which will cause a nil to be returned instead of raising this error when
|
||||
searching for a single id, or only the matched documents when searching
|
||||
for multiples."
|
||||
document_with_attributes_not_found:
|
||||
message: "Document not found for class %{klass} with attributes %{attributes}."
|
||||
summary: "When calling %{klass}.find_by with a hash of attributes, all
|
||||
attributes provided must match a document in the database or this error
|
||||
will be raised."
|
||||
resolution: "Search for attributes that are in the database or set
|
||||
the Mongoid.raise_not_found_error configuration option to false,
|
||||
which will cause a nil to be returned instead of raising this error."
|
||||
eager_load:
|
||||
message: "Eager loading :%{name} is not supported since it is a
|
||||
polymorphic belongs_to relation."
|
||||
summary: "Mongoid cannot currently determine the classes it needs to
|
||||
eager load when the relation is polymorphic. The parents reside in
|
||||
different collections so a simple id lookup is not sufficient enough."
|
||||
resolution: "Don't attempt to perform this action and have patience,
|
||||
maybe this will be supported in the future."
|
||||
invalid_collection:
|
||||
message: "Access to the collection for %{klass} is not allowed."
|
||||
summary: "%{klass}.collection was called, and %{klass} is an embedded
|
||||
document - it resides within the collection of the root document of
|
||||
the hierarchy."
|
||||
resolution: "For access to the collection that the embedded document is
|
||||
in, use %{klass}#_root.collection, or do not attempt to persist an
|
||||
embedded document without a parent set."
|
||||
invalid_config_option:
|
||||
message: "Invalid configuration option: %{name}."
|
||||
summary: "A invalid configuration option was provided in your
|
||||
mongoid.yml, or a typo is potentially present. The valid configuration
|
||||
options are: %{options}."
|
||||
resolution: "Remove the invalid option or fix the typo. If you were
|
||||
expecting the option to be there, please consult the following page
|
||||
with repect to Mongoid's configuration:\n\n
|
||||
\_\_http://mongoid.org/en/mongoid/docs/installation.html"
|
||||
invalid_field:
|
||||
message: "Defining a field named '%{name}' is not allowed."
|
||||
summary: "Defining this field would override the method '%{name}',
|
||||
which would cause issues with expectations around the original
|
||||
method and cause extremely hard to debug issues. The original
|
||||
method was defined in:\n
|
||||
\_\_Object: %{origin}\n
|
||||
\_\_File: %{file}\n
|
||||
\_\_Line: %{line}"
|
||||
resolution: "Use Mongoid.destructive_fields to see what names are not
|
||||
allowed, and don't use these names. These include names that also
|
||||
conflict with core Ruby methods on Object, Module, Enumerable, or
|
||||
included gems that inject methods into these or Mongoid internals."
|
||||
invalid_field_option:
|
||||
message: "Invalid option :%{option} provided for field :%{name}."
|
||||
summary: "Mongoid requires that you only provide valid options on each
|
||||
field definition in order to prevent unexpected behaviour later on."
|
||||
resolution: "When defining the field :%{name} on '%{klass}', please provide
|
||||
valid options for the field. These are currently: %{valid}. If you
|
||||
meant to define a custom field option, please do so first like so:\n\n
|
||||
\_\_Mongoid::Fields.option :%{option} do |model, field, value|\n
|
||||
\_\_\_\_# Your logic here...\n
|
||||
\_\_end\n
|
||||
\_\_class %{klass}\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_field :%{name}, %{option}: true\n
|
||||
\_\_end\n\n"
|
||||
invalid_includes:
|
||||
message: "Invalid includes directive: %{klass}.includes(%{args})"
|
||||
summary: "Eager loading in Mongoid only supports providing arguments
|
||||
to %{klass}.includes that are the names of relations on the %{klass}
|
||||
model, and only supports one level of eager loading. (ie, eager loading
|
||||
associations not on the %{klass} but one step away via another relation
|
||||
is not allowed."
|
||||
resolution: "Ensure that each parameter passed to %{klass}.includes is
|
||||
a valid name of a relation on the %{klass} model. These are: %{relations}."
|
||||
invalid_index:
|
||||
message: "Invalid index specification on %{klass}: %{spec}, %{options}"
|
||||
summary: "Indexes in Mongoid are defined as a hash of field name and
|
||||
direction/2d pairs, with a hash for any additional options."
|
||||
resolution: "Ensure that the index conforms to the correct syntax and
|
||||
has the correct options.\n\n
|
||||
Valid options are:\n
|
||||
\_\_background: true|false\n
|
||||
\_\_database: 'database_name'\n
|
||||
\_\_drop_dups: true|false\n
|
||||
\_\_name: 'index_name'\n
|
||||
\_\_sparse: true|false\n
|
||||
\_\_unique: true|false\n
|
||||
\_\_min: 1\n
|
||||
\_\_max: 1\n
|
||||
\_\_bits: 26\n
|
||||
\_\_bucket_size : 1\n
|
||||
\_\_weights: { content: 1, title: 2 }\n
|
||||
\_\_expire_after_seconds: number_of_seconds\n
|
||||
Valid types are: 1, -1, '2d', '2dsphere', 'geoHaystack', 'text', 'hashed'\n\n
|
||||
Example:\n
|
||||
\_\_class Band\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_index({ name: 1, label: -1 }, { sparse: true })\n
|
||||
\_\_\_\_index({ location: '2d' }, { background: true })\n
|
||||
\_\_end\n\n"
|
||||
invalid_options:
|
||||
message: "Invalid option :%{invalid} provided to relation :%{name}."
|
||||
summary: "Mongoid checks the options that are passed to the relation
|
||||
macros to ensure that no ill side effects occur by letting something
|
||||
slip by."
|
||||
resolution: "Valid options are: %{valid}, make sure these are the ones
|
||||
you are using."
|
||||
invalid_path:
|
||||
message: "Having a root path assigned for %{klass} is invalid."
|
||||
summary: "Mongoid has two different path objects for determining
|
||||
the location of a document in the database, Root and Embedded.
|
||||
This error is raised when an embedded document somehow gets a
|
||||
root path assigned."
|
||||
resolution: "Most likely your embedded model, %{klass} is also
|
||||
referenced via a has_many from a root document in another
|
||||
collection. Double check the relation definitions and fix any
|
||||
instances where embedded documents are improperly referenced
|
||||
from other collections."
|
||||
invalid_scope:
|
||||
message: "Defining a scope of value %{value} on %{klass} is not
|
||||
allowed."
|
||||
summary: "Scopes in Mongoid must be procs that wrap criteria objects."
|
||||
resolution: "Change the scope to be a proc wrapped critera.\n\n
|
||||
Example:\n
|
||||
\_\_class Band\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_scope :inactive, ->{ where(active: false) }\n
|
||||
\_\_end\n\n"
|
||||
invalid_storage_options:
|
||||
message: "Invalid options passed to %{klass}.store_in: %{options}."
|
||||
summary: "The :store_in macro takes only a hash of parameters with
|
||||
the keys :database, :collection, or :session."
|
||||
resolution: "Change the options passed to store_in to match the
|
||||
documented API, and ensure all keys in the options hash are
|
||||
symbols.\n\n
|
||||
Example:\n
|
||||
\_\_class Band\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_store_in collection: 'artists', database: 'secondary'\n
|
||||
\_\_end\n\n"
|
||||
invalid_storage_parent:
|
||||
message: "Invalid store_in call on class %{klass}."
|
||||
summary: "The :store_in macro can only be called on a base Mongoid Document"
|
||||
resolution: "Remove the store_in call on class %{klass}, as it will use its
|
||||
parent store configuration. Or remove the hierarchy extension for this
|
||||
class."
|
||||
invalid_time:
|
||||
message: "'%{value}' is not a valid Time."
|
||||
summary: "Mongoid tries to serialize the values for Date, DateTime, and
|
||||
Time into proper UTC times to store in the database. The provided
|
||||
value could not be parsed."
|
||||
resolution: "Make sure to pass parsable values to the field setter
|
||||
for Date, DateTime, and Time objects. When this is a String it needs
|
||||
to be valid for Time.parse. Other objects must be valid to pass to
|
||||
Time.local."
|
||||
inverse_not_found:
|
||||
message: "When adding a(n) %{klass} to %{base}#%{name}, Mongoid could
|
||||
not determine the inverse foreign key to set. The attempted key was
|
||||
'%{inverse}'."
|
||||
summary: "When adding a document to a relation, Mongoid attempts
|
||||
to link the newly added document to the base of the relation in
|
||||
memory, as well as set the foreign key to link them on the
|
||||
database side. In this case Mongoid could not determine what the
|
||||
inverse foreign key was."
|
||||
resolution: "If an inverse is not required, like a belongs_to or
|
||||
has_and_belongs_to_many, ensure that :inverse_of => nil is set
|
||||
on the relation. If the inverse is needed, most likely the
|
||||
inverse cannot be figured out from the names of the relations and
|
||||
you will need to explicitly tell Mongoid on the relation what
|
||||
the inverse is.\n\n
|
||||
Example:\n
|
||||
\_\_class Lush\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_has_one :whiskey, class_name: \"Drink\", inverse_of: :alcoholic\n
|
||||
\_\_end\n\n
|
||||
\_\_class Drink\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_belongs_to :alcoholic, class_name: \"Lush\", inverse_of: :whiskey\n
|
||||
\_\_end"
|
||||
invalid_set_polymorphic_relation:
|
||||
message: "The %{name} attribute can't be set to an instance of
|
||||
%{other_klass} as %{other_klass} has multiple relations referencing
|
||||
%{klass} as %{name}."
|
||||
summary: "If the parent class of a polymorphic relation has multiple
|
||||
definitions for the same relation, the values must be set from the
|
||||
parent side and not the child side since Mongoid cannot determine
|
||||
from the child side which relation to go in."
|
||||
resolution: "Set the values from the parent, or redefine the relation
|
||||
with only a single definition in the parent."
|
||||
invalid_value:
|
||||
message: "Value of type %{value_class} cannot be written to a field of type %{field_class}"
|
||||
summary: "Tried to set a value of type %{value_class} to a field of type %{field_class}"
|
||||
resolution: "Verify if the value to be set correspond to field definition"
|
||||
mixed_relations:
|
||||
message: "Referencing a(n) %{embedded} document from the %{root}
|
||||
document via a relational association is not allowed since the
|
||||
%{embedded} is embedded."
|
||||
summary: "In order to properly access a(n) %{embedded} from %{root}
|
||||
the reference would need to go through the root document of
|
||||
%{embedded}. In a simple case this would require Mongoid to store
|
||||
an extra foreign key for the root, in more complex cases where
|
||||
%{embedded} is multiple levels deep a key would need to be stored
|
||||
for each parent up the hierarchy."
|
||||
resolution: "Consider not embedding %{embedded}, or do the key
|
||||
storage and access in a custom manner in the application code."
|
||||
mixed_session_configuration:
|
||||
message: "Both uri and standard configuration options defined for
|
||||
session: '%{name}'."
|
||||
summary: "Instead of simply giving uri or standard options a
|
||||
preference order, Mongoid assumes that you have made a mistake in
|
||||
your configuration and requires that you provide one or the other,
|
||||
but not both. The options that were provided were: %{config}."
|
||||
resolution: "Provide either only a uri as configuration or only
|
||||
standard options."
|
||||
nested_attributes_metadata_not_found:
|
||||
message: "Could not find metadata for relation '%{name}' on model:
|
||||
%{klass}."
|
||||
summary: "When defining nested attributes for a relation, Mongoid
|
||||
needs to access the metadata for the relation '%{name}' in order
|
||||
if add autosave functionality to it, if applicable. Either no
|
||||
relation named '%{name}' could be found, or the relation had not
|
||||
been defined yet."
|
||||
resolution: "Make sure that there is a relation defined named
|
||||
'%{name}' on %{klass} or that the relation definition comes before
|
||||
the accepts_nested_attributes_for macro in the model - order
|
||||
matters so that Mongoid has access to the metadata.\n\n
|
||||
Example:\n
|
||||
\_\_class Band\n
|
||||
\_\_\_\_include Mongoid::Document\n
|
||||
\_\_\_\_has_many :albums\n
|
||||
\_\_\_\_accepts_nested_attributes_for :albums\n
|
||||
\_\_end\n\n"
|
||||
no_default_session:
|
||||
message: "No default session configuration is defined."
|
||||
summary: "The configuration provided settings for: %{keys}, but
|
||||
Mongoid requires a :default to be defined at minimum."
|
||||
resolution: "If configuring via a mongoid.yml, ensure that within
|
||||
your :sessions section a :default session is defined.\n\n
|
||||
Example:\n
|
||||
\_\_development:\n
|
||||
\_\_\_\_sessions:\n
|
||||
\_\_\_\_\_\_default:\n
|
||||
\_\_\_\_\_\_\_\_hosts:\n
|
||||
\_\_\_\_\_\_\_\_\_\_- localhost:27017\n\n"
|
||||
no_environment:
|
||||
message: "Could not load the configuration since no environment
|
||||
was defined."
|
||||
summary: "Mongoid attempted to find the appropriate environment
|
||||
but no Rails.env, Sinatra::Base.environment, RACK_ENV, or
|
||||
MONGOID_ENV could be found."
|
||||
resolution: "Make sure some environment is set from the mentioned
|
||||
options. Mongoid cannot load configuration from the yaml without
|
||||
knowing which environment it is in, and we have considered
|
||||
defaulting to development an undesireable side effect of this not
|
||||
being defined."
|
||||
no_map_reduce_output:
|
||||
message: "No output location was specified for the map/reduce
|
||||
operation."
|
||||
summary: "When executing a map/reduce, you must provide the output
|
||||
location of the results. The attempted command was: %{command}."
|
||||
resolution: "Provide the location that the output of the operation
|
||||
is to go by chaining an #out call to the map/reduce.\n\n
|
||||
Example:\n
|
||||
\_\_Band.map_reduce(map, reduce).out(inline: 1)\n\n
|
||||
Valid options for the out function are:\n
|
||||
\_\_inline: 1\n
|
||||
\_\_merge: 'collection-name'\n
|
||||
\_\_replace: 'collection-name'\n
|
||||
\_\_reduce: 'collection-name'\n\n"
|
||||
no_metadata:
|
||||
message: "Metadata not found for document of type %{klass}."
|
||||
summary: "Mongoid sets the metadata of a relation on the document
|
||||
when it is either loaded from within the relation, or added to
|
||||
one. The presence of the metadata is required in order to
|
||||
provide various functionality around relations. Most likely you
|
||||
are getting this error because the document is embedded and was
|
||||
attempted to be persisted without being associated with a parent,
|
||||
or the relation was not properly defined."
|
||||
resolution: "Ensure that your relations on the %{klass} model
|
||||
are all properly defined, and that the inverse relations
|
||||
are also properly defined. Embedded relations must have both the
|
||||
parent (embeds_one/embeds_many) and the inverse (embedded_in)
|
||||
present in order to work properly."
|
||||
no_parent:
|
||||
message: "Cannot persist embedded document %{klass} without a
|
||||
parent document."
|
||||
summary: "If the document is embedded, in order to be persisted it
|
||||
must always have a reference to its parent document. This is
|
||||
most likely caused by either calling %{klass}.create or
|
||||
%{klass}.create! without setting the parent document as an
|
||||
attribute."
|
||||
resolution: "Ensure that you've set the parent relation if
|
||||
instantiating the embedded document directly, or always create new
|
||||
embedded documents via the parent relation."
|
||||
no_session_config:
|
||||
message: "No configuration could be found for a session named
|
||||
'%{name}'."
|
||||
summary: "When attempting to create the new session, Mongoid could
|
||||
not find a session configuration for the name: '%{name}'. This is
|
||||
necessary in order to know the host, port, and options needed
|
||||
to connect."
|
||||
resolution: "Double check your mongoid.yml to make sure under the
|
||||
sessions key that a configuration exists for '%{name}'. If you
|
||||
have set the configuration programatically, ensure that '%{name}'
|
||||
exists in the configuration hash."
|
||||
no_sessions_config:
|
||||
message: "No sessions configuration provided."
|
||||
summary: "Mongoid's configuration requires that you provide details
|
||||
about each session that can be connected to, and requires in
|
||||
the sessions config at least 1 default session to exist."
|
||||
resolution: "Double check your mongoid.yml to make sure that you
|
||||
have a top-level sessions key with at least 1 default session
|
||||
configuration for it. You can regenerate a new mongoid.yml for
|
||||
assistance via `rails g mongoid:config`.\n\n
|
||||
Example:\n
|
||||
\_\_development:\n
|
||||
\_\_\_\_sessions:\n
|
||||
\_\_\_\_\_\_default:\n
|
||||
\_\_\_\_\_\_\_\_database: mongoid_dev\n
|
||||
\_\_\_\_\_\_\_\_hosts:\n
|
||||
\_\_\_\_\_\_\_\_\_\_- localhost:27017\n\n"
|
||||
no_session_database:
|
||||
message: "No database provided for session configuration: :%{name}."
|
||||
summary: "Each session configuration must provide a database so Mongoid
|
||||
knows where the default database to persist to. What was provided
|
||||
was: %{config}."
|
||||
resolution: "If configuring via a mongoid.yml, ensure that within
|
||||
your :%{name} section a :database value for the session's default
|
||||
database is defined.\n\n
|
||||
Example:\n
|
||||
\_\_development:\n
|
||||
\_\_\_\_sessions:\n
|
||||
\_\_\_\_\_\_%{name}:\n
|
||||
\_\_\_\_\_\_\_\_database: my_app_db\n
|
||||
\_\_\_\_\_\_\_\_hosts:\n
|
||||
\_\_\_\_\_\_\_\_\_\_- localhost:27017\n\n"
|
||||
no_session_hosts:
|
||||
message: "No hosts provided for session configuration: :%{name}."
|
||||
summary: "Each session configuration must provide hosts so Mongoid
|
||||
knows where the database server is located. What was provided
|
||||
was: %{config}."
|
||||
resolution: "If configuring via a mongoid.yml, ensure that within
|
||||
your :%{name} section a :hosts value for the session hosts is
|
||||
defined.\n\n
|
||||
Example:\n
|
||||
\_\_development:\n
|
||||
\_\_\_\_sessions:\n
|
||||
\_\_\_\_\_\_%{name}:\n
|
||||
\_\_\_\_\_\_\_\_database: my_app_db\n
|
||||
\_\_\_\_\_\_\_\_hosts:\n
|
||||
\_\_\_\_\_\_\_\_\_\_- localhost:27017\n\n"
|
||||
readonly_attribute:
|
||||
message: "Attempted to set the readonly attribute '%{name}' with
|
||||
the value: %{value}."
|
||||
summary: "Attributes flagged as readonly via Model.attr_readonly
|
||||
can only have values set when the document is a new record."
|
||||
resolution: "Don't define '%{name}' as readonly, or do not attempt
|
||||
to update its value after the document is persisted."
|
||||
readonly_document:
|
||||
message: "Attempted to persist the readonly document '%{klass}'."
|
||||
summary: "Documents loaded from the database using #only
|
||||
cannot be persisted."
|
||||
resolution: "Don't attempt to persist documents that are flagged as
|
||||
readonly."
|
||||
scope_overwrite:
|
||||
message: "Cannot create scope :%{scope_name}, because of existing
|
||||
method %{model_name}.%{scope_name}."
|
||||
summary: "When defining a scope that conflicts with a method that
|
||||
already exists on the model, this error will get raised if
|
||||
Mongoid.scope_overwrite_exception is set to true."
|
||||
resolution: "Change the name of the scope so it does not conflict
|
||||
with the already defined method %{model_name}, or set the
|
||||
configuration option Mongoid.scope_overwrite_exception to false,
|
||||
which is its default. In this case a warning will be logged."
|
||||
taken:
|
||||
"exisitert bereits"
|
||||
too_many_nested_attribute_records:
|
||||
message: "Accepting nested attributes for %{association} is limited
|
||||
to %{limit} records."
|
||||
summary: "More documents were sent to be processed than the allowed
|
||||
limit."
|
||||
resolution: "The limit is set as an option to the macro, for example:
|
||||
accepts_nested_attributes_for :%{association}, limit: %{limit}.
|
||||
Consider raising this limit or making sure no more are sent than
|
||||
the set value."
|
||||
unknown_attribute:
|
||||
message: "Attempted to set a value for '%{name}' which is not
|
||||
allowed on the model %{klass}."
|
||||
summary: "Without including Mongoid::Attributes::Dynamic in your model
|
||||
and the attribute does not already exist in the attributes hash,
|
||||
attempting to call %{klass}#%{name}= for it is not allowed. This is
|
||||
also triggered by passing the attribute to any method that accepts an
|
||||
attributes hash, and is raised instead of getting a NoMethodError."
|
||||
resolution: "You can include Mongoid::Attributes::Dynamic if you
|
||||
expect to be writing values for undefined fields often."
|
||||
unsaved_document:
|
||||
message: "Attempted to save %{document} before the parent %{base}."
|
||||
summary: "You cannot call create or create! through the
|
||||
relation (%{document}) who's parent (%{base}) is
|
||||
not already saved. This would case the database to be out of sync
|
||||
since the child could potentially reference a nonexistant parent."
|
||||
resolution: "Make sure to only use create or create! when the parent
|
||||
document %{base} is persisted."
|
||||
unsupported_javascript:
|
||||
message: "Executing Javascript $where selector on an embedded criteria
|
||||
is not supported."
|
||||
summary: "Mongoid only supports providing a hash of arguments to
|
||||
#where criterion on embedded documents. Since %{klass} is embedded,
|
||||
the expression %{javascript} is not allowed."
|
||||
resolution: "Please provide a standard hash to #where when the criteria
|
||||
is for an embedded relation."
|
||||
validations:
|
||||
message: "Validation of %{document} failed."
|
||||
summary: "The following errors were found: %{errors}"
|
||||
resolution: "Try persisting the document with valid data or remove
|
||||
the validations."
|
||||
delete_restriction:
|
||||
message: "Cannot delete %{document} because of dependent '%{relation}'."
|
||||
summary: "When defining '%{relation}' with a :dependent => :restrict,
|
||||
Mongoid will raise an error when attempting to delete the
|
||||
%{document} when the child '%{relation}' still has documents in it."
|
||||
resolution: "Don't attempt to delete the parent %{document} when
|
||||
it has children, or change the dependent option on the relation."
|
||||
@@ -12,6 +12,11 @@ test:
|
||||
database: ch420_test
|
||||
hosts:
|
||||
- localhost:27017
|
||||
|
||||
staging:
|
||||
clients:
|
||||
default:
|
||||
uri: <%= ENV['MONGODB_URI'] %>
|
||||
|
||||
production:
|
||||
clients:
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Configures your navigation
|
||||
SimpleNavigation::Configuration.run do |navigation|
|
||||
# Specify a custom renderer if needed.
|
||||
# The default renderer is SimpleNavigation::Renderer::List which renders HTML lists.
|
||||
# The renderer can also be specified as option in the render_navigation call.
|
||||
# navigation.renderer = Your::Custom::Renderer
|
||||
|
||||
# Specify the class that will be applied to active navigation items. Defaults to 'selected'
|
||||
#navigation.selected_class = 'selected'
|
||||
|
||||
# Specify the class that will be applied to the current leaf of
|
||||
# active navigation items. Defaults to 'simple-navigation-active-leaf'
|
||||
#navigation.active_leaf_class = 'simple-navigation-active-leaf'
|
||||
|
||||
# Specify if item keys are added to navigation items as id. Defaults to true
|
||||
#navigation.autogenerate_item_ids = true
|
||||
|
||||
# You can override the default logic that is used to autogenerate the item ids.
|
||||
# To do this, define a Proc which takes the key of the current item as argument.
|
||||
# The example below would add a prefix to each key.
|
||||
#navigation.id_generator = Proc.new {|key| "my-prefix-#{key}"}
|
||||
|
||||
# If you need to add custom html around item names, you can define a proc that
|
||||
# will be called with the name you pass in to the navigation.
|
||||
# The example below shows how to wrap items spans.
|
||||
#navigation.name_generator = Proc.new {|name, item| "<span>#{name}</span>"}
|
||||
|
||||
# Specify if the auto highlight feature is turned on (globally, for the whole navigation). Defaults to true
|
||||
#navigation.auto_highlight = true
|
||||
|
||||
# Specifies whether auto highlight should ignore query params and/or anchors when
|
||||
# comparing the navigation items with the current URL. Defaults to true
|
||||
#navigation.ignore_query_params_on_auto_highlight = true
|
||||
#navigation.ignore_anchors_on_auto_highlight = true
|
||||
|
||||
# If this option is set to true, all item names will be considered as safe (passed through html_safe). Defaults to false.
|
||||
#navigation.consider_item_names_as_safe = false
|
||||
|
||||
# Define the primary navigation
|
||||
navigation.items do |primary|
|
||||
# Add an item to the primary navigation. The following params apply:
|
||||
# key - a symbol which uniquely defines your navigation item in the scope of the primary_navigation
|
||||
# name - will be displayed in the rendered navigation. This can also be a call to your I18n-framework.
|
||||
# url - the address that the generated item links to. You can also use url_helpers (named routes, restful routes helper, url_for etc.)
|
||||
# options - can be used to specify attributes that will be included in the rendered navigation item (e.g. id, class etc.)
|
||||
# some special options that can be set:
|
||||
# :if - Specifies a proc to call to determine if the item should
|
||||
# be rendered (e.g. <tt>if: -> { current_user.admin? }</tt>). The
|
||||
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
||||
# :unless - Specifies a proc to call to determine if the item should not
|
||||
# be rendered (e.g. <tt>unless: -> { current_user.admin? }</tt>). The
|
||||
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
||||
# :method - Specifies the http-method for the generated link - default is :get.
|
||||
# :highlights_on - if autohighlighting is turned off and/or you want to explicitly specify
|
||||
# when the item should be highlighted, you can set a regexp which is matched
|
||||
# against the current URI. You may also use a proc, or the symbol <tt>:subpath</tt>.
|
||||
#
|
||||
|
||||
primary.item :greendays, '#Greensaturday', greendays_path
|
||||
|
||||
unless supporter_signed_in?
|
||||
primary.item :home, I18n.t('.shared.topnavigation.support'), "/#{I18n.locale}"
|
||||
end
|
||||
|
||||
primary.item :initiative, I18n.t('.shared.topnavigation.initiative'), initiative_text_path do | initiative |
|
||||
initiative.item :arguments, I18n.t('.shared.topnavigation.arguments'), arguments_path
|
||||
initiative.item :faq, I18n.t('.shared.topnavigation.faq'), faq_path
|
||||
initiative.item :numbers, I18n.t('.shared.topnavigation.numbers'), numbers_path
|
||||
initiative.item :collection_concept, I18n.t('.shared.topnavigation.collection_concept'), collection_concept_path
|
||||
end
|
||||
|
||||
primary.item :statements, I18n.t('.shared.topnavigation.statements'), statements_path do |statements|
|
||||
statements.item :new_statement, I18n.t('.supporters.publicity.renew'), new_publicity_path
|
||||
end
|
||||
|
||||
primary.item :donation, I18n.t('donation'), donation_path
|
||||
|
||||
primary.item :network, I18n.t('.shared.topnavigation.network'), network_path do | network |
|
||||
network.item :signature_collections, I18n.t('.shared.topnavigation.signature_collections'), network_signature_collections_path
|
||||
end
|
||||
|
||||
|
||||
primary.item :blog, 'Blog', 'http://blog.cannabis-initiative.ch/', link_html: { target: '_blank'}
|
||||
if supporter_signed_in?
|
||||
primary.item :home, I18n.t('.shared.topnavigation.my_account'), "/#{I18n.locale}" do |my_account|
|
||||
my_account.item :edit_account, I18n.t('.supporters.new.edit'), edit_supporter_registration_path()
|
||||
my_account.item :sign_out, I18n.t('.shared.topnavigation.sign_out'), destroy_supporter_session_path, link_html: { 'data-method' => :delete }
|
||||
end
|
||||
else
|
||||
primary.item :home, I18n.t('.shared.topnavigation.sign_in'), new_supporter_session_path
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
+17
-5
@@ -1,30 +1,42 @@
|
||||
Rails.application.routes.draw do
|
||||
|
||||
devise_for :supporters
|
||||
root to: 'supporters#new'
|
||||
|
||||
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
|
||||
|
||||
get "/pages/:page" => "pages#show"
|
||||
|
||||
namespace :admin do
|
||||
get '/map', to: 'pages#map', as: :map
|
||||
resources :publicities
|
||||
# resources :supporters, only: :index
|
||||
end
|
||||
|
||||
localized do
|
||||
get 'network', to: 'pages#show', as: :network, page: 'network'
|
||||
namespace :network do
|
||||
resources :signature_collections
|
||||
end
|
||||
|
||||
resources :greendays
|
||||
get '/initiative_text', to: 'pages#show', as: :initiative_text, page: 'initiative_text'
|
||||
get '/arguments', to: 'pages#show', as: :arguments, page: 'arguments'
|
||||
get '/faq', to: 'pages#show', as: :faq, page: 'faq'
|
||||
get '/terms_and_conditions', to: 'pages#show', as: :terms_and_conditions, page: 'terms_and_conditions'
|
||||
get '/sponsoring', to: 'pages#show', as: :sponsoring, page: 'sponsoring'
|
||||
get '/donation', to: 'pages#show', as: :donation, page: 'donation'
|
||||
get '/numbers', to: 'pages#show', as: :numbers, page: 'numbers'
|
||||
get '/collection_concept', to: 'pages#show', as: :collection_concept, page: 'collection_concept'
|
||||
get '/statements', to: 'pages#show', as: :statements, page: 'statements'
|
||||
end
|
||||
|
||||
get '/cities_autocomplete', to: 'cities_autocomplete#index', as: :cities_autocomplete
|
||||
scope '/:locale' do
|
||||
scope '/:locale', locale: /de|it|fr/ do
|
||||
get '/', to: 'supporters#new'
|
||||
resources :supporters
|
||||
resources :supporters, only: [:new, :create]
|
||||
resource :publicity
|
||||
get '/thanks', to: 'pages#thanks', as: :thanks
|
||||
get '/spenden', to: 'pages#spenden', as: :spenden
|
||||
resources :charges
|
||||
end
|
||||
|
||||
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
|
||||
end
|
||||
|
||||
@@ -16,6 +16,10 @@ development:
|
||||
test:
|
||||
secret_key_base: f9c7c3d851c4c3c44390cb50e69491b241ae26d0e3b9d488579590963d30ff8e7e5d91b0930ec9b282661a59b24ef6abe4fc5615607e787f9e0ac76cb81f42fd
|
||||
|
||||
staging:
|
||||
secret_key_base: 88f843073f09ab3f825b53df5d179d8818abea1848cd4717a4f6f0e3c8b4cb11c719d2fe5cb867755cab5d3aaf7feab62c6f9df7d56a270ebeaf7e0ab9be6ba8
|
||||
|
||||
|
||||
# Do not keep production secrets in the repository,
|
||||
# instead read values from the environment.
|
||||
production:
|
||||
|
||||
@@ -5,3 +5,11 @@
|
||||
#
|
||||
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
|
||||
# Mayor.create(name: 'Emanuel', city: cities.first)
|
||||
|
||||
@cities = CSV.read Rails.root.join('db', 'plz_ch.csv')
|
||||
@cities.sample(122).each do |city|
|
||||
tmp_date = DateTime.now + rand(50)
|
||||
Network::SignatureCollection.create(location_zip: city.first, location_name: city.last, location_address: Faker::Address.street_address, event_date_start: tmp_date, event_date_end: tmp_date+rand(10).to_f/10)
|
||||
end
|
||||
|
||||
# Network::SignatureCollection.where(location: {"$near" => x.location, '$maxDistance' => 1.fdiv(111.12)}).map &:location_name
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
class MailChimpBatchUpdate
|
||||
def initialize(api_key, list_id)
|
||||
@mailchimp = Mailchimp::API.new(api_key)
|
||||
@list_id = list_id
|
||||
end
|
||||
|
||||
def update_all
|
||||
subscribers = []
|
||||
|
||||
Supporter.each_with_index do |supporter, index|
|
||||
subscribers.push(subscriber(supporter))
|
||||
if index.modulo(20).zero?
|
||||
batch_subscribe(subscribers)
|
||||
subscribers = []
|
||||
end
|
||||
end
|
||||
|
||||
batch_subscribe(subscribers)
|
||||
end
|
||||
|
||||
def batch_subscribe(subscribers)
|
||||
@mailchimp.lists.batch_subscribe(@list_id, subscribers, false, true, false)
|
||||
end
|
||||
|
||||
def subscriber(supporter)
|
||||
{ 'EMAIL' => { 'email' => supporter.email }, 'language' => supporter.language, :EMAIL_TYPE => 'html',
|
||||
:merge_vars => {
|
||||
'EMAIL' => supporter.email,
|
||||
'FNAME' => supporter.first_name,
|
||||
'LNAME' => supporter.last_name,
|
||||
'SUPPORT' => supporter.support,
|
||||
'MEMBERSHIP' => supporter.li_membership.to_s,
|
||||
'AGE' => supporter.age_category,
|
||||
'LANG' => supporter.language,
|
||||
'ZIP' => supporter.zip
|
||||
} }
|
||||
end
|
||||
|
||||
def update_unsubscibed
|
||||
unsubscribed_members = @mailchimp.lists.members(@list_id, 'unsubscribed', limit: 100)
|
||||
unsubscribed_members['data'].each do |member|
|
||||
Supporter.where(email: member['email']).each do |supporter|
|
||||
supporter.update_attributes unsubscribed: true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
+4
-1
@@ -1,4 +1,7 @@
|
||||
helper = ApplicationController.helpers
|
||||
|
||||
never_signed_in = Supporter.where(sign_in_count: nil)
|
||||
never_signed_in.each_with_index { |u, i| puts "#{i} #{u.email}"; u.update_attributes password: "#{u.support}#{helper.number_with_delimiter(u.zip, delimiter: ',')}" }
|
||||
never_signed_in.each_with_index do |u, i|
|
||||
puts "#{i} #{u.email}"
|
||||
u.update_attributes password: "#{u.support}#{helper.number_with_delimiter(u.zip, delimiter: ',')}"
|
||||
end
|
||||
|
||||
+2
-5
@@ -1,5 +1,2 @@
|
||||
# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
|
||||
#
|
||||
# To ban all spiders from the entire site uncomment the next two lines:
|
||||
# User-agent: *
|
||||
# Disallow: /
|
||||
User-agent: *
|
||||
Allow: /
|
||||
@@ -0,0 +1,141 @@
|
||||
require 'rails_helper'
|
||||
|
||||
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
||||
# It demonstrates how one might use RSpec to specify the controller code that
|
||||
# was generated by Rails when you ran the scaffold generator.
|
||||
#
|
||||
# It assumes that the implementation code is generated by the rails scaffold
|
||||
# generator. If you are using any extension libraries to generate different
|
||||
# controller code, this generated spec may or may not pass.
|
||||
#
|
||||
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
||||
# of tools you can use to make these specs even more expressive, but we're
|
||||
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
||||
#
|
||||
# Compared to earlier versions of this generator, there is very limited use of
|
||||
# stubs and message expectations in this spec. Stubs are only used when there
|
||||
# is no simpler way to get a handle on the object needed for the example.
|
||||
# Message expectations are only used when there is no simpler way to specify
|
||||
# that an instance is receiving a specific message.
|
||||
#
|
||||
# Also compared to earlier versions of this generator, there are no longer any
|
||||
# expectations of assigns and templates rendered. These features have been
|
||||
# removed from Rails core in Rails 5, but can be added back in via the
|
||||
# `rails-controller-testing` gem.
|
||||
|
||||
RSpec.describe Network::SignatureCollectionsController, type: :controller do
|
||||
|
||||
# This should return the minimal set of attributes required to create a valid
|
||||
# Network::SignatureCollection. As you add validations to Network::SignatureCollection, be sure to
|
||||
# adjust the attributes here as well.
|
||||
let(:valid_attributes) {
|
||||
skip("Add a hash of attributes valid for your model")
|
||||
}
|
||||
|
||||
let(:invalid_attributes) {
|
||||
skip("Add a hash of attributes invalid for your model")
|
||||
}
|
||||
|
||||
# This should return the minimal set of values that should be in the session
|
||||
# in order to pass any filters (e.g. authentication) defined in
|
||||
# Network::SignatureCollectionsController. Be sure to keep this updated too.
|
||||
let(:valid_session) { {} }
|
||||
|
||||
describe "GET #index" do
|
||||
it "returns a success response" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
get :index, {}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET #show" do
|
||||
it "returns a success response" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
get :show, {:id => signature_collection.to_param}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET #new" do
|
||||
it "returns a success response" do
|
||||
get :new, {}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET #edit" do
|
||||
it "returns a success response" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
get :edit, {:id => signature_collection.to_param}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST #create" do
|
||||
context "with valid params" do
|
||||
it "creates a new Network::SignatureCollection" do
|
||||
expect {
|
||||
post :create, {:network_signature_collection => valid_attributes}, valid_session
|
||||
}.to change(Network::SignatureCollection, :count).by(1)
|
||||
end
|
||||
|
||||
it "redirects to the created network_signature_collection" do
|
||||
post :create, {:network_signature_collection => valid_attributes}, valid_session
|
||||
expect(response).to redirect_to(Network::SignatureCollection.last)
|
||||
end
|
||||
end
|
||||
|
||||
context "with invalid params" do
|
||||
it "returns a success response (i.e. to display the 'new' template)" do
|
||||
post :create, {:network_signature_collection => invalid_attributes}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "PUT #update" do
|
||||
context "with valid params" do
|
||||
let(:new_attributes) {
|
||||
skip("Add a hash of attributes valid for your model")
|
||||
}
|
||||
|
||||
it "updates the requested network_signature_collection" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
put :update, {:id => signature_collection.to_param, :network_signature_collection => new_attributes}, valid_session
|
||||
signature_collection.reload
|
||||
skip("Add assertions for updated state")
|
||||
end
|
||||
|
||||
it "redirects to the network_signature_collection" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
put :update, {:id => signature_collection.to_param, :network_signature_collection => valid_attributes}, valid_session
|
||||
expect(response).to redirect_to(signature_collection)
|
||||
end
|
||||
end
|
||||
|
||||
context "with invalid params" do
|
||||
it "returns a success response (i.e. to display the 'edit' template)" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
put :update, {:id => signature_collection.to_param, :network_signature_collection => invalid_attributes}, valid_session
|
||||
expect(response).to be_success
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "DELETE #destroy" do
|
||||
it "destroys the requested network_signature_collection" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
expect {
|
||||
delete :destroy, {:id => signature_collection.to_param}, valid_session
|
||||
}.to change(Network::SignatureCollection, :count).by(-1)
|
||||
end
|
||||
|
||||
it "redirects to the network_signature_collections list" do
|
||||
signature_collection = Network::SignatureCollection.create! valid_attributes
|
||||
delete :destroy, {:id => signature_collection.to_param}, valid_session
|
||||
expect(response).to redirect_to(network_signature_collections_url)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
FactoryGirl.define do
|
||||
factory :publicity do
|
||||
organisation { Faker::Company.name }
|
||||
statement { Faker::Lorem.paragraph }
|
||||
avatar { File.new("#{Rails.root}/spec/support/fixtures/image.jpg") }
|
||||
end
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user