mediawiki: Allow setting site language code

Closes: #2137

Signed-off-by: nbenedek <contact@nbenedek.me>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
nbenedek 2023-03-11 00:16:15 +01:00 committed by James Valleroy
parent 92aff3e63c
commit f88f37c80e
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
5 changed files with 58 additions and 3 deletions

View File

@ -14,7 +14,7 @@ from plinth.modules.backups.components import BackupRestore
from plinth.modules.firewall.components import Firewall
from plinth.package import Packages
from . import manifest, privileged
from . import manifest, privileged, forms
_description = [
_('MediaWiki is the wiki engine that powers Wikipedia and other WikiMedia '
@ -146,3 +146,14 @@ def set_server_url(domain):
def get_site_name():
"""Return the value of MediaWiki's site name."""
return _get_config_value('$wgSitename') or 'Wiki'
def get_default_language():
"""Return the value of MediaWiki's default language"""
default_lang_key = _get_config_value('$wgLanguageCode')
language_choices = forms.get_languages()
for code, name in language_choices:
if code == default_lang_key:
return code
return None

View File

@ -45,6 +45,9 @@ $wgServer = "https://freedombox.local";
# Site Name
$wgSitename = "Wiki";
# Default language
$wgLanguageCode = "en";
# Enable default extensions
wfLoadExtension( 'Cite' );
wfLoadExtension( 'Interwiki' );

View File

@ -4,6 +4,7 @@ FreedomBox app for configuring MediaWiki.
"""
import pathlib
import re
from django import forms
from django.core import validators
@ -20,6 +21,17 @@ def get_skins():
if skin.is_dir()]
def get_languages():
"""Return a list of available languages as choice field values."""
with open('/var/lib/mediawiki/includes/languages/data/Names.php',
'r') as lang_file:
content = lang_file.read()
matches = re.findall(r"'([a-z_-]+)' => '(.+)', # .+", content)
language_choices = [(code, name) for code, name in matches]
return language_choices
class MediaWikiForm(forms.Form): # pylint: disable=W0232
"""MediaWiki configuration form."""
password = forms.CharField(
@ -58,3 +70,10 @@ class MediaWikiForm(forms.Form): # pylint: disable=W0232
help_text=_('Choose a default skin for your MediaWiki installation. '
'Users have the option to select their preferred skin.'),
choices=get_skins)
default_lang = forms.ChoiceField(
label=_('Default Language'), required=False,
help_text=_('Choose a default language for your MediaWiki '
'installation. Users have the option to select '
'their preferred language.'),
choices=get_languages)

View File

@ -205,3 +205,18 @@ def set_server_url(server_url: str):
def set_site_name(site_name: str):
"""Set the value of $wgSitename for this MediaWiki server."""
_update_setting('$wgSitename', f'$wgSitename = "{site_name}";\n')
@privileged
def set_default_language(language: str):
"""Set the value of $wgLanguageCode for this MediaWiki server."""
_update_setting('$wgLanguageCode ', f'$wgLanguageCode = "{language}";\n')
# In MediaWiki 1.8 or older, if you change this after installation, you
# should run the maintenance/rebuildmessages.php script to rebuild the
# user interface messages (MediaWiki namespace). Otherwise, you will not
# see the interface in the new language, or a mix of the old and new
# languages.
rebuild_messages_script = os.path.join(MAINTENANCE_SCRIPTS_DIR,
'rebuildmessages.php')
subprocess.check_call([
_get_php_command(), rebuild_messages_script])

View File

@ -10,7 +10,8 @@ from plinth import app as app_module
from plinth import views
from plinth.modules import mediawiki
from . import get_default_skin, get_server_url, get_site_name, privileged
from . import (get_default_skin,
get_server_url, get_site_name, get_default_language, privileged)
from .forms import MediaWikiForm
logger = logging.getLogger(__name__)
@ -36,7 +37,9 @@ class MediaWikiAppView(views.AppView):
'domain':
get_server_url(),
'site_name':
get_site_name()
get_site_name(),
'default_lang':
get_default_language()
})
return initial
@ -102,4 +105,8 @@ class MediaWikiAppView(views.AppView):
privileged.set_site_name(new_config['site_name'])
messages.success(self.request, _('Site name updated'))
if is_changed('default_lang'):
privileged.set_default_language(new_config['default_lang'])
messages.success(self.request, _('Default language changed'))
return super().form_valid(form)