Créer un nouvel objet

I. Créer l'objet, ses accès et ses tris

mettre le nom de l'objet au singulier (convention)

II. Créer une grille de catalogage

1) Créer la grille dans bib

pages/bib/catalogue/catalogage/grilles/nom_de_l_objet/nom_de_la_grille
on peut copier la _page et les _template sur les autres objets ou grilles (sauf modifications spéciale)
Paramètres :
> classe_formulator_css : chaine de base à partir de laquelle toutes les classes des éléments css du formulator seront générées (généralement tvs_formulator)
> page_ws : Web Services à utiliser. Généralement : 
bib_ws.php?module=catalogue/catalogage/grilles/nom_de_l_objet/nom_de_la_grille
cf. + bas créer la grille dans bib_ws
> type_formulator_js : nom de la classe javascript à utiliser pour générer le formulator coté client (par défaut tvs_formulator)

2) Créer la grille dans bib_ws

pages/bib_ws/catalogue/catalogage/grilles/nom_de_l_objet/_parametres/type_objet =>le type d'objet

pages/bib_ws/catalogue/catalogage/grilles/nom_de_l_objet/nom_de_la_grille
On peut copier _page sur les autres objets ou grilles
Paramètres :
> type_formulator_php : Nom de la classe PHP à utiliser comme formulator (par défaut : tvs_formulator_server) pour générer    le formulator coté serveur
> plugin_formulaire : retourne la liste des onglets/champs/sous-champs pour générer un formulaire vierge
   catalogue/catalogage/definitions_grilles/nom_de_l_objet/nom_de_la_grille
> plugin_formulaire_modification : Plugin utilisé pour générer un formulaire à partir d'une notice existante.
   catalogue/catalogage/definitions_grilles/nom_de_l_objet/nom_de_la_grille_modification
> plugin_switcher : Ce plugin décrit les actions à effectuer en fonction des différentes interactions avec les différents éléments du formulaire
   catalogue/catalogage/switchers/nom_de_l_objet/nom_de_la_grille

3) Définir les sous-champs

plugins/catalogue/catalogage/definitions_ss_champs/nom_de_l_objet/nom_de_la_grille/nom_du_ss-champ 
(par exemple 200_a)

Plugin (script) utilisé : div/plugins_2_array
Paramètres :
> nom : nom du ss-champ (a, f, g...)
> type : type du ss-champ (textbox, select, textarea, autocomplete...)
> intitule : intitulé du ss-champ (lié à langues/bib/catalogue/catalogage/grilles/nom_de_l_objet/nom_de_la_grille/ss_champ_XXX_description
> readonly : si vaut "readonly" le ss-champ ne sera pas modifiable.
> auto_plugin : on remet le nom du plugin lui-même
> valeur : on peut spécifier une valeur du ss-champ
> evenements : plugin de paramétrage des différents événements possibles sur ce ss-champ par exemple :
catalogue/catalogage/definitions_groupes_evenements/biblio/unimarc_standard/standard
(cf définir les événements)
> icones : A utiliser uniquement si on n'utilise pas les icones par défaut !
  soit !!icones => un des groupes d'icones
  soit icones/!!0, !!1 ,!! 2... => une des icones

Cas spécifiques à certains types :
select :
> liste_choix => 0,1,2/intitule | valeur. Utiliser les !! et les ?? pour définir une liste
> intitule_defaut => sélectionné par défaut

autocomplete :
> ws_url : ws utilisé pour la recherche
   par ex: bib_ws.php?module=catalogue/catalogage/recherches/biblio/unimarc_standard/700_9a&
> evenments : utiliser un groupe d'événement spécifique à autocomplete

4) Définir les champs

plugins/catalogue/catalogage/definitions_champs/nom_de_l_objet/nom_de_la_grille/nom_du_champ 
(par exemple 200)

Plugin (script) utilisé : div/plugins_2_array
Paramètres : beaucoup sont communs avec les ss-champs
> icones
> intitule
> nom
> auto_plugin
> ss_champs/0,1,2... => les sous champs. On utilisera des !! pour importer les sous-champs définis ci-dessus

5) Définir les onglets

plugins/catalogue/catalogage/definitions_onglets/biblio/unimarc_standard/nom_de_l_objet/nom_de_la_grille/nom_de_l_onglet

Plugin (script) utilisé : div/plugins_2_array
Paramètres :
Pour chaque onglet :
> Intitule
> Champs (utilise !! pour inclure les champs)

6) Définir la grille

plugins/catalogue/catalogage/definitions_grilles/nom_de_l_objet/nom_de_la_grille

