Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Console/Command/ResetCommand.php
Строк: 200
<?php
namespace ConcreteCoreConsoleCommand;

use 
SymfonyComponentConsoleCommandCommand;
use 
SymfonyComponentConsoleInputInputOption;
use 
SymfonyComponentConsoleInputInputInterface;
use 
SymfonyComponentConsoleOutputOutputInterface;
use 
Database;
use 
Core;
use 
Exception;
use 
SymfonyComponentConsoleQuestionConfirmationQuestion;

class 
ResetCommand extends Command
{
    protected function 
configure()
    {
        
$this
            
->setName('c5:reset')
            ->
setDescription('Reset the concrete5 installation, deleting files and emptying the database')
            ->
addOption('force''f'InputOption::VALUE_NONE'Force the reset')
            ->
setHelp(<<<EOT
Returns codes:
  0 operation completed successfully
  1 errors occurred
EOT
            )
        ;
    }
    protected function 
execute(InputInterface $inputOutputInterface $output)
    {
        
$rc 0;
        try {
            if (!
$input->getOption('force')) {
                if (!
$input->isInteractive()) {
                    throw new 
Exception("You have to specify the --force option in order to run this command");
                }
                
$confirmQuestion = new ConfirmationQuestion(
                    
'Are you sure you want to reset this concrete5 installation? ' .
                    
'This will delete files and empty the database! (y/n)',
                    
false
                
);
                if (!
$this->getHelper('question')->ask($input$output$confirmQuestion)) {
                    throw new 
Exception("Operation aborted.");
                }
            }
            if (
Database::getDefaultConnection()) {
                
$output->write("Listing tables... ");
                
$cn Database::get();
                
/* @var $cn ConcreteCoreDatabaseConnectionConnection */
                
$sm $cn->getSchemaManager();
                
$tables $sm->listTables();
                
$output->writeln('<info>done.</info>');
                
$tableNames = array();
                foreach (
$tables as $table) {
                    
$tableNames[] = $table->getName();
                    foreach (
$table->getForeignKeys() as $foreignKey) {
                        
$output->write("Dropping foreign key {$table->getName()}.{$foreignKey->getName()}... ");
                        
$sm->dropForeignKey($foreignKey$table);
                        
$output->writeln('<info>done.</info>');
                    }
                }
                foreach (
$tableNames as $tableName) {
                    
$output->write("Dropping table $tableName... ");
                    
$sm->dropTable($tableName);
                    
$output->writeln('<info>done.</info>');
                }
            }
            
$fh Core::make('helper/file');
            
/* @var $fh ConcreteCoreFileServiceFile */
            
$createEmptyDirs = array(
                
'application/files' => DIR_FILES_UPLOADED_STANDARD,
            );
            
$createEmptyFiles = array(
                
'application/files/index.html' => DIR_FILES_UPLOADED_STANDARD.'/index.html',
            );
            if (
is_file(DIR_FILES_UPLOADED_STANDARD.'/.gitignore')) {
                
$createEmptyFiles['application/files/.gitignore'] = DIR_FILES_UPLOADED_STANDARD.'/.gitignore';
            }
            
$deleteFiles = array(
                
'.htaccess' => DIR_BASE.'/.htaccess',
                
'application/config/app.php' => DIR_CONFIG_SITE.'/app.php',
                
'application/config/database.php' => DIR_CONFIG_SITE.'/database.php',
                
'application/config/site.php' => DIR_CONFIG_SITE.'/site.php',
                
'application/config/site_install.php' => DIR_CONFIG_SITE.'/site_install.php',
                
'application/config/site_install_user.php' => DIR_CONFIG_SITE.'/site_install_user.php',
            );
            foreach (
$deleteFiles as $shownName => $fullpath) {
                if (
is_file($fullpath)) {
                    
$output->write("Deleting file $shownName... ");
                    if (@
unlink($fullpath) === false) {
                        throw new 
Exception("Failed to delete file $fullpath");
                    }
                    
$output->writeln('<info>done.</info>');
                }
            }
            
$deleteDirs = array(
                
'application/config/generated_overrides' => DIR_CONFIG_SITE.'/generated_overrides',
                
'application/config/doctrine' => DIR_CONFIG_SITE.'/doctrine',
                
'application/files' => DIR_FILES_UPLOADED_STANDARD,
            );
            foreach (
$deleteDirs as $shownName => $fullpath) {
                if (
is_dir($fullpath)) {
                    
$output->write("Deleting directory $shownName... ");
                    if (
$fh->removeAll($fullpathtrue) === false) {
                        throw new 
Exception("Failed to delete directory $fullpath");
                    }
                    
$output->writeln('<info>done.</info>');
                }
            }
            foreach (
$createEmptyDirs as $shownName => $fullpath) {
                if (!
file_exists($fullpath)) {
                    
$output->write("Creating directory $shownName... ");
                    if (@
mkdir($fullpath) === false) {
                        throw new 
Exception("Failed to create directory $fullpath");
                    }
                    
$output->writeln('<info>done.</info>');
                }
            }
            foreach (
$createEmptyFiles as $shownName => $fullpath) {
                if (!
file_exists($fullpath)) {
                    
$output->write("Creating empty file $shownName... ");
                    if (@
touch($fullpath) === false) {
                        throw new 
Exception("Failed to create empty file $fullpath");
                    }
                    
$output->writeln('<info>done.</info>');
                }
            }
        } catch (
Exception $x) {
            
$output->writeln('<error>'.$x->getMessage().'</error>');
            
$rc 1;
        }

        return 
$rc;
    }
}
Онлайн: 4
Реклама