OTRS 6.0 API Reference Perl

Description manuals and libraries
OTRS 6.0 API Reference Perl > Perl Modules > Kernel::Output::HTML::Layout

NAME

Kernel::Output::HTML::Layout - all generic html functions

DESCRIPTION

All generic html functions. E. g. to get options fields, template processing, ...

PUBLIC INTERFACE

new()

create a new object. Do not use it directly, instead use:

    use Kernel::System::ObjectManager;
    local $Kernel::OM = Kernel::System::ObjectManager->new(
        'Kernel::Output::HTML::Layout' => {
            Lang    => 'de',
        },
    );
    my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');

From the web installer, a special Option InstallerOnly is passed to indicate that a database connection is not yet available.

    use Kernel::System::ObjectManager;
    local $Kernel::OM = Kernel::System::ObjectManager->new(
        'Kernel::Output::HTML::Layout' => {
            InstallerOnly => 1,
        },
    );
    my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');

Block()

call a block and pass data to it (optional) to generate the block's output.

    $LayoutObject->Block(
        Name => 'Row',
        Data => {
            Time => ...,
        },
    );

JSONEncode()

Encode perl data structure to JSON string

    my $JSON = $LayoutObject->JSONEncode(
        Data        => $Data,
        NoQuotes    => 0|1, # optional: no double quotes at the start and the end of JSON string
    );

Redirect()

return html for browser to redirect

    my $HTML = $LayoutObject->Redirect(
        OP => "Action=AdminUserGroup;Subaction=User;ID=$UserID",
    );

    my $HTML = $LayoutObject->Redirect(
        ExtURL => "http://some.example.com/",
    );

During login action, Login = 1> should be passed to Redirect(), which indicates that if the browser has cookie support, it is OK for the session cookie to be not yet set.

Notify()

create notify lines

    infos, the text will be translated

    my $Output = $LayoutObject->Notify(
        Priority => 'Warning',
        Info => 'Some Info Message',
    );

    data with link, the text will be translated

    my $Output = $LayoutObject->Notify(
        Priority  => 'Warning',
        Data      => 'Template content',
        Link      => 'http://example.com/',
        LinkClass => 'some_CSS_class',              # optional
    );

    errors, the text will be translated

    my $Output = $LayoutObject->Notify(
        Priority => 'Error',
        Info => 'Some Error Message',
    );

    errors from log backend, if no error exists, a '' will be returned

    my $Output = $LayoutObject->Notify(
        Priority => 'Error',
    );

NotifyNonUpdatedTickets()

Adds notification about tickets which are not updated.

    my $Output = $LayoutObject->NotifyNonUpdatedTickets();

generates the HTML for the page begin in the Agent interface.

    my $Output = $LayoutObject->Header(
        Type              => 'Small',                # (optional) '' (Default, full header) or 'Small' (blank header)
        ShowToolbarItems  => 0,                      # (optional) default 1 (0|1)
        ShowPrefLink      => 0,                      # (optional) default 1 (0|1)
        ShowLogoutButton  => 0,                      # (optional) default 1 (0|1)

        DisableIFrameOriginRestricted => 1,          # (optional, default 0) - suppress X-Frame-Options header.
    );

Ascii2Html()

convert ASCII to html string

    my $HTML = $LayoutObject->Ascii2Html(
        Text            => 'Some <> Test <font color="red">Test</font>',
        Max             => 20,       # max 20 chars flowed by [..]
        VMax            => 15,       # first 15 lines
        NewLine         => 0,        # move \r to \n
        HTMLResultMode  => 0,        # replace " " with C<&nbsp;>
        StripEmptyLines => 0,
        Type            => 'Normal', # JSText or Normal text
        LinkFeature     => 0,        # do some URL detections
    );

also string ref is possible

    my $HTMLStringRef = $LayoutObject->Ascii2Html(
        Text => \$String,
    );

LinkQuote()

detect links in text

    my $HTMLWithLinks = $LayoutObject->LinkQuote(
        Text => $HTMLWithOutLinks,
    );

