Fork me on GitHub
Phraseanet Documentation

Configuration

L’essentiel

La configuration de Phraseanet se fait via le fichier config/configuration.yml. A chaque mise à jour de celle-ci, il est nécessaire de recompiler la configuration via la commande suivante :

`bin/console compile:configuration`.

La configuration de Phraseanet est écrite dans le fichier config/configuration.yml qui est automatiquement généré à l’installation.

Ce fichier est au format YAML, qui a pour intérêt d’être très lisible. Pour des raisons de performance, et notamment de cache opcode, la configuration est compilée.

En contre partie il est nécessaire de recompiler après une mise à jour.

Compilation

La compilation de la configuration est très facile et rapide à éxecuter. Il faut utiliser la commande bin/console compile:configuration.

bin/console compile:configuration

Configuration.yml

Voici un exemple de fichier de configuration (/lib/conf.d/configuration.yml) commenté :

servername: 'http://local.phrasea/'
languages:
    available:
        - de
        - en
        - fr
        - nl
    default: 'en'
main:
    maintenance: false
    key: ''
    database:
        host: 'sql-host'
        port: 3306
        user: 'sql-user'
        password: 'sql-password'
        dbname: ab_phraseanet
        driver: pdo_mysql
        charset: UTF8
    database-test:
        driver: pdo_sqlite
        path: '/tmp/db.sqlite'
        charset: UTF8
    cache:
        type: ArrayCache
        options: {}
    search-engine:
        type: elasticsearch
        options:
            host: elasticsearch
            port: 9200
            index: ''
            shards: 3
            replicas: 0
            minScore: 2
            highlight: true
            maxResultWindow: 500000
            populate_order: MODIFICATION_DATE
            populate_direction: DESC
            populate_permalinks: false
            activeTab: '#elastic-search'
            facets:
                _base:
                    limit: 10
                _collection:
                    limit: 10
                _doctype:
                    limit: 10
                _camera_model:
                    limit: 10
                _iso:
                    limit: 0
                _aperture:
                    limit: 0
                _shutterspeed:
                    limit: 0
                _flashfired:
                    limit: 0
                _framerate:
                    limit: 0
                _audiosamplerate:
                    limit: 0
                _videocodec:
                    limit: 0
                _audiocodec:
                    limit: 0
                _orientation:
                    limit: 0
                _colorspace:
                    limit: 0
                _mimetype:
                    limit: 0
    task-manager:
        status: started
        enabled: true
        options:
            protocol: tcp
            host: 127.0.0.1
            port: 6660
            linger: 500
        logger:
            max-files: 10
            enabled: true
            level: INFO
    session:
        type: native
        options: []
        ttl: 86400
    binaries:
        ghostscript_binary: null
        php_binary: null
        swf_extract_binary: null
        pdf2swf_binary: null
        swf_render_binary: null
        unoconv_binary: null
        ffmpeg_binary: null
        ffprobe_binary: null
        mp4box_binary: null
        pdftotext_binary: null
        ffmpeg_timeout: 3600
        ffprobe_timeout: 60
        gs_timeout: 60
        mp4box_timeout: 60
        swftools_timeout: 60
        unoconv_timeout: 60
        exiftool_timeout: 60
    storage:
        subdefs: null
        cache: null
        log : null
        download: null
        lazaret: null
        caption: null
        worker_tmp_files: null

trusted-proxies: []
network-proxies:
    http-proxy:
        enabled: false
        host:
        port:
        user:
        password:
    ftp-proxy:
        enabled: false
        host:
        port:
        user:
        password:
debugger:
    allowed-ips: []
