Add basic BBcode translator

Signed-off-by: Skia <skia@libskia.so>
This commit is contained in:
Skia 2017-05-30 19:29:35 +02:00
parent 32ac6640ab
commit 136d0f3fa0
7 changed files with 245 additions and 181 deletions

View File

@ -1,12 +1,14 @@
{% extends "core/base.jinja" %} {% extends "core/base.jinja" %}
{% block title %} {% block title %}
{% trans %}Doku to Markdown{% endtrans %} {% trans %}To Markdown{% endtrans %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<form action="" method="post" enctype="multipart/form-data"> <form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
<input type="radio" name="syntax" value="doku" {% if request.POST['syntax'] != "bbcode" %}checked{% endif %} >Doku</input>
<input type="radio" name="syntax" value="bbcode" {% if request.POST['syntax'] == "bbcode" %}checked{% endif %} >BBCode</input>
<textarea name="text" id="text" rows="30" cols="80"> <textarea name="text" id="text" rows="30" cols="80">
{{- text -}} {{- text -}}
</textarea> </textarea>

View File

@ -108,7 +108,7 @@
</ul> </ul>
<h4>{% trans %}Other tools{% endtrans %}</h4> <h4>{% trans %}Other tools{% endtrans %}</h4>
<ul> <ul>
<li><a href="{{ url('core:doku_to_markdown') }}">{% trans %}Convert dokuwiki syntax to Markdown{% endtrans %}</a></li> <li><a href="{{ url('core:to_markdown') }}">{% trans %}Convert dokuwiki/BBcode syntax to Markdown{% endtrans %}</a></li>
<li><a href="{{ url('trombi:user_tools') }}">{% trans %}Trombi tools{% endtrans %}</a></li> <li><a href="{{ url('trombi:user_tools') }}">{% trans %}Trombi tools{% endtrans %}</a></li>
</ul> </ul>

View File

@ -28,7 +28,7 @@ from core.views import *
urlpatterns = [ urlpatterns = [
url(r'^$', index, name='index'), url(r'^$', index, name='index'),
url(r'^doku_to_markdown$', DokuToMarkdownView.as_view(), name='doku_to_markdown'), url(r'^to_markdown$', ToMarkdownView.as_view(), name='to_markdown'),
url(r'^notifications$', NotificationList.as_view(), name='notification_list'), url(r'^notifications$', NotificationList.as_view(), name='notification_list'),
url(r'^notification/(?P<notif_id>[0-9]+)$', notification, name='notification'), url(r'^notification/(?P<notif_id>[0-9]+)$', notification, name='notification'),

View File

@ -66,6 +66,7 @@ def exif_auto_rotate(image):
return image return image
def doku_to_markdown(text): def doku_to_markdown(text):
"""This is a quite correct doku translator"""
text = re.sub(r'([^:]|^)\/\/(.*?)\/\/', r'*\2*', text) # Italic (prevents protocol:// conflict) text = re.sub(r'([^:]|^)\/\/(.*?)\/\/', r'*\2*', text) # Italic (prevents protocol:// conflict)
text = re.sub(r'<del>(.*?)<\/del>', r'~~\1~~', text, flags=re.DOTALL) # Strike (may be multiline) text = re.sub(r'<del>(.*?)<\/del>', r'~~\1~~', text, flags=re.DOTALL) # Strike (may be multiline)
text = re.sub(r'<sup>(.*?)<\/sup>', r'^\1^', text) # Superscript (multiline not supported, because almost never used) text = re.sub(r'<sup>(.*?)<\/sup>', r'^\1^', text) # Superscript (multiline not supported, because almost never used)
@ -133,3 +134,44 @@ def doku_to_markdown(text):
return "\n".join(new_text) return "\n".join(new_text)
def bbcode_to_markdown(text):
"""This is a very basic BBcode translator"""
text = re.sub(r'\[b\](.*?)\[\/b\]', r'**\1**', text, flags=re.DOTALL) # Bold
text = re.sub(r'\[i\](.*?)\[\/i\]', r'*\1*', text, flags=re.DOTALL) # Italic
text = re.sub(r'\[u\](.*?)\[\/u\]', r'__\1__', text, flags=re.DOTALL) # Underline
text = re.sub(r'\[s\](.*?)\[\/s\]', r'~~\1~~', text, flags=re.DOTALL) # Strike (may be multiline)
text = re.sub(r'\[strike\](.*?)\[\/strike\]', r'~~\1~~', text, flags=re.DOTALL) # Strike 2
text = re.sub(r'article://', r'page://', text)
text = re.sub(r'dfile://', r'file://', text)
text = re.sub(r'\[url=(.*?)\](.*)\[\/url\]', r'[\2](\1)', text) # Links
text = re.sub(r'\[url\](.*)\[\/url\]', r'\1', text) # Links 2
text = re.sub(r'\[img\](.*)\[\/img\]', r'![\1](\1 "\1")', text) # Images
new_text = []
quote_level = 0
for line in text.splitlines(): # Tables and quotes
enter = re.finditer(r'\[quote(=(.+?))?\]', line)
quit = re.finditer(r'\[/quote\]', line)
if enter or quit: # Quote part
for quote in enter: # Enter quotes (support multiple at a time)
quote_level += 1
try:
new_text.append("> " * quote_level + "##### " + quote.group(2))
except:
new_text.append("> " * quote_level)
line = line.replace(quote.group(0), '')
final_quote_level = quote_level # Store quote_level to use at the end, since it will be modified during quit iteration
final_newline = False
for quote in quit: # Quit quotes (support multiple at a time)
line = line.replace(quote.group(0), '')
quote_level -= 1
final_newline = True
new_text.append("> " * final_quote_level + line) # Finally append the line
if final_newline: new_text.append("\n") # Add a new line to ensure the separation between the quote and the following text
else:
new_text.append(line)
return "\n".join(new_text)

View File

@ -37,7 +37,7 @@ from itertools import chain
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
from core.models import User, Notification from core.models import User, Notification
from core.utils import doku_to_markdown from core.utils import doku_to_markdown, bbcode_to_markdown
from club.models import Club from club.models import Club
def index(request, context=None): def index(request, context=None):
@ -98,17 +98,20 @@ def search_json(request):
} }
return JsonResponse(result) return JsonResponse(result)
class DokuToMarkdownView(TemplateView): class ToMarkdownView(TemplateView):
template_name = "core/doku_to_markdown.jinja" template_name = "core/to_markdown.jinja"
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.text = request.POST['text'] self.text = request.POST['text']
if request.POST['syntax'] == "doku":
self.text_md = doku_to_markdown(self.text) self.text_md = doku_to_markdown(self.text)
else:
self.text_md = bbcode_to_markdown(self.text)
context = self.get_context_data(**kwargs) context = self.get_context_data(**kwargs)
return self.render_to_response(context) return self.render_to_response(context)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
kwargs = super(DokuToMarkdownView, self).get_context_data(**kwargs) kwargs = super(ToMarkdownView, self).get_context_data(**kwargs)
try: try:
kwargs['text'] = self.text kwargs['text'] = self.text
kwargs['text_md'] = self.text_md kwargs['text_md'] = self.text_md

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-14 03:16+0200\n" "POT-Creation-Date: 2017-05-30 19:28+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -17,8 +17,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: accounting/models.py:60 accounting/models.py:108 accounting/models.py:135 #: accounting/models.py:60 accounting/models.py:108 accounting/models.py:135
#: accounting/models.py:194 club/models.py:42 counter/models.py:99 #: accounting/models.py:194 club/models.py:43 counter/models.py:100
#: counter/models.py:124 counter/models.py:159 forum/models.py:49 #: counter/models.py:125 counter/models.py:160 forum/models.py:50
#: launderette/models.py:37 launderette/models.py:82 launderette/models.py:107 #: launderette/models.py:37 launderette/models.py:82 launderette/models.py:107
#: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97 #: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97
msgid "name" msgid "name"
@ -64,9 +64,9 @@ msgstr "IBAN"
msgid "account number" msgid "account number"
msgstr "numero de compte" msgstr "numero de compte"
#: accounting/models.py:111 accounting/models.py:136 club/models.py:172 #: accounting/models.py:111 accounting/models.py:136 club/models.py:183
#: com/models.py:64 com/models.py:152 counter/models.py:133 #: com/models.py:64 com/models.py:152 counter/models.py:134
#: counter/models.py:160 #: counter/models.py:161
msgid "club" msgid "club"
msgstr "club" msgstr "club"
@ -87,12 +87,12 @@ msgstr "Compte club"
msgid "%(club_account)s on %(bank_account)s" msgid "%(club_account)s on %(bank_account)s"
msgstr "%(club_account)s sur %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s"
#: accounting/models.py:192 club/models.py:173 counter/models.py:428 #: accounting/models.py:192 club/models.py:184 counter/models.py:433
#: election/models.py:18 launderette/models.py:144 #: election/models.py:18 launderette/models.py:144
msgid "start date" msgid "start date"
msgstr "date de début" msgstr "date de début"
#: accounting/models.py:193 club/models.py:174 counter/models.py:429 #: accounting/models.py:193 club/models.py:185 counter/models.py:434
#: election/models.py:19 #: election/models.py:19
msgid "end date" msgid "end date"
msgstr "date de fin" msgstr "date de fin"
@ -105,8 +105,8 @@ msgstr "est fermé"
msgid "club account" msgid "club account"
msgstr "compte club" msgstr "compte club"
#: accounting/models.py:197 accounting/models.py:253 counter/models.py:52 #: accounting/models.py:197 accounting/models.py:253 counter/models.py:53
#: counter/models.py:268 #: counter/models.py:273
msgid "amount" msgid "amount"
msgstr "montant" msgstr "montant"
@ -126,18 +126,18 @@ msgstr "numéro"
msgid "journal" msgid "journal"
msgstr "classeur" msgstr "classeur"
#: accounting/models.py:254 core/models.py:577 core/models.py:948 #: accounting/models.py:254 core/models.py:596 core/models.py:967
#: core/models.py:988 counter/models.py:271 counter/models.py:319 #: core/models.py:1007 counter/models.py:276 counter/models.py:324
#: counter/models.py:445 eboutic/models.py:39 eboutic/models.py:72 #: counter/models.py:450 eboutic/models.py:39 eboutic/models.py:72
#: forum/models.py:194 forum/models.py:249 stock/models.py:76 #: forum/models.py:238 forum/models.py:309 stock/models.py:76
msgid "date" msgid "date"
msgstr "date" msgstr "date"
#: accounting/models.py:255 counter/models.py:446 stock/models.py:79 #: accounting/models.py:255 counter/models.py:451 stock/models.py:79
msgid "comment" msgid "comment"
msgstr "commentaire" msgstr "commentaire"
#: accounting/models.py:256 counter/models.py:272 counter/models.py:320 #: accounting/models.py:256 counter/models.py:277 counter/models.py:325
#: subscription/models.py:53 #: subscription/models.py:53
msgid "payment method" msgid "payment method"
msgstr "méthode de paiement" msgstr "méthode de paiement"
@ -163,7 +163,7 @@ msgid "accounting type"
msgstr "type comptable" msgstr "type comptable"
#: accounting/models.py:265 accounting/models.py:364 accounting/models.py:390 #: accounting/models.py:265 accounting/models.py:364 accounting/models.py:390
#: accounting/models.py:413 counter/models.py:311 #: accounting/models.py:413 counter/models.py:316
msgid "label" msgid "label"
msgstr "étiquette" msgstr "étiquette"
@ -242,7 +242,7 @@ msgstr ""
"Vous devez fournir soit un type comptable simplifié ou un type comptable " "Vous devez fournir soit un type comptable simplifié ou un type comptable "
"standard" "standard"
#: accounting/models.py:359 counter/models.py:128 #: accounting/models.py:359 counter/models.py:129
msgid "code" msgid "code"
msgstr "code" msgstr "code"
@ -335,7 +335,7 @@ msgstr "Compte en banque : "
#: counter/templates/counter/last_ops.jinja:59 #: counter/templates/counter/last_ops.jinja:59
#: election/templates/election/election_detail.jinja:280 #: election/templates/election/election_detail.jinja:280
#: election/templates/election/election_detail.jinja:329 #: election/templates/election/election_detail.jinja:329
#: forum/templates/forum/macros.jinja:20 forum/templates/forum/macros.jinja:110 #: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:113
#: launderette/templates/launderette/launderette_admin.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:16
#: launderette/views.py:178 sas/templates/sas/album.jinja:26 #: launderette/views.py:178 sas/templates/sas/album.jinja:26
#: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74 #: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74
@ -379,8 +379,8 @@ msgstr "Nouveau compte club"
#: election/templates/election/election_detail.jinja:279 #: election/templates/election/election_detail.jinja:279
#: election/templates/election/election_detail.jinja:326 #: election/templates/election/election_detail.jinja:326
#: election/templates/election/election_detail.jinja:374 #: election/templates/election/election_detail.jinja:374
#: forum/templates/forum/macros.jinja:19 forum/templates/forum/macros.jinja:56 #: forum/templates/forum/macros.jinja:20 forum/templates/forum/macros.jinja:62
#: forum/templates/forum/macros.jinja:104 #: forum/templates/forum/macros.jinja:107
#: launderette/templates/launderette/launderette_list.jinja:16 #: launderette/templates/launderette/launderette_list.jinja:16
#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100 #: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100
#: trombi/templates/trombi/detail.jinja:9 #: trombi/templates/trombi/detail.jinja:9
@ -797,11 +797,11 @@ msgstr "Opérations sans étiquette"
msgid "Refound this account" msgid "Refound this account"
msgstr "Rembourser ce compte" msgstr "Rembourser ce compte"
#: club/models.py:44 #: club/models.py:45
msgid "unix name" msgid "unix name"
msgstr "nom unix" msgstr "nom unix"
#: club/models.py:48 #: club/models.py:49
msgid "" msgid ""
"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "Enter a valid unix name. This value may contain only letters, numbers ./-/_ "
"characters." "characters."
@ -809,52 +809,52 @@ msgstr ""
"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des "
"lettres, des nombres, et les caractères ./-/_" "lettres, des nombres, et les caractères ./-/_"
#: club/models.py:53 #: club/models.py:54
msgid "A club with that unix name already exists." msgid "A club with that unix name already exists."
msgstr "Un club avec ce nom UNIX existe déjà." msgstr "Un club avec ce nom UNIX existe déjà."
#: club/models.py:56 core/models.py:189 #: club/models.py:57 core/models.py:189
msgid "address" msgid "address"
msgstr "Adresse" msgstr "Adresse"
#: club/models.py:62 core/models.py:150 #: club/models.py:63 core/models.py:150
msgid "home" msgid "home"
msgstr "home" msgstr "home"
#: club/models.py:74 #: club/models.py:75
msgid "You can not make loops in clubs" msgid "You can not make loops in clubs"
msgstr "Vous ne pouvez pas faire de boucles dans les clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs"
#: club/models.py:88 #: club/models.py:89
msgid "A club with that unix_name already exists" msgid "A club with that unix_name already exists"
msgstr "Un club avec ce nom UNIX existe déjà." msgstr "Un club avec ce nom UNIX existe déjà."
#: club/models.py:171 counter/models.py:426 counter/models.py:443 #: club/models.py:182 counter/models.py:431 counter/models.py:448
#: eboutic/models.py:38 eboutic/models.py:71 election/models.py:130 #: eboutic/models.py:38 eboutic/models.py:71 election/models.py:130
#: launderette/models.py:111 launderette/models.py:148 sas/models.py:156 #: launderette/models.py:111 launderette/models.py:148 sas/models.py:156
msgid "user" msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
#: club/models.py:175 core/models.py:169 election/models.py:129 #: club/models.py:186 core/models.py:169 election/models.py:129
#: election/models.py:145 #: election/models.py:145
msgid "role" msgid "role"
msgstr "rôle" msgstr "rôle"
#: club/models.py:177 core/models.py:61 counter/models.py:100 #: club/models.py:188 core/models.py:61 counter/models.py:101
#: counter/models.py:125 election/models.py:15 election/models.py:82 #: counter/models.py:126 election/models.py:15 election/models.py:82
#: election/models.py:131 forum/models.py:50 forum/models.py:149 #: election/models.py:131 forum/models.py:51 forum/models.py:183
msgid "description" msgid "description"
msgstr "description" msgstr "description"
#: club/models.py:182 #: club/models.py:193
msgid "User must be subscriber to take part to a club" msgid "User must be subscriber to take part to a club"
msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club"
#: club/models.py:184 #: club/models.py:195
msgid "User is already member of that club" msgid "User is already member of that club"
msgstr "L'utilisateur est déjà membre de ce club" msgstr "L'utilisateur est déjà membre de ce club"
#: club/models.py:188 #: club/models.py:199
msgid "past member" msgid "past member"
msgstr "Anciens membres" msgstr "Anciens membres"
@ -1108,7 +1108,8 @@ msgid "Call"
msgstr "Appel" msgstr "Appel"
#: com/models.py:60 com/models.py:102 com/models.py:149 election/models.py:14 #: com/models.py:60 com/models.py:102 com/models.py:149 election/models.py:14
#: election/models.py:81 election/models.py:118 forum/models.py:192 #: election/models.py:81 election/models.py:118 forum/models.py:185
#: forum/models.py:236
msgid "title" msgid "title"
msgstr "titre" msgstr "titre"
@ -1120,7 +1121,7 @@ msgstr "résumé"
msgid "content" msgid "content"
msgstr "contenu" msgstr "contenu"
#: com/models.py:63 core/models.py:987 launderette/models.py:84 #: com/models.py:63 core/models.py:1006 launderette/models.py:84
#: launderette/models.py:109 launderette/models.py:145 stock/models.py:59 #: launderette/models.py:109 launderette/models.py:145 stock/models.py:59
#: stock/models.py:98 #: stock/models.py:98
msgid "type" msgid "type"
@ -1130,7 +1131,7 @@ msgstr "type"
msgid "author" msgid "author"
msgstr "auteur" msgstr "auteur"
#: com/models.py:66 core/models.py:578 #: com/models.py:66 core/models.py:597
msgid "is moderated" msgid "is moderated"
msgstr "est modéré" msgstr "est modéré"
@ -1202,8 +1203,8 @@ msgstr "Type"
#: com/templates/com/news_admin_list.jinja:15 #: com/templates/com/news_admin_list.jinja:15
#: com/templates/com/news_admin_list.jinja:50 #: com/templates/com/news_admin_list.jinja:50
#: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48 #: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48
#: forum/templates/forum/forum.jinja:26 forum/templates/forum/forum.jinja:44 #: forum/templates/forum/forum.jinja:27 forum/templates/forum/forum.jinja:46
#: forum/views.py:127 #: forum/templates/forum/main.jinja:25 forum/views.py:141
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
@ -1215,7 +1216,7 @@ msgstr "Résumé"
#: com/templates/com/news_admin_list.jinja:18 #: com/templates/com/news_admin_list.jinja:18
#: com/templates/com/news_admin_list.jinja:53 #: com/templates/com/news_admin_list.jinja:53
#: com/templates/com/weekmail.jinja:17 com/templates/com/weekmail.jinja:46 #: com/templates/com/weekmail.jinja:17 com/templates/com/weekmail.jinja:46
#: forum/templates/forum/forum.jinja:48 #: forum/templates/forum/forum.jinja:50
msgid "Author" msgid "Author"
msgstr "Auteur" msgstr "Auteur"
@ -1663,124 +1664,124 @@ msgstr "adresse des parents"
msgid "is subscriber viewable" msgid "is subscriber viewable"
msgstr "profil visible par les cotisants" msgstr "profil visible par les cotisants"
#: core/models.py:330 #: core/models.py:349
msgid "A user with that username already exists" msgid "A user with that username already exists"
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
#: core/models.py:455 core/templates/core/macros.jinja:17 #: core/models.py:474 core/templates/core/macros.jinja:17
#: core/templates/core/user_detail.jinja:14 #: core/templates/core/user_detail.jinja:14
#: core/templates/core/user_detail.jinja:16 #: core/templates/core/user_detail.jinja:16
#: core/templates/core/user_edit.jinja:17 #: core/templates/core/user_edit.jinja:17
#: election/templates/election/election_detail.jinja:316 #: election/templates/election/election_detail.jinja:316
#: forum/templates/forum/macros.jinja:87 forum/templates/forum/macros.jinja:89 #: forum/templates/forum/macros.jinja:93 forum/templates/forum/macros.jinja:95
#: forum/templates/forum/reply.jinja:36 forum/templates/forum/reply.jinja:38 #: forum/templates/forum/reply.jinja:36 forum/templates/forum/reply.jinja:38
#: trombi/templates/trombi/user_tools.jinja:43 #: trombi/templates/trombi/user_tools.jinja:43
msgid "Profile" msgid "Profile"
msgstr "Profil" msgstr "Profil"
#: core/models.py:535 #: core/models.py:554
msgid "Visitor" msgid "Visitor"
msgstr "Visiteur" msgstr "Visiteur"
#: core/models.py:540 #: core/models.py:559
msgid "do you want to receive the weekmail" msgid "do you want to receive the weekmail"
msgstr "voulez-vous recevoir le Weekmail" msgstr "voulez-vous recevoir le Weekmail"
#: core/models.py:545 #: core/models.py:564
msgid "define if we show a users stats" msgid "define if we show a users stats"
msgstr "Definit si l'on montre les statistiques de l'utilisateur" msgstr "Definit si l'on montre les statistiques de l'utilisateur"
#: core/models.py:547 #: core/models.py:566
msgid "Show your account statistics to others" msgid "Show your account statistics to others"
msgstr "Montrez vos statistiques de compte aux autres" msgstr "Montrez vos statistiques de compte aux autres"
#: core/models.py:566 #: core/models.py:585
msgid "file name" msgid "file name"
msgstr "nom du fichier" msgstr "nom du fichier"
#: core/models.py:567 core/models.py:775 #: core/models.py:586 core/models.py:794
msgid "parent" msgid "parent"
msgstr "parent" msgstr "parent"
#: core/models.py:568 core/models.py:584 #: core/models.py:587 core/models.py:603
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: core/models.py:569 #: core/models.py:588
msgid "compressed file" msgid "compressed file"
msgstr "version allégée" msgstr "version allégée"
#: core/models.py:570 #: core/models.py:589
msgid "thumbnail" msgid "thumbnail"
msgstr "miniature" msgstr "miniature"
#: core/models.py:571 core/models.py:579 #: core/models.py:590 core/models.py:598
msgid "owner" msgid "owner"
msgstr "propriétaire" msgstr "propriétaire"
#: core/models.py:572 core/models.py:781 core/views/files.py:146 #: core/models.py:591 core/models.py:800 core/views/files.py:146
msgid "edit group" msgid "edit group"
msgstr "groupe d'édition" msgstr "groupe d'édition"
#: core/models.py:573 core/models.py:782 core/views/files.py:147 #: core/models.py:592 core/models.py:801 core/views/files.py:147
msgid "view group" msgid "view group"
msgstr "groupe de vue" msgstr "groupe de vue"
#: core/models.py:574 #: core/models.py:593
msgid "is folder" msgid "is folder"
msgstr "est un dossier" msgstr "est un dossier"
#: core/models.py:575 #: core/models.py:594
msgid "mime type" msgid "mime type"
msgstr "type mime" msgstr "type mime"
#: core/models.py:576 #: core/models.py:595
msgid "size" msgid "size"
msgstr "taille" msgstr "taille"
#: core/models.py:580 #: core/models.py:599
msgid "asked for removal" msgid "asked for removal"
msgstr "retrait demandé" msgstr "retrait demandé"
#: core/models.py:581 #: core/models.py:600
msgid "is in the SAS" msgid "is in the SAS"
msgstr "est dans le SAS" msgstr "est dans le SAS"
#: core/models.py:620 #: core/models.py:639
msgid "Character '/' not authorized in name" msgid "Character '/' not authorized in name"
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
#: core/models.py:623 core/models.py:628 #: core/models.py:642 core/models.py:647
msgid "Loop in folder tree" msgid "Loop in folder tree"
msgstr "Boucle dans l'arborescence des dossiers" msgstr "Boucle dans l'arborescence des dossiers"
#: core/models.py:632 #: core/models.py:651
msgid "You can not make a file be a children of a non folder file" msgid "You can not make a file be a children of a non folder file"
msgstr "" msgstr ""
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
"un dossier" "un dossier"
#: core/models.py:636 #: core/models.py:655
msgid "Duplicate file" msgid "Duplicate file"
msgstr "Un fichier de ce nom existe déjà" msgstr "Un fichier de ce nom existe déjà"
#: core/models.py:650 #: core/models.py:669
msgid "You must provide a file" msgid "You must provide a file"
msgstr "Vous devez fournir un fichier" msgstr "Vous devez fournir un fichier"
#: core/models.py:716 #: core/models.py:735
msgid "Folder: " msgid "Folder: "
msgstr "Dossier : " msgstr "Dossier : "
#: core/models.py:718 #: core/models.py:737
msgid "File: " msgid "File: "
msgstr "Fichier : " msgstr "Fichier : "
#: core/models.py:766 #: core/models.py:785
msgid "page unix name" msgid "page unix name"
msgstr "nom unix de la page" msgstr "nom unix de la page"
#: core/models.py:770 #: core/models.py:789
msgid "" msgid ""
"Enter a valid page name. This value may contain only unaccented letters, " "Enter a valid page name. This value may contain only unaccented letters, "
"numbers and ./+/-/_ characters." "numbers and ./+/-/_ characters."
@ -1788,51 +1789,51 @@ msgstr ""
"Entrez un nom de page correct. Uniquement des lettres non accentuées, " "Entrez un nom de page correct. Uniquement des lettres non accentuées, "
"numéros, et ./+/-/_" "numéros, et ./+/-/_"
#: core/models.py:778 #: core/models.py:797
msgid "page name" msgid "page name"
msgstr "nom de la page" msgstr "nom de la page"
#: core/models.py:779 #: core/models.py:798
msgid "owner group" msgid "owner group"
msgstr "groupe propriétaire" msgstr "groupe propriétaire"
#: core/models.py:783 #: core/models.py:802
msgid "lock user" msgid "lock user"
msgstr "utilisateur bloquant" msgstr "utilisateur bloquant"
#: core/models.py:784 #: core/models.py:803
msgid "lock_timeout" msgid "lock_timeout"
msgstr "décompte du déblocage" msgstr "décompte du déblocage"
#: core/models.py:811 #: core/models.py:830
msgid "Duplicate page" msgid "Duplicate page"
msgstr "Une page de ce nom existe déjà" msgstr "Une page de ce nom existe déjà"
#: core/models.py:817 #: core/models.py:836
msgid "Loop in page tree" msgid "Loop in page tree"
msgstr "Boucle dans l'arborescence des pages" msgstr "Boucle dans l'arborescence des pages"
#: core/models.py:945 #: core/models.py:964
msgid "revision" msgid "revision"
msgstr "révision" msgstr "révision"
#: core/models.py:946 #: core/models.py:965
msgid "page title" msgid "page title"
msgstr "titre de la page" msgstr "titre de la page"
#: core/models.py:947 #: core/models.py:966
msgid "page content" msgid "page content"
msgstr "contenu de la page" msgstr "contenu de la page"
#: core/models.py:985 #: core/models.py:1004
msgid "url" msgid "url"
msgstr "url" msgstr "url"
#: core/models.py:986 #: core/models.py:1005
msgid "param" msgid "param"
msgstr "param" msgstr "param"
#: core/models.py:989 #: core/models.py:1008
msgid "viewed" msgid "viewed"
msgstr "vue" msgstr "vue"
@ -1898,7 +1899,7 @@ msgstr "SAS"
#: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10 #: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10
#: forum/templates/forum/last_unread.jinja:12 #: forum/templates/forum/last_unread.jinja:12
#: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja.py:11 #: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja.py:11
#: forum/templates/forum/main.jinja:13 forum/templates/forum/reply.jinja:15 #: forum/templates/forum/main.jinja:14 forum/templates/forum/reply.jinja:15
#: forum/templates/forum/topic.jinja:30 #: forum/templates/forum/topic.jinja:30
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
@ -1973,22 +1974,6 @@ msgstr "Confirmation"
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: core/templates/core/doku_to_markdown.jinja:4
msgid "Doku to Markdown"
msgstr "Doku vers Markdown"
#: core/templates/core/doku_to_markdown.jinja:13
msgid "Convert"
msgstr "Convertir"
#: core/templates/core/doku_to_markdown.jinja:16
msgid "Markdown"
msgstr "Markdown"
#: core/templates/core/doku_to_markdown.jinja:20
msgid "Render"
msgstr "Rendu"
#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13 #: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13
#: core/templates/core/file_edit.jinja:4 #: core/templates/core/file_edit.jinja:4
#: counter/templates/counter/cash_register_summary.jinja:4 #: counter/templates/counter/cash_register_summary.jinja:4
@ -2357,6 +2342,22 @@ msgstr "Utilisateurs"
msgid "Clubs" msgid "Clubs"
msgstr "Clubs" msgstr "Clubs"
#: core/templates/core/to_markdown.jinja:4
msgid "To Markdown"
msgstr "Vers Markdown"
#: core/templates/core/to_markdown.jinja:15
msgid "Convert"
msgstr "Convertir"
#: core/templates/core/to_markdown.jinja:18
msgid "Markdown"
msgstr "Markdown"
#: core/templates/core/to_markdown.jinja:22
msgid "Render"
msgstr "Rendu"
#: core/templates/core/user_account.jinja:8 #: core/templates/core/user_account.jinja:8
msgid "Year" msgid "Year"
msgstr "Année" msgstr "Année"
@ -2768,84 +2769,84 @@ msgstr "Photos"
msgid "User already has a profile picture" msgid "User already has a profile picture"
msgstr "L'utilisateur a déjà une photo de profil" msgstr "L'utilisateur a déjà une photo de profil"
#: counter/models.py:51 #: counter/models.py:52
msgid "account id" msgid "account id"
msgstr "numéro de compte" msgstr "numéro de compte"
#: counter/models.py:55 #: counter/models.py:56
msgid "customer" msgid "customer"
msgstr "client" msgstr "client"
#: counter/models.py:56 #: counter/models.py:57
msgid "customers" msgid "customers"
msgstr "clients" msgstr "clients"
#: counter/models.py:76 counter/templates/counter/counter_click.jinja:48 #: counter/models.py:77 counter/templates/counter/counter_click.jinja:48
#: counter/templates/counter/counter_click.jinja:82 #: counter/templates/counter/counter_click.jinja:82
msgid "Not enough money" msgid "Not enough money"
msgstr "Solde insuffisant" msgstr "Solde insuffisant"
#: counter/models.py:104 counter/models.py:126 #: counter/models.py:105 counter/models.py:127
msgid "product type" msgid "product type"
msgstr "type du produit" msgstr "type du produit"
#: counter/models.py:129 #: counter/models.py:130
msgid "purchase price" msgid "purchase price"
msgstr "prix d'achat" msgstr "prix d'achat"
#: counter/models.py:130 #: counter/models.py:131
msgid "selling price" msgid "selling price"
msgstr "prix de vente" msgstr "prix de vente"
#: counter/models.py:131 #: counter/models.py:132
msgid "special selling price" msgid "special selling price"
msgstr "prix de vente spécial" msgstr "prix de vente spécial"
#: counter/models.py:132 #: counter/models.py:133
msgid "icon" msgid "icon"
msgstr "icône" msgstr "icône"
#: counter/models.py:134 #: counter/models.py:135
msgid "limit age" msgid "limit age"
msgstr "âge limite" msgstr "âge limite"
#: counter/models.py:135 #: counter/models.py:136
msgid "tray price" msgid "tray price"
msgstr "prix plateau" msgstr "prix plateau"
#: counter/models.py:136 #: counter/models.py:137
msgid "parent product" msgid "parent product"
msgstr "produit parent" msgstr "produit parent"
#: counter/models.py:138 #: counter/models.py:139
msgid "buying groups" msgid "buying groups"
msgstr "groupe d'achat" msgstr "groupe d'achat"
#: counter/models.py:139 #: counter/models.py:140
msgid "archived" msgid "archived"
msgstr "archivé" msgstr "archivé"
#: counter/models.py:142 counter/models.py:526 #: counter/models.py:143 counter/models.py:531
msgid "product" msgid "product"
msgstr "produit" msgstr "produit"
#: counter/models.py:161 #: counter/models.py:162
msgid "products" msgid "products"
msgstr "produits" msgstr "produits"
#: counter/models.py:162 #: counter/models.py:163
msgid "counter type" msgid "counter type"
msgstr "type de comptoir" msgstr "type de comptoir"
#: counter/models.py:164 #: counter/models.py:165
msgid "Bar" msgid "Bar"
msgstr "Bar" msgstr "Bar"
#: counter/models.py:164 #: counter/models.py:165
msgid "Office" msgid "Office"
msgstr "Bureau" msgstr "Bureau"
#: counter/models.py:164 counter/templates/counter/counter_list.jinja:11 #: counter/models.py:165 counter/templates/counter/counter_list.jinja:11
#: eboutic/templates/eboutic/eboutic_main.jinja:4 #: eboutic/templates/eboutic/eboutic_main.jinja:4
#: eboutic/templates/eboutic/eboutic_main.jinja:24 #: eboutic/templates/eboutic/eboutic_main.jinja:24
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:8 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:8
@ -2854,62 +2855,62 @@ msgstr "Bureau"
msgid "Eboutic" msgid "Eboutic"
msgstr "Eboutic" msgstr "Eboutic"
#: counter/models.py:165 #: counter/models.py:166
msgid "sellers" msgid "sellers"
msgstr "vendeurs" msgstr "vendeurs"
#: counter/models.py:168 launderette/models.py:147 #: counter/models.py:169 launderette/models.py:147
msgid "token" msgid "token"
msgstr "jeton" msgstr "jeton"
#: counter/models.py:171 counter/models.py:427 counter/models.py:444 #: counter/models.py:172 counter/models.py:432 counter/models.py:449
#: launderette/models.py:38 stock/models.py:39 #: launderette/models.py:38 stock/models.py:39
msgid "counter" msgid "counter"
msgstr "comptoir" msgstr "comptoir"
#: counter/models.py:274 #: counter/models.py:279
msgid "bank" msgid "bank"
msgstr "banque" msgstr "banque"
#: counter/models.py:276 counter/models.py:322 #: counter/models.py:281 counter/models.py:327
msgid "is validated" msgid "is validated"
msgstr "est validé" msgstr "est validé"
#: counter/models.py:279 #: counter/models.py:284
msgid "refilling" msgid "refilling"
msgstr "rechargement" msgstr "rechargement"
#: counter/models.py:315 eboutic/models.py:127 #: counter/models.py:320 eboutic/models.py:127
msgid "unit price" msgid "unit price"
msgstr "prix unitaire" msgstr "prix unitaire"
#: counter/models.py:316 counter/models.py:516 eboutic/models.py:128 #: counter/models.py:321 counter/models.py:521 eboutic/models.py:128
msgid "quantity" msgid "quantity"
msgstr "quantité" msgstr "quantité"
#: counter/models.py:321 #: counter/models.py:326
msgid "Sith account" msgid "Sith account"
msgstr "Compte utilisateur" msgstr "Compte utilisateur"
#: counter/models.py:321 sith/settings.py:354 sith/settings.py:359 #: counter/models.py:326 sith/settings.py:354 sith/settings.py:359
#: sith/settings.py:381 #: sith/settings.py:381
msgid "Credit card" msgid "Credit card"
msgstr "Carte bancaire" msgstr "Carte bancaire"
#: counter/models.py:325 #: counter/models.py:330
msgid "selling" msgid "selling"
msgstr "vente" msgstr "vente"
#: counter/models.py:344 #: counter/models.py:349
msgid "Unknown event" msgid "Unknown event"
msgstr "Événement inconnu" msgstr "Événement inconnu"
#: counter/models.py:345 #: counter/models.py:350
#, python-format #, python-format
msgid "Eticket bought for the event %(event)s" msgid "Eticket bought for the event %(event)s"
msgstr "Eticket acheté pour l'événement %(event)s" msgstr "Eticket acheté pour l'événement %(event)s"
#: counter/models.py:347 counter/models.py:359 #: counter/models.py:352 counter/models.py:364
#, python-format #, python-format
msgid "" msgid ""
"You bought an eticket for the event %(event)s.\n" "You bought an eticket for the event %(event)s.\n"
@ -2918,51 +2919,51 @@ msgstr ""
"Vous avez acheté un Eticket pour l'événement %(event)s.\n" "Vous avez acheté un Eticket pour l'événement %(event)s.\n"
"Vous pouvez le télécharger sur cette page: %(url)s" "Vous pouvez le télécharger sur cette page: %(url)s"
#: counter/models.py:430 #: counter/models.py:435
msgid "last activity date" msgid "last activity date"
msgstr "dernière activité" msgstr "dernière activité"
#: counter/models.py:433 #: counter/models.py:438
msgid "permanency" msgid "permanency"
msgstr "permanence" msgstr "permanence"
#: counter/models.py:447 #: counter/models.py:452
msgid "emptied" msgid "emptied"
msgstr "coffre vidée" msgstr "coffre vidée"
#: counter/models.py:450 #: counter/models.py:455
msgid "cash register summary" msgid "cash register summary"
msgstr "relevé de caisse" msgstr "relevé de caisse"
#: counter/models.py:514 #: counter/models.py:519
msgid "cash summary" msgid "cash summary"
msgstr "relevé" msgstr "relevé"
#: counter/models.py:515 #: counter/models.py:520
msgid "value" msgid "value"
msgstr "valeur" msgstr "valeur"
#: counter/models.py:517 #: counter/models.py:522
msgid "check" msgid "check"
msgstr "chèque" msgstr "chèque"
#: counter/models.py:520 #: counter/models.py:525
msgid "cash register summary item" msgid "cash register summary item"
msgstr "élément de relevé de caisse" msgstr "élément de relevé de caisse"
#: counter/models.py:527 #: counter/models.py:532
msgid "banner" msgid "banner"
msgstr "bannière" msgstr "bannière"
#: counter/models.py:528 #: counter/models.py:533
msgid "event date" msgid "event date"
msgstr "date de l'événement" msgstr "date de l'événement"
#: counter/models.py:529 #: counter/models.py:534
msgid "event title" msgid "event title"
msgstr "titre de l'événement" msgstr "titre de l'événement"
#: counter/models.py:530 #: counter/models.py:535
msgid "secret" msgid "secret"
msgstr "secret" msgstr "secret"
@ -3488,7 +3489,7 @@ msgstr "Les votes ouvriront "
#: election/templates/election/election_list.jinja:34 #: election/templates/election/election_list.jinja:34
#: election/templates/election/election_list.jinja:39 #: election/templates/election/election_list.jinja:39
#: election/templates/election/election_list.jinja:42 #: election/templates/election/election_list.jinja:42
#: forum/templates/forum/macros.jinja:125 #: forum/templates/forum/macros.jinja:129
msgid " at " msgid " at "
msgstr " à " msgstr " à "
@ -3583,68 +3584,81 @@ msgstr "Début des candidatures"
msgid "End candidature" msgid "End candidature"
msgstr "Fin des candidatures" msgstr "Fin des candidatures"
#: forum/models.py:51 #: forum/models.py:52
msgid "is a category" msgid "is a category"
msgstr "est une catégorie" msgstr "est une catégorie"
#: forum/models.py:53 #: forum/models.py:54
msgid "owner club" msgid "owner club"
msgstr "club propriétaire" msgstr "club propriétaire"
#: forum/models.py:59 #: forum/models.py:60
msgid "number to choose a specific forum ordering" msgid "number to choose a specific forum ordering"
msgstr "numéro spécifiant l'ordre d'affichage" msgstr "numéro spécifiant l'ordre d'affichage"
#: forum/models.py:103 #: forum/models.py:61 forum/models.py:184
msgid "the last message"
msgstr "le dernier message"
#: forum/models.py:62
msgid "number of topics"
msgstr "nombre de sujets"
#: forum/models.py:137
msgid "You can not make loops in forums" msgid "You can not make loops in forums"
msgstr "Vous ne pouvez pas faire de boucles dans les forums" msgstr "Vous ne pouvez pas faire de boucles dans les forums"
#: forum/models.py:193 #: forum/models.py:237
msgid "message" msgid "message"
msgstr "message" msgstr "message"
#: forum/models.py:195 #: forum/models.py:239
msgid "readers" msgid "readers"
msgstr "lecteurs" msgstr "lecteurs"
#: forum/models.py:241 #: forum/models.py:240
msgid "is deleted"
msgstr "est supprimé"
#: forum/models.py:301
msgid "Message edited by" msgid "Message edited by"
msgstr "Message édité par" msgstr "Message édité par"
#: forum/models.py:242 #: forum/models.py:302
msgid "Message deleted by" msgid "Message deleted by"
msgstr "Message supprimé par" msgstr "Message supprimé par"
#: forum/models.py:243 #: forum/models.py:303
msgid "Message undeleted by" msgid "Message undeleted by"
msgstr "Message restauré par" msgstr "Message restauré par"
#: forum/models.py:250 #: forum/models.py:310
msgid "action" msgid "action"
msgstr "action" msgstr "action"
#: forum/models.py:259 #: forum/models.py:325
msgid "last read date" msgid "last read date"
msgstr "dernière date de lecture" msgstr "dernière date de lecture"
#: forum/templates/forum/forum.jinja:19 forum/templates/forum/main.jinja:19 #: forum/templates/forum/forum.jinja:20 forum/templates/forum/main.jinja:20
msgid "New forum" msgid "New forum"
msgstr "Nouveau forum" msgstr "Nouveau forum"
#: forum/templates/forum/forum.jinja:21 forum/templates/forum/reply.jinja:8 #: forum/templates/forum/forum.jinja:22 forum/templates/forum/reply.jinja:8
#: forum/templates/forum/reply.jinja:25 #: forum/templates/forum/reply.jinja:25
msgid "New topic" msgid "New topic"
msgstr "Nouveau sujet" msgstr "Nouveau sujet"
#: forum/templates/forum/forum.jinja:30 #: forum/templates/forum/forum.jinja:31 forum/templates/forum/main.jinja:29
msgid "Topics" msgid "Topics"
msgstr "Sujets" msgstr "Sujets"
#: forum/templates/forum/forum.jinja:33 forum/templates/forum/forum.jinja:54 #: forum/templates/forum/forum.jinja:34 forum/templates/forum/forum.jinja:56
#: forum/templates/forum/main.jinja:32
msgid "Last message" msgid "Last message"
msgstr "Dernier message" msgstr "Dernier message"
#: forum/templates/forum/forum.jinja:51 #: forum/templates/forum/forum.jinja:53
msgid "Messages" msgid "Messages"
msgstr "Messages" msgstr "Messages"
@ -3657,36 +3671,36 @@ msgstr "Derniers messages non lus"
msgid "Refresh" msgid "Refresh"
msgstr "Rafraîchir" msgstr "Rafraîchir"
#: forum/templates/forum/macros.jinja:102 #: forum/templates/forum/macros.jinja:105
msgid "Reply as quote" msgid "Reply as quote"
msgstr "Répondre en citant" msgstr "Répondre en citant"
#: forum/templates/forum/macros.jinja:108 #: forum/templates/forum/macros.jinja:111
msgid "Undelete" msgid "Undelete"
msgstr "Restaurer" msgstr "Restaurer"
#: forum/templates/forum/macros.jinja:126 #: forum/templates/forum/macros.jinja:130
msgid " the " msgid " the "
msgstr " le " msgstr " le "
#: forum/templates/forum/macros.jinja:138 #: forum/templates/forum/macros.jinja:142
msgid "Deleted or unreadable message." msgid "Deleted or unreadable message."
msgstr "Message supprimé ou non-visible." msgstr "Message supprimé ou non-visible."
#: forum/templates/forum/main.jinja:15 #: forum/templates/forum/main.jinja:16
msgid "View last unread messages" msgid "View last unread messages"
msgstr "Voir les derniers messages non lus" msgstr "Voir les derniers messages non lus"
#: forum/templates/forum/reply.jinja:6 forum/templates/forum/reply.jinja:23 #: forum/templates/forum/reply.jinja:6 forum/templates/forum/reply.jinja:23
#: forum/templates/forum/topic.jinja:39 forum/templates/forum/topic.jinja:58 #: forum/templates/forum/topic.jinja:40 forum/templates/forum/topic.jinja:59
msgid "Reply" msgid "Reply"
msgstr "Répondre" msgstr "Répondre"
#: forum/views.py:92 #: forum/views.py:97
msgid "Apply rights and club owner recursively" msgid "Apply rights and club owner recursively"
msgstr "Appliquer les droits et le club propriétaire récursivement" msgstr "Appliquer les droits et le club propriétaire récursivement"
#: forum/views.py:230 #: forum/views.py:253
#, python-format #, python-format
msgid "%(author)s said" msgid "%(author)s said"
msgstr "Citation de %(author)s" msgstr "Citation de %(author)s"
@ -4583,3 +4597,6 @@ msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée."
#, python-format #, python-format
msgid "Maximum characters: %(max_length)s" msgid "Maximum characters: %(max_length)s"
msgstr "Nombre de caractères max: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s"
#~ msgid "Doku to Markdown"
#~ msgstr "Doku vers Markdown"

View File

@ -45,7 +45,7 @@ from django.core.files import File
from core.models import User, SithFile from core.models import User, SithFile
from core.utils import doku_to_markdown from core.utils import doku_to_markdown, bbcode_to_markdown
from club.models import Club, Membership from club.models import Club, Membership
from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType, Permanency, Eticket from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType, Permanency, Eticket
from subscription.models import Subscription from subscription.models import Subscription
@ -1279,7 +1279,7 @@ def migrate_forum():
if r['syntaxengine_message'] == "doku": if r['syntaxengine_message'] == "doku":
msg.message = doku_to_markdown(to_unicode(r['contenu_message'])) msg.message = doku_to_markdown(to_unicode(r['contenu_message']))
else: else:
msg.message = to_unicode(r['contenu_message']) msg.message = bbcode_to_markdown(to_unicode(r['contenu_message']))
msg.save() msg.save()
except Exception as e: except Exception as e:
print(" FAIL to migrate message: %s" % (repr(e))) print(" FAIL to migrate message: %s" % (repr(e)))