# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # ScoDoc # # Copyright (c) 1999 - 2023 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 # ############################################################################## """ """ from flask import current_app from app.scodoc.sco_logos import find_logo 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): """Check (from parameters) if some action has to be done and then return list of action (or else return None).""" 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 = "_" class LogoRename(Action): """Action: rename a logo dept_id: dept_id or '-' logo_id: logo_id (old name) new_name: new_name """ def __init__(self, parameters): super().__init__( f"Renommage du logo {parameters['logo_id']} en {parameters['new_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["new_name"]: logo = find_logo( logoname=parameters["new_name"], dept_id=parameters["dept_key"], strict=True, ) if logo is None: return LogoRename(parameters) def execute(self): from app.scodoc.sco_logos import rename_logo current_app.logger.info(self.message) rename_logo( old_name=self.parameters["logo_id"], new_name=self.parameters["new_name"], dept_id=self.parameters["dept_id"], ) 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']} pour le département {parameters['dept_id']}", 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): from app.scodoc.sco_logos import write_logo 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']} pour le département {parameters['dept_id'] or 'tous'}.", 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): from app.scodoc.sco_logos import delete_logo 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']} pour le département {parameters['dept_key']} ({parameters['upload'].filename}).", 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"], strict=True ) if logo is None: return LogoInsert(parameters) return None def execute(self): from app.scodoc.sco_logos import write_logo 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, )