also string ref is possible

    my $HTMLWithLinksRef = $LayoutObject->LinkQuote(
        Text => \$HTMLWithOutLinksRef,
    );

HTMLLinkQuote()

detect links in HTML code

    my $HTMLWithLinks = $LayoutObject->HTMLLinkQuote(
        String => $HTMLString,
    );

also string ref is possible

    my $HTMLWithLinksRef = $LayoutObject->HTMLLinkQuote(
        String => \$HTMLString,
    );

LinkEncode()

perform URL encoding on query string parameter names or values.

    my $ParamValueEncoded = $LayoutObject->LinkEncode($ParamValue);

Don't encode entire URLs, because this will make them invalid (?, & and ; will be encoded as well). Only pass one parameter name or value at a time.

BuildSelection()

build a HTML option element based on given data

    my $HTML = $LayoutObject->BuildSelection(
        Data            => $ArrayRef,        # use $HashRef, $ArrayRef or $ArrayHashRef (see below)
        Name            => 'TheName',        # name of element
        ID              => 'HTMLID',         # (optional) the HTML ID for this element, if not provided, the name will be used as ID as well
        Multiple        => 0,                # (optional) default 0 (0|1)
        Size            => 1,                # (optional) default 1 element size
        Class           => 'class',          # (optional) a css class, include 'Modernize' to activate InputFields
        Disabled        => 0,                # (optional) default 0 (0|1) disable the element
        AutoComplete    => 'off',            # (optional)
        OnChange        => 'javascript',     # (optional)
        OnClick         => 'javascript',     # (optional)

        SelectedID     => 1,                 # (optional) use integer or arrayref (unable to use with ArrayHashRef)
        SelectedID     => [1, 5, 3],         # (optional) use integer or arrayref (unable to use with ArrayHashRef)
        SelectedValue  => 'test',            # (optional) use string or arrayref (unable to use with ArrayHashRef)
        SelectedValue  => ['test', 'test1'], # (optional) use string or arrayref (unable to use with ArrayHashRef)

        Sort           => 'NumericValue',    # (optional) (AlphanumericValue|NumericValue|AlphanumericKey|NumericKey|TreeView|IndividualKey|IndividualValue) unable to use with ArrayHashRef
        SortIndividual => ['sec', 'min']     # (optional) only sort is set to IndividualKey or IndividualValue
        SortReverse    => 0,                 # (optional) reverse the list

        Translation    => 1,                 # (optional) default 1 (0|1) translate value
        PossibleNone   => 0,                 # (optional) default 0 (0|1) add a leading empty selection
        TreeView       => 0,                 # (optional) default 0 (0|1)
        DisabledBranch => 'Branch',          # (optional) disable all elements of this branch (use string or arrayref)
        Max            => 100,               # (optional) default 100 max size of the shown value
        HTMLQuote      => 0,                 # (optional) default 1 (0|1) disable html quote
        Title          => 'C<Tooltip> Text',    # (optional) string will be shown as c<Tooltip> on c<mouseover>
        OptionTitle    => 1,                 # (optional) default 0 (0|1) show title attribute (the option value) on every option element

        Filters => {                         # (optional) filter data, used by InputFields
            LastOwners => {                  # filter id
                Name   => 'Last owners',     # name of the filter
                Values => {                  # filtered data structure
                    Key1 => 'Value1',
                    Key2 => 'Value2',
                    Key3 => 'Value3',
                },
                Active => 1,                 # (optional) default 0 (0|1) make this filter immediately active
            },
            InvolvedAgents => {
                Name   => 'Involved in this ticket',
                Values => \%HashWithData,
            },
        },
        ExpandFilters  => 1,                 # (optional) default 0 (0|1) expand filters list by default

        ValidateDateAfter  => '2016-01-01',  # (optional) validate that date is after supplied value
        ValidateDateBefore => '2016-01-01',  # (optional) validate that date is before supplied value
    );

    my $HashRef = {
        Key1 => 'Value1',
        Key2 => 'Value2',
        Key3 => 'Value3',
    };

    my $ArrayRef = [
        'KeyValue1',
        'KeyValue2',
        'KeyValue3',
        'KeyValue4',
    ];

    my $ArrayHashRef = [
        {
            Key   => '1',
            Value => 'Value1',
        },
        {
            Key      => '2',
            Value    => 'Value1::Subvalue1',
            Selected => 1,
        },
        {
            Key   => '3',
            Value => 'Value1::Subvalue2',
        },
        {
            Key      => '4',
            Value    => 'Value2',
            Disabled => 1,
        }
    ];

