81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
from flask import Blueprint, render_template, session, redirect, url_for, request, jsonify
|
|
import sqlite3
|
|
import secrets
|
|
import json
|
|
from config import MAIN_DB
|
|
from utils.auth_decorators import login_required
|
|
|
|
dashboard_bp = Blueprint('dashboard', __name__)
|
|
|
|
@dashboard_bp.route('/dashboard')
|
|
@login_required
|
|
def dashboard_view():
|
|
"""Panel del cliente"""
|
|
user_id = session['user_id']
|
|
conn = sqlite3.connect(MAIN_DB)
|
|
c = conn.cursor()
|
|
|
|
c.execute('SELECT email, plan FROM users WHERE id = ?', (user_id,))
|
|
user_info = c.fetchone()
|
|
|
|
c.execute('SELECT id, slug, theme, status, created_at FROM sites WHERE user_id = ?', (user_id,))
|
|
sites = [{'id': r[0], 'slug': r[1], 'theme': r[2], 'status': r[3], 'created_at': r[4]}
|
|
for r in c.fetchall()]
|
|
|
|
c.execute('SELECT COUNT(*) FROM media WHERE user_id = ?', (user_id,))
|
|
media_count = c.fetchone()[0]
|
|
conn.close()
|
|
|
|
return render_template('dashboard.html',
|
|
sites=sites,
|
|
user_email=user_info[0] if user_info else '',
|
|
user_plan=user_info[1] if user_info else 'base',
|
|
media_count=media_count)
|
|
|
|
@dashboard_bp.route('/dashboard/admin')
|
|
@login_required
|
|
def client_admin():
|
|
"""Admin del cliente - gestionar media, config, etc."""
|
|
user_id = session['user_id']
|
|
conn = sqlite3.connect(MAIN_DB)
|
|
c = conn.cursor()
|
|
|
|
c.execute('SELECT email, plan FROM users WHERE id = ?', (user_id,))
|
|
user_info = c.fetchone()
|
|
|
|
c.execute('SELECT id, slug, theme, status FROM sites WHERE user_id = ?', (user_id,))
|
|
sites = [{'id': r[0], 'slug': r[1], 'theme': r[2], 'status': r[3]} for r in c.fetchall()]
|
|
conn.close()
|
|
|
|
return render_template('client_admin.html',
|
|
user_email=user_info[0] if user_info else '',
|
|
user_plan=user_info[1] if user_info else 'base',
|
|
sites=sites)
|
|
|
|
@dashboard_bp.route('/dashboard/create', methods=['GET', 'POST'])
|
|
@login_required
|
|
def create_site():
|
|
"""Crear nuevo sitio"""
|
|
if request.method == 'POST':
|
|
data = request.get_json()
|
|
user_id = session['user_id']
|
|
slug = data.get('slug', f'site-{secrets.token_hex(4)}')
|
|
theme = data.get('theme', 'default')
|
|
|
|
content = json.dumps({
|
|
'site_name': data.get('site_name', 'Mi Sitio'),
|
|
'hero_title': data.get('hero_title', 'Bienvenido'),
|
|
'colors': {'primary': '#ff4d4d', 'secondary': '#1a1a1a', 'text': '#333333'}
|
|
})
|
|
|
|
conn = sqlite3.connect(MAIN_DB)
|
|
c = conn.cursor()
|
|
c.execute('INSERT INTO sites (user_id, slug, theme, content_json) VALUES (?, ?, ?, ?)',
|
|
(user_id, slug, theme, content))
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
return jsonify({'success': True, 'redirect': url_for('dashboard.dashboard_view')})
|
|
|
|
return render_template('create_site.html')
|