2019-05-02 14:57:12 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-10-31 20:02:26 +08:00
|
|
|
class Admin::DashboardController < Admin::StaffController
|
2013-03-15 06:26:12 +08:00
|
|
|
def index
|
2019-04-01 18:39:49 +08:00
|
|
|
data = AdminDashboardIndexData.fetch_cached_stats
|
|
|
|
|
|
|
|
if SiteSetting.version_checks?
|
|
|
|
data.merge!(version_check: DiscourseUpdates.check_version.as_json)
|
|
|
|
end
|
|
|
|
|
|
|
|
render json: data
|
|
|
|
end
|
|
|
|
|
|
|
|
def moderation
|
|
|
|
end
|
2023-12-15 23:46:04 +08:00
|
|
|
|
2019-04-01 18:39:49 +08:00
|
|
|
def security
|
|
|
|
end
|
2023-12-15 23:46:04 +08:00
|
|
|
|
2019-04-01 18:39:49 +08:00
|
|
|
def reports
|
|
|
|
end
|
|
|
|
|
|
|
|
def general
|
|
|
|
render json: AdminDashboardGeneralData.fetch_cached_stats
|
2013-03-15 06:26:12 +08:00
|
|
|
end
|
|
|
|
|
2013-03-30 03:48:26 +08:00
|
|
|
def problems
|
2024-05-23 09:29:08 +08:00
|
|
|
ProblemCheck.realtime.run_all
|
|
|
|
|
|
|
|
render json: { problems: serialize_data(AdminNotice.problem.all, AdminNoticeSerializer) }
|
2013-03-30 03:48:26 +08:00
|
|
|
end
|
2021-01-22 23:09:02 +08:00
|
|
|
|
|
|
|
def new_features
|
2024-11-27 07:40:55 +08:00
|
|
|
force_refresh = params[:force_refresh] == "true"
|
|
|
|
|
|
|
|
if force_refresh
|
|
|
|
RateLimiter.new(
|
|
|
|
current_user,
|
|
|
|
"force-refresh-new-features",
|
|
|
|
5,
|
|
|
|
1.minute,
|
|
|
|
apply_limit_to_staff: true,
|
|
|
|
).performed!
|
|
|
|
end
|
|
|
|
|
|
|
|
new_features = DiscourseUpdates.new_features(force_refresh:)
|
2022-12-16 01:12:53 +08:00
|
|
|
|
|
|
|
if current_user.admin? && most_recent = new_features&.first
|
|
|
|
DiscourseUpdates.bump_last_viewed_feature_date(current_user.id, most_recent["created_at"])
|
|
|
|
end
|
|
|
|
|
2021-02-11 02:12:04 +08:00
|
|
|
data = {
|
2022-12-16 01:12:53 +08:00
|
|
|
new_features: new_features,
|
2021-02-11 02:12:04 +08:00
|
|
|
has_unseen_features: DiscourseUpdates.has_unseen_features?(current_user.id),
|
|
|
|
release_notes_link: AdminDashboardGeneralData.fetch_cached_stats["release_notes_link"],
|
|
|
|
}
|
2023-11-27 06:32:28 +08:00
|
|
|
|
|
|
|
mark_new_features_as_seen
|
|
|
|
|
2021-01-22 23:09:02 +08:00
|
|
|
render json: data
|
|
|
|
end
|
|
|
|
|
2024-10-22 07:56:58 +08:00
|
|
|
def toggle_feature
|
|
|
|
Experiments::Toggle.call(service_params) do
|
|
|
|
on_success { render(json: success_json) }
|
|
|
|
on_failure { render(json: failed_json, status: 422) }
|
|
|
|
on_failed_policy(:current_user_is_admin) { raise Discourse::InvalidAccess }
|
|
|
|
on_failed_policy(:setting_is_available) { raise Discourse::InvalidAccess }
|
|
|
|
on_failed_contract do |contract|
|
|
|
|
render(json: failed_json.merge(errors: contract.errors.full_messages), status: 400)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2023-11-27 06:32:28 +08:00
|
|
|
private
|
|
|
|
|
2021-01-22 23:09:02 +08:00
|
|
|
def mark_new_features_as_seen
|
|
|
|
DiscourseUpdates.mark_new_features_as_seen(current_user.id)
|
|
|
|
end
|
2013-07-08 10:25:38 +08:00
|
|
|
end
|