border-manager:
    enabled: true
    extension-mapping:
        otc: application/vnd.oasis.opendocument.chart-template
        ttc: application/x-font-ttf
        xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
        docx: application/msword
        pptx: application/vnd.ms-powerpoint
        mxf: application/mxf
        mp4: video/mp4
        svg: image/svg+xml
    checkers:
        -
            type: Checker\Sha256
            enabled: true
        -
            type: Checker\UUID
            enabled: true
        -
            type: Checker\Colorspace
            enabled: false
            options:
                colorspaces: [cmyk, grayscale, rgb]
        -
            type: Checker\Dimension
            enabled: false
            options:
                width: 80
                height: 160
        -
            type: Checker\Extension
            enabled: false
            options:
                extensions: [jpg, jpeg, bmp, tif, gif, png, heic, pdf, doc, docx, xls, xlsx, odt, mpg, mpeg, mov, avi, mp3, mp2, mp4, m4v, m4a, mkv, hevc, aac, aiff, wav]
        -
            type: Checker\Filename
            enabled: false
            options:
                sensitive: true
        -
            type: Checker\MediaType
            enabled: false
            options:
                mediatypes: [Audio, Document, Image, Video]

registry:
    api-clients:
        api-subdef_service: false
user_account:
    deleting_policies:
        email_confirmation: true
authentication:
    auto-create:
        templates: {  }
    providers:
        facebook:
            enabled: false
            display: false
            title: Facebook
            type: facebook
            options:
                app-id: ''
                secret: ''
                default-graph-version: 'v2.10'
        twitter:
            enabled: false
            display: false
            title: Twitter
            type: twitter
            options:
                consumer-key: ''
                consumer-secret: ''
        github:
            enabled: false
            display: false
            title: Github
            type: github
            options:
                client-id: ''
                client-secret: ''
        viadeo:
            enabled: false
            display: false
            title: Viadeo
            type: viadeo
            options:
                client-id: ''
                client-secret: ''
        linkedin:
            enabled: false
            display: false
            title: LinkedIN
            type: linkedin
            options:
                client-id: ''
                client-secret: ''
        ps_auth_1:
            enabled: false
            display: false
            title: 'PS Auth 1'
            type: 'ps-auth'
            options:
                client-id: ''
                client-secret: ''
                base-url: 'https://api-auth.phrasea.local'
                provider-type: 'oauth'
                provider-name: 'v2'
                icon-uri: null,
                debug: false,
                birth-group: '_firstlog'
                everyone-group: '_everyone'
                metamodel: '_metamodel'
                model-gpfx: '_M_'
                model-upfx: '_U_'
                auto-logout: false
                auto-connect-idp-name: null
registration-fields:
    -
        name: company
        required: true
    -
        name: lastname
        required: true
    -
        name: firstname
        required: true
    -
        name: geonameid
        required: true
xsendfile:
    enabled: false
    type: nginx
    mapping: []
h264-pseudo-streaming:
    enabled: false
    type: nginx
    mapping: []
plugins: []
api_cors:
  enabled: false
  allow_credentials: false
  allow_origin: []
  allow_headers: []
  allow_methods: []
  expose_headers: []
  max_age: 0
  hosts: []
session:
  idle: 0
  # 1 week
  lifetime: 604800
crossdomain:
  allow-access-from:
    -
      domain: '*.cooliris.com'
      secure: 'false'
embed_bundle:
    video:
        player: videojs
        autoplay: false
        cover_subdef: poster
        message_start: StartOfMessage
        available_speeds:
            - 1
            - 1.5
            - 3
    audio:
        player: videojs
        autoplay: false
        cover_subdef: thumbnail
    document:
        #player: flexpaper
        enable_pdfjs: true
geocoding-providers:
    -
        map-provider: 'mapboxWebGL'
        enabled: false
        public-key: ''
        map-layers:
            -
                name: Light
                value: 'mapbox://styles/mapbox/light-v9'
            -
                name: Streets
                value: 'mapbox://styles/mapbox/streets-v9'
            -
                name: Basic
                value: 'mapbox://styles/mapbox/basic-v9'
            -
                name: Satellite
                value: 'mapbox://styles/mapbox/satellite-v9'
            -
                name: Dark
                value: 'mapbox://styles/mapbox/dark-v9'
        transition-mapboxgl:
            -
                animate: true
                speed: '2.2'
                curve: '1.42'
        default-position:
            - 42.488
            - 3.779
        default-zoom: 2
        marker-default-zoom: 11
        position-fields:
            #-
            #   name: GpsCompositePosition
            #   type: latlng
            -
                name: Latitude
                type: lat
            -
                name: Longitude
                type: lon
        geonames-field-mapping: true
        cityfields: 'City, Ville'
        provincefields: Province
        countryfields: 'Country, Pays'
        latitudefields: Latitude
        longitudefields: Longitude
