mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +00:00 
			
		
		
		
	fix: SuperAdmin Improvements (#3733)
- Fix broken access tokens pages - Fix broken avatar images in the super admin users tab - Fix broken pagination links in super admin - Add agent bot tabs Fixes: #2021
This commit is contained in:
		| @@ -12,6 +12,7 @@ class AgentBotDashboard < Administrate::BaseDashboard | |||||||
|     avatar_url: AvatarField, |     avatar_url: AvatarField, | ||||||
|     id: Field::Number, |     id: Field::Number, | ||||||
|     name: Field::String, |     name: Field::String, | ||||||
|  |     account: Field::BelongsTo.with_options(searchable: true, searchable_field: 'name', order: 'id DESC'), | ||||||
|     description: Field::String, |     description: Field::String, | ||||||
|     outgoing_url: Field::String, |     outgoing_url: Field::String, | ||||||
|     created_at: Field::DateTime, |     created_at: Field::DateTime, | ||||||
| @@ -26,6 +27,7 @@ class AgentBotDashboard < Administrate::BaseDashboard | |||||||
|   COLLECTION_ATTRIBUTES = %i[ |   COLLECTION_ATTRIBUTES = %i[ | ||||||
|     id |     id | ||||||
|     avatar_url |     avatar_url | ||||||
|  |     account | ||||||
|     name |     name | ||||||
|     outgoing_url |     outgoing_url | ||||||
|   ].freeze |   ].freeze | ||||||
| @@ -34,7 +36,7 @@ class AgentBotDashboard < Administrate::BaseDashboard | |||||||
|   # an array of attributes that will be displayed on the model's show page. |   # an array of attributes that will be displayed on the model's show page. | ||||||
|   SHOW_PAGE_ATTRIBUTES = %i[ |   SHOW_PAGE_ATTRIBUTES = %i[ | ||||||
|     id |     id | ||||||
|     avatar_url |     account | ||||||
|     name |     name | ||||||
|     description |     description | ||||||
|     outgoing_url |     outgoing_url | ||||||
| @@ -45,6 +47,7 @@ class AgentBotDashboard < Administrate::BaseDashboard | |||||||
|   # on the model's form (`new` and `edit`) pages. |   # on the model's form (`new` and `edit`) pages. | ||||||
|   FORM_ATTRIBUTES = %i[ |   FORM_ATTRIBUTES = %i[ | ||||||
|     name |     name | ||||||
|  |     account | ||||||
|     description |     description | ||||||
|     outgoing_url |     outgoing_url | ||||||
|   ].freeze |   ].freeze | ||||||
|   | |||||||
| @@ -2,6 +2,6 @@ require 'administrate/field/base' | |||||||
|  |  | ||||||
| class AvatarField < Administrate::Field::Base | class AvatarField < Administrate::Field::Base | ||||||
|   def avatar_url |   def avatar_url | ||||||
|     data.presence || '/admin/avatar.png' |     data.presence&.gsub('?d=404', '?d=mp') | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -16,11 +16,9 @@ | |||||||
| #  unique_permissibles_index                           (platform_app_id,permissible_id,permissible_type) UNIQUE | #  unique_permissibles_index                           (platform_app_id,permissible_id,permissible_type) UNIQUE | ||||||
| # | # | ||||||
| class PlatformAppPermissible < ApplicationRecord | class PlatformAppPermissible < ApplicationRecord | ||||||
|   include AccessTokenable |  | ||||||
|  |  | ||||||
|   validates :platform_app, presence: true |   validates :platform_app, presence: true | ||||||
|   validates :platform_app_id, uniqueness: { scope: [:permissible_id, :permissible_type] } |   validates :platform_app_id, uniqueness: { scope: [:permissible_id, :permissible_type] } | ||||||
|  |  | ||||||
|   belongs_to :platform_app |   belongs_to :platform_app | ||||||
|   belongs_to :permissible, polymorphic: true, dependent: :destroy_async |   belongs_to :permissible, polymorphic: true | ||||||
| end | end | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| <%= image_tag field.avatar_url %> | <%= image_tag field.avatar_url if field.avatar_url.present? %> | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| <%= image_tag field.avatar_url %> | <%= image_tag field.avatar_url if field.avatar_url.present? %> | ||||||
|   | |||||||
| @@ -17,7 +17,8 @@ as defined by the routes in the `admin/` namespace | |||||||
|     super_admins: 'ion ion-unlocked', |     super_admins: 'ion ion-unlocked', | ||||||
|     access_tokens: 'ion-key', |     access_tokens: 'ion-key', | ||||||
|     platform_apps: 'ion ion-social-buffer', |     platform_apps: 'ion ion-social-buffer', | ||||||
|     installation_configs: 'ion ion-settings' |     installation_configs: 'ion ion-settings', | ||||||
|  |     agent_bots: 'ion ion-social-android', | ||||||
|   } |   } | ||||||
| %> | %> | ||||||
|  |  | ||||||
| @@ -39,7 +40,7 @@ as defined by the routes in the `admin/` namespace | |||||||
|     </li> |     </li> | ||||||
|  |  | ||||||
|     <% Administrate::Namespace.new(namespace).resources.each do |resource| %> |     <% Administrate::Namespace.new(namespace).resources.each do |resource| %> | ||||||
|       <% next if ["account_users", "agent_bots", "dashboard", "devise/sessions", "app_configs" ].include?  resource.resource %> |       <% next if ["account_users", "dashboard", "devise/sessions", "app_configs" ].include?  resource.resource %> | ||||||
|       <li class="navigation__link navigation__link--<%= nav_link_state(resource) %>"> |       <li class="navigation__link navigation__link--<%= nav_link_state(resource) %>"> | ||||||
|         <i class="<%= sidebar_icons[resource.resource.to_sym] %>"></i> |         <i class="<%= sidebar_icons[resource.resource.to_sym] %>"></i> | ||||||
|         <%= link_to( |         <%= link_to( | ||||||
|   | |||||||
| @@ -62,5 +62,5 @@ It renders the `_table` partial to display details about the resources. | |||||||
|     table_title: "page-title" |     table_title: "page-title" | ||||||
|   ) %> |   ) %> | ||||||
|  |  | ||||||
|   <%= paginate resources %> |   <%= paginate resources, param_name: '_page'%> | ||||||
| </section> | </section> | ||||||
|   | |||||||
| @@ -1,66 +0,0 @@ | |||||||
| <%# |  | ||||||
| # Index |  | ||||||
|  |  | ||||||
| This view is the template for the index page. |  | ||||||
| It is responsible for rendering the search bar, header and pagination. |  | ||||||
| It renders the `_table` partial to display details about the resources. |  | ||||||
|  |  | ||||||
| ## Local variables: |  | ||||||
|  |  | ||||||
| - `page`: |  | ||||||
|   An instance of [Administrate::Page::Collection][1]. |  | ||||||
|   Contains helper methods to help display a table, |  | ||||||
|   and knows which attributes should be displayed in the resource's table. |  | ||||||
| - `resources`: |  | ||||||
|   An instance of `ActiveRecord::Relation` containing the resources |  | ||||||
|   that match the user's search criteria. |  | ||||||
|   By default, these resources are passed to the table partial to be displayed. |  | ||||||
| - `search_term`: |  | ||||||
|   A string containing the term the user has searched for, if any. |  | ||||||
| - `show_search_bar`: |  | ||||||
|   A boolean that determines if the search bar should be shown. |  | ||||||
|  |  | ||||||
| [1]: http://www.rubydoc.info/gems/administrate/Administrate/Page/Collection |  | ||||||
| %> |  | ||||||
|  |  | ||||||
| <% content_for(:title) do %> |  | ||||||
|   <%= display_resource_name(page.resource_name) %> |  | ||||||
| <% end %> |  | ||||||
|  |  | ||||||
| <header class="main-content__header" role="banner"> |  | ||||||
|   <h1 class="main-content__page-title" id="page-title"> |  | ||||||
|     <%= content_for(:title) %> |  | ||||||
|   </h1> |  | ||||||
|  |  | ||||||
|   <% if show_search_bar %> |  | ||||||
|     <%= render( |  | ||||||
|       "search", |  | ||||||
|       search_term: search_term, |  | ||||||
|       resource_name: display_resource_name(page.resource_name) |  | ||||||
|     ) %> |  | ||||||
|   <% end %> |  | ||||||
|  |  | ||||||
|   <div> |  | ||||||
|     <%= link_to( |  | ||||||
|       t( |  | ||||||
|         "administrate.actions.new_resource", |  | ||||||
|         name: page.resource_name.titleize.downcase |  | ||||||
|       ), |  | ||||||
|       [:new, namespace, page.resource_path.to_sym], |  | ||||||
|       class: "button", |  | ||||||
|     ) if valid_action?(:new) && show_action?(:new, new_resource) %> |  | ||||||
|   </div> |  | ||||||
| </header> |  | ||||||
|  |  | ||||||
| <section class="main-content__body main-content__body--flush"> |  | ||||||
|   <%= render( |  | ||||||
|     "collection", |  | ||||||
|     collection_presenter: page, |  | ||||||
|     collection_field_name: resource_name, |  | ||||||
|     page: page, |  | ||||||
|     resources: resources, |  | ||||||
|     table_title: "page-title" |  | ||||||
|   ) %> |  | ||||||
|  |  | ||||||
|   <%= paginate resources %> |  | ||||||
| </section> |  | ||||||
| @@ -0,0 +1,5 @@ | |||||||
|  | class RemovePlatformAppPermissibleAccessTokens < ActiveRecord::Migration[6.1] | ||||||
|  |   def change | ||||||
|  |     AccessToken.where(owner_type: 'PlatformAppPermissible').destroy_all | ||||||
|  |   end | ||||||
|  | end | ||||||
| @@ -10,7 +10,7 @@ | |||||||
| # | # | ||||||
| # It's strongly recommended that you check this file into your version control system. | # It's strongly recommended that you check this file into your version control system. | ||||||
|  |  | ||||||
| ActiveRecord::Schema.define(version: 2022_01_11_200105) do | ActiveRecord::Schema.define(version: 2022_01_11_223630) do | ||||||
|  |  | ||||||
|   # These are extensions that must be enabled in order to support this database |   # These are extensions that must be enabled in order to support this database | ||||||
|   enable_extension "pg_stat_statements" |   enable_extension "pg_stat_statements" | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 8.3 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 4.4 KiB | 
		Reference in New Issue
	
	Block a user
	 Sojan Jose
					Sojan Jose