=encoding utf-8

=head1 NAME

Sympa::Internals::Workflow - Overview on workflow of Sympa

=head1 DESCRIPTION

Following picture roughly describes interaction among several classes in
workflow of Sympa.  For more details see documentation on each class.

=head2 Message processing

 <<archived.pl>>
 
 Archive => [ProcessArchive] => (list archive)
 
 <<bounced.pl>>
 
 Bounce => [ProcessBounce] => Tracking
 
 <<bulk.pl>>
 
 Outgoing => [ProcessOutgoing] => (Mailer)
 
 <<sympa_automatic.pl>>
 
 Automatic => [ProcessAutomatic] => Incoming
 
 <<sympa_msg.pl>>
 
 Digest::Collection => [ProcessDigest]
                                    :
                                    v
                                    *1
 
                      +-> (reject or ignore)
                     /
                    +---> [DoCommand]
                   /              :
                  /               v
 Incoming => [ProcessIncoming]    *2
                  \                              +-> (reject)
                   +-> [DoForward] => (Mailer)  /
                    \                          +-> [ToEditor] => Outgoing
                     +-> [DoMessage]          /
                               \             /---> [ToHeld] => Held
          *3 (CONFIRM)          +-> [AuthorizeMessage]
          :                    /      :      \---> [ToModeration] => Mod.
          v                   /     Topic     \
 Held => [ProcessHeld] ------+                 \
                                                +-> [DistributeMessage]
            *3 (DISTRIBUTE)                    /           \
               (REJECT)       +--> (reject)   /             \
                :            /               /               \
                v           /               /                 \
 Moderation => [ProcessModeration]         /                   \
                            \             /                     \
                             +---------- +                       \
                                                                  \
                       +-------------------------------------------+
                        \
                        [TransformIncoming]
                          \        :
                           \     Topic
 <<wwsympa.fcgi>>           \
                        [ToArchive] => Archive
 (list archive)               \
  => [ResendArchive] -- [TransformOutgoing] -+
                                \             \
                        [ToDigest] => Digest   \
                                  \             \
                                   +-------------+-> [ToList] => Outgoing
                                                           :
                            +-> [TransformDigestFinal]    Topic
                           /                 \
 <<Template sending>>     /         +------> [ToOutgoing] => Outgoing
                         /         / 
 (mail template) => [ProcessTemplate] -----> [ToListmaster] => Listmaster
                       /           \
                       ^            +------> [ToMailer] => (Mailer)
                       |
                       *1

=head2 Command processing

                      *2
 <<sympa_msg.pl>>     :
                      v
 (message) => [ProcessMessage] --+             +-> (reject)
                                  \           /
      *3 (AUTH)                    \         /---> [ToAuth] => Auth
         (DECL)     +-> (decline)   +-> [AuthorizeRequest]
          :        /               /         \---> [ToAuthOwner] => Auth
          v       /               /           \
 Auth => [ProcessAuth]           /             \
                  \             /               +-> [DispatchRequest]
                   +-----------+                            \
                              /                      (request handler)
 <<wwsympa.fcgi, SOAP>>      /                                :
                            /                                 v
 Request::Collection       /                                  *3 
        => [ProcessRequest]

=head2 Task processing

 <<task_manager.pl>>
 
 Task => [ProcessTask] => Task

=head2 Legend

=over

=item C<I<ClassName>>

Spool class.  Prefix C<Sympa::Spool::> is omitted.

=over

=item C<Tracking>

L<Sympa::Tracking> class

=back

=item C<[I<ClassName>]>

Workflow class.  Prefix C<Sympa::Spindle::> is omitted.

=item C<(Mailer)>

L<Sympa::Mailer> class.

=item C<(list archive)>

L<Sympa::Archive> class.

=item C<(mail template)>

L<Sympa::Message::Template> class.

=item C<(message)>

L<Sympa::Request::Message> class.

=item C<(request handler)>

A subclass of C<Sympa::Request::Handler> class.

=back

=head1 SEE ALSO

L<sympa_toc(1)>, L<Sympa::Internals>, L<Sympa::Spindle>, L<Sympa::Spool>.

=cut
