# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # ScoDoc # # Copyright (c) 1999 - 2021 Emmanuel Viennet. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Emmanuel Viennet emmanuel.viennet@viennet.net # ############################################################################## """ Module main: page d'accueil, avec liste des départements Emmanuel Viennet, 2021 """ from app.models import ScoDocSiteConfig from app.scodoc.sco_logos import write_logo, find_logo, delete_logo import app from flask import current_app class Action: """Base class for all classes describing an action from from config form.""" def __init__(self, message, parameters): self.message = message self.parameters = parameters @staticmethod def build_action(parameters, stream=None): """Check (from parameters) if some action has to be done and then return list of action (or else return empty list).""" raise NotImplementedError def display(self): """return a str describing the action to be done""" return self.message.format_map(self.parameters) def execute(self): """Executes the action""" raise NotImplementedError GLOBAL = "_" def _libelle_dept(dept_key=None, dept_name=None): if dept_key == GLOBAL: lib_dept = f"au niveau global" else: lib_dept = f"pour le département {dept_name}" return lib_dept class LogoUpdate(Action): """Action: change a logo dept_id: dept_id or '_', logo_id: logo_id, upload: image file replacement """ def __init__(self, parameters): super().__init__( f"Modification du logo {parameters['logo_id']} {_libelle_dept(parameters['dept_key'], parameters['dept_name'])}", parameters, ) @staticmethod def build_action(parameters): dept_id = parameters["dept_key"] if dept_id == GLOBAL: dept_id = None parameters["dept_id"] = dept_id if parameters["upload"] is not None: return LogoUpdate(parameters) return None def execute(self): current_app.logger.info(self.message) write_logo( stream=self.parameters["upload"], dept_id=self.parameters["dept_id"], name=self.parameters["logo_id"], ) class LogoDelete(Action): """Action: Delete an existing logo dept_id: dept_id or '_', logo_id: logo_id """ def __init__(self, parameters): super().__init__( f"Suppression du logo {parameters['logo_id']} {_libelle_dept(parameters['dept_key'], parameters['dept_name'])}", parameters, ) @staticmethod def build_action(parameters): parameters["dept_id"] = parameters["dept_key"] if parameters["dept_key"] == GLOBAL: parameters["dept_id"] = None if parameters["do_delete"]: return LogoDelete(parameters) return None def execute(self): current_app.logger.info(self.message) delete_logo(name=self.parameters["logo_id"], dept_id=self.parameters["dept_id"]) class LogoInsert(Action): """Action: add a new logo dept_key: dept_id or '_', logo_id: logo_id, upload: image file replacement """ def __init__(self, parameters): super().__init__( f"Ajout du logo {parameters['name']} {_libelle_dept(parameters['dept_key'], parameters['dept_name'])} ({parameters['upload']}).", parameters, ) @staticmethod def build_action(parameters): if parameters["dept_key"] == GLOBAL: parameters["dept_id"] = None if parameters["upload"] and parameters["name"]: logo = find_logo( logoname=parameters["name"], dept_id=parameters["dept_key"] ) if logo is None: return LogoInsert(parameters) return None def execute(self): dept_id = self.parameters["dept_key"] if dept_id == GLOBAL: dept_id = None current_app.logger.info(self.message) write_logo( stream=self.parameters["upload"], name=self.parameters["name"], dept_id=dept_id, ) class BonusSportUpdate(Action): """Action: Change bonus_sport_function_name. bonus_sport_function_name: the new value""" def __init__(self, parameters): super().__init__( f"Changement du calcul de bonus sport pour ({parameters['bonus_sport_func_name']}).", parameters, ) @staticmethod def build_action(parameters): if ( parameters["bonus_sport_func_name"] != ScoDocSiteConfig.get_bonus_sport_func_name() ): return [BonusSportUpdate(parameters)] return [] def execute(self): current_app.logger.info(self.message) ScoDocSiteConfig.set_bonus_sport_func(self.parameters["bonus_sport_func_name"]) app.clear_scodoc_cache()