diff --git a/evennia/web/admin/accounts.py b/evennia/web/admin/accounts.py index a987a00ba6..4740b703bc 100644 --- a/evennia/web/admin/accounts.py +++ b/evennia/web/admin/accounts.py @@ -74,8 +74,6 @@ class AccountChangeForm(UserChangeForm): initial=settings.CMDSET_ACCOUNT, widget=forms.TextInput(attrs={"size": "78"}), required=False, - help_text="Python path to account cmdset class (set via " - "settings.CMDSET_ACCOUNT by default)", ) def clean_username(self): @@ -90,6 +88,21 @@ class AccountChangeForm(UserChangeForm): raise forms.ValidationError("An account with that name " "already exists.") return self.cleaned_data["username"] + def __init__(self, *args, **kwargs): + """ + Tweak some fields dynamically. + + """ + super().__init__(*args, **kwargs) + + # better help text for cmdset_storage + account_cmdset = settings.CMDSET_ACCOUNT + self.fields["db_cmdset_storage"].help_text = ( + "Path to Command-set path. Most non-character objects don't need a cmdset" + " and can leave this field blank. Default cmdset-path
for Accounts " + f"is {account_cmdset} ." + ) + class AccountCreationForm(UserCreationForm): """ @@ -122,101 +135,6 @@ class AccountCreationForm(UserCreationForm): return username -class AccountForm(forms.ModelForm): - """ - Defines how to display Accounts - - """ - - class Meta: - model = AccountDB - fields = "__all__" - app_label = "accounts" - - db_key = forms.RegexField( - label="Username", - initial="AccountDummy", - max_length=30, - regex=r"^[\w. @+-]+$", - required=False, - widget=forms.TextInput(attrs={"size": "30"}), - error_messages={ - "invalid": "This value may contain only letters, spaces, numbers" - " and @/./+/-/_ characters." - }, - help_text="This should be the same as the connected Account's key " - "name. 30 characters or fewer. Letters, spaces, digits and " - "@/./+/-/_ only.", - ) - - db_typeclass_path = forms.ChoiceField( - label="Typeclass", - initial={settings.BASE_ACCOUNT_TYPECLASS: settings.BASE_ACCOUNT_TYPECLASS}, - help_text="This is the Python-path to the class implementing the actual " - "account functionality. You usually don't need to change this from" - "the default.
If your custom class is not found here, it may not be " - "imported as part of Evennia's startup.", - choices=adminutils.get_and_load_typeclasses(parent=AccountDB), - ) - - db_lock_storage = forms.CharField( - label="Locks", - required=False, - help_text="Locks limit access to the entity. Written on form `type:lockdef;type:lockdef..." - "
(Permissions (used with the perm() lockfunc) are Tags with the 'permission' type)", - ) - - db_lock_storage = forms.CharField( - label="Locks", - widget=forms.Textarea(attrs={"cols": "100", "rows": "2"}), - required=False, - help_text="In-game lock definition string. If not given, defaults " - "will be used. This string should be on the form " - "type:lockfunction(args);type2:lockfunction2(args);...", - ) - db_cmdset_storage = forms.CharField( - label="cmdset", - initial=settings.CMDSET_ACCOUNT, - widget=forms.TextInput(attrs={"size": "78"}), - required=False, - help_text="python path to account cmdset class (set in " - "settings.CMDSET_ACCOUNT by default)", - ) - - -class AccountInline(admin.StackedInline): - """ - Inline creation of Account - - """ - - model = AccountDB - template = "admin/accounts/stacked.html" - form = AccountForm - fieldsets = ( - ( - "In-game Permissions and Locks", - { - "fields": ("db_lock_storage",), - # {'fields': ('db_permissions', 'db_lock_storage'), - "description": "These are permissions/locks for in-game use. " - "They are unrelated to website access rights.", - }, - ), - ( - "In-game Account data", - { - "fields": ("db_typeclass_path", "db_cmdset_storage"), - "description": "These fields define in-game-specific properties " - "for the Account object in-game.", - }, - ), - ) - - extra = 1 - max_num = 1 - - class AccountTagInline(TagInline): """ Inline Account Tags. @@ -243,6 +161,7 @@ class ObjectPuppetInline(admin.StackedInline): """ from .objects import ObjectCreateForm + verbose_name = "Puppeted Object" model = ObjectDB view_on_site = False show_change_link = True @@ -269,6 +188,13 @@ class ObjectPuppetInline(admin.StackedInline): "db_location", "db_home", "db_account", "db_cmdset_storage", "db_lock_storage") + # disable adding/deleting this inline - read-only! + def has_add_permission(self, request, obj=None): + return False + + def has_delete_permission(self, request, obj=None): + return False + @admin.register(AccountDB) class AccountAdmin(BaseUserAdmin): @@ -276,9 +202,13 @@ class AccountAdmin(BaseUserAdmin): This is the main creation screen for Users/accounts """ - list_display = ("username", "email", "is_staff", "is_superuser") + list_display = ("id", "username", "is_staff", "is_superuser", "db_typeclass_path", "db_date_created") + list_display_links = ("id", "username") form = AccountChangeForm add_form = AccountCreationForm + search_fields = ["=id", "^username", "db_typeclass_path"] + ordering = ["-db_date_created", "id"] + list_filter = ["is_superuser", "is_staff", "db_typeclass_path"] inlines = [AccountTagInline, AccountAttributeInline, ObjectPuppetInline] readonly_fields = ["db_date_created", "serialized_string"] view_on_site = False diff --git a/evennia/web/admin/comms.py b/evennia/web/admin/comms.py index a133211ea7..ebce4bd869 100644 --- a/evennia/web/admin/comms.py +++ b/evennia/web/admin/comms.py @@ -56,19 +56,22 @@ class MsgAdmin(admin.ModelAdmin): """ + inlines = [MsgTagInline] + form = MsgForm list_display = ( "id", "db_date_created", "sender", "receiver", - "start_of_message" + "start_of_message", ) list_display_links = ("id", "db_date_created", "start_of_message") - inlines = [MsgTagInline] - form = MsgForm - ordering = ["db_date_created", ] - # readonly_fields = ['db_message', 'db_sender', 'db_receivers', 'db_channels'] - search_fields = ["id", "^db_date_created", "^db_message"] + ordering = ["-db_date_created", "-id"] + search_fields = ["=id", "^db_date_created", "^db_message", + "^db_sender_accounts__db_key", "^db_sender_objects__db_key", + "^db_sender_scripts__db_key", "^db_sender_external", + "^db_receivers_accounts__db_key", "^db_receivers_objects__db_key", + "^db_receivers_scripts__db_key", "^db_receiver_external"] readonly_fields = ["db_date_created", "serialized_string"] save_as = True save_on_top = True @@ -189,9 +192,10 @@ class ChannelAdmin(admin.ModelAdmin): inlines = [ChannelTagInline, ChannelAttributeInline] form = ChannelForm - list_display = ("id", "db_key", "no_of_subscribers", "db_lock_storage") + list_display = ("id", "db_key", "no_of_subscribers", "db_lock_storage", "db_typeclass_path", + "db_date_created") list_display_links = ("id", "db_key") - ordering = ["db_key"] + ordering = ["-db_date_created", "-id", "-db_key"] search_fields = ["id", "db_key", "db_tags__db_key"] readonly_fields = ["serialized_string"] save_as = True diff --git a/evennia/web/admin/help.py b/evennia/web/admin/help.py index 28ebec19d0..b82e63707f 100644 --- a/evennia/web/admin/help.py +++ b/evennia/web/admin/help.py @@ -35,10 +35,11 @@ class HelpEntryForm(forms.ModelForm): class HelpEntryAdmin(admin.ModelAdmin): "Sets up the admin manaager for help entries" inlines = [HelpTagInline] - list_display = ("id", "db_key", "db_help_category", "db_lock_storage") + list_display = ("id", "db_key", "db_help_category", "db_lock_storage", "db_date_created") list_display_links = ("id", "db_key") search_fields = ["^db_key", "db_entrytext"] ordering = ["db_help_category", "db_key"] + list_filter = ["db_help_category"] save_as = True save_on_top = True list_select_related = True diff --git a/evennia/web/admin/objects.py b/evennia/web/admin/objects.py index 2a0109f807..05ef66a468 100644 --- a/evennia/web/admin/objects.py +++ b/evennia/web/admin/objects.py @@ -129,12 +129,11 @@ class ObjectCreateForm(forms.ModelForm): account_cmdset = settings.CMDSET_ACCOUNT self.fields["db_cmdset_storage"].help_text = ( "Path to Command-set path. Most non-character objects don't need a cmdset" - " and can leave this field blank. Some common cmdset-paths
are " - f"{char_cmdset} and {account_cmdset}" + " and can leave this field blank. Default cmdset-path
for Characters " + f"is {char_cmdset} ." ) - class ObjectEditForm(ObjectCreateForm): """ Form used for editing. Extends the create one with more fields @@ -164,10 +163,10 @@ class ObjectAdmin(admin.ModelAdmin): """ inlines = [ObjectTagInline, ObjectAttributeInline] - list_display = ("id", "db_key", "db_account", "db_typeclass_path") + list_display = ("id", "db_key", "db_typeclass_path", "db_location", "db_destination", "db_account", "db_date_created") list_display_links = ("id", "db_key") - ordering = ["db_account", "db_typeclass_path", "id"] - search_fields = ["=id", "^db_key", "db_typeclass_path", "^db_account__db_key"] + ordering = ["-db_date_created", "-id"] + search_fields = ["=id", "^db_key", "db_typeclass_path", "^db_account__db_key", "^db_location__db_key"] raw_id_fields = ("db_destination", "db_location", "db_home", "db_account") readonly_fields = ("serialized_string", "link_button") @@ -305,7 +304,7 @@ class ObjectAdmin(admin.ModelAdmin): f"Added 'puppet:pid({account.id})' lock to {obj}.") else: self.message_user(request, "Account must be connected for this action " - "(set Puppeting Account and save this page first).", + "(set Puppeting Account and save this page first).", level=messages.ERROR) # stay on the same page diff --git a/evennia/web/admin/scripts.py b/evennia/web/admin/scripts.py index a76eda2c6c..6d8ec117b0 100644 --- a/evennia/web/admin/scripts.py +++ b/evennia/web/admin/scripts.py @@ -90,10 +90,11 @@ class ScriptAdmin(admin.ModelAdmin): "db_interval", "db_repeats", "db_persistent", + "db_date_created", ) list_display_links = ("id", "db_key") - ordering = ["db_obj", "db_typeclass_path"] - search_fields = ["^db_key", "db_typeclass_path"] + ordering = ["-db_date_created", "-id"] + search_fields = ["=id", "^db_key", "db_typeclass_path"] readonly_fields = ["serialized_string"] form = ScriptForm save_as = True