Skip to content

Commit

Permalink
Always use relative paths
Browse files Browse the repository at this point in the history
When the server that install package is not the same of the one that
uses it absolute path fail. Always use relative paths.
  • Loading branch information
gmazzap committed Mar 5, 2015
1 parent d908c64 commit 7add02c
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 53 deletions.
71 changes: 30 additions & 41 deletions src/Builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Builder
/**
* @var string[] Keys of the path object that must be checked
*/
private static $paths = array('root', 'vendor', 'wp', 'starter');
private static $paths = array('vendor', 'wp', 'starter');

/**
* @var \Composer\IO\IOInterface
Expand Down Expand Up @@ -81,6 +81,9 @@ public function build(ArrayAccess $paths)
return $this->error('error');
}
foreach (self::$files as $file) {
if ($file === '.gitignore' && is_file($paths['root'].DIRECTORY_SEPARATOR.$file)) {
continue;
}
if ($this->saveFile($this->buildFile($paths, $file), $paths['root'], $file)) {
$this->progress('file_done', $file);
}
Expand All @@ -106,11 +109,14 @@ public function build(ArrayAccess $paths)
private function checkPaths(ArrayAccess $paths)
{
foreach (self::$paths as $key) {
if (! isset($paths[$key]) || ! is_dir($paths[$key])) {
$path = isset($paths[$key]) ?
realpath($paths['root'].DIRECTORY_SEPARATOR.$paths[$key])
: false;
if (! $path) {
return $this->error('bad_path', $key);
} elseif (
$key === 'wp'
&& ! file_exists($paths[$key].DIRECTORY_SEPARATOR.'wp-settings.php')
&& ! file_exists($path.DIRECTORY_SEPARATOR.'wp-settings.php')
) {
return $this->error('bad_wp');
}
Expand All @@ -133,23 +139,23 @@ private function buildFile(ArrayAccess $paths, $fileName)
static $vars;
if (is_null($vars)) {
$vars = array(
'VENDOR_PATH' => $paths['vendor'],
'WP_INSTALL_PATH' => $paths['wp'],
'WP_INSTALL_SUBDIR' => $this->subdir($paths['root'], $paths['wp']),
'VENDOR_PATH_SUBDIR' => $this->subdir($paths['root'], $paths['vendor']),
'WP_CONTENT_SUBDIR' => is_string($paths['content'])
? $this->subdir($paths['root'], $paths['content'])
: 'wp-content',
'VENDOR_PATH' => $paths['vendor'],
'WP_INSTALL_PATH' => $paths['wp'],
'WP_CONTENT_PATH' => $paths['content'],
);
}
$templateFile = implode(DIRECTORY_SEPARATOR,
array($paths['starter'], 'templates', $fileName));
if (! is_readable($templateFile)) {
$template = implode(
DIRECTORY_SEPARATOR,
array($paths['root'], $paths['starter'], 'templates', $fileName)
);
if (! is_readable($template)) {
return $this->error('create', $fileName);
}
$template = file_get_contents($templateFile);
/** @var string $content */
$content = $this->renderer->render($template, array_merge($this->salter->keys(), $vars));
$content = $this->renderer->render(
file_get_contents($template),
array_merge($this->salter->keys(), $vars)
);
if (empty($content)) {
return $this->error('create', $fileName);
}
Expand Down Expand Up @@ -193,6 +199,7 @@ private function saveFile($content, $targetPath, $fileName)
private function copy(ArrayAccess $paths, $files, $base = 'starter')
{
$pieces = $base === 'starter' ? array($paths[$base], 'templates') : array($paths[$base]);
array_unshift($pieces, $paths['root']);
$done = true;
foreach ((array) $files as $file) {
$source = implode(DIRECTORY_SEPARATOR, array_merge($pieces, array($file)));
Expand Down Expand Up @@ -221,26 +228,24 @@ private function moveContent(ArrayAccess $paths)
if (empty($paths['content'])) {
return false;
}
if (! is_dir(dirname($paths['content']))) {
return $this->error('bad_path', 'content');
}
$from = $paths['wp'].DIRECTORY_SEPARATOR.'wp-content';
if ($from === $paths['content']) {
$from = str_replace(array('/', '\\'), '/', $paths['wp'].'/wp-content');
$to = str_replace(array('/', '\\'), '/', $paths['content']);
if ($from === $to) {
$this->progress('same_content_folder');

return false;
}
if (! is_dir($paths['content']) && ! mkdir($paths['content'], 0755)) {
return $this->error('create', $paths['content']);
if (! is_dir($to) && ! mkdir($to, 0755)) {
return $this->error('create', $to);
}
$space = str_repeat(' ', 55);
$len = strlen($paths['content']);
$len = strlen($to);
$lines = array(
' <question>'.$space,
' QUESTION ',
' Do you want to move default plugins and themes from ',
' WordPress package wp-content dir to content folder: ',
' "'.$paths['content'].'"'.str_repeat(' ', $len < 51 ? 51 - $len : 0),
' "'.$to.'"'.str_repeat(' ', $len < 51 ? 51 - $len : 0),
$space.'</question>',
);
$question = PHP_EOL.implode('</question>'.PHP_EOL.' <question>', $lines);
Expand All @@ -251,7 +256,7 @@ private function moveContent(ArrayAccess $paths)
return false;
}

return $this->moveItems(glob($from.'/*'), $from, $paths['content']);
return $this->moveItems(glob($from.'/*'), $from, $to);
}

/**
Expand Down Expand Up @@ -374,20 +379,4 @@ private function error()

return false;
}

/**
* Takes 2 absolute paths, one contained in the other) and return the relative part.
* Remove leading and trailing slashes.
*
* @param string $root containing path
* @param string $path contained path
* @return string relative path
*/
private function subdir($root, $path)
{
$normRoot = trim(realpath($root));
$normPath = trim(realpath($path));

return trim(str_replace($normRoot, '', $normPath), '/\\');
}
}
17 changes: 12 additions & 5 deletions src/Setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,10 @@ public function __construct(Composer $composer, Builder $builder)
: 'wp-content';
$this->paths = new ArrayObject($this->normalisePaths(array(
'root' => $rootPath,
'vendor' => $composer->getConfig()->get('vendor-dir'),
'wp' => $rootPath.DIRECTORY_SEPARATOR.$wpSubdir,
'content' => $wpContent ? $rootPath.DIRECTORY_SEPARATOR.$wpContent : false,
'starter' => dirname(__DIR__),
'vendor' => $this->subdir($rootPath, $composer->getConfig()->get('vendor-dir')),
'wp' => $wpSubdir,
'content' => $wpContent,
'starter' => $this->subdir($rootPath, dirname(__DIR__)),
)), ArrayObject::STD_PROP_LIST);
}

