diff --git a/actions/mediawiki b/actions/mediawiki index 08ad36e1c..7da44c756 100755 --- a/actions/mediawiki +++ b/actions/mediawiki @@ -52,6 +52,10 @@ def parse_arguments(): 'set-server-url', help='Set the value of $wgServer for this server') server_url.add_argument('server_url', help='value of $wgServer') + site_name = subparsers.add_parser( + 'set-site-name', help='Set the value of $wgSitename for this Wiki') + site_name.add_argument('site_name', help='value of $wgSitename') + subparsers.required = True return parser.parse_args() @@ -253,6 +257,11 @@ def subcommand_set_server_url(arguments): _update_setting('$wgServer', f'$wgServer = "{arguments.server_url}";\n') +def subcommand_set_site_name(arguments): + """Set the value of $wgSitename for this MediaWiki server.""" + _update_setting('$wgSitename', f'$wgSitename = "{arguments.site_name}";\n') + + def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() diff --git a/plinth/modules/mediawiki/__init__.py b/plinth/modules/mediawiki/__init__.py index a71903b0d..6ca1f3c0d 100644 --- a/plinth/modules/mediawiki/__init__.py +++ b/plinth/modules/mediawiki/__init__.py @@ -166,3 +166,13 @@ def set_server_url(domain): actions.superuser_run('mediawiki', ['set-server-url', f'{protocol}://{domain}']) + + +def get_site_name(): + """Return the value of MediaWiki's site name.""" + return _get_config_value('$wgSitename') or 'Wiki' + + +def set_site_name(site_name): + """Set the value of $wgSitename.""" + actions.superuser_run('mediawiki', ['set-site-name', site_name]) diff --git a/plinth/modules/mediawiki/data/etc/mediawiki/FreedomBoxStaticSettings.php b/plinth/modules/mediawiki/data/etc/mediawiki/FreedomBoxStaticSettings.php index 6026cfd6d..878c5be7d 100644 --- a/plinth/modules/mediawiki/data/etc/mediawiki/FreedomBoxStaticSettings.php +++ b/plinth/modules/mediawiki/data/etc/mediawiki/FreedomBoxStaticSettings.php @@ -45,6 +45,9 @@ $wgDefaultSkin = "timeless"; # Domain Name $wgServer = "https://freedombox.local"; +# Site Name +$wgSitename = "Wiki"; + # Enable default extensions wfLoadExtension( 'Cite' ); wfLoadExtension( 'Interwiki' ); diff --git a/plinth/modules/mediawiki/forms.py b/plinth/modules/mediawiki/forms.py index b672865a8..85372dfc5 100644 --- a/plinth/modules/mediawiki/forms.py +++ b/plinth/modules/mediawiki/forms.py @@ -6,6 +6,7 @@ FreedomBox app for configuring MediaWiki. import pathlib from django import forms +from django.core import validators from django.utils.translation import gettext_lazy as _ @@ -35,6 +36,11 @@ class MediaWikiForm(forms.Form): # pylint: disable=W0232 'such as in footer, feeds and emails. Examples: ' '"myfreedombox.example.org" or "example.onion".')) + site_name = forms.CharField( + label=_('Site Name'), required=False, + help_text=_('Name of the site as displayed throughout the wiki.'), + validators=[validators.RegexValidator('[$"]', inverse_match=True)]) + enable_public_registrations = forms.BooleanField( label=_('Enable public registrations'), required=False, help_text=_('If enabled, anyone on the internet will be able to ' diff --git a/plinth/modules/mediawiki/tests/test_settings.py b/plinth/modules/mediawiki/tests/test_settings.py index 3ffc87b18..2bd9b0644 100644 --- a/plinth/modules/mediawiki/tests/test_settings.py +++ b/plinth/modules/mediawiki/tests/test_settings.py @@ -66,3 +66,11 @@ def test_server_url(): new_domain = 'mydomain.freedombox.rocks' mediawiki.set_server_url(new_domain) assert mediawiki.get_server_url() == new_domain + + +def test_site_name(): + """Test getting and setting $wgSitename.""" + assert mediawiki.get_site_name() == 'Wiki' + new_site_name = 'My MediaWiki' + mediawiki.set_site_name(new_site_name) + assert mediawiki.get_site_name() == new_site_name diff --git a/plinth/modules/mediawiki/views.py b/plinth/modules/mediawiki/views.py index e6f2203b6..524c322ab 100644 --- a/plinth/modules/mediawiki/views.py +++ b/plinth/modules/mediawiki/views.py @@ -12,8 +12,8 @@ from plinth import actions, views from plinth.errors import ActionError from plinth.modules import mediawiki -from . import (get_default_skin, get_server_url, is_private_mode_enabled, - is_public_registration_enabled) +from . import (get_default_skin, get_server_url, get_site_name, + is_private_mode_enabled, is_public_registration_enabled) from .forms import MediaWikiForm logger = logging.getLogger(__name__) @@ -32,7 +32,8 @@ class MediaWikiAppView(views.AppView): 'enable_public_registrations': is_public_registration_enabled(), 'enable_private_mode': is_private_mode_enabled(), 'default_skin': get_default_skin(), - 'domain': get_server_url() + 'domain': get_server_url(), + 'site_name': get_site_name() }) return initial @@ -97,4 +98,8 @@ class MediaWikiAppView(views.AppView): mediawiki.set_server_url(new_config['domain']) messages.success(self.request, _('Domain name updated')) + if is_changed('site_name'): + mediawiki.set_site_name(new_config['site_name']) + messages.success(self.request, _('Site name updated')) + return super().form_valid(form)