- Implemented OrdersRepository for handling order data with pagination, filtering, and sorting capabilities. - Added methods for retrieving order status options, quick stats, and detailed order information. - Created OrderStatusRepository for managing order status groups and statuses, including CRUD operations and sorting. - Introduced a bootstrap file for test environment setup and autoloading.
216 lines
11 KiB
PHP
216 lines
11 KiB
PHP
<?php
|
|
$list = (array) ($integrations ?? []);
|
|
$selected = is_array($selectedIntegration ?? null) ? $selectedIntegration : null;
|
|
$formValues = is_array($form ?? null) ? $form : [];
|
|
$tests = (array) ($recentTests ?? []);
|
|
$isEdit = ((int) ($formValues['integration_id'] ?? 0)) > 0;
|
|
?>
|
|
|
|
<section class="card">
|
|
<h1><?= $e($t('settings.title')) ?></h1>
|
|
<p class="muted"><?= $e($t('settings.description')) ?></p>
|
|
<nav class="settings-nav mt-16" aria-label="<?= $e($t('settings.submenu_label')) ?>">
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'database' ? ' is-active' : '' ?>" href="/settings/database"><?= $e($t('settings.database.title')) ?></a>
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'integrations' ? ' is-active' : '' ?>" href="/settings/integrations/shoppro"><?= $e($t('settings.integrations.title')) ?></a>
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'order_statuses' ? ' is-active' : '' ?>" href="/settings/order-statuses"><?= $e($t('settings.order_statuses.title')) ?></a>
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'cron' ? ' is-active' : '' ?>" href="/settings/cron"><?= $e($t('settings.cron.title')) ?></a>
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'gs1' ? ' is-active' : '' ?>" href="/settings/gs1"><?= $e($t('settings.gs1.title')) ?></a>
|
|
<a class="settings-nav__link<?= ($activeSettings ?? '') === 'products' ? ' is-active' : '' ?>" href="/settings/products"><?= $e($t('settings.products.title')) ?></a>
|
|
</nav>
|
|
</section>
|
|
|
|
<section class="card mt-16">
|
|
<h2 class="section-title"><?= $e($t('settings.integrations.list_title')) ?></h2>
|
|
|
|
<?php if (!empty($errorMessage)): ?>
|
|
<div class="alert alert--danger mt-12" role="alert">
|
|
<?= $e((string) $errorMessage) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if (!empty($successMessage)): ?>
|
|
<div class="alert alert--success mt-12" role="status">
|
|
<?= $e((string) $successMessage) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="table-wrap mt-12">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th><?= $e($t('settings.integrations.fields.name')) ?></th>
|
|
<th><?= $e($t('settings.integrations.fields.base_url')) ?></th>
|
|
<th><?= $e($t('settings.integrations.fields.active')) ?></th>
|
|
<th><?= $e($t('settings.integrations.fields.last_test')) ?></th>
|
|
<th><?= $e($t('settings.integrations.fields.actions')) ?></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($list)): ?>
|
|
<tr>
|
|
<td colspan="6" class="muted"><?= $e($t('settings.integrations.empty')) ?></td>
|
|
</tr>
|
|
<?php else: ?>
|
|
<?php foreach ($list as $item): ?>
|
|
<?php
|
|
$status = (string) ($item['last_test_status'] ?? '');
|
|
$statusLabel = $status === 'ok'
|
|
? $t('settings.integrations.test_status.ok')
|
|
: ($status === 'error' ? $t('settings.integrations.test_status.error') : $t('settings.integrations.test_status.never'));
|
|
?>
|
|
<tr>
|
|
<td><?= $e((string) ($item['id'] ?? 0)) ?></td>
|
|
<td><?= $e((string) ($item['name'] ?? '')) ?></td>
|
|
<td><?= $e((string) ($item['base_url'] ?? '')) ?></td>
|
|
<td>
|
|
<?php if ((bool) ($item['is_active'] ?? false)): ?>
|
|
<span class="status-pill is-active"><?= $e($t('settings.integrations.active.yes')) ?></span>
|
|
<?php else: ?>
|
|
<span class="status-pill"><?= $e($t('settings.integrations.active.no')) ?></span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td>
|
|
<div><?= $e($statusLabel) ?></div>
|
|
<?php if (!empty($item['last_test_at'])): ?>
|
|
<small class="muted"><?= $e((string) $item['last_test_at']) ?><?php if (($item['last_test_http_code'] ?? null) !== null): ?> | HTTP <?= $e((string) $item['last_test_http_code']) ?><?php endif; ?></small>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td>
|
|
<a class="btn btn--secondary" href="/settings/integrations/shoppro?id=<?= $e((string) ($item['id'] ?? 0)) ?>"><?= $e($t('settings.integrations.actions.edit')) ?></a>
|
|
<form action="/settings/integrations/shoppro/test" method="post" style="display:inline-block; margin-left:6px;">
|
|
<input type="hidden" name="_token" value="<?= $e($csrfToken ?? '') ?>">
|
|
<input type="hidden" name="integration_id" value="<?= $e((string) ($item['id'] ?? 0)) ?>">
|
|
<button type="submit" class="btn btn--primary"><?= $e($t('settings.integrations.actions.test')) ?></button>
|
|
</form>
|
|
<form action="/settings/integrations/shoppro/import-offers-cache" method="post" style="display:inline-block; margin-left:6px;">
|
|
<input type="hidden" name="_token" value="<?= $e($csrfToken ?? '') ?>">
|
|
<input type="hidden" name="integration_id" value="<?= $e((string) ($item['id'] ?? 0)) ?>">
|
|
<button type="submit" class="btn btn--secondary"><?= $e($t('settings.integrations.actions.import_offers_cache')) ?></button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card mt-16">
|
|
<h2 class="section-title">
|
|
<?= $e($isEdit ? $t('settings.integrations.edit_title') : $t('settings.integrations.create_title')) ?>
|
|
</h2>
|
|
|
|
<form class="mt-16" action="/settings/integrations/shoppro/save" method="post">
|
|
<input type="hidden" name="_token" value="<?= $e($csrfToken ?? '') ?>">
|
|
<input type="hidden" name="integration_id" value="<?= $e((string) ($formValues['integration_id'] ?? '0')) ?>">
|
|
|
|
<div class="form-grid">
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.name')) ?></span>
|
|
<input class="form-control" type="text" name="name" value="<?= $e((string) ($formValues['name'] ?? '')) ?>" required>
|
|
</label>
|
|
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.base_url')) ?></span>
|
|
<input class="form-control" type="url" name="base_url" value="<?= $e((string) ($formValues['base_url'] ?? '')) ?>" placeholder="https://shoppro.project-dc.pl/" required>
|
|
</label>
|
|
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.api_key')) ?></span>
|
|
<input class="form-control" type="password" name="api_key" value="" placeholder="<?= $e($isEdit ? $t('settings.integrations.api_key_placeholder_edit') : '') ?>">
|
|
<?php if ($isEdit): ?>
|
|
<small class="muted">
|
|
<?= $e(($selected['has_api_key'] ?? false) ? $t('settings.integrations.api_key_saved') : $t('settings.integrations.api_key_missing')) ?>
|
|
</small>
|
|
<?php endif; ?>
|
|
</label>
|
|
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.timeout_seconds')) ?></span>
|
|
<input class="form-control" type="number" min="3" max="60" name="timeout_seconds" value="<?= $e((string) ($formValues['timeout_seconds'] ?? '10')) ?>">
|
|
</label>
|
|
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.orders_fetch_start_date')) ?></span>
|
|
<input class="form-control" type="date" name="orders_fetch_start_date" value="<?= $e((string) ($formValues['orders_fetch_start_date'] ?? '')) ?>">
|
|
</label>
|
|
|
|
<label class="form-field">
|
|
<span class="field-label"><?= $e($t('settings.integrations.fields.order_status_sync_direction')) ?></span>
|
|
<select class="form-control" name="order_status_sync_direction">
|
|
<?php $syncDirection = (string) ($formValues['order_status_sync_direction'] ?? 'shoppro_to_orderpro'); ?>
|
|
<option value="shoppro_to_orderpro"<?= $syncDirection === 'shoppro_to_orderpro' ? ' selected' : '' ?>>
|
|
<?= $e($t('settings.integrations.fields.order_status_sync_direction_shoppro_to_orderpro')) ?>
|
|
</option>
|
|
<option value="orderpro_to_shoppro"<?= $syncDirection === 'orderpro_to_shoppro' ? ' selected' : '' ?>>
|
|
<?= $e($t('settings.integrations.fields.order_status_sync_direction_orderpro_to_shoppro')) ?>
|
|
</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
|
|
<label class="form-field mt-12">
|
|
<span class="field-label">
|
|
<input type="checkbox" name="is_active" value="1"<?= ((string) ($formValues['is_active'] ?? '1')) === '1' ? ' checked' : '' ?>>
|
|
<?= $e($t('settings.integrations.fields.active_checkbox')) ?>
|
|
</span>
|
|
</label>
|
|
|
|
<label class="form-field mt-12">
|
|
<span class="field-label">
|
|
<input type="checkbox" name="orders_fetch_enabled" value="1"<?= ((string) ($formValues['orders_fetch_enabled'] ?? '0')) === '1' ? ' checked' : '' ?>>
|
|
<?= $e($t('settings.integrations.fields.orders_fetch_enabled_checkbox')) ?>
|
|
</span>
|
|
</label>
|
|
|
|
<div class="form-actions mt-16">
|
|
<button type="submit" class="btn btn--primary"><?= $e($t('settings.integrations.actions.save')) ?></button>
|
|
<a href="/settings/integrations/shoppro" class="btn btn--secondary"><?= $e($t('settings.integrations.actions.new')) ?></a>
|
|
<?php if ($isEdit): ?>
|
|
<button
|
|
type="submit"
|
|
class="btn btn--secondary"
|
|
formaction="/settings/integrations/shoppro/test"
|
|
formmethod="post"
|
|
><?= $e($t('settings.integrations.actions.test_now')) ?></button>
|
|
<button
|
|
type="submit"
|
|
class="btn btn--secondary"
|
|
formaction="/settings/integrations/shoppro/import-offers-cache"
|
|
formmethod="post"
|
|
><?= $e($t('settings.integrations.actions.import_offers_cache')) ?></button>
|
|
<?php endif; ?>
|
|
</div>
|
|
</form>
|
|
|
|
<?php if ($selected !== null && !empty($tests)): ?>
|
|
<h3 class="section-title mt-16"><?= $e($t('settings.integrations.logs_title')) ?></h3>
|
|
<div class="table-wrap mt-12">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th><?= $e($t('settings.integrations.logs.fields.tested_at')) ?></th>
|
|
<th><?= $e($t('settings.integrations.logs.fields.status')) ?></th>
|
|
<th><?= $e($t('settings.integrations.logs.fields.http_code')) ?></th>
|
|
<th><?= $e($t('settings.integrations.logs.fields.message')) ?></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($tests as $test): ?>
|
|
<?php $httpCode = $test['http_code'] ?? null; ?>
|
|
<tr>
|
|
<td><?= $e((string) ($test['tested_at'] ?? '')) ?></td>
|
|
<td><?= $e((string) ($test['status'] ?? '')) ?></td>
|
|
<td><?= $e($httpCode === null ? '-' : (string) $httpCode) ?></td>
|
|
<td><?= $e((string) ($test['message'] ?? '')) ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
</section>
|