using Statum; namespace Spry.Actions { /** * Enables or disables the user targeted by the sealed private data * ({@link UserActionPrivate}.`user_id`, falling back to the `user_id` * form field when no blob was sent), toggled by the `enabled` form field * (checkbox-style: the field is absent when unchecked). Admin-guarded. */ public class SetUserEnabledAction : UserManagementAction { /** Notification shown when no `user_id` was supplied. */ protected virtual string user_required_message { get { return "A user id is required."; } } /** Notification shown after enabling a user. */ protected virtual string user_enabled_message { get { return "User has been enabled."; } } /** Notification shown after disabling a user. */ protected virtual string user_disabled_message { get { return "User has been disabled."; } } /** Notification shown when the update could not be persisted. */ protected virtual string update_failed_message { get { return "Could not update the user. Please try again later."; } } public override async DirectiveBuilder handle() throws GLib.Error { var guard = yield require_permission_guard(); if (guard != null) { return (!)guard; } string enabled_text = ""; if (request.form != null) { enabled_text = request.form.get_field("enabled") ?? ""; } int64 user_id = target_user_id(); if (user_id == 0) { return directives().notify("error", user_required_message); } bool enabled = enabled_text.down() == "on" || enabled_text.down() == "true" || enabled_text.down() == "1"; try { yield users.set_user_enabled(user_id, enabled); return directives().notify("success", enabled ? user_enabled_message : user_disabled_message); } catch (Error e) { return directives().notify("error", ProfileValidation.internal_error_message(e, update_failed_message)); } } } }