Manuel d'intégration

Installation

  • Arrêter le serveur
  • Télécharger le jar du plugin et ajouter-le (ametys-plugin-content-io-3.1.0.jar) dans le répertoire WEB-INF/lib de votre application Ametys
  • Démarrer le serveur

Personnalisation

Afin de personnaliser votre application et d'ajouter des boutons d'import et de synchronisation des contenus. Il est conseillé de créer votre propre plugin (Suivez les instructions de la page Architecture d'un plugin Ametys). Et vous pourrez créer vos boutons et déclarer votre surcharge du ribbon dans plugin.xml et ajouter les boutons au ribbon dans ribbon/cms-ribbon.xml.

Lorsque la personnalisation est finie, il est nécessaire de redémarrer l'application.

Déclaration de surcharge du ribbon

Ajouter la feature suivante au fichier plugin.xml de votre plugin personnalisé afin de placer les boutons que vous aller créer dans le ribbon :

Déclaration d'une surcharge du ribbon

<feature name="myplugin.ribbon.imports">
    <extensions>
        <extension id="fr.ametys.myplugin.ribbon.Imports"
                   point="org.ametys.core.ui.RibbonImportManager"
                   class="org.ametys.core.ui.StaticRibbonImportManager">
            <workspace match="cms|web">
                <file>ribbon/cms-ribbon.xml</file>
            </workspace>
        </extension>
    </extensions>
</feature>

Création d'un bouton d'import

Créer le bouton permettant d'importer des contenus dans le fichier plugin.xml sous cette forme :

Création d'un bouton d'import de contenus

<extension id="fr.ametys.myplugin.ImportSomething"
           point="org.ametys.core.ui.RibbonControlsManager"
           class="org.ametys.plugins.contentio.synchronize.clientsideelement.SCCClientSideElement">
    <class name="Ametys.ribbon.element.ui.button.OpenToolButtonController">
        <opentool-id>uitool-scc-import</opentool-id>
        
        <sccModelId>org.ametys.plugins.contentio.synchronize.collection.ldap</sccModelId>
        <label i18n="false">Import something</label>
        <description i18n="false">Open a tool to import something manually</description>
        
        <icon-glyph>ametysicon-blank32</icon-glyph>
        <icon-decorator>decorator-ametysicon-upload119</icon-decorator>
    </class>
    <depends>
        <org.ametys.core.ui.UIToolsFactoriesManager>uitool-scc-import</org.ametys.core.ui.UIToolsFactoriesManager>
    </depends>
</extension>

Dans cet exemple, l'identifiant du bouton est fr.ametys.myplugin.ImportSomething, il permet d'importer des contenus répondant au modèle de contenus synchronisables Source de données LDAP (identifié par org.ametys.plugins.contentio.synchronize.collection.ldap).

En l'état ce bouton est affiché si au moins une collection de contenus synchronisables existe, s'il en existe au moins une, il utilise la première qui est trouvée dans la liste. A l'avenir, un autre bouton plus complet pourra afficher l'ensemble des collections disponibles sous forme de liste.

Ajouter le bouton dans le ribbon en écrivant le code suivant dans ribbon/cms-ribbon.xml :

Ajout du bouton d'import dans le ribbon

<tab label="plugin.cms:RIBBON_TABS_TAB_ADMINISTRATION_LABEL" override="true">
    <groups>
        <group label="plugin.cms:RIBBON_TABS_TAB_ADMINISTRATION_GROUPS_GROUP_TOOLS_LABEL" override="true" controlsOrder="0.10">
            <control id="fr.ametys.myplugin.ImportSomething"/>
        </group>
    </groups>
</tab>

Dans cet exemple, le bouton est ajouté à l'onglet Administration dans la partie Outils en dernière position.

Création d'un bouton de synchronisation

Créer le bouton permettant de synchroniser un contenu unitairement dans le fichier plugin.xml sous cette forme :

Création d'un bouton d'import de contenus

<extension id="fr.ametys.myplugin.SynchronizeSomething"
           point="org.ametys.core.ui.RibbonControlsManager"
           class="org.ametys.plugins.contentio.synchronize.clientsideelement.SCCSmartContentClientSideElement">
    <class name="Ametys.plugins.cms.content.controller.SmartContentController">
        <action>Ametys.plugins.contentio.search.SynchronizeContentAction.act</action>
        
        <sccModelId>org.ametys.plugins.contentio.synchronize.collection.ldap</sccModelId>
        
        <label i18n="false">Synchronize my something content</label>
        <description i18n="false">Launch a synchronization of the content</description>
        
        <field-label i18n="false">Please enter the synchronization code :</field-label>
        
        <selection-target-id>^content$</selection-target-id>
        <selection-target-parameter>
            <name>^types$</name>
            <value>^content-type.Something$</value>
        </selection-target-parameter>
        <selection-enable-multiselection>false</selection-enable-multiselection>
        
        <icon-glyph>odficon-blank32</icon-glyph>
        <icon-decorator>decorator-ametysicon-arrow123</icon-decorator>
        
        <selection-description-empty i18n="false">plugin.contentio:PLUGINS_CONTENTIO_BUTTON_SYNCHRONIZE_NOCONTENT</selection-description-empty>
        <selection-description-nomatch i18n="false">plugin.contentio:PLUGINS_CONTENTIO_BUTTON_SYNCHRONIZE_NOCONTENT</selection-description-nomatch>
        <selection-description-multiselectionforbidden i18n="true">plugin.cms:CONTENT_EDIT_DESCRIPTION_MANYCONTENT</selection-description-multiselectionforbidden>
        
        <allright-start-description i18n="false">plugin.contentio:PLUGINS_CONTENTIO_BUTTON_SYNCHRONIZE_START</allright-start-description>
        <allright-end-description i18n="false">plugin.contentio:PLUGINS_CONTENTIO_BUTTON_SYNCHRONIZE_END</allright-end-description>
        <allright-content-description i18n="false">plugin.contentio:PLUGINS_CONTENTIO_BUTTON_SYNCHRONIZE_START</allright-content-description>
        <error-description i18n="true">plugin.cms:CONTENT_EDIT_DESCRIPTION_ERROR</error-description>
        
        <enabled-on-unlock-only>true</enabled-on-unlock-only>
        <locked-start-description i18n="true">plugin.cms:CONTENT_EDIT_DESCRIPTION_LOCKED_START</locked-start-description>
        <locked-end-description i18n="true">plugin.cms:CONTENT_EDIT_DESCRIPTION_LOCKED_END</locked-end-description>
        <locked-content-description i18n="true">plugin.cms:CONTENT_EDIT_DESCRIPTION_LOCKED_CONTENT</locked-content-description>
    </class> 
    <scripts>
        <file plugin="cms">js/Ametys/plugins/cms/content/controller/SmartContentController.js</file>
        <file plugin="contentio">js/Ametys/plugins/contentio/search/SynchronizeContentAction.js</file>
    </scripts>
    <depends>
        <org.ametys.core.ui.UIToolsFactoriesManager>uitool-server-logs</org.ametys.core.ui.UIToolsFactoriesManager>
    </depends>
</extension>

Dans cet exemple, l'identifiant du bouton est fr.ametys.myplugin.SynchronizeSomething, il permet de synchroniser un contenu de type Something répondant au modèle de contenus synchronisables Source de données LDAP (identifié par org.ametys.plugins.contentio.synchronize.collection.ldap).

En l'état ce bouton est affiché si au moins une collection de contenus synchronisables existe, s'il en existe au moins une, il utilise la première qui est trouvée dans la liste. A l'avenir, un autre bouton plus complet pourra afficher l'ensemble des collections disponibles sous forme de liste.

Ajouter le bouton dans le ribbon en écrivant le code suivant dans ribbon/cms-ribbon.xml :

Ajout du bouton d'import dans le ribbon

<tab label="plugin.cms:RIBBON_TABS_TAB_CONTENT_LABEL" override="true">
    <groups>
        <group label="plugin.cms:RIBBON_TABS_TAB_CONTENT_GROUPS_GROUP_ACTION_LABEL" override="true" controlsOrder="0.10">
            <control id="fr.ametys.myplugin.SynchronizeSomething"/>
        </group>
    </groups>
</tab>

Dans cet exemple, le bouton est ajouté à l'onglet contextuel Contenu dans la partie Actions en dernière position.

Les opérateurs

Lors d'une synchronisation, on peut définir un opérateur spécifique qui fait des actions supplémentaires pour chaque contenu :

Pour cela, il faut dans le plugin définir l'opérateur de la manière suivant :

<extensions>
     <extension id="org.ametys.plugins.contentio.synchronize.impl.MonOperatorPerso"
                class="org.ametys.plugins.contentio.synchronize.impl.MonOperatorPerso"
                point="org.ametys.plugins.contentio.synchronize.SynchronizingContentOperatorExtensionPoint">
         <label i18n="true">KEY_MON_OPERATEUR_PERSO_LABEL</label>           
     </extension>
</extensions>

Avec la class java org.ametys.plugins.contentio.synchronize.impl.MonOperatorPerso qui étend DefaultSynchronizingContentOperator
Elle pourra implémenter les deux méthodes :

public Map<String, List<Object>> transform(Map<String, List<Object>> remoteValues, Logger logger)

Elle permet de transformer les valeurs de remoteValues avant la synchronisation du contenu

public void additionalOperation(Content content, Map<String, List<Object>> remoteValues, Logger logger)

Elle permet de faire des opérations supplémentaires sur le contenu après synchronisation