Files
backPRO/templates/sites/edit.php
Jacek Pyziak b2aead1fbe feat: Integrate DataForSEO for indexed pages tracking
- Updated CRON documentation to include DataForSEO metrics synchronization.
- Enhanced SettingsController to manage DataForSEO API credentials and settings.
- Modified SiteController to handle DataForSEO domain input.
- Updated Site model to accommodate DataForSEO data handling.
- Added methods in SiteSeoMetric model for DataForSEO data retrieval and validation.
- Implemented SiteSeoSyncService to synchronize SEO metrics from both SEMSTORM and DataForSEO.
- Enhanced dashboard templates to display indexed pages data.
- Updated settings and site creation/edit templates to include DataForSEO fields.
- Created migration for adding DataForSEO related columns in the database.
- Developed DataForSeoService to fetch indexed pages count from DataForSEO API.
2026-02-21 11:41:17 +01:00

204 lines
14 KiB
PHP

<div class="d-flex justify-content-between align-items-center mb-4">
<h2>Edytuj stronę: <?= htmlspecialchars($site['name']) ?></h2>
<div class="d-flex gap-2">
<a href="/sites/<?= $site['id'] ?>/seo" class="btn btn-primary">
<i class="bi bi-graph-up me-1"></i>SEO Panel
</a>
<a href="/sites/<?= $site['id'] ?>/dashboard" class="btn btn-dark">
<i class="bi bi-sliders me-1"></i>WP Dashboard
</a>
<form method="post" action="/publish/site/<?= $site['id'] ?>" class="d-inline" data-confirm="Opublikowac artykul na tej stronie teraz?">
<button type="submit" class="btn btn-success">
<i class="bi bi-play-circle me-1"></i>Publikuj teraz
</button>
</form>
</div>
</div>
<div class="row g-4">
<div class="col-lg-7">
<div class="card">
<div class="card-header"><h5 class="mb-0">Ustawienia strony</h5></div>
<div class="card-body">
<form method="post" action="/sites/<?= $site['id'] ?>">
<div class="mb-3">
<label for="name" class="form-label">Nazwa strony</label>
<input type="text" class="form-control" id="name" name="name" value="<?= htmlspecialchars($site['name']) ?>" required>
</div>
<div class="mb-3">
<label for="url" class="form-label">URL WordPressa</label>
<input type="url" class="form-control" id="url" name="url" value="<?= htmlspecialchars($site['url']) ?>" required>
</div>
<div class="mb-3">
<label for="semstorm_domain" class="form-label">Domena SEMSTORM (opcjonalnie)</label>
<input type="text" class="form-control" id="semstorm_domain" name="semstorm_domain" value="<?= htmlspecialchars($site['semstorm_domain'] ?? '') ?>" placeholder="example.com">
<div class="form-text">Jeśli puste, system użyje hosta z URL WordPressa.</div>
</div>
<div class="mb-3">
<label for="dataforseo_domain" class="form-label">Domena DataForSEO (opcjonalnie)</label>
<input type="text" class="form-control" id="dataforseo_domain" name="dataforseo_domain" value="<?= htmlspecialchars($site['dataforseo_domain'] ?? '') ?>" placeholder="example.com">
<div class="form-text">Jesli puste, system uzyje domeny SEMSTORM lub hosta z URL.</div>
</div>
<div class="mb-3">
<label for="api_user" class="form-label">Użytkownik API</label>
<input type="text" class="form-control" id="api_user" name="api_user" value="<?= htmlspecialchars($site['api_user']) ?>" required>
</div>
<div class="mb-3">
<label for="api_token" class="form-label">Application Password</label>
<input type="text" class="form-control" id="api_token" name="api_token" value="<?= htmlspecialchars($site['api_token']) ?>" required>
</div>
<div class="mb-3">
<label for="publish_interval_hours" class="form-label">Interwał publikacji (godziny)</label>
<input type="number" class="form-control" id="publish_interval_hours" name="publish_interval_hours" value="<?= $site['publish_interval_hours'] ?>" min="1" max="720">
</div>
<div class="mb-3">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="is_multisite" name="is_multisite" value="1" <?= $site['is_multisite'] ? 'checked' : '' ?>>
<label class="form-check-label" for="is_multisite">Strona wielotematyczna</label>
</div>
</div>
<div class="mb-3">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="is_active" name="is_active" value="1" <?= $site['is_active'] ? 'checked' : '' ?>>
<label class="form-check-label" for="is_active">Aktywna</label>
</div>
</div>
<?php $hasCredentials = !empty($site['ftp_host']) || !empty($site['db_host']) || !empty($site['wp_admin_user']); ?>
<div class="accordion mb-3" id="credentialsAccordion">
<div class="accordion-item border-0">
<h2 class="accordion-header">
<button class="accordion-button collapsed bg-light px-0" type="button" data-bs-toggle="collapse" data-bs-target="#credentialsPanel">
<i class="bi bi-key me-2"></i>Dane dostępowe (FTP, baza danych, panel WP)
<?php if ($hasCredentials): ?>
<span class="badge bg-success ms-2">zapisane</span>
<?php else: ?>
<span class="badge bg-secondary ms-2">brak</span>
<?php endif; ?>
</button>
</h2>
<div id="credentialsPanel" class="accordion-collapse collapse">
<div class="accordion-body px-0 pb-0">
<fieldset class="border rounded p-3 mb-3">
<legend class="float-none w-auto px-2 fs-6 fw-bold mb-0">
<i class="bi bi-hdd-network me-1"></i>FTP
</legend>
<div class="row mb-2">
<div class="col-md-8">
<label for="ftp_host" class="form-label small">Host</label>
<input type="text" class="form-control form-control-sm" id="ftp_host" name="ftp_host" value="<?= htmlspecialchars($site['ftp_host'] ?? '') ?>" placeholder="ftp.example.com">
</div>
<div class="col-md-4">
<label for="ftp_port" class="form-label small">Port</label>
<input type="number" class="form-control form-control-sm" id="ftp_port" name="ftp_port" value="<?= htmlspecialchars($site['ftp_port'] ?? '21') ?>">
</div>
</div>
<div class="row mb-2">
<div class="col-md-6">
<label for="ftp_user" class="form-label small">Użytkownik</label>
<input type="text" class="form-control form-control-sm" id="ftp_user" name="ftp_user" value="<?= htmlspecialchars($site['ftp_user'] ?? '') ?>">
</div>
<div class="col-md-6">
<label for="ftp_pass" class="form-label small">Hasło</label>
<input type="password" class="form-control form-control-sm" id="ftp_pass" name="ftp_pass" value="<?= htmlspecialchars($site['ftp_pass'] ?? '') ?>">
</div>
</div>
<div>
<label for="ftp_path" class="form-label small">Ścieżka</label>
<input type="text" class="form-control form-control-sm" id="ftp_path" name="ftp_path" value="<?= htmlspecialchars($site['ftp_path'] ?? '') ?>" placeholder="/public_html">
</div>
</fieldset>
<fieldset class="border rounded p-3 mb-3">
<legend class="float-none w-auto px-2 fs-6 fw-bold mb-0">
<i class="bi bi-database me-1"></i>Baza danych
</legend>
<div class="row mb-2">
<div class="col-md-6">
<label for="db_host" class="form-label small">Host</label>
<input type="text" class="form-control form-control-sm" id="db_host" name="db_host" value="<?= htmlspecialchars($site['db_host'] ?? '') ?>" placeholder="localhost">
</div>
<div class="col-md-6">
<label for="db_name" class="form-label small">Nazwa bazy</label>
<input type="text" class="form-control form-control-sm" id="db_name" name="db_name" value="<?= htmlspecialchars($site['db_name'] ?? '') ?>">
</div>
</div>
<div class="row mb-2">
<div class="col-md-4">
<label for="db_user" class="form-label small">Użytkownik</label>
<input type="text" class="form-control form-control-sm" id="db_user" name="db_user" value="<?= htmlspecialchars($site['db_user'] ?? '') ?>">
</div>
<div class="col-md-4">
<label for="db_pass" class="form-label small">Hasło</label>
<input type="password" class="form-control form-control-sm" id="db_pass" name="db_pass" value="<?= htmlspecialchars($site['db_pass'] ?? '') ?>">
</div>
<div class="col-md-4">
<label for="db_prefix" class="form-label small">Prefix</label>
<input type="text" class="form-control form-control-sm" id="db_prefix" name="db_prefix" value="<?= htmlspecialchars($site['db_prefix'] ?? 'wp_') ?>">
</div>
</div>
</fieldset>
<fieldset class="border rounded p-3">
<legend class="float-none w-auto px-2 fs-6 fw-bold mb-0">
<i class="bi bi-wordpress me-1"></i>Panel administratora
</legend>
<div class="row mb-2">
<div class="col-md-6">
<label for="wp_admin_user" class="form-label small">Login</label>
<input type="text" class="form-control form-control-sm" id="wp_admin_user" name="wp_admin_user" value="<?= htmlspecialchars($site['wp_admin_user'] ?? '') ?>">
</div>
<div class="col-md-6">
<label for="wp_admin_pass" class="form-label small">Hasło</label>
<input type="password" class="form-control form-control-sm" id="wp_admin_pass" name="wp_admin_pass" value="<?= htmlspecialchars($site['wp_admin_pass'] ?? '') ?>">
</div>
</div>
<div>
<label for="wp_admin_email" class="form-label small">E-mail</label>
<input type="email" class="form-control form-control-sm" id="wp_admin_email" name="wp_admin_email" value="<?= htmlspecialchars($site['wp_admin_email'] ?? '') ?>">
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">Zapisz zmiany</button>
<a href="/sites" class="btn btn-outline-secondary">Anuluj</a>
<button class="btn btn-outline-success btn-test-connection ms-auto" data-site-id="<?= $site['id'] ?>" type="button">
<i class="bi bi-wifi me-1"></i>Test
</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-lg-5">
<div class="card">
<div class="card-header"><h5 class="mb-0">Tematy strony</h5></div>
<div class="card-body">
<p class="text-muted small mb-3">
Zarządzanie tematami zostało przeniesione do dedykowanego widoku, aby nie duplikować miejsc edycji.
</p>
<a href="/sites/<?= $site['id'] ?>/topics" class="btn btn-outline-info w-100">
<i class="bi bi-tags me-1"></i>Przejdź do zarządzania tematami
</a>
</div>
</div>
</div>
</div>