Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
cbd489a
Phase 0: Multi-hosted foundation — Site-Uczelnia linkage and middleware
mpasternak Apr 8, 2026
5026ab5
Phase 1: Migrate Constance settings to Uczelnia model fields
mpasternak Apr 8, 2026
456b1ca
Phase 2: Admin panel multi-site filtering
mpasternak Apr 8, 2026
cc6b84e
Phase 3: PBN per-institution models get Uczelnia FK
mpasternak Apr 8, 2026
e36fd40
Phase 5: Cache key namespacing for multi-site
mpasternak Apr 9, 2026
df6cca9
Phase 4 + 6.1: Replace get_default() in tasks, commands, and views
mpasternak Apr 9, 2026
252a404
Phase 6.2-6.4: Add uczelnia parameter to models and PBN utilities
mpasternak Apr 9, 2026
317f3ce
Phase 7: Make SITE_ID configurable, optional static-sitemaps
mpasternak Apr 9, 2026
b6b6132
Add multi-site test infrastructure and isolation tests
mpasternak Apr 9, 2026
33dabf2
Miniblog: M2M Article↔Uczelnia + per-uczelnia browse filtering
mpasternak Apr 9, 2026
ec7087c
PBN Queue uczelnia FK, deduplikator superuser-only, rozbieżności TODO
mpasternak Apr 9, 2026
b0d314a
Rozbieżności per-uczelnia filtering + autocomplete per-uczelnia
mpasternak Apr 9, 2026
dd03881
E2E multi-site isolation tests + fix browse queryset paths
mpasternak Apr 9, 2026
a8e14a1
Refactor accessible_sites → accessible_uczelnie (M2M to Uczelnia)
mpasternak Apr 12, 2026
68e9cf7
Merge migrations po rebase na dev
mpasternak Apr 28, 2026
3cf0210
ranking_autorow: get_for_request w get_context_data i get_table_kwargs
mpasternak Apr 28, 2026
09dadf9
Merge dev (eb1a124e3) into feature/multi-hosted-config
mpasternak Apr 28, 2026
5cc32d4
Fix testowe regresje po rebase'ie na dev
mpasternak Apr 28, 2026
677c7eb
Merge dev (df1c3eed1) — fix django_pg_baseline test import
mpasternak Apr 28, 2026
67ee777
Uczelnia.site obowiązkowe + 4 bugfixy lookup-em uczelni
mpasternak Apr 28, 2026
2f37697
miniblog: lazy resolution — pusty M2M = wszędzie
mpasternak Apr 28, 2026
829616f
ci(docker): wywal mechanizm .docker-build z workflow
mpasternak Apr 27, 2026
316e933
ci(docker): buduj PR/feature push tylko gdy actor=mpasternak
mpasternak Apr 27, 2026
c2c7a05
DJANGO_BPP_HOSTNAMES (csv) — multi-host ALLOWED_HOSTS / CSRF
mpasternak Apr 28, 2026
258144f
HOSTNAME/HOSTNAMES: walidacja XOR + per-vhost info w Rollbarze
mpasternak Apr 28, 2026
9d853c8
Site URL per-request — fix multi-host site URLs w 5 ekspoertach XLSX
mpasternak Apr 28, 2026
f4c74f2
Import wydziałów/jednostek z XLSX przez admin (django-import-export)
mpasternak Apr 28, 2026
c08498f
Merge branch 'dev' into feature/multi-hosted-config
mpasternak May 2, 2026
fc05b8d
AutorAutocomplete: 3 optgroupy zamiast filtra per-uczelnia
mpasternak May 2, 2026
9ea3acc
Merge branch 'dev' into feature/multi-hosted-config
mpasternak May 3, 2026
efee40f
Merge origin/dev into feature/multi-hosted-config
mpasternak May 21, 2026
60b781b
fix(tests): napraw 5+3 regresji po merge'u dev (siteblog API + Uczeln…
mpasternak May 21, 2026
e97e7b2
fix(demo_data): ensure_uczelnia ustawia site na pierwszy Site (Uczeln…
mpasternak May 21, 2026
9493e83
Merge remote-tracking branch 'origin/dev' into feature/multi-hosted-c…
mpasternak May 21, 2026
9add55c
feat(university-themes): nowe motywy uczelni MWSL/UAFM/VIZJA + brand …
mpasternak May 21, 2026
dadca2c
docs: usun pozostalosci po Sphinxie po migracji na MkDocs
mpasternak May 21, 2026
822db2e
fix(ci+docker): napraw hint check-flag dla PR + usun stale COPY notif…
mpasternak May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .env.docker
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,17 @@ STATIC_ROOT=/staticroot
DEBUG=true

# DJANGO_BPP_DB_PASSWORD=""

# Hostname (single-host deployment, backward compat).
# Dla multi-hosted użyj DJANGO_BPP_HOSTNAMES (poniżej) i pomiń tę zmienną.
DJANGO_BPP_HOSTNAME="bpp.localnet"

# Multi-hosted: comma-separated lista nazw hostów (jedna instalacja BPP
# obsługuje wiele uczelni/domen). Pierwsza pozycja jest używana jako
# canonical hostname (m.in. identyfikacja deployment'u w Rollbarze).
# Jeśli ustawisz DJANGO_BPP_HOSTNAMES, DJANGO_BPP_HOSTNAME jest ignorowany.
# Przykład:
# DJANGO_BPP_HOSTNAMES="bpp.uczelnia1.pl,bpp.uczelnia2.pl"
DJANGO_BPP_SECRET_KEY="ZMIEN_KONIECZNIE_PRZED_URUCHOMIENIEM_PRODUKCJI"

DJANGO_BPP_DB_NAME="bpp"
Expand Down
13 changes: 13 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
# Moduł ustawień Django (w docker-compose devowym używamy settings.local).
# DJANGO_SETTINGS_MODULE="django_bpp.settings.local"

#
# Konfiguracja hostów
#

# Single-host (backward compat). Pojedyncza nazwa hosta serwowanego przez BPP.
# DJANGO_BPP_HOSTNAME="bpp.example.org"

# Multi-hosted: comma-separated lista nazw hostów (jedna instalacja BPP
# obsługuje wiele uczelni/domen). Pierwsza pozycja jest używana jako
# canonical hostname (m.in. identyfikacja deployment'u w Rollbarze).
# Jeśli ustawisz DJANGO_BPP_HOSTNAMES, DJANGO_BPP_HOSTNAME jest ignorowany.
# DJANGO_BPP_HOSTNAMES="bpp.uczelnia1.pl,bpp.uczelnia2.pl"

# Jeżeli w pliku konfiguracyjnym podany zostanie URI do serwera LDAP,
# włączona zostanie autoryzacja LDAP. Będzie ona miała pierwszeństwo
# wobec autoryzacji z serwera bazowego tzn z bazy danych.
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/build-docker-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REF_NAME: ${{ github.ref_name }}
# head_ref jest ustawione tylko dla pull_request eventów — to nazwa
# branchu zrodlowego PR-a (ref_name na PR to "<PR>/merge" ktorego
# workflow_dispatch nie akceptuje). Uzywane do hintu w komunikacie
# "jak wymusic build".
HEAD_REF: ${{ github.head_ref }}
EVENT_NAME: ${{ github.event_name }}
REPO: ${{ github.repository }}
ACTOR: ${{ github.actor }}
Expand Down Expand Up @@ -165,7 +170,8 @@ jobs:
else
echo "should_build=false" >> "$GITHUB_OUTPUT"
echo "::notice::Pomijam Docker build — brak flagi [docker-build] w commit message"
echo "::notice::Aby wymusic build, dodaj [docker-build] do commit message lub uruchom: gh workflow run build-docker-images.yml --ref ${REF_NAME}"
DISPATCH_REF="${HEAD_REF:-$REF_NAME}"
echo "::notice::Aby wymusic build, dodaj [docker-build] do commit message lub uruchom: gh workflow run build-docker-images.yml --ref ${DISPATCH_REF}"
fi

docker:
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ jobs:

steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
Expand Down
24 changes: 22 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,23 @@ repos:
# diff-y indentacji na pre-commit, blokujac niezmienione pliki).
args: ["--lint"]
files: \.html$
exclude: ^(node_modules/|.*/migrations/|.*/staticroot/|src/django_bpp/static/500\.html$|src/bpp/static/500\.html$)
# Tech-debt z dev (dochodzi w merge'u origin/dev): templaty
# z wzorcem `{% if %}<a>{% else %}<a>{% endif %}content</a>`
# ktorego djlint nie potrafi sparsowac (H025 orphan tags) +
# pojedyncze H020 empty-tag. Pre-existing na dev, follow-up
# PR rozwiaze refactorem href-y do jednego wezla
# `<a href="?{% if x %}{{x}}&{% endif %}sort=...">`.
exclude: |
(?x)^(
node_modules/
| .*/migrations/
| .*/staticroot/
| src/django_bpp/static/500\.html$
| src/bpp/static/500\.html$
| src/rozbieznosci_if/templates/rozbieznosci_if/index\.html$
| src/rozbieznosci_pk/templates/rozbieznosci_pk/index\.html$
| src/snapshot_odpiec/templates/snapshot_odpiec/snapshotodpiec_list\.html$
)

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: 'v6.0.0'
Expand All @@ -35,7 +51,11 @@ repos:
# base file. PyYAML's safe loader doesn't know
# Compose-specific tags, so check-yaml chokes on a file
# that `docker compose config` parses fine.
exclude: ^docker-compose\.test\.ci\.yml$
#
# mkdocs.yml uses pymdownx.slugs.slugify Python object via
# `!!python/object/apply:` tag — same problem, MkDocs's own
# loader handles it but PyYAML safe loader nie umie.
exclude: ^(docker-compose\.test\.ci\.yml|mkdocs\.yml)$
- id: check-toml
- id: end-of-file-fixer
exclude: ^baseline-sql/baseline\.sql$
Expand Down
2 changes: 1 addition & 1 deletion HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3012,7 +3012,7 @@ Poniżej znajduje się lista zmian w formacie sprzed używania narzędzia `townc

- usuń zbędny tekst "jest nadrzędną jednostką dla" (#1074)

- powiązania autorów z dyscyplinami z modułu redagowania:
- powiązania autorów z dyscyplinami z modułu redagowania:
- wyświetlają PBN UID i umożliwiają filtrowanie po nim (#1072),
- eksportują poprawnie wartość ORCID i PBN UID do formatu XLS/CSV (#1072),

Expand Down
1 change: 1 addition & 0 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ def pytest_configure(config):
# Load fixtures from submodules - must be at top-level conftest per pytest requirements
pytest_plugins = [
"fixtures.conftest_models",
"fixtures.conftest_multisite",
"fixtures.conftest_publications",
"fixtures.conftest_system",
"fixtures.conftest_browser",
Expand Down
7 changes: 5 additions & 2 deletions docker/bpp_base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,11 @@ COPY src/bpp/static/scss/ src/bpp/static/scss/
COPY src/bpp/static/bpp/scss/ src/bpp/static/bpp/scss/
# JS for esbuild bundle
COPY src/bpp/static/bpp/js/ src/bpp/static/bpp/js/
COPY src/notifications/static/notifications/js/ \
src/notifications/static/notifications/js/
# Notifications JS jest teraz dostarczane przez pakiet django-channels-broadcast
# (zainstalowany przez uv) — collectstatic w runtime stage zaciągnie pliki
# z venv-a. Stara apka src/notifications/ usunięta na dev w commicie
# 048c2cfa2 (refactor: usun src/notifications/ — dostarczane przez
# django-channels-broadcast).
# App-specific SCSS (keep alphabetical)
COPY src/bpp_setup_wizard/static/bpp_setup_wizard/scss/ \
src/bpp_setup_wizard/static/bpp_setup_wizard/scss/
Expand Down
1 change: 0 additions & 1 deletion docs/edycja_autor.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,3 @@ Algorytm ustalania aktualnego miejsca pracy działa w sposób następujący:
!!! warning

dany autor może mieć tylko jedno powiązanie oznaczone jako *Podstawowe miejsce pracy*.

1 change: 0 additions & 1 deletion docs/edycja_jednostka.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,3 @@ odznaczyć to pole.

W obecnym kształcie systemu BPP, pole to używane jest przy [imporcie pracowników](import_pracownikow.md)
przez procedurę [odpinania nieaktualnych miejsc pracy](import_pracownikow.md#odpinanie-nieaktualnych-miejsc-pracy).

1 change: 0 additions & 1 deletion docs/edycja_uczelnia.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,3 @@ następnie wybrać jednostkę w polu *Obca jednostka* i zapisać taki rekord.
!!! note

warto, aby *Obca jednostka* miała odznaczone [Pole *Skupia pracowników*](edycja_jednostka.md#pole-skupia-pracowników) oraz [Pole *Zarządzaj automatycznie*](edycja_jednostka.md#pole-zarządzaj-automatycznie)

7 changes: 3 additions & 4 deletions docs/import_pracownikow.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ głównego wybrać opcję operacje➡import pracowników.

## Kontrola dostępu

Dostęp do funkcji importu pracowników mają:
Dostęp do funkcji importu pracowników mają:
- członkowie grupy *wprowadzanie danych*
- superużytkownicy.

Expand All @@ -27,13 +27,13 @@ kodu źródłowego BPP -- [plik wzorcowy na GitHub](https://github.com/iplweb/bp

## Warunki importu danych

Warunkiem importu jest, aby:
Warunkiem importu jest, aby:
- każda jednostka występująca w pliku XLS miała jeden i tylko jeden pasujący po
nazwie odpowiednik po stronie systemu BPP,
- każdy autor występujący w pliku XLS miał jeden i tylko jeden pasujący do niego
odpowiednik, po kodzie ORCID lub po imieniu, nazwisku i tytule.

Import osób rozwiązany jest w ten sposób, ponieważ:
Import osób rozwiązany jest w ten sposób, ponieważ:
- format XLS oprogramowania [Egeria](https://egeria.comarch.pl) nie zawiera danych które jednoznacznie identyfikują jednostki,
stąd dopasowanie odbywa się po nazwie. W sytuacji, gdyby w pliku XLS znajdowały się
jednostki o choćby minimalnie róznej nazwie, system mógłby nie dopasować ich i utworzyć nowe
Expand Down Expand Up @@ -83,4 +83,3 @@ Powiązania Autor+Jednostka na takiej liście charakteryzują się następujący

procedura "odpinająca" miejsca pracy jest szczególnie przydatna, jeżeli chcemy mieć
zaktualizowane informacje dla pola — por. [Pole *Aktualne miejsce pracy* dla autora](edycja_autor.md#pole-aktualne-miejsce-pracy-dla-autora)

34 changes: 17 additions & 17 deletions docs/konfiguracja_pbn.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,56 +30,56 @@ W formularzu edycji uczelni/instytucji znajdziesz następujące pola związane z

### Podstawowe ustawienia API

**Adres API w PBN**
**Adres API w PBN**
- **Pole:** `pbn_api_root`
- **Domyślna wartość:** `https://pbn-micro-alpha.opi.org.pl`
- **Opis:** Adres serwera testowego API PBN. W wersji produkcyjnej należy ustawić `https://pbn.nauka.gov.pl/`
- **Format:** Pełny adres URL (np. `https://pbn-micro-alpha.opi.org.pl`)

**Nazwa aplikacji w PBN**
**Nazwa aplikacji w PBN**
- **Pole:** `pbn_app_name`
- **Wymagane:** Tak
- **Opis:** Identyfikator aplikacji otrzymany przy rejestracji w PBN
- **Maksymalna długość:** 128 znaków

**Token aplikacji w PBN**
**Token aplikacji w PBN**
- **Pole:** `pbn_app_token`
- **Wymagane:** Tak
- **Opis:** Token bezpieczeństwa aplikacji otrzymany z PBN
- **Maksymalna długość:** 128 znaków
- **Uwaga:** Pole to zawiera dane poufne

**Odpowiednik w PBN**
**Odpowiednik w PBN**
- **Pole:** `pbn_uid`
- **Opis:** Instytucja w bazie PBN odpowiadająca Twojej uczelni
- **Uwaga:** Pole to zostanie automatycznie wypełnione po zaimportowaniu danych instytucji z PBN

Opcje eksportu danych
--------------------

**Kasuj oświadczenia rekordu przed wysłaniem do PBN**
**Kasuj oświadczenia rekordu przed wysłaniem do PBN**
- **Pole:** `pbn_api_kasuj_przed_wysylka`
- **Domyślnie:** Nie zaznaczone
- **Opis:** Gdy zaznaczone, system usunie wszystkie istniejące oświadczenia publikacji w PBN przed przesłaniem nowych danych

**Nie wysyłaj do PBN prac z punktami MNISW = 0**
**Nie wysyłaj do PBN prac z punktami MNISW = 0**
- **Pole:** `pbn_api_nie_wysylaj_prac_bez_pk`
- **Domyślnie:** Nie zaznaczone
- **Opis:** Blokuje wysyłanie do PBN publikacji bez punktów MNiSW

**Wysyłaj prace bez oświadczeń**
**Wysyłaj prace bez oświadczeń**
- **Pole:** `pbn_wysylaj_bez_oswiadczen`
- **Domyślnie:** Nie zaznaczone
- **Opis:** Umożliwia wysyłanie do PBN publikacji bez oświadczeń dyscyplinowych. Takie publikacje trafiają do repozytorium PBN zamiast do systemu ewaluacyjnego i nie zawierają informacji o dyscyplinach naukowych autorów

**Wysyłaj zawsze PBN UID uczelni jako afiliację**
**Wysyłaj zawsze PBN UID uczelni jako afiliację**
- **Pole:** `pbn_api_afiliacja_zawsze_na_uczelnie`
- **Domyślnie:** Zaznaczone
- **Opis:** Gdy zaznaczone, wszystkie publikacje będą afiliowane do uczelni, a nie do konkretnych jednostek organizacyjnych;
zachowanie to jest obecnie domyślne - pole używane było w czasach, gdy publikacja mogła być afiliowana na konkretną
jednostkę uczelni/instytucji w PBN (na Klinikę, Dział, Katedrę itp...).

**Użytkownik BPP dla PBN API**
**Użytkownik BPP dla PBN API**
- **Pole:** `pbn_api_user`
- **Opis:** Użytkownik systemu BPP odpowiedzialny za automatyczne operacje z PBN wykonywane przez procesy systemowe
- **Uwaga:** Ten użytkownik musi wykonać autoryzację w PBN, aby umożliwić automatyczne operacje (w tle)
Expand Down Expand Up @@ -123,35 +123,35 @@ Po skonfigurowaniu integracji zaleca się import podstawowych danych słownikowy

## Typowe problemy i rozwiązania

**Problem:** Komunikat "Brak nazwy aplikacji dla API PBN"
**Problem:** Komunikat "Brak nazwy aplikacji dla API PBN"
- **Rozwiązanie:** Wypełnij pole "Nazwa aplikacji w PBN" w ustawieniach uczelni

**Problem:** Komunikat "Brak tokena aplikacji dla API PBN"
**Problem:** Komunikat "Brak tokena aplikacji dla API PBN"
- **Rozwiązanie:** Wypełnij pole "Token aplikacji w PBN" w ustawieniach uczelni

**Problem:** Komunikat "Token aplikacji PBN nieprawidłowy"
**Problem:** Komunikat "Token aplikacji PBN nieprawidłowy"
- **Rozwiązanie:** Sprawdź poprawność skopiowanego tokena w PBN, upewnij się że nie ma dodatkowych spacji

**Problem:** Komunikat "Najpierw wykonaj autoryzację w PBN API"
**Problem:** Komunikat "Najpierw wykonaj autoryzację w PBN API"
- **Rozwiązanie:** Wykonaj proces autoryzacji opisany w sekcji "Autoryzacja w systemie PBN"

**Problem:** Brak możliwości wysyłania publikacji do PBN
**Problem:** Brak możliwości wysyłania publikacji do PBN
- **Rozwiązanie:** Upewnij się, że pole "Odpowiednik w PBN" jest wypełnione i że wykonano autoryzację użytkownika

## Operacje na publikacjach

Po skonfigurowaniu integracji możesz:

**Wysyłać pojedyncze publikacje do PBN:**
**Wysyłać pojedyncze publikacje do PBN:**
1. Otwórz publikację w panelu administracyjnym
2. Użyj przycisku **Wyślij do PBN** (jeśli dostępny)
3. System automatycznie wyśle publikację i pobierze z powrotem dane wraz z PBN UID

**Importować dane publikacji z PBN:**
**Importować dane publikacji z PBN:**
- System może automatycznie pobierać informacje o publikacjach już istniejących w PBN
- Możliwe jest też pobieranie abstraktów i innych metadanych

**Zarządzać oświadczeniami dyscyplin:**
**Zarządzać oświadczeniami dyscyplin:**
- System automatycznie wysyła oświadczenia dotyczące dyscyplin naukowych autorów
- Możliwa jest również wysyłka samych oświadczeń bez całej publikacji

Expand Down
8 changes: 4 additions & 4 deletions docs/sloty.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@

System rozróżnia cztery rodzaje autorów w powiązaniach autor-dyscyplina:

**N - naukowiec w N**
**N - naukowiec w N**
- Wliczany do liczby N (parametr ewaluacyjny)
- Liczone są dla niego sloty
- Standardowy pracownik naukowy zaliczany do ewaluacji

**D - doktorant**
**D - doktorant**
- Nie jest wliczany do liczby N
- Liczone są dla niego sloty
- Osoba na studiach doktoranckich

**B - badawczy**
**B - badawczy**
- Nie jest wliczany do liczby N
- Liczone są dla niego sloty
- Pracownik o charakterze badawczym (np. post-doc, badacz bez etatu naukowego)

**Z - inny lub techniczny**
**Z - inny lub techniczny**
- Nie jest wliczany do liczby N
- Nie liczą się dla niego sloty
- Pracownik techniczny, administracyjny lub inny niebędący pracownikiem badawczym
Expand Down
2 changes: 1 addition & 1 deletion docs/usage_admin.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ formularza, następnie zaznacz lub odznacz opcję "Publiczny" i zapisz rekord
powiązań autor + rekord dla danego roku, dla danego autora - we wszystkich rekordach, które
mają „starą” subdyscyplinę - na pustą.

4. **usunięcie przypisania** autora do dyscypliny (rekord `Autor_Dyscyplina`) powoduje ustawienie
4. **usunięcie przypisania** autora do dyscypliny (rekord `Autor_Dyscyplina`) powoduje ustawienie
wartości pustej (`NULL`) dla danego roku, dla danego autora - we wszystkich rekordach, do
których przypisany jest dany autor.

Expand Down
8 changes: 8 additions & 0 deletions src/bpp/admin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,14 @@ class BppUserAdmin(UserAdmin):
"PBN API",
{"fields": ("przedstawiaj_w_pbn_jako",)},
),
(
"Dostęp do uczelni",
{
"fields": ("accessible_uczelnie",),
"description": "Superużytkownicy mają automatycznie dostęp "
"do wszystkich uczelni.",
},
),
)

