Projet

Général

Profil

Actions

Fonctionnalité #18094

fermé

Recherche par agent SEDA 2

Ajouté par Cyril VAZQUEZ il y a environ 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Rejeté
Priorité:
1-Majeur
Assigné à:
Version cible:
Début:
24/08/2021
Echéance:
21/09/2021
Tags RM:

Description

En tant que service demandeur d'archives, je veux rechercher les unités d'archives selon les informations d'un agent présent dans les métadonnées descriptives afin de retrouver les contenus liés à un agent.

Détail
Le SEDA 2 a introduit la structure Agent pour rattacher des personnes ou organismes à la description des unités d'archive, avec des rôles prédéfinis (destinataire, rédacteur, émetteur, etc...)
Le SEDA 2.2 ajoutera un agent "générique" et utilisera la notion de rôle pour définir la relation avec le contenu décrit.

Ces structures sont intégrées sous la forme de tableau d'objets agents.
Dans la version 2.7, la recherche n'est possible qu'en mode texte intégral, moins fiable que des index et des mots-clés, ce qui pose des problèmes lorsque l'agent est l'un des principaux critères métier discriminants (bulletins de salaire).

La demande est donc d'ajouter au moteur de recherche la gestion d'un critère "agent" avec la construction d'une requête dans le document descriptif, à la manière de ce qui est fait pour les mots-clés qui sont aussi un tableau d'objet.

Dans un premier temps, il est raisonnable par contre de restreindre à une seule ligne de critère (recherche un seul agent) pour ne pas complexifier le moteur et grever les performances.

Conditions d'acceptation
Le formulaire de recherche du registre des archives publiques comporte un bloc permettant de saisir tout ou partie des valeurs de propriétés d'un agent recherché (nom, prénom, date de naissance, fonction, rôle, identifiant...) à l'aide d'égalité stricte ou de termes approchants (joker)

Les critères des parties d'agent sont liés par un opérateur "ET"
Lorsque le rôle n'est pas précisé, la recherche est réalisée dans TOUS les agents liés (nommés en SEDA 2.1 ou générique "agent") avec un opérateur "OU".

En SEDA 1, l'usage de ce formulaire ne ramène aucun résultat (AND avec autres critères, sous peine de tout ramener si aucun autre critère)

Mis à jour par Cyril VAZQUEZ il y a environ 3 ans

Analyse d'impact et complexité :

Front

  • formulaire agent dans le registre
  • sérialisation JSON du formulaire :
{
  "agent": {
    "firstName": "Alain",
    "givenName" : "CONNU",
    "role" : "addressee"
  }
}

Back

Ajouter le critère "Agent" de type objet aux interfaces :

  • ext/archivesPubliques/presentation/maarchRM/UserStory/archiveRetrieval/searchPublicArchiveInterface.php
  • ext/archivesPubliques/bundle/archivesPubliques/contentInterface.php

Opportunité d'ajouter en tant que tableau (comme mots-clés) pour prévoir la fonction plus tard ?

Ajouter le code de construction du SQL dans le contrôleur :

  • ext/archivesPubliques/bundle/archivesPubliques/Controller/content.php

Pour les fonctions find() et count(), ajouter le critère dans les paramètres.
Pour la fonction searchJson() construire le SQL spécifique :

    if (is_array($agent) && !empty($agent)) {
        // SEDA 2 and 2.1 named agent groups
        // New SEDA 2.2 agents will use 'role' attribute
        $namedAgents = ['authorizedAgent', 'writer', 'addressee', 'recipient', 'transmitter', 'sender'];
        $queryAgent = [];

        foreach ($agent as $agentObj) {
            if (isset($agentObj->role) && in_array($agentObj->role, $namedAgents)) {
                $properties = [$agentObj->role];
                unset($agentObj->role);
            } else {
                $properties = array_merge($namedAgents, ['agent']);
            }

            $queryAgentParts = [];
            foreach ($properties as $property) {
                $queryAgentPropertyParts = [];
                foreach ($agentObj as $name => $value) {
                    $queryAgentPropertyParts[] = '"description"->\''.$property.'\' @> \'[{"'.$name.'": "'.$value.'"}]\'';
                }
                $queryAgentParts[] = '('.implode (' AND ', $queryAgentPropertyParts).')';
            }
            
            $queryAgent[] = implode (' OR ', $queryAgentParts);
        }

        $queryParts['agent'] = '<?SQL ('.implode(' OR ', $queryAgent).') ?>';
    }

Pour la fonction searchTable renvoyer une requête fausse:

        if (is_array($agent) && !empty($agent)) {
            $queryParts['agent'] = '0=1';
        }

Mis à jour par Emmanuel DILLARD il y a environ 3 ans

  • Echéance mis à 21/09/2021

Mis à jour par Emmanuel DILLARD il y a environ 3 ans

  • Statut changé de R&D - A planifier à R&D - En cours

Mis à jour par Emmanuel DILLARD il y a environ 3 ans

  • Statut changé de R&D - En cours à R&D - A planifier
  • Priorité changé de 0-Bloquant à 1-Majeur

Mis à jour par Cyril VAZQUEZ il y a presque 3 ans

  • Statut changé de R&D - A planifier à En cours
  • Assigné à mis à Cyril VAZQUEZ
  • Version cible changé de 2.8 à 2.8.2
  • Tags RM 2.8.0 supprimé

Lié à transformation SIP conformément à modèle OAIS, autre demande #

Mis à jour par Cyril VAZQUEZ il y a presque 3 ans

  • Statut changé de En cours à Rejeté

Rendu inutile par conversion AIP V3

Actions

Formats disponibles : Atom PDF