🛒
Tienda Próximamente
Estamos preparando nuestra tienda online con productos exclusivos.
¿Quieres que te avisemos cuando esté lista?
Notificarme// ============================================ // SISTEMA DE LIKES Y REACCIONES // ============================================ /** * Obtener conteo de likes para un contenido */ function get_likes_count($content_type, $content_id) { global $db; $stmt = $db->prepare("SELECT COUNT(*) as count FROM likes WHERE content_type = ? AND content_id = ?"); $stmt->execute([$content_type, $content_id]); $result = $stmt->fetch(); return $result['count'] ?? 0; } /** * Verificar si el usuario actual ha dado like */ function user_has_liked($content_type, $content_id, $user_id) { global $db; $stmt = $db->prepare("SELECT id FROM likes WHERE content_type = ? AND content_id = ? AND user_id = ?"); $stmt->execute([$content_type, $content_id, $user_id]); return $stmt->fetch() !== false; } /** * Toggle like (agregar o quitar) */ function toggle_like($content_type, $content_id, $user_id) { global $db; try { $db->beginTransaction(); // Verificar si ya existe $stmt = $db->prepare("SELECT id FROM likes WHERE content_type = ? AND content_id = ? AND user_id = ?"); $stmt->execute([$content_type, $content_id, $user_id]); $existing = $stmt->fetch(); if ($existing) { // Eliminar like $stmt = $db->prepare("DELETE FROM likes WHERE content_type = ? AND content_id = ? AND user_id = ?"); $stmt->execute([$content_type, $content_id, $user_id]); $action = 'removed'; } else { // Agregar like $stmt = $db->prepare("INSERT INTO likes (content_type, content_id, user_id) VALUES (?, ?, ?)"); $stmt->execute([$content_type, $content_id, $user_id]); $action = 'added'; } // Actualizar contador en la tabla principal $table_map = [ 'blog_post' => 'blog_posts', 'investigation' => 'investigations', 'esoterism' => 'esoterism_content' ]; if (isset($table_map[$content_type])) { $table = $table_map[$content_type]; $count = get_likes_count($content_type, $content_id); $stmt = $db->prepare("UPDATE {$table} SET likes_count = ? WHERE id = ?"); $stmt->execute([$count, $content_id]); } $db->commit(); return ['success' => true, 'action' => $action, 'count' => get_likes_count($content_type, $content_id)]; } catch (Exception $e) { $db->rollBack(); return ['success' => false, 'error' => $e->getMessage()]; } } // ============================================ // SISTEMA DE COMENTARIOS // ============================================ /** * Obtener comentarios de un contenido */ function get_comments($content_type, $content_id, $parent_id = null) { global $db; $sql = "SELECT c.*, u.username, u.first_name, u.last_name, u.profile_image FROM comments c INNER JOIN users u ON c.user_id = u.id WHERE c.content_type = ? AND c.content_id = ? AND c.is_approved = 1"; if ($parent_id === null) { $sql .= " AND c.parent_id IS NULL"; $params = [$content_type, $content_id]; } else { $sql .= " AND c.parent_id = ?"; $params = [$content_type, $content_id, $parent_id]; } $sql .= " ORDER BY c.created_at DESC"; $stmt = $db->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(); } /** * Contar comentarios de un contenido */ function get_comments_count($content_type, $content_id) { global $db; $stmt = $db->prepare("SELECT COUNT(*) as count FROM comments WHERE content_type = ? AND content_id = ? AND is_approved = 1"); $stmt->execute([$content_type, $content_id]); $result = $stmt->fetch(); return $result['count'] ?? 0; } /** * Agregar comentario */ function add_comment($content_type, $content_id, $user_id, $comment, $parent_id = null) { global $db; try { $db->beginTransaction(); // Insertar comentario $stmt = $db->prepare(" INSERT INTO comments (content_type, content_id, user_id, comment, parent_id) VALUES (?, ?, ?, ?, ?) "); $stmt->execute([$content_type, $content_id, $user_id, $comment, $parent_id]); // Actualizar contador $table_map = [ 'blog_post' => 'blog_posts', 'investigation' => 'investigations', 'esoterism' => 'esoterism_content' ]; if (isset($table_map[$content_type])) { $table = $table_map[$content_type]; $count = get_comments_count($content_type, $content_id); $stmt = $db->prepare("UPDATE {$table} SET comments_count = ? WHERE id = ?"); $stmt->execute([$count, $content_id]); } $db->commit(); return ['success' => true, 'message' => 'Comentario agregado exitosamente']; } catch (Exception $e) { $db->rollBack(); return ['success' => false, 'error' => $e->getMessage()]; } } /** * Renderizar HTML de comentarios */ function render_comments($comments, $content_type, $content_id, $depth = 0) { $html = ''; foreach ($comments as $comment) { $author_name = !empty($comment['first_name']) ? $comment['first_name'] . ' ' . $comment['last_name'] : $comment['username']; $avatar_letter = strtoupper(substr($author_name, 0, 1)); $time_ago = time_ago($comment['created_at']); $html .= '
Estamos preparando nuestra tienda online con productos exclusivos.
¿Quieres que te avisemos cuando esté lista?
Notificarme