autocomplete_fields = ["autor"]
Expand Down
3 changes: 3 additions & 0 deletions src/bpp/admin/autor.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
PBNIDObecnyFilter,
)
from .helpers.fieldsets import ADNOTACJE_FIELDSET, ZapiszZAdnotacjaMixin
from .helpers.site_filtered import SiteFilteredAdminMixin
from .helpers.widgets import CHARMAP_SINGLE_LINE
from .xlsx_export import resources
from .xlsx_export.mixins import EksportDanychMixin
Expand Down Expand Up @@ -190,13 +191,15 @@ class Meta:


class AutorAdmin(
SiteFilteredAdminMixin,
DjangoQLSearchMixin,
ZapiszZAdnotacjaMixin,
EksportDanychMixin,
BaseBppAdminMixin,
DynamicColumnsMixin,
admin.ModelAdmin,
):
uczelnia_field_path = "aktualna_jednostka__uczelnia"
djangoql_completion_enabled_by_default = False
djangoql_completion = True

Expand Down
3 changes: 2 additions & 1 deletion src/bpp/admin/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ def filter_count_view(self, request):
query_string = request.GET.urlencode()
query_hash = md5(query_string.encode()).hexdigest()
model_label = self.model._meta.label
cache_key = f"filter_count_{model_label}_{query_hash}"
site_pk = getattr(getattr(request, "site", None), "pk", 0)
cache_key = f"filter_count_{site_pk}_{model_label}_{query_hash}"

# Sprawdź czy wynik jest już w cache
count = cache.get(cache_key)
Expand Down
Loading
Loading