Plugin (script) utilisé : catalogue/catalogage/grilles/add_ID_grille ou catalogue/catalogage/grilles/add_ID_grille_modification
Ces plugins servent à ajouter un ID aux champs et aux sous-champs (pour qu'ils soient manipulables).
Le 1er le fait pour une grille vierge, tandis que le second le fait pour une modification de notice

Paramètres :
pour une grille vierge :
> icones_champ_defaut : utilisé avec !! pour inclure le groupe d'icones à utiliser par défaut pour un champ (si non surchargé)
> icones_ss_champ_defaut : idem pour les ss-champs
> onglets : utiliser !! pour inclure les onglets dans l'ordre désiré
> intitules : Différents intiyulés utilisés par les fonctions javascript

pour une modification de notice :
> plugin_definition_grille : le plugin pour une grille vierge (cf ci-dessus)

7) Définir icones et groupes d'icones

plugins/catalogue/catalogage/definitions_icones/biblio/unimarc_standard
plugins/catalogue/catalogage/definitions_groupes_icones/biblio/unimarc_standard

ATTENTION : les icones peuvent être communes aux différents types d'objets, mais il n'y a pas de noeud div, aussi, on utilisera les icones définies dans biblio/unimarc_standard pour les icones "communes"

On définira d'abord les icones puis les groupes d'icones.

Pour les icones, on aura en paramètres :
> alt : (utiliser avec ??) => l'intitulé de l'icone
> src : l'url du fichier image
> action : la commande javascript quand on clique sur l'icone
On peut utiliser des raccourcis dans le javascript :
#formulator#  => l'objet JS qui gère le formulaire
#element# => l'élément (champ ou sous-champ) dont dépend l'icone
#conteneur# => le <div> qui contient un élément
Par exemple : pour monter un ss-champ : #formulator#.liste_objets['#element#'].monter();
Pour ajouter un ss-champ : #formulator#.get_liste_ss_champs(#element#);

Deux groupes d'icones sont importants : "champ_defaut" et "ss_champ_defaut"

Pour les groupes d'icones :
On a simplement la liste des icones incluses avec !!

8) Définir les groupes d'événements

plugins/catalogue/catalogage/definitions_groupes_evenements/nom_de_l_objet/nom_de_la_grille/groupe_d_evenement

ATTENTION : les événements peuvent être communes aux différents types d'objets, mais il n'y a pas de noeud div, aussi, on utilisera les événements définis dans biblio/unimarc_standard pour les événements "communs"

Plugin (script) utilisé : div/plugins_2_array
Paramètres :
> Noms des événements => ligne javascript à exécuter

On utilisera les mêmes raccourcis que pour les icones.

9) Définir les switchers

Les switchers sont les pendants coté serveur des événements et des icones (coté javascript). Lorsqu'on effectue une action (champ, icone...), les événements et icones vont provoquer une action dans javascript. Mais quand un objet javascript veut effectuer une opération pour modifier la notice (en php), il utilise la fonction transaction() qui va transmettre une requête au serveur. Les switchers servent à contextualiser cette requête, c'est à dire qu'on n'utilisera pas les mêmes plugins selon qu'on validera (par exemple) un sous-champ normal ou un sous-champ de lien.

Il s'agit à chaque fois de paramétrer quel plugin utiliser quand tel objet javascript envoie telle requête (sachant qu'on pourra aussi définir des plugins par défaut, communs à tous les champs ou sous champs)

Les plugins utilisés retourneront eux-mêmes du javascript pour influer sur l'affichage.

plugins/catalogue/catalogage/switchers/nom_de_l_objet/nom_de_la_grille

Plugin (script) utilisé : catalogue/catalogage/grilles/switcher
Paramètres :
Il y a 6 rubriques :
> Défaut_champ/nom_de_l_evenement => plugin à utiliser par défaut pour cet événement dans tous les champs (sauf surcharge)
> Défaut_onglet/nom_de_l_evenement => plugin à utiliser par défaut pour cet événement dans tous les onglets
> Défaut_ss_champ/nom_de_l_evenement => plugin à utiliser par défaut pour cet événement dans tous les ss-champs 
> liste_formulaire/nom_de_l_evenement => plugin à utiliser pour cet événement dans le formulaire
> liste_onglet/ID_onglet/nom_de_l_evenement => plugin à utiliser pour cet événement dans cet onglet
> liste_onglet/ID_onglet/nom_de_l_evenement => plugin à utiliser pour cet événement dans cet onglet
> liste_champs/nom_champ/nom_de_l_evenement  OU  liste_champs/nom_champ/nom_ss_champ/nom_de_l_evenement
   => plugin à utiliser pour cet événement dans ce champ ou dans ce ss-champ

9) Définir la grille par défaut

plugins/catalogue/catalogage/type_2_grille

Associe une grille par défaut à un type_objet (Utilisé pour les rebonds d'une notice à une autre)

10) Définir la validation

