Вход Регистрация
Файл: contao-3.5.8/system/modules/core/dca/tl_content.php
Строк: 1667
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */


/**
 * Table tl_content
 */
$GLOBALS['TL_DCA']['tl_content'] = array
(

    
// Config
    
'config' => array
    (
        
'dataContainer'               => 'Table',
        
'enableVersioning'            => true,
        
'ptable'                      => '',
        
'dynamicPtable'               => true,
        
'onload_callback'             => array
        (
            array(
'tl_content''showJsLibraryHint')
        ),
        
'sql' => array
        (
            
'keys' => array
            (
                
'id' => 'primary',
                
'pid,ptable,invisible,sorting' => 'index'
            
)
        )
    ),

    
// List
    
'list' => array
    (
        
'sorting' => array
        (
            
'mode'                    => 4,
            
'fields'                  => array('sorting'),
            
'panelLayout'             => 'filter;search,limit',
            
'headerFields'            => array('title''headline''author''inColumn''tstamp''showTeaser''published''start''stop'),
            
'child_record_callback'   => array('tl_content''addCteType')
        ),
        
'global_operations' => array
        (
            
'all' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['MSC']['all'],
                
'href'                => 'act=select',
                
'class'               => 'header_edit_all',
                
'attributes'          => 'onclick="Backend.getScrollOffset()" accesskey="e"'
            
)
        ),
        
'operations' => array
        (
            
'edit' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['edit'],
                
'href'                => 'act=edit',
                
'icon'                => 'edit.gif'
            
),
            
'copy' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['copy'],
                
'href'                => 'act=paste&amp;mode=copy',
                
'icon'                => 'copy.gif',
                
'attributes'          => 'onclick="Backend.getScrollOffset()"'
            
),
            
'cut' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['cut'],
                
'href'                => 'act=paste&amp;mode=cut',
                
'icon'                => 'cut.gif',
                
'attributes'          => 'onclick="Backend.getScrollOffset()"'
            
),
            
'delete' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['delete'],
                
'href'                => 'act=delete',
                
'icon'                => 'delete.gif',
                
'attributes'          => 'onclick="if(!confirm('' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . ''))return false;Backend.getScrollOffset()"',
                
'button_callback'     => array('tl_content''deleteElement')
            ),
            
'toggle' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['toggle'],
                
'icon'                => 'visible.gif',
                
'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"',
                
'button_callback'     => array('tl_content''toggleIcon')
            ),
            
'show' => array
            (
                
'label'               => &$GLOBALS['TL_LANG']['tl_content']['show'],
                
'href'                => 'act=show',
                
'icon'                => 'show.gif'
            
)
        ),
    ),

    
// Palettes
    
'palettes' => array
    (
        
'__selector__'                => array('type''addImage''sortable''useImage''protected'),
        
'default'                     => '{type_legend},type',
        
'headline'                    => '{type_legend},type,headline;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'text'                        => '{type_legend},type,headline;{text_legend},text;{image_legend},addImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'html'                        => '{type_legend},type;{text_legend},html;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop',
        
'list'                        => '{type_legend},type,headline;{list_legend},listtype,listitems;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'table'                       => '{type_legend},type,headline;{table_legend},tableitems;{tconfig_legend},summary,thead,tfoot,tleft;{sortable_legend:hide},sortable;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'accordionStart'              => '{type_legend},type;{moo_legend},mooHeadline,mooStyle,mooClasses;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'accordionStop'               => '{type_legend},type;{moo_legend},mooClasses;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop',
        
'accordionSingle'             => '{type_legend},type;{moo_legend},mooHeadline,mooStyle,mooClasses;{text_legend},text;{image_legend},addImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'sliderStart'                 => '{type_legend},type,headline;{slider_legend},sliderDelay,sliderSpeed,sliderStartSlide,sliderContinuous;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'sliderStop'                  => '{type_legend},type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop',
        
'code'                        => '{type_legend},type,headline;{text_legend},highlight,shClass,code;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'markdown'                    => '{type_legend},type,headline;{text_legend},code;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'hyperlink'                   => '{type_legend},type,headline;{link_legend},url,target,linkTitle,embed,titleText,rel;{imglink_legend:hide},useImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'toplink'                     => '{type_legend},type,linkTitle;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'image'                       => '{type_legend},type,headline;{source_legend},singleSRC;{image_legend},alt,title,size,imagemargin,imageUrl,fullsize,caption;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'gallery'                     => '{type_legend},type,headline;{source_legend},multiSRC,sortBy,metaIgnore;{image_legend},size,imagemargin,perRow,fullsize,perPage,numberOfItems;{template_legend:hide},galleryTpl,customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,useHomeDir,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'player'                      => '{type_legend},type,headline;{source_legend},playerSRC;{poster_legend:hide},posterSRC;{player_legend},playerSize,autoplay;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'youtube'                     => '{type_legend},type,headline;{source_legend},youtube;{poster_legend:hide},posterSRC;{player_legend},playerSize,autoplay;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'download'                    => '{type_legend},type,headline;{source_legend},singleSRC;{dwnconfig_legend},linkTitle,titleText;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'downloads'                   => '{type_legend},type,headline;{source_legend},multiSRC,sortBy,metaIgnore;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,useHomeDir,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'alias'                       => '{type_legend},type;{include_legend},cteAlias;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'article'                     => '{type_legend},type;{include_legend},articleAlias;{protected_legend:hide},protected;{invisible_legend:hide},invisible,start,stop',
        
'teaser'                      => '{type_legend},type;{include_legend},article;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'form'                        => '{type_legend},type,headline;{include_legend},form;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        
'module'                      => '{type_legend},type;{include_legend},module;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop'
    
),

    
// Subpalettes
    
'subpalettes' => array
    (
        
'addImage'                    => 'singleSRC,alt,title,size,imagemargin,imageUrl,fullsize,caption,floating',
        
'sortable'                    => 'sortIndex,sortOrder',
        
'useImage'                    => 'singleSRC,alt,title,size,caption',
        
'protected'                   => 'groups'
    
),

    
// Fields
    
