├── log
└── .gitkeep
├── lib
├── tasks
│ ├── .gitkeep
│ ├── cleanup.rake
│ ├── cache.rake
│ ├── run_notifications.rake
│ ├── annotate_rb.rake
│ └── graphql.rake
├── assets
│ └── .gitkeep
└── intercode
│ ├── import
│ ├── illyan
│ │ ├── tables.rb
│ │ └── table.rb
│ ├── procon
│ │ ├── table.rb
│ │ └── tables.rb
│ ├── illyan.rb
│ └── procon.rb
│ └── import.rb
├── public
├── favicon.ico
├── icon.png
├── robots.txt
├── icon.svg
└── 403.html
├── .husky
├── .gitignore
└── pre-commit
├── .ruby-version
├── app
├── graphql
│ ├── types
│ │ ├── .keep
│ │ ├── base_enum.rb
│ │ ├── base_scalar.rb
│ │ ├── base_union.rb
│ │ ├── base_input_object.rb
│ │ ├── base_interface.rb
│ │ ├── runs_pagination_type.rb
│ │ ├── form_input_type.rb
│ │ ├── room_input_type.rb
│ │ ├── users_pagination_type.rb
│ │ ├── coupons_pagination_type.rb
│ │ ├── events_pagination_type.rb
│ │ ├── orders_pagination_type.rb
│ │ ├── signups_pagination_type.rb
│ │ ├── form_section_input_type.rb
│ │ ├── conventions_pagination_type.rb
│ │ ├── coupon_filters_input_type.rb
│ │ ├── email_routes_pagination_type.rb
│ │ ├── organization_role_input_type.rb
│ │ ├── scheduled_value_type.rb
│ │ ├── signup_changes_pagination_type.rb
│ │ ├── form_item_role_type.rb
│ │ ├── show_schedule_type.rb
│ │ ├── signup_requests_pagination_type.rb
│ │ ├── user_con_profiles_pagination_type.rb
│ │ ├── scheduling_ui_type.rb
│ │ ├── form_item_expose_in_type.rb
│ │ ├── form_type_type.rb
│ │ ├── scheduled_money_value_type.rb
│ │ ├── scheduled_value_input_type.rb
│ │ ├── order_quantity_by_status_type.rb
│ │ ├── signup_count_by_state_type.rb
│ │ ├── signup_request_filters_input_type.rb
│ │ ├── search_result_type.rb
│ │ ├── cms_content_type_indicator.rb
│ │ ├── cms_variable_input.rb
│ │ ├── scheduled_money_value_input_type.rb
│ │ ├── mailing_lists_result_type.rb
│ │ ├── money_input_type.rb
│ │ ├── email_route_type.rb
│ │ ├── permissioned_role_type_indicator.rb
│ │ ├── choice_count_type.rb
│ │ ├── department_input_type.rb
│ │ ├── event_with_choice_counts_type.rb
│ │ ├── permissioned_model_type_indicator.rb
│ │ ├── cms_content_group_input_type.rb
│ │ ├── event_provided_ticket_list_type.rb
│ │ ├── cms_content_input_type.rb
│ │ ├── convention_filters_input_type.rb
│ │ ├── room_type.rb
│ │ ├── ticket_input_type.rb
│ │ ├── timespan_with_value_type.rb
│ │ ├── money_type.rb
│ │ ├── order_input_type.rb
│ │ ├── pricing_strategy_type.rb
│ │ ├── email_route_input_type.rb
│ │ ├── ranked_choice_decisions_pagination_type.rb
│ │ ├── uncamelized_field.rb
│ │ ├── liquid_assign.rb
│ │ ├── timespan_with_money_value_type.rb
│ │ ├── cms_partial_input_type.rb
│ │ ├── email_route_filters_input_type.rb
│ │ ├── signup_mode_type.rb
│ │ ├── timezone_mode_type.rb
│ │ ├── winning_user_con_profile_input_type.rb
│ │ ├── email_mode_type.rb
│ │ ├── cms_graphql_query_input_type.rb
│ │ ├── mailing_lists_waitlists_result_type.rb
│ │ ├── order_filters_input_type.rb
│ │ ├── orders_connection_type.rb
│ │ ├── search_result_entry_type.rb
│ │ ├── notification_event_key.rb
│ │ ├── permission_type.rb
│ │ ├── signup_change_filters_input_type.rb
│ │ ├── contact_email_type.rb
│ │ ├── registration_policy_input_type.rb
│ │ ├── authorized_application_type.rb
│ │ ├── payment_mode_type.rb
│ │ ├── refund_status_type.rb
│ │ ├── root_site_input_type.rb
│ │ ├── signup_filters_input_type.rb
│ │ ├── timespan_with_money_value_input_type.rb
│ │ ├── event_proposals_pagination_type.rb
│ │ ├── signup_round_automation_action.rb
│ │ ├── site_mode_type.rb
│ │ ├── order_status_type.rb
│ │ ├── receive_signup_email_type.rb
│ │ ├── pagination_type.rb
│ │ ├── notification_source_type.rb
│ │ ├── ranked_choice_fallback_action.rb
│ │ ├── big_decimal_type.rb
│ │ ├── date_type.rb
│ │ ├── cms_layout_input_type.rb
│ │ ├── event_proposal_input_type.rb
│ │ ├── pay_what_you_want_value_type.rb
│ │ ├── cms_navigation_item_input_type.rb
│ │ ├── department_type.rb
│ │ ├── grouped_signup_count_type.rb
│ │ ├── coupon_application_type.rb
│ │ ├── ticket_mode_type.rb
│ │ ├── ticket_type_parent_type.rb
│ │ ├── timespan_with_value_input_type.rb
│ │ ├── run_input_type.rb
│ │ ├── event_proposal_filters_input_type.rb
│ │ ├── user_filters_input_type.rb
│ │ ├── notification_template_input_type.rb
│ │ ├── pay_what_you_want_input_type.rb
│ │ ├── root_site_type.rb
│ │ └── event_input_type.rb
│ ├── mutations
│ │ ├── .keep
│ │ ├── delete_organization_role.rb
│ │ ├── accept_clickwrap_agreement.rb
│ │ ├── delete_run.rb
│ │ ├── delete_page.rb
│ │ ├── delete_room.rb
│ │ ├── delete_coupon.rb
│ │ ├── delete_form.rb
│ │ ├── delete_cms_layout.rb
│ │ ├── drop_event.rb
│ │ ├── create_page.rb
│ │ ├── delete_cms_partial.rb
│ │ ├── delete_order_entry.rb
│ │ ├── delete_team_member.rb
│ │ ├── create_room.rb
│ │ └── delete_email_route.rb
│ ├── money_helper.rb
│ └── sources
│ │ ├── signup_count.rb
│ │ └── order_summary.rb
├── mailers
│ └── .gitkeep
├── models
│ ├── .gitkeep
│ ├── application_record.rb
│ └── registration_policy
│ │ └── error.rb
├── assets
│ └── config
│ │ └── manifest.js
├── views
│ ├── layouts
│ │ ├── mailer.text.erb
│ │ ├── liquid_docs.html.erb
│ │ └── application.html.erb
│ ├── notifications
│ │ └── notification.html.erb
│ ├── reports
│ │ ├── per_event.html.erb
│ │ ├── per_user.html.erb
│ │ └── single_user_printable.html.erb
│ ├── doorkeeper
│ │ ├── applications
│ │ │ ├── edit.html.erb
│ │ │ ├── new.html.erb
│ │ │ └── _delete_form.html.erb
│ │ ├── authorizations
│ │ │ ├── show.html.erb
│ │ │ └── error.html.erb
│ │ └── authorized_applications
│ │ │ └── _delete_form.html.erb
│ ├── graphiql
│ │ └── show.html.erb
│ └── user_mailer
│ │ ├── confirmation_instructions.html.erb
│ │ └── unlock_instructions.html.erb
├── helpers
│ ├── sitemaps_helper.rb
│ ├── graphiql_helper.rb
│ ├── calendars_helper.rb
│ ├── csv_exports_helper.rb
│ ├── passwords_helper.rb
│ ├── registrations_helper.rb
│ ├── single_page_app_helper.rb
│ ├── stripe_account_helper.rb
│ ├── user_con_profiles_helper.rb
│ └── authenticity_tokens_helper.rb
├── javascript
│ ├── EventsApp
│ │ ├── eventIdRegexp.ts
│ │ ├── ScheduleGrid
│ │ │ └── LayoutConstants.ts
│ │ ├── MySignupQueue
│ │ │ └── signup-queue.module.css
│ │ ├── buildEventUrl.ts
│ │ └── EventPage
│ │ │ └── valueIsPresent.ts
│ ├── FormPresenter
│ │ ├── ItemDisplays
│ │ │ └── FormItemDisplayMode.ts
│ │ └── ItemInputs
│ │ │ └── FieldRequiredFeedback.tsx
│ ├── @types
│ │ ├── assets.d.ts
│ │ ├── globals.d.ts
│ │ └── i18next.d.ts
│ ├── styles
│ │ ├── event_list.module.scss.d.ts
│ │ ├── event_ratings.module.scss.d.ts
│ │ ├── page_admin_dropdown.module.scss.d.ts
│ │ ├── event_ratings.module.scss
│ │ ├── liquid_docs.module.scss.d.ts
│ │ ├── run_capacity_graph.module.scss.d.ts
│ │ ├── event_list.module.scss
│ │ ├── spoiler.module.scss.d.ts
│ │ ├── _toast.scss
│ │ ├── _glow.scss
│ │ ├── _print.scss
│ │ ├── dev-mode-graphiql.scss
│ │ ├── liquid_docs.module.scss
│ │ ├── _color_variants.scss
│ │ ├── _spin.scss
│ │ ├── bucket_availability_display.module.scss.d.ts
│ │ └── _buckets.scss
│ ├── parameterize.ts
│ ├── Authentication
│ │ └── AuthenticationForms.tsx
│ ├── DateTimeFormats.ts
│ ├── OAuth
│ │ ├── mutations.graphql
│ │ └── queries.graphql
│ ├── serverQueries.graphql
│ ├── ClickwrapAgreement
│ │ ├── mutations.graphql
│ │ └── queries.graphql
│ ├── CmsAdmin
│ │ └── queries.graphql
│ ├── EventRatings
│ │ └── mutations.graphql
│ ├── useValueUnless.ts
│ ├── packs
│ │ ├── applicationEntry.ts
│ │ ├── applicationStyles.ts
│ │ └── setPublicPath.ts
│ ├── getBackendBaseUrl.ts
│ ├── Store
│ │ ├── couponFields.graphql
│ │ ├── OrderAdmin
│ │ │ └── new.tsx
│ │ ├── Cart
│ │ │ └── queries.graphql
│ │ └── ProductAdmin
│ │ │ └── queries.graphql
│ ├── LiquidDocs
│ │ ├── escapeRegExp.ts
│ │ └── findLiquidTagName.ts
│ ├── Tables
│ │ └── HtmlCell.tsx
│ ├── NotificationAdmin
│ │ └── getNotificationEventKey.tsx
│ ├── RoomsAdmin
│ │ └── queries.graphql
│ ├── humanize.ts
│ ├── OutletWithLoading.tsx
│ ├── scrollToLocationHash.ts
│ └── RootSiteAdmin
│ │ └── mutations.graphql
├── controllers
│ ├── health_controller.rb
│ ├── graphiql_controller.rb
│ ├── json_failure_app.rb
│ └── single_page_app_controller.rb
├── policies
│ ├── page_policy.rb
│ ├── cms_file_policy.rb
│ ├── cms_layout_policy.rb
│ ├── cms_partial_policy.rb
│ ├── cms_variable_policy.rb
│ ├── cms_content_group_policy.rb
│ ├── cms_graphql_query_policy.rb
│ ├── cms_navigation_item_policy.rb
│ ├── coupon_application_policy.rb
│ └── queries
│ │ ├── nil_safe_cache.rb
│ │ └── query_manager.rb
├── jobs
│ ├── remind_draft_event_proposals_job.rb
│ ├── sync_team_mailing_list_job.rb
│ ├── receive_sns_email_delivery_job.rb
│ ├── send_user_activity_alerts_job.rb
│ ├── sync_email_forwarding_for_domain_job.rb
│ └── send_notification_job.rb
├── services
│ ├── hosting_service_adapters
│ │ └── instance.rb
│ ├── hosting_service_adapters.rb
│ ├── cms_content_loaders
│ │ ├── conflict_policy.rb
│ │ ├── cms_partials.rb
│ │ ├── cms_graphql_queries.rb
│ │ └── notification_templates.rb
│ ├── content_cloners
│ │ ├── rooms_cloner.rb
│ │ ├── departments_cloner.rb
│ │ ├── ticket_types_cloner.rb
│ │ └── convention_cloner.rb
│ ├── run_notifications_service.rb
│ ├── concerns
│ │ └── skippable_advisory_lock.rb
│ └── drop_event_service.rb
├── presenters
│ └── concerns
│ │ ├── form_markdown.rb
│ │ └── sort_buckets.rb
└── liquid_drops
│ ├── pay_what_you_want_value_drop.rb
│ └── money_drop.rb
├── test
├── models
│ ├── .gitkeep
│ ├── helpers
│ │ ├── cons_helper_test.rb
│ │ └── pages_helper_test.rb
│ └── cms_content_set_test.rb
├── controllers
│ ├── .gitkeep
│ ├── graphiql_controller_test.rb
│ ├── reports_controller_test.rb
│ ├── sitemaps_controller_test.rb
│ ├── calendars_controller_test.rb
│ ├── csv_exports_controller_test.rb
│ ├── passwords_controller_test.rb
│ ├── registrations_controller_test.rb
│ ├── stripe_account_controller_test.rb
│ ├── email_forwarders_controller_test.rb
│ ├── single_page_app_controller_test.rb
│ ├── stripe_webhooks_controller_test.rb
│ ├── authenticity_tokens_controller_test.rb
│ └── sns_notifications_controller_test.rb
├── integration
│ └── .gitkeep
├── javascript
│ ├── setupTests.ts
│ ├── tempPolyfills.js
│ └── BuiltInFormControls
│ │ └── graphQLAsyncSelect.queries.graphql
├── files
│ └── war_bond.png
├── helpers
│ ├── events_helper_test.rb
│ └── team_member_helper_test.rb
├── mailers
│ ├── previews
│ │ └── user_mailer_preview.rb
│ └── user_mailer_test.rb
├── jobs
│ └── notify_event_proposal_changes_job_test.rb
├── factories
│ ├── product_variant.rb
│ └── doorkeeper_applications.rb
├── docker-ruby-test.sh
├── graphql
│ └── intercode_schema_test.rb
└── liquid_drops
│ └── user_drop_test.rb
├── .node-version
├── doc-site
├── static
│ ├── .nojekyll
│ └── img
│ │ ├── favicon.ico
│ │ ├── docusaurus.png
│ │ ├── neilSquare.png
│ │ └── tutorial
│ │ ├── localeDropdown.png
│ │ └── docsVersionDropdown.png
├── docs
│ └── concepts
│ │ ├── forms.md
│ │ ├── store.md
│ │ ├── permissions.md
│ │ ├── gender-buckets.png
│ │ ├── karaoke-buckets.png
│ │ └── no-preference-buckets.png
├── babel.config.js
├── blog
│ └── 2019-10-03-new-intercode-schedule-design
│ │ ├── news_20191003_run.png
│ │ ├── news_20191003_legend.png
│ │ └── news_20191003_popup.png
└── src
│ └── components
│ └── HomepageFeatures.module.css
├── .prettierignore
├── vendor
└── assets
│ ├── javascripts
│ └── .gitkeep
│ └── stylesheets
│ └── .gitkeep
├── __mocks__
├── styleMock.js
├── fileMock.js
└── popper.js.js
├── cms_content_sets
├── standard
│ ├── partials
│ │ └── news.liquid
│ └── layouts
│ │ └── Default.liquid
├── base
│ ├── metadata.yml
│ ├── layouts
│ │ └── Default.liquid
│ └── partials
│ │ └── run_description.liquid
├── procon_import
│ ├── metadata.yml
│ └── layouts
│ │ └── Default.liquid
├── rock_and_romance
│ └── metadata.yml
├── wanderlust
│ ├── partials
│ │ ├── nat_image_debug.liquid
│ │ └── gravatar80.liquid
│ └── pages
│ │ ├── news.liquid
│ │ ├── buckets.liquid
│ │ ├── store.liquid
│ │ ├── conlogo.liquid
│ │ ├── flyer.liquid
│ │ ├── hotel
│ │ ├── menu.liquid
│ │ └── renovation.liquid
│ │ ├── open-slots.liquid
│ │ └── nat-debugs-an-image-he-uploaded.liquid
├── smoke_and_mirrors
│ ├── files
│ │ ├── All_Menus.pdf
│ │ ├── crowneplaza.jpg
│ │ ├── neilSquare.png
│ │ ├── InterconFlyer.pdf
│ │ ├── Indian_food_set.JPG
│ │ ├── InterconSFacebook.jpg
│ │ └── CrownePlazaFloorplan.jpg
│ ├── pages
│ │ ├── news.liquid
│ │ ├── buckets.liquid
│ │ ├── Flyer.liquid
│ │ ├── hotel-menu.liquid
│ │ └── hotellayout.liquid
│ └── partials
│ │ └── gravatar80.liquid
├── the_last_seder
│ ├── files
│ │ └── 12-tls-logo-778.jpg
│ └── metadata.yml
└── single_event
│ ├── pages
│ └── conduct.liquid
│ ├── layouts
│ └── Default.liquid
│ └── metadata.yml
├── cloudflare
├── .dev.vars
├── tsconfig.json
└── wrangler.jsonc
├── config
├── sidekiq.yml
├── initializers
│ ├── phonelib.rb
│ ├── graphiql_rails.rb
│ ├── oj.rb
│ ├── custom_serializers.rb
│ ├── gc_auto_compact.rb
│ ├── stripe.rb
│ ├── rack_mini_profiler.rb
│ ├── mime_types.rb
│ ├── recaptcha.rb
│ ├── loofah.rb
│ ├── rack_profiler.rb
│ ├── application_controller_renderer.rb
│ ├── cadmus.rb
│ ├── cookies_serializer.rb
│ ├── assets.rb
│ ├── date_formats.rb
│ ├── business_time.rb
│ ├── ahoy.rb
│ ├── prevent_blank_recipients_interceptor.rb
│ ├── session_store.rb
│ └── sentry.rb
├── skylight.yml
├── nocache-files.json
├── spring.rb
├── environment.rb
├── boot.rb
├── cable.yml
├── inflections.json
└── shoryuken.yml
├── bin
├── dev
├── rake
├── bundle
├── rails
├── brakeman
├── ci
└── rubocop
├── .browserslistrc
├── .prettierrc.cjs
├── .profile.d
└── heroku-exec.sh
├── graphql.config.js
├── .yarn
└── sdks
│ ├── integrations.yml
│ ├── prettier
│ └── package.json
│ └── typescript
│ └── package.json
├── config.ru
├── db
├── migrate
│ ├── 20161112203319_add_counted_to_signups.rb
│ ├── 20231126190837_add_ahoy5_index.rb
│ ├── 20120616165745_add_banner_image_to_cons.rb
│ ├── 20180922221147_add_admin_notes_to_events.rb
│ ├── 20120616165151_add_name_to_cons.rb
│ ├── 20170522175455_add_bio_to_user_con_profiles.rb
│ ├── 20200516164805_add_location_to_conventions.rb
│ ├── 20120616164203_con_root_pages.rb
│ ├── 20171111161320_add_cms_layout_to_pages.rb
│ ├── 20200830175919_make_event_title_non_nullable.rb
│ ├── 20230109012113_make_run_event_id_not_nullable.rb
│ ├── 20250203173940_add_meta_description_to_pages.rb
│ ├── 20120604201100_scope_events_to_con.rb
│ ├── 20151108021933_add_user_id_to_signups.rb
│ ├── 20151108041735_add_timezone_to_conventions.rb
│ ├── 20170721235511_scope_forms_to_conventions.rb
│ ├── 20171127182439_add_default_value_to_form_items.rb
│ ├── 20220122172525_remove_file_from_cms_files.rb
│ ├── 20220226170448_add_event_id_to_tickets.rb
│ ├── 20220918173739_add_expose_in_to_form_items.rb
│ ├── 20230113184026_make_signup_run_id_not_nullable.rb
│ ├── 20231105161432_make_run_starts_at_non_nullable.rb
│ ├── 20160310141909_add_legacy_password_md5_to_users.rb
│ ├── 20151108133732_add_registration_policy_to_events.rb
│ ├── 20180408151722_add_position_to_product_variants.rb
│ ├── 20180922185941_add_admin_notes_to_event_proposals.rb
│ ├── 20200807160757_make_ticket_type_name_not_nullable.rb
│ ├── 20220328155131_add_run_to_order_entries.rb
│ ├── 20161113163044_add_requested_bucket_key_to_signups.rb
│ ├── 20170829191902_add_admin_description_to_form_items.rb
│ ├── 20171015182922_remove_notify_on_changes_from_events.rb
│ ├── 20171029163258_add_maximum_tickets_to_conventions.rb
│ ├── 20180826212515_remove_banner_image_from_conventions.rb
│ ├── 20181010144914_add_reminded_at_to_event_proposals.rb
│ ├── 20181015021731_add_team_mailing_list_name_to_events.rb
│ ├── 20181113145849_add_public_description_to_form_items.rb
│ ├── 20200601160341_add_hidden_to_conventions.rb
│ ├── 20230113220828_make_event_convention_id_not_nullable.rb
│ ├── 20240224192755_add_clickwrap_agreement_to_products.rb
│ ├── 20161112202920_add_state_to_signups.rb
│ ├── 20170721234402_create_forms.rb
│ ├── 20171014184903_remove_player_constraints_from_events.rb
│ ├── 20190209164652_add_organization_to_conventions.rb
│ ├── 20200121165316_add_body_sms_to_notification_templates.rb
│ ├── 20240331160734_add_default_currency_to_conventions.rb
│ ├── 20171112181739_add_additional_info_to_user_con_profiles.rb
│ ├── 20180209193547_index_notified_at_on_form_response_changes.rb
│ ├── 20190127185603_add_clickwrap_agreement_to_conventions.rb
│ ├── 20200322234518_add_canceled_to_conventions.rb
│ ├── 20161112151816_add_maximum_event_signups_to_conventions.rb
│ ├── 20171014184727_add_participant_communications_to_events.rb
│ ├── 20190521212001_add_site_mode_to_conventions.rb
│ ├── 20180209153345_add_ticket_name_to_conventions.rb
│ ├── 20170829204511_add_timeblock_preferences_to_event_proposals.rb
│ ├── 20180123225540_remove_precon_bids_allowed_from_conventions.rb
│ ├── 20180312150839_add_timestamps_to_orders.rb
│ ├── 20181015020539_add_event_mailing_list_domain_to_conventions.rb
│ ├── 20181108151904_add_private_signup_list_to_events.rb
│ ├── 20190601161948_add_signup_mode_to_conventions.rb
│ ├── 20200125150313_add_allow_sms_to_user_con_profiles.rb
│ ├── 20200128165352_add_department_to_event_categories.rb
│ ├── 20200128165503_add_proposal_description_to_event_categories.rb
│ ├── 20220313171517_add_expires_at_to_signups.rb
│ ├── 20240916155847_add_disable_captcha_to_root_sites.rb
│ ├── 20170526163733_add_show_nickname_in_bio_to_user_con_profiles.rb
│ ├── 20171018213324_rename_accepting_bids_to_accepting_proposals.rb
│ ├── 20171111160745_add_default_layout_to_conventions.rb
│ ├── 20190209164632_create_organizations.rb
│ ├── 20190116034950_add_needs_update_to_user_con_profiles.rb
│ ├── 20190127192813_add_skip_clickwrap_agreement_to_pages.rb
│ ├── 20120609181638_add_start_and_end_times_to_cons.rb
│ ├── 20170724172123_add_event_proposal_form_to_conventions.rb
│ ├── 20190622195919_add_signup_requests_open_to_conventions.rb
│ ├── 20200930160120_remove_registrar_from_user_con_profiles.rb
│ ├── 20221120175702_add_event_ratings_foreign_keys.rb
│ ├── 20231216024636_make_mepto_override_value_non_nullable.rb
│ ├── 20161127205353_add_registrations_frozen_to_conventions.rb
│ ├── 20171021154612_remove_signups_allowed_from_conventions.rb
│ ├── 20171111234858_add_user_con_profile_form_to_conventions.rb
│ ├── 20180122194924_add_gravatar_enabled_to_user_con_profiles.rb
│ ├── 20180216202555_add_allows_event_signups_to_ticket_types.rb
│ ├── 20190814120605_make_requested_bucket_key_nullable_for_signup_requests.rb
│ ├── 20200216222452_add_trigram_extension.rb
│ ├── 20240620014115_add_ranked_choice_ordering_boost_to_user_con_profiles.rb
│ ├── 20180212193535_remove_registrations_frozen_from_conventions.rb
│ ├── 20190419202156_add_legacy_password_sha1_to_users.rb
│ ├── 20191116152343_add_unaccent_extension.rb
│ ├── 20210915155339_make_form_item_position_non_nullable.rb
│ ├── 20240417195945_add_unique_index_to_signup_ranked_choice_priority.rb
│ ├── 20180123225046_rename_bid_permissions.rb
│ ├── 20151129142816_add_provided_by_event_to_tickets.rb
│ ├── 20171031202206_add_maximum_event_provided_tickets_to_ticket_types.rb
│ ├── 20171201155843_add_receive_whos_free_emails_to_user_con_profiles.rb
│ ├── 20201010181146_remove_stripe_keys_from_conventions.rb
│ ├── 20250202200327_add_prioritize_waitlist_to_signup_ranked_choices.rb
│ ├── 20170219064321_remove_news_and_con_com_meetings_from_conventions.rb
│ ├── 20180201184633_add_age_restrictions_and_content_warnings_to_events.rb
│ ├── 20220102231745_add_open_graph_image_and_icon_image_to_conventions.rb
│ ├── 20180207173614_add_admin_notes_to_cms_tables.rb
│ ├── 20190127190135_add_accepted_clickwrap_agreement_to_user_con_profiles.rb
│ ├── 20240504165651_add_ranked_choice_allow_waitlist_to_user_con_profiles.rb
│ ├── 20240608175912_add_signup_round_to_ranked_choice_decisions.rb
│ ├── 20151108010959_create_rooms.rb
│ ├── 20191130174830_add_compacted_to_form_response_changes.rb
│ ├── 20180301162045_add_additional_info_to_events.rb
│ ├── 20220924204825_fix_event_email_form_item_identifiers.rb
│ ├── 20131227011316_subclass_events.rb
│ ├── 20190209164910_create_organization_roles.rb
│ ├── 20201010180459_add_stripe_account_id_to_conventions.rb
│ ├── 20170721234424_create_form_sections.rb
│ ├── 20240504163701_add_ranked_choice_order_and_executed_at_to_signup_rounds.rb
│ ├── 20200128164623_create_departments.rb
│ ├── 20171111160337_create_cms_layouts.rb
│ ├── 20190209165002_create_join_table_organization_roles_users.rb
│ ├── 20200312181248_create_email_routes.rb
│ ├── 20211011191912_remove_caption_from_form_items_where_invalid.rb
│ ├── 20120604142637_create_runs.rb
│ ├── 20171014183340_add_default_status_for_events.rb
│ ├── 20181024143839_create_doorkeeper_openid_connect_tables.rb
│ ├── 20200411161111_create_coupon_applications.rb
│ ├── 20200712160144_add_language_to_conventions.rb
│ ├── 20180213195724_add_visible_to_staff_positions.rb
│ ├── 20180817153813_add_payment_options_to_products.rb
│ ├── 20180304162934_add_submitted_at_to_event_proposals.rb
│ ├── 20181216163057_create_cms_graphql_queries.rb
│ ├── 20151107232925_add_sessions_table.rb
│ ├── 20190415164817_add_ticket_mode_to_conventions.rb
│ ├── 20200217182622_add_hidden_from_search.rb
│ ├── 20251210230514_cascade_delete_from_openid_requests.rb
│ ├── 20200313212415_add_cc_addresses_and_email_aliases_to_staff_positions.rb
│ ├── 20170721234716_create_form_items.rb
│ ├── 20151115201840_create_ticket_types.rb
│ ├── 20170602200806_create_staff_positions.rb
│ ├── 20190208214318_add_show_event_list_to_conventions.rb
│ ├── 20200517155823_add_timezone_mode_to_conventions.rb
│ ├── 20231126173532_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb
│ ├── 20191226202814_rename_alert_destinations_to_notification_destinations.rb
│ ├── 20151108020322_create_rooms_runs.rb
│ ├── 20191019225829_create_event_ratings.rb
│ ├── 20200314164542_add_catch_all_staff_position_and_email_mode_to_conventions.rb
│ ├── 20120616163017_create_pages.rb
│ ├── 20170208234244_create_cms_partials.rb
│ ├── 20181011174357_create_alert_destinations.rb
│ ├── 20181028182940_create_cms_variables.rb
│ └── 20240325174012_add_signup_automation_mode_to_conventions.rb
└── seeds.rb
├── globalDefines.mts
├── doc
└── README_FOR_APP
├── SECURITY.md
├── postcss.config.cjs
├── .solargraph.yml
├── .whitesource
├── script
├── rails
└── genNginxNocache.js
├── Rakefile
├── .swcrc
└── .yarnrc.yml
/log/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/tasks/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 3.4.7
2 |
--------------------------------------------------------------------------------
/app/graphql/types/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/mailers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 24.11.1
2 |
--------------------------------------------------------------------------------
/app/graphql/mutations/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/doc-site/static/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/controllers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/integration/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | *.generated.ts
2 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vendor/assets/stylesheets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/__mocks__/styleMock.js:
--------------------------------------------------------------------------------
1 | module.exports = {};
2 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.text.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
--------------------------------------------------------------------------------
/cms_content_sets/standard/partials/news.liquid:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/__mocks__/fileMock.js:
--------------------------------------------------------------------------------
1 | module.exports = 'test-file-stub';
2 |
--------------------------------------------------------------------------------
/cloudflare/.dev.vars:
--------------------------------------------------------------------------------
1 | EMAIL_FORWARDERS_API_TOKEN="abc123"
2 |
--------------------------------------------------------------------------------
/config/sidekiq.yml:
--------------------------------------------------------------------------------
1 | :queues:
2 | - mailer
3 | - default
4 |
--------------------------------------------------------------------------------
/app/helpers/sitemaps_helper.rb:
--------------------------------------------------------------------------------
1 | module SitemapsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/views/notifications/notification.html.erb:
--------------------------------------------------------------------------------
1 | <%= @body_html %>
2 |
--------------------------------------------------------------------------------
/cms_content_sets/base/metadata.yml:
--------------------------------------------------------------------------------
1 | default_layout_name: Default
2 |
--------------------------------------------------------------------------------
/config/initializers/phonelib.rb:
--------------------------------------------------------------------------------
1 | Phonelib.default_country = "US"
2 |
--------------------------------------------------------------------------------
/bin/dev:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | exec "./bin/rails", "server", *ARGV
3 |
--------------------------------------------------------------------------------
/config/skylight.yml:
--------------------------------------------------------------------------------
1 | ignored_endpoints:
2 | - BundleHashController#show
3 |
--------------------------------------------------------------------------------
/.browserslistrc:
--------------------------------------------------------------------------------
1 | Chrome 63
2 | Safari 12
3 | Firefox 60
4 | Opera 50
5 | Edge 18
6 |
--------------------------------------------------------------------------------
/config/initializers/graphiql_rails.rb:
--------------------------------------------------------------------------------
1 | # GraphiQL::Rails.config.csrf = :per_form
2 |
--------------------------------------------------------------------------------
/config/initializers/oj.rb:
--------------------------------------------------------------------------------
1 | Oj.optimize_rails
2 | Oj.default_options = { mode: :compat }
3 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | yarn run lint-staged
5 |
--------------------------------------------------------------------------------
/app/helpers/graphiql_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module GraphiqlHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/calendars_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module CalendarsHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/csv_exports_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module CsvExportsHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/passwords_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module PasswordsHelper
3 | end
4 |
--------------------------------------------------------------------------------
/cms_content_sets/procon_import/metadata.yml:
--------------------------------------------------------------------------------
1 | default_layout_name: Default
2 | navigation_items: []
3 |
--------------------------------------------------------------------------------
/doc-site/docs/concepts/forms.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 7
3 | ---
4 |
5 | # Forms
6 |
7 | TODO
8 |
--------------------------------------------------------------------------------
/doc-site/docs/concepts/store.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 6
3 | ---
4 |
5 | # Store
6 |
7 | TODO
8 |
--------------------------------------------------------------------------------
/public/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/public/icon.png
--------------------------------------------------------------------------------
/app/helpers/registrations_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module RegistrationsHelper
3 | end
4 |
--------------------------------------------------------------------------------
/test/javascript/setupTests.ts:
--------------------------------------------------------------------------------
1 | import './tempPolyfills';
2 | import '@testing-library/jest-dom/vitest';
3 |
--------------------------------------------------------------------------------
/app/helpers/single_page_app_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module SinglePageAppHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/stripe_account_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module StripeAccountHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/user_con_profiles_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module UserConProfilesHelper
3 | end
4 |
--------------------------------------------------------------------------------
/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require_relative "../config/boot"
3 | require "rake"
4 | Rake.application.run
5 |
--------------------------------------------------------------------------------
/config/nocache-files.json:
--------------------------------------------------------------------------------
1 | [
2 | "/packs/application.js",
3 | "/packs/application-styles.js"
4 | ]
5 |
6 |
--------------------------------------------------------------------------------
/doc-site/docs/concepts/permissions.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 5
3 | ---
4 |
5 | # Permissions
6 |
7 | TODO
8 |
--------------------------------------------------------------------------------
/test/files/war_bond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/test/files/war_bond.png
--------------------------------------------------------------------------------
/.prettierrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | printWidth: 120,
3 | singleQuote: true,
4 | trailingComma: 'all',
5 | };
6 |
--------------------------------------------------------------------------------
/app/graphql/types/base_enum.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::BaseEnum < GraphQL::Schema::Enum
3 | end
4 |
--------------------------------------------------------------------------------
/app/helpers/authenticity_tokens_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module AuthenticityTokensHelper
3 | end
4 |
--------------------------------------------------------------------------------
/app/javascript/EventsApp/eventIdRegexp.ts:
--------------------------------------------------------------------------------
1 | const eventIdRegexp = '[0-9a-z\\-]+';
2 |
3 | export default eventIdRegexp;
4 |
--------------------------------------------------------------------------------
/app/javascript/FormPresenter/ItemDisplays/FormItemDisplayMode.ts:
--------------------------------------------------------------------------------
1 | export type FormItemDisplayMode = 'admin' | 'public';
2 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/test/helpers/events_helper_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class EventsHelperTest < ActionView::TestCase
4 | end
5 |
--------------------------------------------------------------------------------
/.profile.d/heroku-exec.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | [ -z "$SSH_CLIENT" ] && source <(curl --fail --retry 3 -sSL "$HEROKU_EXEC_URL")
3 |
--------------------------------------------------------------------------------
/app/graphql/types/base_scalar.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::BaseScalar < GraphQL::Schema::Scalar
3 | end
4 |
--------------------------------------------------------------------------------
/app/graphql/types/base_union.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::BaseUnion < GraphQL::Schema::Union
3 | end
4 |
--------------------------------------------------------------------------------
/app/javascript/@types/assets.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.svg' {
2 | const content: string;
3 | export default content;
4 | }
5 |
--------------------------------------------------------------------------------
/doc-site/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3 | };
4 |
--------------------------------------------------------------------------------
/test/models/helpers/cons_helper_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class ConsHelperTest < ActionView::TestCase
4 | end
5 |
--------------------------------------------------------------------------------
/test/models/helpers/pages_helper_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class PagesHelperTest < ActionView::TestCase
4 | end
5 |
--------------------------------------------------------------------------------
/config/initializers/custom_serializers.rb:
--------------------------------------------------------------------------------
1 | Rails.application.config.active_job.custom_serializers << SignupMoveResultSerializer
2 |
--------------------------------------------------------------------------------
/doc-site/static/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/static/img/favicon.ico
--------------------------------------------------------------------------------
/test/helpers/team_member_helper_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class TeamMemberHelperTest < ActionView::TestCase
4 | end
5 |
--------------------------------------------------------------------------------
/cms_content_sets/rock_and_romance/metadata.yml:
--------------------------------------------------------------------------------
1 | inherit:
2 | - standard
3 | default_layout_name: Default
4 | root_page_slug: root
5 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/partials/nat_image_debug.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | invariant: false
3 | ---
4 | {% file_url "interconu-web-480.png" %}
--------------------------------------------------------------------------------
/doc-site/static/img/docusaurus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/static/img/docusaurus.png
--------------------------------------------------------------------------------
/doc-site/static/img/neilSquare.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/static/img/neilSquare.png
--------------------------------------------------------------------------------
/app/controllers/health_controller.rb:
--------------------------------------------------------------------------------
1 | class HealthController < ApplicationController
2 | def healthz
3 | head :ok
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/javascript/styles/event_list.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const eventCardEventTitle: string;
3 |
--------------------------------------------------------------------------------
/app/javascript/styles/event_ratings.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const rateEventControl: string;
3 |
--------------------------------------------------------------------------------
/app/policies/page_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class PagePolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/graphql.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | schema: 'schema.graphql',
3 | documents: 'app/javascript/**/*.{js,jsx,ts,tsx,graphql}',
4 | };
5 |
--------------------------------------------------------------------------------
/app/graphql/types/base_input_object.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::BaseInputObject < GraphQL::Schema::InputObject
3 | end
4 |
--------------------------------------------------------------------------------
/app/policies/cms_file_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsFilePolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/app/views/reports/per_event.html.erb:
--------------------------------------------------------------------------------
1 | <% @events.each do |event| %>
2 | <%= render 'reports/per_event_single', event: event %>
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/cloudflare/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["ES2020"],
4 | "types": ["./worker-configuration.d.ts"]
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/app/controllers/graphiql_controller.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class GraphiqlController < ApplicationController
3 | def show; end
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/base_interface.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module Types::BaseInterface
3 | include GraphQL::Schema::Interface
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/styles/page_admin_dropdown.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const pageAdminDropdown: string;
3 |
--------------------------------------------------------------------------------
/app/policies/cms_layout_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsLayoutPolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/config/spring.rb:
--------------------------------------------------------------------------------
1 | %w[
2 | .ruby-version
3 | .rbenv-vars
4 | tmp/restart.txt
5 | tmp/caching-dev.txt
6 | ].each { |path| Spring.watch(path) }
7 |
--------------------------------------------------------------------------------
/doc-site/docs/concepts/gender-buckets.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/docs/concepts/gender-buckets.png
--------------------------------------------------------------------------------
/doc-site/docs/concepts/karaoke-buckets.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/docs/concepts/karaoke-buckets.png
--------------------------------------------------------------------------------
/lib/tasks/cleanup.rake:
--------------------------------------------------------------------------------
1 | desc 'Clean authentication/authorization tables'
2 | task cleanup: :environment do
3 | CleanupDbService.new.call!
4 | end
5 |
--------------------------------------------------------------------------------
/public/icon.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/app/models/application_record.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ApplicationRecord < ActiveRecord::Base
3 | self.abstract_class = true
4 | end
5 |
--------------------------------------------------------------------------------
/app/policies/cms_partial_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsPartialPolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/app/policies/cms_variable_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsVariablePolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/lib/intercode/import/illyan/tables.rb:
--------------------------------------------------------------------------------
1 | module Intercode::Import::Illyan::Tables
2 | extend ActiveSupport::Autoload
3 |
4 | autoload :People
5 | end
6 |
--------------------------------------------------------------------------------
/lib/tasks/cache.rake:
--------------------------------------------------------------------------------
1 | namespace :cache do
2 | desc 'Clear the Rails cache'
3 | task clear: :environment do
4 | Rails.cache.clear
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/.yarn/sdks/integrations.yml:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by @yarnpkg/sdks.
2 | # Manual changes might be lost!
3 |
4 | integrations:
5 | - vscode
6 |
--------------------------------------------------------------------------------
/doc-site/static/img/tutorial/localeDropdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/static/img/tutorial/localeDropdown.png
--------------------------------------------------------------------------------
/app/javascript/styles/event_ratings.module.scss:
--------------------------------------------------------------------------------
1 | .rate-event-control {
2 | text-align: center;
3 | overflow: hidden;
4 | transition: width 0.5s ease-out;
5 | }
6 |
--------------------------------------------------------------------------------
/app/policies/cms_content_group_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsContentGroupPolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/app/policies/cms_graphql_query_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsGraphqlQueryPolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_PATH = File.expand_path("../config/application", __dir__)
3 | require_relative "../config/boot"
4 | require "rails/commands"
5 |
--------------------------------------------------------------------------------
/doc-site/docs/concepts/no-preference-buckets.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/docs/concepts/no-preference-buckets.png
--------------------------------------------------------------------------------
/lib/tasks/run_notifications.rake:
--------------------------------------------------------------------------------
1 | desc 'Enqueue all notification jobs'
2 | task run_notifications: :environment do
3 | RunNotificationsService.new.call!
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/parameterize.ts:
--------------------------------------------------------------------------------
1 | export default function parameterize(str: string): string {
2 | return str.replace(/[^A-Za-z0-9-]/g, '-').toLocaleLowerCase();
3 | }
4 |
--------------------------------------------------------------------------------
/app/policies/cms_navigation_item_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsNavigationItemPolicy < ApplicationPolicy
3 | include CmsContentPolicy
4 | end
5 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require_relative "application"
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/doc-site/static/img/tutorial/docsVersionDropdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/static/img/tutorial/docsVersionDropdown.png
--------------------------------------------------------------------------------
/test/javascript/tempPolyfills.js:
--------------------------------------------------------------------------------
1 |
2 | global.requestAnimationFrame = (cb) => {
3 | setTimeout(cb, 0);
4 | };
5 |
6 | export default global.requestAnimationFrame;
7 |
--------------------------------------------------------------------------------
/app/graphql/types/runs_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RunsPaginationType < Types::PaginationType
3 | entries_field Types::RunType
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/EventsApp/ScheduleGrid/LayoutConstants.ts:
--------------------------------------------------------------------------------
1 | export const PIXELS_PER_HOUR = 100;
2 | export const PIXELS_PER_LANE = 32;
3 | export const LANE_GUTTER_HEIGHT = 2;
4 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/All_Menus.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/All_Menus.pdf
--------------------------------------------------------------------------------
/app/graphql/types/form_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::FormInputType < Types::BaseInputObject
3 | argument :title, String, required: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/room_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RoomInputType < Types::BaseInputObject
3 | argument :name, String, required: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/users_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::UsersPaginationType < Types::PaginationType
3 | entries_field Types::UserType
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/Authentication/AuthenticationForms.tsx:
--------------------------------------------------------------------------------
1 | import SignInForm from './SignInForm';
2 | import SignUpForm from './SignUpForm';
3 |
4 | export { SignInForm, SignUpForm };
5 |
--------------------------------------------------------------------------------
/bin/brakeman:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require "rubygems"
3 | require "bundler/setup"
4 |
5 | ARGV.unshift("--ensure-latest")
6 |
7 | load Gem.bin_path("brakeman", "brakeman")
8 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/crowneplaza.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/crowneplaza.jpg
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/neilSquare.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/neilSquare.png
--------------------------------------------------------------------------------
/cms_content_sets/the_last_seder/files/12-tls-logo-778.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/the_last_seder/files/12-tls-logo-778.jpg
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require ::File.expand_path('../config/environment', __FILE__)
4 | run Intercode::Application
5 |
--------------------------------------------------------------------------------
/test/mailers/previews/user_mailer_preview.rb:
--------------------------------------------------------------------------------
1 | # Preview all emails at http://localhost:3000/rails/mailers/user_mailer
2 | class UserMailerPreview < ActionMailer::Preview
3 | end
4 |
--------------------------------------------------------------------------------
/test/mailers/user_mailer_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class UserMailerTest < ActionMailer::TestCase
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/coupons_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CouponsPaginationType < Types::PaginationType
3 | entries_field Types::CouponType
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/events_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventsPaginationType < Types::PaginationType
3 | entries_field Types::EventType
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/orders_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrdersPaginationType < Types::PaginationType
3 | entries_field Types::OrderType
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/signups_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupsPaginationType < Types::PaginationType
3 | entries_field Types::SignupType
4 | end
5 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/applications/edit.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= t('.title') %>
3 |
4 |
5 | <%= render 'form', application: @application %>
6 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/applications/new.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= t('.title') %>
3 |
4 |
5 | <%= render 'form', application: @application %>
6 |
--------------------------------------------------------------------------------
/app/views/reports/per_user.html.erb:
--------------------------------------------------------------------------------
1 | <% @user_con_profiles.each do |user_con_profile| %>
2 | <%= render 'reports/per_user_single', user_con_profile: user_con_profile %>
3 | <% end %>
4 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/InterconFlyer.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/InterconFlyer.pdf
--------------------------------------------------------------------------------
/.yarn/sdks/prettier/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prettier",
3 | "version": "3.6.2-sdk",
4 | "main": "./index.cjs",
5 | "type": "commonjs",
6 | "bin": "./bin/prettier.cjs"
7 | }
8 |
--------------------------------------------------------------------------------
/app/javascript/DateTimeFormats.ts:
--------------------------------------------------------------------------------
1 | import { ParseKeys, ParseKeysByKeyPrefix } from 'i18next';
2 |
3 | export type DateTimeFormatKey = ParseKeysByKeyPrefix;
4 |
--------------------------------------------------------------------------------
/app/javascript/OAuth/mutations.graphql:
--------------------------------------------------------------------------------
1 | mutation RevokeAuthorizedApplication($uid: ID!) {
2 | revokeAuthorizedApplication(input: { uid: $uid }) {
3 | clientMutationId
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/app/javascript/styles/liquid_docs.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const liquidDocsBrowser: string;
3 | export declare const liquidDocsSpacer: string;
4 |
--------------------------------------------------------------------------------
/app/javascript/styles/run_capacity_graph.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const bucketCapacity: string;
3 | export declare const runCapacity: string;
4 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/Indian_food_set.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/Indian_food_set.JPG
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/InterconSFacebook.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/InterconSFacebook.jpg
--------------------------------------------------------------------------------
/config/initializers/gc_auto_compact.rb:
--------------------------------------------------------------------------------
1 | GC.auto_compact = ENV["RUBY_GC_AUTO_COMPACT"].present?
2 |
3 | STDERR.puts "Ruby GC auto-compact is #{GC.auto_compact ? "enabled" : "disabled"}."
4 |
--------------------------------------------------------------------------------
/app/graphql/types/form_section_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::FormSectionInputType < Types::BaseInputObject
3 | argument :title, String, required: false
4 | end
5 |
--------------------------------------------------------------------------------
/db/migrate/20161112203319_add_counted_to_signups.rb:
--------------------------------------------------------------------------------
1 | class AddCountedToSignups < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :signups, :counted, :boolean
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20231126190837_add_ahoy5_index.rb:
--------------------------------------------------------------------------------
1 | class AddAhoy5Index < ActiveRecord::Migration[7.1]
2 | def change
3 | add_index :ahoy_visits, %i[visitor_token started_at]
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/globalDefines.mts:
--------------------------------------------------------------------------------
1 | import { execSync } from 'child_process';
2 |
3 | export const globalDefines = {
4 | COMMIT_HASH: JSON.stringify(execSync('git rev-parse --short HEAD').toString()),
5 | };
6 |
--------------------------------------------------------------------------------
/app/graphql/types/conventions_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ConventionsPaginationType < Types::PaginationType
3 | entries_field Types::ConventionType
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/coupon_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CouponFiltersInputType < Types::BaseInputObject
3 | argument :code, String, required: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/email_routes_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EmailRoutesPaginationType < Types::PaginationType
3 | entries_field Types::EmailRouteType
4 | end
5 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/files/CrownePlazaFloorplan.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/cms_content_sets/smoke_and_mirrors/files/CrownePlazaFloorplan.jpg
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/pages/news.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: News
3 | admin_notes: ''
4 | invariant: false
5 | ---
6 | {{convention.name}} News
7 | {% include 'all-news' %}
--------------------------------------------------------------------------------
/db/migrate/20120616165745_add_banner_image_to_cons.rb:
--------------------------------------------------------------------------------
1 | class AddBannerImageToCons < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :cons, :banner_image, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180922221147_add_admin_notes_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddAdminNotesToEvents < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :events, :admin_notes, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/organization_role_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrganizationRoleInputType < Types::BaseInputObject
3 | argument :name, String, required: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/scheduled_value_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ScheduledValueType < Types::BaseObject
3 | field :timespans, [Types::TimespanWithValueType], null: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_changes_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupChangesPaginationType < Types::PaginationType
3 | entries_field Types::SignupChangeType
4 | end
5 |
--------------------------------------------------------------------------------
/bin/ci:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require_relative "../config/boot"
3 | require "active_support/continuous_integration"
4 |
5 | CI = ActiveSupport::ContinuousIntegration
6 | require_relative "../config/ci"
7 |
--------------------------------------------------------------------------------
/db/migrate/20120616165151_add_name_to_cons.rb:
--------------------------------------------------------------------------------
1 | class AddNameToCons < ActiveRecord::Migration[5.1]
2 | def change
3 | change_table :cons do |t|
4 | t.string :name
5 | end
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/db/migrate/20170522175455_add_bio_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddBioToUserConProfiles < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :user_con_profiles, :bio, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200516164805_add_location_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddLocationToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :location, :jsonb
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/form_item_role_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::FormItemRoleType < Types::BaseEnum
3 | FormItem::ROLE_VALUES.each { |possible_value| value possible_value }
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/show_schedule_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ShowScheduleType < Types::BaseEnum
3 | value("no")
4 | value("priv")
5 | value("gms")
6 | value("yes")
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_requests_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupRequestsPaginationType < Types::PaginationType
3 | entries_field Types::SignupRequestType
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/user_con_profiles_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::UserConProfilesPaginationType < Types::PaginationType
3 | entries_field Types::UserConProfileType
4 | end
5 |
--------------------------------------------------------------------------------
/db/migrate/20120616164203_con_root_pages.rb:
--------------------------------------------------------------------------------
1 | class ConRootPages < ActiveRecord::Migration[5.1]
2 | def change
3 | change_table :cons do |t|
4 | t.references :root_page
5 | end
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/db/migrate/20171111161320_add_cms_layout_to_pages.rb:
--------------------------------------------------------------------------------
1 | class AddCmsLayoutToPages < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :pages, :cms_layout, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200830175919_make_event_title_non_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeEventTitleNonNullable < ActiveRecord::Migration[6.0]
2 | def change
3 | change_column_null :events, :title, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20230109012113_make_run_event_id_not_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeRunEventIdNotNullable < ActiveRecord::Migration[7.0]
2 | def change
3 | change_column_null :runs, :event_id, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20250203173940_add_meta_description_to_pages.rb:
--------------------------------------------------------------------------------
1 | class AddMetaDescriptionToPages < ActiveRecord::Migration[8.0]
2 | def change
3 | add_column :pages, :meta_description, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/controllers/graphiql_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class GraphiQLControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/reports_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class ReportsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/sitemaps_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class SitemapsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/scheduling_ui_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SchedulingUiType < Types::BaseEnum
3 | EventCategory::SCHEDULING_UIS.each { |scheduling_ui| value(scheduling_ui) }
4 | end
5 |
--------------------------------------------------------------------------------
/app/jobs/remind_draft_event_proposals_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class RemindDraftEventProposalsJob < ApplicationJob
3 | def perform
4 | RemindDraftEventProposals.new.call!
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/models/registration_policy/error.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class RegistrationPolicy::Error
3 | attr_reader :message
4 |
5 | def initialize(message)
6 | @message = message
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20120604201100_scope_events_to_con.rb:
--------------------------------------------------------------------------------
1 | class ScopeEventsToCon < ActiveRecord::Migration[5.1]
2 | def change
3 | change_table :events do |t|
4 | t.references :con
5 | end
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/db/migrate/20151108021933_add_user_id_to_signups.rb:
--------------------------------------------------------------------------------
1 | class AddUserIdToSignups < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :signups, :user, index: true, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20151108041735_add_timezone_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddTimezoneToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :conventions, :timezone_name, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20170721235511_scope_forms_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class ScopeFormsToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :forms, :convention, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171127182439_add_default_value_to_form_items.rb:
--------------------------------------------------------------------------------
1 | class AddDefaultValueToFormItems < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :form_items, :default_value, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20220122172525_remove_file_from_cms_files.rb:
--------------------------------------------------------------------------------
1 | class RemoveFileFromCmsFiles < ActiveRecord::Migration[7.0]
2 | def change
3 | remove_column :cms_files, :file, :string, null: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20220226170448_add_event_id_to_tickets.rb:
--------------------------------------------------------------------------------
1 | class AddEventIdToTickets < ActiveRecord::Migration[7.0]
2 | def change
3 | add_reference :tickets, :event, null: true, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20220918173739_add_expose_in_to_form_items.rb:
--------------------------------------------------------------------------------
1 | class AddExposeInToFormItems < ActiveRecord::Migration[7.0]
2 | def change
3 | add_column :form_items, :expose_in, :text, array: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20230113184026_make_signup_run_id_not_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeSignupRunIdNotNullable < ActiveRecord::Migration[7.0]
2 | def change
3 | change_column_null :signups, :run_id, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20231105161432_make_run_starts_at_non_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeRunStartsAtNonNullable < ActiveRecord::Migration[7.0]
2 | def change
3 | change_column_null :runs, :starts_at, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/controllers/calendars_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class CalendarsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/csv_exports_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class CsvExportsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/passwords_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class PasswordsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/registrations_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class RegistrationsControllerTest < ActionController::TestCase
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/jobs/notify_event_proposal_changes_job_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class NotifyEventProposalChangesJobTest < ActiveJob::TestCase
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/form_item_expose_in_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::FormItemExposeInType < Types::BaseEnum
3 | FormItem::EXPOSE_IN_VALUES.each { |possible_value| value possible_value }
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/form_type_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::FormTypeType < Types::BaseEnum
3 | Form::FORM_TYPE_CONFIG.each { |key, config| value key, config["description"].capitalize }
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/scheduled_money_value_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ScheduledMoneyValueType < Types::BaseObject
3 | field :timespans, [Types::TimespanWithMoneyValueType], null: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/styles/event_list.module.scss:
--------------------------------------------------------------------------------
1 | .event-card-header {
2 | // display: grid;
3 | // grid-template-columns: 1fr min-content;
4 | }
5 |
6 | .event-card-event-title {
7 | overflow-wrap: break-word;
8 | }
9 |
--------------------------------------------------------------------------------
/app/javascript/styles/spoiler.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const spoiler: string;
3 | export declare const spoilerHidden: string;
4 | export declare const spoilerHover: string;
5 |
--------------------------------------------------------------------------------
/db/migrate/20160310141909_add_legacy_password_md5_to_users.rb:
--------------------------------------------------------------------------------
1 | class AddLegacyPasswordMd5ToUsers < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :users, :legacy_password_md5, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_run.png
--------------------------------------------------------------------------------
/lib/intercode/import.rb:
--------------------------------------------------------------------------------
1 | module Intercode
2 | module Import
3 | extend ActiveSupport::Autoload
4 |
5 | autoload :ImportLogger
6 | autoload :Markdownifier
7 | autoload :Table
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/test/controllers/stripe_account_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class StripeAccountControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/serverQueries.graphql:
--------------------------------------------------------------------------------
1 | query ClientConfigurationQuery {
2 | clientConfiguration {
3 | rails_default_active_storage_service_name
4 | rails_direct_uploads_url
5 | recaptcha_site_key
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/app/jobs/sync_team_mailing_list_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class SyncTeamMailingListJob < ApplicationJob
3 | def perform(event)
4 | SyncTeamMailingListService.new(event: event).call!
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/views/graphiql/show.html.erb:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/db/migrate/20151108133732_add_registration_policy_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddRegistrationPolicyToEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :events, :registration_policy, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180408151722_add_position_to_product_variants.rb:
--------------------------------------------------------------------------------
1 | class AddPositionToProductVariants < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :product_variants, :position, :integer
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180922185941_add_admin_notes_to_event_proposals.rb:
--------------------------------------------------------------------------------
1 | class AddAdminNotesToEventProposals < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :event_proposals, :admin_notes, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200807160757_make_ticket_type_name_not_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeTicketTypeNameNotNullable < ActiveRecord::Migration[6.0]
2 | def change
3 | change_column_null :ticket_types, :name, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20220328155131_add_run_to_order_entries.rb:
--------------------------------------------------------------------------------
1 | class AddRunToOrderEntries < ActiveRecord::Migration[7.0]
2 | def change
3 | add_reference :order_entries, :run, null: true, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_legend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_legend.png
--------------------------------------------------------------------------------
/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_popup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neinteractiveliterature/intercode/HEAD/doc-site/blog/2019-10-03-new-intercode-schedule-design/news_20191003_popup.png
--------------------------------------------------------------------------------
/test/controllers/email_forwarders_controller_test.rb:
--------------------------------------------------------------------------------
1 | require "test_helper"
2 |
3 | class EmailForwardersControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/single_page_app_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class SinglePageAppControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/stripe_webhooks_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class StripeWebhooksControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/@types/globals.d.ts:
--------------------------------------------------------------------------------
1 | interface Window {
2 | intercodeAssetsHost?: string;
3 | sentryFrontendDSN?: string;
4 | rollbarClientAccessToken?: string;
5 | __intercodeAssetURL: (filename: string) => string;
6 | }
7 |
--------------------------------------------------------------------------------
/app/javascript/ClickwrapAgreement/mutations.graphql:
--------------------------------------------------------------------------------
1 | mutation AcceptClickwrapAgreement {
2 | acceptClickwrapAgreement(input: {}) {
3 | my_profile {
4 | id
5 | accepted_clickwrap_agreement
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/app/javascript/CmsAdmin/queries.graphql:
--------------------------------------------------------------------------------
1 | query CmsAdminBaseQuery {
2 | convention: conventionByRequestHostIfPresent {
3 | id
4 | }
5 |
6 | currentAbility {
7 | can_create_cms_navigation_items
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/config/initializers/stripe.rb:
--------------------------------------------------------------------------------
1 | Rails.configuration.stripe = {
2 | publishable_key: ENV['STRIPE_PUBLISHABLE_KEY'],
3 | secret_key: ENV['STRIPE_SECRET_KEY']
4 | }
5 |
6 | Stripe.api_key = Rails.configuration.stripe[:secret_key]
7 |
--------------------------------------------------------------------------------
/db/migrate/20161113163044_add_requested_bucket_key_to_signups.rb:
--------------------------------------------------------------------------------
1 | class AddRequestedBucketKeyToSignups < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :signups, :requested_bucket_key, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20170829191902_add_admin_description_to_form_items.rb:
--------------------------------------------------------------------------------
1 | class AddAdminDescriptionToFormItems < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :form_items, :admin_description, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171015182922_remove_notify_on_changes_from_events.rb:
--------------------------------------------------------------------------------
1 | class RemoveNotifyOnChangesFromEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :events, :notify_on_changes, :boolean
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171029163258_add_maximum_tickets_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddMaximumTicketsToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :conventions, :maximum_tickets, :integer
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180826212515_remove_banner_image_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemoveBannerImageFromConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | remove_column :conventions, :banner_image, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20181010144914_add_reminded_at_to_event_proposals.rb:
--------------------------------------------------------------------------------
1 | class AddRemindedAtToEventProposals < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :event_proposals, :reminded_at, :datetime
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20181015021731_add_team_mailing_list_name_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddTeamMailingListNameToEvents < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :events, :team_mailing_list_name, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20181113145849_add_public_description_to_form_items.rb:
--------------------------------------------------------------------------------
1 | class AddPublicDescriptionToFormItems < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :form_items, :public_description, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200601160341_add_hidden_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddHiddenToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :hidden, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20230113220828_make_event_convention_id_not_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeEventConventionIdNotNullable < ActiveRecord::Migration[7.0]
2 | def change
3 | change_column_null :events, :convention_id, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20240224192755_add_clickwrap_agreement_to_products.rb:
--------------------------------------------------------------------------------
1 | class AddClickwrapAgreementToProducts < ActiveRecord::Migration[7.1]
2 | def change
3 | add_column :products, :clickwrap_agreement, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/controllers/authenticity_tokens_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class AuthenticityTokensControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/test/controllers/sns_notifications_controller_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class SnsNotificationsControllerTest < ActionDispatch::IntegrationTest
4 | # test "the truth" do
5 | # assert true
6 | # end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/scheduled_value_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ScheduledValueInputType < Types::BaseInputObject
3 | argument :timespans, [Types::TimespanWithValueInputType], required: true
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/EventRatings/mutations.graphql:
--------------------------------------------------------------------------------
1 | mutation RateEvent($eventId: ID!, $rating: Int!) {
2 | rateEvent(input: { eventId: $eventId, rating: $rating }) {
3 | event {
4 | id
5 | my_rating
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/authorizations/show.html.erb:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | <%= params[:code] %>
7 |
8 |
--------------------------------------------------------------------------------
/app/views/reports/single_user_printable.html.erb:
--------------------------------------------------------------------------------
1 | <%= render 'reports/per_user_single', user_con_profile: @subject_profile %>
2 | <% @events.each do |event| %>
3 | <%= render 'reports/per_event_single', event: event %>
4 | <% end %>
5 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/news.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: News
3 | admin_notes: ''
4 | skip_clickwrap_agreement: false
5 | hidden_from_search: false
6 | ---
7 | {{convention.name}} News
8 | {% include 'all-news' %}
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
2 |
3 | require "bundler/setup" # Set up gems listed in the Gemfile.
4 | require "bootsnap/setup" # Speed up boot time by caching expensive operations.
5 |
--------------------------------------------------------------------------------
/db/migrate/20161112202920_add_state_to_signups.rb:
--------------------------------------------------------------------------------
1 | class AddStateToSignups < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :signups, :state, :string, null: false, default: 'confirmed', index: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20170721234402_create_forms.rb:
--------------------------------------------------------------------------------
1 | class CreateForms < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :forms do |t|
4 | t.text :title
5 |
6 | t.timestamps
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20171014184903_remove_player_constraints_from_events.rb:
--------------------------------------------------------------------------------
1 | class RemovePlayerConstraintsFromEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :events, :player_constraints, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190209164652_add_organization_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddOrganizationToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_reference :conventions, :organization, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200121165316_add_body_sms_to_notification_templates.rb:
--------------------------------------------------------------------------------
1 | class AddBodySmsToNotificationTemplates < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :notification_templates, :body_sms, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20240331160734_add_default_currency_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddDefaultCurrencyToConventions < ActiveRecord::Migration[7.1]
2 | def change
3 | add_column :conventions, :default_currency_code, :string
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/doc/README_FOR_APP:
--------------------------------------------------------------------------------
1 | Use this README file to introduce your application and point to useful places in the API for learning more.
2 | Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
3 |
--------------------------------------------------------------------------------
/app/graphql/types/order_quantity_by_status_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrderQuantityByStatusType < Types::BaseObject
3 | field :quantity, Integer, null: false
4 | field :status, String, null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_count_by_state_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupCountByStateType < Types::BaseObject
3 | field :count, Int, null: false
4 | field :state, Types::SignupStateType, null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_request_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupRequestFiltersInputType < Types::BaseInputObject
3 | argument :state, [Types::SignupRequestStateType], required: false
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/styles/_toast.scss:
--------------------------------------------------------------------------------
1 | .toast-container {
2 | position: absolute;
3 | top: 65px;
4 | right: 10px;
5 | }
6 |
7 | .toast {
8 | // just make all toasts as wide as possible
9 | width: $toast-max-width;
10 | }
11 |
--------------------------------------------------------------------------------
/app/javascript/useValueUnless.ts:
--------------------------------------------------------------------------------
1 | export default function useValueUnless(getValue: () => T, unlessCondition: unknown): T | undefined {
2 | if (unlessCondition) {
3 | return undefined;
4 | }
5 |
6 | return getValue();
7 | }
8 |
--------------------------------------------------------------------------------
/app/jobs/receive_sns_email_delivery_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ReceiveSnsEmailDeliveryJob < ApplicationJob
3 | def perform(message)
4 | ReceiveSnsEmailDeliveryService.new(message: message).call!
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/pages/buckets.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bucket System Description
3 | invariant: true
4 | ---
5 | Game Signup Bucket System
6 | {% include "proposal_form_registration_policy_instructions" %}
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/partials/gravatar80.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | invariant: false
3 | ---
4 |
5 |
--------------------------------------------------------------------------------
/db/migrate/20171112181739_add_additional_info_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddAdditionalInfoToUserConProfiles < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :user_con_profiles, :additional_info, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180209193547_index_notified_at_on_form_response_changes.rb:
--------------------------------------------------------------------------------
1 | class IndexNotifiedAtOnFormResponseChanges < ActiveRecord::Migration[5.1]
2 | def change
3 | add_index :form_response_changes, :notified_at
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190127185603_add_clickwrap_agreement_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddClickwrapAgreementToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :clickwrap_agreement, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200322234518_add_canceled_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddCanceledToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :canceled, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Reporting a Vulnerability
4 |
5 | To report a vulnerability in Intercode, please email webmaster@interactiveliterature.org. We'll reply to acknowledge the vulnerability and let you know any updates.
6 |
--------------------------------------------------------------------------------
/app/graphql/types/search_result_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SearchResultType < Types::BaseObject
3 | field :entries, [Types::SearchResultEntryType], null: false
4 | field :total_entries, Int, null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/javascript/styles/_glow.scss:
--------------------------------------------------------------------------------
1 | @each $color, $value in $theme-colors {
2 | .glow-#{$color} {
3 | box-shadow: 0 0 5px $value;
4 | }
5 |
6 | .glow-inset-#{$color} {
7 | box-shadow: inset 0 0 5px $value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/app/services/hosting_service_adapters/instance.rb:
--------------------------------------------------------------------------------
1 | class HostingServiceAdapters::Instance
2 | attr_reader :id, :type, :group
3 |
4 | def initialize(type:, group:)
5 | @type = type.to_sym
6 | @group = group.to_sym
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20161112151816_add_maximum_event_signups_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddMaximumEventSignupsToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :conventions, :maximum_event_signups, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171014184727_add_participant_communications_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddParticipantCommunicationsToEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :events, :participant_communications, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190521212001_add_site_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddSiteModeToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :site_mode, :string, null: false, default: 'convention'
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/doc-site/src/components/HomepageFeatures.module.css:
--------------------------------------------------------------------------------
1 | .features {
2 | display: flex;
3 | align-items: center;
4 | padding: 2rem 0;
5 | width: 100%;
6 | }
7 |
8 | .featureSvg {
9 | height: 200px;
10 | width: 200px;
11 | }
12 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_content_type_indicator.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsContentTypeIndicator < Types::BaseEnum
3 | Types::CmsContentType.possible_types.each { |possible_type| value possible_type.graphql_name }
4 | end
5 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_variable_input.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsVariableInput < Types::BaseInputObject
3 | argument :key, String, required: true
4 | argument :value_json, String, required: true, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/scheduled_money_value_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ScheduledMoneyValueInputType < Types::BaseInputObject
3 | argument :timespans, [Types::TimespanWithMoneyValueInputType], required: true
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/packs/applicationEntry.ts:
--------------------------------------------------------------------------------
1 | import './setPublicPath';
2 | import 'vite/modulepreload-polyfill';
3 | import('../styles/application.scss');
4 |
5 | import(/* webpackChunkName: 'bootstrap-js' */ 'bootstrap');
6 | import('./application');
7 |
--------------------------------------------------------------------------------
/cms_content_sets/single_event/pages/conduct.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Code of Conduct
3 | invariant: false
4 | skip_clickwrap_agreement: true
5 | ---
6 | Code of Conduct
7 |
8 | Edit this page and enter your code of conduct.
9 |
--------------------------------------------------------------------------------
/config/initializers/rack_mini_profiler.rb:
--------------------------------------------------------------------------------
1 | if defined?(Rack::MiniProfiler)
2 | Rack::MiniProfiler.config.start_hidden = true
3 | Rack::MiniProfiler.config.collapse_results = false
4 | Rack::MiniProfiler.config.position = 'bottom-left'
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180209153345_add_ticket_name_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddTicketNameToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :conventions, :ticket_name, :string, null: false, default: 'ticket'
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/factories/product_variant.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_bot
2 |
3 | FactoryBot.define do
4 | factory :product_variant do
5 | sequence(:name) { |n| "Variant #{n}" }
6 | product
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/javascript/styles/_print.scss:
--------------------------------------------------------------------------------
1 | @media print {
2 | .no-print {
3 | display: none;
4 | }
5 | }
6 |
7 | .page-break-after {
8 | page-break-after: always;
9 |
10 | &:last-child {
11 | page-break-after: inherit;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/config/cable.yml:
--------------------------------------------------------------------------------
1 | development:
2 | adapter: async
3 |
4 | test:
5 | adapter: test
6 |
7 | production:
8 | adapter: redis
9 | url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
10 | channel_prefix: intercode_production
11 |
--------------------------------------------------------------------------------
/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
6 | Mime::Type.register 'text/calendar', :ics
7 |
--------------------------------------------------------------------------------
/db/migrate/20170829204511_add_timeblock_preferences_to_event_proposals.rb:
--------------------------------------------------------------------------------
1 | class AddTimeblockPreferencesToEventProposals < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :event_proposals, :timeblock_preferences, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180123225540_remove_precon_bids_allowed_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemovePreconBidsAllowedFromConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :conventions, :precon_bids_allowed, :boolean
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180312150839_add_timestamps_to_orders.rb:
--------------------------------------------------------------------------------
1 | class AddTimestampsToOrders < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :orders, :submitted_at, :timestamp
4 | add_column :orders, :paid_at, :timestamp
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20181015020539_add_event_mailing_list_domain_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddEventMailingListDomainToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :event_mailing_list_domain, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20181108151904_add_private_signup_list_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddPrivateSignupListToEvents < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :events, :private_signup_list, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190601161948_add_signup_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddSignupModeToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :signup_mode, :string, null: false, default: 'self_service'
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200125150313_add_allow_sms_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddAllowSmsToUserConProfiles < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :user_con_profiles, :allow_sms, :boolean, null: false, default: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200128165352_add_department_to_event_categories.rb:
--------------------------------------------------------------------------------
1 | class AddDepartmentToEventCategories < ActiveRecord::Migration[6.0]
2 | def change
3 | add_reference :event_categories, :department, null: true, foreign_key: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200128165503_add_proposal_description_to_event_categories.rb:
--------------------------------------------------------------------------------
1 | class AddProposalDescriptionToEventCategories < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :event_categories, :proposal_description, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20220313171517_add_expires_at_to_signups.rb:
--------------------------------------------------------------------------------
1 | class AddExpiresAtToSignups < ActiveRecord::Migration[7.0]
2 | def change
3 | add_column :signups, :expires_at, :timestamp, null: true
4 | add_index :signups, :expires_at
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20240916155847_add_disable_captcha_to_root_sites.rb:
--------------------------------------------------------------------------------
1 | class AddDisableCaptchaToRootSites < ActiveRecord::Migration[7.2]
2 | def change
3 | add_column :root_sites, :disable_captcha, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/public/403.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Forbidden
5 |
6 |
7 | Access Denied
8 | You do not have permission to access this resource.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/graphql/types/mailing_lists_result_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::MailingListsResultType < Types::BaseObject
3 | field :emails, [Types::ContactEmailType], null: false
4 | field :metadata_fields, [String], null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/money_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::MoneyInputType < Types::BaseInputObject
3 | argument :currency_code, String, required: true, camelize: false
4 | argument :fractional, Integer, required: true
5 | end
6 |
--------------------------------------------------------------------------------
/app/javascript/styles/dev-mode-graphiql.scss:
--------------------------------------------------------------------------------
1 | @import './bootstrap_custom';
2 |
3 | $code-font-size: 16px;
4 |
5 | body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 | .graphiql-container {
11 | width: 100vw;
12 | height: 100vh;
13 | }
14 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/partials/gravatar80.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: gravatar80
3 | invariant: false
4 | ---
5 |
6 |
--------------------------------------------------------------------------------
/db/migrate/20170526163733_add_show_nickname_in_bio_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddShowNicknameInBioToUserConProfiles < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :user_con_profiles, :show_nickname_in_bio, :boolean
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171018213324_rename_accepting_bids_to_accepting_proposals.rb:
--------------------------------------------------------------------------------
1 | class RenameAcceptingBidsToAcceptingProposals < ActiveRecord::Migration[5.1]
2 | def change
3 | rename_column :conventions, :accepting_bids, :accepting_proposals
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171111160745_add_default_layout_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddDefaultLayoutToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :conventions, :default_layout, foreign_key: { to_table: :cms_layouts }
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190209164632_create_organizations.rb:
--------------------------------------------------------------------------------
1 | class CreateOrganizations < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :organizations do |t|
4 | t.text :name
5 |
6 | t.timestamps
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/test/docker-ruby-test.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -x
4 | set -e
5 |
6 | ./wait-for-it.sh postgres:5432
7 |
8 | echo "Setting up Intercode"
9 | RAILS_ENV=development bin/rake db:create db:migrate db:test:prepare
10 |
11 | bin/rails test
12 |
--------------------------------------------------------------------------------
/.yarn/sdks/typescript/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typescript",
3 | "version": "5.9.3-sdk",
4 | "main": "./lib/typescript.js",
5 | "type": "commonjs",
6 | "bin": {
7 | "tsc": "./bin/tsc",
8 | "tsserver": "./bin/tsserver"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/graphql/types/email_route_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EmailRouteType < Types::BaseObject
3 | field :forward_addresses, [String], null: true
4 | field :id, ID, null: false
5 | field :receiver_address, String, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/permissioned_role_type_indicator.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PermissionedRoleTypeIndicator < Types::BaseEnum
3 | Types::PermissionedRoleType.possible_types.each { |possible_type| value possible_type.graphql_name }
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/getBackendBaseUrl.ts:
--------------------------------------------------------------------------------
1 | export function getBackendBaseUrl(): URL {
2 | if (typeof window !== 'undefined') {
3 | return new URL('/', window.location.href);
4 | } else {
5 | return new URL('/', process.env.INTERCODE_BACKEND);
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/app/javascript/packs/applicationStyles.ts:
--------------------------------------------------------------------------------
1 | import './setPublicPath';
2 |
3 | // Style-only entry point. Used as part of applicationEntry, but also usable standalone.
4 |
5 | import(/* webpackChunkName: 'applicationStylesheet' */ '../styles/application.scss');
6 |
--------------------------------------------------------------------------------
/app/services/hosting_service_adapters.rb:
--------------------------------------------------------------------------------
1 | module HostingServiceAdapters
2 | ADAPTER_CLASSES = [HostingServiceAdapters::Fly, HostingServiceAdapters::Heroku]
3 |
4 | def self.find_adapter
5 | ADAPTER_CLASSES.map(&:new).find(&:applicable?)
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/views/layouts/liquid_docs.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= render partial: 'layouts/head' %>
5 |
6 |
7 |
8 | <%= yield %>
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/config/inflections.json:
--------------------------------------------------------------------------------
1 | {
2 | "acronym": [
3 | "GM",
4 | "GMs",
5 | "JSON",
6 | "LARP",
7 | "LARPs",
8 | "NPC",
9 | "NPCs",
10 | "OAuth",
11 | "PC",
12 | "PCs",
13 | "RPG",
14 | "RPGs"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/config/initializers/recaptcha.rb:
--------------------------------------------------------------------------------
1 | Recaptcha.configuration.hostname = ->(hostname) do
2 | (
3 | Rails.application.config.action_mailer.default_url_options[:host].gsub(/:\d+\z/, '') == hostname ||
4 | Convention.where(domain: hostname).any?
5 | )
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20190116034950_add_needs_update_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddNeedsUpdateToUserConProfiles < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :user_con_profiles, :needs_update, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190127192813_add_skip_clickwrap_agreement_to_pages.rb:
--------------------------------------------------------------------------------
1 | class AddSkipClickwrapAgreementToPages < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :pages, :skip_clickwrap_agreement, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/choice_count_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ChoiceCountType < Types::BaseObject
3 | field :choice, Integer, null: false
4 | field :count, Integer, null: false
5 | field :state, Types::SignupStateType, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/department_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::DepartmentInputType < Types::BaseInputObject
3 | argument :name, String, required: false
4 | argument :proposal_description, String, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/event_with_choice_counts_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventWithChoiceCountsType < Types::BaseObject
3 | field :choice_counts, [Types::ChoiceCountType], null: false
4 | field :event, Types::EventType, null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/permissioned_model_type_indicator.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PermissionedModelTypeIndicator < Types::BaseEnum
3 | Types::PermissionedModelType.possible_types.each { |possible_type| value possible_type.graphql_name }
4 | end
5 |
--------------------------------------------------------------------------------
/app/javascript/EventsApp/MySignupQueue/signup-queue.module.css:
--------------------------------------------------------------------------------
1 | .skip {
2 | background-color: hsl(from var(--bs-gray) h s l / calc(alpha * 0.2));
3 | }
4 |
5 | .skip.waitlist {
6 | background-color: hsl(from var(--bs-yellow) h s l / calc(alpha * 0.2));
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/app/javascript/EventsApp/buildEventUrl.ts:
--------------------------------------------------------------------------------
1 | import parameterize from '../parameterize';
2 |
3 | export default function buildEventUrl(event: { id: string; title?: string | null }): string {
4 | return `/events/${event.id}-${parameterize(event.title ?? '')}`;
5 | }
6 |
--------------------------------------------------------------------------------
/app/policies/coupon_application_policy.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CouponApplicationPolicy < ApplicationPolicy
3 | delegate :order, to: :record
4 |
5 | def manage?
6 | OrderPolicy.new(authorization_info, order).manage_coupons?
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20120609181638_add_start_and_end_times_to_cons.rb:
--------------------------------------------------------------------------------
1 | class AddStartAndEndTimesToCons < ActiveRecord::Migration[5.1]
2 | def change
3 | change_table :cons do |t|
4 | t.datetime :starts_at
5 | t.datetime :ends_at
6 | end
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20170724172123_add_event_proposal_form_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddEventProposalFormToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :conventions, :event_proposal_form, foreign_key: { to_table: :forms }
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190622195919_add_signup_requests_open_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddSignupRequestsOpenToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :signup_requests_open, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200930160120_remove_registrar_from_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class RemoveRegistrarFromUserConProfiles < ActiveRecord::Migration[6.0]
2 | def change
3 | remove_column :user_con_profiles, :registrar, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20221120175702_add_event_ratings_foreign_keys.rb:
--------------------------------------------------------------------------------
1 | class AddEventRatingsForeignKeys < ActiveRecord::Migration[7.0]
2 | def change
3 | add_foreign_key :event_ratings, :user_con_profiles
4 | add_foreign_key :event_ratings, :events
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20231216024636_make_mepto_override_value_non_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeMeptoOverrideValueNonNullable < ActiveRecord::Migration[7.1]
2 | def change
3 | change_column_null :maximum_event_provided_tickets_overrides, :override_value, false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_content_group_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsContentGroupInputType < Types::BaseInputObject
3 | argument :contents, [Types::CmsContentInputType], required: false
4 | argument :name, String, required: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/event_provided_ticket_list_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventProvidedTicketListType < Types::BaseObject
3 | field :provided_by_event, Types::EventType, null: false
4 | field :tickets, [Types::TicketType], null: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/authorizations/error.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= t('doorkeeper.authorizations.error.title') %>
3 |
4 |
5 |
6 | <%= @pre_auth.error_response.body[:error_description] %>
7 |
8 |
--------------------------------------------------------------------------------
/db/migrate/20161127205353_add_registrations_frozen_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddRegistrationsFrozenToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :conventions, :registrations_frozen, :boolean, default: false, null: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171021154612_remove_signups_allowed_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemoveSignupsAllowedFromConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :conventions, :signups_allowed, :string, default: 'not_yet', null: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171111234858_add_user_con_profile_form_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddUserConProfileFormToConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :conventions, :user_con_profile_form, foreign_key: { to_table: 'forms' }
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180122194924_add_gravatar_enabled_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddGravatarEnabledToUserConProfiles < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :user_con_profiles, :gravatar_enabled, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20180216202555_add_allows_event_signups_to_ticket_types.rb:
--------------------------------------------------------------------------------
1 | class AddAllowsEventSignupsToTicketTypes < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :ticket_types, :allows_event_signups, :boolean, default: true, null: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-var-requires */
2 |
3 | module.exports = {
4 | plugins: [
5 | require('autoprefixer'),
6 | ...(process.env.NODE_ENV === 'production' ? [require('cssnano')({ preset: 'default' })] : []),
7 | ],
8 | };
9 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_content_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsContentInputType < Types::BaseInputObject
3 | argument :content_type, Types::CmsContentTypeIndicator, required: true, camelize: false
4 | argument :id, ID, required: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/convention_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ConventionFiltersInputType < Types::BaseInputObject
3 | argument :name, String, required: false
4 | argument :organization_name, String, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/room_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RoomType < Types::BaseObject
3 | field :id, ID, null: false
4 | field :name, String, null: true
5 | field :runs, [Types::RunType], null: false
6 |
7 | association_loaders Room, :runs
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/types/ticket_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TicketInputType < Types::BaseInputObject
3 | argument :provided_by_event_id, ID, required: false, camelize: true
4 | argument :ticket_type_id, ID, required: false, camelize: true
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/timespan_with_value_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TimespanWithValueType < Types::BaseObject
3 | field :finish, Types::DateType, null: true
4 | field :start, Types::DateType, null: true
5 | field :value, String, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/javascript/Store/couponFields.graphql:
--------------------------------------------------------------------------------
1 |
2 |
3 | fragment CouponFields on Coupon {
4 | id
5 | code
6 | fixed_amount {
7 | fractional
8 | currency_code
9 | }
10 | percent_discount
11 | provides_product {
12 | id
13 | name
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 | <%= cms_rendering_context.render_app_root_content(effective_cms_layout(request.path), {
2 | 'content_for_head' => render('layouts/head'),
3 | 'event' => @event,
4 | 'page' => @page,
5 | 'browser_warning' => browser_warning
6 | }) %>
7 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/buckets.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bucket System Description
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: false
5 | ---
6 | Game Signup Bucket System
7 | {% include "proposal_form_registration_policy_instructions" %}
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/store.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Intercon V Store
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: false
5 | ---
6 |
--------------------------------------------------------------------------------
/db/migrate/20190814120605_make_requested_bucket_key_nullable_for_signup_requests.rb:
--------------------------------------------------------------------------------
1 | class MakeRequestedBucketKeyNullableForSignupRequests < ActiveRecord::Migration[5.2]
2 | def change
3 | change_column_null :signup_requests, :requested_bucket_key, true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20200216222452_add_trigram_extension.rb:
--------------------------------------------------------------------------------
1 | class AddTrigramExtension < ActiveRecord::Migration[6.0]
2 | def up
3 | execute 'CREATE EXTENSION IF NOT EXISTS pg_trgm'
4 | end
5 |
6 | def down
7 | execute 'DROP EXTENSION pg_trgm'
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20240620014115_add_ranked_choice_ordering_boost_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddRankedChoiceOrderingBoostToUserConProfiles < ActiveRecord::Migration[7.1]
2 | def change
3 | add_column :user_con_profiles, :ranked_choice_ordering_boost, :integer
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/lib/intercode/import/illyan/table.rb:
--------------------------------------------------------------------------------
1 | class Intercode::Import::Illyan::Table < Intercode::Import::Table
2 | def table_name
3 | self.class.name.demodulize.downcase.to_sym
4 | end
5 |
6 | private
7 |
8 | def row_id(row)
9 | row[:id]
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/lib/intercode/import/procon/table.rb:
--------------------------------------------------------------------------------
1 | class Intercode::Import::Procon::Table < Intercode::Import::Table
2 | def table_name
3 | self.class.name.demodulize.downcase.to_sym
4 | end
5 |
6 | private
7 |
8 | def row_id(row)
9 | row[:id]
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/jobs/send_user_activity_alerts_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class SendUserActivityAlertsJob < ApplicationJob
3 | def perform(user_con_profile, event)
4 | SendUserActivityAlertsService.new(user_con_profile: user_con_profile, event: event).call!
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/policies/queries/nil_safe_cache.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Queries::NilSafeCache
3 | def initialize
4 | @values = {}
5 | end
6 |
7 | def get(key)
8 | return @values[key] if @values.key?(key)
9 | @values[key] = yield
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/policies/queries/query_manager.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Queries::QueryManager
3 | def self.query_methods
4 | instance_methods(false)
5 | end
6 |
7 | attr_reader :user
8 |
9 | def initialize(user:)
10 | @user = user
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/services/cms_content_loaders/conflict_policy.rb:
--------------------------------------------------------------------------------
1 | class CmsContentLoaders::ConflictPolicy
2 | def action_for(_existing_item, _new_item, _attrs)
3 | raise "CmsContentLoader::ConflictPolicy subclasses must implement #action_for(existing_item, new_item, attrs)"
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/services/content_cloners/rooms_cloner.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ContentCloners::RoomsCloner < ContentCloners::ContentClonerBase
3 | def clone(convention)
4 | @id_maps[:rooms] = clone_with_id_map(source_convention.rooms, convention.rooms)
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/services/run_notifications_service.rb:
--------------------------------------------------------------------------------
1 | class RunNotificationsService < CivilService::Service
2 | private
3 |
4 | def inner_call
5 | [NotifyEventProposalChangesJob, NotifyEventChangesJob, RemindDraftEventProposalsJob].each(&:perform_later)
6 | success
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20180212193535_remove_registrations_frozen_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemoveRegistrationsFrozenFromConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :conventions, :registrations_frozen, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20190419202156_add_legacy_password_sha1_to_users.rb:
--------------------------------------------------------------------------------
1 | class AddLegacyPasswordSha1ToUsers < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :users, :legacy_password_sha1, :text
4 | add_column :users, :legacy_password_sha1_salt, :text
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20191116152343_add_unaccent_extension.rb:
--------------------------------------------------------------------------------
1 | class AddUnaccentExtension < ActiveRecord::Migration[6.0]
2 | def up
3 | execute 'CREATE EXTENSION IF NOT EXISTS unaccent'
4 | end
5 |
6 | def down
7 | execute 'DROP EXTENSION unaccent'
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/money_helper.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module MoneyHelper
3 | def self.coerce_money_input(input)
4 | return nil unless input
5 |
6 | input = input.to_h.symbolize_keys
7 | Money.new(input[:fractional], input[:currency_code])
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/sources/signup_count.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Sources::SignupCount < GraphQL::Dataloader::Source
3 | def fetch(keys)
4 | presenters_by_run_id = SignupCountPresenter.for_runs(keys)
5 | keys.map { |run| presenters_by_run_id[run.id] }
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/config/initializers/loofah.rb:
--------------------------------------------------------------------------------
1 | Loofah::HTML5::SafeList::ACCEPTABLE_CSS_FUNCTIONS.merge Set.new(%w[
2 | calc rgb rgba hsl hsla opacity
3 | rotate rotate3d rotateX rotateY rotateZ
4 | scale scale3d scaleX scaleY scaleZ
5 | translate translate3d translateX translateY translateZ
6 | ])
7 |
--------------------------------------------------------------------------------
/config/initializers/rack_profiler.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | if Rails.env.development? && ENV['RACK_MINI_PROFILER']
4 | require 'rack-mini-profiler'
5 |
6 | # initialization is skipped so trigger it
7 | Rack::MiniProfilerRails.initialize!(Rails.application)
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20210915155339_make_form_item_position_non_nullable.rb:
--------------------------------------------------------------------------------
1 | class MakeFormItemPositionNonNullable < ActiveRecord::Migration[6.1]
2 | def change
3 | change_column_null :form_items, :position, false
4 | change_column_null :form_sections, :position, false
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20240417195945_add_unique_index_to_signup_ranked_choice_priority.rb:
--------------------------------------------------------------------------------
1 | class AddUniqueIndexToSignupRankedChoicePriority < ActiveRecord::Migration[7.1]
2 | def change
3 | add_index :signup_ranked_choices, %i[user_con_profile_id state priority], unique: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/models/cms_content_set_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | describe CmsContentSet do
4 | it 'loads metadata from content sets' do
5 | content_set = CmsContentSet.new(name: 'rock_and_romance')
6 | assert_equal ['standard'], content_set.metadata[:inherit]
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/.solargraph.yml:
--------------------------------------------------------------------------------
1 | ---
2 | include:
3 | - "**/*.rb"
4 | exclude:
5 | - vendor/**/*
6 | - ".bundle/**/*"
7 | require: []
8 | domains: []
9 | reporters:
10 | - rubocop
11 | - require_not_found
12 | require_paths:
13 | - test
14 | max_files: 5000
15 | plugins:
16 | - solargraph-rails
17 |
--------------------------------------------------------------------------------
/app/graphql/types/money_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::MoneyType < Types::BaseObject
3 | field :currency_code, String, null: false
4 | field :fractional, Integer, null: false
5 |
6 | def currency_code
7 | object.currency.iso_code
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/types/order_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrderInputType < Types::BaseInputObject
3 | argument :payment_amount, Types::MoneyInputType, required: false, camelize: false
4 | argument :payment_note, String, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/pricing_strategy_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PricingStrategyType < Types::BaseEnum
3 | value("fixed", "Fixed price")
4 | value("scheduled_value", "Price that changes over time")
5 | value("pay_what_you_want", "Pay-what-you-want price")
6 | end
7 |
--------------------------------------------------------------------------------
/app/javascript/styles/liquid_docs.module.scss:
--------------------------------------------------------------------------------
1 | .liquid-docs-browser {
2 | position: fixed;
3 | left: 0;
4 | bottom: 0;
5 | width: 100vw;
6 | height: 40vh;
7 | z-index: 1000;
8 | background-color: #ffffff;
9 | }
10 |
11 | .liquid-docs-spacer {
12 | height: 40vh;
13 | }
14 |
--------------------------------------------------------------------------------
/db/migrate/20180123225046_rename_bid_permissions.rb:
--------------------------------------------------------------------------------
1 | class RenameBidPermissions < ActiveRecord::Migration[5.1]
2 | def change
3 | rename_column :user_con_profiles, :bid_committee, :proposal_committee
4 | rename_column :user_con_profiles, :bid_chair, :proposal_chair
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/email_route_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EmailRouteInputType < Types::BaseInputObject
3 | argument :forward_addresses, [String], required: false, camelize: false
4 | argument :receiver_address, String, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/ranked_choice_decisions_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RankedChoiceDecisionsPaginationType < Types::PaginationType
3 | description "A paginated table of RankedChoiceDecisions."
4 |
5 | entries_field Types::RankedChoiceDecisionType
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/uncamelized_field.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::UncamelizedField < Types::BaseField
3 | # We don't camelize fields in the Intercode API (this could change later)
4 | def initialize(*args, camelize: false, **kwargs, &block)
5 | super
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/ClickwrapAgreement/queries.graphql:
--------------------------------------------------------------------------------
1 | query ClickwrapAgreementQuery {
2 | convention: conventionByRequestHost {
3 | id
4 | name
5 | clickwrap_agreement_html
6 |
7 | my_profile {
8 | id
9 | accepted_clickwrap_agreement
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/app/javascript/styles/_color_variants.scss:
--------------------------------------------------------------------------------
1 | @each $color, $value in $color-variants {
2 | .bg-#{$color} {
3 | background-color: $value;
4 | }
5 | }
6 |
7 | @each $color, $value in $theme-colors {
8 | .text-hover-#{$color}:hover {
9 | color: $value !important;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/config/initializers/application_controller_renderer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # ActiveSupport::Reloader.to_prepare do
4 | # ApplicationController.renderer.defaults.merge!(
5 | # http_host: 'example.org',
6 | # https: false
7 | # )
8 | # end
9 |
--------------------------------------------------------------------------------
/config/initializers/cadmus.rb:
--------------------------------------------------------------------------------
1 | Cadmus.page_model = 'Page'
2 | Cadmus.partial_model = 'CmsPartial'
3 | Cadmus.layout_model = 'CmsLayout'
4 | CadmusNavbar.navigation_item_model = 'CmsNavigationItem'
5 |
6 | Cadmus::Tags::PageUrl.define_page_path_method { |page_name, _parent| "/pages/#{page_name}" }
7 |
--------------------------------------------------------------------------------
/db/migrate/20151129142816_add_provided_by_event_to_tickets.rb:
--------------------------------------------------------------------------------
1 | class AddProvidedByEventToTickets < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :tickets, :provided_by_event, index: true
4 | add_foreign_key :tickets, :events, column: :provided_by_event_id
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20171031202206_add_maximum_event_provided_tickets_to_ticket_types.rb:
--------------------------------------------------------------------------------
1 | class AddMaximumEventProvidedTicketsToTicketTypes < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :ticket_types, :maximum_event_provided_tickets, :integer, null: false, default: 0
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20171201155843_add_receive_whos_free_emails_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddReceiveWhosFreeEmailsToUserConProfiles < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :user_con_profiles, :receive_whos_free_emails, :boolean, null: false, default: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20201010181146_remove_stripe_keys_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemoveStripeKeysFromConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | remove_column :conventions, :stripe_publishable_key, :text
4 | remove_column :conventions, :stripe_secret_key, :text
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20250202200327_add_prioritize_waitlist_to_signup_ranked_choices.rb:
--------------------------------------------------------------------------------
1 | class AddPrioritizeWaitlistToSignupRankedChoices < ActiveRecord::Migration[8.0]
2 | def change
3 | add_column :signup_ranked_choices, :prioritize_waitlist, :boolean, default: false, null: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/liquid_assign.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::LiquidAssign < Types::BaseObject
3 | field :cms_variable_value_json, String, null: true, camelize: false
4 | field :drop_class_name, String, null: false, camelize: false
5 | field :name, String, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/timespan_with_money_value_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TimespanWithMoneyValueType < Types::BaseObject
3 | field :finish, Types::DateType, null: true
4 | field :start, Types::DateType, null: true
5 | field :value, Types::MoneyType, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/cms_content_sets/base/layouts/Default.liquid:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ content_for_head }}
5 |
6 | {{ content_for_navbar }}
7 |
8 |
9 | {{ content_for_layout }}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/config/initializers/cookies_serializer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Specify a serializer for the signed and encrypted cookie jars.
4 | # Valid options are :json, :marshal, and :hybrid.
5 | Rails.application.config.action_dispatch.cookies_serializer = :json
6 |
--------------------------------------------------------------------------------
/db/migrate/20170219064321_remove_news_and_con_com_meetings_from_conventions.rb:
--------------------------------------------------------------------------------
1 | class RemoveNewsAndConComMeetingsFromConventions < ActiveRecord::Migration[5.1]
2 | def change
3 | remove_column :conventions, :news, :text
4 | remove_column :conventions, :con_com_meetings, :text
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20180201184633_add_age_restrictions_and_content_warnings_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddAgeRestrictionsAndContentWarningsToEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :events, :age_restrictions, :text
4 | add_column :events, :content_warnings, :text
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/db/migrate/20220102231745_add_open_graph_image_and_icon_image_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddOpenGraphImageAndIconImageToConventions < ActiveRecord::Migration[7.0]
2 | def change
3 | add_column :conventions, :open_graph_image, :text
4 | add_column :conventions, :favicon, :text
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/lib/tasks/annotate_rb.rake:
--------------------------------------------------------------------------------
1 | # This rake task was added by annotate_rb gem.
2 |
3 | # Can set `ANNOTATERB_SKIP_ON_DB_TASKS` to be anything to skip this
4 | if Rails.env.development? && ENV["ANNOTATERB_SKIP_ON_DB_TASKS"].nil?
5 | require "annotate_rb"
6 |
7 | AnnotateRb::Core.load_rake_tasks
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_partial_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsPartialInputType < Types::BaseInputObject
3 | argument :admin_notes, String, required: false, camelize: false
4 | argument :content, String, required: false
5 | argument :name, String, required: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/email_route_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EmailRouteFiltersInputType < Types::BaseInputObject
3 | argument :forward_addresses, String, required: false, camelize: false
4 | argument :receiver_address, String, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupModeType < Types::BaseEnum
3 | value("self_service", "Attendees can sign themselves up for events")
4 | value("moderated", "Attendees can request signups and signup changes but con staff must approve them")
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/timezone_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TimezoneModeType < Types::BaseEnum
3 | value("convention_local", "Display dates and times using convention’s local time zone")
4 | value("user_local", "Display dates and times using user’s local time zone")
5 | end
6 |
--------------------------------------------------------------------------------
/app/graphql/types/winning_user_con_profile_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::WinningUserConProfileInputType < Types::BaseInputObject
3 | argument :convention_id, ID, required: false, camelize: true
4 | argument :user_con_profile_id, ID, required: false, camelize: true
5 | end
6 |
--------------------------------------------------------------------------------
/app/javascript/LiquidDocs/escapeRegExp.ts:
--------------------------------------------------------------------------------
1 | // https://codereview.stackexchange.com/questions/153691/escape-user-input-for-use-in-js-regex
2 | export default function escapeRegExp(string: string): string {
3 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
4 | }
5 |
--------------------------------------------------------------------------------
/app/javascript/LiquidDocs/findLiquidTagName.ts:
--------------------------------------------------------------------------------
1 | import { YardClass } from './DocData';
2 |
3 | export default function findLiquidTagName(liquidTag: YardClass): string | undefined {
4 | const tagNameTag = liquidTag.tags.find((tag) => tag.tag_name === 'liquid_tag_name');
5 | return tagNameTag?.text;
6 | }
7 |
--------------------------------------------------------------------------------
/app/presenters/concerns/form_markdown.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module FormMarkdown
3 | def render_markdown(content)
4 | MarkdownPresenter
5 | .new('', cadmus_renderer: cadmus_renderer)
6 | .render(content, sanitize_content: false, filter_liquid_tags: false)
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/services/cms_content_loaders/cms_partials.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsContentLoaders::CmsPartials < CmsContentLoaders::Base
3 | private
4 |
5 | def storage_adapter
6 | @storage_adapter ||= CmsContentStorageAdapters::CmsPartials.new(cms_parent, content_set)
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/bin/rubocop:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require "rubygems"
3 | require "bundler/setup"
4 |
5 | # Explicit RuboCop config increases performance slightly while avoiding config confusion.
6 | ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
7 |
8 | load Gem.bin_path("rubocop", "rubocop")
9 |
--------------------------------------------------------------------------------
/cms_content_sets/single_event/layouts/Default.liquid:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ content_for_head }}
5 |
6 | {{ content_for_navbar }}
7 |
8 |
9 | {{ content_for_layout }}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/cms_content_sets/standard/layouts/Default.liquid:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ content_for_head }}
5 |
6 | {{ content_for_navbar }}
7 |
8 |
9 | {{ content_for_layout }}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/conlogo.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: con logo test
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: true
5 | ---
6 |
7 |
8 |

9 |
10 |
--------------------------------------------------------------------------------
/db/migrate/20180207173614_add_admin_notes_to_cms_tables.rb:
--------------------------------------------------------------------------------
1 | class AddAdminNotesToCmsTables < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :pages, :admin_notes, :text
4 | add_column :cms_partials, :admin_notes, :text
5 | add_column :cms_layouts, :admin_notes, :text
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/db/migrate/20190127190135_add_accepted_clickwrap_agreement_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddAcceptedClickwrapAgreementToUserConProfiles < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :user_con_profiles, :accepted_clickwrap_agreement, :boolean, null: false, default: false
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20240504165651_add_ranked_choice_allow_waitlist_to_user_con_profiles.rb:
--------------------------------------------------------------------------------
1 | class AddRankedChoiceAllowWaitlistToUserConProfiles < ActiveRecord::Migration[7.1]
2 | def change
3 | add_column :user_con_profiles, :ranked_choice_allow_waitlist, :boolean, null: false, default: true
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/test/graphql/intercode_schema_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | class IntercodeSchemaTest < ActiveSupport::TestCase
4 | it 'generates a schema definition without throwing an exception' do
5 | definition = IntercodeSchema.to_definition
6 | assert_match /type Query/, definition
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/types/email_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EmailModeType < Types::BaseEnum
3 | value("forward", "Forward received emails to staff positions as configured")
4 | value("staff_emails_to_catch_all", "Forward all received staff emails to catch-all staff position")
5 | end
6 |
--------------------------------------------------------------------------------
/app/services/content_cloners/departments_cloner.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ContentCloners::DepartmentsCloner < ContentCloners::ContentClonerBase
3 | def clone(convention)
4 | @id_maps[:departments] = clone_with_id_map(source_convention.departments, convention.departments)
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/cms_content_sets/procon_import/layouts/Default.liquid:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ content_for_head }}
5 |
6 | {{ content_for_navbar }}
7 |
8 |
9 | {{ content_for_layout }}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/db/migrate/20240608175912_add_signup_round_to_ranked_choice_decisions.rb:
--------------------------------------------------------------------------------
1 | class AddSignupRoundToRankedChoiceDecisions < ActiveRecord::Migration[7.1]
2 | def change
3 | add_reference :ranked_choice_decisions, :signup_round, null: false, foreign_key: true # rubocop:disable Rails/NotNullColumn
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/.whitesource:
--------------------------------------------------------------------------------
1 | {
2 | "scanSettings": {
3 | "baseBranches": []
4 | },
5 | "checkRunSettings": {
6 | "vulnerableCheckRunConclusionLevel": "success",
7 | "displayMode": "diff"
8 | },
9 | "issueSettings": {
10 | "minSeverityLevel": "LOW",
11 | "issueType": "DEPENDENCY"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/javascript/@types/i18next.d.ts:
--------------------------------------------------------------------------------
1 | import 'react-i18next';
2 | import en from '../../../locales/en.json';
3 |
4 | declare module 'i18next' {
5 | interface CustomTypeOptions {
6 | allowObjectInHTMLChildren: true;
7 | returnNull: false;
8 | resources: { translation: typeof en };
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/javascript/Tables/HtmlCell.tsx:
--------------------------------------------------------------------------------
1 | import { CellContext } from '@tanstack/react-table';
2 |
3 | export default function HtmlCell({
4 | getValue,
5 | }: CellContext) {
6 | return ;
7 | }
8 |
--------------------------------------------------------------------------------
/app/services/content_cloners/ticket_types_cloner.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ContentCloners::TicketTypesCloner < ContentCloners::ContentClonerBase
3 | def clone(convention)
4 | @id_maps[:ticket_types] = clone_with_id_map(source_convention.ticket_types, convention.ticket_types)
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/app/views/user_mailer/confirmation_instructions.html.erb:
--------------------------------------------------------------------------------
1 |
2 | Welcome <%= @resource.email %>!
3 |
4 | You can confirm your account email through the link below:
5 |
6 | <%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>
7 |
8 |
--------------------------------------------------------------------------------
/db/migrate/20151108010959_create_rooms.rb:
--------------------------------------------------------------------------------
1 | class CreateRooms < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :rooms do |t|
4 | t.references :convention, index: true, foreign_key: true
5 | t.string :name
6 |
7 | t.timestamps null: false
8 | end
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/db/migrate/20191130174830_add_compacted_to_form_response_changes.rb:
--------------------------------------------------------------------------------
1 | class AddCompactedToFormResponseChanges < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :form_response_changes, :compacted, :boolean, null: false, default: false
4 | add_index :form_response_changes, :compacted
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/lib/intercode/import/procon/tables.rb:
--------------------------------------------------------------------------------
1 | module Intercode::Import::Procon::Tables
2 | extend ActiveSupport::Autoload
3 |
4 | autoload :Attendances
5 | autoload :Conventions
6 | autoload :ConventionStaffAttendances
7 | autoload :Events
8 | autoload :People
9 | autoload :ProposedEvents
10 | end
11 |
--------------------------------------------------------------------------------
/app/graphql/sources/order_summary.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Sources::OrderSummary < GraphQL::Dataloader::Source
3 | def fetch(keys)
4 | OrderSummaryPresenter.preload_associations(keys)
5 | keys.map { |user_con_profile| OrderSummaryPresenter.new(user_con_profile:).order_summary }
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_graphql_query_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsGraphqlQueryInputType < Types::BaseInputObject
3 | argument :admin_notes, String, required: false, camelize: false
4 | argument :identifier, String, required: false
5 | argument :query, String, required: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/mailing_lists_waitlists_result_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::MailingListsWaitlistsResultType < Types::BaseObject
3 | field :emails, [Types::ContactEmailType], null: false
4 | field :metadata_fields, [String], null: false
5 | field :run, Types::RunType, null: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/order_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrderFiltersInputType < Types::BaseInputObject
3 | argument :id, ID, required: false, camelize: false
4 | argument :status, [String], required: false
5 | argument :user_name, String, required: false, camelize: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/orders_connection_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrdersConnectionType < GraphQL::Types::Relay::BaseConnection
3 | edge_type Types::OrderType.edge_type
4 | field :total_count, Integer, null: false
5 |
6 | def total_count
7 | object.nodes.count
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/types/search_result_entry_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SearchResultEntryType < Types::BaseObject
3 | field :highlight, String, null: true
4 | field :model, Types::SearchableModelType, null: false
5 | field :rank, Float, null: false
6 | field :title, String, null: true
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/styles/_spin.scss:
--------------------------------------------------------------------------------
1 | // ported from font-awesome 4
2 |
3 | @keyframes spin {
4 | 0% {
5 | transform: rotate(0deg);
6 | }
7 | 100% {
8 | transform: rotate(359deg);
9 | }
10 | }
11 |
12 | .spin,
13 | .spin::before,
14 | .spin::after {
15 | animation: spin 2s infinite linear;
16 | }
17 |
--------------------------------------------------------------------------------
/app/services/cms_content_loaders/cms_graphql_queries.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsContentLoaders::CmsGraphqlQueries < CmsContentLoaders::Base
3 | private
4 |
5 | def storage_adapter
6 | @storage_adapter ||= CmsContentStorageAdapters::CmsGraphqlQueries.new(cms_parent, content_set)
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/pages/Flyer.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Flyer
3 | invariant: false
4 | ---
5 | Download PDF
6 |
7 |
--------------------------------------------------------------------------------
/db/migrate/20180301162045_add_additional_info_to_events.rb:
--------------------------------------------------------------------------------
1 | class AddAdditionalInfoToEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :events, :additional_info, :text
4 |
5 | reversible do |dir|
6 | dir.up { Event.update_all(additional_info: '{}') }
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20220924204825_fix_event_email_form_item_identifiers.rb:
--------------------------------------------------------------------------------
1 | class FixEventEmailFormItemIdentifiers < ActiveRecord::Migration[7.0]
2 | def change
3 | reversible do |dir|
4 | dir.up { execute "UPDATE form_items SET identifier = 'event_email' WHERE item_type = 'event_email'" }
5 | end
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/notification_event_key.rb:
--------------------------------------------------------------------------------
1 | class Types::NotificationEventKey < Types::BaseEnum
2 | description <<~MARKDOWN
3 | An event that can trigger a notification.
4 | MARKDOWN
5 |
6 | Notifier::NOTIFIER_CLASSES_BY_EVENT_KEY.each_key { |event_key| value event_key.tr("/", "_").upcase, value: event_key }
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/permission_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PermissionType < Types::BaseObject
3 | field :id, ID, null: false
4 | field :model, Types::PermissionedModelType, null: false
5 | field :permission, String, null: false
6 | field :role, Types::PermissionedRoleType, null: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_change_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupChangeFiltersInputType < Types::BaseInputObject
3 | argument :action, [String], required: false
4 | argument :event_title, String, required: false, camelize: false
5 | argument :name, String, required: false
6 | end
7 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/pages/hotel-menu.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Hotel Menu
3 | invariant: false
4 | ---
5 | Download PDF
6 |
7 |
--------------------------------------------------------------------------------
/db/migrate/20131227011316_subclass_events.rb:
--------------------------------------------------------------------------------
1 | class SubclassEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | add_reference :events, :user, index: true
4 | add_column :events, :type, :string
5 | add_column :events, :status, :string
6 | remove_column :events, :special_event_flags, :text
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20190209164910_create_organization_roles.rb:
--------------------------------------------------------------------------------
1 | class CreateOrganizationRoles < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :organization_roles do |t|
4 | t.references :organization, foreign_key: true
5 | t.text :name
6 |
7 | t.timestamps
8 | end
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/script/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3 |
4 | APP_PATH = File.expand_path('../../config/application', __FILE__)
5 | require File.expand_path('../../config/boot', __FILE__)
6 | require 'rails/commands'
7 |
--------------------------------------------------------------------------------
/app/controllers/json_failure_app.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class JSONFailureApp < Devise::FailureApp
3 | # never redirect
4 | def respond
5 | http_auth
6 | response.content_type = 'application/json'
7 | end
8 |
9 | def http_auth_body
10 | { error: i18n_message }.to_json
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/graphql/types/contact_email_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ContactEmailType < Types::BaseObject
3 | field :email, String, null: false
4 | field :formatted_address, String, null: false
5 | field :metadata_json, Types::JSON, null: false, method: :metadata
6 | field :name, String, null: true
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/registration_policy_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RegistrationPolicyInputType < Types::BaseInputObject
3 | argument :buckets, [Types::RegistrationPolicyBucketInputType], required: false
4 | argument :prevent_no_preference_signups, Boolean, required: false, camelize: false
5 | end
6 |
--------------------------------------------------------------------------------
/db/migrate/20201010180459_add_stripe_account_id_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddStripeAccountIdToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :stripe_account_id, :text
4 | add_column :conventions, :stripe_account_ready_to_charge, :boolean, null: false, default: false
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/test/factories/doorkeeper_applications.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_bot
2 |
3 | FactoryBot.define do
4 | factory :doorkeeper_application, class: Doorkeeper::Application do
5 | sequence(:name) { |n| "Application #{n}" }
6 | redirect_uri { 'https://butt.holdings' }
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/types/authorized_application_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::AuthorizedApplicationType < Types::BaseObject
3 | field :name, String, null: false
4 | field :scopes, [String], null: false
5 | field :uid, ID, null: false
6 |
7 | def scopes
8 | object.scopes.to_a
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/app/javascript/NotificationAdmin/getNotificationEventKey.tsx:
--------------------------------------------------------------------------------
1 | import { NotificationEventKey } from 'graphqlTypes.generated';
2 |
3 | export function getNotificationEventKey(categoryKey: string, eventKey: string): NotificationEventKey {
4 | return `${categoryKey.toUpperCase()}_${eventKey.toUpperCase()}` as NotificationEventKey;
5 | }
6 |
--------------------------------------------------------------------------------
/app/javascript/OAuth/queries.graphql:
--------------------------------------------------------------------------------
1 | query OAuthAuthorizationPromptQuery($queryParams: Json!) {
2 | currentUser {
3 | id
4 | }
5 | oauthPreAuth(queryParams: $queryParams)
6 | }
7 |
8 | query OAuthAuthorizedApplicationsQuery {
9 | myAuthorizedApplications {
10 | uid
11 | name
12 | scopes
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/javascript/RoomsAdmin/queries.graphql:
--------------------------------------------------------------------------------
1 | fragment RoomAdminRoomFields on Room {
2 | id
3 | name
4 |
5 | runs {
6 | id
7 | }
8 | }
9 |
10 | query RoomsAdminQuery {
11 | convention: conventionByRequestHost {
12 | id
13 | rooms {
14 | id
15 | ...RoomAdminRoomFields
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/services/cms_content_loaders/notification_templates.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class CmsContentLoaders::NotificationTemplates < CmsContentLoaders::Base
3 | private
4 |
5 | def storage_adapter
6 | @storage_adapter ||= CmsContentStorageAdapters::NotificationTemplates.new(cms_parent, content_set)
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20170721234424_create_form_sections.rb:
--------------------------------------------------------------------------------
1 | class CreateFormSections < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :form_sections do |t|
4 | t.references :form, foreign_key: true
5 | t.text :title
6 | t.integer :position
7 |
8 | t.timestamps
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/lib/intercode/import/illyan.rb:
--------------------------------------------------------------------------------
1 | require 'intercode/import'
2 |
3 | module Intercode
4 | module Import
5 | module Illyan
6 | extend ActiveSupport::Autoload
7 |
8 | autoload :Importer
9 | autoload :PasswordMigration
10 | autoload :Table
11 | autoload :Tables
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/test/javascript/BuiltInFormControls/graphQLAsyncSelect.queries.graphql:
--------------------------------------------------------------------------------
1 | query FakeQuery($name: String) {
2 | convention: conventionByRequestHost {
3 | id
4 | user_con_profiles_paginated(filters: { name: $name }) {
5 | entries {
6 | id
7 | name_without_nickname
8 | }
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/graphql/types/payment_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PaymentModeType < Types::BaseEnum
3 | description "How should an order be paid for?"
4 |
5 | value("now", deprecation_reason: "Please use payment_intent instead")
6 | value("later")
7 | value("free")
8 | value("payment_intent")
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/types/refund_status_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RefundStatusType < Types::BaseEnum
3 | value "NOT_REFUNDED", "No refund was attempted"
4 | value "REFUNDED", "A refund was successfully provided"
5 | value "ALREADY_REFUNDED", "A refund was requested, but the charge had already been refunded"
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/root_site_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RootSiteInputType < Types::BaseInputObject
3 | argument :default_layout_id, ID, required: false, camelize: true
4 | argument :root_page_id, ID, required: false, camelize: true
5 | argument :site_name, String, required: false, camelize: false
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SignupFiltersInputType < Types::BaseInputObject
3 | argument :bucket, [String], required: false
4 | argument :email, String, required: false
5 | argument :name, String, required: false
6 | argument :state, [String], required: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/timespan_with_money_value_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TimespanWithMoneyValueInputType < Types::BaseInputObject
3 | argument :finish, Types::DateType, required: false
4 | argument :start, Types::DateType, required: false
5 | argument :value, Types::MoneyInputType, required: true
6 | end
7 |
--------------------------------------------------------------------------------
/lib/tasks/graphql.rake:
--------------------------------------------------------------------------------
1 | require 'graphql/rake_task'
2 | GraphQL::RakeTask.new(schema_name: 'IntercodeSchema')
3 |
4 | namespace :graphql do
5 | desc 'Dump GraphQL schema and run graphql:codegen and graphql:build_type_data'
6 | task update: 'graphql:schema:dump' do
7 | Process.exec('yarn run graphql:update')
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/script/genNginxNocache.js:
--------------------------------------------------------------------------------
1 | fs=require('fs');
2 |
3 | for (const fname of JSON.parse(fs.readFileSync("config/nocache-files.json"))) {
4 | process.stdout.write(`location ${fname} {
5 | add_header "Cache-Control" "no-cache";
6 | add_header "Access-Control-Allow-Origin" "*";
7 | }\n`
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/app/javascript/Store/OrderAdmin/new.tsx:
--------------------------------------------------------------------------------
1 | import { useNavigate } from 'react-router';
2 | import NewOrderModal from './NewOrderModal';
3 |
4 | function NewOrderRoute() {
5 | const navigate = useNavigate();
6 |
7 | return navigate('..')} visible />;
8 | }
9 |
10 | export const Component = NewOrderRoute;
11 |
--------------------------------------------------------------------------------
/app/javascript/styles/bucket_availability_display.module.scss.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by typed-scss-modules
2 | export declare const bucketAvailabilityCell: string;
3 | export declare const bucketAvailabilityDisplay: string;
4 | export declare const bucketAvailabilityDisplayCompact: string;
5 | export declare const bucketAvailabilityOpenSlot: string;
6 |
--------------------------------------------------------------------------------
/cms_content_sets/single_event/metadata.yml:
--------------------------------------------------------------------------------
1 | ---
2 | inherit:
3 | - base
4 | navigation_items:
5 | - item_type: link
6 | title: Team and Contact Info
7 | page_slug: team-contact
8 | - item_type: link
9 | title: Code of Conduct
10 | page_slug: conduct
11 | root_page_slug: root
12 | default_layout_name: Default
13 | variables: {}
14 |
--------------------------------------------------------------------------------
/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Version of your assets, change this if you want to expire all your assets.
4 | Rails.application.config.assets.version = "1.0"
5 |
6 | # Add additional assets to the asset load path.
7 | # Rails.application.config.assets.paths << Emoji.images_path
8 |
--------------------------------------------------------------------------------
/db/migrate/20240504163701_add_ranked_choice_order_and_executed_at_to_signup_rounds.rb:
--------------------------------------------------------------------------------
1 | class AddRankedChoiceOrderAndExecutedAtToSignupRounds < ActiveRecord::Migration[7.1]
2 | def change
3 | change_table :signup_rounds, bulk: true do |t|
4 | t.text :ranked_choice_order
5 | t.timestamp :executed_at
6 | end
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env rake
2 | # Add your own tasks in files placed in lib/tasks ending in .rake,
3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4 |
5 | require File.expand_path('../config/application', __FILE__)
6 |
7 | Intercode::Application.load_tasks
8 |
9 | Doorkeeper::Rake.load_tasks
10 |
--------------------------------------------------------------------------------
/app/graphql/types/event_proposals_pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventProposalsPaginationType < Types::PaginationType
3 | entries_field Types::EventProposalType
4 |
5 | def self.authorized?(_value, context)
6 | Pundit.policy(context[:pundit_user], context[:convention]).view_event_proposals?
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/types/signup_round_automation_action.rb:
--------------------------------------------------------------------------------
1 | class Types::SignupRoundAutomationAction < Types::BaseEnum
2 | description "An action to take when a signup round opens."
3 |
4 | value "EXECUTE_RANKED_CHOICE",
5 | "Execute any pending ranked choices as allowed by this signup round",
6 | value: "execute_ranked_choice"
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/site_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::SiteModeType < Types::BaseEnum
3 | value("convention", "Site behaves as a convention with multiple events")
4 | value("single_event", "Site behaves as a single standalone event")
5 | value("event_series", "Site behaves as a series of standalone events")
6 | end
7 |
--------------------------------------------------------------------------------
/config/initializers/date_formats.rb:
--------------------------------------------------------------------------------
1 | Time::DATE_FORMATS[:long_with_weekday] = '%A, %B %-d, %Y at %l:%M%P'
2 | Time::DATE_FORMATS[:date_only] = '%B %-d, %Y'
3 | Time::DATE_FORMATS[:date_only_with_weekday] = '%A, %B %-d, %Y'
4 | Time::DATE_FORMATS[:long_weekday_with_time] = '%A at %l:%M%P'
5 | Time::DATE_FORMATS[:short_weekday_with_time] = '%a %l:%M%P'
6 |
--------------------------------------------------------------------------------
/app/graphql/types/order_status_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::OrderStatusType < Types::BaseEnum
3 | value("pending", "Order has not yet been submitted")
4 | value("unpaid", "Order is submitted but not yet paid")
5 | value("paid", "Order has been submitted and paid")
6 | value("cancelled", "Order has been cancelled")
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/receive_signup_email_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::ReceiveSignupEmailType < Types::BaseEnum
3 | value "ALL_SIGNUPS", "Receive email for all signup activity"
4 | value "NON_WAITLIST_SIGNUPS", "Receive email for signup activity affecting confirmed signups"
5 | value "NO", "Do not receive signup email"
6 | end
7 |
--------------------------------------------------------------------------------
/app/javascript/humanize.ts:
--------------------------------------------------------------------------------
1 | export default function humanize(str: string): string {
2 | const stringWithoutSeparators = str.replace(/[_-]/g, ' ').replace(/ +/g, ' ');
3 | if (stringWithoutSeparators === '') {
4 | return '';
5 | }
6 |
7 | return `${stringWithoutSeparators[0].toUpperCase()}${stringWithoutSeparators.slice(1).toLowerCase()}`;
8 | }
9 |
--------------------------------------------------------------------------------
/db/migrate/20200128164623_create_departments.rb:
--------------------------------------------------------------------------------
1 | class CreateDepartments < ActiveRecord::Migration[6.0]
2 | def change
3 | create_table :departments do |t|
4 | t.references :convention, null: false, foreign_key: true
5 | t.text :name
6 | t.text :proposal_description
7 |
8 | t.timestamps
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/graphql/types/pagination_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PaginationType < Types::BaseObject
3 | implements Types::PaginationInterface
4 |
5 | def self.entries_field(entry_type)
6 | field :entries, [entry_type], null: false
7 |
8 | define_method :entries do
9 | object.to_a
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/flyer.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Flyer
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: false
5 | ---
6 | Download PDF
7 |
8 |
--------------------------------------------------------------------------------
/db/migrate/20171111160337_create_cms_layouts.rb:
--------------------------------------------------------------------------------
1 | class CreateCmsLayouts < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :cms_layouts do |t|
4 | t.references :parent, polymorphic: true
5 | t.text :name
6 | t.text :content
7 | t.text :navbar_classes
8 |
9 | t.timestamps
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20190209165002_create_join_table_organization_roles_users.rb:
--------------------------------------------------------------------------------
1 | class CreateJoinTableOrganizationRolesUsers < ActiveRecord::Migration[5.2]
2 | def change
3 | create_join_table :organization_roles, :users do |t|
4 | # t.index [:organization_role_id, :user_id]
5 | # t.index [:user_id, :organization_role_id]
6 | end
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20200312181248_create_email_routes.rb:
--------------------------------------------------------------------------------
1 | class CreateEmailRoutes < ActiveRecord::Migration[6.0]
2 | def change
3 | create_table :email_routes do |t|
4 | t.text :receiver_address, null: false, index: { unique: true }
5 | t.text :forward_addresses, null: false, array: true
6 | t.timestamps
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20211011191912_remove_caption_from_form_items_where_invalid.rb:
--------------------------------------------------------------------------------
1 | class RemoveCaptionFromFormItemsWhereInvalid < ActiveRecord::Migration[6.1]
2 | def up
3 | execute <<~SQL
4 | UPDATE form_items SET properties = (properties - 'caption')
5 | WHERE item_type in ('static_text', 'event_email', 'registration_policy')
6 | SQL
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/lib/intercode/import/procon.rb:
--------------------------------------------------------------------------------
1 | require 'intercode/import'
2 |
3 | module Intercode
4 | module Import
5 | module Procon
6 | extend ActiveSupport::Autoload
7 |
8 | autoload :EventHelpers
9 | autoload :Importer
10 | autoload :Table
11 | autoload :Tables
12 | autoload :UserHelpers
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/app/graphql/types/notification_source_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::NotificationSourceType < Types::BaseUnion
3 | possible_types Types::UserActivityAlertType
4 |
5 | def self.resolve_type(object, _context)
6 | case object
7 | when UserActivityAlert
8 | Types::UserActivityAlertType
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/graphql/types/ranked_choice_fallback_action.rb:
--------------------------------------------------------------------------------
1 | class Types::RankedChoiceFallbackAction < Types::BaseEnum
2 | description "An action to take if a user can't be signed up for any of their ranked choices during a signup round"
3 |
4 | UserConProfile.ranked_choice_fallback_actions.each_value { |enum_value| value enum_value.upcase, value: enum_value }
5 | end
6 |
--------------------------------------------------------------------------------
/config/initializers/business_time.rb:
--------------------------------------------------------------------------------
1 | Holidays
2 | .between(1.month.ago, 2.years.from_now, :ecbtarget, :observed)
3 | .map do |holiday|
4 | BusinessTime::Config.holidays << holiday[:date]
5 | # Implement long weekends if they apply to the region, eg:
6 | # BusinessTime::Config.holidays << holiday[:date].next_week if !holiday[:date].weekday?
7 | end
8 |
--------------------------------------------------------------------------------
/.swcrc:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/swcrc",
3 | "jsc": {
4 | "baseUrl": "./app/javascript",
5 | "parser": {
6 | "syntax": "typescript",
7 | // "jsx": true,
8 | "dynamicImport": true
9 | },
10 | "transform": {
11 | "react": {
12 | "runtime": "automatic"
13 | }
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_organization_role.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteOrganizationRole < Mutations::BaseMutation
3 | argument :id, ID, required: false
4 |
5 | load_and_authorize_model_with_id OrganizationRole, :id, :destroy
6 |
7 | def resolve(*, id:)
8 | organization_role.destroy!
9 | {}
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/graphql/types/big_decimal_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::BigDecimalType < Types::BaseScalar
3 | def self.coerce_input(input_value, _context)
4 | return nil if input_value.nil?
5 | BigDecimal(input_value.to_s)
6 | end
7 |
8 | def self.coerce_result(ruby_value, _context)
9 | ruby_value&.to_s("F")
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/graphql/types/date_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::DateType < Types::BaseScalar
3 | description "Date in ISO8601 format"
4 |
5 | def self.coerce_input(value, _ctx)
6 | return nil if value.nil?
7 | DateTime.iso8601(value)
8 | end
9 |
10 | def self.coerce_result(value, _ctx)
11 | value&.iso8601
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/db/migrate/20120604142637_create_runs.rb:
--------------------------------------------------------------------------------
1 | class CreateRuns < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :runs do |t|
4 | t.references :event
5 | t.timestamp :starts_at
6 | t.string :title_suffix
7 | t.text :schedule_note
8 | t.references :updated_by
9 |
10 | t.timestamps
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/accept_clickwrap_agreement.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::AcceptClickwrapAgreement < Mutations::BaseMutation
3 | field :my_profile, Types::UserConProfileType, null: false
4 |
5 | def resolve
6 | user_con_profile.update!(accepted_clickwrap_agreement: true)
7 | { my_profile: user_con_profile }
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_run.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteRun < Mutations::BaseMutation
3 | field :run, Types::RunType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_model_with_id Run, :id, :destroy
8 |
9 | def resolve(**_args)
10 | run.destroy!
11 | { run: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_layout_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsLayoutInputType < Types::BaseInputObject
3 | argument :admin_notes, String, required: false, camelize: false
4 | argument :content, String, required: false
5 | argument :name, String, required: false
6 | argument :navbar_classes, String, required: false, camelize: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/packs/setPublicPath.ts:
--------------------------------------------------------------------------------
1 | function intercodeAssetURL(filename: string) {
2 | if (window.intercodeAssetsHost) {
3 | return `//${window.intercodeAssetsHost}/packs/${filename}`;
4 | } else {
5 | return `/packs/${filename}`;
6 | }
7 | }
8 |
9 | // eslint-disable-next-line no-underscore-dangle
10 | window.__intercodeAssetURL = intercodeAssetURL;
11 |
--------------------------------------------------------------------------------
/app/services/concerns/skippable_advisory_lock.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module SkippableAdvisoryLock
3 | attr_reader :skip_locking
4 |
5 | def with_advisory_lock_unless_skip_locking(name, &)
6 | if skip_locking
7 | yield
8 | else
9 | ActiveRecord::Base.with_advisory_lock(name, transaction: true, &)
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/views/user_mailer/unlock_instructions.html.erb:
--------------------------------------------------------------------------------
1 |
2 | Hello <%= @resource.email %>!
3 |
4 | Your account has been locked due to an excessive amount of unsuccessful log in attempts.
5 | Click the link below to unlock your account:
6 |
7 | <%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %>
8 |
9 |
--------------------------------------------------------------------------------
/cms_content_sets/base/partials/run_description.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | admin_notes: Given a run, displays either the name of the event or that plus its start time (if there are multiple runs)
3 | ---
4 | {%- if run.event.runs.size > 1 -%}
5 | {{ run.event.title }} on {{ run.starts_at | date: "%A, %B %-d, %Y at %l:%M%P" }}
6 | {%- else -%}
7 | {{ run.event.title }}
8 | {%- endif -%}
9 |
--------------------------------------------------------------------------------
/cms_content_sets/smoke_and_mirrors/pages/hotellayout.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Hotel Layout
3 | admin_notes: ''
4 | invariant: false
5 | ---
6 | Crowne Plaza Providence-Warwick
7 |
8 |
9 |

10 |
11 |
--------------------------------------------------------------------------------
/config/shoryuken.yml:
--------------------------------------------------------------------------------
1 | groups:
2 | default:
3 | concurrency: 5
4 | queues:
5 | - default
6 | mailers:
7 | concurrency: 5
8 | queues:
9 | - mailers
10 | ahoy:
11 | concurrency: 5
12 | queues:
13 | - ahoy
14 | cloudwatch_scheduler:
15 | concurrency: 1
16 | queues:
17 | - cloudwatch_scheduler
18 | timeout: 2
19 |
--------------------------------------------------------------------------------
/db/migrate/20171014183340_add_default_status_for_events.rb:
--------------------------------------------------------------------------------
1 | class AddDefaultStatusForEvents < ActiveRecord::Migration[5.1]
2 | def change
3 | reversible do |dir|
4 | dir.up { execute "UPDATE events SET status = 'active' WHERE status IS NULL" }
5 | end
6 |
7 | change_column :events, :status, :string, null: false, default: 'active'
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20181024143839_create_doorkeeper_openid_connect_tables.rb:
--------------------------------------------------------------------------------
1 | class CreateDoorkeeperOpenidConnectTables < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :oauth_openid_requests do |t|
4 | t.references :access_grant, null: false, foreign_key: { to_table: :oauth_access_grants }
5 | t.string :nonce, null: false
6 | end
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20200411161111_create_coupon_applications.rb:
--------------------------------------------------------------------------------
1 | class CreateCouponApplications < ActiveRecord::Migration[6.0]
2 | def change
3 | create_table :coupon_applications do |t|
4 | t.references :coupon, null: false, foreign_key: true
5 | t.references :order, null: false, foreign_key: true
6 |
7 | t.timestamps
8 | end
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/db/migrate/20200712160144_add_language_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddLanguageToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :language, :string
4 |
5 | up_only do
6 | execute "UPDATE conventions SET language = 'en'"
7 | end
8 |
9 | change_column_null :conventions, :language, false
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/seeds.rb:
--------------------------------------------------------------------------------
1 | # This file should contain all the record creation needed to seed the database with its default values.
2 | # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3 | #
4 | # Examples:
5 | #
6 | # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
7 | # Mayor.create(name: 'Emanuel', city: cities.first)
8 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_page.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeletePage < Mutations::BaseMutation
3 | field :page, Types::PageType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_cms_model :pages, :id, :destroy
8 |
9 | def resolve(**_args)
10 | page.destroy!
11 | { page: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/event_proposal_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventProposalInputType < Types::BaseInputObject
3 | argument :add_image_blob_ids, [ID], required: false, camelize: true
4 | argument :form_response_attrs_json, String, required: false, camelize: false
5 | argument :remove_image_blob_ids, [ID], required: false, camelize: true
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/pay_what_you_want_value_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PayWhatYouWantValueType < Types::BaseObject
3 | field :allowed_currency_codes, [String], null: true
4 | field :maximum_amount, Types::MoneyType, null: true
5 | field :minimum_amount, Types::MoneyType, null: true
6 | field :suggested_amount, Types::MoneyType, null: true
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/Store/Cart/queries.graphql:
--------------------------------------------------------------------------------
1 | #import "../orderFields.graphql"
2 |
3 | query CartQuery {
4 | convention: conventionByRequestHost {
5 | id
6 | name
7 |
8 | my_profile {
9 | id
10 | name_without_nickname
11 |
12 | current_pending_order {
13 | id
14 | ...CartOrderFields
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/services/content_cloners/convention_cloner.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class ContentCloners::ConventionCloner < ContentCloners::ContentClonerBase
3 | def clone(convention)
4 | convention.organization ||= source_convention.organization
5 | convention.save!
6 |
7 | @id_maps[:conventions] = { source_convention.id => convention }
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/services/drop_event_service.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class DropEventService < CivilService::Service
3 | attr_reader :event
4 |
5 | def initialize(event:)
6 | @event = event
7 | end
8 |
9 | private
10 |
11 | def inner_call
12 | event.runs.destroy_all
13 | event.update!(status: 'dropped')
14 |
15 | success
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/db/migrate/20180213195724_add_visible_to_staff_positions.rb:
--------------------------------------------------------------------------------
1 | class AddVisibleToStaffPositions < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :staff_positions, :visible, :boolean
4 |
5 | reversible do |dir|
6 | dir.up { StaffPosition.update_all(visible: true) }
7 | end
8 |
9 | add_index :staff_positions, :visible
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/migrate/20180817153813_add_payment_options_to_products.rb:
--------------------------------------------------------------------------------
1 | class AddPaymentOptionsToProducts < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :products, :payment_options, :text
4 |
5 | reversible do |dir|
6 | dir.up do
7 | Product.update_all(payment_options: %w[stripe pay_at_convention])
8 | end
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | packageExtensions:
2 | "@graphql-markdown/core@*":
3 | dependencies:
4 | "@graphql-markdown/diff": "*"
5 | "@graphql-markdown/logger@*":
6 | dependencies:
7 | "@docusaurus/logger": "*"
8 | autoprefixer@*:
9 | dependencies:
10 | colorette: "*"
11 |
12 | pnpEnableEsmLoader: true
13 |
14 | yarnPath: .yarn/releases/yarn-4.12.0.cjs
15 |
--------------------------------------------------------------------------------
/app/javascript/EventsApp/EventPage/valueIsPresent.ts:
--------------------------------------------------------------------------------
1 | export function valueIsPresent(value: unknown): boolean {
2 | if (value == null) {
3 | return false;
4 | }
5 |
6 | if (typeof value === 'string' && value.trim() === '') {
7 | return false;
8 | }
9 |
10 | if (typeof value === 'boolean') {
11 | return true;
12 | }
13 |
14 | return !!value;
15 | }
16 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/hotel/menu.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Hotel Menu
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: false
5 | ---
6 | Download PDF
7 |
8 |
--------------------------------------------------------------------------------
/config/initializers/ahoy.rb:
--------------------------------------------------------------------------------
1 | class Ahoy::Store < Ahoy::DatabaseStore
2 | def authenticate(data)
3 | # disables automatic linking of visits and users
4 | end
5 | end
6 |
7 | # set to true for JavaScript tracking
8 | Ahoy.api = false
9 |
10 | # GDPR compliance
11 | Ahoy.mask_ips = true
12 | Ahoy.cookies = :none
13 |
14 | # Don't spam the logs
15 | Ahoy.logger = nil
16 |
--------------------------------------------------------------------------------
/db/migrate/20180304162934_add_submitted_at_to_event_proposals.rb:
--------------------------------------------------------------------------------
1 | class AddSubmittedAtToEventProposals < ActiveRecord::Migration[5.1]
2 | def change
3 | add_column :event_proposals, :submitted_at, :datetime
4 |
5 | reversible do |dir|
6 | dir.up { EventProposal.where.not(status: 'draft').update_all('submitted_at = created_at') }
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20181216163057_create_cms_graphql_queries.rb:
--------------------------------------------------------------------------------
1 | class CreateCmsGraphqlQueries < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :cms_graphql_queries do |t|
4 | t.references :parent, polymorphic: true
5 | t.text :identifier
6 | t.text :admin_notes
7 | t.text :query
8 |
9 | t.timestamps
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/graphql/types/cms_navigation_item_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CmsNavigationItemInputType < Types::BaseInputObject
3 | argument :navigation_section_id, ID, required: false, camelize: true
4 | argument :page_id, ID, required: false, camelize: true
5 | argument :position, Integer, required: false
6 | argument :title, String, required: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/department_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::DepartmentType < Types::BaseObject
3 | field :event_categories, [Types::EventCategoryType], null: false
4 | field :id, ID, null: false
5 | field :name, String, null: false
6 | field :proposal_description, String, null: true
7 |
8 | association_loaders Department, :event_categories
9 | end
10 |
--------------------------------------------------------------------------------
/app/javascript/OutletWithLoading.tsx:
--------------------------------------------------------------------------------
1 | import { PageLoadingIndicator } from '@neinteractiveliterature/litform';
2 | import { Suspense } from 'react';
3 | import { Outlet } from 'react-router';
4 |
5 | export default function OutletWithLoading() {
6 | return (
7 | }>
8 |
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/app/presenters/concerns/sort_buckets.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | module SortBuckets
3 | def sort_buckets(buckets)
4 | buckets.sort_by do |bucket|
5 | [
6 | bucket.slots_limited? ? 0 : 1,
7 | bucket.anything? ? 1 : 0,
8 | bucket.not_counted? ? 1 : 0,
9 | (bucket.name || '').downcase
10 | ]
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/hotel/renovation.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Hotel Room Renovations
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: false
5 | ---
6 | Download PDF
7 |
8 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/open-slots.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Larps with openings
3 | skip_clickwrap_agreement: true
4 | hidden_from_search: false
5 | layout_name: Auto Refresh Blank Page
6 | ---
7 |
8 | There's still openings in all these great games!
9 |
10 | {% include "run_availability_grid" %}
11 |
--------------------------------------------------------------------------------
/db/migrate/20151107232925_add_sessions_table.rb:
--------------------------------------------------------------------------------
1 | class AddSessionsTable < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :sessions do |t|
4 | t.string :session_id, null: false
5 | t.text :data
6 | t.timestamps
7 | end
8 |
9 | add_index :sessions, :session_id, unique: true
10 | add_index :sessions, :updated_at
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20190415164817_add_ticket_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddTicketModeToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :ticket_mode, :string, default: 'disabled', null: false
4 |
5 | reversible do |dir|
6 | dir.up { execute "UPDATE conventions SET ticket_mode = 'required_for_signup'" }
7 | end
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20200217182622_add_hidden_from_search.rb:
--------------------------------------------------------------------------------
1 | class AddHiddenFromSearch < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :pg_search_documents, :hidden_from_search, :boolean, null: false, default: false
4 | add_column :pages, :hidden_from_search, :boolean, null: false, default: false
5 |
6 | add_index :pg_search_documents, :hidden_from_search
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/db/migrate/20251210230514_cascade_delete_from_openid_requests.rb:
--------------------------------------------------------------------------------
1 | class CascadeDeleteFromOpenidRequests < ActiveRecord::Migration[8.1]
2 | def change
3 | remove_foreign_key :oauth_openid_requests, column: :access_grant_id, to_table: :oauth_access_grants
4 | add_foreign_key :oauth_openid_requests, :oauth_access_grants, column: :access_grant_id, on_delete: :cascade
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/test/liquid_drops/user_drop_test.rb:
--------------------------------------------------------------------------------
1 | require 'test_helper'
2 |
3 | describe UserDrop do
4 | let(:user) { create(:user) }
5 | let(:user_drop) { UserDrop.new(user) }
6 |
7 | %w[email first_name last_name].each do |field|
8 | it "returns the #{field} of the user" do
9 | assert_equal user.public_send(field), user_drop.public_send(field)
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/controllers/single_page_app_controller.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class SinglePageAppController < ApplicationController
3 | include CmsContentHelpers
4 |
5 | def root
6 | @page = current_cms_page(request.path)
7 | @event = event_for_path(request.path)
8 | @page_title = @page&.name
9 |
10 | render html: '', layout: 'application'
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/graphql/types/grouped_signup_count_type.rb:
--------------------------------------------------------------------------------
1 | class Types::GroupedSignupCountType < Types::BaseObject
2 | field :bucket_key, String, null: true
3 | field :count, Integer, null: false
4 | field :counted, Boolean, null: false
5 | field :requested_bucket_key, String, null: true
6 | field :state, Types::SignupStateType, null: false
7 | field :team_member, Boolean, null: false
8 | end
9 |
--------------------------------------------------------------------------------
/app/liquid_drops/pay_what_you_want_value_drop.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | # A set of rules for a pay-what-you-want pricing structure
3 | class PayWhatYouWantValueDrop < Liquid::Drop
4 | # @api
5 | attr_reader :value
6 |
7 | def initialize(value)
8 | @value = value
9 | end
10 |
11 | delegate :minimum_amount, :maximum_amount, :suggested_amount, to: :value
12 | end
13 |
--------------------------------------------------------------------------------
/cloudflare/wrangler.jsonc:
--------------------------------------------------------------------------------
1 | {
2 | "name": "intercode-email-forwarder",
3 | "main": "intercode-email-forwarder.ts",
4 | "compatibility_date": "2025-04-18",
5 | "send_email": [{ "name": "SEND_EMAIL" }],
6 | "observability": {
7 | "enabled": true,
8 | "head_sampling_rate": 1,
9 | },
10 | "vars": {
11 | "INTERCODE_URL": "https://www.neilhosting.net",
12 | },
13 | }
14 |
--------------------------------------------------------------------------------
/db/migrate/20200313212415_add_cc_addresses_and_email_aliases_to_staff_positions.rb:
--------------------------------------------------------------------------------
1 | class AddCcAddressesAndEmailAliasesToStaffPositions < ActiveRecord::Migration[6.0]
2 | def change
3 | change_table :staff_positions do |t|
4 | t.text :cc_addresses, array: true, null: false, default: []
5 | t.text :email_aliases, array: true, null: false, default: []
6 | end
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_room.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteRoom < Mutations::BaseMutation
3 | field :room, Types::RoomType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_convention_associated_model :rooms, :id, :destroy
8 |
9 | def resolve(**_args)
10 | room.destroy!
11 | { room: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/javascript/scrollToLocationHash.ts:
--------------------------------------------------------------------------------
1 | export default function scrollToLocationHash(): void {
2 | const { hash } = window.location;
3 | if (hash && hash.startsWith('#')) {
4 | const id = hash.substr(1);
5 | const element = document.getElementById(id) || (document.getElementsByName(id) || [])[0];
6 | if (element) {
7 | element.scrollIntoView();
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/javascript/styles/_buckets.scss:
--------------------------------------------------------------------------------
1 | @each $color, $value in $bucket-colors {
2 | .text-#{$color} {
3 | color: $value;
4 | }
5 |
6 | .bg-#{$color} {
7 | background-color: $value;
8 | }
9 |
10 | .btn-#{$color} {
11 | @include button-variant($value, $value);
12 | }
13 |
14 | .btn-outline-#{$color} {
15 | @include button-outline-variant($value);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/db/migrate/20170721234716_create_form_items.rb:
--------------------------------------------------------------------------------
1 | class CreateFormItems < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :form_items do |t|
4 | t.references :form_section, foreign_key: true
5 | t.integer :position
6 | t.text :identifier
7 | t.text :item_type
8 | t.text :properties
9 |
10 | t.timestamps
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/coupon_application_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::CouponApplicationType < Types::BaseObject
3 | field :coupon, Types::CouponType, null: false
4 | field :discount, Types::MoneyType, null: false
5 | field :id, ID, null: false
6 | field :order, Types::OrderType, null: false
7 |
8 | association_loaders CouponApplication, :coupon, :order
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/types/ticket_mode_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TicketModeType < Types::BaseEnum
3 | value("disabled", "Tickets are neither sold nor required in this convention")
4 | value("required_for_signup", "A valid ticket is required to sign up for events in this convention")
5 | value("ticket_per_event", "Each event in this convention sells tickets separately")
6 | end
7 |
--------------------------------------------------------------------------------
/app/graphql/types/ticket_type_parent_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TicketTypeParentType < Types::BaseUnion
3 | possible_types Types::ConventionType, Types::EventType
4 |
5 | def self.resolve_type(object, _context)
6 | case object
7 | when Convention
8 | Types::ConventionType
9 | when Event
10 | Types::EventType
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/timespan_with_value_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::TimespanWithValueInputType < Types::BaseInputObject
3 | argument :finish, Types::DateType, required: false
4 | argument :start, Types::DateType, required: false
5 |
6 | # Add additional typed value fields here as appropriate
7 | argument :string_value, String, required: false, camelize: false
8 | end
9 |
--------------------------------------------------------------------------------
/app/liquid_drops/money_drop.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | # An amount of money
3 | class MoneyDrop < Liquid::Drop
4 | # @api
5 | attr_reader :money
6 |
7 | def initialize(money)
8 | @money = money
9 | end
10 |
11 | delegate :format, :fractional, :currency, :symbol, :decimal_mark, to: :money
12 |
13 | # @api
14 | def to_number
15 | money.to_d
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/applications/_delete_form.html.erb:
--------------------------------------------------------------------------------
1 | <%- submit_btn_css ||= 'btn btn-link' %>
2 | <%= form_tag oauth_application_path(application), method: :delete do %>
3 | <%= submit_tag t('doorkeeper.applications.buttons.destroy'),
4 | onclick: "return confirm('#{ t('doorkeeper.applications.confirmations.destroy') }')",
5 | class: submit_btn_css %>
6 | <% end %>
7 |
--------------------------------------------------------------------------------
/app/views/doorkeeper/authorized_applications/_delete_form.html.erb:
--------------------------------------------------------------------------------
1 | <%- submit_btn_css ||= 'btn btn-link' %>
2 | <%= form_tag oauth_authorized_application_path(application), method: :delete do %>
3 | <%= submit_tag t('doorkeeper.authorized_applications.buttons.revoke'), onclick: "return confirm('#{ t('doorkeeper.authorized_applications.confirmations.revoke') }')", class: submit_btn_css %>
4 | <% end %>
5 |
--------------------------------------------------------------------------------
/db/migrate/20151115201840_create_ticket_types.rb:
--------------------------------------------------------------------------------
1 | class CreateTicketTypes < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :ticket_types do |t|
4 | t.references :convention, index: true, foreign_key: true
5 | t.text :name
6 | t.text :description
7 | t.column :pricing_schedule, :text
8 |
9 | t.timestamps null: false
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/graphql/types/run_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RunInputType < Types::BaseInputObject
3 | argument :room_ids, [ID], required: false, camelize: true
4 | argument :schedule_note, String, required: false, camelize: false
5 | argument :starts_at, Types::DateType, required: false, camelize: false
6 | argument :title_suffix, String, required: false, camelize: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/javascript/RootSiteAdmin/mutations.graphql:
--------------------------------------------------------------------------------
1 | #import "./queries.graphql"
2 |
3 | mutation UpdateRootSite($siteName: String, $defaultLayoutId: ID, $rootPageId: ID) {
4 | updateRootSite(
5 | input: { root_site: { site_name: $siteName, defaultLayoutId: $defaultLayoutId, rootPageId: $rootPageId } }
6 | ) {
7 | root_site {
8 | id
9 | ...RootSiteFields
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/db/migrate/20170602200806_create_staff_positions.rb:
--------------------------------------------------------------------------------
1 | class CreateStaffPositions < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :staff_positions do |t|
4 | t.references :convention, foreign_key: true
5 | t.text :name
6 | t.text :email
7 |
8 | t.timestamps
9 | end
10 |
11 | create_join_table :staff_positions, :user_con_profiles
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/db/migrate/20190208214318_add_show_event_list_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddShowEventListToConventions < ActiveRecord::Migration[5.2]
2 | def change
3 | add_column :conventions, :show_event_list, :string, default: "no", null: false
4 |
5 | reversible do |dir|
6 | dir.up do
7 | execute "UPDATE conventions SET show_event_list = 'yes'"
8 | end
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/migrate/20200517155823_add_timezone_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddTimezoneModeToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_column :conventions, :timezone_mode, :string
4 |
5 | up_only do
6 | execute %(UPDATE conventions SET timezone_mode = 'convention_local')
7 | end
8 |
9 | change_column_null :conventions, :timezone_mode, false
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/migrate/20231126173532_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb:
--------------------------------------------------------------------------------
1 | # This migration comes from active_storage (originally 20211119233751)
2 | class RemoveNotNullOnActiveStorageBlobsChecksum < ActiveRecord::Migration[6.0]
3 | def change
4 | return unless table_exists?(:active_storage_blobs)
5 |
6 | change_column_null(:active_storage_blobs, :checksum, true)
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/__mocks__/popper.js.js:
--------------------------------------------------------------------------------
1 | import PopperJs from 'popper.js';
2 |
3 | // this avoids promise rejections because of Popper depending on createRange, which is not
4 | // available in jsdom
5 |
6 | export default class Popper {
7 | static placements = PopperJs.placements;
8 |
9 | constructor() {
10 | return {
11 | destroy: () => {},
12 | scheduleUpdate: () => {},
13 | };
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_coupon.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteCoupon < Mutations::BaseMutation
3 | field :coupon, Types::CouponType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_convention_associated_model :coupons, :id, :destroy
8 |
9 | def resolve(**_args)
10 | coupon.destroy!
11 | { coupon: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_form.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteForm < Mutations::BaseMutation
3 | field :form, Types::FormType, null: false, camelize: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_convention_associated_model :forms, :id, :destroy
8 |
9 | def resolve(**_args)
10 | form.destroy!
11 | { form: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/event_proposal_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventProposalFiltersInputType < Types::BaseInputObject
3 | argument :event_category, [Integer, { null: true }], required: false, camelize: false
4 | argument :owner, String, required: false
5 | argument :status, [String, { null: true }], required: false
6 | argument :title, String, required: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/jobs/sync_email_forwarding_for_domain_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class SyncEmailForwardingForDomainJob < ApplicationJob
3 | def perform(domains)
4 | mappings_by_domain = EmailForwardingRouter.all_mappings_for_domains(Array(domains)).by_domain
5 |
6 | return if ENV["FORWARDEMAIL_API_KEY"].blank?
7 | SyncForwardEmailService.new(mappings_by_domain:).call!
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/cms_content_sets/the_last_seder/metadata.yml:
--------------------------------------------------------------------------------
1 | ---
2 | inherit:
3 | - single_page
4 | navigation_items:
5 | - item_type: link
6 | title: Food
7 | page_slug: food
8 | - item_type: link
9 | title: Team and Contact Info
10 | page_slug: team-contact
11 | - item_type: link
12 | title: Code of Conduct
13 | page_slug: conduct
14 | root_page_slug: root
15 | default_layout_name: Default
16 | variables: {}
17 |
--------------------------------------------------------------------------------
/config/initializers/prevent_blank_recipients_interceptor.rb:
--------------------------------------------------------------------------------
1 | class PreventBlankRecipientsInterceptor
2 | def self.delivering_email(message)
3 | return if message.to.present?
4 |
5 | message.perform_deliveries = false
6 | Rails.logger.debug 'Not delivering email because recipients are blank'
7 | end
8 | end
9 |
10 | ActionMailer::Base.register_interceptor(PreventBlankRecipientsInterceptor)
11 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_cms_layout.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteCmsLayout < Mutations::BaseMutation
3 | field :cms_layout, Types::CmsLayoutType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_cms_model :cms_layouts, :id, :destroy
8 |
9 | def resolve(**_args)
10 | cms_layout.destroy!
11 | { cms_layout: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/drop_event.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DropEvent < Mutations::BaseMutation
3 | field :event, Types::EventType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_convention_associated_model :events, :id, :drop
8 |
9 | def resolve(**_args)
10 | DropEventService.new(event:).call!
11 | { event: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/javascript/FormPresenter/ItemInputs/FieldRequiredFeedback.tsx:
--------------------------------------------------------------------------------
1 | export type FieldRequiredFeedbackProps = {
2 | valueInvalid: boolean;
3 | };
4 |
5 | export default function FieldRequiredFeedback({ valueInvalid }: FieldRequiredFeedbackProps): React.JSX.Element {
6 | if (!valueInvalid) {
7 | return <>>;
8 | }
9 |
10 | return This field is required.
;
11 | }
12 |
--------------------------------------------------------------------------------
/app/javascript/Store/ProductAdmin/queries.graphql:
--------------------------------------------------------------------------------
1 | #import "../adminProductFields.graphql"
2 |
3 | query AdminProductsQuery {
4 | convention: conventionByRequestHost {
5 | id
6 | products {
7 | id
8 | ...AdminProductFields
9 | }
10 | ticket_types {
11 | id
12 | description
13 | }
14 | }
15 |
16 | currentAbility {
17 | can_update_products
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/jobs/send_notification_job.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class SendNotificationJob < ApplicationJob
3 | retry_on Aws::SES::Errors::Throttling, wait: :polynomially_longer, attempts: 10
4 |
5 | def perform(event_key:, options:)
6 | notifier_class = Notifier.notifier_class_for_event_key(event_key)
7 | notifier = notifier_class.new(**options)
8 | notifier.deliver_now
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/config/initializers/session_store.rb:
--------------------------------------------------------------------------------
1 | # We set the cookie domain dynamically with a Rack middleware.
2 | # See lib/intercode/dynamic_cookie_domain.rb for how this works.
3 |
4 | Rails.application.config.session_store :active_record_store,
5 | key: '_intercode_session',
6 | domain: :all,
7 | same_site: :lax, # attempt to work around https://bugzilla.mozilla.org/show_bug.cgi?id=1465402
8 | expire_after: 2.weeks
9 |
--------------------------------------------------------------------------------
/db/migrate/20191226202814_rename_alert_destinations_to_notification_destinations.rb:
--------------------------------------------------------------------------------
1 | class RenameAlertDestinationsToNotificationDestinations < ActiveRecord::Migration[6.0]
2 | def change
3 | rename_table :alert_destinations, :notification_destinations
4 | rename_column :notification_destinations, :alert_id, :source_id
5 | rename_column :notification_destinations, :alert_type, :source_type
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/mutations/create_page.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::CreatePage < Mutations::BaseMutation
3 | field :page, Types::PageType, null: false
4 |
5 | argument :page, Types::PageInputType, required: true
6 |
7 | authorize_create_cms_model :pages
8 |
9 | def resolve(**args)
10 | page = cms_parent.pages.create!(args[:page].to_h)
11 |
12 | { page: }
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/app/graphql/types/user_filters_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::UserFiltersInputType < Types::BaseInputObject
3 | argument :email, String, required: false
4 | argument :first_name, String, required: false, camelize: false
5 | argument :last_name, String, required: false, camelize: false
6 | argument :name, String, required: false
7 | argument :privileges, [String], required: false
8 | end
9 |
--------------------------------------------------------------------------------
/cms_content_sets/wanderlust/pages/nat-debugs-an-image-he-uploaded.liquid:
--------------------------------------------------------------------------------
1 | ---
2 | name: Nat debugs an image he uploaded
3 | skip_clickwrap_agreement: false
4 | hidden_from_search: true
5 | ---
6 | Straight up file_url:
7 |
8 | {% file_url "interconu-web-480.png" %}
9 |
10 | file_url in a partial:
11 |
12 | {% include 'nat_image_debug' %}
13 |
14 | conintro:
15 |
16 | {% include 'conintro' %}
--------------------------------------------------------------------------------
/db/migrate/20151108020322_create_rooms_runs.rb:
--------------------------------------------------------------------------------
1 | class CreateRoomsRuns < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :rooms_runs, id: false do |t|
4 | t.references :room, null: false, index: true, foreign_key: true
5 | t.references :run, null: false, index: true, foreign_key: true
6 | end
7 |
8 | add_index :rooms_runs, [:run_id, :room_id], unique: true
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/db/migrate/20191019225829_create_event_ratings.rb:
--------------------------------------------------------------------------------
1 | class CreateEventRatings < ActiveRecord::Migration[6.0]
2 | def change
3 | create_table :event_ratings do |t|
4 | t.references :user_con_profile, null: false
5 | t.references :event, null: false
6 | t.integer :rating
7 |
8 | t.index [:user_con_profile_id, :event_id], unique: true
9 | t.timestamps
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20200314164542_add_catch_all_staff_position_and_email_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddCatchAllStaffPositionAndEmailModeToConventions < ActiveRecord::Migration[6.0]
2 | def change
3 | add_reference :conventions, :catch_all_staff_position,
4 | null: true, foreign_key: { to_table: 'staff_positions' }
5 | add_column :conventions, :email_mode, :string, null: false, default: 'forward'
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_cms_partial.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteCmsPartial < Mutations::BaseMutation
3 | field :cms_partial, Types::CmsPartialType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_cms_model :cms_partials, :id, :destroy
8 |
9 | def resolve(**_args)
10 | cms_partial.destroy!
11 | { cms_partial: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_order_entry.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteOrderEntry < Mutations::BaseMutation
3 | field :order_entry, Types::OrderEntryType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_model_with_id OrderEntry, :id, :update
8 |
9 | def resolve(**_args)
10 | order_entry.destroy!
11 | { order_entry: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_team_member.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteTeamMember < Mutations::BaseMutation
3 | field :team_member, Types::TeamMemberType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_model_with_id TeamMember, :id, :destroy
8 |
9 | def resolve(**_args)
10 | team_member.destroy!
11 | { team_member: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/types/notification_template_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::NotificationTemplateInputType < Types::BaseInputObject
3 | argument :body_html, String, required: false, camelize: false
4 | argument :body_sms, String, required: false, camelize: false
5 | argument :body_text, String, required: false, camelize: false
6 | argument :subject, String, required: false, camelize: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/pay_what_you_want_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::PayWhatYouWantInputType < Types::BaseInputObject
3 | argument :allowed_currency_codes, [String], required: false
4 | argument :maximum_amount, Types::MoneyInputType, required: false
5 | argument :minimum_amount, Types::MoneyInputType, required: false
6 | argument :suggested_amount, Types::MoneyInputType, required: false
7 | end
8 |
--------------------------------------------------------------------------------
/app/graphql/types/root_site_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::RootSiteType < Types::BaseObject
3 | implements Types::CmsParent
4 | include CmsParentImplementation
5 |
6 | field :host, String, null: false
7 | field :id, ID, null: false
8 | field :site_name, String, null: false, camelize: false
9 | field :url, String, null: false
10 |
11 | def id
12 | "singleton"
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/config/initializers/sentry.rb:
--------------------------------------------------------------------------------
1 | if ENV["SENTRY_DSN"].present?
2 | Sentry.init do |config|
3 | config.dsn = ENV.fetch("SENTRY_DSN")
4 | config.release = "intercode-#{ENV.fetch("REVISION")}" if ENV["REVISION"].present?
5 |
6 | config.traces_sample_rate = ENV.fetch("SENTRY_TRACES_SAMPLE_RATE", "0").to_f
7 | config.profiles_sample_rate = ENV.fetch("SENTRY_PROFILES_SAMPLE_RATE", "0").to_f
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20120616163017_create_pages.rb:
--------------------------------------------------------------------------------
1 | class CreatePages < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :pages do |t|
4 | t.text :name
5 | t.string :slug
6 | t.text :content
7 | t.integer :parent_id
8 | t.string :parent_type
9 |
10 | t.timestamps
11 | end
12 |
13 | add_index :pages, [:parent_type, :parent_id, :slug], unique: true
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20170208234244_create_cms_partials.rb:
--------------------------------------------------------------------------------
1 | class CreateCmsPartials < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table :cms_partials do |t|
4 | t.references :convention, null: false
5 | t.string :identifier, null: false
6 | t.text :content
7 |
8 | t.timestamps
9 | end
10 |
11 | add_index :cms_partials, [:convention_id, :identifier], unique: true
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/db/migrate/20181011174357_create_alert_destinations.rb:
--------------------------------------------------------------------------------
1 | class CreateAlertDestinations < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :alert_destinations do |t|
4 | t.references :alert, polymorphic: true, null: false
5 | t.references :staff_position, foreign_key: true
6 | t.references :user_con_profile, foreign_key: true
7 |
8 | t.timestamps
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/db/migrate/20181028182940_create_cms_variables.rb:
--------------------------------------------------------------------------------
1 | class CreateCmsVariables < ActiveRecord::Migration[5.2]
2 | def change
3 | create_table :cms_variables do |t|
4 | t.references :convention, foreign_key: true, null: false
5 | t.string :key, limit: 100, null: false
6 | t.text :value
7 | t.index [:convention_id, :key], unique: true
8 |
9 | t.timestamps
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20240325174012_add_signup_automation_mode_to_conventions.rb:
--------------------------------------------------------------------------------
1 | class AddSignupAutomationModeToConventions < ActiveRecord::Migration[7.1]
2 | def change
3 | add_column :conventions, :signup_automation_mode, :string
4 |
5 | reversible { |dir| dir.up { Convention.update_all(signup_automation_mode: "none") } }
6 |
7 | change_column_null :conventions, :signup_automation_mode, true
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/graphql/mutations/create_room.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::CreateRoom < Mutations::BaseMutation
3 | field :room, Types::RoomType, null: false
4 |
5 | argument :room, Types::RoomInputType, required: true
6 | authorize_create_convention_associated_model :rooms
7 |
8 | def resolve(**args)
9 | room = convention.rooms.create!(args[:room].to_h)
10 |
11 | { room: }
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/graphql/mutations/delete_email_route.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Mutations::DeleteEmailRoute < Mutations::BaseMutation
3 | field :email_route, Types::EmailRouteType, null: false
4 |
5 | argument :id, ID, required: false
6 |
7 | load_and_authorize_model_with_id EmailRoute, :id, :destroy
8 |
9 | def resolve(**_args)
10 | email_route.destroy!
11 |
12 | { email_route: }
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/app/graphql/types/event_input_type.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | class Types::EventInputType < Types::BaseInputObject
3 | argument :add_image_blob_ids, [ID], required: false, camelize: true
4 | argument :event_category_id, ID, required: false, camelize: true
5 | argument :form_response_attrs_json, String, required: false, camelize: false
6 | argument :remove_image_blob_ids, [ID], required: false, camelize: true
7 | end
8 |
--------------------------------------------------------------------------------