Expand All @@ -108,9 +108,16 @@ private function install()
private function normalisePaths(array $paths)
{
array_walk($paths, function (&$path) {
$path = is_string($path) ? realpath($path) : $path;
$path = is_string($path)
? str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path)
: $path;
});

return $paths;
}

private function subdir($root, $path)
{
return trim(preg_replace('|^'.preg_quote(realpath($root)).'|', '', realpath($path)), '\\/');
}
}
2 changes: 1 addition & 1 deletion templates/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require '{{{WP_INSTALL_PATH}}}/wp-blog-header.php';
require realpath(__DIR__.'/{{{WP_INSTALL_PATH}}}/wp-blog-header.php');
12 changes: 6 additions & 6 deletions templates/wp-config.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
/**
* Composer autoload.
*/
require_once '{{{VENDOR_PATH}}}/autoload.php';
require_once realpath(__DIR__.'/{{{VENDOR_PATH}}}/autoload.php');

/**
* Configuration constants.
Expand Down Expand Up @@ -62,7 +62,7 @@
* If available, environment name is mixed to keys so they become unique per environment.
*/
global $environment;
$pre = $environment ? substr($environment, 0, 5) : substr('{{{AUTH_KEY}}}', 0, 5);
$pre = $environment ? substr($environment, 0, 5) : substr('{{{AUTH_KEY}}}', 0, 5);
$post = $environment ? substr($environment, -5, 5) : substr('{{{SECURE_AUTH_KEY}}}', 0, 5);
defined('AUTH_KEY') or define('AUTH_KEY', $pre.'{{{AUTH_KEY}}}'.$post);
defined('SECURE_AUTH_KEY') or define('SECURE_AUTH_KEY', $pre.'{{{SECURE_AUTH_KEY}}}'.$post);
Expand Down Expand Up @@ -114,10 +114,10 @@
: 'http://'
).$server['SERVER_NAME']);
}
defined('ABSPATH') or define('ABSPATH', '{{{WP_INSTALL_PATH}}}');
defined('WP_CONTENT_DIR') or define('WP_CONTENT_DIR', __DIR__.'/{{{WP_CONTENT_SUBDIR}}}');
defined('WP_SITEURL') or define('WP_SITEURL', rtrim(WP_HOME, '/').'/{{{WP_INSTALL_SUBDIR}}}');
defined('WP_CONTENT_URL') or define('WP_CONTENT_URL', rtrim(WP_HOME, '/').'/{{{WP_CONTENT_SUBDIR}}}');
defined('ABSPATH') or define('ABSPATH', realpath(__DIR__.'/{{{WP_INSTALL_PATH}}}'));
defined('WP_CONTENT_DIR') or define('WP_CONTENT_DIR', realpath(__DIR__.'/{{{WP_CONTENT_PATH}}}'));
defined('WP_SITEURL') or define('WP_SITEURL', rtrim(WP_HOME, '/').'/{{{WP_INSTALL_PATH}}}');
defined('WP_CONTENT_URL') or define('WP_CONTENT_URL', rtrim(WP_HOME, '/').'/{{{WP_CONTENT_PATH}}}');

/**
* Clean up.
Expand Down

0 comments on commit 7add02c

Please sign in to comment.