Created by Mehmet Ilhan Bayoglu. All rights reserved. OfisArama is a KalakBayson initiative. Tel: +90 850 302 1111
Joy Loglar Sadece ana admin
Kontrol Paneli

Yetki Ozeti

Kayitlar yukleniyor...
Kullanici Rol Durum
Yukleniyor...

Kayitli Kullanicilar

Veritabani senkronize ediliyor...
Toplam: 0 Dogrulandi: 0 Bekliyor: 0 Filtre Sonucu: 0
Kullanici Iletisim Durum Tarih
Yukleniyor...

Robot Leadleri

Robot verisi yukleniyor...
Session: 0 Lead: 0
Akis Ihtiyac Durum
Yukleniyor...

Ofisler

Duzenle

Ipucu: Ismi degisen plazalar icin Alias Names alanina alternatif adlari virgulle yazin.
Toplu yuklemede sistem once Image 1 (vitrin), sonra Image 2 doldurur. Image 1 doluysa korunur.
Image 1 (kart + modal varsayilan)
Image 1 preview
Image 2 (modal ikinci resim)
Image 2 preview
Custom Fields (Admin ekler)
Giris gerekiyor.

Admin Giris

Bu sayfa ofis veritabanini duzenlemek icindir.
el('saveReviewPermissionsBtn').addEventListener('click', () => { saveReviewPermissions().catch(e => setStatus(e.message, 'err')); }); el('manageReviewsBtn').addEventListener('click', async () => { try { await loadReviews(); showReviewsOverlay(true); } catch (e) { setStatus(e.message, 'err'); } }); el('refreshReviewsBtn').addEventListener('click', () => { loadReviews().catch(e => { el('reviewsErr').textContent = e.message; el('reviewsErr').style.display = ''; }); }); el('closeReviewsBtn').addEventListener('click', () => showReviewsOverlay(false)); el('closeBlogBtn').addEventListener('click', () => showBlogOverlay(false)); el('refreshBlogPostsBtn').addEventListener('click', () => { Promise.all([loadBlogPosts(), loadBlogSubmissions()]).catch(e => { el('blogErr').textContent = e.message; el('blogErr').style.display = ''; }); }); el('syncSeventBlogBtn').addEventListener('click', async () => { el('blogErr').style.display = 'none'; try { const data = await api('/api/admin/blog/sync-sevent', { method: 'POST' }); const count = Number((((data || {}).sync || {}).count) || 0); setStatus('Sevent blog verisi senkronlandi. Aktif yazi: ' + count, 'ok'); } catch (e) { el('blogErr').textContent = e.message; el('blogErr').style.display = ''; } }); el('newBlogPostBtn').addEventListener('click', () => resetBlogEditor()); el('blogCoverStageTrigger').addEventListener('click', () => el('blogCoverUpload').click()); el('blogCoverUpload').addEventListener('change', () => { const file = el('blogCoverUpload').files && el('blogCoverUpload').files[0]; if (!file) return; const localUrl = URL.createObjectURL(file); updateBlogCoverPreview(localUrl); }); el('blogCoverImage').addEventListener('input', (e) => updateBlogCoverPreview(e.target.value)); el('uploadBlogCoverBtn').addEventListener('click', async () => { const file = el('blogCoverUpload').files && el('blogCoverUpload').files[0]; if (!file) { el('blogErr').textContent = 'Kapak gorseli secin.'; el('blogErr').style.display = ''; return; } el('blogErr').style.display = 'none'; try { const fd = new FormData(); fd.append('image', file); const data = await apiForm('/api/admin/blog/cover-image', fd, 'POST'); el('blogCoverImage').value = data.image_url || ''; updateBlogCoverPreview(data.image_url || ''); el('blogCoverUpload').value = ''; setStatus('Blog kapak gorseli yuklendi.', 'ok'); } catch (e) { el('blogErr').textContent = e.message; el('blogErr').style.display = ''; } }); el('saveBlogPostBtn').addEventListener('click', async () => { el('blogErr').style.display = 'none'; const payload = { title: el('blogTitle').value.trim(), slug: el('blogSlug').value.trim(), category: el('blogCategory').value.trim(), excerpt: el('blogExcerpt').value.trim(), cover_image: el('blogCoverImage').value.trim(), meta_line: el('blogMetaLine').value.trim(), sort_order: Number(el('blogSortOrder').value || 0), is_published: el('blogPublished').value === '1', publish_ofisarama: el('blogPublishOfisarama').checked, publish_sevent: el('blogPublishSevent').checked, sevent_featured: el('blogSeventFeatured').checked, body_html: el('blogBodyHtml').value.trim() }; try { if (selectedBlogPostId) { await api('/api/admin/blog/posts/' + selectedBlogPostId, { method: 'PATCH', body: JSON.stringify(payload) }); setStatus('Blog yazisi guncellendi.', 'ok'); } else { await api('/api/admin/blog/posts', { method: 'POST', body: JSON.stringify(payload) }); setStatus('Blog yazisi olusturuldu.', 'ok'); } await loadBlogPosts(); resetBlogEditor(); } catch (e) { el('blogErr').textContent = e.message; el('blogErr').style.display = ''; } }); el('deleteBlogPostBtn').addEventListener('click', async () => { if (!selectedBlogPostId) return; el('blogErr').style.display = 'none'; try { await api('/api/admin/blog/posts/' + selectedBlogPostId, { method: 'DELETE' }); setStatus('Blog yazisi silindi.', 'ok'); await loadBlogPosts(); resetBlogEditor(); } catch (e) { el('blogErr').textContent = e.message; el('blogErr').style.display = ''; } });