Permission()

check if access to a frontend module exists

    my $Access = $LayoutObject->Permission(
        Action => 'AdminCustomerUser',
        Type   => 'rw', # ro|rw possible
    );

Attachment()

returns browser output to display/download a attachment

    $HTML = $LayoutObject->Attachment(
        Type             => 'inline',          # optional, default: attachment, possible: inline|attachment
        Filename         => 'FileName.png',    # optional
        AdditionalHeader => $AdditionalHeader, # optional
        ContentType      => 'image/png',
        Content          => $Content,
        Sandbox          => 1,                 # optional, default 0; use content security policy to prohibit external
                                               #   scripts, flash etc.
    );

    or for AJAX html snippets

    $HTML = $LayoutObject->Attachment(
        Type        => 'inline',        # optional, default: attachment, possible: inline|attachment
        Filename    => 'FileName.html', # optional
        ContentType => 'text/html',
        Charset     => 'utf-8',         # optional
        Content     => $Content,
        NoCache     => 1,               # optional
    );

generates a page navigation bar

    my %PageNavBar = $LayoutObject->PageNavBar(
        Limit       => 100,         # marks result of TotalHits red if Limit is gerater then AllHits
        WindowSize  => 15,          # max shown pages to click
        StartHit    => 1,           # start to show items
        PageShown   => 15,          # number of shown items a page
        AllHits     => 56,          # number of total hits
        Action      => 'AgentXXX',  # e. g. 'Action=' . $Self->{LayoutObject}->{Action}
        Link        => $Link,       # e. g. 'Subaction=View;'
        AJAXReplace => 'IDElement', # IDElement which should be replaced
        IDPrefix    => 'Tickets',   # Prefix for the id parameter
    );

    return values of hash

        TotalHits  # total hits
        Result     # shown items e. g. "1-5" or "16-30"
        SiteNavBar # html for page nav bar e. g. "1 2 3 4"

        ResultLong     # shown items e. g. "1-5 of 32" or "16-30 of 64"
        SiteNavBarLong # html for page nav bar e. g. "Page: 1 2 3 4"

BuildDateSelection()