video-editor:
    ChapterVttFieldName: VideoTextTrackChapters
    seekBackwardStep: 500 # in ms
    seekForwardStep: 500  # in ms
    playbackRates:
        - 1
        - '1.5'
        - 3
workers:
    queue:
        worker-queue:
            registry: alchemy_worker.queue_registry
            host: localhost
            port: 5672
            user: ''
            password: ''
            ssl: false
            vhost: /
            heartbeat: 60
    webhook:
        timeout: 30
        verify_ssl: true
    queues:
        assetsIngest:
            max_retry: 3
            ttl_retry: 10000
        createRecord:
            max_retry: 3
            ttl_retry: 10000
        editRecord:
            max_retry: 3
            ttl_retry: 10000
        exportMail:
            max_retry: 3
            ttl_retry: 10000
        exposeUpload:
            max_retry: 3
            ttl_retry: 10000
        ftp:
            max_retry: 3
            ttl_retry: 180000
        populateIndex:
            max_retry: 3
            ttl_retry: 10000
        pullAssets:
            max_retry: 3
            ttl_retry: 10000
        recordsActions:
            max_retry: 3
            ttl_retry: 10000
        shareBasket:
            max_retry: 3
            ttl_retry: 10000
        subdefCreation:
            max_retry: 3
            ttl_retry: 10000
            ttl_delayed: 5000
        validationReminder:
            max_retry: 3
            ttl_retry: 7200000
        webhook:
            max_retry: 3
            ttl_retry: 10000
        writeMetadatas:
            max_retry: 3
            ttl_retry: 10000
            ttl_delayed: 5000
externalservice:
    ginger:
        AutoSubtitling:
            service_base_url: https://base.uri
            token: 39c6011d
            transcript_format: text/vtt
            subdef_source: preview


Console_logger_enabled_environments: [test]

Langues

Les langues disponibles ainsi que leurs codes respectifs sont les suivants :

  • Français : fr
  • Anglais : en
  • Allemand : de
  • Néerlandais : nl

Fournisseurs d’authentification

Les différents fournisseurs d’authentification se configurent simplement. Il suffit de créer une application “Phraseanet” chez le fournisseur en spécifiant l’URL de callback adéquate.

Note

Les URLs de callback fournies sont des exemples présupposant que Phraseanet est installé à l’adresse http://phraseanet.mondomaine.com. Il faut adapter ces URLs en fonction de l’adresse réelle.

Fournisseur Gestion des applications URL de callback à fournir
Facebook https://developers.facebook.com/apps http://phraseanet.mondomaine.com/login/provider/facebook/callback/
Twitter https://dev.twitter.com/apps http://phraseanet.mondomaine.com/login/provider/twitter/callback/
Google Plus https://code.google.com/apis/console/ http://phraseanet.mondomaine.com/login/provider/google-plus/callback/
GitHub https://github.com/settings/applications http://phraseanet.mondomaine.com/login/provider/github/callback/
Viadeo http://dev.viadeo.com/documentation/authentication/request-an-api-key/ http://phraseanet.mondomaine.com/login/provider/viadeo/callback/
LinkedIn https://www.linkedin.com/secure/developer http://phraseanet.mondomaine.com/login/provider/linkedin/callback/

Services de Cache

Les services de cache cache et opcode-cache peuvent être configurés avec les adapteurs suivants :

Nom Service Description Options
RedisCache Cache Serveur de cache utilisant l’extension PHP redis host, port
ArrayCache cache | opcode-cache Cache désactivé  

Gestion des sessions

Les sessions sont stockées par défaut sur le disque, dans le système de fichiers.

Il est possible d’utiliser d’autres types de stockage :

Type Description Options
file Stockage des sessions sur le disque  
redis Stockage des sessions dans un serveur Redis, utilise l’extension PHP redis host, port

Avertissement

Le paramétrage de la durée de vie (ttl) de la session ne fonctionne pas avec la gestion par le système de fichiers. Dans ce cas, utiliser le paramétrage gc_maxlifetime de PHP.

