Class: Admin::AdminController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Admin::AdminController
- Defined in:
- app/controllers/admin/admin_controller.rb
Overview
Controller: admin.
Constant Summary
Constants included from Controllers::ReferenceFindable
Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS
Constants included from Controllers::AnalyticsEvents
Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY
Constants included from Controllers::ErrorRendering
Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES
Constants included from Www::SeoHelper
Www::SeoHelper::AWARDS, Www::SeoHelper::CA_ADDRESS, Www::SeoHelper::CA_BUSINESS_HOURS, Www::SeoHelper::CA_CONTACT_POINT, Www::SeoHelper::CA_CURRENCIES, Www::SeoHelper::CA_DESCRIPTION, Www::SeoHelper::CA_FOUNDING_DATE, Www::SeoHelper::CA_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::CA_LEGAL_NAME, Www::SeoHelper::CA_LOCAL_BUSINESS, Www::SeoHelper::CA_ONLINE_STORE, Www::SeoHelper::CA_RETURN_POLICY, Www::SeoHelper::CA_SALES_DEPARTMENT, Www::SeoHelper::CA_SERVICE_AREA, Www::SeoHelper::CA_URL, Www::SeoHelper::CA_VAT_ID, Www::SeoHelper::CA_WAREHOUSE_DEPARTMENT, Www::SeoHelper::CA_WAREHOUSE_HOURS, Www::SeoHelper::COMPANY_EMAIL, Www::SeoHelper::COMPANY_LOGO, Www::SeoHelper::COMPANY_NAME, Www::SeoHelper::COMPANY_SLOGAN, Www::SeoHelper::EXPERTISE, Www::SeoHelper::FAX_NUMBER, Www::SeoHelper::GS1_COMPANY_PREFIX, Www::SeoHelper::ISO6523_CODE, Www::SeoHelper::PAYMENT_METHODS, Www::SeoHelper::PHONE_NUMBER, Www::SeoHelper::PRIMARY_NAICS, Www::SeoHelper::REFUND_TYPE, Www::SeoHelper::RETURN_FEES, Www::SeoHelper::RETURN_METHOD, Www::SeoHelper::RETURN_POLICY_CATEGORY, Www::SeoHelper::SECONDARY_NAICS, Www::SeoHelper::SOCIAL_PROFILES, Www::SeoHelper::US_ADDRESS, Www::SeoHelper::US_BUSINESS_HOURS, Www::SeoHelper::US_CONTACT_POINT, Www::SeoHelper::US_CURRENCIES, Www::SeoHelper::US_DESCRIPTION, Www::SeoHelper::US_FOUNDING_DATE, Www::SeoHelper::US_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::US_IMAGE, Www::SeoHelper::US_LEGAL_NAME, Www::SeoHelper::US_LOCAL_BUSINESS, Www::SeoHelper::US_ONLINE_STORE, Www::SeoHelper::US_RETURN_POLICY, Www::SeoHelper::US_SALES_DEPARTMENT, Www::SeoHelper::US_SERVICE_AREA, Www::SeoHelper::US_TAX_ID, Www::SeoHelper::US_URL, Www::SeoHelper::US_WAREHOUSE_DEPARTMENT, Www::SeoHelper::US_WAREHOUSE_HOURS
Constants included from IconHelper
IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY
Instance Method Summary collapse
- #auto_ship_confirm_deliveries ⇒ Object
- #cache_status ⇒ Object
- #check_for_receipts ⇒ Object
-
#exception_test ⇒ Object
Exception testing page for verifying AppSignal error reporting GET /admin/exception_test.
- #flush_cache ⇒ Object
- #get_all_exchange_rates ⇒ Object
- #get_exchange_rates_for_today ⇒ Object
- #index ⇒ Object
- #invoice_shipped_deliveries ⇒ Object
- #process_shipped_deliveries ⇒ Object
- #reconcile_committed_items ⇒ Object
- #refresh_all_specs ⇒ Object
- #refresh_cache_blog_posts ⇒ Object
- #refresh_cache_product_lines ⇒ Object
- #refresh_cache_showcases ⇒ Object
- #search_test ⇒ Object
-
#sendfile_test ⇒ Object
X-Sendfile diagnostics page GET /admin/sendfile_test.
-
#sendfile_test_download ⇒ Object
Serves a small generated text file via send_file_accelerated to verify the full Thruster X-Sendfile chain end-to-end.
- #simple_form ⇒ Object
- #simple_form_vertical ⇒ Object
- #status ⇒ Object
- #stimulus_form ⇒ Object
- #test ⇒ Object
- #youtube ⇒ Object
- #youtube_auto_link ⇒ Object
- #youtube_link_selected ⇒ Object
Methods inherited from CrmController
#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie
Methods inherited from ApplicationController
#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #stamp_impersonation_context, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y
Methods included from Controllers::ReturnPathHandling
#check_for_return_path, #redirect_to_return_path_or_default
Methods included from Controllers::AnalyticsEvents
#consume_queued_analytics_events, #track_event
Methods included from Controllers::DeviceDetection
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
Methods included from Controllers::TrackingDetection
#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?
Methods included from Controllers::AcceleratedFileSending
#send_file_accelerated, #send_upload_accelerated
Methods included from Controllers::ErrorRendering
#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback
Methods included from Controllers::TurnstileVerification
#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!
Methods included from Controllers::CloudflareCaching
edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session
Methods included from Controllers::Webpackable
#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?
Methods included from Controllers::Localizable
#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale
Methods included from Controllers::Authenticable
#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak
Methods included from ApplicationHelper
#better_number_to_currency, #check_force_logout, #check_or_cross, #check_or_times, #embedded_tab_frame_id, #error_messages, #general_disclaimer_on_product_installation_and_local_codes, #gridjs_from_html_table, #gridjs_table, #is_wy_ip, #line_break, #parent_layout, #pass_or_fail, #render_error_messages_list, #render_video_card, #resolved_auth_form_turbo_frame, #return_path_or, #safe_css_color, #set_return_path_if_present, #set_section_if_present, #tab_frame_id, #to_underscore, #track_page?, #turbo_section_wrapper, #turbo_tabs_request?, #url_on_same_domain_as_request, #widget_index_daily_focus_index_path, #working_hours?, #yes_or_no, #yes_or_no_highlighted, #yes_or_no_with_check_or_cross, #youtube_video
Methods included from UppyUploaderHelper
#file_uploader, #image_uploader, #large_file_uploader_s3, #lead_sketch_uploader, #rma_image_uploader, #rma_image_uploader_s3, #uppy_uploader, #video_uploader
Methods included from Www::ImagesHelper
#image_asset_tag, #image_asset_url
Methods included from Www::SeoHelper
#add_page_schema, #add_webpage_schema, #canada?, #company_social_links, #ensure_context_json, #json_ld_script_tag, #local_business_schema, #online_store_id, #online_store_schema, #page_main_entity, #page_main_entity_json, #render_auto_collection_page_schema, #render_collection_page_schema, #render_local_business_schema, #render_online_store_schema, #render_page_schemas, #render_page_video_schemas, #render_webpage_schema, #render_webpage_schema_with_collections, #usa?
Methods included from UrlsHelper
#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?
Methods included from IconHelper
#account_nav_icon, #fa_icon, #star_rating_html
Instance Method Details
#auto_ship_confirm_deliveries ⇒ Object
138 139 140 141 142 143 |
# File 'app/controllers/admin/admin_controller.rb', line 138 def auto_ship_confirm_deliveries :manage, Delivery Delivery.auto_ship_confirm flash[:info] = 'Any deliveries pending ship confirm are now being processed.' redirect_to action: :index end |
#cache_status ⇒ Object
83 84 85 86 |
# File 'app/controllers/admin/admin_controller.rb', line 83 def cache_status @cache_info = gather_cache_status @redis_connections = gather_redis_connections end |
#check_for_receipts ⇒ Object
105 106 107 108 109 |
# File 'app/controllers/admin/admin_controller.rb', line 105 def check_for_receipts Order.check_for_receipts flash[:info] = 'Any unsettled orders are being checked to see if all invoices are paid' redirect_to action: :index end |
#exception_test ⇒ Object
Exception testing page for verifying AppSignal error reporting
GET /admin/exception_test
192 193 194 |
# File 'app/controllers/admin/admin_controller.rb', line 192 def exception_test :manage, Employee end |
#flush_cache ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/controllers/admin/admin_controller.rb', line 125 def flush_cache if current_account.has_role?('admin') Rails.cache.clear flash[:info] = 'Successfully flushed redis' redirect_to action: :index else head :forbidden end rescue StandardError => e flash[:error] = "Could not flush cache: #{e}" redirect_to action: :index end |
#get_all_exchange_rates ⇒ Object
118 119 120 121 122 123 |
# File 'app/controllers/admin/admin_controller.rb', line 118 def get_all_exchange_rates :manage, ExchangeRate ExchangeRate.get_all_exchange_rates flash[:info] = 'Missing exchange rates have been downloaded' redirect_to action: :index end |
#get_exchange_rates_for_today ⇒ Object
111 112 113 114 115 116 |
# File 'app/controllers/admin/admin_controller.rb', line 111 def get_exchange_rates_for_today :manage, ExchangeRate ExchangeRate.get_exchange_rates_for_today flash[:info] = 'Exchange rate has been downloaded' redirect_to action: :index end |
#index ⇒ Object
88 |
# File 'app/controllers/admin/admin_controller.rb', line 88 def index; end |
#invoice_shipped_deliveries ⇒ Object
145 146 147 148 149 150 151 |
# File 'app/controllers/admin/admin_controller.rb', line 145 def invoice_shipped_deliveries :manage, Invoice Delivery.invoice_shipped_deliveries flash[:info] = 'Shipped deliveries have been queued for invoicing, process may take a few minutes to complete.' redirect_to action: :index end |
#process_shipped_deliveries ⇒ Object
90 91 92 93 94 95 96 |
# File 'app/controllers/admin/admin_controller.rb', line 90 def process_shipped_deliveries :manage, Invoice Delivery.invoice_shipped_deliveries flash[:info] = 'Any shipped deliveries are now being processed' redirect_to action: :index end |
#reconcile_committed_items ⇒ Object
98 99 100 101 102 103 |
# File 'app/controllers/admin/admin_controller.rb', line 98 def reconcile_committed_items :manage, StoreItem Item::InventoryCommitter.consolidate_commit_counts flash[:info] = 'Item reconciliation complete' redirect_to action: :index end |
#refresh_all_specs ⇒ Object
162 163 164 165 166 167 |
# File 'app/controllers/admin/admin_controller.rb', line 162 def refresh_all_specs :manage, Item count = Item.async_update_all_items_product_specifications flash[:info] = "Specs queued for #{count} items" redirect_to action: :index end |
#refresh_cache_blog_posts ⇒ Object
179 180 181 182 183 184 185 186 |
# File 'app/controllers/admin/admin_controller.rb', line 179 def refresh_cache_blog_posts :manage, Post Post.find_each(&:touch) flash[:info] = 'Cache has been refreshed' redirect_to action: :index rescue StandardError => e flash[:error] = "Could not refresh cache: #{e}" end |
#refresh_cache_product_lines ⇒ Object
169 170 171 172 173 174 175 176 177 |
# File 'app/controllers/admin/admin_controller.rb', line 169 def refresh_cache_product_lines :manage, Item ProductLine.touch_all Item.touch_all flash[:info] = 'Cache has been refreshed' redirect_to action: :index rescue StandardError => e flash[:error] = "Could not refresh cache: #{e}" end |
#refresh_cache_showcases ⇒ Object
153 154 155 156 157 158 159 160 |
# File 'app/controllers/admin/admin_controller.rb', line 153 def refresh_cache_showcases :manage, Showcase Showcase.find_each(&:touch) flash[:info] = 'Cache has been refreshed' redirect_to action: :index rescue StandardError => e flash[:error] = "Could not refresh cache: #{e}" end |
#search_test ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/controllers/admin/admin_controller.rb', line 19 def search_test :search_test, Employee # A full database is required to test a solid text search methodology. But # in automated testing this is not possible # So a simple web portal will display the result against various test cases names = { 'We Floors' => 156_336, "Don's Floor Covering" => 119_642, 'DirectBuy Cincinnati' => 122_491, 'directbuy cin*' => 122_491, 'dir* cin*' => 122_491, 'DirectBuy Gaithersburg' => 123_584, 'directbuy gaith*' => 123_584, 'Prosource of Monroeville' => 133_439, 'Amy Bronzonie' => 180_273, 'Amy Bronz*' => 180_273, 'M A K Interiors' => 44_068, 'MAK Interiors' => 44_068, 'Design Kitchen and Bath' => 49_508 } @results = [] names.each do |n, pid| res = Party.lookup(n).limit(5) @results << { original: n, results: res.map do |p| "#{p.full_name} [#{p.id}]" end, success: res.any? do |p| p.id == pid end } end render layout: false end |
#sendfile_test ⇒ Object
X-Sendfile diagnostics page
GET /admin/sendfile_test
198 199 200 201 202 203 |
# File 'app/controllers/admin/admin_controller.rb', line 198 def sendfile_test :manage, Employee @storage_path = Rails.application.config.x.temp_storage_path @sendfile_header = Rails.application.config.action_dispatch.x_sendfile_header @acceleration_enabled = @sendfile_header.present? && @storage_path.present? end |
#sendfile_test_download ⇒ Object
Serves a small generated text file via send_file_accelerated to verify the
full Thruster X-Sendfile chain end-to-end.
GET /admin/sendfile_test/download
208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'app/controllers/admin/admin_controller.rb', line 208 def sendfile_test_download :manage, Employee # Write a stable file into the X-Sendfile scratch dir, mirroring how real # callers (e.g. publication PDFs) place their file there. send_file_accelerated # serves it in place; a container recycle / cleanup sweep removes it later. # # The filename is namespaced by PID so concurrent writers (Puma workers in # prod, or parallel :processes test workers sharing tmp/storage) never collide # on, or clean up, each other's in-flight files. path = Rails.application.config.x.temp_storage_path.join("sendfile_test_#{Process.pid}_#{SecureRandom.hex(8)}.txt") File.write(path, "X-Sendfile test — generated at #{Time.current}\nServer: #{request.host}\nEnvironment: #{Rails.env}\n") send_file_accelerated(path.to_s, download: true, mime_type: 'text/plain', file_name: 'sendfile_test.txt') end |
#simple_form ⇒ Object
5 6 7 8 9 |
# File 'app/controllers/admin/admin_controller.rb', line 5 def simple_form # Create a model with error @customer = Customer.new @customer.save end |
#simple_form_vertical ⇒ Object
11 12 13 14 15 |
# File 'app/controllers/admin/admin_controller.rb', line 11 def simple_form_vertical # Create a model with error @customer = Customer.new @customer.save end |
#status ⇒ Object
81 |
# File 'app/controllers/admin/admin_controller.rb', line 81 def status; end |
#stimulus_form ⇒ Object
17 |
# File 'app/controllers/admin/admin_controller.rb', line 17 def stimulus_form; end |
#test ⇒ Object
188 |
# File 'app/controllers/admin/admin_controller.rb', line 188 def test; end |
#youtube ⇒ Object
51 |
# File 'app/controllers/admin/admin_controller.rb', line 51 def youtube; end |
#youtube_auto_link ⇒ Object
53 54 55 56 57 58 59 |
# File 'app/controllers/admin/admin_controller.rb', line 53 def youtube_auto_link service = YouTube::AutoLinkService.new @matches = service.discover_matches rescue YouTube::OauthService::TokenRefreshError, YouTube::ApiClient::ApiError => e @matches = [] flash.now[:alert] = "YouTube API error: #{e.}" end |
#youtube_link_selected ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/controllers/admin/admin_controller.rb', line 61 def youtube_link_selected links = params[:links]&.select { |_yt_id, video_id| video_id.present? } || {} if links.empty? redirect_to admin_youtube_auto_link_path, alert: 'No videos selected.' return end service = YouTube::AutoLinkService.new linked = 0 links.each do |youtube_id, video_id| service.link!(video_id.to_i, youtube_id) linked += 1 rescue StandardError => e Rails.logger.error("[YouTubeAutoLink] Failed to link video #{video_id} to #{youtube_id}: #{e.}") end redirect_to admin_youtube_path, notice: "Linked #{linked} video(s) to YouTube. Metadata sync queued." end |