From 50037f386f1c917f1fbb77d2592aaef18efcc499 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Mon, 23 Mar 2026 16:20:05 +0000 Subject: [PATCH] Archive: ComponentOwl Rails app, DB backups, go redirect script --- app/controllers/about_controller.rb | 12 + app/controllers/activations_controller.rb | 40 + app/controllers/application_controller.rb | 101 ++ app/controllers/articles_controller.rb | 33 + app/controllers/bmt/orders_controller.rb | 22 + app/controllers/comics_controller.rb | 28 + app/controllers/cron_controller.rb | 6 + app/controllers/download_controller.rb | 15 + app/controllers/faqs_controller.rb | 53 + app/controllers/feeds_controller.rb | 15 + app/controllers/home_controller.rb | 9 + app/controllers/landing_pages_controller.rb | 21 + app/controllers/orders_controller.rb | 33 + app/controllers/pad_controller.rb | 17 + app/controllers/product_pages_controller.rb | 9 + app/controllers/products_controller.rb | 93 ++ app/controllers/releases_controller.rb | 51 + app/controllers/resources_controller.rb | 11 + app/controllers/sitemap_controller.rb | 15 + app/controllers/subscriptions_controller.rb | 42 + app/controllers/support_controller.rb | 44 + app/controllers/uninstall_controller.rb | 25 + app/controllers/upgrade_controller.rb | 15 + app/controllers/wp_controller.rb | 39 + app/helpers/about_helper.rb | 11 + app/helpers/activations_helper.rb | 2 + app/helpers/application_helper.rb | 160 +++ app/helpers/articles_helper.rb | 2 + app/helpers/comics_helper.rb | 17 + app/helpers/download_helper.rb | 12 + app/helpers/faqs_helper.rb | 12 + app/helpers/feeds_helper.rb | 2 + app/helpers/home_helper.rb | 2 + app/helpers/landing_pages_helper.rb | 2 + app/helpers/notifier_helper.rb | 21 + app/helpers/orders_helper.rb | 12 + app/helpers/pad_helper.rb | 58 + app/helpers/press_helper.rb | 2 + app/helpers/product_pages_helper.rb | 2 + app/helpers/products_helper.rb | 35 + app/helpers/releases_helper.rb | 2 + app/helpers/resources_helper.rb | 2 + app/helpers/sitemap_helper.rb | 11 + app/helpers/subscriptions_helper.rb | 2 + app/helpers/support_helper.rb | 2 + app/helpers/support_requests_helper.rb | 2 + app/helpers/uninstall_helper.rb | 10 + app/helpers/upgrade_helper.rb | 78 ++ app/helpers/wp_helper.rb | 2 + app/models/activation.rb | 146 +++ app/models/bmt_license_key.rb | 47 + app/models/bmt_order.rb | 82 ++ app/models/bmt_product.rb | 17 + app/models/comic.rb | 64 ++ app/models/failed_activation.rb | 9 + app/models/multiple_license_generator.rb | 161 +++ app/models/notifier.rb | 50 + app/stylesheets/base.less | 113 ++ app/stylesheets/headings.less | 26 + app/stylesheets/main.less | 601 +++++++++++ app/stylesheets/simple.less | 74 ++ app/views/about/_draft.html.erb | 250 +++++ app/views/about/index.html.erb | 7 + app/views/articles/index.html.erb | 18 + app/views/articles/show.html.erb | 46 + app/views/comics/index.rss.builder | 17 + app/views/comics/show.html.erb | 72 ++ app/views/download/show.html.erb | 37 + app/views/error/404.html.erb | 1 + app/views/error/501.html.erb | 1 + app/views/error/_not_found.html.erb | 15 + app/views/faqs/search.html.erb | 34 + app/views/faqs/show.html.erb | 70 ++ app/views/feeds/index.rss.builder | 29 + app/views/home/_buttons_logos.html.erb | 10 + app/views/home/_draft.html.erb | 125 +++ app/views/home/index.html.erb | 23 + app/views/landing_pages/_actions.html.erb | 16 + app/views/landing_pages/show.html.erb | 72 ++ app/views/layouts/application.html.erb | 48 + app/views/layouts/cute_admin.html.erb | 15 + app/views/layouts/iframe.html.erb | 17 + app/views/layouts/login.html.erb | 18 + app/views/layouts/simple.html.erb | 30 + app/views/notifier/claim_upgrade.erb | 4 + app/views/notifier/feedback.erb | 1 + app/views/notifier/license_key_error.erb | 10 + app/views/notifier/licenses.erb | 6 + app/views/notifier/recommend.erb | 14 + app/views/notifier/survey.erb | 6 + app/views/orders/_draft.html.erb | 205 ++++ app/views/orders/show.html.erb | 7 + app/views/pad/show.xml.builder | 145 +++ app/views/product_editions/_edition.html.erb | 4 + app/views/product_editions/show.html.erb | 1 + app/views/products/_draft.html.erb | 132 +++ app/views/products/_releases.html.erb | 20 + app/views/products/_social.html.erb | 19 + app/views/products/show.html.erb | 107 ++ app/views/releases/_whatsnew.html.erb | 5 + app/views/releases/check.erb | 1 + app/views/releases/show.html.erb | 6 + app/views/resources/index.html.erb | 38 + app/views/shared/_footer.html.erb | 49 + app/views/shared/_footer_copy.html.erb | 2 + app/views/shared/_header.html.erb | 41 + app/views/shared/_meta.html.erb | 15 + app/views/shared/_preloaded_elements.html.erb | 10 + app/views/shared/_screenshot_buttons.html.erb | 6 + app/views/shared/_sharethis.html.erb | 3 + app/views/shared/_tiny_footer.html.erb | 5 + app/views/shared/_tooltip.html.erb | 0 app/views/sitemap/index.html.erb | 55 + app/views/sitemap/index.xml.builder | 111 ++ .../subscriptions/from_download.html.erb | 33 + app/views/subscriptions/index.html.erb | 9 + app/views/support/_contact_form.html.erb | 26 + app/views/support/_search.html.erb | 8 + app/views/support/customer_service.html.erb | 5 + app/views/support/disclaimer.html.erb | 7 + app/views/support/eula.html.erb | 89 ++ app/views/support/index.html.erb | 34 + app/views/support/privacy_policy.html.erb | 5 + app/views/uninstall/index.html.erb | 33 + app/views/upgrade/_draft.html.erb | 160 +++ app/views/upgrade/index.html.erb | 4 + app/views/wp/blv_sidebar_ad.html.erb | 8 + app/views/wp/feeds.html.erb | 0 app/views/wp/footer.html.erb | 1 + app/views/wp/get_meta_tags.html.erb | 11 + app/views/wp/get_page_include.html.erb | 1 + app/views/wp/header.html.erb | 1 + app/views/wp/post_ad_blv.html.erb | 9 + app/views/wp/post_ad_stdl.html.erb | 9 + app/views/wp/sidebar_ad.html.erb | 8 + config/application.yml | 136 +++ config/asset_packages.yml | 36 + config/boot.rb | 110 ++ config/database.yml | 55 + config/database.yml.example | 42 + config/deploy.rb | 89 ++ config/deploy/development.rb | 36 + config/deploy/production.rb | 32 + config/environment.rb | 62 ++ config/environments/blog.rb | 2 + config/environments/development.rb | 17 + config/environments/production.rb | 28 + config/environments/test.rb | 28 + config/initializers/action_mailer.rb | 14 + config/initializers/asset_packager.rb | 1 + config/initializers/backtrace_silencers.rb | 7 + config/initializers/cloudfront_asset_host.rb | 13 + config/initializers/db2s3.rb | 7 + config/initializers/inflections.rb | 10 + config/initializers/mime_types.rb | 6 + config/initializers/new_rails_defaults.rb | 19 + config/initializers/paperclip.rb | 16 + config/initializers/session_store.rb | 21 + .../initializers/super_exception_notifier.rb | 11 + config/initializers/twitter.rb | 7 + config/locales/en.yml | 409 +++++++ config/routes.rb | 70 ++ config/s3.yml | 8 + config/schedule.rb | 40 + config/smtp_settings.yml | 15 + config/unicorn/development.rb.example | 3 + config/unicorn/production.rb | 65 ++ .../20101008055750-componentowl-data.sql.gz | Bin 0 -> 16300 bytes .../20101008055750-componentowl-struct.sql | 699 ++++++++++++ .../20101206051627-componentowl-data.sql.gz | Bin 0 -> 16742 bytes .../20101206051627-componentowl-struct.sql | 757 +++++++++++++ .../20101208001125-componentowl-data.sql.gz | Bin 0 -> 19820 bytes .../20101208001125-componentowl-struct.sql | 954 +++++++++++++++++ .../20110801075515-componentowl-data.sql.gz | Bin 0 -> 157139 bytes .../20110801075515-componentowl-struct.sql | 976 +++++++++++++++++ .../20110801094935-componentowl-data.sql.gz | Bin 0 -> 158766 bytes .../20110801094935-componentowl-struct.sql | 976 +++++++++++++++++ .../20110802041029-componentowl-data.sql.gz | Bin 0 -> 159295 bytes .../20110802041029-componentowl-struct.sql | 995 ++++++++++++++++++ db/import/allowed_values.yml | 104 ++ db/import/faqs/questions.csv | 1 + .../better-listview_features.erb | 150 +++ .../better-listview_pricing-licensing.erb | 191 ++++ .../better-listview_screenshots.erb | 9 + .../product_pages/better-listview_story.erb | 91 ++ db/import/product_pages/product_pages.csv | 4 + db/import/static_pages/about.erb | 51 + db/import/static_pages/customer-service.erb | 346 ++++++ db/import/static_pages/disclaimer.erb | 21 + db/import/static_pages/eula.erb | 1 + db/import/static_pages/home-blv20.erb | 108 ++ db/import/static_pages/home.erb | 107 ++ db/import/static_pages/privacy-policy.erb | 46 + db/import/static_pages/static_pages.csv | 9 + .../20090713163655_initial_migration.rb | 332 ++++++ ...2728_add_internal_code_to_product_offer.rb | 9 + .../20100524184938_create_page_includes.rb | 15 + ...7_change_product_upgrades_relationships.rb | 16 + .../20100629062929_add_newsletter_engine.rb | 59 ++ ...0630072113_add_location_to_subscription.rb | 9 + ...100728060310_upload_column_to_paperclip.rb | 39 + ...100808085226_setup_files_to_cloud_front.rb | 18 + .../20100818082747_create_pad_values.rb | 22 + db/migrate/20100819135437_create_articles.rb | 23 + .../20100819140017_create_subtemplates.rb | 15 + .../20101010101010_add_announce_to_release.rb | 9 + .../20101010145127_customer_tracking.rb | 74 ++ .../20101102185849_create_autoresponders.rb | 24 + db/migrate/20101103125852_create_emails.rb | 15 + .../20101103181314_create_site_settings.rb | 13 + ...add_exclude_from_autoupdate_to_releases.rb | 9 + .../20101203131634_create_activations.rb | 16 + ...207141645_add_attributes_to_activations.rb | 13 + ...0101207170801_create_failed_activations.rb | 19 + db/migrate/20110730141514_create_comics.rb | 19 + .../20110802100859_add_number_to_comics.rb | 16 + db/schema.rb | 700 ++++++++++++ go-redirect | 1 + 218 files changed, 14558 insertions(+) create mode 100644 app/controllers/about_controller.rb create mode 100644 app/controllers/activations_controller.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/articles_controller.rb create mode 100644 app/controllers/bmt/orders_controller.rb create mode 100644 app/controllers/comics_controller.rb create mode 100644 app/controllers/cron_controller.rb create mode 100644 app/controllers/download_controller.rb create mode 100644 app/controllers/faqs_controller.rb create mode 100644 app/controllers/feeds_controller.rb create mode 100644 app/controllers/home_controller.rb create mode 100644 app/controllers/landing_pages_controller.rb create mode 100644 app/controllers/orders_controller.rb create mode 100644 app/controllers/pad_controller.rb create mode 100644 app/controllers/product_pages_controller.rb create mode 100644 app/controllers/products_controller.rb create mode 100644 app/controllers/releases_controller.rb create mode 100644 app/controllers/resources_controller.rb create mode 100644 app/controllers/sitemap_controller.rb create mode 100644 app/controllers/subscriptions_controller.rb create mode 100644 app/controllers/support_controller.rb create mode 100644 app/controllers/uninstall_controller.rb create mode 100644 app/controllers/upgrade_controller.rb create mode 100644 app/controllers/wp_controller.rb create mode 100644 app/helpers/about_helper.rb create mode 100644 app/helpers/activations_helper.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/articles_helper.rb create mode 100644 app/helpers/comics_helper.rb create mode 100644 app/helpers/download_helper.rb create mode 100644 app/helpers/faqs_helper.rb create mode 100644 app/helpers/feeds_helper.rb create mode 100644 app/helpers/home_helper.rb create mode 100644 app/helpers/landing_pages_helper.rb create mode 100644 app/helpers/notifier_helper.rb create mode 100644 app/helpers/orders_helper.rb create mode 100644 app/helpers/pad_helper.rb create mode 100644 app/helpers/press_helper.rb create mode 100644 app/helpers/product_pages_helper.rb create mode 100644 app/helpers/products_helper.rb create mode 100644 app/helpers/releases_helper.rb create mode 100644 app/helpers/resources_helper.rb create mode 100644 app/helpers/sitemap_helper.rb create mode 100644 app/helpers/subscriptions_helper.rb create mode 100644 app/helpers/support_helper.rb create mode 100644 app/helpers/support_requests_helper.rb create mode 100644 app/helpers/uninstall_helper.rb create mode 100644 app/helpers/upgrade_helper.rb create mode 100644 app/helpers/wp_helper.rb create mode 100644 app/models/activation.rb create mode 100644 app/models/bmt_license_key.rb create mode 100644 app/models/bmt_order.rb create mode 100644 app/models/bmt_product.rb create mode 100644 app/models/comic.rb create mode 100644 app/models/failed_activation.rb create mode 100644 app/models/multiple_license_generator.rb create mode 100644 app/models/notifier.rb create mode 100644 app/stylesheets/base.less create mode 100644 app/stylesheets/headings.less create mode 100644 app/stylesheets/main.less create mode 100644 app/stylesheets/simple.less create mode 100644 app/views/about/_draft.html.erb create mode 100644 app/views/about/index.html.erb create mode 100644 app/views/articles/index.html.erb create mode 100644 app/views/articles/show.html.erb create mode 100644 app/views/comics/index.rss.builder create mode 100644 app/views/comics/show.html.erb create mode 100644 app/views/download/show.html.erb create mode 100644 app/views/error/404.html.erb create mode 100644 app/views/error/501.html.erb create mode 100644 app/views/error/_not_found.html.erb create mode 100644 app/views/faqs/search.html.erb create mode 100644 app/views/faqs/show.html.erb create mode 100644 app/views/feeds/index.rss.builder create mode 100644 app/views/home/_buttons_logos.html.erb create mode 100644 app/views/home/_draft.html.erb create mode 100644 app/views/home/index.html.erb create mode 100644 app/views/landing_pages/_actions.html.erb create mode 100644 app/views/landing_pages/show.html.erb create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/cute_admin.html.erb create mode 100644 app/views/layouts/iframe.html.erb create mode 100644 app/views/layouts/login.html.erb create mode 100644 app/views/layouts/simple.html.erb create mode 100644 app/views/notifier/claim_upgrade.erb create mode 100644 app/views/notifier/feedback.erb create mode 100644 app/views/notifier/license_key_error.erb create mode 100644 app/views/notifier/licenses.erb create mode 100644 app/views/notifier/recommend.erb create mode 100644 app/views/notifier/survey.erb create mode 100644 app/views/orders/_draft.html.erb create mode 100644 app/views/orders/show.html.erb create mode 100644 app/views/pad/show.xml.builder create mode 100644 app/views/product_editions/_edition.html.erb create mode 100644 app/views/product_editions/show.html.erb create mode 100644 app/views/products/_draft.html.erb create mode 100644 app/views/products/_releases.html.erb create mode 100644 app/views/products/_social.html.erb create mode 100644 app/views/products/show.html.erb create mode 100644 app/views/releases/_whatsnew.html.erb create mode 100644 app/views/releases/check.erb create mode 100644 app/views/releases/show.html.erb create mode 100644 app/views/resources/index.html.erb create mode 100644 app/views/shared/_footer.html.erb create mode 100644 app/views/shared/_footer_copy.html.erb create mode 100644 app/views/shared/_header.html.erb create mode 100644 app/views/shared/_meta.html.erb create mode 100644 app/views/shared/_preloaded_elements.html.erb create mode 100644 app/views/shared/_screenshot_buttons.html.erb create mode 100644 app/views/shared/_sharethis.html.erb create mode 100644 app/views/shared/_tiny_footer.html.erb create mode 100644 app/views/shared/_tooltip.html.erb create mode 100644 app/views/sitemap/index.html.erb create mode 100644 app/views/sitemap/index.xml.builder create mode 100644 app/views/subscriptions/from_download.html.erb create mode 100644 app/views/subscriptions/index.html.erb create mode 100644 app/views/support/_contact_form.html.erb create mode 100644 app/views/support/_search.html.erb create mode 100644 app/views/support/customer_service.html.erb create mode 100644 app/views/support/disclaimer.html.erb create mode 100644 app/views/support/eula.html.erb create mode 100644 app/views/support/index.html.erb create mode 100644 app/views/support/privacy_policy.html.erb create mode 100644 app/views/uninstall/index.html.erb create mode 100644 app/views/upgrade/_draft.html.erb create mode 100644 app/views/upgrade/index.html.erb create mode 100644 app/views/wp/blv_sidebar_ad.html.erb create mode 100644 app/views/wp/feeds.html.erb create mode 100644 app/views/wp/footer.html.erb create mode 100644 app/views/wp/get_meta_tags.html.erb create mode 100644 app/views/wp/get_page_include.html.erb create mode 100644 app/views/wp/header.html.erb create mode 100644 app/views/wp/post_ad_blv.html.erb create mode 100644 app/views/wp/post_ad_stdl.html.erb create mode 100644 app/views/wp/sidebar_ad.html.erb create mode 100644 config/application.yml create mode 100644 config/asset_packages.yml create mode 100644 config/boot.rb create mode 100644 config/database.yml create mode 100644 config/database.yml.example create mode 100644 config/deploy.rb create mode 100644 config/deploy/development.rb create mode 100644 config/deploy/production.rb create mode 100644 config/environment.rb create mode 100644 config/environments/blog.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/action_mailer.rb create mode 100644 config/initializers/asset_packager.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/cloudfront_asset_host.rb create mode 100644 config/initializers/db2s3.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/new_rails_defaults.rb create mode 100644 config/initializers/paperclip.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/super_exception_notifier.rb create mode 100644 config/initializers/twitter.rb create mode 100644 config/locales/en.yml create mode 100644 config/routes.rb create mode 100644 config/s3.yml create mode 100644 config/schedule.rb create mode 100644 config/smtp_settings.yml create mode 100644 config/unicorn/development.rb.example create mode 100644 config/unicorn/production.rb create mode 100644 db-backups/20101008055750-componentowl-data.sql.gz create mode 100644 db-backups/20101008055750-componentowl-struct.sql create mode 100644 db-backups/20101206051627-componentowl-data.sql.gz create mode 100644 db-backups/20101206051627-componentowl-struct.sql create mode 100644 db-backups/20101208001125-componentowl-data.sql.gz create mode 100644 db-backups/20101208001125-componentowl-struct.sql create mode 100644 db-backups/20110801075515-componentowl-data.sql.gz create mode 100644 db-backups/20110801075515-componentowl-struct.sql create mode 100644 db-backups/20110801094935-componentowl-data.sql.gz create mode 100644 db-backups/20110801094935-componentowl-struct.sql create mode 100644 db-backups/20110802041029-componentowl-data.sql.gz create mode 100644 db-backups/20110802041029-componentowl-struct.sql create mode 100644 db/import/allowed_values.yml create mode 100644 db/import/faqs/questions.csv create mode 100644 db/import/product_pages/better-listview_features.erb create mode 100644 db/import/product_pages/better-listview_pricing-licensing.erb create mode 100644 db/import/product_pages/better-listview_screenshots.erb create mode 100644 db/import/product_pages/better-listview_story.erb create mode 100644 db/import/product_pages/product_pages.csv create mode 100644 db/import/static_pages/about.erb create mode 100644 db/import/static_pages/customer-service.erb create mode 100644 db/import/static_pages/disclaimer.erb create mode 100644 db/import/static_pages/eula.erb create mode 100644 db/import/static_pages/home-blv20.erb create mode 100644 db/import/static_pages/home.erb create mode 100644 db/import/static_pages/privacy-policy.erb create mode 100644 db/import/static_pages/static_pages.csv create mode 100644 db/migrate/20090713163655_initial_migration.rb create mode 100644 db/migrate/20100509112728_add_internal_code_to_product_offer.rb create mode 100644 db/migrate/20100524184938_create_page_includes.rb create mode 100644 db/migrate/20100603183347_change_product_upgrades_relationships.rb create mode 100644 db/migrate/20100629062929_add_newsletter_engine.rb create mode 100644 db/migrate/20100630072113_add_location_to_subscription.rb create mode 100644 db/migrate/20100728060310_upload_column_to_paperclip.rb create mode 100644 db/migrate/20100808085226_setup_files_to_cloud_front.rb create mode 100644 db/migrate/20100818082747_create_pad_values.rb create mode 100644 db/migrate/20100819135437_create_articles.rb create mode 100644 db/migrate/20100819140017_create_subtemplates.rb create mode 100644 db/migrate/20101010101010_add_announce_to_release.rb create mode 100644 db/migrate/20101010145127_customer_tracking.rb create mode 100644 db/migrate/20101102185849_create_autoresponders.rb create mode 100644 db/migrate/20101103125852_create_emails.rb create mode 100644 db/migrate/20101103181314_create_site_settings.rb create mode 100644 db/migrate/20101115150639_add_exclude_from_autoupdate_to_releases.rb create mode 100644 db/migrate/20101203131634_create_activations.rb create mode 100644 db/migrate/20101207141645_add_attributes_to_activations.rb create mode 100644 db/migrate/20101207170801_create_failed_activations.rb create mode 100644 db/migrate/20110730141514_create_comics.rb create mode 100644 db/migrate/20110802100859_add_number_to_comics.rb create mode 100644 db/schema.rb create mode 160000 go-redirect diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb new file mode 100644 index 0000000..d98bdab --- /dev/null +++ b/app/controllers/about_controller.rb @@ -0,0 +1,12 @@ +class AboutController < ApplicationController + + caches_page :index, :press_resources + + def index + @static_page = StaticPage['about'] + end + + def press_resources + @static_page = StaticPage['press-resources'] + end +end diff --git a/app/controllers/activations_controller.rb b/app/controllers/activations_controller.rb new file mode 100644 index 0000000..d4a8ce8 --- /dev/null +++ b/app/controllers/activations_controller.rb @@ -0,0 +1,40 @@ +class ActivationsController < ApplicationController + + skip_before_filter :verify_authenticity_token + + before_filter :authenticate + before_filter :init_params, :only => :create + + def create + @activation = Activation.new(params[:activation]) + + if @activation.save + respond_to do |format| + format.xml { render_activation_xml } + end + else + FailedActivation.create_from_activation(@activation) + respond_to do |format| + format.xml { render_activation_xml } + end + end + end + + private + + def render_activation_xml + render :xml => @activation.to_xml(:buy_url => order_url(featured_product), :support_url => support_contact_url) + end + + def init_params + params[:activation] ||= {} + params[:activation][:ip] = request.remote_ip + end + + def authenticate + authenticate_or_request_with_http_basic do |login, password| + login == Settings.activation_auth.login && password == Settings.activation_auth.password + end + end + +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000..c11f9aa --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,101 @@ +# Filters added to this controller apply to all controllers in the application. +# Likewise, all the methods added will be available for all controllers. + +class ApplicationController < ActionController::Base + filter_parameter_logging :password + helper_method :locales, :newsletter_subscription, :crypted_subscriptions_path, :featured_product, :blog_url, :upgrade_url, + :dropdown_products, :order_products, :all_products, :blog_posts, :latest_news, :latest_comic, + :dropdown_categorized_products, :have_articles? + + #include ExceptionNotifiable + include ExceptionNotification::Notifiable + + # kvuli super_exception_notifier + # bez tohoto se vypisuje chybova stranka do layoutu prislusejiciho ke controlleru + @@error_layout = "application" + + protect_from_forgery # See ActionController::RequestForgeryProtection for details + + before_filter :enable_or_disable_cdn + + helper :rails_wordpress + + # disable cnd for certain parts of the application (/admin) and re-enable it if needed + def enable_or_disable_cdn + if defined?(CloudfrontAssetHost) && CloudfrontAssetHost.enabled + if request.path.starts_with?('/admin') && ActionController::Base.asset_host.present? + CloudfrontAssetHost.disable! + elsif !request.path.starts_with?('/admin') && ActionController::Base.asset_host.blank? + CloudfrontAssetHost.enable! + end + end + end + + def upgrade_url(code) + root_url + "upgrade/#{StaticPage[code].url_param}" + end + + # do newsletter engine + def crypted_subscriptions_path(contact) + subscriptions_url + "?contact=" + UrlParamCrypt.encrypt(contact.id) + end + + def newsletter_subscription(location_code = nil) + subscription = Subscription.new + subscription.subscription_location = SubscriptionLocation[location_code] if location_code + subscription + end + + def latest_comic + @latest_comic ||= Comic.latest + end + + def blog_url + @blog_url ||= WpOption["siteurl"].value + end + + def dropdown_products + @dropdown_products ||= [featured_product] + Promotion['dropdown'].products.all_ordered + end + + def order_products + @order_products ||= ProductCategory.non_free_products + end + + def featured_product + @featured_product ||= Product[Settings.featured_product] + end + + def all_products + @all_products ||= Product.all_ordered + end + + def blog_posts + @blog_posts ||= WpBlogPost.find(:all, :limit => Settings.home.blog_posts) + end + + def latest_news + @latest_news ||= begin + latests = (Latest.find_latest + Release.find_latest).sort {|x, y| x.date <=> y.date } + latests.reverse.slice(0, Settings.home.latest) + end + end + + def dropdown_categorized_products + @dropdown_categorized_products ||= [].tap do |a| + ProductCategory.all.each do |product_category| + products = [] + dropdown_products.each do |dropdown_product| + products << dropdown_product if dropdown_product.product_category == product_category + end + #products.unshift(featured_product) if featured_product.product_category == product_category + a << { :category => product_category.name, :products => products } unless products.empty? + end + end + end + + def have_articles? + !Article.published.empty? + end + +end diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb new file mode 100644 index 0000000..31075d8 --- /dev/null +++ b/app/controllers/articles_controller.rb @@ -0,0 +1,33 @@ +class ArticlesController < ApplicationController + + caches_page :index, :show + + def index + @featured_articles = Article.published.featured(Settings.resources.featured_articles) + @articles = Article.cute_ordered.published - @featured_articles + end + + def show + @article = Article.find_by_slug(params[:id]) + + if @article + if @article.keyword1.present? + @meta_title = I18n.t('txt.articles.meta_title_with_keyword', :title => @article.title, :keyword => @article.keyword1) + else + @meta_title = I18n.t('txt.articles.meta_title', :title => @article.title) + end + if @article.custom_subtemplate.blank? + @subtemplate = SubtemplateType.with_keywords('article-sidebar', @article) + else + @subtemplate = @article.custom_subtemplate + end + respond_to do |format| + format.html + end + else + respond_to do |format| + format.html { render_404 } + end + end + end +end diff --git a/app/controllers/bmt/orders_controller.rb b/app/controllers/bmt/orders_controller.rb new file mode 100644 index 0000000..ba0fb0c --- /dev/null +++ b/app/controllers/bmt/orders_controller.rb @@ -0,0 +1,22 @@ +class Bmt::OrdersController < ApplicationController + + before_filter :verify_api_token + + def create + @bmt_order = BmtOrder.new(params[:request]) + + if @bmt_order.save + #@trackable_number = @bmt_order.customer_ref + #track_visitor(@bmt_order.orderable, :source => @bmt_order.track_from_other_source, :url => "BMT-Checkout", :checkout => true, :created_at => 1.minute.ago) if @bmt_order.track_checkout? + #track_visitor(@bmt_order.orderable, :source => "BMT-Checkout", :order => true) + respond_to do |format| + format.xml { render :xml => @bmt_order.xml_response } + end + else + respond_to do |format| + format.xml { render :xml => @bmt_order.xml_response } + end + end + end + +end diff --git a/app/controllers/comics_controller.rb b/app/controllers/comics_controller.rb new file mode 100644 index 0000000..7d0e10a --- /dev/null +++ b/app/controllers/comics_controller.rb @@ -0,0 +1,28 @@ +class ComicsController < ApplicationController + + caches_page :show + + def index + @comics = Comic.find_latest.published + respond_to do |format| + format.html { redirect_to latest_comic } + format.rss + end + end + + def show + @comic = Comic.published.find_by_number(params[:id]) + if @comic + @previous_comic = @comic.previous + @next_comic = @comic.next + else + @comic = Comic.published.find_by_id(params[:id]) + if @comic + redirect_to @comic, :status => 301 + else + render_404 + end + end + end + +end diff --git a/app/controllers/cron_controller.rb b/app/controllers/cron_controller.rb new file mode 100644 index 0000000..e4fab1f --- /dev/null +++ b/app/controllers/cron_controller.rb @@ -0,0 +1,6 @@ +class CronController < ApplicationController + def resend_support_requests + Cron.resend_support_requests + render :nothing => true + end +end \ No newline at end of file diff --git a/app/controllers/download_controller.rb b/app/controllers/download_controller.rb new file mode 100644 index 0000000..e86a5de --- /dev/null +++ b/app/controllers/download_controller.rb @@ -0,0 +1,15 @@ +class DownloadController < ApplicationController + + before_filter(:only => [:show]){ |c| c.find_product("download_url", UrlDestination['product-download']) } + before_filter :init_objects, :only => [:show] + + private + + def init_objects + @download_url = direct_download_url(:filename => @product.file_url) + @testimonial = @product.testimonial_by_location('download') + @meta_title = I18n.t('txt.download_page.meta_title', :product => @product.name.strip_version, :version => @product.current_version) + @meta_description = I18n.t('txt.download_page.meta_description', :product => @product.name.strip_version) + @meta_keywords = I18n.t('txt.download_page.meta_keywords', :product => @product.name.strip_version) + end +end \ No newline at end of file diff --git a/app/controllers/faqs_controller.rb b/app/controllers/faqs_controller.rb new file mode 100644 index 0000000..c3c6b79 --- /dev/null +++ b/app/controllers/faqs_controller.rb @@ -0,0 +1,53 @@ +class FaqsController < ApplicationController + + before_filter :init_objects, :except => [:search] + before_filter :init_params, :only => [:search] + + caches_page :index, :show + + def index + render :action => "show" + end + + def show + end + + def search + #buga> uz budou mit dalsi produkty faqs, tohle se musi predelat + @product = featured_product + + respond_to do |format| + format.html # index.html.erb + format.xml { render :xml => @faqs } + end + end + + private + + def init_params + params[:search] ||= {} + params[:search] ||= {} + params[:search][:order] ||= "ascend_by_position" + + @search = Faq.search(params[:search]) + @faqs = @search.all + end + + def init_objects + if params[:product] + @product = Product[params[:product]] + @categories = @product.faq_categories.all_ordered + else + @categories = FaqCategory.common + end + + if params[:id] + @categories.each {|category| @category = category if category.url_param == params[:id] } + else + @category = @categories.first + end + + @faqs = @category.faqs + @products = Product.all_ordered + end +end diff --git a/app/controllers/feeds_controller.rb b/app/controllers/feeds_controller.rb new file mode 100644 index 0000000..635e9d3 --- /dev/null +++ b/app/controllers/feeds_controller.rb @@ -0,0 +1,15 @@ +class FeedsController < ApplicationController + layout false + + def index + posts = WpBlogPost.find(:all, :limit => Settings.rss.posts) + releases = Release.find_latest_for_rss + + p = (posts + releases).sort {|x, y| x.date.to_datetime <=> y.date.to_datetime } + @posts = p.reverse.slice(0, Settings.rss.posts) + + respond_to do |format| + format.rss + end + end +end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb new file mode 100644 index 0000000..60e5728 --- /dev/null +++ b/app/controllers/home_controller.rb @@ -0,0 +1,9 @@ +class HomeController < ApplicationController + + caches_page :index + + def index + @static_page = StaticPage['home-blv20'] + end + +end diff --git a/app/controllers/landing_pages_controller.rb b/app/controllers/landing_pages_controller.rb new file mode 100644 index 0000000..993b60c --- /dev/null +++ b/app/controllers/landing_pages_controller.rb @@ -0,0 +1,21 @@ +class LandingPagesController < ApplicationController + + before_filter :init_product + + layout "simple" + + caches_page :show + + def show + @support_request = SupportRequest.new + @support_request.support_request_origin = SupportRequestOrigin['landing-page'] + @support_request.product = @product + end + + private + + def init_product + @product = Product.find_by_code(params[:id]) + end + +end diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb new file mode 100644 index 0000000..6ad880f --- /dev/null +++ b/app/controllers/orders_controller.rb @@ -0,0 +1,33 @@ +class OrdersController < ApplicationController + + before_filter(:only => [:show]){ |c| c.find_product("order_url", UrlDestination['order']) } + before_filter :check_product, :only => :show + before_filter :init_objects + + caches_page :index, :show + + def index + redirect_to order_url(featured_product) + end + + def show + @product = Product[params[:id]] + unless @product + render_404 + else + @page = @product.product_pages.find_by_code(Settings.pricing_code) + end + end + + private + + def check_product + redirect_to Settings.better_splitbutton_buy_url if @product.code == 'better-splitbutton' + end + + def init_objects + @support_request = SupportRequest.new + @support_request.support_request_origin = SupportRequestOrigin['order'] + @support_request.product = @product + end +end diff --git a/app/controllers/pad_controller.rb b/app/controllers/pad_controller.rb new file mode 100644 index 0000000..bf0236d --- /dev/null +++ b/app/controllers/pad_controller.rb @@ -0,0 +1,17 @@ +class PadController < ApplicationController + + caches_page :show + + def show + # blba vyjimka + params[:id] = "mp3-speed-accelerator" if params[:id] == "mp3speedaccelerator" + @product = Product.find_by_file(params[:id]) + if @product + respond_to do |format| + format.xml + end + else + render :nothing => true, :status => 404 + end + end +end diff --git a/app/controllers/product_pages_controller.rb b/app/controllers/product_pages_controller.rb new file mode 100644 index 0000000..b790788 --- /dev/null +++ b/app/controllers/product_pages_controller.rb @@ -0,0 +1,9 @@ +class ProductPagesController < ApplicationController + + def show + @product_page = ProductPage.find(params[:id]) + #sleep(2) + render :inline => @product_page.html + end + +end diff --git a/app/controllers/products_controller.rb b/app/controllers/products_controller.rb new file mode 100644 index 0000000..c66f232 --- /dev/null +++ b/app/controllers/products_controller.rb @@ -0,0 +1,93 @@ +class ProductsController < ApplicationController + + skip_before_filter :verify_authenticity_token, :only => [:generate_license, :download] + before_filter :verify_api_token, :only => :generate_license + + before_filter(:only => [:show]){ |c| c.find_product("product_url", UrlDestination['product-detail']) } + before_filter :init_objects, :only => [:show] + + caches_page :index, :show, :if => Proc.new { |c| c.params[:detail] != Settings.releases_code } + + def index + @categories = ProductCategory.all_but_featured + @all_categories = ProductCategory.find :all + @testimonials = Testimonial.for_products_page + end + + def show + @special_menu_hl = true if @product.code == Settings.featured_product + @release = @product.current_release + @screenshots = @product.screenshots.featured + # future? pro ajaxove taby + #if params[:ajax] + # render :text => @detail.html + #end + end + + def download + params[:filename] = featured_product.setup_file.original_filename.split(".").first if params[:filename] == "swifttodolist7-beta12" + @product = Product.find_by_file(params[:filename]) + if @product + DownloadLog.log(@product, request) + if Rails.env.preproduction? || Rails.env.production? + redirect_to "http://#{Settings.download_host}/#{@product.setup_file.path}" + else + send_file @product.setup_file.path, :type => 'application/binary' + end + else + render_404 + end + end + + def detail + render :text => @detail.html + end + + def generate_license + @license_key = BmtLicenseKey.new + @license_key.generate! + + respond_to do |format| + format.xml { render :xml => @license_key } + end + end + + private + + def verify_generate_license_token + if !params[:t] || params[:t] != Settings.generate_license_token + render :nothing => true + end + end + + def init_objects + if params[:detail] + case params[:detail] + when "features" + redirect_to(@product, :status => 301) + when "thumbnails" + redirect_to(Product['better-thumbnail-browser'], :status => 301) + when Settings.documentation_code + #redirect_to(product_page_url(@product, @product.product_pages.find_by_code("resources"))) + redirect_to("/documentation/#{@product.code}/index.html") + when Settings.class_reference_code + redirect_to("/class-reference/#{@product.code}/index.html") + when Settings.quick_start_guide_code + redirect_to("/documentation/#{@product.code}/data/chapter-quickstart.html") + when Settings.releases_code + @since_release = @product.releases.find_by_version(params[:since]) if params[:since].present? + @since_release = @product.current_release unless @since_release + @releases = @product.releases.find_since(@since_release.version) + else + @detail = @product.product_pages.find_by_code(params[:detail]) + render_404 unless @detail + end + else + @detail = @product.default_page + end + + @support_request = SupportRequest.new + @support_request.support_request_origin = SupportRequestOrigin['product'] + @support_request.product = @product + end +end diff --git a/app/controllers/releases_controller.rb b/app/controllers/releases_controller.rb new file mode 100644 index 0000000..7482b79 --- /dev/null +++ b/app/controllers/releases_controller.rb @@ -0,0 +1,51 @@ +class ReleasesController < ApplicationController + + caches_page :show + + def show + @release = Release.find(params[:id]) + + respond_to do |format| + format.html + format.js { + render :partial => "whatsnew", :layout => false + } + end + end + + def check + edition = ProductEdition.find_by_internal_code(params[:product]) + product = edition ? edition.product : Product.find_by_internal_code(params[:product]) + release = product.current_release + new_version = release.newer_than(params[:build].to_i) + + @response = ["### update check response ###"] + if new_version + releases = product.releases.find_newer_than(params[:build]) + @response << release.version + @response << release.build + @response << I18n.l(release.date, :format => :iso) + @response << download_url(product) + @response << direct_download_url(:filename => product.file_url) + @response << "### changelog begin ###" + if releases.size == 1 + @response << release.changelog + else + @response << "This cumulative update contains #{releases.size} previous updates that you have not installed." + @response << "" + releases.each do |release| + @response << "====================================================" + @response << "Changes in version #{release.version} (#{I18n.l(release.date, :format => :cute)})" + @response << "====================================================" + @response << release.changelog + @response << "" unless releases.last == release + end + end + @response << "### changelog end ###" + else + @response << "### no new version ###" + end + + render :layout => false + end +end diff --git a/app/controllers/resources_controller.rb b/app/controllers/resources_controller.rb new file mode 100644 index 0000000..7100a97 --- /dev/null +++ b/app/controllers/resources_controller.rb @@ -0,0 +1,11 @@ +class ResourcesController < ApplicationController + + caches_page :index + + def index + @posts = WpBlogPost.find(:all, :limit => Settings.resources.blog_posts) + @featured_articles = Article.published.featured(Settings.resources.featured_articles) + @articles = Article.cute_ordered.published - @featured_articles + end + +end diff --git a/app/controllers/sitemap_controller.rb b/app/controllers/sitemap_controller.rb new file mode 100644 index 0000000..7bc4ecc --- /dev/null +++ b/app/controllers/sitemap_controller.rb @@ -0,0 +1,15 @@ +class SitemapController < ApplicationController + + caches_page :index, :if => Proc.new { |c| c.request.format.html? } + + def index + @products = Product.all_ordered + @custom_titles = SitemapTitle.all + + respond_to do |format| + format.html + format.xml + end + end + +end diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb new file mode 100644 index 0000000..608d515 --- /dev/null +++ b/app/controllers/subscriptions_controller.rb @@ -0,0 +1,42 @@ +class SubscriptionsController < ApplicationController + + skip_before_filter :verify_authenticity_token + + def index + @contact = Contact.find(UrlParamCrypt.decrypt(params[:contact])) + + #prozatim takhle super primitivne + @contact.remove_trialwalkthrough_subscription(featured_product) + end + + def from_download + @product = Product[params[:product]] + render :layout => "iframe" + end + + def create + @subscription = Subscription.new(params[:subscription]) + + @callback = params[:callback] || "subscription_saved" + + if @subscription.save_many + respond_to do |format| + format.html { render :text => "OK" } + format.js { + render :update do |page| + page.call @callback, params[:form_id] + end + } + end + else + respond_to do |format| + format.html { render :text => "ERROR" } + format.js { + render :update do |page| + page.call "subscription_not_saved", t('txt.support.unsaved_subscription') + end + } + end + end + end +end diff --git a/app/controllers/support_controller.rb b/app/controllers/support_controller.rb new file mode 100644 index 0000000..989ca6d --- /dev/null +++ b/app/controllers/support_controller.rb @@ -0,0 +1,44 @@ +class SupportController < ApplicationController + + before_filter(:only => [:show]){ |c| c.find_product("support_url", UrlDestination['support']) } + before_filter :init_objects + + #layout "legal", :only => [:disclaimer, :privacy_policy] + + # index a show nejde kesovat kvuli get parametru subject + caches_page :disclaimer, :privacy_policy, :eula, :customer_service + + def index + end + + def show + render :action => "index" + end + + def disclaimer + @static_page = StaticPage['disclaimer'] + end + + def privacy_policy + @static_page = StaticPage['privacy-policy'] + end + + def eula + @static_page = StaticPage['eula'] + end + + def customer_service + @static_page = StaticPage['customer-service'] + end + + private + + def init_objects + @dextronet_faqs = FaqCategory.top_dextronet_faqs + @products = Product.all_ordered.delete_if { |r| r.code == 'better-listview-express' } + @support_request = SupportRequest.new + @support_request.support_request_origin = SupportRequestOrigin['support'] + @support_request.product = @product + end + +end diff --git a/app/controllers/uninstall_controller.rb b/app/controllers/uninstall_controller.rb new file mode 100644 index 0000000..0fe47c8 --- /dev/null +++ b/app/controllers/uninstall_controller.rb @@ -0,0 +1,25 @@ +class UninstallController < ApplicationController + + before_filter :init_objects + + caches_page :index, :show + + #layout "simple" + + def index + + end + + def show + render :action => "index" + end + + private + + def init_objects + @product = Product.find_by_code(params[:id]) + @support_request = SupportRequest.new + @support_request.support_request_origin = SupportRequestOrigin['why-uninstall'] + @support_request.product = @product + end +end diff --git a/app/controllers/upgrade_controller.rb b/app/controllers/upgrade_controller.rb new file mode 100644 index 0000000..8678204 --- /dev/null +++ b/app/controllers/upgrade_controller.rb @@ -0,0 +1,15 @@ +class UpgradeController < ApplicationController + + caches_page :index + + def index + @product = featured_product + @static_page = StaticPage.find_by_url_param(params[:upgrade]) + + @survey = Survey.new + @survey.product = @product + + render_404 unless @static_page + end + +end diff --git a/app/controllers/wp_controller.rb b/app/controllers/wp_controller.rb new file mode 100644 index 0000000..16b3102 --- /dev/null +++ b/app/controllers/wp_controller.rb @@ -0,0 +1,39 @@ +class WpController < ApplicationController + layout false + + caches_page :header, :footer, :get_meta_tags, :get_page_include, :post_ad_stdl, :sidebar_ad, + :blv_sidebar_ad, :post_ad_blv + + def sweep + SiteSweeper.sweep + render :nothing => true + end + + def header + @blog = true + end + + def footer + end + + def get_meta_tags + end + + def get_page_include + end + + def get_tracker + end + + def post_ad_stdl + end + + def post_ad_blv + end + + def sidebar_ad + end + + def blv_sidebar_ad + end +end diff --git a/app/helpers/about_helper.rb b/app/helpers/about_helper.rb new file mode 100644 index 0000000..ebf8aea --- /dev/null +++ b/app/helpers/about_helper.rb @@ -0,0 +1,11 @@ +module AboutHelper + + def years_since_founded + Date.today.year - 2004 + end + + def years_since_asp_member + Date.today.year - 2006 + end + +end diff --git a/app/helpers/activations_helper.rb b/app/helpers/activations_helper.rb new file mode 100644 index 0000000..13da02e --- /dev/null +++ b/app/helpers/activations_helper.rb @@ -0,0 +1,2 @@ +module ActivationsHelper +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000..7a71f6c --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,160 @@ +# Methods added to this helper will be available to all templates in the application. +module ApplicationHelper + + def blv_version + featured_product.current_version + end + + # ========== DEXTRONET_CORE_HELPER =========== + + def antispam_field + hidden_field_tag :magicwand, "you-shall-not-pass", :id => nil + end + + def link_to_new_window(name, options, html_options = {}) + html_options[:onclick] = [html_options[:onclick], "window.open(this.href); return false"].compact.join("; ") + link_to(name, options, html_options); + end + + def back_button + link_to t('txt.common.back'), root_path, :class => "back-header-button history-back" + end + + def releases_page_path(product, version = nil) + p = product_path(product)+"/#{Settings.releases_code}" + p << "?since=#{version}" if version + p + end + + def submit_button(value, options = {}) + options[:class] = ["dbtn", options[:class]].compact.join(" ") + btn_id = options.delete(:btn_id) || "send" + btn_class = ["dbtn-c", options.delete(:btn_class)].compact.join(" ") + content_tag(:span, content_tag(:span, submit_tag(value, options), :class => "dbtn-w"), :class => btn_class, :id => btn_id) + end + + # tady tyhle paths k product pages by mely byt generovane automaticky + def story_path(product) + product_path(product)+"/#{Settings.story_code}" + end + + def submit_image(*args) + options = args.extract_options! + + case args.first + when Symbol, String + options[:class] = [args.first, options[:class]].compact.join(" ") + end + + image_submit_tag("blank.gif", options) + end + + def screenshot_path(id) + ss = Screenshot.find_by_id(id) + ss ? ss.image.url : "/images/blank.gif" + end + + # ========== /DEXTRONET_CORE_HELPER =========== + + def more_link_button(product_or_edition, klass = "standard", text = nil) + text = t('txt.products.learn_more') unless text + + case product_or_edition + when ProductEdition + path = product_path(product_or_edition.product) + else + path = product_path(product_or_edition) + end + + link_to text, path, :class => "#{klass}-more image-link" + end + + def documentation_path(product) + "#{product_path(product)}/#{Settings.documentation_code}" + end + + def quick_start_guide_path(product) + "#{product_path(product)}/#{Settings.quick_start_guide_code}" + end + + def class_reference_path(product) + "#{product_path(product)}/#{Settings.class_reference_code}" + end + + + def pricing_path(product) + "#{product_path(product)}/#{Settings.pricing_code}" + end + + def twitter_url + "http://twitter.com/ComponentOwl" + end + + def upgrade_path(static_page_code) + "/upgrade/#{StaticPage[static_page_code].url_param}" + end + + def buy_professional(product) + edition = product.edition('professional') + buy_link(edition, "buy_professional", t('txt.products.buy_professional', :price => number_to_currency(edition.price))) + end + + def buy_standard(product) + edition = product.edition('standard') + buy_link(edition, "buy_standard", t('txt.products.buy_standard', :price => number_to_currency(edition.price))) + end + + def subscription_lists(location_code, product = nil) + product_id = product ? product.id : nil + lists = SubscriptionLocation[location_code].lists(product_id) + product_list = lists.detect {|l| l.product == product } + can_deselect = false + content = [] + lists.each do |list| + # zatim bude vsecko hidden + #if !product || (product && list.product == product) || (product && product_list.nil?) + content << hidden_field_tag("subscription[subscription_list_ids][]", list.id, :id => nil) + #else + # content << check_box_tag("subscription[subscription_list_ids][]", list.id, true, :id => "subscription_subscription_list_ids_#{list.id}") + # content << label_tag("subscription_subscription_list_ids_#{list.id}", t('txt.product.send_also', :newsletter => list.name)) + # can_deselect = true + #end + end + if can_deselect + content.insert(0, '
') + content << "
" + end + content.join("\n") + end + + def subscribe(type = nil, text = t('txt.common.subscribe'), options = {}) + btn_class = "subscribe" + btn_class << " dbtn-#{type}" if type + submit_button(text, options.merge(:btn_class => btn_class)) + end + + def pricing_licensing?(product_page) + product_page.code == "pricing-licensing" + end + + def cached_javascripts_base + javascript_include_merged :base + end + + def cached_javascripts_app + javascript_include_merged :app + end + + def cached_javascripts_simple + javascript_include_merged :simple + end + + def cached_stylesheets_base + stylesheet_link_merged :base + end + + def cached_stylesheets_simple + stylesheet_link_merged :simple + end + +end \ No newline at end of file diff --git a/app/helpers/articles_helper.rb b/app/helpers/articles_helper.rb new file mode 100644 index 0000000..2968277 --- /dev/null +++ b/app/helpers/articles_helper.rb @@ -0,0 +1,2 @@ +module ArticlesHelper +end diff --git a/app/helpers/comics_helper.rb b/app/helpers/comics_helper.rb new file mode 100644 index 0000000..d8a5137 --- /dev/null +++ b/app/helpers/comics_helper.rb @@ -0,0 +1,17 @@ +module ComicsHelper + + def title(comic = nil) + comic ||= @comic + t('txt.comics.title', :name => comic.name_or_date) + end + + def description(comic = nil) + comic ||= @comic + comic.story.present? ? comic.story : meta_tags.description + end + + def sitename + t('txt.componentowl_long') + end + +end \ No newline at end of file diff --git a/app/helpers/download_helper.rb b/app/helpers/download_helper.rb new file mode 100644 index 0000000..b5defa0 --- /dev/null +++ b/app/helpers/download_helper.rb @@ -0,0 +1,12 @@ +module DownloadHelper + + def quote(testimonial) + text = @testimonial ? @testimonial.text : t('txt.download_page.quote_text') + author = @testimonial ? @testimonial.author : t('txt.download_page.quote_author') + content = ['
'] + content << "
#{text}
" + content << "#{author}" + content << "
" + content.join("\n") + end +end diff --git a/app/helpers/faqs_helper.rb b/app/helpers/faqs_helper.rb new file mode 100644 index 0000000..5f31c64 --- /dev/null +++ b/app/helpers/faqs_helper.rb @@ -0,0 +1,12 @@ +module FaqsHelper + + def faqs_links(products, current_product = nil) + content = [] + content << content_tag(:li, link_to(t("txt.faqs.general_faqs"), general_faqs_path)) if current_product + for product in products + content << content_tag(:li, link_to("#{product.name} #{t("txt.faqs.faqs")}", product_faqs_path(product))) if product.has_faqs? && product != current_product + end + return content.join + end + +end diff --git a/app/helpers/feeds_helper.rb b/app/helpers/feeds_helper.rb new file mode 100644 index 0000000..d48dcc2 --- /dev/null +++ b/app/helpers/feeds_helper.rb @@ -0,0 +1,2 @@ +module FeedsHelper +end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb new file mode 100644 index 0000000..23de56a --- /dev/null +++ b/app/helpers/home_helper.rb @@ -0,0 +1,2 @@ +module HomeHelper +end diff --git a/app/helpers/landing_pages_helper.rb b/app/helpers/landing_pages_helper.rb new file mode 100644 index 0000000..3c155f4 --- /dev/null +++ b/app/helpers/landing_pages_helper.rb @@ -0,0 +1,2 @@ +module LandingPagesHelper +end diff --git a/app/helpers/notifier_helper.rb b/app/helpers/notifier_helper.rb new file mode 100644 index 0000000..4d62215 --- /dev/null +++ b/app/helpers/notifier_helper.rb @@ -0,0 +1,21 @@ +module NotifierHelper + + def survey(survey) + keys = survey.keys.sort {|x, y| x.to_i <=> y.to_i } + questions = [] + + keys.each do |key| + item = survey[key] + str = "#{key}. #{item[:question]}\n" + if item[:answer].is_a? Array + str += item[:answer].join(", ") + else + str += item[:answer] || "" + end + questions << str + end + + questions.join("\n\n") + end + +end diff --git a/app/helpers/orders_helper.rb b/app/helpers/orders_helper.rb new file mode 100644 index 0000000..e16435c --- /dev/null +++ b/app/helpers/orders_helper.rb @@ -0,0 +1,12 @@ +module OrdersHelper + + def buy(bmtid) + #submit_image("buy", :name => "PRODUCTID", :value => bmtid, :onclick => "bmtForm(this)") + submit_tag("", :name => "PRODUCTID", :"data-value" => bmtid, :onclick => "bmtForm(this)", :class => "buy") + end + + def renew(bmtid) + #submit_image("renew", :name => "PRODUCTID", :value => bmtid, :onclick => "bmtForm(this)") + submit_tag("", :name => "PRODUCTID", :"data-value" => bmtid, :onclick => "bmtForm(this)", :class => "renew") + end +end diff --git a/app/helpers/pad_helper.rb b/app/helpers/pad_helper.rb new file mode 100644 index 0000000..ca78d9a --- /dev/null +++ b/app/helpers/pad_helper.rb @@ -0,0 +1,58 @@ +module PadHelper + + def val(key) + @product.pad_value_for_key(key) || Settings.pad[key] || "" + end + + def product_link + product_url(@product) + end + + def buy_link + @product.free? ? product_url(@product) : order_url(@product) + end + + def pad_link + pad_url(@product) + end + + def setup_file_link + direct_download_url(:filename => @product.file_url) + end + + def name + @product.name.strip_version + end + + def version + @product.current_version + end + + def release_month + @product.current_release.date.strftime("%m") + end + + def release_day + @product.current_release.date.strftime("%d") + end + + def release_year + @product.current_release.date.year + end + + def price + @product.price || 0 + end + + def size_b + @product.setup_file.size + end + + def size_kb + number_with_precision(@product.setup_file.size.to_f / 1024, :precision => 0) + end + + def size_mb + number_with_precision(@product.setup_file.size.to_f / 1024 / 1024, :precision => 2) + end +end diff --git a/app/helpers/press_helper.rb b/app/helpers/press_helper.rb new file mode 100644 index 0000000..2e65b16 --- /dev/null +++ b/app/helpers/press_helper.rb @@ -0,0 +1,2 @@ +module PressHelper +end diff --git a/app/helpers/product_pages_helper.rb b/app/helpers/product_pages_helper.rb new file mode 100644 index 0000000..81b8dc0 --- /dev/null +++ b/app/helpers/product_pages_helper.rb @@ -0,0 +1,2 @@ +module ProductPagesHelper +end diff --git a/app/helpers/products_helper.rb b/app/helpers/products_helper.rb new file mode 100644 index 0000000..841a5ec --- /dev/null +++ b/app/helpers/products_helper.rb @@ -0,0 +1,35 @@ +module ProductsHelper + + def product_ad(product, options = {}, &block) + icon_size = options.delete(:icon) || 24 + + options[:class] = ["product-ad", "icon-#{icon_size}", options[:class]].compact.join(" ") + options[:onclick] = "location.href = '#{product_path(product)}'" + + content = capture(&block) + content = "#{icon(product, icon_size)}#{content}" + + concat content_tag(:div, content, options) + end + + def versions_for_select(releases, since = nil) + options_for_select(releases.map{|r| r.version if r.has_changelog? && !r.version.include?('Beta') }.compact, since) + end + + def download_link_trial_or_free(product) + if product.free? || better_splitbutton? + download_link(product, "standard-free") + else + download_link(product, "standard", t('txt.home.free_download')) + end + end + + def better_slitbutton_buy_link + link_to "Buy commercial license with source code from $67", Settings.better_splitbutton_buy_url, :class => "commercial-buy image-link" + end + + def better_splitbutton? + @product && @product.code == 'better-splitbutton' + end + +end diff --git a/app/helpers/releases_helper.rb b/app/helpers/releases_helper.rb new file mode 100644 index 0000000..a3085bf --- /dev/null +++ b/app/helpers/releases_helper.rb @@ -0,0 +1,2 @@ +module ReleasesHelper +end diff --git a/app/helpers/resources_helper.rb b/app/helpers/resources_helper.rb new file mode 100644 index 0000000..bbdde9a --- /dev/null +++ b/app/helpers/resources_helper.rb @@ -0,0 +1,2 @@ +module ResourcesHelper +end diff --git a/app/helpers/sitemap_helper.rb b/app/helpers/sitemap_helper.rb new file mode 100644 index 0000000..65e77ea --- /dev/null +++ b/app/helpers/sitemap_helper.rb @@ -0,0 +1,11 @@ +module SitemapHelper + + def link(path, default_title) + custom_title = @custom_titles.select {|a| a.path == path }.last + if custom_title + link_to(custom_title.title, path) + else + link_to(default_title, path) + end + end +end diff --git a/app/helpers/subscriptions_helper.rb b/app/helpers/subscriptions_helper.rb new file mode 100644 index 0000000..9ace045 --- /dev/null +++ b/app/helpers/subscriptions_helper.rb @@ -0,0 +1,2 @@ +module SubscriptionsHelper +end diff --git a/app/helpers/support_helper.rb b/app/helpers/support_helper.rb new file mode 100644 index 0000000..9b5bc84 --- /dev/null +++ b/app/helpers/support_helper.rb @@ -0,0 +1,2 @@ +module SupportHelper +end diff --git a/app/helpers/support_requests_helper.rb b/app/helpers/support_requests_helper.rb new file mode 100644 index 0000000..5a8f93b --- /dev/null +++ b/app/helpers/support_requests_helper.rb @@ -0,0 +1,2 @@ +module SupportRequestsHelper +end diff --git a/app/helpers/uninstall_helper.rb b/app/helpers/uninstall_helper.rb new file mode 100644 index 0000000..190b07a --- /dev/null +++ b/app/helpers/uninstall_helper.rb @@ -0,0 +1,10 @@ +module UninstallHelper + + #buga> tohle by melo byt jen docasne reseni (vysoce nekonzistentni) + def uninstall_issues(product) + stdl_issues = ['no-phone-sync', 'no-outlook-sync'] + issues = UninstallIssue.all + issues = issues.delete_if {|r| stdl_issues.include?(r.code) } unless product.is_featured? + issues.map {|r| [r.display_name, r.id] } + end +end diff --git a/app/helpers/upgrade_helper.rb b/app/helpers/upgrade_helper.rb new file mode 100644 index 0000000..9c5a960 --- /dev/null +++ b/app/helpers/upgrade_helper.rb @@ -0,0 +1,78 @@ +module UpgradeHelper + + def pro? + !params[:pro].nil? + end + + class SurveyFormBuilder < ActionView::Helpers::FormBuilder + + def question(text) + inc_questions + @template.content_tag(:label, text) + @template.hidden_field_tag(tag_name("question"), text) + end + + def answer(type, *args) + options = args.extract_options! + value = options.delete(:value) || "" + + content = [] + + case type + when :text_field + add_default_name_and_id(options) + content << @template.text_field_tag(options.delete(:name), value, options) + when :text_area + add_default_name_and_id(options) + content << @template.text_area_tag(options.delete(:name), value, options) + when :check_box + [args.first].flatten.each do |value| + add_default_name_and_id_for_value(value, options) + content << [@template.check_box_tag(options.delete(:name), value, false, options), @template.label_tag(options[:id], value)].join(" ") + end + when :radio_button + [args.first].flatten.each do |value| + add_default_name_and_id_for_value(value, options) + content << [@template.radio_button_tag(options.delete(:name), value, false, options), @template.label_tag(options[:id], value)].join(" ") + end + when :select, :combo + add_default_name_and_id(options) + options[:class] = [options[:class], "combo"].compact.join(" ") if type == :combo + content << @template.select_tag(options.delete(:name), @template.options_for_select(args.first, options.delete(:selected)), options) + when :combo + + end + + content.join("") + end + + private + + def add_default_name_and_id(options) + options[:name] = tag_name("answer", :multiple => true) + options[:id] = tag_id("answer") + end + + def add_default_name_and_id_for_value(value, options) + pretty_tag_value = value.to_s.gsub(/\s/, "_").gsub(/\W/, "").downcase + add_default_name_and_id(options) + options[:id] += "_#{pretty_tag_value}" + end + + def tag_name(type, options = {}) + "#{@object_name}[survey][#{@questions}][#{type}]" + (options.has_key?(:multiple) ? '[]' : '') + end + + def tag_id(type, value = nil) + "#{@object_name}_survey_#{@questions}_#{type}" + end + + def inc_questions + if @questions + @questions = @questions + 1 + else + @questions = 1 + end + end + end + +end \ No newline at end of file diff --git a/app/helpers/wp_helper.rb b/app/helpers/wp_helper.rb new file mode 100644 index 0000000..fda9af3 --- /dev/null +++ b/app/helpers/wp_helper.rb @@ -0,0 +1,2 @@ +module WpHelper +end diff --git a/app/models/activation.rb b/app/models/activation.rb new file mode 100644 index 0000000..a710767 --- /dev/null +++ b/app/models/activation.rb @@ -0,0 +1,146 @@ +class Activation < ActiveRecord::Base + + belongs_to :order + + attr_accessor :result + + validate :validate_serial_key, :validate_attributes, :validate_limit + + after_create :generate_final_judgement + + named_scope :by_computer_id, lambda { |computer_id| { :conditions => { :computer_id => computer_id } } } + named_scope :group_computer_id_except, lambda { |computer_id| { :group => "computer_id", :conditions => ["computer_id != ?", computer_id] } } + + GENERATOR_DIR = "#{Rails.root}/#{Settings.private_dir}" + GENERATOR = "BLVLicenseGenerator.exe" + + RESULTS = { + "success" => { + :response => 0, + :message => :success + }, + "invalid_serial_key" => { + :response => 1, + :message => :invalid_serial_key, + :message_url => :support_url + }, + "limit_reached" => { + :response => 2, + :message => :limit_reached, + :message_url => :buy_url + }, + "missing_attributes" => { + :response => 3, + :message => :other_error_missing_attributes, + :message_url => :support_url + }, + "generator_error" => { + :response => 3, + :message => :other_error_generator_error, + :message_url => :support_url + } + } + + def before_validation + self.result = "success" + self.order = Order.find_by_license_key(serial_key) + end + + def validate_attributes + missing_attributes! if missing_attributes? + end + + def validate_serial_key + @valid_serial_key = order.present? + invalid_serial_key! unless @valid_serial_key + end + + def validate_limit + unless invalid_serial_key? + @within_limit = within_limit? + limit_reached! unless @within_limit + end + end + + def computer_ids_within_limit? + computer_ids_limit = Settings.activation_limits["activations_#{BmtOrder.find(order.id).bmtID}"].to_i + order.activations.group_computer_id_except(computer_id).count("DISTINCT computer_id") < computer_ids_limit + end + + def within_limit? + !new_record? || (!invalid_serial_key? && computer_ids_within_limit?) + end + + def missing_attributes? + serial_key.nil? || build.blank? || product.blank? || computer_id.blank? + end + + def missing_attributes! + self.result = "missing_attributes" + errors.add_to_base "Missing attributes" + end + + def limit_reached! + self.result = "limit_reached" + errors.add_to_base "Limit reached." + end + + def invalid_serial_key! + self.result = "invalid_serial_key" + errors.add_to_base "Invalid serial key." + end + + def invalid_serial_key? + @valid_serial_key == false + end + + def to_xml(options = {}) + h = RESULTS[result] + h = h.merge({ + :message => I18n.t("txt.activation.#{h[:message]}"), + :message_url => (options.delete(h[:message_url]) || ""), + :final_judgement => (final_judgement || "") + }) + + h.to_xml(:root => "activation", :dasherize => false) + end + + private + + def generate_final_judgement + #Format: + # ### license generator source file ### + # [1] Serial key , eg. "ABCDEF123456" + # [2] Computer ID , eg. "f54f1525a456ad867b65ee9ec8b0c83de44b3dc7" + # [3] IP Address , eg. "127.0.0.1" + # [4] Activation ID , eg. "5" + # [5] Product , eg. "BLV" + # [6] Build , eg. "1" + source_file_data = ["### license generator source file ###"] + source_file_data << serial_key + source_file_data << computer_id + source_file_data << ip + source_file_data << id + source_file_data << product + source_file_data << build + + @source_file_name = "license_source_file_#{id}.txt" + @source_file_path = File.join(GENERATOR_DIR, @source_file_name) + File.open(@source_file_path, 'a') {|f| f.write(source_file_data.join("\n")) } + + generator_path = File.join(GENERATOR_DIR, GENERATOR) + key = `mono #{generator_path} #{@source_file_path}` + FileUtils.rm_r(@source_file_path) + + match = key.match /^(ok:\s*)(.+)/i + if match + update_attribute(:final_judgement, match[2].strip) + else + self.final_judgement = key.strip + self.result = "generator_error" + destroy + FailedActivation.create_from_activation(self) + end + end + +end diff --git a/app/models/bmt_license_key.rb b/app/models/bmt_license_key.rb new file mode 100644 index 0000000..0ae741f --- /dev/null +++ b/app/models/bmt_license_key.rb @@ -0,0 +1,47 @@ +class BmtLicenseKey + + attr_accessor :license_key, :error + + ATTEMPTS = 5 + + def initialize + @attempt = 0 + end + + def generate! + @attempt += 1 + self.license_key = Array.new(16) { rand(2) == 0 ? (rand(90-65) + 65).chr : (rand(7) + 50).chr }.join.gsub(/[IO]/, "X") + existing_license_key = Order.find_by_license_key(license_key) + if existing_license_key && @attempt < ATTEMPTS + generate! + elsif existing_license_key && @attempt == ATTEMPTS + attempts_failed! + end + license_key + end + + def attempts_failed! + self.license_key = nil + @attempts_failed = true + end + + def attempts_failed? + @attempts_failed == true + end + + def to_xml(options = {}) + xml = Builder::XmlMarkup.new + xml.instruct! + xml.response do + xml.registrationkey do + if attempts_failed? + xml.errorcode 1 + xml.errormessage "The attempts to generate unique license key failed (#{ATTEMPTS} times)." + else + xml.keydata license_key + end + end + end + end + +end \ No newline at end of file diff --git a/app/models/bmt_order.rb b/app/models/bmt_order.rb new file mode 100644 index 0000000..5fe54b5 --- /dev/null +++ b/app/models/bmt_order.rb @@ -0,0 +1,82 @@ +class BmtOrder < Order + + require 'cgi' + + attr_accessor :ordernotification + attr_writer :product_id, :customer_email, :customer_first_name, :customer_last_name, :customer_company + + def before_validation + self.order_attributes ||= ordernotification + self.orderable = BmtProduct.find(product_id) + self.license_key = license_key_from_attributes + + customer = Customer.find_by_email(customer_email) + if customer + self.customer = customer + else + self.customer_attributes = { + :first_name => customer_first_name, + :last_name => customer_last_name, + :email => customer_email, + :company => customer_company, + :customer_attributes => customer_attributes, + :customer_ref => customer_ref + } + end + end + + def xml_response + if errors.any? + { :ordernotification => { :errorcode => 1, :errormessage => errors.full_messages.join("\n") } }.to_xml(:root => "response") + else + { :ordernotification => "" }.to_xml(:root => "response") + end + end + + def license_key_from_attributes + if order_attributes[:orderitem][:registrationkeys].is_a?(Hash) + order_attributes[:orderitem][:registrationkeys][:keydata] + else + order_attributes[:orderitem][:registrationkeys] + end + end + + def customer_ref + if order_attributes + @customer_ref ||= order_attributes[:orderparameters] + else + nil + end + end + + def product_id + @product_id ||= orderable ? orderable.bmtID : order_attributes[:orderitem][:productid] + end + + alias :bmtID :product_id + + def customer_email + @customer_email ||= order_attributes[:customer][:billing][:email] + end + + def customer_first_name + @customer_first_name ||= order_attributes[:customer][:billing][:firstname] + end + + def customer_last_name + @customer_last_name ||= order_attributes[:customer][:billing][:lastname] + end + + def customer_company + @customer_company ||= order_attributes[:customer][:billing][:company] + end + + def customer_attributes + if order_attributes + @customer_attributes ||= order_attributes[:customer] + else + nil + end + end + +end diff --git a/app/models/bmt_product.rb b/app/models/bmt_product.rb new file mode 100644 index 0000000..c81bd82 --- /dev/null +++ b/app/models/bmt_product.rb @@ -0,0 +1,17 @@ +class BmtProduct + + def self.find(bmtID) + product_edition = ProductEdition.find_by_bmtID(bmtID) + return product_edition if product_edition + + product = Product.find_by_bmtID(bmtID) + return product if product + + product_offer = ProductOffer.find_by_bmtID(bmtID) + return product_offer if product_offer + + product_upgrade = ProductUpgrade.find_by_bmtID(bmtID) + return product_upgrade if product_upgrade + end + +end \ No newline at end of file diff --git a/app/models/comic.rb b/app/models/comic.rb new file mode 100644 index 0000000..2cda375 --- /dev/null +++ b/app/models/comic.rb @@ -0,0 +1,64 @@ +class Comic < ActiveRecord::Base + + acts_as_cute_admin :display_name => :number, :order_scope => :publish_on + + before_validation_on_create :assign_number + + validates_presence_of :number + validates_uniqueness_of :number + + if Rails.env.production? || Rails.env.preproduction? + + has_attached_file :image, + :storage => :s3, + :s3_credentials => "#{Rails.root}/config/s3.yml", + :s3_headers => { 'Expires' => 1.year.from_now.httpdate }, + :url => ':s3_url', + :path => "comics/:id/:basename_:style_:timestamp.:extension", + :styles => { :web => "930x930>" } + + else + + has_attached_file :image, :path => ":rails_root/public/system/comics/:id/:basename_:style.:extension", + :url => "/system/comics/:id/:basename_:style.:extension", :styles => { :web => "930x930>" } + + end + + named_scope :published, lambda { { :conditions => ["publish_on <= ?", Date.today] } } + named_scope :find_latest, :order => "publish_on DESC", :limit => 10 + named_scope :find_previous, lambda { |comic| { :conditions => ["publish_on < ?", comic.publish_on], + :order => "publish_on DESC", :limit => 1 } } + named_scope :find_next, lambda { |comic| { :conditions => ["publish_on > ?", comic.publish_on], + :order => "publish_on ASC", :limit => 1 } } + named_scope :ordered, :order => "publish_on" + named_scope :reverse_ordered, :order => "publish_on DESC" + + def self.latest + find_latest.published.first + end + + def to_param + number.to_s + end + + def assign_number + self.number = get_new_number unless number.present? && number > 0 + end + + def get_new_number + self.class.find_latest.any? ? self.class.find_latest.first.number + 1 : 1 + end + + def previous + self.class.find_previous(self).published.first + end + + def next + self.class.find_next(self).published.first + end + + def name_or_date + name.present? ? name : I18n.l(publish_on, :format => :cute_with_dayname) + end + +end diff --git a/app/models/failed_activation.rb b/app/models/failed_activation.rb new file mode 100644 index 0000000..45bb1fa --- /dev/null +++ b/app/models/failed_activation.rb @@ -0,0 +1,9 @@ +class FailedActivation < ActiveRecord::Base + + attr_accessor :order_id + + def self.create_from_activation(activation) + create(activation.attributes.merge(:result => activation.result)) + end + +end diff --git a/app/models/multiple_license_generator.rb b/app/models/multiple_license_generator.rb new file mode 100644 index 0000000..c9f11f1 --- /dev/null +++ b/app/models/multiple_license_generator.rb @@ -0,0 +1,161 @@ +class MultipleLicenseGenerator + + #require 'net/http' + #require 'uri' + + attr_accessor :license_key, :generated_licenses + + LICENSE_KEY_XML = < + + + 1 + %{time} + %{time} + + + Component Owl + Component + Owl + support@componentowl.com + + + Component Owl + Component + Owl + support@componentowl.com + + Component Owl + + + %{bmt_id} + 1 + + 127.0.0.1 + Internal Generator + + +eos + + ORDER_XML = < + + + %{time} + %{time} + + + Component Owl + Component + Owl + support@componentowl.com + + + Component Owl + Component + Owl + support@componentowl.com + + Component Owl + + + %{time} + %{bmt_id} + %{product_name} + 1 + + %{license_key} + + + %{today} + 127.0.0.1 + + +eos + + def initialize(*args) + @licenses_per_product = args.first + self.generated_licenses = [] + end + + def self.generate(licenses_per_product = 51) + inst = new(licenses_per_product) + inst.generate_and_deliver + end + + def generate_and_deliver + ProductEdition.ordered.each do |product_edition| + @product = product_edition + license = { :product => @product, :license_keys => [] } + @licenses_per_product.times { license[:license_keys] << request_key } + generated_licenses << license + end + + deliver_licenses! + end + + def request_key + bmt_license_key = BmtLicenseKey.new + self.license_key = bmt_license_key.generate! + + params = Hash.from_xml(format(ORDER_XML)).with_indifferent_access + bmt_order = BmtOrder.new(params[:request]) + bmt_order.save + + license_key + end + +=begin + def request_key + url = URI.parse('http://localhost:3000/products/generate_license?t=' + Settings.api_token) + request = Net::HTTP::Post.new(url.path + '?' + url.query) + request.content_type = "application/xml" + request.body = format(LICENSE_KEY_XML) + response = Net::HTTP.start(url.host, url.port) { |http| http.request(request) } + doc = Nokogiri::XML(response.body) + error_node = doc.search("//errormessage").first + if error_node + raise "Multiple license generator failed with message (#{@product.id}): #{error_node.content}" + else + keydata_node = doc.search("//keydata").first + if keydata_node + return keydata_node.content + else + raise "License key is missing (#{@product.id})" + end + end + end +=end + + def format(text) + formatted_text = "#{text}" + text.scan(/%\{([^\}]+)\}/).each do |interpolation| + method = interpolation.first + formatted_text.gsub!("%{#{method}}", send(method)) if respond_to?(method) + end + formatted_text + end + + def time + (rand(1<<64) + Time.now.to_i).to_s + end + + def today + Date.today.to_s + end + + def bmt_id + @product.bmtID.to_s + end + + def product_name + @product.name + end + + private + + def deliver_licenses! + Notifier.deliver_licenses!(generated_licenses) + end + +end \ No newline at end of file diff --git a/app/models/notifier.rb b/app/models/notifier.rb new file mode 100644 index 0000000..cd68dd0 --- /dev/null +++ b/app/models/notifier.rb @@ -0,0 +1,50 @@ +class Notifier < ActionMailer::Base + + helper :application, :notifier + default_url_options[:host] = Settings.host + + def licenses(licenses) + subject "ComponentOwl.com - Generated Licenses" + from Settings.no_email + recipients Settings.feedback_email + sent_on Time.now + content_type "text/plain" + body :licenses => licenses + end + + def survey(survey) + subject I18n.t('txt.survey.email_subject') + from "#{survey.full_name} <#{survey.current_email}>" + recipients Settings.feedback_email + sent_on Time.now + content_type "text/plain" + body :survey => survey + end + + def recommend(email, survey) + subject I18n.t('txt.survey.recommend_email_subject', :name => survey.full_name) + from "#{survey.full_name} <#{survey.current_email}>" + recipients email + sent_on Time.now + content_type "text/plain" + body :survey => survey + end + + def claim_upgrade(survey) + subject I18n.t('txt.survey.free_upgrade_email_subject') + from "#{survey.full_name} <#{survey.current_email}>" + recipients Settings.feedback_email + sent_on Time.now + content_type "text/plain" + body :survey => survey + end + + def license_key_error(license_key) + subject "Generate license for order #{license_key.order_id} failed!" + from "Dextronet - License Key Error " + recipients Settings.license_key_error_email + sent_on Time.now + content_type "text/plain" + body :license_key => license_key + end +end \ No newline at end of file diff --git a/app/stylesheets/base.less b/app/stylesheets/base.less new file mode 100644 index 0000000..315fc9a --- /dev/null +++ b/app/stylesheets/base.less @@ -0,0 +1,113 @@ +@standard_fonts: 'trebuchet ms', sans-serif; + +* { margin: 0; padding: 0; } +html { height: 100%; } +body { height: 100%; font-size: 14px; color: #000; text-align: center; } + +a img { border: none; } + +a { + color: #825900; outline: none; + :hover { color: #000; } + :active { color: #ab7500; } +} + +ul, li { list-style: none; } + +.left, .subleft { float: left; } +.right, .subright { float: right; } +.clear { clear: both; } +.nowrap { white-space: nowrap; } + +.underline { text-decoration: underline; } + +input[type=text], input[type=password], textarea, select { padding: 2px; border: 1px solid; -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; + background-color: #fff; border-color: #abadb3 #dbdfe6 #e3e9ef #e2e3ea; } +input[type=text]:focus, input[type=password]:hover, input[type=password]:focus, input[type=text]:hover, textarea:focus, textarea:hover, select:focus, select:hover { + border-color: #d6a140 #efd9b2 #f3e3c6 #f2e1c1; +} +input { border-width: 1px; } // IE6 +input { font-size: 13px; } + +input.stressed { border-color: #e0ad50; } +input.stressed:focus, input.stressed:hover { border-color: #cd8d19; } + +.latest_from_blog, .image-link { text-indent: -9999em; } + +.image-link { display: block; } + +.inline-label-focus { color: #000 !important; } +.inline-label { color: #85878d; } + +ul.common, .answer ul { + li { padding: 2px 0 3px 23px; background: url(/images/arrow-bullet.gif) 4px 5px no-repeat; } + ul li { background-image: url(/images/arrow2.gif); } +} +ul.checklist li { background: url(/images/icons/tick.gif) 0 0 no-repeat !important; padding: 0 0 10px 23px; } +ol.common { + margin-left: 22px; + li { list-style-type: decimal; padding-bottom: 6px; } +} + +.testimonial { + margin: 20px 15px 0; padding: 10px 0 0; background: url(/images/testimonial.gif) no-repeat; font-size: 12px; + blockquote { margin: 0; padding: 0 12px 2px; text-align: justify; font-style: italic; background: #f9f0da; } + em { display: block; padding: 15px 20px 0 100px; font-size: .9em; color: #825900; font-weight: bold; font-style: normal; + background: url(/images/testimonial.gif) 100% 0 no-repeat; } +} + +input.name, input.email { background-position: 4px 50%; background-repeat: no-repeat; padding-left: 24px; } +input.name { width: 150px; background-image: url(/images/icons/user.gif); } +input.email { width: 150px; background-image: url(/images/icons/mail.gif); } +textarea.message { width: 330px; height: 72px; padding-left: 24px; + background-image: url(/images/icons/pencil.gif); background-position: 4px 2px; background-repeat: no-repeat; } + +input.required, textarea.required { border-color: #dea110 #f1c354 #f2d58f #f2d58f !important; background-color: #fff8e9; } + +input { font-size: 13px; } +textarea { font-family: 'trebuchet ms', sans-serif; font-size: 12px; } + +.popup-link { + padding-right: 13px; background: url(/images/icons/arrow-popup.gif) 100% 50% no-repeat; +} + +.sharethis { + a { color: #1c6e35; } + a:hover { color: #000; } +} + + +hr { border: 0; height: 1px; color: #a8906b; background-color: #a8906b; } + +.contact-form { + text-align: left; + fieldset { padding: 0; border-width: 0; } + legend { padding: 0 5px; text-align: center; } + label { display: block; } + input, textarea { margin-bottom: 15px; } + select { width: 172px; } + .ufd { margin-bottom: 15px !important; } + .message { width: 360px; height: 140px; } + .submit { text-align: center; margin-top: 5px; } + .sent-notice { padding: 5px; background: #fdf8a3; font-weight: bold; font-size: 12px; } +} + +.dbtn-c { border-bottom: 1px solid #ecdfb9; border-right: 1px solid #ecdfb9; display: inline-block; } +.dbtn-w { background: #efe5c6; border-color: #ac995e #9f8d55 #9f8d55 #ac995e; border-style: solid; border-width: 1px; display: block; height: 30px; } +.dbtn { background: url(/images/dbtn.png) repeat-x; border: none; color: #000000; cursor: pointer; font: 15px arial, sans-serif; height: 30px; margin: 0; outline: none; + vertical-align: top; padding-left: 5px; padding-right: 5px; } +.dbtn:active { background: #decd9b; } + +.dbtn-hilight { border-color: #cfe3a6; } +.dbtn-hilight .dbtn-w { background: #e8f2d3; border-color: #9bc842 #84b12a #84b12a #9bc842; } +.dbtn-hilight .dbtn { background-image: url(/images/dbtn-hilight.png); } +.dbtn-hilight .dbtn:active { background: #bad782; } + +.dbtn-small .dbtn-w { height: 23px; } +.dbtn-small .dbtn { font-size: 12px; height: 23px; } + +a.dbtn { display: block; height: 30px; line-height: 30px; text-decoration: none; padding-left: 15px; padding-right: 15px; } + +.small-button { padding: 4px 7px; background: #efe5c6; } + + diff --git a/app/stylesheets/headings.less b/app/stylesheets/headings.less new file mode 100644 index 0000000..e43c4fd --- /dev/null +++ b/app/stylesheets/headings.less @@ -0,0 +1,26 @@ +/** + * CSS classes with heading meaning + h1, h2 and h3 + * Headings below h3 are considered a part of standard fonts (main.less) + * -------------------------------------------------------------------------- + */ + +@heading_fonts: 'arial', sans-serif; + +h1, h2, h3, .heading { font-family: @heading_fonts; font-weight: bold; } + +.section-info { font-weight: bold; font-family: @heading_fonts; } + +.sitemap-content { h2 { font-size: 20px; } } + +.pr-content { + h2 { font-size: 22px; } +} + +.static-content { + h2 { font-size: 23px; } + h3 { font-size: 18px; } +} + +.subscribe-content { + h2 { font-size: 34px; } +} \ No newline at end of file diff --git a/app/stylesheets/main.less b/app/stylesheets/main.less new file mode 100644 index 0000000..988518e --- /dev/null +++ b/app/stylesheets/main.less @@ -0,0 +1,601 @@ +@page_width: 930px; +@standard_fonts: 'arial', sans-serif; + +body { font-family: @standard_fonts; background: #fefefe url(/images/bg.png) 0 0 repeat-x; } + +.standard-buy { + float: left; width: 193px; height: 44px; margin-top: 9px; background: url(/images/button-pricing.gif) no-repeat; + :hover { background-position: 0 -44px; } +} + +.commercial-buy { + float: left; width: 214px; height: 62px; background: url(/images/button-buy-commercial-license.gif) no-repeat; + :hover { background-position: 0 -62px; } +} + +.standard-more { + float: left; width: 195px; height: 62px; margin-right: 12px; background: url(/images/button-more.gif) no-repeat; + :hover { background-position: 0 -62px; } +} + +.standard-download { + float: left; width: 214px; height: 62px; margin-right: 12px; background: url(/images/button-download.gif) no-repeat; + :hover { background-position: 0 -62px; } +} + +.standard-free-download { + float: left; width: 214px; height: 62px; margin-right: 12px; background: url(/images/button-free-download.gif) no-repeat; + :hover { background-position: 0 -62px; } +} + +input.buy, input.renew { + width: 65px; height: 31px; margin: 5px 1px 5px 5px; border: 0; background: url(/images/button-buy-small.gif) 0 0 no-repeat; +} +input.renew { margin-right: 5px; background-image: url(/images/button-renew.gif); } + +.home-static { + h3 { font-family: georgia, serif; margin: 35px 0 15px; font-size: 26px; font-weight: normal; } + h3 strong { padding: 0 5px 0 3px; font-weight: normal; + background-image: url(/images/subhd-lb.gif), url(/images/subhd-rb.gif), url(/images/subhd-bg.gif); + background-position: 0 6px, 100% 6px, 0 6px; background-repeat: no-repeat, no-repeat, repeat-x; } + p { margin: 15px 0; } + .sharethis { margin-top: 40px; } + .lists { overflow: hidden; width: 100%; } + .list-l { float: left; width: 440px; } + .list-r { float: right; width: 450px; } + .buttons-hp { margin-top: 0 !important; } +} + +.compatiblehd { font-size: 20px !important; } +.compatiblelists { overflow: hidden; width: 100%; } +.compatiblelist li { padding-bottom: 8px; } +.compatiblelist .logo { float: left; padding-right: 15px; height: 65px; } +.compatiblelist .dotnet { padding-top: 11px; } +.compatiblelist .vs { padding-top: 2px; } + +.tellinghd { font-style: italic; margin-top: 0 !important; } +.tellingct { width: 100%; overflow: hidden; } +.tellingcnt { width: 635px; float: left; } +.tellingct .testimonial { float: right; width: 240px; } + +.testimonial-wide { padding: 8px 0 8px 15px; border: 1px solid #a8906b; border-left: none; border-right: none; + font-family: georgia, serif; font-size: 16px; margin: 30px 0 35px; background: #fffbf4; } + +.buttons-hp { overflow: hidden; width: 100%; border: 1px solid #b4e9fd; border-left: none; border-right: none; + padding: 12px; background: #f6fcff; position: relative; margin-top: 15px; } +.logos { + margin-top: 5px; + img { margin-left: 30px; vertical-align: middle; } +} +.buttons-hp .logos { float: left; padding-left: 5px; margin-top: 14px; } +.hp-wrap { + width: 100%; + overflow: hidden; + margin-top: 15px; + iframe { float: right; margin-right: 25px; } +} +.buttons-hp-vertical { + float: left; text-align: center; width: 250px; margin-left: 25px; margin-top: 20px; + padding: 15px; + a { float: none; margin: 0 auto 15px; } + .logos { + float: none; padding: 0; margin: 0 auto; + } + img { margin: 0 10px; } +} + +.hpline { padding: 0; border: none; height: 1px; margin: 35px 0 0; background-color: #b4e9fd; } +.sshd { font-size: 20px !important; padding-left: 8px; margin: 0; } + +.ending { margin-bottom: 7px !important; } +.darrows { position: relative; width: 175px; height: 54px; z-index: 2; + background: url(/images/arrows.png) no-repeat; margin: 0 0 -7px 30px; } + +.homehd { font-family: georgia, serif; font-size: 34px; text-align: center; font-weight: normal; + margin: 14px 0 10px; line-height: 39px; } +.homehd span { padding: 0 29px 0 23px; + background-image: url(/images/homehd-lb.gif), url(/images/homehd-rb.gif), url(/images/homehd-bg.gif); + background-position: 0 0, 100% 0, 0 0; background-repeat: no-repeat, no-repeat, repeat-x; } +.homeph { text-align: center; font-size: 16px; } +.ss-overview { margin: 0 0 10px; } + +.nav { + height: 30px; width: 100%; border-bottom: 1px solid #a8906b; margin-bottom: 20px; + a { color: #825900; text-decoration: none; padding: 6px 20px 7px; } + a:hover, a.current { color: #000; } + li { float: left; text-transform: uppercase; line-height: 31px; font-size: 12px; font-weight: bold; } + .current { border: 1px solid #a8906b; border-bottom: none; background: #fbf1e0; } +} + +.product-content { + overflow: hidden; height: 100%; + h1 { + font-size: 36px; font-weight: normal; letter-spacing: -1px; margin: 15px 0 0; + .subheading { font-size: 28px; margin-bottom: 7px; } + } + .section-info { margin: 0 0 30px; font-size: 14px; } + .sides { overflow: hidden; width: 100%; margin-bottom: 30px; } + .right { width: 686px; } + .left { width: 214px; font-size: 12px; } + .compatibility, .newsletter, .sharethis-ct, div.screenshot { + margin-top: 12px; padding-top: 12px; border-top: 1px dotted #a8906b; + img { margin: 5px; } + } + .documentation p { font-weight: bold; padding-top: 6px; } + .screenshot { text-align: center; } + .fb-like { + position: relative; margin-top: 10px; height: 75px; overflow: hidden; background-color: #ECEFF6; border: 1px solid #9DA1C4; + iframe { border: none !important; margin: -1px 0 0 -1px !important; } + } + .newsletter form { + div { padding: 3px 0; } + .email { width: 135px; margin: 5px 0; } + } + .sharethis { padding-top: 5px; } + .buttons-box { + text-align: center; + .standard-download, .standard-free-download { margin-bottom: 10px; } + .standard-buy { margin: 0 0 10px 10px; display: inline; } + .commercial-buy { margin: 0 0 10px; } + } + .small-button-ct { margin: 15px; text-align: center; } + .screenshots { + overflow: hidden; padding-top: 23px; width: 100%; + .odd { float: left; margin-left: 23px; } + .even { float: right; margin-right: 23px; } + strong { display: block; padding: 5px 0 30px 5px; } + img { border: 3px solid #efe5c6; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } + } + .screenshot-row { overflow: hidden; } + .buttons-wrap { margin-top: 40px; margin-bottom: 0; } +} + +.product-detail { + .bigtext { font-size: 16px; line-height: 25px; margin-bottom: 30px; } + h2 { margin: 20px 0 15px; font-size: 22px; } + h2.first { margin-top: 0; } + p, h3 { margin: 15px 0; } + .box { float: right; margin: 5px 30px 20px 40px; } + .bigbig { font-size: 16px; } + .hilight { background-color: #FFFF99; } + h3, .big { font-size: 15px; font-family: @standard_fonts; color: #000 !important; } + .tick { padding-left: 40px; background: url(/images/tick.gif) 0 50% no-repeat; } + .buttons-wrap { text-align: center; } + .buttons, .edition-buttons { overflow: hidden; padding-top: 5px; margin: auto; width: 280px; } + .edition-buttons { width: 350px; } + .big-download, .stdl7-download { margin: 0 auto 15px auto; } + .long blockquote { font-size: 12px; } + .comparison-pair { + border-spacing: 0px; border: 1px solid #000; border-collapse: collapse; + td, th { border: 1px solid #000; padding: 4px 6px; width: 50%; } + th { background: #332618; color: #fff; } + } +} +.releases h3 { margin-top: 25px; } +.releases hr { margin: 15px 0; } +.changes-since { font-style: italic; } + +.features-page { + h3 { font-size: 16px; color: #456b12 !important; padding-top: 10px; margin-top: 35px; border-top: 1px solid #d0efa6; } + img { margin: 12px auto 0; } + .image { text-align: center; } +} + +.order-content { + h1 { font-size: 36px; font-weight: normal; letter-spacing: -1px; margin: 15px 0 0; } + .section-info { margin: 0 0 30px; font-size: 14px; } + .licenses-info { + width: 100%; overflow: hidden; padding: 20px 0 0; margin: 25px 0; border-top: 1px dotted #a8906b; + .block { float: left; width: (@page_width - 60) / 3; margin-right: 30px; } + .last { margin-right: 0; } + h3 { margin-bottom: 5px; font-size: 14px; } + } + .panel { background: #fff; border: 2px solid #ecf7fe; } + table { + width: 100%; border-spacing: 0; border: 1px solid #9bc8e8; border-collapse: collapse; margin: 0; + td, th { border: 1px solid #9bc8e8; } + th { background: #ecf7fe; padding: 4px 6px; } + td { padding: 12px 8px; } + .price { width: 80px; text-align: right; font-weight: bold; } + .addon { width: 240px; } + .buy { width: 70px; padding: 0; } + } + .componentsource .block { margin-top: 5px; } +} + +.support-content { + overflow: hidden; width: 100%; + h1 { margin: 15px 0; font-size: 36px; } + .contact-form-ct { position: relative; width: 452px; left: 50%; margin-top: 30px; margin-left: -230px; background: #fff; border: 2px solid #ecdfb9; } + .contact-form-wrap { padding: 20px 30px; border: 1px solid #ac995e; } + p { margin: 20px 0; } + hr { margin: 30px 0; } + .note { font-size: 12px; } + .left { width: 596px; } + .right { width: 274px; padding-top: 10px; } + .reference a, .guide a, .documentation a, .stackoverflow a { padding-left: 30px; margin: 0; padding: 6px 0 6px 30px; background: 0 50% no-repeat; } + .reference a { background-image: url(/images/icons/book.gif);} + .guide a { background-image: url(/images/icons/info.gif); } + .documentation a { background-image: url(/images/icons/documentation.gif); } + .stackoverflow a { background-image: url(/images/icons/stackoverflow.gif); } +} + +.uninstall-content { + .contact-form-ct { width: 460px !important; } + .emailsafe { margin-top: 12px; } +} + +.download-content { + padding-bottom: 60px; + h2 { margin: 15px 0; font-size: 36px; font-weight: normal; } + .section-info { font-size: 16px; margin: 30px 0; } + p { margin: 15px 0; } + hr { margin: 60px 0; } + .newsletter-ct { background: #fff; border: 2px solid #ecdfb9; } + .newsletter { + padding: 15px 0 20px 35px; border: 1px solid #ac995e; height: 80px; overflow: hidden; + h3 { margin-bottom: 15px; font-size: 20px; } + .field { float: left; margin-right: 30px; } + label { display: block; } + .email, .name { font-size: 13px; padding: 4px 5px; } + .email { padding-left: 24px; width: 166px; } + .name { background-image: none; width: 186px; } + .subscribe, .subscribing { margin-top: 10px; } + .subscribing { float: left; } + } +} + +.about-content { + h1 { font-size: 40px; font-weight: normal; letter-spacing: -1px; margin: 15px 0 10px; } + h2 { font-size: 34px; font-weight: normal; letter-spacing: -1px; margin: 40px 0 15px; } + h3 { font-size: 28px; font-weight: normal; letter-spacing: -1px; margin: 60px 0 15px; } + .team, .customers, .csauthor { margin-top: 40px; } + .placing { padding-left: 58px; } + .about-ct { background: url(/images/blv-users.gif) no-repeat 98% 50%; } + .dextronet { background: url(/images/icons/dextronet-bird-gray.jpg) no-repeat 0 0; } + .dextronet h2 { padding-top: 5px; } + .cowl { background: url(/images/icons/component-owl-gray.jpg) no-repeat 0 0; } + .cowl h2 { padding-top: 10px; margin-top: 45px; } + .quote { font-family: georgia, serif; font-size: 21px; margin: 22px 0 28px; } + .quote b { font-weight: normal; font-size: 120px; display: block; float: left; line-height: 95px; + color: #d3cccc; margin: 0 7px 0 0; } + p { margin: 15px 0 15px 0; width: 630px; text-align: justify; } + .with-image { + overflow: auto; + img { float: left; display: block; margin: 0 10px 0 0; } + } + .libor, .cs, .hq { overflow: hidden; } + .libor img, .cs img, .hq img { float: left; margin: 0 15px 5px 0; } + .libor { margin: 30px 0 30px 60px; width: 500px; } + .libor em { display: block; padding-top: 14px; } + .libor img { margin-right: 10px; } + .hq { + margin: 60px 0 0 -7px; padding: 7px 0 7px 7px; width: 410px; text-align: left; + img { -moz-box-shadow: 0 0 7px #aaa; -webkit-box-shadow: 0 0 7px #aaa; + box-shadow: 0 0 7px #aaa; border: 2px solid #fff; } + } + .logo-inset { vertical-align: middle; margin: 0 3px; margin-top: -3px; } + .testimonial-wide-ct { width: 630px; margin: 50px 0; border: 2px solid #ffeecf; border-left: none; border-right: none; } + .testimonial-wide { margin: 0; } + .contact-info-ct { background: url(/images/europe.jpg) right 150px no-repeat; width: 650px; padding-bottom: 20px; } + .contact { border-left: 2px solid #a8906b; padding: 5px 0 5px 10px; line-height: 20px; background: #fff3de; } +} +#cscontact-ct { width: 630px; margin: 30px 0 0; } +#cscontact { + border: 1px solid #c1c1c1; background: #fafafa; padding: 10px; font-size: 12px; + border-top: none; clear: both; + table { width: 100%; } + tr { vertical-align: top; } + .address { width: 33%; } + .hours { width: 33%; } +} +#cscontact-nav { + border-bottom: 1px solid #c1c1c1; padding-bottom: 30px; + li { display: inline; } + a { float: left; padding: 8px 10px 6px; text-transform: uppercase; text-decoration: none; + font-weight: bold; font-size: 12px; color: #545454; line-height: 15px; } + .current { border: 1px solid #c1c1c1; border-bottom: 1px solid #fafafa; background: #fafafa; color: #000; } +} + +.subscribe-content { + padding: 0 5px; overflow: hidden; + p { font-size: 13px; } + h2 { margin-bottom: 0 !important; } + fieldset { padding: 5px 10px 10px; margin-top: 5px; } + legend { font-weight: bold; text-transform: uppercase; padding: 0 5px; } + .newsletter-box { + padding: 10px 0 15px 15px; margin-top: 10px; background: #fff; border: 1px solid #e7c483; + .field { float: left; margin-right: 20px; } + label { display: block; } + .email, .name { font-size: 13px; padding: 4px 5px; } + .email { padding-left: 24px; width: 136px; } + .name { background-image: none; width: 156px; } + .subscribe { margin-top: 10px; } + .subscribing { float: left; margin-top: 15px; } + } + .trouble { margin-top: 10px; } +} + +.fancybox-highlight { } + +.sitemap-content { + h1 { margin: 15px 0; } + h2 { margin: 25px 0 5px; } + .top { margin: 0 0 30px 15px; } + ul ul { margin-top: 3px; } +} + +.legal-content { + font-size: 14px; + h1 { margin: 15px 0; } + h2 { margin: 15px 0 10px; } + p { padding: 0 0 20px; } + ul.common { padding-bottom: 20px; } +} + +.service-content { + h1 { margin: 15px 0; } + h2 { margin: 15px 0 10px; } + h3 { margin: 0 0 5px; } + p { padding: 0 0 20px; } + table { + border-spacing: 0; border: none; margin-top: 20px; + th { text-align: left; } + th, td { padding: 5px 50px 5px 0; border-bottom: 1px solid #eadbc4; } + .country { font-weight: bold; } + .flag { padding-right: 5px; } + } + .blocks { overflow: hidden; width: 100%; margin: 40px 0 0; } + .block { width: 250px; margin-right: 40px; float: left; } +} + +.comics-wrap { text-align: center; } +.comics { display: inline-block; position: relative; margin: 0 auto; } + +.comicshd { text-indent: -9999em; background: url(/images/web-comics.gif) 50% 0 no-repeat; + margin: 28px 0 10px; height: 27px; } +.comics-bubble-ct { height: 66px; background: url(/images/owl-small.gif) 0 0 no-repeat; + padding: 24px 0 0 52px; margin: 10px 0 0 30px; } +.comics-bubble { line-height: 32px; height: 32px; font-size: 16px; padding-left: 30px; + background: url(/images/bubble-small.gif) 0 0 no-repeat; width: 745px; white-space: nowrap; } +.comics-bubble p { background: #e0f6ff url(/images/bubble-small.gif) 100% -32px no-repeat; + padding-right: 10px; } + +.comics-navigation { margin: 0 auto; border: 2px solid #1a1a1a; border-radius: 14px; width: 400px; overflow: hidden; + padding: 5px; margin-bottom: 28px; } +.comics-day { float: left; width: 324px; text-align: center; font-size: 20px; } +.comics-np { padding-left: 38px; } +.comics-nn { padding-right: 38px; } + +.comics-next, .comics-prev { display: block; width: 38px; height: 25px; text-indent: -9999em; } +.comics-next { background: url(/images/comics-next.gif) 0 0 no-repeat; float: right; } +.comics-prev { background: url(/images/comics-prev.gif) 0 0 no-repeat; float: left; } +.comics-next:hover, .comics-prev:hover { background-position: 0 -25px; } + +.comics-social-ct { text-align: center; margin: 28px 0; } +.comics-social { border: 2px solid #1a1a1a; border-radius: 14px; + padding: 8px; overflow: hidden; display: inline-block; text-align: left; } + +.comics-rss { margin: 28px 0; text-align: center; } +.comics-rss a { padding: 6px 0 10px 40px; background: url(/images/RSS_32.png) 0 50% no-repeat; + font-weight: bold; } + +.comics-info { margin: 28px auto 20px; width: 700px; font-style: italic; font-size: 16px; + text-align: center; } + +.owl-flag { position: absolute; top: 0; left: 50%; margin-left: @page_width / 2 + 20; _display: none; } + +/* PAGE LAYOUT */ + +.d-iframe { background: none; text-align: left; } + +.d-page { position: relative; min-height: 100%; } +.d-placing { margin: 0 auto; text-align: left; width: @page_width; } + +.d-header { height: 47px; } +.d-logo { float: right; margin-top: 10px; } +.logoimg { margin-right: 5px; display: inline-block; } +.d-menu { + float: left; + li { float: left; position: relative; padding-right: 35px; } + .menu-item { display: block; position: relative; z-index: 99; padding: 12px 0 1px; color: #fff; text-decoration: none; } + .active .menu-item { border-bottom: 1px solid #bb983b; padding-bottom: 2px; } + .menu-item:hover { border-bottom: 2px solid #bb983b; padding-bottom: 1px; color: #fff; } + .featured { color: #fecb33 !important; } + .dropdown { + position: absolute; top: 30px; left: -20px; width: 250px; + .outer { position: relative; z-index: 97; padding-left: 6px; background: url(/images/dropdown-o.png) 0 100% no-repeat; } + .shadowbox { position: relative; z-index: 98; padding: 0 8px 8px 0; background: url(/images/dropdown-s.png) 100% 100% no-repeat; } + .inner { position: relative; overflow: auto; height: 100%; z-index: 99; padding: 12px 14px; background: #362919; border: 1px solid #1c1410; border-top: none; } + a, a:hover { color: #fff; } + } +} + +.dropdown-submenu { + .inner { padding: 10px 0 0 !important; } + a { padding: 10px 14px; display: block; text-decoration: none; } + a:hover { background-color: #bb983b; } + li { padding: 0; margin: 0; } + img { display: block; float: left; margin: 4px 10px 0 0; } +} + +.dropdown { + .featured-item { font-size: 16px; font-weight: bold; } + .subline { display: block; font-size: 12px; color: #fff; padding-top: 3px; } + .dropdown-category { + background-color: #876234; color: #fff; font-weight: bold; padding: 5px 8px; + } +} + +.d-content-wrap { padding-bottom: 400px; } + +.d-footer { + position: absolute; bottom: 0; right: 0; width: 100%; padding-top: 25px; color: #fff; background: #3a2c18 url(/images/footer-bg.png) repeat-x; + font-size: 12px; + a { color: #fff; } + a:hover { color: #f5b458; } + .d-placing { overflow: hidden; } + .left { width: 540px; } + .right { width: 325px; } + hr { background-color: #fff; margin-top: 10px; } + .copy { font-size: 11px; padding: 0 0 13px 140px; background: url(/images/dextronet.gif) 0 12px no-repeat; } + .social { + padding: 10px 0 4px; + span { padding: 0 3px; } + } +} + +div.testimonial-intext { + text-align: center; + .testimonial-wrap { width: 500px; margin: 30px auto 0; padding-top: 10px; background: url(/images/testimonial-intext.gif) 0 0 no-repeat; } + blockquote { width: 475px; margin: 0 auto; padding: 0 10px 4px 15px; text-align: left; text-indent: -5px; font-size: 13px; font-family: georgia, serif; + background: #f7eee8; } + strong { width: 150px; display: block; font-weight: normal; margin: 0 auto; text-align: left; padding: 20px 0 0 350px; color: #825900; font-size: 11px; + background: url(/images/testimonial-intext.gif) -500px 0 no-repeat; } + .featured { + blockquote { font-size: 16px; } + strong { font-size: 12px; } + } +} +div.testimonial-intext { + margin: 20px 0 0; + .testimonial-wrap { margin-top: 0; } + strong { margin-bottom: 6px; } +} + +.latest-posts { + height: 255px; overflow: hidden; + .latest_from_blog a { display: block; width: 279px; height: 18px; background: url(/images/heading-latest_from_blog.gif) no-repeat; } + h4 { margin: 13px 0 0; padding: 0 0 3px; font-size: 13px; color: #ffd191; } + h4 a { color: #ffd191; } + h4 a:hover { color: #fcead0; } + .post-info { font-size: 11px; color: #a38952; text-transform: uppercase; font-weight: bold; } +} +.other-posts { + text-align: right; + a { color: #fcead0; } + a:hover { color: #f5b458; } +} + +.section-heading { margin: 15px 0; font-size: 36px; } + +.resources-content { + padding-bottom: 30px; + h1 { margin-top: 30px; } + h2 { margin: 10px 0 0 !important; font-weight: normal; } + h1 { font-size: 23px; } + h2 { font-size: 17px; } + .post-info { margin-bottom: 0; color: #a38952; font-size: 11px; } + .small-button-ct { overflow: hidden; width: 100%; margin: 13px 0 0; } + .small-button { display: block; float: left; } + .featured-articles { + h2 { font-weight: bold; } + } +} + +.article-content { + overflow: hidden; height: 100%; padding-bottom: 30px; + .left { width: 650px; } + .right { width: 228px; margin-top: 15px; } + .title { margin-top: 25px; font-size: 23px; } + .sidebar { + padding: 15px 0 0; background: url(/images/lower-side-bg.jpg) 0 0 no-repeat; + h4 { font-size: 18px; color: #4783bf; margin: 0 0 10px; } + .text { + margin: 10px 0; + p { margin: 0 0 8px; } + h1, h2, h3, h4 { margin: 8px 0 3px; font-size: 12px; font-family: 'trebuchet ms', sans-serif; } + } + .buttonz { text-align: center; margin-top: 10px; } + .buttonz a { margin: 0 auto 10px; float: none; } + .download { + text-align: center; font-size: 14px; font-weight: bold; margin-top: 10px; + a { background: url(/images/icons/arrow-270-medium.gif) 0 2px no-repeat; padding-left: 16px; } + } + } + .content { + margin-top: 20px; font-size: 14px; color: #222; + p { margin: 0 0 20px; } + h1, h2, h3 { color: #000; font-family: 'trebuchet ms', sans-serif; padding: 0 0 5px; margin-top: 30px; } + h1 { font-size: 18px; } + h2 { font-size: 16px; margin-top: 20px; } + h3 { font-size: 14px; margin-top: 20px; } + } +} + +.dextronet-feeds { margin: 15px 0 0; padding-bottom: 12px; border-bottom: 1px dotted #a8906b; } +.dextronet-feeds .links { margin: 0 !important; list-style: none; padding: 0 !important; } +.dextronet-feeds .links li { margin: 0 !important; } +.dextronet-feeds .links a { padding: 7px 0 10px 37px; display: block; } +.dextronet-feeds .links .rss { background: url(/images/icons/rss-32.png) 0 50% no-repeat; } +.dextronet-feeds .links .twitter { background: url(/images/icons/twitter-32.png) 0 50% no-repeat; } +.dextronet-feeds .links .facebook { background: url(/images/icons/facebook-32.png) 0 50% no-repeat; } + +.news { + .links { + width: 100%; overflow: hidden; margin-bottom: 10px; + li { float: left; margin-right: 10px; } + a { display: block; padding: 6px 8px 6px 26px; text-decoration: none; background: #49371e 7px 50% no-repeat; } + .rss { background-image: url(/images/rss.gif); } + .twitter { background-image: url(/images/twitter.gif); } + } + h4, h4 a { color: #e4b16a; font-size: 13px; } + h4 a:hover { color: #fcead0; } + .news-item { width: 100%; overflow: hidden; margin-bottom: 3px; padding-bottom: 3px; border-bottom: 1px dotted #644c2a; } + .last-item { border-bottom: none; } + .date { float: left; width: 20px; text-align: right; padding: 3px 6px; color: #a38952; } + .date span { display: block; } + .message { padding: 3px 0; color: #fcead0; } +} + +.comics-blv-wrap { text-align: center; } +.comics-blv { margin: 60px auto 30px; padding: 7px 0; border: 1px solid #ecdfb9; border-left: none; border-right: none; width: 100%; overflow: hidden; font-size: 20px; + background: #fffcf3; font-family: "trebuchet ms", arial, sans-serif; width: 800px; text-align: left; } +.comics-blv .ss { float: left; margin: 0 8px 0 8px; border: none; } +.comics-blv .inside { padding-top: 8px; } +.comics-blv .text { padding-bottom: 8px; } + + +.comparison +{ + border-collapse: collapse; + border-spacing: 0; + font-size: small; + text-align: center; + width: 100%; + margin-bottom: 50px; +} +.comparison td, .comparison th { padding: 4px 6px; border: 1px solid #000; } +.comparison-blank { border-top: none !important; border-left: none !important; text-align: left; padding-left: 0 !important; } +.comparison-blank h2 { margin: 0; padding: 0; } + +.comparison-line-even +{ + background-color: #F0F0F0; + text-align: left; +} + +.comparison-line-odd +{ + text-align: left; +} + +.comparison-yes +{ + background-color: #CCFFCC; + color: #008000; + text-align: center; +} + +.comparison-no +{ + background-color: #FFCCCC; + color: #800000; + text-align: center; +} + +.comparison-other +{ + width: 90px; + background: #332618; color: #fff; +} \ No newline at end of file diff --git a/app/stylesheets/simple.less b/app/stylesheets/simple.less new file mode 100644 index 0000000..6546656 --- /dev/null +++ b/app/stylesheets/simple.less @@ -0,0 +1,74 @@ +@standard_fonts: arial, sans-serif; + +body { font-family: @standard_fonts; background: #fefefe; } +.placed { width: 800px; margin: auto; } + +h1 { text-align: center; margin: 25px 0 0; line-height: 1; font-size: 38px; } +h2 { font-size: 22px; margin: 40px 0 17px; } +h3 { font-size: 18px; font-weight: normal !important; margin-top: 5px; } +h4 { font-size: 16px; margin-bottom: 5px; font-weight: normal !important; } + +p { text-align: left; margin: 20px 0; } + +.owl { position: absolute; top: 5px; left: 50%; margin-left: -455px; } + +.quote { + margin-top: 30px; background: url(/images/simple/lquote.gif) 0 0 no-repeat; text-align: left; + blockquote { padding: 5px 0 0 25px; font-size: 16px; font-family: georgia, serif; color: #074463; font-style: italic; + background: url(/images/simple/rquote.gif) 100% 70% no-repeat; } + em { display: block; text-align: right; color: #000; font-family: @standard_fonts; padding: 10px 60px 0 0; font-size: 12px; } +} + +.buttons { padding: 20px 0; margin-top: 30px; overflow: hidden; width: 100%; border: 1px solid #b4e9fd; border-left: none; border-right: none; background: #f6fcff; } +.logos { display: block; float: left; margin: 13px 0 0 28px; } + +.standard-download { + float: left; width: 214px; height: 62px; margin: 0 15px 0 58px; background: url(/images/button-download.gif) no-repeat; + :hover { background-position: 0 -62px; } +} +.pricing-buy { + float: left; width: 193px; height: 44px; margin-top: 10px; background: url(/images/button-pricing.gif) no-repeat; + :hover { background-position: 0 -44px; } +} + +.moreinfo { + margin-top: 25px; + input { vertical-align: middle; } + .email { margin-right: 5px; } +} +.subscribing { display: inline; } + +.features { overflow: hidden; } +.list { + margin-top: 8px; + li { text-align: left; padding: 5px 0 5px 23px; background: url(/images/icons/tick.gif) 0 5px no-repeat; } +} +.floated { float: left; width: 540px; } +.screenshots { + a { display: block; float: right; margin-bottom: 7px; } +} + +.contact-form-ct { + margin: 40px 0 0; text-align: center; + .airmail { margin: auto; width: 100%; font-size: 16px; text-align: center; background: url(/images/airmail.gif) 0 50% repeat-x; } + .airmail strong { padding: 0 5px; background: #fff; } +} +.contact-form { + margin: 10px auto 0; width: 560px; + ul { float: left; margin-right: 20px; } + .rside { margin-right: 0 !important; } + fieldset { padding: 10px 0 0 0; } + legend { padding: 0 5px; text-align: center; } + .message { width: 330px; height: 72px; } + .submit { margin-right: 24px; } +} + +.d-page { position: relative; min-height: 100%; } +.d-border { position: relative; z-index: 2; height: 12px; background: url(/images/simple/bg.gif) repeat-x; } +.d-content-wrap { padding-bottom: 70px; } +.d-footer { + position: absolute; bottom: 0; right: 0; width: 100%; font-size: 11px; height: 39px; color: #d3bc91; background: url(/images/simple/footer-bg.gif) repeat-x; + a { color: #d3bc91; } + a:hover { color: #fff; } + .d-placing { overflow: hidden; text-align: left; margin: auto; width: 800px; padding-top: 15px; } +} \ No newline at end of file diff --git a/app/views/about/_draft.html.erb b/app/views/about/_draft.html.erb new file mode 100644 index 0000000..88b6cb0 --- /dev/null +++ b/app/views/about/_draft.html.erb @@ -0,0 +1,250 @@ +

About Us

+ +
Have you ever wondered why some software immediately strikes you
+ as polished and professional, and looks and feels just great?
+ So did we. Component Owl is the result of our journey.
+ +

Component Owl is part of the <%= link_to image_tag('dextronet-small.gif', :alt => "Dextronet.com", :class => "logo-inset"), Settings.dextronet_url %> network.

+ +
+
+

About Dextronet

+ +

Dextronet has been founded in 2004 with the intention to develop, sell and support software + with great design that makes your life better. To put it simply: We love creating software + that you will love to use.

+ +

In the <%= years_since_founded %> years that Dextronet has existed, we have been growing + and expanding our business organically and responsibly, and attained substantial steady growth + each year. We are here to stay.

+ +

Our flagship and most popular product is <%= link_to "Swift To-Do List", Settings.stdl_url %> + (developed in .NET). With over 500.000 downloads and paying customers in 93 countries, + it is the number one task and notes organizer for Windows.

+ +

Better ListView component is the core part of Swift To-Do List, and as such, tens + of thousands users work with it every day.

+
+ +
+

About Component Owl

+ +

ComponentOwl.com was founded as a Dextronet.com spinoff to commercially release Better ListView + and other software components originally developed for our in-house purposes.

+ +

Our goal is to provide complete, light-weight, flexible, intuitive to use and reliable + components and controls for Microsoft .NET with native look and feel.

+ +

Soon after release, Better ListView has started to receive favorable reviews and praise + from developers. All our <%= link_to "development effort", "http://www.componentowl.com/better-listview/releases?since=1.40" %> + is based on the feedback of our customers.

+ +
+
+
“The [Better ListView] control is very easy and intuitive to use and + is well documented.” + – <%= link_to "DevProConnections.com Review", "http://www.devproconnections.com/article/product-review/review-componentowl-s-better-listview" %>
+
+
+
+
+ +
+

Our Team

+ +

Our growing team has over 50+ years of combined experience with development of rich-client + desktop Windows software and components.

+ +

+ <%= image_tag('libor.jpg', :alt => 'Libor Tinka - lead developer') %> + Libor Tinka, Better ListView lead developer, has been programming since 7 years old on ZX Spectrum, + and has enormous attention for detail. His interests include programming, quantum physics, advanced + mathematics, digital imaging (algorithms, HDR and panoramic photography), and green Japanese tea. +

+ +

Our Customers

+ +

Since releasing Better ListView, numerous developers and companies have started utilizing + Better ListView in their projects, to save money, development time, and to impress their customers.

+ +

Our customers represent a rich spectrum of businesses and organizations, including:

+
    +
  • <%= link_to "Kingston Technology", "http://www.kingston.com/" %>
  • +
  • <%= link_to "DevScope", "http://www.devscope.net/" %>
  • +
  • <%= link_to "Digi Link Limited", "http://www.digi-link.com/" %>
  • +
  • <%= link_to "KingBill GmbH", "http://www.kingbill.net/" %>
  • +
  • <%= link_to "Hydro-Québec", "http://www.hydroquebec.com" %>
  • +
  • <%= link_to "LCRA Energy Water Community Services", "http://www.lcra.org/" %>
  • +
  • <%= link_to "K-Software", "http://www.ksoftware.net/" %>
  • +
  • <%= link_to "ImageWare Systems, Inc.", "http://www.iwsinc.com/" %>
  • +
  • <%= link_to "Interdata srl", "http://www.interdata.it" %>
  • +
  • <%= link_to "OfficeDoxs Software, Inc.", "http://www.officedoxs.com/" %>
  • +
  • <%= link_to "Magnet Forensics Inc.", "http://www.magnetforensics.com/" %>
  • +
  • Qextron Inc.
  • +
  • Telephone Directory of Texas, Inc.
  • +
  • Industriinformation Sverige AB
  • +
  • Five O’Clock Software
  • +
  • Renegade Minds
  • +
  • Vastgoed24, Netherlands
  • +
  • ... and others, as well as individual developers all over the world.
  • +
+ +
+
+
It's an odd thing when you're inspired by a form component, but + Component Owl with their Better ListView has done it. Love its native feel.” +
– <%= link_to "Daniel Nolan", "http://sweetfancymuses.wordpress.com/" %>
+
+
+ +
+
+
“I greatly appreciate all of the help you have provided over the past week. The knowledge of your product and Support response time far exceeds that of the other software vendors I have worked with. I could not be more happy with the product and will be recommending Component Owl to any/all future development teams I am part of. Thank you again for being so attentive to our needs and providing excellent support! + +” +
– Brian S.
+
+
+ +

ComponentSource Professional Partner

+ +

+ <%= image_tag('component-source-professional-partner.gif', :alt => 'ComponentSource Professional Partner') %> + We are certified ComponentSource Professional Partner. ComponentSource is the world’s largest software component marketplace, and acts as our authorized value added reseller (VAR). +

+ You can <%= link_to "call ComponentSource", "http://www.componentowl.com/customer-service" %> + customer service free of charge from 49 countries. +

+ +

US and Canada: Toll Free: 888 850 9911 (Non-stop)

+

United Kingdom: Toll Free: 0800 581111 (Non-stop)

+ +
+ +
+
+ + + + + + +
+ ComponentSource
+ 30 Greyfriars Road
+ Reading
+ Berkshire
+ RG1 1PE
+ United Kingdom
+
+ Office hours:
+ 9:00am - 5:30pm BST & CEST
+
+ Tel: +44 118 958 1111
+ Fax: +44 118 958 9999
+
+ Languages:
+ English / French / German / Spanish / Italian +
+
+ + +
+
+ +

Association of Software Professionals Member

+ +

We’ve been proud members of Association of Software Professionals for over + <%= years_since_asp_member %> years now.

+ +

We also contribute to ASPects, the monthly magazine of Association of Software Professionals.

+ +

<%= image_tag('asp_logo-member.png', :alt => 'Association of Software Professionals') %>

+ +
+
+
“Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.” + – Göran Alfvén, Sweden
+
+
+ +

Microsoft Partner

+ +

<%= image_tag 'microsoft-partner.png', :alt => "Component Owl is a Microsoft Partner" %> We are part of the Microsoft Partner Network, which helps us strengthen our capabilities in delivering the best components for Microsoft Windows.

+ +
+

Our Contact Info

+ +

Contact us today directly with any of your questions, suggestions or comments: +
support (at) componentowl (dot) com

+ +

You can also use the <%= link_to "contact form", support_index_path %> in Support section. + We usually reply within 24 hours or sooner.

+ +

You can <%= link_to "follow us on twitter", "http://twitter.com/ComponentOwl" %> and subscribe + to our <%= link_to "RSS news feed", feeds_url(:format => :rss) %>.

+ +

+ <%= image_tag('brno.jpg', :alt => 'The City of Brno') %> + Our offices are based in Brno,
Czech Republic, European Union. +

+ Brno is the second largest city in Czech Republic, after the capital city Prague. +
It is a technological hub and home of two computer science universities and influential + software enterprises, including AVG and Red Hat.
+

+
+
\ No newline at end of file diff --git a/app/views/about/index.html.erb b/app/views/about/index.html.erb new file mode 100644 index 0000000..6ede408 --- /dev/null +++ b/app/views/about/index.html.erb @@ -0,0 +1,7 @@ +
<%= image_tag('owl-flag.gif', :alt => "Component Owl") %>
+
+ + <%= render :inline => @static_page.html %> + <%#= render :partial => "draft" %> + +
\ No newline at end of file diff --git a/app/views/articles/index.html.erb b/app/views/articles/index.html.erb new file mode 100644 index 0000000..087b791 --- /dev/null +++ b/app/views/articles/index.html.erb @@ -0,0 +1,18 @@ +
+ +
Articles for .NET developers
+ + + +
+ <% for article in @articles %> +

<%= link_to article.title, article %>

+ <% end %> +
+ +
\ No newline at end of file diff --git a/app/views/articles/show.html.erb b/app/views/articles/show.html.erb new file mode 100644 index 0000000..94672a0 --- /dev/null +++ b/app/views/articles/show.html.erb @@ -0,0 +1,46 @@ +
+ +
+ +
Articles for .NET developers
+ +

<%= @article.title %>

+ +
+ <%= render :inline => @article.content %> +
+ +
+ +
+ +
+ +
+ + + +
+ +
+ +<%= render :partial => "shared/screenshot_buttons", :object => featured_product %> \ No newline at end of file diff --git a/app/views/comics/index.rss.builder b/app/views/comics/index.rss.builder new file mode 100644 index 0000000..e000a3b --- /dev/null +++ b/app/views/comics/index.rss.builder @@ -0,0 +1,17 @@ +xml.instruct! :xml, :version => "1.0" +xml.rss :version => "2.0" do + xml.channel do + xml.title t('txt.rss.comics_title') + xml.description t('txt.rss.comics_description') + xml.link comics_url + + for comic in @comics + xml.item do + xml.title title(comic) + xml.description description(comic) + xml.pubDate comic.publish_on.to_s(:rfc822) + xml.link comic_url(comic) + end + end + end +end \ No newline at end of file diff --git a/app/views/comics/show.html.erb b/app/views/comics/show.html.erb new file mode 100644 index 0000000..aab5469 --- /dev/null +++ b/app/views/comics/show.html.erb @@ -0,0 +1,72 @@ +<% @meta_title = title %> +<% @meta_description = description %> +<% content_for :header do %> + + + + + + + +<% end %> +
+ +
+

Component Owl cares about fun too. Behold, the truth-inspired web + comics for puny human developers!

+
+ +
+ <%= link_to "Previous", @previous_comic, :class => "comics-prev" if @previous_comic %> +

<%= "comics-nn" unless @next_comic %>"> + <%= l(@comic.publish_on, :format => :cute_with_dayname) %>

+ <%= link_to "Next", @next_comic, :class => "comics-next" if @next_comic %> +
+ +
+
+ <%= image_tag(@comic.image.url(:web)) %> +
+
+ +
+
+
+ + + + + + + +
+
+ +
<%= link_to "Subscribe to Comics RSS", comics_path(:format => :rss) %>
+ +

+ All these comics strips are drawn by our lead Better ListView developer + Libor Tinka. He is either restlessly crafting the perfect code, drinking + green Japanese tea, or drawing hilarious comics. +

+ If you like this comics, please share it with your friends! +

+ +
+
+ <%= link_to(image_tag('overview.gif', :alt => "Better ListView", :class => "ss"), featured_product) %> +
+
Better ListView: .NET ListView control for WinForms (C#, VB.NET)
+ <%= download_link_to "Download", featured_product, :class => "dbtn" %> + <%= link_to("More Info", featured_product, :class => "dbtn") %> +
+
+
+ + + + + + + +
\ No newline at end of file diff --git a/app/views/download/show.html.erb b/app/views/download/show.html.erb new file mode 100644 index 0000000..aef678b --- /dev/null +++ b/app/views/download/show.html.erb @@ -0,0 +1,37 @@ +
+ +

<%= t('txt.download_page.thanks', :product => strip_version(@product.name), :version => @product.current_version) %>

+ + <%= hidden_field_tag "download_url", @download_url %> + + + +

<%= t('txt.download_page.info') %>

+ <% form_tag @download_url do -%> + <%= submit_button t('txt.common.start_download'), :btn_class => "dbtn-hilight" %> + <% end -%> + +
+ + + +
\ No newline at end of file diff --git a/app/views/error/404.html.erb b/app/views/error/404.html.erb new file mode 100644 index 0000000..d4cf357 --- /dev/null +++ b/app/views/error/404.html.erb @@ -0,0 +1 @@ +<%= render :partial => "error/not_found" %> \ No newline at end of file diff --git a/app/views/error/501.html.erb b/app/views/error/501.html.erb new file mode 100644 index 0000000..d4cf357 --- /dev/null +++ b/app/views/error/501.html.erb @@ -0,0 +1 @@ +<%= render :partial => "error/not_found" %> \ No newline at end of file diff --git a/app/views/error/_not_found.html.erb b/app/views/error/_not_found.html.erb new file mode 100644 index 0000000..54b6405 --- /dev/null +++ b/app/views/error/_not_found.html.erb @@ -0,0 +1,15 @@ +
+ +
<%= image_tag("heading-404.gif", :alt => t("txt.alt.not_found")) %>
+ +

<%= t('txt.not_found.not_found') %>

+ +

<%= t('txt.not_found.visit_instead', :url => root_url) %>

+ +
    + <% for product in all_products %> +
  • <%= link_to(product.name, product) %>
  • + <% end %> +
+ +
\ No newline at end of file diff --git a/app/views/faqs/search.html.erb b/app/views/faqs/search.html.erb new file mode 100644 index 0000000..3a676c0 --- /dev/null +++ b/app/views/faqs/search.html.erb @@ -0,0 +1,34 @@ +
+ +
<%= image_tag("heading-support.gif", :alt => t("txt.alt.support")) %>
+ + <%= breadcrumb(link_to(t('txt.support.help_support'), "/support"), t('txt.faqs.search_breadcrumb')) %> + +

<%= t("txt.faqs.search_results") %>

+ + + +
\ No newline at end of file diff --git a/app/views/faqs/show.html.erb b/app/views/faqs/show.html.erb new file mode 100644 index 0000000..ec3cb2f --- /dev/null +++ b/app/views/faqs/show.html.erb @@ -0,0 +1,70 @@ +
+ +
<%= image_tag("heading-support.gif", :alt => t("txt.alt.support")) %>
+ + <%= breadcrumb(link_to(t('txt.support.help_support'), "/support"), (@product ? "#{@product.name} #{t('txt.faqs.faqs')}" : t("txt.faqs.general_faqs"))) %> + + <% if @product %> +

<%= @product.name %> <%= t("txt.faqs.faqs") %>

+ <% else %> +

<%= t("txt.faqs.general_faqs") %>

+ <% end %> + +
+ + + + + +
+ +
+

<%= t("txt.faqs.other_faqs") %>

+ + +

<%= t("txt.faqs.cant_find") %>

+

<%= t("txt.faqs.try_search") %>

+

<%= t("txt.faqs.contact_us") %>

+ +
+

<%= featured_product.name %>

+ <%= screenshot_link(featured_product.screenshot) %> +

<%= featured_product.short_description %>

+
+ <%= download_link(featured_product) %> + <%= buy_professional(featured_product) %> + <%= buy_standard(featured_product) %> +
+
+
+ +
\ No newline at end of file diff --git a/app/views/feeds/index.rss.builder b/app/views/feeds/index.rss.builder new file mode 100644 index 0000000..2e7941b --- /dev/null +++ b/app/views/feeds/index.rss.builder @@ -0,0 +1,29 @@ +xml.instruct! :xml, :version => "1.0" +xml.rss :version => "2.0" do + xml.channel do + xml.title t('txt.rss.title') + xml.description t('txt.rss.description') + xml.link feeds_url + + for post in @posts + xml.item do + if post.is_a? Release + link = releases_page_url(post.product, post.version) + xml.title t('txt.home.new_release', :product => strip_version(post.product.name), :version => post.version) + if post.has_changelog? + xml.description t('txt.rss.release_description', :whats_new_url => link, :download_url => download_url(post.product)) + else + xml.description link_to(t('txt.rss.download_latest_release'), download_url(post.product)) + end + xml.pubDate post.date.to_datetime.to_s(:rfc822) + xml.link link + else + xml.title post.title + xml.description post.intro + xml.pubDate post.date.to_s(:rfc822) + xml.link post.url + end + end + end + end +end \ No newline at end of file diff --git a/app/views/home/_buttons_logos.html.erb b/app/views/home/_buttons_logos.html.erb new file mode 100644 index 0000000..e58b24f --- /dev/null +++ b/app/views/home/_buttons_logos.html.erb @@ -0,0 +1,10 @@ +
+ <%= download_link(featured_product, "standard", t('txt.home.free_download')) %> + <%= more_link_button(featured_product) %> + <%= buy_link(featured_product) %> +
+ <%= image_tag('logo-dotnet.gif', :alt => "Microsoft .NET") %> + <%= image_tag('logo-vs.gif', :alt => "Microsoft Visual Studio") %> + <%= image_tag('logo-win.gif', :alt => "Microsoft Windows") %> +
+
\ No newline at end of file diff --git a/app/views/home/_draft.html.erb b/app/views/home/_draft.html.erb new file mode 100644 index 0000000..6c83f40 --- /dev/null +++ b/app/views/home/_draft.html.erb @@ -0,0 +1,125 @@ +

Better ListView is compatible with:

+ +
+
    + +
  • Visual Studio 2005, 2008, 2010, and newer.
  • +
  • C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
  • +
+ +
    + +
  • .NET 2, .NET 3, .NET 3.5, .NET 4, and newer.
  • +
  • Windows 2000, XP, 2003, Vista, 7, and newer, both 32-bit and 64-bit.
  • +
+
+ +
+ +
+

Better ListView advantages:

+ +
    +
  • Single small DLL file (less than 250kB when compressed).
  • +
  • Easy deployment (xcopy). No dependencies. No installation.
  • +
  • Royalty-free distribution. No runtime licensing.
  • +
  • Written from scratch in pure managed code.
  • +
  • Lightning fast, optimized for 100.000+ items.
  • +
  • Minimum learning needed. Very similar to regular .NET ListView control.
  • +
  • User-friendly and developer-friendly.
  • +
  • No limits of the regular Microsoft .NET ListView control bundled with Visual Studio!
  • +
  • Tested by thousands of users world-wide.
  • +
  • Guaranteed continued support and development. We use Better ListView ourselves in our + popular and successful desktop products, like + <%= link_to 'Swift To-Do List', 'http://www.dextronet.com/swift-to-do-list-software', :class => "nowrap" %>.
  • +
  • Well documented, intuitive method/properties names.
  • +
  • Always looks great. Always fully uses the current Windows theme, including Aero support.
  • +
  • Enterprise source code licenses available.
  • +
  • Well documented.
  • +
  • Fast 24-hour or faster support.
  • +
+
+ +
+

BetterListView extra features:

+ +

Better ListView has hundreds of extra features, compared to the regular .NET ListView control. + Plus, it removes all its limitations and bugs. Some of the most notable extra features include:

+ +
    +
  • Hierarchical items. Supports sub-items like in the tree view control.
  • +
  • Thumbnails view.
  • +
  • Serialization – XML and Binary
  • +
  • Save/load Better ListView content into XML or binary, string or file, in just 1 line of code.
  • +
  • Inbuilt drag & drop reordering (with insertion mark indicator).
  • +
  • Sub-item images
  • +
  • Double-buffered and flicker-free.
  • +
  • Highly customizable and flexible.
  • +
  • Multi-column sorting.
  • +
  • Inbuilt sorting (zero code needed).
  • +
  • Checkboxes in all views, 3-state support
  • +
  • Better grouping – preserves item order, customizable group headers look and behavior, + collapsible, image support, context menu support, focusable, etc.
  • +
  • Embedded editing controls, support for custom controls.
  • +
  • Many other useful features - <%= link_to 'see more Better ListView features', featured_product %>.
  • +
+
+
+ +
+
“Better List View is awesome.” – Daniel N.
+
+ +
+
+

Why is Better ListView the best ListView
replacement component for .NET (C#, VB)?

+ +

To put it simply, there is nothing like Better ListView out there. Nothing.

+ +

Better ListView has been designed as a component that can easily replace the original + ListView control supplied with .NET.

+ +

There is virtually no learning needed. It’s just intuitive.

+ +

Better ListView looks native and always fully utilizes the current system theme (so there is + no weird inconsistent look), and it also behaves exactly like it should. We’ve modeled it after + the original list view component and the list view used in Windows Explorer – everyone already + knows how to use it. It fully leverages the previous user knowledge.

+ +

We put extreme attention to details. All the little quirks and nuances that drive us crazy when + it comes to components of many smaller vendors are resolved in Better ListView. You will be + amazed how flexible and customizable it is, and how great it feels to use it. The users of your + application will feel right at home.

+ +

And most importantly, Better ListView is packed full of great features.

+ +

If you are wondering why we created Better ListView, you can read + <%= link_to 'our story', story_path(featured_product) %>.

+ +

And by the way, Better ListView comes with awesome samples gallery. Download and install + the trial package right now and see for yourself what Better ListView can do:

+
+ +
+
Better ListView really is better - it kills the standard!
+ Mitchell V. +
+ +
+
Better ListView really is better - it kills the standard .NET ListView in both + performance and flexibility. I'll never use anything else!
+ Mitchell V. +
+ +
+
I'll never use anything else!
+ Mitchell V. +
+ +
+
Better ListView really is better - it kills the standard .NET ListView in both + performance and flexibility. I'll never use anything else!
+ Mitchell V. +
+ +
\ No newline at end of file diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb new file mode 100644 index 0000000..19584eb --- /dev/null +++ b/app/views/home/index.html.erb @@ -0,0 +1,23 @@ +
+ +

<%= featured_product.featured_phrase.title %>

+

<%= render :inline => featured_product.featured_phrase %>

+

<%= featured_product.description('featured-subphrase') %>

+ +
+ <%= render :partial => "buttons_logos", :locals => { :layout_type => "vertical" } %> + +
+ +
+ + <%= render :inline => @static_page.html %> + <%#= render :partial => "draft" %> + +
+ <%= render :partial => "buttons_logos", :locals => { :layout_type => "horizontal" } %> + + <%= render :partial => "shared/sharethis" %> + +
+
\ No newline at end of file diff --git a/app/views/landing_pages/_actions.html.erb b/app/views/landing_pages/_actions.html.erb new file mode 100644 index 0000000..ab0a7ce --- /dev/null +++ b/app/views/landing_pages/_actions.html.erb @@ -0,0 +1,16 @@ +
+ <%= download_link(featured_product, "standard", t('txt.home.free_download')) %> + <%= buy_link(featured_product, "pricing", t('txt.home.pricing')) %> + <%= image_tag("simple/logos.gif", :alt => ".NET, Visual Studio, Windows", :class => "logos") %> +
+ +
+

Send me more info please (Comparison table and more):

+ <% remote_form_for newsletter_subscription("landing-page"), :html => { :"data-progress" => "Sending...", :id => newsletter_form_id, + :onsubmit => "if (!validate_newsletter_form(this)) return false" } do |f| -%> + <%= f.hidden_field :subscription_location_id %> + <%= hidden_field_tag "form_id", "##{newsletter_form_id}" %> + <%= f.text_field :email, :value => t("txt.common.your_email"), :class => "email inline-label" %><%= subscribe :small, "Send", :btn_id => "send-info" %> + <%= subscription_lists('landing-page', @product) %> + <% end -%> +
\ No newline at end of file diff --git a/app/views/landing_pages/show.html.erb b/app/views/landing_pages/show.html.erb new file mode 100644 index 0000000..17c5369 --- /dev/null +++ b/app/views/landing_pages/show.html.erb @@ -0,0 +1,72 @@ +
+ +

Better ListView .NET control

+

The perfect alternative to the regular .NET List View control with more features.

+ +
+
You’ve might already discovered that the regular list view control included with .NET is far from perfect and other alternatives are either insufficient + or inflexible overkills. Better ListView is just what you are looking for. It is the ideal alternative to regular .NET list view control. + Learn why now.
– Jiri Novotny, Better ListView Project Leader
+
+ + <%= render :partial => "actions", :locals => { :newsletter_form_id => "new_subscription_a" } %> + +

Why is Better ListView the number one List View control for .NET?

+ +
    +
  • Written from scratch in pure managed C# code, does not inherit from regular list view
  • +
  • Easy to deploy, single tiny .DLL file (< 200kB when compressed), no dependencies
  • +
  • Very light-weight and lightning fast, optimized even for 100 000+ items
  • +
  • Developer friendly, minimal learning needed
  • +
  • Can easily replace regular list view control in your projects, only very small code changes are needed
  • +
  • Fixed all known issues related to regular .NET list view control
  • +
  • Double-buffered and flicker free
  • +
  • Customizable and flexible
  • +
  • Source code licenses available
  • +
  • Much more features (see below)
  • +
+ +

The unique thing about Better ListView is that we use it in our own consumer desktop applications (for example, + <%= link_to "Swift To-Do List", "http://www.dextronet.com/swift-to-do-list-software" %>). Better ListView is therefore thoroughly tested in the + real world by thousands of users. Also, this guarantees its continued development and support in the future. It is not uncommon to find + abandoned components by many small component vendors, but that will never happen with Better ListView.

+ +

The extra features of Better ListView include:

+ +
+ +
    +
  • Better Drag and Drop support (including insertion marker and auto-scroll)
  • +
  • 3 types of context menus supported (items, column headers, and empty area)
  • +
  • Inbuilt sorting (this can save you a lot of time)
  • +
  • Inbuilt multi-column sort support
  • +
  • Excellent images support, smooth resizing, column-headers images supported
  • +
  • Each sub-item can have its own image
  • +
  • Better checkboxes, can be used in all layouts, 3-state, improved behavior
  • +
  • XML Serialization
  • +
  • Embedded controls support
  • +
  • Sub-item label editing
  • +
  • More user friendly behavior similar to Windows Explorer list view
  • +
  • Advanced hit-test
  • +
  • Excellent layout, images and text formatting logic
  • +
  • And much more
  • +
+ +
+ <%= link_to(image_tag("simple/lp-ss1.png", :alt => "Better ListView"), screenshot_path(13), :class => "screenshot") %> + <%= link_to(image_tag("simple/lp-ss2.png", :alt => "Better ListView"), screenshot_path(2), :class => "screenshot") %> +
+ +
+ +

Don't hesitate and <%= download_link_to "download", @product %> the free Better ListView trial package now.

+ + <%= render :partial => "actions", :locals => { :newsletter_form_id => "new_subscription_b" } %> + +
+

<%= t("txt.product.any_questions") %>

+ <%= contact_form(:show_product_select => false, :split_layout => true) %> +
+ +
+
<%= image_tag "simple/owl.gif", :alt => "Component Owl" %>
\ No newline at end of file diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000..c4662e6 --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,48 @@ + + + + <%= render :partial => "shared/meta" %> + <%= cached_stylesheets_base %> + <%= yield :header %> + + > + +
+ + <%= render :partial => "shared/header" %> + + <% if @controller.controller_name == "home" %> + +
+ <%= yield %> +
+ + <% else %> + +
+
+ <%= yield %> +
+
+ + <% end %> + + <%= render :partial => "shared/footer" %> + +
+ + <%= cached_javascripts_app %> + <%= page_include %> + + + + + + \ No newline at end of file diff --git a/app/views/layouts/cute_admin.html.erb b/app/views/layouts/cute_admin.html.erb new file mode 100644 index 0000000..3d08f0e --- /dev/null +++ b/app/views/layouts/cute_admin.html.erb @@ -0,0 +1,15 @@ + + + + + + <%= controller.controller_name.singularize.camelize.constantize.human_name(:count => 2) %> + <%= stylesheet_link_tag 'cute_admin' %> + + +<% if flash[:notice] -%>

<%= flash[:notice] %>

<% end -%> + +<%= yield %> + + + diff --git a/app/views/layouts/iframe.html.erb b/app/views/layouts/iframe.html.erb new file mode 100644 index 0000000..2baac98 --- /dev/null +++ b/app/views/layouts/iframe.html.erb @@ -0,0 +1,17 @@ + + + + + <%= cached_stylesheets_base %> + + + + <%= javascript_tag "var t = #{locales['txt']['javascript'].to_json}" %> + + <%= yield %> + + <%= cached_javascripts_base %> + + + \ No newline at end of file diff --git a/app/views/layouts/login.html.erb b/app/views/layouts/login.html.erb new file mode 100644 index 0000000..64bee21 --- /dev/null +++ b/app/views/layouts/login.html.erb @@ -0,0 +1,18 @@ + + + + + + Login + <%= stylesheet_link_tag 'login' %> + + + +
+
+ <%= yield %> +
+
+ + + diff --git a/app/views/layouts/simple.html.erb b/app/views/layouts/simple.html.erb new file mode 100644 index 0000000..900086f --- /dev/null +++ b/app/views/layouts/simple.html.erb @@ -0,0 +1,30 @@ + + + + <%= render :partial => "shared/meta" %> + <%= cached_stylesheets_simple %> + + + + <%= javascript_tag "var t = #{locales['txt']['javascript'].to_json}" %> + +
+ +
+ +
+ <%= yield %> +
+ + + +
+ + <%= page_include %> + <%= cached_javascripts_simple %> + + + \ No newline at end of file diff --git a/app/views/notifier/claim_upgrade.erb b/app/views/notifier/claim_upgrade.erb new file mode 100644 index 0000000..340e3d4 --- /dev/null +++ b/app/views/notifier/claim_upgrade.erb @@ -0,0 +1,4 @@ +Full name: <%= @survey.full_name %> +Company name: <%= @survey.company_name %> +Purchase email: <%= [[@survey.purchase_email1, @survey.purchase_email2, @survey.purchase_email3] - [""]].flatten.compact.join(", ") %> +Current email: <%= @survey.current_email %> \ No newline at end of file diff --git a/app/views/notifier/feedback.erb b/app/views/notifier/feedback.erb new file mode 100644 index 0000000..17a3d7c --- /dev/null +++ b/app/views/notifier/feedback.erb @@ -0,0 +1 @@ +<%= @message %> \ No newline at end of file diff --git a/app/views/notifier/license_key_error.erb b/app/views/notifier/license_key_error.erb new file mode 100644 index 0000000..da5fb0c --- /dev/null +++ b/app/views/notifier/license_key_error.erb @@ -0,0 +1,10 @@ +<%= @license_key.error %> + +Source file: +--------------------------------------------- +<%= @license_key.source_file_data.join("\n") %> + + +XML Request: +--------------------------------------------- +<%= @license_key.raw_post_data %> \ No newline at end of file diff --git a/app/views/notifier/licenses.erb b/app/views/notifier/licenses.erb new file mode 100644 index 0000000..030c6b6 --- /dev/null +++ b/app/views/notifier/licenses.erb @@ -0,0 +1,6 @@ +<% @licenses.each do |license| %> +<%= license[:product].name %>: +--------------------------------------------- +<%= license[:license_keys].join("\n") %> + +<% end %> \ No newline at end of file diff --git a/app/views/notifier/recommend.erb b/app/views/notifier/recommend.erb new file mode 100644 index 0000000..97eef6a --- /dev/null +++ b/app/views/notifier/recommend.erb @@ -0,0 +1,14 @@ +Hi, + +Your friend <%= @survey.full_name %> wants you to check out Swift To-Do List, the number one task management software for Windows. Have all your tasks and notes in one place - get organized in no time and be more productive. + +More info, screenshots, free 30-day trial at: +http://www.dextronet.com/swift-to-do-list-software + +<%= @survey.full_name %> uses Swift To-Do List and is quite happy with it. Why store all your worries, tasks and all that stuff in your head, when you can store it in your computer? + +Snap! It's like an instant brain upgrade. + +With the best regards, +Jiri Novotny +Dextronet.com \ No newline at end of file diff --git a/app/views/notifier/survey.erb b/app/views/notifier/survey.erb new file mode 100644 index 0000000..ed7dcc3 --- /dev/null +++ b/app/views/notifier/survey.erb @@ -0,0 +1,6 @@ +Full name: <%= @survey.full_name %> +Company name: <%= @survey.company_name %> +Purchase email: <%= [[@survey.purchase_email1, @survey.purchase_email2, @survey.purchase_email3] - [""]].flatten.compact.join(", ") %> +Email address: <%= @survey.current_email %> + +<%= survey(@survey.survey) %> \ No newline at end of file diff --git a/app/views/orders/_draft.html.erb b/app/views/orders/_draft.html.erb new file mode 100644 index 0000000..15a717d --- /dev/null +++ b/app/views/orders/_draft.html.erb @@ -0,0 +1,205 @@ +

Licensing & pricing for Better ListView

+ + + + +
+
+ + <% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%> + <%= hidden_field_tag "CID", Settings.order.cid %> + <%= hidden_field_tag "CLR", Settings.order.clr %> + <%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Single developer licenses
Single developer license with 1 year subscription$345 + <%= check_box_tag "PRODUCTID", "18300056", false, :id => "support-single" %> + <%= label_tag "support-single", "Add 1 year priority support ($99)" %> + <%= buy "18300042" %>
5 developers licenses
5 developer license with 1 year subscription$995 + <%= check_box_tag "PRODUCTID", "18300057", false, :id => "support-5" %> + <%= label_tag "support-5", "Add 1 year priority support ($295)" %> + <%= buy "18300044" %>
Site licenses - use at 1 site (office or building)
Site license with 1 year subscription$1995 + <%= check_box_tag "PRODUCTID", "18300058", false, :id => "support-site" %> + <%= label_tag "support-site", "Add 1 year priority support ($495)" %> + <%= buy "18300046" %>
Site license with source code and 1 year subscription$3995<%= buy "18300047" %>
Enterprise license - use world-wide at unlimited sites
Enterprise license with source code and 1 year subscription$8995 + <%= check_box_tag "PRODUCTID", "18300059", false, :id => "support-enterprise" %> + <%= label_tag "support-enterprise", "Add 1 year priority support ($995)" %> + <%= buy "18300048" %>
+ + <% end -%> + +
+ +
+ + <% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%> + <%= hidden_field_tag "CID", Settings.order.cid %> + <%= hidden_field_tag "CLR", Settings.order.clr %> + <%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Single developer licenses
Renew single developer 1 year subscription$138 + <%= check_box_tag "PRODUCTID", "18300056", false, :id => "renew-support-single" %> + <%= label_tag "renew-support-single", "Add 1 year priority support ($99)" %> + <%= renew "18300049" %>
5 developers licenses
Renew 5 developer 1 year subscription$398 + <%= check_box_tag "PRODUCTID", "18300057", false, :id => "renew-support-5" %> + <%= label_tag "renew-support-5", "Add 1 year priority support ($295)" %> + <%= renew "18300051" %>
Site licenses - use at 1 site (office or building)
Renew site license 1 year subscription$798 + <%= check_box_tag "PRODUCTID", "18300058", false, :id => "renew-support-site" %> + <%= label_tag "renew-support-site", "Add 1 year priority support ($495)" %> + <%= renew "18300053" %>
Renews site license 1 year subscription with source code$1598<%= renew "18300054" %>
Enterprise license - use world-wide at unlimited sites
Renew enterprise license 1 year subscription with source code$3598 + <%= check_box_tag "PRODUCTID", "18300059", false, :id => "renew-support-enterprise" %> + <%= label_tag "renew-support-enterprise", "Add 1 year priority support ($995)" %> + <%= renew "18300055" %>
+ + <% end -%> + +
+
+ +
+ +
+

All licenses are:

+
    +
  • Life-time (non-expiring)
  • +
  • Royalty free
  • +
+
+ +
+

Subscription gets you:

+
    +
  • Support
  • +
  • Updates
  • +
+
+ +
+

Priority support gets you:

+
    +
  • Guaranteed 24 hour reply
  • +
  • Help with implementing new features and extending Better ListView
  • +
+
+ +
+ +
+ +

What license do I need?

+
    +
  • If only 1 developer works on your current and future projects, then the "Single developer license" is for you.
  • +
  • If 2-5 developers works on your current and future projects, then the "5 developer license" is for you.
  • +
  • If more than 5 developers work on your current and future projects, then the "Site license" is for you.
  • +
  • If you have multiple teams in different locations, then the "Enterprise license" is for you.
  • +
+ +
+ +
+ +

Resellers and Customer Service, Contact Sales

+ +
+

US and Canada
Toll Free: 888 850 9911 (24 hour)

+
+ +
+

United Kingdom
Toll Free: 0800 581111 (24 hour)

+
+ +
+

Or call us free of charge from <%= link_to "these countries", customer_service_path %>.

+
+ +


+ + <%= image_tag "CSLogo.gif", :alt => "ComponentSource.com" %> + +
\ No newline at end of file diff --git a/app/views/orders/show.html.erb b/app/views/orders/show.html.erb new file mode 100644 index 0000000..44afa49 --- /dev/null +++ b/app/views/orders/show.html.erb @@ -0,0 +1,7 @@ +
+ + <%= render :inline => @page.html %> + + <%#= render :partial => "draft" %> + +
diff --git a/app/views/pad/show.xml.builder b/app/views/pad/show.xml.builder new file mode 100644 index 0000000..a583ee3 --- /dev/null +++ b/app/views/pad/show.xml.builder @@ -0,0 +1,145 @@ +xml.instruct! :xml, :version => "1.0" +xml.XML_DIZ_INFO do + xml.MASTER_PAD_VERSION_INFO do + xml.MASTER_PAD_VERSION val('MASTER_PAD_VERSION') + xml.MASTER_PAD_EDITOR val('MASTER_PAD_EDITOR') + xml.MASTER_PAD_INFO val('MASTER_PAD_INFO') + end + xml.Company_Info do + xml.Company_Name val('Company_Name') + xml.Address_1 val('Address_1') + xml.Address_2 val('Address_2') + xml.City_Town val('City_Town') + xml.State_Province val('State_Province') + xml.Zip_Postal_Code val('Zip_Postal_Code') + xml.Country val('Country') + xml.Company_WebSite_URL val('Company_WebSite_URL') + xml.Contact_Info do + xml.Contact_First_Name val('Contact_First_Name') + xml.Contact_Last_Name val('Contact_Last_Name') + xml.Contact_Email val('Contact_Email') + xml.Author_First_Name val('Author_First_Name') + xml.Author_Last_Name val('Author_Last_Name') + xml.Author_Email val('Author_Email') + end + xml.Support_Info do + xml.Sales_Email val('Sales_Email') + xml.Support_Email val('Support_Email') + xml.General_Email val('General_Email') + xml.Sales_Phone val('Sales_Phone') + xml.Support_Phone val('Support_Phone') + xml.General_Phone val('General_Phone') + xml.Fax_Phone val('Fax_Phone') + end + end + xml.ASP do + xml.ASP_FORM val('ASP_FORM') + xml.ASP_Member val('ASP_Member') + xml.ASP_Member_Number val('ASP_Member_Number') + end + xml.NewsFeed do + xml.NewsFeed_FORM val('NewsFeed_FORM') + xml.NewsFeed_VERSION val('NewsFeed_VERSION') + xml.NewsFeed_URL val('NewsFeed_URL') + xml.NewsFeed_Type val('NewsFeed_Type') + xml.NewsFeed_Language val('NewsFeed_Language') + xml.NewsFeed_Purpose val('NewsFeed_Purpose') + xml.NewsFeed_Author_Email val('NewsFeed_Author_Email') + xml.NewsFeed_Author_First_Name val('NewsFeed_Author_First_Name') + xml.NewsFeed_Author_Last_Name val('NewsFeed_Author_Last_Name') + xml.NewsFeed_DESCRIPTION val('NewsFeed_DESCRIPTION') + xml.NewsFeed_Feed_URL val('NewsFeed_Feed_URL') + xml.NewsFeed_Site_Name val('NewsFeed_Site_Name') + xml.NewsFeed_Site_URL val('NewsFeed_Site_URL') + xml.NewsFeed_Title val('NewsFeed_Title') + xml.NewsFeed_Description_70 val('NewsFeed_Description_70') + xml.NewsFeed_Description_250 val('NewsFeed_Description_250') + end + xml.Site do + xml.Site_FORM val('Site_FORM') + xml.Site_VERSION val('Site_VERSION') + xml.Site_URL val('Site_URL') + xml.Site_DESCRIPTION val('Site_DESCRIPTION') + xml.Site_Contact_Email val('Site_Contact_Email') + xml.Site_Contact_First_Name val('Site_Contact_First_Name') + xml.Site_Contact_Last_Name val('Site_Contact_Last_Name') + xml.Site_Site_Title val('Site_Site_Title') + xml.Site_Site_URL product_link + xml.Site_Description_100 val('Site_Description_100') + xml.Site_Description_250 val('Site_Description_250') + xml.Site_Description_450 val('Site_Description_450') + xml.Site_Keywords val('Site_Keywords') + end + xml.Program_Info do + xml.Program_Name name + xml.Program_Version version + xml.Program_Release_Month release_month + xml.Program_Release_Day release_day + xml.Program_Release_Year release_year + xml.Program_Cost_Dollars price + xml.Program_Type val('Program_Type') + xml.Program_Release_Status val('Program_Release_Status') + xml.Program_Install_Support val('Program_Install_Support') + xml.Program_OS_Support val('Program_OS_Support') + xml.Program_Language val('Program_Language') + xml.Program_Change_Info val('Program_Change_Info') + xml.Program_System_Requirements val('Program_System_Requirements') + xml.Program_Category_Class val('Program_Category_Class') + xml.File_Info do + xml.File_Size_Bytes size_b + xml.File_Size_K size_kb + xml.File_Size_MB size_mb + xml.Filename_Versioned "" + xml.Filename_Previous "" + xml.Filename_Generic "" + xml.Filename_Long "" + end + xml.Expire_Info do + xml.Has_Expire_Info val('Has_Expire_Info') + xml.Expire_Count val('Expire_Count') + xml.Expire_Based_On val('Expire_Based_On') + xml.Expire_Other_Info val('Expire_Other_Info') + xml.Expire_Month val('Expire_Month') + xml.Expire_Day val('Expire_Day') + xml.Expire_Year val('Expire_Year') + end + xml.Limitations val('Limitations') + xml.Program_Categories val('Program_Categories') + xml.Program_Cost_Other_Code "" + xml.Program_Cost_Other "" + xml.Awards val('Awards') + xml.Program_Specific_Category val('Program_Specific_Category') + xml.Includes_JAVA_VM val('Includes_JAVA_VM') + xml.Includes_VB_Runtime val('Includes_VB_Runtime') + xml.Includes_DirectX val('Includes_DirectX') + end + xml.Web_Info do + xml.Application_URLs do + xml.Application_Info_URL product_link + xml.Application_Order_URL (val('Application_Order_URL').present? ? val('Application_Order_URL') : buy_link) + xml.Application_Screenshot_URL val('Application_Screenshot_URL') + xml.Application_Icon_URL val('Application_Icon_URL') + xml.Application_XML_File_URL pad_link + end + xml.Download_URLs do + xml.Primary_Download_URL setup_file_link + xml.Secondary_Download_URL "" + xml.Additional_Download_URL_1 "" + xml.Additional_Download_URL_2 "" + end + end + xml.Permissions do + xml.Distribution_Permissions val('Distribution_Permissions') + xml.EULA val('EULA') + end + xml.Program_Descriptions do + xml.English do + xml.Keywords val('Keywords') + xml.Char_Desc_45 val('Char_Desc_45') + xml.Char_Desc_80 val('Char_Desc_80') + xml.Char_Desc_250 val('Char_Desc_250') + xml.Char_Desc_450 val('Char_Desc_450') + xml.Char_Desc_2000 val('Char_Desc_2000') + end + end +end \ No newline at end of file diff --git a/app/views/product_editions/_edition.html.erb b/app/views/product_editions/_edition.html.erb new file mode 100644 index 0000000..34759df --- /dev/null +++ b/app/views/product_editions/_edition.html.erb @@ -0,0 +1,4 @@ +
+
<%= t('txt.order.stdl_editions_difference') %>
+ <%= @edition.description %> +
\ No newline at end of file diff --git a/app/views/product_editions/show.html.erb b/app/views/product_editions/show.html.erb new file mode 100644 index 0000000..1f57b34 --- /dev/null +++ b/app/views/product_editions/show.html.erb @@ -0,0 +1 @@ +

The Professional edition has all the features the Standard edition has and many extra.

It allows you to easily email tasks to others or to yourself. Set Start Date and Completion Date for your tasks. Assign tasks using Assigned To field. Track your progress more precisely using Percent Done field and Status field. Use Time Estimate and Time Spent fields for instant clarity about time needed and time spent for each task. Context field helps you to better categorize your tasks.

The best part is: You decide which fields you want to use, and which to completely hide (this is a unique feature).

\ No newline at end of file diff --git a/app/views/products/_draft.html.erb b/app/views/products/_draft.html.erb new file mode 100644 index 0000000..3d7f6ee --- /dev/null +++ b/app/views/products/_draft.html.erb @@ -0,0 +1,132 @@ +
+
    +
  • Better ListView is a list view control for .NET Windows Forms (C#, VB.net) with full Visual Studio support.
  • +
  • Designed as a replacement for the regular .NET list view control.
  • +
  • Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
  • +
  • Minimum learning needed. Better ListView can be used just like the regular list view.
  • +
  • Written in pure managed C# code. It is fast, light-weight and optimized for 100k+ items.
  • +
  • Easy royalty-free deployment. Single DLL file that has just 180kB when compressed.
  • +
  • Tested in the real world by thousands of users
  • +
+ +
+ +

Extra features summary

+ Better ListView is fast and flicker-free, has better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, and more. + + <% testimonial :author => "DevProConnections.com Review" do -%> + The control is very easy and intuitive to use and is well documented. + <% end -%> +

Double-buffered and flicker free

+ Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items. +

Column header images

+ You can use images in column headers. Custom image sizes are supported. + +
+ +

Sub-item images

+ You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column). +

Image-List and Image Support

+ Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object. +

Custom list view Image size

+ You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio. +

Drag & drop with insertion mark

+ Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes. + +
+ +

List view item reordering

+ Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark. +

Column-header reordering

+ Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported. + +
+ +

Auto-scroll for column header reordering and item reordering

+ Better ListView has inbuilt auto-scrolling for column header and item reordering. +

Column headers can be shown in all views

+ Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view. + +
+ +

Thumbnails view mode

+ Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes. +

Image shadows, borders and padding

+ All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views. + + Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails. + +
+ +

Multi-column sorting

+ You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted. + +
+ +

Inbuilt sorting and natural sorting

+ Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time. +

Richer event data

+ Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl. +

Checkboxes in all views

+ You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view. + +
+ +

Three state checkboxes

+ Three state checkboxes are supported in Better ListView: + +
+ +

Powerful list view tooltips

+ You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported. + +
+ +

Uses current Windows theme

+ Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user. +

XML serialization of everything

+ Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer). +

Owner drawing

+ Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part. + +
+ +

Context menu for column headers, list items, and empty area

+ Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space). + +
+ +

Powerful hit-test

+ The hit test returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right). +

Customizable search-by-typing

+ Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code. +

Display text when the list view is empty

+ You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly. + +
+ +

Embedded controls for item editing

+ Inbuilt in-line editing support includes label edit and combobox edit. You can also embed any custom control for in-line editing. + +
+ +

ListView item text formatting

+ Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines. +

Automatic list view layout

+ Better ListView can auto-size item images, item text, column header images, column header text. + + .. obrazek . +

Custom list view item size

+ You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items. + +
+ +

More advantages of our improved list view component:

+
    +
  • Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
  • +
  • Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
  • +
  • Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
  • +
  • Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
  • +
  • Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
  • +
+
\ No newline at end of file diff --git a/app/views/products/_releases.html.erb b/app/views/products/_releases.html.erb new file mode 100644 index 0000000..b75181b --- /dev/null +++ b/app/views/products/_releases.html.erb @@ -0,0 +1,20 @@ +<% form_tag releases_page_path(@product), :method => :get do %> +
+ <%= t("txt.releases.changes_since") %> <%= select_tag "since", versions_for_select(@product.releases.all_ordered, @since_release.version), :class => "autosubmit" %> +
+<% end %> +
+<% if @since_release == @product.current_release %> +

<%= t('txt.releases.whats_new', :product => @product.name.strip_version, :version => @since_release.version) %>

+<% else %> +

<%= t('txt.releases.whats_new_since', :product => @product.name.strip_version, :version => @since_release.version) %>

+<% end %> + +<% for release in @releases %> + + <% unless release.changelog.blank? %> +

<%= t('txt.releases.changes_in_version', :version => release.version, :date => l(release.date, :format => :cute)) %>

+

<%= release.changelog.gsub("\n", "
") %>

+ <% end %> + +<% end %> \ No newline at end of file diff --git a/app/views/products/_social.html.erb b/app/views/products/_social.html.erb new file mode 100644 index 0000000..5053278 --- /dev/null +++ b/app/views/products/_social.html.erb @@ -0,0 +1,19 @@ + +
+ <%= t('txt.product.sharethis') %> + <%= render :partial => "shared/sharethis" %> +
+<% if @product.is_featured? && 1 == 2 %> +
+ +
+<% end %> \ No newline at end of file diff --git a/app/views/products/show.html.erb b/app/views/products/show.html.erb new file mode 100644 index 0000000..4d5e85d --- /dev/null +++ b/app/views/products/show.html.erb @@ -0,0 +1,107 @@ +
+

<%= @product.description('heading') %>

+ + + +
+ +
+ + <% if @releases %> + + + + + + <% else %> + + <% if @product.tab_product_pages.size > 1 %> + + <%= hidden_field_tag "tabs-initial-index", (@detail ? -1 : 0) %> + + + + + + <% else %> + + + + <% end %> + + <% end %> + +
+ +
+ +
+ <%= download_link_trial_or_free(@product) %> + <% if better_splitbutton? %> + <%= better_slitbutton_buy_link %> + <% elsif !@product.free? %> + <%= buy_link(@product) %> + <% end %> +

<%= t("txt.product.version", :version => @release.version, :date => no_day_zero(l(@release.date, :format => :cute))) if @release %>

+
+ +
+

<%= t('txt.product.compatibility_note') %>

+
+

<%= link_to_new_window "See Quick Start Guide", quick_start_guide_path(@product) %>

+

<%= link_to_new_window "See Documentation", documentation_path(@product) %>

+ <% if @product.code == "better-listview-express" %> +

<%= link_to_new_window "See Class Reference", class_reference_path(featured_product) %>

+ <% else %> +

<%= link_to_new_window "See Class Reference", class_reference_path(@product) %>

+ <% end %> +
+
+ + <% unless in_screenshot_section?(@detail) %> + + <% for screenshot in @screenshots %> +
+

<%= screenshot_link(screenshot) %>

+
+ <%= render :partial => "social" if @screenshots.size > 1 && @screenshots.first == screenshot %> + <% end %> + + <% if @product.has_screenshots? %> +
+ <%= small_button(t('txt.product.more_screenshots'), screenshots_path(@product)) %> +
+ <% end %> + + <%= render :partial => "social" unless @screenshots.any? && @screenshots.size > 1 %> + + <% else %> + <%= render :partial => "social" %> + <% end %> + +
+ +
+ +
+
+ <%= download_link_trial_or_free(@product) %> + <% if better_splitbutton? %> + <%= better_slitbutton_buy_link %> + <% elsif !@product.free? %> + <%= buy_link(@product) %> + <% end %> +
+
+ +
+ +<%= render :partial => "shared/screenshot_buttons", :object => @product %> \ No newline at end of file diff --git a/app/views/releases/_whatsnew.html.erb b/app/views/releases/_whatsnew.html.erb new file mode 100644 index 0000000..517b70f --- /dev/null +++ b/app/views/releases/_whatsnew.html.erb @@ -0,0 +1,5 @@ +
+
<%= t('txt.releases.whats_new', :product => strip_version(@release.product.name), :version => @release.version) %>
+
<%= download_link(@release.product, "small") %><%= buy_link(@release.product, "small") %>
+ <%= @release.description %> +
\ No newline at end of file diff --git a/app/views/releases/check.erb b/app/views/releases/check.erb new file mode 100644 index 0000000..721d039 --- /dev/null +++ b/app/views/releases/check.erb @@ -0,0 +1 @@ +<%= @response.join("\n") %> \ No newline at end of file diff --git a/app/views/releases/show.html.erb b/app/views/releases/show.html.erb new file mode 100644 index 0000000..da2cab2 --- /dev/null +++ b/app/views/releases/show.html.erb @@ -0,0 +1,6 @@ +
+ <%= subpage_headline(t('txt.releases.whats_new', :product => strip_version(@release.product.name), :version => @release.version)) %> +
<%= link_to(t("txt.releases.back"), @release.product) %>
+ <%= render :partial => "products/product_box", :object => @release.product %> + <%= @release.description %> +
\ No newline at end of file diff --git a/app/views/resources/index.html.erb b/app/views/resources/index.html.erb new file mode 100644 index 0000000..f9b8bb1 --- /dev/null +++ b/app/views/resources/index.html.erb @@ -0,0 +1,38 @@ +
+ +
Articles about task management and productivity
+ +

Latest blog posts and articles from our blog

+ +
+ <% for post in @posts %> +

<%= link_to post.title, post.url %>

+ + <% end %> +
+
+ <%= small_button(t('txt.home.see_other_posts'), blog_url) %> +
+ + <% if @featured_articles.present? || @articles.present? %> + +

Articles about productivity, to-do lists, task lists and being organized

+ + + +
+ <% for article in @articles %> +

<%= link_to article.title, article %>

+ <% end %> +
+ + <% end %> + +
\ No newline at end of file diff --git a/app/views/shared/_footer.html.erb b/app/views/shared/_footer.html.erb new file mode 100644 index 0000000..05fea74 --- /dev/null +++ b/app/views/shared/_footer.html.erb @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/app/views/shared/_footer_copy.html.erb b/app/views/shared/_footer_copy.html.erb new file mode 100644 index 0000000..a8891fa --- /dev/null +++ b/app/views/shared/_footer_copy.html.erb @@ -0,0 +1,2 @@ + +<%= t("txt.footer.copy", :year => Time.now.year, :disclaimer => link_to(t("txt.footer.disclaimer"), disclaimer_path), :privacy_policy => link_to(t("txt.footer.privacy_policy"), privacy_policy_path), :eula => link_to(t("txt.footer.eula"), eula_path)) %>
\ No newline at end of file diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb new file mode 100644 index 0000000..80b6667 --- /dev/null +++ b/app/views/shared/_header.html.erb @@ -0,0 +1,41 @@ +<%= javascript_tag "var t = #{locales['txt']['javascript'].to_json}" %> + +
+ <% cm = { @controller.controller_name => "active" } %> +
    +
  • <%= link_to(t("txt.menu.home"), root_path, :class => "menu-item") %>
  • +
  • + <%= link_to(t("txt.menu.products"), featured_product, :class => "menu-item") %> + <% dropdown(:class => "dropdown-submenu", :style => "width: 370px") do %> + <% dropdown_categorized_products.each do |categorized_products| %> + + <% categorized_products[:products].each do |product| %> + <% css_class = (product.featured? || product.code == "better-thumbnail-browser") ? "featured-item" : nil %> + <%= link_to "#{icon(product)} #{product.name}
    #{product.label}", product_path(product), + :class => css_class %> + <% end %> + <% end %> + <% end %> +
  • +
  • + <%= link_to("Purchase", order_path(featured_product), :class => "menu-item") %> + <% dropdown(:class => "dropdown-submenu", :style => "width: 330px") do %> + <% dropdown_products.each do |product| %> + <% unless product.free? %> + <% css_class = (product.featured? || product.code == "better-thumbnail-browser") ? "featured-item" : nil %> + <%= link_to product.name, order_path(product), :class => css_class %> + <% end %> + <% end %> + <% end %> +
  • +
  • <%= link_to(t("txt.menu.support"), "/support", :class => "menu-item") %>
  • + <% if have_articles? %>
  • <%= link_to("Articles", "/articles", :class => "menu-item") %>
  • <% end %> +
  • "><%= link_to(t("txt.menu.blog"), blog_url, :class => "menu-item") %>
  • + <% if latest_comic %>
  • <%= link_to(t("txt.menu.comics"), latest_comic, :class => "menu-item") %>
  • <% end %> +
  • <%= link_to(t("txt.menu.about"), "/about-us", :class => "menu-item") %>
  • +
+ +
\ No newline at end of file diff --git a/app/views/shared/_meta.html.erb b/app/views/shared/_meta.html.erb new file mode 100644 index 0000000..d9e8c7b --- /dev/null +++ b/app/views/shared/_meta.html.erb @@ -0,0 +1,15 @@ + + + + + + + + + + + + +<%= @meta_title || meta_tags.title %> + + \ No newline at end of file diff --git a/app/views/shared/_preloaded_elements.html.erb b/app/views/shared/_preloaded_elements.html.erb new file mode 100644 index 0000000..8a4a708 --- /dev/null +++ b/app/views/shared/_preloaded_elements.html.erb @@ -0,0 +1,10 @@ +
+ <%= image_tag("loader.gif") %> + <%= image_tag("button-indicator.gif") %> + <%= image_tag("button-indicator-noborder.gif") %> + <%= image_tag("dropdown-bg.png") %> + <%= image_tag("dropdown-o.png") %> + <%= image_tag("dropdown-s.png") %> + <%= icon(featured_product, 32) %> + <%= icon(featured_product, 48) %> +
\ No newline at end of file diff --git a/app/views/shared/_screenshot_buttons.html.erb b/app/views/shared/_screenshot_buttons.html.erb new file mode 100644 index 0000000..0f0bcb5 --- /dev/null +++ b/app/views/shared/_screenshot_buttons.html.erb @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/app/views/shared/_sharethis.html.erb b/app/views/shared/_sharethis.html.erb new file mode 100644 index 0000000..739c107 --- /dev/null +++ b/app/views/shared/_sharethis.html.erb @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/app/views/shared/_tiny_footer.html.erb b/app/views/shared/_tiny_footer.html.erb new file mode 100644 index 0000000..3feb571 --- /dev/null +++ b/app/views/shared/_tiny_footer.html.erb @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/views/shared/_tooltip.html.erb b/app/views/shared/_tooltip.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/sitemap/index.html.erb b/app/views/sitemap/index.html.erb new file mode 100644 index 0000000..5c1c68a --- /dev/null +++ b/app/views/sitemap/index.html.erb @@ -0,0 +1,55 @@ +
+ +

ComponentOwl.com Sitemap

+ +

<%= t('txt.componentowl_long') %> / 

+ +
    +
  • <%= link(root_path, t('txt.menu.home')) %>
  • + <% Product.all_ordered.each do |product| %> +
  • + <%= link(product_path(product), product.name) %> + <% if product.product_pages.count > 1 %> +
      + <% product.product_pages.root.cute_ordered.each do |product_page| %> + <% unless pricing_licensing?(product_page) %> +
    • + <%= link(product_page_path(product, product_page), product_page.name) %> + <% if product_page.children.any? %> +
        + <% product_page.children.each do |child_product_page| %> +
      • <%= link(product_page_path(product, child_product_page), child_product_page.name) %>
      • + <% end %> +
      + <% end %> +
    • + <% end %> + <% end %> +
    + <% end %> + <% end %> +
  • + <% Product.all_ordered.non_free.each do |product| %> +
  • + <%= link(order_path(product), "Pricing & Licensing for #{product.name}") %> +
  • + <% end %> +
  • + <%= link("/support", t('txt.menu.support')) %> +
  • +
  • <%= link(latest_comic, t('txt.menu.comics')) %>
  • +
  • <%= link(blog_url, t('txt.menu.blog')) %>
  • +
  • <%= link(about_path, t('txt.menu.about')) %>
  • +
+ +
    +
  • <%= link("/quick-start-guide/better-listview/index.html", "Quick Start Guide for #{featured_product.name}") %>
  • +
+ +
    +
  • <%= link(download_path(featured_product), t('txt.download.thanks_general')) %>
  • +
  • <%= link(disclaimer_path, t('txt.footer.disclaimer')) %>
  • +
  • <%= link(privacy_policy_path, t('txt.footer.privacy_policy')) %>
  • +
+ +
\ No newline at end of file diff --git a/app/views/sitemap/index.xml.builder b/app/views/sitemap/index.xml.builder new file mode 100644 index 0000000..105e87b --- /dev/null +++ b/app/views/sitemap/index.xml.builder @@ -0,0 +1,111 @@ +xml.instruct! :xml, :version => "1.0" +xml.urlset :xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9" do + + # / + xml.url do + xml.loc root_url + xml.lastmod Date.today + xml.changefreq "daily" + xml.priority "0.9" + end + + Product.all_ordered.each do |product| + + # product pages + xml.url do + xml.loc product_url(product) + xml.lastmod product.last_updated_page.updated_at.to_date + xml.changefreq "weekly" + xml.priority "1.0" + end + for product_page in product.product_pages + xml.url do + xml.loc product_page_url(product, product_page) + xml.lastmod product_page.updated_at.to_date + xml.changefreq "weekly" + xml.priority "1.0" + end unless product_page == product.default_page || pricing_licensing?(product_page) + end + + end + + Product.all_ordered.non_free.each do |product| + + xml.url do + xml.loc order_url(product) + xml.changefreq "weekly" + xml.priority "0.8" + end + + end + + # download pages + xml.url do + xml.loc download_url(featured_product) + xml.changefreq "weekly" + xml.priority "0.7" + end + + # /support + xml.url do + xml.loc url_for(:controller => "support", :only_path => false) + xml.changefreq "weekly" + end + + # /comics + xml.url do + xml.loc url_for(:controller => "comics", :only_path => false) + xml.changefreq "daily" + xml.lastmod latest_comic.publish_on + end + + # /comics/:id + Comic.published.reverse_ordered.each do |comic| + xml.url do + xml.loc comic_url(comic) + xml.changefreq "monthly" + xml.priority "0.5" + end + end + + # /blog + xml.url do + xml.loc blog_url + xml.lastmod Date.today + xml.changefreq "daily" + xml.priority "0.6" + end + + # /about-us + xml.url do + xml.loc about_url + xml.changefreq "weekly" + end + + # /quick-start-guide/better-listview/index.html + xml.url do + xml.loc "#{root_url}/quick-start-guide/better-listview/index.html" + xml.changefreq "weekly" + end + + # /sitemap + xml.url do + xml.loc sitemap_url + xml.changefreq "weekly" + end + + # /disclaimer + xml.url do + xml.loc disclaimer_url + xml.changefreq "monthly" + xml.priority "0.1" + end + + # /privacy-policy + xml.url do + xml.loc privacy_policy_url + xml.changefreq "monthly" + xml.priority "0.1" + end + +end \ No newline at end of file diff --git a/app/views/subscriptions/from_download.html.erb b/app/views/subscriptions/from_download.html.erb new file mode 100644 index 0000000..2f16218 --- /dev/null +++ b/app/views/subscriptions/from_download.html.erb @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/app/views/subscriptions/index.html.erb b/app/views/subscriptions/index.html.erb new file mode 100644 index 0000000..0b8d553 --- /dev/null +++ b/app/views/subscriptions/index.html.erb @@ -0,0 +1,9 @@ +
+ +

Component Owl Newsletter

+ +

You've been unsubscribed.

+ +

You can now continue to our <%= link_to "home page", root_path %>.

+ +
\ No newline at end of file diff --git a/app/views/support/_contact_form.html.erb b/app/views/support/_contact_form.html.erb new file mode 100644 index 0000000..84a6636 --- /dev/null +++ b/app/views/support/_contact_form.html.erb @@ -0,0 +1,26 @@ +
+ <% remote_form_for @support_request, :html => { :onsubmit => "if (!validate_contact_from(this)) return false" } do |f| -%> + <%= f.hidden_field :support_request_origin_id %> + <%= f.hidden_field :subject, :value => params[:subject] %> + <%= f.hidden_field :product_id unless show_product_select %> + <%= hidden_field_tag "callback", callback %> + <%= antispam_field %> +
+
    +
  • <%= f.label :name, t("txt.common.your_name") %><%= f.text_field :name, :class => "name" %>
  • +
  • <%= f.label :email, [t("txt.common.your_email"), t("txt.common.required")].join(" ") %><%= f.text_field :email, :class => "email" %>
  • + <% if show_product_select %> +
  • <%= f.label :product_id, Product.human_name %><%= f.select :product_id, cute_for_select(Product.all_ordered), { :include_blank => t('txt.common.not_applicable') }, :class => "dropdown" %>
  • + <% end %> + <% if split_layout %> +
+
    + <% end %> +
  • <%= f.label :message, [t("txt.common.message"), t("txt.common.required")].join(" ") %><%= f.text_area :message, :class => "message" %>
  • +
+
+
+ <%= submit_button "   Send   " %> +
+ <% end -%> +
\ No newline at end of file diff --git a/app/views/support/_search.html.erb b/app/views/support/_search.html.erb new file mode 100644 index 0000000..4cc5935 --- /dev/null +++ b/app/views/support/_search.html.erb @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/support/customer_service.html.erb b/app/views/support/customer_service.html.erb new file mode 100644 index 0000000..18424b4 --- /dev/null +++ b/app/views/support/customer_service.html.erb @@ -0,0 +1,5 @@ +
+ + <%= render :inline => @static_page.html %> + +
\ No newline at end of file diff --git a/app/views/support/disclaimer.html.erb b/app/views/support/disclaimer.html.erb new file mode 100644 index 0000000..e49fc06 --- /dev/null +++ b/app/views/support/disclaimer.html.erb @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/views/support/eula.html.erb b/app/views/support/eula.html.erb new file mode 100644 index 0000000..bc84442 --- /dev/null +++ b/app/views/support/eula.html.erb @@ -0,0 +1,89 @@ + \ No newline at end of file diff --git a/app/views/support/index.html.erb b/app/views/support/index.html.erb new file mode 100644 index 0000000..32390ad --- /dev/null +++ b/app/views/support/index.html.erb @@ -0,0 +1,34 @@ +
+ +

Help & Support

+ +
+

<%= t("txt.support.contact_info_1") %>

+

<%= t("txt.support.contact_info_2") %>

+ +
+
+ <%= contact_form(:show_product_select => false) %> +
+
+ +
+

<%= t("txt.support.contact_info_3") %>

+
+ +
+ <% @products.each do |product| %> +

<%= product.name %>

+

<%= link_to_new_window "See Quick Start Guide", quick_start_guide_path(product) %>

+

<%= link_to_new_window "See Documentation", documentation_path(product) %>

+

<%= link_to_new_window "See Class Reference", class_reference_path(product) %>

+ <% if product == featured_product %>

<%= link_to_new_window "Better ListView on StackOverflow", " +http://stackoverflow.com/questions/tagged/better-listview" %>

<% end %> + <% end %> +
+ +
+ +<% javascript_tag do -%> + document.getElementById("support_request_name").focus(); +<% end %> \ No newline at end of file diff --git a/app/views/support/privacy_policy.html.erb b/app/views/support/privacy_policy.html.erb new file mode 100644 index 0000000..3575e65 --- /dev/null +++ b/app/views/support/privacy_policy.html.erb @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/views/uninstall/index.html.erb b/app/views/uninstall/index.html.erb new file mode 100644 index 0000000..4ddacde --- /dev/null +++ b/app/views/uninstall/index.html.erb @@ -0,0 +1,33 @@ +
+ +

<%= t("txt.uninstall.heading", :product => @product.name) %>

+ +

How do you think we can make <%= @product.name %> better? We would love to hear from you!

+ +

Your email address is optional, but providing it allows us to respond - perhaps with a solution to your issue.

+ +
+
+
+ <% remote_form_for @support_request, :html => { :onsubmit => "if (!validate_uninstall_from(this)) return false" } do |f| -%> + <%= f.hidden_field :support_request_origin_id %> + <%= f.hidden_field :subject, :value => t('txt.uninstall.why_uninstall') %> + <%= f.hidden_field :product_id %> + <%= hidden_field_tag "callback", "why_uninstall_sent" %> + <%= antispam_field %> +
+
    +
  • <%= f.label :message, "The main issue or your comments" %><%= f.text_area :message, :class => "message" %>
  • +
  • <%= f.label :email, t("txt.uninstall.your_email") %><%= f.text_field :email, :class => "email" %> +

    We 100% respect your privacy and will never share your email.

  • +
+
+
+ <%= submit_button "Send Feedback", :btn_class => "dbtn-hilight" %> +
+ <% end -%> +
+
+
+ +
\ No newline at end of file diff --git a/app/views/upgrade/_draft.html.erb b/app/views/upgrade/_draft.html.erb new file mode 100644 index 0000000..8ca106b --- /dev/null +++ b/app/views/upgrade/_draft.html.erb @@ -0,0 +1,160 @@ +

Just before you continue, consider upgrading to Professional edition. It can make a real difference and we have + a special offer for you.

+ +

Upgrade to Professional edition and save 56%!

+ +<% stdl_professional = @product.edition('professional') %> + +

The Professional edition has all the features the Standard edition has and many extra.

+ +<% testimonial :author => "Donna W. from Canada" do -%> +I’m blown away at the number of new features in Swift To-Do 7. The thing I like the most is that your software allows one to be as simple or as complex as you want, all within the framework of one program. +

+Frankly, my requirements change from time to time. For 30+ years, I’ve used or tried a wide variety of task management and notes programs. While I liked Swift To-Do 6, version 7 has been an “eureka” moment. +

+Now, I don’t have to start searching for a new to-do/notes program to fit my ever changing requirements. Nicely done! +<% end -%> + +

It allows you to easily email tasks to others or to yourself. + Set Start Date and Completion Date for your tasks. Assign tasks using Assigned To field. + Track your progress more precisely using Percent Done field and Status field. Use Time Estimate and + Time Spent fields for instant clarity about time needed and time spent for each task. Context field helps you to better categorize + your tasks.

+ +

The best part is: You decide which fields you want to use, and which to completely hide (this is a unique feature).

+ +

The upgrade is easy and quick - and all your tasks and settings are imported automatically.

+ +

It's the complete package! Stay with the number one to-do list software for Windows.

+ +
+
Regular price:
<%= number_to_currency(stdl_professional.regular_price) %> +
+
+
Upgrade price for you:
<%= number_to_currency(stdl_professional.upgrade('from-stdl6').price) %> only +
+ +

This is a time-limited offer for valued previous customers like you only. All orders are protected by + unconditional 90-day money back guarantee - you have nothing to lose and much to gain! The Professional edition can be + the smartest investment you will make this year. And, you will get all future 7.xx upgrades for free.

+ +
+ <% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%> + <%= hidden_field_tag "CID", Settings.order.cid %> + <%= hidden_field_tag "CLR", Settings.order.clr %> + + <% @upgrade = stdl_professional.upgrade('from-stdl6') %> +

Upgrade my <%= quantity_select_tag(nil, (params[:q] ? params[:q].to_i : 1)) %> copy/copies of Swift To-Do List to <%= stdl_professional.name %> for just <%= number_to_currency(@upgrade.price) %> / copy.

+ <%= hidden_field_tag "PRODUCTID", @upgrade.bmtID %> + + <% upgrade = stdl_professional.upgrade('from-stdl6-discount') %> +

Purchase <%= quantity_select_tag(nil, 0) %> new additional copies for just <%= number_to_currency(upgrade.price) %> / copy. (Save <%= percents_save(stdl_professional.regular_price, upgrade.price) %>)

+ <%= hidden_field_tag "PRODUCTID", upgrade.bmtID %> + +

(If you buy 2 or more new copies, you will get an additional volume discount)

+ +
<%= submit_image('upgrade_to_professional') %>
+ <% end -%> +
<%= image_tag('money_back-blue.gif', :title => t("txt.order.money_back")) %>
+
+ +

Upgrade to basic Standard edition

+ +<% form_for @survey, :builder => UpgradeHelper::SurveyFormBuilder, :html => { :onsubmit => "if (!validate_free_upgrade_survey_from(this)) return false", :class => "prevent-return" } do |f| -%> + + <%= hidden_field_tag :magicwand, "you-shall-not-pass" %> + <%= f.hidden_field :product_id %> + + <% features_options = ["Nothing - Swift To-Do List is perfect", "Sub-tasks", "Custom tree-icons", "Ability to attach emails from Outlook", "Complete calendar", + "Custom fields (columns)", "Ability to merge/split databases", "In-place editing", "Sticky notes created from tasks or to-do lists", "Search-box", + "Spellchecker", "Better import/export", "Windows Mobile version", "iPhone version", "BlackBerry version", "Mac version"] %> + + +

Your contact information

+ +
+ <%= f.label :full_name %><%= f.text_field :full_name, :value => params[:n], :size => 22 %> +
+ +
+ <%= f.label :company_name %><%= f.text_field :company_name, :value => params[:c], :size => 22 %> +
+ +
+ <%= f.label :purchase_email1, t('txt.survey.purchase_email_stdl') %><%= f.text_field :purchase_email1, :value => params[:e], :size => 22 %> or <%= f.text_field :purchase_email2, :size => 22 %> or <%= f.text_field :purchase_email3, :size => 22 %> +
+ +
+ <%= f.label :current_email %><%= f.text_field :current_email, :value => params[:e], :size => 22 %> +
+ +

Please note: You are eligible for free upgrade to Standard edition only if you have purchased Swift To-Do List + in February 2010 or later. If you have purchased Swift To-Do List before February 2010, then please go to the <%= link_to "relevant upgrade page", upgrade_path("to-stdl7") %>.

+ + +

Help us make Swift To-Do List better!

+ +

Please fill this short optional 10-step survey. Check all boxes that apply.

+ +
+

1. <%= f.question "For what projects do you use Swift To-Do List?" %>

+

<%= f.answer :check_box, ["Work Projects", "Personal projects", "Family projects", "Non-profit projects"] %>

+
+ +
+

2. <%= f.question "For what do you use Swift To-Do List?" %>

+

I use Swift To-Do List to <%= f.answer :text_field, :size => 40, :class => "freetext" %>

+
+ +
+

3. <%= f.question "What describes your position the best?" %>

+

<%= f.answer :check_box, ["Employee", "Freelancer", "Consultant", "Manager", "Business owner", "At home", "Retired", "Student"] %>

+
+ +
+

4. <%= f.question "What is your occupation (profession)?" %>

+

<%= f.answer :text_field, :size => 42, :class => "freetext" %>

+
+ +
+

5. <%= f.question "Where do you use Swift To-Do List?" %>

+

<%= f.answer :check_box, ["Home", "Work", "Laptop", "Else"] %>

+
+ +
+

6. <%= f.question "On how many computers total do you use Swift To-Do List?" %>

+

<%= f.answer :select, ["1", "2", "3", "4", "5+", "10+", "20+", "30+", "50+", "100"], :class => "dropdown" %> computer(s)

+
+ +
+

7. <%= f.question "Do any of your colleagues/friends use Swift To-Do List?" %>

+

<%= f.answer :radio_button, "Yes" %>, around <%= f.answer :text_field, :size => 1, :class => "freetext" %> of them. <%= f.answer :radio_button, "No", :class => 'lpad' %>

+
+ +
+

8. <%= f.question "What do you think are the 3 most important features to be added?" %>

+

<%= f.answer :combo, features_options %>
+ <%= f.answer :combo, features_options %>
+ <%= f.answer :combo, features_options %>

+
+ +
+

9. <%= f.question "If you want to recommend Swift To-Do List to someone now, fill their email addresses below:" %>

+

<%= f.answer :text_area, :rows => 3, :cols => 51 %>

+
+ +
+

10. <%= f.question "Any comments, thoughts, feedback? Please speak up! :-)" %>

+

<%= f.answer :text_area, :rows => 5, :cols => 81 %>

+
+ +

Thank you very much for your time and valuable opinions. We really appreciate it. Please allow up to 48 hours for delivery of free upgrades.

+ +

<%= link_to "By the way: We are looking for partners and resellers. Interested? Get in touch.", {}, :rel => "abibgal@qrkgebarg.pbz?fhowrpg=Cnegarefuvc%20Cebcbfny", :class => "obfmail" %>

+ +
+ <%= f.submit "Submit and upgrade to Standard", :id => "claim-button", :class => "native-button", :onclick => "$('#pro-button').attr('disabled', true);" %> + +
+ +<% end -%> \ No newline at end of file diff --git a/app/views/upgrade/index.html.erb b/app/views/upgrade/index.html.erb new file mode 100644 index 0000000..7dea77d --- /dev/null +++ b/app/views/upgrade/index.html.erb @@ -0,0 +1,4 @@ +
+ <%= subpage_headline(:text => @static_page.name, :html => { :class => "smaller" }) %> +
<%= render :inline => @static_page.html %><%#= render :file => "upgrade/_draft" %>
+
\ No newline at end of file diff --git a/app/views/wp/blv_sidebar_ad.html.erb b/app/views/wp/blv_sidebar_ad.html.erb new file mode 100644 index 0000000..595651b --- /dev/null +++ b/app/views/wp/blv_sidebar_ad.html.erb @@ -0,0 +1,8 @@ +
+

Better ListView

+

+ Better list view control for .NET
+ <%= link_to(image_tag("blv-blog-sidebar.gif", :class => "screenshot", :alt => "Better ListView"), featured_product) %> +

+ <%= link_to(t('txt.blog.download'), download_path(featured_product), :class => "download") %> +
\ No newline at end of file diff --git a/app/views/wp/feeds.html.erb b/app/views/wp/feeds.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/wp/footer.html.erb b/app/views/wp/footer.html.erb new file mode 100644 index 0000000..cf5f75a --- /dev/null +++ b/app/views/wp/footer.html.erb @@ -0,0 +1 @@ +<%= render :partial => "shared/tiny_footer" %> \ No newline at end of file diff --git a/app/views/wp/get_meta_tags.html.erb b/app/views/wp/get_meta_tags.html.erb new file mode 100644 index 0000000..eb06a3a --- /dev/null +++ b/app/views/wp/get_meta_tags.html.erb @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/views/wp/get_page_include.html.erb b/app/views/wp/get_page_include.html.erb new file mode 100644 index 0000000..7232649 --- /dev/null +++ b/app/views/wp/get_page_include.html.erb @@ -0,0 +1 @@ +<%= page_include %> \ No newline at end of file diff --git a/app/views/wp/header.html.erb b/app/views/wp/header.html.erb new file mode 100644 index 0000000..f83e92d --- /dev/null +++ b/app/views/wp/header.html.erb @@ -0,0 +1 @@ +<%= render :partial => "shared/header" %> \ No newline at end of file diff --git a/app/views/wp/post_ad_blv.html.erb b/app/views/wp/post_ad_blv.html.erb new file mode 100644 index 0000000..47e51a4 --- /dev/null +++ b/app/views/wp/post_ad_blv.html.erb @@ -0,0 +1,9 @@ +
+ <%= link_to(image_tag("blv-blog-post.gif", :class => "screenshot", :alt => "Better ListView"), featured_product) %> +

<%= link_to "Better ListView", featured_product %>

+

Ultimate .NET ListView replacement control
for WinForms (C#, VB.NET)

+
+ <%= download_link_to "Download", featured_product, :class => "dbtn" %> + <%= link_to("More Info", featured_product, :class => "dbtn") %> +
+
\ No newline at end of file diff --git a/app/views/wp/post_ad_stdl.html.erb b/app/views/wp/post_ad_stdl.html.erb new file mode 100644 index 0000000..205e5cf --- /dev/null +++ b/app/views/wp/post_ad_stdl.html.erb @@ -0,0 +1,9 @@ +
+ <%= link_to(image_tag("stdl-blog-post.gif", :class => "screenshot", :alt => "stdl"), Settings.stdl_url) %> +

<%= link_to("Swift To-Do List", Settings.stdl_url) %>

+

<%= t('txt.blog.stdl') %>

+
+ <%= link_to "Download", Settings.stdl_download, :class => "dbtn" %> + <%= link_to("More Info", Settings.stdl_url, :class => "dbtn") %> +
+
\ No newline at end of file diff --git a/app/views/wp/sidebar_ad.html.erb b/app/views/wp/sidebar_ad.html.erb new file mode 100644 index 0000000..d93b701 --- /dev/null +++ b/app/views/wp/sidebar_ad.html.erb @@ -0,0 +1,8 @@ +
+

<%= featured_product.name %>

+

+ <%= t('txt.blog.stdl') %>
+ <%= link_to(image_tag("stdl-blog-sidebar.gif", :class => "screenshot", :alt => "stdl"), featured_product) %> +

+ <%= link_to(t('txt.blog.download'), download_path(featured_product), :class => "download") %> +
\ No newline at end of file diff --git a/config/application.yml b/config/application.yml new file mode 100644 index 0000000..a0ecaf6 --- /dev/null +++ b/config/application.yml @@ -0,0 +1,136 @@ +defaults: &defaults + app: "componentowl" + host: "elb.componentowl.com" + feedback_email: "support@componentowl.com" + internal_error_email: ["support@componentowl.com"] + license_key_error_email: "support@componentowl.com" + no_email: "no.email@componentowl.com" + notification_email: "support@componentowl.com" + featured_product: better-listview + featured_category: better-listview + whats_new_code: whats-new + editions_code: editions + features_code: features + screenshots_code: screenshots + releases_code: releases + story_code: story + pricing_code: pricing-licensing + documentation_code: documentation + quick_start_guide_code: quick-start-guide + class_reference_code: class-reference + support_request_origin_internal_error: internal-error + private_dir: private + api_token: sitHmenkae9coOLy75tabESAdsdorMYpadre83SmeLtaFt7piCnoGfUsed53wot0Dregs + unsubscribe_url: "http://elb.componentowl.com/unsubscribe/%s" + url_param_crypt: + password: jug6eBbEd + salt: vEsT67trIp + dextronet_url: http://elb.componentowl.com + stdl_url: http://www.dextronet.com/swift-to-do-list-software + stdl_download: http://www.dextronet.com/download/swift-to-do-list + better_splitbutton_buy_url: "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart?CID=1830/12&PRODUCTID=18300075&CLR=0" + facebook_url: "https://www.facebook.com/ComponentOwl" + newsletter: + from: 'Component Owl ' + batch_size: 300 + rss: + posts: 8 + home: + products: 6 + blog_posts: 5 + latest: 5 + resources: + blog_posts: 5 + featured_articles: 3 + products: + testimonials: 10 + product: + screenshots: 4 + featured_testimonials: 2 + order: + bmt_url: https://secure.bmtmicro.com/servlets/Orders.ShoppingCart + cid: 1830/12 + clr: 0 + activation_limits: + activations_18300042: 3 + activations_18300043: 3 + activations_18300044: 15 + activations_18300045: 15 + activations_18300046: 300 + activations_18300047: 300 + activations_18300048: 1000 + activation_auth: + login: activations + password: pEePUbr6Castuprep4spe35trS6Eh + pad: + MASTER_PAD_VERSION: "3.11" + MASTER_PAD_EDITOR: "Dextronet PAD Generator" + MASTER_PAD_INFO: "Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad" + Company_Name: "Component Owl" + Address_1: "" + Address_2: "" + City_Town: "" + State_Province: "CA" + Zip_Postal_Code: "93109" + Country: "Czech Republic" + Company_WebSite_URL: "http://www.componentowl.com" + Contact_First_Name: "Brian" + Contact_Last_Name: "Galura" + Contact_Email: "support@componentowl.com" + Author_First_Name: "Brian" + Author_Last_Name: "Galura" + Author_Email: "support@componentowl.com" + Sales_Email: "support@componentowl.com" + Support_Email: "support@componentowl.com" + General_Email: "support@componentowl.com" + ASP_FORM: "Y" + ASP_Member: "Y" + ASP_Member_Number: "6865" + NewsFeed_FORM: "Y" + NewsFeed_VERSION: "1.0" + NewsFeed_URL: "http://www.componentowl.com/feeds.rss" + NewsFeed_Type: "RSS 0.90" + NewsFeed_Language: "English" + NewsFeed_Purpose: "News" + NewsFeed_Author_Email: "support@componentowl.com" + NewsFeed_Author_First_Name: "Brian" + NewsFeed_Author_Last_Name: "Galura" + NewsFeed_DESCRIPTION: "Component Owl News and Updates" + Site_FORM: "Y" + Site_VERSION: "1.0" + Site_URL: "http://elb.componentowl.com" + Site_DESCRIPTION: "Better ListView .NET Component" + Site_Contact_Email: "support@componentowl.com" + Site_Contact_First_Name: "Brian" + Site_Contact_Last_Name: "Galura" + Program_Type: "Shareware" + Program_Release_Status: "New Release" + Program_Install_Support: "Install and Uninstall" + Program_OS_Support: "Win2000,Win7 x32,Win7 x64,WinServer,WinVista,WinVista x64,WinXP" + Program_Language: "English" + Program_System_Requirements: "None" + Has_Expire_Info: "N" + Expire_Count: "" + Expire_Based_On: "" + Expire_Other_Info: "" + Distribution_Permissions: "The original trial package can be distributed through internet and on CD-roms, as long as no money is being charged for the content itself." + +development: + <<: *defaults + +test: + <<: *defaults + +preproduction: + <<: *defaults + uploadable_asset_host: "assets.componentowl.dev.netcreates.com" + download_host: "assets.componentowl.dev.netcreates.com" + +production: + <<: *defaults + uploadable_asset_host: "assets.componentowl.com" + download_host: "download.componentowl.com" + feedback_email: ["support@componentowl.com"] + internal_error_email: ["support@componentowl.com"] + license_key_error_email: ["support@componentowl.com"] + notification_email: "support@componentowl.com" diff --git a/config/asset_packages.yml b/config/asset_packages.yml new file mode 100644 index 0000000..7a460af --- /dev/null +++ b/config/asset_packages.yml @@ -0,0 +1,36 @@ +--- +javascripts: +- base: + - jquery + - jquery-ui + - jrails + - dextronet + - 'plugins/jquery.validation' +- simple: + - jquery + - jquery-ui + - jrails + - dextronet + - 'plugins/jquery.validation' + - 'plugins/jquery.fancybox' + - simple +- app: + - jquery + - jquery-ui + - jrails + - dextronet + - 'plugins/jquery.validation' + - 'plugins/jquery.fancybox' + - 'plugins/jquery.tools' + - application +stylesheets: +- base: + - jquery.fancybox + - base + - main + - headings +- simple: + - jquery.fancybox + - base + - simple + - headings \ No newline at end of file diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000..0ad0f78 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,110 @@ +# Don't change this file! +# Configure your app in config/environment.rb and config/environments/*.rb + +RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) + +module Rails + class << self + def boot! + unless booted? + preinitialize + pick_boot.run + end + end + + def booted? + defined? Rails::Initializer + end + + def pick_boot + (vendor_rails? ? VendorBoot : GemBoot).new + end + + def vendor_rails? + File.exist?("#{RAILS_ROOT}/vendor/rails") + end + + def preinitialize + load(preinitializer_path) if File.exist?(preinitializer_path) + end + + def preinitializer_path + "#{RAILS_ROOT}/config/preinitializer.rb" + end + end + + class Boot + def run + load_initializer + Rails::Initializer.run(:set_load_path) + end + end + + class VendorBoot < Boot + def load_initializer + require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" + Rails::Initializer.run(:install_gem_spec_stubs) + Rails::GemDependency.add_frozen_gem_path + end + end + + class GemBoot < Boot + def load_initializer + self.class.load_rubygems + load_rails_gem + require 'initializer' + end + + def load_rails_gem + if version = self.class.gem_version + gem 'rails', version + else + gem 'rails' + end + rescue Gem::LoadError => load_error + $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) + exit 1 + end + + class << self + def rubygems_version + Gem::RubyGemsVersion rescue nil + end + + def gem_version + if defined? RAILS_GEM_VERSION + RAILS_GEM_VERSION + elsif ENV.include?('RAILS_GEM_VERSION') + ENV['RAILS_GEM_VERSION'] + else + parse_gem_version(read_environment_rb) + end + end + + def load_rubygems + require 'rubygems' + min_version = '1.3.1' + unless rubygems_version >= min_version + $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) + exit 1 + end + + rescue LoadError + $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) + exit 1 + end + + def parse_gem_version(text) + $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ + end + + private + def read_environment_rb + File.read("#{RAILS_ROOT}/config/environment.rb") + end + end + end +end + +# All that for this: +Rails.boot! diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..f308b79 --- /dev/null +++ b/config/database.yml @@ -0,0 +1,55 @@ +# MySQL. Versions 4.1 and 5.0 are recommended. +# +# Install the MySQL driver: +# gem install mysql +# On Mac OS X: +# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql +# On Mac OS X Leopard: +# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config +# This sets the ARCHFLAGS environment variable to your native architecture +# On Windows: +# gem install mysql +# Choose the win32 build. +# Install MySQL and put its /bin directory on your path. +# +# And be sure to use new-style password hashing: +# http://dev.mysql.com/doc/refman/5.0/en/old-client.html +development: + adapter: mysql + encoding: utf8 + database: componentowl_dev + username: foresth + password: + host: mysql.netcreates.com + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: mysql + encoding: utf8 + database: componentowl_test + username: root + password: + host: localhost + +production: + adapter: mysql + encoding: utf8 + database: componentowl + username: root + password: ddc601 + #password: Ddc60111! + host: 127.0.0.1 + #host: 10.5.20.6 + +blog: + adapter: mysql + encoding: utf8 + database: componentowl_blog + username: root + password: ddc601 + #password: Ddc60111! + #host: co.cluster-cn6jflmsfmae.us-east-1.rds.amazonaws.com + #host: 10.5.20.6 + host: 127.0.0.1 diff --git a/config/database.yml.example b/config/database.yml.example new file mode 100644 index 0000000..4e877f8 --- /dev/null +++ b/config/database.yml.example @@ -0,0 +1,42 @@ +# MySQL. Versions 4.1 and 5.0 are recommended. +# +# Install the MySQL driver: +# gem install mysql +# On Mac OS X: +# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql +# On Mac OS X Leopard: +# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config +# This sets the ARCHFLAGS environment variable to your native architecture +# On Windows: +# gem install mysql +# Choose the win32 build. +# Install MySQL and put its /bin directory on your path. +# +# And be sure to use new-style password hashing: +# http://dev.mysql.com/doc/refman/5.0/en/old-client.html +development: + adapter: mysql + encoding: utf8 + database: dextronet_development + username: root + password: + host: localhost + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: mysql + encoding: utf8 + database: dextronet_test + username: root + password: + host: localhost + +production: + adapter: mysql + encoding: utf8 + database: dextronet_production + username: root + password: + host: localhost diff --git a/config/deploy.rb b/config/deploy.rb new file mode 100644 index 0000000..9f3e193 --- /dev/null +++ b/config/deploy.rb @@ -0,0 +1,89 @@ +set :stages, %w(production) +set :default_stage, "production" +require 'capistrano/ext/multistage' + +rails_env = fetch(:rails_env, "production") + +after "deploy", "deploy:cleanup" +after "deploy:migrations", "deploy:cleanup" +after "deploy:migrate", "deploy:restart" +after "deploy:update_code", "symlink_files", "symlink_database_yml", "symlink_blog" +after "deploy:update_code", "install_gems" +after "deploy:update_code", "db:insert_required_data" + +task :symlink_files, :roles => [:app, :db] do + run "ln -nfs #{shared_path}/files #{release_path}/public/files" +end + +task :symlink_blog, :roles => [:app, :db] do + run "ln -nfs #{shared_path}/blog #{release_path}/public/blog" +end + +task :install_gems, :roles => [:app, :db] do + run "cd #{latest_release}; rake gems:install" +end + +task :symlink_database_yml, :roles => [:app, :db] do + run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" +end + +task :symlink_htaccess, :roles => [:app, :db] do + run "ln -nfs #{shared_path}/config/.htaccess #{release_path}/public/.htaccess" +end + +namespace :deploy do + desc "Restart app" + task :restart, :roles => :app do + run "cd #{current_path} && chmod 755 #{chmod755}" + run "kill -s USR2 `cat /tmp/componentowl.com.pid`" + end + + desc "Update the crontab file" + task :update_crontab, :roles => :cron, :only => { :primary => true } do + run "cd #{current_path} && whenever --update-crontab #{application} --set 'environment=production&pwd=#{current_path}'" + end + + desc "Recreate symlink" + task :resymlink, :roles => :app do + run "rm -f #{current_path} && ln -s #{release_path} #{current_path}" + end + + desc "Upload assets to CloudFront" + task :assets do + rails_env = fetch(:rails_env, "production") + run "cd #{release_path} && rake RAILS_ENV=#{rails_env} dextronet_core:assets_to_cloudfront" + end +end + +namespace :db do + desc "Dump DB" + task :dump, :roles => :db, :only => { :primary => true } do + run "cd #{latest_release}; rake iquest:db:dump OUTPUT_DIR=#{shared_path}/db RAILS_ENV=production" + end + + desc "Insert required data" + task :insert_required_data, :roles => :db, :only => { :primary => true } do + rails_env = fetch(:rails_env, "production") + run "cd #{latest_release}; rake RAILS_ENV=#{rails_env} dextronet_core:import:all" + end +end + +namespace :less do + desc 'Updates the stylesheets generated by LESS CSS' + task :update do + run "cd #{release_path} && rake less:update RAILS_ENV=#{rails_env}" + end +end + +namespace :asset do + namespace :packager do + desc "Build all assets" + task :build_all do + run "cd #{release_path} && rake asset:packager:build_all" + end + end +end + +after "deploy:update_code", "asset:packager:build_all" +before "asset:packager:build_all", "less:update" +#after "asset:packager:build_all", "deploy:assets" \ No newline at end of file diff --git a/config/deploy/development.rb b/config/deploy/development.rb new file mode 100644 index 0000000..06504c3 --- /dev/null +++ b/config/deploy/development.rb @@ -0,0 +1,36 @@ +set :user, "rulor_com" + +set :rails_env, "preproduction" + +set :chmod755, "app config db lib public vendor script script/runner script/process/reaper tmp" +set :use_sudo, false +set :runner, "rulor_com" + +set :application, "componentowl.dev.netcreates.com" +set :repository, "ssh://rulor_com@netcreates.com/~/git/componentowl" + +# scm +set :deploy_to, "/home/#{user}/componentowl.dev.netcreates.com" +set :deply_via, :remote_cache +set :scm, :git +set :branch, "dev" + +# roles +role :app, "netcreates.com" +role :web, "netcreates.com" +role :db, "netcreates.com", :primary => true +role :cron, "netcreates.com", :primary => true + +# run options +default_run_options[:pty] = true + +after "deploy:remigrate", "deploy:restart" + +# custom tasks +namespace :deploy do + desc "Drop and recreate database, run migrations and load fixtures" + task :remigrate, :roles => [:app, :db] do + rails_env = fetch(:rails_env, "preproduction") + run "cd #{latest_release}; rake RAILS_ENV=#{rails_env} iquest:db:remigrate" + end +end diff --git a/config/deploy/production.rb b/config/deploy/production.rb new file mode 100644 index 0000000..7a61fd1 --- /dev/null +++ b/config/deploy/production.rb @@ -0,0 +1,32 @@ +set :user, "dextronet" + +set :chmod755, "app config db lib public vendor script script/runner script/process/reaper tmp" +set :use_sudo, false +set :runner, "dextronet" + +set :application, "www.componentowl.com" +set :repository, "git@bitbucket.org:dextronet/componentowl.com.git" + +# scm +set :deploy_to, "/srv/www/componentowl.com" +set :deply_via, :remote_cache +set :scm, :git +set :repository_cache, "git_cache" +set :branch, "master" +set :ssh_options, { :forward_agent => true } + +# roles +role :app, "dextronet.com" +role :web, "dextronet.com" +role :db, "dextronet.com", :primary => true +role :cron, "dextronet.com", :primary => true + +#dump prod migraci pouze na produkcnim serveru +before "deploy:migrate", "db:dump" +#before "deploy:update_code", "db:dump" +after "deploy:create_symlink", "deploy:update_crontab" +after "deploy:rollback:cleanup", "deploy:update_crontab" + +# run options +default_run_options[:pty] = true +default_run_options[:shell] = '/bin/bash --login' diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000..7a342ca --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,62 @@ +# Be sure to restart your server when you modify this file + +#ENV['GEM_PATH'] = '/home/rulor_com/.gems:/home/jirinovotny/.gems:/usr/lib/ruby/gems/1.8' + +# Specifies gem version of Rails to use when vendor/rails is not present +RAILS_GEM_VERSION = '2.3.11' unless defined? RAILS_GEM_VERSION + +# Bootstrap the Rails environment, frameworks, and default configuration +require File.join(File.dirname(__FILE__), 'boot') + +Rails::Initializer.run do |config| + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Add additional load paths for your own custom dirs + # config.load_paths += %W( #{RAILS_ROOT}/extras ) + + # Specify gems that this application depends on and have them installed with rake gems:install + # config.gem "bj" + # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net" + # config.gem "sqlite3-ruby", :lib => "sqlite3" + # config.gem "aws-s3", :lib => "aws/s3" + config.gem 'mysql' + config.gem 'fastercsv' + config.gem 'searchlogic', :version => '~> 2.4.25' + config.gem 'authlogic', :version => '2.1.6' + config.gem 'less', :version => '~> 1.2.21' + config.gem 'settingslogic' + config.gem 'exception_notification', :version => '2.3.3.0' + config.gem 'twitter4r', :lib => 'twitter', :version => '~> 0.5.1' + config.gem 'httparty' + config.gem "ezcrypto", :version => '~> 0.7.2' + config.gem 'will_paginate', :version => '~> 2.3.12' + config.gem "aws-s3", :lib => "aws/s3" + config.gem "db2s3", :source => "http://gemcutter.org" + config.gem "foresth-cloudfront_asset_host", :lib => "cloudfront_asset_host", :version => '>= 1.0.6.3' + config.gem 'nokogiri', :version => '~> 1.4.3.1' + config.gem 'foresth-ar_mailer', :lib => 'action_mailer/ar_mailer', :version => '~> 2.1.8' + config.gem 'unicorn' + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Skip frameworks you're not going to use. To use Rails without a database, + # you must remove the Active Record framework. + # config.frameworks -= [ :active_record, :active_resource, :action_mailer ] + + # Activate observers that should always be running + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. + # config.time_zone = 'UTC' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')] + config.i18n.default_locale = :en + + config.action_controller.page_cache_directory = "#{Rails.root}/public/cache" +end diff --git a/config/environments/blog.rb b/config/environments/blog.rb new file mode 100644 index 0000000..79845f4 --- /dev/null +++ b/config/environments/blog.rb @@ -0,0 +1,2 @@ +# Use for database backup with "db2s3:backup:full RAILS_ENV=blog" +# so that the "blog" database from database.yml is used \ No newline at end of file diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000..d2e9222 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,17 @@ +# Settings specified here will take precedence over those in config/environment.rb + +# In the development environment your application's code is reloaded on +# every request. This slows down response time but is perfect for development +# since you don't have to restart the webserver when you make code changes. +config.cache_classes = false + +# Log error messages when you accidentally call methods on nil. +config.whiny_nils = true + +# Show full error reports and disable caching +config.action_controller.consider_all_requests_local = true +config.action_view.debug_rjs = true +config.action_controller.perform_caching = true + +# Don't care if the mailer can't send +config.action_mailer.raise_delivery_errors = false \ No newline at end of file diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000..27119d2 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,28 @@ +# Settings specified here will take precedence over those in config/environment.rb + +# The production environment is meant for finished, "live" apps. +# Code is not reloaded between requests +config.cache_classes = true + +# Full error reports are disabled and caching is turned on +config.action_controller.consider_all_requests_local = false +config.action_controller.perform_caching = true +config.action_view.cache_template_loading = true + +# See everything in the log (default is :info) +# config.log_level = :debug + +# Use a different logger for distributed setups +# config.logger = SyslogLogger.new + +# Use a different cache store in production +# config.cache_store = :mem_cache_store + +# Enable serving of images, stylesheets, and javascripts from an asset server +# config.action_controller.asset_host = "http://assets.example.com" + +# Disable delivery errors, bad email addresses will be ignored +# config.action_mailer.raise_delivery_errors = false + +# Enable threaded mode +# config.threadsafe! \ No newline at end of file diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000..d6f80a4 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,28 @@ +# Settings specified here will take precedence over those in config/environment.rb + +# The test environment is used exclusively to run your application's +# test suite. You never need to work with it otherwise. Remember that +# your test database is "scratch space" for the test suite and is wiped +# and recreated between test runs. Don't rely on the data there! +config.cache_classes = true + +# Log error messages when you accidentally call methods on nil. +config.whiny_nils = true + +# Show full error reports and disable caching +config.action_controller.consider_all_requests_local = true +config.action_controller.perform_caching = false +config.action_view.cache_template_loading = true + +# Disable request forgery protection in test environment +config.action_controller.allow_forgery_protection = false + +# Tell Action Mailer not to deliver emails to the real world. +# The :test delivery method accumulates sent emails in the +# ActionMailer::Base.deliveries array. +config.action_mailer.delivery_method = :test + +# Use SQL instead of Active Record's schema dumper when creating the test database. +# This is necessary if your schema can't be completely dumped by the schema dumper, +# like if you have constraints or database-specific column types +# config.active_record.schema_format = :sql \ No newline at end of file diff --git a/config/initializers/action_mailer.rb b/config/initializers/action_mailer.rb new file mode 100644 index 0000000..4a0cb1b --- /dev/null +++ b/config/initializers/action_mailer.rb @@ -0,0 +1,14 @@ +ActionMailer::Base.delivery_method = :smtp + +ActionMailer::Base.smtp_settings = { + :address => "smtp.emailsrvr.com", + :port => 587, + :domain => "dextronet.com", + :authentication => :login, + :user_name => "mailer@dextronet.com", + :password => "5hB9MYMe" +} + +ActionMailer::Base.perform_deliveries = true +ActionMailer::Base.raise_delivery_errors = true +ActionMailer::Base.default_charset = "utf-8" diff --git a/config/initializers/asset_packager.rb b/config/initializers/asset_packager.rb new file mode 100644 index 0000000..f5bee6e --- /dev/null +++ b/config/initializers/asset_packager.rb @@ -0,0 +1 @@ +Synthesis::AssetPackage.merge_environments = ["production", "preproduction"] \ No newline at end of file diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..c2169ed --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code. +# Rails.backtrace_cleaner.remove_silencers! \ No newline at end of file diff --git a/config/initializers/cloudfront_asset_host.rb b/config/initializers/cloudfront_asset_host.rb new file mode 100644 index 0000000..ab27d7d --- /dev/null +++ b/config/initializers/cloudfront_asset_host.rb @@ -0,0 +1,13 @@ +CloudfrontAssetHost.configure do |config| + if Rails.env.production? + config.bucket = "componentowl-assets" + config.cname = "http://assets%d.componentowl.com" + else + config.bucket = "componentowl-assets-dev" + config.cname = "http://assets%d.componentowl.dev.netcreates.com" + end + + config.plain_prefix = "s" + + #config.enabled = true if Rails.env.production? || Rails.env.preproduction? +end \ No newline at end of file diff --git a/config/initializers/db2s3.rb b/config/initializers/db2s3.rb new file mode 100644 index 0000000..b412961 --- /dev/null +++ b/config/initializers/db2s3.rb @@ -0,0 +1,7 @@ +DB2S3::Config.instance_eval do + S3 = { + :access_key_id => 'AKIAJO5TCO43GDBNG3ZQ', + :secret_access_key => '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', + :bucket => 'componentowl-db-backup' + } +end \ No newline at end of file diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000..d531b8b --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000..bac3a5e --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,6 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone +Mime::Type.register "text/plain", :txt diff --git a/config/initializers/new_rails_defaults.rb b/config/initializers/new_rails_defaults.rb new file mode 100644 index 0000000..8ec3186 --- /dev/null +++ b/config/initializers/new_rails_defaults.rb @@ -0,0 +1,19 @@ +# Be sure to restart your server when you modify this file. + +# These settings change the behavior of Rails 2 apps and will be defaults +# for Rails 3. You can remove this initializer when Rails 3 is released. + +if defined?(ActiveRecord) + # Include Active Record class name as root for JSON serialized output. + ActiveRecord::Base.include_root_in_json = true + + # Store the full class name (including module namespace) in STI type column. + ActiveRecord::Base.store_full_sti_class = true +end + +# Use ISO 8601 format for JSON serialized times and dates. +ActiveSupport.use_standard_json_time_format = true + +# Don't escape HTML entities in JSON, leave that for the #json_escape helper. +# if you're including raw json in an HTML page. +ActiveSupport.escape_html_entities_in_json = false \ No newline at end of file diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb new file mode 100644 index 0000000..1747862 --- /dev/null +++ b/config/initializers/paperclip.rb @@ -0,0 +1,16 @@ +Paperclip.interpolates(:product_code) do |attachment, style| + attachment.instance.product.code +end + +Paperclip.interpolates(:size) do |attachment, style| + attachment.instance.size +end + +Paperclip.interpolates(:timestamp) do |attachment, style| + attachment.instance_read(:updated_at).in_time_zone(7).strftime("%s") +end + +Paperclip.interpolates(:s3_url) do |attachment, style| + path = attachment.path(style) + "#{attachment.s3_protocol}://#{Settings.uploadable_asset_host % (path.hash % 4)}/#{path.gsub(%r{^/}, "")}" +end diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 0000000..7251681 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,21 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying cookie session data integrity. +# If you change this key, all old sessions will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +ActionController::Base.session = { + :key => '_dextronet_session', + :secret => 'c088c1cac65e99187c3af8316642155f96a998348b94dd2b9a3ca99b0f2da8e3297f3d18c34c4a142debf9dc6352539187f2398d5ae7b3690d73ef78b69c0b15' +} + +ActionController::Dispatcher.middleware.insert_before( + ActionController::Session::CookieStore, + FlashSessionCookieMiddleware, + ActionController::Base.session_options[:key] +) + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rake db:sessions:create") +# ActionController::Base.session_store = :active_record_store diff --git a/config/initializers/super_exception_notifier.rb b/config/initializers/super_exception_notifier.rb new file mode 100644 index 0000000..b474d7e --- /dev/null +++ b/config/initializers/super_exception_notifier.rb @@ -0,0 +1,11 @@ +#ExceptionNotifier.configure_exception_notifier do |config| +# config[:app_name] = "[ComponentOwl]" +# config[:sender_address] = %("ComponentOwl - Application Error" ) +# config[:exception_recipients] = "zabojnik@dextronet.com" +# config[:subject_prepend] = "[ComponentOwl - ERROR] " +# config[:skip_local_notification] = false +# config[:view_path] = 'app/views/error' +# #config[:send_email_error_codes] = %w( 400 404 405 500 503 ) +#end + +ExceptionNotification::Notifier.exception_recipients = %w(bgalura+co@gmail.com) diff --git a/config/initializers/twitter.rb b/config/initializers/twitter.rb new file mode 100644 index 0000000..88e98d6 --- /dev/null +++ b/config/initializers/twitter.rb @@ -0,0 +1,7 @@ +Twitter::Client.configure do |conf| + conf.oauth_consumer_token = 'ezZAVdpWuCtIZL4WXhb7w' + conf.oauth_consumer_secret = 'qT3yAQYhfBwgQw4IUCDOVYt3rIY5rXJEM1aCDu0fo4Q' +end +TWITTER_LOGIN = 'ComponentOwl' +TWITTER_ACCESS_KEY = '175738067-n3o76BAf3r2Ud3t6v9oxWYWPjFz3FTNojT1r8RZL' +TWITTER_ACCESS_SECRET = 'bZBPkbQqWrqnEWCBU1zOAtVqqkEFOI7VT4aRf4JpQ' \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..f4b24c6 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,409 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + time: + formats: + default: "%m/%d/%Y %I:%M %p" + medium: "%m/%d/%Y %I:%M %p" + date_only: "%m/%d/%Y" + cute: "%b %d, %Y" + cute_long: "%A, %d %B %Y" + date: + formats: + default: "%m/%d/%Y" + cute: "%b %d, %Y" + cute_long_month: "%B %d, %Y" + cute_with_dayname: "%A, %b %d, %Y" + news: "%d%b" + iso: "%Y-%m-%d" + license_generator: "%Y-%m-%d" + + activerecord: + errors: + messages: + not_in_past: "is not in the past." + models: + article: + one: "Article" + other: "Articles" + contact: + one: "Contact" + other: "Contacts" + faq: + one: "FAQ" + other: "FAQ" + faq_category: + one: "FAQ Category" + other: "FAQ Categories" + latest: + one: "News" + other: "News" + meta_tag: + one: "Meta Tag" + other: "Meta Tags" + pad_value: + one: "PAD File Value" + other: "PAD File Values" + page_include: + one: "Google Analytics" + other: "Google Analytics" + press_release: + one: "Press Release" + other: "Press Releases" + product: + one: "Product" + other: "Products" + product_category: + one: "Product Category" + other: "Product Categories" + product_description: + one: "Product Description" + other: "Product Descriptions" + product_description_type: + one: "Description Type" + other: "Description Types" + product_edition: + one: "Product Edition" + other: "Product Editions" + product_icon: + one: "Product Icon" + other: "Product Icons" + product_image: + one: "Product Image" + other: "Product Images" + product_offer: + one: "Product Offer" + other: "Product Offers" + product_page: + one: "Product Page" + other: "Product Pages" + product_url_param: + one: "Product Url Parameter" + other: "Product Url Parameters" + promotion: + one: "Promotion" + other: "Promotions" + release: + one: "Release" + other: "Releases" + screenshot: + one: "Screenshot" + other: "Screenshots" + sitemap_title: + one: "Sitemap Title" + other: "Sitemap Titles" + static_page: + one: "Static Page" + other: "Static Pages" + subscription: + one: "Subscription" + other: "Subscriptions" + subtemplate: + one: "Subtemplate" + other: "Subtemplates" + subscription_list: + one: "Subscription List" + other: "Subscription Lists" + subscription_list_type: + one: "Subscription List Type" + other: "Subscription List Types" + support_request: + one: "Support Request" + other: "Support Requests" + survey: + one: "Survey" + other: "Surveys" + testimonial: + one: "Testimonial" + other: "Testimonials" + testimonial_location: + one: "Testimonial Location" + other: "Testimonial Locations" + testimonial_position: + one: "Testimonial Position" + other: "Testimonial Positions" + url_destination: + one: "Url Destination" + other: "Url Destinations" + user: + one: "User" + other: "Users" + volume_discount: + one: "Volume Discount" + other: "Volume Discounts" + + attributes: + survey: + full_name: "Full name:" + company_name: "Company name (optional):" + purchase_email1: "Email address used to purchase the product:" + current_email: "Current email address:" + + + railties: + scaffold: + :true: "Yes" + :false: "No" + destroy_confirmation: "Destroy '%{record}'?" + unsubscribe_confirmation: "Unsubscribe '%{contact}' from '%{list}'?" + + authlogic: + attributes: + user_session: + login: "Username" + password: "Password" + + authentication: + page: "Component Owl Admin Area" + login: "Login" + logged_in: "You've successfuly logged in." + logged_out: "You've successfuly logged out." + + admin: + icons_and_images: "Icons and Images" + + txt: + componentowl: "Component Owl" + componentowl_long: "Component Owl - .NET controls for WinForms" + rss_description: "Component Owl Feed: Latest releases, news and tips & tricks from our blog" + comics_rss_description: "Component Owl's Comics: Latest comic strips for developers by Libor Tinka" + antispam: "capek-rulz" + activation: + success: "Activation successful. Please rebuild your solution." + invalid_serial_key: "Invalid serial key. Please check that you are entering it exactly, use clipboard to copy it from the original message that you've received from us. You can contact us at support@componentowl.com for assistance." + limit_reached: "You've reached the maximum number of activations. Please purchase additional licenses, or contact us at support@componentowl.com if you need assistance." + other_error_missing_attributes: "Internal error (missing attributes). Please contact us at support@componentowl.com." + other_error_generator_error: "Internal error (generator error). Please contact us at support@componentowl.com." + javascript: + antispam: "capek-rulz" + download_in_progress: "Your download should be in progress..." + your_full_name: "your full name" + purchase_email: "valid purchase email" + current_email: "valid current email" + valid_email: "a valid email" + required: "required" + message: "message" + thank_you: "Thank you!" + thanks_for_why_uninstall: 'Thank you very much for your feedback!' + thanks_for_message: 'Thank you very much for your message!
Send Another Message' + order_thanks_for_message: '
Thank you very much for your message!
' + thanks_for_subscription: '
Thank You for your subscription!
' + common: + whats_new: "What's new" + see_whats_new: "See what's new" + or: "or" + any: "Any" + download: "Download" + free_download: "Free Download" + start_download: "Start Download" + buy_now: "Buy Now" + home: "Home" + products: "Products" + more_info: "More Info" + details: "details" + read_more: "read more..." + see_more: "see more..." + more: "more" + show_me_more: "Show Me More" + your_name: "Your Name" + your_email: "Your Email" + first_name: "First Name" + first_name_optional: "First Name (Optional)" + last_name_optional: "Last Name (Optional)" + message: "Message" + required: "(Required)" + subscribe: "Subscribe" + not_applicable: "Not Applicable" + please_type_or_select: "(Please type in or select)" + footer: + copy: "Copyright © %{year} ComponentOwl.com, Dextronet.com. All rights reserved. Read our %{eula}, %{disclaimer} and %{privacy_policy}." + disclaimer: "Disclaimer" + privacy_policy: "Privacy Policy" + eula: "EULA" + feedback: "Contact Us (Feedback)" + rss: "RSS" + twitter: "Twitter" + sitemap: "Sitemap" + subscribe: "Subscribe to Our Newsletter" + subsribe_info: "Receive updates, tips & tricks and more." + your_email: "Your Email" + menu: + home: "Home" + products: "Products" + buy: "Buy" + support: "Support" + blog: "Blog" + about: "About Us" + affiliate: "Affiliate" + comics: "Comics" + home: + stdl: "Swift To-Do List 7 - The number one to-do list software for Windows. Being organized feels great and it has never been so easy!" + screenshot_title: "Swift To-Do List 7 - Main Window" + for_windows: "For Windows 7 (Seven), Windows Vista, Windows XP, Windows 2000" + free_download: "Download Free Trial - With sample projects" + buy_now: "Buy Now From %{from}" + pricing: "See licensing & pricing" + other_software: "Other Software From Us" + latest_from_blog: "Latest From Our Blog" + news: "News" + blog_post_info: "%{on}" + see_all_software: "See all software" + see_other_posts: "See more posts »" + new_release: "%{product} %{version} released!" + download_latest_release: "Download latest release" + subscribe_to_rss: "Subscribe to our RSS" + follow_on_twitter: "Follow us on twitter" + follow_on_facebook: "Follow us on facebook" + see_comparison_table: "See comparison table - why Better ListView is the ideal replacement component for .NET ListView" + products: + buy_now_from: "See Pricing & Licensing" + buy_professional: "Buy Professional (%{price})" + buy_standard: "Buy Standard (%{price})" + learn_more: "Learn More - Features & Screenshots" + testimonials: "Testimonials" + compatibility_note: "Compatibility" + compatibility_note_info: "Our software is compatible with Windows 7, Windows Vista, Windows XP and Windows 2000 with both 32 and 64 bit operating systems." + product: + any_questions: "Any questions? We'd love to answer them!" + version: "Version %{version} / %{date}" + more_screenshots: "More Screenshots" + compatibility_note: "Seamless integration with .NET 2.0 and higher" + receive_updates: "Receive Component Owl updates
and news via email:" + receive_product_updates: "Receive product updates
and news via email:" + receive_stdl_updates: "Receive Swift To-Do List updates and news via email:" + send_also: "Send me also %{newsletter}" + contact: "Contact" + sharethis: "Share this page if you like it:" + order: + header_contact_us: "Contact Us (Help)" + steps_1: "Make Your Selection" + steps_2: "Secured Payment" + steps_3: "Your License Code" + select_quantity: "Please select the number of licenses and click \"Proceed To Checkout\" below." + quantity: "Licenses" + price: "Price (USD)" + volume_discounts: "Volume Discounts" + volume_discounts_info: "Discounts apply for total price." + licensing: "Licensing" + licensing_info: "One license is for one computer only. You need additional licenses for more computers." + whats_included: "What's Included" + whats_included_items: ["Free technical support", "Free minor updates", "90-Day Money back guarantee", "Instant delivery", "Encrypted and secured order"] + any_questions: "Any Questions?" + any_questions_info: "We would love to answer them. Please %{contact}. You can also read our %{faq}." + contact_us: "contact us" + ordering_faq: "ordering FAQ" + money_back: "Unconditional 90-day
money back guarantee" + instant_delivery: "Instant email delivery" + get_discount: "Get extra discount" + get_discount_info: "Buy 2+ licenses of the same product and get 20%+ volume discount!" + secured_order: "Secured order" + secured_order_info: "All orders are secured with strong 128-bit SSL encryption. Your information is absolutely safe. Orders are processed via our BMT Micro, Inc. ecommerce partner based in North Carolina, USA." + accepted_payment: "Accepted payment methods: Credit and debit cards, PayPal, mail/fax orders, wire transfers." + special_offers: "You might also be interested in these special offers:" + discount_percent: "%{discount}% off" + from_to_licenses: "%{from}-%{to} licenses" + from_licenses: "From %{from} licenses" + back_to_home: "« Go Back" + order_another_product: "Buy Different Software" + stdl_editions_difference: "What's the difference between Standard and Professional?" + donation: "Add $1 to my order as a donation to WWF" + all_software: "Show all software" + support: + help_support: "Help & Support" + faqs: "Frequently Asked Questions (FAQ)" + search_help: "Search Frequently Asked Questions" + search_help_button: "Search" + see_more_faqs: "Read More FAQ" + contact_tech_support: "Contact Us" + contact_info_1: "You can contact us at support (at) componentowl (dot) com or use the form below." + contact_info_2: "We will answer you as soon as possible, usually in 24 hours." + # ↓ below the contact form + contact_info_3: "Please make sure that our reply will not be marked as spam by your filter (eg. add support (at) componentowl (dot) com to your white list) and that you typed your email address correctly, otherwise we will not be able to reply." + subject_product: "%{product} Contact" + subject_no_nothing: "Component Owl Contact Form" + subject_subject: "%{subject}" + subject_subject_product: "%{product} - %{subject}" + undelivered_message: "We are sorry! The message couldn't be delivered.\n\nPlease try it again later or contact us at support@componentowl.com." + unsaved_subscription: "We are sorry! The subscription couldn't be saved\n\nPlease try it again later or contact us at support@componentowl.com." + faqs: + faqs: "FAQ" + search_breadcrumb: "Search FAQ" + general: "General" + general_faqs: "General FAQ" + other_faqs: "Other FAQ" + cant_find: "Can’t find what you’re looking for?" + try_search: "Try searching our FAQ database." + contact_us: "You can also contact us with any question or feedback." + search_results: "FAQ Search Results" + no_search_results: "We are very sorry! We couldn't find any match in our Help & FAQ database." + try_different_search: "Try different search" + faq_in: "In %{link}" + releases: + whats_new: "What's New in %{product} %{version}" + whats_new_since: "What's New in %{product} since version %{version}" + back: "« Back to the product overview" + changes_since: "Show changes since:" + changes_in_version: "Changes in version %{version} (%{date})" + download: + thanks_general: "Thank you for downloading" + started: "Your download has started..." + newsletter: "Thank you for downloading our software.
You can sign up below to receive important updates via email.
We 100% respect your privacy and will never share your email." + newsletter_general: "Component Owl News & Updates" + newsletter_product: "%{product} News & Updates" + trouble: "Trouble with download? Try this %{link}." + direct_link: "direct link" + download_page: + meta_title: "Download %{product} %{version}" + meta_description: "%{product} download" + meta_keywords: "%{product} download" + thanks: "Thank you for downloading %{product} %{version}!" + start: "Your download should begin shortly..." + info: "If the download doesn't start automatically in a few seconds, please use this button:" + newsletter_general: "Receive Component Owl News & Updates via email!" + newsletter_product: "Receive %{product} News & Updates via email!" + quote_text: "The thing always happens that you really believe in; and the belief in a thing makes it happen." + quote_author: "Frank Loyd Wright" + not_found: + so_sorry: "So Sorry!" + not_found: "We're sorry! The page you are looking for has been moved or does not exist." + visit_instead: "You can visit our homepage or one of our software pages instead:" + rss: + title: "Component Owl" + comics_title: "Component Owl's Comics" + description: "Component Owl News & Updates" + comics_description: "Owl's Components - comic strips for developers by Libor Tinka" + release_description: "See what's new or download latest release." + comics: + title: "Component Owl's Comics: %{name}" + uninstall: + heading: "We are sorry to see you go!" + why_uninstall: "Why Uninstall" + issue: "The main issue" + comments: "Comments" + your_email: "Your email address" + survey: + purchase_email_stdl: "Email address used
to purchase Swift To-Do List:" + email_subject: "Survey" + recommend_email_subject: "Your friend %{name} recommends you Swift To-Do List" + free_upgrade_email_subject: "Free Upgrade Request" + free_upgrade_request_sent: "Thank you. We have received your request and we will reply in 48 hours." + blog: + stdl: "The ultimate to-do list and notes software for Windows." + download: "Download" + resources: + published_on: "Published on %{date}" + articles: + meta_title: "%{title}" + meta_title_with_keyword: "%{title} - %{keyword}" + alt: + about: "About Component Owl" + not_found: "404 Not Found" + support: "Help and Support" + disclaimer: "Disclaimer" + privacy_policy: "Privacy Policy" + money_back: "Money back gaurantee" + instant_delivery: "Instant delivery" + order: "Secure Software Store" + products: "Our Software" + press_resources: "Press Resources" \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..b0e780b --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,70 @@ +ActionController::Routing::Routes.draw do |map| + + map.namespace :bmt do |bmt| + bmt.resources :orders, :only => :create + end + + map.landing_page "/lp/:id", :controller => "landing_pages", :action => "show" + + map.resources :activations, :only => :create + + map.resources :comics, :only => [:index, :show] + + # resources section + #map.resources_page '/resources', :controller => 'resources', :action => 'index' + map.resources :articles, :only => [:index, :show] + + map.resources :orders, :as => 'pricing-licensing' + + map.connect '/products/generate_license', :controller => 'products', :action => 'generate_license' + + map.eula "/eula", :controller => 'support', :action => 'eula' + + map.customer_service "/customer-service", :controller => 'support', :action => 'customer_service' + + # The priority is based upon order of creation: first created -> highest priority. + + # Sample of regular route: + # map.connect 'products/:id', :controller => 'catalog', :action => 'view' + # Keep in mind you can assign values other than :controller and :action + + # Sample of named route: + # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase' + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # map.resources :products + + # Sample resource route with options: + # map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get } + + # Sample resource route with sub-resources: + # map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller + + # Sample resource route with more complex sub-resources + # map.resources :products do |products| + # products.resources :comments + # products.resources :sales, :collection => { :recent => :get } + # end + + # Sample resource route within a namespace: + # map.namespace :admin do |admin| + # # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb) + # admin.resources :products + # end + + # You can have the root of your site routed with map.root -- just remember to delete public/index.html. + map.root :controller => "home" + + map.connect '/cron/:action', :controller => 'cron', :action => ':action' + map.connect ':id', :controller => 'products', :action => 'show' + map.connect ':id/:detail', :controller => 'products', :action => 'show' + + # See how all your routes lay out with "rake routes" + + # Install the default routes as the lowest priority. + # Note: These default routes make all actions in every controller accessible via GET requests. You should + # consider removing the them or commenting them out if you're using named routes and resources. + map.connect ':controller/:action/:id' + map.connect ':controller/:action/:id.:format' +end diff --git a/config/s3.yml b/config/s3.yml new file mode 100644 index 0000000..bec2ac8 --- /dev/null +++ b/config/s3.yml @@ -0,0 +1,8 @@ +production: + access_key_id: 'AKIAJO5TCO43GDBNG3ZQ' + secret_access_key: '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' + bucket: 'componentowl-assets' +development: + access_key_id: 'AKIAJO5TCO43GDBNG3ZQ' + secret_access_key: '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' + bucket: 'componentowl-assets-dev' \ No newline at end of file diff --git a/config/schedule.rb b/config/schedule.rb new file mode 100644 index 0000000..623d384 --- /dev/null +++ b/config/schedule.rb @@ -0,0 +1,40 @@ +# Use this file to easily define all of your cron jobs. +# +# It's helpful, but not entirely necessary to understand cron before proceeding. +# http://en.wikipedia.org/wiki/Cron + +# Example: +# +# set :output, "/path/to/my/cron_log.log" +# +# every 2.hours do +# command "/usr/bin/some_great_command" +# runner "MyModel.some_method" +# rake "some:great:rake:task" +# end +# +# every 4.days do +# runner "AnotherModel.prune_old_records" +# end + +# Learn more: http://github.com/javan/whenever + +set :pwd, Dir.pwd unless :pwd +set :environment, "production" unless :environment +set :log_file, "#{pwd}/log/cron.log" +env :MAILTO, "bgalura+co@gmail.com" + +every '30 * * * *' do + command "cd #{pwd}; ./script/runner -e #{environment} 'notifiable { Cron.resend_support_requests }' >>#{log_file} 2>&1" + command "cd #{pwd}; ./script/runner -e #{environment} 'notifiable { Cron.send_autoresponders }' >>#{log_file} 2>&1" +end + +every 1.day, :at => '4:30 am' do + rake "db2s3:backup:full RAILS_ENV=#{environment}" + rake "db2s3:backup:full RAILS_ENV=blog" +end + +every 4.days, :at => '4:30 am' do + rake "db2s3:backup:clean RAILS_ENV=#{environment}" + rake "db2s3:backup:clean RAILS_ENV=blog" +end diff --git a/config/smtp_settings.yml b/config/smtp_settings.yml new file mode 100644 index 0000000..03bd595 --- /dev/null +++ b/config/smtp_settings.yml @@ -0,0 +1,15 @@ +address: email-smtp.us-east-1.amazonaws.com +port: 587 +domain: email-smtp.us-east-1.amazonaws.com +authentication: login +user_name: AKIAIZJ2J2TBG553MDHQ +password: Aihjxq+3MTqELK8iFcSTS8QpWtPicD8vMHTnoBb3OSnI +enable_starttls_auto: true +tls: true +#address: mail.dextronetnews.com +#port: 587 +#domain: dextronetnews.com +#authentication: login +#user_name: news@dextronetnews.com +#password: 60-DE-48-4B-FD-01 +#tls: false diff --git a/config/unicorn/development.rb.example b/config/unicorn/development.rb.example new file mode 100644 index 0000000..e4e1e31 --- /dev/null +++ b/config/unicorn/development.rb.example @@ -0,0 +1,3 @@ +# unicorn_rails -c ./config/unicorn/development.rb -E development +worker_processes 2 +listen 5001 \ No newline at end of file diff --git a/config/unicorn/production.rb b/config/unicorn/production.rb new file mode 100644 index 0000000..981993b --- /dev/null +++ b/config/unicorn/production.rb @@ -0,0 +1,65 @@ +# unicorn_rails -c ./config/unicorn/production.rb -E production -D +APP_DIR = "/srv/www/componentowl.com/current" + +worker_processes 2 + +# Help ensure your application will always spawn in the symlinked +# "current" directory that Capistrano sets up. +working_directory APP_DIR + +# This loads the application in the master process before forking +# worker processes +# Read more about it here: +# http://unicorn.bogomips.org/Unicorn/Configurator.html +preload_app true + +# This is where we specify the socket. +# We will point the upstream Nginx module to this socket later on +listen "/tmp/componentowl.sock", :backlog => 64 +# Optionally listen to a tcp port. +#listen 5000, :tcp_nopush => true + +pid "/tmp/componentowl.com.pid" + +# Temp fix for the setup file uploading (should be handled +# by node.js in future). +timeout 5 * 60 + +# By default, the Unicorn logger will write to stderr. +# Additionally, ome applications/frameworks log to stderr or stdout, +# so prevent them from going to /dev/null when daemonized here: +stderr_path "#{APP_DIR}/log/unicorn.stderr.log" +stdout_path "#{APP_DIR}/log/unicorn.stdout.log" + +before_fork do |server, worker| + # This option works in together with preload_app true setting + # What is does is prevent the master process from holding + # the database connection + defined?(ActiveRecord::Base) and + ActiveRecord::Base.connection.disconnect! + + # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and + # immediately start loading up a new version of itself (loaded with a new + # version of our app). When this new Unicorn is completely loaded + # it will begin spawning workers. The first worker spawned will check to + # see if an .oldbin pidfile exists. If so, this means we've just booted up + # a new Unicorn and need to tell the old one that it can now die. To do so + # we send it a QUIT. + # + # Using this method we get 0 downtime deploys. + old_pid = "/tmp/componentowl.com.pid.oldbin" + if File.exists?(old_pid) && server.pid != old_pid + begin + Process.kill("QUIT", File.read(old_pid).to_i) + rescue Errno::ENOENT, Errno::ESRCH + # someone else did our job for us + end + end +end + +after_fork do |server, worker| + # Here we are establishing the connection after forking worker + # processes + defined?(ActiveRecord::Base) and + ActiveRecord::Base.establish_connection +end \ No newline at end of file diff --git a/db-backups/20101008055750-componentowl-data.sql.gz b/db-backups/20101008055750-componentowl-data.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..64510cf2508730bb32d8aacc9a7755f8434b50d1 GIT binary patch literal 16300 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 literal 0 HcmV?d00001 diff --git a/db-backups/20101008055750-componentowl-struct.sql b/db-backups/20101008055750-componentowl-struct.sql new file mode 100644 index 0000000..b31e058 --- /dev/null +++ b/db-backups/20101008055750-componentowl-struct.sql @@ -0,0 +1,699 @@ +-- MySQL dump 10.11 +-- +-- Host: mysql.dextronet.com Database: componentowl +-- ------------------------------------------------------ +-- Server version 5.1.39-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `allowed_values` +-- + +DROP TABLE IF EXISTS `allowed_values`; +CREATE TABLE `allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1024399114 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `contacts` +-- + +DROP TABLE IF EXISTS `contacts`; +CREATE TABLE `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `active_subscriptions` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=846119421 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `download_logs` +-- + +DROP TABLE IF EXISTS `download_logs`; +CREATE TABLE `download_logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `request` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `download_logs_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faq_categories` +-- + +DROP TABLE IF EXISTS `faq_categories`; +CREATE TABLE `faq_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `faq_categories_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faqs` +-- + +DROP TABLE IF EXISTS `faqs`; +CREATE TABLE `faqs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `faq_category_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8_unicode_ci, + `answer` text COLLATE utf8_unicode_ci, + `featured` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `faq_category_id` (`faq_category_id`), + CONSTRAINT `faqs_ibfk_1` FOREIGN KEY (`faq_category_id`) REFERENCES `faq_categories` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `latests` +-- + +DROP TABLE IF EXISTS `latests`; +CREATE TABLE `latests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=809654553 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `meta_tags` +-- + +DROP TABLE IF EXISTS `meta_tags`; +CREATE TABLE `meta_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8_unicode_ci, + `description` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=364435844 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `newsletter_allowed_values` +-- + +DROP TABLE IF EXISTS `newsletter_allowed_values`; +CREATE TABLE `newsletter_allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1026203351 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `page_includes` +-- + +DROP TABLE IF EXISTS `page_includes`; +CREATE TABLE `page_includes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `inklude` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_categories` +-- + +DROP TABLE IF EXISTS `product_categories`; +CREATE TABLE `product_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_categories_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=207704555 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_descriptions` +-- + +DROP TABLE IF EXISTS `product_descriptions`; +CREATE TABLE `product_descriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_description_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_description_type_id` (`product_description_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_descriptions_ibfk_1` FOREIGN KEY (`product_description_type_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `product_descriptions_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=534832557 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_discounts` +-- + +DROP TABLE IF EXISTS `product_discounts`; +CREATE TABLE `product_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `product_edition_id` int(11) DEFAULT NULL, + `discount_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `discount_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `product_edition_id` (`product_edition_id`), + CONSTRAINT `product_discounts_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_discounts_ibfk_2` FOREIGN KEY (`product_edition_id`) REFERENCES `product_editions` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_editions` +-- + +DROP TABLE IF EXISTS `product_editions`; +CREATE TABLE `product_editions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `initial` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_editions_on_internal_code` (`internal_code`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_editions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_icons` +-- + +DROP TABLE IF EXISTS `product_icons`; +CREATE TABLE `product_icons` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `size` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `icon_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_file_size` int(11) DEFAULT NULL, + `icon_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_icons_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_images` +-- + +DROP TABLE IF EXISTS `product_images`; +CREATE TABLE `product_images` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_offers` +-- + +DROP TABLE IF EXISTS `product_offers`; +CREATE TABLE `product_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `related_product_id` int(11) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `begins_at` datetime DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `related_product_id` (`related_product_id`), + CONSTRAINT `product_offers_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_offers_ibfk_2` FOREIGN KEY (`related_product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_pages` +-- + +DROP TABLE IF EXISTS `product_pages`; +CREATE TABLE `product_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `tab` tinyint(1) DEFAULT '0', + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `parent_id` (`parent_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_pages_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `product_pages` (`id`), + CONSTRAINT `product_pages_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_upgrades` +-- + +DROP TABLE IF EXISTS `product_upgrades`; +CREATE TABLE `product_upgrades` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upgrade_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `upgradable_id` int(11) DEFAULT NULL, + `upgradable_to_id` int(11) DEFAULT NULL, + `upgradable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'ProductEdition', + `upgradable_to_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_url_params` +-- + +DROP TABLE IF EXISTS `product_url_params`; +CREATE TABLE `product_url_params` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_destination_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `default` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `url_destination_id` (`url_destination_id`), + CONSTRAINT `product_url_params_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_url_params_ibfk_2` FOREIGN KEY (`url_destination_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products` +-- + +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_category_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `file` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `promoted` tinyint(1) DEFAULT '0', + `homepage` tinyint(1) DEFAULT '0', + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `setup_file_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_file_size` int(11) DEFAULT NULL, + `setup_file_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_products_on_code` (`code`), + UNIQUE KEY `index_products_on_internal_code` (`internal_code`), + KEY `product_category_id` (`product_category_id`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`product_category_id`) REFERENCES `product_categories` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=605250274 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products_promotions` +-- + +DROP TABLE IF EXISTS `products_promotions`; +CREATE TABLE `products_promotions` ( + `product_id` int(11) DEFAULT NULL, + `promotion_id` int(11) DEFAULT NULL, + KEY `product_id` (`product_id`), + KEY `promotion_id` (`promotion_id`), + CONSTRAINT `products_promotions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `products_promotions_ibfk_2` FOREIGN KEY (`promotion_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `releases` +-- + +DROP TABLE IF EXISTS `releases`; +CREATE TABLE `releases` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `changelog` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `postpone_till` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `releases_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=222479602 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `schema_migrations` +-- + +DROP TABLE IF EXISTS `schema_migrations`; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + UNIQUE KEY `unique_schema_migrations` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `screenshots` +-- + +DROP TABLE IF EXISTS `screenshots`; +CREATE TABLE `screenshots` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `screenshots_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sitemap_titles` +-- + +DROP TABLE IF EXISTS `sitemap_titles`; +CREATE TABLE `sitemap_titles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `static_pages` +-- + +DROP TABLE IF EXISTS `static_pages`; +CREATE TABLE `static_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_static_pages_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_list_types_subscription_locations` +-- + +DROP TABLE IF EXISTS `subscription_list_types_subscription_locations`; +CREATE TABLE `subscription_list_types_subscription_locations` ( + `subscription_list_type_id` int(11) DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_2` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_lists` +-- + +DROP TABLE IF EXISTS `subscription_lists`; +CREATE TABLE `subscription_lists` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `subscription_lists_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_lists_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1009842130 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscriptions` +-- + +DROP TABLE IF EXISTS `subscriptions`; +CREATE TABLE `subscriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) DEFAULT NULL, + `contact_id` int(11) DEFAULT NULL, + `started_at` datetime DEFAULT NULL, + `ended_at` datetime DEFAULT NULL, + `active` tinyint(1) DEFAULT '1', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + KEY `contact_id` (`contact_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscriptions_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`), + CONSTRAINT `subscriptions_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`), + CONSTRAINT `subscriptions_ibfk_3` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1041002158 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `support_requests` +-- + +DROP TABLE IF EXISTS `support_requests`; +CREATE TABLE `support_requests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `support_request_origin_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `message` text COLLATE utf8_unicode_ci, + `mail_sent` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `support_request_origin_id` (`support_request_origin_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `support_requests_ibfk_1` FOREIGN KEY (`support_request_origin_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `support_requests_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonial_positions` +-- + +DROP TABLE IF EXISTS `testimonial_positions`; +CREATE TABLE `testimonial_positions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `testimonial_id` int(11) DEFAULT NULL, + `testimonial_location_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `extract` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `testimonial_id` (`testimonial_id`), + KEY `testimonial_location_id` (`testimonial_location_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonial_positions_ibfk_1` FOREIGN KEY (`testimonial_id`) REFERENCES `testimonials` (`id`), + CONSTRAINT `testimonial_positions_ibfk_2` FOREIGN KEY (`testimonial_location_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `testimonial_positions_ibfk_3` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonials` +-- + +DROP TABLE IF EXISTS `testimonials`; +CREATE TABLE `testimonials` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `text` text COLLATE utf8_unicode_ci, + `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `hidden` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonials_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `crypted_password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `persistence_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `single_access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `perishable_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `login_count` int(11) NOT NULL DEFAULT '0', + `failed_login_count` int(11) NOT NULL DEFAULT '0', + `last_request_at` datetime DEFAULT NULL, + `current_login_at` datetime DEFAULT NULL, + `last_login_at` datetime DEFAULT NULL, + `current_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=679720380 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `volume_discounts` +-- + +DROP TABLE IF EXISTS `volume_discounts`; +CREATE TABLE `volume_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` int(11) DEFAULT NULL, + `to` int(11) DEFAULT NULL, + `discount` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2010-10-08 12:57:54 diff --git a/db-backups/20101206051627-componentowl-data.sql.gz b/db-backups/20101206051627-componentowl-data.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..56906783cc4190b438d71169235b2fdde1bebd1f GIT binary patch literal 16742 zcmV(#K;*w4iwFQO;`~ei1MEH9a@)p|&&OXeo2`xHb4Uriija4tjS( z7#dz)_j@;kAAb5NZ%n~nMKHb!$L;m?`JjJ$16MaUy-U1A6gk6L z3^(U*d-ufm#+~H7MvQ&Xf7=`Wc6-wUl+kq-HU>NRho+rs+CdDX)tWKBhnxOCA9}Fy z-sP{j)1}`PvV2=xf#mh=U9bQ1&G6UWzhX?;!3xO%)K;(&^l$j~_6qkIURFpncyMz& zJbxJ64&R?&1AV~N-+FhqiA~mODO@+VgWi3BOkOK&YFH5wDEWYnEJj>U_`2r{M#fwa zPmX<}mc{4H7(P+UXYMDQ@Z#$3_8l3VUtIS{|266TXa62lBMtfL#pPY^e9#L3)3?dt z3qn4b#wTLh-eIlwk^o)g=HdF9$X)htVES9o+X}*Y3x|CoPgLkrDh}(d)=Q$at0y&Q z=-Z~w4K~zGa@Bi%4!SB)$+>uA+qsh1Z6`b2H9fH5c#B!u1fw1>g?gWe0au3kVYG@koRNEovG$zXtELO1rN5 z_wokpQ+cia&3*4~K>9a>+bpy+se5wR>S(QIqtU7y444c2R`%Mty8U?5Up|Ag#SASD@Jj`%gSM`e$r?+>g`(P;6YedxSk!Z z;|OkmDOL?Ww=GT$7<#9M$W<^DtX|({>3XxKwYy!d8=-~ebzwTV`~XZ1=DSP}h`Co+ zBmuMit{d%kqpLM=*ZC}-@)>hrYt=DW2KXY}`sGxT%%!!Hnch&Gg1P}2K!BHbO*+E>#a_$ z*==fNY|-^cS#!LP2e;jGx87~kPqYGy%u}ST+-?*}8>>XRioM%yu57IA-7JU7hnqwk zE|nt+&(y6o*lHok|dpP!2FH{o8g(&bb;vccjcI|9q3*Xt(i>|@aUsO}Z| zm$$kIw;9tvhLDx92^VH@UXy}Md!E$o&HPW04i<-7Usywj3Od`?%y;oH zMx3z!-|mt{8A4Jfhsj@=++bPsD>8&6f~E8zxbcN@gFJm-a%5>eE_7#U;F8%wdfGm$ zc%AL$TI{BFnjn1f%*HB9Q)w-0^L1*wb0$gvhBY>Tn)X7{o(=Ecn3-loa+n#)GuTyT znwh&~s~IQ%Wh{1uotCi9jcjrsmWU;$Tb#UyAZdFH$Dgk~kWIWz`*GX3BW^58*j%DD z@HN`e^Xl%BHY}-cBci zn$~M{G8J44y+;-C6X#559ik(5h#K<``>a}jI*_3B{aYHY0 z_%!C+lLuX|gNxi_%XNLBR;}LcHnnzZuF%L%iYpm;3&b9l8CPitE3q}HxCIwvca@`OpP>YQ4S z-c)dZGKH}Lj*$<^v8~t}np8%2;^jk`D${opVtoilw&HPQ&Du)Qjx3H3FI>pKBKCHx z^)9JPbXxsj#b{wSvB0Kw4r2~26Sopj=|GjZ^$aaV$oh7SK!0uiw?(rqX6V=5s7q_k zQrt;uMPZ;x0+y_yl2i7e{}VPeZQb&XbtaGm%vwS6?w2d6_R#elaO7-C+-6adKIc%XM?hMpVktEl(-u>Xzq(&aS34 z>sqT@YgXci>DyYX-qPwPjo`uDYtA2WpSZ;{7axI{{Fv^(QVV|KbK_6!>^OiS%r;yy zWr7`T)@rRB*6SzrPPf(WRN^-pVzM&5-^A*qsye~=w2a`EB>IDCzvg0wb^Bn-i0#it zFq_+q2)te`rus7Nf#O zq1ucY%-DQ0f$6j>@!K}(&GZ%JropI1=3H0?{5IVLqvza*!4V@46&~T^c&B3l$s5dh z+>o-(EN6ew)pX_4h~+|S1iUh?Mi9@?{s@7XAv4@!;E|)n|6l1rwlXDo&y#7@IfqQ!hbZuQw&P@fG z#jqT-X@lsf^%Xt9wrMLOR6cA(qy&DL(tus+mS~x;yUCqv-nsrOHri6|D+b@td&Lv? z=DdI%h0^o8j z#}GPdHfCBxiN;-3PdvMsZSS;BTaA^YsdJiYF4}7C$dMlckz^gq>$=v~vJVYOtk{Lz zf!_A1)?PVUj^28f-fp*<{gQ}8y0-Hb3S)2Ho{z^&l=Aig6xT^SUV(mq#fE{Q$Um&+sbE68V) z{vbEfgmzvk(uBYprnKR-y?HsOY)b1CX0*;W2`v?vTN2)PrO7=8)0g7GRRG1o|2`ml!R=3WljZ;TN&TFwx)3Gkd{jc+hX~ zxl4MV9g7Pl@>hFBE^t1Gg1Q6}BtTl0geyTOfdH=rcm6s;E~iX?9P!UE*WkqF9z-#^ z00$|L(B;Q@KxCFbv&nqQaz;&;2qwS%wzTAasJr2I73i@IDh#5>q(h+G?y8-iTXVW_fi@sIIpK)l z!!RzH$j2@~6RBlI!VbP^?H-X2TmX<;&HH1*Rjw@WF?#-;(~*?;@K!C`3rOil}ZQMAw2=Yk}k`fIhbK` z;h~mu+gfDSed}AESq;oGfP6(BT+k-DAgo62r{>uE$E9WJkGKmd4s873{A#kNi&u1M13tX$2o)_HpNgpLY{eZ9^gQpd1;(PA}vSIdnOi2(LrP~ zfXJ|4pfGQ#y$C~%R28V5r-`Y`3W0}X-vUVj(KBg7<>Q47+pNK?UaRDSr0>o z6zHhrcDOKjJ-{B5e>f_u2ro;@I(G44CMw-9wN2${34_cSl-x2OnF>!)Vi=_o#!8f^ z*$Nd9ALNU8g*=*Z42`hcN46Mo#3<2Is68NiLrLLpiS2@a&RMRo*1(PiDy&>8T0sg6 zHno&XBNM}*1?uH`0w+3xVda)hG=2?{xzQqt!~(I00UdmqKIK?CsmRI_Q=(itm^=0b z06@iP{0{O&QA;=Ij}$o-f(;s~lA&)+=$!edw18+fY&{5lp#r<1)=Pd!_nWgqk$wVqz_D-$Rv?<+ql7ds4aKmG z#sk@dfV4`jANoV^)aKY!62{*WC;T*R7Vxq zFnXqff4M7LTW96@8X^-5*rPh^3VP(|&>Dw~MIZu| z%*l)}P-k*D2Nwsqsd!Z5($_@`KnRj^vgPr)VW9OYEKoninB%N5i6%0iSL9#Zmjan! zDgr*mL)C_SPM~TDECWjFH0;Q$wIN$V zZvf6b-}CO5DVVug?6a!>My74Z7hOshwR+BUl^XWZk}C4wMZ0Igg*rn@gbgmkFg_9! z1&#gJM1pX`C-F@Fd+fR8peOz|vZkrs@{l``DrrcWOE$ILSbQ z){EyDqW0LUf`uAfKDts3d66r)dxRzfUcKUym{4{Gb00lOJ3Q(>k{Pw3=$IuLdqhwh zxn+d?R1`-VnJgnm3|ve2jvN$8L6USqT}U$9SbOVJ2{^+{I8jkSddY#a9}ghz;X@Vy z17{Q}6be@!U{P=1F^Ts=W(BAxm;bKFGr-m@?kK`h`(%70zxW`Nx~6s0T)$vCm3_SQ zK7jKwdqVnvqu5XoKz%5f!=Q+fmgf4C34Z92oK{~}P>)Qf6WJp-n zFXwA>U>AsXM2(8#Ltn}mGz)fbV)uP+x|nzNVXye=q1+e>#!K=cx&QYUZSp_=_20;D zR3&`bl2O@L#xmECHViz_xlqnM;{`arfT^TEXKGo=#&Ff#om7Cr5u0G`5*2(Hn&{FS zt66crT>!uzJ_H(7C(I?=LvMjzM9RisU=lJaR$-wzl|2}mRRqaHtW|=3SGZ{?{Y=P~ zt*FSxl1kPiz_Ik%*AYpv>|o^OMbl?t!6qTv z#N~!%LKUS>B$z29P|&_o&8y(u5%mrN+F0t=*)gEWB1BC}9#Wys%q-@* zmWswvPsT+@F=wVQnyx3qj%om*pjRvrRw-_(p#_m-u2xzxQLY<1AS13l4Xi!g zMA{|sCbP}e2m_A9EkxC60=00XGh*C1E?13)*6gj3IK)l$>tDw``E<)3mr+%gJi<(^ zkvZGR+y??sK8bgrrIe=rghh%5h#v!$RURE%5TLc;ktSp>;QsSa16o;oS3&CVR|Pz1 z(DdUDI7IVLOog-4R0j{@$7=r!gf3gfSe?@b$j**^D{1os8352fQwuz_#pPCQQ)ie^ z$n}yItxPlUJfIvE**=V{ZH=XUST3cND{+I9i|9B!Q(UJwaha)(B(oF6O;$^5n)V+- zQuDv{qoA^|o4R*9b2 zh<%NDgn5m9lzo!^Cxjl6bko z>xC)_0>%PRj*_uTs+fr$>W68RQ-6|$$k5XFQT2>PYl@)B8VaD1Jiox*iwbE6k--KX zalL|TSKa+fYNX| zF@b@34L~)f<*tAhLr`#Q5ssOYA9)+`oUpxl6jEfKgEL6P!0z*yb40>4{)UhBM{N87 z^A{Ofq+qbDOBxC}`9sxEF<1_jFznfH5ee1m66Hid%F#nI4W?k%kzgWI74=YQ_rR~U zupv{TmqiqjP1p&>&=YtrAY8LJ;0;loyf8+ijIvVVpyqr7#@+W>x>|Pm41wEOq$M_G`coyBk_EO3X z*lx467YQuTEj)@Rxioo%BxLKVATq5FlcUXKq+lT&@b{~1#omZ?7vJzC$&1NihVMuk|T zDw6qN*8zE^G1+9q56m%m^=BT5#2QbDBGOM;Uf9C_6HXa70Or1$gDL-0JfFBNt=D;v zIy$C!NR$i7m61%(;wYI!6c?fMr?uu$<)B>WthhiAF*T!cid3Jl;I7flihN~M8`K1b z!jsNw$;+C91%UGOPcUa0UXeRp_r0E0Loem47rbSaD2^Vy!5F7nNIC}laF%07>_6X& z1yNxSpl9-ADGngq-rF>lev_73CqOR4F7OrtQE)V$LfyF#$+%o9+SLPjDkCFuJK@co zW9mJOJXBVYw(7ntjj?F*EagItn-_()P35k;O`3({hZ5~hzxVno4?N8DX8M(#$`NWcSfV4j(qv-)Gaisw!6(P})US1V5 zar-#On@;7(U=i`60Cf0fmM(GpOIV5wZ&!st*%&%o&e8&hwVbVSfOr>%js!*EPcu}c zm(K}I*?fc!C`pvO^uZc|ZBB3-h%KgMvQALdEdtaJc&^Nj$|{NfzCzuK85D~dNX7FP z%r|63IF9uZe2FCD$PylK5O=`1|L_>O9>#OKTB|%~Y)O|X&DaLy9b;1ptr_q$Kr4cE z#=$9S7XGCOVvcowWoHbQHHMXvD~+NsD}WlSVo5L+TM79`GJ23^$|!HJiLZ#CSFm2V zixV_;BUXHqS%5zHZB!%8^KaKw;vNIez<>*M6*;FES&ow1n5>k~jeEM@Bo4``0!;%Y zf%?!ULk5B-!eGT!`CNa&w18v8crYsAGFF(UOcJos3Elg_>$u{Iv*-txQTe1w_M!Dl z(OeoIg&f(D%2u%CFwb61jPYWl!5)PiB%93BJd!8$y#7LgQ&zJ?GN;Z;g4}zZ?*bOB z_ju34cEBu4idoK=1?XU8MIRhp)O1FS*JzT6>79FxiBhn`TRdNqaRQtg9$KIf1o4Y= zCVvBXFXEdZISFRroAG+n?H&wRMtp;^deT!jtZKsp+mC%DC52#htEK_d3R$>u!t)Rc zO=-DC^CV{30zgpeP-$8qGsnbyL7u?c!r2CsB8p2G-HW05H*210~zHg3-0{SI;8qIx-zbcbrOqLNc2Y;J& zhkwcugBup(%@}Py<5Zj(be@t%fyQ7vg@=oNFYTtNr-~D$$s(E=9oOU~p3O?=z`Vmp zxD>|ylN$CM9Zg`qTlPGGYpxhi6~#An@lC!2CX+#>Xc5nW_5|i^=R7DLca-JaISj^0A zulNz&tx+YB75^+<6s>_Ckjjnt7KCbcI!0gLeD%i;HGBTyQ5uFH9(6mgL})TUdW_{C zJ;4$h8aN`%otMA6olAL^_s1ul%VM@#jBm#AEmoFPgDn6*C#Vdxsy#}a(d~E^6_zCR z&DStKo+94lq}kG=1A#ca>Q-0?`Vr%`A@GYPDCy}_{8#);gs`u*H{Zn@Vv?#7Q(arzTS|$fI1IrAOxHn!Di+BQVHTl6& zb_b?h{`Jd@q8O-c@XGcT2wxoMCD`pV@UD=2QG$eN=i)2XANKS|uv)_~!sJNNJQQ7C zy?BPT-@x9}bpztD-Xtc9-CFtjbyMYewoBz#uU|fUclDP0|L}&Stv7p)8#lkAwj7KykG`df+yA;vEsbu#dzc!o}8MdXgqhc7qd^i%V8*dy1nto{IhO~FV4 zEqfVr=IQ4fEq zS$Gb$RI7WE?G({la;VTMI%0c={olxwn5sIDkfpUa z$X7z;M42ThN&dxs91?e|68TXPZsWmfqM^4_FY9P$J~@Ij{5H;r)Fk)f553whR?`W& zWV91O>7Tvu6V16n*H^hA!Y^XSSby>lPpP%?{+`l*2QNvu+tp@|(S`2lOK^`eoY=(y zPEvEl2X~dI+mh@3qjcl$yIK?RJ8MXL+cs~STi^Op9VK42{%QEY^*=WsG)yMH)?91|z`eZ41UlBnM2NtN#QrF|g($)x)|y{OHVAKsU$ z5ZG?Ps@=V*x<6I^MZa{fN=j>aa<|d_8qd?oM{N`F=o+&qNolWtQAF=If9F82=kb&4 zcp6<$iqi8WO)eBz*fP<8H_DE*%eE>B)$%qA!rc-qtFoJNEUNF!1MU&ympyob*@r{P&c??-G;Jz4YT$%t-JcVlwml4f_x zPh1w?GcS5s@pQbK&2KQh;bJ%LElY3Y-?GR9U_oH(Azl$ng6*)UYAA;TKG0X)?P=G) z6s*#wr8#eUx-oxvxpfbPh*0gJmZrRExI5sGe?*XxJ6z&+T@gfD;(<;Sg=^|PZs9GC3=>wpmZo}*O z5@93$cODh1C8M1kjlrh1bqXN1>d>~Jv1!F00y37MVkJUs2@Km_es5@5LwcMyKHj8} zwrM(}jYeb+Q6g?pMim4Nc|X~E5G~cBn|9PlyFzDZs2SyzYsVT6EwA7AYWQg2vVMF0 zzs>{(Tg5Aem+$5UWr%J57z(dOpLH$xAJs4av&BEg7aePGY1!)1e)sH6Fb%S}7kxs& z4(&^}uhR+8{RODUC|I0z9d|Tx23~Vh+q~>ks^lA%;X9&;8^t#%YP}5W?49gyRjakw zt|qJ5+PV3AGs~7ke;_-x-bE9hjyBXU#YC-BN~0VwHh(9PVAR;pN;T^q%@bLKsk_>P zO{z?l`qhgEa81R>F$V{q@F1|I`Tf8LVF1Z(G*54LD2vLTReq!SRp19IH~3{@n@RK~ zxWPIn%bk8`z*om{yrDm^oYV5NN#zC;mo(hUxn;3-WnPw(%3MxK2YNlTdzRFmqDDuf z$X>5^R=!Zgr+u$wjbwGqtaxD!FC5U;)+PPlhVQyIs@QVOM~jnuf*+pWEaKZN*s5Ub zg{uOlUVKzn4vBe493`Xk?V`<`2Q1j}R(H*-M43Y>ry)VHMVOi&i9lYjZ{AGq(o z4=nFLpy7A55j1K&xtVZcp}0C1>jJ(8>>LB|k6?Htd{9hLs&@r^HI(U5T+$?Ra`5ps?-u&_=l$E$T1# zqr_uQBaS}a{0ykiUkIdgJ>abGSv^R-&FdSUn73+FXmXZ8U+sKl6y0J)8)ZuX3tGq7hx9MQ%Wk4 zXSfN1gYe@t{EaGX2j+~##9tt(WP(Tnf>Ibd?40wu}5edO}L&`)RqMk5O%Z64-aHbNQ?V8U_Y=X?ir=>SzMv&_+N%8Ni zn2>Do9;`~K8;qfDiit0ItcrhRdOxvuGGTOqL%tWxKZBXc6q~x#SFQY^PDVek2oC}T zMZU_Khz7aq@6|#KI!OS7oF#gJDFK(TKtYz9AP#A3YWa5wCM!i077#>4o*_XXN!W_< z8Z%IeB9yij(}Z?pZqZ&PN7C!~Hq9`tXq;Tk2+p#gD@?a411M%t1oj3gg@X?nvA5dH zyBza{i`;OfDq!>s{w@Nk1v=nWm{S6Sc}mBmYkU! z^R>(BsEKmXNKdRe4FioNA`?asT?8K+ZjhsTt=JuTNt>M?L{4&W+EJhrun*zp7V$VH zhGGPS2F!a2PzuJyrq$BY-kOVbHH)LEnPRr44X>K=))F8S?4AhFID&6uX%eHg)kxD-fzr5JXOhV7|`d%6vg@b250`sWA!2bbtQ&{o~3<5bij;L9iN8U6mGmR3s>7$YaZ zJg=hyv}lf?SR|Z9?%WMFU=7==ZVPg9R{;@4$;3-p9?a^l&|oM)R-hD z{#M=-YQ&GAVRI>`Bm*_rWRynsUe5-K2ENFhC=HN9@*t{wk%k?iePkW*5j{9P3uzO9_M)s(>lzn6AxaBS2fviK zNJLK1X3w&~ZV-U7%_a$NC*mKOph+>vS6K2ang;?Gp_MnyyIi zZ-WNxTpm%0pi4X70HLd+=GM$v1~U?1WjH3ycTWX)rMv^2*Mbtnx1!Ar$aI%20{BIe zW9WyhZSbQA!!E%@^%`Ut5E8@4qs5jBw+p!APMQNj6ExjZ13)>R>nO~ky#NuDTLqGs zmz)(;0~Otr0>tz6@A={nkKsI2xPY?<|vJhtJgZ`CM<2$ z=+1K&kmBu|SfY|+SLeTBc#+tM0c)xgtU>yfsM4Kt!g!s5U-z$9b3|_hnuWod49bg) z@kOXqZT+d>v=Zq-0b!u=p{Xx5?FO5sJb5(|CX;!i4yN(Q9KY4j4V219?!1^U80&Ed zj(8q`22vQ2NJq5)=tmMQVMDdhg@}h!FBD0T;)M7K#uJBVqcY-TrMB=Ha*0O?>_*7Y zpunp|uMlkmXpFEz1Uw#=lT{Im5LL!h0u=$Ncb1@^SoeVcmZe$#hgN!*Z4r1yi8a0h zlPU$$%Al&01roQYqv9TC)vNcy=ogDiA!)x=Uk(6S|U24P!?$$Bl8k#Yh|~ zVx;nN4BHm&FhX~BAoOcGR6wONjiR|YUTE2mnmXd+mgx$qYgGUz{}!Zlrd|6!}70W6y8lw{Tk#QPfZX3}aOOMpVp4}8fQ|@Ny%zAizV~jx%hgge}HtHb)jTWBO4rDhHM0J|F zd^W9Sae&f55l^KJ%NaEBjzunyiZH~vmX9)SDMzHuhBbIGr6>xaw(xRm8{aU5Zf%q3 z8%kEKfFjM~Fsg^GiExW-g<-|umh>&i_Y~8X{mUW@^4b41<3ahy zcuC_@?c@CnrY!B`Lj`_Y_w1EGBP);byXuG+{fycUJ`L|M1R9pU9&Ht9AzD;{ZT3T4 zyp6=kT~OL+Bx=e---JP|4fRj(tO8RDt!j1$`3OWxHytup$T$oQYk+iN+IUXWB*C%hNzuBXs~Mqqk4z zSmkzxC(Afixz^=zX9ZD;a>U5m(b!%yw;dN zkuG9AuCibPb{yYWBUc+_XC81B(K=!jc?a=`PH_aO|> zn-r&L@}36nNExs0Qq+R%Swf;qaxkPY*&C3m*$ge7YW+h}wvR_)c}jL&z`EjZ4qDSNyV6@>;ZQP^z8v6`lXNy1P9Dky!WzLNGW?h0 zw4xMVcZu-?LSEaWI}h586uMzZA~i|NAP>%wZnlv??W&FYkdUpV6D$oo#mkJ?o#bxV ziCp-Uw3aZoyo{{F0sw!&`Y^^X(hCqA;{%4m8O@Nj(@a>$XaSRhAda0rB)E92Mi%-~ zJtq|zP0@?$P=F+i4A~%;599(}C0!+C-R6rF77oReLJ_VBB2x?%N_yl=peK17V~YM4 zuM<%&&etH_Zk4A4W;fziWq~0^pkQZlTM|?a7)HEk;2-iHV9N0oO|Xb2vjl@^^3>)- zGLF`15*oX$trRk(GF4I$-)NG*=Cm39o5a*}cuB7LwMf7E6g*?rbOwkdpEqFGm9THw zUdN&^M#7lxP*9oiror8Wfe~u3*n2rhlOr@v;N!Ji7cY}^xz5PE2MXLWqyP7x+e$c= z)xSWU%3_Qf&I#HvyCZjXxkVLkL^wo1!#mIr7t0h(#r0XkgID~Z^GZIzOWSy@>I(QJ zE@-*mrX5j?uWs`q{f%yNiRx&+l{b}Bg2R5B%KIolcLfT^wO-{uQkStw@&GBLzX)6i zCPJd{T@yU1HWhw`Cn%Fh-9QqqX0ERJ@(mgEsg&xx57yj$MZZka`CQyRW}*<@TZVzu zL~aIB7sEZ94UmBgf>|dXT9*lsJEGZBAk6G>B|Jea_U(^v`4G0l@(HsDi_39j&WIc9 zD9?n(%jC5%HiGFSu}Cu!69)RiiBc?%R0&EpdH0T1q_hZFuCMZP>@$ZfvKQKTL405F z3h}*^L_jCYbrYjRVJ@WZTHX24=S{~uv_0ibB8qc>7efAxxxuBqhILfsrNqY!)IDm_ zk=i86X}pJpfPvy^gEpheG{8HdC7huoVe)Jm5eXzTzmZyTgV1z~K9Rf;W)$UcEwp8z z%k*roX?tginJQtM^OnTYP6=P9LblNzE0T&t^$A}m6!^f2lKy-ojLH=0;ctRv(q(ah zwd5TEj5#iVPE=`a-0#_>z-TWF7tEaLS{^zFw;*|M(Hzz%RwzjjMtOY8SGaZgs;+YD zz0^sD?P?OdE2aW*HI+7ihP%MkCv%N&n#ybdMiG83^-g!6TWcw<)gDTHf-;AqXcK@2;zB#Ofw4fk-zE zUbS0oj&4-!J&o`1LJ3Bq?;|0w$X3k+Lt<}|AJLd&Vq;sUk#R_%l{%xt-@+u7+a#cQ zbCHl@%;3{^k)i=o8+av_8x^$BAr@Iu@LYK8l4CGrjYjc3rizD3GqBYPK?9uqkjL%bUL1op17RA4j{^WlN+Q<`(dQaV=e)x4eA3p#i<$YJKfpJrBfQ%d{a?M9XlE%n=Ch zGAGOFra4jEDMnXISGRdF_8Z&-=NLGEam+8J_aylCZ>jfeY|Gcyd$y*&$F`h-W4W&9 zcl);E`<^xEgW&XS%Xb~$>KjkB!XtR^_D91JJ+_DTz;Q=I<8j$W^HbM#FcXpIn=Q*f z`<78!dwi-DJ-sB}PulJvQTI*waENr>DL2wF$sE3rEDfj8347%Kscq)(F56qujh-f7 zp>0|I$a8GhdSKDLlX%`+1n)0qHBsvN-oUe+QCE|P{l4Qnu5ESC-jb{HKA3+j#OcZR zt61E_ub#voWb67vOz!47!>%sVRsXfqegT?vP+xMJ9lu*jXf~Q(scfvBf5E#7LFXqR z+XH&pXVXq9$#)jw?ehD0(Y*z&fc&*BhI0{Q+hr=AS#K+YPU_u;{QdUHp-Og5l)txM zu$N}oq!f&5`aYcNzaG+!*j)Za&?%ShLx6~CQZvc-y$C9Ghy|DXQ=G+~U;5SKc722@|w(na0 zpsT5j2kvvw_XeQ%`a`|Xp)+y^&d_?GJ{1WKwY7cFK6fOPQ)os!>Bpe-HpN($YtW13 z%e~d2th$3QbCjFH$Mv5#?OeM;s?Yqq@o|%QRSUjZSJd12-H`_B+-Rl2QGJzs`O*cB0eOBT%Kb$0T60FfGcVeTakK z9rzt*a+9-c_$*L;CkS(F-0bs~mxqNpOtRc4ZZ>whgV5Qn(-X!uPAt@##6U%`RhfH> zaH|&IS-@2*9xddwixD?68+ogwYpzfgcg>~tlX-d@t)fIPxRWEfn}ot!d%C_q`7Ft72Wje5TVexc^f1{b*u)XYA-hmgO<)}5@F*c4-i5v{nmWhFGLcx z@Twt>HZWhSOxjRqN5QnA_9>;)u0p9*7Ci{^1d4|pgalvYIXI_w9EMTS4#D{a!eO2S zi$UMOFB^=ZPOqC7a}Rzzhz(D{ee}^_8{2V#D!=j5{TPk1B_9P!G7pYzAO(~501&3V zd?lmeBwH_$gO)*_-=|r4NE@>5O};yZjoAR^_sk2-lX_F6AESeofYZI*@U^?co56&w z`3#Bg@HS{0Zzkyq9ljdrRb}QBwhne+ze+@E(iLhKk|HgL=%BqUHM>hev(b2Y6w4gj z$QPhewu0&o{h?#IqZ1!%YvR$6@5sc0sdwtg#dZTdSj0Syw z=tFCLFB;&@(CgrS)(`*cetI9gyuE+@Z0RoEW30R%cu{}k*wJ(h?M*_vKb{Q6p=Y~; zz#lu4$nv1S={V^7kvr%QC-!tO9@{V?f8<#(BYWabe9!FHs`xV!qd zVtV(N-1_UQ;OEu&-(V^GUCaC^x_{}6E^WK=skC!xJD0A3Htcq6`?3!&@af3!*_P9D ztWnSIJMw|svqv8MJJ{)SY}K;*ap>Z}mTGbTS^=V^}GF z;7|O4154%mc4WB&cWh6+$Qs(#$eDOv6ijT_bEfWO>`q5hSohEYg792x>W>D)aOzK- z32sFQ6cAdrKXq+49Q)qbb0$_eu_gn@wx$Eu9gN0-6NXc-4;1O)D&BwhG=KVII?jLY z`wkFA@|V>+q~K}jhmq|davtpCWZaL2(J&ZUHc-g8-|u@?FrGxd?f5|y25tn?a7R-I zNY!^OH}dQV20R3!4hFE$_OK6)!E6KD3jN{GgZ3vt+Md%N_3Z&m0krr$=dlopI>F)-e3KeKE1hqwfxJkznpbFgHGIzcw~TTIv%Gf9Nd9b z=)8ULBK|f&OoV0T)OuE N_%HmTw(P_@0RRouQoaBH literal 0 HcmV?d00001 diff --git a/db-backups/20101206051627-componentowl-struct.sql b/db-backups/20101206051627-componentowl-struct.sql new file mode 100644 index 0000000..f8c54d2 --- /dev/null +++ b/db-backups/20101206051627-componentowl-struct.sql @@ -0,0 +1,757 @@ +-- MySQL dump 10.11 +-- +-- Host: mysql.dextronet.com Database: componentowl +-- ------------------------------------------------------ +-- Server version 5.1.39-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `allowed_values` +-- + +DROP TABLE IF EXISTS `allowed_values`; +CREATE TABLE `allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1024399114 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `articles` +-- + +DROP TABLE IF EXISTS `articles`; +CREATE TABLE `articles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `content` text COLLATE utf8_unicode_ci NOT NULL, + `date` date NOT NULL, + `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'draft', + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `custom_subtemplate` text COLLATE utf8_unicode_ci, + `screenshot_id` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_articles_on_slug` (`slug`), + KEY `screenshot_id` (`screenshot_id`), + CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`screenshot_id`) REFERENCES `screenshots` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `contacts` +-- + +DROP TABLE IF EXISTS `contacts`; +CREATE TABLE `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `active_subscriptions` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=846119421 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `download_logs` +-- + +DROP TABLE IF EXISTS `download_logs`; +CREATE TABLE `download_logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `request` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `download_logs_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faq_categories` +-- + +DROP TABLE IF EXISTS `faq_categories`; +CREATE TABLE `faq_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `faq_categories_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faqs` +-- + +DROP TABLE IF EXISTS `faqs`; +CREATE TABLE `faqs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `faq_category_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8_unicode_ci, + `answer` text COLLATE utf8_unicode_ci, + `featured` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `faq_category_id` (`faq_category_id`), + CONSTRAINT `faqs_ibfk_1` FOREIGN KEY (`faq_category_id`) REFERENCES `faq_categories` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `latests` +-- + +DROP TABLE IF EXISTS `latests`; +CREATE TABLE `latests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `meta_tags` +-- + +DROP TABLE IF EXISTS `meta_tags`; +CREATE TABLE `meta_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8_unicode_ci, + `description` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=364435844 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `newsletter_allowed_values` +-- + +DROP TABLE IF EXISTS `newsletter_allowed_values`; +CREATE TABLE `newsletter_allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1026203351 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `pad_values` +-- + +DROP TABLE IF EXISTS `pad_values`; +CREATE TABLE `pad_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `pad_values_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `page_includes` +-- + +DROP TABLE IF EXISTS `page_includes`; +CREATE TABLE `page_includes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `inklude` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_categories` +-- + +DROP TABLE IF EXISTS `product_categories`; +CREATE TABLE `product_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_categories_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=207704555 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_descriptions` +-- + +DROP TABLE IF EXISTS `product_descriptions`; +CREATE TABLE `product_descriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_description_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_description_type_id` (`product_description_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_descriptions_ibfk_1` FOREIGN KEY (`product_description_type_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `product_descriptions_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=534832557 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_discounts` +-- + +DROP TABLE IF EXISTS `product_discounts`; +CREATE TABLE `product_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `product_edition_id` int(11) DEFAULT NULL, + `discount_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `discount_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `product_edition_id` (`product_edition_id`), + CONSTRAINT `product_discounts_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_discounts_ibfk_2` FOREIGN KEY (`product_edition_id`) REFERENCES `product_editions` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_editions` +-- + +DROP TABLE IF EXISTS `product_editions`; +CREATE TABLE `product_editions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `initial` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_editions_on_internal_code` (`internal_code`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_editions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_icons` +-- + +DROP TABLE IF EXISTS `product_icons`; +CREATE TABLE `product_icons` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `size` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `icon_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_file_size` int(11) DEFAULT NULL, + `icon_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_icons_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_images` +-- + +DROP TABLE IF EXISTS `product_images`; +CREATE TABLE `product_images` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_offers` +-- + +DROP TABLE IF EXISTS `product_offers`; +CREATE TABLE `product_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `related_product_id` int(11) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `begins_at` datetime DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `related_product_id` (`related_product_id`), + CONSTRAINT `product_offers_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_offers_ibfk_2` FOREIGN KEY (`related_product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_pages` +-- + +DROP TABLE IF EXISTS `product_pages`; +CREATE TABLE `product_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `tab` tinyint(1) DEFAULT '0', + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `parent_id` (`parent_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_pages_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `product_pages` (`id`), + CONSTRAINT `product_pages_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_upgrades` +-- + +DROP TABLE IF EXISTS `product_upgrades`; +CREATE TABLE `product_upgrades` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upgrade_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `upgradable_id` int(11) DEFAULT NULL, + `upgradable_to_id` int(11) DEFAULT NULL, + `upgradable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'ProductEdition', + `upgradable_to_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_url_params` +-- + +DROP TABLE IF EXISTS `product_url_params`; +CREATE TABLE `product_url_params` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_destination_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `default` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `url_destination_id` (`url_destination_id`), + CONSTRAINT `product_url_params_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_url_params_ibfk_2` FOREIGN KEY (`url_destination_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products` +-- + +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_category_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `file` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `promoted` tinyint(1) DEFAULT '0', + `homepage` tinyint(1) DEFAULT '0', + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `setup_file_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_file_size` int(11) DEFAULT NULL, + `setup_file_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_products_on_code` (`code`), + UNIQUE KEY `index_products_on_internal_code` (`internal_code`), + KEY `product_category_id` (`product_category_id`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`product_category_id`) REFERENCES `product_categories` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=605250274 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products_promotions` +-- + +DROP TABLE IF EXISTS `products_promotions`; +CREATE TABLE `products_promotions` ( + `product_id` int(11) DEFAULT NULL, + `promotion_id` int(11) DEFAULT NULL, + KEY `product_id` (`product_id`), + KEY `promotion_id` (`promotion_id`), + CONSTRAINT `products_promotions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `products_promotions_ibfk_2` FOREIGN KEY (`promotion_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `releases` +-- + +DROP TABLE IF EXISTS `releases`; +CREATE TABLE `releases` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `changelog` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `postpone_till` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `releases_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=222479602 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `schema_migrations` +-- + +DROP TABLE IF EXISTS `schema_migrations`; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + UNIQUE KEY `unique_schema_migrations` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `screenshots` +-- + +DROP TABLE IF EXISTS `screenshots`; +CREATE TABLE `screenshots` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `screenshots_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sitemap_titles` +-- + +DROP TABLE IF EXISTS `sitemap_titles`; +CREATE TABLE `sitemap_titles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `static_pages` +-- + +DROP TABLE IF EXISTS `static_pages`; +CREATE TABLE `static_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_static_pages_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_list_types_subscription_locations` +-- + +DROP TABLE IF EXISTS `subscription_list_types_subscription_locations`; +CREATE TABLE `subscription_list_types_subscription_locations` ( + `subscription_list_type_id` int(11) DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_2` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_lists` +-- + +DROP TABLE IF EXISTS `subscription_lists`; +CREATE TABLE `subscription_lists` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `subscription_lists_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_lists_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1009842130 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscriptions` +-- + +DROP TABLE IF EXISTS `subscriptions`; +CREATE TABLE `subscriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) DEFAULT NULL, + `contact_id` int(11) DEFAULT NULL, + `started_at` datetime DEFAULT NULL, + `ended_at` datetime DEFAULT NULL, + `active` tinyint(1) DEFAULT '1', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + KEY `contact_id` (`contact_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscriptions_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`), + CONSTRAINT `subscriptions_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`), + CONSTRAINT `subscriptions_ibfk_3` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1041002158 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subtemplates` +-- + +DROP TABLE IF EXISTS `subtemplates`; +CREATE TABLE `subtemplates` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subtemplate_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `content` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subtemplate_type_id` (`subtemplate_type_id`), + CONSTRAINT `subtemplates_ibfk_1` FOREIGN KEY (`subtemplate_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `support_requests` +-- + +DROP TABLE IF EXISTS `support_requests`; +CREATE TABLE `support_requests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `support_request_origin_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `message` text COLLATE utf8_unicode_ci, + `mail_sent` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `support_request_origin_id` (`support_request_origin_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `support_requests_ibfk_1` FOREIGN KEY (`support_request_origin_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `support_requests_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonial_positions` +-- + +DROP TABLE IF EXISTS `testimonial_positions`; +CREATE TABLE `testimonial_positions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `testimonial_id` int(11) DEFAULT NULL, + `testimonial_location_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `extract` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `testimonial_id` (`testimonial_id`), + KEY `testimonial_location_id` (`testimonial_location_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonial_positions_ibfk_1` FOREIGN KEY (`testimonial_id`) REFERENCES `testimonials` (`id`), + CONSTRAINT `testimonial_positions_ibfk_2` FOREIGN KEY (`testimonial_location_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `testimonial_positions_ibfk_3` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonials` +-- + +DROP TABLE IF EXISTS `testimonials`; +CREATE TABLE `testimonials` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `text` text COLLATE utf8_unicode_ci, + `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `hidden` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonials_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `crypted_password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `persistence_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `single_access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `perishable_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `login_count` int(11) NOT NULL DEFAULT '0', + `failed_login_count` int(11) NOT NULL DEFAULT '0', + `last_request_at` datetime DEFAULT NULL, + `current_login_at` datetime DEFAULT NULL, + `last_login_at` datetime DEFAULT NULL, + `current_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=679720380 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `volume_discounts` +-- + +DROP TABLE IF EXISTS `volume_discounts`; +CREATE TABLE `volume_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` int(11) DEFAULT NULL, + `to` int(11) DEFAULT NULL, + `discount` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2010-12-06 13:16:31 diff --git a/db-backups/20101208001125-componentowl-data.sql.gz b/db-backups/20101208001125-componentowl-data.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..6f61e9c51bb4f75aba4c20e32bf8f11f2871da4f GIT binary patch literal 19820 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 XsIlX~4?pWp{>Og<-@F9WEsg;I*qR9< literal 0 HcmV?d00001 diff --git a/db-backups/20101208001125-componentowl-struct.sql b/db-backups/20101208001125-componentowl-struct.sql new file mode 100644 index 0000000..5c26a3e --- /dev/null +++ b/db-backups/20101208001125-componentowl-struct.sql @@ -0,0 +1,954 @@ +-- MySQL dump 10.11 +-- +-- Host: mysql.dextronet.com Database: componentowl +-- ------------------------------------------------------ +-- Server version 5.1.39-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `activations` +-- + +DROP TABLE IF EXISTS `activations`; +CREATE TABLE `activations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL, + `build` int(11) NOT NULL, + `computer_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `order_id` (`order_id`), + CONSTRAINT `activations_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `allowed_values` +-- + +DROP TABLE IF EXISTS `allowed_values`; +CREATE TABLE `allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1024399114 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `articles` +-- + +DROP TABLE IF EXISTS `articles`; +CREATE TABLE `articles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `content` text COLLATE utf8_unicode_ci NOT NULL, + `date` date NOT NULL, + `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'draft', + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `custom_subtemplate` text COLLATE utf8_unicode_ci, + `screenshot_id` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_articles_on_slug` (`slug`), + KEY `screenshot_id` (`screenshot_id`), + CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`screenshot_id`) REFERENCES `screenshots` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `autoresponders` +-- + +DROP TABLE IF EXISTS `autoresponders`; +CREATE TABLE `autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) NOT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `message` text COLLATE utf8_unicode_ci NOT NULL, + `delay` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + CONSTRAINT `autoresponders_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `contacts` +-- + +DROP TABLE IF EXISTS `contacts`; +CREATE TABLE `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `active_subscriptions` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=846119421 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers` +-- + +DROP TABLE IF EXISTS `customers`; +CREATE TABLE `customers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `customer_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers_visitors` +-- + +DROP TABLE IF EXISTS `customers_visitors`; +CREATE TABLE `customers_visitors` ( + `customer_id` int(11) DEFAULT NULL, + `visitor_id` int(11) DEFAULT NULL, + KEY `customer_id` (`customer_id`), + KEY `visitor_id` (`visitor_id`), + CONSTRAINT `customers_visitors_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`), + CONSTRAINT `customers_visitors_ibfk_2` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `download_logs` +-- + +DROP TABLE IF EXISTS `download_logs`; +CREATE TABLE `download_logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `request` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `download_logs_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `emails` +-- + +DROP TABLE IF EXISTS `emails`; +CREATE TABLE `emails` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `to` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_send_attempt` int(11) DEFAULT '0', + `mail` text COLLATE utf8_unicode_ci, + `created_on` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faq_categories` +-- + +DROP TABLE IF EXISTS `faq_categories`; +CREATE TABLE `faq_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `faq_categories_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faqs` +-- + +DROP TABLE IF EXISTS `faqs`; +CREATE TABLE `faqs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `faq_category_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8_unicode_ci, + `answer` text COLLATE utf8_unicode_ci, + `featured` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `faq_category_id` (`faq_category_id`), + CONSTRAINT `faqs_ibfk_1` FOREIGN KEY (`faq_category_id`) REFERENCES `faq_categories` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `latests` +-- + +DROP TABLE IF EXISTS `latests`; +CREATE TABLE `latests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `meta_tags` +-- + +DROP TABLE IF EXISTS `meta_tags`; +CREATE TABLE `meta_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8_unicode_ci, + `description` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=364435844 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `newsletter_allowed_values` +-- + +DROP TABLE IF EXISTS `newsletter_allowed_values`; +CREATE TABLE `newsletter_allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1026203351 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `orders` +-- + +DROP TABLE IF EXISTS `orders`; +CREATE TABLE `orders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `customer_id` int(11) DEFAULT NULL, + `orderable_id` int(11) DEFAULT NULL, + `orderable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `license_key` text COLLATE utf8_unicode_ci, + `order_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `customer_id` (`customer_id`), + CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `pad_values` +-- + +DROP TABLE IF EXISTS `pad_values`; +CREATE TABLE `pad_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `pad_values_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `page_includes` +-- + +DROP TABLE IF EXISTS `page_includes`; +CREATE TABLE `page_includes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `inklude` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_categories` +-- + +DROP TABLE IF EXISTS `product_categories`; +CREATE TABLE `product_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_categories_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=207704555 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_descriptions` +-- + +DROP TABLE IF EXISTS `product_descriptions`; +CREATE TABLE `product_descriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_description_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_description_type_id` (`product_description_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_descriptions_ibfk_1` FOREIGN KEY (`product_description_type_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `product_descriptions_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=534832557 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_discounts` +-- + +DROP TABLE IF EXISTS `product_discounts`; +CREATE TABLE `product_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `product_edition_id` int(11) DEFAULT NULL, + `discount_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `discount_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `product_edition_id` (`product_edition_id`), + CONSTRAINT `product_discounts_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_discounts_ibfk_2` FOREIGN KEY (`product_edition_id`) REFERENCES `product_editions` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_editions` +-- + +DROP TABLE IF EXISTS `product_editions`; +CREATE TABLE `product_editions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `initial` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_editions_on_internal_code` (`internal_code`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_editions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_icons` +-- + +DROP TABLE IF EXISTS `product_icons`; +CREATE TABLE `product_icons` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `size` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `icon_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_file_size` int(11) DEFAULT NULL, + `icon_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_icons_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_images` +-- + +DROP TABLE IF EXISTS `product_images`; +CREATE TABLE `product_images` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_offers` +-- + +DROP TABLE IF EXISTS `product_offers`; +CREATE TABLE `product_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `related_product_id` int(11) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `begins_at` datetime DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `related_product_id` (`related_product_id`), + CONSTRAINT `product_offers_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_offers_ibfk_2` FOREIGN KEY (`related_product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_pages` +-- + +DROP TABLE IF EXISTS `product_pages`; +CREATE TABLE `product_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `tab` tinyint(1) DEFAULT '0', + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `parent_id` (`parent_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_pages_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `product_pages` (`id`), + CONSTRAINT `product_pages_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_upgrades` +-- + +DROP TABLE IF EXISTS `product_upgrades`; +CREATE TABLE `product_upgrades` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upgrade_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `upgradable_id` int(11) DEFAULT NULL, + `upgradable_to_id` int(11) DEFAULT NULL, + `upgradable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'ProductEdition', + `upgradable_to_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_url_params` +-- + +DROP TABLE IF EXISTS `product_url_params`; +CREATE TABLE `product_url_params` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_destination_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `default` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `url_destination_id` (`url_destination_id`), + CONSTRAINT `product_url_params_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_url_params_ibfk_2` FOREIGN KEY (`url_destination_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products` +-- + +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_category_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `file` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `promoted` tinyint(1) DEFAULT '0', + `homepage` tinyint(1) DEFAULT '0', + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `setup_file_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_file_size` int(11) DEFAULT NULL, + `setup_file_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_products_on_code` (`code`), + UNIQUE KEY `index_products_on_internal_code` (`internal_code`), + KEY `product_category_id` (`product_category_id`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`product_category_id`) REFERENCES `product_categories` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=605250274 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products_promotions` +-- + +DROP TABLE IF EXISTS `products_promotions`; +CREATE TABLE `products_promotions` ( + `product_id` int(11) DEFAULT NULL, + `promotion_id` int(11) DEFAULT NULL, + KEY `product_id` (`product_id`), + KEY `promotion_id` (`promotion_id`), + CONSTRAINT `products_promotions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `products_promotions_ibfk_2` FOREIGN KEY (`promotion_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `redirects` +-- + +DROP TABLE IF EXISTS `redirects`; +CREATE TABLE `redirects` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `source_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `redirect_path` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `redirect_to` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `redirects_ibfk_1` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `releases` +-- + +DROP TABLE IF EXISTS `releases`; +CREATE TABLE `releases` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `changelog` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `postpone_till` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `announce` tinyint(1) DEFAULT '1', + `exclude_from_autoupdate` tinyint(1) DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `releases_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=222479602 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `schema_migrations` +-- + +DROP TABLE IF EXISTS `schema_migrations`; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + UNIQUE KEY `unique_schema_migrations` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `screenshots` +-- + +DROP TABLE IF EXISTS `screenshots`; +CREATE TABLE `screenshots` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `screenshots_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sent_autoresponders` +-- + +DROP TABLE IF EXISTS `sent_autoresponders`; +CREATE TABLE `sent_autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `autoresponder_id` int(11) NOT NULL, + `contact_id` int(11) NOT NULL, + `sent_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `autoresponder_id` (`autoresponder_id`), + KEY `contact_id` (`contact_id`), + CONSTRAINT `sent_autoresponders_ibfk_1` FOREIGN KEY (`autoresponder_id`) REFERENCES `autoresponders` (`id`), + CONSTRAINT `sent_autoresponders_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `site_settings` +-- + +DROP TABLE IF EXISTS `site_settings`; +CREATE TABLE `site_settings` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `settings` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sitemap_titles` +-- + +DROP TABLE IF EXISTS `sitemap_titles`; +CREATE TABLE `sitemap_titles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `static_pages` +-- + +DROP TABLE IF EXISTS `static_pages`; +CREATE TABLE `static_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_static_pages_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_list_types_subscription_locations` +-- + +DROP TABLE IF EXISTS `subscription_list_types_subscription_locations`; +CREATE TABLE `subscription_list_types_subscription_locations` ( + `subscription_list_type_id` int(11) DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_2` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_lists` +-- + +DROP TABLE IF EXISTS `subscription_lists`; +CREATE TABLE `subscription_lists` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `subscription_lists_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_lists_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1009842130 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscriptions` +-- + +DROP TABLE IF EXISTS `subscriptions`; +CREATE TABLE `subscriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) DEFAULT NULL, + `contact_id` int(11) DEFAULT NULL, + `started_at` datetime DEFAULT NULL, + `ended_at` datetime DEFAULT NULL, + `active` tinyint(1) DEFAULT '1', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + KEY `contact_id` (`contact_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscriptions_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`), + CONSTRAINT `subscriptions_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`), + CONSTRAINT `subscriptions_ibfk_3` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1041002158 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subtemplates` +-- + +DROP TABLE IF EXISTS `subtemplates`; +CREATE TABLE `subtemplates` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subtemplate_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `content` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subtemplate_type_id` (`subtemplate_type_id`), + CONSTRAINT `subtemplates_ibfk_1` FOREIGN KEY (`subtemplate_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `support_requests` +-- + +DROP TABLE IF EXISTS `support_requests`; +CREATE TABLE `support_requests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `support_request_origin_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `message` text COLLATE utf8_unicode_ci, + `mail_sent` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `support_request_origin_id` (`support_request_origin_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `support_requests_ibfk_1` FOREIGN KEY (`support_request_origin_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `support_requests_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonial_positions` +-- + +DROP TABLE IF EXISTS `testimonial_positions`; +CREATE TABLE `testimonial_positions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `testimonial_id` int(11) DEFAULT NULL, + `testimonial_location_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `extract` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `testimonial_id` (`testimonial_id`), + KEY `testimonial_location_id` (`testimonial_location_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonial_positions_ibfk_1` FOREIGN KEY (`testimonial_id`) REFERENCES `testimonials` (`id`), + CONSTRAINT `testimonial_positions_ibfk_2` FOREIGN KEY (`testimonial_location_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `testimonial_positions_ibfk_3` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonials` +-- + +DROP TABLE IF EXISTS `testimonials`; +CREATE TABLE `testimonials` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `text` text COLLATE utf8_unicode_ci, + `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `hidden` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonials_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `crypted_password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `persistence_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `single_access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `perishable_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `login_count` int(11) NOT NULL DEFAULT '0', + `failed_login_count` int(11) NOT NULL DEFAULT '0', + `last_request_at` datetime DEFAULT NULL, + `current_login_at` datetime DEFAULT NULL, + `last_login_at` datetime DEFAULT NULL, + `current_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=679720380 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitor_tracks` +-- + +DROP TABLE IF EXISTS `visitor_tracks`; +CREATE TABLE `visitor_tracks` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `visitor_id` int(11) DEFAULT NULL, + `track` text COLLATE utf8_unicode_ci, + `trackable_id` int(11) DEFAULT NULL, + `trackable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `source_type_id` int(11) DEFAULT NULL, + `source` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `targetable` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `download` tinyint(1) DEFAULT '0', + `checkout` tinyint(1) DEFAULT '0', + `order` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `visitor_id` (`visitor_id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `visitor_tracks_ibfk_1` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`), + CONSTRAINT `visitor_tracks_ibfk_2` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitors` +-- + +DROP TABLE IF EXISTS `visitors`; +CREATE TABLE `visitors` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trackable_number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `user_agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `volume_discounts` +-- + +DROP TABLE IF EXISTS `volume_discounts`; +CREATE TABLE `volume_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` int(11) DEFAULT NULL, + `to` int(11) DEFAULT NULL, + `discount` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2010-12-08 8:11:29 diff --git a/db-backups/20110801075515-componentowl-data.sql.gz b/db-backups/20110801075515-componentowl-data.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..384372f6d0e7119ec5122aaf792646750b3307c7 GIT binary patch literal 157139 zcmV(tKjy1tnFgG>U6%)}V)c%Mmt{D*(|L%SVI{UhJ|=?@tCM;QJO|L_m*e}9PM zy8Y81{k_iJKjy`?E#pvZ|Co*aAMYQVY)P7|#XtS=Hcan3!#1AXpS%6T|JL81dpgB( z6w4p)W39*G|AqY{{Ery&58YV)hyMWnU;l3uf+6@1hjah z`}1_k^0;^69Haa>)Box9-~aJHzYYBxo$!XuNrL_tg^T`sPyf2{@BjE48$$oaGQRQm z7tLV*oacXi`uBhQx5mHIjlX<7*Z7P7Rp0Tws~U5*@jpxwhX0qobi?JGf9dS6&;Pl% ze{TNgLHtXQyGhy=f2`ZGXWPCMfBeSfkL|B*|0T(``bf4n6xaXq=hpv$wGHzR_e-nX z9}@ou7fQ|>7yr{{|M!1jZ0_rF|FYHp^xhx;@jv|W$A78w|MEvYZ2u94|I;7uaQ@Ie zRsG|ylaus!U+oRozyEW)amkD2FMn(6zrLOBb@y+*_h&-x+rR96BuiE$%YXb}*nj%t zpTm;-Ysmd&AL?w(i@#*`|GfLOjQP75|IS@mj{m;-@jo1WDUz+o|B}2tWsgv$6ZE^qaj;5aeclZ3&!+Ypv&J#qGcRvAq)bZ|(l)9;Pj6UpxBa z4fj9(VFKDztrik{R{kG{%a2XOQ-*R z-#=`Q=WI@AUIF>%=05}MuSfk4|LG4-7o=AWq+u9Y`hSV8|BNF4ZL)tV-J3W6`L7c6 zFH`%^|I5_=Tc)sYeW-`>&(oFse@zqBV3dDOfd3^s{s?Tz<^HRtK+qpw^;OxwnJcX1 z{I&I+_diRoq&uAL{_!r9@xN^PS5a{O_>bt{fBqi+`@e(Xzx(^YqgDU?_w$O(Kfs@V zc+~;={L=^hCk*+Ut?1kOE;RdvKS&sc?<$f*oa86GzV{QxN>X^bg9OAvpTE7^r=h7B0` zdJHC!vITl)*_vV}0N~!uBdj~&{u{S4%gAGIHrfLAPlX^i)YFO@TosDsbCt4kvprVq zouqhc_LNi0C&Rk@1IR>TB#caP^I@&39gbFdwb^l&Mxb3lNj=os{bv7aky;m2PKTA; zTKZZ+Dn|kut6P06e)f_p``q(uiX$+N?jW(C_*H-_MchMWvBlV8Qoi|IDz2>0iewMej?DNuS{0 z*0)~_NA%X}2@tEHy|MWV{~DL8Xh;hH>4B1!hV@c2w(2Ay67WdQoieYBV{vj5oxNMLO9u8xZ_5|?|#Uf)C z?ZlK|?L?!7u+wqa`>4oo=qN?51|397J9f@*KBS|wg$ES?{f+Chi?FfM1cVtM&zun# z(`SEzEcTtZG{b#nGqa#g>5fSy%LB!(-+`%@_S1Z|iU8aixqL-$ZiCTolLfikm;;#Y z>gle!q~^V?;p=kIV5KA})y07WcZx^@%5uaMS_*`C`Fsxe4vf2V(c4JpZfJv&%*=qZ zmb&I}`lG_51q~s2auV6gplRX1;Tv$U4LK?A%2JL74Ee6=rVBepy>as$m9%JdA4NUL zy#tRme3iQB713&By|T7)9KlaOYofqq-D%79JLu+9|`B5Z^eegS(X2c zTgx|dFGxZQz-HH^%6}LLu#tt)pP&7yj4Es!oIgFEWkLs;b{L24oI+@d)_EN(%8AJLzl$O;`{+7)N+2GThnt!--V-*J~O?2$b!?bB=ok%$#TPTL<^{&jik$^d!|@C+Y6kmpEty0Fm-9Tx}5rQS%F#bzzt2SMw`Z94%O1Zq6AJT45t{c7yN9x zTqZQ!5|YJp7B+^4A;OVeTUUdPs@?+*Hgjl{D{#9b1FMeA?4o!lJ#$ zWhgf$YMrP!>9A#ou7VZ@G|QB0!!`Tt9wP14AsM0u98Zlg`;{avUzVz!)Y8EO@7RC@ zz@asw_wzOr?A%cKeM8qTy|(pHF&dr z+{D3LG_c=U6g4*=qf0QFnN>jk7ecF#m3tGe5k&XdAYxT?=p#?Xr7*5T%r(uCFog&9YktZR88VLqz|OQX@FHkzMO1VR(NFFqXx8s{gZf$o(4exzKm6QZc^2Ic75xp z;lHh&y^#!Tsb1VddqTP|8L%Q|G$qqu)F( ztY}a~7K)g^%?PF9uJPmg3~#8fopKXS@}VDvqI5NdjgBwIsfwTN1dGRxzubh zgvXj0@QlO>A0fM#gvCjf_+%M1Ss)f!ae~lFGpUO!oHnm)V4xuJdoAz_e z`g~EtgJ3YQF?Z41EF?i3h#ag)Pwyd_Sj-?kTC}2`)0T)_YVTO~f~`vYSR}E64i3)o z&RQzF!niZe7>6o2`<=&?CrJ18e&&Sd2hyIW>h9v5ORE#0{P6V}IJ`g3_jL}sR=yg? z4Yr7F%6M&7M3kSB8nA=h;f%zc@8A8WzyFWezr({~f3p?;cX(K$AleeH1&`x(aqpAr_KlF@EiZ8Cs6N@U5&Qyl?nj4<%mzz1I}CWrj&84x1#A`VYQ@F(9mPdAvr zDJRRost^3M;^#Jjc9L0#;E9NQ#hmW(c5zr*>%A~W0WeCry~>A1h|aIeeY1d{^gHwk(d7c^2LQya02QPt;T^aGX4)z65fr?oaHTo%kjcXht@ zm(<|ZKDAA_^>i#FdmP^LhbA$Tj&ZUtt51z%Z#E%F%bfg4*;H{9Gj00`FjWM+e!2u1 zg>z|pJx$c_w$x&Futb>B)&lGE#Z4G>8qg2tf%K59y16#6Wq3E>ZmNl(-Q}pQQJhZZ zfMwYIts#nfV_{WBA?~9G)(KN8l0=NIb+ zq&az|?}wi{DTpI`hM>v~LmD`uy;2{-!+L)41Fj-w*pVJ0wIL??=j1uo)e{)m8zXfj zhZB_xY?#`9<>EG?Q7wMXxu_)gqgKV)ysJqCzWUOET_{1E`n?NGEh8iB>GXO3J@189 zpbUXG&np`PB}qLFpkYlki>VxIEr~GvjJx4pr$&sQUtPpUnz2Q6$=uV>B87eGNi9Y} z$H>TZ&f^8&BWT$=MuEAxe#?s4++;Ze6KrV7dHJ25$dBL*@krq`Ogp!ZcdzNC&WP_N z2Zbnxs zN_?m@HumHo90FRuOLJk(0bSIClhuE?SZxrSg_ao)>i!NS z28YwjK?KbHw6ZqqTsKa_lV}7RO4OBbvljIp9i?hD;)YrT? zu8=&L5&{SIaDyZB4YwI5ekck>nXrA#*QFAz*b-bSwltaQ1kz|T?(33Td|k4OflUhR zBuZNyq+EOFz*kT>@UGKl>@Z}fEW2vZADZR?pUXDIW>O35rpD})MmmG0;u?^?5J(d3;c5{w4464;ltvQHalr1UQmt8 zi2(*p{se0kL<0$8Aumsu>u~^Bdf|QA=!!u-8uchEr-?K;NH#Ntnr)}Y)hrxPaw_ykQ{kV zk?R`3xIYZ%d@PnB#4CYT6oP&POv9^=&7UHJP>fH2UZ^fG&lsMCcG}F0Cp$_d$F(kN zU|waw=i&vuN~@}A5V*=gxx4S0ZFnR`97ml?0g8;NRQrY4Q4xeBJ2+-YGwC6LmLqZF z-aX*4qT|C|LlRI4XD$OeAa)@~Q)6k95mb$aHBgTIAza~&Ec@88{CRNk&=lyo41(c2 zXglc2)IQ}3*gp%kr`99(C!$;9||dp;^rvE5bHdM0u9d>-yY z*RZg(lfc`kkgYpfHX_%D=5%@o%PX3aWS{(qauN*2(eS8pu384rE^DW%dL8MLnHk+M zuvwUBAo@leUNKWA%sJGxm=1t{dRYALu|GZR4?}-2_Q4Vq!;_rEi4@0*f+{jHg)$P! z3lvR}JR|<5(?$LX{+ItR`>$L7^uHwSASfPwRFaI)HzxjUqW%$vKL7ZEUfYX(-UiM{ z81^e#G{+HT*gfwFXC;Y~M$X>!34ArI=5*lvQ7R}OuVATwKbifV!arQ@#5xm;+pK3u zO_~P}qsJD}^1;cWrl_aNN8<2_Mv>>~eC1F=+zHs;=Azi_>->%EBh0C& zq$KN;)foEhVnr(2tXFsUGYl>wEt&C8F8o~XHx#1kdCiI0xIH5dk>4nz%qLe!9ZV3e z0czn3Q?LIAYO1Gl*bNrxms@6*e995${ctj5IXjVC#*Wq7{dVvxJ<)3pCn_a#KLBEM z62JvZLiPK7)Db?d^=$jWYtxga25Z_yG*i)WWs_YU8CNwvec5?HwIax-0aUvPaO(NidP!# zeXVLPz!mFO&FH|JprV;o7Z zDuDF)rCp9XDP4D$B?*gvm3q_?AFpOU$ODBG6^kZP%iG8)F@JW2Kfy5vrmpiLhA5tH zMP8w81|S>%68B~j?{efzEV$6UmzlzHSl-_d4!?OEk6V)0J#JhoUF{Q=%n-}HN+-rf zTJAW&?(HW&B6wPl`>oNkxQ|TiL^xO zpc=oFh+j;;e@OCl-YvEqpHw3Pgt&?HY==7X;7VE*q;AV~L+s>DXWH6oHo@_Q-sQ^# zwsq+rl6?xC284>}fUV^XZ`Kx#tg%};RmfA3B9DgxK7^CaWw|h>Uk$SI_6y#)u5e42y~AjFATCRf}YN9V~eDk_UHORsh&G zb)_o}68$Og@Ql-g%V1wD9QNoy7&A7j$RjAOU4&DddPw)dttx>a3GNKY^zI9#(oDE> zVJ05KF*;s$VI@sP>_W%=8UWTbdj7-iAjK~Z20@Ff>*8w}<)iH6xeLvYwvyNVyLx!! zsS03(#=F1r^g}%@n^*rFEX$1OVQ*!y?gERPWYyq0s@@rEG2kbxtm+hasypsTviogh z@yQeM_ALNiO3J@^nHY_~4A!VpTo@LtuS?P2fHph>23;k?kJC8&h_y z7E+x!G|BarF7b;rQ?qvFvgUc|`ytpYilQ4hy7I=>W}Di9UAO!;NYrXzmikIU?N&hd z&^I_uhQ!qdDlQtf&wd=41P|8NJIzN-WA05u1LyE^XeOPp(%}O;WuHn@2aR9|I}xlS zbAPM+p3r0G3c55JS!-TaAsd9XHNPH&Az0`CdiVU8bYL$*^t47-OrlxV>V&oHD$wbR>s6GfO zFOg6AQ; zMOe%*49z+XiA)D(&~$wCeBB6b&sZ#I$X8G7z@l#*n_k|%xs_yc^yiUkC@s47ve`pV z;@8~nF|*HhIZ^Ao2<)PL2dH!^ea~qrr1W#*J{7Bce-xFzMvPAq?s<*S@s;z@M#&GM zyn_0<#NAKt9xbQ^5GY8fs-nMr)cqO`sIi5VSl(N!`v&d?Vai{nsnLO)ejgZ;_+L)t zAL%{4pKbchCq)}!_9K}X8&qGYgwmcXwU_y~Tm?Y3PT$f}#FN*|iR_W*@nWThCZs%| zjhQ@Z;}8~031ydoU@hbtz0t9*Hh$Um8etKY;pWpGT%nef*zS9|VlUXDgayghhouKql}BP*B)R1S|xko;QZwpZ;?Q@!8rx@b_uIz$jrq^~+u#=^IiNspeCs6qnea z=Vu9ZRLWUt8?tmMQ(r3u$($=1FLIg!gI&`r|(Anv$ds?#^jL;Xo& znTMR#MH$&>=JClVr(l^T6d%4(7r@J&Q3By>O8P2eS*&0i?ceD_=X&|>(O`-eapxlG z$i*-Cp=Gu!Ggc-8TYS!&yIPCZW(eo9F)6axKu3O_r~KC}-b_%aYQrR#=((wUHOtc5 zkw69p2^*q##UHDw1{xyQAbkv2=v#1hmyXvi_I(gcFIuwhppmI3jprV-(|m1Gs2SI} z)4bqwnEP}A>^KU%_mg;|`>2o0*Mr2mAx{af>YH**1z`%7c$i0+PP_x51I=ik6yLS4 zMe~G^E1X=hs1aB`a5$l*B}%(fxQ3b<5ROHY1fb5r^hdL|07Jq*d4l*q!xPv)A%BA> z{-yQb!xIAU2FMza2>3HiG>>S6wMq?=MkVSt!Db}Ev4c7$9WBCPwbdvW`0i`gL^ReQ zN6`jU5-%-|Nv^dys;8goB=ez~$!gyTOMd^Ocu6X{FT5?@#JtJ z_p^@ApI%N#-d>aKWt4-$@f?j~zDbm~rn@`PL@L+~9CcmW1G&u!H;XJ4iOxH;j2T(^ z{$e7qPuw4@Zi9968k_xqp$D1zzJY=!wyD-KdN(PQ<0*xqbt4Nf1@aiok9{)jgJ^0C zDXHEag--IK6``{ur^c7hCdsL4(uZnmSfD#kDHZP^svrnZ`{{|mwOc6*F(k1@uGIa7 z@-`8gx`Sj^ zOhb~QG1Yqjni>F3w2QKe(%H|0x8z(^^_*HQKJ8;%GBh88RwBz1nuPn-hSQ|pw5T^r zfC2GhbC~{xQ~yM?5By9a(B?{6jO#N$4wxZu^4LOANy+Zz`_J_ykt+y^z8iA2`PTTZ)O;E}FU?Byq^eZRCO~~3b5|%q= zx=-W^EHo`|ns?EKTEfp;PyBvOi<*r4lf9wjoTC_O&Luqgldib0 zsP(y@lpm#HW`@5-0`$Ve>v#6hksT%N=r;;KiZ*r)TUM+*{viK+0sBSlwKy328;|an zK?xTN+yzB$$GgTX_1Y@GLx39)0KdN!j2L<{e~pWqTxJoKK$cM^ zD4`44=kT6_(`GHD!d$Oem#MxB7)?KBY4E#fZx{3p z5h)+kHI{%Bp)Ufe=$4?biSPOaY=h`CQT!-XmpOnkRN_=& zlE1zcY}Sb=;yTpAcMUP``~>a{bW)b|9KqW~qqT4RwMX-=GFu9=M0F9$w>4|f%Z?qh zszLi24fzgZ=4^o^iRRjRe&T5_!EA!=pdVu!x+zbIhyy_eD~Zn4=fmFfnRx-r?? z*gtg*Xy1aiZqlI0N4KPovdTVDV~aCL%xqtl@j5u!S_}^#eU_t(>f9aeF?|N#Gu@-4 zzu_BCPbY7-!ysZ&W5PP-h!}s5(4&ey+53LwGy_pR%ybc_k>aBfg2iBCg?Y_D;IvV9QM0r55Dg&jGcX)^7UJ-vwfjB#$s(v%QNe2+;*w7NZ$oF5i45OOIk zh;a~I{Su@m@ug|Egi~VJlC1Z@t0`Wa0od{BG^cGfdO?wa8jGJB&U54Qo&Z0>&>iK7 z*Npv$o$Arn2HifP>@V8kC|XBIrkj(;WTpT*oGNnOQoB{}i%I^8Iz?XFhqe55>ZI5q zLMGKK^HPV}*-rBG>EM^(zF1tRT@DV=i1`$kxo$Fa;qq1pd5=()xhKYAY^tr!mqNW4 zkH!>i-~$W$v|hWHiHP~i7O;&|nCw%?Da(p3)O=_=ab-=)2?RGqu94?(5iln;yc5zZ z;FY9bU|w1#F{SjD59QZV>u9qC<$7os%+XX-L7X%bY&U=@c6R7(B=RM2BmOSIy|q=#&er{nf-%<&g?A4mvd!IS5Wt*-})TSUJe3YWf_ka?{Dx zpCb0j!WMq}!`en6@|wViHf1A2-%e2zCxI8lz;LO`1KJft9>6(N3K@ZNhg7+>`dAi# z^rZT4g^Q@21EUK-solrRYSQJK@szQ#bx#`h(S}&-wwRzxB4MBNSYXk&yAk=AKsm{q zv6{w{KL@{j;m?lNDoLm!gN!&ys@EZYeoi1*#m_El@k>THu+O7FWA5z?tu-Wj5@O-Tiq05TluO1T;!n(eUewJ=S#&y8 z&hW4VvmXl?eWl1v;fL1yTWV5fcY8u4Y|#(Iz@j41QWlww7Q|2&UT2Q0ZYKggP>9eI zsr}D?vIY5niY+ke-)#MNeO6&s_ZSHmV-Yp-eNZu#9AjLiQH*-^sXm66Sl@xP2`yaZ zWj`D>UZm$Wu%nvG6832KBXC=elV!<1J|$E0PgAFclW2G_dfVX8dJK->AiAfcfM*%} z3q5GxVAk9aUhz}zN~2S!OBf!DRy`i=~i4*AV&t`XPF3}4Jf z=g#7OS|4{T_EC0L2l;G2g|Rr1c;+`Ub)^NJiM-BIw%l(a)E^&DmTjO?1TzEIKw)l5 z7TrZ?K3U-55d1+3kKy?9%J%Zf!1FvjApE&|v|XJrfJ4FhMet(-)jvGT)&;fAK>(6q zo(2ZT4HD`Z@SjOvRe#jqtFC%xG<7&XMFIbPeJJcle!L-H5{2(}YLwIsS%t~O(k&}0 z%AYG0WvP1UVCsQr^+4jQN#u_N01(MpSZ| zii#Uk$vpldre+6!^^uBVhQ`m7+~Uz{_K)?uR(;L(=&#-SU~fm`eF$7UrUJZ=L?}1Bm<(Uk6nHOq-?OWJ z8Y&~lzvh!*`GyUgnN4q@E zEJS(j%hJuwnkN5kf0vO-xk7Q_2@tpNd(C1=D=EySgM}em(iaKawo;&lbAG(E=wG-Xg`-v{+YrkMdV+mYq=O^wXMs>j@DS@eCK<341s+~4tU9dM`p2fkMhtxjGiQZ zahlu9KX{cxWyfm3puV9!RuGb-SlBWyO;n(q$-?)UHN+(iivs0a-vy^3?($bp$GN+k z*RiZ2)3KSSv;C;O$+8p&y;UTTh~{!x`+^?@>J7-zmy$Gw;jd=6{qyRbgVaG54||M|_6 zd2K?m8CoU%eOhI>jkw_Sj+r1O;mpNPyNmw4;LL*2s|WX+>%S>(%Iwsd#GA=2 z0-&Ib;HVjPCHrzTO!*;CBYr3f$8L2%n=Uuah^{!Qd>|Rgrss_pTJONBi-BGuwftyN z5XO|zxWU;R(}l~L~m#IB8m5k?M=iA3Td@+WBGC@hrW1As{IkrsIW$sL58;kHDy5gP>E2s~xv z8iszECe2V&($;6J7PufVEj<_ruc~PWFGeD5AqU-rwWtPWy+$9DgWpjH=6*ljUS#H7 zAV@=6DtE4X5ya75KIew&=}!w*Enzq0BcU?9JktG*C?w@CuBt5tBlBB? z98sOV(_!m|vkW!18Wx5waK;;L_7_I&zK8+Y*#vOO-fO!3|vzJV*&UySM){Y5W!ElBD9p~ zJEOb7Y--@=Vwol)7GbW$Fg>|2)-VM3`nn2o4T+i_81XmW=yOp|WeqRyt0FoI6vrNC zJgudANDa>HoA@s`y-06Dh9(ldd6Mvwoge(hS4p*mfv!>e!x>j_xHeftRLN6*5{#19 zL_;0yED*xSB>~r`!Fau#3lo=HTNMV0;PUvQIA070(t@KpKKTiVOt@C~hEuyL1J^#r zFTa|7puBoKEGyijzC8oNca4h#45Um>>yvohR=Y&D zgV{cYUlIaUZ=Gd9Xf&n9XI1-(kzs&4Y@4W8c!u)lMbZ&xgL1NurYg`MSXDk3LwJ?m z{u&G(uukaz_ znYd)VKR5mDLdV`->p4Yt{mGs$Xv(~r_n!0#j@t|x*VSpia4qso;~g@tg#VLabD7=> zYKzMRqP~(e@sZb;>GqTK+np^~1MLhwc3Vb^DCmI&55>ZcK6;>(M79{(_`3aKIpaWl z5FNj_x5h+}GtO0n?+toke0#7$mQI+<&;}$q^NuTH`Yp+R@sgSd7jR|9HA&V*T%>Ls zG8kA0_qz*GaQEgN9zSp-y47`;O#6^NCs<6>39nVa`vK1kxdi)5L$DDqu*l z$s_U$<1N*-VEhO==sRsmSxfIlVcpY3<;`VESUdv1tXmn?q>)dSHG)@TAgu<7zjGgs z=DRQP^FO0}84&v+B>ic$_C8!{w{9A~D!(C~gCK!vyotQh>m@zex$`kYGJ_ z`tCZSIGYL@;&oIGaL2Zvh!5qJxQ zvHLhF@U-DHF6oC;W_NOGVuio*^{K2WZK)xi8N)UvUK=TMPxxkA+3dwm$EC5)q%(CM z`=myO)kt98*enwv0SRh|hmtja+Jz?XMOxtPFc|Ms(@9vjuyl}q6p#+TLKScDlefNz zxR10Fx=ef6Zi1JEz^S!-ELuu6nFrw{TyoGSSIJrcOu{nvht>IfEBn#QG2WS-@tEBC zsgFJ{jH>djaL}Vx`kd54fz~bS^2;<0MzTLAe}_kDR&3fstVTeuqRx^y3~JlVP`+l* zbZp66wI&z|2z|8|E7?Vve~p=~)2VdmfEkW3t; z0~K5GFK=XhjKWi$ ztF+v|KJ(!?Fy8UAGy&5}X4g$( z0|573&OJJgTwixdJDnKftae(JborfJxNbnmzwy)2J%a|U>Vu!s&VsU6-rP5=#)#C=ZsuLntsG4}qMoy1oyZT@4y9Mku|Y?N0b^w!GnRIwdf1j5EP8MiEjQqOea|sof2utGwUOOj zD0dtDgBm@2(Z;~3DqR(sa-nsCA0G@P$F#6wF2<0+wG*a?pVC)wsi^~FeK&vRH(pe` zqAZVeys+CDlS4~gJ3hu0ZG(eqt(oW`;x{)xV71nTY{YhHg>?w1>3oxW@a`@tci-d^ ztUr^xwcygskiJn8wak0)HNt3Bh{9(Oc>2jwlLC-*I$ow<6evQXf9C>Vt8bLwCcwi# z>4@<>wGAaKpyPaSZzUR+hlO;zJN@1(jMK=Ic+7nV#C8)xbawlR^~g}-pDon~PjKrB z5)DUNpYBtOrGse6y*x=x#qmTdCNO%L&r#GMu!uX~Kow&xp?5t=;s3!j_| z)004Ui`oB>6=$%x?-=v9l`1*5uKg}C~7!`3N-oN}}h186iO?CP1I0(vjj z;Oh{k3HtCI4+yZAt;Sf#X^+6q)JyPc*oy<`?aqVCdOAN6eh^-%ThDTzkC1WI(=h3R zpdSn6CzWqfu+r2I-=+|IPTm|7NDW#WtPEiTZ$ynAT@7Yn*8!ww2*x(Fc}dozi`dD) zFaege>$gb69;u=8^`hL%PIWZ(jgRkkyPLnypK3c& zP9@_vLOcz&0@=r9_WKmc>oOKCy6BNhy974Xefk>T*&aj*uFY?p-CrFdYwN;oIanh7 zv4cKnQ{ejOv;Q-N#%bQ=$Z1QV5sY4f6aIl>sxv6QS|q@djR1lVS}_{9P+_Xix=du6 z)Sd8pLG8L2qaoF9Z&Nn8%xluAFxr~G^a5M(B3(W5L|&V z*r^vDa`M51d|q8R=f$_JeCJ5wI)rZSIUsQn0$=S(9rUtX>R9vsU8~ZS;g1|q-|DE<-Tx;+KhLcp`BnMIj zyy*#;8azd4qOnSiTeWry9T zx;3`vGYAql2wrq-%;z=G#90T`*gO_wp32*LgoPL#Js_=B2*QV0n1tmht&eDsV^-v1 zbF&K|T6NMXeAO{nDxc3=QW$K#rvr-H(|vt)#AXGmfcCIuK?ZDl0;H=f4k>WgLSa@xSPHlrhj?lUY9uUxvRN1X}2pkc&!lPh$&n{^+J|B9bZPI zIBD3QxSt_w+0e_ekU%)V2OB=}!;F9_Wj`681fx{Rb74y>(I=_t%U-8^!*`C=Pt2-03<2EG6sAGBLnI+7w-k z09u6WwVJ;j3c>@Y%na5%p#T_=C2} z*997#X3oNra}|Hfx~3O)EfP3WbK`)1O3K^GWO;U&Od?n~k%(JxBHN z7r97IGk!I?&s_giH=zhrvjU~qsD2issFEKEvn1Fr`YjZJ2En4d5cYaicQ~`kSbCM; zJ@o1~q*u1$EUg2hIU@uMWYrQu#{n$KE|EKpDY$=ff6h&yqTt z-nF9FwFs{4h>T@eN{ZrS>flle!WqpfCDwavkyrtiPxM0c86UCpU+N;qEeQXXg@rA8Pm zX8)YKa%{ngJD9QX3+*iZGUV9-RrAYAz_79XHaccgAv1eJJRe^*7$i|7f{LZn z_J*m_Ew-##Hok*@gi0kN@|=!|RyNovZ#?*>*c?<1k0c#mxu7|MIqiY3sgdwWr-ER2 zVir&l|E)VpmdAQv6pWeE7mLvq!$i&IlAfFxO)a|QgLd(}hpNo?o7D4&u+#ZS8RXQy zEC2ca_{P>c269ee*{yY}pJQ5#oI$fOrLhA(3g2-X+gFkA>%TxCFQ&Oce^z``8~)<+ zpz92LYruF5EdR@YOo8&GZX&c5;=HYs{wDpVY1HShoIA~Is%dTwIHZvUJ{H`45oe-J z43(w7)(q$bJE*7WxG{=L1v70w=-jI~QiK8pl>ttIy8YZAX&ZBay;XN}x7!Z5LKp$61EO!;K!iJ0# zd^T6p0Xv9&3S2l4tVIpL-~ zVqcx10W9gjC$_|&*`i!N171|~TN~M;c|}HkxdW)nVI$7wRb)o(XrUUMDUBU zEzfLWT#I&8R4&tNzOjvY_t4A2N&T9JfOLfRe`?OeTtrlnk+zZBriwPhmzx>eZ!~*k zti_JvL(We1LRAocJW6tULH|qQH$06-M^9ZL=5N-pUrq#Q-DG2D0eWgkI@BO*Ev^H) ztNku=BXDOg8H!KKx^ACYr7sE>XHtfjv9mHdUdXo$J_MmYZWly1%{^MuLdG1!93|lA zx3HkY{Ng-It*PR3Wlah46yk$&ZQT#Tl?~ROJErDxe}hL?2YsIMwYNMY_rmPDa_)yJS5WcYot? zYMFJeyTHyOeAQ95*y1osv!k}XU;P_0Qr8wxZS-7my?Nk`Y8eLs&}VkHW4qLB-*hK$ z`8_REJL;q;8lmI?b;at4c%`J)dp-{ad^r;>A!?g z_4H~01dgJthG<1L7E8kjY*_}O^0UEEWiJ-2PmFcx{Cg?OnfV`4$l3XwO*qw>e14|_ zfh*m;olG#P=n1Y%N0te%ZLyf5s-JRrxP_;(=_3FuK-9l#YzDXrjQ(VLDOyV4ej4b} zUV{VV%vOJDxS);Kyw%BzgSB6ErPbFajZDmC*0&ra>hpiJ1m{`o>E82%YO`MpMQOq z#eZ%6cfo~Xz~*&E;>R=qclMt=<%j_6^}0fkw3U-pk5P(D=2siQTnl< z#J03-eGPIKR-CkwFn!-T%Gs2!f{5DFAibCTIr&llhU)&qMoE)~X6W~|v^Ha`0k<8c zYMVZ&(PwLLF&5wCIXnW;MH`zXM!O#MwzlNFjos? z`^e*!MkxE-yA5JFQ!2hIvEIbtM`i+DKu*27#y6wB+{U+F&!{|1@Xt>;4|fnj{QTi2 z1ryxdwRXw9g^C^N$g$9NM1A%9{Zv*)Pdy&np9;{X2(w`8+fRKU;dzerwhO~MR9>SN z7M5LP&%DF*HmycAHS7~1;Rho`lYK7I6P+7Nfm&12?F`WUl6(6H7b@Qcjb#!-TRD6- z+;BZNiDEY(CM;bZ#)e)ZzpIEo3ixB%+MFq^_@et>nM-N)Ha_bbIQD0ukw03TwU6gi zcwkGSv67$2)@~w(UgaSfVaxP!SnC4ZmKM|W~YNT(xi`U@f?STg?%gyn*m-dC1aC| zWSJi#kQx+|$0(qTR5mO8;ECWJC4@z`>{@-D+9+eGDY2^J5waZF_Rs2J@ND8<6sn&V zG{L1oB)R|bFsEVm6J&{X;i;pB_;TGK;NvBy0JN-lZcuC&#if>}bf$f(7*X)N6r*e< zpXQfB7a#D>+ip;hpFbI9eD278Fw(-fqUd25KV1(ApJd)A zewaJCpUY`~DLw>4XnH~Gwcv#`k4A(FkaA>Xy$4A;>%&ILbIokf<98nDS(!=Rjp8%8 zQG>7Yg-Xd;%jhm@E~HTm;0HNheqS}17@h1pf3Dg(&Fg_ zA}FIP_-kFu#_{j$R14D+1L5H)Zr{RgG!TF}UyMaPQ;;w;A)gB^C6H7xWKMM`g9DX{kj) z1}zItZ&D!GFx32V8kp{+ZcU-C8J0y{YkZB$br|h&!j@@QYTKN{h`vj#cEFXA%2+!K!$3?wj~LM@XYDIN)mW`ILE>w$-QF(4V(sH#5v%0I6>d|rdr z*NG$roMY~57(&6zHcp`zP<+`T`4SHHGr8bo6BTVAU%SG3^$#BR*%eUzI;!ek@_I;_t)9RGrZSKpoxoW{zJ1 zPqqX=@v(6yMt@LIe01w$FHMENMmz-eH|X$?L(YMJZA+Xa8u6h*)w*@!!Gzhw0036&WEoz zyFq%E!|-wL=r(xTGw^BIXPuBnB-G3_`c!u9V(hnSMa5|J*oM`Ms*s zO;)+-#p9_Oct(n<&3PJqQEGe0)4-g%Y5z*I5Wl|F3-952`)5in;edP1OP!k~HmK{T zAMFl@)BX{=8YRiYoSCmz3{MgR6G>tNDK>C^1MIN~2QcQ5$7~(*Vffr&Qf+G?ye*;% zQlM{1e{fKYSdBYJO_H{C#gKLQ5f5P@GKvQG7%y1*+NE73e`u*!a&wQ!&C((r=#m+! zx&ul+bhtZx`?~vJ9*b1yR}q|yb)hK9@ze2ztarDx-ne=5s9~z=;(G@56w_^0t5cF; zP3mEa`Q1*eQYha?I<{k?=ljfV^ZT~#Py>MR!`)%vrlvX=qu~b%v%Wq*3f{F~#dK+I z@S7=l^BBC!)#SCh$~W(SKSA|_8&3^ET~8LqXkVeSpW5|Z{T15y0xYQ4%tkXu7jx={ zIb~Ji;u{;{KkuvTKi7@*(D529Of>*Cy`AazQ9u4N#Ze?!i8|?d>4pxoYomLN-(8C` zqxYvztbKpbUYxb;fByVFiiQEfCEiOeHkrER+OjMNKHL&9M-|D+GduT-{@WjrenOGO ze_A!+#2;h94kSSW=3Y(q`_5)EddJhZ(ubJQ<_^Zekg+5Y12-A1QYb{1i~RuMVr~}S zv+G5mzCa_(xP4^qegbLY_<#=FHG|Fz>>CJ=zo6UHKw(7)1@2WwL{Ch}O{i0E-+({} z0enp>W@+U(g@?bYjn}vczxM1KQuPc{72^XJ# z!r;Hz`sW^K@F96ZCJ>Z}IG=F-=4}?7fFYmdKCuKsK15z_TnN#pG_qn6!A9T3ZsQLF zKX1ON@^55voM!ZeVr!-hG0BLZxk*2QDtQ85C^2i`z_(YN1#+1ey7W8f&v>74 z;pE)qp;M(9Iml8%q5h^sPj45%oE059Qo5pqX>wc~43|bJ7Fu34X%4QR?G7PHH-UK> zIv(=)=4!DHBd@PCfb_{y;*6cYRlKtJrG-JiPbk93T|Gnz**N)~-yID`XU%GVn1a(o z0ODNGAiYNIG)zofOYEOvThkRRC7@_$hTUdY#F8-i?m0=`t7^sB1-c1xlpy{2^Gl`s z9BFn>t@g~_e*z&O-zr2wzav_Oe|koH&=TTvci$v`*(LPyDCGEpZ3<80??B}5z2&sw zVS1}!H9Vw*1`;hQjFR;Aq=2C)R9tUw&>0W?T~o$#ZhOxpQWJf@U*U>4R;@0_xkUAK zvtOoVCHX|wA0T@$&c|1hCDPY08$+A;z#E8ZZa?4k245r%PO&v zF-beMo#Ki%&!HJnHoKlf5wsltFyWBlvgusW(WM+3R>GK?Qt9`8AQw|sh+VS#NZgQ(+zZgE^AQ(EMSe6SEpldftrL=!%M&pPbItWilYXK})*I^5WVJ%~Rlbffw zyTJ1$D?<~DPK1EC7ozACBX@Ly?)X~(pbCk_Dpv*}X8rM1cPm~2~hYKSZkEqPD?jY1#??`zoq-20)lHNq7*kKBPZq;mW?DhyGbkYUm3c3t-hi3ppDH-(0H^Us|Tn_?v1YQ!U;ag!}RJT33L`j%iRK zBJ(-t8LJo-uQjgr5(fw`#rLc_$4$_nLPGSeAY)&R=&>M@b4mEgSp}mx&i!$wib{*) z+iT5mvfLSb5#u-#@A=`}v?q$hBTsN*9h)ZF7)LoRsgS%pp?rf%(+Yu1b)qtc^4uFi zXVir^guNEmQ%L{%i)zYCpg9{wE2^QS+Y>B(v%BXA9sP7tud`?qSWB9O+{?XHMs zxoVom7nZ^G`BY5Sux_K^wT5^h^Hk}TM^|B8jd(l_*><$Ew!sFf=cXuZ3XF}X!R^U%u*@Op1J4es>N+pt+ z{ySWw{oXkFsa*rxt24A`$%U|zc}XK<=dKs~sNH{IpYr$ZPFMIPj7vWS87Y*+Vc9oa z6z2DhRBv9^B6|xai|DCMq4ER!=eOem zDVz~@5M=qGPTty`DjK=xlSc8~LVg^P-|ZpgH%1X z3_3}9I!h-DMs8o_tgXVn^y`e5CME92Bm4lMM2Hao8kIa-* zE?twUhyqS-P&g>-uRwwPJ@Nn7rxhRMUoLvWpugGrCuRs3u0-LB#3*K)3`YJnb1zjfnb7wm2b$9aE#CzQ}&{ZO3q-bOav9L5{68hGshOPw^76g-1i0Rla*#~@Vd zErHr+@8UEsifKfhk~us`%BC;2R_B-1ao!cskH{*AgpaYk^N;eZ2++ii&u)S_+ON z=*I*`P-=wJ#H2f$f}Zp_Kvrfqot2@H=W2e+7xtDPFntzTCI4KiPBK}Cacq&0?_{CT;bhTWO%*}8Sc`8fj=XFU2o zeo@`7IJXaTI~rR0;o(;(^yQ+kd?=$YQo76smnX>{A+kZ{aoJi=tOaogWmF99=~}gg zX}*_BjDVeNn>>cOu<^s=B<|w09Hk{eW)%mCkEuJ!#Rt4=1LPDlE*4(_8J8X6u?){E zOfw9jSHtob9;^A(2Rse*c#ci2BVGJh!(KkkG(#vLTa=t8FVD^8n{zUDQ%`2wmrcv< zV*R}7zW*%0L1DP36V9MEzRE$!7!1jjH4AWlcFuR_q>x~r?+R}2on^>m+jL4nv%*Cw zGP+V<4x%Lu@;A#k)r{-DIbJ&(>5IywyBa5D`bj^TI$rv93bf3 z`W7*mcrOiM1NEm|L$p2TEV^V{uMQH`n(>yV8gu)kWn^*}k~9S2QHJ=0&|i5K)k2a| zG=B(gt_vU`!nibKO zP6JS4#WS$@LQc|aZz6R*5+Rj3eq)d#hZ}|3*>_-sXO~?V@JD8R74EJBYZW6q6`6nn z(lQ5lTRuO7pc8*#Irb3+N0TfFp|IC)kzS<&7?VQAdAxRS9yvz=X1D@U+bX5N&MLrL z?(xn-*~&lUuPH_Z`zX>%jLC4q{g?V5Kpe`*~Q&S1m(VZ6N&|e!;QJx13bCIMcC_dwc?e+VrV7X}$#Hx`X+rmZ| zZe2R&ysuIg5Oprbq5~&v1z|hp5Q;hvNHGNPm@P2NQ&-cpvwo-belFw(Pax)A9PTAu z?QstwJ4F5`VG#IKNwU}li<1+leUo8WFmEm^+cZ7l#v=rY<+YSURh4S-)gRpn!ypR7 z1uUUYnu>DSJzI~HQRKhDzObtB&$O6f}kpa-gLQOKc)!tQ1hv~1EXYltJ@u@i0^5_1Y{PK8md zgNSXyxgMVp??NN|I3rs#rEpzQZ5-`p_BHFFI0xmq>BGd=HXV3uf#+;?Jb zr7RzIc)hpm)QpGK+;0Hx%LwpM4a@gYgGHHt2w)7+i|s&gd9bg}-Q0bBRm|kht;Ao$ zy)s{$d`q@AyZ}sxURC|TM~fKkq>M-leP~_5j^Ak0HFBE@Q7AuP_9|~+nl?+kuJgC- zjvk6!wUYeLRFRNT2Z^Wzcd2^e=)GLL2cV_TgkMkKL0JvtIg!*&rt4bQYTAuKJvwTG zCG6$riy5%0bHHJ<0)8R^XyxI4Q_6)w8+)2E7mxtu0+8EI^D^D_WHuP4mraZQNRYu{ z_;93i3B$67uW#Aesz+33M|ADMSyr zqh`d{^d26GD(iFj^})%~r%!{8Mr_-0O+xDQ^TVfrjRL6AvAGiw?u^TyLqJ@XDHLE* z{IO#Lf~Z<^IJHmdE~e;S?5!vE#!0=V1`TH1hjg*r{DqfZk6VznY~1Bi_YKGUnjC#` z?{D9cp2Frw`ZVg;7b8%vUhFr1mVLKoqvqT5b-RmNr-gd{5YSfaB zGX@`Fr^}%YwC?_hGRjF0g-V&L_ejPrU&?#526JV!IJ;kMGiaanbCel(t^otvPtX?_ z`C{%+h|Kt#tC}7E2Ie_$Z0Ew7_yEu34%9Tx@-<~@F1C{juK{YC7*qkEg)2x%4n@S)4ty{r;%P6=>0jx)?LZk zR9^Z?O=Gz5M|Zhs(YIiJB`P{3QkRV!+Rx86gG;5+@mXrZ=KIZ$pU3r5VT+)N4RFm= zcC(cRLTA~_miHG?KPE75wzd8mPU78ALV4qbXyS9hm7|PNb2e4lDQYO;A595YG!O>Q z!mQtUajW4>EX53y?d-fzF~QHl!$(<2h!$=9fwko05Y$s~L&V z1o?SHLn8d6dJh8EN4k@Cw=cpb5@d5GCzcikPXWpQ%oPjm@?U`h{XYT}2=z~Y<%ECT zO8vWmg1%#!8Pil5VPMhbDiNuPlUU*T@Y$5e3zFoLo`f|nF#~ml!Hbr?^O3&`q6Lx{ zuU-x6j=qt|v|{7?7xx>`hBPr+w6Tq(@C9sP`U1d9aEV1%KY=oLX!HpKhXh!V@dvRJ z46Yt+)LDkKY$A3|jx_4IE{nky3#tqEs0a^g6Wd>a zy$3csv(d3_D8!_yMW@20h8dyV;|4!kcG5#5Z@CK+XULL~j_iM(nMtIPN0deT6PAHE z17wFx$}T!^&~+EE!1qzYn!?4Kw-~Ba$fjRgT3x7Mu9d6IYS|OrT+*c)qivj9K+>z< zDM0gu<~4zZzj(91?bkdi>U3ipMua&<1;cQ)TtsW^3aNq_KUDD~F2HH?y3(T|;7$-vWDn|~`@*J6FzyRQ$S z1nSKKYY?A&Z0n*FkhoC~M4|~N6ww_ke~HA@qqrwq5|3Hkk`7$t?0&GcfJ7=-ZzP5> z9p<2+$9)c>&6}*zY;Oj86IaMwCK`UDkebU9x~Zl7u?gxN@-V&Dz-9ILNsSgAl9Y4= zw5qPxQwEKm9HcEtWbLns_V{|(M_n}MbZ8ig|Dkmfi$mX@JYDJf&$q&2_@;IcJ#sl~ ziE0kck5IZPMF4iWDPgjNp|aXk&LgQDw0s8^nCxhi;Di9O_sv$Gm7r zTH`F8k8aU1b&ixw0=wS>D*vcKLJg`9w^IB`k(wP;x}CCOtQA3(Bbc^dTlm=Z*>vsz z?gQ}KQRy(OcwO4hmm=P=SA92F440Bkr9T``SPPOomp{T;o>$ykd5PAtMy4t|c?`vS0ic*@xyw`gmJ^q6w3# z5?_T}xaKJXlKAH@!g(+V+aR%F*l1DE5fuIoE#1aIT^!Wk_4NXw(71bRx&S8-Qfu@} zDxvHl=*xDK+6ti`U)BpP_<^r?71&6cosMYKn=+E&T{jDwzK9kRzjJzXcW{J)H{|jN z7^ra13lVGk9=Q)N_p5zkeA#-H<~22NcpVlbS8HGzHbo8?YyF|&HM}YsKcYC5Ww^0J z?C&}2E)DZC<7&oXqSX)v^K9)WEQ;A|eI_ChM57~Dr2L_-$~sjWr}UieM?s91AJ&s- z-Hv<^$g8i@2f)+bDCpykroAYmh57;Na&7t(up(H5o+)L({aMNO0u8nij0%|m1zKmg zA*JkbPO%2|6koR`XVrqanyyis!_iLpn#@9^Iy}ckPl702U2WQ7+^Gpsk>8Sf^XBg` zIn>jUk3Hw`Qi&weWV-HCC3_28wC_KO^{uANMJT^HC~*9{uTI_9GuGy#;d@|cZ$E%D zLS@gICEg}uNSDH1vGeEm-NkwGtLOVV&(3}Q_*>|q19&irA3R;Jhz_R3PynhZ-7_mY zc+{q_3J74Em3e=LhbC3hl!+lIa!;9F&kn&eeWX!;j~N78-^kTG_AxEPY*~z47O4Z~ z3Fg+v-(UG_haI)Tk26Dk_JQ#|E(T^CTk}ouK3tN>^Yy3J!_s>l#`IFQ}9Ay1-VR7gDWLWY%5$lkBS&R-*=F zy5h>}yp_l=7xS_xFEjjA*@IhF(Q0)n6Q)#u#QYr{9Eor^|v|z>{KFvlw zXFx_!Lr$K&tCI%?hBGZ;Il+?lk#()TRJ{ZSRN0;bUz>=--dc@!oWna0zfy89?J(aa z1+3Fe1@U82te~BEfq@AfYT56&%sHLi&Bq2LvYFa9uS_RO_ErN$C7TgKZkW%^#k9ga#iGXDf+R$nM zub?y#AIn~#zAg+?dRE*0`|)z8B^fNGYyCdiE*$x&lHAz`57J?Hn8QI%kOzU_j^l_ATK!g&id@h!xu5cB z>iUHeKu{^45*RakH9I@P1==1@u8ctZ>(&OpacmnUU%TZ* zaV92uaALhZC)Cus)FV|tso*GD)vMXl4KA!9DxD26c?wL>ko&Z8ANWWxt=viH-h=iz z>ggf1$x-@k+4i*%;ks309j#G}kkO<>Ws*vD6B$>8p-j=ZXMhqLtP^57&txho{3rOD zm{4k+$yODU2%^TBRpg+-h?pVPO_|T~#m>|%inIwf)sQW2|8iq9_Rp6GA<3t}QWDGI zU!IT|MI?V-74*S!5tCEAx%Oe?a&@LF7MS$lq*5|BcIo(0@c0MH zuFL)cB3caYj?g`x$u&34 z(MPDvgklrC_x2r)38<(s?P@7y%0x%pSB^&Vva2)j_SCap?o8zeZrt#(nf+HVxp1jm zj@KI50(bO@aRH3>Tf#T&ODHfuvJd24tP%EsET`e)i)<7-R$N=(MC*7*S-0 z#L9)S{C!72BEN&=U~u?5YiC*Qizoe6LaNB)r!TjkBZNs&7y_#{aVQVm0OeeZG{Lzg zpE*KX-6{z^*&Wv1wQx$qZO&i8{r_R@y>@Jc)-26ese8H(-W{ng@E#T()*YUO_wMPN z$dlD-Rc5tP-6e(gmWT)~VE+FY-ykM)5}%5xo>!Oh-$#vqZDu}_Ucf3;`^N|QIL4-l z?p7FsIOvXOe8p{=tDpKeD+1xf1~o*dcW8#pRz``yXnO%g9i*3(M&WnYp21S~ns-+H zlYd=jc-66?HedwmG;*$`J%&@BNh^-etpA6+iFRnmb%~SKlNiAly+Q;Oe-N~&-Eq>PqCaj zfKEDsAYzBBIZU;{q8ZM01l2pFdx%7OoO-=g#~%lhohzu@!Dg`UO2Y)G;4j-4&rGfr zAA_5R3*#h>B-BsU9$9HefQOKlUgC($7wCzdC}ki=zE_&ND5Dm19-8)#9Fz#!t%R&u z)??}M_6;TX+D$N5;x6f!VLrR!Lsf^FEQUeIrTMye^M+ z_xCq_w3K#C5eM)6B}Om)DR{wSA_zKpaj#C>s)_)SH5Bfimx%&m{Vbr^QZCc-la*Yq zqm*4xh{77qU)*#3KZ`m6tx(_4KfJQO z%x=f#|cCm4RWnROOXc(^+V) zROZX-GI(~Uaw( z9p~sO==I_A&^H8H0+;osTA4FR7lF&T@!Us@eG;q|Bi##9evHDEvs;=1TzUMHE`0~@ z7P|3@f~2#AE6isaOP4~TdU+t)^NOPd7#X1Rv7t%|C9{me<>s2^n&OrRrQR0kMfe~l z`K@5{l7)Ne3f=Oz3puFfdk=R4vS>KsSdVMyNEacJ@ z(+}F7-wgQMg581kS8M`JH_l`@OZE4ToiO|4PMP^69v0Y^<1tK_T5pvuhQXx*4+1JR zH5K#yOq0oZ2jsO!XDNlKJf!eB^N*)2bV}ElAU)hi?o*Ioya7O!Md)-veokm;H8x|M z-^V98Rt2TKTeM&MD@9i7ug*U$qC~8p)qQ_B;1OB!`_Nkg2mSjQFasqE_T z%A)-R#|9EA29wK$RQ@&{OMZ81X+07BpjW$2T{uG+7v`60G3leqgjCu}P|KfP2}JpP^j$_-`(7zr)tdIcSBe@(X10i6Bne zeph)tC6TeHL}SZ`>z#WHb2=Z^l14^m*V!na^AmD7vujJ988g{JxHw74v^-2NjR}yq z`O)j3OLqnun*reEGgAsYAZ+y6)BW;tj;`&)0Uc<`6@(g_=i<$Htsz|sMQTO;>n&nP zNuP(O3I*bC@zZhXmpL9XWgn`5#_7vBVAN_P;fXnB!R<`Nk{p-RJnE7R~_f(sEModt0$~#^Fx@ zR}ps%Hkl`Fmoyrt32(6B;0x9*GYKM@Ri=>Dc>LC){Z`V>y3z>NbVS9>@@lg1(E$b2 z#`rkGOAqSN%%gbPoF*>A)lL^UlB;%HI`#uxbJ6868g|aw1FobdELwr+QvHj)iT^F^ z4MYD#q5tL4{|b9s5j9vlIOq#kIv2+6`8}D8!W(?&&*F}1CRYr<&RnF(z}{rMRPzjC zr!LA*YPulvh8OUMhsMtVbD-VteHh)luL_Z6QWfGFv&z4A_b38Udwdv%$;=034jfvn z=qs$SSxEtnls%Odp$LEB9>L7y21AD+maBHSG|9lr83ns-cx9U30ateiZ6wZ7$1QMg zf#C$LT9>TmB$2I|l0UQ+=*aKxRH{` z0f%8kBZEgB|0YKps50vxDgN5i;A9&p8%vv`)Gy! z!ZlA#u_1u-(1yU)-P?1u;~sjUChJ4V)wA>O|IZZ+Aa*(R-_xYWjIZe zT*B|9B^b&wi&i|e+KeoIPFU6buM&rLu6*TGaT0E8mZp$oP2J@dQk~#;Jm3`^ko3J( zg2JE4Ima?0EDBkyhQqEM4hVuB(}R%0YfN(M7ew6DB#OCzrRU0*&znTj2V`aR*Kjrp zbK2t54;TK;t+gtA==>X?_RFJeL|Mb83z7QQM6O>BlCR#>Hh?ia%$X@?LKIxtXIF!X zDNck!=?hwW%E`O~{Beap#=6SrsV{?(1rx?^sH-9F2rlyxB}5H!08CxvhRZy!MAEk? z$|QvrVzS4)?l_=!3F=gn+kkvXu_Ed~IPR*t`tbRJ1OZ&hro^~k5%PV&dnv@gUJ1nE z5;SyxP%7EDU|>Dz&;-}tV>h0Fe>EHm+FWBCQzkRjUY&5B7=mQqe&@*lcwbgp)24_a=;Anla z_~W3i`$;f76j#rd?#wHyT>sT;WG#Bbg615#BnC$2)|8I^cKa_Oz@8rMm1SyBrEQ8! z!X93Xu$UU=5rmsS2ooIZwc+5U2Qt!2wJl}v*m=D9xm9^<9f7Fglg5wI=zOt=uU7#z zo@6~_zQi?WBK%Xj6X;~?10ej}cY#x>;;$}Q$+{PVg6JPI*ZSIzG_{h;IyQ+4j&2L>+Ukxv1zi;i_MjCr^__u$ml>YeaWXl5atIls>g3p6W zAhp;m?C^X`@gUDSy4x&mq74)}k@K61H29u`Bd7Y)LDi$cSS^RitTSWNvEtP`(ki~)NSmsj|2jKomU>#N~Wt}&o)#0wJldt zV2d+1saZ(2bxKcHI!P=+hgBQ=Mwg>aT1PMV2WRNQDr`~{1{%g@Pjr(Z6h^akJc+Ld zF!?RP^Tnp50N>P)d$i=O9bvzwkO0J>cbS0)ncx3V2xd&Yk6A8Xkk=arV2m-&S5uKr zAxsmj&)aIn;k>|S1%3e+rJr@i$uu8V%tI+u)eJ>``dcnADyM{uDKjZ|A1A2)b||E% z#V6;YzSkSKtN^dAZA}G?^p``9U##u%A{hl5r`PO9y#r~DrH&`u{jsxc+JflYm}*&- zG*#&C`$|e_Ox?&KpV!Q|clie4>(|pNz2xx(b)Q6<;y+twV zs9O@AbaCs*;cPKPCzWUn&;K;i8cGT4bOBC&>ioN&!sjOEF0gXI<#!?M`Z{}@)!535$DT*TUcuQ?636snr4@_U?Do6cMk&rrb@hNMRPkv^& zGHve?nsI~8dMloS?(I}J@6E4X01DtwK^dsK5!IBGS+WJoiH3*O;%zPO0-%jXEc1+n zz&%<;)548jN^a|YWuXX{tje0d)%F1dpt~80VC~!CkQvwt)|{`oGAQ6-rJeSNhB;tO z)z5Rc7a(Q{$vg0tk~znXK9gS;UAnNT-V;0hp6z^7oSD(ZdX7X4$={jH24VyN=-GSw zCt?g*ybw1a^{%*;({!16V-vg^UUMw#;`r1|Z##eZ#n?Oji)}}%Ku^K4x1FqzjJ3LI@0 zs4it--i`bQ(Fvy_ZBWsAajDu8!C%*%DHL08vbLQ!BRA+K{QbT}1yfGEulB2v za;uBL09tijKI@0Ci#*(zIMgxTCC>V&Nu z8erv;nCWznKk;n#C^SE-#EEY<{#z6r>7=s_Q1{aYARPKSwKG>LCu+s7jVVM0)|-L? zK;PhXsJmBuD7v(rBfqsJF@k5JPDg=5MFfwth+zVs$|~)+mTyG^vNaffbf{iUjXTBT zx4dzGLnwp})EfKZdh(r4r}%QkBwWwssD(Y?_IIcKHYZ+{>)Wi1THs^d5OdTjXJ zPLy)(94(1GpF0k#;5hDV^|2@FcQJCsTdu}Q$=XA}vbS_gK4Z@Imq+7UoZnP@&>qZm z{-CIqWU+bXpy)^zprM-kT!WpDHU!mlxvN z@q1G=uVKE3>Q7)SO1?Ji25K?VA=}V!WZ?=$&^|Mv&4{Ro7gfZj`4vNJ&CgJ|cv-V# z9(7r~=WEPS7jX33m}VX5L%+ranMs0HAto6lB?*@yM*CIk_>3<~-ePQZViQR1)era$ zLsz~&4nTsuT*O0^K7->0FIv}rA)n;mUrqmwh^*2UkZv@@6p zJ+NZDFS`NF?VwQZTY-fYI;EkBd`ip>%xXiy;njpiU3#7e5kD!-Q?%3tQG7d?qN^(V zUNo8=;1O8-5JPG?r@tAGZTXp^ya=(ofV!Twv6tFH?bg72kw(QTT{5&1`^zh};M+^f zj4?ZY5Zq8P`dQZ+b(w*bpo1g{4^kJ8s z1Wu#|`s0|<>UWM<(=Xx85(6k%IIA{7otsAJw#D5gp$dcJNCnXXJh3D#|l3%gGX2L2E zn{?kmc9oHR!6_7lk)!^C(T$()yo%9YSik))rKeH53_C$o+&Le#q2y|CPT9q= z3eHb)I-!~-41_FY?OnIvEqjGYsSsG|Zb-dPX+4BW6{!DB5Up2a3=g6fZ@W^U%Pjkf zO=cqJ5;Xe|Es=wZ_lZ?YGh#+^1Zug3ngm{Xz{66^!g`&wDE=^`q5ZlF3ZyTHWGaYb zaaPN}wu69KFN(e9u=Czxv``Tf6s_+^V%m{F>YFOghMEzjjlu{` z49&PFr1o3IR@l2aByT;d{Kjkgir`lpcrEf9$+E<5#CPebBHs4^O3dBC`G%`Y)!#hR zF0X_6^O!HI3D_!=(FuB*ib!3d7~eW;zChe6xpi-H08OcKtG~?mniY!yvvvhc>0`o{ z3X;53PS=ICjz;q-@e%t42v9@hYPoYY{(#!*lDjBhO{M3Es1yFQ4M_>&ybq`A%d9Q^ zNE0Bn;&C#pp-?J6whD_$AjmnNSzKQ3GI~1?hGR1Cc&LSmZIbn@9UfV-hwvH?5B;&z*x zmqx}H!rHqGv1>;WWzbt|#Qa{`X7knqd%QZY7+@untBo8kV%L@+B{1Vx%i>NG4i6|& zW5!K`!`B|~Y5JaxGx(%?fxX+Au~fDd04FteoF{0no{{B#W=`QXe}J0l!iD~tPy5;3 zV$tPB0&5Nk2&(;&^jr~K2K2-9iFj6yM#7Rz1d%=wc91?{@7c0bOabW-IEsYKtLYB> zy()2qriY(VVdBSxWP@|)F8_mmhV_j|8wni)G{_N8pW6?$UBn(Yby^hXmnwN#hKzmd zz>4F04l3+Iv#72kHjpTRJl?lRIrF#oT zXNDfQqh?p?liVk*^4OdUZfC5O$-F7%vj5M2fjITQ1;kP8pYVTt2>w5g{#QU;u5*;s5si@s!awAgM-j4Nd0-@KOyT(}?P-(Sjm8%19S8Tei#JAgf0hiEK48mzGM5Wx`4UwHc zD3Mk5dfVUcqbJX;6X$3)(ooh|BlG;O0FTT*@&0Kuiqk%UWyf)Wx<_#?(7qCa%Z$Nl zB@Xul!o|-QI|GJ{IWfk(zwYa`HFux%XQLU6kZ?r6+#Zj4_Eg2+8$iZ6cyeU0Q~xES z#Lj3E6rZAwek`(nISvYAsaKkwC}ER}79$$F?P4iyvwM64gyI7lZ0P^A_s7wg?lie> z&#U=H&3UfELg-|g%Ig(EZ-YOgaV$C?%xYWKp$mRx4%Qjw_mxC(L*H<*2+J;Ws&2$_F{e6)nmxB7A7hA3f%Z+8lbQHI_{2H+xc$-`_#O%Sh+6uBaweC+|j*s7Uxd zWc?G0?In6=yYr3V-`M@l4h04CAaQUG-=5je8HE5pK)}C+#(P6O%$BQ6zi(g(OCuxv z&zKM0#Q&HjrZsxQUiNJ0iVco|z@#0(E<}mS_}5@#h55fRV%+T~%DcaD%xsi~rm*_> z<=o%%qtC(8vejFqz9;kFUYo3BD}5IZX!jeG&q~P|-A@&<xD((v@q_`VaMgj)r_JW zt*;kSzvVuEb(6Xo1=7|c(UMuKQa=rBYW*T9T9t85m~N4Gh$W+}6s}^-I@kHgv43EzNH{`9 zc$DZ>S_FXb5`*gg2th|=ZMp#)u}c+x*G&@39x6F%=%os z@1xGmlf>5xe7q&dKk0mu`jcoG^6Rh$A8=vCD+*45N<*?wCEKVCdW69Ef7^$L9xC?0 z{N7*UW_^LnHL_M=XoZ0B%BlyB483t}2oRq9O0Fp6MSDuTB;vwP-Vv(oowYHloA}ct z)b2aycYX9+OHd7Q=YUJtuD8@virhxz>ao1Xv$@dVEZOUqddn(eqn9V29oVjMFcPuk z*7&`nz-3}ce$~Vol(E|EVQ~!A98N^;p*{q~FMwt{M3QGrMO@U{h$?t;aodq*Uu}Qy z1=jGbI6J6;yQ^&_0Nx3#Ze1nY^HV*mka#rq=~4Iez*^N6mH}fY85W*&uA5%ltl7Dpji2C96=-Q z^404MO;)NI;#lJidyJXi9109+8orrsVheH|XlDlM{EK+S#=y+a7P@hN_u2wR?s4wUTq-rn->Zh`oy zaqx?EpB-dOo@<_q`2st{a`#RX`?c=!%hw``7TIp}3IHX(xV4{61Y5|4cl;Y}_It%a zvfxG|1O zM&K>nnnJA&Ak1Y@F%S`JlRX90&;4SsERqCrQ`3ctc?kPkJ}xc%hPjgtqY=$X=eMb- z&VA-bed6v{cIgVZ^M`9uw%i-D5qX8rXlt1nswiW*#BO*xGrH+bJCSh!%scUWiMvP2 zm?k3@{iI+T&1=%$O2RK{@*C>hHFz&zvdyai{PMF$HJzm#cL!`^KDXRn=}Z2N)4uNk8nygG#P9Z2ln++G(uTIVGfXf7e_AMk;r4#baStVh~JEX~(lt zRR3#{BP%-VPlnZ@jM>30AKl0K`jnh)HYh2kOZWr0LOh6{|AKG&|DgZi`{ix8NQfj! zDLBJ0oQ4X5ATR_;VUkEF2q_SvpcCT%3E%L4hv5GX)Bg>I{`p7R=zn_j-`1liGz{gv zh@~*Zr*P-*5KR07Cdq%mfB)0?zipbEMmb$&sx3+TkA3CP^nF}Vc*A+i&fjpqK4YwA zb-$JJD%^e6WbNl>C3^SUJemfwBmh5Mmw-s~q~IQQX@;1zwSCHH*Bqv7$B`$SNhOwTD4 z)CTu(F7yPI9NXc__A;`b=HDW3X<>fQ5>^-dOoDu%_rZq-q!WM9-}}a0NeU=g>Zh1U zl9t{^{}3^P2-sJ9W?L#~7^A-8e&oLe;pY21vicJlTp87$znwwOgB<`q+_2;RjVH1E z{S6xCeu-N5t^CG^Z7TCCyv?tarBQsY@hmUvT|0r35l;{0V*T2-74>ec7-?tTgZ1GL z>zBIV3uqi^=O68px9g7mZl3?$9xVETrsU_E>SwQ${5wcH$e0sTNu&J~Kh6@)4p=Q{ z5W?)TfMVWyzo)ive=6W$l)&dOhb;zvY%1Ijs_Rx>fcfkx8oWO#$1- z0wk55D}}WYL0|Er0=426<4+v6-&^iZjA1C{dFj;GNq`!8ox-pj(?gsBK(J!d3;d8& z0ft+d9#NCaDa0Zv7Y_oWec4-!7VlC3vlkh_qA2xLTvID4Tx7v+>vAB8>t6sNHU)dQ zR5k|W*oWb*;V5_*=~^@UfG$1tf<@@24=>wXODqK=7vEL;o_v26F34wnj8bH;QnT|@ zg6whqx$45eVQA|%Psk*+KP;iIc1=W~D;4{k1#X5j{=GqW>#W1-nj_2UmQ& zkIT#6va%pz)P2B2#D>8|Pqhm?k-JO~&zH^w1Jye+wiIVp^92`y{XO;H(A_`tQ-8f|*nf{>H3Q#NF~pOOz~P*LV8NE!g5chf;^egTZAKEr)1mbY zH(e}Di8g-T;T{#G;9iByg-YG+2ODI)i{H&gC)~t#V;$0g_M)ism%rnN-oPQ6y$<_+ zWN&~&TcR|}yySJ-^37qY-ypLaphN!7%qO}tRFz)isrS&vNG5icz|*wlE?bW<_z?B^ zUYfE@mXD`fXYp)8MDWNW%=t9C1r^R(tEIcfg5tTltKB>uw^}$!IPCB8H`OX1_T*>8 zGfy-68naV2e^yI?|lE>GGm#;%5G>lr3($)Jy69AFVSDT-5rKw8}(WrzT z-yRk4H0PpKw3M#|=+l6Iw+&+aulq0t;}HRg%+2N=E(5+bd2^^O!21`bY&kJwK*RK^ zdc9To>2NWdM|6HflKQo!0xRQ^nhhBU;wK=mSJ_e@E0H|Coxqr>%vPaG`zxE5T!8I1r)KCFie4N5zK}VA~_LN&s zF`>Y{;WDBdz5JLz{qJew!~#Ee9TLI^$s;QRqZz1o5b%8hY0S~=j?C{FuBmAg8_x+S zZLg<>wKnqA|BzP=O^yYn1XxZ=q;5Bpz*+GpSp>0rzqzOKzMmSK#ZE04f~;Si(e6l6 zLcgp5lWqQ?`$byrshxWa{C7?km;YgPS15u;~ zZ={~t!mM$XvOTCAs~1rl7GRn^)^wK3yRE=~i+l^6)z^7Tz#og&n;l-ivtz_6(**Ao zNSvI-(Ia?@5`|FM`T56bN{UIXx`X|bR6&vD)>D6x^@L`VjuaFuX7Q0{rqD8|`0_st z9V~EAVb8h*`X_-YwU85um+E)#uDlOGx%tY0pbiR`dRIMkSVe4-zEPHw*v5*JQ7TZ1 zSH@e%@G+ z2jU@I+<_kyuj<@4KCtkqCt0C0n4C?x34m5fQzgZ)V9w%~>ChS`V7 zQ8*Lmp4J}FxP*TgLc4E?*lf{jV6(Fm(QLBdFozj`&xIj~^$v{9`8D3d>_@-Qo)4|c zGPVLQ@@_Q-Gp`c(F%u*=uFP1=(eDdSCEt1!IR>Y9#N*}lsx8aCaSc6VR6CqAqE^Ck zTiGae6P*N|oMXevA0td|u~m_9ebh*$C|+efr~1 zW4Mm#sB0QiOqss2X*dhp9)!@mG6=-~2Wq4%UMol*#N}hFlQU!U&GbpZ2{Q06Os*RzS_s zlajt$evE}|a=C<^bEg6?r3nE=el7}VZO(~-m)#yfJE8odElO+RxT7%umHE)}n#(j& zyte)HLV+NuVJR6)c99~HAYU21Vvnj0yUIYgspWoMejGW1r$}&B;mpknhOb`>+dyfc zbB0DxagBBG{peKgkAHs*jzIq+aSXyzqNK7SNi!0`VHzP(oIq&ug=dt&pfbTq3c>#) ziKEbegYbXC^gsV?O80*}O8)00PGc{GBmcnZe;~-;!i$1Z1f9fxl~zkh;rX!gP(nDS z@FE7%QQ7`D!q*~VZ(;&NH-mw{x!(xrk=^a4>$u>?cQWE{cq&TGJoFn_=f;!7f%BSk z*}C2RE|Qyxw~0=8fc4T3L}Fup6KXobC^yQZpj`?rCq}MQv;aNJ$R1H=lk?uS-T0ZN z*6L9ST&uQhh56+_Tn9w`dnip}ME>={^&8c_6p*KRQ6>M%$}y>KAv*^P*;?w2uUG~1 zBjKn;L#Ex{Lj)GQtbK2ONt(ED1+mq)P3HqX%=Z&9ID6fqBLw~J*8C;|B5CaDR_9!Q zgF=RYKsNn~iq3Kyz`5wI-Ylo}SPfaLT8QYhEA>S8gaL8(t5dK25A>aDvcZyCc7vbt zpftRfZw_hh%bQ8Nz0N&Rl8hnCWE9qc#JQLX^pVSmtb#}Gn;ZK<5(NwO2t)4LZ@6y> zc!*)ZX5a5&2Rb0~ekKNzxRHfc8%-2$hR1}m(9$jM77l-TB|c$u^CWtvnWZxl=B6sV zr?Ad9^yalo&hrWS(-%IBl8!2)(N9~bsNCTVC`vFz3xw*1MhyEXI`K~$(ed}eO0;fu zl4LYR6co>jm0zljy3jcm=e&a9?6)^&SBZWn@j7+%TkI?%z5wuD*srI|4V5Sa?I5H^ z6h?rfqx`1Y{+-I6XD@09Cq0hr+4o;f?AmCm&$dI31)l4f_SM0}+C z_>T9_gT!U9;2`-Ro&?q89mRjI>`axhuWKvOx|dyo{$n0I^x-K+MZ8JLY239#Xr45> zsK<$!&12){s@WeR1Nld$WWZ{X`!E;GbP@Ap%qSE4jX8|YnB4eltUaFDGa%BXCK?%K zYq2XKROd9<2#DaZekHp4(Y)mC`i`=Y6r7n=sn`lX=iHjqIcG3`%_# zOg4BV*DMy+D`r{ePg!~sgu%w_dPuQQ;2y{=$rdMW>uUzRxtZ)g(Aj)~&XZeL4ym^Z z{3#<)@HH;iM`i&-#pD;EQY7jc)&Qi_=y2_f@NP=s$fM767Rlbv2YOm{ghW7-X|wA# zk`enYHm7Uv$-z1vSeAsG51k(!$iHITeLcx2Q<Hz}-u|Xz|Dh)s4O}p*p$ZwaUe6Id9jI#jZMjY0*q4x(<1(+w+S11MPaZbM+$QJ|>x{eUug%^qiWb`-6yLSoJ|{ z`j35oytY3wv|*k6?!+kks*0Q${r7dWu6Ijux?zp&q5Mj0GsDN$=VP?Q9!+aNvgQyZ z^o3nWVFwr~nTY^IO$AQa{VOSGsNxoRaNFH}(+0UG0w3icjTb}Ag79IG=D$}DblmoF z{j)oOsX8`>0>JOh<&}2b_m#kD+T_Cvoh8UD^u1WgVPD&){l{CwEtHUn>_K?WPv=ezxga$@tQTqY&g*3NIl>H9{zy^s`NEhzYkuJtvj zm9Hq;=fJn&_G6(ml?#Q|1S*0}gR?(Stcf}F9qMnNPjkNIYrb}0x$w%p`Peh;-)u4)=Dyt~D!hF2A_^TYvbq?udI1py1?3_3!d0=B zjLk3T2St+bl4u6{{(|^t1&fFv+0ATlh+}9?3MdOAfq256p<_p-U)ZX0KI(q?rWpGX zP>Fd5iTb%^mn*80lpIhI^0~WyyU@22pW;_4V?U1Xyj{*S4LdznEN1m0lA-kaE}|ln z3md@s@&%!VSQfA}bI02zS)Bkdq_T)1AcjLX|2o_6xotQqSop{X_P3$nt)y?)x(JQ` zP>hS*1dWv6kwkS`Ujp=LK5mm( zn@d$#c7|lE2>y%rL)ko>X-gdevKsGefB;wCq9NJ89>BffI1Ih)aUi?1 z_Qb*NxRKUAfQwg2$iZSeNz_aOLg1AIt-pLcHc8FM0kpG3Ye1UD#4r@e0D7_2MAO0d z_L{(>!nLu%pI!G%V($S1GXBNh@c$O}Mv#AE|B=1_j{Xry48Q1 zF!B{%g#~urp&w6?G*9E2?R+0XcWY_jTn^1*VbMW|5g2G+Kx&FUabhT^T{t7M>lrG7 z){O~3$haOV%dxu;sO0tH%oRgnEl$NH*)2$WJDwqYYrPA2 z=c1b`yvAqvQ5y~vaEW#HLX1OYoJNZn>Y;ezqan=z!1Vq51CN1^DNZj_CZmMp%O?iN!3iJx&+fRd zzBrRQ9~w<}1vcCctF&0b%|bOQ4kbaorUUag`OKOv_MEi|0F+9}J;$EK1B($VS!WoP z)JoxdK2*U2nT2B0+39Vxf4;%w_c9mh<1+Q|%hm(ZMZuU2q1#mi^>})M23#pV{#(u5 z{^?fJCbzIpqirZdB5rl@+N3FjQjWGN8Ch8=pUUsRmj$yUwMmiiQL|Qd|ALI?O?WF- zdr}bo2ZA?BX{_(5L2aW?A$>qOkA8h2lIyUvl2 zH+Kzr%P%gmL#NyoD#Ew7+AaV%nGQti$2jHSYep4jE^}%BAUoj*%s9ddypw~$zQ=jC zGST6r968o=gy6ssA6Z|(`0J4aR1|z@uitFcm@KtZvuHhXN}1@G**3Azdh;g+0jKs3 zC`u?8^GRm7B9@-$Ex^Ol22y<2tZ@>0eDXcxRogX{##+o(zh}n}?S0dd(EW;s&G|$2 zXuu`+@*W7sgv-bML6SaXH6{6`t>jao6jYzcGH({Xe7V9~si*U-&{i;B-NOR?W!Vj7 z*)~9Y9O@PIWD38#Nr0qs7K~u}M`}oQVo#YXbJ8J1opB?4Cx2x`#64cx*~ARS$%w{j z>x>F$vO@{SLw4uaFC_a@_;p4udlb3CN&&u7N_^OPlbSRljjKB@Em@QELp9tY9AsY? zUiq2ZMrx7D?B|q@kcRpYC)D|yB^f4s3;%7Rp?k2L-d50yDvy|F|nUOvrxOjze;c^iJNMY z2qH%5t`Viv0>q=aD=lRY5AAnz*zzP^1H|nIj1#YQa~*|i07^_wPl)9xgT?v&0mS zK&{c#^el|zSv;N}7xAaA7}E+H2sisOS&J@G6=8p@s!dH*+_RzIpi^)(>0xB0GzlGZ zCuEhgUH+95_XB;W%F-!nrh+9r^tXyty=l#JI8tcFv`S{_aqa|< zvVTSmY$rbnjBKYsokc(71W#PcHKkrWlj{%6MU#%R1$&6maJ?Rw;0YXjX-gR`L@MefAWnwJ-JywT+u_?o7Za^E$EP!e+)WS zlmCl&k}TMz^Yg|;bCWhgVoD#M@LdASqVY#PpKaf4pe#1^8-+Pj>zC1FE(lr)cI4oj z;k~Pi3*yX;X~ve!7T2~~-Dz&t22GdJHeaU=K4TQ6Rv^AY?Uv6E&6EYEKDNcBtO8Af zdI~yIVm}35jh+QRN)Wz;;DAX{Es;b--U+n)vUxiJcX)&VPr~n z7M9MzkIok$cJWB?N-m%;6+Og-nk}C}hmIpwQgej8@ScW!Bj1F>* zx?RpK?B(jm+I-an7G1i9-r0lZ922pm>*P9GT@&j1EZE#(caFslSczIe=S)chqOVH+ zP6OB$+Jpih?CoYFdM@_lSwCUSck5E&+z_n({TVp&|9w4_|3Ta^`A-b`zo&x#Pe>tR#)G7tO(y+i^nO27g0&n3JR2hXZq;3>ynK zBVW3w$4?vfIoqqb;{@wU@DU$cB>L;^+WG79eeFO1@$rPYV}7k#q(Tz>$ECD~atdv|wEj4?F+p4c-ikVcX%p zISVWh-H#1_p4IWn_NjN4qViEQR?WXT&X^EezM+Rqwvzrv450Z3`hI1zVJRb+axJ$8 zH?C{(`hkso;F6!fxbh?@F#3t7S)x%n7--e*^l1?3kJ0UO6S)5A^VYcZV?}*tDOyPw zfjBQmD^H)|-ls-}`Uuq9-fwb6%fV5^2xY-G_n&lb{M%x;H!qE^ak&hMOYYGJ_zJYx zqhOVhSx!g^EWd+IEmV$7_+jH6gb#jdOwYVI0*26JLbyKhRKA|)8vUf!BRs) zRiS*4e1-^{x^V6J#`LM(Ibsxl@Y@x;EQ9-38&nL8TR#4DV?$sR6lNNW@xOYZ8nvwK zuS?g3Kpd5`G6T&rLEsy&-hl)7H#z4M;J<7fq5T16-Oo)NJfBS5lR0Rc|zDLiAMdc-1#h`C&Yg_xFaVW z$YR$>UzRKtQW!?;gV)X8S3s|9rM;?vO=LC)s}`y#X>y_s(R)AtHgh0)wKBiB)Vwi~ zX(PZB8JzU?H9;^UWWHncgY#8*M=&0jFRdr5U-lfRMDeXc#6{E5z;CC3lCO8qkr{T9 zqpxpRO>lhsz~?tkQOU_6lII6p^4bj`K{^ z!9MgU+dahyoHqJoa&{Y7zTw)X#Ot60o$z-l06}ZP08O&iz1HJq zk|}PD*0sdhrUP0^Kj~4Y58xjFdVCX1KV84Ubag_AGK?~K#_~^UY1=dubIYsT{2ac0 z%y=)%EQc)iM>33nb!Xlm{H1KN+`ne))Urzlc?ZFC+J24qj+@LfoWJ{ZiGe`qv!W+_;U&+ zHqxb>(KT{jO0MGB#82xnuBL5+wZlJ^UY6ebs*dI``9P#Dh)!&nYi4Vd3>3~(!Cr?r zEXPcM8}iQ{p`Y0lqKXwFQax^819!q>T`2y9Gw9aHN z80C(B2m1QnlOmV-LP5V|@P-W0K!ueYC4K-KoQM@I7oK>!g(u=h92jX$Fg|+Vkxq6w zp1{10K*VL+*{IP2}|}jmrPIG2rh+<8K4@e19BZm4kX!%0Ovy^(;A{ z$3L%;@?ow@Gb7OthPWS$62DBH6ZpPftw5NO#y$QiBZt}t#NF$CfL+IF(6n1eBsx`F zJ%^bzT}W(VtuoA!uC&cy5VXo}njY&thmnZh=U0$T*bj=2T{_I;jjY?V@H4iKT;;~a ztOmA5?{^ds3gwNl*@#}+x3dfAw&gS;BF(;nmpO3uZS514O~=x_z=fD0T8T(}%a0Z^ zJnk`qQUa^kF`5NC+}14(i>{~#Bh;5OJJV1P`6})z{pF@Afkl@wtFX>ce~YTU|7veC zE9+=aLe$8@{4)vm=gf~DsA5CdWSa!hd`QvEk)OW%T8gKM2Pu8QS!Iru=AnS z{Gfhiy?fP^`5(0=gJ}Yq^rw42eQkzZgO1W^(#W_xEAKGYOj8+PPB0<2Yzh^LrU&pm zLl)NI%Qih7qe+$n64HVymna&QW}n|?XI)ziEwPI5koq7ikqL*voL6eBq7;&lVruj` zfTdc#EL!<^WDJ*ZbSo?GtMaT*naFtBbN48nayA;HUet)vBeGYsh|`K^U;~Vjc<%5K zX%}^rEm)VtgZ zl#Fq@PVx(zRTPw@~LUNJVJl92o_XB)G7S= zP^Q#mMt-2W;!|{H)CG}puFQQq%A{~1Y%1HG=>$&iq5u|D7Z)E|FOFh))jPFj8fc`5 z=bMAEJK(xAf`X(JA6*Hf@Csub)|K>7*S;ogR4F!K@ea+{qKVbGFB|bE`m_lrN`6|A zLlNQ&Fix56 z4c!cplWnWj6#@r?qBQi7+5l@O^qTs$qc@4fbUGGiX@wui^s#T)!&>_<_D25?1jhd8 z8=)XN$5V)ai#M1MSqc|4M!vv}7BB`;c!s7KPM7e1q;L4YLC8Nb{GTxOpC0|&hDX+& z=tBe~gCQb;q3R!fQ~!W5;vX*gq=t(a*zSu1p7udx&ISz@tr~FCTDveatzPH3y%k$PTxdGsPrbYET$`Xk={a+$Hw%@Ye-fnbg%v(|Zz#Wwzyk+;8;Z z_=PBqF2>=H2_`uBCC$(IrIsOQsl(}Rd^0OPK0jjUeSU^$;HbccU+-fz*AXas9wV6G~WZ;)V6p9 zgV?Bm0T=T4tIt}@yil~`^(<|~C=E5e-N*75g|J~6IjEyYnq?t@hfyi|f$Zo8CjBN((+j)I%=;^x7#K*&Ml*_+4n#CT1c z1Q2fc!4(vGQQxBq&{I>Y?ZU-l_D>47xc9lyN4o0s5l)qJ;OSl#eR51H*VOgDL z#3p?GC}lxjy&Qyb$h8Z))l@)2!>amt+)2jiReUq7?SAeC zW7iwXwNDuNHI++C4S$P-f2P%X)j^*wxwVO~(+28=o+Oe-+Oabc78WCD$tmmx5EiD$ z+sNTTFU!?mBS_W)V>5#Bp}(zSg_zD9AK=x*e+VZ}KKj)jDib%KFWHl?L^?k;yp0b) z{lwrp?9!ubLl{+0gr_e%I1PbfZG_Jc>`p!OyS4(IwM%h|>a~?kg&$4db*P zOYr#+{GMm?f%`phHY=N;o2Z&N#V0EgfgyqcccY>$3F0~$miCrLr6G3@0~8QUNs_h6 z9A1;>Zygi#yQe07b=DB#w1xjx)y(`WbbdKPoQk-%zsve6=)yDzzn}0H$T|8oaPPN; ze$NG=9&s@|r*9Xm7=;mUAXuoACsh`mc{<+v7locm^H^$1B-~fqfJx6;3>GYQ)?X;d z)0goq0_t3$V@}Cv0263wf)SdJ`=BHZ^hMNngq$Qk5nn5Wm2o5h0vZ(@WxXM9S;bgv zdaY>c?Ty|3(sTf>WuiPp1$Irp$T!Zu^k)@c`mKNS`=?UAVZMj*oH4udrba1%^KEc? zr;p4Q)h9R4YXUS7A=Gv2u&LsuXX9mk3^$ehB)XJC!|TJ9Ut!W>$qxcg5o$^Av<@X4 zPKi+=58L0Fo1>JOvoad0H|rpKczhf~?x8>SgOCYeoMs!@-?^j*9dsi34V{`fE+2sx z#l)!*W=(Ts{9>JekSQQlaW6-|eewprG7u+kZV-{s1(_ENwTZ+czD6;^Je6NC>is_1 z4<1%-t&godVTt4m0W^_(<8W1!*V($NuxA=pMAcF3_mZp2PuyVIpj@d;!t#qCw6Jwe z<1kQiX*!%Ek5_$y_=UTeA_hb4mh4saYYU*?$41!`zWgG@6T88^F>eak<>sw!K49%O zZ=9JEcK2YX#uF)aAPnrKLjOeCOZxSL%pMz`<@0@2Oh6EG%3jnrvq8p&VJI~i&JzW& z5Xc)Eei)OI<2={?u0f%FkJuhP?}b2hYUjhy)~5RINWp}d4`phAOojbk(3vv%h{iQl z$t8ATc%D8hh{h1RcYgR|rp`oXpnM9d{$AxA zZOqW(GMoZboE|0x`Kh+-y&U{_TAT`6tlIW(+e{ean#7RG+H@Oz9u&aqzy88-RGk)C zv=>yU(+#ix7(m9kUO!;VYUk+J;9O=^=5ndQ9{;%1#16J~extzy|*IwWz+7(J(D1qTug{W7s!&9E8kORg23IgS#)Np{n;jIV=v%@fL z)M*OhTkBM*yMb4uD4b@q^+gU#Yr=rfd5*<0xhHE_ic%AH#bs(9ZT}qhHsH)ugt^zX zp(3R5Gk(akwP#S;I?6Tksuj9bg)qjw;0$H4=O8TE{5=+39!$TxclNA#pxYa`bug7< z*K)uln%+#Xt3qzf+l1t|Y}tT4znEFs%r>oo{+dJtijOpGPcL@Dx7ij|L%^MYX&6Zr{ER2I%d~n*k_nn?C86JnnN@ndfluhEQ++lyS??b`i!*h(h1$`JIz_VT+GL{?Cj981D$LH1G$SHy!qF>jzg2$F?op z*tWlci!kVkBy{!`9ye%IIUjP#LnG^Va*l>8)956`SDwp^?FOL0zi%x5K4+(f3fa5x zy&OYS;;@_wM3HQowLXWKX|*`QHo^+T)qHw{b-_0H1-Do~i-*JysgGYW3qh&_Z+{nQ z(56A~`ZB7&1=b{*exlh*q)(>FQ${jb0;#PuY6X}?nD+BPVFvph9%L+3m zg9bEXp84vaLW=R=X9j;$^wYT_tWV!N+j4b3ud6p*!Mpb-zt0N%eLAHlUSRvGCMG0i zrP_QJ!G>ARY54F{yuf-8MM+BHr%b0w1m@?}Jm#p8vC;0qOIX43d2u%2cF+hD;FE9Y zvY3V%>i)c|6pRlm@QrKrvr>FD&)Ci8QX?Ml6;vB<&$uQkz$ac2@AY{ros&zYsLq~m z5QS_o$g!^iDLp0s?X9=Kk)2a%6UjuQC9CUI?AgoTIGPk>O2JGaxXhlhYG z4c>;noXU{x&S_zyGokcRsncM4Eh_a?eniu##KH{S#`i4`VD45;jK)cqPIkSu?u}ay zr?>0y4XRZDNHQ9&U*(RLqjqdXZKJv%!r#_>f4andMb0S~P#89|zJfYo?e+sxAJvcM zvBx&QinZ0OO7~vAj$sUMAYt_hR)mA``9{voo_LN=gO$DSm{BW6`t4u227B5!*vTH5 zKPl}6nFV8hp+m%M;pBWf(i@ zV}|SmDkJOvLX9?2*IZ`otxghXlZ+K3lOL!y_Z=w`(+<)ju~mr4@E!jP(aJolLbqKD zcW?E8{=iT~CuI1l3>o#|c=6m;!;7QywTJCwa2O#(MN^|z@>;UKw`NGB6T?@ojFJIm z1h5E%x~r8$W5gPYo|d^7nMglHHPM6PQY0hNr+hDmF7aSZpx(R)im=jLxgV$GFQh7A zP@#mM5Z7D3Y!AvxByerAc7W&WxswEpw#zDG)~~99A*q#K;jNow@HZm`pyD^7nUlTF zWrNh%#!rMUop2mhu?^a@w{2}3V*{O@0D}AcMoxdnKNPgJG+C5pyb#_|S9Wo^z+!p4 zu`KU4y|G|mEDI2Mgy#re81gO>nf)+xBRD4l$+tr38YOqga@@bG=^?hvNV91Ku1fM` z4*G1|tBVzYM|Kpe;!3RmKG0Bq#*oji_yaCG+>Gvupdk0%zLokk8J4jbf~D{x33@R+ zQBZ*8k6)Bxsm%dCA!MhqEipCj&KF34?oWo=bjDT#5uQacYs_M8A4#f1PObl@TNe%a zlpfxVL3-wIf?!)uNSu9hd`zOy)j!l?^?l$%j$mb1OTVx$FFSbI7M0z&UQtmNDM_S$A6M4jqXx}Yi zLU=2E6GZS#BPgV}Gz!{1T$GVv(#ifFbbs9wXqd46K8kRCDaWsPMT-Ai;?AOH-(d6v>n}2ceI6IbR;PeFwAbc z#yJ_9GmZSBNLky-HRq@#46#9`^5*&74|+h9Vob~&nd$J>M?u8fzzJ`Cal{=?^KZR@ zL(-($8v-V&rrO44)B>w2X~O2Qg<&<3!7rdCo5>xYg!IxHcZ%}n&0Nm+>y*vFvJk7R zd&C9?q&x@z!Cz$wNiP}oIt_uwZ!?}Jae$dCf8$@oO_kdjZyhUZ?MlCHd`5Ehx1U`c zJQQ1xj59Gg8Jq5x7KuFBj_sqoJrrPb8a!une4|iJC5Pb6vpXR4+@j(QlQ0d)tV1cE za}%Z4LR}n!b&EA65QrzcOS*VedeIZ*cKfPQZvwB=!(Rf9n_VTg9F*pQYmL7RBO&d# zD>|9Ga}AvV^?Un&Cds#)D7s>lB<}CuQ1#z+n%<7i+PPQjLCmMpnfVw9nDc=TP{p5j`NdMGGQXUg7AqL)jiPbo zCmDG+Ao<^tG$!82oLoHD8C0Lrf)W+AQ!OcNmVWRcd)^zL3I1B4=m~$6y>zsF{KRIW zp8AaIXy!Bd5`1VgV!>kv=HtHdAC5RKAlcOtNP6{!RweYreJzccy-z9KQ;ylkNgOIl z<>|&iP5t|s^5tXD(Q8E}-&dX-UCd5#5paNfSw?BDna4)~Fi8BEvh45FNRSCUu+AYN z`~|6z^VZAKtQ>15-z;+jfoeGaAdGlR5RzmK2V=8+pLu8Hz75P`cd#Ce9d)TU zR}Z)8%$6VLi)z@(zY(I3UUdpP`EN1V8Zp)4?xbQMEj)E&DX@7UKyTyS6nG(Cvp%B!CPx7l6fPHEa1XAA)$%eIh>`F$gUAs)8Q0Wxg+x zQJuiv0ZMl7{9s9SoydP%Z!RN8HXnc)Hv5OJWm?ozqYryyaOvT`W3;iBdLkC;R@OdO z1CyNh&D}AnYget>e#*pDb%|#O2%2L^U;TH`{ToXb2byx-F-Uao%pdszUhx||?g!37 z)B~ap8l#q*`)b(>*mX?U2uvvgBolYA1h?Ons=NzkIVKE^y_-H&sng^q54Y&R`wBe+ zT|C{qF~3x@9J#GLco+7I{fdA>oYrqPWbW=axzYNn`FxZG3o!(`cT6(D2xYRm`P8z4 z{2m8Fc%m(#&_<9%)%r&V2E91^3HmC9xv|WYV%6+~J9L;6L=VC24X{G|#K1BwFVsfH@-~$Om{wgy%#3a_zO)j#P<^faAZC4te3}^zszjhMW*g2%2}@ya_X#JP)uk3|W!mkg7$X zzAeH%Vfm6`g8=z3Q>AbFf^2La z7;+blkB;B{-%E=nBqWJ6-YUDl)E$w(kL@qzCu=T$d%F6x z;WQVDIRhidh982eLplBc*3>!B(=NSjSZCL@0H*S%O;usP8-B)0`6_?fLp5`bYQk@9 zLBaLrpmC#|@~Xl4#bCsq^!ZC`7De=hsGAgOZ3?DH*!Z0UXz={B`fe9IUlPMP9%+bW zC^O2|^t;VE)08Eo<9;9(KgSSVpb;r()9H z%}+J2Kp@uDrqFQUT<2l`v{9CXgpD&-B;vzXzQt)cY?ZB#EEx?E>HTqwJtM{8=*sXJ zwu;gEmQXp{aRtyuf=l66IEVChj@7}$roWCPNwCW3WwH@PE`M{(e2jch`1!;CUM32@ zwOI5{F% zf=`t#Y9sQvD(MoIV__~>iv~1Y?V1Te`8ZjZy}{pPz)$OaxNPrWkyWAWD`B(+#J4@m zWOFvAj)mq}nzSQK96&8zvrxoZ8#+f!GlM=FzU=9~rU-1+6d~7;YkgcZwC`8TnV>zDvi zK&`(SB!RiW|I}u`k38=Xs*Eu&(7n9)UV$}NT^J4?C<_M5>#&_qik2?I7foI{#Zt6@ z@A(AEZyQ+b3n{!FtyiJ~&M|{Gl$|D_=vX9t10-WSvm?qj!I#ueRuc5Br^G%zpzgCw z;nI&}%iWi`VJ31gH7)Y(JT^%oj@VJYcPqJ&RrH?n8yQq00v?h7g^GY;cF+5YX{=op)*rTxh%j0 z7qW4`as-vWK|V!%)=sg1sp<{4Ee`Fy^ugOf@a-Ak3?^CHsr*9LXse9YoVmpB_d37c;>B76V8B0mCnRWB;}cid0#n=UqSDE(A+kSfnqg zx>a~HFu)Z>jgNvZUsrFILPb>#RaJABM8!)12)Pa_9xgbr0bJK#Rbj^?bw1zrRY0~k zZV5w$eUwvFn>(r+$FOSeOCl}0(MKs!#2U$*DURLtSm+Y&mU6pyPjQVH@!*#}*p97d zqi>gx_JW(kZ6d8AG+qLREBOJNx5Rpj=vQtjtnD;(o7JiGGs_aYDEe|rGW|%C(>y0p zu^5fj2%jv`rCO8jKuGBuxAvE{b8v4gI`v>G-+4*6Z$I}>Hw>{v^jR4E3_^^Jp5KAO z(|7PT?5y!R)PsXu+Bw$_r2VjxHFAF=DTfhk3)~Ysr5tXvwY))KjKm%I+bG#M(h+SiLe^{560C8}+eV`2oO-x1P^ zyZ&~`LYlu1zV*SER9nH{iC!Q<2-xwwg>9|Mi{R6l6!lv^MBWtuJH;Snn z>mo#_khb>}-mQoIW){g}3|_jANLv1F024{Nz;f^@h=Z)3_O+ixC*Ab9Ry_X2>iSGQ z1Af4#S*@1Eh2n za6LwwBu+9*r)PZI@;rrW=UJhOOGG*>Q6lr)fW7o01jH;iYMAOjh&7~Jibs14A_$Aen=FVe} z{BJM}#(qiP;vq>35nI&`QkyJGDv3Jy{enDY!IBY?Z?>{HR~ao}=aN5-1wcYlyl`b@ zAshBM1UuFW`aIpEUyh7K!QO57J?!KK@{97F6ocOfQEX5ck3*zts*H#kj};D(_A-|gUV@pQAMIIOrZ+j z+#qvi-2|LI2)xO576)xAiOL8DPg%v{BqrGDJ|s!F$j_1s_pt{`5%*bxhOQpsfQE68 zJ4Iqqeo(MUlX)~P`TH@r@X;@pjF1mjRzU+S%q9>TwYQg;CZ0s!pV6&7=3`g;ZxLEV z;ONeZdH98a!P(La$M^$t99ppe>_$jad|+PlOMVx*Tt8KzsxIr8lUJydfHln;)D)Dm z=z#i~hjeZq_D;&{I?stiK{dB>&@B}dE=$Kd*ibMTL4QDxt=Z&~l#mO)0{(KZw#uI2 zK;LjcOribFURRBu?@5LHHl90YLT%5XwX!8dXfCM%7SAy$54sp*E7ZTr=TyXt(%5Vf&lW z=IZIQawi`4*MR0eZUg_Z@vlO!cIVrzfnYr@O+r&?HiE5rh0a)Wn@y_r3lc%sh$Ef; zSm>kKp>v<0wEM=@*R{BIWa4hL{iN9I!iww6NY2o%Rhc?bj@n@8vy7G3@EB-2`hM`at-f zZe{ABp0D5SR}CSl6D|uOg|#+HtU2Se1EXU?ca8lQt_erVRW-iLA5V0)?C_kb%ildB1JBf@52;5DP|7VxV5qt{J-N@Z3x(%`AGc8P`9uEtFCD!+ln8jpR{Q#?vGns$ zwF=2$j$WsRi@WXcNB^tO(b;`(c=Lc)TqH8o#2hUbB*(!N$iGMjcRAq>3@5iKlES|| z*n8!Rc~8_2Ts+Gp%g}&(d~yHPq!{v z>hFz@Xi%Yo{ftEEpq>kGX;qpo4Y#-uUm2s4L)fT0b-v@rFxfmM&gr^eOL7-DmYvKn zx7F1Y_<(g+y07tVrmqGXldZ@#n*Q7h6BWRyOD1Q2Dc`*)K*5oo&}?Z9kGGhhM3g=v zPIEm6*zX}0{7A$ZmgH}7t=1}v!!LJj!neP_tcX|f8^E)M1Z?efhFz%olLcC@bN6`6 z5fn7gC;ogPE?k*095Q>9!AHf8h7T`&qv4EU31cC@pPj|{aGE*AuC$<_6L9OpM}*YT zOuw@=sm=k=lSUkmh}b5wdX4{4XWVxT8KBn#8QN-4F6zZfRH3G4j>_% zS&+Zd0)6mKs*%eLfU&!_-x&-8YtqUv%PL)k6xt$cM67uJoO9Go=*ggdxioKdNy?j) zl`aRsv38AK)kU+kB^pJ-qyP8q=n?Y&FMQ+w_KX|-Cl3FoN0I*`d`qAFu{!uOPV;Av z*&#?>jR0+hmw!+uobr!VOP`issA)5}&%jiILlt5Q(_$gws=ipfxFWoqwvSoT!}U_s z4+|q+1V~!*I$IIc0$Hp*yxV%};dV0*)^BV)J-m-A2{R3Hx%7P!mR;<-bpSSHPXqVI z>s>iwQouP|z0m2|x0c;U>o|4YLr~EgkcZJ-miy3eB|DX97V(tAkS9#Mppg;_dGYf0 zyd&gv3$oAXw9kLBL$-aYbTma+uK4f_(~fK{U(z z3BP=#y{|&-iC=kJRAt@r8FR79c_1?ywotvMrOOt#xdfWAaqSJV9n#~R`@4q}D{aX& zkfw?w4NWZC_3x5H<>PG2p-2b-%4+aRDrgr@ODX<_`XZiT=d-|FjEf^2dK;wI2x2n3-`?iE#utTJhz zFRY}mZI2p3RXb+dtH79*W_R=VaI&nagjEOYxcnSqUJonVW6!=Su#{9EHmKSV%jM?E z%@Vbr=5HXNFNYtak4q1$MQ+n>xLrie&FC5N>0h%`1y=u=7EoMW=?PavXw=2ak@bnO z+ZoMhU8Cf|XNflE9*__mPzv@Yqq{`X8UGx_qWuIiBz!(s#8r8v9=O&TrIH3x*c@%c zao1=bF^V3cAlXuZw&D5B=EBeUupS&56$I{i+Cbf+v#p){RGsz(I;)j@*m>$O$P7P^ zwHY-5M&TRrP5%A~k^#uya&`O}726<2x_PBi>`1{ixnyVAURMoPc-puNm>w?t3g=g8 zX%Q-_(SW#LlwUH4i~b#?G0o0S(Lsky&6 z+F1>0i#bi$5sl( zeIiiuo|gE&^l^`Yj3G9KN93uA?Rzjk1b$F%DtZ~-VatKIrg)#Fhf+->Fa{O;Dc10i zoZbs=G-ZS$P}o(>b>@xz@+zmmawGP90&Dpv9CWCqQCfG*;>Sc~Q_e#P#TdYfX$ZzD z=s+3-SYNNm@-WYF`hnUQ)Y~FLg|hiIJ9eOcGhv&xo=!FqiEsAJepeEyue6i$$;gf(Q^byQ5bm|39{o+#MQ5dHz z5#-qn@soW|H{*USDbT^JEc18l7slz2YOavRG+Vv{_Ji#1SL!jDpD_C4ojlCkYfj8} zQ_O6DbjE;zfHItxhFO%tyVNVbeeL3?t#4gM#aIgmwak8opb2+{reG-7mhg3chkp@p z0vX+z2;uRyc{Hm60NYYux;=kv2JxA5snWIJ8oR3-2}Injxa;Xk$s5fapgviHwctep z%IPunbi6*dJcb+L2=j~R%nT%RpLiQgf6x7xJM^$`reiV@OntUWCs^6yxFzEwesJ4B z{p7ZoOkk-UD}B*Hdnt$)glOA=u+c6nJ)u)6_^8nNe@A>;p-6 zDF~vM)DoZ=TmHP4=?zJ!uhFj5;0>fZ<9q|#n#2?%q)H${Pe0;sL7J!sX*R!pY4WF| zcG2D+>3+55*VuPU?;^O;w;)fZaaXefMxGwCdxiX#WH$l^rqw*to~3`dDbZ%1I8P~y z&1dLBb2physsqHJp-=?W2T_B)MhdVMYhq+a4J67-dd-VnH^Y?M$~?}RZa=zwqZ>D& zSGrGX0_H}m!|%7(ez9YU5G=fCu?q=d>W>k}IXC+IshhUf63(iC zPnIFb5WOOBuhjKG=lf9-I2>0FAIx;MGQB<{CNh+>uh!8!>gv$EL%{Fwz|CY8B7$U& z-` z;}&E&m99+IkJOMScT%RwgLEMspM+WP)3ZmPEU4+s67apNWEm%SpkFAHAK;0ulolm; zeHv#s#sTo44wvK6#~R>85U>dm4v-biJ%JQ|bgn!?_V?=QY=vQOCq(`ai2f%+ z|HsUe|9RsJie9%o@OkEVXxJnrVVIGJq4mMugq-4^}R>9;fhPH7O1{_D^)UFkY4(~p>tRx zM<;ld1;8~&Sikn-;TJGm-9-!-;e%V!vdd(a;LTaWMoSV*(FEY+w2c)OXqO6?MDPl1 z+@Mk3Qn(aR&`c{UuDHE?*ZpdH-JGF<<=aTI|fOD;-K=r=j+pe<@ zIn6Y$e`{3WP17%%ZX|yFl_t<{aP{^UhUwTxULt?Fc0INZ*fIg_);pQ*dR^4lI30I z(M`!c(l~p~KJszty>H}}?hvB73x6Syh$cWWD%L$(9rpBjK6^6Y8{h0C5~7EJ*$;WE z_sSxnSUrp$!9=z7G)y{_W$^3}gBQ@b0zC@4no$_wWB-1%+Tx!67Kt0GOjN8 zapeB>gyqx-OUpqy$Q-o6x5Dn&S_|F=>)uxUrNt&1OEdtvD{Hew`I>rC5sH!jWG%{% zE5T131f=S%&yPb4(#fIUNT~A#0+KE+K87LJq(IF)yZ3611W!8|Qt-*rL+aEYd?iGs z2tJ*>YcI`v)o|BQIlaz>7+ghF>iw1(kuQs*dc@Q`hrVlE7qzdOxR}IR3=jpiX#tx^nutX_|CrpS&p^v_;;u~+AL1gm26+sEwceR044OGLP?R5pviiX@A1dP z!MUzSebI=ncooWvj}!R-s~P>*)@X$eO?GqVcUPDX&fjq!8LNO+c9Yk1Ew=Uiovr5i z2v0*Iq zW;QBJnIKoL_{{~XP1KQ*Uv!EN^OX_JFnYe)-tVQ>{EVK4{57e{&x)V2Eb@w)+uPaJ zTv>bUiSRfAa&b)zHybwdn;sqy-)FEZVQ* zLMM%s3q{L@dkMFuK8YeTyL-Dv#e3yzo@;0PTp7+xYinZlEZM^``3~tA!Av@+CSZrG zF4^jfdmq1VwTkCLj%`1LWL`Uhg4a)M8H<4&j9or{5pwYMnSdAmjE|dtHCtO9=lSG= zq)Aps@cw4fDj#T7zhXP>6NcQH9g=(te;(?sR`81N4U=Cpw%i{pmii5)n~XN1FAc5HHFIys!Si`PL3c!Vs8ENN1%BXvp&An z&Ig(qI(pOb>s6K*rdeq3nuf%-Hr&~#XjA`j>WPJq#Yx`_n&2+JE6y?%F7-(L#LFlo zN_yFM1A@Y&BuP4sf%oc%YpT>OW2C=vchT7&0TCKqI6-u=tv{RsCFGMi{$X?UC1cV@ zIUe2Cf4p0s-M;uqCyQQbhJgQdl&zI*kg!?AKed~#(G^DBY`qCzfg)11u@t0S8T{iT>caS!& zK2EoYn7n*Px_cke;q}f#d367hCg5`>DTE4$I-?EsGN-PZW#Lq1Ofx`o=g}atIfRin zDp~7B-7kyBfJ>XG7w9h-VgY>tlLt4R@w+1X02NPbr4?|e);i_NVff==FCyg&J>s1m zp<_h?Xr?d7B}l+Yp^ZYDsdR+lT1Y(;_8h|U`!t9fy5JeTCCfsEyR^nD(H8ikWvW1h z8k=U1;!$qj4*Pg{gL}~mU>BY4Df=N_4%BsIgGVLxYrM4{Rb?ZXQ|9ZjjpQhR=p9Jv!D)UmPq?vu{vlyd-`S_C*{H$n=q$SK}6j7j@ z1H8bL{&N%x{eK9*QRJTx^uIj%zlGnL@%`u_U01(?%XAm8JH4O@3eUV`*(B5A)%oNl zaPRx{rM|9MKT(ffYIQ!Q$T;0cBHIPcop8>t!M3s8R8<7IrBbyR1QU~UgDiL09Maeq zn*Y@nV&=(109kTMA8hP~^G7VBeQ+J?Ceo*8t4Rl9%R*XO9*mHyd1TYx@T>eH-0Hd? z0gly257v>}EGn$5HcOK2Sp_|piw|jM1+_ndmN$av%YfLqbSSPrnGg47i{4-m!>u7G zNLo6e0#`|kt;v)U144+2lDu0tZz2}_tp`pW=bSyozwi>gJ(Jx_;TwK`x95a2>9;uh z<*l+>m%cGt*YWm^q7kclfM*iBeQ>WqO65IPCHiLJQV+}Th7Ke=sKrv??y zTb8u>sX(D;Pgl2{oI)mWNtI6_FNrxVLb|A1MM)yDHT;PDBob2%!I|uVc@ilgLF$A7 z=z{r5DHe#j;@zK%oXZ9bb#}_Pt+~4Z5O!?`&!c-X^O$vN>*?cBjH2;Oi zCVjErsp{8;^gWV#7AAGc5r;?!^lrA}^b~XL7rVEy`XUhbOMXbmc0bf6F|SQl4gAH-P3?$@n5t<2zKrN2ul6*ojBldkJwM*5+Z7F2e%yi}7HGW(oifx% zH2|!q5e5EsPrU9g5Xa@4`W|Fb2;uQ15$`>`Z`ir<$3A7};iM^Ku3D}%%f|nPPl)ES zMN4mz)m8yZRp=^KKhCMv>vSQc~gl-X^1ge7dwN~+Ud!mm>KmPY2n#SSTaO>-;R7|z-Gg2Ku`X1y)92p)qyNs#Y7?RpkB ztP{g-XS!M9Y4YSVV9RayOA&a3>p7Lb`>J;3{EdhjojL%jV#QHNNtfqYz1fy21pHC0X1!UMz=4TW-nQ=ZZzPXcZ7WkwD%1iHxQuF?-H7vHnfw*(cEWJOq~6gD z#2v7H%U{z15tTYYw`Jok+R5axL0sQuoqrX<_n?xqsPE{S_xeMBlq+#K|JeSXOD@jT2^0)g^juDza;kAZwlKz~fZ9`4?8dXSs8H9E zdISKWmh}DLT>_sPY4xBSo3a1va0r-iKpbkc-#X>3ghJ2(FBx@i>o{0yNGHwwj(~Lp&-mfDMKh>Uo;pamAhbPuC0=Ob>m~$G_Z^hl7 z;~TUW&mX_CesKD%R5scw7|Zs<;t|oldl=M~Z0*fzd!agHIM?P4q7g5XrMj#e&F#rw z`1ND<5QbXPMsZuXHpAbE0TIuUZ&ifT8R6J;S-+3I_xy%=m5pZDr_ZM^5hW*Fe&LxL z#cX8;F0;`fhc+xcEqHCK7F$w77Q|5IbC=%5GwnZnY47hV-49~&SHzyFjegzky|Q)* z)5WjjCplVA@LixohmRu+aSNZOL&&C(sBLU7$$C1nr;eR10Lo#>`(BOm>zF8@@^JqJ&`iMveQSy>ulKdRDMOfjX!faf>ln9mSO+B z3+&V)fXe}jwM0{)f>yhw40~-L9KJB_Wlx{F5zfC~F*@3EgQ&m915~J<3iQl$uXN4@ z-s-x?gg2MpkL=h9*uNpaP8X3ORZpJmncoViF{f45`E2xj-T2p(P`l#+Q-G%2#VAe( zk689Hethx)lQ~ym;`^Mz070SyaWMp~Mi} z?}NNY1L7^+ZSU++#iI{lK)PvdXK7HapXG02X`g$IZ$cjm2sI~T37huZ)C*-&jtG-* zdQ*Fx_DQ<*9*kLK9LY9%K zz82|p451XtFBDyG_xPI(15+T;_@~@WDyplU!B^Cj0V-Q6slvB)NR(MwMAWs)ygm+)xS%oV{bPBO+pBE;33YD;C={_D_OVzJ^NTxxM|M1uCz#<3 z0UV03Q4Rxoye$(n`Uv7ZHf&KJL$9`qkSh* zl@pIYgVdudHXp|lv+SJ*^NUt$SZ^aMYo^~Hk}dL7_mpaev|vWh`vZt7o`sj01veU< zTd(N8gk^4Q1I;tzPpC4MhERvK+#R_g`G=&><7e|=AfeYW(M<5`W%Hf9prB^WLFdbw-2M<$G0NbU_m4ud&xdKpvtotRfb?y1mX3Hd{wQwja3)K|s}t)YcVl zO4m&R2x=ClVvCKBg8NDhG+?0bG6sez?P9S6E2q7?U#rF=Y+?-z*7YQyH)pz?*>!)G z?FwcSXM#+%x=|<}WGbR+q^p$6CJq>9%J~*VO@F%^UZCfgixoAy?eVQ?W4^ocRAsY* zuLpbK2dB_WF8oK(>z?&*+Hsis`v9K&?5~DQ7rtcCH*{XFCVvDI!mPXvvw9`q%+k^4 z&0cU}jlwE@epE$@_kh~pTWfN>BmL}J6QIwPoi15o)g>Y zr}J@5kO#gO(wE=ep{oH$f6TkWoE|zVC*D`R1S#?*&6xb_vD%n>KXsb388#BHg5WL} z@&%TUUbpAr;Ej3SO(DGPqL(e;ryM4UY!UrIW5j zIr*Q_un82@gD;)%ibp#T?#Rvyu)ccEf?nAes$Y`a{BisF6*V;J+9SZ+xjf_Ouv*B& z!cM%q!7;Z_Y3 zOP=#HjhPdRvRk5rG6&5iCJ<}IKfW*(L^Z$}derehUPLy0gOTA0#0)?pKMI+Y^TgG&2J zpKI?v5uolSEkzQIfOzbksh0(Gdhz!hpbF~hL1+b_jX};! zU(wfjbN~t6Y^8F_`h2I^+$YBKT{}BQJ!e?0prNLa9f0n=&Jaz7_IxgApi0EodWz|f zL`pM+k`u|DX46H4mQx?rtA}dg>>t7`ZD3^IUw*fb%1tp<=rUON($?!W$L5hM(r}Kz z&;>tHsS--5bPt_i!+0`S!&D|B3nPwjS$S}c{$V@Q(EKxC9X;{B11PDQYyMnVQQ$t# zuogx*hW<)4g49~%p7+fQ{>05&z20BMnUIFfH>A%15BTJoxQ5Zm32PmH%j4Pi>D?!2 zvGv!Y>2fP6C$xgZ%!i)+f)DjE?!CC%jBdPh#K<88KVGljy3*-*#_lDzbO=;mDwdaR z4z;lDU{*+na61i*vepN-4WaRJ7I2!Dd>CkyN<) zsW>6cGp?BzTom;#&G(}TQg&j*h4Z(m=|5fq(c%D}_}OlV?QvbnkP525X0kOtxt^oh z5B5yv#KlwDuo10opQlC)D9w9UVMo+3G4c>iAHe0|QavgD#RQ}$?Z{tjG^nNpC z-#d%T?loryhrO)r`1wi%0ib`_8v?Zw`Fz%Nq2^hR`wSX&_i_D?h8~fom2cBpVedhyMu;W&>QB$H8HUT{(oL3k9 zw+(WNEK1|}e0j8P+rw_*DnUGSX#R{>4EOqo`b|RKbH3W`LqC$CFuYt{jb| z$&d_Y?l&H2X@RS4Y)N&xB(pM4?VjJw?0$@a$!p1@=+(!X;j-LXvK&5eK7msbUoh^x z(){ksr;JPOvzvD&1S>iACqjFv>eW4=Otqs){2l)YuJ;M6U7;m0j8~GX#U}gNUuQ@$ zcIOTi9Wtv~j?8@dh%p<4wqly>#!JaV-`@pW{U9Haj=V>)AfwMuacU~joGk}rm><&M*1E})g!iPRIc6Ok!w1&gBGQ}zjw4FotFNpcj0 zN70vxmcwPqZ-hUSlM0s+GFvhWmWPNR^io&QZ+=zwgJgvCk&MNqpC#fTw}ijOV@660 z^v}UUEQ9X(_xfn_RqvuMlSj14-j72(rS88sI^PqutOK;56%LbT!1xGd(hRkpC>p%= zw=S=X=<##tp(2G8F#UW*71SjPfmI-UL~(CL^y{oXlOYS2D{6eaL|rk7(hzYNE2FVJ z8$EKyQ2$M13yJlU<8D8inlbWHZ5rG6+n^Wh^Vy?e*X$EEF2@`G5**FF=eLH@qRF({ zXhwtl<5XX`!j48R*M~OV^9!bf>41V_4^Q*i*pH=rz-|viH)b*+iZe)|Doy^ClbX<| zk*Wvu9Eoo?(?aa_-oQa2p{#i#NsdRDLqjG+uYJdfA%i}`I&r74_@lxbny_E4Ne~yq z*bc8L1)ga}nKU79a5+;<-0>JBqJ_W+1|3^?Jn5-! zdJWnJy!?8}(gUg2<95A2pW3UisC`-dDQU;@W*=rty*6b)+Z_Fa-~Qj^Tpeoa+9{$W zigJr#z$S8t`S<-r^~E?-KNCwl4lpF^VyST8d=ZWw5m8OPQb~)1T#ZOaeQRVkZ)ScP zVCmyu(1@UI@z3qrHm7}_vkmKX`6w@dej35Ykecp|?)PQ=bv>nJKRj&?U)6~GHZ$a> z#z8Nij2d=1b&*{M!U*>6q@k@T-dy4_*T`yygYHmDvUi#v!CuwN8uT+?kz)$!awChG zklSU@erN@z#gZW`XBaTxO;MxVe;TwG_>-U(Jp8`(SQ7d%e6kbr);J=o zvye9u!77YYNaZSS?Y*`emzpU)yC8BTd}RW?D()&VDfcaFA$>66c1uZf`tJw+HS05h zpR+KNxcB=XmJ?H^5Qb~?L{$@J02krXQ3je;;c_d z$m;DMI+tan9iCD$eMH;%@q|~+@#Wpik0K#XGCWfv;pc@ zfmoAMpAMG+LGiU2Ybb9C!?zT_Vs`-A1vF_jaIvV7FrW-dPRUG&jQj;h)k}@v_#IsO zbW{qDl^78g;Sc~m`}EZ8Mr_rncp!Y5V5kquBT^5f!Z>1>NzcH~d&znXuqX4&($2t` z=qtmAn_nw>s}eC*pQSvl=)eUsR2JsO;0WeH)-3u2>eu#IBut}{?~UV{HpOyxCt19u z(Z~O_VPSt-x8`1%SrcpWyeKXTrGAMhnx8i|h({)-FSyL}Z@p6cmGz{}?1aBplAtkv z;JTK+ku$S}?=59V1|YaKxTf`E@g;c=qe`c!Leej!jBcYV=${dB85Dtgm&-|C8Gd3R*$N-2gnG2O+Up(-a!D%WnWRbD#nQ@RcSI*v}=?2KEREK zJT~Ae5|Ag2gSg>#yMRi>ys+}*O{C-4pdD{ou z)yJgFSEP9Gb(S0gw_^pr^X)bVwMD-M8?-|04v++h)$J{SxuGTS08L1;;O5i@-B})L zw(4AoR{gOqxI^T5JF7eS8{}~GvB3(#m=kSTHaF>B>Y`{(0U-_d$ByvvJ-Pp>1JbZ#8{|5j6 zy7vu3f3I6Y=>K#4;Q#aJ-vksP!c;^cLMOs45%G|J3E!6g{oZEX1r5MDBK&k)=*zvr zizWgHGlUE#As)1qj}vu91EAaGA+gEwR@OO&?1*iL(|vUi_0&kk7*+tK%@DkT=p)OX z1;mn{yd0(JA#?1h2GeK>$rk8QXIU@VepL3936o5R3!rlx%aiNf`Sl``HlvpJP|=H$8Ak9P$NA_g@KnF|z4)tUCn;+q(DE!F z(D>|}$T_RsjE__}ZC7hR>IaxM6%yTpWx3kn7a_S_tBYsJ(qg?BF!#PLvBthK8~ifi zo+8s5gVidj3oG|!mvS{jl{!S&Q#yWn`1g*+@#(fAjj=CIn(y>!5sMjyTL4aY4=Goas|ZZwBVnW;qOfP~)GMAuXY$ z^&yCo!NnQ{o8h6myQRvGybD+=`vEhkh7m6$xz>k-vE{rF+QAi@E)tx=WjE^266!_; zt0dnwv7?@kqEzROdoQ$HogZSJx=7bcL3$ikd%^-{l@YHhmC-s@T^5>^b2o8jXrG$R zk7{B7Q(v|yXdc(jH=(k{$&+jiw?!rJxwRX-v|1&vlE>^DYKQLCUf&G-K7X%!l!MzB zaJJrC=|tLJ8Ty&bl9@$=VANA}2ejmS4e+Y*JtIz5zy9~v3IkjcMG&v7_UymRJs9q6 zbMme>ncGd0lGJjZSn1rbK0+?Z#aj3?cX_T|#C@dCw;yRN3+npU*2=Jae+4^o`R_GI zQIjOi_e2iF91}DqmI`Jv9P(TPS02726EsnO^(4$4PQH?*)fw$RK>!{5HRP@P7e!ub z?>Y7w;t)5c>{NZVKy`0SWlA8kkb?0fY#~aaC!5?8?3A*_boW4r9`YDVi{%ITrJ>Rv zoif0lXtd~M%HEG|7?*V?CBuF@pJuy_s{kv! z;n~OAk6f%-q?_*cBfd8-X@Ix)KYFE%x0gQZCpG7Z2Qn&Jv8V(EJ zJKa9Ge5WuOE z{4M>IeOIBuV>#qouR=Z`XKA}11S(y)tHvFdbGV=7{U`-m7cDrLh-~>?>*gR$ukXhm z498IK9Lmw3DGaSSBmIaLriAs$Clx7T&h2FgAwswvviL%k8&zm1% z6oGfovZJr_SP^g8KRRFKrGADtfAgC!UY5=ccYj1bD*?{x!D{GudXP)nkfEx`Ke$G=6PWR$@XccI~WB!Mplb@KYvn* zsEsB&SavT4I~@ee$_-D~wBn9tOvyxTe&;FYfR=N?NPS0HFWgN)pFXsBMmT5v>wZH7 zOab@@DJDt|hL?+&r=5Q{JMPU%vbA@nk%m5E;~}ot{fZ54GL!dS!}ATmF$DQs##*1E zFYcZ$<8PvobzCKsb3Y1JV6c@|(U6ecld+_JO$Xc)oLh5J@R$w}tv!**fB^=BlfLl` zk86}C2by$(X082lKH;G+ZSq6ri{&no>~-!B+i~^H`$}17@{)U;;lH)!0YEpIi6Vj83QoI z;&>(nja@u8MC0C`N&K5ADvqeL=5p;BfYFN`e}$N|NP?0R`uHiN9n_JZ1N(a9cO?M9 zE#>l?L7pS@^+dHPDbZSPBMyGDZkDk@v;tYhEZZ+TL47)=(ks*l({5`u(2zBTXT34V z)KfOY^9tLH-*5aT=X};((UBcjv}zlj&Vbc^ktDIU#!VDQc&e-433bYB1Kk{j3sewN zy|yi?Z74?NKs`!eg&^^#XNeh>r zk+RlEjdzF~O3n`29z%|*m0ccNT!~M>Hq4a;tThY^emgZLN^5Uc z9JF=)5aewk*-tcAxBBslVti((ddVJqnqG2NCo4q}7f*0KcQ#M-?%t!f9Lgrk^BR$L z-{^nTGX{7^S>R{*t?xESYa%k2r@BgL6m$-Q(MPdS_&?0urt3CiS84beYr|mDTS^ zE-j~!=-Y-)Q^aTx__?D({*MVLDEe;*LHrx`Z~qsGXLv=?8Ij^8jlf7o(^*ERB=&dn z8^SXZN2=o2G5=rqjr~su{vQzWqwIe|@V`9z$J!(+ARkmWe1!6F0rmb4QU9Q^A9*AH zfa!nV1e0S`W%w2=#2i|6vz`frJi#cuM*Fps3>vaKZxn$YdA)mpS)Bb%I@37XyN22^ zzz|QP5OeB#I&Yk>oO@|+ECx544UejN^A=Two;{BVIdRA;ui* z_#;}1VV;{qNf<-jxZiP55wl;JQqtCM)!vEIzUx4(axz@}0#1BUoiWK`HR( zmnRHxvmIy^vd)V#n0o5vyH`uUFEs@mn*FJUAHafP1VU7NM{#4QmhI z8mgH%D@SaqsYQ8+l%#<=U6^^tvstOv$x>9!RVP@*Qd1%9k8x3;X1eZIJ@tc0Ege*b zK5f&a5IIF=Ie4#v8< zE6DW2*G8AT-j~K8#HiJ&HL3NMve`^5t?JIv>zwnMTPJz7wR^Wz3+{AnbX-I0d*Z=h zL-rx#jiu3Ju_VwR3E!}{60q{CFqyi3DV#a_^UJFh!#TBTHJywFey!}(&X`S9Af>!l z2)EwSRcXmOohI3g@}k{R{j2&6uxwhsEbFMh3qAeB$31pAKYG>TL$F%>P+i=Q>Xqf9 zx{>bvc+=CGj~%BtM{;Q5vR*ee!TtT+7F(8o6eNgk(7%p8)fnt*lLQPQa8lw(t(4~k|Bm*)3GN&{VB z2Km58&kw6c?Dl#eKgg#%4VBY%a4Tw@^1iP3`KQDlTEz-|>j8hhbs&-<{Z3eI+Kfz# zO;Zqg=&UwGflYo}-Mwt*<%%ZPwxxk)EQD8z8AfLx`sn_<@G-~eo)GXPT!N`95#9G! zIzC^JTP+=j{Ud7=4IK-e@3`}CYgM*N0^}rqa+ZR7P0$Km8CQ|O$n&tO@9}q;3bvDp zeXwECnWe%?;6Kn4KTmjVw!{6Y~A^oC+uglo$1#6M`;ix&bM)fn@ zKV<}{&zZi5NdpDcS%p1Zl=F&)y`f{y&4gCk-vts6edA%eUqRkGeqNBk^sl-&*Mdu5 zs=EY)0jfnhes}rYzuA>HPOf=7NcZoEJ@vi`}Y@Ga>tp7I`JCsVU z4R3jn_}I|_gTfHe72?B}GECa)Wpw%V%)IYLtfHtPd0 z({_Dqp1hWj)UU6>V?OBh;EKNw5U}v-3U>8)D=Y4ac zkGiQzLbLBLKpZGi%lJG#*^d5cuRSJah#qIp9#KxBNxuOK4V{UTeX%CWUl%ZD`yGaS zTzj$!9V_?w&{0mh$qy>J4J|U61n_De7QP)Tlt&N;2RcO78oJwN@9)f+bM%;9y6YIG zMO6pG^1{h890R_MmY?k{P=yeIIPRSK5ZbFUCgsaIQg7lpBEJ%Ekz%d-)dyk5rA#T` zCG%}>1O7u+p~n}k;5c~sQO2%RIv3-RqYuhLCxbec)8Gc4&;&ziUQ$&9@q2WM7j&AN z)Wx2OcT1T4{ovs$etfz+(ZPxHSs5}g=dWFNwYCSU~SU)lJEBsUz{v&1qM ztw~j=gJUB|F0Ar8cfWs6E!KUdU)$Nh(YxN0^Q82PBPqTe*r_V$&G8qW<@mJe9HDYS zn;T)!v<>S;7gqEp_kIwu%iE>1l%<_5^K%L~N!8!?W4<4Fm<74J(2;j}n8I>f3X!H- zKkV33NSRGPK;aN^_FjkrqcB< zwO<`f+C%@vT=D&3F>pS{$QLGAw+i?TPw#Fvrd?TBwWIyPY6Y4uQW!O#a-0rklnf+KX8 ze>xp3E(Y}g%bQk=+-}I+Q7`ML=a7-)BqLfpsP2etN4lbepi*t8&6?~1H+$&^Y_13D zbNxRz!9=kiiT}+b{J&C)##21cD1?Nv6#Wr33YRchAvBa>Sq_m|hQT;a{&y0`{+Jsh z{)yB7{V4gLe6Axn5t1y1@KHok{|@KSKZqZNL)brvKe`vhMI+=*Z5TjUdz+~Fk)9ew z;SCeQ9}?bVLgqx$Z`){O0NO=R_k$OSMd>|9mhbB6i462(5i8I)@uj|qmOyJx?^5f} zp-vIn{jf+>KV@4r^wO(`3lA%FiyzX{b%Sm;BE=et*EjB)>$+XSPU>*Es)IwGYG0%?=`BC7wu)OH9`1B|!=0CncE}jmIPFHv z3!U)-mpe4`nP&_FU7yE{Pa_n3frt$+FrXY;aXxs?G?N6v+jn+T*56|@uRekWxSXG^ zJ^7#IasFefyG|Y@xnrFZC&)7)>MW*TirY?^Bz9n^i!mC0AMKo5fdLNCakyu_BX{YM zX}%<9J8)^v1M72=D{zUz9m1DpB8=?i4HI$?f=Un{OD+0J#(b-fGwjfV;_hrw?t^EP z=(qJU@@w<_c~zsd{Z|&3Ak3`@Z%u*$@VUzL!}st4(Nex`!A^Pav~}!K-~r-wq~>Pb zp(ef=2GFB~K2&-PP@Lnv9I_Ignf0k-l_nIgt%GsvZ&v(15JKD#tu}(kI+@hvq1Ne$W?kW=BhR zX}T~ZTQ7$1g z%Oc4{f?0dtUlAhgiRCLL%~4!^`WoOg%Mw)@4RW3S_)6x zjUu0D$JhL_A3vU)5vHn>xaj*Ks;{r3AMUk-#E!y_MhDZS>J*;~w{!@;5HSG<>CQ-{ zEUG~2Q;DXQDLDNsX7okfs1eni?!>C&)eSaDAHE-;-AXQb1fJ8cH2(Iiy-(C@KQ~FB z&ngMmCy_O-Ni2X$7`oq*7#`?Zm;mz6UcpdU%hrge83{f}0`lR-a%NqqDKrxSOJ-ln zWKscQ@7JDFvwKb}dj|L8(yJMp2PONqIxx_54aU(OazfPG4vF5U7nmK@Y+Pd7ce1Y+ zOX)Hg5NhCX^*T2s8zJ|^RO1LtdSXQqk$29$)?QpNexn{LVu;0ffGdxIBC;-^m_|;q zUy}=T7J2UlhyuN7g0K1b2EclwW;7fGFzi93-dMFU3N(OuetcG&Ohnpc;&a+A6&pSz zb^IBebMfX}?BN9u4x5rDd<@qy4v zgw!tMukm)WWBzC}5&Lbl-74W+EPRBoD@;3B0^Ip_YRu0*?Kqz=zWts@-jR!;; z!)zdEFq;xRnR}Vbojq$GQJxZ=q)NXaEnUhh-w<^9>2GRA;d5m?wk~o56 z-V>_ws9L|~ng8m`{>k0~0qd_8$s*R=?kyS-PMnhdL28fJ2_~(z}edYno}DR6N~+1 zk=dZ7l6`jgmvU$cRvnIOVY-A?A&V%gRM4HAu8uw8(RNNa2}Pi!ty}mj099dgR3!GI zx-pyR8R140-8mn1UvJFl*VFXZc1+Z9dVh|m)5WqWiK%td|?%XMOjy%T`-bZUJvhw;oGYO=4Lf_t$&HhJ7S zye6mgL4r6Ek0z0}^H^YReCl#{3sY{1fbHBNFE)zfLWg7ILilvXc+&87t!=+{`pnDt z_Gis%xf5V5LW2)Oa`j5#x>cg4myELLz^K=$agKk=Z#Ke!Fe@vwf zwo{eX+XeTw99~{=O!E>2mU{&q`O)Rk+()Cw!?yAYLgOE*fdl}8ydb*;%Q&?~w;{;y zW(rqxjwSmsQ5#`|RwTgw1HSS9Bk)cB6UP3D;Q#U{@xKM%lFFn~NO;8GR_8%%N{Ntt zR!rf|Uouj_$3%RXVSa)lw=PtWb^bH#&o9gi{5_7hgtiFf8T+FZkht}y9FDBXxkw{7 zm>0r_;HY%Ux|L$Y__D-wY=8P7gj7m=QzcHAwk`qJA~f0Y8GCjJIvXIU!+%*+to6lJ zN`rGii?M+1oq7jXUV>G->v_tEBiM`sIh@=`Xe1Dv5!$`jr<;w-;F+n;!!c{~yIxJE zfe4%vM~)<)()JolSCRqUZiH|y?gzPgSsrIVO@SfE$7Tz_*LsgU;HTH!vKz4%(;EoS zJ(ihM>60-zMzy0u2Ew5nqiOs&o4&>A_u~eU|1A|iNgUzezP~!N*oc+U>1rp26bP{M z_2nQyVOpIFc=coT`Dh}FJ4HRqV)o;M4n9M0u@GNBE&j2`r`wwcaT|Q?bxs6amkv)Q zf9P@dan{tAgW0MtnW<;w8_DN^$WmE}-Ki#3f?6z(cR{@NSMnjsT@t7<=u2S_nKrru zA|g&OeN-k>si-)<-om-d@@EPSL{p)2}w-X$s(#vpKD&m;WC+Z&5x zK+yZ|G(KWJEQt{Hu_xUW;ve=SePwOU7uf;X8!M+FATw%0d37H?y~yt)AoiN}>0OC- zeXgv~wD?HM1RgBzEBLo}{hpon6g~7f7|x#qQfHiA7L_7?!|%ZJN?$dcryeVRh?O&s zhm~P z;{`r20u9@;X`ie>i)_NnYlG>V@_dBWRIenwrvLeZ!7Eu#FpcAQ{5g;4jl0Yjtb7f} z0V*2+k5Iwu4cWIZ2ns%-9{D~|FAg6>85Aa*drWs|`5H}7$Q067Wq|u6h&V)U_jU(h z&(;dHFgIZwz>`ZXSA}tKHUSY5e*DTQ^%Cv%DmIBTB=~05c)XgRzUpW4Sih2IAw+r^ zJV8qnw?Kc@B}C9%#X* zQjRlM-{h6)DFw$%@KgbgMP2^!Ecf3-H8Q zuCkK`#p13RZ;|Xik(zsEpz|UYCG@T8%iH(fb;*T?&xcjyP?KVT23)nEe~Ag0^b7){ z$zHuaqX$GUUKCnVPpxsy;2a83pkDT8>z2)1t|mz~z1X#r@kPz7{4SZrIj3?FNI}g@ zl&ptXLED-Cz3OsIqfq0aAHC8tsnK4c{#`euML)I&=h{i@jY|0A742IUJsu}T_vQw4u(KCgH4-G2TT`lW@o`=cM zjTE56)LgFV<6ZA@9le4Fw_wn=vu0qPsK zgcX;l_xg-$mnL<+n)>iv%@GI|p~ao5SIeEXmvEehe9Q5;3sdm@Oi>kZKfry>FkGw` zNc0QUJ%8)65g5$dpUH{-_N0=zIK@mNOLFsBLJPOJ9a9E9X}i-JQZTt1FopE9v)J!d z-Xgh${yit4YGXX<`|RdX-}{@8($3iv|M&?&h6858`P8P>S4wrahdzJ{m1?uroZC^I z(X@9}xfcuV(wMoHW4_d6ViiLnI%uMcC<5AUI74mqiS_IpOmA=oAoBa#B=?Gk-^K5k zM}cjeBgQ|9G!9S}f=OVF6~25{(SV;YIR-qQ2cK4|s3TG6%J36F+a;U=eZf1uJBgL3 z^R%m3p?3jC;>ysEU--IL(JAetcTTsKlLO`MjqB|@9|K0oBJg)1MN*IhxxDU$qfXiO zA+^;!#~2efNn}p1Rn_Q(GfB@~pmAzCI^PH`><27qkV1oQWDO5vVwD{1x=O3hj?&0} zdhZdh0u1l*IH@c+Dd_9i`2|;mqdlJ;_b0&@j$hV@lQ6?Z4lixlvVg!i%~T(nmYoys zg_(#FJFiYatv$aSKMtRhyVnEa&MqwORkfLVSqz%s^jiUBpWsn#mdn`Rh46gMU-|~f zl#=RC5jcud7=Qb; zbg;vWkoItnXo>#n^=H95F(Ve5_Q2O@#FiF{M-C6a76UQOeqZg5-~6YME=;2h```cRo`5R$`U< zd*e!q(w(=ou)yBMHDDMSmDW+$Af=XM>sfI{J9IeY!fTH@nLwk06+6j;$AGM_Q!d{a z_gGK{HFy!w1J4}D}fb5G4lVq3r_q%ocaTCyeM)UEs65S88}pxB~4&t zMpiIY6cs@gzthOzilqKuAWr;GnD`&?zauw9{L7<%=#EpAOW}kh2D<2Cr1~Eqj^OA& zX!sv6^>_PR;MD|iyolF~r&7L0=Tt_&>k7}eO2AOu-)qZs->CKg&K}v-%H-Gmh-fT* z%0jz8ec27ewZM@>*|oYNMU-(i7cAYUrne-k1-1lOcsfjL8rE;S+x_yZD`pWe^MloG z%RAG+3Gk?#1&5MsUrh8&F$n@;r2-R+U`8hme1RPObY@yfHgCK}&2zjvRE0fJm-!j~9cGQ

QHqw%$Tfv3jU7bHwWHT?p(ypKZ;>=!>Ok13d`E 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

QHqw%$Tfv3jU7bHwWHT?p(ypKZ;>=!>Ok13d`E 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 literal 0 HcmV?d00001 diff --git a/db-backups/20110801094935-componentowl-struct.sql b/db-backups/20110801094935-componentowl-struct.sql new file mode 100644 index 0000000..344200a --- /dev/null +++ b/db-backups/20110801094935-componentowl-struct.sql @@ -0,0 +1,976 @@ +-- MySQL dump 10.11 +-- +-- Host: mysql.dextronet.com Database: componentowl +-- ------------------------------------------------------ +-- Server version 5.1.53-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `activations` +-- + +DROP TABLE IF EXISTS `activations`; +CREATE TABLE `activations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL, + `build` int(11) NOT NULL, + `computer_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `serial_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `final_judgement` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `order_id` (`order_id`), + CONSTRAINT `activations_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `allowed_values` +-- + +DROP TABLE IF EXISTS `allowed_values`; +CREATE TABLE `allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1024399116 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `articles` +-- + +DROP TABLE IF EXISTS `articles`; +CREATE TABLE `articles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `content` text COLLATE utf8_unicode_ci NOT NULL, + `date` date NOT NULL, + `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'draft', + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `custom_subtemplate` text COLLATE utf8_unicode_ci, + `screenshot_id` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_articles_on_slug` (`slug`), + KEY `screenshot_id` (`screenshot_id`), + CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`screenshot_id`) REFERENCES `screenshots` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `autoresponders` +-- + +DROP TABLE IF EXISTS `autoresponders`; +CREATE TABLE `autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) NOT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `message` text COLLATE utf8_unicode_ci NOT NULL, + `delay` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + CONSTRAINT `autoresponders_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `contacts` +-- + +DROP TABLE IF EXISTS `contacts`; +CREATE TABLE `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `active_subscriptions` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=846119490 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers` +-- + +DROP TABLE IF EXISTS `customers`; +CREATE TABLE `customers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `customer_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers_visitors` +-- + +DROP TABLE IF EXISTS `customers_visitors`; +CREATE TABLE `customers_visitors` ( + `customer_id` int(11) DEFAULT NULL, + `visitor_id` int(11) DEFAULT NULL, + KEY `customer_id` (`customer_id`), + KEY `visitor_id` (`visitor_id`), + CONSTRAINT `customers_visitors_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`), + CONSTRAINT `customers_visitors_ibfk_2` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `download_logs` +-- + +DROP TABLE IF EXISTS `download_logs`; +CREATE TABLE `download_logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `request` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `download_logs_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2687 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `emails` +-- + +DROP TABLE IF EXISTS `emails`; +CREATE TABLE `emails` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `to` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_send_attempt` int(11) DEFAULT '0', + `mail` text COLLATE utf8_unicode_ci, + `created_on` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `failed_activations` +-- + +DROP TABLE IF EXISTS `failed_activations`; +CREATE TABLE `failed_activations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `serial_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `computer_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `result` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `final_judgement` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faq_categories` +-- + +DROP TABLE IF EXISTS `faq_categories`; +CREATE TABLE `faq_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `faq_categories_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faqs` +-- + +DROP TABLE IF EXISTS `faqs`; +CREATE TABLE `faqs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `faq_category_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8_unicode_ci, + `answer` text COLLATE utf8_unicode_ci, + `featured` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `faq_category_id` (`faq_category_id`), + CONSTRAINT `faqs_ibfk_1` FOREIGN KEY (`faq_category_id`) REFERENCES `faq_categories` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `latests` +-- + +DROP TABLE IF EXISTS `latests`; +CREATE TABLE `latests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `meta_tags` +-- + +DROP TABLE IF EXISTS `meta_tags`; +CREATE TABLE `meta_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8_unicode_ci, + `description` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=364435853 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `newsletter_allowed_values` +-- + +DROP TABLE IF EXISTS `newsletter_allowed_values`; +CREATE TABLE `newsletter_allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1026203356 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `orders` +-- + +DROP TABLE IF EXISTS `orders`; +CREATE TABLE `orders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `customer_id` int(11) DEFAULT NULL, + `orderable_id` int(11) DEFAULT NULL, + `orderable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `license_key` text COLLATE utf8_unicode_ci, + `order_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `customer_id` (`customer_id`), + CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `pad_values` +-- + +DROP TABLE IF EXISTS `pad_values`; +CREATE TABLE `pad_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `pad_values_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `page_includes` +-- + +DROP TABLE IF EXISTS `page_includes`; +CREATE TABLE `page_includes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `inklude` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_categories` +-- + +DROP TABLE IF EXISTS `product_categories`; +CREATE TABLE `product_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_categories_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=207704555 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_descriptions` +-- + +DROP TABLE IF EXISTS `product_descriptions`; +CREATE TABLE `product_descriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_description_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_description_type_id` (`product_description_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_descriptions_ibfk_1` FOREIGN KEY (`product_description_type_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `product_descriptions_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=534832557 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_discounts` +-- + +DROP TABLE IF EXISTS `product_discounts`; +CREATE TABLE `product_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `product_edition_id` int(11) DEFAULT NULL, + `discount_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `discount_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `product_edition_id` (`product_edition_id`), + CONSTRAINT `product_discounts_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_discounts_ibfk_2` FOREIGN KEY (`product_edition_id`) REFERENCES `product_editions` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_editions` +-- + +DROP TABLE IF EXISTS `product_editions`; +CREATE TABLE `product_editions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `initial` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_editions_on_internal_code` (`internal_code`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_editions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=441015911 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_icons` +-- + +DROP TABLE IF EXISTS `product_icons`; +CREATE TABLE `product_icons` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `size` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `icon_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_file_size` int(11) DEFAULT NULL, + `icon_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_icons_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_images` +-- + +DROP TABLE IF EXISTS `product_images`; +CREATE TABLE `product_images` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_offers` +-- + +DROP TABLE IF EXISTS `product_offers`; +CREATE TABLE `product_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `related_product_id` int(11) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `begins_at` datetime DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `related_product_id` (`related_product_id`), + CONSTRAINT `product_offers_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_offers_ibfk_2` FOREIGN KEY (`related_product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_pages` +-- + +DROP TABLE IF EXISTS `product_pages`; +CREATE TABLE `product_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `tab` tinyint(1) DEFAULT '0', + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `parent_id` (`parent_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_pages_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `product_pages` (`id`), + CONSTRAINT `product_pages_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_upgrades` +-- + +DROP TABLE IF EXISTS `product_upgrades`; +CREATE TABLE `product_upgrades` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upgrade_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `upgradable_id` int(11) DEFAULT NULL, + `upgradable_to_id` int(11) DEFAULT NULL, + `upgradable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'ProductEdition', + `upgradable_to_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_url_params` +-- + +DROP TABLE IF EXISTS `product_url_params`; +CREATE TABLE `product_url_params` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_destination_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `default` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `url_destination_id` (`url_destination_id`), + CONSTRAINT `product_url_params_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_url_params_ibfk_2` FOREIGN KEY (`url_destination_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products` +-- + +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_category_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `file` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `promoted` tinyint(1) DEFAULT '0', + `homepage` tinyint(1) DEFAULT '0', + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `setup_file_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_file_size` int(11) DEFAULT NULL, + `setup_file_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_products_on_code` (`code`), + UNIQUE KEY `index_products_on_internal_code` (`internal_code`), + KEY `product_category_id` (`product_category_id`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`product_category_id`) REFERENCES `product_categories` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=605250274 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products_promotions` +-- + +DROP TABLE IF EXISTS `products_promotions`; +CREATE TABLE `products_promotions` ( + `product_id` int(11) DEFAULT NULL, + `promotion_id` int(11) DEFAULT NULL, + KEY `product_id` (`product_id`), + KEY `promotion_id` (`promotion_id`), + CONSTRAINT `products_promotions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `products_promotions_ibfk_2` FOREIGN KEY (`promotion_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `redirects` +-- + +DROP TABLE IF EXISTS `redirects`; +CREATE TABLE `redirects` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `source_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `redirect_path` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `redirect_to` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `redirects_ibfk_1` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `releases` +-- + +DROP TABLE IF EXISTS `releases`; +CREATE TABLE `releases` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `changelog` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `postpone_till` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `announce` tinyint(1) DEFAULT '1', + `exclude_from_autoupdate` tinyint(1) DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `releases_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=222479608 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `schema_migrations` +-- + +DROP TABLE IF EXISTS `schema_migrations`; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + UNIQUE KEY `unique_schema_migrations` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `screenshots` +-- + +DROP TABLE IF EXISTS `screenshots`; +CREATE TABLE `screenshots` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `screenshots_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sent_autoresponders` +-- + +DROP TABLE IF EXISTS `sent_autoresponders`; +CREATE TABLE `sent_autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `autoresponder_id` int(11) NOT NULL, + `contact_id` int(11) NOT NULL, + `sent_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `autoresponder_id` (`autoresponder_id`), + KEY `contact_id` (`contact_id`), + CONSTRAINT `sent_autoresponders_ibfk_1` FOREIGN KEY (`autoresponder_id`) REFERENCES `autoresponders` (`id`), + CONSTRAINT `sent_autoresponders_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `site_settings` +-- + +DROP TABLE IF EXISTS `site_settings`; +CREATE TABLE `site_settings` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `settings` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sitemap_titles` +-- + +DROP TABLE IF EXISTS `sitemap_titles`; +CREATE TABLE `sitemap_titles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `static_pages` +-- + +DROP TABLE IF EXISTS `static_pages`; +CREATE TABLE `static_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_static_pages_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_list_types_subscription_locations` +-- + +DROP TABLE IF EXISTS `subscription_list_types_subscription_locations`; +CREATE TABLE `subscription_list_types_subscription_locations` ( + `subscription_list_type_id` int(11) DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_2` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_lists` +-- + +DROP TABLE IF EXISTS `subscription_lists`; +CREATE TABLE `subscription_lists` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `subscription_lists_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_lists_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1009842132 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscriptions` +-- + +DROP TABLE IF EXISTS `subscriptions`; +CREATE TABLE `subscriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) DEFAULT NULL, + `contact_id` int(11) DEFAULT NULL, + `started_at` datetime DEFAULT NULL, + `ended_at` datetime DEFAULT NULL, + `active` tinyint(1) DEFAULT '1', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + KEY `contact_id` (`contact_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscriptions_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`), + CONSTRAINT `subscriptions_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`), + CONSTRAINT `subscriptions_ibfk_3` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1041002375 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subtemplates` +-- + +DROP TABLE IF EXISTS `subtemplates`; +CREATE TABLE `subtemplates` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subtemplate_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `content` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subtemplate_type_id` (`subtemplate_type_id`), + CONSTRAINT `subtemplates_ibfk_1` FOREIGN KEY (`subtemplate_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `support_requests` +-- + +DROP TABLE IF EXISTS `support_requests`; +CREATE TABLE `support_requests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `support_request_origin_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `message` text COLLATE utf8_unicode_ci, + `mail_sent` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `support_request_origin_id` (`support_request_origin_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `support_requests_ibfk_1` FOREIGN KEY (`support_request_origin_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `support_requests_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonial_positions` +-- + +DROP TABLE IF EXISTS `testimonial_positions`; +CREATE TABLE `testimonial_positions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `testimonial_id` int(11) DEFAULT NULL, + `testimonial_location_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `extract` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `testimonial_id` (`testimonial_id`), + KEY `testimonial_location_id` (`testimonial_location_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonial_positions_ibfk_1` FOREIGN KEY (`testimonial_id`) REFERENCES `testimonials` (`id`), + CONSTRAINT `testimonial_positions_ibfk_2` FOREIGN KEY (`testimonial_location_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `testimonial_positions_ibfk_3` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonials` +-- + +DROP TABLE IF EXISTS `testimonials`; +CREATE TABLE `testimonials` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `text` text COLLATE utf8_unicode_ci, + `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `hidden` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonials_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `crypted_password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `persistence_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `single_access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `perishable_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `login_count` int(11) NOT NULL DEFAULT '0', + `failed_login_count` int(11) NOT NULL DEFAULT '0', + `last_request_at` datetime DEFAULT NULL, + `current_login_at` datetime DEFAULT NULL, + `last_login_at` datetime DEFAULT NULL, + `current_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=679720381 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitor_tracks` +-- + +DROP TABLE IF EXISTS `visitor_tracks`; +CREATE TABLE `visitor_tracks` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `visitor_id` int(11) DEFAULT NULL, + `track` text COLLATE utf8_unicode_ci, + `trackable_id` int(11) DEFAULT NULL, + `trackable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `source_type_id` int(11) DEFAULT NULL, + `source` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `targetable` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `download` tinyint(1) DEFAULT '0', + `checkout` tinyint(1) DEFAULT '0', + `order` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `visitor_id` (`visitor_id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `visitor_tracks_ibfk_1` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`), + CONSTRAINT `visitor_tracks_ibfk_2` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitors` +-- + +DROP TABLE IF EXISTS `visitors`; +CREATE TABLE `visitors` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trackable_number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `user_agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `volume_discounts` +-- + +DROP TABLE IF EXISTS `volume_discounts`; +CREATE TABLE `volume_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` int(11) DEFAULT NULL, + `to` int(11) DEFAULT NULL, + `discount` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2011-08-01 16:49:38 diff --git a/db-backups/20110802041029-componentowl-data.sql.gz b/db-backups/20110802041029-componentowl-data.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..3467f289224dabfa35223abffed64eea76237eee GIT binary patch literal 159295 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

QHqw%$Tfv3jU7bHwWHT?p(ypKZ;>=!>Ok13d`E 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 Y8R+}Z%{gVy$1iY!{ZK5n

b}2c}+EYybcN literal 0 HcmV?d00001 diff --git a/db-backups/20110802041029-componentowl-struct.sql b/db-backups/20110802041029-componentowl-struct.sql new file mode 100644 index 0000000..91d0d33 --- /dev/null +++ b/db-backups/20110802041029-componentowl-struct.sql @@ -0,0 +1,995 @@ +-- MySQL dump 10.11 +-- +-- Host: mysql.dextronet.com Database: componentowl +-- ------------------------------------------------------ +-- Server version 5.1.53-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `activations` +-- + +DROP TABLE IF EXISTS `activations`; +CREATE TABLE `activations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL, + `build` int(11) NOT NULL, + `computer_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `serial_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `final_judgement` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `order_id` (`order_id`), + CONSTRAINT `activations_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `allowed_values` +-- + +DROP TABLE IF EXISTS `allowed_values`; +CREATE TABLE `allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1024399116 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `articles` +-- + +DROP TABLE IF EXISTS `articles`; +CREATE TABLE `articles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `content` text COLLATE utf8_unicode_ci NOT NULL, + `date` date NOT NULL, + `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'draft', + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `custom_subtemplate` text COLLATE utf8_unicode_ci, + `screenshot_id` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_articles_on_slug` (`slug`), + KEY `screenshot_id` (`screenshot_id`), + CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`screenshot_id`) REFERENCES `screenshots` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `autoresponders` +-- + +DROP TABLE IF EXISTS `autoresponders`; +CREATE TABLE `autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) NOT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `message` text COLLATE utf8_unicode_ci NOT NULL, + `delay` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + CONSTRAINT `autoresponders_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `comics` +-- + +DROP TABLE IF EXISTS `comics`; +CREATE TABLE `comics` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `publish_on` date NOT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `story` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `contacts` +-- + +DROP TABLE IF EXISTS `contacts`; +CREATE TABLE `contacts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `active_subscriptions` int(11) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=846119490 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers` +-- + +DROP TABLE IF EXISTS `customers`; +CREATE TABLE `customers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `customer_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `customers_visitors` +-- + +DROP TABLE IF EXISTS `customers_visitors`; +CREATE TABLE `customers_visitors` ( + `customer_id` int(11) DEFAULT NULL, + `visitor_id` int(11) DEFAULT NULL, + KEY `customer_id` (`customer_id`), + KEY `visitor_id` (`visitor_id`), + CONSTRAINT `customers_visitors_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`), + CONSTRAINT `customers_visitors_ibfk_2` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `download_logs` +-- + +DROP TABLE IF EXISTS `download_logs`; +CREATE TABLE `download_logs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `request` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `download_logs_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `emails` +-- + +DROP TABLE IF EXISTS `emails`; +CREATE TABLE `emails` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `to` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_send_attempt` int(11) DEFAULT '0', + `mail` text COLLATE utf8_unicode_ci, + `created_on` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `failed_activations` +-- + +DROP TABLE IF EXISTS `failed_activations`; +CREATE TABLE `failed_activations` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `serial_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `computer_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `result` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `final_judgement` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faq_categories` +-- + +DROP TABLE IF EXISTS `faq_categories`; +CREATE TABLE `faq_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `faq_categories_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `faqs` +-- + +DROP TABLE IF EXISTS `faqs`; +CREATE TABLE `faqs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `faq_category_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `question` text COLLATE utf8_unicode_ci, + `answer` text COLLATE utf8_unicode_ci, + `featured` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `faq_category_id` (`faq_category_id`), + CONSTRAINT `faqs_ibfk_1` FOREIGN KEY (`faq_category_id`) REFERENCES `faq_categories` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `latests` +-- + +DROP TABLE IF EXISTS `latests`; +CREATE TABLE `latests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `body` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `meta_tags` +-- + +DROP TABLE IF EXISTS `meta_tags`; +CREATE TABLE `meta_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` text COLLATE utf8_unicode_ci, + `description` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=364435853 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `newsletter_allowed_values` +-- + +DROP TABLE IF EXISTS `newsletter_allowed_values`; +CREATE TABLE `newsletter_allowed_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1026203356 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `orders` +-- + +DROP TABLE IF EXISTS `orders`; +CREATE TABLE `orders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `customer_id` int(11) DEFAULT NULL, + `orderable_id` int(11) DEFAULT NULL, + `orderable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `license_key` text COLLATE utf8_unicode_ci, + `order_attributes` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `customer_id` (`customer_id`), + CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `pad_values` +-- + +DROP TABLE IF EXISTS `pad_values`; +CREATE TABLE `pad_values` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `pad_values_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `page_includes` +-- + +DROP TABLE IF EXISTS `page_includes`; +CREATE TABLE `page_includes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `inklude` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_categories` +-- + +DROP TABLE IF EXISTS `product_categories`; +CREATE TABLE `product_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_categories_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=207704555 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_descriptions` +-- + +DROP TABLE IF EXISTS `product_descriptions`; +CREATE TABLE `product_descriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_description_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `value` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_description_type_id` (`product_description_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_descriptions_ibfk_1` FOREIGN KEY (`product_description_type_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `product_descriptions_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=534832557 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_discounts` +-- + +DROP TABLE IF EXISTS `product_discounts`; +CREATE TABLE `product_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `product_edition_id` int(11) DEFAULT NULL, + `discount_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `discount_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `product_edition_id` (`product_edition_id`), + CONSTRAINT `product_discounts_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_discounts_ibfk_2` FOREIGN KEY (`product_edition_id`) REFERENCES `product_editions` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_editions` +-- + +DROP TABLE IF EXISTS `product_editions`; +CREATE TABLE `product_editions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `initial` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_product_editions_on_internal_code` (`internal_code`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_editions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=441015911 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_icons` +-- + +DROP TABLE IF EXISTS `product_icons`; +CREATE TABLE `product_icons` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `size` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `icon_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `icon_file_size` int(11) DEFAULT NULL, + `icon_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_icons_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_images` +-- + +DROP TABLE IF EXISTS `product_images`; +CREATE TABLE `product_images` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_offers` +-- + +DROP TABLE IF EXISTS `product_offers`; +CREATE TABLE `product_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `related_product_id` int(11) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `price` decimal(10,2) DEFAULT NULL, + `begins_at` datetime DEFAULT NULL, + `expires_at` datetime DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `related_product_id` (`related_product_id`), + CONSTRAINT `product_offers_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_offers_ibfk_2` FOREIGN KEY (`related_product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_pages` +-- + +DROP TABLE IF EXISTS `product_pages`; +CREATE TABLE `product_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `tab` tinyint(1) DEFAULT '0', + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `parent_id` (`parent_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `product_pages_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `product_pages` (`id`), + CONSTRAINT `product_pages_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_upgrades` +-- + +DROP TABLE IF EXISTS `product_upgrades`; +CREATE TABLE `product_upgrades` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upgrade_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `bmtID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `upgradable_id` int(11) DEFAULT NULL, + `upgradable_to_id` int(11) DEFAULT NULL, + `upgradable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'ProductEdition', + `upgradable_to_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `product_url_params` +-- + +DROP TABLE IF EXISTS `product_url_params`; +CREATE TABLE `product_url_params` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `url_destination_id` int(11) DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `default` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + KEY `url_destination_id` (`url_destination_id`), + CONSTRAINT `product_url_params_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `product_url_params_ibfk_2` FOREIGN KEY (`url_destination_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products` +-- + +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_category_id` int(11) DEFAULT NULL, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `internal_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `file` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `promoted` tinyint(1) DEFAULT '0', + `homepage` tinyint(1) DEFAULT '0', + `price` decimal(10,2) DEFAULT NULL, + `regular_price` decimal(10,2) DEFAULT NULL, + `bmtID` int(11) DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `setup_file_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `setup_file_file_size` int(11) DEFAULT NULL, + `setup_file_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_products_on_code` (`code`), + UNIQUE KEY `index_products_on_internal_code` (`internal_code`), + KEY `product_category_id` (`product_category_id`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`product_category_id`) REFERENCES `product_categories` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=605250274 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `products_promotions` +-- + +DROP TABLE IF EXISTS `products_promotions`; +CREATE TABLE `products_promotions` ( + `product_id` int(11) DEFAULT NULL, + `promotion_id` int(11) DEFAULT NULL, + KEY `product_id` (`product_id`), + KEY `promotion_id` (`promotion_id`), + CONSTRAINT `products_promotions_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`), + CONSTRAINT `products_promotions_ibfk_2` FOREIGN KEY (`promotion_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `redirects` +-- + +DROP TABLE IF EXISTS `redirects`; +CREATE TABLE `redirects` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `source_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `redirect_path` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `redirect_to` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `redirects_ibfk_1` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `releases` +-- + +DROP TABLE IF EXISTS `releases`; +CREATE TABLE `releases` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `build` int(11) DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci, + `changelog` text COLLATE utf8_unicode_ci, + `date` date DEFAULT NULL, + `postpone_till` datetime DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `announce` tinyint(1) DEFAULT '1', + `exclude_from_autoupdate` tinyint(1) DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `releases_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=222479608 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `schema_migrations` +-- + +DROP TABLE IF EXISTS `schema_migrations`; +CREATE TABLE `schema_migrations` ( + `version` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + UNIQUE KEY `unique_schema_migrations` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `screenshots` +-- + +DROP TABLE IF EXISTS `screenshots`; +CREATE TABLE `screenshots` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `image` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `alt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `image_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `image_file_size` int(11) DEFAULT NULL, + `image_updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `screenshots_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sent_autoresponders` +-- + +DROP TABLE IF EXISTS `sent_autoresponders`; +CREATE TABLE `sent_autoresponders` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `autoresponder_id` int(11) NOT NULL, + `contact_id` int(11) NOT NULL, + `sent_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `autoresponder_id` (`autoresponder_id`), + KEY `contact_id` (`contact_id`), + CONSTRAINT `sent_autoresponders_ibfk_1` FOREIGN KEY (`autoresponder_id`) REFERENCES `autoresponders` (`id`), + CONSTRAINT `sent_autoresponders_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `site_settings` +-- + +DROP TABLE IF EXISTS `site_settings`; +CREATE TABLE `site_settings` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `settings` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `sitemap_titles` +-- + +DROP TABLE IF EXISTS `sitemap_titles`; +CREATE TABLE `sitemap_titles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `static_pages` +-- + +DROP TABLE IF EXISTS `static_pages`; +CREATE TABLE `static_pages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url_param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `html` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `index_static_pages_on_code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_list_types_subscription_locations` +-- + +DROP TABLE IF EXISTS `subscription_list_types_subscription_locations`; +CREATE TABLE `subscription_list_types_subscription_locations` ( + `subscription_list_type_id` int(11) DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_list_types_subscription_locations_ibfk_2` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscription_lists` +-- + +DROP TABLE IF EXISTS `subscription_lists`; +CREATE TABLE `subscription_lists` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_type_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_type_id` (`subscription_list_type_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `subscription_lists_ibfk_1` FOREIGN KEY (`subscription_list_type_id`) REFERENCES `newsletter_allowed_values` (`id`), + CONSTRAINT `subscription_lists_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1009842132 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subscriptions` +-- + +DROP TABLE IF EXISTS `subscriptions`; +CREATE TABLE `subscriptions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subscription_list_id` int(11) DEFAULT NULL, + `contact_id` int(11) DEFAULT NULL, + `started_at` datetime DEFAULT NULL, + `ended_at` datetime DEFAULT NULL, + `active` tinyint(1) DEFAULT '1', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + `subscription_location_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subscription_list_id` (`subscription_list_id`), + KEY `contact_id` (`contact_id`), + KEY `subscription_location_id` (`subscription_location_id`), + CONSTRAINT `subscriptions_ibfk_1` FOREIGN KEY (`subscription_list_id`) REFERENCES `subscription_lists` (`id`), + CONSTRAINT `subscriptions_ibfk_2` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`), + CONSTRAINT `subscriptions_ibfk_3` FOREIGN KEY (`subscription_location_id`) REFERENCES `newsletter_allowed_values` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1041002375 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `subtemplates` +-- + +DROP TABLE IF EXISTS `subtemplates`; +CREATE TABLE `subtemplates` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `subtemplate_type_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `content` text COLLATE utf8_unicode_ci, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `subtemplate_type_id` (`subtemplate_type_id`), + CONSTRAINT `subtemplates_ibfk_1` FOREIGN KEY (`subtemplate_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `support_requests` +-- + +DROP TABLE IF EXISTS `support_requests`; +CREATE TABLE `support_requests` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `support_request_origin_id` int(11) DEFAULT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `message` text COLLATE utf8_unicode_ci, + `mail_sent` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `support_request_origin_id` (`support_request_origin_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `support_requests_ibfk_1` FOREIGN KEY (`support_request_origin_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `support_requests_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonial_positions` +-- + +DROP TABLE IF EXISTS `testimonial_positions`; +CREATE TABLE `testimonial_positions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `testimonial_id` int(11) DEFAULT NULL, + `testimonial_location_id` int(11) DEFAULT NULL, + `product_id` int(11) DEFAULT NULL, + `extract` text COLLATE utf8_unicode_ci, + `position` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `testimonial_id` (`testimonial_id`), + KEY `testimonial_location_id` (`testimonial_location_id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonial_positions_ibfk_1` FOREIGN KEY (`testimonial_id`) REFERENCES `testimonials` (`id`), + CONSTRAINT `testimonial_positions_ibfk_2` FOREIGN KEY (`testimonial_location_id`) REFERENCES `allowed_values` (`id`), + CONSTRAINT `testimonial_positions_ibfk_3` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `testimonials` +-- + +DROP TABLE IF EXISTS `testimonials`; +CREATE TABLE `testimonials` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `product_id` int(11) DEFAULT NULL, + `text` text COLLATE utf8_unicode_ci, + `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `hidden` tinyint(1) DEFAULT '0', + `position` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `product_id` (`product_id`), + CONSTRAINT `testimonials_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `login` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `crypted_password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `persistence_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `single_access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `perishable_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `login_count` int(11) NOT NULL DEFAULT '0', + `failed_login_count` int(11) NOT NULL DEFAULT '0', + `last_request_at` datetime DEFAULT NULL, + `current_login_at` datetime DEFAULT NULL, + `last_login_at` datetime DEFAULT NULL, + `current_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `last_login_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=679720381 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitor_tracks` +-- + +DROP TABLE IF EXISTS `visitor_tracks`; +CREATE TABLE `visitor_tracks` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `visitor_id` int(11) DEFAULT NULL, + `track` text COLLATE utf8_unicode_ci, + `trackable_id` int(11) DEFAULT NULL, + `trackable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `source_type_id` int(11) DEFAULT NULL, + `source` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `targetable` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `download` tinyint(1) DEFAULT '0', + `checkout` tinyint(1) DEFAULT '0', + `order` tinyint(1) DEFAULT '0', + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `visitor_id` (`visitor_id`), + KEY `source_type_id` (`source_type_id`), + CONSTRAINT `visitor_tracks_ibfk_1` FOREIGN KEY (`visitor_id`) REFERENCES `visitors` (`id`), + CONSTRAINT `visitor_tracks_ibfk_2` FOREIGN KEY (`source_type_id`) REFERENCES `allowed_values` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `visitors` +-- + +DROP TABLE IF EXISTS `visitors`; +CREATE TABLE `visitors` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trackable_number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `user_agent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `volume_discounts` +-- + +DROP TABLE IF EXISTS `volume_discounts`; +CREATE TABLE `volume_discounts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` int(11) DEFAULT NULL, + `to` int(11) DEFAULT NULL, + `discount` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2011-08-02 11:10:35 diff --git a/db/import/allowed_values.yml b/db/import/allowed_values.yml new file mode 100644 index 0000000..87fe097 --- /dev/null +++ b/db/import/allowed_values.yml @@ -0,0 +1,104 @@ +location_hp_featured: + type: TestimonialLocation + code: homepage-featured + value: Homepage Featured + +location_order: + type: TestimonialLocation + code: order + value: Order Page + +location_product: + type: TestimonialLocation + code: product + value: Product Page + +location_download: + type: TestimonialLocation + code: download + value: Download Page + +description_featured_phrase: + type: ProductDescriptionType + code: featured-phrase + value: Featured Phrase + +description_featured_subphrase: + type: ProductDescriptionType + code: featured-subphrase + value: Featured Subphrase + +description_heading: + type: ProductDescriptionType + code: heading + value: Section Heading + +description_section: + type: ProductDescriptionType + code: section + value: Section Description + +support_request_origin_support: + type: SupportRequestOrigin + code: support + value: Support Page + position: 1 + +support_request_origin_order: + type: SupportRequestOrigin + code: order + value: Order Page + position: 2 + +support_request_origin_product: + type: SupportRequestOrigin + code: product + value: Product Page + position: 3 + +support_request_origin_why_uninstall: + type: SupportRequestOrigin + code: why-uninstall + value: Why Uninstall + position: 4 + +support_request_origin_why_uninstall: + type: SupportRequestOrigin + code: landing-page + value: Landing Page + position: 5 + +url_destination_product_detail: + type: UrlDestination + code: product-detail + value: Product Detail Page + position: 1 + +url_destination_product_download: + type: UrlDestination + code: product-download + value: Product Download Page + position: 2 + +url_destination_order: + type: UrlDestination + code: order + value: Order Page + position: 3 + +url_destination_support: + type: UrlDestination + code: support + value: Support Page + position: 4 + +promo_dropdown_listed: + type: Promotion + code: dropdown + value: Dropdown Menu + +template_type_articles_sidebar: + type: SubtemplateType + code: article-sidebar + value: Article Sidebar + position: 1 \ No newline at end of file diff --git a/db/import/faqs/questions.csv b/db/import/faqs/questions.csv new file mode 100644 index 0000000..e36d14b --- /dev/null +++ b/db/import/faqs/questions.csv @@ -0,0 +1 @@ +"product_code","faq_category_url_param","url_param","question","featured","position" diff --git a/db/import/product_pages/better-listview_features.erb b/db/import/product_pages/better-listview_features.erb new file mode 100644 index 0000000..307710a --- /dev/null +++ b/db/import/product_pages/better-listview_features.erb @@ -0,0 +1,150 @@ +

Bugs and wrong behavior:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Regular .NET ListView ControlBetter ListView control
Some events fire twice bugFixed
Selection behavior different from Windows ExplorerFixed; Behaves as expected
Drag & Drop behavior different from Windows ExplorerFixed; Behaves as expected
Checkboxes do not stay in the first column when the first column is reorderedFixed; Behaves as expected
Non-standard checkboxes behavior (e.g. when using spacebar)Fixed
Non-standard look, incompatible with system themesFixed; Always uses system theme. Looks great on all Windows versions. Works with Windows 7 themes and Aero
+ +

Limitations:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Regular .NET ListView ControlBetter ListView control
Just one image per itemEnhanced; Each sub-item can have image
ImageList must be used to display imagesBoth ImageList and Image instances can be used
Simple sorting onlyMulti-column sorting; Users can use Shift+Click to add additional columns to the sort
Three-state checkboxes not supportedSupport for both two-state and three-state check boxes
Very limited event dataEnhanced; Many events have rich event data with useful information
Only 1 context menu for whole ListViewUp to 3 separate context menus: One for column headers, one for items, and one for empty area
Columns can be shown only in “Details” layoutColumns can be shown in all layouts
Only “SmallIcon” and “LargeIcon” size supportedImages can be of arbitrary size per layout.
Image size is staticImages are scaled and centered smoothly when necessary while keeping their respective aspect ratios
Column header images are not supportedBoth ImageList and custom Image instances can be set on column headers
Custom comparer for sorting has to be implemented from scratchCustom comparer can be inherited from BetterListView’s default comparer to extend its functionality; Any custom IComparer is supported as well
Sub-item images very limited; Usable only via WinAPI with limitations in size and color depthImages for sub-item fully supported (both ImageList and custom Image instances)
Check boxes do not have animation effect like the standard controlCheck boxes are animated when used with mouse or keyboard the same way as the CheckBox control
Searching with keyboard only on first column and limited to string prefixesKeyboard searching can be used on columns of choice and the searching behavior can be further adjusted (any substring, character-based or word-based search)
Only simple item tooltips supportedAutomatic and customizable tooltips on items, sub-items and columns are supported
Can scroll to just one itemOne or several items can be specified to be scrolled into view
Vista-look only with WinAPI extensionVisual elements are used by default
No Drag & Drop item highlightingItems under cursor are properly highlighted during dragging; Highlighting can be switched off for selected items
+ +

Missing features:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Regular .NET ListView ControlBetter ListView control
No empty text support (watermark text when ListView is empty)Added support; Empty text for empty ListView is supported; You can give hint to your users now
No inbuilt sortAdded inbuilt sort support; Zero-code sorting
No auto-scroll when reordering itemsAdded; Auto-scroll speed can be adjusted
No auto-scroll when reordering columnsAdded; Auto-scroll speed can be adjusted
No inbuilt item/column reorderingAdded item/column reordering support; Zero-code reordering
No auto-scroll when dragging an itemAdded; Auto-scroll speed can be adjusted
Complex data binding not supportedSupport for complex data binding; Any IList, DataSet, DataTable or several other types can be bound directly to the Better ListView
\ No newline at end of file diff --git a/db/import/product_pages/better-listview_pricing-licensing.erb b/db/import/product_pages/better-listview_pricing-licensing.erb new file mode 100644 index 0000000..b6262ee --- /dev/null +++ b/db/import/product_pages/better-listview_pricing-licensing.erb @@ -0,0 +1,191 @@ +

Licensing & pricing for Better ListView

+ + + + +
+
+ + <% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%> + <%= hidden_field_tag "CID", Settings.order.cid %> + <%= hidden_field_tag "CLR", Settings.order.clr %> + <%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Single developer licenses
Single developer license with 1 year subscription$345 + <%= check_box_tag "PRODUCTID", "18300056", false, :id => "support-single" %> + <%= label_tag "support-single", "Add 1 year priority support ($99)" %> + <%= buy "18300042" %>
Single developer license with source code and 1 year subscription$795<%= buy "18300043" %>
5 developers licenses
5 developer license with 1 year subscription$995 + <%= check_box_tag "PRODUCTID", "18300057", false, :id => "support-5" %> + <%= label_tag "support-5", "Add 1 year priority support ($295)" %> + <%= buy "18300044" %>
5 developer license with source code and 1 year subscription$1995<%= buy "18300045" %>
Site licenses - use at 1 site (office or building)
Site license with 1 year subscription$1995 + <%= check_box_tag "PRODUCTID", "18300058", false, :id => "support-site" %> + <%= label_tag "support-site", "Add 1 year priority support ($495)" %> + <%= buy "18300046" %>
Site license with source code and 1 year subscription$3995<%= buy "18300047" %>
Enterprise license - use world-wide at unlimited sites
Enterprise license with source code and 1 year subscription$8995 + <%= check_box_tag "PRODUCTID", "18300059", false, :id => "support-enterprise" %> + <%= label_tag "support-enterprise", "Add 1 year priority support ($995)" %> + <%= buy "18300048" %>
+ + <% end -%> + +
+ +
+ + <% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%> + <%= hidden_field_tag "CID", Settings.order.cid %> + <%= hidden_field_tag "CLR", Settings.order.clr %> + <%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Single developer licenses
Renew single developer 1 year subscription$138 + <%= check_box_tag "PRODUCTID", "18300056", false, :id => "renew-support-single" %> + <%= label_tag "renew-support-single", "Add 1 year priority support ($99)" %> + <%= renew "18300049" %>
Renew single developer 1 year subscription with source code$318<%= renew "18300050" %>
5 developers licenses
Renew 5 developer 1 year subscription$398 + <%= check_box_tag "PRODUCTID", "18300057", false, :id => "renew-support-5" %> + <%= label_tag "renew-support-5", "Add 1 year priority support ($295)" %> + <%= renew "18300051" %>
Renew 5 developer 1 year subscription with source code$798<%= renew "18300052" %>
Site licenses - use at 1 site (office or building)
Renew site license 1 year subscription$798 + <%= check_box_tag "PRODUCTID", "18300058", false, :id => "renew-support-site" %> + <%= label_tag "renew-support-site", "Add 1 year priority support ($495)" %> + <%= renew "18300053" %>
Renews site license 1 year subscription with source code$1598<%= renew "18300054" %>
Enterprise license - use world-wide at unlimited sites
Renew enterprise license 1 year subscription with source code$3598 + <%= check_box_tag "PRODUCTID", "18300059", false, :id => "renew-support-enterprise" %> + <%= label_tag "renew-support-enterprise", "Add 1 year priority support ($995)" %> + <%= renew "18300055" %>
+ + <% end -%> + +
+
+ +
+ +
+

All licenses are:

+
    +
  • Life-time (non-expiring)
  • +
  • Royalty free
  • +
+
+ +
+

Subscription gets you:

+
    +
  • Support
  • +
  • Updates
  • +
+
+ +
+

Priority support gets you:

+
    +
  • Guaranteed 24 hour reply
  • +
  • Help with implementing new features and extending Better ListView
  • +
+
+ +
\ No newline at end of file diff --git a/db/import/product_pages/better-listview_screenshots.erb b/db/import/product_pages/better-listview_screenshots.erb new file mode 100644 index 0000000..e14dfe1 --- /dev/null +++ b/db/import/product_pages/better-listview_screenshots.erb @@ -0,0 +1,9 @@ +
+<% reset_cycle %> +<% for screenshot in @product.screenshots.all_ordered %> + <% c = cycle("odd", "even") %> + <% if c == "odd" %>
<% end %> +
<%= screenshot_link(screenshot, :version => :thumb_big) %><%= truncate(screenshot.label, 40) %>
+ <% if c == "even" || @product.screenshots.all_ordered.last == screenshot %>
<% end %> +<% end %> +
\ No newline at end of file diff --git a/db/import/product_pages/better-listview_story.erb b/db/import/product_pages/better-listview_story.erb new file mode 100644 index 0000000..f28ddc3 --- /dev/null +++ b/db/import/product_pages/better-listview_story.erb @@ -0,0 +1,91 @@ +

The story behind Better Listview

+ +

Hi, my name is Jiri Novotny and I’m the founder of Dextronet.com, a small software startup that operates ComponentOwl.com among other things. + Me and my team think of ourselves as independent software vendors (or mISV).

+ +

Surprise surprise - as it is with most independent components today, we did not originally actually intended to create Better ListView.

+ +

Our flagship product is Swift To-Do List, a desktop task management software. The old version of Swift To-Do List has been written in Visual Basic 6 + which has many limitations, so we’ve decided to make a total rewrite in VB.NET and C#. The development started in July 2009.

+ +

Because Swift To-Do List is highly list-centric product (as the name suggests ), it soon become apparent that we will need excellent ListView control. + The ListView control included in .NET just didn’t cut it. Not only its features are very limited, but there are braincracking bugs and strange behavior + in lots of cases. In fact, the default .NET ListView was so bad, that I’ve oftentimes wished I could just use the ListView included in VB6 – + it has at least behaved mostly correctly.

+ +

So, because we couldn’t use the default .NET ListView, I began searching for a replacement ListView +control. My requirements were actually not very demanding - I wanted a ListView control that looked and +behaved similarly as the one used in Windows Explorer.

+ +

Unfortunately, I‘ve soon discovered that in reality, I want lots of things that are not taken for granted in any ListView control that I’ve found. + My requirements for a usable .NET ListView control are:

+ +
    +
  • It must either inherit from native ListView or mimick it perfectly
  • +
  • It must use system theme seamlessly and not have some weird inconsistent custom look
  • +
  • It must support sub-item images flawlessly
  • +
  • It must have excellent drag & drop support for item reordering
  • +
  • It must have perfect implementation of selection and drag-selection
  • +
  • It must support 3 different context menus: For items, column headers, and empty space
  • +
  • Multi-column sort
  • +
  • Must not be part of some huge control pack that I need to bundle with my app
  • +
  • Must be light-weight, fast and optimized
  • +
  • Must have all bugs and strange behavior of .NET ListView fixed
  • +
+ +

There was also lot of nice-to-have things that I’ve looked for, like:

+
    +
  • Watermark text that is shown when the ListView is empty
  • +
  • Column reordering with auto-scrolling
  • +
  • 100% managed code
  • +
  • ... co mame dal? Napady! ...
  • +
+ +

I did not want to use any DataGrid-based control, as it can’t really replace ListView control – it is much harder to manipulate for the user in most + cases, and it doesn’t support many things that ListView does.

+ +

Swift To-Do List is a mass-market product, so it needed a ListView control that behaved as expected in all cases, no exceptions. + The ListView control used in Windows Explorer is a great model: Because every user knows how to work with Windows Explorer ListView already, + you can leverage that knowledge in your own applications. Your applications will be truly easy to use and learn.

+ +

I’ve looked over dozen of ListView controls – and I’m not afraid to name them, because they just don’t meet the above criteria. + The controls I looked over included ListView from SoftGroup, three different open source ListView controls from CodeProject, + ListView from Lidor systems, Grid and TreeView-Grid hybrid from DevExpres, WinListView from Infragistics, I’ve also looked at all + ListView controls to be found at CodeGuru and ComponentSource and more – basically everything that I could Google and everything + from all well-known (or not so well known) component providers.

+ +

I was disappointed with every single of these controls. Not one of them met my criteria.

+ +

Believe me, I *wanted* to find the perfect ListView control – after all, I desperately needed it so we could use it in our own product. + But what I‘ve found during my extensive research? Nothing. Null. Nilch. Nada. Zero. My heart was broken. The dreams of our awesome Swift To-Do List 7 + product started to shatter, because we needed an adequate ListView control first. When it comes to user experience, we simply couldn’t settle + for anything less than great.

+ +

But we haven’t given up. The solution? To create our own ListView control. A Better ListView control. It was not originally intended to be + a product on it’s own, but when it has been finished, it was so good that it would be a sin to keep it selfishly just for ourselves. + So we’ve started selling it.

+ +

When we started building our own better ListView control, we wanted it to inherit from System.Windows.Forms.ListView at first. + We’ve tried our best, but some of the bugs of .NET ListView were simply impossible to fix, even with ridiculous hacks. However, luck has shined upon us.

+ +

We’ve met Libor Tinka, a genius C# developer with extensive experience with not just programming in general, but specifically Windows + control development as well. He’s the author and sole developer of ImagingShop, a powerful digital photography processing desktop application + that includes many of his custom controls, and lot’s of hardcore mathematics and unique algorithms (It has over 220k lines of code in total!). + That guy really is a genius and let me tell you, the code he writes is just beautiful. He’s an artist.

+ +

When we’ve asked Libor to create a better ListView control for us, he accepted the challenge.

+ +

(By the way, it might look easy at first, but implementing your own ListView control is extremely difficult, daunting and complicated task – + there are so many corner cases in the control‘s behavior that it will make your brain want run away.)

+ +

We’ve worked very closely with Libor during the intensive development process. Fast forward 10 months into the future - Better ListView is done, + and Libor is an integral part of our team. We still work together as we support and constantly enhance BetterListview.

+ +

Better ListView is now used not just in Swift To-Do List, but also in Libor’s own product ImagingShop, so we are trully eating our own dog foot. + This is your guarantee that we will not stop supporting Better ListView, fixing bugs and implementing new features – + it’s the core and heart of our own desktop software products after all. We walk the talk.

+ +

If Better ListView existed before, I know I would be absolutely positively thrilled about it. + And so I hope that you are thrilled about it now that you’ve found it.

+ +

Any questions or comments? I would love to get them. Contact me at novotny@dextronet.com \ No newline at end of file diff --git a/db/import/product_pages/product_pages.csv b/db/import/product_pages/product_pages.csv new file mode 100644 index 0000000..ead848f --- /dev/null +++ b/db/import/product_pages/product_pages.csv @@ -0,0 +1,4 @@ +"product_code","code","name","tab","position" +"better-listview","story","Story",1,3 +"better-listview","screenshots","Screenshots",1,3 +"better-listview","pricing-licensing","Pricing & Licensing",0,1 diff --git a/db/import/static_pages/about.erb b/db/import/static_pages/about.erb new file mode 100644 index 0000000..fb8aac4 --- /dev/null +++ b/db/import/static_pages/about.erb @@ -0,0 +1,51 @@ +

About Component Owl

+ +

ComponentOwl.com has been founded in 2010 as a part of Dextronet.com network.

+ +

Our goal is to provide light-weight, flexible and reliable components and controls for Microsoft .NET + that are both user friendly and developer friendly.

+ +

Important thing about our controls is that they always use system themes, look, and behavior. We are opposed to controls with custom look and non-standard + behavior - in our opinion, controls that don’t look and behave as expected are not user friendly. Aero looks great, and so do our controls. That being said, + you can still customize our controls to suit your special needs, using many properties and owner-drawing options.

+ +

Our first product is Better ListView. It is aimed to be the number one replacement for the regular .NET ListView included with Visual Studio. Read the + <%= link_to "Better ListView story", story_path(featured_product) %>.

+ +

Support and development continuance

+ +

All components provided are used in our own products. For example, Better ListView is used in + <%= link_to "task management software", "http://www.dextronet.com/swift-to-do-list-software" %> Swift To-Do List and professional photography processing + application ImagingShop. This is your guarantee that we will not stop developing and supporting our components. It is quite common to find abandoned + controls and components – and this won’t happen with Component Owl controls!

+ +

Quality assurance

+ +

Our quality assurance stands on three main pillars:

+ +
    +
  1. Unit tests. All code is covered by unit tests whenever possible.
  2. +
  3. Rigorous in-house testing with extreme focus on details.
  4. +
  5. Usage of our controls in real world. Thousands of users work with Better ListView every day, because it is part of Swift To-Do List + and other software products developed by us, our partners and customers.
  6. +
+ +

Our team

+ +

Our team members have more than 10+ years of experience with Win32 development on average.

+ +

Jiri Novotny – Dextronet.com founder and author of Swift To-Do List. Better ListView project leader and specs author. + Jiri has focused on making Better ListView as user friendly as possible. He also ensured its compatibility with all Windows versions and themes.

+ +

Libor Tinka – Chief developer of Better ListView. Control development and C# expert. Libor is author of ImagingShop, digital photography + processing application.

+ +

Ondrej Tomec – Dextronet.com developer, author of various software projects, and co-developer of Better ListView. Ondrej helped to make + Better ListView better with his rigorous quality assurance procedures and code analysis.

+ +

Contact us today

+ +

Get in touch using the contact form in <%= link_to "Support", "/support" %> section, or directly at support (at) componentowl (dot) com.

+ +

ComponentSource Author

+

We are certified ComponentSource author. ComponentSource is our authorized reseller.

<%= image_tag("Online-AuthorTierLogo.gif", :alt => "Online ComponentSource Author") %>

\ No newline at end of file diff --git a/db/import/static_pages/customer-service.erb b/db/import/static_pages/customer-service.erb new file mode 100644 index 0000000..9c2931e --- /dev/null +++ b/db/import/static_pages/customer-service.erb @@ -0,0 +1,346 @@ +

Resellers and Customer Service

+ +

Our Customer Services representatives speak English, French, German, Italian, Spanish, Japanese and Korean and are available to assist + with all your sales and technical queries. Call us free of charge from the countries listed below.

+ +<%= image_tag "CSLogo.gif", :alt => "ComponentSource.com" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CountryToll Free NumberAvailability (Mon - Fri Local Time)
<%= image_tag('countries/us.gif', :alt => "USA", :width => 16, :height => 11) %>USA(888) 850 991124 hour
<%= image_tag('countries/us.gif', :alt => "USA - Gov Sales", :width => 16, :height => 11) %>USA - Gov Sales(888) 850 996624 hour
<%= image_tag('countries/ca.gif', :alt => "Canada", :width => 16, :height => 11) %>Canada(888) 850 991124 hour
<%= image_tag('countries/gb.gif', :alt => "United Kingdom", :width => 16, :height => 11) %>United Kingdom0800 58111124 hour  
<%= image_tag('countries/ar.gif', :alt => "Argentina", :width => 16, :height => 11) %>Argentina0800 666 34845:00am-7:00pm
<%= image_tag('countries/au.gif', :alt => "Australia", :width => 16, :height => 11) %>Australia1 800 0 1529211:00am-7:00pm  EST
<%= image_tag('countries/at.gif', :alt => "Austria", :width => 16, :height => 11) %>Austria0800 281 7509:00am-5:30pm  CEST
<%= image_tag('countries/be.gif', :alt => "Belgium", :width => 16, :height => 11) %>Belgium0800 7 56039:00am-5:30pm  CEST
<%= image_tag('countries/br.gif', :alt => "Brazil", :width => 16, :height => 11) %>Brazil0800 891 64786:00am-7:00pm
<%= image_tag('countries/bg.gif', :alt => "Bulgaria", :width => 16, :height => 11) %>Bulgaria00800 115 444524 hour
<%= image_tag('countries/cl.gif', :alt => "Chile", :width => 16, :height => 11) %>Chile1230 020 68574:00am-6:00pm
<%= image_tag('countries/cn.gif', :alt => "China (North)", :width => 16, :height => 11) %>China (North)10800 481 16618:00am-4:00pm
<%= image_tag('countries/cn.gif', :alt => "China (South)", :width => 16, :height => 11) %>China (South)10800 813 1594 8:00am-4:00pm
<%= image_tag('countries/co.gif', :alt => "Colombia", :width => 16, :height => 11) %>Colombia01800 710 20433:00am-5:00pm
<%= image_tag('countries/hr.gif', :alt => "Croatia", :width => 16, :height => 11) %>Croatia0800 2225524 hour
<%= image_tag('countries/cz.gif', :alt => "Czech Republic", :width => 16, :height => 11) %>Czech Republic800 143 31324 hour
<%= image_tag('countries/dm.gif', :alt => "Denmark", :width => 16, :height => 11) %>Denmark80 88 17 2024 hour
<%= image_tag('countries/ec.gif', :alt => "Ecuador", :width => 16, :height => 11) %>Ecuador1 800 010 5623:00am-5:00pm
<%= image_tag('countries/fi.gif', :alt => "Finland", :width => 16, :height => 11) %>Finland0800 1 1800224 hour
<%= image_tag('countries/fr.gif', :alt => "France", :width => 16, :height => 11) %>France0800 90 92 629:00am-5:30pm  CEST
<%= image_tag('countries/de.gif', :alt => "Germany", :width => 16, :height => 11) %>Germany0800 186 07 069:00am-5:30pm  CEST
<%= image_tag('countries/gr.gif', :alt => "Greece", :width => 16, :height => 11) %>Greece00800 4412189124 hour 
<%= image_tag('countries/hk.gif', :alt => "Hong Kong", :width => 16, :height => 11) %>Hong Kong800 908 5818:00am-4:00pm
<%= image_tag('countries/hu.gif', :alt => "Hungary", :width => 16, :height => 11) %>Hungary06800 1667424 hour
<%= image_tag('countries/in.gif', :alt => "India", :width => 16, :height => 11) %>India000 800 44 01 45524 hour
<%= image_tag('countries/ie.gif', :alt => "Ireland", :width => 16, :height => 11) %>Ireland1 800 535 66124 hour
<%= image_tag('countries/il.gif', :alt => "Israel", :width => 16, :height => 11) %>Israel180 924 200324 hour 
<%= image_tag('countries/it.gif', :alt => "Italy", :width => 16, :height => 11) %>Italy800 7900469:00am-5:30pm  CEST
<%= image_tag('countries/jp.gif', :alt => "Japan", :width => 16, :height => 11) %>Japan0120 343 550 10:00am-6:00pm  JST
<%= image_tag('countries/mx.gif', :alt => "Mexico", :width => 16, :height => 11) %>Mexico01 800 681 15592:00am-4:00pm  CST
<%= image_tag('countries/nl.gif', :alt => "Netherlands", :width => 16, :height => 11) %>Netherlands0800 022 883224 hour  
<%= image_tag('countries/nz.gif', :alt => "New Zealand", :width => 16, :height => 11) %>New Zealand800 44918112:00pm-8:00pm
<%= image_tag('countries/no.gif', :alt => "Norway", :width => 16, :height => 11) %>Norway800 1 368524 hour 
<%= image_tag('countries/pa.gif', :alt => "Panama", :width => 16, :height => 11) %>Panama00 1 800 203 15873:00am-5:00pm
<%= image_tag('countries/pe.gif', :alt => "Peru", :width => 16, :height => 11) %>Peru0800 532883:00am-5:00pm
<%= image_tag('countries/pl.gif', :alt => "Poland", :width => 16, :height => 11) %>Poland00800 442 109224 hour 
<%= image_tag('countries/pt.gif', :alt => "Portugal", :width => 16, :height => 11) %>Portugal800 844 125 9:00am-10:00pm  WEST
<%= image_tag('countries/ru.gif', :alt => "Russia", :width => 16, :height => 11) %>Russia810 800 2251 104424 hour 
<%= image_tag('countries/sg.gif', :alt => "Singapore", :width => 16, :height => 11) %>Singapore800 810 21368:00am-4:00pm
<%= image_tag('countries/si.gif', :alt => "Slovenia", :width => 16, :height => 11) %>Slovenia0800 8029724 hour 
<%= image_tag('countries/za.gif', :alt => "South Africa", :width => 16, :height => 11) %>South Africa0800 99 108824 hour  
<%= image_tag('countries/kr.gif', :alt => "South Korea", :width => 16, :height => 11) %>South Korea00798 14 800 6332 10:00am-6:00pm
<%= image_tag('countries/es.gif', :alt => "Spain", :width => 16, :height => 11) %>Spain900 93 89269:00am-11:00pm  CEST
<%= image_tag('countries/se.gif', :alt => "Sweden", :width => 16, :height => 11) %>Sweden020 794 98924 hour  
<%= image_tag('countries/ch.gif', :alt => "Switzerland", :width => 16, :height => 11) %>Switzerland0800 83 53059:00am-5:30pm  CEST
<%= image_tag('countries/tw.gif', :alt => "Taiwan", :width => 16, :height => 11) %>Taiwan00 801 8143138:00am-4:00pm
<%= image_tag('countries/tr.gif', :alt => "Turkey", :width => 16, :height => 11) %>Turkey00 800 4491 361724 hour 
<%= image_tag('countries/uy.gif', :alt => "Uruguay", :width => 16, :height => 11) %>Uruguay000 401 902 385:00am-7:00pm
<%= image_tag('countries/ve.gif', :alt => "Venezuela", :width => 16, :height => 11) %>Venezuela0 800 100 91033:30am-5:30pm
+ +
+
+

US Headquarters

+ ComponentSource
+ 650 Claremore Professional Way
+ Suite 100
+ Woodstock GA 30188-5188
+ USA


+ Tel: +1 770 250 6100
+ Fax: +1 770 250 6199 +
+
+

US Headquarters

+ ComponentSource
+ 30 Greyfriars Road
+ Reading, Berkshire
+ RG1 1PE
+ United Kingdom


+ Tel: +44 118 958 1111
+ Fax: +44 118 958 9999 +
+
+

Asia-Pac Headquarters

+ ComponentSource
+ 3F Kojimachi Square Bldg
+ 3-3 Kojimachi Chiyoda-ku
+ Tokyo
+ Japan
+ 102-0083

+ Tel: +81 3 3237 0281
+ Fax: +81 3 3237 0282 +
+
\ No newline at end of file diff --git a/db/import/static_pages/disclaimer.erb b/db/import/static_pages/disclaimer.erb new file mode 100644 index 0000000..0bcf062 --- /dev/null +++ b/db/import/static_pages/disclaimer.erb @@ -0,0 +1,21 @@ +

The information contained in this website is for general information purposes only. The information is provided by Jiri Novotny and +Dextronet.com and while we endeavor to keep the information up to date and correct, we make no representations or warranties of any kind, +express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, +products, services, or related graphics contained on the website for any purpose. Any reliance you place on such information is therefore +strictly at your own risk. All content is provided "as is".

+ +

In no event will we be liable for any loss or damage including without limitation, indirect or consequential loss or damage, or any loss +or damage whatsoever arising from loss of data or profits arising out of, or in connection with, the use of this website.

+ +

Through this website you are able to link to other websites which are not under our control. We have no control over the nature, content +and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed +within them.

+ +

Every effort is made to keep the website up and running smoothly. However, Jiri Novotny and Dextronet.com take no responsibility for, +and will not be liable for, the website or any related products or services being temporarily unavailable due to technical issues +beyond our control.

+ +

All software offered by Jiri Novotny and Dextronet.com comes with End User License Agreement that you are bound to accept and agree +to in order to install and use the software.

+ +

This website and its content is copyright of Jiri Novotny and Dextronet.com © Jiri Novotny and Dextronet.com 2005-2010. All rights reserved.

\ No newline at end of file diff --git a/db/import/static_pages/eula.erb b/db/import/static_pages/eula.erb new file mode 100644 index 0000000..aebb62e --- /dev/null +++ b/db/import/static_pages/eula.erb @@ -0,0 +1 @@ +

EULA

\ No newline at end of file diff --git a/db/import/static_pages/home-blv20.erb b/db/import/static_pages/home-blv20.erb new file mode 100644 index 0000000..2495b87 --- /dev/null +++ b/db/import/static_pages/home-blv20.erb @@ -0,0 +1,108 @@ +

Better ListView is compatible with:

+ +
+
    + +
  • Visual Studio 2005, 2008, 2010, and newer.
  • +
  • C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
  • +
+ +
    + +
  • .NET 2, .NET 3, .NET 3.5, .NET 4, and newer.
  • +
  • Windows 2000, XP, 2003, Vista, 7, and newer, both 32-bit and 64-bit.
  • +
+
+ +
+ +
+

Better ListView advantages:

+ +
    +
  • Single small DLL file (less than 250kB when compressed).
  • +
  • Easy deployment (xcopy). No dependencies. No installation.
  • +
  • Royalty-free distribution. No runtime licensing.
  • +
  • Written from scratch in pure managed code.
  • +
  • Lightning fast, optimized for 100.000+ items.
  • +
  • Minimum learning needed. Very similar to regular .NET ListView control.
  • +
  • User-friendly and developer-friendly.
  • +
  • No limits of the regular Microsoft .NET ListView control bundled with Visual Studio!
  • +
  • Tested by thousands of users world-wide.
  • +
  • Guaranteed continued support and development. We use Better ListView ourselves in our + popular and successful desktop products, like + <%= link_to 'Swift To-Do List', 'http://www.dextronet.com/swift-to-do-list-software', :class => "nowrap" %>.
  • +
  • Well documented, intuitive method/properties names.
  • +
  • Always looks great. Always fully uses the current Windows theme, including Aero support.
  • +
  • Enterprise source code licenses available.
  • +
  • Well documented.
  • +
  • Fast 24-hour or faster support.
  • +
+
+ +
+

BetterListView extra features:

+ +

Better ListView has hundreds of extra features, compared to the regular .NET ListView control. + Plus, it removes all its limitations and bugs. Some of the most notable extra features include:

+ +
    +
  • Hierarchical items. Supports sub-items like in the tree view control.
  • +
  • Thumbnails view.
  • +
  • Serialization – XML and Binary
  • +
  • Save/load Better ListView content into XML or binary, string or file, in just 1 line of code.
  • +
  • Inbuilt drag & drop reordering (with insertion mark indicator).
  • +
  • Sub-item images
  • +
  • Double-buffered and flicker-free.
  • +
  • Highly customizable and flexible.
  • +
  • Multi-column sorting.
  • +
  • Inbuilt sorting (zero code needed).
  • +
  • Checkboxes in all views, 3-state support
  • +
  • Better grouping – preserves item order, customizable group headers look and behavior, + collapsible, image support, context menu support, focusable, etc.
  • +
  • Embedded editing controls, support for custom controls.
  • +
  • Many other useful features - <%= link_to 'see more Better ListView features', featured_product %>.
  • +
+
+
+ +
+
“Better List View is awesome.” – Daniel N.
+
+ +
+
+

Why is Better ListView the best ListView
replacement component for .NET (C#, VB)?

+ +

To put it simply, there is nothing like Better ListView out there. Nothing.

+ +

Better ListView has been designed as a component that can easily replace the original + ListView control supplied with .NET.

+ +

There is virtually no learning needed. It’s just intuitive.

+ +

Better ListView looks native and always fully utilizes the current system theme (so there is + no weird inconsistent look), and it also behaves exactly like it should. We’ve modeled it after + the original list view component and the list view used in Windows Explorer – everyone already + knows how to use it. It fully leverages the previous user knowledge.

+ +

We put extreme attention to details. All the little quirks and nuances that drive us crazy when + it comes to components of many smaller vendors are resolved in Better ListView. You will be + amazed how flexible and customizable it is, and how great it feels to use it. The users of your + application will feel right at home.

+ +

And most importantly, Better ListView is packed full of great features.

+ +

If you are wondering why we created Better ListView, you can read + <%= link_to 'our story', story_path(featured_product) %>.

+ +

And by the way, Better ListView comes with awesome samples gallery. Download and install + the trial package right now and see for yourself what Better ListView can do:

+
+ +
+
Better ListView really is better - it kills the standard!
+ Mitchell V. +
+ +
\ No newline at end of file diff --git a/db/import/static_pages/home.erb b/db/import/static_pages/home.erb new file mode 100644 index 0000000..1cafcc4 --- /dev/null +++ b/db/import/static_pages/home.erb @@ -0,0 +1,107 @@ +

Why is Better ListView the best ListView replacement component for .NET?

+

Let’s face it – the regular .NET ListView control included with Visual Studio is not very good and other alternatives are usually complex overkills. + Better ListView is just what you are looking for. It is the ideal replacement component for .NET ListView.

+ +
<%= link_to(t('txt.home.see_comparison_table'), features_path(featured_product)) %>
+ +

Fast, light-weight, pure managed code

+
    +
  1. Written from scratch in pure managed C# code – does not inherit from regular ListView
  2. +
  3. No dependencies
  4. +
  5. Easy deployment - single DLL binary that has just 80 kB when compressed in a ZIP archive
  6. +
  7. 100% compatible with .NET 2.0 or higher
  8. +
  9. Lightning fast. Optimized for 100.000+ items
  10. +
+ +

Fixed all bugs and issues related to regular .NET ListView control

+

Since we’ve written the whole control from scratch and it does not inherit from the regular Microsoft .NET ListView component, + the original ListView bugs are not present.

+

Furthermore, we’ve fixed all issues and some limitations related to the regular .NET ListView control, especially incorrect behavior and non-standard + implementation of many features (selections, drag & drop, checkboxes, etc).

+

Surprisingly, .NET ListView does not support complex data binding. This forces developers to write additional code for populating and + updating the control. Better ListView, however, has the ability just like the DataGrid control – one can simply bound any IList, DataSet, + DataTable and several other types directly to Better ListView and left all the management on .NET internals.

+ +

Better drag & drop support:

+
    +
  1. Insertion mark for inner reordering of items helps users preview the action
  2. +
  3. Auto-scroll while reordering items added
  4. +
+ +

Better column headers:

+
    +
  1. Columns can be shown in all layouts (not just Details)
  2. +
  3. Column headers have their own context menu
  4. +
  5. Auto-scroll when reordering column headers added
  6. +
+ +

Better sorting:

+
    +
  1. Inbuilt sorting (zero code needed)
  2. +
  3. Multi-column sort supported (use Shift+Click to add additional columns to sort)
  4. +
  5. Ability to create custom comparer
  6. +
+ +
+
<%= product_image(1) %>
+
+ +

Images support:

+
    +
  1. Each sub-item can have its own image
  2. +
  3. Use both ImageList control or individual images
  4. +
  5. Supports images of all sizes
  6. +
  7. Can automatically resize images nicely if needed (no pixelated horrors!)
  8. +
  9. Column header images are supported
  10. +
+ +

Better checkboxes:

+
    +
  1. Checkboxes can be used in all layouts (not just Details)
  2. +
  3. Fixed behavior. Checkboxes behave as expected – this makes Better ListView user friendly, compared to regular ListView.
  4. +
  5. Three-state checkboxes supported
  6. +
+ +
+
<%= product_image(2) %>
+
+ +

Looks and feels great

+
    +
  1. Better ListView always fully utilizes the current Windows theme
  2. +
  3. Double-buffered and flicker-free
  4. +
+ +

Fixed bugs and wrong behavior of regular .NET ListView

+

The regular ListView has various obscure bugs (like events firing twice) and non-standard implementation of behavior in many cases. We’ve fixed all the bugs, + and made it to always behave as expected. See more below.

+ +

User friendly:

+

Leverage the user knowledge of Windows Explorer ListView. The ListView in Windows Explorer is a great model, because every Windows user already + knows how it works and how to use it. Unfortunately, the regular .NET ListView deviates from this behavior, and is thus not user friendly. Better Listview + replicates the correct standard behavior of Windows Explorer ListView whenever possible. Better ListView always works as expected.

+ +

Developer friendly:

+

BetterListview can be used just like the common ListView. All the method names and property names are the same whenever possible. If you know + how to use the common ListView, BetterListview will require nearly no learning on your side. Better ListView is a true pragmatic choice — + skip the learning time, and focus on development.

+ +

Powerful, flexible, customizable:

+

Advanced features like super powerful HitTest and ability to have owner-drawn item are supported. You might be surprised by all the things that + are possible to do with Better ListView.

+ +

Guaranteed supported and continued development

+

Better ListView is developed as a joint-venture of two software companies that use it in their flagship products (Swift To-Do List and ImagingShop), used + by thousands of users daily. This is your guarantee that it will be supported and developed in the future.

+ +

Tested in real world applications by thousands of users

+

Because Better ListView is used in professional consumer software applications - Swift To-Do List and ImagingShop, thousands of users work with it every day. + Although we do unit tests, and do thorough inhouse testing, this is your true bullet-proof guarantee that it is tested thoroughly + in the real world.

+ +

Other nice-to-have and might-come-handy features:

+
    +
  1. Customizable searching by typing
  2. +
  3. Ability to set custom size for items in all layouts
  4. +
  5. Any element of the control can be customized with properties and owner-drawing
  6. +
\ No newline at end of file diff --git a/db/import/static_pages/privacy-policy.erb b/db/import/static_pages/privacy-policy.erb new file mode 100644 index 0000000..32085ed --- /dev/null +++ b/db/import/static_pages/privacy-policy.erb @@ -0,0 +1,46 @@ +

Our Commitment To Privacy

+ +

Your privacy is important to us. To better protect your privacy we provide this notice explaining our online information practices and the choices you can make + about the way your information is collected and used. You retain rights to all your information and data.

+ +

Your credit card information is used by our BMT Micro ecommerce partner only to process your order and it is not stored in any way and never viewed by us + or available to us.

+ +

The Information We Collect

+ +

We collect only the necessary contact information when you contact us and personal information provided by you when you purchase a product from us.

+ + +

The Way We Use Information

+ +

We do not share your personal information with outside parties except to the extent necessary to complete your order.

+ +

The information provided by you is used only to process your order and/or to inform you about new products and product updates. + You can opt-out from these email updates.

+ +

We use non-identifying and aggregate information to better design our website and products.

+ +

When you contact us, we might use a part of the email message in our promotion materials as a testimonial, without publishing your full name. + You have to right to decline any such use and we will promptly remove any such materials in 24 hours after your written request.

+ +

We reserve the right to publish the name and logo of your company in the list of our customers. We will promptly remove the name of your company + in 24 hours after your written request.

+ +

Finally, we never use or share the personally identifiable information provided to us online in ways unrelated to the ones described above without + also providing you an opportunity to opt-out or otherwise prohibit such unrelated uses.

+ + +

Our Commitment To Data Security

+ +

To prevent unauthorized access, maintain data accuracy, and ensure the correct use of information, we have put in place appropriate physical, + electronic, and managerial procedures to safeguard and secure the information we collect online.

+ + +

How You Can Access Or Correct Your Information

+ +

You can access or correct all your personally identifiable information that we collect online and maintain by contacting us.

+ + +

How To Contact Us

+ +

Should you have other questions or concerns about these privacy policies, please contact us via our <%= link_to("support form", "/support") %>.

\ No newline at end of file diff --git a/db/import/static_pages/static_pages.csv b/db/import/static_pages/static_pages.csv new file mode 100644 index 0000000..3855ae8 --- /dev/null +++ b/db/import/static_pages/static_pages.csv @@ -0,0 +1,9 @@ +"code","url_param","name" +"about","about-us","About" +"home","home","Home" +"home-blv20","home-blv20","Home BLV 2.0" +"disclaimer","disclaimer","Disclaimer" +"privacy-policy","privacy-policy","Privacy Policy" +"eula","eula","EULA" +"press-resources","press-resources","Press Resources" +"customer-service","customer-service","Resellers and Customer Service" diff --git a/db/migrate/20090713163655_initial_migration.rb b/db/migrate/20090713163655_initial_migration.rb new file mode 100644 index 0000000..4088143 --- /dev/null +++ b/db/migrate/20090713163655_initial_migration.rb @@ -0,0 +1,332 @@ +class InitialMigration < ActiveRecord::Migration + def self.up + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :login, :null => false + t.string :email, :null => false + t.string :crypted_password, :null => false + t.string :password_salt, :null => false + t.string :persistence_token, :null => false + t.string :single_access_token, :null => false + t.string :perishable_token, :null => false + + t.integer :login_count, :null => false, :default => 0 + t.integer :failed_login_count, :null => false, :default => 0 + t.datetime :last_request_at + t.datetime :current_login_at + t.datetime :last_login_at + t.string :current_login_ip + t.string :last_login_ip + + t.timestamps + t.datetime :deleted_at + end + + create_table :allowed_values do |t| + t.string :type + t.string :code + t.string :value + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :product_categories do |t| + t.string :code + t.string :name + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + add_index(:product_categories, :code, :unique => true) + + create_table :products do |t| + t.integer :product_category_id + t.string :code + t.string :internal_code + t.string :file + t.string :name + t.string :label + t.boolean :promoted, :default => false + t.boolean :homepage, :default => false + t.decimal :price, :scale => 2, :precision => 10 + t.decimal :regular_price, :scale => 2, :precision => 10 + t.integer :bmtID + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + add_index(:products, :code, :unique => true) + add_index(:products, :internal_code, :unique => true) + + create_table :products_promotions, :id => false, :primary_key => [:product_id, :promotion_id] do |t| + t.integer :product_id + t.integer :promotion_id, :references => :allowed_values + end + + create_table :product_descriptions do |t| + t.integer :product_description_type_id, :references => :allowed_values + t.integer :product_id + t.string :title + t.text :value + + t.timestamps + end + + create_table :product_pages do |t| + t.integer :parent_id, :references => :product_pages + t.integer :product_id + t.boolean :tab, :default => false + t.string :code + t.string :name + t.text :html + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :product_offers do |t| + t.integer :product_id + t.integer :related_product_id, :references => :products + t.integer :bmtID + t.string :name + t.text :description + t.decimal :price, :scale => 2, :precision => 10 + t.datetime :begins_at + t.datetime :expires_at + t.integer :position + + t.timestamps + end + + create_table :product_editions do |t| + t.integer :product_id + t.string :code + t.string :internal_code + t.integer :bmtID + t.string :name + t.text :description + t.decimal :price, :scale => 2, :precision => 10 + t.decimal :regular_price, :scale => 2, :precision => 10 + t.boolean :initial, :default => false + t.integer :position + + t.timestamps + end + + add_index(:product_editions, :internal_code, :unique => true) + + create_table :product_discounts do |t| + t.integer :product_id + t.integer :product_edition_id + t.string :discount_type + t.string :discount_code + t.decimal :price, :scale => 2, :precision => 10 + + t.timestamps + end + + create_table :product_upgrades do |t| + t.integer :product_id + t.integer :product_edition_id + t.string :upgrade_type + t.string :bmtID + t.decimal :price, :scale => 2, :precision => 10 + + t.timestamps + end + + create_table :product_url_params do |t| + t.integer :product_id + t.integer :url_destination_id, :references => :allowed_values + t.string :url_param + t.boolean :default, :default => false + + t.timestamps + end + + create_table :releases do |t| + t.integer :product_id + t.string :version + t.integer :build + t.text :description + t.text :changelog + t.date :date + t.datetime :postpone_till + + t.timestamps + end + + create_table :testimonials do |t| + t.integer :product_id + t.text :text + t.string :author + t.boolean :hidden, :default => false + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :testimonial_positions do |t| + t.integer :testimonial_id + t.integer :testimonial_location_id, :references => :allowed_values + t.integer :product_id + t.text :extract + t.integer :position + end + + create_table :product_images do |t| + t.integer :product_id + t.string :image + t.string :alt + t.string :label + + t.timestamps + end + + create_table :screenshots do |t| + t.integer :product_id + t.string :image + t.string :alt + t.string :label + t.integer :position + + t.timestamps + end + + create_table :product_icons do |t| + t.integer :product_id + t.string :icon + t.integer :size + + t.timestamps + end + + create_table :latests do |t| + t.string :title + t.string :link + t.text :body + t.date :date + + t.timestamps + t.datetime :deleted_at + end + + create_table :faq_categories do |t| + t.integer :product_id + t.string :url_param + t.string :name + t.string :description + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :faqs do |t| + t.integer :faq_category_id + t.string :url_param + t.text :question + t.text :answer + t.boolean :featured, :default => false + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :support_requests do |t| + t.integer :support_request_origin_id, :references => :allowed_values + t.string :name + t.string :email + t.integer :product_id + t.string :subject + t.text :message + t.boolean :mail_sent, :default => false + + t.timestamps + t.datetime :deleted_at + end + + create_table :volume_discounts do |t| + t.integer :from + t.integer :to + t.integer :discount + + t.timestamps + end + + create_table :download_logs do |t| + t.integer :product_id + t.text :request + t.timestamp :created_at + end + + create_table :meta_tags do |t| + t.string :path + t.string :title + t.text :keywords + t.text :description + + t.timestamps + end + + create_table :sitemap_titles do |t| + t.string :path + t.string :title + + t.timestamps + end + + create_table :static_pages do |t| + t.string :code + t.string :url_param + t.string :name + t.text :html + + t.timestamps + t.datetime :deleted_at + end + + add_index(:static_pages, :code, :unique => true) + + end + + def self.down + drop_table :static_pages + drop_table :sitemap_titles + drop_table :meta_tags + drop_table :download_logs + drop_table :volume_discounts + drop_table :support_requests + drop_table :faqs + drop_table :faq_categories + drop_table :latests + drop_table :product_icons + drop_table :product_screenshots + drop_table :product_images + drop_table :testimonial_positions + drop_table :testimonials + drop_table :releases + drop_table :product_url_params + drop_table :product_upgrades + drop_table :product_discounts + drop_table :product_editions + drop_table :product_offers + drop_table :product_pages + drop_table :product_descriptions + drop_table :products_promotions + drop_table :products + drop_table :product_categories + drop_table :allowed_values + drop_table :users + end +end \ No newline at end of file diff --git a/db/migrate/20100509112728_add_internal_code_to_product_offer.rb b/db/migrate/20100509112728_add_internal_code_to_product_offer.rb new file mode 100644 index 0000000..fecb35c --- /dev/null +++ b/db/migrate/20100509112728_add_internal_code_to_product_offer.rb @@ -0,0 +1,9 @@ +class AddInternalCodeToProductOffer < ActiveRecord::Migration + def self.up + add_column :product_offers, :internal_code, :string + end + + def self.down + remove_column :product_offers, :internal_code + end +end diff --git a/db/migrate/20100524184938_create_page_includes.rb b/db/migrate/20100524184938_create_page_includes.rb new file mode 100644 index 0000000..7917509 --- /dev/null +++ b/db/migrate/20100524184938_create_page_includes.rb @@ -0,0 +1,15 @@ +class CreatePageIncludes < ActiveRecord::Migration + def self.up + create_table :page_includes do |t| + t.string :path + t.string :description + t.text :inklude + + t.timestamps + end + end + + def self.down + drop_table :page_includes + end +end diff --git a/db/migrate/20100603183347_change_product_upgrades_relationships.rb b/db/migrate/20100603183347_change_product_upgrades_relationships.rb new file mode 100644 index 0000000..7eca61b --- /dev/null +++ b/db/migrate/20100603183347_change_product_upgrades_relationships.rb @@ -0,0 +1,16 @@ +class ChangeProductUpgradesRelationships < ActiveRecord::Migration + def self.up + change_table :product_upgrades do |t| + t.remove :product_id + t.integer :upgradable_id, :references => nil + t.integer :upgradable_to_id, :references => nil + t.string :upgradable_type, :default => 'ProductEdition' + t.string :upgradable_to_type + end + ProductUpgrade.update_all(["upgradable_id = product_edition_id"]) + remove_column :product_upgrades, :product_edition_id + end + + def self.down + end +end diff --git a/db/migrate/20100629062929_add_newsletter_engine.rb b/db/migrate/20100629062929_add_newsletter_engine.rb new file mode 100644 index 0000000..6076621 --- /dev/null +++ b/db/migrate/20100629062929_add_newsletter_engine.rb @@ -0,0 +1,59 @@ +class AddNewsletterEngine < ActiveRecord::Migration + def self.up + + create_table :newsletter_allowed_values do |t| + t.string :type + t.string :code + t.string :value + t.integer :position + + t.timestamps + t.datetime :deleted_at + end + + create_table :contacts do |t| + t.string :email + t.string :first_name + t.string :last_name + t.string :country + + t.integer :active_subscriptions, :default => 0 + + t.timestamps + t.datetime :deleted_at + end + + create_table :subscription_lists do |t| + t.integer :subscription_list_type_id, :references => :newsletter_allowed_values + t.integer :product_id + t.string :name + + t.timestamps + t.datetime :deleted_at + end + + create_table :subscriptions do |t| + t.integer :subscription_list_id + t.integer :contact_id + t.datetime :started_at + t.datetime :ended_at + t.boolean :active, :default => true + + t.timestamps + t.datetime :deleted_at + end + + create_table :subscription_list_types_subscription_locations, :id => false, :primary_key => [:subscription_list_type_id, :subscription_location_id] do |t| + t.integer :subscription_list_type_id, :references => :newsletter_allowed_values + t.integer :subscription_location_id, :references => :newsletter_allowed_values + end + + end + + def self.down + drop_table :subscription_list_types_subscription_locations + drop_table :subscriptions + drop_table :subscription_lists + drop_table :contacts + end +end \ No newline at end of file diff --git a/db/migrate/20100630072113_add_location_to_subscription.rb b/db/migrate/20100630072113_add_location_to_subscription.rb new file mode 100644 index 0000000..64e1d90 --- /dev/null +++ b/db/migrate/20100630072113_add_location_to_subscription.rb @@ -0,0 +1,9 @@ +class AddLocationToSubscription < ActiveRecord::Migration + def self.up + add_column :subscriptions, :subscription_location_id, :integer, :references => :newsletter_allowed_values + end + + def self.down + remove_column :subscriptions, :subscription_location_id + end +end diff --git a/db/migrate/20100728060310_upload_column_to_paperclip.rb b/db/migrate/20100728060310_upload_column_to_paperclip.rb new file mode 100644 index 0000000..c900e7f --- /dev/null +++ b/db/migrate/20100728060310_upload_column_to_paperclip.rb @@ -0,0 +1,39 @@ +class UploadColumnToPaperclip < ActiveRecord::Migration + include UploadColumnMigration + + def self.up + + add_paperclip_fields :products, :setup_file + Product.reset_column_information + Product.all.each do |product| + populate_paperclip_from_upload_column(product, File.join(Rails.root, "public", "files", "downloads"), product[:file], 'setup_file') + end + + add_paperclip_fields :product_icons, :icon + ProductIcon.reset_column_information + ProductIcon.all.each do |icon| + ext = icon[:icon].split(".").last + populate_paperclip_from_upload_column(icon, File.join(Rails.root, "public", "files", "icons"), "#{icon.product.code}_#{icon.size}.#{ext}", 'icon') + end + + add_paperclip_fields :screenshots, :image + Screenshot.reset_column_information + Screenshot.all.each do |screenshot| + populate_paperclip_from_upload_column(screenshot, File.join(Rails.root, "public", "files", "images"), screenshot[:image], 'image') + end + + add_paperclip_fields :product_images, :image + ProductImage.reset_column_information + ProductImage.all.each do |product_image| + populate_paperclip_from_upload_column(product_image, File.join(Rails.root, "public", "files", "images"), product_image[:image], 'image') + end + + end + + def self.down + remove_paperclip_fields :products, :setup_file + remove_paperclip_fields :product_icons, :icon + remove_paperclip_fields :screenshots, :image + remove_paperclip_fields :product_images, :image + end +end diff --git a/db/migrate/20100808085226_setup_files_to_cloud_front.rb b/db/migrate/20100808085226_setup_files_to_cloud_front.rb new file mode 100644 index 0000000..b2e059f --- /dev/null +++ b/db/migrate/20100808085226_setup_files_to_cloud_front.rb @@ -0,0 +1,18 @@ +class SetupFilesToCloudFront < ActiveRecord::Migration + + include UploadColumnMigration + + def self.up + setup_files_path = File.join(Rails.root, "public", "system", "setup_files") + puts "Uploading setup files to CloudFront... (this may take a while)" + Product.all.each do |product| + if product.setup_file.instance_variable_get(:@storage).to_s == 's3' && product.setup_file.file? + puts "Uploading #{product.setup_file.original_filename}..." + upload_to_s3(product.setup_file, File.join(setup_files_path, product.id.to_s, product.setup_file.original_filename), product.setup_file.path(:original)) + end + end + end + + def self.down + end +end diff --git a/db/migrate/20100818082747_create_pad_values.rb b/db/migrate/20100818082747_create_pad_values.rb new file mode 100644 index 0000000..dc21b04 --- /dev/null +++ b/db/migrate/20100818082747_create_pad_values.rb @@ -0,0 +1,22 @@ +class CreatePadValues < ActiveRecord::Migration + include PadImport + + def self.up + create_table :pad_values do |t| + t.integer :product_id, :references => :products + t.string :key + t.text :value + + t.timestamps + end + + puts "Migrating existing PAD files to database..." + Product.all.each do |product| + import_pad(product) if product.setup_file.file? + end + end + + def self.down + drop_table :pad_values + end +end diff --git a/db/migrate/20100819135437_create_articles.rb b/db/migrate/20100819135437_create_articles.rb new file mode 100644 index 0000000..2f3d5d2 --- /dev/null +++ b/db/migrate/20100819135437_create_articles.rb @@ -0,0 +1,23 @@ +class CreateArticles < ActiveRecord::Migration + def self.up + create_table :articles do |t| + t.string :title, :null => false + t.string :slug, :null => false + t.text :content, :null => false + t.date :date, :null => false + t.string :status, :default => 'draft' + t.string :keywords + t.text :custom_subtemplate + t.integer :screenshot_id + + t.timestamps + t.datetime :deleted_at + end + + add_index(:articles, :slug, :unique => true) + end + + def self.down + drop_table :articles + end +end diff --git a/db/migrate/20100819140017_create_subtemplates.rb b/db/migrate/20100819140017_create_subtemplates.rb new file mode 100644 index 0000000..6694554 --- /dev/null +++ b/db/migrate/20100819140017_create_subtemplates.rb @@ -0,0 +1,15 @@ +class CreateSubtemplates < ActiveRecord::Migration + def self.up + create_table :subtemplates do |t| + t.integer :subtemplate_type_id, :references => :allowed_values + t.string :name + t.text :content + + t.timestamps + end + end + + def self.down + drop_table :subtemplates + end +end diff --git a/db/migrate/20101010101010_add_announce_to_release.rb b/db/migrate/20101010101010_add_announce_to_release.rb new file mode 100644 index 0000000..8ba1794 --- /dev/null +++ b/db/migrate/20101010101010_add_announce_to_release.rb @@ -0,0 +1,9 @@ +class AddAnnounceToRelease < ActiveRecord::Migration + def self.up + add_column :releases, :announce, :boolean, :default => true + end + + def self.down + remove_column :releases, :announce + end +end diff --git a/db/migrate/20101010145127_customer_tracking.rb b/db/migrate/20101010145127_customer_tracking.rb new file mode 100644 index 0000000..cef3ffe --- /dev/null +++ b/db/migrate/20101010145127_customer_tracking.rb @@ -0,0 +1,74 @@ +class CustomerTracking < ActiveRecord::Migration + def self.up + create_table :customers do |t| + t.string :first_name + t.string :last_name + t.string :email + t.string :company + t.text :customer_attributes + + t.timestamps + t.datetime :deleted_at + end + + create_table :orders do |t| + t.integer :customer_id + t.integer :orderable_id, :references => nil + t.string :orderable_type + t.text :license_key + t.text :order_attributes + + t.timestamps + t.datetime :deleted_at + end + + create_table :visitors do |t| + t.string :trackable_number + t.string :user_agent + + t.timestamps + t.datetime :deleted_at + end + + create_table :customers_visitors, :id => false, :primary_key => [:customer_id, :visitor_id] do |t| + t.integer :customer_id + t.integer :visitor_id + end + + create_table :visitor_tracks do |t| + t.integer :visitor_id + t.text :track + t.integer :trackable_id, :references => nil + t.string :trackable_type + t.integer :source_type_id, :references => :allowed_values + t.string :source + t.string :url + t.string :keywords + t.string :targetable + t.boolean :download, :default => false + t.boolean :checkout, :default => false + t.boolean :order, :default => false + + t.timestamps + end + + + create_table :redirects do |t| + t.integer :source_type_id, :references => :allowed_values + t.string :name + t.string :redirect_path, :null => false + t.string :redirect_to, :null => false + + t.timestamps + end + end + + def self.down + drop_table :customers + drop_table :orders + drop_table :visitors + drop_table :customers_visitors + drop_table :visitor_tracks + drop_table :redirects + end +end diff --git a/db/migrate/20101102185849_create_autoresponders.rb b/db/migrate/20101102185849_create_autoresponders.rb new file mode 100644 index 0000000..efbf0ac --- /dev/null +++ b/db/migrate/20101102185849_create_autoresponders.rb @@ -0,0 +1,24 @@ +class CreateAutoresponders < ActiveRecord::Migration + def self.up + create_table :autoresponders do |t| + t.integer :subscription_list_id, :null => false + t.string :subject, :null => false + t.text :message, :null => false + t.integer :delay, :default => 0 + + t.timestamps + t.datetime :deleted_at + end + + create_table :sent_autoresponders do |t| + t.integer :autoresponder_id, :null => false + t.integer :contact_id, :null => false + t.datetime :sent_at + end + end + + def self.down + drop_table :autoresponders + drop_table :sent_autoresponders + end +end diff --git a/db/migrate/20101103125852_create_emails.rb b/db/migrate/20101103125852_create_emails.rb new file mode 100644 index 0000000..8ad8a40 --- /dev/null +++ b/db/migrate/20101103125852_create_emails.rb @@ -0,0 +1,15 @@ +class CreateEmails < ActiveRecord::Migration + def self.up + create_table :emails do |t| + t.column :from, :string + t.column :to, :string + t.column :last_send_attempt, :integer, :default => 0 + t.column :mail, :text + t.column :created_on, :datetime + end + end + + def self.down + drop_table :emails + end +end diff --git a/db/migrate/20101103181314_create_site_settings.rb b/db/migrate/20101103181314_create_site_settings.rb new file mode 100644 index 0000000..d239c3c --- /dev/null +++ b/db/migrate/20101103181314_create_site_settings.rb @@ -0,0 +1,13 @@ +class CreateSiteSettings < ActiveRecord::Migration + def self.up + create_table :site_settings do |t| + t.text :settings + + t.timestamps + end + end + + def self.down + drop_table :site_settings + end +end diff --git a/db/migrate/20101115150639_add_exclude_from_autoupdate_to_releases.rb b/db/migrate/20101115150639_add_exclude_from_autoupdate_to_releases.rb new file mode 100644 index 0000000..c670a93 --- /dev/null +++ b/db/migrate/20101115150639_add_exclude_from_autoupdate_to_releases.rb @@ -0,0 +1,9 @@ +class AddExcludeFromAutoupdateToReleases < ActiveRecord::Migration + def self.up + add_column :releases, :exclude_from_autoupdate, :boolean, :default => false + end + + def self.down + remove_column :releases, :exclude_from_autoupdate + end +end diff --git a/db/migrate/20101203131634_create_activations.rb b/db/migrate/20101203131634_create_activations.rb new file mode 100644 index 0000000..c08415b --- /dev/null +++ b/db/migrate/20101203131634_create_activations.rb @@ -0,0 +1,16 @@ +class CreateActivations < ActiveRecord::Migration + def self.up + create_table :activations do |t| + t.integer :order_id, :null => false + t.integer :build, :null => false + t.string :computer_id, :null => false, :references => nil + t.string :product + + t.timestamps + end + end + + def self.down + drop_table :activations + end +end diff --git a/db/migrate/20101207141645_add_attributes_to_activations.rb b/db/migrate/20101207141645_add_attributes_to_activations.rb new file mode 100644 index 0000000..c51672e --- /dev/null +++ b/db/migrate/20101207141645_add_attributes_to_activations.rb @@ -0,0 +1,13 @@ +class AddAttributesToActivations < ActiveRecord::Migration + def self.up + add_column :activations, :serial_key, :string + add_column :activations, :ip, :string + add_column :activations, :final_judgement, :text + end + + def self.down + remove_column :activations, :serial_key + remove_column :activations, :ip + remove_column :activations, :final_judgement + end +end diff --git a/db/migrate/20101207170801_create_failed_activations.rb b/db/migrate/20101207170801_create_failed_activations.rb new file mode 100644 index 0000000..5b881ef --- /dev/null +++ b/db/migrate/20101207170801_create_failed_activations.rb @@ -0,0 +1,19 @@ +class CreateFailedActivations < ActiveRecord::Migration + def self.up + create_table :failed_activations do |t| + t.string :serial_key + t.integer :build + t.string :computer_id, :references => nil + t.string :product + t.string :ip + t.string :result + t.text :final_judgement + + t.timestamps + end + end + + def self.down + drop_table :failed_activations + end +end diff --git a/db/migrate/20110730141514_create_comics.rb b/db/migrate/20110730141514_create_comics.rb new file mode 100644 index 0000000..dd82477 --- /dev/null +++ b/db/migrate/20110730141514_create_comics.rb @@ -0,0 +1,19 @@ +class CreateComics < ActiveRecord::Migration + def self.up + create_table :comics do |t| + t.date :publish_on, :null => false + t.string :image_file_name, :null => false + t.string :image_content_type + t.integer :image_file_size + t.datetime :image_updated_at + t.string :name + t.text :story + + t.timestamps + end + end + + def self.down + drop_table :comics + end +end diff --git a/db/migrate/20110802100859_add_number_to_comics.rb b/db/migrate/20110802100859_add_number_to_comics.rb new file mode 100644 index 0000000..8f54e04 --- /dev/null +++ b/db/migrate/20110802100859_add_number_to_comics.rb @@ -0,0 +1,16 @@ +class AddNumberToComics < ActiveRecord::Migration + def self.up + add_column :comics, :number, :integer, :null => false + + number = 1 + Comic.ordered.each do |comic| + comic.number = number + comic.save + number += 1 + end + end + + def self.down + remove_column :comics, :number + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..438057b --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,700 @@ +# This file is auto-generated from the current state of the database. Instead of editing this file, +# please use the migrations feature of Active Record to incrementally modify your database, and +# then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your database schema. If you need +# to create the application database on another system, you should be using db:schema:load, not running +# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20110802100859) do + + create_table "activations", :force => true do |t| + t.integer "order_id", :null => false + t.integer "build", :null => false + t.string "computer_id", :null => false + t.string "product" + t.datetime "created_at" + t.datetime "updated_at" + t.string "serial_key" + t.string "ip" + t.text "final_judgement" + end + + add_index "activations", ["order_id"], :name => "order_id" + + create_table "allowed_values", :force => true do |t| + t.string "type" + t.string "code" + t.string "value" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "articles", :force => true do |t| + t.string "title", :null => false + t.string "slug", :null => false + t.text "content", :null => false + t.date "date", :null => false + t.string "status", :default => "draft" + t.string "keywords" + t.text "custom_subtemplate" + t.integer "screenshot_id" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "articles", ["slug"], :name => "index_articles_on_slug", :unique => true + add_index "articles", ["screenshot_id"], :name => "screenshot_id" + + create_table "autoresponders", :force => true do |t| + t.integer "subscription_list_id", :null => false + t.string "subject", :null => false + t.text "message", :null => false + t.integer "delay", :default => 0 + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "autoresponders", ["subscription_list_id"], :name => "subscription_list_id" + + create_table "comics", :force => true do |t| + t.date "publish_on", :null => false + t.string "image_file_name", :null => false + t.string "image_content_type" + t.integer "image_file_size" + t.datetime "image_updated_at" + t.string "name" + t.text "story" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "number", :null => false + end + + create_table "contacts", :force => true do |t| + t.string "email" + t.string "first_name" + t.string "last_name" + t.string "country" + t.integer "active_subscriptions", :default => 0 + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "customers", :force => true do |t| + t.string "first_name" + t.string "last_name" + t.string "email" + t.string "company" + t.text "customer_attributes" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "customers_visitors", :id => false, :force => true do |t| + t.integer "customer_id" + t.integer "visitor_id" + end + + add_index "customers_visitors", ["customer_id"], :name => "customer_id" + add_index "customers_visitors", ["visitor_id"], :name => "visitor_id" + + create_table "download_logs", :force => true do |t| + t.integer "product_id" + t.text "request" + t.datetime "created_at" + end + + add_index "download_logs", ["product_id"], :name => "product_id" + + create_table "emails", :force => true do |t| + t.string "from" + t.string "to" + t.integer "last_send_attempt", :default => 0 + t.text "mail" + t.datetime "created_on" + end + + create_table "failed_activations", :force => true do |t| + t.string "serial_key" + t.integer "build" + t.string "computer_id" + t.string "product" + t.string "ip" + t.string "result" + t.text "final_judgement" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "faq_categories", :force => true do |t| + t.integer "product_id" + t.string "url_param" + t.string "name" + t.string "description" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "faq_categories", ["product_id"], :name => "product_id" + + create_table "faqs", :force => true do |t| + t.integer "faq_category_id" + t.string "url_param" + t.text "question" + t.text "answer" + t.boolean "featured", :default => false + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "faqs", ["faq_category_id"], :name => "faq_category_id" + + create_table "latests", :force => true do |t| + t.string "title" + t.string "link" + t.text "body" + t.date "date" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "meta_tags", :force => true do |t| + t.string "path" + t.string "title" + t.text "keywords" + t.text "description" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "newsletter_allowed_values", :force => true do |t| + t.string "type" + t.string "code" + t.string "value" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "orders", :force => true do |t| + t.integer "customer_id" + t.integer "orderable_id" + t.string "orderable_type" + t.text "license_key" + t.text "order_attributes" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "orders", ["customer_id"], :name => "customer_id" + + create_table "pad_values", :force => true do |t| + t.integer "product_id" + t.string "key" + t.text "value" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "pad_values", ["product_id"], :name => "product_id" + + create_table "page_includes", :force => true do |t| + t.string "path" + t.string "description" + t.text "inklude" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "product_categories", :force => true do |t| + t.string "code" + t.string "name" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "product_categories", ["code"], :name => "index_product_categories_on_code", :unique => true + + create_table "product_descriptions", :force => true do |t| + t.integer "product_description_type_id" + t.integer "product_id" + t.string "title" + t.text "value" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "product_descriptions", ["product_description_type_id"], :name => "product_description_type_id" + add_index "product_descriptions", ["product_id"], :name => "product_id" + + create_table "product_discounts", :force => true do |t| + t.integer "product_id" + t.integer "product_edition_id" + t.string "discount_type" + t.string "discount_code" + t.decimal "price", :precision => 10, :scale => 2 + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "product_discounts", ["product_id"], :name => "product_id" + add_index "product_discounts", ["product_edition_id"], :name => "product_edition_id" + + create_table "product_editions", :force => true do |t| + t.integer "product_id" + t.string "code" + t.string "internal_code" + t.integer "bmtID" + t.string "name" + t.text "description" + t.decimal "price", :precision => 10, :scale => 2 + t.decimal "regular_price", :precision => 10, :scale => 2 + t.boolean "initial", :default => false + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "product_editions", ["internal_code"], :name => "index_product_editions_on_internal_code", :unique => true + add_index "product_editions", ["product_id"], :name => "product_id" + + create_table "product_icons", :force => true do |t| + t.integer "product_id" + t.string "icon" + t.integer "size" + t.datetime "created_at" + t.datetime "updated_at" + t.string "icon_file_name" + t.string "icon_content_type" + t.integer "icon_file_size" + t.datetime "icon_updated_at" + end + + add_index "product_icons", ["product_id"], :name => "product_id" + + create_table "product_images", :force => true do |t| + t.integer "product_id" + t.string "image" + t.string "alt" + t.string "label" + t.datetime "created_at" + t.datetime "updated_at" + t.string "image_file_name" + t.string "image_content_type" + t.integer "image_file_size" + t.datetime "image_updated_at" + end + + add_index "product_images", ["product_id"], :name => "product_id" + + create_table "product_offers", :force => true do |t| + t.integer "product_id" + t.integer "related_product_id" + t.integer "bmtID" + t.string "name" + t.text "description" + t.decimal "price", :precision => 10, :scale => 2 + t.datetime "begins_at" + t.datetime "expires_at" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.string "internal_code" + end + + add_index "product_offers", ["product_id"], :name => "product_id" + add_index "product_offers", ["related_product_id"], :name => "related_product_id" + + create_table "product_pages", :force => true do |t| + t.integer "parent_id" + t.integer "product_id" + t.boolean "tab", :default => false + t.string "code" + t.string "name" + t.text "html" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "product_pages", ["parent_id"], :name => "parent_id" + add_index "product_pages", ["product_id"], :name => "product_id" + + create_table "product_upgrades", :force => true do |t| + t.string "upgrade_type" + t.string "bmtID" + t.decimal "price", :precision => 10, :scale => 2 + t.datetime "created_at" + t.datetime "updated_at" + t.integer "upgradable_id" + t.integer "upgradable_to_id" + t.string "upgradable_type", :default => "ProductEdition" + t.string "upgradable_to_type" + end + + create_table "product_url_params", :force => true do |t| + t.integer "product_id" + t.integer "url_destination_id" + t.string "url_param" + t.boolean "default", :default => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "product_url_params", ["product_id"], :name => "product_id" + add_index "product_url_params", ["url_destination_id"], :name => "url_destination_id" + + create_table "products", :force => true do |t| + t.integer "product_category_id" + t.string "code" + t.string "internal_code" + t.string "file" + t.string "name" + t.string "label" + t.boolean "promoted", :default => false + t.boolean "homepage", :default => false + t.decimal "price", :precision => 10, :scale => 2 + t.decimal "regular_price", :precision => 10, :scale => 2 + t.integer "bmtID" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + t.string "setup_file_file_name" + t.string "setup_file_content_type" + t.integer "setup_file_file_size" + t.datetime "setup_file_updated_at" + end + + add_index "products", ["code"], :name => "index_products_on_code", :unique => true + add_index "products", ["internal_code"], :name => "index_products_on_internal_code", :unique => true + add_index "products", ["product_category_id"], :name => "product_category_id" + + create_table "products_promotions", :id => false, :force => true do |t| + t.integer "product_id" + t.integer "promotion_id" + end + + add_index "products_promotions", ["product_id"], :name => "product_id" + add_index "products_promotions", ["promotion_id"], :name => "promotion_id" + + create_table "redirects", :force => true do |t| + t.integer "source_type_id" + t.string "name" + t.string "redirect_path", :null => false + t.string "redirect_to", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "redirects", ["source_type_id"], :name => "source_type_id" + + create_table "releases", :force => true do |t| + t.integer "product_id" + t.string "version" + t.integer "build" + t.text "description" + t.text "changelog" + t.date "date" + t.datetime "postpone_till" + t.datetime "created_at" + t.datetime "updated_at" + t.boolean "announce", :default => true + t.boolean "exclude_from_autoupdate", :default => false + end + + add_index "releases", ["product_id"], :name => "product_id" + + create_table "screenshots", :force => true do |t| + t.integer "product_id" + t.string "image" + t.string "alt" + t.string "label" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.string "image_file_name" + t.string "image_content_type" + t.integer "image_file_size" + t.datetime "image_updated_at" + end + + add_index "screenshots", ["product_id"], :name => "product_id" + + create_table "sent_autoresponders", :force => true do |t| + t.integer "autoresponder_id", :null => false + t.integer "contact_id", :null => false + t.datetime "sent_at" + end + + add_index "sent_autoresponders", ["autoresponder_id"], :name => "autoresponder_id" + add_index "sent_autoresponders", ["contact_id"], :name => "contact_id" + + create_table "site_settings", :force => true do |t| + t.text "settings" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "sitemap_titles", :force => true do |t| + t.string "path" + t.string "title" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "static_pages", :force => true do |t| + t.string "code" + t.string "url_param" + t.string "name" + t.text "html" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "static_pages", ["code"], :name => "index_static_pages_on_code", :unique => true + + create_table "subscription_list_types_subscription_locations", :id => false, :force => true do |t| + t.integer "subscription_list_type_id" + t.integer "subscription_location_id" + end + + add_index "subscription_list_types_subscription_locations", ["subscription_list_type_id"], :name => "subscription_list_type_id" + add_index "subscription_list_types_subscription_locations", ["subscription_location_id"], :name => "subscription_location_id" + + create_table "subscription_lists", :force => true do |t| + t.integer "subscription_list_type_id" + t.integer "product_id" + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "subscription_lists", ["subscription_list_type_id"], :name => "subscription_list_type_id" + add_index "subscription_lists", ["product_id"], :name => "product_id" + + create_table "subscriptions", :force => true do |t| + t.integer "subscription_list_id" + t.integer "contact_id" + t.datetime "started_at" + t.datetime "ended_at" + t.boolean "active", :default => true + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + t.integer "subscription_location_id" + end + + add_index "subscriptions", ["subscription_list_id"], :name => "subscription_list_id" + add_index "subscriptions", ["contact_id"], :name => "contact_id" + add_index "subscriptions", ["subscription_location_id"], :name => "subscription_location_id" + + create_table "subtemplates", :force => true do |t| + t.integer "subtemplate_type_id" + t.string "name" + t.text "content" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "subtemplates", ["subtemplate_type_id"], :name => "subtemplate_type_id" + + create_table "support_requests", :force => true do |t| + t.integer "support_request_origin_id" + t.string "name" + t.string "email" + t.integer "product_id" + t.string "subject" + t.text "message" + t.boolean "mail_sent", :default => false + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "support_requests", ["support_request_origin_id"], :name => "support_request_origin_id" + add_index "support_requests", ["product_id"], :name => "product_id" + + create_table "testimonial_positions", :force => true do |t| + t.integer "testimonial_id" + t.integer "testimonial_location_id" + t.integer "product_id" + t.text "extract" + t.integer "position" + end + + add_index "testimonial_positions", ["testimonial_id"], :name => "testimonial_id" + add_index "testimonial_positions", ["testimonial_location_id"], :name => "testimonial_location_id" + add_index "testimonial_positions", ["product_id"], :name => "product_id" + + create_table "testimonials", :force => true do |t| + t.integer "product_id" + t.text "text" + t.string "author" + t.boolean "hidden", :default => false + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + add_index "testimonials", ["product_id"], :name => "product_id" + + create_table "users", :force => true do |t| + t.string "first_name" + t.string "last_name" + t.string "login", :null => false + t.string "email", :null => false + t.string "crypted_password", :null => false + t.string "password_salt", :null => false + t.string "persistence_token", :null => false + t.string "single_access_token", :null => false + t.string "perishable_token", :null => false + t.integer "login_count", :default => 0, :null => false + t.integer "failed_login_count", :default => 0, :null => false + t.datetime "last_request_at" + t.datetime "current_login_at" + t.datetime "last_login_at" + t.string "current_login_ip" + t.string "last_login_ip" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "visitor_tracks", :force => true do |t| + t.integer "visitor_id" + t.text "track" + t.integer "trackable_id" + t.string "trackable_type" + t.integer "source_type_id" + t.string "source" + t.string "url" + t.string "keywords" + t.string "targetable" + t.boolean "download", :default => false + t.boolean "checkout", :default => false + t.boolean "order", :default => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "visitor_tracks", ["visitor_id"], :name => "visitor_id" + add_index "visitor_tracks", ["source_type_id"], :name => "source_type_id" + + create_table "visitors", :force => true do |t| + t.string "trackable_number" + t.string "user_agent" + t.datetime "created_at" + t.datetime "updated_at" + t.datetime "deleted_at" + end + + create_table "volume_discounts", :force => true do |t| + t.integer "from" + t.integer "to" + t.integer "discount" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_foreign_key "activations", ["order_id"], "orders", ["id"], :name => "activations_ibfk_1" + + add_foreign_key "articles", ["screenshot_id"], "screenshots", ["id"], :name => "articles_ibfk_1" + + add_foreign_key "autoresponders", ["subscription_list_id"], "subscription_lists", ["id"], :name => "autoresponders_ibfk_1" + + add_foreign_key "customers_visitors", ["customer_id"], "customers", ["id"], :name => "customers_visitors_ibfk_1" + add_foreign_key "customers_visitors", ["visitor_id"], "visitors", ["id"], :name => "customers_visitors_ibfk_2" + + add_foreign_key "download_logs", ["product_id"], "products", ["id"], :name => "download_logs_ibfk_1" + + add_foreign_key "faq_categories", ["product_id"], "products", ["id"], :name => "faq_categories_ibfk_1" + + add_foreign_key "faqs", ["faq_category_id"], "faq_categories", ["id"], :name => "faqs_ibfk_1" + + add_foreign_key "orders", ["customer_id"], "customers", ["id"], :name => "orders_ibfk_1" + + add_foreign_key "pad_values", ["product_id"], "products", ["id"], :name => "pad_values_ibfk_1" + + add_foreign_key "product_descriptions", ["product_description_type_id"], "allowed_values", ["id"], :name => "product_descriptions_ibfk_1" + add_foreign_key "product_descriptions", ["product_id"], "products", ["id"], :name => "product_descriptions_ibfk_2" + + add_foreign_key "product_discounts", ["product_id"], "products", ["id"], :name => "product_discounts_ibfk_1" + add_foreign_key "product_discounts", ["product_edition_id"], "product_editions", ["id"], :name => "product_discounts_ibfk_2" + + add_foreign_key "product_editions", ["product_id"], "products", ["id"], :name => "product_editions_ibfk_1" + + add_foreign_key "product_icons", ["product_id"], "products", ["id"], :name => "product_icons_ibfk_1" + + add_foreign_key "product_images", ["product_id"], "products", ["id"], :name => "product_images_ibfk_1" + + add_foreign_key "product_offers", ["product_id"], "products", ["id"], :name => "product_offers_ibfk_1" + add_foreign_key "product_offers", ["related_product_id"], "products", ["id"], :name => "product_offers_ibfk_2" + + add_foreign_key "product_pages", ["parent_id"], "product_pages", ["id"], :name => "product_pages_ibfk_1" + add_foreign_key "product_pages", ["product_id"], "products", ["id"], :name => "product_pages_ibfk_2" + + add_foreign_key "product_url_params", ["product_id"], "products", ["id"], :name => "product_url_params_ibfk_1" + add_foreign_key "product_url_params", ["url_destination_id"], "allowed_values", ["id"], :name => "product_url_params_ibfk_2" + + add_foreign_key "products", ["product_category_id"], "product_categories", ["id"], :name => "products_ibfk_1" + + add_foreign_key "products_promotions", ["product_id"], "products", ["id"], :name => "products_promotions_ibfk_1" + add_foreign_key "products_promotions", ["promotion_id"], "allowed_values", ["id"], :name => "products_promotions_ibfk_2" + + add_foreign_key "redirects", ["source_type_id"], "allowed_values", ["id"], :name => "redirects_ibfk_1" + + add_foreign_key "releases", ["product_id"], "products", ["id"], :name => "releases_ibfk_1" + + add_foreign_key "screenshots", ["product_id"], "products", ["id"], :name => "screenshots_ibfk_1" + + add_foreign_key "sent_autoresponders", ["autoresponder_id"], "autoresponders", ["id"], :name => "sent_autoresponders_ibfk_1" + add_foreign_key "sent_autoresponders", ["contact_id"], "contacts", ["id"], :name => "sent_autoresponders_ibfk_2" + + add_foreign_key "subscription_list_types_subscription_locations", ["subscription_list_type_id"], "newsletter_allowed_values", ["id"], :name => "subscription_list_types_subscription_locations_ibfk_1" + add_foreign_key "subscription_list_types_subscription_locations", ["subscription_location_id"], "newsletter_allowed_values", ["id"], :name => "subscription_list_types_subscription_locations_ibfk_2" + + add_foreign_key "subscription_lists", ["subscription_list_type_id"], "newsletter_allowed_values", ["id"], :name => "subscription_lists_ibfk_1" + add_foreign_key "subscription_lists", ["product_id"], "products", ["id"], :name => "subscription_lists_ibfk_2" + + add_foreign_key "subscriptions", ["subscription_location_id"], "newsletter_allowed_values", ["id"], :name => "subscriptions_ibfk_3" + add_foreign_key "subscriptions", ["subscription_list_id"], "subscription_lists", ["id"], :name => "subscriptions_ibfk_1" + add_foreign_key "subscriptions", ["contact_id"], "contacts", ["id"], :name => "subscriptions_ibfk_2" + + add_foreign_key "subtemplates", ["subtemplate_type_id"], "allowed_values", ["id"], :name => "subtemplates_ibfk_1" + + add_foreign_key "support_requests", ["support_request_origin_id"], "allowed_values", ["id"], :name => "support_requests_ibfk_1" + add_foreign_key "support_requests", ["product_id"], "products", ["id"], :name => "support_requests_ibfk_2" + + add_foreign_key "testimonial_positions", ["testimonial_id"], "testimonials", ["id"], :name => "testimonial_positions_ibfk_1" + add_foreign_key "testimonial_positions", ["testimonial_location_id"], "allowed_values", ["id"], :name => "testimonial_positions_ibfk_2" + add_foreign_key "testimonial_positions", ["product_id"], "products", ["id"], :name => "testimonial_positions_ibfk_3" + + add_foreign_key "testimonials", ["product_id"], "products", ["id"], :name => "testimonials_ibfk_1" + + add_foreign_key "visitor_tracks", ["visitor_id"], "visitors", ["id"], :name => "visitor_tracks_ibfk_1" + add_foreign_key "visitor_tracks", ["source_type_id"], "allowed_values", ["id"], :name => "visitor_tracks_ibfk_2" + +end diff --git a/go-redirect b/go-redirect new file mode 160000 index 0000000..d632b77 --- /dev/null +++ b/go-redirect @@ -0,0 +1 @@ +Subproject commit d632b77f3de4bbb803df5a36c7de9527f1e17b4a