Link catalogue to documents.
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 20 Apr 2020 15:05:10 +0000 (17:05 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 20 Apr 2020 15:05:10 +0000 (17:05 +0200)
18 files changed:
src/catalogue/admin.py
src/catalogue/constants.py
src/catalogue/locale/pl/LC_MESSAGES/django.mo [new file with mode: 0644]
src/catalogue/locale/pl/LC_MESSAGES/django.po [new file with mode: 0644]
src/catalogue/management/commands/import_catalogue_from_wl_dump.py
src/catalogue/models.py
src/catalogue/templates/catalogue/author_detail.html [new file with mode: 0644]
src/catalogue/templates/catalogue/book_detail.html [new file with mode: 0644]
src/catalogue/templates/catalogue/catalogue.html [new file with mode: 0644]
src/catalogue/urls.py [new file with mode: 0644]
src/catalogue/utils.py [new file with mode: 0644]
src/catalogue/views.py [new file with mode: 0644]
src/catalogue/wikidata.py
src/documents/locale/pl/LC_MESSAGES/django.mo
src/documents/locale/pl/LC_MESSAGES/django.po
src/documents/models/book.py
src/documents/templates/documents/book_detail.html
src/redakcja/urls.py

index 91656f1..00617cb 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.contrib import admin
 from . import models
 from .wikidata import WikidataAdminMixin
 from django.contrib import admin
 from . import models
 from .wikidata import WikidataAdminMixin
index f8180f7..88d0e33 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 class WIKIDATA:
     AUTHOR = "P50"
     LANGUAGE = "P407"
 class WIKIDATA:
     AUTHOR = "P50"
     LANGUAGE = "P407"
diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.mo b/src/catalogue/locale/pl/LC_MESSAGES/django.mo
new file mode 100644 (file)
index 0000000..eb7cf85
Binary files /dev/null and b/src/catalogue/locale/pl/LC_MESSAGES/django.mo differ
diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.po b/src/catalogue/locale/pl/LC_MESSAGES/django.po
new file mode 100644 (file)
index 0000000..3b3d06b
--- /dev/null
@@ -0,0 +1,71 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-20 16:44+0200\n"
+"PO-Revision-Date: 2020-04-20 16:52+0200\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
+"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
+"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"X-Generator: Poedit 2.2.4\n"
+
+#: models.py:22
+msgid "Alive"
+msgstr "Żyje"
+
+#: models.py:23
+msgid "Dead"
+msgstr "Zmarły"
+
+#: models.py:24
+msgid "Long dead"
+msgstr "Dawno zmarły"
+
+#: models.py:25
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: models.py:37 models.py:83
+msgid "Low"
+msgstr "Niski"
+
+#: models.py:37 models.py:83
+msgid "Medium"
+msgstr "Średni"
+
+#: models.py:37 models.py:83
+msgid "High"
+msgstr "Wysoki"
+
+#: templates/catalogue/catalogue.html:7 templates/catalogue/catalogue.html:13
+msgid "Catalogue"
+msgstr "Katalog"
+
+#: templates/catalogue/catalogue.html:67
+msgid "trans."
+msgstr "tłum."
+
+#: templates/catalogue/catalogue.html:90
+#, python-format
+msgid "%(c)s author"
+msgid_plural "%(c)s authors"
+msgstr[0] "%(c)s autor"
+msgstr[1] "%(c)s autorów"
+msgstr[2] "%(c)s autorów"
+msgstr[3] ""
+
+#: wikidata.py:18
+msgid "If you have a Wikidata ID, like \"Q1337\", enter it and save."
+msgstr ""
+"Jeśli masz identyfikator Wikidanych , jak „Q1337”, wklej go i zapisz."
index 29d3275..e137f5a 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 from urllib.request import urlopen
 import sys
 import json
 from urllib.request import urlopen
 import sys
index 6a27cd9..0863c1e 100644 (file)
@@ -1,6 +1,9 @@
+from django.apps import apps
 from django.db import models
 from django.db import models
+from django.urls import reverse
 from django.utils.translation import gettext_lazy as _
 from .constants import WIKIDATA
 from django.utils.translation import gettext_lazy as _
 from .constants import WIKIDATA
+from .utils import UnrelatedManager
 from .wikidata import WikidataMixin
 
 
 from .wikidata import WikidataMixin
 
 
@@ -48,6 +51,17 @@ class Author(WikidataMixin, models.Model):
     def __str__(self):
         return f"{self.first_name} {self.last_name}"
 
     def __str__(self):
         return f"{self.first_name} {self.last_name}"
 
+    def get_absolute_url(self):
+        return reverse("catalogue_author", args=[self.slug])
+
+    @property
+    def pd_year(self):
+        if self.year_of_death:
+            return self.year_of_death + 71
+        elif self.year_of_death == 0:
+            return 0
+        else:
+            return None
 
 class Book(WikidataMixin, models.Model):
     slug = models.SlugField(max_length=255, blank=True, null=True, unique=True)
 
 class Book(WikidataMixin, models.Model):
     slug = models.SlugField(max_length=255, blank=True, null=True, unique=True)
@@ -73,6 +87,8 @@ class Book(WikidataMixin, models.Model):
     gazeta_link = models.CharField(max_length=255, blank=True)
     collections = models.ManyToManyField("Collection", blank=True)
 
     gazeta_link = models.CharField(max_length=255, blank=True)
     collections = models.ManyToManyField("Collection", blank=True)
 
+    objects = UnrelatedManager()
+
     class Meta:
         ordering = ("title",)
 
     class Meta:
         ordering = ("title",)
 
@@ -94,12 +110,19 @@ class Book(WikidataMixin, models.Model):
             txt = f"{txt} (tłum. {tstr})"
         return txt
 
             txt = f"{txt} (tłum. {tstr})"
         return txt
 
+    def get_absolute_url(self):
+        return reverse("catalogue_book", args=[self.slug])
+    
     def authors_str(self):
         return ", ".join(str(author) for author in self.authors.all())
 
     def translators_str(self):
         return ", ".join(str(author) for author in self.translators.all())
 
     def authors_str(self):
         return ", ".join(str(author) for author in self.authors.all())
 
     def translators_str(self):
         return ", ".join(str(author) for author in self.translators.all())
 
+    def get_document_books(self):
+        DBook = apps.get_model("documents", "Book")
+        return DBook.objects.filter(dc_slug=self.slug)
+
 
 class Collection(models.Model):
     name = models.CharField(max_length=255)
 
 class Collection(models.Model):
     name = models.CharField(max_length=255)
diff --git a/src/catalogue/templates/catalogue/author_detail.html b/src/catalogue/templates/catalogue/author_detail.html
new file mode 100644 (file)
index 0000000..177f3be
--- /dev/null
@@ -0,0 +1,89 @@
+{% extends "documents/base.html" %}
+
+{% load i18n %}
+{% load pagination_tags %}
+
+
+{% block titleextra %}{% trans "Catalogue" %}{% endblock %}
+
+
+{% block content %}
+  <div class="card">
+    <div class="card-header">
+      <h1>{% trans "Catalogue" %}</h1>
+    </div>
+    <div class="card-body">
+
+      <table class="table">
+          <tr>
+            <th>
+              <a href="{{ author.get_absolute_url }}">
+                {{ author }}
+              </a>
+            </th>
+            <td>
+              {{ author.pd_year|default_if_none:"-" }}
+            </td>
+            <td>
+              {{ author.wikidata_link }}
+            </td>
+            <td>
+              {{ author.get_priority_display }}
+            </td>
+          </tr>
+          {% for book in author.book_set.all %}
+            <tr>
+              <td>
+                &nbsp;
+                <a href="{{ book.get_absolute_url }}">
+                  {{ book.title }}
+                </a>
+              </td>
+              <td>
+                {{ book.pd_year|default_if_none:"-" }}
+              </td>
+              <td>
+                {{ book.wikidata_link }}
+              </td>
+              <td>
+                {{ book.get_priorty_display }}
+              </td>
+              <td>
+                {% for b in book.document_books %}
+                  <a href="{{ b.get_absolute_url }}">
+                    {{ b }}
+                  </a>
+                {% endfor %}
+              </td>
+            </tr>
+          {% endfor %}
+          {% for book in author.translated_book_set.all %}
+            <tr>
+              <td>
+                &nbsp;
+                <a href="{{ book.get_absolute_url }}">
+                  {{ book.title }}
+                </a> ({% trans "trans." %})
+              </td>
+              <td>
+                {{ book.pd_year|default_if_none:"-" }}
+              </td>
+              <td>
+                {{ book.wikidata_link }}
+              </td>
+              <td>
+                {{ book.get_priorty_display }}
+              </td>
+              <td>
+                {% for b in book.document_books %}
+                  <a href="{{ b.get_absolute_url }}">
+                    {{ b }}
+                  </a>
+                {% endfor %}
+              </td>
+            </tr>
+          {% endfor %}
+      </table>
+    </div>
+  </div>
+{% endblock content %}
diff --git a/src/catalogue/templates/catalogue/book_detail.html b/src/catalogue/templates/catalogue/book_detail.html
new file mode 100644 (file)
index 0000000..2c59c35
--- /dev/null
@@ -0,0 +1,80 @@
+{% extends "documents/base.html" %}
+
+{% load i18n %}
+{% load pagination_tags %}
+
+
+{% block titleextra %}{% trans "Catalogue" %}{% endblock %}
+
+
+{% block content %}
+  <div class="card">
+    <div class="card-header">
+      <h1>{% trans "Catalogue" %}</h1>
+    </div>
+    <div class="card-body">
+      <table class="table">
+        {% for author in book.authors.all %}
+          <tr>
+            <th>
+              <a href="{{ author.get_absolute_url }}">
+                {{ author }}
+              </a>
+            </th>
+            <td>
+              {{ author.pd_year|default_if_none:"-" }}
+            </td>
+            <td>
+              {{ author.wikidata_link }}
+            </td>
+            <td>
+              {{ author.get_priority_display }}
+            </td>
+          </tr>
+        {% endfor %}
+        {% for author in book.translator_set.all %}
+          <tr>
+            <th>
+              <a href="{{ author.get_absolute_url }}">
+                {{ author }}
+              </a>
+            </th>
+            <td>
+              {{ author.pd_year|default_if_none:"-" }}
+            </td>
+            <td>
+              {{ author.wikidata_link }}
+            </td>
+            <td>
+              {{ author.get_priority_display }}
+            </td>
+          </tr>
+        {% endfor %}
+        <tr>
+          <td>
+            &nbsp;
+            <a href="{{ book.get_absolute_url }}">
+              {{ book.title }}
+            </a>
+          </td>
+          <td>
+            {{ book.pd_year|default_if_none:"-" }}
+          </td>
+          <td>
+            {{ book.wikidata_link }}
+          </td>
+          <td>
+            {{ book.get_priorty_display }}
+          </td>
+          <td>
+            {% for b in book.get_document_books %}
+              <a href="{{ b.get_absolute_url }}">
+                {{ b }}
+              </a>
+            {% endfor %}
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+{% endblock content %}
diff --git a/src/catalogue/templates/catalogue/catalogue.html b/src/catalogue/templates/catalogue/catalogue.html
new file mode 100644 (file)
index 0000000..715ba8f
--- /dev/null
@@ -0,0 +1,93 @@
+{% extends "documents/base.html" %}
+
+{% load i18n %}
+{% load pagination_tags %}
+
+
+{% block titleextra %}{% trans "Catalogue" %}{% endblock %}
+
+
+{% block content %}
+  <div class="card">
+    <div class="card-header">
+      <h1>{% trans "Catalogue" %}</h1>
+    </div>
+    <div class="card-body">
+      <table class="table">
+        {% autopaginate authors 20 as authors_page %}
+        {% for author in authors_page %}
+          <tr>
+            <th>
+              <a href="{{ author.get_absolute_url }}">
+                {{ author }}
+              </a>
+            </th>
+            <td>
+              {{ author.pd_year|default_if_none:"-" }}
+            </td>
+            <td>
+              {{ author.wikidata_link }}
+            </td>
+            <td>
+              {{ author.get_priority_display }}
+            </td>
+          </tr>
+          {% for book in author.book_set.all %}
+            <tr>
+              <td>
+                &nbsp;
+                <a href="{{ book.get_absolute_url }}">
+                  {{ book.title }}
+                </a>
+              </td>
+              <td>
+                {{ book.pd_year|default_if_none:"-" }}
+              </td>
+              <td>
+                {{ book.wikidata_link }}
+              </td>
+              <td>
+                {{ book.get_priorty_display }}
+              </td>
+              <td>
+                {% for b in book.document_books %}
+                  <a href="{{ b.get_absolute_url }}">
+                    {{ b }}
+                  </a>
+                {% endfor %}
+              </td>
+            </tr>
+          {% endfor %}
+          {% for book in author.translated_book_set.all %}
+            <tr>
+              <td>
+                &nbsp;
+                <a href="{{ book.get_absolute_url }}">
+                  {{ book.title }}
+                </a> ({% trans "trans." %})
+              </td>
+              <td>
+                {{ book.pd_year|default_if_none:"-" }}
+              </td>
+              <td>
+                {{ book.wikidata_link }}
+              </td>
+              <td>
+                {{ book.get_priorty_display }}
+              </td>
+              <td>
+                {% for b in book.document_books %}
+                  <a href="{{ b.get_absolute_url }}">
+                    {{ b }}
+                  </a>
+                {% endfor %}
+              </td>
+            </tr>
+          {% endfor %}
+        {% endfor %}
+      </table>
+      {% paginate %}
+      {% blocktrans count c=authors|length %}{{c}} author{% plural %}{{c}} authors{% endblocktrans %}
+    </div>
+  </div>
+{% endblock content %}
diff --git a/src/catalogue/urls.py b/src/catalogue/urls.py
new file mode 100644 (file)
index 0000000..10ef6d0
--- /dev/null
@@ -0,0 +1,12 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django.urls import path
+from . import views
+
+
+urlpatterns = [
+    path("", views.CatalogueView.as_view(), name="catalogue"),
+    path("author/<slug:slug>/", views.AuthorView.as_view(), name="catalogue_author"),
+    path("book/<slug:slug>/", views.BookView.as_view(), name="catalogue_book"),
+]
diff --git a/src/catalogue/utils.py b/src/catalogue/utils.py
new file mode 100644 (file)
index 0000000..00f7187
--- /dev/null
@@ -0,0 +1,49 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from collections import defaultdict
+from django.db.models import QuerySet
+from django.db.models.manager import BaseManager
+
+
+class UnrelatedQuerySet(QuerySet):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self._prefetch_unrelated_lookups = {}
+        self._prefetch_unrelated_done = False
+
+    def _clone(self):
+        c = super()._clone()
+        c._prefetch_unrelated_lookups = self._prefetch_unrelated_lookups.copy()
+        return c
+
+    def prefetch_unrelated(self, attribute, field, other_model, other_field):
+        clone = self._clone()
+        clone._prefetch_unrelated_lookups[field] = (attribute, other_model, other_field)
+        return clone
+
+    def _fetch_all(self):
+        prefetch_done = self._prefetch_done
+        super()._fetch_all()
+        if self._prefetch_unrelated_lookups and not prefetch_done:
+            self._prefetch_unrelated_objects()
+
+    def _prefetch_unrelated_objects(self):
+        for (
+            field,
+            (attribute, other_model, other_field),
+        ) in self._prefetch_unrelated_lookups.items():
+            values = set([getattr(obj, field) for obj in self._result_cache])
+            other_objects = other_model._default_manager.filter(
+                **{f"{other_field}__in": values}
+            )
+            results = defaultdict(list)
+            for other_obj in other_objects:
+                results[getattr(other_obj, other_field)].append(other_obj)
+            for obj in self._result_cache:
+                setattr(obj, attribute, results.get(getattr(obj, field)))
+        self._prefetch_unrelated_done = True
+
+
+class UnrelatedManager(BaseManager.from_queryset(UnrelatedQuerySet)):
+    pass
diff --git a/src/catalogue/views.py b/src/catalogue/views.py
new file mode 100644 (file)
index 0000000..0b29b6f
--- /dev/null
@@ -0,0 +1,43 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django.db.models import Prefetch
+from django.views.generic import DetailView, TemplateView
+from . import models
+import documents.models
+
+
+class CatalogueView(TemplateView):
+    template_name = "catalogue/catalogue.html"
+
+    def get_context_data(self):
+        ctx = super().get_context_data()
+        documents_books_queryset = models.Book.objects.prefetch_unrelated(
+            "document_books", "slug", documents.models.Book, "dc_slug"
+        )
+        ctx["authors"] = models.Author.objects.all().prefetch_related(
+            Prefetch("book_set", queryset=documents_books_queryset),
+            Prefetch("translated_book_set", queryset=documents_books_queryset),
+        )
+        return ctx
+
+
+class AuthorView(TemplateView):
+    model = models.Author
+    template_name = "catalogue/author_detail.html"
+
+    def get_context_data(self, slug):
+        ctx = super().get_context_data()
+        documents_books_queryset = models.Book.objects.prefetch_unrelated(
+            "document_books", "slug", documents.models.Book, "dc_slug"
+        )
+        authors = models.Author.objects.filter(slug=slug).prefetch_related(
+            Prefetch("book_set", queryset=documents_books_queryset),
+            Prefetch("translated_book_set", queryset=documents_books_queryset),
+        )
+        ctx["author"] = authors.first()
+        return ctx
+
+
+class BookView(DetailView):
+    model = models.Book
index 88686b6..d97d3af 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import date
 from django.db import models
 from django.db.models.signals import m2m_changed
 from datetime import date
 from django.db import models
 from django.db.models.signals import m2m_changed
index 395b34e..dde8ac1 100644 (file)
Binary files a/src/documents/locale/pl/LC_MESSAGES/django.mo and b/src/documents/locale/pl/LC_MESSAGES/django.mo differ
index ac60fb2..3a6596d 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Platforma Redakcyjna\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: Platforma Redakcyjna\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-10-07 13:05+0200\n"
-"PO-Revision-Date: 2019-10-07 13:06+0200\n"
+"POT-Creation-Date: 2020-04-20 16:53+0200\n"
+"PO-Revision-Date: 2020-04-20 16:54+0200\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org."
 "pl>\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org."
 "pl>\n"
@@ -18,89 +18,97 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.0.6\n"
+"X-Generator: Poedit 2.2.4\n"
 
 
-#: forms.py:38
+#: forms.py:41
 msgid "Text file must be UTF-8 encoded."
 msgstr "Plik powinien mieć kodowanie UTF-8."
 
 msgid "Text file must be UTF-8 encoded."
 msgstr "Plik powinien mieć kodowanie UTF-8."
 
-#: forms.py:41
+#: forms.py:57
+msgid "Title not set"
+msgstr "Brak tytułu"
+
+#: forms.py:60
+msgid "Slug not set"
+msgstr "Brak slugu"
+
+#: forms.py:63
 msgid "You must either enter text or upload a file"
 msgstr "Proszę wpisać tekst albo wybrać plik do załadowania"
 
 msgid "You must either enter text or upload a file"
 msgstr "Proszę wpisać tekst albo wybrać plik do załadowania"
 
-#: forms.py:50
+#: forms.py:72
 msgid "ZIP file"
 msgstr "Plik ZIP"
 
 msgid "ZIP file"
 msgstr "Plik ZIP"
 
-#: forms.py:51
+#: forms.py:73
 msgid "Directories are documents in chunks"
 msgstr "Katalogi zawierają dokumenty w częściach"
 
 msgid "Directories are documents in chunks"
 msgstr "Katalogi zawierają dokumenty w częściach"
 
-#: forms.py:75 forms.py:176
+#: forms.py:97 forms.py:198
 msgid "Assigned to"
 msgstr "Przypisane do"
 
 msgid "Assigned to"
 msgstr "Przypisane do"
 
-#: forms.py:96 forms.py:110
+#: forms.py:118 forms.py:132
 msgid "Chunk with this slug already exists"
 msgstr "Część z tym slugiem już istnieje"
 
 msgid "Chunk with this slug already exists"
 msgstr "Część z tym slugiem już istnieje"
 
-#: forms.py:119
+#: forms.py:141
 msgid "Append to"
 msgstr "Dołącz do"
 
 msgid "Append to"
 msgstr "Dołącz do"
 
-#: models/book.py:26 models/chunk.py:21 models/image.py:20
+#: models/book.py:27 models/chunk.py:21 models/image.py:20
 msgid "title"
 msgstr "tytuł"
 
 msgid "title"
 msgstr "tytuł"
 
-#: models/book.py:27 models/chunk.py:22 models/image.py:21
+#: models/book.py:28 models/chunk.py:22 models/image.py:21
 msgid "slug"
 msgstr "slug"
 
 msgid "slug"
 msgstr "slug"
 
-#: models/book.py:28 models/image.py:22
+#: models/book.py:29 models/image.py:22
 msgid "public"
 msgstr "publiczna"
 
 msgid "public"
 msgstr "publiczna"
 
-#: models/book.py:29
+#: models/book.py:30
 msgid "scan gallery name"
 msgstr "nazwa galerii skanów"
 
 msgid "scan gallery name"
 msgstr "nazwa galerii skanów"
 
-#: models/book.py:33
+#: models/book.py:34
 msgid "parent"
 msgstr "rodzic"
 
 msgid "parent"
 msgstr "rodzic"
 
-#: models/book.py:34
+#: models/book.py:35
 msgid "parent number"
 msgstr "numeracja rodzica"
 
 msgid "parent number"
 msgstr "numeracja rodzica"
 
-#: models/book.py:52 models/chunk.py:19 models/publish_log.py:15
+#: models/book.py:53 models/chunk.py:19 models/publish_log.py:15
 msgid "book"
 msgstr "książka"
 
 msgid "book"
 msgstr "książka"
 
-#: models/book.py:53 views.py:619
+#: models/book.py:54 views.py:619
 msgid "books"
 msgstr "książki"
 
 msgid "books"
 msgstr "książki"
 
-#: models/book.py:257
+#: models/book.py:263
 msgid "No chunks in the book."
 msgstr "Książka nie ma części."
 
 msgid "No chunks in the book."
 msgstr "Książka nie ma części."
 
-#: models/book.py:261
+#: models/book.py:267
 msgid "Not all chunks have publishable revisions."
 msgstr "Niektóre części nie są gotowe do publikacji."
 
 msgid "Not all chunks have publishable revisions."
 msgstr "Niektóre części nie są gotowe do publikacji."
 
-#: models/book.py:268 models/image.py:83
+#: models/book.py:274 models/image.py:83
 msgid "Invalid XML"
 msgstr "Nieprawidłowy XML"
 
 msgid "Invalid XML"
 msgstr "Nieprawidłowy XML"
 
-#: models/book.py:270 models/image.py:85
+#: models/book.py:276 models/image.py:85
 msgid "No Dublin Core found."
 msgstr "Brak sekcji Dublin Core."
 
 msgid "No Dublin Core found."
 msgstr "Brak sekcji Dublin Core."
 
-#: models/book.py:272 models/image.py:87
+#: models/book.py:278 models/image.py:87
 msgid "Invalid Dublin Core"
 msgstr "Nieprawidłowy Dublin Core"
 
 msgid "Invalid Dublin Core"
 msgstr "Nieprawidłowy Dublin Core"
 
-#: models/book.py:275 models/image.py:91
+#: models/book.py:281 models/image.py:91
 msgid "rdf:about is not"
 msgstr "rdf:about jest różny od"
 
 msgid "rdf:about is not"
 msgstr "rdf:about jest różny od"
 
@@ -140,8 +148,8 @@ msgstr "nazwa"
 msgid "notes"
 msgstr "notatki"
 
 msgid "notes"
 msgstr "notatki"
 
-#: models/project.py:17 templates/catalogue/book_list/book_list.html:66
-#: templates/catalogue/image_table.html:60
+#: models/project.py:17 templates/documents/book_list/book_list.html:66
+#: templates/documents/image_table.html:60
 msgid "project"
 msgstr "projekt"
 
 msgid "project"
 msgstr "projekt"
 
@@ -154,7 +162,7 @@ msgid "time"
 msgstr "czas"
 
 #: models/publish_log.py:17 models/publish_log.py:45
 msgstr "czas"
 
 #: models/publish_log.py:17 models/publish_log.py:45
-#: templates/catalogue/wall.html:20
+#: templates/documents/wall.html:20
 msgid "user"
 msgstr "użytkownik"
 
 msgid "user"
 msgstr "użytkownik"
 
@@ -186,185 +194,178 @@ msgstr "zapis publikacji obrazu"
 msgid "image publish records"
 msgstr "zapisy publikacji obrazów"
 
 msgid "image publish records"
 msgstr "zapisy publikacji obrazów"
 
-#: templates/catalogue/active_users_list.html:5
+#: templates/documents/active_users_list.html:5
 msgid "Active users"
 msgstr "Aktywni użytkownicy"
 
 msgid "Active users"
 msgstr "Aktywni użytkownicy"
 
-#: templates/catalogue/active_users_list.html:11
+#: templates/documents/active_users_list.html:11
 msgid "Users active in the year"
 msgstr "Użytkownicy aktywni w roku"
 
 msgid "Users active in the year"
 msgstr "Użytkownicy aktywni w roku"
 
-#: templates/catalogue/activity.html:6 templates/catalogue/activity.html:15
-#: templatetags/catalogue.py:30
+#: templates/documents/activity.html:6 templates/documents/activity.html:15
+#: templatetags/documents.py:30
 msgid "Activity"
 msgstr "Aktywność"
 
 msgid "Activity"
 msgstr "Aktywność"
 
-#: templates/catalogue/base.html:13
+#: templates/documents/base.html:13
 msgid "Platforma Redakcyjna"
 msgstr "Platforma Redakcyjna"
 
 msgid "Platforma Redakcyjna"
 msgstr "Platforma Redakcyjna"
 
-#: templates/catalogue/book_append_to.html:5
-#: templates/catalogue/book_append_to.html:14
+#: templates/documents/book_append_to.html:5
+#: templates/documents/book_append_to.html:14
 msgid "Append book"
 msgstr "Dołącz książkę"
 
 msgid "Append book"
 msgstr "Dołącz książkę"
 
-#: templates/catalogue/book_detail.html:23
-#: templates/catalogue/book_edit.html:13 templates/catalogue/chunk_edit.html:22
-#: templates/catalogue/image_detail.html:22
+#: templates/documents/book_detail.html:24
+#: templates/documents/book_edit.html:13 templates/documents/chunk_edit.html:22
+#: templates/documents/image_detail.html:22
 msgid "Save"
 msgstr "Zapisz"
 
 msgid "Save"
 msgstr "Zapisz"
 
-#: templates/catalogue/book_detail.html:30
+#: templates/documents/book_detail.html:31
 msgid "Edit gallery"
 msgstr "Edytuj galerię"
 
 msgid "Edit gallery"
 msgstr "Edytuj galerię"
 
-#: templates/catalogue/book_detail.html:33
+#: templates/documents/book_detail.html:34
 msgid "Append to other book"
 msgstr "Dołącz do innej książki"
 
 msgid "Append to other book"
 msgstr "Dołącz do innej książki"
 
-#: templates/catalogue/book_detail.html:40
+#: templates/documents/book_detail.html:49
 msgid "Chunks"
 msgstr "Części"
 
 msgid "Chunks"
 msgstr "Części"
 
-#: templates/catalogue/book_detail.html:58
-#: templates/catalogue/image_detail.html:47 templatetags/wall.py:108
+#: templates/documents/book_detail.html:67
+#: templates/documents/image_detail.html:47 templatetags/wall.py:108
 #: templatetags/wall.py:129
 msgid "Publication"
 msgstr "Publikacja"
 
 #: templatetags/wall.py:129
 msgid "Publication"
 msgstr "Publikacja"
 
-#: templates/catalogue/book_detail.html:69
-#: templates/catalogue/image_detail.html:51
+#: templates/documents/book_detail.html:85
+#: templates/documents/image_detail.html:51
 msgid "Last published"
 msgstr "Ostatnio opublikowano"
 
 msgid "Last published"
 msgstr "Ostatnio opublikowano"
 
-#: templates/catalogue/book_detail.html:79
+#: templates/documents/book_detail.html:95
 msgid "Full XML"
 msgstr "Pełny XML"
 
 msgid "Full XML"
 msgstr "Pełny XML"
 
-#: templates/catalogue/book_detail.html:80
+#: templates/documents/book_detail.html:96
 msgid "HTML version"
 msgstr "Wersja HTML"
 
 msgid "HTML version"
 msgstr "Wersja HTML"
 
-#: templates/catalogue/book_detail.html:81
+#: templates/documents/book_detail.html:97
 msgid "TXT version"
 msgstr "Wersja TXT"
 
 msgid "TXT version"
 msgstr "Wersja TXT"
 
-#: templates/catalogue/book_detail.html:82
+#: templates/documents/book_detail.html:98
 msgid "PDF version"
 msgstr "Wersja PDF"
 
 msgid "PDF version"
 msgstr "Wersja PDF"
 
-#: templates/catalogue/book_detail.html:83
+#: templates/documents/book_detail.html:99
 msgid "PDF version for mobiles"
 msgstr "Wersja PDF na telefony"
 
 msgid "PDF version for mobiles"
 msgstr "Wersja PDF na telefony"
 
-#: templates/catalogue/book_detail.html:84
+#: templates/documents/book_detail.html:100
 msgid "EPUB version"
 msgstr "Wersja EPUB"
 
 msgid "EPUB version"
 msgstr "Wersja EPUB"
 
-#: templates/catalogue/book_detail.html:85
+#: templates/documents/book_detail.html:101
 msgid "MOBI version"
 msgstr "Wersja MOBI"
 
 msgid "MOBI version"
 msgstr "Wersja MOBI"
 
-#: templates/catalogue/book_detail.html:99
-#: templates/catalogue/image_detail.html:70
+#: templates/documents/book_detail.html:115
+#: templates/documents/image_detail.html:70
 msgid "Publish"
 msgstr "Opublikuj"
 
 msgid "Publish"
 msgstr "Opublikuj"
 
-#: templates/catalogue/book_detail.html:103
-#: templates/catalogue/image_detail.html:74
+#: templates/documents/book_detail.html:119
+#: templates/documents/image_detail.html:74
 msgid "Log in to publish."
 msgstr "Zaloguj się, aby opublikować."
 
 msgid "Log in to publish."
 msgstr "Zaloguj się, aby opublikować."
 
-#: templates/catalogue/book_detail.html:106
-#: templates/catalogue/image_detail.html:77
+#: templates/documents/book_detail.html:122
+#: templates/documents/image_detail.html:77
 msgid "This book can't be published yet, because:"
 msgstr "Ta książka nie może jeszcze zostać opublikowana. Powód:"
 
 msgid "This book can't be published yet, because:"
 msgstr "Ta książka nie może jeszcze zostać opublikowana. Powód:"
 
-#: templates/catalogue/book_edit.html:5
+#: templates/documents/book_edit.html:5
 msgid "Edit book"
 msgstr "Edytuj książkę"
 
 msgid "Edit book"
 msgstr "Edytuj książkę"
 
-#: templates/catalogue/book_html.html:12 templates/catalogue/book_text.html:15
+#: templates/documents/book_html.html:12 templates/documents/book_text.html:15
 msgid "Table of contents"
 msgstr "Spis treści"
 
 msgid "Table of contents"
 msgstr "Spis treści"
 
-#: templates/catalogue/book_html.html:13 templates/catalogue/book_text.html:17
+#: templates/documents/book_html.html:13 templates/documents/book_text.html:17
 msgid "Edit. note"
 msgstr "Nota red."
 
 msgid "Edit. note"
 msgstr "Nota red."
 
-#: templates/catalogue/book_html.html:14
+#: templates/documents/book_html.html:14
 msgid "Infobox"
 msgstr "Informacje"
 
 msgid "Infobox"
 msgstr "Informacje"
 
-#: templates/catalogue/book_list/book.html:8
-#: templates/catalogue/book_list/book.html:36
+#: templates/documents/book_list/book.html:8
+#: templates/documents/book_list/book.html:35
 msgid "Book settings"
 msgstr "Ustawienia książki"
 
 msgid "Book settings"
 msgstr "Ustawienia książki"
 
-#: templates/catalogue/book_list/book.html:9
-#: templates/catalogue/book_list/chunk.html:7
-#: templates/catalogue/chunk_edit.html:6 templates/catalogue/chunk_edit.html:12
+#: templates/documents/book_list/book.html:9
+#: templates/documents/book_list/chunk.html:7
+#: templates/documents/chunk_edit.html:6 templates/documents/chunk_edit.html:12
 msgid "Chunk settings"
 msgstr "Ustawienia części"
 
 msgid "Chunk settings"
 msgstr "Ustawienia części"
 
-#: templates/catalogue/book_list/book.html:12
-#: templates/catalogue/book_list/chunk.html:9
-#: templates/catalogue/image_short.html:9
-msgid "Edit:"
-msgstr "Edytuj:"
-
-#: templates/catalogue/book_list/book.html:21
-#: templates/catalogue/book_list/book.html:43
-#: templates/catalogue/image_short.html:18 templatetags/book_list.py:82
+#: templates/documents/book_list/book.html:20
+#: templates/documents/book_list/book.html:42
+#: templates/documents/image_short.html:17 templatetags/book_list.py:82
 #: templatetags/book_list.py:150
 msgid "published"
 msgstr "opublikowane"
 
 #: templatetags/book_list.py:150
 msgid "published"
 msgstr "opublikowane"
 
-#: templates/catalogue/book_list/book.html:24
-#: templates/catalogue/book_list/book.html:46
-#: templates/catalogue/book_list/chunk.html:28
-#: templates/catalogue/image_short.html:21 templatetags/book_list.py:80
+#: templates/documents/book_list/book.html:23
+#: templates/documents/book_list/book.html:45
+#: templates/documents/image_short.html:20 templatetags/book_list.py:80
 #: templatetags/book_list.py:148
 msgid "publishable"
 msgstr "do publikacji"
 
 #: templatetags/book_list.py:148
 msgid "publishable"
 msgstr "do publikacji"
 
-#: templates/catalogue/book_list/book.html:27
-#: templates/catalogue/book_list/chunk.html:33
-#: templates/catalogue/image_short.html:24 templatetags/book_list.py:81
+#: templates/documents/book_list/book.html:26
+#: templates/documents/book_list/chunk.html:26
+#: templates/documents/image_short.html:23 templatetags/book_list.py:81
 #: templatetags/book_list.py:149
 msgid "changed"
 msgstr "zmienione"
 
 #: templatetags/book_list.py:149
 msgid "changed"
 msgstr "zmienione"
 
-#: templates/catalogue/book_list/book_list.html:29
-#: templates/catalogue/image_table.html:25
+#: templates/documents/book_list/book_list.html:29
+#: templates/documents/image_table.html:25
 msgid "Search in book titles"
 msgstr "Szukaj w tytułach książek"
 
 msgid "Search in book titles"
 msgstr "Szukaj w tytułach książek"
 
-#: templates/catalogue/book_list/book_list.html:34
-#: templates/catalogue/image_table.html:30
+#: templates/documents/book_list/book_list.html:34
+#: templates/documents/image_table.html:30
 msgid "stage"
 msgstr "etap"
 
 msgid "stage"
 msgstr "etap"
 
-#: templates/catalogue/book_list/book_list.html:36
-#: templates/catalogue/book_list/book_list.html:47
-#: templates/catalogue/book_list/book_list.html:68
-#: templates/catalogue/image_table.html:32
-#: templates/catalogue/image_table.html:43
-#: templates/catalogue/image_table.html:62
+#: templates/documents/book_list/book_list.html:36
+#: templates/documents/book_list/book_list.html:47
+#: templates/documents/book_list/book_list.html:68
+#: templates/documents/image_table.html:32
+#: templates/documents/image_table.html:43
+#: templates/documents/image_table.html:62
 msgid "none"
 msgstr "brak"
 
 msgid "none"
 msgstr "brak"
 
-#: templates/catalogue/book_list/book_list.html:45
-#: templates/catalogue/image_table.html:41
+#: templates/documents/book_list/book_list.html:45
+#: templates/documents/image_table.html:41
 msgid "editor"
 msgstr "redaktor"
 
 msgid "editor"
 msgstr "redaktor"
 
-#: templates/catalogue/book_list/book_list.html:58
-#: templates/catalogue/image_table.html:52
+#: templates/documents/book_list/book_list.html:58
+#: templates/documents/image_table.html:52
 msgid "status"
 msgstr "status"
 
 msgid "status"
 msgstr "status"
 
-#: templates/catalogue/book_list/book_list.html:92
+#: templates/documents/book_list/book_list.html:92
 #, python-format
 msgid "%(c)s book"
 msgid_plural "%(c)s books"
 #, python-format
 msgid "%(c)s book"
 msgid_plural "%(c)s books"
@@ -372,73 +373,73 @@ msgstr[0] "%(c)s książka"
 msgstr[1] "%(c)s książki"
 msgstr[2] "%(c)s książek"
 
 msgstr[1] "%(c)s książki"
 msgstr[2] "%(c)s książek"
 
-#: templates/catalogue/book_list/book_list.html:96
+#: templates/documents/book_list/book_list.html:96
 msgid "No books found."
 msgstr "Nie znaleziono książek."
 
 msgid "No books found."
 msgstr "Nie znaleziono książek."
 
-#: templates/catalogue/book_list/book_list.html:105
-#: templates/catalogue/image_table.html:87
+#: templates/documents/book_list/book_list.html:105
+#: templates/documents/image_table.html:87
 msgid "Set stage"
 msgstr "Ustaw etap"
 
 msgid "Set stage"
 msgstr "Ustaw etap"
 
-#: templates/catalogue/book_list/book_list.html:106
-#: templates/catalogue/image_table.html:88
+#: templates/documents/book_list/book_list.html:106
+#: templates/documents/image_table.html:88
 msgid "Set user"
 msgstr "Przypisz redaktora"
 
 msgid "Set user"
 msgstr "Przypisz redaktora"
 
-#: templates/catalogue/book_list/book_list.html:108
-#: templates/catalogue/image_table.html:90
+#: templates/documents/book_list/book_list.html:108
+#: templates/documents/image_table.html:90
 msgid "Project"
 msgstr "Projekt"
 
 msgid "Project"
 msgstr "Projekt"
 
-#: templates/catalogue/book_list/book_list.html:109
-#: templates/catalogue/image_table.html:91
+#: templates/documents/book_list/book_list.html:109
+#: templates/documents/image_table.html:91
 msgid "More users"
 msgstr "Więcej użytkowników"
 
 msgid "More users"
 msgstr "Więcej użytkowników"
 
-#: templates/catalogue/book_text.html:7
+#: templates/documents/book_text.html:7
 msgid "Redakcja"
 msgstr ""
 
 msgid "Redakcja"
 msgstr ""
 
-#: templates/catalogue/chunk_add.html:6 templates/catalogue/chunk_add.html:12
-#: templates/catalogue/chunk_edit.html:29
+#: templates/documents/chunk_add.html:6 templates/documents/chunk_add.html:12
+#: templates/documents/chunk_edit.html:29
 msgid "Split chunk"
 msgstr "Podziel część"
 
 msgid "Split chunk"
 msgstr "Podziel część"
 
-#: templates/catalogue/chunk_add.html:19
+#: templates/documents/chunk_add.html:19
 msgid "Insert empty chunk after"
 msgstr "Wstaw pustą część po"
 
 msgid "Insert empty chunk after"
 msgstr "Wstaw pustą część po"
 
-#: templates/catalogue/chunk_add.html:23
+#: templates/documents/chunk_add.html:23
 msgid "Add chunk"
 msgstr "Dodaj część"
 
 msgid "Add chunk"
 msgstr "Dodaj część"
 
-#: templates/catalogue/chunk_edit.html:19
+#: templates/documents/chunk_edit.html:19
 msgid "Book"
 msgstr "Książka"
 
 msgid "Book"
 msgstr "Książka"
 
-#: templates/catalogue/document_create_missing.html:6
-#: templates/catalogue/document_create_missing.html:12
+#: templates/documents/document_create_missing.html:6
+#: templates/documents/document_create_missing.html:12
 msgid "Create a new book"
 msgstr "Utwórz nową książkę"
 
 msgid "Create a new book"
 msgstr "Utwórz nową książkę"
 
-#: templates/catalogue/document_create_missing.html:21
+#: templates/documents/document_create_missing.html:21
 msgid "Create book"
 msgstr "Utwórz książkę"
 
 msgid "Create book"
 msgstr "Utwórz książkę"
 
-#: templates/catalogue/document_list.html:7
+#: templates/documents/document_list.html:7
 msgid "Book list"
 msgstr "Lista książek"
 
 msgid "Book list"
 msgstr "Lista książek"
 
-#: templates/catalogue/document_upload.html:6
+#: templates/documents/document_upload.html:6
 msgid "Bulk document upload"
 msgstr "Hurtowe dodawanie dokumentów"
 
 msgid "Bulk document upload"
 msgstr "Hurtowe dodawanie dokumentów"
 
-#: templates/catalogue/document_upload.html:14
+#: templates/documents/document_upload.html:14
 msgid "Bulk documents upload"
 msgstr "Hurtowe dodawanie dokumentów"
 
 msgid "Bulk documents upload"
 msgstr "Hurtowe dodawanie dokumentów"
 
-#: templates/catalogue/document_upload.html:19
+#: templates/documents/document_upload.html:19
 msgid ""
 "Please submit a ZIP with UTF-8 encoded XML files. Files not ending with "
 "<code>.xml</code> will be ignored."
 msgid ""
 "Please submit a ZIP with UTF-8 encoded XML files. Files not ending with "
 "<code>.xml</code> will be ignored."
@@ -446,69 +447,57 @@ msgstr ""
 "Proszę wskazać archiwum ZIP z plikami XML w kodowaniu UTF-8. Pliki nie "
 "kończące się na <code>.xml</code> zostaną zignorowane."
 
 "Proszę wskazać archiwum ZIP z plikami XML w kodowaniu UTF-8. Pliki nie "
 "kończące się na <code>.xml</code> zostaną zignorowane."
 
-#: templates/catalogue/document_upload.html:26
-#: templates/catalogue/upload_pdf.html:16 templatetags/catalogue.py:37
+#: templates/documents/document_upload.html:26
+#: templates/documents/upload_pdf.html:16 templatetags/documents.py:37
 msgid "Upload"
 msgstr "Załaduj"
 
 msgid "Upload"
 msgstr "Załaduj"
 
-#: templates/catalogue/document_upload.html:34
+#: templates/documents/document_upload.html:34
 msgid ""
 "There have been some errors. No files have been added to the repository."
 msgstr "Wystąpiły błędy. Żadne pliki nie zostały dodane do repozytorium."
 
 msgid ""
 "There have been some errors. No files have been added to the repository."
 msgstr "Wystąpiły błędy. Żadne pliki nie zostały dodane do repozytorium."
 
-#: templates/catalogue/document_upload.html:35
+#: templates/documents/document_upload.html:35
 msgid "Offending files"
 msgstr "Błędne pliki"
 
 msgid "Offending files"
 msgstr "Błędne pliki"
 
-#: templates/catalogue/document_upload.html:43
+#: templates/documents/document_upload.html:43
 msgid "Correct files"
 msgstr "Poprawne pliki"
 
 msgid "Correct files"
 msgstr "Poprawne pliki"
 
-#: templates/catalogue/document_upload.html:54
+#: templates/documents/document_upload.html:54
 msgid "Files have been successfully uploaded to the repository."
 msgstr "Pliki zostały dodane do repozytorium."
 
 msgid "Files have been successfully uploaded to the repository."
 msgstr "Pliki zostały dodane do repozytorium."
 
-#: templates/catalogue/document_upload.html:55
+#: templates/documents/document_upload.html:55
 msgid "Uploaded files"
 msgstr "Dodane pliki"
 
 msgid "Uploaded files"
 msgstr "Dodane pliki"
 
-#: templates/catalogue/document_upload.html:65
+#: templates/documents/document_upload.html:65
 msgid "Skipped files"
 msgstr "Pominięte pliki"
 
 msgid "Skipped files"
 msgstr "Pominięte pliki"
 
-#: templates/catalogue/document_upload.html:66
+#: templates/documents/document_upload.html:66
 msgid "Files skipped due to no <code>.xml</code> extension"
 msgstr "Pliki pominięte z powodu braku rozszerzenia <code>.xml</code>."
 
 msgid "Files skipped due to no <code>.xml</code> extension"
 msgstr "Pliki pominięte z powodu braku rozszerzenia <code>.xml</code>."
 
-#: templates/catalogue/head_login.html:10
-msgid "Admin"
-msgstr "Administracja"
-
-#: templates/catalogue/head_login.html:15
-msgid "Log Out"
-msgstr "Wyloguj"
-
-#: templates/catalogue/head_login.html:21
-msgid "Log In"
-msgstr "Zaloguj"
-
-#: templates/catalogue/image_detail.html:34
+#: templates/documents/image_detail.html:34
 msgid "Editor"
 msgstr "Edytor"
 
 msgid "Editor"
 msgstr "Edytor"
 
-#: templates/catalogue/image_detail.html:38
+#: templates/documents/image_detail.html:38
 msgid "Proceed to the editor."
 msgstr "Przejdź do edytora."
 
 msgid "Proceed to the editor."
 msgstr "Przejdź do edytora."
 
-#: templates/catalogue/image_list.html:8
+#: templates/documents/image_list.html:8
 msgid "Image list"
 msgstr "Lista obrazów"
 
 msgid "Image list"
 msgstr "Lista obrazów"
 
-#: templates/catalogue/image_short.html:6
+#: templates/documents/image_short.html:6
 msgid "Image settings"
 msgstr "Ustawienia obrazu"
 
 msgid "Image settings"
 msgstr "Ustawienia obrazu"
 
-#: templates/catalogue/image_table.html:79
+#: templates/documents/image_table.html:79
 #, python-format
 msgid "%(c)s image"
 msgid_plural "%(c)s images"
 #, python-format
 msgid "%(c)s image"
 msgid_plural "%(c)s images"
@@ -516,36 +505,36 @@ msgstr[0] "%(c)s obraz"
 msgstr[1] "%(c)s obrazy"
 msgstr[2] "%(c)s obrazów"
 
 msgstr[1] "%(c)s obrazy"
 msgstr[2] "%(c)s obrazów"
 
-#: templates/catalogue/image_table.html:81
+#: templates/documents/image_table.html:81
 msgid "No images found."
 msgstr "Nie znaleziono obrazów."
 
 msgid "No images found."
 msgstr "Nie znaleziono obrazów."
 
-#: templates/catalogue/my_page.html:15 templatetags/catalogue.py:28
+#: templates/documents/my_page.html:17 templatetags/documents.py:28
 msgid "My page"
 msgstr "Moja strona"
 
 msgid "My page"
 msgstr "Moja strona"
 
-#: templates/catalogue/my_page.html:25
+#: templates/documents/my_page.html:27
 msgid "Your last edited documents"
 msgstr "Twoje ostatnie edycje"
 
 msgid "Your last edited documents"
 msgstr "Twoje ostatnie edycje"
 
-#: templates/catalogue/my_page.html:45 templates/catalogue/user_page.html:18
+#: templates/documents/my_page.html:47 templates/documents/user_page.html:18
 msgid "Recent activity for"
 msgstr "Ostatnia aktywność dla:"
 
 msgid "Recent activity for"
 msgstr "Ostatnia aktywność dla:"
 
-#: templates/catalogue/upload_pdf.html:5 templates/catalogue/upload_pdf.html:11
+#: templates/documents/upload_pdf.html:5 templates/documents/upload_pdf.html:11
 msgid "PDF file upload"
 msgstr "Ładowanie pliku PDF"
 
 msgid "PDF file upload"
 msgstr "Ładowanie pliku PDF"
 
-#: templates/catalogue/user_list.html:7 templates/catalogue/user_list.html:14
-#: templatetags/catalogue.py:33
+#: templates/documents/user_list.html:7 templates/documents/user_list.html:14
+#: templatetags/documents.py:33
 msgid "Users"
 msgstr "Użytkownicy"
 
 msgid "Users"
 msgstr "Użytkownicy"
 
-#: templates/catalogue/wall.html:30
+#: templates/documents/wall.html:30
 msgid "not logged in"
 msgstr "nie zalogowany"
 
 msgid "not logged in"
 msgstr "nie zalogowany"
 
-#: templates/catalogue/wall.html:35
+#: templates/documents/wall.html:35
 msgid "No activity recorded."
 msgstr "Nie zanotowano aktywności."
 
 msgid "No activity recorded."
 msgstr "Nie zanotowano aktywności."
 
@@ -557,19 +546,19 @@ msgstr "nie opublikowane"
 msgid "empty"
 msgstr "puste"
 
 msgid "empty"
 msgstr "puste"
 
-#: templatetags/catalogue.py:31
+#: templatetags/documents.py:31
 msgid "All"
 msgstr "Wszystkie"
 
 msgid "All"
 msgstr "Wszystkie"
 
-#: templatetags/catalogue.py:32
+#: templatetags/documents.py:32
 msgid "Images"
 msgstr "Obrazy"
 
 msgid "Images"
 msgstr "Obrazy"
 
-#: templatetags/catalogue.py:36
+#: templatetags/documents.py:36
 msgid "Add"
 msgstr "Dodaj"
 
 msgid "Add"
 msgstr "Dodaj"
 
-#: templatetags/catalogue.py:39
+#: templatetags/documents.py:39
 msgid "Covers"
 msgstr "Okładki"
 
 msgid "Covers"
 msgstr "Okładki"
 
@@ -598,6 +587,18 @@ msgstr "Plik powinien mieć kodowanie UTF-8."
 msgid "scan gallery"
 msgstr "galeria skanów"
 
 msgid "scan gallery"
 msgstr "galeria skanów"
 
+#~ msgid "Edit:"
+#~ msgstr "Edytuj:"
+
+#~ msgid "Admin"
+#~ msgstr "Administracja"
+
+#~ msgid "Log Out"
+#~ msgstr "Wyloguj"
+
+#~ msgid "Log In"
+#~ msgstr "Zaloguj"
+
 #~ msgid "Active users since"
 #~ msgstr "Użytkownicy aktywni od"
 
 #~ msgid "Active users since"
 #~ msgstr "Użytkownicy aktywni od"
 
index e7c3481..24d0cea 100644 (file)
@@ -1,6 +1,7 @@
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
+from django.apps import apps
 from django.contrib.sites.models import Site
 from django.db import models, transaction
 from django.template.loader import render_to_string
 from django.contrib.sites.models import Site
 from django.db import models, transaction
 from django.template.loader import render_to_string
@@ -89,6 +90,11 @@ class Book(models.Model):
     def gallery_url(self):
         return '%s%s%s/' % (settings.MEDIA_URL, settings.IMAGE_DIR, self.gallery)
 
     def gallery_url(self):
         return '%s%s%s/' % (settings.MEDIA_URL, settings.IMAGE_DIR, self.gallery)
 
+    @property
+    def catalogue_book(self):
+        CBook = apps.get_model('catalogue', 'Book')
+        return CBook.objects.filter(slug=self.dc_slug).first()
+
     # Creating & manipulating
     # =======================
 
     # Creating & manipulating
     # =======================
 
index 3dbaf21..d9b06c7 100644 (file)
@@ -13,7 +13,8 @@
       <h1>{{ book.title }}</h1>
     </div>
     <div class="card-body">
       <h1>{{ book.title }}</h1>
     </div>
     <div class="card-body">
-    
+      <div class="row">
+       <div class="col-md-8">
 
 
 {% if editable %}<form method='POST'>{% csrf_token %}{% endif %}
 
 
 {% if editable %}<form method='POST'>{% csrf_token %}{% endif %}
 
     <p style="text-align:right"><a class="btn btn-sm btn-danger" href="{% url 'documents_book_append' book.slug %}">{% trans "Append to other book" %}</a></p>
 {% endif %}
 
     <p style="text-align:right"><a class="btn btn-sm btn-danger" href="{% url 'documents_book_append' book.slug %}">{% trans "Append to other book" %}</a></p>
 {% endif %}
+
+
+       </div>
+       <div class="col-md-4">
+         W katalogu:
+         {{ book.catalogue_book }}
+       </div>
+      </div>
     </div>
     </div>
-    </div>
+  </div>
 
   <div class="card mt-4">
     <div class="card-header">
 
   <div class="card mt-4">
     <div class="card-header">
@@ -73,7 +82,7 @@ Okładka w rozmiarze
 </form>
 </div>
 <div class="col-lg-9">
 </form>
 </div>
 <div class="col-lg-9">
-<p>{% trans "Last published" %}: 
+<p>{% trans "Last published" %}:
     {% if book.last_published %}
         {{ book.last_published }}
     {% else %}
     {% if book.last_published %}
         {{ book.last_published }}
     {% else %}
index af8b4f2..fe2193e 100644 (file)
@@ -1,7 +1,8 @@
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.conf.urls import include, url
+from django.conf.urls import url
+from django.urls import include, path
 from django.contrib import admin
 from django.conf import settings
 from django.conf.urls.static import static
 from django.contrib import admin
 from django.conf import settings
 from django.conf.urls.static import static
@@ -18,7 +19,7 @@ urlpatterns = [
     # Admin panel
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     url(r'^admin/', admin.site.urls),
     # Admin panel
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     url(r'^admin/', admin.site.urls),
-
+    path('catalogue/', include('catalogue.urls')),
     url(r'^$', RedirectView.as_view(url='/documents/', permanent=False)),
     url(r'^documents/', include('documents.urls')),
     url(r'^apiclient/', include('apiclient.urls')),
     url(r'^$', RedirectView.as_view(url='/documents/', permanent=False)),
     url(r'^documents/', include('documents.urls')),
     url(r'^apiclient/', include('apiclient.urls')),