
####
Base
####


****
NAME
****


Kernel::System::Ticket::Article::Backend::Base - base class for article backends


***********
DESCRIPTION
***********


This is a base class for article backends and should not be instantiated directly.


.. code-block:: perl

     package Kernel::System::Ticket::Article::Backend::MyBackend;
     use strict;
     use warnings;
 
     use parent qw(Kernel::System::Ticket::Article::Backend::Base);
 
     # methods go here



****************
PUBLIC INTERFACE
****************


new()
=====


Do not instantiate this class, instead use the real article backend classes.
Also, don't use the constructor directly, use the ObjectManager instead:


.. code-block:: perl

     my $ArticleBackendObject = $Kernel::OM->Get('Kernel::System::Ticket::Article::Backend::MyBackend');



ChannelNameGet()
================


Returns name of the communication channel used by the article backend. Used internally. Override this method in your
backend class.


.. code-block:: perl

     my $ChannelName = $ArticleBackendObject->ChannelNameGet();
     $ChannelName = 'MyBackend';



ArticleHasHTMLContent()
=======================


Returns 1 if article has HTML content.


.. code-block:: perl

     my $ArticleHasHTMLContent = $ArticleBackendObject->ArticleHasHTMLContent(
         TicketID  => 1,
         ArticleID => 2,
         UserID    => 1,
     );


Result:


.. code-block:: perl

     $ArticleHasHTMLContent = 1;     # or 0



ChannelIDGet()
==============


Returns registered communication channel ID. Same for all article backends, don't override this
particular method. In case of invalid article backend, this method will return false value.


.. code-block:: perl

     my $ChannelID = $ArticleBackendObject->ChannelIDGet();
     $ChannelID = 1;



ArticleCreate()
===============


Create an article. Override this method in your class.


.. code-block:: perl

     my $ArticleID = $ArticleBackendObject->ArticleCreate(
         TicketID             => 123,
         SenderType           => 'agent',    # agent|system|customer
         IsVisibleForCustomer => 1,
         UserID               => 123,
 
         # Backend specific parameters:
         # From    => 'Some Agent <email@example.com>',
         # To      => 'Some Customer A <customer-a@example.com>',
         # Subject => 'some short description',
         # ...
     );


Events:


.. code-block:: perl

     ArticleCreate



ArticleUpdate()
===============


Update an article. Override this method in your class.


.. code-block:: perl

     my $Success = $ArticleBackendObject->ArticleUpdate(
         TicketID  => 123,
         ArticleID => 123,
         Key       => 'Body',
         Value     => 'New Body',
         UserID    => 123,
     );


Events:


.. code-block:: perl

     ArticleUpdate



ArticleGet()
============


Returns article data. Override this method in your class.


.. code-block:: perl

     my %Article = $ArticleBackendObject->ArticleGet(
         TicketID      => 123,
         ArticleID     => 123,
         DynamicFields => 1,
 
         # Backend specific parameters:
         # RealNames => 1,
     );



ArticleDelete()
===============


Delete an article. Override this method in your class.


.. code-block:: perl

     my $Success = $ArticleBackendObject->ArticleDelete(
         TicketID  => 123,
         ArticleID => 123,
         UserID    => 123,
     );



BackendSearchableFieldsGet()
============================


Get article attachment index as hash.


.. code-block:: perl

     my %Index = $ArticleBackendObject->BackendSearchableFieldsGet();


Returns:


.. code-block:: perl

     my %BackendSearchableFieldsGet = {
         From    => 'from',
         To      => 'to',
         Cc      => 'cc',
         Subject => 'subject',
         Body    => 'body',
     };



ArticleSearchableContentGet()
=============================


Get article attachment index as hash.


.. code-block:: perl

     my %Index = $ArticleBackendObject->ArticleSearchableContentGet(
         TicketID       => 123,   # (required)
         ArticleID      => 123,   # (required)
         DynamicFields  => 1,     # (optional) To include the dynamic field values for this article on the return structure.
         RealNames      => 1,     # (optional) To include the From/To/Cc fields with real names.
         UserID         => 123,   # (required)
     );


Returns:


.. code-block:: perl

     my %ArticleSearchData = [
         {
         'From'    => 'Test User1 <testuser1@example.com>',
         'To'      => 'Test User2 <testuser2@example.com>',
         'Cc'      => 'Test User3 <testuser3@example.com>',
         'Subject' => 'This is a test subject!',
         'Body'    => 'This is a body text!',
         # ...
         },
     ];




*****************
PRIVATE FUNCTIONS
*****************


Use following functions from backends only.

_MetaArticleCreate()
====================


Create a new article.


.. code-block:: perl

     my $ArticleID = $Self->_MetaArticleCreate(
         TicketID             => 123,
         SenderType           => 'agent',    # agent|system|customer
         IsVisibleForCustomer => 0,
         CommunicationChannel => 'Email',
         UserID               => 1,
     );


Alternatively, you can pass in IDs too:


.. code-block:: perl

     my $ArticleID = $Self->_MetaArticleCreate(
         TicketID               => 123,
         SenderTypeID           => 1,
         IsVisibleForCustomer   => 0,
         CommunicationChannelID => 2,
         UserID                 => 1,
     );



_MetaArticleUpdate()
====================


Update an article.

Note: Keys \ ``SenderType``\ , \ ``SenderTypeID``\  and \ ``IsVisibleForCustomer``\  are implemented.


.. code-block:: perl

     my $Success = $Self->_MetaArticleUpdate(
         TicketID  => 123,                    # (required)
         ArticleID => 123,                    # (required)
         Key       => 'IsVisibleForCustomer', # (optional) If not provided, only ChangeBy and ChangeTime will be updated.
         Value     => 1,                      # (optional)
         UserID    => 123,                    # (required)
     );
 
     my $Success = $Self->_MetaArticleUpdate(
         TicketID  => 123,
         ArticleID => 123,
         Key       => 'SenderType',
         Value     => 'agent',
         UserID    => 123,
     );


Events:


.. code-block:: perl

     MetaArticleUpdate



_MetaArticleGet()
=================


Get article meta data.


.. code-block:: perl

     my %Article = $Self->_MetaArticleGet(
         ArticleID => 42,
         TicketID  => 23,
     );


Returns:


.. code-block:: perl

     %Article = (
         ArticleID              => 1,
         TicketID               => 2,
         CommunicationChannelID => 1,
         SenderTypeID           => 1,
         IsVisibleForCustomer   => 0,
         CreateTime             => ...,
         CreateBy               => ...,
         ChangeTime             => ...,
         ChangeBy               => ...,
     );



_MetaArticleDelete()
====================


Delete an article. This must be called \ **after**\  all backend data has been deleted.


.. code-block:: perl

     my $Success = $Self->_MetaArticleDelete(
         ArticleID => 123,
         UserID    => 123,
         TicketID  => 123,
     );



_MetaArticleDynamicFieldsGet()
==============================


Returns article content with dynamic fields.


.. code-block:: perl

     my %Data = $Self->_MetaArticleDynamicFieldsGet(
         Data => {            # (required) article data
             TicketID  => 1,
             ArticleID => 1,
             From      => 'agent@mail.org',
             To        => 'customer@mail.org',
             # ...
         },
     );


Returns:


.. code-block:: perl

     %Data = (
         TicketID  => 1,
         ArticleID => 1,
         From      => 'agent@mail.org',
         To        => 'customer@mail.org',
         # ...,
         DynamicField_A  => 'Value A',
         # ...
     );