plugins/catalogue/catalogage/validation/nom_de_l_objet/nom_de_la_grille

Plugin (script) utilisé : catalogue/catalogage/grilles/enregistrer_notice
Paramètres :
> plugin_marc_xml : plugin utilisé pour convertir la grille en marcxml
> plugin_notice_2_db : plugin utilisé pour enregistrer la notice dans a base de données (générer les accès, les liens...)

III. Paramétrer les plugins pour générer les accès et les liens

1) Les plugins principaux : notice_2_db 

plugins/catalogue/marcxml/db/notice_2_db/nom_de_l_objet/nom_de_la_grille

Ces plugins créent ou maj une notice XML dans la base de données. Ils utilisent des plugins pour :
> Récupérer accès, tris, liens...
> Maj les liens implicites
> faire les opérations sql

Plugin (script) utilisé : catalogue/marcxml/db/notice_2_db
Paramètres :
> type_objet
> plugin_notice_2_infos : le plugin qui va récupérer les accès, les liens...
> plugin_crea_notice : le plugin qui va enregistrer la notice dans la DB (plugin statique)
> plugin_maj_liens_implicites : le plugin qui va mettre à jour les notices liées à celle-ci qui doivent l'être

2) Récupérer les infos : notice_2_infos

plugins/catalogue/marcxml/db/notice_2_infos/nom_de_l_objet/nom_de_la_grille

Ces plugins retournent les infos nécessaire pour enregistrer une notice dans la DB : accès, tri, contenu, liens

Plugin (script) utilisé :catalogue/marcxml/db/notice_2_infos
Paramètres :
> plugin_acces : plugin pour récupérer les accès
> plugin_tri : pour récupérer les tris
> plugin_liens_explicites : les liens explicites

3) Récupérer les liens explicites : get_liste_liens_explicites, param_liste_liens_explicites et param_liens_explicites

get_liste_liens_explicites
plugins/catalogue/marcxml/db/get_liste_liens_explicites/nom_de_l_objet/nom_de_la_grille

Ces plugins sont appelés par les plugins notices_2_infos pour récupérer les liens explicites
Plugin (script) utilisé :catalogue/marcxml/db/get_liste_liens_explicites
Paramètres :
> champs_liens_explicites : liste des champs de lien pour ce type de notice. On utilise des !! pour intégrer les données paramétrées dans param_liste_liens_explicites

param_liste_liens_explicites
Il ne s'agit que de lister les champs de liens pour un objet donné. On utilise des !! pour intégrer les données paramétrées dans param_liens_explicites

param_liens_explicites
C'est ici qu'on définit l'essentiel des champs de liens explicites.
Ce plugin est utilisé pour les liens explicites, mais également pour les liens implictes
(car les 2 liens sont symétriques)

Paramètres :
> type : type de notice liée
> type_lien : on peut avoir différents types de liens vers un même objet. Par exemple d'unenotice biblio vers un auteur, le lien peut être auteur principal (700), secondaire...
> type_origine : le type de l'objet lui-même. Utilisé quand on maj les liens IMPLICITES (on utilise les mêmes paramètres)
> ss_champ_jointure : Sous champ contenant le n° de notice liée (généralement 3)
> ss_champs_a_conserver : Sous champs qui ne doivent pas être écrasés
> plugin_definition_champ : Plugin de définition du champ. Permettra de récupérer la définition des nousveaux sous-champs qu'on veut insérer (type, icones...)
> plugin_formate : plugin à utiliser pour formater la notice liée afin de générer le champ de lien (plugins spéciaux pour les liens explicites)
> plugin_get_infos_ss_champ : Permet de récupérer les infos d'un sous-champ à insérer (type, icones...). (statique)
> plugin_get_lien_explicite : plugin retournant le champ de lien (sans les ss-champs à conserver). Utilise un autre plugin pour formater les données.
> plugin_notice_2_db : Le plugin qui permet de regénérer une notice quand un champ de lien y a été modifié
Utilisé quand on maj les liens IMPLICITES (on utilise les mêmes paramètres)

4) Mettre à jour les liens implicites

plugins/catalogue/marcxml/db/maj_liens_implicites/nom_de_l_objet/nom_de_la_grille

Plugin (script) utilisé : catalogue/marcxml/db/maj_liens_implicites
Paramètres :
> champs_liens_implicites/!!xxx : utilise !! pour faire un lien vers param_liens_explicites (car les 2 types de liens sont symétriques) : c'est donc le même plugin qui contient toutes les informations utiles pour ce lien.
> plugin_get_champ_lie (statique) : pour récupérer le champ dans la notice liée
> plugin_maj_lien_explicite (statique) : maj le champ de lien

IV. Les plugins de formatage

1) Le formatage des liens

