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

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

namespace Contao;


/**
 * Provide methods to handle list items.
 *
 * @property integer $maxlength
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class ListWizard extends Widget
{

    
/**
     * Submit user input
     * @var boolean
     */
    
protected $blnSubmitInput true;

    
/**
     * Template
     * @var string
     */
    
protected $strTemplate 'be_widget';


    
/**
     * Add specific attributes
     *
     * @param string $strKey
     * @param mixed  $varValue
     */
    
public function __set($strKey$varValue)
    {
        switch (
$strKey)
        {
            case 
'maxlength':
                if (
$varValue 0)
                {
                    
$this->arrAttributes['maxlength'] = $varValue;
                }
                break;

            default:
                
parent::__set($strKey$varValue);
                break;
        }
    }


    
/**
     * Generate the widget and return it as string
     *
     * @return string
     */
    
public function generate()
    {
        
$arrButtons = array('copy''drag''up''down''delete');
        
$strCommand 'cmd_' $this->strField;

        
// Change the order
        
if (Input::get($strCommand) && is_numeric(Input::get('cid')) && Input::get('id') == $this->currentRecord)
        {
            
$this->import('Database');

            switch (
Input::get($strCommand))
            {
                case 
'copy':
                    
$this->varValue array_duplicate($this->varValueInput::get('cid'));
                    break;

                case 
'up':
                    
$this->varValue array_move_up($this->varValueInput::get('cid'));
                    break;

                case 
'down':
                    
$this->varValue array_move_down($this->varValueInput::get('cid'));
                    break;

                case 
'delete':
                    
$this->varValue array_delete($this->varValueInput::get('cid'));
                    break;
            }

            
$this->Database->prepare("UPDATE " $this->strTable " SET " $this->strField "=? WHERE id=?")
                           ->
execute(serialize($this->varValue), $this->currentRecord);

            
$this->redirect(preg_replace('/&(amp;)?cid=[^&]*/i'''preg_replace('/&(amp;)?' preg_quote($strCommand'/') . '=[^&]*/i'''Environment::get('request'))));
        }

        
// Make sure there is at least an empty array
        
if (!is_array($this->varValue) || empty($this->varValue))
        {
            
$this->varValue = array('');
        }

        
// Initialize the tab index
        
if (!Cache::has('tabindex'))
        {
            
Cache::set('tabindex'1);
        }

        
$tabindex Cache::get('tabindex');
        
$return '<ul id="ctrl_'.$this->strId.'" class="tl_listwizard" data-tabindex="'.$tabindex.'">';

        
// Add input fields
        
for ($i=0$c=count($this->varValue); $i<$c$i++)
        {
            
$return .= '
    <li><input type="text" name="'
.$this->strId.'[]" class="tl_text" tabindex="'.$tabindex++.'" value="'.specialchars($this->varValue[$i]).'"' $this->getAttributes() . '> ';

            
// Add buttons
            
foreach ($arrButtons as $button)
            {
                
$class = ($button == 'up' || $button == 'down') ? ' class="button-move"' '';

                if (
$button == 'drag')
                {
                    
$return .= Image::getHtml('drag.gif''''class="drag-handle" title="' sprintf($GLOBALS['TL_LANG']['MSC']['move']) . '"');
                }
                else
                {
                    
$return .= '<a href="'.$this->addToUrl('&amp;'.$strCommand.'='.$button.'&amp;cid='.$i.'&amp;id='.$this->currentRecord).'"' $class ' title="'.specialchars($GLOBALS['TL_LANG']['MSC']['lw_'.$button]).'" onclick="Backend.listWizard(this,''.$button.'','ctrl_'.$this->strId.'');return false">'.Image::getHtml($button.'.gif'$GLOBALS['TL_LANG']['MSC']['lw_'.$button], 'class="tl_listwizard_img"').'</a> ';
                }
            }

            
$return .= '</li>';
        }

        
// Store the tab index
        
Cache::set('tabindex'$tabindex);

        return 
$return.'
  </ul>'
;
    }


    
/**
     * Return a form to choose a CSV file and import it
     *
     * @param DataContainer $dc
     *
     * @return string
     */
    
public function importList(DataContainer $dc)
    {
        if (
Input::get('key') != 'list')
        {
            return 
'';
        }

        
$this->import('BackendUser''User');
        
$class $this->User->uploader;

        
// See #4086 and #7046
        
if (!class_exists($class) || $class == 'DropZone')
        {
            
$class 'FileUpload';
        }

        
/** @var FileUpload $objUploader */
        
$objUploader = new $class();

        
// Import CSS
        
if (Input::post('FORM_SUBMIT') == 'tl_list_import')
        {
            
$arrUploaded $objUploader->uploadTo('system/tmp');

            if (empty(
$arrUploaded))
            {
                
Message::addError($GLOBALS['TL_LANG']['ERR']['all_fields']);
                
$this->reload();
            }

            
$this->import('Database');
            
$arrList = array();

            foreach (
$arrUploaded as $strCsvFile)
            {
                
$objFile = new File($strCsvFiletrue);

                if (
$objFile->extension != 'csv')
                {
                    
Message::addError(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension));
                    continue;
                }

                
// Get separator
                
switch (Input::post('separator'))
                {
                    case 
'semicolon':
                        
$strSeparator ';';
                        break;

                    case 
'tabulator':
                        
$strSeparator "t";
                        break;

                    case 
'linebreak':
                        
$strSeparator "n";
                        break;

                    default:
                        
$strSeparator ',';
                        break;
                }

                
$resFile $objFile->handle;

                while((
$arrRow = @fgetcsv($resFilenull$strSeparator)) !== false)
                {
                    
$arrList array_merge($arrList$arrRow);
                }
            }

            
$objVersions = new Versions($dc->tableInput::get('id'));
            
$objVersions->create();

            
$this->Database->prepare("UPDATE " $dc->table " SET listitems=? WHERE id=?")
                           ->
execute(serialize($arrList), Input::get('id'));

            
System::setCookie('BE_PAGE_OFFSET'00);
            
$this->redirect(str_replace('&key=list'''Environment::get('request')));
        }

        
// Return form
        
return '
<div id="tl_buttons">
<a href="'
.ampersand(str_replace('&key=list'''Environment::get('request'))).'" class="header_back" title="'.specialchars($GLOBALS['TL_LANG']['MSC']['backBTTitle']).'" accesskey="b">'.$GLOBALS['TL_LANG']['MSC']['backBT'].'</a>
</div>
'
.Message::generate().'
<form action="'
.ampersand(Environment::get('request'), true).'" id="tl_list_import" class="tl_form" method="post" enctype="multipart/form-data">
<div class="tl_formbody_edit">
<input type="hidden" name="FORM_SUBMIT" value="tl_list_import">
<input type="hidden" name="REQUEST_TOKEN" value="'
.REQUEST_TOKEN.'">
<input type="hidden" name="MAX_FILE_SIZE" value="'
.Config::get('maxFileSize').'">

<div class="tl_tbox">
  <h3><label for="separator">'
.$GLOBALS['TL_LANG']['MSC']['separator'][0].'</label></h3>
  <select name="separator" id="separator" class="tl_select" onfocus="Backend.getScrollOffset()">
    <option value="comma">'
.$GLOBALS['TL_LANG']['MSC']['comma'].'</option>
    <option value="semicolon">'
.$GLOBALS['TL_LANG']['MSC']['semicolon'].'</option>
    <option value="tabulator">'
.$GLOBALS['TL_LANG']['MSC']['tabulator'].'</option>
    <option value="linebreak">'
.$GLOBALS['TL_LANG']['MSC']['linebreak'].'</option>
  </select>'
.(($GLOBALS['TL_LANG']['MSC']['separator'][1] != '') ? '
  <p class="tl_help tl_tip">'
.$GLOBALS['TL_LANG']['MSC']['separator'][1].'</p>' '').'
  <h3>'
.$GLOBALS['TL_LANG']['MSC']['source'][0].'</h3>'.$objUploader->generateMarkup().(isset($GLOBALS['TL_LANG']['MSC']['source'][1]) ? '
  <p class="tl_help tl_tip">'
.$GLOBALS['TL_LANG']['MSC']['source'][1].'</p>' '').'
</div>

</div>

<div class="tl_formbody_submit">

<div class="tl_submit_container">
  <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="'
.specialchars($GLOBALS['TL_LANG']['MSC']['lw_import'][0]).'">
</div>

</div>
</form>'
;
    }
}
Онлайн: 0
Реклама