{% extends "base.html" %} {% block title %}Konfiguracja FB: {{ company.name }} - Social Media{% endblock %} {% block extra_css %} {% endblock %} {% block content %}

Facebook: {{ company.name }}

Powrot do listy
{% if config and config.page_id %}
Obecna konfiguracja: Strona: {{ config.page_name or 'Nie ustawiona' }} | Status: {% if config.is_active %}Aktywna{% else %}Nieaktywna{% endif %} | Debug: {% if config.debug_mode %}Wlaczony{% else %}Wylaczony{% endif %} {% if config.updated_at %} | Ostatnia aktualizacja: {{ config.updated_at|local_time('%Y-%m-%d %H:%M') }} {% endif %}
{% endif %}

Polaczenie z Facebook (OAuth)

{% if oauth_token %}

Polaczono z Facebook

{% if oauth_token.account_name %}Strona: {{ oauth_token.account_name }}{% else %}Token aktywny{% endif %}

{% else %}
?

Brak polaczenia

Polacz konto Facebook, aby publikowac posty na stronie firmowej

{% endif %}
{% if oauth_token %}
{% else %} {% endif %}
{% if config and config.page_id %}

Ustawienia publikacji

W trybie debug posty sa widoczne tylko dla adminow strony FB (nie sa publiczne)

Anuluj
{% endif %}
{% endblock %} {% block extra_js %} const companyId = {{ company.id }}; const csrfToken = '{{ csrf_token() }}'; async function connectFacebook() { try { const resp = await fetch('/api/oauth/connect/meta/facebook', { method: 'POST', headers: { 'X-CSRFToken': csrfToken } }); if (!resp.ok && resp.headers.get('content-type')?.indexOf('json') === -1) { alert('Blad serwera (' + resp.status + '). OAuth moze nie byc skonfigurowany.'); return; } const data = await resp.json(); if (data.success && data.auth_url) { window.location.href = data.auth_url; } else { alert('Blad: ' + (data.error || 'Nie udalo sie zainicjowac polaczenia OAuth')); } } catch (err) { alert('Blad polaczenia: ' + err.message); } } async function disconnectOAuth() { if (!confirm('Czy na pewno chcesz rozlaczyc Facebook?')) return; try { const resp = await fetch('/api/oauth/disconnect/meta/facebook', { method: 'POST', headers: { 'X-CSRFToken': csrfToken } }); const data = await resp.json(); if (data.success) { location.reload(); } else { alert('Blad: ' + (data.error || 'Nie udalo sie rozlaczyc')); } } catch (err) { alert('Blad polaczenia: ' + err.message); } } document.getElementById('btn-discover-pages')?.addEventListener('click', discoverPages); async function discoverPages() { const selector = document.getElementById('page-selector'); const loading = document.getElementById('page-loading'); const list = document.getElementById('page-list'); selector.style.display = 'block'; loading.style.display = 'block'; list.innerHTML = ''; try { const resp = await fetch('/api/oauth/meta/discover-pages', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken }, body: JSON.stringify({ company_id: companyId }) }); const data = await resp.json(); loading.style.display = 'none'; if (data.success && data.pages && data.pages.length > 0) { data.pages.forEach(page => { const li = document.createElement('li'); li.innerHTML = `
${page.name}
${page.category || ''} | ${(page.fan_count || 0).toLocaleString()} fanow
`; list.appendChild(li); }); } else if (data.success) { list.innerHTML = '
  • Brak stron Facebook do wyswietlenia. Upewnij sie, ze masz uprawnienia administratora strony.
  • '; } else { list.innerHTML = '
  • Blad: ' + (data.error || 'Nieznany') + '
  • '; } } catch (err) { loading.style.display = 'none'; list.innerHTML = '
  • Blad polaczenia: ' + err.message + '
  • '; } } async function selectPage(pageId, pageName) { try { const resp = await fetch('/api/oauth/meta/select-page', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken }, body: JSON.stringify({ company_id: companyId, page_id: pageId }) }); const data = await resp.json(); if (data.success) { location.reload(); } else { alert('Blad: ' + (data.error || 'Nie udalo sie wybrac strony')); } } catch (err) { alert('Blad polaczenia: ' + err.message); } } // Auto-discover pages if OAuth is connected but no page selected {% if oauth_token and not (config and config.page_id) %} document.addEventListener('DOMContentLoaded', discoverPages); {% endif %} {% endblock %}