Evolution #79
ferméNouveau module de gestion des équipements
Ajouté par Grégory MARIGOT - TEICEE il y a presque 14 ans. Mis à jour il y a plus de 13 ans.
100%
Description
Toute la gestion du parc informatique (ordinateurs, périphériques et logiciels) est gérée par l'ancien code d'EPNadmin. Il serait nécessaire de remplacer celà par de nouveaux modules sur le framework Symfony.
Si la gestion complète peut être considérée accessoire, la gestion des postes reste un élément crucial de l'application, les ordinateurs disponibles étant un élément de base lors de la définition de sessions. Il est donc indispensable d'avoir un module permettant de les gérer.
Mis à jour par Grégory MARIGOT - TEICEE il y a presque 14 ans
- Statut changé de Nouveau à In Progress
- % réalisé changé de 0 à 70
Modifications publiées sur le svn (r328) :
Ajout des modules CRUD pour la gestion des ordinateurs, périphériques et logiciels.
Les modules sont relativement aboutis, les classes (objets et peers) ont été retravaillées, les formulaires (création/édition et filtres) sont en place.
Pour le moment ces modules n'apparaissent pas dans le menu principal et n'ont pas de routes personnalisées. Ils sont accessibles par liens depuis les salles ou structures, ou en tapant directement les URL des modules : /equipment_computer, /equipment_peripheral, /equipment_software
Note :
Mise en place d'un systeme Ajax sur un widget de type 'select' pour qu'il puisse déclencher la mise à jour d'un contenu sur la page
(utilisé ici sur les filtres de la liste des ordinateurs, avec màj du sélecteur des salles selon le sélecteur des structures).
- Formulaires pour gérer les liens entre ordinateurs, périphériques et logiciels
- Possibilité de "clonage" et utilisation de modèles (évolution future)
- Gestion d'une suppression "soft" (masquer plutot qu'effacer pour conservation des utilisations)
- Traductions des libellés et contrôle fin des permissions (à voir globalement au final)
Mis à jour par Grégory MARIGOT - TEICEE il y a presque 14 ans
- % réalisé changé de 70 à 80
Modifications publiées sur le svn (r330) :
Ajout de 2 tables de liens dans la BDD pour remplacer 'equipment_link' :- equipment_peripheral_link : association entre un périphérique et un ordinateur
- equipment_software_link : association entre un logiciel et un ordinateur
Ces 2 tables permettent un meilleur traitement des relations que la table unique. Les associations entre périphérique et logiciel ne sont pas conservées, je pense qu'il est suffisant et plus simple de se contenter d'associations de ces 2 entités vers les ordinateurs.
Les actions et formulaires ont été ajoutés pour gérer les associations, aussi bien à partir d'un ordinateur, qu'à partir d'un périphérique ou d'un logiciel.
Au passage, les listes de périphériques et de logiciels ont été améliorées avec un filtre supplémentaire sur le type. Concernant le type, le contenu des tables contenait les libellés français qui sont à remplacer par le libellé anglais. En effet, les types étant alimentés par des listes fichier avec clés/libellés, le terme anglais fournis une meilleure clé, l'affichage se servant du libellé correspondant (le terme français).
A noter sur les listes que la valeur du filtre sur GEPN/EPN est conservée lorsque l'on passe d'une liste à l'autre (entre ordinateurs, périphériques et logiciels).
Détail des opérations pour migrer la BDD¶
Création et alimentation de la table de liens ordinateurs-périphériques :
CREATE TABLE equipment_peripheral_link ( equipment_computer_id INT NOT NULL, equipment_peripheral_id INT NOT NULL, PRIMARY KEY (equipment_computer_id, equipment_peripheral_id) ) ENGINE = InnoDB; ALTER TABLE equipment_peripheral_link ADD CONSTRAINT equipment_peripheral_link_FK_1 FOREIGN KEY (equipment_computer_id) REFERENCES equipment_computer (id) ON DELETE CASCADE; ALTER TABLE equipment_peripheral_link ADD CONSTRAINT equipment_peripheral_link_FK_2 FOREIGN KEY (equipment_peripheral_id) REFERENCES equipment_peripheral (id) ON DELETE CASCADE; INSERT INTO equipment_peripheral_link (equipment_computer_id, equipment_peripheral_id) SELECT equipment_computer_id, equipment_peripheral_id FROM equipment_link WHERE equipment_software_id=0;
Création et alimentation de la table de liens ordinateurs-logiciels :
CREATE TABLE equipment_software_link ( equipment_computer_id INT NOT NULL, equipment_software_id INT NOT NULL, PRIMARY KEY (equipment_computer_id, equipment_software_id) ) ENGINE = InnoDB; ALTER TABLE equipment_software_link ADD CONSTRAINT equipment_software_link_FK_1 FOREIGN KEY (equipment_computer_id) REFERENCES equipment_computer (id) ON DELETE CASCADE; ALTER TABLE equipment_software_link ADD CONSTRAINT equipment_software_link_FK_2 FOREIGN KEY (equipment_software_id) REFERENCES equipment_software (id) ON DELETE CASCADE; INSERT INTO equipment_software_link (equipment_computer_id, equipment_software_id) SELECT equipment_computer_id, equipment_software_id FROM equipment_link WHERE equipment_peripheral_id=0;
Si nécessaire, récupération des liens logiciel-périphérique à transformer en liens logiciel-ordinateur (risques de doublons à éliminer) :
INSERT INTO equipment_software_link (equipment_software_id, equipment_computer_id) SELECT ps.equipment_software_id, pc.equipment_computer_id FROM equipment_link AS ps INNER JOIN equipment_link AS pc ON (ps.equipment_peripheral_id = pc.equipment_peripheral_id AND pc.equipment_computer_id>0) WHERE ps.equipment_computer_id=0
Conversion des valeurs mémorisées pour les types des périphériques et logiciels :
UPDATE equipment_peripheral SET type='Printer' WHERE type='Imprimante'; UPDATE equipment_peripheral SET type='Audio' WHERE type='Audio'; UPDATE equipment_peripheral SET type='Graphical' WHERE type='Graphique'; UPDATE equipment_peripheral SET type='Video' WHERE type='Vidéo'; UPDATE equipment_peripheral SET type='Documentation' WHERE type='Documentation'; UPDATE equipment_peripheral SET type='Other' WHERE type='Autre'; UPDATE equipment_software SET type='Educative' WHERE type='Educatif'; UPDATE equipment_software SET type='Game' WHERE type='Jeu'; UPDATE equipment_software SET type='Office' WHERE type='Bureautique'; UPDATE equipment_software SET type='Learning' WHERE type='Autoformation'; UPDATE equipment_software SET type='Multimedia' WHERE type='Multimédia'; UPDATE equipment_software SET type='System' WHERE type='Système'; UPDATE equipment_software SET type='Driver' WHERE type='Pilote'; UPDATE equipment_software SET type='Other' WHERE type='Autre';
Pour finir, suppression de la table de liens d'origine devenue obsolète :
DROP TABLE equipment_link;
Mis à jour par Grégory MARIGOT - TEICEE il y a presque 14 ans
Attention !
Dans l'organisation d'origine, il semble possible de lier par exemple sur l'un de ces ordinateurs un périphérique dont la fiche aurait été définie sur un autre EPN (aspect collaboratif, chacun peu utiliser les fiches périphériques ou logiciels créées par n'importe quel EPN pour les lier à ses postes).
Si ce principe peut paraitre sympathique, je ne l'apprécie que moyennement à l'usage... Je trouve délicat d'associer à ses propres postes des entités dont le contrôle nous échappe.
Un exemple :- Un animateur créé une fiche pour le logiciel "Firefox 2", qu'il associe à ces postes.
- Un autre animateur d'un autre EPN (et même autre GEPN) peut voir cette fiche et la réutiliser pour associer également le logiciel "Firefox 2" à ses postes plutôt que de devoir recréer une autre fiche logiciel.
- Mais un jour ou l'autre, le 1er animateur mets à jour ses postes en "Firefox 3", et plutôt que de créer une nouvelle fiche logiciel pour ensuite devoir refaire toutes les affectations sur tous ses postes... il peut préférer tout simplement éditer sa fiche "Firefox 2" en "Firefox 3".
- Le problème bien sur, c'est que tous les autres animateurs qui ont liés leurs ordinateurs à cette fiche se retrouvent maintenant avec "Firefox 3" d'indiqué sans même le savoir.
Pour celà, je préfère un système cloisonné, ou chaque EPN créé ses propres fiches logiciels et périphériques, chacun ne voyant que les siennes et ne pouvant associer d'entités extérieures à leur EPN sur leurs postes.
En contrepartie, pour faciliter la création de fiches et éviter à chacun des taches similaires, on peut imaginer un système de fiches "modèles". Mais celle-ci seraient à part, liées à aucun ordinateur, uniquement utilisables pour les cloner en ses propres fiches. On peut imaginer que chaque animateur soit capable de contribuer à la création de ses modèles communs, ou bien réserver cette gestion uniquement au "super admin" (à voir en fonction de la quantité, du besoin de canonisation et du soucis de cohérence).
La mise en place d'un tel système de modèle n'est pas prioritaire. Il pourra faire l'objet d'une évolution future, mais n'est pas bloquant pour le fonctionnement de l'application.
Par contre, à l'heure actuelle il s'avère nécessaire de régler le sort des associations "étrangères" existantes : pour toute fiche de périphérique et de logiciel qui se retrouve associée à un ordinateur d'un autre EPN, la fiche est à cloner dans cet EPN et l'association à redéfinir en conséquence.
Edit : Visiblement les cas de liens vers des entités externes à l'EPN du poste sont très rares, la création des nouvelles fiches d'équipements clones pourra être traitée à la main. Les requêtes SQL suivantes permettent de retrouver les éléments concernés :
SELECT equipment_computer_id, room.structure_id, equipment_peripheral_id, equipment_peripheral.structure_id FROM equipment_peripheral_link INNER JOIN equipment_computer ON equipment_computer_id = equipment_computer.id INNER JOIN room ON equipment_computer.room_id = room.id INNER JOIN equipment_peripheral ON equipment_peripheral_id = equipment_peripheral.id WHERE room.structure_id != equipment_peripheral.structure_id SELECT equipment_computer_id, room.structure_id, equipment_software_id, equipment_software.structure_id FROM equipment_software_link INNER JOIN equipment_computer ON equipment_computer_id = equipment_computer.id INNER JOIN room ON equipment_computer.room_id = room.id INNER JOIN equipment_software ON equipment_software_id = equipment_software.id WHERE room.structure_id != equipment_software.structure_id
Mis à jour par Grégory MARIGOT - TEICEE il y a presque 14 ans
Modifications publiées sur le svn (r340 et r341) :
- Mise à jour du nombre de postes par salle en utilisant les hooks.
- Utilisation de MyPropelBehaviorFilters pour la récupération des équipements liés.
- Utilisation de MyPropelBehaviorImages pour la gestion des images uploadés.
- Application plus stricte de la politique de droits.
- Nettoyage du code en conséquence.
Les hooks sont des méthodes dont les appels sont intégrés directement dans les classes de base du modèle objet par Propel. Sont disponibles des actions pre/post sur Save/Insert/Update/Delete. Ils permettent d'insérer du code au lieu de surcharger les méthodes save ou delete.
Dans le cas présent :- le hook postInsert sur Room permet la création initiale des postes
- les hook postInsert et postDelete sur EquipementComputer permettent de demander la mise à jour du nombre de postes présent dans la salle parente
Note : Les mises en place des Behaviors de Propel sont détaillées dans le ticket #80 (notes 7 et 8), de plus MyPropelBehaviorImages a finalement été renommé en MyPropelBehaviorUploads (r343)
Mis à jour par Grégory MARIGOT - TEICEE il y a presque 14 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 80 à 100
En conclusion¶
Ces nouveaux modules dotent ProxyEPN d'une gestion de parc complète, dont les fonctionnalités sont jugées suffisantes pour le moment. Ce n'est certe pas le système ultime, mais les améliorations envisagées (soft delete, clonage, modèles) pourront faire l'objet de demandes d'évolutions futures (cf #88).
Edit 07/04¶
Modifications publiées sur le svn (r431) :
Afin de pouvoir les distinguer, les champs 'type' des logiciels & périphériques sont renommés :- table 'equipment_peripheral' : peri_type remplace type
- table 'equipment_software' : soft_type remplace type
Opérations de migration de la BdD :
ALTER TABLE equipment_peripheral CHANGE `type` peri_type VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; ALTER TABLE equipment_software CHANGE `type` soft_type VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- Statut changé de Résolu à Fermé