├── log └── .keep ├── tmp └── .keep ├── lib ├── assets │ └── .keep └── tasks │ └── .keep ├── public ├── favicon.ico ├── apple-touch-icon.png ├── apple-touch-icon-precomposed.png ├── assets │ ├── default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css │ ├── application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css │ ├── pwb │ │ ├── application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css │ │ ├── config-fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8.js.gz │ │ ├── application-e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553.js.gz │ │ ├── themes │ │ │ ├── vic-0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942.js.gz │ │ │ ├── vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css.gz │ │ │ ├── berlin-4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905.js.gz │ │ │ ├── chic-9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678.css.gz │ │ │ ├── matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css.gz │ │ │ ├── berlin-2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a.css.gz │ │ │ ├── default-33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7.css.gz │ │ │ ├── squares-b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0.css.gz │ │ │ ├── squares-d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227.js.gz │ │ │ ├── matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css │ │ │ └── vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css │ │ └── application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz │ ├── default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz │ ├── application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz │ ├── application-e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f.js.gz │ ├── property_web_scraper │ │ ├── application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css │ │ ├── application-c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc.js.gz │ │ ├── spp_vuetify-bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1.js.gz │ │ ├── application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css.gz │ │ ├── spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css.gz │ │ └── spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css │ ├── pwb_admin_panel │ │ ├── application-27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a.js.gz │ │ ├── application-fcf470d4911d3080d2732d4aaa67dc892e0b4a32c429899cff0a7a9f28cc2347.js.gz │ │ ├── application-533dc7df547722ab0e3328b84391671ed6a751af1b3b25bc77cd5e6f47255084.css.gz │ │ ├── application-921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915.css.gz │ │ ├── application_legacy_1-3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8.js.gz │ │ └── application_legacy_1-568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841.css.gz │ └── .sprockets-manifest-758e8b8299526c3c45a4a70c9d0abb4c.json ├── robots.txt ├── 500.html ├── 422.html └── 404.html ├── .ruby-version ├── app ├── assets │ ├── images │ │ └── .keep │ ├── javascripts │ │ ├── channels │ │ │ └── .keep │ │ ├── cable.js │ │ └── application.js │ ├── config │ │ └── manifest.js │ └── stylesheets │ │ └── application.css ├── models │ ├── concerns │ │ └── .keep │ └── application_record.rb ├── controllers │ ├── concerns │ │ └── .keep │ └── application_controller.rb ├── views │ └── layouts │ │ ├── mailer.text.erb │ │ ├── mailer.html.erb │ │ └── application.html.erb ├── helpers │ └── application_helper.rb ├── jobs │ └── application_job.rb ├── channels │ └── application_cable │ │ ├── channel.rb │ │ └── connection.rb └── mailers │ └── application_mailer.rb ├── vendor └── assets │ ├── javascripts │ └── .keep │ └── stylesheets │ └── .keep ├── bin ├── rake ├── bundle ├── rails ├── update └── setup ├── config ├── spring.rb ├── boot.rb ├── environment.rb ├── cable.yml ├── initializers │ ├── session_store.rb │ ├── mime_types.rb │ ├── application_controller_renderer.rb │ ├── filter_parameter_logging.rb │ ├── cookies_serializer.rb │ ├── backtrace_silencers.rb │ ├── wrap_parameters.rb │ ├── inflections.rb │ ├── assets.rb │ └── new_framework_defaults.rb ├── routes.rb ├── locales │ └── en.yml ├── application.rb ├── environments │ ├── test.rb │ ├── development.rb │ ├── precompile.rb │ └── production.rb ├── puma.rb ├── secrets.yml └── database.yml ├── config.ru ├── Rakefile ├── db ├── migrate │ ├── 20170106165040_add_theme_name_to_pwb_agency.pwb.rb │ ├── 20180109161408_add_contact_id_to_pwb_messages.pwb.rb │ ├── 20170410171020_add_section_key_to_pwb_contents.pwb.rb │ ├── 20170921074119_add_block_key_to_pwb_content_photos.pwb.rb │ ├── 20170222123517_change_count_bathrooms_for_prop.pwb.rb │ ├── 20170217103549_add_area_unit_to_prop.pwb.rb │ ├── 20170428174409_change_prop_prices_to_big_int.pwb.rb │ ├── 20171017082352_add_page_part_key_to_pwb_contents.pwb.rb │ ├── 20180118190838_create_authorizations.pwb.rb │ ├── 20161215152136_create_pwb_features.pwb.rb │ ├── 20170921063048_translate_links.pwb.rb │ ├── 20161215152129_create_pwb_sections.pwb.rb │ ├── 20161215152124_translate_contents.pwb.rb │ ├── 20161215152132_create_pwb_prop_photos.pwb.rb │ ├── 20161215152133_create_pwb_addresses.pwb.rb │ ├── 20161215152125_create_pwb_content_photos.pwb.rb │ ├── 20180130121938_add_page_parts_to_pwb_websites.pwb.rb │ ├── 20161215152130_create_pwb_translations.pwb.rb │ ├── 20161215152123_create_pwb_contents.pwb.rb │ ├── 20170921063046_translate_pages.pwb.rb │ ├── 20170410171019_add_extra_cols_to_pwb_sections.pwb.rb │ ├── 20170921063049_create_pwb_page_contents.pwb.rb │ ├── 20161215152134_create_pwb_messages.pwb.rb │ ├── 20161215152128_translate_props.pwb.rb │ ├── 20161215152131_create_pwb_field_keys.pwb.rb │ ├── 20171204110202_create_property_web_scraper_import_hosts.property_web_scraper.rb │ ├── 20170921063045_create_pwb_pages.pwb.rb │ ├── 20161215152135_create_pwb_clients.pwb.rb │ ├── 20171017082353_create_pwb_page_parts.pwb.rb │ ├── 20170921063047_create_pwb_links.pwb.rb │ ├── 20170925184111_create_pwb_contacts.pwb.rb │ ├── 20161215152126_create_pwb_agencies.pwb.rb │ ├── 20161215152137_devise_create_pwb_users.pwb.rb │ ├── 20170217103548_create_pwb_websites.pwb.rb │ ├── 20161215152127_create_pwb_props.pwb.rb │ └── 20171204110203_create_property_web_scraper_listings.property_web_scraper.rb ├── seeds.rb └── schema.rb ├── docker-entrypoint.sh ├── ISSUE_TEMPLATE.md ├── .gitignore ├── README.md ├── app.json ├── Dockerfile ├── Gemfile └── Gemfile.lock /log/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tmp/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/assets/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/tasks/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.5.1 2 | -------------------------------------------------------------------------------- /app/assets/images/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/models/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/controllers/concerns/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/javascripts/channels/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.text.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/jobs/application_job.rb: -------------------------------------------------------------------------------- 1 | class ApplicationJob < ActiveJob::Base 2 | end 3 | -------------------------------------------------------------------------------- /public/assets/default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/pwb/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /app/models/application_record.rb: -------------------------------------------------------------------------------- 1 | class ApplicationRecord < ActiveRecord::Base 2 | self.abstract_class = true 3 | end 4 | -------------------------------------------------------------------------------- /app/channels/application_cable/channel.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Channel < ActionCable::Channel::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/assets/config/manifest.js: -------------------------------------------------------------------------------- 1 | //= link_tree ../images 2 | //= link_directory ../javascripts .js 3 | //= link_directory ../stylesheets .css 4 | -------------------------------------------------------------------------------- /app/channels/application_cable/connection.rb: -------------------------------------------------------------------------------- 1 | module ApplicationCable 2 | class Connection < ActionCable::Connection::Base 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | protect_from_forgery with: :exception 3 | end 4 | -------------------------------------------------------------------------------- /app/mailers/application_mailer.rb: -------------------------------------------------------------------------------- 1 | class ApplicationMailer < ActionMailer::Base 2 | default from: 'from@example.com' 3 | layout 'mailer' 4 | end 5 | -------------------------------------------------------------------------------- /bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | load Gem.bin_path('bundler', 'bundle') 4 | -------------------------------------------------------------------------------- /config/spring.rb: -------------------------------------------------------------------------------- 1 | %w( 2 | .ruby-version 3 | .rbenv-vars 4 | tmp/restart.txt 5 | tmp/caching-dev.txt 6 | ).each { |path| Spring.watch(path) } 7 | -------------------------------------------------------------------------------- /config/boot.rb: -------------------------------------------------------------------------------- 1 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) 2 | 3 | require 'bundler/setup' # Set up gems listed in the Gemfile. 4 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require_relative 'config/environment' 4 | 5 | run Rails.application 6 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path('../config/application', __dir__) 3 | require_relative '../config/boot' 4 | require 'rails/commands' 5 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require_relative 'application' 3 | 4 | # Initialize the Rails application. 5 | Rails.application.initialize! 6 | -------------------------------------------------------------------------------- /config/cable.yml: -------------------------------------------------------------------------------- 1 | development: 2 | adapter: async 3 | 4 | test: 5 | adapter: async 6 | 7 | production: 8 | adapter: redis 9 | url: redis://localhost:6379/1 10 | -------------------------------------------------------------------------------- /config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Rails.application.config.session_store :cookie_store, key: '_pwb-for-heroku_session' 4 | -------------------------------------------------------------------------------- /config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | -------------------------------------------------------------------------------- /config/initializers/application_controller_renderer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # ApplicationController.renderer.defaults.merge!( 4 | # http_host: 'example.org', 5 | # https: false 6 | # ) 7 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file 2 | # 3 | # To ban all spiders from the entire site uncomment the next two lines: 4 | # User-agent: * 5 | # Disallow: / 6 | -------------------------------------------------------------------------------- /public/assets/default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/config-fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/config-fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8.js.gz -------------------------------------------------------------------------------- /public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz -------------------------------------------------------------------------------- /public/assets/application-e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/application-e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f.js.gz -------------------------------------------------------------------------------- /config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure sensitive parameters which will be filtered from the log file. 4 | Rails.application.config.filter_parameters += [:password] 5 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 3 | mount Pwb::Engine => '/' 4 | # mount PropertyWebScraper::Engine => '/io/' 5 | 6 | end 7 | -------------------------------------------------------------------------------- /public/assets/pwb/application-e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/application-e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553.js.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/vic-0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/vic-0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942.js.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css.gz -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require_relative 'config/application' 5 | 6 | Rails.application.load_tasks 7 | -------------------------------------------------------------------------------- /public/assets/pwb/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/berlin-4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/berlin-4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905.js.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/chic-9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/chic-9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/berlin-2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/berlin-2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/default-33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/default-33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/squares-b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/squares-b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0.css.gz -------------------------------------------------------------------------------- /public/assets/pwb/themes/squares-d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb/themes/squares-d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227.js.gz -------------------------------------------------------------------------------- /public/assets/property_web_scraper/application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css: -------------------------------------------------------------------------------- 1 | .login_url input,.password input,.url_input input,.username input,.url_input input{width:80%;padding:6px;margin:10px;font-size:large}.btn a{color:white} 2 | -------------------------------------------------------------------------------- /db/migrate/20170106165040_add_theme_name_to_pwb_agency.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161222085708) 2 | class AddThemeNameToPwbAgency < ActiveRecord::Migration[5.0] 3 | def change 4 | add_column :pwb_agencies, :theme_name, :string 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application-27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application-27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a.js.gz -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application-fcf470d4911d3080d2732d4aaa67dc892e0b4a32c429899cff0a7a9f28cc2347.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application-fcf470d4911d3080d2732d4aaa67dc892e0b4a32c429899cff0a7a9f28cc2347.js.gz -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application-533dc7df547722ab0e3328b84391671ed6a751af1b3b25bc77cd5e6f47255084.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application-533dc7df547722ab0e3328b84391671ed6a751af1b3b25bc77cd5e6f47255084.css.gz -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application-921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application-921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915.css.gz -------------------------------------------------------------------------------- /public/assets/property_web_scraper/application-c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/property_web_scraper/application-c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc.js.gz -------------------------------------------------------------------------------- /public/assets/property_web_scraper/spp_vuetify-bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/property_web_scraper/spp_vuetify-bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1.js.gz -------------------------------------------------------------------------------- /db/migrate/20180109161408_add_contact_id_to_pwb_messages.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20180109133855) 2 | class AddContactIdToPwbMessages < ActiveRecord::Migration[5.1] 3 | def change 4 | add_column :pwb_messages, :contact_id, :integer, index: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /public/assets/property_web_scraper/application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/property_web_scraper/application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css.gz -------------------------------------------------------------------------------- /public/assets/property_web_scraper/spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/property_web_scraper/spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css.gz -------------------------------------------------------------------------------- /db/migrate/20170410171020_add_section_key_to_pwb_contents.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170315205332) 2 | class AddSectionKeyToPwbContents < ActiveRecord::Migration[5.0] 3 | def change 4 | add_column :pwb_contents, :section_key, :string, index: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application_legacy_1-3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application_legacy_1-3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8.js.gz -------------------------------------------------------------------------------- /public/assets/pwb_admin_panel/application_legacy_1-568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/etewiah/pwb-for-heroku/HEAD/public/assets/pwb_admin_panel/application_legacy_1-568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841.css.gz -------------------------------------------------------------------------------- /config/initializers/cookies_serializer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Specify a serializer for the signed and encrypted cookie jars. 4 | # Valid options are :json, :marshal, and :hybrid. 5 | Rails.application.config.action_dispatch.cookies_serializer = :json 6 | -------------------------------------------------------------------------------- /db/migrate/20170921074119_add_block_key_to_pwb_content_photos.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170919134945) 2 | class AddBlockKeyToPwbContentPhotos < ActiveRecord::Migration[5.1] 3 | def change 4 | add_column :pwb_content_photos, :block_key, :string, index: true 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | -------------------------------------------------------------------------------- /db/migrate/20170222123517_change_count_bathrooms_for_prop.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170222100759) 2 | class ChangeCountBathroomsForProp < ActiveRecord::Migration[5.0] 3 | def change 4 | # below needed to support 1.5 bathrooms in US 5 | change_column :pwb_props, :count_bathrooms, :float 6 | end 7 | end 8 | 9 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Run the DB in background 4 | sudo -E -u postgres pg_ctl -D "$PGDATA" -o "-c listen_addresses=''" -w start 5 | 6 | # Create the DB 7 | if [ ! -f migration_done ]; then 8 | bundle exec rake db:migrate pwb:db:seed pwb:db:seed_pages && \ 9 | touch migration_done 10 | fi 11 | 12 | # Run the app 13 | rackup 14 | -------------------------------------------------------------------------------- /db/migrate/20170217103549_add_area_unit_to_prop.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170205132427) 2 | class AddAreaUnitToProp < ActiveRecord::Migration[5.0] 3 | # https://www.sitepoint.com/enumerated-types-with-activerecord-and-postgresql/ 4 | def change 5 | add_column :pwb_props, :area_unit, :integer, default: 0, index: true 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /db/migrate/20170428174409_change_prop_prices_to_big_int.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170428170615) 2 | class ChangePropPricesToBigInt < ActiveRecord::Migration[5.0] 3 | def change 4 | change_column :pwb_props, :price_sale_current_cents, :integer, limit: 8 5 | change_column :pwb_props, :price_sale_original_cents, :integer, limit: 8 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 7 | 8 | ### Expected Behaviour: 9 | 10 | ### Actual Behaviour: 11 | 12 | ### Steps to reproduce the issue: 13 | -------------------------------------------------------------------------------- /db/migrate/20171017082352_add_page_part_key_to_pwb_contents.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170917215533) 2 | class AddPagePartKeyToPwbContents < ActiveRecord::Migration[5.1] 3 | def change 4 | add_column :pwb_contents, :page_part_key, :string, index: true 5 | # add_column :pwb_contents, :visible_on_page, :boolean, default: true 6 | # , index: true 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /db/migrate/20180118190838_create_authorizations.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20180111045213) 2 | class CreateAuthorizations < ActiveRecord::Migration[5.1] 3 | def change 4 | create_table :pwb_authorizations do |t| 5 | t.references :user, index: true 6 | t.string :provider 7 | t.string :uid 8 | 9 | t.timestamps 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | # This file should contain all the record creation needed to seed the database with its default values. 2 | # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). 3 | # 4 | # Examples: 5 | # 6 | # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) 7 | # Character.create(name: 'Luke', movie: movies.first) 8 | -------------------------------------------------------------------------------- /db/migrate/20161215152136_create_pwb_features.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161130141845) 2 | class CreatePwbFeatures < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_features do |t| 5 | t.string :feature_key 6 | t.integer :prop_id 7 | t.timestamps null: false 8 | end 9 | add_index :pwb_features, :feature_key 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PwbForHeroku 5 | <%= csrf_meta_tags %> 6 | 7 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 8 | <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 9 | 10 | 11 | 12 | <%= yield %> 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/assets/javascripts/cable.js: -------------------------------------------------------------------------------- 1 | // Action Cable provides the framework to deal with WebSockets in Rails. 2 | // You can generate new channels where WebSocket features live using the rails generate channel command. 3 | // 4 | //= require action_cable 5 | //= require_self 6 | //= require_tree ./channels 7 | 8 | (function() { 9 | this.App || (this.App = {}); 10 | 11 | App.cable = ActionCable.createConsumer(); 12 | 13 | }).call(this); 14 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /db/migrate/20170921063048_translate_links.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170720201601) 2 | class TranslateLinks < ActiveRecord::Migration[5.0] 3 | def self.up 4 | Pwb::Link.create_translation_table!({ 5 | :link_title => {:type => :string, :default => ''} 6 | }, { 7 | :migrate_data => true 8 | }) 9 | end 10 | 11 | def self.down 12 | Pwb::Link.drop_translation_table! :migrate_data => true 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /db/migrate/20161215152129_create_pwb_sections.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161122174847) 2 | class CreatePwbSections < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_sections do |t| 5 | t.string :link_key 6 | t.string :link_path 7 | t.integer :sort_order 8 | t.boolean :visible 9 | t.timestamps null: false 10 | end 11 | 12 | add_index :pwb_sections, :link_key, :unique => true 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /db/migrate/20161215152124_translate_contents.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161108132035) 2 | require 'globalize-accessors' 3 | class TranslateContents < ActiveRecord::Migration[5.0] 4 | def self.up 5 | Pwb::Content.create_translation_table!({ 6 | raw: :text 7 | }, migrate_data: true) 8 | end 9 | 10 | def self.down 11 | Pwb::Content.drop_translation_table! migrate_data: true 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /db/migrate/20161215152132_create_pwb_prop_photos.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161124103103) 2 | class CreatePwbPropPhotos < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_prop_photos do |t| 5 | t.integer :prop_id 6 | t.string :image 7 | t.string :description 8 | t.string :folder 9 | t.integer :file_size 10 | 11 | t.integer :sort_order 12 | t.timestamps null: false 13 | end 14 | add_index :pwb_prop_photos, :prop_id 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] 9 | end 10 | 11 | # To enable root element in JSON for ActiveRecord objects. 12 | # ActiveSupport.on_load(:active_record) do 13 | # self.include_root_in_json = true 14 | # end 15 | -------------------------------------------------------------------------------- /db/migrate/20161215152133_create_pwb_addresses.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161124214746) 2 | class CreatePwbAddresses < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_addresses do |t| 5 | # t.integer :address_category 6 | t.float :longitude 7 | t.float :latitude 8 | t.string :street_number 9 | t.string :street_address 10 | t.string :postal_code 11 | t.string :city 12 | t.string :region 13 | t.string :country 14 | 15 | t.timestamps null: false 16 | end 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /db/migrate/20161215152125_create_pwb_content_photos.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161116185442) 2 | class CreatePwbContentPhotos < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_content_photos do |t| 5 | t.integer :content_id 6 | t.string :image 7 | t.string :description 8 | t.string :folder 9 | t.integer :file_size 10 | 11 | # To allow ordering of photos 12 | t.integer :sort_order 13 | t.timestamps null: false 14 | end 15 | add_index :pwb_content_photos, :content_id 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /db/migrate/20180130121938_add_page_parts_to_pwb_websites.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20180119105254) 2 | class AddPagePartsToPwbWebsites < ActiveRecord::Migration[5.1] 3 | def change 4 | # add_column :pwb_page_contents, :pwb_website, :belongs_to, index: true 5 | add_reference :pwb_page_contents, :website, index: true 6 | # add_foreign_key :pwb_page_contents, :pwb_websites 7 | # t.belongs_to :page, index: true 8 | 9 | 10 | # TODO - add favicon image (and logo image directly) 11 | # as well as details hash for storing pages.. 12 | 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /db/migrate/20161215152130_create_pwb_translations.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161123124639) 2 | class CreatePwbTranslations < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :translations do |t| 5 | t.string :locale 6 | t.string :key 7 | t.text :value 8 | t.text :interpolations 9 | t.boolean :is_proc, :default => false 10 | 11 | # TODO - use tag to group translations 12 | t.string :tag 13 | 14 | t.timestamps 15 | end 16 | end 17 | 18 | def self.down 19 | drop_table :translations 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /db/migrate/20161215152123_create_pwb_contents.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161107210046) 2 | class CreatePwbContents < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_contents do |t| 5 | t.string :key 6 | t.string :tag 7 | # t.text :raw 8 | 9 | t.string :input_type 10 | t.string :status 11 | t.integer :last_updated_by_user_id 12 | 13 | # To allow ordering of content 14 | t.integer :sort_order 15 | t.string :target_url 16 | 17 | t.timestamps null: false 18 | end 19 | 20 | add_index :pwb_contents, :key, unique: true 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile '~/.gitignore_global' 6 | 7 | # Ignore bundler config. 8 | /.bundle 9 | 10 | # Ignore all logfiles and tempfiles. 11 | /log/* 12 | /tmp/* 13 | !/log/.keep 14 | !/tmp/.keep 15 | 16 | # Ignore Byebug command history file. 17 | .byebug_history 18 | 19 | # Ignore uploaded images 20 | /public/uploads 21 | 22 | /config/deploy/production.rb 23 | 24 | /node_modules -------------------------------------------------------------------------------- /db/migrate/20170921063046_translate_pages.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170716110121) 2 | class TranslatePages < ActiveRecord::Migration[5.0] 3 | # translated cols are not needed in original table 4 | # but need to have translations declared in model 5 | def self.up 6 | Pwb::Page.create_translation_table!({ 7 | :raw_html => {:type => :text, :default => ''}, 8 | :page_title => {:type => :string, :default => ''}, 9 | :link_title => {:type => :string, :default => ''} 10 | }, { 11 | :migrate_data => true 12 | }) 13 | end 14 | 15 | def self.down 16 | Pwb::Page.drop_translation_table! :migrate_data => true 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /db/migrate/20170410171019_add_extra_cols_to_pwb_sections.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170315195413) 2 | class AddExtraColsToPwbSections < ActiveRecord::Migration[5.0] 3 | def change 4 | add_column :pwb_sections, :flags, :integer, default: 0, index: true, null: false 5 | add_column :pwb_sections, :details, :json, default: {} 6 | add_column :pwb_sections, :is_page, :boolean, default: false, index: true 7 | add_column :pwb_sections, :show_in_top_nav, :boolean, default: false, index: true 8 | add_column :pwb_sections, :show_in_footer, :boolean, default: false, index: true 9 | add_column :pwb_sections, :key, :string, index: true 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /db/migrate/20170921063049_create_pwb_page_contents.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170915094326) 2 | class CreatePwbPageContents < ActiveRecord::Migration[5.1] 3 | def change 4 | create_table :pwb_page_contents do |t| 5 | t.boolean :is_rails_part, default: false 6 | t.string :page_part_key 7 | t.string :label 8 | t.integer :sort_order 9 | # t.string :fragment_key, index: true 10 | t.boolean :visible_on_page, default: true 11 | # t.integer :page_id 12 | # t.integer :content_id 13 | t.belongs_to :page, index: true 14 | t.belongs_to :content, index: true 15 | t.timestamps 16 | end 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /db/migrate/20161215152134_create_pwb_messages.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161128200709) 2 | class CreatePwbMessages < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_messages do |t| 5 | t.string :title 6 | t.text :content 7 | t.integer :client_id 8 | t.string :origin_ip 9 | t.string :user_agent 10 | t.float :longitude 11 | t.float :latitude 12 | t.string :locale 13 | t.string :host 14 | t.string :url 15 | t.boolean :delivery_success, :default => false 16 | t.string :delivery_email 17 | t.string :origin_email 18 | 19 | t.timestamps null: false 20 | end 21 | end 22 | end 23 | 24 | -------------------------------------------------------------------------------- /config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, '\1en' 8 | # inflect.singular /^(ox)en/i, '\1' 9 | # inflect.irregular 'person', 'people' 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym 'RESTful' 16 | # end 17 | -------------------------------------------------------------------------------- /config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t 'hello' 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t('hello') %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # To learn more, please read the Rails Internationalization guide 20 | # available at http://guides.rubyonrails.org/i18n.html. 21 | 22 | en: 23 | hello: "Hello world" 24 | -------------------------------------------------------------------------------- /db/migrate/20161215152128_translate_props.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161120122914) 2 | class TranslateProps < ActiveRecord::Migration[5.0] 3 | def self.up 4 | Pwb::Prop.create_translation_table!({ 5 | :title => {:type => :string, :default => ''}, 6 | :description => {:type => :text, :default => ''} 7 | # null false below was creating errors when a new prop was created with no title 8 | # :title => {:type => :string, :null => false, :default => ''}, 9 | # :description => {:type => :text, :null => false, :default => ''} 10 | }, { 11 | :migrate_data => true 12 | }) 13 | end 14 | 15 | def self.down 16 | Pwb::Prop.drop_translation_table! :migrate_data => true 17 | end 18 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## June 2022 update 2 | 3 | PropertyWebBuilder is now a standalone Ruby on Rails app (it is no longer a Ruby on Rails engine) 4 | 5 | This project was only needed as a shell for loading the PropertyWebBuilder engine. As this is no longer needed this project has been discontinued. You can now deploy PropertyWebBuilder directly! 6 | 7 | For more about PropertyWebBuilder see: 8 | 9 | [PropertyWebBuilder](https://etewiah.github.io/property_web_builder/) 10 | 11 | 12 | Also, I am currently working on a tool to help with house hunting and would love to get some feedback about it. 13 | 14 | Please check it out here and let me know what you think (and if you would like it to be open-sourced): 15 | 16 | [https://propertysquares.com/](https://propertysquares.com/) 17 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PropertyWebBuilder for Heroku", 3 | "description": "An instant website for real estate agencies.", 4 | "keywords": [ 5 | "realtor","property management", "cms", 6 | "rails", "proptech", "opensource" 7 | ], 8 | "website": "http://propertywebbuilder.com/", 9 | "repository": "https://github.com/etewiah/property_web_builder", 10 | "scripts": { 11 | "postdeploy": "bundle exec rake db:migrate pwb:db:seed pwb:db:seed_pages" 12 | }, 13 | "addons": [ 14 | "heroku-postgresql:hobby-dev", 15 | "cloudinary:starter" 16 | ], 17 | "env": { 18 | "LANG": "en_US.UTF-8", 19 | "RACK_ENV": "production", 20 | "RAILS_ENV": "production", 21 | "RAILS_LOG_TO_STDOUT": "enabled", 22 | "RAILS_SERVE_STATIC_FILES": "enabled" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the 9 | * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS 10 | * files in this directory. Styles in this file should be added after the last require_* statement. 11 | * It is generally better to create a new file per style scope. 12 | * 13 | *= require_tree . 14 | *= require_self 15 | */ 16 | -------------------------------------------------------------------------------- /app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // compiled file. JavaScript code in this file should be added after the last require_* statement. 9 | // 10 | // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details 11 | // about supported directives. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require turbolinks 16 | //= require_tree . 17 | -------------------------------------------------------------------------------- /bin/update: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | require 'fileutils' 4 | include FileUtils 5 | 6 | # path to your application root. 7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 8 | 9 | def system!(*args) 10 | system(*args) || abort("\n== Command #{args} failed ==") 11 | end 12 | 13 | chdir APP_ROOT do 14 | # This script is a way to update your development environment automatically. 15 | # Add necessary update steps to this file. 16 | 17 | puts '== Installing dependencies ==' 18 | system! 'gem install bundler --conservative' 19 | system('bundle check') || system!('bundle install') 20 | 21 | puts "\n== Updating database ==" 22 | system! 'bin/rails db:migrate' 23 | 24 | puts "\n== Removing old logs and tempfiles ==" 25 | system! 'bin/rails log:clear tmp:clear' 26 | 27 | puts "\n== Restarting application server ==" 28 | system! 'bin/rails restart' 29 | end 30 | -------------------------------------------------------------------------------- /config/application.rb: -------------------------------------------------------------------------------- 1 | require_relative 'boot' 2 | 3 | require "rails" 4 | # Pick the frameworks you want: 5 | require "active_model/railtie" 6 | require "active_job/railtie" 7 | require "active_record/railtie" 8 | require "action_controller/railtie" 9 | require "action_mailer/railtie" 10 | require "action_view/railtie" 11 | require "action_cable/engine" 12 | require "sprockets/railtie" 13 | # require "rails/test_unit/railtie" 14 | 15 | # Require the gems listed in Gemfile, including any gems 16 | # you've limited to :test, :development, or :production. 17 | Bundler.require(*Rails.groups) 18 | 19 | module PwbForHeroku 20 | class Application < Rails::Application 21 | # Settings in config/environments/* take precedence over those specified here. 22 | # Application configuration should go into files in config/initializers 23 | # -- all .rb files in that directory are automatically loaded. 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /db/migrate/20161215152131_create_pwb_field_keys.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161123232423) 2 | class CreatePwbFieldKeys < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_field_keys do |t| 5 | 6 | t.string :global_key #i18n lookup key 7 | t.string :tag 8 | t.boolean :visible, :default => true 9 | 10 | # props_count allows me to know which field_keys are being used. 11 | # eg, a property_type like warehouse might never be used 12 | # I might choose not to show that property_type in the search dropdown box 13 | # by only showing property types with a props_count > 0 14 | t.integer :props_count, :null => false, :default => 0 15 | t.boolean :show_in_search_form, :default => true 16 | 17 | t.timestamps null: false 18 | end 19 | add_index :pwb_field_keys, :global_key, :unique => true 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /db/migrate/20171204110202_create_property_web_scraper_import_hosts.property_web_scraper.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from property_web_scraper (originally 20170628160331) 2 | class CreatePropertyWebScraperImportHosts < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :property_web_scraper_import_hosts do |t| 5 | t.integer :flags, default: 0, null: false 6 | t.string :scraper_name 7 | t.string :host 8 | t.boolean :is_https 9 | t.json :details, default: {} 10 | t.string :slug 11 | t.text :example_urls, array: true, default: [] 12 | t.text :invalid_urls, array: true, default: [] 13 | t.datetime :last_retrieval_at 14 | t.string :valid_url_regex 15 | t.string :pause_between_calls, default: "5.seconds" 16 | t.string :stale_age, default: "1.day" 17 | t.timestamps 18 | end 19 | 20 | add_index :property_web_scraper_import_hosts, :host, unique: true 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /db/migrate/20170921063045_create_pwb_pages.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170716075456) 2 | class CreatePwbPages < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_pages do |t| 5 | t.string :slug 6 | t.string :setup_id 7 | # t.string :link_key 8 | # t.string :link_path 9 | t.boolean :visible, default: false 10 | t.integer :last_updated_by_user_id 11 | t.integer :flags, default: 0, index: true, null: false 12 | t.json :details, default: {} 13 | t.integer :sort_order_top_nav, default: 0 14 | t.integer :sort_order_footer, default: 0 15 | t.boolean :show_in_top_nav, default: false, index: true 16 | t.boolean :show_in_footer, default: false, index: true 17 | # t.boolean :key, :string, index: true 18 | t.timestamps null: false 19 | end 20 | 21 | # add_index :pwb_pages, :link_key, :unique => true 22 | add_index :pwb_pages, :slug, :unique => true 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /config/initializers/assets.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Version of your assets, change this if you want to expire all your assets. 4 | Rails.application.config.assets.version = '1.0' 5 | 6 | # Add additional assets to the asset load path 7 | # Rails.application.config.assets.paths << Emoji.images_path 8 | 9 | # Precompile additional assets. 10 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 11 | # Rails.application.config.assets.precompile += %w( search.js ) 12 | 13 | # (nov 2017) PWB precompile assets are defined here 14 | # /pwb/lib/pwb/engine.rb in pwb engine 15 | # and there has not been an issue 16 | # till I added "gem 'property_web_scraper', github: 'RealEstateWebTools/property_web_scraper' " 17 | # to gemfile. 18 | # Now get "Asset was not declared to be precompiled in production" error 19 | # and need to add below to fix that: 20 | Rails.application.config.assets.precompile += %w( pwb/themes/default.css ) -------------------------------------------------------------------------------- /db/migrate/20161215152135_create_pwb_clients.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161128221919) 2 | class CreatePwbClients < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_clients do |t| 5 | t.string :first_names 6 | t.string :last_names 7 | t.string :client_title 8 | t.string :phone_number_primary 9 | t.string :phone_number_other 10 | t.string :fax 11 | t.string :nationality 12 | t.string :email 13 | t.string :skype 14 | t.string :documentation_id 15 | t.integer :documentation_type 16 | t.integer :user_id 17 | t.integer :address_id 18 | t.integer :flags, :null => false, :default => 0 19 | t.json :details, default: {} 20 | 21 | t.timestamps null: false 22 | end 23 | 24 | add_index :pwb_clients, :documentation_id, unique: true 25 | add_index :pwb_clients, [:first_names, :last_names] 26 | add_index :pwb_clients, :email, unique: true 27 | 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | require 'fileutils' 4 | include FileUtils 5 | 6 | # path to your application root. 7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 8 | 9 | def system!(*args) 10 | system(*args) || abort("\n== Command #{args} failed ==") 11 | end 12 | 13 | chdir APP_ROOT do 14 | # This script is a starting point to setup your application. 15 | # Add necessary setup steps to this file. 16 | 17 | puts '== Installing dependencies ==' 18 | system! 'gem install bundler --conservative' 19 | system('bundle check') || system!('bundle install') 20 | 21 | # puts "\n== Copying sample files ==" 22 | # unless File.exist?('config/database.yml') 23 | # cp 'config/database.yml.sample', 'config/database.yml' 24 | # end 25 | 26 | puts "\n== Preparing database ==" 27 | system! 'bin/rails db:setup' 28 | 29 | puts "\n== Removing old logs and tempfiles ==" 30 | system! 'bin/rails log:clear tmp:clear' 31 | 32 | puts "\n== Restarting application server ==" 33 | system! 'bin/rails restart' 34 | end 35 | -------------------------------------------------------------------------------- /db/migrate/20171017082353_create_pwb_page_parts.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20171011212930) 2 | class CreatePwbPageParts < ActiveRecord::Migration[5.1] 3 | def change 4 | create_table :pwb_page_parts do |t| 5 | t.boolean :is_rails_part, default: false 6 | t.boolean :show_in_editor, default: true 7 | t.integer :order_in_editor 8 | 9 | t.string :page_part_key, index: true 10 | t.string :page_slug, index: true 11 | t.text :template 12 | 13 | # used to decide how to lay out the editor 14 | t.json :editor_setup, default: {} 15 | 16 | # contains the text strings (for each locale) 17 | # that will be merged with the template 18 | t.json :block_contents, default: {} 19 | 20 | # though currently (oct 2017) not implemented 21 | # below will allow future use case of per theme or locale templates 22 | t.string :theme_name 23 | t.string :locale 24 | 25 | t.integer :flags, null: false, default: 0 26 | t.timestamps 27 | end 28 | add_index :pwb_page_parts, [:page_part_key, :page_slug] 29 | 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /db/migrate/20170921063047_create_pwb_links.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170720183443) 2 | class CreatePwbLinks < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_links do |t| 5 | # t.text :params??? 6 | t.string :slug 7 | t.string :parent_slug 8 | # below for association with pages 9 | t.string :page_slug, index: true 10 | t.string :icon_class 11 | t.string :href_class 12 | t.string :href_target 13 | t.boolean :is_external, default: false 14 | t.string :link_url 15 | # above for external links, below for internal 16 | t.string :link_path 17 | # below is a comma separated list of params for an 18 | # internal path such as "show_page_path" 19 | t.string :link_path_params 20 | t.boolean :visible, default: true 21 | t.boolean :is_deletable, default: false 22 | t.integer :flags, default: 0, index: true, null: false 23 | t.integer :sort_order, default: 0 24 | t.integer :placement, default: 0, index: true 25 | t.timestamps 26 | end 27 | add_index :pwb_links, :slug, :unique => true 28 | 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /config/initializers/new_framework_defaults.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | # 3 | # This file contains migration options to ease your Rails 5.0 upgrade. 4 | # 5 | # Read the Rails 5.0 release notes for more info on each option. 6 | 7 | # Enable per-form CSRF tokens. Previous versions had false. 8 | Rails.application.config.action_controller.per_form_csrf_tokens = true 9 | 10 | # Enable origin-checking CSRF mitigation. Previous versions had false. 11 | Rails.application.config.action_controller.forgery_protection_origin_check = true 12 | 13 | # Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`. 14 | # Previous versions had false. 15 | ActiveSupport.to_time_preserves_timezone = true 16 | 17 | # Require `belongs_to` associations by default. Previous versions had false. 18 | Rails.application.config.active_record.belongs_to_required_by_default = true 19 | 20 | # Do not halt callback chains when a callback returns false. Previous versions had true. 21 | # ActiveSupport.halt_callback_chains_on_return_false = false 22 | 23 | # Configure SSL options to enable HSTS with subdomains. Previous versions had false. 24 | Rails.application.config.ssl_options = { hsts: { subdomains: true } } 25 | -------------------------------------------------------------------------------- /db/migrate/20170925184111_create_pwb_contacts.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170923195321) 2 | class CreatePwbContacts < ActiveRecord::Migration[5.1] 3 | def change 4 | create_table :pwb_contacts do |t| 5 | t.string :first_name, index: true 6 | t.string :last_name, index: true 7 | t.string :other_names 8 | t.integer :title, default: 0, index: true 9 | t.string :primary_phone_number, index: true 10 | t.string :other_phone_number 11 | t.string :fax 12 | t.string :nationality 13 | t.string :primary_email, index: true, unique: true 14 | t.string :other_email 15 | t.string :skype_id 16 | t.string :facebook_id 17 | t.string :linkedin_id 18 | t.string :twitter_id 19 | t.string :website 20 | t.string :documentation_id, index: true, unique: true 21 | t.integer :documentation_type 22 | t.integer :user_id 23 | t.integer :primary_address_id 24 | t.integer :secondary_address_id 25 | t.integer :flags, null: false, default: 0 26 | t.json :details, default: {} 27 | 28 | t.timestamps null: false 29 | t.timestamps 30 | end 31 | 32 | add_index :pwb_contacts, [:first_name, :last_name] 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /db/migrate/20161215152126_create_pwb_agencies.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161118222543) 2 | class CreatePwbAgencies < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_agencies do |t| 5 | t.string :phone_number_primary 6 | t.string :phone_number_mobile 7 | t.string :phone_number_other 8 | 9 | t.string :analytics_id 10 | t.integer :analytics_id_type 11 | 12 | t.string :company_name 13 | t.string :display_name 14 | t.string :email_primary 15 | t.string :email_for_general_contact_form 16 | t.string :email_for_property_contact_form 17 | t.string :skype 18 | t.string :company_id 19 | t.integer :company_id_type 20 | t.string :url 21 | 22 | t.integer :primary_address_id 23 | t.integer :secondary_address_id 24 | t.integer :flags 25 | t.integer :flags, :null => false, :default => 0 26 | t.integer :payment_plan_id 27 | 28 | t.integer :site_template_id 29 | t.json :site_configuration, default: {} 30 | 31 | t.text :available_locales, array: true, default: [] 32 | t.text :supported_locales, array: true, default: [] 33 | t.text :available_currencies, array: true, default: [] 34 | t.text :supported_currencies, array: true, default: [] 35 | t.string :default_client_locale 36 | t.string :default_admin_locale 37 | t.string :default_currency 38 | 39 | t.json :social_media, default: {} 40 | t.json :details, default: {} 41 | t.text :raw_css 42 | 43 | t.timestamps null: false 44 | end 45 | add_index :pwb_agencies, :company_name 46 | add_index :pwb_agencies, :company_id, unique: true 47 | 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

