Class: Crm::SiteMapRecommendationsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Crm::SiteMapRecommendationsController
- Includes:
- ActionView::RecordIdentifier
- Defined in:
- app/controllers/crm/site_map_recommendations_controller.rb
Overview
Controller: site map recommendations.
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
Instance Method Summary collapse
-
#bulk_update ⇒ void
Updates status for multiple site map recommendations at once.
-
#discuss ⇒ void
Creates a Sunny Agent conversation to discuss selected recommendations.
-
#update ⇒ void
Updates a single site map recommendation's status and notes.
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, #touch_employee_last_seen
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?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #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, #registration_lead_type, #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 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?
Instance Method Details
#bulk_update ⇒ void
This method returns an undefined value.
Updates status for multiple site map recommendations at once.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/controllers/crm/site_map_recommendations_controller.rb', line 46 def bulk_update :manage, SiteMap ids = params[:recommendation_ids] || [] new_status = params[:status] unless new_status.in?(SiteMapRecommendation::STATUSES) redirect_back_or_to action_items_site_maps_path, alert: 'Invalid status' return end attrs = { status: new_status } attrs[:completed_at] = Time.current if new_status == 'completed' attrs[:completed_at] = nil unless new_status == 'completed' SiteMapRecommendation.where(id: ids).update_all(attrs.merge(updated_at: Time.current)) redirect_back_or_to action_items_site_maps_path, notice: "#{ids.size} recommendation(s) updated to #{new_status}" end |
#discuss ⇒ void
This method returns an undefined value.
Creates a Sunny Agent conversation to discuss selected recommendations.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/controllers/crm/site_map_recommendations_controller.rb', line 69 def discuss :manage, SiteMap submitted_ids = Array(params[:recommendation_ids]).map(&:to_i).reject(&:zero?) if submitted_ids.empty? respond_with_flash_or_redirect('Select at least one action item', action_items_site_maps_path) return end ids = SiteMapRecommendation.actionable.where(id: submitted_ids).ids skipped = submitted_ids.size - ids.size if ids.empty? respond_with_flash_or_redirect( "All #{submitted_ids.size} selected item(s) are already completed, ignored, or stale — nothing to send to Sunny.", action_items_site_maps_path ) return end conversation = Assistant::SunnyAgent.create!(user: current_user) conversation.update!( tool_services: %w[seo_audit blog_management content faq_management], conversation_type: 'seo_discuss', draft_prefill: SiteMapRecommendation.sunny_batch_prompt(ids), default_tool_handles: %w[seo-audit blog-management content-search faq-management] ) flash[:notice] = "Skipped #{skipped} item(s) already completed, ignored, or stale." if skipped > 0 # For HTML this is a plain 303; for turbo_stream form submissions # `TurboSafeRedirect` (ApplicationController) rewrites it into a # `<turbo-stream action="redirect">` so Turbo runs a clean Drive visit. redirect_to assistant_path(conversation) end |
#update ⇒ void
This method returns an undefined value.
Updates a single site map recommendation's status and notes.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/controllers/crm/site_map_recommendations_controller.rb', line 14 def update :manage, SiteMap @recommendation = SiteMapRecommendation.find(params.expect(:id)) new_status = params[:status] unless new_status.in?(SiteMapRecommendation::STATUSES) head :unprocessable_content return end attrs = { status: new_status } attrs[:completed_at] = Time.current if new_status == 'completed' attrs[:completed_at] = nil unless new_status == 'completed' attrs[:notes] = params[:notes] if params[:notes].present? @recommendation.update!(attrs) respond_to do |format| format.turbo_stream do render turbo_stream: turbo_stream.replace( dom_id(@recommendation), partial: 'crm/site_map_recommendations/recommendation_row', locals: { recommendation: @recommendation } ) end format.html { redirect_back_or_to site_map_path(@recommendation.site_map) } end end |