'fields' => array
    (
        
'id' => array
        (
            
'sql'                     => "int(10) unsigned NOT NULL auto_increment"
        
),
        
'pid' => array
        (
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'ptable' => array
        (
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'sorting' => array
        (
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'tstamp' => array
        (
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'type' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['type'],
            
'default'                 => 'text',
            
'exclude'                 => true,
            
'filter'                  => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getContentElements'),
            
'reference'               => &$GLOBALS['TL_LANG']['CTE'],
            
'eval'                    => array('helpwizard'=>true'chosen'=>true'submitOnChange'=>true),
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'headline' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['headline'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'inputUnit',
            
'options'                 => array('h1''h2''h3''h4''h5''h6'),
            
'eval'                    => array('maxlength'=>200),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'text' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['text'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'textarea',
            
'eval'                    => array('mandatory'=>true'rte'=>'tinyMCE''helpwizard'=>true),
            
'explanation'             => 'insertTags',
            
'sql'                     => "mediumtext NULL"
        
),
        
'addImage' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['addImage'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('submitOnChange'=>true),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'singleSRC' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['singleSRC'],
            
'exclude'                 => true,
            
'inputType'               => 'fileTree',
            
'eval'                    => array('filesOnly'=>true'fieldType'=>'radio''mandatory'=>true'tl_class'=>'clr'),
            
'load_callback' => array
            (
                array(
'tl_content''setSingleSrcFlags')
            ),
            
'save_callback' => array
            (
                array(
'tl_content''storeFileMetaInformation')
            ),
            
'sql'                     => "binary(16) NULL"
        
),
        
'alt' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['alt'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'title' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['title'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'size' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['size'],
            
'exclude'                 => true,
            
'inputType'               => 'imageSize',
            
'options'                 => System::getImageSizes(),
            
'reference'               => &$GLOBALS['TL_LANG']['MSC'],
            
'eval'                    => array('rgxp'=>'natural''includeBlankOption'=>true'nospace'=>true'helpwizard'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'imagemargin' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['imagemargin'],
            
'exclude'                 => true,
            
'inputType'               => 'trbl',
            
'options'                 => $GLOBALS['TL_CSS_UNITS'],
            
'eval'                    => array('includeBlankOption'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(128) NOT NULL default ''"
        
),
        
'imageUrl' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['imageUrl'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'url''decodeEntities'=>true'maxlength'=>255'fieldType'=>'radio''filesOnly'=>true'tl_class'=>'w50 wizard'),
            
'wizard' => array
            (
                array(
'tl_content''pagePicker')
            ),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'fullsize' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['fullsize'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'caption' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['caption'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'allowHtml'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'floating' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['floating'],
            
'default'                 => 'above',
            
'exclude'                 => true,
            
'inputType'               => 'radioTable',
            
'options'                 => array('above''left''right''below'),
            
'eval'                    => array('cols'=>4'tl_class'=>'w50'),
            
'reference'               => &$GLOBALS['TL_LANG']['MSC'],
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'html' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['html'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'textarea',
            
'eval'                    => array('mandatory'=>true'allowHtml'=>true'class'=>'monospace''rte'=>'ace|html''helpwizard'=>true),
            
'explanation'             => 'insertTags',
            
'sql'                     => "mediumtext NULL"
        
),
        
'listtype' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['listtype'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options'                 => array('ordered''unordered'),
            
'reference'               => &$GLOBALS['TL_LANG']['tl_content'],
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'listitems' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['listitems'],
            
'exclude'                 => true,
            
'inputType'               => 'listWizard',
            
'eval'                    => array('allowHtml'=>true),
            
'xlabel' => array
            (
                array(
'tl_content''listImportWizard')
            ),
            
'sql'                     => "blob NULL"
        
),
        
'tableitems' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['tableitems'],
            
'exclude'                 => true,
            
'inputType'               => 'tableWizard',
            
'eval'                    => array('allowHtml'=>true'doNotSaveEmpty'=>true'style'=>'width:142px;height:66px'),
            
'xlabel' => array
            (
                array(
'tl_content''tableImportWizard')
            ),
            
'sql'                     => "mediumblob NULL"
        
),
        
'summary' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['summary'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'thead' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['thead'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'tfoot' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['tfoot'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'tleft' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['tleft'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'sortable' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sortable'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('submitOnChange'=>true),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'sortIndex' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sortIndex'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'natural''tl_class'=>'w50'),
            
'sql'                     => "smallint(5) unsigned NOT NULL default '0'"
        
),
        
'sortOrder' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sortOrder'],
            
'default'                 => 'ascending',
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options'                 => array('ascending''descending'),
            
'reference'               => &$GLOBALS['TL_LANG']['MSC'],
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'mooHeadline' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['mooHeadline'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'allowHtml'=>true),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'mooStyle' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['mooStyle'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'decodeEntities'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'mooClasses' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['mooClasses'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('multiple'=>true'size'=>2'rgxp'=>'alnum''tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'highlight' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['highlight'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options'                 => array('ApacheConf''AS3''Bash''C''CSharp''CSS''Delphi''Diff''Groovy''HTML''Java''JavaFx''JavaScript''Perl''PHP''PowerShell''Python''Ruby''Scala''SQL''Text''VB''XHTML''XML'),
            
'eval'                    => array('includeBlankOption'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'shClass' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['shClass'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('tl_class'=>'w50''helpwizard'=>true),
            
'explanation'             => 'highlighter',
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'code' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['code'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'textarea',
            
'eval'                    => array('mandatory'=>true'preserveTags'=>true'decodeEntities'=>true'class'=>'monospace''rte'=>'ace''helpwizard'=>true'tl_class'=>'clr'),
            
'explanation'             => 'insertTags',
            
'load_callback' => array
            (
                array(
'tl_content''setRteSyntax')
            ),
            
'sql'                     => "text NULL"
        
),
        
'url' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['MSC']['url'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('mandatory'=>true'rgxp'=>'url''decodeEntities'=>true'maxlength'=>255'fieldType'=>'radio''filesOnly'=>true'tl_class'=>'w50 wizard'),
            
'wizard' => array
            (
                array(
'tl_content''pagePicker')
            ),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'target' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['MSC']['target'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'titleText' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['titleText'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'linkTitle' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['linkTitle'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'embed' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['embed'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>255'tl_class'=>'w50'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'rel' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['rel'],
            
'exclude'                 => true,
            
'search'                  => true,
            
'inputType'               => 'text',
            
'eval'                    => array('maxlength'=>64'tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'useImage' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['useImage'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('submitOnChange'=>true),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'multiSRC' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['multiSRC'],
            
'exclude'                 => true,
            
'inputType'               => 'fileTree',
            
'eval'                    => array('multiple'=>true'fieldType'=>'checkbox''orderField'=>'orderSRC''files'=>true'mandatory'=>true),
            
'sql'                     => "blob NULL",
            
'load_callback' => array
            (
                array(
'tl_content''setMultiSrcFlags')
            )
        ),
        
'orderSRC' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['orderSRC'],
            
'sql'                     => "blob NULL"
        
),
        
'useHomeDir' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['useHomeDir'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'perRow' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['perRow'],
            
'default'                 => 4,
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options'                 => array(123456789101112),
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "smallint(5) unsigned NOT NULL default '0'"
        
),
        
'perPage' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['perPage'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'natural''tl_class'=>'w50'),
            
'sql'                     => "smallint(5) unsigned NOT NULL default '0'"
        
),
        
'numberOfItems' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['numberOfItems'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'natural''tl_class'=>'w50'),
            
'sql'                     => "smallint(5) unsigned NOT NULL default '0'"
        
),
        
'sortBy' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sortBy'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options'                 => array('custom''name_asc''name_desc''date_asc''date_desc''random'),
            
'reference'               => &$GLOBALS['TL_LANG']['tl_content'],
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "varchar(32) NOT NULL default ''"
        
),
        
'metaIgnore' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['metaIgnore'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'galleryTpl' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['galleryTpl'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getGalleryTemplates'),
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'customTpl' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['customTpl'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getElementTemplates'),
            
'eval'                    => array('includeBlankOption'=>true'chosen'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'playerSRC' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['playerSRC'],
            
'exclude'                 => true,
            
'inputType'               => 'fileTree',
            
'eval'                    => array('multiple'=>true'fieldType'=>'checkbox''files'=>true'mandatory'=>true),
            
'sql'                     => "blob NULL"
        
),
        
'youtube' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['youtube'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'url''mandatory'=>true),
            
'sql'                     => "varchar(16) NOT NULL default ''"
        
),
        
'posterSRC' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['posterSRC'],
            
'exclude'                 => true,
            
'inputType'               => 'fileTree',
            
'eval'                    => array('filesOnly'=>true'fieldType'=>'radio'),
            
'sql'                     => "binary(16) NULL"
        
),
        
'playerSize' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['playerSize'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('multiple'=>true'size'=>2'rgxp'=>'natural''nospace'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'autoplay' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['autoplay'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'sliderDelay' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sliderDelay'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'sliderSpeed' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sliderSpeed'],
            
'default'                 => 300,
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "int(10) unsigned NOT NULL default '300'"
        
),
        
'sliderStartSlide' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sliderStartSlide'],
            
'default'                 => 0,
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "smallint(5) unsigned NOT NULL default '0'"
        
),
        
'sliderContinuous' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['sliderContinuous'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50 m12'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'cteAlias' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['cteAlias'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getAlias'),
            
'eval'                    => array('mandatory'=>true'chosen'=>true'submitOnChange'=>true),
            
'wizard' => array
            (
                array(
'tl_content''editAlias')
            ),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'articleAlias' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['articleAlias'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getArticleAlias'),
            
'eval'                    => array('mandatory'=>true'chosen'=>true'submitOnChange'=>true),
            
'wizard' => array
            (
                array(
'tl_content''editArticleAlias')
            ),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'article' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['article'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getArticles'),
            
'eval'                    => array('mandatory'=>true'chosen'=>true'submitOnChange'=>true),
            
'wizard' => array
            (
                array(
'tl_content''editArticle')
            ),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'form' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['form'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getForms'),
            
'eval'                    => array('mandatory'=>true'chosen'=>true'submitOnChange'=>true),
            
'wizard' => array
            (
                array(
'tl_content''editForm')
            ),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'module' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['module'],
            
'exclude'                 => true,
            
'inputType'               => 'select',
            
'options_callback'        => array('tl_content''getModules'),
            
'eval'                    => array('mandatory'=>true'chosen'=>true'submitOnChange'=>true),
            
'wizard' => array
            (
                array(
'tl_content''editModule')
            ),
            
'sql'                     => "int(10) unsigned NOT NULL default '0'"
        
),
        
'protected' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['protected'],
            
'exclude'                 => true,
            
'filter'                  => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('submitOnChange'=>true),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'groups' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['groups'],
            
'exclude'                 => true,
            
'inputType'               => 'checkbox',
            
'foreignKey'              => 'tl_member_group.name',
            
'eval'                    => array('mandatory'=>true'multiple'=>true),
            
'sql'                     => "blob NULL",
            
'relation'                => array('type'=>'hasMany''load'=>'lazy')
        ),
        
'guests' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['guests'],
            
'exclude'                 => true,
            
'filter'                  => true,
            
'inputType'               => 'checkbox',
            
'eval'                    => array('tl_class'=>'w50'),
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'cssID' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['cssID'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('multiple'=>true'size'=>2'tl_class'=>'w50 clr'),
            
'sql'                     => "varchar(255) NOT NULL default ''"
        
),
        
'space' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['space'],
            
'exclude'                 => true,
            
'inputType'               => 'text',
            
'eval'                    => array('multiple'=>true'size'=>2'rgxp'=>'digit''nospace'=>true'tl_class'=>'w50'),
            
'sql'                     => "varchar(64) NOT NULL default ''"
        
),
        
'invisible' => array
        (
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['invisible'],
            
'exclude'                 => true,
            
'filter'                  => true,
            
'inputType'               => 'checkbox',
            
'sql'                     => "char(1) NOT NULL default ''"
        
),
        
'start' => array
        (
            
'exclude'                 => true,
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['start'],
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'datim''datepicker'=>true'tl_class'=>'w50 wizard'),
            
'sql'                     => "varchar(10) NOT NULL default ''"
        
),
        
'stop' => array
        (
            
'exclude'                 => true,
            
'label'                   => &$GLOBALS['TL_LANG']['tl_content']['stop'],
            
'inputType'               => 'text',
            
'eval'                    => array('rgxp'=>'datim''datepicker'=>true'tl_class'=>'w50 wizard'),
            
'sql'                     => "varchar(10) NOT NULL default ''"
        
)
    )
);


/**
 * Dynamically add the permission check and parent table (see #5241)
 */
if (Input::get('do') == 'article' || Input::get('do') == 'page')
{
    
$GLOBALS['TL_DCA']['tl_content']['config']['ptable'] = 'tl_article';
    
$GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('tl_content''checkPermission');
}


/**
 * Provide miscellaneous methods that are used by the data configuration array.
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class tl_content extends Backend
{

    
/**
     * Import the back end user object
     */
    
public function __construct()
    {
        
parent::__construct();
        
$this->import('BackendUser''User');
    }


    
/**
     * Check permissions to edit table tl_content
     */
    
public function checkPermission()
    {
        
// Prevent deleting referenced elements (see #4898)
        
if (Input::get('act') == 'deleteAll')
        {
            
$objCes $this->Database->prepare("SELECT cteAlias FROM tl_content WHERE (ptable='tl_article' OR ptable='') AND type='alias'")
                                     ->
execute();

            
$session $this->Session->getData();
            
$session['CURRENT']['IDS'] = array_diff($session['CURRENT']['IDS'], $objCes->fetchEach('cteAlias'));
            
$this->Session->setData($session);
        }

        if (
$this->User->isAdmin)
        {
            return;
        }

        
// Get the pagemounts
        
$pagemounts = array();

        foreach (
$this->User->pagemounts as $root)
        {
            
$pagemounts[] = $root;
            
$pagemounts array_merge($pagemounts$this->Database->getChildRecords($root'tl_page'));
        }

        
$pagemounts array_unique($pagemounts);

        
// Check the current action
        
switch (Input::get('act'))
        {
            case 
'paste':
                
// Allow
                
break;

            case 
''// empty
            
case 'create':
            case 
'select':
                
// Check access to the article
                
if (!$this->checkAccessToElement(CURRENT_ID$pagemountstrue))
                {
                    
$this->redirect('contao/main.php?act=error');
                }
                break;

            case 
'editAll':
            case 
'deleteAll':
            case 
'overrideAll':
            case 
'cutAll':
            case 
'copyAll':
                
// Check access to the parent element if a content element is moved
                
if ((Input::get('act') == 'cutAll' || Input::get('act') == 'copyAll') && !$this->checkAccessToElement(Input::get('pid'), $pagemounts, (Input::get('mode') == 2)))
                {
                    
$this->redirect('contao/main.php?act=error');
                }

                
$objCes $this->Database->prepare("SELECT id FROM tl_content WHERE (ptable='tl_article' OR ptable='') AND pid=?")
                                         ->
execute(CURRENT_ID);

                
$session $this->Session->getData();
                
$session['CURRENT']['IDS'] = array_intersect($session['CURRENT']['IDS'], $objCes->fetchEach('id'));
                
$this->Session->setData($session);
                break;

            case 
'cut':
            case 
'copy':
                
// Check access to the parent element if a content element is moved
                
if (!$this->checkAccessToElement(Input::get('pid'), $pagemounts, (Input::get('mode') == 2)))
                {
                    
$this->redirect('contao/main.php?act=error');
                }
                
// NO BREAK STATEMENT HERE

            
default:
                
// Check access to the content element
                
if (!$this->checkAccessToElement(Input::get('id'), $pagemounts))
                {
                    
$this->redirect('contao/main.php?act=error');
                }
                break;
        }
    }


    
/**
     * Check access to a particular content element
     *
     * @param integer $id
     * @param array   $pagemounts
     * @param boolean $blnIsPid
     *
     * @return boolean
     */
    
protected function checkAccessToElement($id$pagemounts$blnIsPid=false)
    {
        if (
$blnIsPid)
        {
            
$objPage $this->Database->prepare("SELECT p.id, p.pid, p.includeChmod, p.chmod, p.cuser, p.cgroup, a.id AS aid FROM tl_article a, tl_page p WHERE a.id=? AND a.pid=p.id")
                                      ->
limit(1)
                                      ->
execute($id);
        }
        else
        {
            
$objPage $this->Database->prepare("SELECT p.id, p.pid, p.includeChmod, p.chmod, p.cuser, p.cgroup, a.id AS aid FROM tl_content c, tl_article a, tl_page p WHERE c.id=? AND c.pid=a.id AND a.pid=p.id")
                                      ->
limit(1)
                                      ->
execute($id);
        }

        
// Invalid ID
        
if ($objPage->numRows 1)
        {
            
$this->log('Invalid content element ID ' $id__METHOD__TL_ERROR);

            return 
false;
        }

        
// The page is not mounted
        
if (!in_array($objPage->id$pagemounts))
        {
            
$this->log('Not enough permissions to modify article ID ' $objPage->aid ' on page ID ' $objPage->id__METHOD__TL_ERROR);

            return 
false;
        }

        
// Not enough permissions to modify the article
        
if (!$this->User->isAllowed(BackendUser::CAN_EDIT_ARTICLES$objPage->row()))
        {
            
$this->log('Not enough permissions to modify article ID ' $objPage->aid__METHOD__TL_ERROR);

            return 
false;
        }

        return 
true;
    }


    
/**
     * Return all content elements as array
     *
     * @return array
     */
    
public function getContentElements()
    {
        
$groups = array();

        foreach (
$GLOBALS['TL_CTE'] as $k=>$v)
        {
            foreach (
array_keys($v) as $kk)
            {
                
$groups[$k][] = $kk;
            }
        }

        return 
$groups;
    }


    
/**
     * Return the group of a content element
     *
     * @param string $element
     *
     * @return string
     */
    
public function getContentElementGroup($element)
    {
        foreach (
$GLOBALS['TL_CTE'] as $k=>$v)
        {
            foreach (
array_keys($v) as $kk)
            {
                if (
$kk == $element)
                {
                    return 
$k;
                }
            }
        }

        return 
null;
    }


    
/**
     * Show a hint if a JavaScript library needs to be included in the page layout
     *
     * @param object
     */
    
public function showJsLibraryHint($dc)
    {
        if (
$_POST || Input::get('act') != 'edit')
        {
            return;
        }

        
// Return if the user cannot access the layout module (see #6190)
        
if (!$this->User->hasAccess('themes''modules') || !$this->User->hasAccess('layout''themes'))
        {
            return;
        }

        
$objCte ContentModel::findByPk($dc->id);

        if (
$objCte === null)
        {
            return;
        }

        switch (
$objCte->type)
        {
            case 
'gallery':
                
Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplates'], 'moo_mediabox''j_colorbox'));
                break;

            case 
'sliderStart':
            case 
'sliderStop':
                
Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplates'], 'moo_slider''j_slider'));
                break;

            case 
'accordionSingle':
            case 
'accordionStart':
            case 
'accordionStop':
                
Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplates'], 'moo_accordion''j_accordion'));
                break;

            case 
'player':
            case 
'youtube':
                
Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplate'], 'j_mediaelement'));
                break;

            case 
'table':
                if (
$objCte->sortable)
                {
                    
Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplates'], 'moo_tablesort''j_tablesort'));
                }
                break;
        }
    }


    
/**
     * Add the type of content element
     *
     * @param array $arrRow
     *
     * @return string
     */
    
public function addCteType($arrRow)
    {
        
$key $arrRow['invisible'] ? 'unpublished' 'published';
        
$type $GLOBALS['TL_LANG']['CTE'][$arrRow['type']][0] ?: '&nbsp;';
        
$class 'limit_height';

        
// Remove the class if it is a wrapper element
        
if (in_array($arrRow['type'], $GLOBALS['TL_WRAPPERS']['start']) || in_array($arrRow['type'], $GLOBALS['TL_WRAPPERS']['separator']) || in_array($arrRow['type'], $GLOBALS['TL_WRAPPERS']['stop']))
        {
            
$class '';

            if ((
$group $this->getContentElementGroup($arrRow['type'])) !== null)
            {
                
$type $GLOBALS['TL_LANG']['CTE'][$group] . ' (' $type ')';
            }
        }

        
// Add the group name if it is a single element (see #5814)
        
elseif (in_array($arrRow['type'], $GLOBALS['TL_WRAPPERS']['single']))
        {
            if ((
$group $this->getContentElementGroup($arrRow['type'])) !== null)
            {
                
$type $GLOBALS['TL_LANG']['CTE'][$group] . ' (' $type ')';
            }
        }

        
// Add the ID of the aliased element
        
if ($arrRow['type'] == 'alias')
        {
            
$type .= ' ID ' $arrRow['cteAlias'];
        }

        
// Add the protection status
        
if ($arrRow['protected'])
        {
            
$type .= ' (' $GLOBALS['TL_LANG']['MSC']['protected'] . ')';
        }
        elseif (
$arrRow['guests'])
        {
            
$type .= ' (' $GLOBALS['TL_LANG']['MSC']['guests'] . ')';
        }

        
// Add the headline level (see #5858)
        
if ($arrRow['type'] == 'headline')
        {
            if (
is_array(($headline deserialize($arrRow['headline']))))
            {
                
$type .= ' (' $headline['unit'] . ')';
            }
        }

        
// Limit the element's height
        
if (!Config::get('doNotCollapse'))
        {
            
$class .=  ' h64';
        }

        
$objModel = new ContentModel();
        
$objModel->setRow($arrRow);

        return 
'
<div class="cte_type ' 
$key '">' $type '</div>
<div class="' 
trim($class) . '">
StringUtil::insertTagToSrc($this->getContentElement($objModel)) . '
</div>' 
"n";
    }


    
/**
     * Return the edit article alias wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function editArticleAlias(DataContainer $dc)
    {
        return (
$dc->value 1) ? '' ' <a href="contao/main.php?do=article&amp;table=tl_content&amp;id=' $dc->value '&amp;popup=1&amp;nb=1&amp;rt=' REQUEST_TOKEN '" title="' sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $dc->value) . '" style="padding-left:3px" onclick="Backend.openModalIframe({'width':768,'title':'' . specialchars(str_replace("'", "\'", sprintf($GLOBALS['TL_LANG']['tl_content']['editalias'][1], $dc->value))) . '','url':this.href});return false">' Image::getHtml('alias.gif'$GLOBALS['TL_LANG']['tl_content']['editalias'][0], 'style="vertical-align:top"') . '</a>';
    }


    
/**
     * Get all articles and return them as array (article alias)
     *
     * @param DataContainer $dc
     *
     * @return array
     */
    
public function getArticleAlias(DataContainer $dc)
    {
        
$arrPids = array();
        
$arrAlias = array();

        if (!
$this->User->isAdmin)
        {
            foreach (
$this->User->pagemounts as $id)
            {
                
$arrPids[] = $id;
                
$arrPids array_merge($arrPids$this->Database->getChildRecords($id'tl_page'));
            }

            if (empty(
$arrPids))
            {
                return 
$arrAlias;
            }

            
$objAlias $this->Database->prepare("SELECT a.id, a.pid, a.title, a.inColumn, p.title AS parent FROM tl_article a LEFT JOIN tl_page p ON p.id=a.pid WHERE a.pid IN("implode(','array_map('intval'array_unique($arrPids))) .") AND a.id!=(SELECT pid FROM tl_content WHERE id=?) ORDER BY parent, a.sorting")
                                       ->
execute($dc->id);
        }
        else
        {
            
$objAlias $this->Database->prepare("SELECT a.id, a.pid, a.title, a.inColumn, p.title AS parent FROM tl_article a LEFT JOIN tl_page p ON p.id=a.pid WHERE a.id!=(SELECT pid FROM tl_content WHERE id=?) ORDER BY parent, a.sorting")
                                       ->
execute($dc->id);
        }

        if (
$objAlias->numRows)
        {
            
System::loadLanguageFile('tl_article');

            while (
$objAlias->next())
            {
                
$key $objAlias->parent ' (ID ' $objAlias->pid ')';
                
$arrAlias[$key][$objAlias->id] = $objAlias->title ' (' . ($GLOBALS['TL_LANG']['COLS'][$objAlias->inColumn] ?: $objAlias->inColumn) . ', ID ' $objAlias->id ')';
            }
        }

        return 
$arrAlias;
    }


    
/**
     * Return the edit alias wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function editAlias(DataContainer $dc)
    {
        return (
$dc->value 1) ? '' ' <a href="contao/main.php?do=article&amp;table=tl_content&amp;act=edit&amp;id=' $dc->value '&amp;popup=1&amp;nb=1&amp;rt=' REQUEST_TOKEN '" title="' sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $dc->value) . '" style="padding-left:3px" onclick="Backend.openModalIframe({'width':768,'title':'' . specialchars(str_replace("'", "\'", sprintf($GLOBALS['TL_LANG']['tl_content']['editalias'][1], $dc->value))) . '','url':this.href});return false">' Image::getHtml('alias.gif'$GLOBALS['TL_LANG']['tl_content']['editalias'][0], 'style="vertical-align:top"') . '</a>';
    }


    
/**
     * Get all content elements and return them as array (content element alias)
     *
     * @return array
     */
    
public function getAlias()
    {
        
$arrPids = array();
        
$arrAlias = array();

        if (!
$this->User->isAdmin)
        {
            foreach (
$this->User->pagemounts as $id)
            {
                
$arrPids[] = $id;
                
$arrPids array_merge($arrPids$this->Database->getChildRecords($id'tl_page'));
            }

            if (empty(
$arrPids))
            {
                return 
$arrAlias;
            }

            
$objAlias $this->Database->prepare("SELECT c.id, c.pid, c.type, (CASE c.type WHEN 'module' THEN m.name WHEN 'form' THEN f.title WHEN 'table' THEN c.summary ELSE c.headline END) AS headline, c.text, a.title FROM tl_content c LEFT JOIN tl_article a ON a.id=c.pid LEFT JOIN tl_module m ON m.id=c.module LEFT JOIN tl_form f on f.id=c.form WHERE a.pid IN("implode(','array_map('intval'array_unique($arrPids))) .") AND (c.ptable='tl_article' OR c.ptable='') AND c.id!=? ORDER BY a.title, c.sorting")
                                       ->
execute(Input::get('id'));
        }
        else
        {
            
$objAlias $this->Database->prepare("SELECT c.id, c.pid, c.type, (CASE c.type WHEN 'module' THEN m.name WHEN 'form' THEN f.title WHEN 'table' THEN c.summary ELSE c.headline END) AS headline, c.text, a.title FROM tl_content c LEFT JOIN tl_article a ON a.id=c.pid LEFT JOIN tl_module m ON m.id=c.module LEFT JOIN tl_form f on f.id=c.form WHERE (c.ptable='tl_article' OR c.ptable='') AND c.id!=? ORDER BY a.title, c.sorting")
                                       ->
execute(Input::get('id'));
        }

        while (
$objAlias->next())
        {
            
$arrHeadline deserialize($objAlias->headlinetrue);

            if (isset(
$arrHeadline['value']))
            {
                
$headline StringUtil::substr($arrHeadline['value'], 32);
            }
            else
            {
                
$headline StringUtil::substr(preg_replace('/[nrt]+/'' '$arrHeadline[0]), 32);
            }

            
$text StringUtil::substr(strip_tags(preg_replace('/[nrt]+/'' '$objAlias->text)), 32);
            
$strText $GLOBALS['TL_LANG']['CTE'][$objAlias->type][0] . ' (';

            if (
$headline != '')
            {
                
$strText .= $headline ', ';
            }
            elseif (
$text != '')
            {
                
$strText .= $text ', ';
            }

            
$key $objAlias->title ' (ID ' $objAlias->pid ')';
            
$arrAlias[$key][$objAlias->id] = $strText 'ID ' $objAlias->id ')';
        }

        return 
$arrAlias;
    }


    
/**
     * Return the edit form wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function editForm(DataContainer $dc)
    {
        return (
$dc->value 1) ? '' ' <a href="contao/main.php?do=form&amp;table=tl_form_field&amp;id=' $dc->value '&amp;popup=1&amp;nb=1&amp;rt=' REQUEST_TOKEN '" title="' sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $dc->value) . '" style="padding-left:3px" onclick="Backend.openModalIframe({'width':768,'title':'' . specialchars(str_replace("'", "\'", sprintf($GLOBALS['TL_LANG']['tl_content']['editalias'][1], $dc->value))) . '','url':this.href});return false">' Image::getHtml('alias.gif'$GLOBALS['TL_LANG']['tl_content']['editalias'][0], 'style="vertical-align:top"') . '</a>';
    }


    
/**
     * Get all forms and return them as array
     *
     * @return array
     */
    
public function getForms()
    {
        if (!
$this->User->isAdmin && !is_array($this->User->forms))
        {
            return array();
        }

        
$arrForms = array();
        
$objForms $this->Database->execute("SELECT id, title FROM tl_form ORDER BY title");

        while (
$objForms->next())
        {
            if (
$this->User->hasAccess($objForms->id'forms'))
            {
                
$arrForms[$objForms->id] = $objForms->title ' (ID ' $objForms->id ')';
            }
        }

        return 
$arrForms;
    }


    
/**
     * Return the edit module wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function editModule(DataContainer $dc)
    {
        return (
$dc->value 1) ? '' ' <a href="contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id=' $dc->value '&amp;popup=1&amp;nb=1&amp;rt=' REQUEST_TOKEN '" title="' sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $dc->value) . '" style="padding-left:3px" onclick="Backend.openModalIframe({'width':768,'title':'' . specialchars(str_replace("'", "\'", sprintf($GLOBALS['TL_LANG']['tl_content']['editalias'][1], $dc->value))) . '','url':this.href});return false">' Image::getHtml('alias.gif'$GLOBALS['TL_LANG']['tl_content']['editalias'][0], 'style="vertical-align:top"') . '</a>';
    }


    
/**
     * Get all modules and return them as array
     *
     * @return array
     */
    
public function getModules()
    {
        
$arrModules = array();
        
$objModules $this->Database->execute("SELECT m.id, m.name, t.name AS theme FROM tl_module m LEFT JOIN tl_theme t ON m.pid=t.id ORDER BY t.name, m.name");

        while (
$objModules->next())
        {
            
$arrModules[$objModules->theme][$objModules->id] = $objModules->name ' (ID ' $objModules->id ')';
        }

        return 
$arrModules;
    }


    
/**
     * Return all gallery templates as array
     *
     * @return array
     */
    
public function getGalleryTemplates()
    {
        return 
$this->getTemplateGroup('gallery_');
    }


    
/**
     * Return all content element templates as array
     *
     * @return array
     */
    
public function getElementTemplates()
    {
        return 
$this->getTemplateGroup('ce_');
    }


    
/**
     * Return the edit article teaser wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function editArticle(DataContainer $dc)
    {
        return (
$dc->value 1) ? '' ' <a href="contao/main.php?do=article&amp;table=tl_article&amp;act=edit&amp;id=' $dc->value '&amp;popup=1&amp;nb=1&amp;rt=' REQUEST_TOKEN '" title="' sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editarticle'][1]), $dc->value) . '" onclick="Backend.openModalIframe({'width':768,'title':'' . specialchars(str_replace("'", "\'", sprintf($GLOBALS['TL_LANG']['tl_content']['editarticle'][1], $dc->value))) . '','url':this.href});return false">' Image::getHtml('alias.gif'$GLOBALS['TL_LANG']['tl_content']['editarticle'][0], 'style="vertical-align:top"') . '</a>';
    }


    
/**
     * Get all articles and return them as array (article teaser)
     *
     * @param DataContainer $dc
     *
     * @return array
     */
    
public function getArticles(DataContainer $dc)
    {
        
$arrPids = array();
        
$arrArticle = array();
        
$arrRoot = array();
        
$intPid $dc->activeRecord->pid;

        if (
Input::get('act') == 'overrideAll')
        {
            
$intPid Input::get('id');
        }

        
// Limit pages to the website root
        
$objArticle $this->Database->prepare("SELECT pid FROM tl_article WHERE id=?")
                                     ->
limit(1)
                                     ->
execute($intPid);

        if (
$objArticle->numRows)
        {
            
$objPage PageModel::findWithDetails($objArticle->pid);
            
$arrRoot $this->Database->getChildRecords($objPage->rootId'tl_page');
            
array_unshift($arrRoot$objPage->rootId);
        }

        unset(
$objArticle);

        
// Limit pages to the user's pagemounts
        
if ($this->User->isAdmin)
        {
            
$objArticle $this->Database->execute("SELECT a.id, a.pid, a.title, a.inColumn, p.title AS parent FROM tl_article a LEFT JOIN tl_page p ON p.id=a.pid" . (!empty($arrRoot) ? " WHERE a.pid IN("implode(','array_map('intval'array_unique($arrRoot))) .")" "") . " ORDER BY parent, a.sorting");
        }
        else
        {
            foreach (
$this->User->pagemounts as $id)
            {
                if (!
in_array($id$arrRoot))
                {
                    continue;
                }

                
$arrPids[] = $id;
                
$arrPids array_merge($arrPids$this->Database->getChildRecords($id'tl_page'));
            }

            if (empty(
$arrPids))
            {
                return 
$arrArticle;
            }

            
$objArticle $this->Database->execute("SELECT a.id, a.pid, a.title, a.inColumn, p.title AS parent FROM tl_article a LEFT JOIN tl_page p ON p.id=a.pid WHERE a.pid IN("implode(','array_map('intval'array_unique($arrPids))) .") ORDER BY parent, a.sorting");
        }

        
// Edit the result
        
if ($objArticle->numRows)
        {
            
System::loadLanguageFile('tl_article');

            while (
$objArticle->next())
            {
                
$key $objArticle->parent ' (ID ' $objArticle->pid ')';
                
$arrArticle[$key][$objArticle->id] = $objArticle->title ' (' . ($GLOBALS['TL_LANG']['COLS'][$objArticle->inColumn] ?: $objArticle->inColumn) . ', ID ' $objArticle->id ')';
            }
        }

        return 
$arrArticle;
    }


    
/**
     * Dynamically set the ace syntax
     *
     * @param mixed         $varValue
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function setRteSyntax($varValueDataContainer $dc)
    {
        switch (
$dc->activeRecord->highlight)
        {
            case 
'C':
            case 
'CSharp':
                
$syntax 'c_cpp';
                break;

            case 
'CSS':
            case 
'Diff':
            case 
'Groovy':
            case 
'HTML':
            case 
'Java':
            case 
'JavaScript':
            case 
'Perl':
            case 
'PHP':
            case 
'PowerShell':
            case 
'Python':
            case 
'Ruby':
            case 
'Scala':
            case 
'SQL':
            case 
'Text':
                
$syntax strtolower($dc->activeRecord->highlight);
                break;

            case 
'VB':
                
$syntax 'vbscript';
                break;

            case 
'XML':
            case 
'XHTML':
                
$syntax 'xml';
                break;

            default:
                
$syntax 'text';
                break;
        }

        if (
$dc->activeRecord->type == 'markdown')
        {
            
$syntax 'markdown';
        }

        
$GLOBALS['TL_DCA']['tl_content']['fields']['code']['eval']['rte'] = 'ace|' $syntax;

        return 
$varValue;
    }


    
/**
     * Add a link to the list items import wizard
     *
     * @return string
     */
    
public function listImportWizard()
    {
        return 
' <a href="' $this->addToUrl('key=list') . '" title="' specialchars($GLOBALS['TL_LANG']['MSC']['lw_import'][1]) . '" onclick="Backend.getScrollOffset()">' Image::getHtml('tablewizard.gif'$GLOBALS['TL_LANG']['MSC']['tw_import'][0], 'style="vertical-align:text-bottom"') . '</a>';
    }


    
/**
     * Add a link to the table items import wizard
     *
     * @return string
     */
    
public function tableImportWizard()
    {
        return 
' <a href="' $this->addToUrl('key=table') . '" title="' specialchars($GLOBALS['TL_LANG']['MSC']['tw_import'][1]) . '" onclick="Backend.getScrollOffset()">' Image::getHtml('tablewizard.gif'$GLOBALS['TL_LANG']['MSC']['tw_import'][0], 'style="vertical-align:text-bottom"') . '</a> ' Image::getHtml('demagnify.gif''''title="' specialchars($GLOBALS['TL_LANG']['MSC']['tw_shrink']) . '" style="vertical-align:text-bottom;cursor:pointer" onclick="Backend.tableWizardResize(0.9)"') . Image::getHtml('magnify.gif''''title="' specialchars($GLOBALS['TL_LANG']['MSC']['tw_expand']) . '" style="vertical-align:text-bottom; cursor:pointer" onclick="Backend.tableWizardResize(1.1)"');
    }


    
/**
     * Return the link picker wizard
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function pagePicker(DataContainer $dc)
    {
        return 
' <a href="' . (($dc->value == '' || strpos($dc->value'{{link_url::') !== false) ? 'contao/page.php' 'contao/file.php') . '?do=' Input::get('do') . '&amp;table=' $dc->table '&amp;field=' $dc->field '&amp;value=' rawurlencode(str_replace(array('{{link_url::''}}'), ''$dc->value)) . '&amp;switch=1' '" title="' specialchars($GLOBALS['TL_LANG']['MSC']['pagepicker']) . '" onclick="Backend.getScrollOffset();Backend.openModalSelector({'width':768,'title':'' . specialchars(str_replace("'", "\'", $GLOBALS['TL_LANG']['MOD']['page'][0])) . '','url':this.href,'id':'' . $dc->field . '','tag':'ctrl_'. $dc->field . ((Input::get('act') == 'editAll') ? '_' . $dc->id : '') . '','self':this});return false">' Image::getHtml('pickpage.gif'$GLOBALS['TL_LANG']['MSC']['pagepicker'], 'style="vertical-align:top;cursor:pointer"') . '</a>';
    }


    
/**
     * Return the delete content element button
     *
     * @param array  $row
     * @param string $href
     * @param string $label
     * @param string $title
     * @param string $icon
     * @param string $attributes
     *
     * @return string
     */
    
public function deleteElement($row$href$label$title$icon$attributes)
    {
        
$objElement $this->Database->prepare("SELECT id FROM tl_content WHERE cteAlias=? AND type='alias'")
                                     ->
limit(1)
                                     ->
execute($row['id']);

        return 
$objElement->numRows Image::getHtml(preg_replace('/.gif$/i''_.gif'$icon)) . ' ' '<a href="'.$this->addToUrl($href.'&amp;id='.$row['id']).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon$label).'</a> ';
    }


    
/**
     * Dynamically add flags to the "singleSRC" field
     *
     * @param mixed         $varValue
     * @param DataContainer $dc
     *
     * @return mixed
     */
    
public function setSingleSrcFlags($varValueDataContainer $dc)
    {
        if (
$dc->activeRecord)
        {
            switch (
$dc->activeRecord->type)
            {
                case 
'text':
                case 
'hyperlink':
                case 
'image':
                case 
'accordionSingle':
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Config::get('validImageTypes');
                    break;

                case 
'download':
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Config::get('allowedDownload');
                    break;
            }
        }

        return 
$varValue;
    }


    
/**
     * Dynamically add flags to the "multiSRC" field
     *
     * @param mixed         $varValue
     * @param DataContainer $dc
     *
     * @return mixed
     */
    
public function setMultiSrcFlags($varValueDataContainer $dc)
    {
        if (
$dc->activeRecord)
        {
            switch (
$dc->activeRecord->type)
            {
                case 
'gallery':
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['isGallery'] = true;
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Config::get('validImageTypes');
                    break;

                case 
'downloads':
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['isDownloads'] = true;
                    
$GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Config::get('allowedDownload');
                    break;
            }
        }

        return 
$varValue;
    }


    
/**
     * Pre-fill the "alt" and "caption" fields with the file meta data
     *
     * @param mixed         $varValue
     * @param DataContainer $dc
     *
     * @return mixed
     */
    
public function storeFileMetaInformation($varValueDataContainer $dc)
    {
        if (
$dc->activeRecord->singleSRC != $varValue)
        {
            
$this->addFileMetaInformationToRequest($varValue, ($dc->activeRecord->ptable ?: 'tl_article'), $dc->activeRecord->pid);
        }

        return 
$varValue;
    }


    
/**
     * Return the "toggle visibility" button
     *
     * @param array  $row
     * @param string $href
     * @param string $label
     * @param string $title
     * @param string $icon
     * @param string $attributes
     *
     * @return string
     */
    
public function toggleIcon($row$href$label$title$icon$attributes)
    {
        if (
strlen(Input::get('tid')))
        {
            
$this->toggleVisibility(Input::get('tid'), (Input::get('state') == 1), (@func_get_arg(12) ?: null));
            
$this->redirect($this->getReferer());
        }

        
// Check permissions AFTER checking the tid, so hacking attempts are logged
        
if (!$this->User->hasAccess('tl_content::invisible''alexf'))
        {
            return 
'';
        }

        
$href .= '&amp;id='.Input::get('id').'&amp;tid='.$row['id'].'&amp;state='.$row['invisible'];

        if (
$row['invisible'])
        {
            
$icon 'invisible.gif';
        }

        return 
'<a href="'.$this->addToUrl($href).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon$label'data-state="' . ($row['invisible'] ? 1) . '"').'</a> ';
    }


    
/**
     * Toggle the visibility of an element
     *
     * @param integer       $intId
     * @param boolean       $blnVisible
     * @param DataContainer $dc
     */
    
public function toggleVisibility($intId$blnVisibleDataContainer $dc=null)
    {
        
// Set the ID and action
        
Input::setGet('id'$intId);
        
Input::setGet('act''toggle');

        if (
$dc)
        {
            
$dc->id $intId// see #8043
        
}

        
$this->checkPermission();

        
// Check the field access
        
if (!$this->User->hasAccess('tl_content::invisible''alexf'))
        {
            
$this->log('Not enough permissions to publish/unpublish content element ID "'.$intId.'"'__METHOD__TL_ERROR);
            
$this->redirect('contao/main.php?act=error');
        }

        
// The onload_callbacks vary depending on the dynamic parent table (see #4894)
        
if (is_array($GLOBALS['TL_DCA']['tl_content']['config']['onload_callback']))
        {
            foreach (
$GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'] as $callback)
            {
                if (
is_array($callback))
                {
                    
$this->import($callback[0]);
                    
$this->{$callback[0]}->{$callback[1]}(($dc ?: $this));
                }
                elseif (
is_callable($callback))
                {
                    
$callback(($dc ?: $this));
                }
            }
        }

        
$objVersions = new Versions('tl_content'$intId);
        
$objVersions->initialize();

        
// Trigger the save_callback
        
if (is_array($GLOBALS['TL_DCA']['tl_content']['fields']['invisible']['save_callback']))
        {
            foreach (
$GLOBALS['TL_DCA']['tl_content']['fields']['invisible']['save_callback'] as $callback)
            {
                if (
is_array($callback))
                {
                    
$this->import($callback[0]);
                    
$blnVisible $this->{$callback[0]}->{$callback[1]}($blnVisible, ($dc ?: $this));
                }
                elseif (
is_callable($callback))
                {
                    
$blnVisible $callback($blnVisible, ($dc ?: $this));
                }
            }
        }

        
// Update the database
        
$this->Database->prepare("UPDATE tl_content SET tstamp="time() .", invisible='" . ($blnVisible '' 1) . "' WHERE id=?")
                       ->
execute($intId);

        
$objVersions->create();
        
$this->log('A new version of record "tl_content.id='.$intId.'" has been created'.$this->getParentEntries('tl_content'$intId), __METHOD__TL_GENERAL);
    }
}
Онлайн: 1
Реклама