FEATURE: Add auto update field to themes (#11102)

Themes marked for auto update will be automatically updated when
Discourse is updated. This is triggered by discourse_docker or
docker_manager running Rake task 'themes:update'.
This commit is contained in:
Dan Ungureanu 2020-11-16 14:44:09 +02:00 committed by GitHub
parent 0853208d67
commit bc8423a1bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 48 additions and 7 deletions

View File

@ -35,6 +35,11 @@ export default Controller.extend({
childThemesNames: mapBy("model.childThemes", "name"),
extraFiles: filterBy("model.theme_fields", "target", "extra_js"),
@discourseComputed("model.component", "model.remote_theme")
showCheckboxes() {
return !this.model.component || this.model.remote_theme;
},
@discourseComputed("model.editedFields")
editedFieldsFormatted() {
const descriptions = [];
@ -304,6 +309,10 @@ export default Controller.extend({
this.model.saveChanges("user_selectable");
},
applyAutoUpdateable() {
this.model.saveChanges("auto_update");
},
addChildTheme() {
let themeId = parseInt(this.selectedChildThemeId, 10);
let theme = this.allThemes.findBy("id", themeId);

View File

@ -134,12 +134,17 @@
{{/if}}
</div>
{{#unless model.component}}
{{#if showCheckboxes}}
<div class="control-unit">
{{inline-edit-checkbox action=(action "applyDefault") labelKey="admin.customize.theme.is_default" checked=model.default}}
{{inline-edit-checkbox action=(action "applyUserSelectable") labelKey="admin.customize.theme.user_selectable" checked=model.user_selectable}}
{{#unless model.component}}
{{inline-edit-checkbox action=(action "applyDefault") labelKey="admin.customize.theme.is_default" checked=model.default}}
{{inline-edit-checkbox action=(action "applyUserSelectable") labelKey="admin.customize.theme.user_selectable" checked=model.user_selectable}}
{{/unless}}
{{#if model.remote_theme}}
{{inline-edit-checkbox action=(action "applyAutoUpdateable") labelKey="admin.customize.theme.auto_update" checked=model.auto_update}}
{{/if}}
</div>
{{/unless}}
{{/if}}
{{#unless model.component}}
{{#d-section class="form-horizontal theme settings control-unit"}}

View File

@ -178,7 +178,7 @@ class Admin::ThemesController < Admin::AdminController
disables_component = [false, "false"].include?(theme_params[:enabled])
enables_component = [true, "true"].include?(theme_params[:enabled])
[:name, :color_scheme_id, :user_selectable, :enabled].each do |field|
[:name, :color_scheme_id, :user_selectable, :enabled, :auto_update].each do |field|
if theme_params.key?(field)
@theme.public_send("#{field}=", theme_params[field])
end
@ -348,6 +348,7 @@ class Admin::ThemesController < Admin::AdminController
:user_selectable,
:component,
:enabled,
:auto_update,
settings: {},
translations: {},
theme_fields: [:name, :target, :value, :upload_id, :type_id],

View File

@ -606,6 +606,7 @@ end
# remote_theme_id :integer
# component :boolean default(FALSE), not null
# enabled :boolean default(TRUE), not null
# auto_update :boolean default(TRUE), not null
#
# Indexes
#

View File

@ -63,8 +63,9 @@ class RemoteThemeSerializer < ApplicationSerializer
end
class ThemeSerializer < BasicThemeSerializer
attributes :color_scheme, :color_scheme_id, :user_selectable, :remote_theme_id,
:settings, :errors, :supported?, :description, :enabled?, :disabled_at
attributes :color_scheme, :color_scheme_id, :user_selectable, :auto_update,
:remote_theme_id, :settings, :errors, :supported?, :description,
:enabled?, :disabled_at
has_one :user, serializer: UserNameSerializer, embed: :object
has_one :disabled_by, serializer: UserNameSerializer, embed: :object

View File

@ -3980,6 +3980,7 @@ en:
is_default: "Theme is enabled by default"
user_selectable: "Theme can be selected by users"
color_scheme_user_selectable: "Color scheme can be selected by users"
auto_update: "Auto update when Discourse is updated"
color_scheme: "Color Palette"
default_light_scheme: "Light (default)"
color_scheme_select: "Select colors to be used by theme"

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddAutoUpdateToThemes < ActiveRecord::Migration[6.0]
def change
add_column :themes, :auto_update, :boolean, null: false, default: true
end
end

View File

@ -51,6 +51,22 @@ task "themes:install" => :environment do |task, args|
end
end
desc "Update themes & theme components"
task "themes:update" => :environment do |task, args|
Theme.where(auto_update: true).find_each do |theme|
begin
if theme.remote_theme.present?
puts "Updating #{theme.name}..."
theme.remote_theme.update_from_remote
end
rescue => e
STDERR.puts "Failed to update #{theme.name}"
STDERR.puts e
STDERR.puts e.backtrace
end
end
end
desc "List all the installed themes on the site"
task "themes:audit" => :environment do
components = Set.new