Simplifier la configuration des actions multiples dans Share

La barre d’outils de Share est un élément regroupant plusieurs fonctions de gestion documentaire : création de nouveaux documents, de nouveaux dossiers, actions multiples sur la sélection de documents, etc.

La barre d'outils Alfresco Share

Ce composant supporte les configurations suivantes :

  • liste des types de contenus que l’on peut créer
  • liste des actions disponibles

Configurer la toolbar avec Alfresco 3.4d

En version 3.4 d’Alfresco, la configuration a lieu dans le fichier de .config.xml du webscript /components/documentlibrary/toolbar pour les sites et /components/documentlibrary/repo/toolbar pour le « repository ».

<toolbar>
  <createContent>
    <content mimetype="text/plain" icon="plain-text" label="menu.create-content.text" />
    <content mimetype="text/html" icon="html" label="menu.create-content.html" />
    <content mimetype="text/xml" icon="xml" label="menu.create-content.xml" />
  </createContent>
  <actionSets>
    <actionSet id="default">
      <action type="action-link" id="onActionCopyTo" label="menu.selected-items.copy" />
      <action type="action-link" id="onActionMoveTo" permission="delete" label="menu.selected-items.move" />
      <action type="action-link" id="onActionDelete" permission="delete" label="menu.selected-items.delete" />
      <action type="action-link" id="onActionAssignWorkflow" asset="document" label="menu.selected-items.assign-workflow" />
    </actionSet>
  </actionSets>
</toolbar>

Pour ajouter un nouveau type de contenu ou une nouvelle action, il faut donc surcharger (pour les sites) le fichier toolbar.get.config.xml en le dupliquant dans l’arborescence alfresco/web-extension/site-webscripts/org/alfresco/components/documentlibrary, puis en en modifiant le contenu pour qu’il reflète nos besoins.

Configurer la toolbar avec Alfresco 4.0d

Avec Alfresco 4.0d, les choses sont légèrement différentes. Le fichier toolbar.get.config.xml existe toujours, mais il ne sert plus qu’à la définition des actions; la configuration des types de contenus a été déplacée dans le fichier share-documentlibrary-config.xml.

Le fichier toolbar.get.config.xml :

<toolbar>
  <actionSets>
    <actionSet id="default">
      <action type="action-link" id="onActionCopyTo" label="menu.selected-items.copy" />
      <action type="action-link" id="onActionMoveTo" permission="delete" label="menu.selected-items.move" />
      <action type="action-link" id="onActionDelete" permission="delete" label="menu.selected-items.delete" />
      <action type="action-link" id="onActionAssignWorkflow" asset="document" label="menu.selected-items.assign-workflow" />
    </actionSet>
  </actionSets>
</toolbar>

Extrait du fichier share-documentlibrary-config.xml :

<config evaluator="string-compare" condition="DocumentLibrary">
[...]
  <create-content>
    <content id="plain-text" mimetype="text/plain" label="create-content.text" itemid="cm:content" icon="text"/>
    <content id="html" mimetype="text/html"  label="create-content.html" itemid="cm:content"/>
    <content id="xml" mimetype="text/xml" label="create-content.xml" itemid="cm:content"/>
  </create-content>
[...]
</config>

En version 4.0d, si je veux modifier la liste des contenus, je dois travailler avec le fichier share-config-custom.xml, alors que si je veux modifier la liste des actions, je dois continuer à surcharger le fichier de configuration du webscript. C’est peu pratique et plutôt surprenant : le travail semble avoir été fait à moitié, pourquoi changer le comportement pour les contenus et pas pour les actions ?

De mon point de vue, le remplacement de la configuration « webscript » par une configuration « share-config » est une bonne chose : elle permet plus de lisibilité et bientôt plus d’extensibilité, comme nous le verrons plus loin.

Améliorer la configuration la toolbar avec Alfresco 4.0d

