source "https://rubygems.org"
# Require rails
- gem "rails", "4.2.7"
+ gem "rails", "5.0.4"
# Require things which have moved to gems in ruby 1.9
gem "bigdecimal", "~> 1.1.0", :platforms => :ruby_19
gem "uglifier", ">= 1.3.0"
# Use CoffeeScript for .js.coffee assets and views
- gem "coffee-rails", "~> 4.1.0"
+ gem "coffee-rails", "~> 4.2"
# Use jquery as the JavaScript library
gem "jquery-rails"
gem "autoprefixer-rails"
# Use image_optim to optimise images
- gem "image_optim", ">= 0.22.0"
+ gem "image_optim_rails"
# Load rails plugins
- gem "rails-i18n", "~> 4.0.0"
+ gem "actionpack-page_caching"
+ gem "composite_primary_keys", "~> 9.0.7"
+ gem "deadlock_retry", ">= 1.2.0"
gem "dynamic_form"
- gem "rinku", ">= 1.2.2", :require => "rails_rinku"
- gem "oauth-plugin", ">= 0.5.1"
- gem "validates_email_format_of", ">= 1.5.1"
- gem "composite_primary_keys", "~> 8.1.0"
gem "http_accept_language", "~> 2.0.0"
+ gem "i18n-js", ">= 3.0.0"
+ gem "oauth-plugin", ">= 0.5.1"
gem "paperclip", "~> 4.0"
- gem "deadlock_retry", ">= 1.2.0"
- gem "i18n-js", ">= 3.0.0.rc10"
gem "rack-cors"
- gem "actionpack-page_caching"
+ gem "rails-i18n", "~> 4.0.0"
+ gem "record_tag_helper"
+ gem "rinku", ">= 1.2.2", :require => "rails_rinku"
+ gem "validates_email_format_of", ">= 1.5.1"
# Sanitise URIs
gem "rack-uri_sanitizer"
# Omniauth for authentication
gem "omniauth"
- gem "omniauth-openid"
- gem "omniauth-google-oauth2", ">= 0.2.7"
gem "omniauth-facebook"
- gem "omniauth-windowslive"
gem "omniauth-github"
+ gem "omniauth-google-oauth2", ">= 0.2.7"
+ gem "omniauth-mediawiki", ">= 0.0.3"
+ gem "omniauth-openid"
+ gem "omniauth-windowslive"
# Markdown formatting support
gem "redcarpet"
+# For status transitions of Issues
+gem "aasm"
+
# Load libxml support for XML parsing and generation
gem "libxml-ruby", ">= 2.0.5", :require => "libxml"
# Use for HTML sanitisation
- gem "sanitize"
gem "htmlentities"
+ gem "sanitize"
# Load SystemTimer for implementing request timeouts
gem "SystemTimer", ">= 1.1.3", :require => "system_timer", :platforms => :ruby_18
# Load faraday for mockable HTTP client
gem "faraday"
- # Load httpclient and soap4r for SOAP support for Quova GeoIP queries
- gem "httpclient"
- gem "soap4r-ruby1.9"
+ # Load geoip for querying Maxmind GeoIP database
+ gem "geoip"
+
+ # Load rotp to generate TOTP tokens
+ gem "rotp"
# Load memcache client in case we are using it
gem "dalli"
gem "kgio"
+ # Load secure_headers for Content-Security-Policy support
+ gem "secure_headers"
+
+ # Load canonical-rails to generate canonical URLs
+ gem "canonical-rails"
+
# Used to generate logstash friendly log files
gem "logstasher"
# Gems useful for development
group :development do
+ gem "listen"
gem "vendorer"
end
# Gems needed for running tests
group :test do
- gem "rubocop"
- gem "timecop"
gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
+ gem "rails-controller-testing"
+ gem "rubocop"
+ gem "webmock"
end
# Needed in development as well so rake can see konacha tasks
group :development, :test do
+ gem "coveralls", :require => false
+ gem "factory_girl_rails"
gem "jshint"
- gem "konacha"
+ # gem "konacha"
gem "poltergeist"
- gem "coveralls", :require => false
end
remote: https://rubygems.org/
specs:
SystemTimer (1.2.3)
- actionmailer (4.2.7)
- actionpack (= 4.2.7)
- actionview (= 4.2.7)
- activejob (= 4.2.7)
+ aasm (4.1.0)
+ actioncable (5.0.4)
+ actionpack (= 5.0.4)
+ nio4r (>= 1.2, < 3.0)
+ websocket-driver (~> 0.6.1)
+ actionmailer (5.0.4)
+ actionpack (= 5.0.4)
+ actionview (= 5.0.4)
+ activejob (= 5.0.4)
mail (~> 2.5, >= 2.5.4)
- rails-dom-testing (~> 1.0, >= 1.0.5)
- actionpack (4.2.7)
- actionview (= 4.2.7)
- activesupport (= 4.2.7)
- rack (~> 1.6)
- rack-test (~> 0.6.2)
- rails-dom-testing (~> 1.0, >= 1.0.5)
+ rails-dom-testing (~> 2.0)
+ actionpack (5.0.4)
+ actionview (= 5.0.4)
+ activesupport (= 5.0.4)
+ rack (~> 2.0)
+ rack-test (~> 0.6.3)
+ rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionpack-page_caching (1.0.2)
- actionpack (>= 4.0.0, < 5)
- actionview (4.2.7)
- activesupport (= 4.2.7)
+ actionpack-page_caching (1.1.0)
+ actionpack (>= 4.0.0, < 6)
+ actionview (5.0.4)
+ activesupport (= 5.0.4)
builder (~> 3.1)
erubis (~> 2.7.0)
- rails-dom-testing (~> 1.0, >= 1.0.5)
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
- activejob (4.2.7)
- activesupport (= 4.2.7)
- globalid (>= 0.3.0)
- activemodel (4.2.7)
- activesupport (= 4.2.7)
- builder (~> 3.1)
- activerecord (4.2.7)
- activemodel (= 4.2.7)
- activesupport (= 4.2.7)
- arel (~> 6.0)
- activesupport (4.2.7)
+ rails-dom-testing (~> 2.0)
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
+ activejob (5.0.4)
+ activesupport (= 5.0.4)
+ globalid (>= 0.3.6)
+ activemodel (5.0.4)
+ activesupport (= 5.0.4)
+ activerecord (5.0.4)
+ activemodel (= 5.0.4)
+ activesupport (= 5.0.4)
+ arel (~> 7.0)
+ activesupport (5.0.4)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (~> 0.7)
- json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
- thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
- addressable (2.4.0)
- arel (6.0.3)
+ addressable (2.5.1)
+ public_suffix (~> 2.0, >= 2.0.2)
+ arel (7.1.4)
ast (2.3.0)
- autoprefixer-rails (6.3.7)
+ autoprefixer-rails (7.1.1.2)
execjs
bigdecimal (1.1.0)
- builder (3.2.2)
- capybara (2.7.1)
+ builder (3.2.3)
+ canonical-rails (0.2.0)
+ rails (>= 4.1, < 5.2)
+ capybara (2.14.3)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
- climate_control (0.0.3)
- activesupport (>= 3.0)
+ climate_control (0.2.0)
cliver (0.3.2)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
- coffee-rails (4.1.1)
+ coffee-rails (4.2.2)
coffee-script (>= 2.2.0)
- railties (>= 4.0.0, < 5.1.x)
+ railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
- coffee-script-source (1.10.0)
- colorize (0.8.1)
- composite_primary_keys (8.1.3)
- activerecord (~> 4.2.0)
- concurrent-ruby (1.0.2)
- coveralls (0.8.14)
+ coffee-script-source (1.12.2)
+ composite_primary_keys (9.0.7)
+ activerecord (~> 5.0.0)
+ concurrent-ruby (1.0.5)
+ coveralls (0.8.21)
json (>= 1.8, < 3)
- simplecov (~> 0.12.0)
+ simplecov (~> 0.14.1)
term-ansicolor (~> 1.3)
- thor (~> 0.19.1)
- tins (~> 1.6.0)
+ thor (~> 0.19.4)
+ tins (~> 1.6)
+ crack (0.4.3)
+ safe_yaml (~> 1.0.0)
crass (1.0.2)
dalli (2.7.6)
deadlock_retry (1.2.0)
dynamic_form (1.1.4)
erubis (2.7.0)
execjs (2.7.0)
- exifr (1.2.4)
- faraday (0.9.2)
+ exifr (1.2.5)
+ factory_girl (4.8.0)
+ activesupport (>= 3.0.0)
+ factory_girl_rails (4.8.0)
+ factory_girl (~> 4.8.0)
+ railties (>= 3.0.0)
+ faraday (0.12.1)
multipart-post (>= 1.2, < 3)
- fspath (2.1.1)
- globalid (0.3.6)
- activesupport (>= 4.1.0)
- hashie (3.4.4)
+ ffi (1.9.18)
+ fspath (3.1.0)
+ geoip (1.6.3)
+ globalid (0.4.0)
+ activesupport (>= 4.2.0)
+ hashdiff (0.3.4)
+ hashie (3.5.5)
htmlentities (4.3.4)
http_accept_language (2.0.5)
- httpclient (2.8.0)
- i18n (0.7.0)
- i18n-js (3.0.0.rc13)
+ i18n (0.8.4)
+ i18n-js (3.0.0)
i18n (~> 0.6, >= 0.6.6)
- image_optim (0.22.1)
+ image_optim (0.24.3)
exifr (~> 1.2, >= 1.2.2)
- fspath (~> 2.1)
- image_size (~> 1.3)
+ fspath (~> 3.0)
+ image_size (~> 1.5)
in_threads (~> 1.3)
progress (~> 3.0, >= 3.0.1)
- image_size (1.4.2)
- in_threads (1.3.1)
- jquery-rails (4.1.1)
+ image_optim_rails (0.4.0)
+ image_optim (~> 0.24.0)
+ rails
+ sprockets
+ image_size (1.5.0)
+ in_threads (1.4.0)
+ jquery-rails (4.3.1)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- jshint (1.4.0)
+ jshint (1.5.0)
execjs (>= 1.4.0)
multi_json (~> 1.0)
therubyracer (~> 0.12.1)
- json (1.8.3)
+ json (2.1.0)
jsonify (0.3.1)
multi_json (~> 1.0)
jsonify-rails (0.3.2)
actionpack
jsonify (< 0.4.0)
- jwt (1.5.4)
- kgio (2.10.0)
- konacha (4.0.0)
- actionpack (>= 4.1, < 5)
- capybara
- colorize
- railties (>= 4.1, < 5)
- sprockets (>= 2, < 4)
- sprockets-rails (>= 2, < 4)
- tilt
- libv8 (3.16.14.15)
- libxml-ruby (2.9.0)
+ jwt (1.5.6)
+ kgio (2.11.0)
+ libv8 (3.16.14.19)
+ libxml-ruby (3.0.0)
+ listen (3.1.5)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ ruby_dep (~> 1.2)
logstash-event (1.2.02)
- logstasher (1.0.0)
- activerecord (>= 4.0)
+ logstasher (1.2.1)
activesupport (>= 4.0)
logstash-event (~> 1.2.0)
request_store
loofah (2.0.3)
nokogiri (>= 1.5.9)
- mail (2.6.4)
+ mail (2.6.6)
mime-types (>= 1.16, < 4)
+ method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mimemagic (0.3.0)
- mini_portile2 (2.1.0)
- minitest (5.9.0)
+ mini_portile2 (2.2.0)
+ minitest (5.10.2)
multi_json (1.12.1)
- multi_xml (0.5.5)
+ multi_xml (0.6.0)
multipart-post (2.0.0)
- nokogiri (1.6.8)
- mini_portile2 (~> 2.1.0)
- pkg-config (~> 1.1.7)
- nokogumbo (1.4.7)
+ nio4r (2.1.0)
+ nokogiri (1.8.0)
+ mini_portile2 (~> 2.2.0)
+ nokogumbo (1.4.13)
nokogiri
oauth (0.4.7)
oauth-plugin (0.5.1)
oauth (~> 0.4.4)
oauth2 (>= 0.5.0)
rack
- oauth2 (1.2.0)
- faraday (>= 0.8, < 0.10)
+ oauth2 (1.4.0)
+ faraday (>= 0.8, < 0.13)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
- omniauth (1.3.1)
- hashie (>= 1.2, < 4)
- rack (>= 1.0, < 3)
- omniauth-facebook (3.0.0)
+ omniauth (1.6.1)
+ hashie (>= 3.4.6, < 3.6.0)
+ rack (>= 1.6.2, < 3)
+ omniauth-facebook (4.0.0)
omniauth-oauth2 (~> 1.2)
- omniauth-github (1.1.2)
- omniauth (~> 1.0)
- omniauth-oauth2 (~> 1.1)
- omniauth-google-oauth2 (0.4.1)
- jwt (~> 1.5.2)
+ omniauth-github (1.3.0)
+ omniauth (~> 1.5)
+ omniauth-oauth2 (>= 1.4.0, < 2.0)
+ omniauth-google-oauth2 (0.5.0)
+ jwt (~> 1.5)
multi_json (~> 1.3)
omniauth (>= 1.1.1)
omniauth-oauth2 (>= 1.3.1)
+ omniauth-mediawiki (0.0.3)
+ jwt (~> 1.0)
+ omniauth-oauth (~> 1.0)
+ omniauth-oauth (1.1.0)
+ oauth
+ omniauth (~> 1.0)
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
omniauth-openid (1.0.1)
omniauth (~> 1.0)
rack-openid (~> 1.3.1)
- omniauth-windowslive (0.0.9.1)
- multi_json (>= 1.0.3)
- omniauth-oauth2 (~> 1.0)
+ omniauth-windowslive (0.0.12)
+ multi_json (~> 1.12)
+ omniauth-oauth2 (~> 1.4)
paperclip (4.3.7)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
cocaine (~> 0.5.5)
mime-types
mimemagic (= 0.3.0)
- parser (2.3.1.2)
+ parallel (1.11.2)
+ parser (2.4.0.0)
ast (~> 2.2)
- pg (0.18.4)
- pkg-config (1.1.7)
- poltergeist (1.10.0)
+ pg (0.21.0)
+ poltergeist (1.15.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.1)
- progress (3.1.1)
- psych (2.1.0)
+ progress (3.3.1)
+ psych (2.2.4)
+ public_suffix (2.0.5)
r2 (0.2.6)
- rack (1.6.4)
- rack-cors (0.4.0)
+ rack (2.0.3)
+ rack-cors (0.4.1)
rack-openid (1.3.1)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack-test (0.6.3)
rack (>= 1.0)
rack-uri_sanitizer (0.0.2)
- rails (4.2.7)
- actionmailer (= 4.2.7)
- actionpack (= 4.2.7)
- actionview (= 4.2.7)
- activejob (= 4.2.7)
- activemodel (= 4.2.7)
- activerecord (= 4.2.7)
- activesupport (= 4.2.7)
+ rails (5.0.4)
+ actioncable (= 5.0.4)
+ actionmailer (= 5.0.4)
+ actionpack (= 5.0.4)
+ actionview (= 5.0.4)
+ activejob (= 5.0.4)
+ activemodel (= 5.0.4)
+ activerecord (= 5.0.4)
+ activesupport (= 5.0.4)
bundler (>= 1.3.0, < 2.0)
- railties (= 4.2.7)
- sprockets-rails
- rails-deprecated_sanitizer (1.0.3)
- activesupport (>= 4.2.0.alpha)
- rails-dom-testing (1.0.7)
- activesupport (>= 4.2.0.beta, < 5.0)
- nokogiri (~> 1.6.0)
- rails-deprecated_sanitizer (>= 1.0.1)
+ railties (= 5.0.4)
+ sprockets-rails (>= 2.0.0)
+ rails-controller-testing (1.0.2)
+ actionpack (~> 5.x, >= 5.0.1)
+ actionview (~> 5.x, >= 5.0.1)
+ activesupport (~> 5.x)
+ rails-dom-testing (2.0.3)
+ activesupport (>= 4.2.0)
+ nokogiri (>= 1.6)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
- rails-i18n (4.0.9)
- i18n (~> 0.7)
- railties (~> 4.0)
- railties (4.2.7)
- actionpack (= 4.2.7)
- activesupport (= 4.2.7)
+ rails-i18n (4.0.2)
+ i18n (~> 0.6)
+ rails (>= 4.0)
+ railties (5.0.4)
+ actionpack (= 5.0.4)
+ activesupport (= 5.0.4)
+ method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- rainbow (2.1.0)
- rake (11.2.2)
- redcarpet (3.3.4)
+ rainbow (2.2.2)
+ rake
+ rake (12.0.0)
+ rb-fsevent (0.9.8)
+ rb-inotify (0.9.10)
+ ffi (>= 0.5.0, < 2)
+ record_tag_helper (1.0.0)
+ actionview (~> 5.x)
+ redcarpet (3.4.0)
ref (2.0.0)
- request_store (1.3.1)
- rinku (2.0.0)
- rubocop (0.41.2)
- parser (>= 2.3.1.1, < 3.0)
+ request_store (1.3.2)
+ rinku (2.0.2)
+ rotp (3.3.0)
+ rubocop (0.49.1)
+ parallel (~> 1.10)
+ parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-openid (2.7.0)
ruby-progressbar (1.8.1)
- sanitize (4.0.1)
+ ruby_dep (1.5.0)
+ safe_yaml (1.0.4)
+ sanitize (4.5.0)
crass (~> 1.0.2)
nokogiri (>= 1.4.4)
nokogumbo (~> 1.4.1)
- sass (3.4.22)
- sass-rails (5.0.5)
+ sass (3.4.24)
+ sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
- simplecov (0.12.0)
+ secure_headers (3.6.5)
+ useragent
+ simplecov (0.14.1)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
- simplecov-html (0.10.0)
- soap4r-ruby1.9 (2.0.5)
- sprockets (3.6.3)
+ simplecov-html (0.10.1)
+ sprockets (3.7.1)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
- sprockets-rails (3.1.1)
+ sprockets-rails (3.2.0)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
- term-ansicolor (1.3.2)
+ term-ansicolor (1.6.0)
tins (~> 1.0)
- therubyracer (0.12.2)
- libv8 (~> 3.16.14.0)
+ therubyracer (0.12.3)
+ libv8 (~> 3.16.14.15)
ref
- thor (0.19.1)
- thread_safe (0.3.5)
- tilt (2.0.5)
- timecop (0.8.1)
- tins (1.6.0)
- tzinfo (1.2.2)
+ thor (0.19.4)
+ thread_safe (0.3.6)
+ tilt (2.0.7)
+ tins (1.14.0)
+ tzinfo (1.2.3)
thread_safe (~> 0.1)
- uglifier (3.0.0)
+ uglifier (3.2.0)
execjs (>= 0.3.0, < 3)
- unicode-display_width (1.1.0)
+ unicode-display_width (1.3.0)
+ useragent (0.16.8)
validates_email_format_of (1.6.3)
i18n
vendorer (0.1.16)
- websocket-driver (0.6.4)
+ webmock (3.0.1)
+ addressable (>= 2.3.6)
+ crack (>= 0.3.2)
+ hashdiff
+ websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)
- xpath (2.0.0)
+ xpath (2.1.0)
nokogiri (~> 1.3)
PLATFORMS
DEPENDENCIES
SystemTimer (>= 1.1.3)
+ aasm
actionpack-page_caching
autoprefixer-rails
bigdecimal (~> 1.1.0)
- coffee-rails (~> 4.1.0)
- composite_primary_keys (~> 8.1.0)
+ canonical-rails
+ coffee-rails (~> 4.2)
+ composite_primary_keys (~> 9.0.7)
coveralls
dalli
deadlock_retry (>= 1.2.0)
dynamic_form
+ factory_girl_rails
faraday
+ geoip
htmlentities
http_accept_language (~> 2.0.0)
- httpclient
- i18n-js (>= 3.0.0.rc10)
- image_optim (>= 0.22.0)
+ i18n-js (>= 3.0.0)
+ image_optim_rails
jquery-rails
jshint
json
jsonify-rails
kgio
- konacha
libxml-ruby (>= 2.0.5)
+ listen
logstasher
minitest (~> 5.1)
oauth-plugin (>= 0.5.1)
omniauth-facebook
omniauth-github
omniauth-google-oauth2 (>= 0.2.7)
+ omniauth-mediawiki (>= 0.0.3)
omniauth-openid
omniauth-windowslive
paperclip (~> 4.0)
r2
rack-cors
rack-uri_sanitizer
- rails (= 4.2.7)
+ rails (= 5.0.4)
+ rails-controller-testing
rails-i18n (~> 4.0.0)
+ record_tag_helper
redcarpet
rinku (>= 1.2.2)
+ rotp
rubocop
sanitize
sass-rails (~> 5.0)
- soap4r-ruby1.9
- timecop
+ secure_headers
uglifier (>= 1.3.0)
validates_email_format_of (>= 1.5.1)
vendorer
+ webmock
BUNDLED WITH
- 1.10.6
+ 1.13.7
.red { color: $red; }
+ .piwik { border: 0; }
+
/* Rules for icons */
.icon {
background-color: black;
}
- &.disabled {
+ &.disabled,
+ &.leaflet-disabled {
background-color: #333;
background-color: rgba(0,0,0,.5);
cursor: default;
background: #fff;
font-size: 12px;
+ #sidebar_loader {
+ display: none;
+ }
+
> div {
position: relative;
float: left;
.icon.close {
float: right;
+ cursor: pointer;
}
- p.error {
- background-color: #ff7070;
- padding: 10px;
- font-weight: bold;
+ .flash {
+ padding: 15px;
+
+ picture {
+ margin-right: -25px;
+ }
+
+ div.message {
+ margin-left: 30px;
+ }
}
}
font-size: 16px;
text-stroke: 2px #fff;
background: rgba(255,255,255,.9);
- z-index: 2; // For IE9
+ z-index: 1000;
input[type="radio"] {
display: none;
}
#sidebar {
#sidebar_loader,
+ .search_more {
+ width: 100%;
+ margin: $lineheight auto;
+ }
+
.loader,
.load_more {
text-align: center;
- margin: $lineheight auto;
+ margin: auto;
width: 40px;
display: block;
}
width: 50%;
padding: 6px 10px;
word-wrap: break-word;
+ white-space: pre-wrap;
}
.browse-tag-k {
}
}
+ /* Rules for the trace view */
+
+ .trace-view {
+ .trace_pending {
+ color: red;
+ }
+
+ .geo {
+ display: inline;
+ }
+ }
+
/* Rules for the new trace form */
#new_trace {
float: left;
}
+
+ .diary-subscribe-buttons {
+ position:relative;
+ top: -30px;
+ left: 130px;
+ }
+
/* Rules for the log in page */
#login_auth_buttons {
margin-bottom: $lineheight;
overflow: auto;
height: 20em;
+
+ li {
+ list-style: inherit;
+ }
+
+ ol ol {
+ list-style-type: lower-alpha;
+ }
}
#decline {
border-radius: 0 2px 2px 0;
}
+ /* Rules for the oauth authorization page */
+
+ .oauth-authorize ul {
+ list-style: none;
+ }
+
/* Rules for messages pages */
.messages {
display: none;
}
}
+
+.read-reports {
+ background: #eee;
+ opacity: 0.7;
+}
+
+.report-related-block {
+ display:inline-block;
+}
+
+.report-block {
+ width:475px;
+ float:left;
+ margin-right:100px;
+}
+
+.related-block{
+ width:280px;
+ float:right;
+}
+
+.issue-comments {
+ width:475px;
+}
+
+.new-report-form {
+ border:1px solid #ccc;
+ border-radius:4px;
+ display:block-inline;
+}
+
+.new-report-checkbox{
+ float:left;
+ margin-left:10px;
+ margin-top:3px;
+}
+
+.new-report-string {
+ font-size:15px;
+}
+
+.report-button {
+ float:right;
+}
+
+.disclaimer {
+ width: 600px;
+ background: #fff1f0;
+ color: #d85030;
+ border-color: rgba(216, 80, 48, 0.3);
+}
before_action :authorize_web
before_action :set_locale
- before_action :require_user, :only => [:new, :edit, :comment, :hide, :hidecomment]
+ before_action :require_user, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
before_action :lookup_this_user, :only => [:view, :comments]
before_action :check_database_readable
- before_action :check_database_writable, :only => [:new, :edit]
+ before_action :check_database_writable, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
before_action :require_administrator, :only => [:hide, :hidecomment]
def new
@title = t "diary_entry.new.title"
- if params[:diary_entry]
+ if request.post?
@diary_entry = DiaryEntry.new(entry_params)
@diary_entry.user = @user
else
@user.preferences.create(:k => "diary.default_language", :v => @diary_entry.language_code)
end
- redirect_to :controller => "diary_entry", :action => "list", :display_name => @user.display_name
+
+ # Subscribe user to diary comments
+ @diary_entry.subscriptions.create(:user => @user)
+
+ redirect_to :action => "list", :display_name => @user.display_name
else
render :action => "edit"
end
else
default_lang = @user.preferences.where(:k => "diary.default_language").first
lang_code = default_lang ? default_lang.v : @user.preferred_language
- @diary_entry = DiaryEntry.new(:language_code => lang_code)
+ @diary_entry = DiaryEntry.new(entry_params.merge(:language_code => lang_code))
set_map_location
render :action => "edit"
end
@diary_entry = DiaryEntry.find(params[:id])
if @user != @diary_entry.user
- redirect_to :controller => "diary_entry", :action => "view", :id => params[:id]
+ redirect_to :action => "view", :id => params[:id]
elsif params[:diary_entry] && @diary_entry.update_attributes(entry_params)
- redirect_to :controller => "diary_entry", :action => "view", :id => params[:id]
+ redirect_to :action => "view", :id => params[:id]
end
set_map_location
@diary_comment = @entry.comments.build(comment_params)
@diary_comment.user = @user
if @diary_comment.save
- if @diary_comment.user != @entry.user
- Notifier.diary_comment_notification(@diary_comment).deliver_now
+
+ # Notify current subscribers of the new comment
+ @entry.subscribers.visible.each do |user|
+ if @user != user
+ Notifier.diary_comment_notification(@diary_comment, user).deliver_now
+ end
end
- redirect_to :controller => "diary_entry", :action => "view", :display_name => @entry.user.display_name, :id => @entry.id
+ # Add the commenter to the subscribers if necessary
+ @entry.subscriptions.create(:user => @user) unless @entry.subscribers.exists?(@user.id)
+
+ redirect_to :action => "view", :display_name => @entry.user.display_name, :id => @entry.id
else
render :action => "view"
end
render :action => "no_such_entry", :status => :not_found
end
+ def subscribe
+ diary_entry = DiaryEntry.find(params[:id])
+
+ diary_entry.subscriptions.create(:user => @user) unless diary_entry.subscribers.exists?(@user.id)
+
+ redirect_to :action => "view", :display_name => diary_entry.user.display_name, :id => diary_entry.id
+ rescue ActiveRecord::RecordNotFound
+ render :action => "no_such_entry", :status => :not_found
+ end
+
+ def unsubscribe
+ diary_entry = DiaryEntry.find(params[:id])
+
+ diary_entry.subscriptions.where(:user => @user).delete_all if diary_entry.subscribers.exists?(@user.id)
+
+ redirect_to :action => "view", :display_name => diary_entry.user.display_name, :id => diary_entry.id
+ rescue ActiveRecord::RecordNotFound
+ render :action => "no_such_entry", :status => :not_found
+ end
+
def list
if params[:display_name]
- @this_user = User.active.find_by_display_name(params[:display_name])
+ @this_user = User.active.find_by(:display_name => params[:display_name])
if @this_user
@title = t "diary_entry.list.user_title", :user => @this_user.display_name
return
end
else
- @entries = DiaryEntry.joins(:user).where(:users => { :status => %w(active confirmed) })
+ @entries = DiaryEntry.joins(:user).where(:users => { :status => %w[active confirmed] })
if params[:language]
@title = t "diary_entry.list.in_language_title", :language => Language.find(params[:language]).english_name
end
end
+ @params = params.permit(:display_name, :friends, :nearby, :language)
+
@page = (params[:page] || 1).to_i
@page_size = 20
def rss
if params[:display_name]
- user = User.active.find_by_display_name(params[:display_name])
+ user = User.active.find_by(:display_name => params[:display_name])
if user
@entries = user.diary_entries
@description = I18n.t("diary_entry.feed.user.description", :user => user.display_name)
@link = "http://#{SERVER_URL}/user/#{user.display_name}/diary"
else
- render :text => "", :status => :not_found
+ head :not_found
return
end
else
- @entries = DiaryEntry.joins(:user).where(:users => { :status => %w(active confirmed) })
+ @entries = DiaryEntry.joins(:user).where(:users => { :status => %w[active confirmed] })
if params[:language]
@entries = @entries.where(:language_code => params[:language])
@entry = @this_user.diary_entries.visible.where(:id => params[:id]).first
if @entry
@title = t "diary_entry.view.title", :user => params[:display_name], :title => @entry.title
+ if params[:comment_id]
+ @reported_comment = DiaryComment.where(:id => params[:comment_id])
+ end
else
@title = t "diary_entry.no_such_entry.title", :id => params[:id]
render :action => "no_such_entry", :status => :not_found
# return permitted diary entry parameters
def entry_params
params.require(:diary_entry).permit(:title, :body, :language_code, :latitude, :longitude)
+ rescue ActionController::ParameterMissing
+ ActionController::Parameters.new.permit(:title, :body, :language_code, :latitude, :longitude)
end
##
def require_administrator
unless @user.administrator?
flash[:error] = t("user.filter.not_an_administrator")
- redirect_to :controller => "diary_entry", :action => "view"
+ redirect_to :action => "view"
end
end
:return_path => EMAIL_RETURN_PATH,
:auto_submitted => "auto-generated"
helper :application
+ before_action :set_shared_template_vars
+ before_action :attach_project_logo
def signup_confirm(user, token)
with_recipient_locale user do
@replyurl = url_for(:host => SERVER_URL,
:controller => "message", :action => "reply",
:message_id => message.id)
+ @author = @from_user
+
+ attach_user_avatar(message.sender)
mail :from => from_address(message.sender.display_name, "m", message.id, message.digest),
:to => message.recipient.email,
end
end
- def diary_comment_notification(comment)
- with_recipient_locale comment.diary_entry.user do
- @to_user = comment.diary_entry.user.display_name
+ def diary_comment_notification(comment, recipient)
+ with_recipient_locale recipient do
+ @to_user = recipient.display_name
@from_user = comment.user.display_name
@text = comment.body
@title = comment.diary_entry.title
:action => "new",
:display_name => comment.user.display_name,
:title => "Re: #{comment.diary_entry.title}")
+ @author = @from_user
- mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest),
- :to => comment.diary_entry.user.email,
+ attach_user_avatar(comment.user)
+
+ mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest, recipient.id),
+ :to => recipient.email,
:subject => I18n.t("notifier.diary_comment_notification.subject", :user => comment.user.display_name)
end
end
@friendurl = url_for(:host => SERVER_URL,
:controller => "user", :action => "make_friend",
:display_name => @friend.befriender.display_name)
+ @author = @friend.befriender.display_name
+ attach_user_avatar(@friend.befriender)
mail :to => friend.befriendee.email,
:subject => I18n.t("notifier.friend_notification.subject", :user => friend.befriender.display_name)
end
I18n.t("notifier.note_comment_notification.anonymous")
end
+ @author = @commenter
+ attach_user_avatar(comment.author)
+
subject = if @owner
I18n.t("notifier.note_comment_notification.#{@event}.subject_own", :commenter => @commenter)
else
def changeset_comment_notification(comment, recipient)
with_recipient_locale recipient do
+ @to_user = recipient.display_name
@changeset_url = changeset_url(comment.changeset, :host => SERVER_URL)
@comment = comment.body
@owner = recipient == comment.changeset.user
@changeset_comment = comment.changeset.tags["comment"].presence
@time = comment.created_at
@changeset_author = comment.changeset.user.display_name
+ @author = @commenter
subject = if @owner
I18n.t("notifier.changeset_comment_notification.commented.subject_own", :commenter => @commenter)
I18n.t("notifier.changeset_comment_notification.commented.subject_other", :commenter => @commenter)
end
+ attach_user_avatar(comment.author)
+
mail :to => recipient.email, :subject => subject
end
end
+ def new_issue_notification(issue_id, recipient)
+ with_recipient_locale recipient do
+ @url = url_for(:host => SERVER_URL,
+ :controller => "issues",
+ :action => "show",
+ :id => issue_id)
+ subject = I18n.t("notifier.new_issue_notification.subject")
+ mail :to => recipient.email, :subject => subject
+ end
+ end
+
private
+ def set_shared_template_vars
+ @root_url = root_url(:host => SERVER_URL)
+ end
+
+ def attach_project_logo
+ attachments.inline["logo.png"] = File.read(Rails.root.join("app", "assets", "images", "osm_logo_30.png"))
+ end
+
+ def attach_user_avatar(user)
+ attachments.inline["avatar.png"] = File.read(user_avatar_file_path(user))
+ end
+
+ def user_avatar_file_path(user)
+ image = user && user.image
+ if image && image.file?
+ return image.path(:small)
+ else
+ return Rails.root.join("app", "assets", "images", "users", "images", "small.png")
+ end
+ end
+
def with_recipient_locale(recipient)
I18n.with_locale Locale.available.preferred(recipient.preferred_languages) do
yield
end
end
- def from_address(name, type, id, digest)
+ def from_address(name, type, id, digest, user_id = nil)
if Object.const_defined?(:MESSAGES_DOMAIN) && domain = MESSAGES_DOMAIN
- "#{name} <#{type}-#{id}-#{digest[0, 6]}@#{domain}>"
+ if user_id
+ "#{name} <#{type}-#{id}-#{user_id}-#{digest[0, 6]}@#{domain}>"
+ else
+ "#{name} <#{type}-#{id}-#{digest[0, 6]}@#{domain}>"
+ end
else
EMAIL_FROM
end
has_many :traces, -> { where(:visible => true) }
has_many :diary_entries, -> { order(:created_at => :desc) }
has_many :diary_comments, -> { order(:created_at => :desc) }
+ has_many :diary_entry_subscriptions, :class_name => "DiaryEntrySubscription"
+ has_many :diary_subscriptions, :through => :diary_entry_subscriptions, :source => :diary_entry
has_many :messages, -> { where(:to_user_visible => true).order(:sent_on => :desc).preload(:sender, :recipient) }, :foreign_key => :to_user_id
has_many :new_messages, -> { where(:to_user_visible => true, :message_read => false).order(:sent_on => :desc) }, :class_name => "Message", :foreign_key => :to_user_id
has_many :sent_messages, -> { where(:from_user_visible => true).order(:sent_on => :desc).preload(:sender, :recipient) }, :class_name => "Message", :foreign_key => :from_user_id
- has_many :friends, -> { joins(:befriendee).where(:users => { :status => %w(active confirmed) }) }
+ has_many :friends, -> { joins(:befriendee).where(:users => { :status => %w[active confirmed] }) }
has_many :friend_users, :through => :friends, :source => :befriendee
has_many :tokens, :class_name => "UserToken"
has_many :preferences, :class_name => "UserPreference"
has_many :roles, :class_name => "UserRole"
- scope :visible, -> { where(:status => %w(pending active confirmed)) }
- scope :active, -> { where(:status => %w(active confirmed)) }
+ has_many :issues, :class_name => "Issue", :foreign_key => :reported_user_id
+ has_one :issue, :class_name => "Issue", :foreign_key => :updated_by
+ has_many :issue_comments
+
+ has_many :reports
+
+ scope :visible, -> { where(:status => %w[pending active confirmed]) }
+ scope :active, -> { where(:status => %w[active confirmed]) }
scope :identifiable, -> { where(:data_public => true) }
has_attached_file :image,
:styles => { :large => "100x100>", :small => "50x50>" }
validates :display_name, :presence => true, :allow_nil => true, :length => 3..255,
- :exclusion => %w(new terms save confirm confirm-email go_public reset-password forgot-password suspended)
+ :exclusion => %w[new terms save confirm confirm-email go_public reset-password forgot-password suspended]
validates :display_name, :if => proc { |u| u.display_name_changed? },
:uniqueness => { :case_sensitive => false }
validates :display_name, :if => proc { |u| u.display_name_changed? },
user = nil
end
elsif options[:token]
- token = UserToken.find_by_token(options[:token])
+ token = UserToken.find_by(:token => options[:token])
user = token.user if token
end
user = nil
end
- token.update_column(:expiry, 1.week.from_now) if token && user
+ token.update(:expiry => 1.week.from_now) if token && user
user
end
##
# returns true if a user is visible
def visible?
- %w(pending active confirmed).include? status
+ %w[pending active confirmed].include? status
end
##
# returns true if a user is active
def active?
- %w(active confirmed).include? status
+ %w[active confirmed].include? status
end
##
def spam_score
changeset_score = changesets.size * 50
trace_score = traces.size * 50
- diary_entry_score = diary_entries.inject(0) { |a, e| a + e.body.spam_score }
- diary_comment_score = diary_comments.inject(0) { |a, e| a + e.body.spam_score }
+ diary_entry_score = diary_entries.inject(0) { |acc, elem| acc + elem.body.spam_score }
+ diary_comment_score = diary_comments.inject(0) { |acc, elem| acc + elem.body.spam_score }
score = description.spam_score / 4.0
score += diary_entries.where("created_at > ?", 1.day.ago).count * 10
# perform a spam check on a user
def spam_check
if status == "active" && spam_score > SPAM_THRESHOLD
- update_column(:status, "suspended")
+ update(:status => "suspended")
end
end
##
# return an oauth access token for a specified application
def access_token(application_key)
- ClientApplication.find_by_key(application_key).access_token_for_user(self)
+ ClientApplication.find_by(:key => application_key).access_token_for_user(self)
end
private
<a id="comments"></a>
<div class='comments'>
-<%= render :partial => 'diary_comment', :collection => @entry.visible_comments %>
+ <% if @reported_comment %>
+ <%= render :partial => 'diary_comment', :collection => @reported_comment %>
+ <% else %>
+ <%= render :partial => 'diary_comment', :collection => @entry.visible_comments %>
+ <% end %>
</div>
<%= if_logged_in(:div) do %>
<h3 id="newcomment"><%= t 'diary_entry.view.leave_a_comment' %></h3>
<%= richtext_area :diary_comment, :body, :cols => 80, :rows => 15 %>
<%= submit_tag t('diary_entry.view.save_button') %>
<% end %>
+ <% if @user and @entry.subscribers.exists?(@user.id) %>
+ <div class="diary-subscribe-buttons"><%= link_to t('javascripts.changesets.show.unsubscribe'), diary_entry_unsubscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => :button %></div>
+ <% elsif @user %>
+ <div class="diary-subscribe-buttons"><%= link_to t('javascripts.changesets.show.subscribe'), diary_entry_subscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => :button %></div>
+ <% end %>
<% end %>
<%= if_not_logged_in(:div) do %>
</nav>
<nav class='secondary'>
<ul>
+ <% if @user and ( @user.administrator? or @user.moderator? ) %>
+ <li class="compact-hide <%= current_page_class(issues_path) %>"><b><%= link_to t('layouts.reports'), issues_path %></b></li>
+ <% end %>
<li class="compact-hide <%= current_page_class(traces_path) %>"><%= link_to t('layouts.gps_traces'), traces_path %></li>
<li class="compact-hide <%= current_page_class(diary_path) %>"><%= link_to t('layouts.user_diaries'), diary_path %></li>
<li class="compact-hide <%= current_page_class(copyright_path) %>"><%= link_to t('layouts.copyright'), copyright_path %></li>
<% if @user && @user.id %>
<div class='dropdown user-menu logged-in'>
<a class='dropdown-toggle' data-toggle='dropdown' href="#">
- <%= user_thumbnail_tiny(@user, :size => 25, :width => 25, :height => 25)
+ <%= user_thumbnail_tiny(@user, :width => 25, :height => 25)
%><%= render :partial => 'layouts/inbox'
%><span class="user-button"><span class='username'><%= @user.display_name %></span>
<b class="caret"></b></span>
<%= yield :greeting %>
</li>
<li>
- <%= link_to t('layouts.logout'), logout_path(:session => request.session_options[:id], :referer => request.fullpath) %>
+ <%= link_to t('layouts.logout'), logout_path(:session => session.id, :referer => request.fullpath) %>
</li>
</ul>
</div>
<p class='deemphasize'>
<small>
<%= t 'user.view.mapper since' %> <%= l @this_user.creation_time.to_date, :format => :long %>
- |
- <%= t 'user.view.ct status' %>
- <% if not @this_user.terms_agreed.nil? -%>
- <%= t 'user.view.ct accepted', :ago =>time_ago_in_words(@this_user.terms_agreed) %>
- <% elsif not @this_user.terms_seen? -%>
- <%= t 'user.view.ct undecided' %>
- <% else -%>
- <%= t 'user.view.ct declined' %>
+ <% unless @this_user.terms_agreed %>
+ |
+ <%= t 'user.view.ct status' %>
+ <% if @this_user.terms_seen? -%>
+ <%= t 'user.view.ct declined' %>
+ <% else -%>
+ <%= t 'user.view.ct undecided' %>
+ <% end -%>
<% end -%>
</small>
</p>
</div>
+ <% if @user and @this_user.id != @user.id %>
+ <div class="report-button">
+ <%= link_to new_issue_url(reportable_id: @this_user.id, reportable_type: @this_user.class.name, reported_user_id: @this_user.id,referer: request.fullpath), :title => t('user.view.report') do%>
+ ⚐
+ <% end %>
+ </div>
+ <% end %>
+
<div class="user-description richtext"><%= @this_user.description.to_html %></div>
</div>
# Author: Captaindogfish
# Author: Chase me ladies, I'm the Cavalry
# Author: E THP
+ # Author: EdLoach
+ # Author: Eduard Popov
+ # Author: IknowJoseph
# Author: Jagwar
# Author: Kosovastar
# Author: Macofe
# Author: Meno25
# Author: Sampablokuper
# Author: Shirayuki
+ # Author: Smsm1
+ # Author: ديفيد
---
en-GB:
html:
title_comment: Changeset %{id} - %{comment}
join_discussion: Log in to join the discussion
discussion: Discussion
+ report: Report this changeset?
node:
title: 'Node: %{name}'
history_title: 'Node History: %{name}'
reopened_by_anonymous: Reactivated by anonymous <abbr title='%{exact_time}'>%{when}
ago</abbr>
hidden_by: Hidden by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>
+ report: Report this note?
query:
title: Query Features
introduction: Click on the map to find nearby features.
edit_link: Edit this entry
hide_link: Hide this entry
confirm: Confirm
+ report: Report this entry?
diary_comment:
comment_from: Comment from %{link_user} on %{comment_created_at}
hide_link: Hide this comment
confirm: Confirm
+ report: Report this comment?
location:
location: 'Location:'
view: View
clock: Clock
college: College
community_centre: Community Centre
- courthouse: Courthouse
+ courthouse: Court
crematorium: Crematorium
dentist: Dentist
doctors: Doctors
vending_machine: Vending Machine
veterinary: Veterinary Surgery
village_hall: Village Hall
- waste_basket: bin
+ waste_basket: Waste Bin
waste_disposal: Waste Disposal
youth_centre: Youth Centre
boundary:
results:
no_results: No results found
more_results: More results
+ issues:
+ report: Report
+ resolve: Resolve
+ ignore: Ignore
+ reopen: Reopen
+ index:
+ search:
+ user_not_found: User does not exist
+ issues_not_found: No such issues found
+ create:
+ successful_report: Your report has been registered sucessfully
+ provide_details: Please provide the required details
+ update:
+ new_report: Your report been registered sucessfully
+ successful_update: Your report has been updated successfully
+ provide_details: Please provide the required details
+ new:
+ details: Please provide some more details into the problem. (This field cannot be left blank!)
+ select: Select a reason for your report
+ disclaimer:
+ placeholder: Before sending in a report for official action, be sure that
+ placeholder1: You are sure that the problem is not just a mistake
+ placeholder2: You are unable to fix the problem yourself
+ placeholder3: You have tried to resolve the problem with the user
+ show:
+ comments:
+ reassign: The Issue was reassigned
+ reassign_param: Reassign Issue?
+ comment:
+ provide_details: Please provide the required details
+ comment_created: Your comment was successfully created
+ resolved: Issue status has been set to 'Resolved'
+ ignored: Issue status has been set to 'Ignored'
+ reopened: Issue status has been set to 'Open'
+ report_strings:
+ DiaryEntry:
+ spam:
+ type: "[SPAM]"
+ details: This Diary Entry is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This Diary Entry is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This Diary Entry contains a threat
+ other:
+ type: "[OTHER]"
+ details: Other
+ DiaryComment:
+ spam:
+ type: "[SPAM]"
+ details: This Diary Comment is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This Diary Comment is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This Diary Comment contains a threat
+ other:
+ type: "[OTHER]"
+ details: Other
+ User:
+ spam:
+ type: "[SPAM]"
+ details: This User profile is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This User profile is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This User profile contains a threat
+ vandal:
+ type: "[VANDAL]"
+ details: This User is a vandal
+ other:
+ type: "[OTHER]"
+ details: Other
+ Changeset:
+ undiscussed_import:
+ type: "[UNDISCUSSED-IMPORT]"
+ details: This changeset is an undiscussed import
+ mechanical_edit:
+ type: "[MECH-EDIT]"
+ details: This changeset is a mechanical edit
+ edit_error:
+ type: "[EDIT-ERROR]"
+ details: This changeset contains a newbie or an editor error
+ spam:
+ type: "[SPAM]"
+ details: This changeset is/contains spam
+ vandalism:
+ type: "[VANDALISM]"
+ details: This changeset is/contains vandalism
+ other:
+ type: "[OTHER]"
+ details: Other
+ Note:
+ spam:
+ type: "[SPAM]"
+ details: This note is spam
+ vandalism:
+ type: "[VANDALISM]"
+ details: This note is vandalism
+ personal:
+ type: "[PERSONAL]"
+ details: This note contains personal data
+ abusive:
+ type: "[ABUSIVE]"
+ details: This note is abusive
+ other:
+ type: "[OTHER]"
+ details: Other
layouts:
project_name:
title: OpenStreetMap
edit: Edit
history: History
export: Export
+ reports: Reports
data: Data
export_data: Export Data
gps_traces: GPS Traces
intro_2_create_account: Create a user account
partners_html: Hosting is supported by %{ucl}, %{ic} and %{bytemark}, and other
%{partners}.
- partners_ucl: the UCL VR Centre
+ partners_ucl: UCL
partners_ic: Imperial College London
partners_bytemark: Bytemark Hosting
partners_partners: partners
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: The OpenStreetMap database is currently offline while essential database
maintenance work is carried out.
osm_read_only: The OpenStreetMap database is currently in read-only mode while
href="http://osmfoundation.org/Licence">OSMF Licence page</a> and the community <a
href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">Legal
FAQ</a>.
- more_2_html: Although OpenStreetMap is open data, we cannot provide a free-of-charge
- map API for third-party developers. See our <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API
- Usage Policy</a>, <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">Tile
- Usage Policy</a> and <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim
- Usage Policy</a>.
+ more_2_html: |-
+ Although OpenStreetMap is open data, we cannot provide a
+ free-of-charge map API for third-parties.
+ See our <a href="https://operations.osmfoundation.org/policies/api/">API Usage Policy</a>,
+ <a href="https://operations.osmfoundation.org/policies/tiles/">Tile Usage Policy</a>
+ and <a href="https://operations.osmfoundation.org/policies/nominatim/">Nominatim Usage Policy</a>.
contributors_title_html: Our contributors
contributors_intro_html: |-
Our contributors are thousands of individuals. We also include
legal_title: Legal
legal_html: "This site and many other related services are formally operated by
the \n<a href='http://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF)
- \non behalf of the community.\n<br> \nPlease <a href='http://osmfoundation.org/Contact'>contact
+ \non behalf of the community. Use of all OSMF operated services is subject \nto
+ our <a href=\"http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nAcceptable
+ Use Policies</a> and our <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">Privacy
+ Policy</a>\n<br> \nPlease <a href='http://osmfoundation.org/Contact'>contact
the OSMF</a> \nif you have licensing, copyright or other legal questions and
issues."
partners_title: Partners
notifier:
diary_comment_notification:
- subject: '[OpenStreetMap] %{user} commented on your diary entry'
+ subject: '[OpenStreetMap] %{user} commented on a diary entry'
hi: Hi %{to_user},
- header: '%{from_user} has commented on your recent OpenStreetMap diary entry
- with the subject %{subject}:'
+ header: '%{from_user} has commented on the OpenStreetMap diary entry with the
+ subject %{subject}:'
footer: You can also read the comment at %{readurl} and you can comment at %{commenturl}
or reply at %{replyurl}
message_notification:
footer_html: You can also read the message at %{readurl} and you can reply at
%{replyurl}
friend_notification:
+ hi: Hi %{to_user},
subject: '[OpenStreetMap] %{user} added you as a friend'
had_added_you: '%{user} has added you as a friend on OpenStreetMap.'
see_their_profile: You can see their profile at %{userurl}.
on. The note is near %{place}.'
details: More details about the note can be found at %{url}.
changeset_comment_notification:
+ hi: Hi %{to_user},
greeting: Hi,
commented:
subject_own: '[OpenStreetMap] %{commenter} has commented on one of your changesets'
partial_changeset_with_comment: with comment '%{changeset_comment}'
partial_changeset_without_comment: without comment
details: More details about the changeset can be found at %{url}.
+ unsubscribe: To unsubscribe from updates to this changeset, visit %{url} and
+ click "Unsubscribe".
+ new_issue_notification:
+ subject: "[OpenStreetMap] New Issue"
+ greeting: "Hi,"
+ new_issue: "A new issue has been created"
+ url: You can view the issue here
message:
inbox:
title: Inbox
track: Track
bridleway: Bridleway
cycleway: Cycleway
+ cycleway_national: National cycleway
+ cycleway_regional: Regional cycleway
+ cycleway_local: Local cycleway
footway: Footway
rail: Railway
subway: Subway
private: Private access
destination: Destination access
construction: Roads under construction
+ bicycle_shop: Bicycle shop
+ bicycle_parking: Bicycle parking
+ toilets: Toilets
richtext_area:
edit: Edit
preview: Preview
second: Second item
link: Link
text: Text
- image: شکیل
+ image: Image
alt: Alt text
url: URL
trace:
require_cookies:
cookies_needed: You appear to have cookies disabled - please enable cookies
in your browser before continuing.
+ require_admin:
+ not_an_admin: You need to be an admin to perform that action.
require_moderator:
not_a_moderator: You need to be a moderator to perform that action.
setup_user_auth:
+ blocked_zero_hour: You have an urgent message on the OpenStreetMap web site.
+ You need to read the message before you will be able to save your edits.
blocked: Your access to the API has been blocked. Please log-in to the web interface
to find out more.
need_to_see_terms: Your access to the API is temporarily suspended. Please log-in
invalid: The authorisation token is not valid.
revoke:
flash: You've revoked the token for %{application}
+ permissions:
+ missing: You have not permitted the application access to this facility
oauth_clients:
new:
title: Register a new application
github:
title: Login with GitHub
alt: Login with a GitHub Account
+ wikipedia:
+ title: Login with Wikipedia
+ alt: Login with a Wikipedia Account
yahoo:
title: Login with Yahoo
alt: Login with a Yahoo OpenID
terms</a>.
email address: 'Email Address:'
confirm email address: 'Confirm Email Address:'
- not displayed publicly: Not displayed publicly (see <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
- title="wiki privacy policy including section on email addresses">privacy policy</a>)
+ not displayed publicly: Your address is not displayed publicly, see our <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy"
+ title="OSMF privacy policy including section on email addresses">privacy policy</a>
+ for more information
display name: 'Display Name:'
display name description: Your publicly displayed username. You can change this
later in the preferences.
friends_diaries: friends' diary entries
nearby_changesets: nearby user changesets
nearby_diaries: nearby user diary entries
+ report: Report this user?
popup:
your location: Your location
nearby mapper: Nearby mapper
gravatar: Use Gravatar
link: http://wiki.openstreetmap.org/wiki/Gravatar
link text: what is this?
+ disabled: Gravatar has been disabled.
+ enabled: Display of your Gravatar has been enabled.
new image: Add an image
keep image: Keep the current image
delete image: Remove the current image
helper:
time_future: Ends in %{time}.
until_login: Active until the user logs in.
+ time_future_and_until_login: Ends in %{time} and after the user has logged in.
time_past: Ended %{time} ago.
blocks_on:
title: Blocks on %{name}
key:
title: Map Key
tooltip: Legend
- tooltip_disabled: Legend available only for Standard layer
+ tooltip_disabled: Map Key not available for this layer
map:
zoom:
in: Zoom In
header: Map Layers
notes: Map Notes
data: Map Data
+ gps: Public GPS Traces
overlays: Enable overlays for troubleshooting the map
title: Layers
copyright: © <a href='%{copyright_url}'>OpenStreetMap contributors</a>
edit_help: Move the map and zoom in on a location you want to edit, then click
here.
directions:
+ ascend: Ascend
engines:
graphhopper_bicycle: Bicycle (GraphHopper)
graphhopper_foot: Foot (GraphHopper)
mapzen_bicycle: Bicycle (Mapzen)
mapzen_car: Car (Mapzen)
mapzen_foot: Foot (Mapzen)
+ descend: Descend
directions: Directions
distance: Distance
errors:
against_oneway_without_exit: Go against one-way on %{name}
end_oneway_without_exit: End of one-way on %{name}
roundabout_with_exit: At roundabout take exit %{exit} onto %{name}
+ turn_left_with_exit: At roundabout turn left onto %{name}
+ slight_left_with_exit: At roundabout slight left onto %{name}
+ turn_right_with_exit: At roundabout turn right onto %{name}
+ slight_right_with_exit: At roundabout slight right onto %{name}
+ continue_with_exit: At roundabout continue straight onto %{name}
unnamed: unnamed road
courtesy: Directions courtesy of %{link}
time: Time
nothing_found: No features found
error: 'Error contacting %{server}: %{error}'
timeout: Timeout contacting %{server}
+ context:
+ directions_from: Directions from here
+ directions_to: Directions to here
+ add_note: Add a note here
+ show_address: Show address
+ query_features: Query features
+ centre_map: Centre map here
redaction:
edit:
description: Description
title_comment: "Changeset %{id} - %{comment}"
join_discussion: "Log in to join the discussion"
discussion: Discussion
+ report: Report this changeset?
node:
title: "Node: %{name}"
history_title: "Node History: %{name}"
reopened_by: "Reactivated by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
reopened_by_anonymous: "Reactivated by anonymous <abbr title='%{exact_time}'>%{when} ago</abbr>"
hidden_by: "Hidden by %{user} <abbr title='%{exact_time}'>%{when} ago</abbr>"
+ report: Report this note?
query:
title: "Query Features"
introduction: "Click on the map to find nearby features."
edit_link: Edit this entry
hide_link: Hide this entry
confirm: Confirm
+ report: Report this entry?
diary_comment:
comment_from: "Comment from %{link_user} on %{comment_created_at}"
hide_link: Hide this comment
confirm: Confirm
+ report: Report this comment?
location:
location: "Location:"
view: "View"
car_parts: "Car Parts"
car_repair: "Car Repair"
carpet: "Carpet Shop"
- car_repair: "Car Repair"
charity: "Charity Shop"
chemist: "Chemist"
clothes: "Clothes Shop"
results:
no_results: "No results found"
more_results: "More results"
+ issues:
+ report: Report
+ resolve: Resolve
+ ignore: Ignore
+ reopen: Reopen
+ index:
+ search:
+ user_not_found: User does not exist
+ issues_not_found: No such issues found
+ create:
+ successful_report: Your report has been registered sucessfully
+ provide_details: Please provide the required details
+ update:
+ new_report: Your report been registered sucessfully
+ successful_update: Your report has been updated successfully
+ provide_details: Please provide the required details
+ new:
+ details: Please provide some more details into the problem. (This field cannot be left blank!)
+ select: Select a reason for your report
+ disclaimer:
+ intro: Before sending in a report for official action, be sure that
+ not_just_mistake: You are sure that the problem is not just a mistake
+ unable_to_fix: You are unable to fix the problem yourself
+ resolve_with_user: You have tried to resolve the problem with the user
+ show:
+ comments:
+ reassign: The Issue was reassigned
+ reassign_param: Reassign Issue?
+ comment:
+ provide_details: Please provide the required details
+ comment_created: Your comment was successfully created
+ resolved: Issue status has been set to 'Resolved'
+ ignored: Issue status has been set to 'Ignored'
+ reopened: Issue status has been set to 'Open'
+ report_strings:
+ DiaryEntry:
+ spam:
+ type: "[SPAM]"
+ details: This Diary Entry is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This Diary Entry is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This Diary Entry contains a threat
+ other:
+ type: "[OTHER]"
+ details: Other
+ DiaryComment:
+ spam:
+ type: "[SPAM]"
+ details: This Diary Comment is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This Diary Comment is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This Diary Comment contains a threat
+ other:
+ type: "[OTHER]"
+ details: Other
+ User:
+ spam:
+ type: "[SPAM]"
+ details: This User profile is/contains spam
+ offensive:
+ type: "[OFFENSIVE]"
+ details: This User profile is obscene/offensive
+ threat:
+ type: "[THREAT]"
+ details: This User profile contains a threat
+ vandal:
+ type: "[VANDAL]"
+ details: This User is a vandal
+ other:
+ type: "[OTHER]"
+ details: Other
+ Changeset:
+ undiscussed_import:
+ type: "[UNDISCUSSED-IMPORT]"
+ details: This changeset is an undiscussed import
+ mechanical_edit:
+ type: "[MECH-EDIT]"
+ details: This changeset is a mechanical edit
+ edit_error:
+ type: "[EDIT-ERROR]"
+ details: This changeset contains a newbie or an editor error
+ spam:
+ type: "[SPAM]"
+ details: This changeset is/contains spam
+ vandalism:
+ type: "[VANDALISM]"
+ details: This changeset is/contains vandalism
+ other:
+ type: "[OTHER]"
+ details: Other
+ Note:
+ spam:
+ type: "[SPAM]"
+ details: This note is spam
+ vandalism:
+ type: "[VANDALISM]"
+ details: This note is vandalism
+ personal:
+ type: "[PERSONAL]"
+ details: This note contains personal data
+ abusive:
+ type: "[ABUSIVE]"
+ details: This note is abusive
+ other:
+ type: "[OTHER]"
+ details: Other
layouts:
project_name:
# in <title>
edit: Edit
history: History
export: Export
+ reports: Reports
data: Data
export_data: Export Data
gps_traces: GPS Traces
intro_header: Welcome to OpenStreetMap!
intro_text: OpenStreetMap is a map of the world, created by people like you and free to use under an open license.
intro_2_create_account: "Create a user account"
- partners_html: "Hosting is supported by %{ucl}, %{ic} and %{bytemark}, and other %{partners}."
- partners_ucl: "the UCL VR Centre"
+ partners_html: "Hosting is supported by %{ucl}, %{bytemark} and %{ic}, and other %{partners}."
+ partners_ucl: "UCL"
partners_ic: "Imperial College London"
partners_bytemark: "Bytemark Hosting"
partners_partners: "partners"
- partners_url: "http://wiki.openstreetmap.org/wiki/Partners"
osm_offline: "The OpenStreetMap database is currently offline while essential database maintenance work is carried out."
osm_read_only: "The OpenStreetMap database is currently in read-only mode while essential database maintenance work is carried out."
donate: "Support OpenStreetMap by %{link} to the Hardware Upgrade Fund."
FAQ</a>.
more_2_html: |
Although OpenStreetMap is open data, we cannot provide a
- free-of-charge map API for third-party developers.
- See our <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API Usage Policy</a>,
- <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">Tile Usage Policy</a>
- and <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim Usage Policy</a>.
+ free-of-charge map API for third-parties.
+ See our <a href="https://operations.osmfoundation.org/policies/api/">API Usage Policy</a>,
+ <a href="https://operations.osmfoundation.org/policies/tiles/">Tile Usage Policy</a>
+ and <a href="https://operations.osmfoundation.org/policies/nominatim/">Nominatim Usage Policy</a>.
contributors_title_html: Our contributors
contributors_intro_html: |
Our contributors are thousands of individuals. We also include
paragraph_1_html: |
OpenStreetMap has few formal rules but we expect all participants to collaborate
with, and communicate with, the community. If you are considering
-- any activities other than editing by hand, please read and follow the guidelines on
-- <a href='http://wiki.openstreetmap.org/wiki/Import/Guidelines'>Imports</a> and
++ any activities other than editing by hand, please read and follow the guidelines on
++ <a href='http://wiki.openstreetmap.org/wiki/Import/Guidelines'>Imports</a> and
<a href='http://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct'>Automated Edits</a>.
questions:
title: Any questions?
title: Join the community
explanation_html: |
If you have noticed a problem with our map data, for example a road is missing or your address, the best way to
-- proceed is to join the OpenStreetMap community and add or repair the data yourself.
++ proceed is to join the OpenStreetMap community and add or repair the data yourself.
add_a_note:
instructions_html: |
Just click <a class='icon note'></a> or the same icon on the map display.
title: Other concerns
explanation_html: |
If you have concerns about how our data is being used or about the contents please consult our
-- <a href='/copyright'>copyright page</a> for more legal information, or contact the appropriate
-- <a href='http://wiki.osmfoundation.org/wiki/Working_Groups'>OSMF working group</a>.
++ <a href='/copyright'>copyright page</a> for more legal information, or contact the appropriate
++ <a href='http://wiki.osmfoundation.org/wiki/Working_Groups'>OSMF working group</a>.
help_page:
title: Getting Help
introduction: |
License page</a> for details.
legal_title: Legal
legal_html: |
-- This site and many other related services are formally operated by the
-- <a href='http://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF)
- on behalf of the community.
- <br>
- Please <a href='http://osmfoundation.org/Contact'>contact the OSMF</a>
- on behalf of the community. Use of all OSMF operated services is subject
++ This site and many other related services are formally operated by the
++ <a href='http://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF)
++ on behalf of the community. Use of all OSMF operated services is subject
+ to our <a href="http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy">
+ Acceptable Use Policies</a> and our <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy">Privacy Policy</a>
- <br>
- Please <a href='http://osmfoundation.org/Contact'>contact the OSMF</a>
++ <br>
++ Please <a href='http://osmfoundation.org/Contact'>contact the OSMF</a>
if you have licensing, copyright or other legal questions and issues.
partners_title: Partners
notifier:
diary_comment_notification:
- subject: "[OpenStreetMap] %{user} commented on your diary entry"
+ subject: "[OpenStreetMap] %{user} commented on a diary entry"
hi: "Hi %{to_user},"
- header: "%{from_user} has commented on your recent OpenStreetMap diary entry with the subject %{subject}:"
+ header: "%{from_user} has commented on the OpenStreetMap diary entry with the subject %{subject}:"
footer: "You can also read the comment at %{readurl} and you can comment at %{commenturl} or reply at %{replyurl}"
message_notification:
subject_header: "[OpenStreetMap] %{subject}"
header: "%{from_user} has sent you a message through OpenStreetMap with the subject %{subject}:"
footer_html: "You can also read the message at %{readurl} and you can reply at %{replyurl}"
friend_notification:
+ hi: "Hi %{to_user},"
subject: "[OpenStreetMap] %{user} added you as a friend"
had_added_you: "%{user} has added you as a friend on OpenStreetMap."
see_their_profile: "You can see their profile at %{userurl}."
commented_note: "%{commenter} has reactivated a map note you have commented on. The note is near %{place}."
details: "More details about the note can be found at %{url}."
changeset_comment_notification:
+ hi: "Hi %{to_user},"
greeting: "Hi,"
commented:
subject_own: "[OpenStreetMap] %{commenter} has commented on one of your changesets"
partial_changeset_with_comment: "with comment '%{changeset_comment}'"
partial_changeset_without_comment: "without comment"
details: "More details about the changeset can be found at %{url}."
+ unsubscribe: 'To unsubscribe from updates to this changeset, visit %{url} and click "Unsubscribe".'
+ new_issue_notification:
+ subject: "[OpenStreetMap] New Issue"
+ greeting: "Hi,"
+ new_issue: "A new issue has been created"
+ url: You can view the issue here
message:
inbox:
title: "Inbox"
date: "Date"
reply_button: "Reply"
unread_button: "Mark as unread"
+ delete_button: "Delete"
back: "Back"
to: "To"
wrong_user: "You are logged in as `%{user}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it."
application:
require_cookies:
cookies_needed: "You appear to have cookies disabled - please enable cookies in your browser before continuing."
+ require_admin:
+ not_an_admin: You need to be an admin to perform that action.
require_moderator:
not_a_moderator: "You need to be a moderator to perform that action."
setup_user_auth:
+ blocked_zero_hour: "You have an urgent message on the OpenStreetMap web site. You need to read the message before you will be able to save your edits."
blocked: "Your access to the API has been blocked. Please log-in to the web interface to find out more."
need_to_see_terms: "Your access to the API is temporarily suspended. Please log-in to the web interface to view the Contributor Terms. You do not need to agree, but you must view them."
oauth:
invalid: "The authorization token is not valid."
revoke:
flash: "You've revoked the token for %{application}"
+ permissions:
+ missing: "You have not permitted the application access to this facility"
oauth_clients:
new:
title: "Register a new application"
github:
title: Login with GitHub
alt: Login with a GitHub Account
+ wikipedia:
+ title: Login with Wikipedia
+ alt: Login with a Wikipedia Account
yahoo:
title: Login with Yahoo
alt: Login with a Yahoo OpenID
license_agreement: 'When you confirm your account you will need to agree to the <a href="http://www.osmfoundation.org/wiki/License/Contributor_Terms">contributor terms</a>.'
email address: "Email Address:"
confirm email address: "Confirm Email Address:"
- not displayed publicly: 'Not displayed publicly (see <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="wiki privacy policy including section on email addresses">privacy policy</a>)'
+ not displayed publicly: 'Your address is not displayed publicly, see our <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy" title="OSMF privacy policy including section on email addresses">privacy policy</a> for more information'
display name: "Display Name:"
display name description: "Your publicly displayed username. You can change this later in the preferences."
external auth: "Third Party Authentication:"
friends_diaries: "friends' diary entries"
nearby_changesets: "nearby user changesets"
nearby_diaries: "nearby user diary entries"
+ report: "Report this user?"
popup:
your location: "Your location"
nearby mapper: "Nearby mapper"
helper:
time_future: "Ends in %{time}."
until_login: "Active until the user logs in."
+ time_future_and_until_login: "Ends in %{time} and after the user has logged in."
time_past: "Ended %{time} ago."
blocks_on:
title: "Blocks on %{name}"
key:
title: "Map Key"
tooltip: "Map Key"
- tooltip_disabled: "Map Key available only for Standard layer"
+ tooltip_disabled: "Map Key not available for this layer"
map:
zoom:
in: Zoom In
header: Map Layers
notes: Map Notes
data: Map Data
+ gps: Public GPS Traces
overlays: Enable overlays for troubleshooting the map
title: "Layers"
copyright: "© <a href='%{copyright_url}'>OpenStreetMap contributors</a>"
comment: Comment
edit_help: Move the map and zoom in on a location you want to edit, then click here.
directions:
+ ascend: "Ascend"
engines:
graphhopper_bicycle: "Bicycle (GraphHopper)"
+ graphhopper_car: "Car (GraphHopper)"
graphhopper_foot: "Foot (GraphHopper)"
mapquest_bicycle: "Bicycle (MapQuest)"
mapquest_car: "Car (MapQuest)"
mapzen_bicycle: "Bicycle (Mapzen)"
mapzen_car: "Car (Mapzen)"
mapzen_foot: "Foot (Mapzen)"
+ descend: "Descend"
directions: "Directions"
distance: "Distance"
errors:
against_oneway_without_exit: Go against one-way on %{name}
end_oneway_without_exit: End of one-way on %{name}
roundabout_with_exit: At roundabout take exit %{exit} onto %{name}
+ turn_left_with_exit: At roundabout turn left onto %{name}
+ slight_left_with_exit: At roundabout slight left onto %{name}
+ turn_right_with_exit: At roundabout turn right onto %{name}
+ slight_right_with_exit: At roundabout slight right onto %{name}
+ continue_with_exit: At roundabout continue straight onto %{name}
unnamed: "unnamed road"
courtesy: "Directions courtesy of %{link}"
time: "Time"
nothing_found: No features found
error: "Error contacting %{server}: %{error}"
timeout: "Timeout contacting %{server}"
+ context:
+ directions_from: Directions from here
+ directions_to: Directions to here
+ add_note: Add a note here
+ show_address: Show address
+ query_features: Query features
+ centre_map: Centre map here
redaction:
edit:
description: "Description"
match "/go/:code" => "site#permalink", :via => :get, :code => /[a-zA-Z0-9_@~]+[=-]*/
# rich text preview
- match "/preview/:format" => "site#preview", :via => :post, :as => :preview
+ match "/preview/:type" => "site#preview", :via => :post, :as => :preview
# traces
match "/user/:display_name/traces/tag/:tag/page/:page" => "trace#list", :via => :get, :page => /[1-9][0-9]*/
match "/traces/mine" => "trace#mine", :via => :get
match "/trace/create" => "trace#create", :via => [:get, :post]
match "/trace/:id/data" => "trace#data", :via => :get, :id => /\d+/, :as => "trace_data"
- match "/trace/:id/edit" => "trace#edit", :via => [:get, :post, :patch], :id => /\d+/, :as => "trace_edit"
+ match "/trace/:id/edit" => "trace#edit", :via => [:get, :post], :id => /\d+/, :as => "trace_edit"
match "/trace/:id/delete" => "trace#delete", :via => :post, :id => /\d+/
# diary pages
match "/user/:display_name/diary/:id/edit" => "diary_entry#edit", :via => [:get, :post], :id => /\d+/
match "/user/:display_name/diary/:id/hide" => "diary_entry#hide", :via => :post, :id => /\d+/, :as => :hide_diary_entry
match "/user/:display_name/diary/:id/hidecomment/:comment" => "diary_entry#hidecomment", :via => :post, :id => /\d+/, :comment => /\d+/, :as => :hide_diary_comment
+ match "/user/:display_name/diary/:id/subscribe" => "diary_entry#subscribe", :via => :post, :as => :diary_entry_subscribe, :id => /\d+/
+ match "/user/:display_name/diary/:id/unsubscribe" => "diary_entry#unsubscribe", :via => :post, :as => :diary_entry_unsubscribe, :id => /\d+/
# user pages
match "/user/:display_name" => "user#view", :via => :get, :as => "user"
resources :user_blocks
match "/blocks/:id/revoke" => "user_blocks#revoke", :via => [:get, :post], :as => "revoke_user_block"
+ # issues and reports
+ resources :issues do
+ member do
+ post "resolve"
+ post "assign"
+ post "ignore"
+ post "reopen"
+ end
+ end
+
+ post "/comment" => "issues#comment"
+
# redactions
resources :redactions
end
-- PostgreSQL database dump
--
- -- Dumped from database version 9.5.3
- -- Dumped by pg_dump version 9.5.3
+ -- Dumped from database version 9.5.7
+ -- Dumped by pg_dump version 9.5.7
SET statement_timeout = 0;
SET lock_timeout = 0;
ALTER SEQUENCE acls_id_seq OWNED BY acls.id;
+ --
+ -- Name: ar_internal_metadata; Type: TABLE; Schema: public; Owner: -
+ --
+
+ CREATE TABLE ar_internal_metadata (
+ key character varying NOT NULL,
+ value character varying,
+ created_at timestamp without time zone NOT NULL,
+ updated_at timestamp without time zone NOT NULL
+ );
+
+
--
-- Name: changeset_comments; Type: TABLE; Schema: public; Owner: -
--
ALTER SEQUENCE diary_entries_id_seq OWNED BY diary_entries.id;
+ --
+ -- Name: diary_entry_subscriptions; Type: TABLE; Schema: public; Owner: -
+ --
+
+ CREATE TABLE diary_entry_subscriptions (
+ user_id bigint NOT NULL,
+ diary_entry_id bigint NOT NULL
+ );
+
+
--
-- Name: friends; Type: TABLE; Schema: public; Owner: -
--
ALTER SEQUENCE gpx_files_id_seq OWNED BY gpx_files.id;
+--
+-- Name: issue_comments; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE issue_comments (
+ id integer NOT NULL,
+ issue_id integer,
+ commenter_user_id integer,
+ body text,
+ created_at timestamp without time zone NOT NULL,
+ reassign boolean,
+ updated_at timestamp without time zone NOT NULL
+);
+
+
+--
+-- Name: issue_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE issue_comments_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: issue_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE issue_comments_id_seq OWNED BY issue_comments.id;
+
+
+--
+-- Name: issues; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE issues (
+ id integer NOT NULL,
+ reportable_type character varying NOT NULL,
+ reportable_id integer NOT NULL,
+ reported_user_id integer NOT NULL,
+ status integer,
+ issue_type character varying,
+ resolved_at timestamp without time zone,
+ resolved_by integer,
+ created_at timestamp without time zone NOT NULL,
+ updated_at timestamp without time zone NOT NULL,
+ updated_by integer,
+ report_count integer DEFAULT 0
+);
+
+
+--
+-- Name: issues_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE issues_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: issues_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE issues_id_seq OWNED BY issues.id;
+
+
--
-- Name: languages; Type: TABLE; Schema: public; Owner: -
--
);
+--
+-- Name: reports; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE reports (
+ id integer NOT NULL,
+ issue_id integer,
+ reporter_user_id integer,
+ details text,
+ created_at timestamp without time zone NOT NULL,
+ updated_at timestamp without time zone NOT NULL
+);
+
+
+--
+-- Name: reports_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE reports_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: reports_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE reports_id_seq OWNED BY reports.id;
+
+
--
-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
--
ALTER TABLE ONLY gpx_files ALTER COLUMN id SET DEFAULT nextval('gpx_files_id_seq'::regclass);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issue_comments ALTER COLUMN id SET DEFAULT nextval('issue_comments_id_seq'::regclass);
+
+
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issues ALTER COLUMN id SET DEFAULT nextval('issues_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY redactions ALTER COLUMN id SET DEFAULT nextval('redactions_id_seq'::regclass);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY reports ALTER COLUMN id SET DEFAULT nextval('reports_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
ADD CONSTRAINT acls_pkey PRIMARY KEY (id);
+ --
+ -- Name: ar_internal_metadata_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+ --
+
+ ALTER TABLE ONLY ar_internal_metadata
+ ADD CONSTRAINT ar_internal_metadata_pkey PRIMARY KEY (key);
+
+
--
-- Name: changeset_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ADD CONSTRAINT diary_entries_pkey PRIMARY KEY (id);
+ --
+ -- Name: diary_entry_subscriptions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+ --
+
+ ALTER TABLE ONLY diary_entry_subscriptions
+ ADD CONSTRAINT diary_entry_subscriptions_pkey PRIMARY KEY (user_id, diary_entry_id);
+
+
--
-- Name: friends_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ADD CONSTRAINT gpx_files_pkey PRIMARY KEY (id);
+--
+-- Name: issue_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issue_comments
+ ADD CONSTRAINT issue_comments_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: issues_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issues
+ ADD CONSTRAINT issues_pkey PRIMARY KEY (id);
+
+
--
-- Name: languages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ADD CONSTRAINT relations_pkey PRIMARY KEY (relation_id, version);
+--
+-- Name: reports_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY reports
+ ADD CONSTRAINT reports_pkey PRIMARY KEY (id);
+
+
--
-- Name: user_blocks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
CREATE UNIQUE INDEX index_client_applications_on_key ON client_applications USING btree (key);
+ --
+ -- Name: index_client_applications_on_user_id; Type: INDEX; Schema: public; Owner: -
+ --
+
+ CREATE INDEX index_client_applications_on_user_id ON client_applications USING btree (user_id);
+
+
+ --
+ -- Name: index_diary_entry_subscriptions_on_diary_entry_id; Type: INDEX; Schema: public; Owner: -
+ --
+
+ CREATE INDEX index_diary_entry_subscriptions_on_diary_entry_id ON diary_entry_subscriptions USING btree (diary_entry_id);
+
+
+--
+-- Name: index_issue_comments_on_commenter_user_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_issue_comments_on_commenter_user_id ON issue_comments USING btree (commenter_user_id);
+
+
+--
+-- Name: index_issue_comments_on_issue_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_issue_comments_on_issue_id ON issue_comments USING btree (issue_id);
+
+
+--
+-- Name: index_issues_on_reportable_id_and_reportable_type; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_issues_on_reportable_id_and_reportable_type ON issues USING btree (reportable_id, reportable_type);
+
+
+--
+-- Name: index_issues_on_reported_user_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_issues_on_reported_user_id ON issues USING btree (reported_user_id);
+
+
+--
+-- Name: index_issues_on_updated_by; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_issues_on_updated_by ON issues USING btree (updated_by);
+
+
--
-- Name: index_note_comments_on_body; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX index_oauth_tokens_on_token ON oauth_tokens USING btree (token);
+ --
+ -- Name: index_oauth_tokens_on_user_id; Type: INDEX; Schema: public; Owner: -
+ --
+
+ CREATE INDEX index_oauth_tokens_on_user_id ON oauth_tokens USING btree (user_id);
+
+
+--
+-- Name: index_reports_on_issue_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_reports_on_issue_id ON reports USING btree (issue_id);
+
+
+--
+-- Name: index_reports_on_reporter_user_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX index_reports_on_reporter_user_id ON reports USING btree (reporter_user_id);
+
+
--
-- Name: index_user_blocks_on_user_id; Type: INDEX; Schema: public; Owner: -
--
ADD CONSTRAINT diary_entries_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
+ --
+ -- Name: diary_entry_subscriptions_diary_entry_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+ --
+
+ ALTER TABLE ONLY diary_entry_subscriptions
+ ADD CONSTRAINT diary_entry_subscriptions_diary_entry_id_fkey FOREIGN KEY (diary_entry_id) REFERENCES diary_entries(id);
+
+
+ --
+ -- Name: diary_entry_subscriptions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+ --
+
+ ALTER TABLE ONLY diary_entry_subscriptions
+ ADD CONSTRAINT diary_entry_subscriptions_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
+
+
--
-- Name: friends_friend_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ADD CONSTRAINT gpx_files_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
+--
+-- Name: issue_comments_commenter_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issue_comments
+ ADD CONSTRAINT issue_comments_commenter_user_id FOREIGN KEY (commenter_user_id) REFERENCES users(id) ON DELETE CASCADE;
+
+
+--
+-- Name: issue_comments_issue_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issue_comments
+ ADD CONSTRAINT issue_comments_issue_id_fkey FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE;
+
+
+--
+-- Name: issues_reported_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issues
+ ADD CONSTRAINT issues_reported_user_id_fkey FOREIGN KEY (reported_user_id) REFERENCES users(id) ON DELETE CASCADE;
+
+
+--
+-- Name: issues_updated_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY issues
+ ADD CONSTRAINT issues_updated_by_fkey FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE CASCADE;
+
+
--
-- Name: messages_from_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ADD CONSTRAINT relations_redaction_id_fkey FOREIGN KEY (redaction_id) REFERENCES redactions(id);
+--
+-- Name: reports_issue_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY reports
+ ADD CONSTRAINT reports_issue_id_fkey FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE;
+
+
+--
+-- Name: reports_reporter_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY reports
+ ADD CONSTRAINT reports_reporter_user_id_fkey FOREIGN KEY (reporter_user_id) REFERENCES users(id) ON DELETE CASCADE;
+
+
--
-- Name: user_blocks_moderator_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
SET search_path TO "$user", public;
- INSERT INTO schema_migrations (version) VALUES ('1');
-
- INSERT INTO schema_migrations (version) VALUES ('10');
-
- INSERT INTO schema_migrations (version) VALUES ('11');
-
- INSERT INTO schema_migrations (version) VALUES ('12');
-
- INSERT INTO schema_migrations (version) VALUES ('13');
-
- INSERT INTO schema_migrations (version) VALUES ('14');
-
- INSERT INTO schema_migrations (version) VALUES ('15');
-
- INSERT INTO schema_migrations (version) VALUES ('16');
-
- INSERT INTO schema_migrations (version) VALUES ('17');
-
- INSERT INTO schema_migrations (version) VALUES ('18');
-
- INSERT INTO schema_migrations (version) VALUES ('19');
-
- INSERT INTO schema_migrations (version) VALUES ('2');
-
- INSERT INTO schema_migrations (version) VALUES ('20');
-
- INSERT INTO schema_migrations (version) VALUES ('20100513171259');
-
- INSERT INTO schema_migrations (version) VALUES ('20100516124737');
-
- INSERT INTO schema_migrations (version) VALUES ('20100910084426');
-
- INSERT INTO schema_migrations (version) VALUES ('20101114011429');
-
- INSERT INTO schema_migrations (version) VALUES ('20110322001319');
-
- INSERT INTO schema_migrations (version) VALUES ('20110508145337');
-
- INSERT INTO schema_migrations (version) VALUES ('20110521142405');
-
- INSERT INTO schema_migrations (version) VALUES ('20110925112722');
-
- INSERT INTO schema_migrations (version) VALUES ('20111116184519');
-
- INSERT INTO schema_migrations (version) VALUES ('20111212183945');
-
- INSERT INTO schema_migrations (version) VALUES ('20120123184321');
-
- INSERT INTO schema_migrations (version) VALUES ('20120208122334');
-
- INSERT INTO schema_migrations (version) VALUES ('20120208194454');
-
- INSERT INTO schema_migrations (version) VALUES ('20120214210114');
-
- INSERT INTO schema_migrations (version) VALUES ('20120219161649');
-
- INSERT INTO schema_migrations (version) VALUES ('20120318201948');
-
- INSERT INTO schema_migrations (version) VALUES ('20120328090602');
-
- INSERT INTO schema_migrations (version) VALUES ('20120404205604');
-
- INSERT INTO schema_migrations (version) VALUES ('20120808231205');
-
- INSERT INTO schema_migrations (version) VALUES ('20121005195010');
-
- INSERT INTO schema_migrations (version) VALUES ('20121012044047');
-
- INSERT INTO schema_migrations (version) VALUES ('20121119165817');
-
- INSERT INTO schema_migrations (version) VALUES ('20121202155309');
-
- INSERT INTO schema_migrations (version) VALUES ('20121203124841');
-
- INSERT INTO schema_migrations (version) VALUES ('20130328184137');
-
- INSERT INTO schema_migrations (version) VALUES ('20131029121300');
-
- INSERT INTO schema_migrations (version) VALUES ('20131212124700');
-
- INSERT INTO schema_migrations (version) VALUES ('20140115192822');
-
- INSERT INTO schema_migrations (version) VALUES ('20140117185510');
-
- INSERT INTO schema_migrations (version) VALUES ('20140210003018');
-
- INSERT INTO schema_migrations (version) VALUES ('20140507110937');
-
- INSERT INTO schema_migrations (version) VALUES ('20140519141742');
-
- INSERT INTO schema_migrations (version) VALUES ('20150110152606');
-
- INSERT INTO schema_migrations (version) VALUES ('20150111192335');
-
- INSERT INTO schema_migrations (version) VALUES ('20150222101847');
-
- INSERT INTO schema_migrations (version) VALUES ('20150818224516');
-
- INSERT INTO schema_migrations (version) VALUES ('20160822153055');
-
- INSERT INTO schema_migrations (version) VALUES ('20160822153115');
-
- INSERT INTO schema_migrations (version) VALUES ('20160822153153');
-
- INSERT INTO schema_migrations (version) VALUES ('21');
-
- INSERT INTO schema_migrations (version) VALUES ('22');
-
- INSERT INTO schema_migrations (version) VALUES ('23');
-
- INSERT INTO schema_migrations (version) VALUES ('24');
-
- INSERT INTO schema_migrations (version) VALUES ('25');
-
- INSERT INTO schema_migrations (version) VALUES ('26');
-
- INSERT INTO schema_migrations (version) VALUES ('27');
-
- INSERT INTO schema_migrations (version) VALUES ('28');
-
- INSERT INTO schema_migrations (version) VALUES ('29');
-
- INSERT INTO schema_migrations (version) VALUES ('3');
-
- INSERT INTO schema_migrations (version) VALUES ('30');
-
- INSERT INTO schema_migrations (version) VALUES ('31');
-
- INSERT INTO schema_migrations (version) VALUES ('32');
-
- INSERT INTO schema_migrations (version) VALUES ('33');
-
- INSERT INTO schema_migrations (version) VALUES ('34');
-
- INSERT INTO schema_migrations (version) VALUES ('35');
-
- INSERT INTO schema_migrations (version) VALUES ('36');
-
- INSERT INTO schema_migrations (version) VALUES ('37');
-
- INSERT INTO schema_migrations (version) VALUES ('38');
-
- INSERT INTO schema_migrations (version) VALUES ('39');
-
- INSERT INTO schema_migrations (version) VALUES ('4');
-
- INSERT INTO schema_migrations (version) VALUES ('40');
-
- INSERT INTO schema_migrations (version) VALUES ('41');
-
- INSERT INTO schema_migrations (version) VALUES ('42');
-
- INSERT INTO schema_migrations (version) VALUES ('43');
-
- INSERT INTO schema_migrations (version) VALUES ('44');
-
- INSERT INTO schema_migrations (version) VALUES ('45');
-
- INSERT INTO schema_migrations (version) VALUES ('46');
-
- INSERT INTO schema_migrations (version) VALUES ('47');
-
- INSERT INTO schema_migrations (version) VALUES ('48');
-
- INSERT INTO schema_migrations (version) VALUES ('49');
-
- INSERT INTO schema_migrations (version) VALUES ('5');
-
- INSERT INTO schema_migrations (version) VALUES ('50');
-
- INSERT INTO schema_migrations (version) VALUES ('51');
-
- INSERT INTO schema_migrations (version) VALUES ('52');
-
- INSERT INTO schema_migrations (version) VALUES ('53');
-
- INSERT INTO schema_migrations (version) VALUES ('54');
-
- INSERT INTO schema_migrations (version) VALUES ('55');
-
- INSERT INTO schema_migrations (version) VALUES ('56');
-
- INSERT INTO schema_migrations (version) VALUES ('57');
-
- INSERT INTO schema_migrations (version) VALUES ('6');
-
- INSERT INTO schema_migrations (version) VALUES ('7');
-
- INSERT INTO schema_migrations (version) VALUES ('8');
-
- INSERT INTO schema_migrations (version) VALUES ('9');
+ INSERT INTO "schema_migrations" (version) VALUES
+ ('1'),
+ ('10'),
+ ('11'),
+ ('12'),
+ ('13'),
+ ('14'),
+ ('15'),
+ ('16'),
+ ('17'),
+ ('18'),
+ ('19'),
+ ('2'),
+ ('20'),
+ ('20100513171259'),
+ ('20100516124737'),
+ ('20100910084426'),
+ ('20101114011429'),
+ ('20110322001319'),
+ ('20110508145337'),
+ ('20110521142405'),
+ ('20110925112722'),
+ ('20111116184519'),
+ ('20111212183945'),
+ ('20120123184321'),
+ ('20120208122334'),
+ ('20120208194454'),
+ ('20120214210114'),
+ ('20120219161649'),
+ ('20120318201948'),
+ ('20120328090602'),
+ ('20120404205604'),
+ ('20120808231205'),
+ ('20121005195010'),
+ ('20121012044047'),
+ ('20121119165817'),
+ ('20121202155309'),
+ ('20121203124841'),
+ ('20130328184137'),
+ ('20131212124700'),
+ ('20140115192822'),
+ ('20140117185510'),
+ ('20140210003018'),
+ ('20140507110937'),
+ ('20140519141742'),
+ ('20150110152606'),
+ ('20150111192335'),
+ ('20150222101847'),
+ ('20150818224516'),
++('20160822153055'),
++('20160822153115'),
++('20160822153153'),
+ ('20161002153425'),
+ ('20161011010929'),
+ ('20170222134109'),
+ ('21'),
+ ('22'),
+ ('23'),
+ ('24'),
+ ('25'),
+ ('26'),
+ ('27'),
+ ('28'),
+ ('29'),
+ ('3'),
+ ('30'),
+ ('31'),
+ ('32'),
+ ('33'),
+ ('34'),
+ ('35'),
+ ('36'),
+ ('37'),
+ ('38'),
+ ('39'),
+ ('4'),
+ ('40'),
+ ('41'),
+ ('42'),
+ ('43'),
+ ('44'),
+ ('45'),
+ ('46'),
+ ('47'),
+ ('48'),
+ ('49'),
+ ('5'),
+ ('50'),
+ ('51'),
+ ('52'),
+ ('53'),
+ ('54'),
+ ('55'),
+ ('56'),
+ ('57'),
+ ('6'),
+ ('7'),
+ ('8'),
+ ('9');
-
-