Lorsque 2 notices sont liées vers un champ, Un plugin de formatage permet de générer le champ de lien à partir du contenu de la notice liée.
Ce formatage se fait sous la forme d'une chaine de caractères par exemple
a:toto|b:tutu|c:titi va générer le champ
$a => toto, $b => tutu, $c => titi

Exemple : pour générer le champ 700 des notices biblio (à partir de la notice auteur), on crée le plugin :
plugins/catalogue/marcxml/formatage/auteur/liens_explicites/biblio_700

Plugin (script) utilisé catalogue/marcxml/get_datafields
Paramètres :
champs/0,1,2.../tag => tag du champ dont il faut extraire les données
----------------------/sous-champs/0,1,2.../code|avant|apres (on met par exemple "a:" avant et "|" après)

2) Les accès

On va créer un plugin pour formater chaque accès et un plugin global pour regrouper tous les accès

Pour formater chaque accès (exemple accès auteurs : champ 7** des notices biblio) :
plugins/catalogue/marcxml/formatage/biblio/acces/auteurs

Plugin (script) utilisé : catalogue/marcxml/formate_plugins
Paramètres (exemple) :
+ champs
     + 001 - champ 700
          + apres => |
          + sous-champs
               + 001 - $a
                    + avant_verif =>
                    + code => a
               + 002 - $b
                    + avant_verif =>
                    + code => b
          + tag => 700
     + 002 - champ 701
          + apres => |
          + sous-champs
               + 001 - $a
                    + avant_verif =>
                    + code => a
               + 002 - $b
                    + avant_verif =>
                    + code => b
          + tag => 701

Les ss-champs sont séparés par des espaces et les champs par des "|" 

3) Les tris

pour l'instant, idem accès. Il faudra créer un plugin, pour ne récupérer que le 1er champ trouvé

4) Les notices

V. Gérer les champs autocomplete

Les sous-champs synthétiques sont des sous-champs de type autocomplete permettant de rechercher une notice liée
par ex. 700$9a dans une notice biblio pour rechercher une notice auteur. Une fois la notice trouvée, de nombreux ss-champs sont modifiés automatiquement.
Il est normalement couplé à un ss-champ de lien ($3). Le sous-champ autocomplete permet de modifier le ss-champ de lien. Une fois modifié, celui-ci va modifier le reste du champ.

1) Le ss-champ autocomplete

> Il faut paramétrer les événements pour bien gérer la validation (car ce n'est pas onChange mais itemSelectEvent) :
catalogue/catalogage/definitions_groupes_evenements/biblio/unimarc_standard/autocomplete

> ws_url : le ws appelé pour faire la recherche :
bib_ws.php?module=catalogue/catalogage/recherches/nom_de_l_objet/nom_de_la_grille/210_9a&
(pour un champ 210$9a). Ne pas oublier "&" à la fin.
 
> mettre type = autocomplete

2) Le switcher

Pour le sous-champ autocomplete (9a), mettre en switcher :
+ validation
     + nom_plugin => catalogue/catalogage/grilles/actions_grilles/validation_ss_champ_synthetique
     + parametres
          + nom_ss_champ_lien => 3

Pour le sous-champ delien (3), mettre en switcher :
validation
     + nom_plugin => catalogue/catalogage/grilles/actions_grilles/validation_lien_explicite
     + parametres
          + !!param_lien_explicite
               + nom_plugin => catalogue/marcxml/db/param_liens_explicites/rue/unimarc_standard/210

3) Le Web Service

exemple : 
pages/bib_ws/catalogue/catalogage/recherches/rue/unimarc_standard/210_9a

+ 210_9a
+ _page => bib_ws/catalogue/catalogage/recherches.php
+ _parametres
     + plugin_recherche
          + nom_plugin => catalogue/catalogage/recherches/ss_champs_synthetiques/rue/unimarc_standard/210_9a

3) Le Plugin de recherche

plugins/catalogue/catalogage/recherches/ss_champs_synthetiques/rue/unimarc_standard/210_9a

+ chemin_fichier => catalogue/recherches
+ nom_fonction => recherche_simple
+ parametres
     + param_recherche
          + bool_parse_contenu => 0
          + criteres
               + 01 - a_synthetique
                    + ##valeur_critere => query
                    + intitule_critere => a_tousmots
                    + type_recherche => str_contient_commence
          + format_resultat => formate
          + plugin_formate_liste
          + plugin_formate_notice
               + alias
                    + ligne => tableau
               + alias_retour
                    + texte => /
               + nom_plugin => catalogue/marcxml/formatage/ville/autocomplete/standard/main ----------> plugin de formatage
          + type_objet => ville -----------> le type d'objet lié

4) Le Plugin de formatage

Pour formater les données qui s'afficheront dans le champ autocomplete
Chaque notice sera un tableau comportant un champ "nom" et un champ "id"