Je propose donc d’uniformiser le principe de configuration en favorisant l’approche « share-config ».
Pour cela, nous allons grandement nous baser sur ce qui est fait pour les contenus et les appliquer aux actions.
Notre source d’information est le fichier toolbar.lib.js disponible dans le dossier alfresco/site-webscripts/org/alfresco/components/documentlibrary/include.
Ce fichier nous apprend que :

  • la configuration des actions provient du parsing XML de l’objet config.script qui correspond au contenu du fichier « .config.xml » du webscript
  • la configuration des contenus provient de config.scoped["DocumentLibrary"]["create-content"] qui correspond à la section create-content de la section DocumentLibrary de la configuration de Share.

Par mimétisme, nous allons créer une section toolbar-actions dans laquelle nous reporterons la configuration provenant de toolbar.get.config.xml :

<config evaluator="string-compare" condition="DocumentLibrary">
  <toolbar-actions>
    <action type="action-link" id="onActionCopyTo" label="menu.selected-items.copy" />
    <action type="action-link" id="onActionMoveTo" permission="Delete" label="menu.selected-items.move" />
    <action type="action-link" id="onActionDelete" permission="Delete" label="menu.selected-items.delete" />
    <action type="action-link" id="onActionAssignWorkflow" asset="document" label="menu.selected-items.assign-workflow" />
    <action type="action-link" id="onActionManagePermissions" permission="ChangePermissions" label="menu.selected-items.manage-permissions" />
  </toolbar-actions>
</config>

Cette configuration peut être définies dans le fichier share-config-custom.xml.

Pour l’exploiter, nous allons modifier la méthode getActionSet du fichier toolbar.lib.js pour quelle devienne :

function getActionSet() {
  // Actions
  var configActionSet = config.scoped["DocumentLibrary"]["toolbar-actions"];
    actionSet = [];
  // Found match?
  if (configActionSet !== null) {
    var toolbarActions = configActionSet.getChildren("action");
    if (toolbarActions) {
      for (var i = 0; i < toolbarActions.size(); i++) {  
        xmlAction = toolbarActions.get(i).attributes;
        actionSet.push(
        {
          id: (xmlAction["id"] !== null)?xmlAction["id"].toString() : "",
          type: (xmlAction["type"] !== null)?xmlAction["type"].toString() : "",
          permission: (xmlAction["permission"] !== null)?xmlAction["permission"].toString() : "",
          asset: (xmlAction["asset"] !== null)?xmlAction["asset"].toString() : "",
          href: (xmlAction["href"] !== null)?xmlAction["href"].toString() : "",
          label: (xmlAction["label"] !== null)?xmlAction["label"].toString() : ""
        });
      }
    }
  }
  model.actionSet = actionSet;
}

Avec ce changement, plus besoin de surcharger le webscript, une configuration suffit !
Cette modification est disponible sans effort grâce au jar ci-joint (à placer dans share/WEB-INF/lib) : amexio-share-toolbar-configuration.jar.

Et l’avenir ?

Le svn d’Alfresco ne semble pas indiquer qu’une telle modification sera apportée pour la version 4.1a.
C’est d’autant plus dommage que la version de SpringSurf utilisée pour cette future version permettra de définir des configurations dans les modules d’extension Share. Il sera par exemple possible de définir la chose suivante pour qu’une nouvelle action soit apportée par un module Share :

<extension>
  <modules>
    <module>
      <id>Toolbar Action Configuration Exemple</id>
      <auto-deploy>true</auto-deploy>
      <configurations>
        <config evaluator="string-compare" condition="DocumentLibrary">
           <toolbar-actions>
             <action type="action-link" id="onActionMyCusto" label="MyAction" />
            </toolbar-actions>
        </config>
      </configurations>
    </module>
  </modules>
</extension> 

Grâce à la modification proposée dans ce billet, il sera alors possible de définir des actions différentes en fonctions des sites… ou en fonction de tout autre critère d’évaluation.
Vivement que cette version soit disponible !

Cette entrée a été publiée dans Alfresco, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam