mirror of
https://github.com/partitioncloud/partitioncloud-server.git
synced 2025-02-10 14:03:42 +01:00
Compare commits
4 Commits
1bd70c8653
...
90c70a8d42
Author | SHA1 | Date | |
---|---|---|---|
90c70a8d42 | |||
dbe77d0ece | |||
d1812cdde7 | |||
52894d37ea |
@ -39,3 +39,6 @@ LANGUAGES=['en', 'fr']
|
||||
|
||||
# Show Launch page
|
||||
LAUNCH_PAGE=True
|
||||
|
||||
# Check if account is logged in before serving zipped album/groupe
|
||||
ZIP_REQUIRE_LOGIN=True
|
@ -5,12 +5,12 @@ Albums module
|
||||
import os
|
||||
import pypdf
|
||||
import shutil
|
||||
|
||||
from uuid import uuid4
|
||||
from typing import TypeVar
|
||||
|
||||
from flask import (Blueprint, abort, flash, redirect, render_template,
|
||||
request, session, current_app)
|
||||
request, session, current_app, send_file, g, url_for)
|
||||
from werkzeug.utils import secure_filename
|
||||
from flask_babel import _
|
||||
|
||||
from .auth import login_required
|
||||
@ -115,6 +115,30 @@ def qr_code(uuid):
|
||||
return utils.get_qrcode(f"/albums/{uuid}")
|
||||
|
||||
|
||||
@bp.route("/<uuid>/zip")
|
||||
def zip_download(uuid):
|
||||
"""
|
||||
Télécharger un album comme fichier zip
|
||||
"""
|
||||
if g.user is None and current_app.config["ZIP_REQUIRE_LOGIN"]:
|
||||
flash(_("You need to login to access this resource."))
|
||||
return redirect(url_for("auth.login"))
|
||||
|
||||
try:
|
||||
album = Album(uuid=uuid)
|
||||
except LookupError:
|
||||
try:
|
||||
album = Album(uuid=utils.format_uuid(uuid))
|
||||
return redirect(f"/albums/{utils.format_uuid(uuid)}")
|
||||
except LookupError:
|
||||
return abort(404)
|
||||
|
||||
return send_file(
|
||||
album.to_zip(current_app.instance_path),
|
||||
download_name=secure_filename(f"{album.name}.zip")
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/create-album", methods=["POST"])
|
||||
@login_required
|
||||
def create_album_req():
|
||||
|
@ -2,6 +2,10 @@
|
||||
Classe Album
|
||||
"""
|
||||
import os
|
||||
import io
|
||||
import zipfile
|
||||
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
from ..db import get_db
|
||||
from ..utils import new_uuid
|
||||
@ -166,6 +170,23 @@ class Album():
|
||||
db.commit()
|
||||
|
||||
|
||||
def to_zip(self, instance_path):
|
||||
data = io.BytesIO()
|
||||
with zipfile.ZipFile(data, mode="w") as z:
|
||||
for partition in self.get_partitions():
|
||||
z.write(os.path.join(
|
||||
instance_path,
|
||||
"partitions",
|
||||
f"{partition['uuid']}.pdf"
|
||||
), arcname=secure_filename(partition['name']+".pdf")
|
||||
)
|
||||
|
||||
# Spooling back to the beginning of the buffer
|
||||
data.seek(0)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def create(name: str) -> str:
|
||||
"""Créer un nouvel album"""
|
||||
db = get_db()
|
||||
|
@ -1,3 +1,12 @@
|
||||
"""
|
||||
Classe Groupe
|
||||
"""
|
||||
import io
|
||||
import os
|
||||
import zipfile
|
||||
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
from ..db import get_db
|
||||
from .album import Album
|
||||
|
||||
@ -116,3 +125,21 @@ class Groupe():
|
||||
(self.id,)
|
||||
).fetchall()
|
||||
return [i["id"] for i in data]
|
||||
|
||||
def to_zip(self, instance_path):
|
||||
data = io.BytesIO()
|
||||
with zipfile.ZipFile(data, mode="w") as z:
|
||||
for album in self.get_albums():
|
||||
for partition in album.get_partitions():
|
||||
z.write(os.path.join(
|
||||
instance_path,
|
||||
"partitions",
|
||||
f"{partition['uuid']}.pdf"
|
||||
), arcname=secure_filename(album.name)+"/"
|
||||
+secure_filename(partition['name']+".pdf")
|
||||
)
|
||||
|
||||
# Spooling back to the beginning of the buffer
|
||||
data.seek(0)
|
||||
|
||||
return data
|
@ -3,7 +3,8 @@
|
||||
Groupe module
|
||||
"""
|
||||
from flask import (Blueprint, abort, flash, redirect, render_template,
|
||||
request, session, current_app)
|
||||
request, session, current_app, send_file, g, url_for)
|
||||
from werkzeug.utils import secure_filename
|
||||
from flask_babel import _
|
||||
|
||||
from .auth import login_required
|
||||
@ -261,6 +262,31 @@ def get_album(groupe_uuid, album_uuid):
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/<groupe_uuid>/zip")
|
||||
def zip_download(groupe_uuid):
|
||||
"""
|
||||
Télécharger un groupe comme fichier zip
|
||||
"""
|
||||
if g.user is None and current_app.config["ZIP_REQUIRE_LOGIN"]:
|
||||
flash(_("You need to login to access this resource."))
|
||||
return redirect(url_for("auth.login"))
|
||||
|
||||
try:
|
||||
groupe = Groupe(uuid=groupe_uuid)
|
||||
except LookupError:
|
||||
try:
|
||||
groupe = Groupe(uuid=utils.format_uuid(groupe_uuid))
|
||||
return redirect(f"/groupe/{utils.format_uuid(groupe_uuid)}/zip")
|
||||
except LookupError:
|
||||
return abort(404)
|
||||
|
||||
|
||||
return send_file(
|
||||
groupe.to_zip(current_app.instance_path),
|
||||
download_name=secure_filename(f"{groupe.name}.zip")
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/<groupe_uuid>/<album_uuid>/qr")
|
||||
def groupe_qr_code(groupe_uuid, album_uuid):
|
||||
return utils.get_qrcode(f"/groupe/{groupe_uuid}/{album_uuid}")
|
||||
|
@ -35,8 +35,8 @@
|
||||
{% endif %}
|
||||
{{ album.name }}
|
||||
</h2>
|
||||
{% if g.user %}
|
||||
<div id="header-actions">
|
||||
<div id="header-actions">
|
||||
{% if g.user %}
|
||||
<section id="users">
|
||||
{% for album_user in album.users %}
|
||||
<div class="user-profile-picture" style="background-color:{{ album_user.color }};" title="{{ album_user.username }}">
|
||||
@ -44,25 +44,28 @@
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
<div class="dropdown dp1">
|
||||
+
|
||||
<div class="dropdown-content dp1">
|
||||
{% if g.user %}
|
||||
<a href="#add-partition">{{ _("Add a score") }}</a>
|
||||
{% endif %}
|
||||
{% if not_participant %}
|
||||
<a href="/albums/{{ album.uuid }}/join">{{ _("Join") }}</a>
|
||||
{% elif album.users | length > 1 %}
|
||||
<a href="/albums/{{ album.uuid }}/quit">{{ _("Quit") }}</a>
|
||||
{% endif %}
|
||||
<a href="#share">{{ _("Share") }}</a>
|
||||
{% if g.user.access_level == 1 or (not not_participant and album.users | length == 1) %}
|
||||
<a id="delete-album" href="#delete">{{ _("Delete") }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="dropdown dp1">
|
||||
+
|
||||
<div class="dropdown-content dp1">
|
||||
{% if g.user %}
|
||||
<a href="#add-partition">{{ _("Add a score") }}</a>
|
||||
{% endif %}
|
||||
{% if not_participant %}
|
||||
<a href="/albums/{{ album.uuid }}/join">{{ _("Join") }}</a>
|
||||
{% elif album.users | length > 1 %}
|
||||
<a href="/albums/{{ album.uuid }}/quit">{{ _("Quit") }}</a>
|
||||
{% endif %}
|
||||
<a href="#share">{{ _("Share") }}</a>
|
||||
{% if g.user or not config["ZIP_REQUIRE_LOGIN"] %}
|
||||
<a href="/albums/{{ album.uuid }}/zip">{{ _("Download as zip") }}</a>
|
||||
{% endif %}
|
||||
{% if g.user.access_level == 1 or (g.user and not not_participant and album.users | length == 1) %}
|
||||
<a id="delete-album" href="#delete">{{ _("Delete") }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</header>
|
||||
<hr/>
|
||||
{% if partitions|length != 0 %}
|
||||
|
@ -30,8 +30,8 @@
|
||||
{% block content %}
|
||||
<header id="album-header">
|
||||
<h2 id="groupe-title">{{ groupe.name }}</h2>
|
||||
{% if g.user %}
|
||||
<div id="header-actions">
|
||||
<div id="header-actions">
|
||||
{% if g.user %}
|
||||
<section id="users">
|
||||
{% for groupe_user in groupe.users %}
|
||||
<div class="user-profile-picture" style="background-color:{{ groupe_user.color }};" title="{{ groupe_user.username }}">
|
||||
@ -39,23 +39,26 @@
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
<div class="dropdown dp1">
|
||||
+
|
||||
<div class="dropdown-content dp1">
|
||||
{% if not_participant %}
|
||||
<a href="/groupe/{{ groupe.uuid }}/join">{{ _("Join") }}</a>
|
||||
{% elif groupe.users | length > 1 %}
|
||||
<a href="/groupe/{{ groupe.uuid }}/quit">{{ _("Quit") }}</a>
|
||||
{% endif %}
|
||||
<a href="#share">{{ _("Share") }}</a>
|
||||
{% if g.user.access_level == 1 or user.id in groupe.get_admins() %}
|
||||
<a href="#create-groupe-album">{{ _("Add an album") }}</a>
|
||||
<a id="delete-album" href="#delete">{{ _("Delete") }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="dropdown dp1">
|
||||
+
|
||||
<div class="dropdown-content dp1">
|
||||
{% if not_participant %}
|
||||
<a href="/groupe/{{ groupe.uuid }}/join">{{ _("Join") }}</a>
|
||||
{% elif groupe.users | length > 1 and g.user %}
|
||||
<a href="/groupe/{{ groupe.uuid }}/quit">{{ _("Quit") }}</a>
|
||||
{% endif %}
|
||||
<a href="#share">{{ _("Share") }}</a>
|
||||
{% if g.user or not config["ZIP_REQUIRE_LOGIN"] %}
|
||||
<a href="/groupe/{{ groupe.uuid }}/zip">{{ _("Download as zip") }}</a>
|
||||
{% endif %}
|
||||
{% if g.user.access_level == 1 or (g.user and user.id in groupe.get_admins()) %}
|
||||
<a href="#create-groupe-album">{{ _("Add an album") }}</a>
|
||||
<a id="delete-album" href="#delete">{{ _("Delete") }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</header>
|
||||
<hr/>
|
||||
{% if groupe.albums|length != 0 %}
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-02-29 12:44+0100\n"
|
||||
"POT-Creation-Date: 2024-04-10 18:47+0200\n"
|
||||
"PO-Revision-Date: 2024-01-22 15:38+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: en\n"
|
||||
@ -32,94 +32,95 @@ msgstr "This album does not exists, but user %(username)s has been created"
|
||||
msgid "Missing search query"
|
||||
msgstr "Missing search query"
|
||||
|
||||
#: partitioncloud/modules/albums.py:125 partitioncloud/modules/groupe.py:71
|
||||
#: partitioncloud/modules/groupe.py:185
|
||||
#: partitioncloud/modules/albums.py:124 partitioncloud/modules/auth.py:27
|
||||
#: partitioncloud/modules/auth.py:54 partitioncloud/modules/groupe.py:271
|
||||
msgid "You need to login to access this resource."
|
||||
msgstr "You need to login to access this resource."
|
||||
|
||||
#: partitioncloud/modules/albums.py:155 partitioncloud/modules/groupe.py:72
|
||||
#: partitioncloud/modules/groupe.py:186
|
||||
msgid "Missing name."
|
||||
msgstr "Missing name."
|
||||
|
||||
#: partitioncloud/modules/albums.py:162
|
||||
#: partitioncloud/modules/albums.py:192
|
||||
msgid "This album does not exist."
|
||||
msgstr "This album does not exist."
|
||||
|
||||
#: partitioncloud/modules/albums.py:165
|
||||
#: partitioncloud/modules/albums.py:195
|
||||
msgid "Album added to collection."
|
||||
msgstr "Album added to collection."
|
||||
|
||||
#: partitioncloud/modules/albums.py:179 partitioncloud/modules/albums.py:242
|
||||
#: partitioncloud/modules/albums.py:354
|
||||
#: partitioncloud/modules/albums.py:209 partitioncloud/modules/albums.py:272
|
||||
#: partitioncloud/modules/albums.py:384
|
||||
msgid "You are not a member of this album"
|
||||
msgstr "You are not a member of this album"
|
||||
|
||||
#: partitioncloud/modules/albums.py:183
|
||||
#: partitioncloud/modules/albums.py:213
|
||||
msgid "You are alone here, quitting means deleting this album."
|
||||
msgstr "You are alone here, quitting means deleting this album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:187
|
||||
#: partitioncloud/modules/albums.py:217
|
||||
msgid "Album quitted."
|
||||
msgstr "Album quitted."
|
||||
|
||||
#: partitioncloud/modules/albums.py:206
|
||||
#: partitioncloud/modules/albums.py:236
|
||||
msgid "You are not alone in this album."
|
||||
msgstr "You are not alone in this album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:208
|
||||
#: partitioncloud/modules/albums.py:238
|
||||
msgid "You don't own this album."
|
||||
msgstr "You don't own this album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:219
|
||||
#: partitioncloud/modules/albums.py:249
|
||||
msgid "Album deleted."
|
||||
msgstr "Album deleted."
|
||||
|
||||
#: partitioncloud/modules/albums.py:248 partitioncloud/modules/partition.py:153
|
||||
#: partitioncloud/modules/albums.py:278 partitioncloud/modules/partition.py:153
|
||||
#: partitioncloud/modules/partition.py:199
|
||||
msgid "Missing title"
|
||||
msgstr "Missing title"
|
||||
|
||||
#: partitioncloud/modules/albums.py:250 partitioncloud/modules/partition.py:63
|
||||
#: partitioncloud/modules/albums.py:280 partitioncloud/modules/partition.py:63
|
||||
msgid "Missing file"
|
||||
msgstr "Missing file"
|
||||
|
||||
#: partitioncloud/modules/albums.py:262
|
||||
#: partitioncloud/modules/albums.py:292
|
||||
msgid "Search results expired"
|
||||
msgstr "Search results expired"
|
||||
|
||||
#: partitioncloud/modules/albums.py:272
|
||||
#: partitioncloud/modules/albums.py:302
|
||||
msgid "Invalid PDF file"
|
||||
msgstr ""
|
||||
|
||||
#: partitioncloud/modules/albums.py:334
|
||||
#: partitioncloud/modules/albums.py:364
|
||||
#, python-format
|
||||
msgid "Score %(partition_name)s added"
|
||||
msgstr "Score %(partition_name)s added"
|
||||
|
||||
#: partitioncloud/modules/albums.py:348
|
||||
#: partitioncloud/modules/albums.py:378
|
||||
msgid "Selecting an album is mandatory."
|
||||
msgstr "Selecting an album is mandatory."
|
||||
|
||||
#: partitioncloud/modules/albums.py:350
|
||||
#: partitioncloud/modules/albums.py:380
|
||||
msgid "Selecting a score is mandatory."
|
||||
msgstr "Selecting a score is mandatory."
|
||||
|
||||
#: partitioncloud/modules/albums.py:352
|
||||
#: partitioncloud/modules/albums.py:382
|
||||
msgid "Please specify a score type."
|
||||
msgstr "Please specify a score type."
|
||||
|
||||
#: partitioncloud/modules/albums.py:374
|
||||
#: partitioncloud/modules/albums.py:404
|
||||
msgid "Score added"
|
||||
msgstr "Score added"
|
||||
|
||||
#: partitioncloud/modules/albums.py:376
|
||||
#: partitioncloud/modules/albums.py:406
|
||||
msgid "Score is already in the album."
|
||||
msgstr "Score is already in the album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:388
|
||||
#: partitioncloud/modules/albums.py:418
|
||||
msgid "Unknown score type."
|
||||
msgstr "Unknown score type."
|
||||
|
||||
#: partitioncloud/modules/auth.py:27 partitioncloud/modules/auth.py:54
|
||||
msgid "You need to login to access this resource."
|
||||
msgstr "You need to login to access this resource."
|
||||
|
||||
#: partitioncloud/modules/auth.py:59 partitioncloud/modules/settings.py:50
|
||||
#: partitioncloud/modules/settings.py:82
|
||||
msgid "Missing rights."
|
||||
@ -150,35 +151,35 @@ msgstr "Successfully created new user. You can log in."
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "Incorrect username or password"
|
||||
|
||||
#: partitioncloud/modules/groupe.py:120
|
||||
#: partitioncloud/modules/groupe.py:121
|
||||
msgid "Unknown group."
|
||||
msgstr "Unknown group."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:123
|
||||
#: partitioncloud/modules/groupe.py:124
|
||||
msgid "Group added to collection."
|
||||
msgstr "Group added to collection."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:134
|
||||
#: partitioncloud/modules/groupe.py:135
|
||||
msgid "You are not a member of this group."
|
||||
msgstr "You are not a member of this group."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:138
|
||||
#: partitioncloud/modules/groupe.py:139
|
||||
msgid "You are alone here, quitting means deleting this group."
|
||||
msgstr "You are alone here, quitting means deleting this group."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:142
|
||||
#: partitioncloud/modules/groupe.py:143
|
||||
msgid "Group quitted."
|
||||
msgstr "Group quitted."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:155
|
||||
#: partitioncloud/modules/groupe.py:156
|
||||
msgid "You are not alone in this group."
|
||||
msgstr "You are not alone in this group."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:166
|
||||
#: partitioncloud/modules/groupe.py:167
|
||||
msgid "Group deleted."
|
||||
msgstr "Group deleted."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:188
|
||||
#: partitioncloud/modules/groupe.py:189
|
||||
msgid "You are not admin of this group."
|
||||
msgstr "You are not admin of this group."
|
||||
|
||||
@ -387,7 +388,7 @@ msgid "Scores list"
|
||||
msgstr "Scores list"
|
||||
|
||||
#: partitioncloud/templates/admin/partitions.html:31
|
||||
#: partitioncloud/templates/albums/album.html:94
|
||||
#: partitioncloud/templates/albums/album.html:97
|
||||
msgid "No available scores"
|
||||
msgstr "No available scores"
|
||||
|
||||
@ -405,10 +406,10 @@ msgid "Do you really want to delete this album?"
|
||||
msgstr "Do you really want to delete this album?"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:16
|
||||
#: partitioncloud/templates/albums/album.html:60
|
||||
#: partitioncloud/templates/albums/album.html:64
|
||||
#: partitioncloud/templates/albums/delete-album.html:8
|
||||
#: partitioncloud/templates/groupe/index.html:20
|
||||
#: partitioncloud/templates/groupe/index.html:53
|
||||
#: partitioncloud/templates/groupe/index.html:57
|
||||
#: partitioncloud/templates/partition/delete.html:10
|
||||
#: partitioncloud/templates/partition/details.html:86
|
||||
#: partitioncloud/templates/partition/edit.html:57
|
||||
@ -416,25 +417,30 @@ msgstr "Do you really want to delete this album?"
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:51
|
||||
#: partitioncloud/templates/albums/album.html:52
|
||||
msgid "Add a score"
|
||||
msgstr "Add a score"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:54
|
||||
#: partitioncloud/templates/groupe/index.html:46
|
||||
#: partitioncloud/templates/albums/album.html:55
|
||||
#: partitioncloud/templates/groupe/index.html:47
|
||||
msgid "Join"
|
||||
msgstr "Join"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:56
|
||||
#: partitioncloud/templates/groupe/index.html:48
|
||||
#: partitioncloud/templates/albums/album.html:57
|
||||
#: partitioncloud/templates/groupe/index.html:49
|
||||
msgid "Quit"
|
||||
msgstr "Quit"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:58
|
||||
#: partitioncloud/templates/groupe/index.html:50
|
||||
#: partitioncloud/templates/albums/album.html:59
|
||||
#: partitioncloud/templates/groupe/index.html:51
|
||||
msgid "Share"
|
||||
msgstr "Share"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:61
|
||||
#: partitioncloud/templates/groupe/index.html:53
|
||||
msgid "Download as zip"
|
||||
msgstr "Download as zip"
|
||||
|
||||
#: partitioncloud/templates/albums/delete-album.html:3
|
||||
#: partitioncloud/templates/partition/delete.html:4
|
||||
#, python-format
|
||||
@ -539,15 +545,15 @@ msgstr "Delete group"
|
||||
msgid "Do you really want to delete this group and the albums it contains?"
|
||||
msgstr "Do you really want to delete this group and the albums it contains?"
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:52
|
||||
#: partitioncloud/templates/groupe/index.html:56
|
||||
msgid "Add an album"
|
||||
msgstr "Add an album"
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:74
|
||||
#: partitioncloud/templates/groupe/index.html:77
|
||||
msgid "Create one"
|
||||
msgstr "Create one"
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:77
|
||||
#: partitioncloud/templates/groupe/index.html:80
|
||||
#, python-format
|
||||
msgid "No available album. %(create)s"
|
||||
msgstr "No available album. %(create)s"
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-02-29 12:44+0100\n"
|
||||
"POT-Creation-Date: 2024-04-10 18:47+0200\n"
|
||||
"PO-Revision-Date: 2024-01-22 15:24+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fr\n"
|
||||
@ -32,94 +32,95 @@ msgstr "Cet album n'existe pas. L'utilisateur %(username)s a été créé"
|
||||
msgid "Missing search query"
|
||||
msgstr "Aucun terme de recherche spécifié."
|
||||
|
||||
#: partitioncloud/modules/albums.py:125 partitioncloud/modules/groupe.py:71
|
||||
#: partitioncloud/modules/groupe.py:185
|
||||
#: partitioncloud/modules/albums.py:124 partitioncloud/modules/auth.py:27
|
||||
#: partitioncloud/modules/auth.py:54 partitioncloud/modules/groupe.py:271
|
||||
msgid "You need to login to access this resource."
|
||||
msgstr "Vous devez être connecté pour accéder à cette page."
|
||||
|
||||
#: partitioncloud/modules/albums.py:155 partitioncloud/modules/groupe.py:72
|
||||
#: partitioncloud/modules/groupe.py:186
|
||||
msgid "Missing name."
|
||||
msgstr "Un nom est requis."
|
||||
|
||||
#: partitioncloud/modules/albums.py:162
|
||||
#: partitioncloud/modules/albums.py:192
|
||||
msgid "This album does not exist."
|
||||
msgstr "Cet album n'existe pas."
|
||||
|
||||
#: partitioncloud/modules/albums.py:165
|
||||
#: partitioncloud/modules/albums.py:195
|
||||
msgid "Album added to collection."
|
||||
msgstr "Album ajouté à la collection."
|
||||
|
||||
#: partitioncloud/modules/albums.py:179 partitioncloud/modules/albums.py:242
|
||||
#: partitioncloud/modules/albums.py:354
|
||||
#: partitioncloud/modules/albums.py:209 partitioncloud/modules/albums.py:272
|
||||
#: partitioncloud/modules/albums.py:384
|
||||
msgid "You are not a member of this album"
|
||||
msgstr "Vous ne faites pas partie de cet album"
|
||||
|
||||
#: partitioncloud/modules/albums.py:183
|
||||
#: partitioncloud/modules/albums.py:213
|
||||
msgid "You are alone here, quitting means deleting this album."
|
||||
msgstr "Vous êtes seul dans cet album, le quitter entraînera sa suppression."
|
||||
|
||||
#: partitioncloud/modules/albums.py:187
|
||||
#: partitioncloud/modules/albums.py:217
|
||||
msgid "Album quitted."
|
||||
msgstr "Album quitté."
|
||||
|
||||
#: partitioncloud/modules/albums.py:206
|
||||
#: partitioncloud/modules/albums.py:236
|
||||
msgid "You are not alone in this album."
|
||||
msgstr "Vous n'êtes pas seul dans cet album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:208
|
||||
#: partitioncloud/modules/albums.py:238
|
||||
msgid "You don't own this album."
|
||||
msgstr "Vous ne possédez pas cet album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:219
|
||||
#: partitioncloud/modules/albums.py:249
|
||||
msgid "Album deleted."
|
||||
msgstr "Album supprimé."
|
||||
|
||||
#: partitioncloud/modules/albums.py:248 partitioncloud/modules/partition.py:153
|
||||
#: partitioncloud/modules/albums.py:278 partitioncloud/modules/partition.py:153
|
||||
#: partitioncloud/modules/partition.py:199
|
||||
msgid "Missing title"
|
||||
msgstr "Un titre est requis."
|
||||
|
||||
#: partitioncloud/modules/albums.py:250 partitioncloud/modules/partition.py:63
|
||||
#: partitioncloud/modules/albums.py:280 partitioncloud/modules/partition.py:63
|
||||
msgid "Missing file"
|
||||
msgstr "Aucun fichier n'a été fourni."
|
||||
|
||||
#: partitioncloud/modules/albums.py:262
|
||||
#: partitioncloud/modules/albums.py:292
|
||||
msgid "Search results expired"
|
||||
msgstr "Les résultats de la recherche ont expiré."
|
||||
|
||||
#: partitioncloud/modules/albums.py:272
|
||||
#: partitioncloud/modules/albums.py:302
|
||||
msgid "Invalid PDF file"
|
||||
msgstr "Fichier PDF invalide"
|
||||
|
||||
#: partitioncloud/modules/albums.py:334
|
||||
#: partitioncloud/modules/albums.py:364
|
||||
#, python-format
|
||||
msgid "Score %(partition_name)s added"
|
||||
msgstr "Partition %(partition_name)s ajoutée"
|
||||
|
||||
#: partitioncloud/modules/albums.py:348
|
||||
#: partitioncloud/modules/albums.py:378
|
||||
msgid "Selecting an album is mandatory."
|
||||
msgstr "Il est nécessaire de sélectionner un album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:350
|
||||
#: partitioncloud/modules/albums.py:380
|
||||
msgid "Selecting a score is mandatory."
|
||||
msgstr "Il est nécessaire de sélectionner une partition."
|
||||
|
||||
#: partitioncloud/modules/albums.py:352
|
||||
#: partitioncloud/modules/albums.py:382
|
||||
msgid "Please specify a score type."
|
||||
msgstr "Il est nécessaire de spécifier un type de partition."
|
||||
|
||||
#: partitioncloud/modules/albums.py:374
|
||||
#: partitioncloud/modules/albums.py:404
|
||||
msgid "Score added"
|
||||
msgstr "Partition ajoutée."
|
||||
|
||||
#: partitioncloud/modules/albums.py:376
|
||||
#: partitioncloud/modules/albums.py:406
|
||||
msgid "Score is already in the album."
|
||||
msgstr "Partition déjà dans l'album."
|
||||
|
||||
#: partitioncloud/modules/albums.py:388
|
||||
#: partitioncloud/modules/albums.py:418
|
||||
msgid "Unknown score type."
|
||||
msgstr "Type de partition inconnu."
|
||||
|
||||
#: partitioncloud/modules/auth.py:27 partitioncloud/modules/auth.py:54
|
||||
msgid "You need to login to access this resource."
|
||||
msgstr "Vous devez être connecté pour accéder à cette page."
|
||||
|
||||
#: partitioncloud/modules/auth.py:59 partitioncloud/modules/settings.py:50
|
||||
#: partitioncloud/modules/settings.py:82
|
||||
msgid "Missing rights."
|
||||
@ -152,35 +153,35 @@ msgstr "Utilisateur créé avec succès. Vous pouvez vous connecter."
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "Nom d'utilisateur ou mot de passe incorrect."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:120
|
||||
#: partitioncloud/modules/groupe.py:121
|
||||
msgid "Unknown group."
|
||||
msgstr "Ce groupe n'existe pas."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:123
|
||||
#: partitioncloud/modules/groupe.py:124
|
||||
msgid "Group added to collection."
|
||||
msgstr "Groupe ajouté à la collection."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:134
|
||||
#: partitioncloud/modules/groupe.py:135
|
||||
msgid "You are not a member of this group."
|
||||
msgstr "Vous ne faites pas partie de ce groupe"
|
||||
|
||||
#: partitioncloud/modules/groupe.py:138
|
||||
#: partitioncloud/modules/groupe.py:139
|
||||
msgid "You are alone here, quitting means deleting this group."
|
||||
msgstr "Vous êtes seul dans ce groupe, le quitter entraînera sa suppression."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:142
|
||||
#: partitioncloud/modules/groupe.py:143
|
||||
msgid "Group quitted."
|
||||
msgstr "Groupe quitté."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:155
|
||||
#: partitioncloud/modules/groupe.py:156
|
||||
msgid "You are not alone in this group."
|
||||
msgstr "Vous n'êtes pas seul dans ce groupe."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:166
|
||||
#: partitioncloud/modules/groupe.py:167
|
||||
msgid "Group deleted."
|
||||
msgstr "Groupe supprimé."
|
||||
|
||||
#: partitioncloud/modules/groupe.py:188
|
||||
#: partitioncloud/modules/groupe.py:189
|
||||
msgid "You are not admin of this group."
|
||||
msgstr "Vous n'êtes pas administrateur de ce groupe"
|
||||
|
||||
@ -393,7 +394,7 @@ msgid "Scores list"
|
||||
msgstr "Liste des partitions"
|
||||
|
||||
#: partitioncloud/templates/admin/partitions.html:31
|
||||
#: partitioncloud/templates/albums/album.html:94
|
||||
#: partitioncloud/templates/albums/album.html:97
|
||||
msgid "No available scores"
|
||||
msgstr "Aucune partition disponible"
|
||||
|
||||
@ -411,10 +412,10 @@ msgid "Do you really want to delete this album?"
|
||||
msgstr "Êtes vous sûr de vouloir supprimer cet album ?"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:16
|
||||
#: partitioncloud/templates/albums/album.html:60
|
||||
#: partitioncloud/templates/albums/album.html:64
|
||||
#: partitioncloud/templates/albums/delete-album.html:8
|
||||
#: partitioncloud/templates/groupe/index.html:20
|
||||
#: partitioncloud/templates/groupe/index.html:53
|
||||
#: partitioncloud/templates/groupe/index.html:57
|
||||
#: partitioncloud/templates/partition/delete.html:10
|
||||
#: partitioncloud/templates/partition/details.html:86
|
||||
#: partitioncloud/templates/partition/edit.html:57
|
||||
@ -422,25 +423,30 @@ msgstr "Êtes vous sûr de vouloir supprimer cet album ?"
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:51
|
||||
#: partitioncloud/templates/albums/album.html:52
|
||||
msgid "Add a score"
|
||||
msgstr "Ajouter une partition"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:54
|
||||
#: partitioncloud/templates/groupe/index.html:46
|
||||
#: partitioncloud/templates/albums/album.html:55
|
||||
#: partitioncloud/templates/groupe/index.html:47
|
||||
msgid "Join"
|
||||
msgstr "Rejoindre"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:56
|
||||
#: partitioncloud/templates/groupe/index.html:48
|
||||
#: partitioncloud/templates/albums/album.html:57
|
||||
#: partitioncloud/templates/groupe/index.html:49
|
||||
msgid "Quit"
|
||||
msgstr "Quitter"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:58
|
||||
#: partitioncloud/templates/groupe/index.html:50
|
||||
#: partitioncloud/templates/albums/album.html:59
|
||||
#: partitioncloud/templates/groupe/index.html:51
|
||||
msgid "Share"
|
||||
msgstr "Partager"
|
||||
|
||||
#: partitioncloud/templates/albums/album.html:61
|
||||
#: partitioncloud/templates/groupe/index.html:53
|
||||
msgid "Download as zip"
|
||||
msgstr "Télécharger le zip"
|
||||
|
||||
#: partitioncloud/templates/albums/delete-album.html:3
|
||||
#: partitioncloud/templates/partition/delete.html:4
|
||||
#, python-format
|
||||
@ -548,15 +554,15 @@ msgstr ""
|
||||
" sous-jacents et leurs partitions si personne ne les a rejoints "
|
||||
"(indépendamment du groupe)."
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:52
|
||||
#: partitioncloud/templates/groupe/index.html:56
|
||||
msgid "Add an album"
|
||||
msgstr "Ajouter un album"
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:74
|
||||
#: partitioncloud/templates/groupe/index.html:77
|
||||
msgid "Create one"
|
||||
msgstr "En créer un"
|
||||
|
||||
#: partitioncloud/templates/groupe/index.html:77
|
||||
#: partitioncloud/templates/groupe/index.html:80
|
||||
#, python-format
|
||||
msgid "No available album. %(create)s"
|
||||
msgstr "Aucun album disponible. %(create)s"
|
||||
|
@ -201,11 +201,18 @@ if __name__ == "__main__":
|
||||
"--restore",
|
||||
help="restore from specific version backup, will not apply any hook (vx.y.z)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--backup",
|
||||
help="backup current version, without running any hooks",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
config.instance = os.path.abspath(args.instance)
|
||||
|
||||
if args.restore is None:
|
||||
migrate(args.current, args.target, skip_backup=args.skip_backup)
|
||||
else:
|
||||
if args.restore is not None:
|
||||
restore(args.restore)
|
||||
elif args.backup is not None:
|
||||
backup_instance(args.backup, verbose=True)
|
||||
else:
|
||||
migrate(args.current, args.target, skip_backup=args.skip_backup)
|
||||
|
Loading…
x
Reference in New Issue
Block a user