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

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

namespace Contao;


/**
 * Back end module "extension".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class ModuleExtension extends BackendModule
{

    
/**
     * Data container
     * @var object
     */
    
protected $objDc;

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


    
/**
     * Generate the module
     *
     * @return string
     */
    
public function generate()
    {
        
$this->objDc func_get_arg(0);

        return 
parent::generate();
    }


    
/**
     * Generate module
     */
    
protected function compile()
    {
        
// Create files
        
if (Input::post('FORM_SUBMIT') == 'tl_extension')
        {
            
$objModule $this->Database->prepare("SELECT * FROM tl_extension WHERE id=?")
                              ->
limit(1)
                              ->
execute($this->objDc->id);

            if (
$objModule->numRows 1)
            {
                return;
            }

            
// Disable the debug mode (see #7068)
            
Config::set('debugMode'false);

            
// config/config.php
            
$tplConfig $this->newTemplate('dev_config'$objModule);
            
File::putContent('system/modules/' $objModule->folder '/config/config.php'$tplConfig->parse());

            
// config/autoload.ini
            
$tplConfig $this->newTemplate('dev_ini'$objModule);
            
File::putContent('system/modules/' $objModule->folder '/config/autoload.ini'$tplConfig->parse());

            
// Back end
            
if ($objModule->addBeMod)
            {
                
$arrClasses array_filter(trimsplit(','$objModule->beClasses));

                
// Classes
                
foreach ($arrClasses as $strClass)
                {
                    
$tplClass $this->newTemplate('dev_beClass'$objModule);
                    
$tplClass->class $strClass;

                    
File::putContent('system/modules/' $objModule->folder '/' $this->guessSubfolder($strClass) . '/' $strClass '.php'$tplClass->parse());
                }

                
$arrTables array_filter(trimsplit(','$objModule->beTables));

                
// Back end data container files
                
foreach ($arrTables as $strTable)
                {
                    
$tplTable $this->newTemplate('dev_dca'$objModule);
                    
$tplTable->table $strTable;

                    
File::putContent('system/modules/' $objModule->folder '/dca/' $strTable '.php'$tplTable->parse());
                }

                
$arrTemplates array_filter(trimsplit(','$objModule->beTemplates));

                
// Templates
                
foreach ($arrTemplates as $strTemplate)
                {
                    
$tplTemplate $this->newTemplate('dev_beTemplate'$objModule);
                    
File::putContent('system/modules/' $objModule->folder '/templates/' $strTemplate '.html5'$tplTemplate->parse());
                }
            }

            
$arrTables = array();

            
// Front end
            
if ($objModule->addFeMod)
            {
                
$arrClasses array_filter(trimsplit(','$objModule->feClasses));

                
// Classes
                
foreach ($arrClasses as $strClass)
                {
                    
$tplClass $this->newTemplate('dev_feClass'$objModule);
                    
$tplClass->class $strClass;
                    
$tplClass->extends $this->guessParentClass($strClass);

                    
File::putContent('system/modules/' $objModule->folder '/' $this->guessSubfolder($strClass) . '/' $strClass '.php'$tplClass->parse());
                }

                
$arrTables array_filter(trimsplit(','$objModule->feTables));

                
// Front end data container files
                
foreach ($arrTables as $strTable)
                {
                    
$tplTable $this->newTemplate('dev_feDca'$objModule);
                    
$tplTable->table $strTable;

                    
File::putContent('system/modules/' $objModule->folder '/dca/' $strTable '.php'$tplTable->parse());
                }

                
// Models
                
foreach ($arrTables as $strTable)
                {
                    
$strModel Model::getClassFromTable($strTable);

                    
$tplTable $this->newTemplate('dev_model'$objModule);
                    
$tplTable->table $strTable;
                    
$tplTable->class $strModel;

                    
File::putContent('system/modules/' $objModule->folder '/models/' $strModel '.php'$tplTable->parse());
                }

                
$arrTemplates array_filter(trimsplit(','$objModule->feTemplates));

                
// Templates
                
foreach ($arrTemplates as $strTemplate)
                {
                    
$tplTemplate $this->newTemplate('dev_feTemplate'$objModule);
                    
$objTemplate = new File('system/modules/' $objModule->folder '/templates/' $strTemplate '.html5'true);
                    
$objTemplate->write($tplTemplate->parse());
                    
$objTemplate->close();
                    
$objTemplate->copyTo('system/modules/' $objModule->folder '/templates/' $strTemplate '.xhtml');
                }
            }

            
// Language packs
            
if ($objModule->addLanguage)
            {
                
$arrLanguages array_filter(trimsplit(','$objModule->languages));

                foreach (
$arrLanguages as $strLanguage)
                {
                    
// languages/xx/default.php
                    
$tplLanguage $this->newTemplate('dev_default'$objModule);
                    
$tplLanguage->language $strLanguage;

                    
File::putContent('system/modules/' $objModule->folder '/languages/' $strLanguage '/default.php'$tplLanguage->parse());

                    
// languages/xx/modules.php
                    
$tplLanguage $this->newTemplate('dev_modules'$objModule);
                    
$tplLanguage->language $strLanguage;

                    
File::putContent('system/modules/' $objModule->folder '/languages/' $strLanguage '/modules.php'$tplLanguage->parse());

                    
// languages/xx/<table>.php
                    
foreach ($arrTables as $strTable)
                    {
                        
$tplLanguage $this->newTemplate('dev_table'$objModule);
                        
$tplLanguage->language $strLanguage;
                        
$tplLanguage->table $strTable;

                        
File::putContent('system/modules/' $objModule->folder '/languages/' $strLanguage '/' $strTable '.php'$tplLanguage->parse());
                    }
                }
            }

            
// Public folder
            
$tplConfig $this->newTemplate('dev_htaccess'$objModule);
            
File::putContent('system/modules/' $objModule->folder '/assets/.htaccess'$tplConfig->parse());

            
// Confirm and reload
            
Message::addConfirmation($GLOBALS['TL_LANG']['tl_extension']['confirm']);
            
$this->reload();
        }

        
$this->Template->base Environment::get('base');
        
$this->Template->href $this->getReferer(true);
        
$this->Template->title specialchars($GLOBALS['TL_LANG']['MSC']['backBTTitle']);
        
$this->Template->action ampersand(Environment::get('request'));
        
$this->Template->selectAll $GLOBALS['TL_LANG']['MSC']['selectAll'];
        
$this->Template->button $GLOBALS['TL_LANG']['MSC']['backBT'];
        
$this->Template->message Message::generate();
        
$this->Template->submit specialchars($GLOBALS['TL_LANG']['tl_extension']['make'][0]);
        
$this->Template->headline sprintf($GLOBALS['TL_LANG']['tl_extension']['headline'], Input::get('id'));
        
$this->Template->explain $GLOBALS['TL_LANG']['tl_extension']['make'][1];
        
$this->Template->label $GLOBALS['TL_LANG']['tl_extension']['label'];
    }


    
