apres tests logos

This commit is contained in:
Jean-Marie Place 2021-11-06 19:22:04 +01:00
parent 3576847fb8
commit 2859b2caa4
5 changed files with 27 additions and 21 deletions

View File

@ -51,14 +51,13 @@ Chaque semestre peut si nécessaire utiliser un type de bulletin différent.
""" """
import io import io
import os
import re import re
import time import time
import traceback import traceback
from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate
from flask import g, url_for, request from flask import g, request
import app.scodoc.sco_utils as scu import app.scodoc.sco_utils as scu
from app import log from app import log
@ -68,7 +67,7 @@ from app.scodoc import sco_pdf
from app.scodoc import sco_preferences from app.scodoc import sco_preferences
from app.scodoc import sco_etud from app.scodoc import sco_etud
import sco_version import sco_version
from app.scodoc.sco_logos import find_logo from app.scodoc.sco_logos import replace_logo
def pdfassemblebulletins( def pdfassemblebulletins(
@ -146,14 +145,16 @@ def process_field(field, cdict, style, suppress_empty_pars=False, format="pdf"):
text = re.sub( text = re.sub(
r"<(\s*)logo(.*?)src\s*=\s*(.*?)>", r"<\1logo\2\3>", text r"<(\s*)logo(.*?)src\s*=\s*(.*?)>", r"<\1logo\2\3>", text
) # remove forbidden src attribute ) # remove forbidden src attribute
image = find_logo(logoname=text, dept_id=g.scodoc_dept_id) text = re.sub(
if image is not None: r'<\s*logo(.*?)name\s*=\s*"(\w*?)"(.*?)/?>',
text = re.sub( lambda m: r'<img %s src="%s"%s/>'
r'<\s*logo(.*?)name\s*=\s*"(\w*?)"(.*?)/?>', % (
r'<img\1src="%s"/>' % image.filepath, m.group(1),
) replace_logo(name=m.group(2), dept_id=g.scodoc_dept_id),
m.group(3),
# log('field: %s' % (text)) ),
text,
) # log('field: %s' % (text))
return sco_pdf.makeParas(text, style, suppress_empty=suppress_empty_pars) return sco_pdf.makeParas(text, style, suppress_empty=suppress_empty_pars)

View File

@ -73,6 +73,12 @@ def write_logo(stream, name, dept_id=None):
Logo(logoname=name, dept_id=dept_id).create(stream) Logo(logoname=name, dept_id=dept_id).create(stream)
def replace_logo(name, dept_id):
logo = find_logo(logoname=name, dept_id=dept_id)
if logo is not None:
return logo.filepath
def list_logos(): def list_logos():
inventory = {GLOBAL: _list_dept_logos()} # logos globaux (header / footer) inventory = {GLOBAL: _list_dept_logos()} # logos globaux (header / footer)
for dept in Departement.query.filter_by(visible=True).all(): for dept in Departement.query.filter_by(visible=True).all():

View File

@ -216,6 +216,7 @@ class ScolarsPageTemplate(PageTemplate):
) )
PageTemplate.__init__(self, "ScolarsPageTemplate", [content]) PageTemplate.__init__(self, "ScolarsPageTemplate", [content])
self.logo = None self.logo = None
breakpoint()
logo = find_logo( logo = find_logo(
logoname="bul_pdf_background", dept_id=g.scodoc_dept_id, prefix=None logoname="bul_pdf_background", dept_id=g.scodoc_dept_id, prefix=None
) )

View File

@ -36,12 +36,12 @@
<div class="configuration_logo"> <div class="configuration_logo">
<h3>Logo en-tête</h3> <h3>Logo en-tête</h3>
<p class="help">image placée en haut de certains documents documents PDF. Image actuelle:</p> <p class="help">image placée en haut de certains documents documents PDF. Image actuelle:</p>
<div class="img-container"><img src="{{ url_for('scodoc.get_logo_global', name="header") }}" <div class="img-container"><img src="{{ url_for('scodoc.get_logo_small', name="header") }}"
alt="pas de logo chargé" /></div> alt="pas de logo chargé" /></div>
{{ render_field(form.logo_header) }} {{ render_field(form.logo_header) }}
<h3>Logo pied de page</h3> <h3>Logo pied de page</h3>
<p class="help">image placée en pied de page de certains documents documents PDF. Image actuelle:</p> <p class="help">image placée en pied de page de certains documents documents PDF. Image actuelle:</p>
<div class="img-container"><img src="{{ url_for('scodoc.get_logo_global', name="footer") }}" <div class="img-container"><img src="{{ url_for('scodoc.get_logo_small', name="footer") }}"
alt="pas de logo chargé" /></div> alt="pas de logo chargé" /></div>
{{ render_field(form.logo_footer) }} {{ render_field(form.logo_footer) }}
</div> </div>

View File

@ -264,9 +264,7 @@ def configuration():
SMALL_SIZE = (300, 300) SMALL_SIZE = (300, 300)
def _return_logo( def _return_logo(name="header", dept_id="", small=False, strict: bool = True):
name="header", dept_id="", small=False, global_if_not_found: bool = True
):
# stockée dans /opt/scodoc-data/config/logos donc servie manuellement ici # stockée dans /opt/scodoc-data/config/logos donc servie manuellement ici
# génération d'une url # génération d'une url
# url = url_for( # url = url_for(
@ -275,7 +273,7 @@ def _return_logo(
# dept_id=dept_id, # dept_id=dept_id,
# global_if_not_found=global_if_not_found, # global_if_not_found=global_if_not_found,
# ) # )
logo = sco_logos.find_logo(name, dept_id, global_if_not_found) logo = sco_logos.find_logo(name, dept_id, strict)
if logo is not None: if logo is not None:
suffix = logo.suffix suffix = logo.suffix
if small: if small:
@ -302,12 +300,12 @@ def _return_logo(
@bp.route("/ScoDoc/<int:dept_id>/logos/<name>/small") @bp.route("/ScoDoc/<int:dept_id>/logos/<name>/small")
@admin_required @admin_required
def get_logo_small(name: str, dept_id: int): def get_logo_small(name: str, dept_id: int):
global_if_not_found = request.args.get("global_if_not_found", "True") strict = request.args.get("strict", "False")
return _return_logo( return _return_logo(
name, name,
dept_id=dept_id, dept_id=dept_id,
small=True, small=True,
global_if_not_found=global_if_not_found.upper() not in ["0", "FALSE"], strict=strict.upper() not in ["0", "FALSE"],
) )
@ -317,12 +315,12 @@ def get_logo_small(name: str, dept_id: int):
@bp.route("/ScoDoc/<int:dept_id>/logos/<name>") @bp.route("/ScoDoc/<int:dept_id>/logos/<name>")
@admin_required @admin_required
def get_logo(name: str, dept_id: int): def get_logo(name: str, dept_id: int):
global_if_not_found = request.args.get("global_if_not_found", "True") strict = request.args.get("strict", "False")
return _return_logo( return _return_logo(
name, name,
dept_id=dept_id, dept_id=dept_id,
small=False, small=False,
global_if_not_found=global_if_not_found.upper() not in ["0", "FALSE"], strict=strict.upper() not in ["0", "FALSE"],
) )