IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Suivi de modifications dans l'administration


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut Suivi de modifications dans l'administration
    Voilà un cas intéressant qui n'est pas (ou peu mentionné) sur la toile.

    Un objet "document"
    Un administrateur se connecte, le modifie.

    On veut avoir le suivit des modification et quel administrateur a modifié l'objet document.

    Un schéma simplifié qui me parait correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Document:
      actAs:
        Timestampable: ~
        Sluggable: { fields: [name] }
      columns:
        id:             { type: integer, notnull: true, primary: true, autoincrement:true }
        ref:            { type: string(40) }
        name:         { type: string(140) }
        article:        { type: clob }
     
    Modification:
      actAs:
        Timestampable: ~
      columns:
        id:             { type: integer, notnull: true, primary: true, autoincrement:true }
        description:    { type: string(140) }
        document_id:    { type: integer }
        user_id:        { type: integer }
      relations:
        Document: { onDelete: CASCADE, local: document_id, foreign: id, foreignAlias: Modifications }
        User:
          class: sfGuardUser
          foreign: id
          local: user_id
          type: one
          onDelete: cascade
          foreignType: one
          foreignAlias: Profile
    Quelle est la bonne stratégie pour ceci ? Y a-t-il quelque chose de prévu à la base ?

    Ma première idée est d'utiliser un embed form pour les modifications et de réécrire l'executeCreate autogénéré de l'administration pour voir qui a modifié le document.

    Mais cela me parait un peu bordélique.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne pense pas que ce type d'action soit a traiter dans un form.

    Par contre, dans l'objet du modèle, avec une réécriture de l'action save() cela me semble une meilleur idée.

    Je me méfierais, malgré tout dans ton schéma de la notion de cascade pour l'effacement. Si on supprime un enregistrement, on perd la trace des modifications, y compris la suppression. Est-ce une bonne idée ?

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 775
    Par défaut


    Il y a aussi le behaviour de Doctrine Versionable : http://www.doctrine-project.org/proj...rs:versionable

    Maintenant, ça doit encore être un peu à tweaker sur les bords, ça ne fait que sauvegarder des copies des enregistrements à chaque modification.

    Maintenant, utiliser des forms pour cela... Et si tu devais faire une modification automatique (comme les bots de Wikipedia) depuis ton application ? Tu fais remplir les forms par symfony pour se les renvoyer ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut
    Bonne remarques en effet, ce n'est pas intéressant de passer par les formulaire.

    Je vais passer par la fonction "versionable" doctrine et traquer qui a modifié le document dans la fonction save.

    Il n'y a que les administrateurs qui peuvent réaliser des changement donc je pense que cela ne posera pas de problème.

    Pour effacer en cascade un enregistrement cela me parait correct... C'est sur que pas moyen de restaurer ou de voir les anciennes version après. A voir de plus près.

    Question bête mais c'est bien de la façon suivante ?

    Dans Document.class.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      public function save(Doctrine_Connection $conn = null)
      {
        // mes actions pour récupérer l'id de l'utilisateur connecté
       // $id = truc;
        $this->setUserId($id);
        parent::save($conn);    
      }
    Comment récupérer le user id ?
    Je ne comprends pas j'ai essayé $this->getUser()->getId() et plein de trucs mais j'ai toujours "Doctrine_Null Object()" comme valeur de Id...

    J'ai pourtant bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class myUser extends sfGuardSecurityUser

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    Alors tu peux soit overloader la methode save comme tu le fais.

    Sinon il y a la methode preSave si tu ne veux pas toucher a la methode save.

    pour récupérer l'utilisateur quand tu n'est pas dans ton controlleur, il te faudra passer par le sfContext.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $user = sfContext::getInstance()->getUser();
    Parcontre veille bien que ton utilisateur soit authentifié! sinon pas d'id

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut
    Ah oui en effet, je n'ai pas réalisé que je ne pouvais pas récupérer l'utilisateur dans la couche model de cette façon.

    Merci, et super pour les méthodes preSave() et postSave(), c'est quand même bien pensé doctrine !

Discussions similaires

  1. [XL-2010] suivie de modification dans excel (à supprimer)
    Par nobue dans le forum Excel
    Réponses: 0
    Dernier message: 22/11/2013, 18h34
  2. Suivi de modifications dans TexShop
    Par zimoun dans le forum Editeurs / Outils
    Réponses: 7
    Dernier message: 08/03/2010, 20h40
  3. Suivi des modification dans Windows XP
    Par Chebil2006 dans le forum Windows XP
    Réponses: 1
    Dernier message: 15/05/2007, 12h25
  4. Réponses: 2
    Dernier message: 17/08/2006, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo