Tul xxx Tul
User / IP
:
216.73.216.183
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
/
emprendo.com.co
/
public_html
/
miplansoy
/
models
/
Viewing: RoutineModel.php
<?php require_once __DIR__ . '/../app/Database.php'; class RoutineModel { private $pdo; public function __construct() { $this->pdo = Database::getConnection(); } public function createRoutine(string $name, ?string $labels = null): bool { $userId = current_user_id(); try { $stmt = $this->pdo->prepare('INSERT INTO routines (name, labels, user_id) VALUES (?, ?, ?)'); return $stmt->execute([$name, $labels, $userId]); } catch (PDOException $e) { $stmt = $this->pdo->prepare('INSERT INTO routines (name, labels) VALUES (?, ?)'); return $stmt->execute([$name, $labels]); } } public function listForDate(string $date): array { $userId = current_user_id(); if (!$userId) return []; $day = (int)date('N', strtotime($date)); // 1..7 try { $sql = 'SELECT r.* FROM routines r WHERE r.active = 1 AND FIND_IN_SET(?, COALESCE(r.days, "")) > 0 AND ( r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ? ) ORDER BY r.time ASC'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$day, $userId, $userId, $userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { return []; } } public function countForDate(string $date): int { return count($this->listForDate($date)); } public function countDoneOnDate(string $date): int { $userId = current_user_id(); if (!$userId) return 0; try { $sql = 'SELECT COUNT(*) FROM routine_logs rl WHERE rl.`date` = ? AND rl.completed = 1 AND rl.user_id = ?'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$date, $userId]); return (int)$stmt->fetchColumn(); } catch (PDOException $e) { return 0; } } public function createRoutineWithScope(string $name, ?string $labels = null, ?string $scope = null, int $userId): bool { try { $stmt = $this->pdo->prepare('INSERT INTO routines (name, labels, scope, user_id) VALUES (?, ?, ?, ?)'); return $stmt->execute([$name, $labels, $scope, $userId]); } catch (PDOException $e) { // Fallback si las columnas no existen $stmt = $this->pdo->prepare('INSERT INTO routines (name) VALUES (?)'); return $stmt->execute([$name]); } } public function listRoutines(): array { $userId = current_user_id(); if (!$userId) return []; try { $sql = 'SELECT * FROM routines r WHERE ( r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ? ) ORDER BY r.created_at DESC'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$userId, $userId, $userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { try { $stmt = $this->pdo->prepare('SELECT * FROM routines WHERE user_id = ? ORDER BY created_at DESC'); $stmt->execute([$userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e2) { $stmt = $this->pdo->query('SELECT * FROM routines ORDER BY created_at DESC'); return $stmt->fetchAll(PDO::FETCH_ASSOC); } } } public function getRoutinesByUser(int $userId): array { try { $stmt = $this->pdo->prepare('SELECT * FROM routines WHERE user_id = ? ORDER BY created_at DESC'); $stmt->execute([$userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { return []; } } public function getRoutineSchedule(int $routineId): ?array { try { $stmt = $this->pdo->prepare('SELECT id, time, duration_minutes, days FROM routines WHERE id = ?'); $stmt->execute([$routineId]); $result = $stmt->fetch(PDO::FETCH_ASSOC); return $result ?: null; } catch (PDOException $e) { return null; } } public function searchRoutines(string $q): array { $userId = current_user_id(); if (!$userId) return []; try { $like = '%' . $q . '%'; $sql = 'SELECT * FROM routines r WHERE ( r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ? ) AND (r.name LIKE ? OR r.labels LIKE ?) ORDER BY r.created_at DESC LIMIT 50'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$userId, $userId, $userId, $like, $like]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { try { $stmt = $this->pdo->prepare('SELECT * FROM routines WHERE user_id = ? AND (name LIKE ? OR labels LIKE ?) ORDER BY created_at DESC LIMIT 50'); $stmt->execute([$userId, '%' . $q . '%', '%' . $q . '%']); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e2) { $stmt = $this->pdo->prepare('SELECT * FROM routines WHERE name LIKE ? OR labels LIKE ? ORDER BY created_at DESC LIMIT 50'); $stmt->execute(['%' . $q . '%', '%' . $q . '%']); return $stmt->fetchAll(PDO::FETCH_ASSOC); } } } public function findByName(string $name): ?array { try { $stmt = $this->pdo->prepare('SELECT * FROM routines WHERE name = ? ORDER BY id DESC LIMIT 1'); $stmt->execute([$name]); $r = $stmt->fetch(PDO::FETCH_ASSOC); return $r ?: null; } catch (PDOException $e) { return null; } } // Horarios public function getSchedulesMap(): array { $userId = current_user_id(); if (!$userId) return []; try { $stmt = $this->pdo->prepare('SELECT r.id as routine_id, r.name, r.time, r.duration_minutes, r.days, r.scope, r.user_id FROM routines r WHERE r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ?'); $stmt->execute([$userId, $userId, $userId]); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $map = []; foreach ($rows as $r) { $map[(int)$r['routine_id']] = $r; } return $map; } catch (PDOException $e) { return []; } } public function saveSchedule(int $routineId, string $time, $duration, $days): bool { // Versión unificada para ambos controladores $userId = current_user_id(); if (!$userId) return false; $durationMinutes = $duration ? (int)$duration : null; // Manejar tanto arrays como strings if (is_array($days)) { $daysCsv = implode(',', array_values(array_unique(array_map('intval', $days)))); } else { $daysArray = $days ? explode(',', $days) : []; $daysCsv = implode(',', array_values(array_unique(array_map('intval', $daysArray)))); } try { $stmt = $this->pdo->prepare('UPDATE routines SET time = ?, duration_minutes = ?, days = ?, updated_at = NOW() WHERE id = ? AND user_id = ?'); return $stmt->execute([$time, $durationMinutes, $daysCsv, $routineId, $userId]); } catch (PDOException $e) { return false; } } public function deleteSchedule(int $routineId): bool { // Consolidado: limpiar columnas en routines $userId = current_user_id(); if (!$userId) return false; try { $stmt = $this->pdo->prepare('UPDATE routines SET time = NULL, duration_minutes = NULL, days = NULL, updated_at = NOW() WHERE id = ? AND user_id = ?'); return $stmt->execute([$routineId, $userId]); } catch (PDOException $e) { return false; } } // Rutinas programadas para hoy public function listToday(): array { $userId = current_user_id(); if (!$userId) return []; $day = (int)date('N'); // 1..7 try { $sql = 'SELECT r.* FROM routines r WHERE r.active = 1 AND FIND_IN_SET(?, COALESCE(r.days, "")) > 0 AND ( r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ? ) ORDER BY r.time ASC'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$day, $userId, $userId, $userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { return []; } } public function setScope(int $routineId, string $scope): bool { if (!in_array($scope, ['laboral','personal'], true)) return false; try { $userId = current_user_id(); if (!$userId) return false; $stmt = $this->pdo->prepare('UPDATE routines SET scope = ?, updated_at = NOW() WHERE id = ? AND user_id = ?'); return $stmt->execute([$scope, $routineId, $userId]); } catch (PDOException $e) { return false; } } public function toggleActive(int $routineId): bool { try { $userId = current_user_id(); if (!$userId) return false; $stmt = $this->pdo->prepare('UPDATE routines SET active = IF(active=1,0,1), updated_at = NOW() WHERE id = ? AND user_id = ?'); return $stmt->execute([$routineId, $userId]); } catch (PDOException $e) { return false; } } /** * Crea una rutina con nombre/ámbito y horario en una sola operación. * Devuelve el ID insertado o null si falla. */ public function createRoutineFull(string $name, ?string $labels, string $scope, ?string $time, ?int $durationMinutes, ?string $days, ?string $guests = null, ?int $responsible_user_id = null): ?int { $userId = current_user_id(); if (!$userId) return null; try { $stmt = $this->pdo->prepare('INSERT INTO routines (name, labels, scope, user_id, guests, time, duration_minutes, days, responsible_user_id, active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, NOW(), NOW())'); $ok = $stmt->execute([$name, $labels, $scope, $userId, $guests, $time, $durationMinutes, $days, $responsible_user_id]); if (!$ok) return null; return (int)$this->pdo->lastInsertId(); } catch (PDOException $e) { return null; } } public function updateRoutineFull(int $routineId, string $name, string $scope, ?string $time, ?int $durationMinutes, ?string $days, ?string $guests = null): bool { $userId = current_user_id(); if (!$userId) return false; if (!in_array($scope, ['personal', 'laboral'], true)) { $scope = 'personal'; } try { $stmt = $this->pdo->prepare('UPDATE routines SET name = ?, scope = ?, guests = ?, time = ?, duration_minutes = ?, days = ?, updated_at = NOW() WHERE id = ? AND user_id = ?'); return $stmt->execute([$name, $scope, $guests, $time, $durationMinutes, $days, $routineId, $userId]); } catch (PDOException $e) { return false; } } // Asignaciones en rutinas public function setGuests(int $routineId, array $userIds): bool { $guests = implode(',', array_map('intval', $userIds)); try { $stmt = $this->pdo->prepare('UPDATE routines SET guests = ? WHERE id = ?'); return $stmt->execute([$guests, $routineId]); } catch (PDOException $e) { return false; } } public function listRoutinesForCalendar(): array { $userId = current_user_id(); if (!$userId) return []; try { $sql = 'SELECT r.id, r.name, r.time, r.duration_minutes, r.days FROM routines r WHERE r.active = 1 AND ( r.user_id = ? OR FIND_IN_SET(?, COALESCE(r.guests, "")) > 0 OR r.responsible_user_id = ? )'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$userId, $userId, $userId]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { return []; } } public function getDoneMapForRange(string $start, string $end): array { $userId = current_user_id(); if (!$userId) return []; try { $sql = 'SELECT rl.routine_id, rl.date FROM routine_logs rl WHERE rl.date BETWEEN ? AND ? AND rl.completed = 1 AND rl.user_id = ?'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$start, $end, $userId]); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $map = []; foreach ($rows as $r) { $id = (int)$r['routine_id']; if (!isset($map[$id])) { $map[$id] = []; } $map[$id][] = $r['date']; } return $map; } catch (PDOException $e) { return []; } } public function getDoneTodayMap(): array { $userId = current_user_id(); if (!$userId) return []; try { $stmt = $this->pdo->prepare('SELECT rl.routine_id, rl.completed FROM routine_logs rl WHERE rl.`date` = CURDATE() AND rl.completed = 1 AND rl.user_id = ?'); $stmt->execute([$userId]); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $map = []; foreach ($rows as $r) { $map[(int)$r['routine_id']] = (int)$r['completed']; } return $map; } catch (PDOException $e) { return []; } } public function toggleDoneToday(int $routineId, int $done): bool { $userId = current_user_id(); if (!$userId) return false; try { $stmt = $this->pdo->prepare('INSERT INTO routine_logs (routine_id, user_id, `date`, completed, completed_at) VALUES (?, ?, CURDATE(), ?, IF(?=1, NOW(), NULL)) ON DUPLICATE KEY UPDATE completed = VALUES(completed), completed_at = VALUES(completed_at)'); return $stmt->execute([$routineId, $userId, $done, $done]); } catch (PDOException $e) { // Log the detailed error to the PHP error log error_log('Error in toggleDoneToday: ' . $e->getMessage()); return false; } } public function countToday(): int { return count($this->listToday()); } public function countDoneToday(): int { $userId = current_user_id(); if (!$userId) return 0; try { $sql = 'SELECT COUNT(*) FROM routine_logs rl WHERE rl.`date` = CURDATE() AND rl.completed = 1 AND rl.user_id = ?'; $stmt = $this->pdo->prepare($sql); $stmt->execute([$userId]); return (int)$stmt->fetchColumn(); } catch (PDOException $e) { return 0; } } }
Coded With 💗 by
0x6ick