Service de moteur de recherche

Seul le moteur de recherche Elasticsearch est disponible.

Nom Options
Alchemy\Phrasea\SearchEngine\Elastic\ElasticSearchEngine host, port, index

Proxies de confiance

Si Phraseanet est derrière un reverse-proxy, renseigner l’adresse du reverse proxy pour que les adresses IP des utilisateurs soient reconnues.

trusted-proxies:
    192.168.27.15
    10.0.0.45

Champs optionnels à l’enregistrement

La section registration-fields permet de personnaliser les champs disponibles dans le formulaire de la page d’inscription ainsi que leur caractère obligatoire.

registration-fields:
    -
        name: firstname
        required: true
    -
        name: lastname
        required: true
    -
        name: company
        required: false
id Nom (déprécié)
login Identifiant
gender Sexe
firstname Prénom
lastname Nom
address Adresse
zipcode Code Postal
geonameid Ville, Pays
position Poste
company Société
job Activité
tel Téléphone
fax Fax

Note

Dans le formulaire d’inscription, il n’est possible de remplir la ville et pays de l’utilisateur que par le Geonameid. Geonameid n’est fonctionnel que si le webservice https://geonames.alchemyasp.com est utilisé.

Dans le cas ou l’instance Phraseanet ne peut pas accéder au serveur Geonames indiquer null comme adresse du serveur Geonames dans la configuration.

Dans ce contexte, ne pas indiquer geonameid dans le formulaire d’inscription.

Configuration Sendfile / XSendFile

La configuration xsendfile doit être manipulée à l’aide des outils en ligne de commandes. Les documentations pour Nginx et Apache sont disponibles.

Configuration des plugins

Les plugins se configurent aussi dans ce fichier. Se référer à la documentation des plugins pour cette partie.

Configuration du service de douane

Les points de vérification du service de douane sont configurables. Il est aussi possible de créer son propre point de vérification.

Verification Description Options
CheckerSha256 Vérifie si le fichier n’est pas un doublon En se basant sur la somme de controle “sha256”  
CheckerUUID Vérifie si le fichier n’est pas un doublon En se basant sur l’identifiant unique du fichier  
CheckerDimension Vérification sur les dimensions du fichier (* si applicable) width : largeur mini du fichier height : hauteur mini du fichier
CheckerExtension Vérification sur les extensions du fichiers extensions : les extensions de fichiers autorisées
CheckerFilename Vérifie si le fichier n’est pas un doublon En se basant sur son nom sensitive : active la sensibilité à la casse
CheckerMediaType Vérification sur le type du fichier (Audio, Video...) mediatypes : les types de médias autorisés
CheckerColorspace Vérification sur l’espace de couleur du fichier (* si applicable) colorspaces : les types d’espaces colorimétriques autorisés

Le service de douane permet également de personnaliser la détection des types mime via le paramètre extension-mapping. Sur certains systèmes, des mauvais types mimes peuvent être détectés. Utiliser ce tableau pour forcer un type mime en fonction d’une extension de fichier.

Restriction sur collections

Il est possible de restreindre la portée d’un point de vérification sur un ensemble de collections en fournissant une liste de base_id correspondant :

#services.yml
Border:
    border_manager:
        type: Border\BorderManager
        options:
            enabled: true
            checkers:
                -
                    type: Checker\Sha256
                    enabled: true
                    collections:
                        - 4
                        - 5

Restriction sur databoxes

La même restriction peut être faite au niveau des databoxes :

#services.yml
Border:
    border_manager:
        type: Border\BorderManager
        options:
            enabled: true
            checkers:
                -
                    type: Checker\Sha256
                    enabled: true
                    databoxes:
                        - 3
                        - 7

Note

Il n’est pas possible de restreindre à la fois sur des databoxes et des collections.

Création d’un point de vérification

Tous les points de vérifications sont déclarés dans le namespace Alchemy\Phrasea\Border\Checker. Il suffit de créer un nouvel objet dans ce namespace. Cet objet doit implémenter l’interface Alchemy\Phrasea\Border\Checker\Checker

