mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	 1a78a9243f
			
		
	
	1a78a9243f
	
	
	
		
			
			- Removes the portal_members table and all associated records - Updates policies to use custom roles with knowledge_base_manage permission - Updates controllers, models, and views to work without portal membership - Adds tests for the new permission model
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
 | |
|   include ::FileTypeHelper
 | |
| 
 | |
|   before_action :fetch_portal, except: [:index, :create]
 | |
|   before_action :check_authorization
 | |
|   before_action :set_current_page, only: [:index]
 | |
| 
 | |
|   def index
 | |
|     @portals = Current.account.portals
 | |
|   end
 | |
| 
 | |
|   def show
 | |
|     @all_articles = @portal.articles
 | |
|     @articles = @all_articles.search(locale: params[:locale])
 | |
|   end
 | |
| 
 | |
|   def create
 | |
|     @portal = Current.account.portals.build(portal_params.merge(live_chat_widget_params))
 | |
|     @portal.custom_domain = parsed_custom_domain
 | |
|     @portal.save!
 | |
|     process_attached_logo
 | |
|   end
 | |
| 
 | |
|   def update
 | |
|     ActiveRecord::Base.transaction do
 | |
|       @portal.update!(portal_params.merge(live_chat_widget_params)) if params[:portal].present?
 | |
|       # @portal.custom_domain = parsed_custom_domain
 | |
|       process_attached_logo if params[:blob_id].present?
 | |
|     rescue StandardError => e
 | |
|       Rails.logger.error e
 | |
|       render json: { error: @portal.errors.messages }.to_json, status: :unprocessable_entity
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def destroy
 | |
|     @portal.destroy!
 | |
|     head :ok
 | |
|   end
 | |
| 
 | |
|   def archive
 | |
|     @portal.update(archive: true)
 | |
|     head :ok
 | |
|   end
 | |
| 
 | |
|   def logo
 | |
|     @portal.logo.purge if @portal.logo.attached?
 | |
|     head :ok
 | |
|   end
 | |
| 
 | |
|   def process_attached_logo
 | |
|     blob_id = params[:blob_id]
 | |
|     blob = ActiveStorage::Blob.find_by(id: blob_id)
 | |
|     @portal.logo.attach(blob)
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def fetch_portal
 | |
|     @portal = Current.account.portals.find_by(slug: permitted_params[:id])
 | |
|   end
 | |
| 
 | |
|   def permitted_params
 | |
|     params.permit(:id)
 | |
|   end
 | |
| 
 | |
|   def portal_params
 | |
|     params.require(:portal).permit(
 | |
|       :account_id, :color, :custom_domain, :header_text, :homepage_link,
 | |
|       :name, :page_title, :slug, :archived, { config: [:default_locale, { allowed_locales: [] }] }
 | |
|     )
 | |
|   end
 | |
| 
 | |
|   def live_chat_widget_params
 | |
|     permitted_params = params.permit(:inbox_id)
 | |
|     return {} if permitted_params[:inbox_id].blank?
 | |
| 
 | |
|     inbox = Inbox.find(permitted_params[:inbox_id])
 | |
|     return {} unless inbox.web_widget?
 | |
| 
 | |
|     { channel_web_widget_id: inbox.channel.id }
 | |
|   end
 | |
| 
 | |
|   def set_current_page
 | |
|     @current_page = params[:page] || 1
 | |
|   end
 | |
| 
 | |
|   def parsed_custom_domain
 | |
|     domain = URI.parse(@portal.custom_domain)
 | |
|     domain.is_a?(URI::HTTP) ? domain.host : @portal.custom_domain
 | |
|   end
 | |
| end
 |