Tul xxx Tul
User / IP
:
216.73.216.159
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
/
construcciones
/
admin
/
app
/
Views
/
works
/
Viewing: index.php
<section class="space-y-6"> <div class="flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between"> <div> <p class="text-sm font-semibold text-slate-500">Dashboard / Nuestras Obras</p> <h1 class="mt-2 text-3xl font-black text-slate-950">Nuestras Obras</h1> <p class="mt-2 text-sm text-slate-500">Galeria visual de obras realizadas por la constructora.</p> </div> <a href="<?= url('works/create') ?>" class="rounded-lg bg-slate-950 px-4 py-3 text-sm font-bold text-white transition hover:bg-gold hover:text-black">Subir nueva obra</a> </div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm"> <div class="mb-5 flex flex-wrap gap-3"> <input id="workSearch" placeholder="Buscar obra..." class="flex-1 min-w-[200px] rounded-lg border border-slate-200 px-4 py-3 text-sm outline-none focus:border-gold focus:ring-4 focus:ring-gold/15"> </div> <div id="worksGrid" class="grid gap-4 grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"> <?php foreach ($works as $work): ?> <article class="work-card group relative aspect-square overflow-hidden rounded-xl border border-slate-200 bg-slate-100" data-search="<?= clean(strtolower($work['title'])) ?>"> <img src="<?= uploaded_url($work['image_path']) ?>" class="h-full w-full object-cover transition duration-500 group-hover:scale-110"> <div class="absolute inset-0 bg-black/60 opacity-0 transition-opacity duration-300 group-hover:opacity-100 flex flex-col items-center justify-center gap-2 p-4"> <div class="flex gap-2"> <a href="<?= url('works/edit/' . $work['id']) ?>" class="rounded-full bg-white p-2 text-slate-900 shadow-lg hover:bg-gold transition-colors"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/><path d="m15 5 4 4"/></svg> </a> <button type="button" data-delete-url="<?= url('works/delete/' . $work['id']) ?>" class="delete-work rounded-full bg-red-600 p-2 text-white shadow-lg hover:bg-red-700 transition-colors"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" x2="10" y1="11" y2="17"/><line x1="14" x2="14" y1="11" y2="17"/></svg> </button> </div> </div> </article> <?php endforeach; ?> </div> <div class="mt-8 flex items-center justify-between border-t border-slate-100 pt-5"> <button id="prevPage" class="rounded-lg border border-slate-200 px-6 py-2 text-xs font-bold transition hover:bg-slate-50 disabled:opacity-40">Anterior</button> <span id="pageInfo" class="text-xs font-bold text-slate-500 uppercase tracking-widest"></span> <button id="nextPage" class="rounded-lg border border-slate-200 px-6 py-2 text-xs font-bold transition hover:bg-slate-50 disabled:opacity-40">Siguiente</button> </div> </div> </section> <div id="deleteModal" class="fixed inset-0 z-50 hidden items-center justify-center bg-black/50 px-4 backdrop-blur-sm"> <div class="w-full max-w-md rounded-xl bg-white p-6 shadow-soft"> <h2 class="text-xl font-black text-slate-950">Eliminar obra</h2> <p class="mt-3 text-sm text-slate-500">La obra se eliminara con soft delete y no aparecera en la galeria publica.</p> <p id="deleteName" class="mt-4 rounded-lg bg-slate-50 p-3 text-sm font-bold text-slate-700"></p> <form id="deleteForm" method="POST" class="mt-6 flex justify-end gap-2"><?= csrf_field() ?><button type="button" id="cancelDelete" class="rounded-lg border px-4 py-2 text-sm font-bold">Cancelar</button><button class="rounded-lg bg-red-600 px-4 py-2 text-sm font-bold text-white">Eliminar</button></form> </div> </div> <script> const cards=[...document.querySelectorAll('.work-card')], search=document.getElementById('workSearch'), prev=document.getElementById('prevPage'), next=document.getElementById('nextPage'), info=document.getElementById('pageInfo'); let page=1; const per=10; function filtered(){const q=search.value.toLowerCase();return cards.filter(c=>c.dataset.search.includes(q));} function render(){const f=filtered(), pages=Math.max(1,Math.ceil(f.length/per)); page=Math.min(page,pages); cards.forEach(c=>c.classList.add('hidden')); f.slice((page-1)*per,page*per).forEach(c=>c.classList.remove('hidden')); info.textContent=`Pagina ${page} de ${pages}`; prev.disabled=page===1; next.disabled=page===pages;} search.addEventListener('input',()=>{page=1;render()}); prev.onclick=()=>{page--;render()}; next.onclick=()=>{page++;render()}; render(); const modal=document.getElementById('deleteModal'), form=document.getElementById('deleteForm'), nameBox=document.getElementById('deleteName'); document.querySelectorAll('.delete-work').forEach(b=>b.onclick=()=>{form.action=b.dataset.deleteUrl; nameBox.textContent=b.dataset.deleteName; modal.classList.remove('hidden'); modal.classList.add('flex')}); document.getElementById('cancelDelete').onclick=()=>{modal.classList.add('hidden');modal.classList.remove('flex')}; </script>
Coded With 💗 by
0x6ick