Exemple d’un point de vérification qui filtre les documents sur leurs données GPS :

<?php
namespace Alchemy/Phrasea/Border/Checker;

use Alchemy\Phrasea\Border\File;
use Doctrine\ORM\EntityManager;
use MediaVorus\Media\DefaultMedia as Media;

class NorthPole implements Checker
{
    private $options;

    public function __construct(Array $options)
    {
        $this->options = $options;
    }

    //Contrainte de validation, doit retourner un booleen
    public function check(EntityManager $em, File $file)
    {
        $media = $file->getMedia();

        if (null !== $latitude = $media->getLatitude() && null !== $ref = $media->getLatitudeRef()) {
            if($latitude > 60 && $ref == Media::GPSREF_LATITUDE_NORTH) {
                return true;
            }
        }

        return false;
    }
}

Déclaration du point de contrôle

border-manager:
    enabled: true
    checkers:
        -
            type: Checker\NorthPole
            enabled: true

Préférences utilisateurs

Il est possible de personnaliser les préférences utilisateur par défaut. Les paramètres suivants sont ajustables :

Nom Description Valeur par défaut Valeurs disponibles
view Affichage des résultats thumbs thumbs (en vignettes) list (en liste)
images_per_page Nombre d’image par page de résultat 20  
images_size Taille des vignettes de résultat 120  
editing_images_size Taille des vignettes d’édition 134  
editing_top_box Taille du bloc supérieur d’édition (pourcentage) 30  
editing_right_box Taille du bloc droit d’édition (pourcentage) 48  
editing_left_box Taille du bloc gauche d’édition (pourcentage) 33  
basket_sort_field Index de tri des paniers name name (par nom) ou date (par date)
basket_sort_order Ordre de tri des paniers ASC ASC (ascendant) ou DESC (descendant)
warning_on_delete_story Alerter avant la suppression d’un reportage true true (oui) ou false (non)
client_basket_status Afficher les paniers dans Classic 1 1 (oui) ou 0 (non)
css Theme CSS de production 000000 000000 (sombre) ou 959595 (clair)
advanced_search_reload Utiliser les dernières options de recherche au chargement 1 1 (oui) ou 0 (non)
start_page_query Question par défaut last  
start_page Page de démarrage de production QUERY PUBLI (publications) ou QUERY (recherche) ou LAST_QUERY (dernière recherche)
rollover_thumbnail Affichage au rollover caption caption (notice) ou preview (prévisualisaton)
technical_display Afficher les informations techniques 1 1 (oui) ou 0 (non) ou group (groupé avec la notice)
doctype_display Afficher une icone correspondante au type de document 1 1 (oui) ou 0 (non)
basket_caption_display Afficher la notice des enregistrements dans un panier 0 1 (oui) ou 0 (non)
basket_status_display Afficher les status des enregistrements dans un panier 0 1 (oui) ou 0 (non)
basket_title_display Afficher le titre des enregistrements dans un panier 0 1 (oui) ou 0 (non)

Durées de session

idle

Fixe (en secondes) la durée d’inactivité de l’utilisateur avant déconnexion automatique.

Le réglage “idle” est prioritaire sur le réglage “lifetime” et l’option “Se souvenir de moi” n’est alors pas présente sur la page d’accueil.

lifetime

En cochant “Se souvenir de moi” à l’authentification, durant cette période (en secondes) l’accès à l’application est immédiat sans avoir à se ré-authentifier.

Vignettes

lazyload

Booléan qui active ou désactive le lazyload des vignettes dans production, cette option est obsolète si l’option “static-file” est activé pour l’affichage des vignettes.

static-file

En activant cette option, les vignettes sont servies comme contenu statique. Un lien symbolique est créé pour chaque image.

static-file:
    enabled: true
    type: nginx
    symlink-directory: ''

Embed bundle

Lecteur audiovidéo Videojs

Phraseanet inclut le lecteur Videojs pour lecture des prévisualisations des documents de type audio et vidéo.

Il peut être personnalisé :