We're sorry, but something went wrong.

62 |
63 |

If you are the application owner check the logs for more information.

64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The change you wanted was rejected.

62 |

Maybe you tried to change something you didn't have access to.

63 |
64 |

If you are the application owner check the logs for more information.

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 6 | 55 | 56 | 57 | 58 | 59 |
60 |
61 |

The page you were looking for doesn't exist.

62 |

You may have mistyped the address or the page may have moved.

63 |
64 |

If you are the application owner check the logs for more information.

65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /config/environments/test.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # The test environment is used exclusively to run your application's 5 | # test suite. You never need to work with it otherwise. Remember that 6 | # your test database is "scratch space" for the test suite and is wiped 7 | # and recreated between test runs. Don't rely on the data there! 8 | config.cache_classes = true 9 | 10 | # Do not eager load code on boot. This avoids loading your whole application 11 | # just for the purpose of running a single test. If you are using a tool that 12 | # preloads Rails for running tests, you may have to set it to true. 13 | config.eager_load = false 14 | 15 | # Configure public file server for tests with Cache-Control for performance. 16 | config.public_file_server.enabled = true 17 | config.public_file_server.headers = { 18 | 'Cache-Control' => 'public, max-age=3600' 19 | } 20 | 21 | # Show full error reports and disable caching. 22 | config.consider_all_requests_local = true 23 | config.action_controller.perform_caching = false 24 | 25 | # Raise exceptions instead of rendering exception templates. 26 | config.action_dispatch.show_exceptions = false 27 | 28 | # Disable request forgery protection in test environment. 29 | config.action_controller.allow_forgery_protection = false 30 | config.action_mailer.perform_caching = false 31 | 32 | # Tell Action Mailer not to deliver emails to the real world. 33 | # The :test delivery method accumulates sent emails in the 34 | # ActionMailer::Base.deliveries array. 35 | config.action_mailer.delivery_method = :test 36 | 37 | # Print deprecation notices to the stderr. 38 | config.active_support.deprecation = :stderr 39 | 40 | # Raises error for missing translations 41 | # config.action_view.raise_on_missing_translations = true 42 | end 43 | -------------------------------------------------------------------------------- /db/migrate/20161215152137_devise_create_pwb_users.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161205223003) 2 | class DeviseCreatePwbUsers < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_users do |t| 5 | ## Database authenticatable 6 | t.string :email, null: false, default: "" 7 | t.string :encrypted_password, null: false, default: "" 8 | 9 | ## Recoverable 10 | t.string :reset_password_token 11 | t.datetime :reset_password_sent_at 12 | 13 | ## Rememberable 14 | t.datetime :remember_created_at 15 | 16 | ## Trackable 17 | t.integer :sign_in_count, default: 0, null: false 18 | t.datetime :current_sign_in_at 19 | t.datetime :last_sign_in_at 20 | t.string :current_sign_in_ip 21 | t.string :last_sign_in_ip 22 | 23 | ## Confirmable 24 | t.string :confirmation_token 25 | t.datetime :confirmed_at 26 | t.datetime :confirmation_sent_at 27 | t.string :unconfirmed_email # Only if using reconfirmable 28 | 29 | ## Lockable 30 | t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 31 | t.string :unlock_token # Only if unlock strategy is :email or :both 32 | t.datetime :locked_at 33 | 34 | t.string :authentication_token 35 | 36 | t.boolean :admin, :default => false 37 | # t.integer :agency_id 38 | t.string :first_names 39 | t.string :last_names 40 | t.string :skype 41 | t.string :phone_number_primary 42 | t.string :default_client_locale 43 | t.string :default_admin_locale 44 | t.string :default_currency 45 | 46 | 47 | t.timestamps null: false 48 | end 49 | 50 | add_index :pwb_users, :email, unique: true 51 | add_index :pwb_users, :reset_password_token, unique: true 52 | add_index :pwb_users, :confirmation_token, unique: true 53 | # add_index :pwb_users, :unlock_token, unique: true 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /config/puma.rb: -------------------------------------------------------------------------------- 1 | # Puma can serve each request in a thread from an internal thread pool. 2 | # The `threads` method setting takes two numbers a minimum and maximum. 3 | # Any libraries that use thread pools should be configured to match 4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum 5 | # and maximum, this matches the default thread size of Active Record. 6 | # 7 | threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i 8 | threads threads_count, threads_count 9 | 10 | # Specifies the `port` that Puma will listen on to receive requests, default is 3000. 11 | # 12 | port ENV.fetch("PORT") { 3000 } 13 | 14 | # Specifies the `environment` that Puma will run in. 15 | # 16 | environment ENV.fetch("RAILS_ENV") { "development" } 17 | 18 | # Specifies the number of `workers` to boot in clustered mode. 19 | # Workers are forked webserver processes. If using threads and workers together 20 | # the concurrency of the application would be max `threads` * `workers`. 21 | # Workers do not work on JRuby or Windows (both of which do not support 22 | # processes). 23 | # 24 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 } 25 | 26 | # Use the `preload_app!` method when specifying a `workers` number. 27 | # This directive tells Puma to first boot the application and load code 28 | # before forking the application. This takes advantage of Copy On Write 29 | # process behavior so workers use less memory. If you use this option 30 | # you need to make sure to reconnect any threads in the `on_worker_boot` 31 | # block. 32 | # 33 | # preload_app! 34 | 35 | # The code in the `on_worker_boot` will be called if you are using 36 | # clustered mode by specifying a number of `workers`. After each worker 37 | # process is booted this block will be run, if you are using `preload_app!` 38 | # option you will want to use this block to reconnect to any threads 39 | # or connections that may have been created at application boot, Ruby 40 | # cannot share connections between processes. 41 | # 42 | # on_worker_boot do 43 | # ActiveRecord::Base.establish_connection if defined?(ActiveRecord) 44 | # end 45 | 46 | # Allow puma to be restarted by `rails restart` command. 47 | plugin :tmp_restart 48 | -------------------------------------------------------------------------------- /db/migrate/20170217103548_create_pwb_websites.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20170131190507) 2 | class CreatePwbWebsites < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_websites do |t| 5 | t.string :analytics_id 6 | t.integer :analytics_id_type 7 | 8 | # t.string :company_name 9 | t.string :company_display_name 10 | t.string :email_for_general_contact_form 11 | t.string :email_for_property_contact_form 12 | # t.string :url 13 | 14 | # t.integer :primary_address_id 15 | t.integer :contact_address_id 16 | t.integer :flags 17 | t.integer :flags, :null => false, :default => 0 18 | # t.integer :payment_plan_id 19 | 20 | t.string :theme_name 21 | t.string :google_font_name 22 | t.json :configuration, default: {} 23 | t.json :style_variables_for_theme, default: {} 24 | 25 | t.text :sale_price_options_from, array: true, default: [ 26 | "","25,000", "50,000", "75,000", "100,000", "150,000", "250,000", "500,000", "1,000,000", "2,000,000", "5,000,000", "10,000,000" 27 | ] 28 | t.text :sale_price_options_till, array: true, default: [ 29 | "","25,000", "50,000", "75,000", "100,000", "150,000", "250,000", "500,000", "1,000,000", "2,000,000", "5,000,000", "10,000,000" 30 | ] 31 | t.text :rent_price_options_from, array: true, default: [ 32 | "","250", "500", "750", "1,000", "1,500", "2,500", "5,000" 33 | ] 34 | t.text :rent_price_options_till, array: true, default: [ 35 | "","250", "500", "750", "1,000", "1,500", "2,500", "5,000" 36 | ] 37 | # t.text :available_locales, array: true, default: [] 38 | t.text :supported_locales, array: true, default: ["en-UK"] 39 | # t.text :available_currencies, array: true, default: [] 40 | # supported_currencies for when instant conversions are allowed 41 | t.text :supported_currencies, array: true, default: [] 42 | t.string :default_client_locale, default: "en-UK" 43 | t.string :default_admin_locale, default: "en-UK" 44 | t.string :default_currency, default: "EUR" 45 | t.integer :default_area_unit, default: 0 46 | 47 | t.json :social_media, default: {} 48 | t.text :raw_css 49 | 50 | t.timestamps 51 | end 52 | end 53 | end 54 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:alpine 2 | 3 | # https://www.chrisblunt.com/rails-on-docker-getting-started-docker-ruby-rails/ 4 | # https://hub.docker.com/_/ruby/ 5 | 6 | # Install app's runtime dependencies 7 | RUN apk add -U tzdata git postgresql postgresql-client nodejs libffi-dev readline sqlite && \ 8 | apk add --virtual build-deps build-base libc-dev linux-headers libxml2-dev libxslt-dev readline-dev postgresql-dev && \ 9 | cp /usr/share/zoneinfo/Europe/London /etc/localtime && \ 10 | echo "Europe/London" > /etc/timezone 11 | 12 | # Bundle into the temp directory 13 | WORKDIR /tmp 14 | ADD Gemfile ./ 15 | RUN bundle install --jobs=2 && \ 16 | apk del build-deps 17 | 18 | # Copy the app's code into the container 19 | ENV APP_HOME /app 20 | COPY . $APP_HOME 21 | WORKDIR $APP_HOME 22 | 23 | # Configure production environment variables 24 | ENV RAILS_ENV=production \ 25 | RACK_ENV=production \ 26 | RAILS_LOG_TO_STDOUT=enabled \ 27 | RAILS_SERVE_STATIC_FILES=enabled \ 28 | LANG=en_US.UTF-8 29 | 30 | # Expose port 3000 from the container 31 | EXPOSE 9292 32 | 33 | # setup postgresql 34 | # https://github.com/kiasaki/docker-alpine-postgres/blob/master/docker-entrypoint.sh 35 | ENV LANG=en_US.utf8 \ 36 | PGDATA=/var/lib/postgresql/data \ 37 | POSTGRES_DB=pwb \ 38 | POSTGRES_PASSWORD=superman \ 39 | POSTGRES_USER=superman \ 40 | SECRET_KEY_BASE=20dbf7add3eb28096f1e77cb4e15f13a46e6692f4d0c0f9a3e9db7cb4ddaa8a7cac0912cc1f8ac9ae1fae9eb3115e2dbd32b1e626ca72da9c9fc83beb2cb6312 41 | RUN apk add sudo && \ 42 | mkdir -p $PGDATA && \ 43 | mkdir -p /run/postgresql/ && \ 44 | chown -R postgres "$PGDATA" && \ 45 | chown -R postgres /run/postgresql/ && \ 46 | sudo -E -u postgres initdb && \ 47 | sed -ri "s/^#(listen_addresses\s*=\s*)\S+/\1'*'/" "$PGDATA"/postgresql.conf && \ 48 | echo "CREATE DATABASE $POSTGRES_DB" | sudo -E -u postgres postgres --single -jE && \ 49 | echo "CREATE USER $POSTGRES_USER WITH SUPERUSER PASSWORD '$POSTGRES_PASSWORD'" | sudo -E -u postgres postgres --single -jE && \ 50 | echo "host all all 0.0.0.0/0 md5" >> "$PGDATA"/pg_hba.conf && \ 51 | sed -e 's/pwb-for-heroku$/superman/g' \ 52 | -e 's/pwb-for-heroku_production/pwb/g' \ 53 | -e 's/PWB-FOR-HEROKU_DATABASE_PASSWORD/POSTGRES_PASSWORD/g' -i config/database.yml 54 | 55 | # the main entry point 56 | CMD /app/docker-entrypoint.sh 57 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | 4 | # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 5 | gem 'rails', '~> 5.2' 6 | # Use postgresql as the database for Active Record 7 | gem 'pg', '~> 0.18' 8 | # Use Puma as the app server 9 | gem 'puma', '~> 4.3' 10 | # Use SCSS for stylesheets 11 | gem 'sass-rails', '~> 5.0' 12 | # Use Uglifier as compressor for JavaScript assets 13 | gem 'uglifier', '>= 1.3.0' 14 | # Use CoffeeScript for .coffee assets and views 15 | gem 'coffee-rails', '~> 4.2' 16 | # See https://github.com/rails/execjs#readme for more supported runtimes 17 | # gem 'therubyracer', platforms: :ruby 18 | 19 | # Use jquery as the JavaScript library 20 | gem 'jquery-rails' 21 | # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 22 | gem 'turbolinks', '~> 5' 23 | # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 24 | gem 'jbuilder', '~> 2.5' 25 | # Use Redis adapter to run Action Cable in production 26 | # gem 'redis', '~> 3.0' 27 | # Use ActiveModel has_secure_password 28 | # gem 'bcrypt', '~> 3.1.7' 29 | 30 | # Use Capistrano for deployment 31 | # gem 'capistrano-rails', group: :development 32 | 33 | group :development, :test do 34 | # Call 'byebug' anywhere in the code to stop execution and get a debugger console 35 | gem 'byebug', platform: :mri 36 | end 37 | 38 | group :development do 39 | # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. 40 | gem 'web-console' 41 | gem 'listen', '~> 3.0.5' 42 | # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 43 | gem 'spring' 44 | gem 'spring-watcher-listen', '~> 2.0.0' 45 | gem 'closure-compiler' 46 | gem 'yui-compressor' 47 | end 48 | 49 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 50 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 51 | 52 | gem 'pwb', git: 'https://github.com/etewiah/property_web_builder' 53 | # , branch: 'link-model-support' 54 | # gem 'globalize', git: 'https://github.com/globalize/globalize' 55 | gem 'paloma', git: 'https://github.com/fredngo/paloma' 56 | # fog-core 1.44.0 requires xmlrpc which is not available in ruby < 2.3... 57 | gem 'fog-core', '1.43.0' 58 | # gem 'property_web_scraper', git: 'https://github.com/RealEstateWebTools/property_web_scraper' 59 | -------------------------------------------------------------------------------- /config/environments/development.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # In the development environment your application's code is reloaded on 5 | # every request. This slows down response time but is perfect for development 6 | # since you don't have to restart the web server when you make code changes. 7 | config.cache_classes = false 8 | 9 | # Do not eager load code on boot. 10 | config.eager_load = false 11 | 12 | # Show full error reports. 13 | config.consider_all_requests_local = true 14 | 15 | # Enable/disable caching. By default caching is disabled. 16 | if Rails.root.join('tmp/caching-dev.txt').exist? 17 | config.action_controller.perform_caching = true 18 | 19 | config.cache_store = :memory_store 20 | config.public_file_server.headers = { 21 | 'Cache-Control' => 'public, max-age=172800' 22 | } 23 | else 24 | config.action_controller.perform_caching = false 25 | 26 | config.cache_store = :null_store 27 | end 28 | 29 | # Don't care if the mailer can't send. 30 | config.action_mailer.raise_delivery_errors = false 31 | 32 | config.action_mailer.perform_caching = false 33 | 34 | # Print deprecation notices to the Rails logger. 35 | config.active_support.deprecation = :log 36 | 37 | # Raise an error on page load if there are pending migrations. 38 | config.active_record.migration_error = :page_load 39 | 40 | 41 | # Suppress logger output for asset requests. 42 | config.assets.quiet = true 43 | 44 | # Raises error for missing translations 45 | # config.action_view.raise_on_missing_translations = true 46 | 47 | # Use an evented file watcher to asynchronously detect changes in source code, 48 | # routes, locales, etc. This feature depends on the listen gem. 49 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker 50 | 51 | 52 | # Do not fallback to assets pipeline if a precompiled asset is missed. 53 | # config.assets.compile = false 54 | # TODO: - figure out why when above is set to false 55 | # font and some image files do not get served 56 | # http://stackoverflow.com/questions/19194515/rails-4-app-on-heroku-is-serving-css-and-js-but-not-image-assets?rq=1 57 | 58 | # Debug mode disables concatenation and preprocessing of assets. 59 | # This option may cause significant delays in view rendering with a large 60 | # number of complex assets. 61 | # To test assets for heroku deploy, set below to false 62 | config.assets.debug = true 63 | end 64 | -------------------------------------------------------------------------------- /config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rails secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | development: 14 | # aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> 15 | # aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> 16 | # To use cloudinary in dev, get url with: 17 | # heroku config:get CLOUDINARY_URL 18 | # and export it to your local env with: 19 | # export CLOUDINARY_URL=cloudinary://....... 20 | # check it with: 21 | # printenv 22 | secret_key_base: 20dbf7add3eb28096f1e77cb4e15f13a46e6692f4d0c0f9a3e9db7cb4ddaa8a7cac0912cc1f8ac9ae1fae9eb3115e2dbd32b1e626ca72da9c9fc83beb2cb6312 23 | cloudinary_url: <%= ENV['CLOUDINARY_URL'] %> 24 | test: 25 | # aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> 26 | # aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> 27 | secret_key_base: a412eca4343e70b5e50093bf6935bfc4c68f1381a6d0e73b5ef262bc569da6cf022552764a4fb118e0b92b7285550bf55f32cfc18a5be36810ec5caf5d6929c3 28 | cloudinary_url: <%= ENV['CLOUDINARY_URL'] %> 29 | 30 | # Do not keep production secrets in the repository, 31 | # instead read values from the environment. 32 | production: 33 | # aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> 34 | # aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> 35 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 36 | cloudinary_url: <%= ENV['CLOUDINARY_URL'] %> 37 | sendgrid_username: <%= ENV['SENDGRID_USERNAME'] %> 38 | sendgrid_password: <%= ENV['SENDGRID_PASSWORD'] %> 39 | facebook_app_id: <%= ENV["FACEBOOK_APP_ID"] %> 40 | facebook_app_secret: <%= ENV["FACEBOOK_APP_SECRET"] %> 41 | # for heroku set these values like so: 42 | # heroku config:set AWS_ACCESS_KEY_ID='your aws_access_key_id' 43 | # heroku config:set AWS_SECRET_ACCESS_KEY='your aws_secret_access_key' 44 | 45 | # for local dev set these values like so: 46 | # export AWS_ACCESS_KEY_ID='your aws_access_key_id' 47 | # export AWS_SECRET_ACCESS_KEY='your aws_secret_access_key' 48 | 49 | precompile: 50 | secret_key_base: 20dbf7add3eb28096f1e77cb4e15f13a46e6692f4d0c0f9a3e9db7cb4ddaa8a7cac0912cc1f8ac9ae1fae9eb3115e2dbd32b1e626ca72da9c9fc83beb2cb6312 51 | -------------------------------------------------------------------------------- /public/assets/pwb/themes/matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css: -------------------------------------------------------------------------------- 1 | .contenedor_idiomas{background:blue}ul.idiomas{float:right;padding:0 15px 10px 10px;margin:-7px 0px -5px 10px;background-color:#fff}ul.idiomas li{float:left;list-style:none outside none;margin:0 0 0 5px;padding:11px 0 0 0;width:20px}ul.idiomas li a{display:block;width:20px;height:14px;outline:1px solid #555;margin:0}ul.idiomas .es{background:url("/assets/idiomas.png") 0 0 no-repeat}ul.idiomas .en,ul.idiomas .uk{background:url("/assets/idiomas.png") -20px 0}ul.idiomas .ru{background:url("/assets/idiomas.png") -40px 0}ul.idiomas .sv{background:url("/assets/idiomas.png") -60px 0}ul.idiomas .no{background:url("/assets/idiomas.png") -80px 0}ul.idiomas .de{background:url("/assets/idiomas.png") -100px 0}ul.idiomas .fr{background:url("/assets/idiomas.png") -120px 0}ul.idiomas .ne{background:url("/assets/idiomas.png") -140px 0}ul.idiomas .ch{background:url("/assets/idiomas.png") -160px 0}ul.idiomas .fi{background:url("/assets/idiomas.png") -180px 0}ul.idiomas .eu{background:url("/assets/idiomas.png") -200px 0}ul.idiomas .pt{background:url("/assets/idiomas.png") -220px 0}ul.idiomas .ar{background:url("/assets/idiomas.png") -240px 0}ul.idiomas .ca{background:url("/assets/idiomas.png") -260px 0}ul.idiomas .br{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/br.svg") no-repeat;background-size:cover}ul.idiomas .cl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/cl.svg") no-repeat;background-size:cover}ul.idiomas .hi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/hi.svg") no-repeat;background-size:cover}ul.idiomas .it{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/it.svg") no-repeat;background-size:cover}ul.idiomas .mx{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/mx.svg") no-repeat;background-size:cover}ul.idiomas .nl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/nl.svg") no-repeat;background-size:cover}ul.idiomas .pl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/pl.svg") no-repeat;background-size:cover}ul.idiomas .ro{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/ro.svg") no-repeat;background-size:cover}ul.idiomas .us{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/us.svg") no-repeat;background-size:cover}ul.idiomas .vi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/vn.svg") no-repeat;background-size:cover}ul.idiomas .tr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/tr.svg") no-repeat;background-size:cover}ul.idiomas .kr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/kr.svg") no-repeat;background-size:cover}ul.idiomas .bg{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/bg.svg") no-repeat;background-size:cover}ul.idiomas li.selected,ul.idiomas li:hover{background:url("/assets/simple-nav-arrow.png") no-repeat top center} 2 | -------------------------------------------------------------------------------- /config/database.yml: -------------------------------------------------------------------------------- 1 | # PostgreSQL. Versions 9.1 and up are supported. 2 | # 3 | # Install the pg driver: 4 | # gem install pg 5 | # On OS X with Homebrew: 6 | # gem install pg -- --with-pg-config=/usr/local/bin/pg_config 7 | # On OS X with MacPorts: 8 | # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 9 | # On Windows: 10 | # gem install pg 11 | # Choose the win32 build. 12 | # Install PostgreSQL and put its /bin directory on your path. 13 | # 14 | # Configure Using Gemfile 15 | # gem 'pg' 16 | # 17 | default: &default 18 | adapter: postgresql 19 | encoding: unicode 20 | # For details on connection pooling, see rails configuration guide 21 | # http://guides.rubyonrails.org/configuring.html#database-pooling 22 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 23 | 24 | development: 25 | <<: *default 26 | database: pwb-for-heroku_development 27 | 28 | # The specified database role being used to connect to postgres. 29 | # To create additional roles in postgres see `$ createuser --help`. 30 | # When left blank, postgres will use the default role. This is 31 | # the same name as the operating system user that initialized the database. 32 | #username: pwb-for-heroku 33 | 34 | # The password associated with the postgres role (username). 35 | #password: 36 | 37 | # Connect on a TCP socket. Omitted by default since the client uses a 38 | # domain socket that doesn't need configuration. Windows does not have 39 | # domain sockets, so uncomment these lines. 40 | #host: localhost 41 | 42 | # The TCP port the server listens on. Defaults to 5432. 43 | # If your server runs on a different port number, change accordingly. 44 | #port: 5432 45 | 46 | # Schema search path. The server defaults to $user,public 47 | #schema_search_path: myapp,sharedapp,public 48 | 49 | # Minimum log levels, in increasing order: 50 | # debug5, debug4, debug3, debug2, debug1, 51 | # log, notice, warning, error, fatal, and panic 52 | # Defaults to warning. 53 | #min_messages: notice 54 | 55 | # Warning: The database defined as "test" will be erased and 56 | # re-generated from your development database when you run "rake". 57 | # Do not set this db to the same as development or production. 58 | test: 59 | <<: *default 60 | database: pwb-for-heroku_test 61 | 62 | # As with config/secrets.yml, you never want to store sensitive information, 63 | # like your database password, in your source code. If your source code is 64 | # ever seen by anyone, they now have access to your database. 65 | # 66 | # Instead, provide the password as a unix environment variable when you boot 67 | # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database 68 | # for a full rundown on how to provide these environment variables in a 69 | # production deployment. 70 | # 71 | # On Heroku and other platform providers, you may have a full connection URL 72 | # available as an environment variable. For example: 73 | # 74 | # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" 75 | # 76 | # You can use this database configuration with: 77 | # 78 | # production: 79 | # url: <%= ENV['DATABASE_URL'] %> 80 | # 81 | production: 82 | <<: *default 83 | database: pwb-for-heroku_production 84 | username: pwb-for-heroku 85 | password: <%= ENV['PWB-FOR-HEROKU_DATABASE_PASSWORD'] %> 86 | 87 | 88 | precompile: 89 | <<: *default 90 | database: pwb-for-heroku_development -------------------------------------------------------------------------------- /config/environments/precompile.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # http://blog.bigbinary.com/2015/10/31/rails-5-allows-setting-custom-http-headers-for-assets.html 5 | # 6 | config.public_file_server.headers = { 7 | 'Cache-Control' => 'public, s-maxage=31536000, maxage=15552000', 8 | 'Expires' => "#{1.year.from_now.to_formatted_s(:rfc822)}" 9 | } 10 | 11 | # Code is not reloaded between requests. 12 | config.cache_classes = true 13 | 14 | # Eager load code on boot. This eager loads most of Rails and 15 | # your application in memory, allowing both threaded web servers 16 | # and those relying on copy on write to perform better. 17 | # Rake tasks automatically ignore this option for performance. 18 | config.eager_load = true 19 | 20 | # Full error reports are disabled and caching is turned on. 21 | config.consider_all_requests_local = false 22 | config.action_controller.perform_caching = true 23 | 24 | # Disable serving static files from the `/public` folder by default since 25 | # Apache or NGINX already handles this. 26 | config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 27 | 28 | # Compress JavaScripts and CSS. 29 | # config.assets.js_compressor = :uglifier 30 | # when I try to compress js files with the above I get the ff error: 31 | # ExecJS::RuntimeError: SyntaxError: Unexpected token punc «(», expected punc «:» 32 | # config.assets.js_compressor = :closure 33 | # config.assets.js_compressor = :yui 34 | 35 | 36 | config.assets.css_compressor = :sass 37 | 38 | # Do not fallback to assets pipeline if a precompiled asset is missed. 39 | # config.assets.compile = false 40 | # http://stackoverflow.com/questions/19194515/rails-4-app-on-heroku-is-serving-css-and-js-but-not-image-assets?rq=1 41 | # to allow font files to be served 42 | # config.assets.compile = true 43 | 44 | 45 | # Enable/disable caching. By default caching is disabled. 46 | if Rails.root.join('tmp/caching-dev.txt').exist? 47 | config.action_controller.perform_caching = true 48 | 49 | config.cache_store = :memory_store 50 | config.public_file_server.headers = { 51 | 'Cache-Control' => 'public, max-age=172800' 52 | } 53 | else 54 | config.action_controller.perform_caching = false 55 | 56 | config.cache_store = :null_store 57 | end 58 | 59 | # Don't care if the mailer can't send. 60 | config.action_mailer.raise_delivery_errors = false 61 | 62 | config.action_mailer.perform_caching = false 63 | 64 | # Print deprecation notices to the Rails logger. 65 | config.active_support.deprecation = :log 66 | 67 | # Raise an error on page load if there are pending migrations. 68 | config.active_record.migration_error = :page_load 69 | 70 | # Debug mode disables concatenation and preprocessing of assets. 71 | # This option may cause significant delays in view rendering with a large 72 | # number of complex assets. 73 | config.assets.debug = false 74 | 75 | # Suppress logger output for asset requests. 76 | config.assets.quiet = true 77 | 78 | # Raises error for missing translations 79 | # config.action_view.raise_on_missing_translations = true 80 | 81 | # Use an evented file watcher to asynchronously detect changes in source code, 82 | # routes, locales, etc. This feature depends on the listen gem. 83 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker 84 | end 85 | -------------------------------------------------------------------------------- /public/assets/property_web_scraper/spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css: -------------------------------------------------------------------------------- 1 | .social-icons .fa{font-size:1.5em}.social-icons .fa{width:40px;height:40px;line-height:40px;text-align:center;color:#FFF;color:rgba(255,255,255,0.8);-webkit-transition:all 0.3s ease-in-out;-moz-transition:all 0.3s ease-in-out;-ms-transition:all 0.3s ease-in-out;-o-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out;cursor:pointer}.social-icons.icon-circle .fa{border-radius:50%}.social-icons.icon-rounded .fa{border-radius:5px}.social-icons.icon-flat .fa{border-radius:0}.social-icons .fa:hover,.social-icons .fa:active{color:#FFF;-webkit-box-shadow:1px 1px 3px #333;-moz-box-shadow:1px 1px 3px #333;box-shadow:1px 1px 3px #333}.social-icons.icon-zoom .fa:hover,.social-icons.icon-zoom .fa:active{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}.social-icons.icon-rotate .fa:hover,.social-icons.icon-rotate .fa:active{-webkit-transform:scale(1.1) rotate(360deg);-moz-transform:scale(1.1) rotate(360deg);-ms-transform:scale(1.1) rotate(360deg);-o-transform:scale(1.1) rotate(360deg);transform:scale(1.1) rotate(360deg)}.social-icons .fa-adn{background-color:#504e54}.social-icons .fa-apple{background-color:#aeb5c5}.social-icons .fa-android{background-color:#A5C63B}.social-icons .fa-bitbucket,.social-icons .fa-bitbucket-square{background-color:#003366}.social-icons .fa-bitcoin,.social-icons .fa-btc{background-color:#F7931A}.social-icons .fa-css3{background-color:#1572B7}.social-icons .fa-dribbble{background-color:#F46899}.social-icons .fa-dropbox{background-color:#018BD3}.social-icons .fa-facebook,.social-icons .fa-facebook-square{background-color:#3C599F}.social-icons .fa-flickr{background-color:#FF0084}.social-icons .fa-foursquare{background-color:#0086BE}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{background-color:#070709}.social-icons .fa-google-plus,.social-icons .fa-google-plus-square{background-color:#CF3D2E}.social-icons .fa-html5{background-color:#E54D26}.social-icons .fa-instagram{background-color:#A1755C}.social-icons .fa-linkedin,.social-icons .fa-linkedin-square{background-color:#0085AE}.social-icons .fa-linux{background-color:#FBC002;color:#333}.social-icons .fa-maxcdn{background-color:#F6AE1C}.social-icons .fa-pagelines{background-color:#241E20;color:#3984EA}.social-icons .fa-pinterest,.social-icons .fa-pinterest-square{background-color:#CC2127}.social-icons .fa-renren{background-color:#025DAC}.social-icons .fa-skype{background-color:#01AEF2}.social-icons .fa-stack-exchange{background-color:#245590}.social-icons .fa-stack-overflow{background-color:#FF7300}.social-icons .fa-trello{background-color:#265A7F}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{background-color:#314E6C}.social-icons .fa-twitter,.social-icons .fa-twitter-square{background-color:#32CCFE}.social-icons .fa-vimeo-square{background-color:#229ACC}.social-icons .fa-vk{background-color:#375474}.social-icons .fa-weibo{background-color:#D72B2B}.social-icons .fa-windows{background-color:#12B6F3}.social-icons .fa-xing,.social-icons .fa-xing-square{background-color:#00555C}.social-icons .fa-youtube,.social-icons .fa-youtube-play,.social-icons .fa-youtube-square{background-color:#C52F30}@media (max-width: 575px){.vue-map-container .vue-map{min-height:500px}.carousel{min-height:600px}}@media (min-width: 576px) and (max-width: 767px){.vue-map-container .vue-map{min-height:500px}.carousel{min-height:600px}}@media (min-width: 768px) and (max-width: 991px){.vue-map-container .vue-map{min-height:500px}.carousel{min-height:600px}}@media (min-width: 992px) and (max-width: 1199px){.vue-map-container .vue-map{min-height:500px}.carousel{min-height:600px}}@media (min-width: 1200px){.vue-map-container .vue-map{min-height:900px}.carousel{min-height:1000px}}.main-header{font-weight:500} 2 | -------------------------------------------------------------------------------- /db/migrate/20161215152127_create_pwb_props.pwb.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from pwb (originally 20161120103546) 2 | class CreatePwbProps < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :pwb_props do |t| 5 | 6 | t.string :reference 7 | 8 | t.integer :year_construction, default: 0, null: false 9 | t.integer :count_bedrooms, default: 0, null: false 10 | t.integer :count_bathrooms, default: 0, null: false 11 | t.integer :count_toilets, default: 0, null: false 12 | t.integer :count_garages, default: 0, null: false 13 | t.float :plot_area, default: 0, null: false 14 | t.float :constructed_area, default: 0, null: false 15 | t.integer :energy_rating 16 | t.float :energy_performance 17 | # t.string "title" 18 | # t.text "description" 19 | # t.text "details" 20 | t.integer :flags, default: 0, null: false 21 | 22 | # booleans used in scopes 23 | t.boolean :furnished, default: false 24 | t.boolean :sold, default: false 25 | t.boolean :reserved, default: false 26 | t.boolean :highlighted, default: false 27 | t.boolean :archived, default: false 28 | # when above is set to true, below needs to be set to false 29 | t.boolean :visible, default: false 30 | 31 | t.boolean :for_rent_short_term, default: false 32 | t.boolean :for_rent_long_term, default: false 33 | t.boolean :for_sale, default: false 34 | t.boolean :hide_map, default: false 35 | t.boolean :obscure_map, default: false 36 | t.boolean :portals_enabled, default: false 37 | # if I used flag shih tzu for above, I couldn't make queries like: 38 | # Property.where('for_rent_short_term OR for_rent_long_term') 39 | 40 | 41 | t.datetime :deleted_at 42 | t.datetime :active_from 43 | t.datetime :available_to_rent_from 44 | t.datetime :available_to_rent_till 45 | 46 | t.monetize :price_sale_current 47 | t.monetize :price_sale_original 48 | # above will create below in schema.rb: 49 | # t.integer "price_sale_original_cents", default: 0, null: false 50 | # t.string "price_sale_original_currency", default: "EUR", null: false 51 | 52 | t.monetize :price_rental_monthly_current 53 | t.monetize :price_rental_monthly_original 54 | t.monetize :price_rental_monthly_low_season 55 | t.monetize :price_rental_monthly_high_season 56 | t.monetize :price_rental_monthly_standard_season 57 | t.monetize :commission 58 | t.monetize :service_charge_yearly 59 | 60 | # below is the lowest of the 3 seasonal monthly values 61 | # or the standard rental value 62 | # needed to allow me to search across diff rental types 63 | t.monetize :price_rental_monthly_for_search 64 | 65 | 66 | t.string :currency 67 | 68 | t.string :prop_origin_key, default: "", null: false 69 | t.string :prop_state_key, default: "", null: false 70 | t.string :prop_type_key, default: "", null: false 71 | 72 | t.string :street_number 73 | t.string :street_name 74 | t.string :street_address 75 | t.string :postal_code 76 | t.string :province 77 | t.string :city 78 | t.string :region 79 | t.string :country 80 | t.float :latitude 81 | t.float :longitude 82 | 83 | t.timestamps 84 | end 85 | 86 | add_index :pwb_props, :visible 87 | add_index :pwb_props, :flags 88 | add_index :pwb_props, :for_rent_short_term 89 | add_index :pwb_props, :for_rent_long_term 90 | add_index :pwb_props, :for_sale 91 | add_index :pwb_props, :highlighted 92 | add_index :pwb_props, :archived 93 | add_index :pwb_props, :reference, unique: true 94 | add_index :pwb_props, :price_rental_monthly_current_cents 95 | add_index :pwb_props, :price_sale_current_cents 96 | 97 | # add_index :pwb_props, :locality 98 | # add_index :pwb_props, :zone 99 | # https://github.com/alexreisner/geocoder 100 | add_index :pwb_props, [:latitude, :longitude] 101 | end 102 | end 103 | -------------------------------------------------------------------------------- /db/migrate/20171204110203_create_property_web_scraper_listings.property_web_scraper.rb: -------------------------------------------------------------------------------- 1 | # This migration comes from property_web_scraper (originally 20170628201113) 2 | class CreatePropertyWebScraperListings < ActiveRecord::Migration[5.0] 3 | def change 4 | create_table :property_web_scraper_listings do |t| 5 | t.integer :flags, default: 0, null: false 6 | t.integer :area_unit, default: 0, null: false 7 | t.string :reference 8 | # -1 indicates value could not be retrieved 9 | t.integer :year_construction, default: 0 #, null: false 10 | t.integer :count_bedrooms, default: 0 #, null: false 11 | t.float :count_bathrooms, default: 0 #, null: false 12 | # turns out count_bathrooms in the US can be .5, 1.5 etc 13 | # so need a float for above 14 | t.integer :count_toilets, default: 0 #, null: false 15 | t.integer :count_garages, default: 0 #, null: false 16 | t.float :plot_area, default: 0 #, null: false 17 | t.float :constructed_area, default: 0 #, null: false 18 | t.integer :energy_rating 19 | t.float :energy_performance 20 | t.string :title 21 | t.text :description 22 | t.string :locale_code 23 | # will use locale_code to say what default lang is 24 | # but for popular languages will save in dedicated cols 25 | t.string :title_es 26 | t.text :description_es 27 | t.string :title_de 28 | t.text :description_de 29 | t.string :title_fr 30 | t.text :description_fr 31 | t.string :title_it 32 | t.text :description_it 33 | 34 | 35 | # booleans used in scopes 36 | t.boolean :furnished, default: false 37 | t.boolean :sold, default: false 38 | t.boolean :reserved, default: false 39 | 40 | t.boolean :for_rent_short_term, default: false 41 | t.boolean :for_rent_long_term, default: false 42 | t.boolean :for_sale, default: false 43 | t.boolean :for_rent, default: false 44 | 45 | t.datetime :deleted_at 46 | t.datetime :active_from 47 | t.datetime :available_to_rent_from 48 | t.datetime :available_to_rent_till 49 | 50 | t.string :price_string 51 | t.float :price_float 52 | t.monetize :price_sale 53 | # above will create below in schema.rb: 54 | # t.integer "price_sale_cents", default: 0, null: false 55 | # t.string "price_sale_currency", default: "EUR", null: false 56 | # t.monetize :price_rental 57 | 58 | t.monetize :price_sale_current 59 | t.monetize :price_sale_original 60 | 61 | t.monetize :price_rental_monthly_current 62 | t.monetize :price_rental_monthly_original 63 | t.monetize :price_rental_monthly_low_season 64 | t.monetize :price_rental_monthly_high_season 65 | t.monetize :price_rental_monthly_standard_season 66 | t.monetize :commission 67 | t.monetize :service_charge_yearly 68 | 69 | # below is the lowest of the 3 seasonal monthly values 70 | # or the standard rental value 71 | # needed to allow me to search across diff rental types 72 | t.monetize :price_rental_monthly_for_search 73 | 74 | t.string :currency 75 | 76 | t.string :address_string 77 | t.string :street_number 78 | t.string :street_name 79 | t.string :street_address 80 | t.string :postal_code 81 | t.string :province 82 | t.string :city 83 | t.string :region 84 | t.string :country 85 | t.float :latitude 86 | t.float :longitude 87 | 88 | t.datetime :last_retrieved_at 89 | # t.integer :import_host_id 90 | t.string :import_host_slug 91 | # for real estate agent ref: 92 | t.integer :re_agent_id 93 | t.string :import_url 94 | t.json :import_history, default: {} 95 | 96 | t.string :main_image_url 97 | t.text :image_urls, array: true, default: [] 98 | t.text :related_urls, array: true, default: [] 99 | t.text :features, array: true, default: [] 100 | t.text :unknown_fields, array: true, default: [] 101 | 102 | t.timestamps 103 | end 104 | 105 | add_index :property_web_scraper_listings, :flags 106 | add_index :property_web_scraper_listings, :price_float 107 | # add_index :property_web_scraper_listings, :price_rental_cents 108 | # add_index :property_web_scraper_listings, :price_sale_cents 109 | add_index :property_web_scraper_listings, :reference 110 | add_index :property_web_scraper_listings, :import_url 111 | end 112 | end 113 | -------------------------------------------------------------------------------- /config/environments/production.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # http://blog.bigbinary.com/2015/10/31/rails-5-allows-setting-custom-http-headers-for-assets.html 5 | # 6 | config.public_file_server.headers = { 7 | 'Cache-Control' => 'public, s-maxage=31536000, maxage=15552000', 8 | 'Expires' => "#{1.year.from_now.to_formatted_s(:rfc822)}" 9 | } 10 | 11 | # Code is not reloaded between requests. 12 | config.cache_classes = true 13 | 14 | # Eager load code on boot. This eager loads most of Rails and 15 | # your application in memory, allowing both threaded web servers 16 | # and those relying on copy on write to perform better. 17 | # Rake tasks automatically ignore this option for performance. 18 | config.eager_load = true 19 | 20 | # Full error reports are disabled and caching is turned on. 21 | config.consider_all_requests_local = false 22 | config.action_controller.perform_caching = true 23 | 24 | # Disable serving static files from the `/public` folder by default since 25 | # Apache or NGINX already handles this. 26 | config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 27 | 28 | # Compress JavaScripts and CSS. 29 | config.assets.js_compressor = :uglifier 30 | # config.assets.css_compressor = :sass 31 | 32 | # Do not fallback to assets pipeline if a precompiled asset is missed. 33 | # config.assets.compile = false 34 | # http://stackoverflow.com/questions/19194515/rails-4-app-on-heroku-is-serving-css-and-js-but-not-image-assets?rq=1 35 | # to allow font files to be served 36 | config.assets.compile = true 37 | 38 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb 39 | 40 | # Enable serving of images, stylesheets, and JavaScripts from an asset server. 41 | # config.action_controller.asset_host = 'http://assets.example.com' 42 | 43 | # Specifies the header that your server uses for sending files. 44 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache 45 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX 46 | 47 | # Mount Action Cable outside main process or domain 48 | # config.action_cable.mount_path = nil 49 | # config.action_cable.url = 'wss://example.com/cable' 50 | # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] 51 | 52 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 53 | # config.force_ssl = true 54 | 55 | # Use the lowest log level to ensure availability of diagnostic information 56 | # when problems arise. 57 | config.log_level = :debug 58 | 59 | # Prepend all log lines with the following tags. 60 | config.log_tags = [ :request_id ] 61 | 62 | # Use a different cache store in production. 63 | # config.cache_store = :mem_cache_store 64 | 65 | # Use a real queuing backend for Active Job (and separate queues per environment) 66 | # config.active_job.queue_adapter = :resque 67 | # config.active_job.queue_name_prefix = "pwb-for-heroku_#{Rails.env}" 68 | config.action_mailer.perform_caching = false 69 | 70 | # Ignore bad email addresses and do not raise email delivery errors. 71 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. 72 | config.action_mailer.raise_delivery_errors = false 73 | 74 | config.action_mailer.smtp_settings = { 75 | :address => "smtp.sendgrid.net", 76 | :port => 25, 77 | :domain => "propertywebbuilder.com", 78 | :authentication => :plain, 79 | :user_name => Rails.application.secrets.sendgrid_username, 80 | :password => Rails.application.secrets.sendgrid_password 81 | # If deploying to heroku, set below in secrets.yml so above works 82 | # sendgrid_username: <%= ENV['SENDGRID_USERNAME'] %> 83 | # sendgrid_password: <%= ENV['SENDGRID_PASSWORD'] %> 84 | } 85 | 86 | 87 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 88 | # the I18n.default_locale when a translation cannot be found). 89 | config.i18n.fallbacks = true 90 | 91 | # Send deprecation notices to registered listeners. 92 | config.active_support.deprecation = :notify 93 | 94 | # Use default logging formatter so that PID and timestamp are not suppressed. 95 | config.log_formatter = ::Logger::Formatter.new 96 | 97 | # Use a different logger for distributed setups. 98 | # require 'syslog/logger' 99 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') 100 | 101 | if ENV["RAILS_LOG_TO_STDOUT"].present? 102 | logger = ActiveSupport::Logger.new(STDOUT) 103 | logger.formatter = config.log_formatter 104 | config.logger = ActiveSupport::TaggedLogging.new(logger) 105 | end 106 | 107 | # Do not dump schema after migrations. 108 | config.active_record.dump_schema_after_migration = false 109 | end 110 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GIT 2 | remote: https://github.com/etewiah/property_web_builder 3 | revision: 7238aea216cd8c101d7c50ad57a1a3ee2a81e5ca 4 | specs: 5 | pwb (1.4.0) 6 | active_hash 7 | activemodel-serializers-xml 8 | bootstrap-sass 9 | carrierwave 10 | cloudinary 11 | devise 12 | devise-i18n 13 | faker 14 | faraday 15 | firebase 16 | flag_shih_tzu 17 | fog-aws 18 | geocoder 19 | globalize 20 | globalize-accessors 21 | i18n-active_record 22 | jquery-rails 23 | jsonapi-resources (= 0.8.1) 24 | liquid 25 | money-rails (~> 1) 26 | nokogiri 27 | omniauth (~> 1.9.1) 28 | omniauth-facebook 29 | pg (< 1.0) 30 | rails (>= 5.2) 31 | responders 32 | rets 33 | ruby_odata 34 | simple_form 35 | 36 | GIT 37 | remote: https://github.com/fredngo/paloma 38 | revision: 40a84f5dfa5d1ba6b515cecc87470428333f81d6 39 | specs: 40 | paloma (5.0.0) 41 | 42 | GEM 43 | remote: https://rubygems.org/ 44 | specs: 45 | actioncable (5.2.6) 46 | actionpack (= 5.2.6) 47 | nio4r (~> 2.0) 48 | websocket-driver (>= 0.6.1) 49 | actionmailer (5.2.6) 50 | actionpack (= 5.2.6) 51 | actionview (= 5.2.6) 52 | activejob (= 5.2.6) 53 | mail (~> 2.5, >= 2.5.4) 54 | rails-dom-testing (~> 2.0) 55 | actionpack (5.2.6) 56 | actionview (= 5.2.6) 57 | activesupport (= 5.2.6) 58 | rack (~> 2.0, >= 2.0.8) 59 | rack-test (>= 0.6.3) 60 | rails-dom-testing (~> 2.0) 61 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 62 | actionview (5.2.6) 63 | activesupport (= 5.2.6) 64 | builder (~> 3.1) 65 | erubi (~> 1.4) 66 | rails-dom-testing (~> 2.0) 67 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 68 | active_hash (3.1.0) 69 | activesupport (>= 5.0.0) 70 | activejob (5.2.6) 71 | activesupport (= 5.2.6) 72 | globalid (>= 0.3.6) 73 | activemodel (5.2.6) 74 | activesupport (= 5.2.6) 75 | activemodel-serializers-xml (1.0.2) 76 | activemodel (> 5.x) 77 | activesupport (> 5.x) 78 | builder (~> 3.1) 79 | activerecord (5.2.6) 80 | activemodel (= 5.2.6) 81 | activesupport (= 5.2.6) 82 | arel (>= 9.0) 83 | activestorage (5.2.6) 84 | actionpack (= 5.2.6) 85 | activerecord (= 5.2.6) 86 | marcel (~> 1.0.0) 87 | activesupport (5.2.6) 88 | concurrent-ruby (~> 1.0, >= 1.0.2) 89 | i18n (>= 0.7, < 2) 90 | minitest (~> 5.1) 91 | tzinfo (~> 1.1) 92 | addressable (2.8.0) 93 | public_suffix (>= 2.0.2, < 5.0) 94 | arel (9.0.0) 95 | autoprefixer-rails (10.4.2.0) 96 | execjs (~> 2) 97 | aws_cf_signer (0.1.3) 98 | backports (2.3.0) 99 | bcrypt (3.1.16) 100 | bindex (0.8.1) 101 | bootstrap-sass (3.4.1) 102 | autoprefixer-rails (>= 5.2.1) 103 | sassc (>= 2.0.0) 104 | builder (3.2.4) 105 | byebug (11.1.3) 106 | carrierwave (2.2.2) 107 | activemodel (>= 5.0.0) 108 | activesupport (>= 5.0.0) 109 | addressable (~> 2.6) 110 | image_processing (~> 1.1) 111 | marcel (~> 1.0.0) 112 | mini_mime (>= 0.1.3) 113 | ssrf_filter (~> 1.0) 114 | closure-compiler (1.1.14) 115 | cloudinary (1.21.0) 116 | aws_cf_signer 117 | rest-client (>= 2.0.0) 118 | coffee-rails (4.2.2) 119 | coffee-script (>= 2.2.0) 120 | railties (>= 4.0.0) 121 | coffee-script (2.4.1) 122 | coffee-script-source 123 | execjs 124 | coffee-script-source (1.12.2) 125 | concurrent-ruby (1.1.9) 126 | crass (1.0.6) 127 | devise (4.8.1) 128 | bcrypt (~> 3.0) 129 | orm_adapter (~> 0.1) 130 | railties (>= 4.1.0) 131 | responders 132 | warden (~> 1.2.3) 133 | devise-i18n (1.10.1) 134 | devise (>= 4.8.0) 135 | domain_name (0.5.20190701) 136 | unf (>= 0.0.5, < 1.0.0) 137 | erubi (1.10.0) 138 | excon (0.90.0) 139 | execjs (2.8.1) 140 | faker (2.19.0) 141 | i18n (>= 1.6, < 2) 142 | faraday (1.9.3) 143 | faraday-em_http (~> 1.0) 144 | faraday-em_synchrony (~> 1.0) 145 | faraday-excon (~> 1.1) 146 | faraday-httpclient (~> 1.0) 147 | faraday-multipart (~> 1.0) 148 | faraday-net_http (~> 1.0) 149 | faraday-net_http_persistent (~> 1.0) 150 | faraday-patron (~> 1.0) 151 | faraday-rack (~> 1.0) 152 | faraday-retry (~> 1.0) 153 | ruby2_keywords (>= 0.0.4) 154 | faraday-em_http (1.0.0) 155 | faraday-em_synchrony (1.0.0) 156 | faraday-excon (1.1.0) 157 | faraday-httpclient (1.0.1) 158 | faraday-multipart (1.0.3) 159 | multipart-post (>= 1.2, < 3) 160 | faraday-net_http (1.0.1) 161 | faraday-net_http_persistent (1.2.0) 162 | faraday-patron (1.0.0) 163 | faraday-rack (1.0.0) 164 | faraday-retry (1.0.3) 165 | ffi (1.15.5) 166 | firebase (0.2.8) 167 | googleauth 168 | httpclient (>= 2.5.3) 169 | json 170 | flag_shih_tzu (0.3.23) 171 | fog-aws (2.0.1) 172 | fog-core (~> 1.38) 173 | fog-json (~> 1.0) 174 | fog-xml (~> 0.1) 175 | ipaddress (~> 0.8) 176 | fog-core (1.43.0) 177 | builder 178 | excon (~> 0.49) 179 | formatador (~> 0.2) 180 | fog-json (1.2.0) 181 | fog-core 182 | multi_json (~> 1.10) 183 | fog-xml (0.1.4) 184 | fog-core 185 | nokogiri (>= 1.5.11, < 2.0.0) 186 | formatador (0.3.0) 187 | geocoder (1.7.2) 188 | globalid (1.0.0) 189 | activesupport (>= 5.0) 190 | globalize (6.0.1) 191 | activemodel (>= 4.2, < 7.0) 192 | activerecord (>= 4.2, < 7.0) 193 | request_store (~> 1.0) 194 | globalize-accessors (0.3.0) 195 | globalize (>= 5.0.0) 196 | googleauth (1.1.0) 197 | faraday (>= 0.17.3, < 2.0) 198 | jwt (>= 1.4, < 3.0) 199 | memoist (~> 0.16) 200 | multi_json (~> 1.11) 201 | os (>= 0.9, < 2.0) 202 | signet (>= 0.16, < 2.a) 203 | hashie (5.0.0) 204 | http-accept (1.7.0) 205 | http-cookie (1.0.4) 206 | domain_name (~> 0.5) 207 | httpclient (2.8.3) 208 | i18n (1.8.11) 209 | concurrent-ruby (~> 1.0) 210 | i18n-active_record (1.1.0) 211 | i18n (>= 0.5.0) 212 | image_processing (1.12.1) 213 | mini_magick (>= 4.9.5, < 5) 214 | ruby-vips (>= 2.0.17, < 3) 215 | ipaddress (0.8.3) 216 | jbuilder (2.11.5) 217 | actionview (>= 5.0.0) 218 | activesupport (>= 5.0.0) 219 | jquery-rails (4.4.0) 220 | rails-dom-testing (>= 1, < 3) 221 | railties (>= 4.2.0) 222 | thor (>= 0.14, < 2.0) 223 | json (2.6.1) 224 | jsonapi-resources (0.8.1) 225 | concurrent-ruby 226 | rails (>= 4.0) 227 | jwt (2.3.0) 228 | liquid (5.1.0) 229 | listen (3.0.8) 230 | rb-fsevent (~> 0.9, >= 0.9.4) 231 | rb-inotify (~> 0.9, >= 0.9.7) 232 | loofah (2.13.0) 233 | crass (~> 1.0.2) 234 | nokogiri (>= 1.5.9) 235 | mail (2.7.1) 236 | mini_mime (>= 0.1.1) 237 | marcel (1.0.2) 238 | memoist (0.16.2) 239 | method_source (1.0.0) 240 | mime-types (3.4.1) 241 | mime-types-data (~> 3.2015) 242 | mime-types-data (3.2022.0105) 243 | mini_magick (4.11.0) 244 | mini_mime (1.1.2) 245 | mini_portile2 (2.7.1) 246 | minitest (5.15.0) 247 | monetize (1.12.0) 248 | money (~> 6.12) 249 | money (6.16.0) 250 | i18n (>= 0.6.4, <= 2) 251 | money-rails (1.15.0) 252 | activesupport (>= 3.0) 253 | monetize (~> 1.9) 254 | money (~> 6.13) 255 | railties (>= 3.0) 256 | multi_json (1.15.0) 257 | multi_xml (0.6.0) 258 | multipart-post (2.1.1) 259 | netrc (0.11.0) 260 | nio4r (2.5.8) 261 | nokogiri (1.13.1) 262 | mini_portile2 (~> 2.7.0) 263 | racc (~> 1.4) 264 | oauth2 (1.4.7) 265 | faraday (>= 0.8, < 2.0) 266 | jwt (>= 1.0, < 3.0) 267 | multi_json (~> 1.3) 268 | multi_xml (~> 0.5) 269 | rack (>= 1.2, < 3) 270 | omniauth (1.9.1) 271 | hashie (>= 3.4.6) 272 | rack (>= 1.6.2, < 3) 273 | omniauth-facebook (9.0.0) 274 | omniauth-oauth2 (~> 1.2) 275 | omniauth-oauth2 (1.7.2) 276 | oauth2 (~> 1.4) 277 | omniauth (>= 1.9, < 3) 278 | orm_adapter (0.5.0) 279 | os (1.1.4) 280 | pg (0.21.0) 281 | public_suffix (4.0.6) 282 | puma (4.3.10) 283 | nio4r (~> 2.0) 284 | racc (1.6.0) 285 | rack (2.2.3) 286 | rack-test (1.1.0) 287 | rack (>= 1.0, < 3) 288 | rails (5.2.6) 289 | actioncable (= 5.2.6) 290 | actionmailer (= 5.2.6) 291 | actionpack (= 5.2.6) 292 | actionview (= 5.2.6) 293 | activejob (= 5.2.6) 294 | activemodel (= 5.2.6) 295 | activerecord (= 5.2.6) 296 | activestorage (= 5.2.6) 297 | activesupport (= 5.2.6) 298 | bundler (>= 1.3.0) 299 | railties (= 5.2.6) 300 | sprockets-rails (>= 2.0.0) 301 | rails-dom-testing (2.0.3) 302 | activesupport (>= 4.2.0) 303 | nokogiri (>= 1.6) 304 | rails-html-sanitizer (1.4.2) 305 | loofah (~> 2.3) 306 | railties (5.2.6) 307 | actionpack (= 5.2.6) 308 | activesupport (= 5.2.6) 309 | method_source 310 | rake (>= 0.8.7) 311 | thor (>= 0.19.0, < 2.0) 312 | rake (13.0.6) 313 | rb-fsevent (0.11.0) 314 | rb-inotify (0.10.1) 315 | ffi (~> 1.0) 316 | request_store (1.5.0) 317 | rack (>= 1.4) 318 | responders (3.0.1) 319 | actionpack (>= 5.0) 320 | railties (>= 5.0) 321 | rest-client (2.1.0) 322 | http-accept (>= 1.7.0, < 2.0) 323 | http-cookie (>= 1.0.2, < 2.0) 324 | mime-types (>= 1.16, < 4.0) 325 | netrc (~> 0.8) 326 | rets (0.11.2) 327 | http-cookie (~> 1.0.0) 328 | httpclient (~> 2.7) 329 | nokogiri (~> 1.5) 330 | ruby-vips (2.1.4) 331 | ffi (~> 1.12) 332 | ruby2_keywords (0.0.5) 333 | ruby_odata (0.1.0) 334 | activesupport (>= 2.3.5) 335 | backports (~> 2.3.0) 336 | nokogiri (>= 1.4.2) 337 | rest-client (>= 1.5.1) 338 | sass (3.7.4) 339 | sass-listen (~> 4.0.0) 340 | sass-listen (4.0.0) 341 | rb-fsevent (~> 0.9, >= 0.9.4) 342 | rb-inotify (~> 0.9, >= 0.9.7) 343 | sass-rails (5.1.0) 344 | railties (>= 5.2.0) 345 | sass (~> 3.1) 346 | sprockets (>= 2.8, < 4.0) 347 | sprockets-rails (>= 2.0, < 4.0) 348 | tilt (>= 1.1, < 3) 349 | sassc (2.4.0) 350 | ffi (~> 1.9) 351 | signet (0.16.0) 352 | addressable (~> 2.8) 353 | faraday (>= 0.17.3, < 2.0) 354 | jwt (>= 1.5, < 3.0) 355 | multi_json (~> 1.10) 356 | simple_form (5.1.0) 357 | actionpack (>= 5.2) 358 | activemodel (>= 5.2) 359 | spring (2.1.1) 360 | spring-watcher-listen (2.0.1) 361 | listen (>= 2.7, < 4.0) 362 | spring (>= 1.2, < 3.0) 363 | sprockets (3.7.2) 364 | concurrent-ruby (~> 1.0) 365 | rack (> 1, < 3) 366 | sprockets-rails (3.4.2) 367 | actionpack (>= 5.2) 368 | activesupport (>= 5.2) 369 | sprockets (>= 3.0.0) 370 | ssrf_filter (1.0.7) 371 | thor (1.2.1) 372 | thread_safe (0.3.6) 373 | tilt (2.0.10) 374 | turbolinks (5.2.1) 375 | turbolinks-source (~> 5.2) 376 | turbolinks-source (5.2.0) 377 | tzinfo (1.2.9) 378 | thread_safe (~> 0.1) 379 | uglifier (4.2.0) 380 | execjs (>= 0.3.0, < 3) 381 | unf (0.1.4) 382 | unf_ext 383 | unf_ext (0.0.8) 384 | warden (1.2.9) 385 | rack (>= 2.0.9) 386 | web-console (3.7.0) 387 | actionview (>= 5.0) 388 | activemodel (>= 5.0) 389 | bindex (>= 0.4.0) 390 | railties (>= 5.0) 391 | websocket-driver (0.7.5) 392 | websocket-extensions (>= 0.1.0) 393 | websocket-extensions (0.1.5) 394 | yui-compressor (0.12.0) 395 | 396 | PLATFORMS 397 | ruby 398 | 399 | DEPENDENCIES 400 | byebug 401 | closure-compiler 402 | coffee-rails (~> 4.2) 403 | fog-core (= 1.43.0) 404 | jbuilder (~> 2.5) 405 | jquery-rails 406 | listen (~> 3.0.5) 407 | paloma! 408 | pg (~> 0.18) 409 | puma (~> 4.3) 410 | pwb! 411 | rails (~> 5.2) 412 | sass-rails (~> 5.0) 413 | spring 414 | spring-watcher-listen (~> 2.0.0) 415 | turbolinks (~> 5) 416 | tzinfo-data 417 | uglifier (>= 1.3.0) 418 | web-console 419 | yui-compressor 420 | 421 | BUNDLED WITH 422 | 2.0.2 423 | -------------------------------------------------------------------------------- /public/assets/.sprockets-manifest-758e8b8299526c3c45a4a70c9d0abb4c.json: -------------------------------------------------------------------------------- 1 | {"files":{"pwb_admin_panel/application_legacy_1-568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841.css":{"logical_path":"pwb_admin_panel/application_legacy_1.css","mtime":"2018-02-27T16:08:44+01:00","size":647219,"digest":"568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841","integrity":"sha256-Vo00M7bm3VUfhgeQ09HhuXfdkK21naxBPueO3IriaEE="},"default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css":{"logical_path":"default.css","mtime":"2018-02-14T11:39:42+01:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"pwb/themes/chic-9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678.css":{"logical_path":"pwb/themes/chic.css","mtime":"2018-02-27T16:08:44+01:00","size":74560,"digest":"9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678","integrity":"sha256-k4HpfL3MseQb/CUWt2ReXIgIFO89yvdb+V+RSkQcNng="},"pwb/themes/berlin-1cd25828607baafb1f341c5b789ea78b7e51d516018a1f49bd2b5e07f566656b.css":{"logical_path":"pwb/themes/berlin.css","mtime":"2018-02-07T19:31:15+01:00","size":186238,"digest":"1cd25828607baafb1f341c5b789ea78b7e51d516018a1f49bd2b5e07f566656b","integrity":"sha256-HNJYKGB7qvsfNBxbeJ6ni35R1RYBih9JvSteB/VmZWs="},"pwb/themes/squares-b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0.css":{"logical_path":"pwb/themes/squares.css","mtime":"2018-02-27T16:08:44+01:00","size":110682,"digest":"b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0","integrity":"sha256-ti48Eu6n+EIomMrjWAlyBj0dYtJI4S8TKv/GtIQAUaA="},"pwb/themes/matt-e91075e2387d2887e24d9c8f43ffb4046d4fb7cbbaba3793e1793a9f7bdb76b3.css":{"logical_path":"pwb/themes/matt.css","mtime":"2018-02-07T19:31:15+01:00","size":2724,"digest":"e91075e2387d2887e24d9c8f43ffb4046d4fb7cbbaba3793e1793a9f7bdb76b3","integrity":"sha256-6RB14jh9KIfiTZyPQ/+0BG1Pt8u6ujeT4Xk6n3vbdrM="},"pwb/themes/vic-0256d94eeb69932cfa4dccea99e19937c64cb7dd7bef9260e82c2376edcc1314.css":{"logical_path":"pwb/themes/vic.css","mtime":"2018-02-07T19:31:15+01:00","size":17050,"digest":"0256d94eeb69932cfa4dccea99e19937c64cb7dd7bef9260e82c2376edcc1314","integrity":"sha256-AlbZTutpkyz6TczqmeGZN8ZMt91775Jg6Cwjdu3MExQ="},"pwb/themes/vic-0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942.js":{"logical_path":"pwb/themes/vic.js","mtime":"2018-02-27T16:08:44+01:00","size":1329327,"digest":"0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942","integrity":"sha256-CohbYb/6gxRDotWMS3bJoI2Q9XQOm5V40URKiKl+yUI="},"pwb/themes/squares-d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227.js":{"logical_path":"pwb/themes/squares.js","mtime":"2018-02-27T16:08:44+01:00","size":1815235,"digest":"d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227","integrity":"sha256-2U7nUqqVjbf3a+8P1rb3JOyz8Ig1bgMwmb4IpZRf8ic="},"pwb/themes/berlin-4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905.js":{"logical_path":"pwb/themes/berlin.js","mtime":"2018-02-27T16:08:44+01:00","size":1399324,"digest":"4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905","integrity":"sha256-TqdV/cu4PlTKkqLwQCgN5WY6x/tr/JuQpBKI+PK7aQU="},"pwb_admin_panel/application_legacy_1-3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8.js":{"logical_path":"pwb_admin_panel/application_legacy_1.js","mtime":"2018-02-27T16:08:44+01:00","size":1785475,"digest":"3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8","integrity":"sha256-P9fu6OWJh3XfSfjIdsmGr78H5UEul1G/G5mavM199Mg="},"pwb/config-fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8.js":{"logical_path":"pwb/config.js","mtime":"2018-02-27T16:08:44+01:00","size":365142,"digest":"fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8","integrity":"sha256-/tNeEfWbzWHAtwjTWbUNWK/aJ6q5ZJYs5IZcHqROQ6g="},"pwb/themes/default-dc1a3ea2c9a58796a77566a6308ff868745724c81ed20d9bce40112d6d066687.css":{"logical_path":"pwb/themes/default.css","mtime":"2018-02-07T19:31:15+01:00","size":166812,"digest":"dc1a3ea2c9a58796a77566a6308ff868745724c81ed20d9bce40112d6d066687","integrity":"sha256-3Bo+osmlh5andWamMI/4aHRXJMge0g2bzkARLW0GZoc="},"application-e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f.js":{"logical_path":"application.js","mtime":"2018-02-27T16:08:44+01:00","size":371820,"digest":"e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f","integrity":"sha256-6IphQyuxvaZGZmvG3+VnvdMmolkaKaWfBIOKngEzqz8="},"application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css":{"logical_path":"application.css","mtime":"2016-12-04T10:44:09+01:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"property_web_scraper/application-117137a34146570cc9eec484b58a3652ff12927a2a4db7259299dce608fe5bc2.js":{"logical_path":"property_web_scraper/application.js","mtime":"2018-02-12T13:22:34+01:00","size":315723,"digest":"117137a34146570cc9eec484b58a3652ff12927a2a4db7259299dce608fe5bc2","integrity":"sha256-EXE3o0FGVwzJ7sSEtYo2Uv8SknoqTbclkpnc5gj+W8I="},"property_web_scraper/application-6bb4c93701711631912a6fb9b6e732e1ff498b6ae627ae5ff918e8b9844d3681.css":{"logical_path":"property_web_scraper/application.css","mtime":"2017-12-03T22:03:22+01:00","size":68,"digest":"6bb4c93701711631912a6fb9b6e732e1ff498b6ae627ae5ff918e8b9844d3681","integrity":"sha256-a7TJNwFxFjGRKm+5tucy4f9Ji2rmJ65f+RjouYRNNoE="},"pwb/application-e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553.js":{"logical_path":"pwb/application.js","mtime":"2018-02-27T16:08:44+01:00","size":1246920,"digest":"e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553","integrity":"sha256-5dymFosegBqOw2mmX8tAum7ippetkjiie6uzp/OI1VM="},"pwb_admin_panel/application-5e3fba293ba730d7c27a57bb45df14ba3858a75a06baf9fa07b8c4260ff00b95.js":{"logical_path":"pwb_admin_panel/application.js","mtime":"2018-01-18T19:34:29+01:00","size":1836032,"digest":"5e3fba293ba730d7c27a57bb45df14ba3858a75a06baf9fa07b8c4260ff00b95","integrity":"sha256-Xj+6KTunMNfCele7Rd8UujhYp1oGuvn6B7jEJg/wC5U="},"pwb/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css":{"logical_path":"pwb/application.css","mtime":"2018-02-27T16:08:44+01:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"pwb_admin_panel/application-533dc7df547722ab0e3328b84391671ed6a751af1b3b25bc77cd5e6f47255084.css":{"logical_path":"pwb_admin_panel/application.css","mtime":"2018-02-23T17:38:15+01:00","size":660051,"digest":"533dc7df547722ab0e3328b84391671ed6a751af1b3b25bc77cd5e6f47255084","integrity":"sha256-Uz3H31R3IqsOMyi4Q5FnHtanUa8bOyW8d81eb0clUIQ="},"pwb_admin_panel/application-3bad9a5f7fff302aed8500b4e54d77f174b73c281cade87377f6d4266addf252.js":{"logical_path":"pwb_admin_panel/application.js","mtime":"2018-02-12T13:22:34+01:00","size":1815658,"digest":"3bad9a5f7fff302aed8500b4e54d77f174b73c281cade87377f6d4266addf252","integrity":"sha256-O62aX3//MCrthQC05U138XS3PCgcrehzd/bUJmrd8lI="},"pwb/themes/berlin-ffbee86fff3c91177266b21a0d7603058d0ca3d6552f59a8d50a73f2df4d4489.css":{"logical_path":"pwb/themes/berlin.css","mtime":"2018-02-12T13:22:34+01:00","size":186379,"digest":"ffbee86fff3c91177266b21a0d7603058d0ca3d6552f59a8d50a73f2df4d4489","integrity":"sha256-/77ob/88kRdyZrIaDXYDBY0Mo9ZVL1mo1Qpz8t9NRIk="},"pwb/themes/matt-01b3ce8b3ac53d84409f3320180720000d77d3a0ee1fc9de7d5e7bac11d98a5c.css":{"logical_path":"pwb/themes/matt.css","mtime":"2018-02-12T13:22:34+01:00","size":2865,"digest":"01b3ce8b3ac53d84409f3320180720000d77d3a0ee1fc9de7d5e7bac11d98a5c","integrity":"sha256-AbPOizrFPYRAnzMgGAcgAA1306DuH8nefV57rBHZilw="},"pwb/themes/vic-41c072e56925519989fcb01708ea2d0a28a306039a03a46405baa670bb882563.css":{"logical_path":"pwb/themes/vic.css","mtime":"2018-02-12T13:22:34+01:00","size":17332,"digest":"41c072e56925519989fcb01708ea2d0a28a306039a03a46405baa670bb882563","integrity":"sha256-QcBy5WklUZmJ/LAXCOotCiijBgOaA6RkBbqmcLuIJWM="},"pwb/themes/default-c6bcf769e0e35a3e770a1d1d0fe35d8bda5e02ac4ac4e87fd641f4e02dc15531.css":{"logical_path":"pwb/themes/default.css","mtime":"2018-02-12T13:22:34+01:00","size":166953,"digest":"c6bcf769e0e35a3e770a1d1d0fe35d8bda5e02ac4ac4e87fd641f4e02dc15531","integrity":"sha256-xrz3aeDjWj53Ch0dD+Ndi9peAqxKxOh/1kH04C3BVTE="},"pwb/themes/berlin-3e019fc1e97a218b948ea9aa36386f4993994f315bdefbec0f810853269c5798.css":{"logical_path":"pwb/themes/berlin.css","mtime":"2018-02-20T19:25:04+01:00","size":186520,"digest":"3e019fc1e97a218b948ea9aa36386f4993994f315bdefbec0f810853269c5798","integrity":"sha256-PgGfwel6IYuUjqmqNjhvSZOZTzFb3vvsD4EIUyacV5g="},"pwb/themes/matt-29634fa9a0276002d135de7dbc8d27f2638c9c3fd9952387a7f2874f150c1974.css":{"logical_path":"pwb/themes/matt.css","mtime":"2018-02-20T19:25:03+01:00","size":3006,"digest":"29634fa9a0276002d135de7dbc8d27f2638c9c3fd9952387a7f2874f150c1974","integrity":"sha256-KWNPqaAnYALRNd59vI0n8mOMnD/ZlSOHp/KHTxUMGXQ="},"pwb/themes/vic-1fafb3f7c67073c20cf2a398f7ccae40ea98754547fb53bffadba211bd64b270.css":{"logical_path":"pwb/themes/vic.css","mtime":"2018-02-20T19:25:03+01:00","size":17614,"digest":"1fafb3f7c67073c20cf2a398f7ccae40ea98754547fb53bffadba211bd64b270","integrity":"sha256-H6+z98Zwc8IM8qOY98yuQOqYdUVH+1O/+tuiEb1ksnA="},"pwb/themes/default-f3051cb6721202ee912ec89f7abb9ecd24f9232e2f0918754f5f1b73ef3ac741.css":{"logical_path":"pwb/themes/default.css","mtime":"2018-02-20T19:25:04+01:00","size":167094,"digest":"f3051cb6721202ee912ec89f7abb9ecd24f9232e2f0918754f5f1b73ef3ac741","integrity":"sha256-8wUctnISAu6RLsiferuezST5Iy4vCRh1T18bc+86x0E="},"property_web_scraper/spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css":{"logical_path":"property_web_scraper/spp_vuetify.css","mtime":"2018-02-14T11:39:42+01:00","size":3837,"digest":"bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6","integrity":"sha256-vNYuZ19q2stq7tW5yoIgRtmUteYOWuUwRQDcWOLqeMY="},"property_web_scraper/spp_vuetify-bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1.js":{"logical_path":"property_web_scraper/spp_vuetify.js","mtime":"2018-02-14T11:39:42+01:00","size":1377565,"digest":"bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1","integrity":"sha256-vKuLzrNr029nScUgZThSMoNU41MZgI/9LyOPt5TOtcE="},"property_web_scraper/application-c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc.js":{"logical_path":"property_web_scraper/application.js","mtime":"2018-02-27T16:08:44+01:00","size":315740,"digest":"c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc","integrity":"sha256-wp/0vRoWlvoTmTELsuVY8Nue8+eqDvvx+RKJhhoiifw="},"property_web_scraper/application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css":{"logical_path":"property_web_scraper/application.css","mtime":"2018-02-14T11:39:42+01:00","size":153,"digest":"41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c","integrity":"sha256-QbjjqmwUyUhnO0T48eTsUPi3g/7LKxQR/loSHOUnvBw="},"pwb_admin_panel/application-fcf470d4911d3080d2732d4aaa67dc892e0b4a32c429899cff0a7a9f28cc2347.js":{"logical_path":"pwb_admin_panel/application.js","mtime":"2018-02-23T17:38:15+01:00","size":1815690,"digest":"fcf470d4911d3080d2732d4aaa67dc892e0b4a32c429899cff0a7a9f28cc2347","integrity":"sha256-/PRw1JEdMIDScy1KqmfciS4LSjLEKYmc/wp6nyjMI0c="},"pwb/themes/berlin-2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a.css":{"logical_path":"pwb/themes/berlin.css","mtime":"2018-02-27T16:08:44+01:00","size":186661,"digest":"2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a","integrity":"sha256-L956MBYuwxgeMhJzKTNRe7E4HKUhPaG/KGYiyw9f8Do="},"pwb/themes/matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css":{"logical_path":"pwb/themes/matt.css","mtime":"2018-02-27T16:08:44+01:00","size":3147,"digest":"e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f","integrity":"sha256-4yR9Xx9T30HBcFKgwNB4E00SD8mpMCK3c10HYk3E9E8="},"pwb/themes/vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css":{"logical_path":"pwb/themes/vic.css","mtime":"2018-02-27T16:08:44+01:00","size":17896,"digest":"45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df","integrity":"sha256-RfGUrsix/9G+Hlegd0jFSvOgjPPJmeMsi8/Dd9Ibh98="},"pwb/themes/default-33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7.css":{"logical_path":"pwb/themes/default.css","mtime":"2018-02-27T16:08:44+01:00","size":167235,"digest":"33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7","integrity":"sha256-M2ESEvzfBtCStDFaINsWpRbsAcA5aZ6eOhcaPFCvUKc="},"pwb_admin_panel/application-27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a.js":{"logical_path":"pwb_admin_panel/application.js","mtime":"2018-02-27T16:08:44+01:00","size":1816125,"digest":"27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a","integrity":"sha256-J/vPkvsj4uE5iWCodwqTXX4WOpdgxJv+Ye6zZnDO6Uo="},"pwb_admin_panel/application-921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915.css":{"logical_path":"pwb_admin_panel/application.css","mtime":"2018-02-27T16:08:44+01:00","size":660178,"digest":"921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915","integrity":"sha256-khsyLIJ1QMf3tuLu3M+ULBBizRBBVVbi0UCrSHZ7aRU="}},"assets":{"pwb_admin_panel/application_legacy_1.css":"pwb_admin_panel/application_legacy_1-568d3433b6e6dd551f860790d3d1e1b977dd90adb59dac413ee78edc8ae26841.css","default.css":"default-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css","pwb/themes/chic.css":"pwb/themes/chic-9381e97cbdccb1e41bfc2516b7645e5c880814ef3dcaf75bf95f914a441c3678.css","pwb/themes/berlin.css":"pwb/themes/berlin-2fde7a30162ec3181e3212732933517bb1381ca5213da1bf286622cb0f5ff03a.css","pwb/themes/squares.css":"pwb/themes/squares-b62e3c12eea7f8422898cae3580972063d1d62d248e12f132affc6b4840051a0.css","pwb/themes/matt.css":"pwb/themes/matt-e3247d5f1f53df41c17052a0c0d078134d120fc9a93022b7735d07624dc4f44f.css","pwb/themes/vic.css":"pwb/themes/vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css","pwb/themes/vic.js":"pwb/themes/vic-0a885b61bffa831443a2d58c4b76c9a08d90f5740e9b9578d1444a88a97ec942.js","pwb/themes/squares.js":"pwb/themes/squares-d94ee752aa958db7f76bef0fd6b6f724ecb3f088356e033099be08a5945ff227.js","pwb/themes/berlin.js":"pwb/themes/berlin-4ea755fdcbb83e54ca92a2f040280de5663ac7fb6bfc9b90a41288f8f2bb6905.js","pwb_admin_panel/application_legacy_1.js":"pwb_admin_panel/application_legacy_1-3fd7eee8e5898775df49f8c876c986afbf07e5412e9751bf1b999abccd7df4c8.js","pwb/config.js":"pwb/config-fed35e11f59bcd61c0b708d359b50d58afda27aab964962ce4865c1ea44e43a8.js","pwb/themes/default.css":"pwb/themes/default-33611212fcdf06d092b4315a20db16a516ec01c039699e9e3a171a3c50af50a7.css","application.js":"application-e88a61432bb1bda646666bc6dfe567bdd326a2591a29a59f04838a9e0133ab3f.js","application.css":"application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css","property_web_scraper/application.js":"property_web_scraper/application-c29ff4bd1a1696fa1399310bb2e558f0db9ef3e7aa0efbf1f91289861a2289fc.js","property_web_scraper/application.css":"property_web_scraper/application-41b8e3aa6c14c948673b44f8f1e4ec50f8b783fecb2b1411fe5a121ce527bc1c.css","pwb/application.js":"pwb/application-e5dca6168b1e801a8ec369a65fcb40ba6ee2a697ad9238a27babb3a7f388d553.js","pwb_admin_panel/application.js":"pwb_admin_panel/application-27fbcf92fb23e2e1398960a8770a935d7e163a9760c49bfe61eeb36670cee94a.js","pwb/application.css":"pwb/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css","pwb_admin_panel/application.css":"pwb_admin_panel/application-921b322c827540c7f7b6e2eedccf942c1062cd10415556e2d140ab48767b6915.css","property_web_scraper/spp_vuetify.css":"property_web_scraper/spp_vuetify-bcd62e675f6adacb6aeed5b9ca822046d994b5e60e5ae5304500dc58e2ea78c6.css","property_web_scraper/spp_vuetify.js":"property_web_scraper/spp_vuetify-bcab8bceb36bd36f6749c520653852328354e35319808ffd2f238fb794ceb5c1.js"}} -------------------------------------------------------------------------------- /public/assets/pwb/themes/vic-45f194aec8b1ffd1be1e57a07748c54af3a08cf3c999e32c8bcfc377d21b87df.css: -------------------------------------------------------------------------------- 1 | .contenedor_idiomas{background:blue}ul.idiomas{float:right;padding:0 15px 10px 10px;margin:-7px 0px -5px 10px;background-color:#fff}ul.idiomas li{float:left;list-style:none outside none;margin:0 0 0 5px;padding:11px 0 0 0;width:20px}ul.idiomas li a{display:block;width:20px;height:14px;outline:1px solid #555;margin:0}ul.idiomas .es{background:url("/assets/idiomas.png") 0 0 no-repeat}ul.idiomas .en,ul.idiomas .uk{background:url("/assets/idiomas.png") -20px 0}ul.idiomas .ru{background:url("/assets/idiomas.png") -40px 0}ul.idiomas .sv{background:url("/assets/idiomas.png") -60px 0}ul.idiomas .no{background:url("/assets/idiomas.png") -80px 0}ul.idiomas .de{background:url("/assets/idiomas.png") -100px 0}ul.idiomas .fr{background:url("/assets/idiomas.png") -120px 0}ul.idiomas .ne{background:url("/assets/idiomas.png") -140px 0}ul.idiomas .ch{background:url("/assets/idiomas.png") -160px 0}ul.idiomas .fi{background:url("/assets/idiomas.png") -180px 0}ul.idiomas .eu{background:url("/assets/idiomas.png") -200px 0}ul.idiomas .pt{background:url("/assets/idiomas.png") -220px 0}ul.idiomas .ar{background:url("/assets/idiomas.png") -240px 0}ul.idiomas .ca{background:url("/assets/idiomas.png") -260px 0}ul.idiomas .br{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/br.svg") no-repeat;background-size:cover}ul.idiomas .cl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/cl.svg") no-repeat;background-size:cover}ul.idiomas .hi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/hi.svg") no-repeat;background-size:cover}ul.idiomas .it{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/it.svg") no-repeat;background-size:cover}ul.idiomas .mx{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/mx.svg") no-repeat;background-size:cover}ul.idiomas .nl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/nl.svg") no-repeat;background-size:cover}ul.idiomas .pl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/pl.svg") no-repeat;background-size:cover}ul.idiomas .ro{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/ro.svg") no-repeat;background-size:cover}ul.idiomas .us{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/us.svg") no-repeat;background-size:cover}ul.idiomas .vi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/vn.svg") no-repeat;background-size:cover}ul.idiomas .tr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/tr.svg") no-repeat;background-size:cover}ul.idiomas .kr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/kr.svg") no-repeat;background-size:cover}ul.idiomas .bg{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/bg.svg") no-repeat;background-size:cover}ul.idiomas li.selected,ul.idiomas li:hover{background:url("/assets/simple-nav-arrow.png") no-repeat top center}.slick-slider{position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-track,.slick-slider .slick-list{-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.slick-track{position:relative;top:0;left:0;display:block}.slick-track:before,.slick-track:after{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir='rtl'] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.slick-loading .slick-list{background:#fff url("/assets/ajax-loader.gif") center center no-repeat}@font-face{}.slick-prev,.slick-next{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;cursor:pointer;color:transparent;border:none;outline:none;z-index:9}.slick-prev:hover:before,.slick-prev:focus:before,.slick-next:hover:before,.slick-next:focus:before{opacity:1}.slick-prev.slick-disabled:before,.slick-next.slick-disabled:before{opacity:.6}.slick-prev:before,.slick-next:before{font-family:'fontAwesome';font-size:20px;line-height:1;opacity:1;color:white;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:0}[dir='rtl'] .slick-prev{right:-25px;left:auto}.slick-prev:before{content:'\f104'}[dir='rtl'] .slick-prev:before{content:'\f104'}.slick-next{right:0}[dir='rtl'] .slick-next{right:auto;left:-25px}.slick-next:before{content:'\f105'}[dir='rtl'] .slick-next:before{content:'\f105'}.slick-dots{position:absolute;bottom:-45px;display:block;width:100%;padding:0;list-style:none;text-align:center}.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.slick-dots li button:hover,.slick-dots li button:focus{outline:none}.slick-dots li button:hover:before,.slick-dots li button:focus:before{opacity:1}.slick-dots li button:before{font-family:'slick';font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:'•';text-align:center;opacity:.25;color:black;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-dots li.slick-active button:before{opacity:.75;color:black}.contenedor_idiomas{background:blue}ul.idiomas{float:right;padding:0 15px 10px 10px;margin:-7px 0px -5px 10px;background-color:#fff}ul.idiomas li{float:left;list-style:none outside none;margin:0 0 0 5px;padding:11px 0 0 0;width:20px}ul.idiomas li a{display:block;width:20px;height:14px;outline:1px solid #555;margin:0}ul.idiomas .es{background:url("/assets/idiomas.png") 0 0 no-repeat}ul.idiomas .en,ul.idiomas .uk{background:url("/assets/idiomas.png") -20px 0}ul.idiomas .ru{background:url("/assets/idiomas.png") -40px 0}ul.idiomas .sv{background:url("/assets/idiomas.png") -60px 0}ul.idiomas .no{background:url("/assets/idiomas.png") -80px 0}ul.idiomas .de{background:url("/assets/idiomas.png") -100px 0}ul.idiomas .fr{background:url("/assets/idiomas.png") -120px 0}ul.idiomas .ne{background:url("/assets/idiomas.png") -140px 0}ul.idiomas .ch{background:url("/assets/idiomas.png") -160px 0}ul.idiomas .fi{background:url("/assets/idiomas.png") -180px 0}ul.idiomas .eu{background:url("/assets/idiomas.png") -200px 0}ul.idiomas .pt{background:url("/assets/idiomas.png") -220px 0}ul.idiomas .ar{background:url("/assets/idiomas.png") -240px 0}ul.idiomas .ca{background:url("/assets/idiomas.png") -260px 0}ul.idiomas .br{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/br.svg") no-repeat;background-size:cover}ul.idiomas .cl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/cl.svg") no-repeat;background-size:cover}ul.idiomas .hi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/hi.svg") no-repeat;background-size:cover}ul.idiomas .it{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/it.svg") no-repeat;background-size:cover}ul.idiomas .mx{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/mx.svg") no-repeat;background-size:cover}ul.idiomas .nl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/nl.svg") no-repeat;background-size:cover}ul.idiomas .pl{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/pl.svg") no-repeat;background-size:cover}ul.idiomas .ro{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/ro.svg") no-repeat;background-size:cover}ul.idiomas .us{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/us.svg") no-repeat;background-size:cover}ul.idiomas .vi{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/vn.svg") no-repeat;background-size:cover}ul.idiomas .tr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/tr.svg") no-repeat;background-size:cover}ul.idiomas .kr{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/kr.svg") no-repeat;background-size:cover}ul.idiomas .bg{background:url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/4x3/bg.svg") no-repeat;background-size:cover}ul.idiomas li.selected,ul.idiomas li:hover{background:url("/assets/simple-nav-arrow.png") no-repeat top center}.social-icons .fa{font-size:1.5em}.social-icons .fa{width:40px;height:40px;line-height:40px;text-align:center;color:#FFF;color:rgba(255,255,255,0.8);-webkit-transition:all 0.3s ease-in-out;-moz-transition:all 0.3s ease-in-out;-ms-transition:all 0.3s ease-in-out;-o-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out;cursor:pointer}.social-icons.icon-circle .fa{border-radius:50%}.social-icons.icon-rounded .fa{border-radius:5px}.social-icons.icon-flat .fa{border-radius:0}.social-icons .fa:hover,.social-icons .fa:active{color:#FFF;-webkit-box-shadow:1px 1px 3px #333;-moz-box-shadow:1px 1px 3px #333;box-shadow:1px 1px 3px #333}.social-icons.icon-zoom .fa:hover,.social-icons.icon-zoom .fa:active{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}.social-icons.icon-rotate .fa:hover,.social-icons.icon-rotate .fa:active{-webkit-transform:scale(1.1) rotate(360deg);-moz-transform:scale(1.1) rotate(360deg);-ms-transform:scale(1.1) rotate(360deg);-o-transform:scale(1.1) rotate(360deg);transform:scale(1.1) rotate(360deg)}.social-icons .fa-adn{background-color:#504e54}.social-icons .fa-apple{background-color:#aeb5c5}.social-icons .fa-android{background-color:#A5C63B}.social-icons .fa-bitbucket,.social-icons .fa-bitbucket-square{background-color:#003366}.social-icons .fa-bitcoin,.social-icons .fa-btc{background-color:#F7931A}.social-icons .fa-css3{background-color:#1572B7}.social-icons .fa-dribbble{background-color:#F46899}.social-icons .fa-dropbox{background-color:#018BD3}.social-icons .fa-facebook,.social-icons .fa-facebook-square{background-color:#3C599F}.social-icons .fa-flickr{background-color:#FF0084}.social-icons .fa-foursquare{background-color:#0086BE}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{background-color:#070709}.social-icons .fa-google-plus,.social-icons .fa-google-plus-square{background-color:#CF3D2E}.social-icons .fa-html5{background-color:#E54D26}.social-icons .fa-instagram{background-color:#A1755C}.social-icons .fa-linkedin,.social-icons .fa-linkedin-square{background-color:#0085AE}.social-icons .fa-linux{background-color:#FBC002;color:#333}.social-icons .fa-maxcdn{background-color:#F6AE1C}.social-icons .fa-pagelines{background-color:#241E20;color:#3984EA}.social-icons .fa-pinterest,.social-icons .fa-pinterest-square{background-color:#CC2127}.social-icons .fa-renren{background-color:#025DAC}.social-icons .fa-skype{background-color:#01AEF2}.social-icons .fa-stack-exchange{background-color:#245590}.social-icons .fa-stack-overflow{background-color:#FF7300}.social-icons .fa-trello{background-color:#265A7F}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{background-color:#314E6C}.social-icons .fa-twitter,.social-icons .fa-twitter-square{background-color:#32CCFE}.social-icons .fa-vimeo-square{background-color:#229ACC}.social-icons .fa-vk{background-color:#375474}.social-icons .fa-weibo{background-color:#D72B2B}.social-icons .fa-windows{background-color:#12B6F3}.social-icons .fa-xing,.social-icons .fa-xing-square{background-color:#00555C}.social-icons .fa-youtube,.social-icons .fa-youtube-play,.social-icons .fa-youtube-square{background-color:#C52F30}.gm-style-iw{top:1px !important;left:0px !important;background-color:#fff}#iw-container{margin-bottom:0px}#iw-container .iw-title{font-family:'Open Sans Condensed', sans-serif;font-size:22px;font-weight:400;padding:10px;background-color:#48b5e9;color:white;margin:0;border-radius:2px 2px 0 0}#iw-container .iw-content{font-size:13px;line-height:18px;font-weight:400;overflow-y:auto;overflow-x:hidden}.iw-subTitle{font-size:16px;font-weight:700;padding:5px}.slick-slider{width:100%}.slick-slider .slick-arrow{height:80px;width:80px}.slick-slider .slick-prev,.slick-slider .slick-next{background-color:transparent;-webkit-transition:all 0.5s;-moz-transition:all 0.5s;-ms-transition:all 0.5s;-o-transition:all 0.5s;transition:all 0.5s}.slick-slider .slick-prev::before,.slick-slider .slick-next::before{font-family:"fontAwesome";font-size:50px}.slick-slider .aa-top-slider-single{width:100%;position:relative}.slick-slider .aa-top-slider-single img{width:100%;height:700px;object-fit:cover}.slick-slider .aa-top-slider-single .aa-top-slider-content{background-color:rgba(255,255,255,0.8);left:20%;padding:30px;position:absolute;top:40%;z-index:999}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-catg{font-family:"Poppins", sans-serif;font-size:25px;font-weight:bold;letter-spacing:5px;text-transform:uppercase;color:#555;line-height:25px}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-title{color:#555;font-size:40px;font-weight:bold;padding-bottom:5px;text-transform:uppercase}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-location{font-size:14px}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-location i{margin-right:5px}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-off{font-size:14px;font-family:"Poppins", sans-serif;color:#555;display:inline-block;margin-top:10px;font-weight:bold}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-price{font-family:"Poppins", sans-serif;font-size:30px;font-weight:bold;text-transform:uppercase;margin-top:-5px}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-btn{display:inline-block;-webkit-transition:all 0.5s;-moz-transition:all 0.5s;-ms-transition:all 0.5s;-o-transition:all 0.5s;transition:all 0.5s;text-transform:uppercase;font-size:15px}.slick-slider .aa-top-slider-single .aa-top-slider-content .aa-top-slider-btn span{margin-left:3px}.listing-card .card-image{max-height:250px}ul.aux-info{width:100%;margin:0;padding:0;display:block;background:#fcfcfc;border-top:1px solid #e0eded}ul.aux-info li{display:table-cell;padding:10px 15px;vertical-align:middle;border-right:1px solid #e0eded}ul.aux-info li:last-child{border:0}ul.aux-info li i{font-size:18px;margin-right:8px;color:#333}ul.aux-info{display:table;width:100%;border:1px solid #e0eded}ul.aux-info li{padding:10px 10px;font-size:11px;text-align:center}ul.aux-info li i{display:block}.wp-block.property.list .wp-block-content .content-title{color:#333}.primary-image .ribbon{position:absolute;right:15px}ul.aux-info{margin-top:9px}ul.aux-info li{font-size:14px;width:25%}ul.aux-info li i{display:inline}.estate .thumbnail-images{margin-bottom:0}#form_solicitar_info textarea{min-height:100px;width:100%}#extras_ficha{padding:0px}#extras_ficha li{float:left;width:33%}#extras_ficha li i{font-size:18px}#resp_enviar{float:left;width:100%;margin:15px 0 0 0}@media (max-width: 767px){ul.list-listings .listing-body .meta-info{max-width:50%}.wp-block{margin-bottom:15px !important}ul.aux-info{width:100%;display:table}ul.aux-info li{padding:10px;font-size:11px;text-align:center}ul.aux-info li:last-child{border:0}ul.aux-info li i{display:block;font-size:18px;margin-right:0;color:#333}}.service-panel{min-height:400px}.section .icon-service{color:#B2B2B2;font-size:45px;border:1px solid #B2B2B2;-webkit-border-radius:100px;-moz-border-radius:100px;-ms-border-radius:100px;-o-border-radius:100px;border-radius:100px;transition:all 300ms ease-in-out;-o-transition:all 300ms ease-in-out;-moz-transition:all 300ms ease-in-out;-webkit-transition:all 300ms ease-in-out;text-align:center;width:110px;padding:30px;margin:13px 0}.parallax-container{min-height:380px;line-height:0;height:auto;color:rgba(255,255,255,0.9)}.parallax-container .section{width:100%}@media only screen and (max-width: 992px){.parallax-container .section{position:absolute;top:40%}#index-banner .section{top:10%}}@media only screen and (max-width: 600px){#index-banner .section{top:0}}.breadcrumb-container{margin-right:20px}.breadcrumb-nav{margin:0px 1px 0px 1px;width:auto}.material-icons{max-width:30px;overflow:hidden}nav ul a,nav .brand-logo{color:#444}p{line-height:2rem}.button-collapse{color:#26a69a}.main-container{margin:0 auto;max-width:1280px;width:100%}@media only screen and (min-width: 601px){.main-container{width:95%}}@media only screen and (min-width: 993px){.main-container{width:70%}}.icon-block{padding:0 15px}.icon-block .material-icons{font-size:inherit}footer.page-footer{margin:0}body{display:flex;min-height:100vh;flex-direction:column}main{flex:1 0 auto}.container-off{padding:0px 15px} 2 | -------------------------------------------------------------------------------- /db/schema.rb: -------------------------------------------------------------------------------- 1 | # This file is auto-generated from the current state of the database. Instead 2 | # of editing this file, please use the migrations feature of Active Record to 3 | # incrementally modify your database, and then regenerate this schema definition. 4 | # 5 | # Note that this schema.rb definition is the authoritative source for your 6 | # database schema. If you need to create the application database on another 7 | # system, you should be using db:schema:load, not running all the migrations 8 | # from scratch. The latter is a flawed and unsustainable approach (the more migrations 9 | # you'll amass, the slower it'll run and the greater likelihood for issues). 10 | # 11 | # It's strongly recommended that you check this file into your version control system. 12 | 13 | ActiveRecord::Schema.define(version: 20180130121938) do 14 | 15 | # These are extensions that must be enabled in order to support this database 16 | enable_extension "plpgsql" 17 | 18 | create_table "property_web_scraper_import_hosts", id: :serial, force: :cascade do |t| 19 | t.integer "flags", default: 0, null: false 20 | t.string "scraper_name" 21 | t.string "host" 22 | t.boolean "is_https" 23 | t.json "details", default: {} 24 | t.string "slug" 25 | t.text "example_urls", default: [], array: true 26 | t.text "invalid_urls", default: [], array: true 27 | t.datetime "last_retrieval_at" 28 | t.string "valid_url_regex" 29 | t.string "pause_between_calls", default: "5.seconds" 30 | t.string "stale_age", default: "1.day" 31 | t.datetime "created_at", null: false 32 | t.datetime "updated_at", null: false 33 | t.index ["host"], name: "index_property_web_scraper_import_hosts_on_host", unique: true 34 | end 35 | 36 | create_table "property_web_scraper_listings", id: :serial, force: :cascade do |t| 37 | t.integer "flags", default: 0, null: false 38 | t.integer "area_unit", default: 0, null: false 39 | t.string "reference" 40 | t.integer "year_construction", default: 0 41 | t.integer "count_bedrooms", default: 0 42 | t.float "count_bathrooms", default: 0.0 43 | t.integer "count_toilets", default: 0 44 | t.integer "count_garages", default: 0 45 | t.float "plot_area", default: 0.0 46 | t.float "constructed_area", default: 0.0 47 | t.integer "energy_rating" 48 | t.float "energy_performance" 49 | t.string "title" 50 | t.text "description" 51 | t.string "locale_code" 52 | t.string "title_es" 53 | t.text "description_es" 54 | t.string "title_de" 55 | t.text "description_de" 56 | t.string "title_fr" 57 | t.text "description_fr" 58 | t.string "title_it" 59 | t.text "description_it" 60 | t.boolean "furnished", default: false 61 | t.boolean "sold", default: false 62 | t.boolean "reserved", default: false 63 | t.boolean "for_rent_short_term", default: false 64 | t.boolean "for_rent_long_term", default: false 65 | t.boolean "for_sale", default: false 66 | t.boolean "for_rent", default: false 67 | t.datetime "deleted_at" 68 | t.datetime "active_from" 69 | t.datetime "available_to_rent_from" 70 | t.datetime "available_to_rent_till" 71 | t.string "price_string" 72 | t.float "price_float" 73 | t.integer "price_sale_cents", default: 0, null: false 74 | t.string "price_sale_currency", default: "EUR", null: false 75 | t.integer "price_sale_current_cents", default: 0, null: false 76 | t.string "price_sale_current_currency", default: "EUR", null: false 77 | t.integer "price_sale_original_cents", default: 0, null: false 78 | t.string "price_sale_original_currency", default: "EUR", null: false 79 | t.integer "price_rental_monthly_current_cents", default: 0, null: false 80 | t.string "price_rental_monthly_current_currency", default: "EUR", null: false 81 | t.integer "price_rental_monthly_original_cents", default: 0, null: false 82 | t.string "price_rental_monthly_original_currency", default: "EUR", null: false 83 | t.integer "price_rental_monthly_low_season_cents", default: 0, null: false 84 | t.string "price_rental_monthly_low_season_currency", default: "EUR", null: false 85 | t.integer "price_rental_monthly_high_season_cents", default: 0, null: false 86 | t.string "price_rental_monthly_high_season_currency", default: "EUR", null: false 87 | t.integer "price_rental_monthly_standard_season_cents", default: 0, null: false 88 | t.string "price_rental_monthly_standard_season_currency", default: "EUR", null: false 89 | t.integer "commission_cents", default: 0, null: false 90 | t.string "commission_currency", default: "EUR", null: false 91 | t.integer "service_charge_yearly_cents", default: 0, null: false 92 | t.string "service_charge_yearly_currency", default: "EUR", null: false 93 | t.integer "price_rental_monthly_for_search_cents", default: 0, null: false 94 | t.string "price_rental_monthly_for_search_currency", default: "EUR", null: false 95 | t.string "currency" 96 | t.string "address_string" 97 | t.string "street_number" 98 | t.string "street_name" 99 | t.string "street_address" 100 | t.string "postal_code" 101 | t.string "province" 102 | t.string "city" 103 | t.string "region" 104 | t.string "country" 105 | t.float "latitude" 106 | t.float "longitude" 107 | t.datetime "last_retrieved_at" 108 | t.string "import_host_slug" 109 | t.integer "re_agent_id" 110 | t.string "import_url" 111 | t.json "import_history", default: {} 112 | t.string "main_image_url" 113 | t.text "image_urls", default: [], array: true 114 | t.text "related_urls", default: [], array: true 115 | t.text "features", default: [], array: true 116 | t.text "unknown_fields", default: [], array: true 117 | t.datetime "created_at", null: false 118 | t.datetime "updated_at", null: false 119 | t.index ["flags"], name: "index_property_web_scraper_listings_on_flags" 120 | t.index ["import_url"], name: "index_property_web_scraper_listings_on_import_url" 121 | t.index ["price_float"], name: "index_property_web_scraper_listings_on_price_float" 122 | t.index ["reference"], name: "index_property_web_scraper_listings_on_reference" 123 | end 124 | 125 | create_table "pwb_addresses", id: :serial, force: :cascade do |t| 126 | t.float "longitude" 127 | t.float "latitude" 128 | t.string "street_number" 129 | t.string "street_address" 130 | t.string "postal_code" 131 | t.string "city" 132 | t.string "region" 133 | t.string "country" 134 | t.datetime "created_at", null: false 135 | t.datetime "updated_at", null: false 136 | end 137 | 138 | create_table "pwb_agencies", id: :serial, force: :cascade do |t| 139 | t.string "phone_number_primary" 140 | t.string "phone_number_mobile" 141 | t.string "phone_number_other" 142 | t.string "analytics_id" 143 | t.integer "analytics_id_type" 144 | t.string "company_name" 145 | t.string "display_name" 146 | t.string "email_primary" 147 | t.string "email_for_general_contact_form" 148 | t.string "email_for_property_contact_form" 149 | t.string "skype" 150 | t.string "company_id" 151 | t.integer "company_id_type" 152 | t.string "url" 153 | t.integer "primary_address_id" 154 | t.integer "secondary_address_id" 155 | t.integer "flags", default: 0, null: false 156 | t.integer "payment_plan_id" 157 | t.integer "site_template_id" 158 | t.json "site_configuration", default: {} 159 | t.text "available_locales", default: [], array: true 160 | t.text "supported_locales", default: [], array: true 161 | t.text "available_currencies", default: [], array: true 162 | t.text "supported_currencies", default: [], array: true 163 | t.string "default_client_locale" 164 | t.string "default_admin_locale" 165 | t.string "default_currency" 166 | t.json "social_media", default: {} 167 | t.json "details", default: {} 168 | t.text "raw_css" 169 | t.datetime "created_at", null: false 170 | t.datetime "updated_at", null: false 171 | t.string "theme_name" 172 | t.index ["company_id"], name: "index_pwb_agencies_on_company_id", unique: true 173 | t.index ["company_name"], name: "index_pwb_agencies_on_company_name" 174 | end 175 | 176 | create_table "pwb_authorizations", force: :cascade do |t| 177 | t.bigint "user_id" 178 | t.string "provider" 179 | t.string "uid" 180 | t.datetime "created_at", null: false 181 | t.datetime "updated_at", null: false 182 | t.index ["user_id"], name: "index_pwb_authorizations_on_user_id" 183 | end 184 | 185 | create_table "pwb_clients", id: :serial, force: :cascade do |t| 186 | t.string "first_names" 187 | t.string "last_names" 188 | t.string "client_title" 189 | t.string "phone_number_primary" 190 | t.string "phone_number_other" 191 | t.string "fax" 192 | t.string "nationality" 193 | t.string "email" 194 | t.string "skype" 195 | t.string "documentation_id" 196 | t.integer "documentation_type" 197 | t.integer "user_id" 198 | t.integer "address_id" 199 | t.integer "flags", default: 0, null: false 200 | t.json "details", default: {} 201 | t.datetime "created_at", null: false 202 | t.datetime "updated_at", null: false 203 | t.index ["documentation_id"], name: "index_pwb_clients_on_documentation_id", unique: true 204 | t.index ["email"], name: "index_pwb_clients_on_email", unique: true 205 | t.index ["first_names", "last_names"], name: "index_pwb_clients_on_first_names_and_last_names" 206 | end 207 | 208 | create_table "pwb_contacts", force: :cascade do |t| 209 | t.string "first_name" 210 | t.string "last_name" 211 | t.string "other_names" 212 | t.integer "title", default: 0 213 | t.string "primary_phone_number" 214 | t.string "other_phone_number" 215 | t.string "fax" 216 | t.string "nationality" 217 | t.string "primary_email" 218 | t.string "other_email" 219 | t.string "skype_id" 220 | t.string "facebook_id" 221 | t.string "linkedin_id" 222 | t.string "twitter_id" 223 | t.string "website" 224 | t.string "documentation_id" 225 | t.integer "documentation_type" 226 | t.integer "user_id" 227 | t.integer "primary_address_id" 228 | t.integer "secondary_address_id" 229 | t.integer "flags", default: 0, null: false 230 | t.json "details", default: {} 231 | t.datetime "created_at", null: false 232 | t.datetime "updated_at", null: false 233 | t.index ["documentation_id"], name: "index_pwb_contacts_on_documentation_id" 234 | t.index ["first_name", "last_name"], name: "index_pwb_contacts_on_first_name_and_last_name" 235 | t.index ["first_name"], name: "index_pwb_contacts_on_first_name" 236 | t.index ["last_name"], name: "index_pwb_contacts_on_last_name" 237 | t.index ["primary_email"], name: "index_pwb_contacts_on_primary_email" 238 | t.index ["primary_phone_number"], name: "index_pwb_contacts_on_primary_phone_number" 239 | t.index ["title"], name: "index_pwb_contacts_on_title" 240 | end 241 | 242 | create_table "pwb_content_photos", id: :serial, force: :cascade do |t| 243 | t.integer "content_id" 244 | t.string "image" 245 | t.string "description" 246 | t.string "folder" 247 | t.integer "file_size" 248 | t.integer "sort_order" 249 | t.datetime "created_at", null: false 250 | t.datetime "updated_at", null: false 251 | t.string "block_key" 252 | t.index ["content_id"], name: "index_pwb_content_photos_on_content_id" 253 | end 254 | 255 | create_table "pwb_content_translations", force: :cascade do |t| 256 | t.integer "pwb_content_id", null: false 257 | t.string "locale", null: false 258 | t.datetime "created_at", null: false 259 | t.datetime "updated_at", null: false 260 | t.text "raw" 261 | t.index ["locale"], name: "index_pwb_content_translations_on_locale" 262 | t.index ["pwb_content_id"], name: "index_pwb_content_translations_on_pwb_content_id" 263 | end 264 | 265 | create_table "pwb_contents", id: :serial, force: :cascade do |t| 266 | t.string "key" 267 | t.string "tag" 268 | t.string "input_type" 269 | t.string "status" 270 | t.integer "last_updated_by_user_id" 271 | t.integer "sort_order" 272 | t.string "target_url" 273 | t.datetime "created_at", null: false 274 | t.datetime "updated_at", null: false 275 | t.string "section_key" 276 | t.string "page_part_key" 277 | t.index ["key"], name: "index_pwb_contents_on_key", unique: true 278 | end 279 | 280 | create_table "pwb_features", id: :serial, force: :cascade do |t| 281 | t.string "feature_key" 282 | t.integer "prop_id" 283 | t.datetime "created_at", null: false 284 | t.datetime "updated_at", null: false 285 | t.index ["feature_key"], name: "index_pwb_features_on_feature_key" 286 | end 287 | 288 | create_table "pwb_field_keys", id: :serial, force: :cascade do |t| 289 | t.string "global_key" 290 | t.string "tag" 291 | t.boolean "visible", default: true 292 | t.integer "props_count", default: 0, null: false 293 | t.boolean "show_in_search_form", default: true 294 | t.datetime "created_at", null: false 295 | t.datetime "updated_at", null: false 296 | t.index ["global_key"], name: "index_pwb_field_keys_on_global_key", unique: true 297 | end 298 | 299 | create_table "pwb_link_translations", force: :cascade do |t| 300 | t.integer "pwb_link_id", null: false 301 | t.string "locale", null: false 302 | t.datetime "created_at", null: false 303 | t.datetime "updated_at", null: false 304 | t.string "link_title", default: "" 305 | t.index ["locale"], name: "index_pwb_link_translations_on_locale" 306 | t.index ["pwb_link_id"], name: "index_pwb_link_translations_on_pwb_link_id" 307 | end 308 | 309 | create_table "pwb_links", id: :serial, force: :cascade do |t| 310 | t.string "slug" 311 | t.string "parent_slug" 312 | t.string "page_slug" 313 | t.string "icon_class" 314 | t.string "href_class" 315 | t.string "href_target" 316 | t.boolean "is_external", default: false 317 | t.string "link_url" 318 | t.string "link_path" 319 | t.string "link_path_params" 320 | t.boolean "visible", default: true 321 | t.boolean "is_deletable", default: false 322 | t.integer "flags", default: 0, null: false 323 | t.integer "sort_order", default: 0 324 | t.integer "placement", default: 0 325 | t.datetime "created_at", null: false 326 | t.datetime "updated_at", null: false 327 | t.index ["flags"], name: "index_pwb_links_on_flags" 328 | t.index ["page_slug"], name: "index_pwb_links_on_page_slug" 329 | t.index ["placement"], name: "index_pwb_links_on_placement" 330 | t.index ["slug"], name: "index_pwb_links_on_slug", unique: true 331 | end 332 | 333 | create_table "pwb_messages", id: :serial, force: :cascade do |t| 334 | t.string "title" 335 | t.text "content" 336 | t.integer "client_id" 337 | t.string "origin_ip" 338 | t.string "user_agent" 339 | t.float "longitude" 340 | t.float "latitude" 341 | t.string "locale" 342 | t.string "host" 343 | t.string "url" 344 | t.boolean "delivery_success", default: false 345 | t.string "delivery_email" 346 | t.string "origin_email" 347 | t.datetime "created_at", null: false 348 | t.datetime "updated_at", null: false 349 | t.integer "contact_id" 350 | end 351 | 352 | create_table "pwb_page_contents", force: :cascade do |t| 353 | t.boolean "is_rails_part", default: false 354 | t.string "page_part_key" 355 | t.string "label" 356 | t.integer "sort_order" 357 | t.boolean "visible_on_page", default: true 358 | t.bigint "page_id" 359 | t.bigint "content_id" 360 | t.datetime "created_at", null: false 361 | t.datetime "updated_at", null: false 362 | t.bigint "website_id" 363 | t.index ["content_id"], name: "index_pwb_page_contents_on_content_id" 364 | t.index ["page_id"], name: "index_pwb_page_contents_on_page_id" 365 | t.index ["website_id"], name: "index_pwb_page_contents_on_website_id" 366 | end 367 | 368 | create_table "pwb_page_parts", force: :cascade do |t| 369 | t.boolean "is_rails_part", default: false 370 | t.boolean "show_in_editor", default: true 371 | t.integer "order_in_editor" 372 | t.string "page_part_key" 373 | t.string "page_slug" 374 | t.text "template" 375 | t.json "editor_setup", default: {} 376 | t.json "block_contents", default: {} 377 | t.string "theme_name" 378 | t.string "locale" 379 | t.integer "flags", default: 0, null: false 380 | t.datetime "created_at", null: false 381 | t.datetime "updated_at", null: false 382 | t.index ["page_part_key", "page_slug"], name: "index_pwb_page_parts_on_page_part_key_and_page_slug" 383 | t.index ["page_part_key"], name: "index_pwb_page_parts_on_page_part_key" 384 | t.index ["page_slug"], name: "index_pwb_page_parts_on_page_slug" 385 | end 386 | 387 | create_table "pwb_page_translations", force: :cascade do |t| 388 | t.integer "pwb_page_id", null: false 389 | t.string "locale", null: false 390 | t.datetime "created_at", null: false 391 | t.datetime "updated_at", null: false 392 | t.text "raw_html", default: "" 393 | t.string "page_title", default: "" 394 | t.string "link_title", default: "" 395 | t.index ["locale"], name: "index_pwb_page_translations_on_locale" 396 | t.index ["pwb_page_id"], name: "index_pwb_page_translations_on_pwb_page_id" 397 | end 398 | 399 | create_table "pwb_pages", id: :serial, force: :cascade do |t| 400 | t.string "slug" 401 | t.string "setup_id" 402 | t.boolean "visible", default: false 403 | t.integer "last_updated_by_user_id" 404 | t.integer "flags", default: 0, null: false 405 | t.json "details", default: {} 406 | t.integer "sort_order_top_nav", default: 0 407 | t.integer "sort_order_footer", default: 0 408 | t.boolean "show_in_top_nav", default: false 409 | t.boolean "show_in_footer", default: false 410 | t.datetime "created_at", null: false 411 | t.datetime "updated_at", null: false 412 | t.index ["flags"], name: "index_pwb_pages_on_flags" 413 | t.index ["show_in_footer"], name: "index_pwb_pages_on_show_in_footer" 414 | t.index ["show_in_top_nav"], name: "index_pwb_pages_on_show_in_top_nav" 415 | t.index ["slug"], name: "index_pwb_pages_on_slug", unique: true 416 | end 417 | 418 | create_table "pwb_prop_photos", id: :serial, force: :cascade do |t| 419 | t.integer "prop_id" 420 | t.string "image" 421 | t.string "description" 422 | t.string "folder" 423 | t.integer "file_size" 424 | t.integer "sort_order" 425 | t.datetime "created_at", null: false 426 | t.datetime "updated_at", null: false 427 | t.index ["prop_id"], name: "index_pwb_prop_photos_on_prop_id" 428 | end 429 | 430 | create_table "pwb_prop_translations", force: :cascade do |t| 431 | t.integer "pwb_prop_id", null: false 432 | t.string "locale", null: false 433 | t.datetime "created_at", null: false 434 | t.datetime "updated_at", null: false 435 | t.string "title", default: "" 436 | t.text "description", default: "" 437 | t.index ["locale"], name: "index_pwb_prop_translations_on_locale" 438 | t.index ["pwb_prop_id"], name: "index_pwb_prop_translations_on_pwb_prop_id" 439 | end 440 | 441 | create_table "pwb_props", id: :serial, force: :cascade do |t| 442 | t.string "reference" 443 | t.integer "year_construction", default: 0, null: false 444 | t.integer "count_bedrooms", default: 0, null: false 445 | t.float "count_bathrooms", default: 0.0, null: false 446 | t.integer "count_toilets", default: 0, null: false 447 | t.integer "count_garages", default: 0, null: false 448 | t.float "plot_area", default: 0.0, null: false 449 | t.float "constructed_area", default: 0.0, null: false 450 | t.integer "energy_rating" 451 | t.float "energy_performance" 452 | t.integer "flags", default: 0, null: false 453 | t.boolean "furnished", default: false 454 | t.boolean "sold", default: false 455 | t.boolean "reserved", default: false 456 | t.boolean "highlighted", default: false 457 | t.boolean "archived", default: false 458 | t.boolean "visible", default: false 459 | t.boolean "for_rent_short_term", default: false 460 | t.boolean "for_rent_long_term", default: false 461 | t.boolean "for_sale", default: false 462 | t.boolean "hide_map", default: false 463 | t.boolean "obscure_map", default: false 464 | t.boolean "portals_enabled", default: false 465 | t.datetime "deleted_at" 466 | t.datetime "active_from" 467 | t.datetime "available_to_rent_from" 468 | t.datetime "available_to_rent_till" 469 | t.bigint "price_sale_current_cents", default: 0, null: false 470 | t.string "price_sale_current_currency", default: "EUR", null: false 471 | t.bigint "price_sale_original_cents", default: 0, null: false 472 | t.string "price_sale_original_currency", default: "EUR", null: false 473 | t.integer "price_rental_monthly_current_cents", default: 0, null: false 474 | t.string "price_rental_monthly_current_currency", default: "EUR", null: false 475 | t.integer "price_rental_monthly_original_cents", default: 0, null: false 476 | t.string "price_rental_monthly_original_currency", default: "EUR", null: false 477 | t.integer "price_rental_monthly_low_season_cents", default: 0, null: false 478 | t.string "price_rental_monthly_low_season_currency", default: "EUR", null: false 479 | t.integer "price_rental_monthly_high_season_cents", default: 0, null: false 480 | t.string "price_rental_monthly_high_season_currency", default: "EUR", null: false 481 | t.integer "price_rental_monthly_standard_season_cents", default: 0, null: false 482 | t.string "price_rental_monthly_standard_season_currency", default: "EUR", null: false 483 | t.integer "commission_cents", default: 0, null: false 484 | t.string "commission_currency", default: "EUR", null: false 485 | t.integer "service_charge_yearly_cents", default: 0, null: false 486 | t.string "service_charge_yearly_currency", default: "EUR", null: false 487 | t.integer "price_rental_monthly_for_search_cents", default: 0, null: false 488 | t.string "price_rental_monthly_for_search_currency", default: "EUR", null: false 489 | t.string "currency" 490 | t.string "prop_origin_key", default: "", null: false 491 | t.string "prop_state_key", default: "", null: false 492 | t.string "prop_type_key", default: "", null: false 493 | t.string "street_number" 494 | t.string "street_name" 495 | t.string "street_address" 496 | t.string "postal_code" 497 | t.string "province" 498 | t.string "city" 499 | t.string "region" 500 | t.string "country" 501 | t.float "latitude" 502 | t.float "longitude" 503 | t.datetime "created_at", null: false 504 | t.datetime "updated_at", null: false 505 | t.integer "area_unit", default: 0 506 | t.index ["archived"], name: "index_pwb_props_on_archived" 507 | t.index ["flags"], name: "index_pwb_props_on_flags" 508 | t.index ["for_rent_long_term"], name: "index_pwb_props_on_for_rent_long_term" 509 | t.index ["for_rent_short_term"], name: "index_pwb_props_on_for_rent_short_term" 510 | t.index ["for_sale"], name: "index_pwb_props_on_for_sale" 511 | t.index ["highlighted"], name: "index_pwb_props_on_highlighted" 512 | t.index ["latitude", "longitude"], name: "index_pwb_props_on_latitude_and_longitude" 513 | t.index ["price_rental_monthly_current_cents"], name: "index_pwb_props_on_price_rental_monthly_current_cents" 514 | t.index ["price_sale_current_cents"], name: "index_pwb_props_on_price_sale_current_cents" 515 | t.index ["reference"], name: "index_pwb_props_on_reference", unique: true 516 | t.index ["visible"], name: "index_pwb_props_on_visible" 517 | end 518 | 519 | create_table "pwb_sections", id: :serial, force: :cascade do |t| 520 | t.string "link_key" 521 | t.string "link_path" 522 | t.integer "sort_order" 523 | t.boolean "visible" 524 | t.datetime "created_at", null: false 525 | t.datetime "updated_at", null: false 526 | t.integer "flags", default: 0, null: false 527 | t.json "details", default: {} 528 | t.boolean "is_page", default: false 529 | t.boolean "show_in_top_nav", default: false 530 | t.boolean "show_in_footer", default: false 531 | t.string "key" 532 | t.index ["link_key"], name: "index_pwb_sections_on_link_key", unique: true 533 | end 534 | 535 | create_table "pwb_users", id: :serial, force: :cascade do |t| 536 | t.string "email", default: "", null: false 537 | t.string "encrypted_password", default: "", null: false 538 | t.string "reset_password_token" 539 | t.datetime "reset_password_sent_at" 540 | t.datetime "remember_created_at" 541 | t.integer "sign_in_count", default: 0, null: false 542 | t.datetime "current_sign_in_at" 543 | t.datetime "last_sign_in_at" 544 | t.string "current_sign_in_ip" 545 | t.string "last_sign_in_ip" 546 | t.string "confirmation_token" 547 | t.datetime "confirmed_at" 548 | t.datetime "confirmation_sent_at" 549 | t.string "unconfirmed_email" 550 | t.integer "failed_attempts", default: 0, null: false 551 | t.string "unlock_token" 552 | t.datetime "locked_at" 553 | t.string "authentication_token" 554 | t.boolean "admin", default: false 555 | t.string "first_names" 556 | t.string "last_names" 557 | t.string "skype" 558 | t.string "phone_number_primary" 559 | t.string "default_client_locale" 560 | t.string "default_admin_locale" 561 | t.string "default_currency" 562 | t.datetime "created_at", null: false 563 | t.datetime "updated_at", null: false 564 | t.index ["confirmation_token"], name: "index_pwb_users_on_confirmation_token", unique: true 565 | t.index ["email"], name: "index_pwb_users_on_email", unique: true 566 | t.index ["reset_password_token"], name: "index_pwb_users_on_reset_password_token", unique: true 567 | end 568 | 569 | create_table "pwb_websites", id: :serial, force: :cascade do |t| 570 | t.string "analytics_id" 571 | t.integer "analytics_id_type" 572 | t.string "company_display_name" 573 | t.string "email_for_general_contact_form" 574 | t.string "email_for_property_contact_form" 575 | t.integer "contact_address_id" 576 | t.integer "flags", default: 0, null: false 577 | t.string "theme_name" 578 | t.string "google_font_name" 579 | t.json "configuration", default: {} 580 | t.json "style_variables_for_theme", default: {} 581 | t.text "sale_price_options_from", default: ["", "25,000", "50,000", "75,000", "100,000", "150,000", "250,000", "500,000", "1,000,000", "2,000,000", "5,000,000", "10,000,000"], array: true 582 | t.text "sale_price_options_till", default: ["", "25,000", "50,000", "75,000", "100,000", "150,000", "250,000", "500,000", "1,000,000", "2,000,000", "5,000,000", "10,000,000"], array: true 583 | t.text "rent_price_options_from", default: ["", "250", "500", "750", "1,000", "1,500", "2,500", "5,000"], array: true 584 | t.text "rent_price_options_till", default: ["", "250", "500", "750", "1,000", "1,500", "2,500", "5,000"], array: true 585 | t.text "supported_locales", default: ["en-UK"], array: true 586 | t.text "supported_currencies", default: [], array: true 587 | t.string "default_client_locale", default: "en-UK" 588 | t.string "default_admin_locale", default: "en-UK" 589 | t.string "default_currency", default: "EUR" 590 | t.integer "default_area_unit", default: 0 591 | t.json "social_media", default: {} 592 | t.text "raw_css" 593 | t.datetime "created_at", null: false 594 | t.datetime "updated_at", null: false 595 | end 596 | 597 | create_table "translations", id: :serial, force: :cascade do |t| 598 | t.string "locale" 599 | t.string "key" 600 | t.text "value" 601 | t.text "interpolations" 602 | t.boolean "is_proc", default: false 603 | t.string "tag" 604 | t.datetime "created_at", null: false 605 | t.datetime "updated_at", null: false 606 | end 607 | 608 | end 609 | --------------------------------------------------------------------------------