Skip to content

Personnalisation interne du système de base OTOBO

Dans cet article, vous apprenez à personnaliser directement le noyau d'OTOBOfusion – via la configuration XML, les modules Perl et les modèles. Nous vous montrons étape par étape comment intégrer votre propre module "HelloWorld" dans le système.


1. Structure de répertoires

Toutes les personnalisation sont situées sous votre clone OTOBO dans le répertoire Kernel/ :

Kernel/
├─ Config/Files/           # Enregistrements XML
│  └─ XML/
├─ System/                 # Modules de logique métier (Core)
├─ Modules/                # Contrôleurs de frontend (Agent/Client)
├─ Output/HTML/Standard/   # Modèles Template Toolkit (TT)
└─ Language/               # Traductions

2. Configuration XML

Les nouveaux modules et itinéraires sont enregistrés via XML. Créez un fichier HelloWorld.xml dans Kernel/Config/Files/XML/ :

xml
<?xml version="1.0" encoding="UTF-8"?>
<otobo_config version="2.0" init="Application">

  <!-- 1. Enregistrement du module de frontend -->
  <Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1">
    <Navigation>Frontend::Agent::ModuleRegistration</Navigation>
    <Value>
      <Item ValueType="FrontendRegistration">
        <Hash>
          <Item Key="Group"><Array><Item>utilisateurs</Item></Array></Item>
          <Item Key="Description" Translatable="1">Module HelloWorld</Item>
          <Item Key="Title"       Translatable="1">HelloWorld</Item>
          <Item Key="NavBarName">HelloWorld</Item>
        </Hash>
      </Item>
    </Value>
  </Setting>

</otobo_config>

3. Module Core (logique métier)

Créez votre logique dans Kernel/System/HelloWorld.pm :

perl
package Kernel::System::HelloWorld;
use strict;
use warnings;
our @ObjectDependencies = ();  

sub new {
    my ($Type, %Param) = @_;
    return bless {}, $Type;
}

sub GetHelloWorldText {
    my ($Self, %Param) = @_;
    return $Self->_FormatText(String => 'Hello World');
}

sub _FormatText {
    my ($Self, %Param) = @_;
    return uc $Param{String};
}

1;

4. Module de frontend (contrôleur)

Dans Kernel/Modules/AgentHelloWorld.pm, liez votre logique au frontend de l'agent :

perl
package Kernel::Modules::AgentHelloWorld;
use strict;
use warnings;

sub new { bless {}, shift }

sub Run {
    my ($Self, %Param) = @_;

    my $HelloObj    = $Kernel::OM->Get('Kernel::System::HelloWorld');
    my $LayoutObj   = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
    my %Data;
    
    $Data{Text} = $HelloObj->GetHelloWorldText();

    return 
        $LayoutObj->Header(Title => 'HelloWorld')
     . $LayoutObj->NavigationBar()
     . $LayoutObj->Output(
          TemplateFile => 'AgentHelloWorld',
          Data         => \%Data,
        )
     . $LayoutObj->Footer();
}

1;

5. Modèles (TT)

Créez le modèle suivant dans Kernel/Output/HTML/Standard/AgentHelloWorld.tt :

tt
[% Data.Text %]

<p>Ceci est votre module HelloWorld créé personnellement!</p>

6. Exemple de workflow

  1. Recharger :

    bash
    bin/otobo.Console.pl Maint::Config::Rebuild
  2. Vider le cache :

    bash
    bin/otobo.Console.pl Maint::Cache::Delete
  3. Ouvrir le navigateur : Interface de l'agent → Menu → « HelloWorld »


7. Conseils et bonnes pratiques

  • Déclarer les ObjectDependencies correctement (par exemple, DB, Layout).
  • N'oubliez pas la documentation POD dans les modules Perl.
  • Entretenez les traductions sous Kernel/Language/fr_*.pm.
  • Configurez les tests unitaires avec Mojolicious (facultatif).
  • Après chaque modification, reconstruire la configuration et vider le cache.

Vous disposez maintenant d'un modèle solide pour réaliser d'autres extensions de base dans OTOBO. Bonne chance dans votre développement!