/**
  * @see sfTask
  */
 protected function execute($arguments = array(), $options = array())
 {
     if (file_exists('symfony')) {
         throw new sfCommandException(sprintf('A symfony project already exists in this directory (%s).', getcwd()));
     }
     if (!in_array(strtolower($options['orm']), array('propel', 'doctrine', 'none'))) {
         throw new InvalidArgumentException(sprintf('Invalid ORM name "%s".', $options['orm']));
     }
     if ($options['installer'] && $this->commandApplication && !file_exists($options['installer'])) {
         throw new InvalidArgumentException(sprintf('The installer "%s" does not exist.', $options['installer']));
     }
     // clean orm option
     $options['orm'] = ucfirst(strtolower($options['orm']));
     $this->arguments = $arguments;
     $this->options = $options;
     // create basic project structure
     $this->installDir(dirname(__FILE__) . '/skeleton/project');
     // update ProjectConfiguration class (use a relative path when the symfony core is nested within the project)
     $symfonyCoreAutoload = 0 === strpos(sfConfig::get('sf_symfony_lib_dir'), sfConfig::get('sf_root_dir')) ? sprintf('dirname(__FILE__).\'/..%s/autoload/sfCoreAutoload.class.php\'', str_replace(sfConfig::get('sf_root_dir'), '', sfConfig::get('sf_symfony_lib_dir'))) : var_export(sfConfig::get('sf_symfony_lib_dir') . '/autoload/sfCoreAutoload.class.php', true);
     $this->replaceTokens(array(sfConfig::get('sf_config_dir')), array('SYMFONY_CORE_AUTOLOAD' => $symfonyCoreAutoload));
     $this->tokens = array('ORM' => $this->options['orm'], 'PROJECT_NAME' => $this->arguments['name'], 'AUTHOR_NAME' => $this->arguments['author'], 'PROJECT_DIR' => sfConfig::get('sf_root_dir'));
     $this->replaceTokens();
     // execute the choosen ORM installer script
     if (in_array($options['orm'], array('Doctrine', 'Propel'))) {
         include dirname(__FILE__) . '/../../plugins/sf' . $options['orm'] . 'Plugin/config/installer.php';
     }
     // execute a custom installer
     if ($options['installer'] && $this->commandApplication) {
         if ($this->canRunInstaller($options['installer'])) {
             $this->reloadTasks();
             include $options['installer'];
         }
     }
     // fix permission for common directories
     $fixPerms = new sfProjectPermissionsTask($this->dispatcher, $this->formatter);
     $fixPerms->setCommandApplication($this->commandApplication);
     $fixPerms->setConfiguration($this->configuration);
     $fixPerms->run();
     $this->replaceTokens();
 }
