Fix some random bugs

This commit is contained in:
Matias Griese
2014-08-22 19:30:17 +03:00
parent c56efb9a10
commit b507815eef
5 changed files with 68 additions and 48 deletions

View File

@@ -9,6 +9,7 @@ define('DS', '/');
if (!defined('ROOT_DIR')) {
define('ROOT_DIR', getcwd() .'/');
}
define('GRAV_ROOT', ROOT_DIR);
define('USER_PATH', 'user/');
define('USER_DIR', ROOT_DIR . USER_PATH);
define('SYSTEM_DIR', ROOT_DIR .'system/');

View File

@@ -169,6 +169,42 @@ class Blueprint
return $this->extraArray($data, $this->nested, $prefix);
}
/**
* Extend blueprint with another blueprint.
*
* @param Blueprint $extends
* @param bool $append
*/
public function extend(Blueprint $extends, $append = false)
{
$blueprints = $append ? $this->items : $extends->toArray();
$appended = $append ? $extends->toArray() : $this->items;
$bref_stack = array(&$blueprints);
$head_stack = array($appended);
do {
end($bref_stack);
$bref = &$bref_stack[key($bref_stack)];
$head = array_pop($head_stack);
unset($bref_stack[key($bref_stack)]);
foreach (array_keys($head) as $key) {
if (isset($key, $bref[$key]) && is_array($bref[$key]) && is_array($head[$key])) {
$bref_stack[] = &$bref[$key];
$head_stack[] = $head[$key];
} else {
$bref = array_merge($bref, array($key => $head[$key]));
}
}
} while(count($head_stack));
$this->items = $blueprints;
}
/**
* @param array $data
* @param array $rules
@@ -406,39 +442,4 @@ class Blueprint
}
}
}
/**
* Extend blueprint with another blueprint.
*
* @param Blueprint $extends
* @param bool $append
*/
public function extend(Blueprint $extends, $append = false)
{
$blueprints = $append ? $this->items : $extends->toArray();
$appended = $append ? $extends->toArray() : $this->items;
$bref_stack = array(&$blueprints);
$head_stack = array($appended);
do {
end($bref_stack);
$bref = &$bref_stack[key($bref_stack)];
$head = array_pop($head_stack);
unset($bref_stack[key($bref_stack)]);
foreach (array_keys($head) as $key) {
if (isset($key, $bref[$key]) && is_array($bref[$key]) && is_array($head[$key])) {
$bref_stack[] = &$bref[$key];
$head_stack[] = $head[$key];
} else {
$bref = array_merge($bref, array($key => $head[$key]));
}
}
} while(count($head_stack));
$this->items = $blueprints;
}
}

View File

@@ -32,6 +32,17 @@ abstract class Folder
return $last_modified;
}
public static function getRelativePath($to, $from = ROOT_DIR)
{
$from = preg_replace('![\\|/]+!', '/', $from);
$to = preg_replace('![\\|/]+!', '/', $to);
if (strpos($to, $from) === 0) {
$to = substr($to, strlen($from));
}
return $to;
}
/**
* Return recursive list of all files and directories under given path.
*
@@ -42,17 +53,15 @@ abstract class Folder
*/
public static function all($path, array $params = array())
{
$path = realpath($path);
if ($path === false) {
throw new \RuntimeException("Path to {$path} doesn't exist.");
}
$compare = $params['compare'] ? 'get' . $params['compare'] : null;
$pattern = $params['pattern'] ? $params['pattern'] : null;
$filters = $params['filters'] ? $params['filters'] : null;
$key = $params['key'] ? 'get' . $params['key'] : null;
$value = $params['value'] ? 'get' . $params['value'] : 'SubPathname';
$compare = isset($params['compare']) ? 'get' . $params['compare'] : null;
$pattern = isset($params['pattern']) ? $params['pattern'] : null;
$filters = isset($params['filters']) ? $params['filters'] : null;
$key = isset($params['key']) ? 'get' . $params['key'] : null;
$value = isset($params['value']) ? 'get' . $params['value'] : 'getSubPathname';
$directory = new \RecursiveDirectoryIterator($path,
\RecursiveDirectoryIterator::SKIP_DOTS + \FilesystemIterator::UNIX_PATHS + \FilesystemIterator::CURRENT_AS_SELF);
@@ -72,11 +81,20 @@ abstract class Folder
$fileKey = preg_replace($filters['key'], '', $fileKey);
}
if (isset($filters['value'])) {
$filePath = preg_replace($filters['value'], '', $filePath);
$filter = $filters['value'];
if (is_callable($filter)) {
$filePath = call_user_func($filter, $file);
} else {
$filePath = preg_replace($filter, '', $filePath);
}
}
}
$results[$fileKey] = $filePath;
if ($fileKey !== null) {
$results[$fileKey] = $filePath;
} else {
$results[] = $filePath;
}
}
return $results;
}

View File

@@ -79,7 +79,7 @@ class Plugins extends Iterator
/**
* Return list of all plugin data with their blueprints.
*
* @return array|Data\Data[]
* @return array
*/
static public function all()
{

View File

@@ -90,7 +90,7 @@ class ResourceLocator
throw new \InvalidArgumentException("Invalid resource {$scheme}://");
}
$paths = $array ? [] : false;
$results = $array ? [] : false;
foreach ($this->schemes[$scheme] as $prefix => $paths) {
if ($prefix && strpos($file, $prefix) !== 0) {
continue;
@@ -104,11 +104,11 @@ class ResourceLocator
if (!$array) {
return $absolute ? $lookup : $filename;
}
$paths[] = $absolute ? $lookup : $filename;
$results[] = $absolute ? $lookup : $filename;
}
}
}
return $paths;
return $results;
}
}