├── 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 | 2 | 3 | 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 | {{ display_user_con_profile.bio_name}}'s Icon 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 | {{ display_user_con_profile.bio_name}}'s Icon 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 | --------------------------------------------------------------------------------