Source: ressource/config.js


'use strict'
const common = require('sesatheque-client/dist/server/config')

/**
 * Nos listes de types & co, qui changent rarement
 */
const configRessource = {
  langueDefaut: 'fra',
  /**
   * Les listes de choix pour nos propriétés dont on enregistre des ids
   */
  listes: {
    type: {
      am: 'aide mathenpoche',
      arbre: 'arbre (liste hiérarchisée)',
      ecjs: 'exercice calculatice (javascript)',
      em: 'exercice mathenpoche',
      j3p: 'activité j3p',
      iep: 'animation instrumenpoche',
      mathgraph: 'figure Mathgraph',
      sequenceModele: 'modèle de séquence',
      url: 'page externe',
      qcm: 'QCM'
    },
    niveaux: common.niveaux,
    // Attention, il ne faut pas modifier les données suivantes, elles sont utilisées à de nombreux endroits dans le code
    categories: {
      1: 'Activité fixe',
      2: 'Activité animée',
      3: 'Cours fixe',
      4: 'Cours avec animation',
      5: 'Exercice fixe',
      6: 'Exercice avec animation',
      7: 'Exercice interactif',
      8: 'Liste de ressources',
      9: 'À déterminer'
    },
    typePedagogiques: {
      // id de scolomfr-voc-010, « on s'en sert pour faire quoi ? »
      3: 'cours / présentation',
      9: 'exercice',
      91: "corrigé d'exercice",
      92: "énoncé d'exercice",
      191: 'QCM (question à choix multiples)',
      7: 'évaluation',
      2: 'autoévaluation',
      81: "sujet d'examen et de concours",
      82: "préparation à l'examen",
      13: 'jeu éducatif',
      141: 'manuel scolaire',
      151: 'document de référence',
      21: 'simulation',
      22: 'tutoriel'
    },
    typeDocumentaires: {
      // id de scolomfr-voc-004, qui sont de la forme scolomfr-voc-004-num-NNN, on ne reprend ici que le NNN
      // @see http://www.lom-fr.fr/scolomfr/la-norme/manuel-technique.html?tx_scolomfr_pi1[detailElt]=49
      // http://www.cndp.fr/scolomfr//fileadmin/_scolomfr/04.xml
      // pour un exercice contenant texte et image faut mettre les deux
      5: 'vidéo / animation', // nommé image en mouvement dans le voc officiel
      9: 'ressource interactive',
      6: 'image fixe', // on laisse tomber le 4 image tout court
      12: 'texte',
      11: 'son',
      1: 'collection', // une liste de ressources
      2: 'ensemble de données'
    },
    relations: {
      1: 'est associée à',
      4: 'est une version de',
      5: 'existe en une autre version',
      6: 'est remplacée par',
      7: 'remplace',
      8: 'est requis par',
      9: 'requiert',
      10: 'est une partie de',
      11: 'contient',
      12: 'est référencé par',
      13: 'contient une référence à',
      14: 'est un format de',
      15: 'existe dans un format',
      16: 'est la traduction de',
      17: 'fait l’objet d’une traduction',
      21: 'a pour vignette',
      51: 'a pour corrigé',
      52: 'est la correction de'
    },
    langue: {
      deu: 'allemand',
      eng: 'anglais',
      ara: 'arabe',
      eus: 'basque',
      bre: 'breton',
      cat: 'catalan',
      spa: 'espagnol',
      fra: 'français',
      ita: 'italien',
      por: 'portugais'
    },
    restriction: {
      0: 'aucune',
      1: 'professeur',
      2: 'groupe(s)',
      3: 'auteur(s)'
    }
  },
  // lors de l'itération sur les listes, ça prend l'ordre numérique des noms de propriétés, on peut fixer notre ordre ici
  listesOrdonnees: {
    restriction: [0, 1, 2, 3],
    niveaux: common.ordre.niveaux,
    categories: [1, 2, 3, 4, 5, 6, 7, 8, 9],
    typeDocumentaires: [9, 5, 6, 12, 11, 1, 2],
    typePedagogiques: [3, 9, 91, 92, 191, 7, 2, 81, 82, 13, 141, 151, 21, 22]
  }, // fin des listes
  // modifs à répercuter dans npm-sesatheque-client
  /**
   * La liste des types que l'on peut éditer dans une sésatheque (ils seront cloné en ressources à l'édition, les autres resteront des alias, ils peuvent être supprimés mais pas modifiés)
   * Utilisé par clone et createAlias pour savoir s'il faut cloner une ressource ou juste créer un alias
   */
  editable: {
    arbre: true,
    ecjs: true,
    iep: true,
    j3p: true,
    mathgraph: true,
    url: true,
    qcm: true
  },
  /**
   * types qui peuvent être utilisés pour une ressource perso (form de ressource/ajouter)
   */
  typePerso: {
    arbre: true,
    ecjs: true,
    iep: true,
    j3p: true,
    mathgraph: true,
    url: true,
    qcm: true
  },

  /**
   * Les type qu'il faut toujours mettre en iframe (qui cassent les css s'ils sont embarqués dans un div d'une page)
   */
  typeIframe: {
    j3p: true
  },

  /**
   * Donne la catégorie induite par le type, mais ça peut être surchargé par l'utilisateur qui renseigne categories
   */
  typeToCategories: {
    am: [2],
    arbre: [8],
    ecjs: [7],
    em: [7],
    iep: [2],
    serie: [8],
    series: [8],
    sequenceModele: [8]
  },

  /**
   * Donne les types induits par la catégorie, mais ça peut être surchargé par l'utilisateur qui renseigne les champs
   */
  categoriesToTypes: {
    1: {
      typePedagogiques: [9],
      typeDocumentaires: [12]
    },
    2: {
      typePedagogiques: [9],
      typeDocumentaires: [5]
    },
    3: {
      typePedagogiques: [3],
      typeDocumentaires: [12]
    },
    4: {
      typePedagogiques: [3],
      typeDocumentaires: [5]
    },
    5: {
      typePedagogiques: [9],
      typeDocumentaires: [12]
    },
    6: {
      typePedagogiques: [9],
      typeDocumentaires: [5]
    },
    7: {
      typePedagogiques: [9],
      typeDocumentaires: [9]
    },
    8: {
      typePedagogiques: [],
      typeDocumentaires: [1]
    }
  },

  // les propriétés qui ne prennent qu'une seule valeur
  uniques: {
    type: true,
    langue: true,
    restriction: true
  },

  // les propriétés obligatoires
  required: {
    titre: true,
    type: true,
    categories: true
    // 'auteurs'
  },
  // la liste des champs qu'un indexateur peut modifier
  indexFields: {
    titre: true,
    resume: true,
    description: true,
    commentaires: true,
    niveaux: true,
    categories: true,
    typePedagogiques: true,
    typeDocumentaires: true,
    relations: true
  },

  /** libellés que l'on affiche pour chaque champ obligatoire (les fonctions qui peuplent les vues bouclent dessus) */
  labels: {
    oid: 'Identifiant',
    origine: 'Origine',
    idOrigine: "Identifiant d'origine",
    cle: 'Clé de lecture',
    aliasOf: 'Alias de',
    type: 'Type technique',
    titre: 'Titre',
    resume: 'Résumé',
    description: 'Description',
    commentaires: 'Commentaires (réservés au formateur)',
    parametres: 'Paramètres',
    niveaux: 'Niveaux',
    categories: 'Catégories',
    typePedagogiques: 'Type pédagogique',
    typeDocumentaires: 'Type documentaire',
    relations: 'Ressources liées',
    auteurs: 'Auteurs',
    auteursParents: 'Auteurs originaux',
    contributeurs: 'Contributeurs',
    groupes: 'Groupes de publication',
    groupesAuteurs: 'Groupes éditeurs',
    langue: 'Langue',
    publie: 'Publié',
    restriction: 'Restriction',
    dateCreation: 'Date de création',
    dateMiseAJour: 'Date de mise à jour',
    version: 'Version',
    indexable: 'Indexable',
    // facultatifs
    enfants: 'Enfants' // utilisé seulement pour les arbres (à la place de parametres)
  },

  // les propriétés dont la modif déclenche un upgrade de version
  versionTriggers: ['origine', 'idOrigine', 'parametres', 'enfants', 'auteurs', 'contributeurs'],
  // les propriétés supplémentaires dont la modif déclenche l'incrément de publicSuffix sans changer de version
  incTrigger: ['titre', 'resume', 'description', 'commentaires', 'version'],

  // ATTENTION, pour les types faut être cohérent avec les filtres du constructeur Ressource
  // les types requis (il faut la même liste de propriétés que labels, et des valeurs * dont _.is* existe)
  // Number sera traité comme entier positif
  typesVar: {
    oid: 'Number',
    origine: 'String',
    idOrigine: 'String',
    cle: 'String',
    aliasOf: 'String',
    type: 'String',
    titre: 'String',
    resume: 'String',
    description: 'String',
    commentaires: 'String',
    parametres: 'Object',
    niveaux: 'Array',
    categories: 'Array',
    typePedagogiques: 'Array',
    typeDocumentaires: 'Array',
    relations: 'Array',
    auteurs: 'Array',
    auteursParents: 'Array',
    contributeurs: 'Array',
    groupes: 'Array',
    groupesAuteurs: 'Array',
    langue: 'String',
    publie: 'Boolean',
    restriction: 'Number',
    dateCreation: 'Date',
    dateMiseAJour: 'Date',
    version: 'Number',
    indexable: 'Boolean',
    // facultatifs
    enfants: 'Array'
  },
  // pour les typesVar Array, le type de chaque élément
  typesVarArray: {
    niveaux: 'String',
    categories: 'Number',
    typePedagogiques: 'Number',
    typeDocumentaires: 'Number',
    relations: 'Array',
    auteurs: 'String',
    contributeurs: 'String',
    groupes: 'String',
    groupesAuteurs: 'String',
    enfants: 'Object'
  },

  /**
   * Des constantes pour rendre le code plus lisible
   * (en gros un reverse sur les listes d'ids de nos propriétés)
   */
  constantes: {
    categories: {
      activiteFixe: 1,
      activiteAnimee: 2,
      coursFixe: 3,
      coursAnime: 4,
      exerciceFixe: 5,
      exerciceAnime: 6,
      exerciceInteractif: 7,
      liste: 8,
      aucune: 9 // déclenchera un warning dans $ressourceControl.valide
    },
    niveaux: common.constantes.niveaux,
    typePedagogiques: {
      cours: 3,
      exercice: 9,
      corrigeExercice: 91,
      enonceExercice: 92,
      qcm: 191,
      evaluation: 7,
      autoEvaluation: 2,
      sujetExam: 81,
      prepareExam: 82,
      jeuEduc: 13,
      manuel: 141,
      documentReference: 151,
      simulation: 21,
      tutoriel: 22
    },
    typeDocumentaires: {
      animation: 5,
      interactif: 9,
      imageFixe: 6,
      texte: 12,
      son: 11,
      collection: 1,
      dataSet: 2
    },
    relations: {
      assocA: 1,
      estVersionDe: 4,
      existeAussi: 5,
      estRemplacePar: 6,
      remplace: 7,
      estRequisPar: 8,
      requiert: 9,
      estPartieDe: 10,
      contient: 11,
      estRefPar: 12,
      contientRefA: 13,
      estUnFormatDe: 14,
      existeDansFormat: 15,
      estTraductionDe: 16,
      estTraduitAvec: 17,
      aPourVignette: 21,
      aPourCorrige: 51,
      estLaCorrectionDe: 52
    },
    restriction: common.constantes.restriction,
    // des constantes pour nos routes
    routes: common.constantes.routes
  }, // fin constantes
  /**
   * Des formats d'affichage
   */
  formats: {
    // seul YYYY-MM-DD et DD/MM/YYYY sont reconnus
    jour: 'DD/MM/YYYY'
  },
  limites: {
    listeMax: 1000,
    listeNbDefault: 25
  },
  cacheTTL: 3600,
  imports: {
    ecBase: 'https://ressources.sesamath.net/replication_calculatice'
  }
}

module.exports = configRessource