verify.provision.inc 4.18 KB
Newer Older
1 2 3 4 5 6 7
<?php

/**
 * Provision verify command
 *
 * Disable an enabled and installed site
 */
8
function drush_provision_drupal_provision_verify_validate() {
drumm's avatar
drumm committed
9
  if (d()->type === 'site') {
10 11
    drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_SITE);
    provision_prepare_environment();
12

drumm's avatar
drumm committed
13 14 15
    _provision_drupal_create_settings_file();
    drush_errors_on();
    drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_FULL);
16 17
  }

18 19 20 21 22 23
}


/**
 * implementation of provision_verify
 */
24
function drush_provision_drupal_pre_provision_verify() {
drumm's avatar
drumm committed
25
  if (d()->type === 'server') {
drumm's avatar
drumm committed
26

27
    provision_file()->create_dir(d()->config_path, dt('Provision configuration'), 0711);
28
    if (d()->name == '@server_master') {
29
      provision_file()->create_dir(d()->backup_path, dt('Backup'), 0700);
30 31 32 33 34 35 36 37 38 39 40 41
      provision_file()->create_dir(d()->include_path, dt('Provision PHP configuration'), 0711);
      if (!provision_file()->exists(d()->include_path . '/global.inc')->succeed('Global configuration file exists')->status()) {
        // Create an empty global.inc so the include doesn't fail with
        // open_basedir restrictions
        $config = new provisionConfig_global_settings(d()->name);
        $config->write();
      }
    }
    else {
      if (provision_file()->exists(d()->include_path)) {
        d()->service('http')->sync(d()->include_path);
      }
42
    }
43
  }
drumm's avatar
drumm committed
44
  elseif (d()->type === 'platform') {
45 46 47 48 49
    // create a platform from a makefile, if it doesnt already exist and the makefile does.
    if (!provision_file()->exists(d()->root)->status() && !empty(d()->makefile)) {
      if (provision_file()->exists(d()->makefile)->status()) {
        drush_log(dt("Platform path does not exists, fetching from drush makefile"));
        drush_backend_invoke("make", array(d()->makefile, d()->root), array('root' => null, 'uri' => null));
Adrian Rossouw's avatar
Adrian Rossouw committed
50
        if (drush_get_error()) {
51 52 53 54 55 56 57
          return drush_set_error("DRUSH_MAKE_FAILED", 
            "Could not download platform using drush make. No platform present");
        }
      }

    }

Adrian Rossouw's avatar
Adrian Rossouw committed
58
    drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_ROOT);
59
    provision_file()->writable(d()->root . '/sites')
60 61
      ->succeed('Drupal sites directory @path is writable by the provisioning script')
      ->fail('Drupal sites directory @path is not writable by the provisioning script', 'PROVISION_SITES_DIR_NOT_WRITABLE');
62

63
    drush_set_option('sites', array_keys((array) provision_drupal_find_sites()), 'drupal'); 
64
    drush_log(dt("This platform is running @short_name @version", array('@short_name' => 'drupal', '@version' => VERSION)));
65
    drush_set_option('packages', _scrub_object(provision_find_packages()), 'drupal');
66
  }
drumm's avatar
drumm committed
67
  elseif (d()->type === 'site') {
68
    drush_set_option('packages', _scrub_object(provision_drupal_system_map()), 'site');
69 70 71
    // This is the actual drupal provisioning requirements. 
    _provision_drupal_create_directories();
    _provision_drupal_maintain_aliases();
72
    // Requires at least the database settings to complete.
73
   _provision_drupal_create_settings_file();
74 75 76
  }
}

77 78 79 80 81
class provisionConfig_global_settings extends provisionConfig {
  public $template = 'global_settings.tpl.php';
  public $description = 'Global settings.php file';

  function filename() {
82
    return $this->include_path . '/global.inc';
83 84
  }
}
85 86 87 88

/**
 * Implementation of hook_provision_post_verify
 */
89
function drush_provision_drupal_post_provision_verify() {
drumm's avatar
drumm committed
90
  if (d()->type === 'site') {
91
    _provision_drupal_rebuild_caches();
92
    drush_set_option('installed', TRUE, 'site');
93 94 95
  }
}

96
/**
anarcat's avatar
anarcat committed
97 98 99 100 101 102 103 104
 * Inject the relevant .htacces configuration into the global apache
 * configuration
 *
 * This basically loads the regular .htacess but adds an AllowOverride
 * none so the .htaccess are ignored, as a performance improvement.
 *
 * @see platform/provision_drupal_htaccess.tpl.php
 * @see hook_provision_apache_dir_config()
105 106
 */
function provision_drupal_provision_apache_dir_config($data = null) {
107
  $htaccess = <<<EOF
108
<IfModule mod_rewrite.c>
109
  RewriteEngine on
110 111 112 113
  # allow files to be accessed without /sites/fqdn/
  RewriteRule ^files/(.*)$ /sites/%{HTTP_HOST}/files/$1 [L]
</IfModule>

114 115
EOF;

116
  $htaccess .= file_get_contents(d()->root . '/.htaccess');
117 118
  $htaccess .= <<<EOF

119 120
# Do not read the platform's .htaccess
AllowOverride none
anarcat's avatar
anarcat committed
121

122
EOF;
anarcat's avatar
anarcat committed
123
  # the trailing newline above is necessary
124
  return $htaccess;
125
}