embed_bundle:                                  # (array)     Configuration de embed bundle
    video:
        player: videojs                        # (array)     Active videojs comme lecteur de prévisualisations vidéos - seul choix possible
        autoplay: false                        # (boolean)   Active la lecture automatique de la prévisualisation vidéo
        video_message_start: StartOfMessage    # (string)    Le nom du champ documentaire ou est stockée la valeur de début de lecture en seconde
        coverSubdef: previewx4                 # (string)    Définit la sous-définition de type image utilisé pour présenter le lecteur hors lecture
        available-speeds:                      # (array)     Vitesses de défilement disponibles dans le lecteur
            - 1
            - 1.5
            - 3
    audio:
        player: videojs                        # (array)     Active vidéojs comme lecteur de prévisualisations audio
        autoplay: false                        # (boolean)   Active la lecture automatique de la prévisualisation audio

Note

La lecture à haute vitesse a des impacts sur la consomation de bande passante.

Visionneuse pdf.js

La visionneuse Pdf.js peut être utilisée pour l’affichage de prévisualisations des documents PDF en remplacement de la visionneuse FlexPaper utilisée par defaut.

Pdfjs permet la lecture de fichiers PDF par le navigateur tandis que FlexPaper nécessite que le plugin Adobe Flash Player soit installé et activé pour le navigateur ainsi qu’autorisé, cas échéant, pour l’instance Phraseanet consultée.

embed_bundle:
    document:
        player: flexpaper                      # (string)    Pour les documents Office, utiliser flexpaper ou pdfjs
        enable-pdfjs: true                     # (boolean)   Utiliser pdfjs comme lecteur de prévisualisation pour les documents PDF

Note

Flexpaper ou Pdfjs peuvent être utilisés pour la lecture des fichiers de prévisualisation de documents Microsoft Office. Paramétrer la sous-définition Preview pour les documents de type Document en fonction du choix de paramétrage du lecteur utilisé.

Video Editor

La section permet le paramétrage d’options dans l’outil d’édition vidéo proposé dans Production.

video-editor:
    ChapterVttFieldName: VideoTextTrackChapters # (string)   Le nom du champ documentaire stockant les données de chapitrage
    seekBackwardStep: 500                       # (integer)  En millisecondes, la valeur de déplacement de la tête de lecture en arrière
    seekForwardStep: 500                        # (integer)  En millisecondes, la valeur de déplacement de la tête de lecture en avant
    playbackRates:                              # (array)    Les vitesses de défilement disponibles dans le lecteur
        - 1
        - '1.5'
        - 3

Geocoding providers

La section permet le paramétrage des options de la géolocalisation dans Production.

Une clé publique MapBox API est requise pour utiliser l’affichage par géolocalisation. Cette clé peut être obtenue sur le site Mapbox.

Pour utiliser l’aide à la saisie proposée par GeoNames dans le formulaire d’édition de Phraseanet, fournir une adresse geonames-server dans la section Webservice du fichier de configuration.

geocoding-providers:                           # (array)     Configuration de la géolocalisation dans Production
    -
        map-provider: mapboxWebGL              # (string)    La bibliothèque utilisée pour l'affichage de cartes
        enabled: false                         # (string)    Active ou désactive la fonctionnalité dans Production
        public-key: ''                         # (string)    La clé d'API MapBox à utiliser
        map-layers:                            # (array)     Tableau regroupant les fonds de cartes proposées
            -
                name: Streets
                value: 'mapbox://styles/mapbox/streets-v9'
            -
                name: Basic
                value: 'mapbox://styles/mapbox/basic-v9'
        transition-mapboxgl:
            -
                animate: true
                speed: '2.2'
                curve: '1.42'
        default-position:                      # (array)     La postion par défaut de la carte
            - '48.879162'
            - '2.335062'
        default-zoom: 5
        marker-default-zoom: 9
        geonames-field-mapping: true           # (boolean)   Active, désactive l'assistance à la saisie Geoname dans le formulaire d'édition
        cityfields: City, Ville                # (array)     Mapping des champs Phraseanet pour la propriété Name (la ville)
        provincefields: Province               # (array)     Mapping des champs Phraseanet pour la propriété Region
        countryfields: Country, Pays           # (array)     Mapping des champs Phraseanet pour la propriété Country