Skip to content

Commit 2f5a1e8

Browse files
wip: AdSense setup
Signed-off-by: William Moreno <williamjmorenor@gmail.com>
1 parent 74dca9e commit 2f5a1e8

File tree

10 files changed

+180
-3
lines changed

10 files changed

+180
-3
lines changed

.replit

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
modules = ["web", "python-base-3.13", "nodejs-22"]
2+
run = "/home/runner/workspace/venv/bin/python -m now_lms"
3+
4+
[nix]
5+
channel = "stable-24_05"
6+
7+
[deployment]
8+
run = "/home/runner/workspace/venv/bin/python -m now_lms"
9+
10+
[[ports]]
11+
localPort = 8080
12+
externalPort = 80

now_lms/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
from now_lms.db.tools import (
9191
crear_configuracion_predeterminada,
9292
cuenta_cursos_por_programa,
93+
get_addsense_meta,
9394
logo_perzonalizado,
9495
obtener_estilo_actual,
9596
verifica_docente_asignado_a_curso,
@@ -331,6 +332,7 @@ def carga_configuracion_del_sitio_web_desde_db(): # pragma: no cover
331332
lms_app.jinja_env.globals["pyversion"] = python_version()
332333
lms_app.jinja_env.globals["mkdonw2thml"] = markdown_to_clean_hmtl
333334
lms_app.jinja_env.globals["cuenta_cursos"] = cuenta_cursos_por_programa
335+
lms_app.jinja_env.globals["adsense_meta"] = get_addsense_meta
334336

335337

336338
# ---------------------------------------------------------------------------------------

now_lms/db/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,3 +479,9 @@ class PagosConfig(database.Model):
479479
id = database.Column(
480480
database.String(26), primary_key=True, nullable=False, index=True, default=generador_de_codigos_unicos
481481
)
482+
483+
class AdSense(database.Model):
484+
id = database.Column(database.Integer, primary_key=True)
485+
meta_tag = database.String(100)
486+
meta_tag_include = database.Column(database.Boolean(), default=False)
487+

now_lms/db/tools.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
# Recursos locales
3737
# ---------------------------------------------------------------------------------------
3838
from now_lms.db import (
39+
AdSense,
3940
CategoriaCurso,
4041
Configuracion,
4142
Curso,
@@ -292,3 +293,22 @@ def cursos_por_categoria(tag: str) -> int:
292293
def cuenta_cursos_por_programa(codigo_programa: str) -> int:
293294
"""Devuelve el número de programas que tiene un curso."""
294295
return ProgramaCurso.query.filter(ProgramaCurso.programa == codigo_programa).count()
296+
297+
def get_addsense_meta():
298+
"""AdSense metatags."""
299+
try:
300+
query = database.session.execute(database.select(AdSense)).first()
301+
except:
302+
query = None
303+
304+
305+
if query:
306+
data = query[0]
307+
if data.meta_tag_include:
308+
return data.meta_tag
309+
else:
310+
return ""
311+
else:
312+
return ""
313+
314+

now_lms/forms/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,8 @@ class CertificateForm(FlaskForm):
338338
titulo = StringField(validators=[])
339339
descripcion = StringField(validators=[])
340340
habilitado = BooleanField(validators=[])
341+
342+
class AdSenseForm(FlaskForm):
343+
"""AdSbse"""
344+
meta_tag = TextAreaField(validators=[])
345+
meta_tag_include = BooleanField(validators=[])

now_lms/templates/admin/adsense.html

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
{% import "macros.html" as macros %}
2+
3+
<!DOCTYPE html>
4+
<html lang="es" class="h-100">
5+
6+
<head>
7+
8+
{{ macros.headertags() }}
9+
10+
<title>Configuración de Anuncios de AdSense</title>
11+
12+
{{ macros.local_style() }}
13+
<!-- Custom styles for this template -->
14+
<link href="{{ url_for('static', filename='css/form-validation') }}" rel="stylesheet">
15+
</head>
16+
17+
<body>
18+
19+
{{ macros.navbar() }}
20+
21+
<main>
22+
23+
{{ macros.notify() }}
24+
25+
<div class="container px-4 py-5" id="icon-grid">
26+
<h4 class="pb-2 border-bottom">Editar configuración de anunciós de AdSense.</h4>
27+
<form method="post">
28+
29+
<div class="row">
30+
31+
<div class="col-sm-6">
32+
<label for="email" class="form-label">Mostrar etiqueta en Header:</label>
33+
{{ form.meta_tag_include() }}
34+
</div>
35+
36+
</div>
37+
38+
<div class="row">
39+
40+
<div class="col-sm-6">
41+
<label for="meta_tag" class="form-label">Header scritp:</label>
42+
{{ form.meta_tag(class="form-control", id="meta_tag",) }}
43+
</div>
44+
45+
</div>
46+
47+
<br>
48+
49+
<a class="btn btn-warning" href="{{ url_for("admin_profile.pagina_admin") }}" role="button">Cancelar</a>
50+
<button class="w-10 btn btn-primary btn-block" type="submit">Actualizar Configuración</button>
51+
52+
</form>
53+
</div>
54+
55+
</main>
56+
57+
</body>
58+
59+
</html>

now_lms/templates/macros.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
<meta name="msapplication-TileColor" content="#ffffff">
3131
<meta name="theme-color" content="#ffffff">
3232

33+
{{ adsense_meta() }}
34+
3335
{%- endmacro %}
3436

3537

now_lms/templates/perfiles/admin.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,21 @@ <h4 class="fw-bold mb-0">
112112
</p>
113113
</div>
114114
</div>
115+
116+
<div class="col d-flex align-items-start">
117+
<div>
118+
<h4 class="fw-bold mb-0">
119+
<i class="bi bi-cash-coin" aria-hidden="true"></i>
120+
AdSense
121+
</h4>
122+
<p>
123+
<a href="{{ url_for("setting.adsense") }}" class="link-dark">
124+
Anuncios de AdSense
125+
</a>
126+
</p>
127+
</div>
128+
</div>
129+
115130
</div>
116131
</div>
117132
</main>

now_lms/vistas/settings.py

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939
from now_lms.auth import perfil_requerido, proteger_secreto
4040
from now_lms.cache import cache
4141
from now_lms.config import DIRECTORIO_PLANTILLAS, images
42-
from now_lms.db import Configuracion, database
42+
from now_lms.db import AdSense, Configuracion, database
4343
from now_lms.db.tools import elimina_logo_perzonalizado
44-
from now_lms.forms import ConfigForm, MailForm, ThemeForm
44+
from now_lms.forms import AdSenseForm, ConfigForm, MailForm, ThemeForm
4545
from now_lms.logs import log
4646

4747
# ---------------------------------------------------------------------------------------
@@ -145,14 +145,59 @@ def mail():
145145
database.session.commit()
146146
flash("Configuración de correo electronico actualizada exitosamente.", "success")
147147
return redirect(url_for("setting.mail"))
148-
return redirect(url_for("mail"))
149148
except OperationalError: # pragma: no cover
150149
flash("No se pudo actualizar la configuración de correo electronico.", "warning")
151150
return redirect(url_for("setting.mail"))
152151
else: # pragma: no cover
153152
return render_template("admin/mail.html", form=form, config=config)
154153

155154

155+
@setting.route("/setting/adsense", methods=["GET", "POST"])
156+
@login_required
157+
@perfil_requerido("admin")
158+
def adsense():
159+
"""Configuración de anuncios de AdSense."""
160+
try:
161+
config = database.session.execute(database.select(AdSense)).first()[0]
162+
except:
163+
config = None
164+
165+
form = AdSenseForm()
166+
167+
if config:
168+
169+
form.meta_tag=config.meta_tag,
170+
form.meta_tag_include=config.meta_tag_include,
171+
172+
else:
173+
form.meta_tag = ""
174+
form.meta_tag_include = False
175+
176+
if form.validate_on_submit() or request.method == "POST":
177+
178+
try:
179+
config.meta_tag = form.meta_tag.data
180+
config.meta_tag_include = form.meta_tag_include.data
181+
182+
except AttributeError:
183+
config = AdSense()
184+
config.meta_tag = form.meta_tag.data,
185+
config.meta_tag_include = form.meta_tag_include.data
186+
database.session.add(config)
187+
188+
try: # pragma: no cover
189+
database.session.commit()
190+
flash("Configuración de Google AdSense actualizada exitosamente.", "success")
191+
return redirect(url_for("setting.adsense"))
192+
193+
except OperationalError: # pragma: no cover
194+
flash("No se pudo actualizar la configuración de Google AdSense.", "warning")
195+
return redirect(url_for("setting.adsense"))
196+
197+
else: # pragma: no cover
198+
return render_template("admin/adsense.html", form=form, config=config)
199+
200+
156201
@setting.route("/setting/mail_check", methods=["GET", "POST"])
157202
@login_required
158203
@perfil_requerido("admin")

replit.nix

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{pkgs}: {
2+
deps = [
3+
pkgs.vim-full
4+
pkgs.rustc
5+
pkgs.pkg-config
6+
pkgs.openssl
7+
pkgs.libxcrypt
8+
pkgs.libiconv
9+
pkgs.cargo
10+
];
11+
}

0 commit comments

Comments
 (0)