{% extends "base.html" %} {% block title %}Historia zmian - Norda Biznes Partner{% endblock %} {% block extra_css %} {% endblock %} {% block content %}

{{ stats.companies }}

Firm w katalogu

{{ stats.categories }}

Kategorii branżowych

{{ releases|length }}

Aktualizacji

2025

Rok startu

{% for release in releases %}
{{ release.version }}
{% for badge in release.badges %} {{ badge }} {% endfor %}
{{ release.date }}
{% if current_user.is_authenticated and current_user.is_admin %} {% endif %}
{% if release.new %}

Nowości

    {% for item in release.new %}
  • {{ item }}
  • {% endfor %}
{% endif %} {% if release.improve %}

Ulepszenia

    {% for item in release.improve %}
  • {{ item }}
  • {% endfor %}
{% endif %} {% if release.fix %}

Naprawione

    {% for item in release.fix %}
  • {{ item }}
  • {% endfor %}
{% endif %} {% if release.beta %}

W fazie testów (BETA)

    {% for item in release.beta %}
  • {{ item }}
  • {% endfor %}
{% endif %}
{% endfor %}
{% endblock %} {% block extra_js %} {% if current_user.is_authenticated and current_user.is_admin %} function notifyRelease(version, btn) { if (!confirm('Czy na pewno chcesz wysłać powiadomienia o wersji ' + version + ' do wszystkich użytkowników?')) { return; } btn.disabled = true; btn.innerHTML = '⏳ Wysyłanie...'; // Get first 3 highlights from the release card const card = btn.closest('.release-card'); const highlights = []; const items = card.querySelectorAll('.change-category.new .change-list li'); items.forEach((item, i) => { if (i < 3) highlights.push(item.textContent.trim()); }); fetch('/admin/notify-release', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token() }}' }, body: JSON.stringify({ version: version, highlights: highlights }) }) .then(response => response.json()) .then(data => { if (data.success) { btn.innerHTML = '✅ Wysłano'; btn.classList.add('sent'); alert(data.message); } else { btn.innerHTML = '❌ Błąd'; btn.disabled = false; alert('Błąd: ' + data.error); } }) .catch(error => { btn.innerHTML = '❌ Błąd'; btn.disabled = false; alert('Błąd połączenia: ' + error); }); } {% endif %} {% endblock %}