/**
     * Return a new template object
     * @param string $strTemplate
     * @param DatabaseResult|object $objModule
     *
     * @return BackendTemplate|object
     */
    
protected function newTemplate($strTemplateDatabaseResult $objModule)
    {
        
/** @var BackendTemplate|object $objTemplate */
        
$objTemplate = new BackendTemplate($strTemplate);

        
$objTemplate->folder $objModule->folder;
        
$objTemplate->author str_replace(array('['']'), array('<''>'), $objModule->author);
        
$objTemplate->copyright $objModule->copyright;
        
$objTemplate->package $objModule->package;
        
$objTemplate->license $objModule->license;

        return 
$objTemplate;
    }


    
/**
     * Try to guess the subfolder of a class depending on its name
     *
     * @param string $strClassName
     *
     * @return string
     */
    
protected function guessSubfolder($strClassName)
    {
        if (
strncmp($strClassName'DC_'3) === 0)
        {
            return 
'drivers';
        }
        elseif (
strncmp($strClassName'Content'7) === 0)
        {
            return 
'elements';
        }
        elseif (
strncmp($strClassName'Form'4) === 0)
        {
            return 
'forms';
        }
        elseif (
strncmp($strClassName'Module'6) === 0)
        {
            return 
'modules';
        }
        elseif (
strncmp($strClassName'Page'4) === 0)
        {
            return 
'pages';
        }
        else
        {
            return 
'classes';
        }
    }


    
/**
     * Try to guess the parent class of a class depending on its name
     *
     * @param string $strClassName
     *
     * @return string
     */
    
protected function guessParentClass($strClassName)
    {
        if (
strncmp($strClassName'Content'7) === 0)
        {
            return 
'ContentElement';
        }
        elseif (
strncmp($strClassName'Form'4) === 0)
        {
            return 
'Widget';
        }
        elseif (
strncmp($strClassName'Page'4) === 0)
        {
            return 
'Frontend';
        }
        else
        {
            return 
'Module';
        }
    }
}
Онлайн: 1
Реклама