build the HTML code to represent a date selection based on the given data. Depending on the SysConfig settings the controls to set the date could be multiple select or input fields

    my $HTML = $LayoutObject->BuildDateSelection(
        Prefix           => 'some prefix',        # optional, (needed to specify other parameters)
        <Prefix>Year     => 2015,                 # optional, defaults to current year, used to set the initial value
        <Prefix>Month    => 6,                    # optional, defaults to current month, used to set the initial value
        <Prefix>Day      => 9,                    # optional, defaults to current day, used to set the initial value
        <Prefix>Hour     => 12,                   # optional, defaults to current hour, used to set the initial value
        <Prefix>Minute   => 26,                   # optional, defaults to current minute, used to set the initial value
        <Prefix>Second   => 59,                   # optional, defaults to current second, used to set the initial value
        <Prefix>Optional => 1,                    # optional, default 0, when active a checkbox is included to specify
                                                  #   if the values should be saved or not
        <Prefix>Used     => 1,                    # optional, default 0, used to set the initial state of the checkbox
                                                  #   mentioned above
        <Prefix>Required => 1,                    # optional, default 0 (Deprecated)
        <prefix>Class    => 'some class',         # optional, specify an additional class to the HTML elements
        Area     => 'some area',                  # optional, default 'Agent' (Deprecated)
        DiffTime => 123,                          # optional, default 0, used to set the initial time influencing the
                                                  #   current time (in seconds)
        OverrideTimeZone => 1,                    # optional (1 or 0), when active the time is not translated to the user
                                                  #   time zone
        YearPeriodFuture => 3,                    # optional, used to define the number of years in future to be display
                                                  #   in the year select
        YearPeriodPast   => 2,                    # optional, used to define the number of years in past to be display
                                                  #   in the year select
        YearDiff         => 0,                    # optional. used to define the number of years to be displayed
                                                  #   in the year select (alternatively to YearPeriodFuture and YearPeriodPast)
        ValidateDateInFuture     => 1,            # optional (1 or 0), when active sets an special class to validate
                                                  #   that the date set in the controls to be in the future
        ValidateDateNotInFuture  => 1,            # optional (1 or 0), when active sets an special class to validate
                                                  #   that the date set in the controls not to be in the future
        ValidateDateAfterPrefix  => 'Start',      # optional (Prefix), when defined sets a special class to validate
                                                  #   that the date set in the controls comes after the date with Prefix
        ValidateDateAfterValue   => '2016-01-01', # optional (Date), when defined sets a special data parameter to validate
                                                  #   that the date set in the controls comes after the supplied date
        ValidateDateBeforePrefix => 'End',        # optional (Prefix), when defined sets a special class to validate
                                                  #   that the date set in the controls comes before the date with Prefix
        ValidateDateBeforeValue  => '2016-01-01', # optional (Date), when defined sets a special data parameter to validate
                                                  #   that the date set in the controls comes before the supplied date
        Calendar => 2,                            # optional, used to define the SysConfig calendar on which the Datepicker
                                                  #   will be based on to show the vacation days and the start week day
        Format   => 'DateInputFormat',            # optional, or 'DateInputFormatLong', used to define if only date or
                                                  #   date/time components should be shown (DateInputFormatLong shows date/time)
        Validate => 1,                            # optional (1 or 0), defines if the date selection should be validated on
                                                  #   client side with JS
        Disabled => 1,                            # optional (1 or 0), when active select and checkbox controls gets the
                                                  #   disabled attribute and input fields gets the read only attribute
    );

HumanReadableDataSize()

Produces human readable data size.

    my $SizeStr = $LayoutObject->HumanReadableDataSize(
        Size => 123,  # size in bytes
    );

Returns

    $SizeStr = '123 B';         # example with decimal point: 123.4 MB

Ascii2RichText()

converts text to rich text

    my $HTMLString = $LayoutObject->Ascii2RichText(
        String => $TextString,
    );

RichText2Ascii()

converts text to rich text

    my $TextString = $LayoutObject->RichText2Ascii(
        String => $HTMLString,
    );

RichTextDocumentComplete()

1) add html, body, ... tags to be a valid html document 2) replace links of inline content e. g. images to <img src="cid:xxxx" />

    $HTMLBody = $LayoutObject->RichTextDocumentComplete(
        String => $HTMLBody,
    );

RichTextDocumentServe()

Serve a rich text (HTML) document for local view inside of an iframe in correct charset and with correct links for inline documents.

By default, all inline/active content (such as script, object, applet or embed tags) will be stripped. If there are external images, they will be stripped too, but a message will be shown allowing the user to reload the page showing the external images.

    my %HTMLFile = $LayoutObject->RichTextDocumentServe(
        Data => {
            Content     => $HTMLBodyRef,
            ContentType => 'text/html; charset="iso-8859-1"',
        },
        URL               => 'AgentTicketAttachment;Subaction=HTMLView;TicketID=123;ArticleID=123;FileID=',
        Attachments       => \%AttachmentListOfInlineAttachments,

        LoadInlineContent => 0,     # Serve the document including all inline content. WARNING: This might be dangerous.

        LoadExternalImages => 0,    # Load external images? If this is 0, a message will be included if
                                    # external images were found and removed.
    );

RichTextDocumentCleanup()

please see Kernel::System::HTML::Layout::DocumentCleanup()

TERMS AND CONDITIONS

This software is part of the OTRS project (https://otrs.org/).

This software comes with ABSOLUTELY NO WARRANTY. For details, see the enclosed file COPYING for license information (GPL). If you did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.