Exemplo n.º 2
0
 /**
  * @see sfTask
  */
 protected function execute($arguments = array(), $options = array())
 {
     $app = $arguments['app'];
     // Validate the application name
     if (!preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $app)) {
         throw new sfCommandException(sprintf('The application name "%s" is invalid.', $app));
     }
     $appDir = sfConfig::get('sf_apps_dir') . '/' . $app;
     if (is_dir($appDir)) {
         throw new sfCommandException(sprintf('The application "%s" already exists.', $appDir));
     }
     if (is_readable(sfConfig::get('sf_data_dir') . '/skeleton/app')) {
         $skeletonDir = sfConfig::get('sf_data_dir') . '/skeleton/app';
     } else {
         $skeletonDir = __DIR__ . '/skeleton/app';
     }
     // Create basic application structure
     $finder = sfFinder::type('any')->discard('.sf');
     $this->getFilesystem()->mirror($skeletonDir . '/app', $appDir, $finder);
     // Create $app.php or index.php if it is our first app
     $indexName = 'index';
     $firstApp = !file_exists(sfConfig::get('sf_web_dir') . '/index.php');
     if (!$firstApp) {
         $indexName = $app;
     }
     if (true === $options['csrf-secret']) {
         $options['csrf-secret'] = sha1(mt_rand(11111111, 99999999) . getmypid());
     }
     // Set no_script_name value in settings.yml for production environment
     $finder = sfFinder::type('file')->name('settings.yml');
     $this->getFilesystem()->replaceTokens($finder->in($appDir . '/config'), '##', '##', array('NO_SCRIPT_NAME' => $firstApp ? 'true' : 'false', 'CSRF_SECRET' => sfYamlInline::dump(sfYamlInline::parseScalar($options['csrf-secret'])), 'ESCAPING_STRATEGY' => sfYamlInline::dump((bool) sfYamlInline::parseScalar($options['escaping-strategy'])), 'USE_DATABASE' => sfConfig::has('sf_orm') ? 'true' : 'false'));
     $this->getFilesystem()->copy($skeletonDir . '/web/index.php', sfConfig::get('sf_web_dir') . '/' . $indexName . '.php');
     $this->getFilesystem()->copy($skeletonDir . '/web/index.php', sfConfig::get('sf_web_dir') . '/' . $app . '_dev.php');
     $this->getFilesystem()->replaceTokens(sfConfig::get('sf_web_dir') . '/' . $indexName . '.php', '##', '##', array('APP_NAME' => $app, 'ENVIRONMENT' => 'prod', 'IS_DEBUG' => 'false', 'IP_CHECK' => ''));
     $this->getFilesystem()->replaceTokens(sfConfig::get('sf_web_dir') . '/' . $app . '_dev.php', '##', '##', array('APP_NAME' => $app, 'ENVIRONMENT' => 'dev', 'IS_DEBUG' => 'true', 'IP_CHECK' => '// this check prevents access to debug front controllers that are deployed by accident to production servers.' . PHP_EOL . '// feel free to remove this, extend it or make something more sophisticated.' . PHP_EOL . 'if (!in_array(@$_SERVER[\'REMOTE_ADDR\'], array(\'127.0.0.1\', \'::1\')))' . PHP_EOL . '{' . PHP_EOL . '  die(\'You are not allowed to access this file. Check \'.basename(__FILE__).\' for more information.\');' . PHP_EOL . '}' . PHP_EOL));
     $this->getFilesystem()->rename($appDir . '/config/ApplicationConfiguration.class.php', $appDir . '/config/' . $app . 'Configuration.class.php');
     $this->getFilesystem()->replaceTokens($appDir . '/config/' . $app . 'Configuration.class.php', '##', '##', array('APP_NAME' => $app));
     $fixPerms = new sfProjectPermissionsTask($this->dispatcher, $this->formatter);
     $fixPerms->setCommandApplication($this->commandApplication);
     $fixPerms->setConfiguration($this->configuration);
     $fixPerms->run();
     // Create test dir
     $this->getFilesystem()->mkdirs(sfConfig::get('sf_test_dir') . '/functional/' . $app);
 }
Exemplo n.º 3
0
if (count($cultures) > 0) {
    $this->logSection('i18n', 'enabling i18n in Sympal with cultures: ' . implode(', ', $cultures));
    $command = sprintf('%s "%s" %s', sfToolkit::getPhpCli(), sfConfig::get('sf_root_dir') . '/symfony', 'sympal:configure ' . sprintf('i18n=true language_codes="[%s]"', implode(',', $cultures)));
    $this->logBlock($command, 'INFO');
    $this->getFilesystem()->execute($command, $out, $err);
    $this->logSection('i18n', sprintf('enabling i18n in application "%s"', $application));
    $settingsFilename = sfConfig::get('sf_apps_dir') . '/' . $application . '/config/settings.yml';
    $settings = file_get_contents($settingsFilename);
    $settings .= <<<EOF

    i18n: true
    default_culture: {$cultures[0]}
EOF;
    file_put_contents($settingsFilename, $settings);
}
// execute sympal installation
$command = sprintf('%s "%s" %s', sfToolkit::getPhpCli(), sfConfig::get('sf_root_dir') . '/symfony', 'sympal:install ' . $application . ' --force-reinstall --email-address="' . $emailAddress . '" --username="******" --password="******" --no-confirmation --db-dsn="' . $db['dsn'] . '" --db-username="******" --db-password="******" --first-name="' . $firstName . '" --last-name="' . $lastName . '"');
$this->logBlock($command, 'INFO');
$this->getFilesystem()->execute($command);
// fix permission for common directories
$fixPerms = new sfProjectPermissionsTask($this->dispatcher, $this->formatter);
$fixPerms->setCommandApplication($this->commandApplication);
$fixPerms->setConfiguration($this->configuration);
$fixPerms->run();
$this->replaceTokens();
$this->log(null);
$this->logSection('sympal', sprintf('Sympal was installed successfully...', $application));
$url = 'http://localhost/' . $application . '_dev.php/security/signin';
$this->logSection('sympal', sprintf('Open your browser to "%s"', $url));
$this->logSection('sympal', sprintf('You can signin with the username "%s" and password "%s"', $username, $password));
exit;