Skip to content

Commit d129c5e

Browse files
committed
Merge pull request #33 from gwa/master
Master
2 parents 9d92e19 + 0292514 commit d129c5e

13 files changed

Lines changed: 362 additions & 175 deletions

.editorconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# EditorConfig helps developers define and maintain consistent
2+
# coding styles between different editors and IDEs
3+
# editorconfig.org
4+
root = true
5+
6+
[*]
7+
charset = utf-8
8+
end_of_line = lf
9+
indent_style = space
10+
indent_size = 4
11+
trim_trailing_whitespace = true
12+
insert_final_newline = true
13+
14+
[*.md]
15+
trim_trailing_whitespace = false

composer.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name" : "gwa/multisite-directory-resolver",
33
"type" : "library",
4-
"description": "",
4+
"description": "Adds filters that correct directory paths in a Wordpress multisite install with the WordPress installation in a custom subfolder.",
55
"keywords" : ["composer", "wordpress", "multisite"],
66
"license" : "MIT",
77
"homepage" : "https://github.com/gwa/WpMultisiteDirectoryResolver",
@@ -16,11 +16,12 @@
1616
}
1717
],
1818
"require": {
19-
"php" : ">=5.4.0"
19+
"php" : ">=5.4.0",
20+
"gwa/mockery-wp-bridge" : "^1.2"
2021
},
2122
"require-dev": {
22-
"fabpot/php-cs-fixer" : "~1.8",
23-
"phpunit/phpunit" : "~4.6.6",
23+
"fabpot/php-cs-fixer" : "~1.10",
24+
"phpunit/phpunit" : "~4.8",
2425
"satooshi/php-coveralls" : "~0.6.1"
2526
},
2627
"autoload": {
@@ -35,7 +36,7 @@
3536
},
3637
"extra": {
3738
"branch-alias": {
38-
"dev-master" : "0.0.5-dev"
39+
"dev-master" : "2.1.0-dev"
3940
}
4041
},
4142
"suggest": {

phpunit.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
<?php
22

33
require __DIR__.'/vendor/autoload.php';
4-
require __DIR__.'/tests/MockFunc/WpFunc.php';

src/Gwa/AbstractResolver.php

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Gwa\Wordpress;
34

45
/**
@@ -12,13 +13,17 @@
1213
* @license MIT
1314
*/
1415

16+
use Gwa\Wordpress\MockeryWpBridge\Traits\WpBridgeTrait;
17+
1518
/**
1619
* AbstractResolver.
1720
*
1821
* @author Daniel Bannert
1922
*/
2023
abstract class AbstractResolver
2124
{
25+
use WpBridgeTrait;
26+
2227
/**
2328
* Folder path to wordpress, with trailing slash.
2429
*
@@ -75,15 +80,65 @@ public function fixNetworkAdminUrlFilter($path = '', $scheme = 'admin')
7580
return preg_replace($wordpressUrl, $multiSiteUrl, $path, 1);
7681
}
7782

83+
/**
84+
* Fix double backslashes in app folder.
85+
*
86+
* @param string
87+
*/
88+
public function fixWpDoubleSlashFilter($urls)
89+
{
90+
foreach ($urls as &$url) {
91+
if ($url) {
92+
$url = str_replace('//app', '/app', $url);
93+
}
94+
}
95+
96+
return $urls;
97+
}
98+
99+
/**
100+
* Fixes the protocol in urls. Replaces leading double slashes //
101+
* with the full protocol; https or http depending on context.
102+
*
103+
* @param string
104+
*
105+
* @return array
106+
*/
107+
public function fixWpProtocolFilter($urls)
108+
{
109+
$protocol = $this->getSiteProtocol();
110+
111+
foreach ($urls as $k => &$v) {
112+
if ((strpos($k, 'url') !== false) && (substr($v, 0, 2) === '//')) {
113+
$v = $protocol.ltrim($v, '//');
114+
}
115+
}
116+
117+
return $urls;
118+
}
119+
120+
/**
121+
* Get the correct protocol.
122+
*
123+
* @return string
124+
*/
125+
protected function getSiteProtocol()
126+
{
127+
return $this->getWpBridge()->isSsl() ? 'https://' : 'http://';
128+
}
129+
78130
/**
79131
* Init all filter.
80132
*/
81133
public function init()
82134
{
83-
add_filter('network_admin_url', [$this, 'fixNetworkAdminUrlFilter'], 10, 2);
135+
$this->getWpBridge()->addFilter('network_admin_url', [$this, 'fixNetworkAdminUrlFilter'], 10, 2);
136+
137+
$this->getWpBridge()->addFilter('script_loader_src', [$this, 'fixStyleScriptPathFilter'], 10, 2);
138+
$this->getWpBridge()->addFilter('style_loader_src', [$this, 'fixStyleScriptPathFilter'], 10, 2);
84139

85-
add_filter('script_loader_src', [$this, 'fixStyleScriptPathFilter'], 10, 2);
86-
add_filter('style_loader_src', [$this, 'fixStyleScriptPathFilter'], 10, 2);
140+
$this->getWpBridge()->addFilter('upload_dir', [$this, 'fixWpDoubleSlashFilter'], 10, 1);
141+
$this->getWpBridge()->addFilter('upload_dir', [$this, 'fixWpProtocolFilter'], 10, 1);
87142
}
88143

89144
/**

src/Gwa/Contracts/MultisiteDirectoryResolver.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Gwa\Wordpress\Contracts;
34

45
/**
@@ -17,7 +18,7 @@
1718
*
1819
* @author Daniel Bannert
1920
*/
20-
Interface MultisiteDirectoryResolver
21+
interface MultisiteDirectoryResolver
2122
{
2223
/**
2324
* Set the right links in Adminbar.

src/Gwa/MultisiteDirectoryResolver.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Gwa\Wordpress;
34

45
/**
@@ -42,7 +43,7 @@ class MultisiteDirectoryResolver extends AbstractResolver implements ResolverCon
4243
*/
4344
public function __construct($wpdir)
4445
{
45-
$this->wpDirectoryPath = substr($wpdir, -1) === '/' ? $wpdir : $wpdir.'/';;
46+
$this->wpDirectoryPath = substr($wpdir, -1) === '/' ? $wpdir : $wpdir.'/';
4647

4748
$this->setWpFolderName();
4849
}
@@ -81,19 +82,19 @@ public function fixStyleScriptPathFilter($src, $handle)
8182
$dir = rtrim($this->wpDirectoryPath, '/');
8283

8384
if (
84-
strpos($src, site_url()) !== false &&
85+
strpos($src, $this->getWpBridge()->siteUrl()) !== false &&
8586
strpos($src, 'plugins') === false &&
8687
strpos($src, $dir) === false
8788
) {
88-
$styleUrl = explode(site_url(), $src);
89-
$src = site_url().$dir.$styleUrl[1];
89+
$styleUrl = explode($this->getWpBridge()->siteUrl(), $src);
90+
$src = $this->getWpBridge()->siteUrl().'/'.$dir.$styleUrl[1];
9091
}
9192

9293
if (strpos($src, '/app')) {
9394
$src = str_replace('//app', '/app', $src);
9495
}
9596

96-
return esc_url($src);
97+
return $this->getWpBridge()->escUrl($src);
9798
}
9899

99100
/**
@@ -120,7 +121,7 @@ public function init()
120121
{
121122
parent::init();
122123

123-
add_filter('site_url', [$this, 'fixSiteUrlFilter'], 10, 3);
124-
add_filter('includes_url', [$this, 'fixWpIncludeFolder'], 10, 2);
124+
$this->getWpBridge()->addFilter('site_url', [$this, 'fixSiteUrlFilter'], 10, 3);
125+
$this->getWpBridge()->addFilter('includes_url', [$this, 'fixWpIncludeFolder'], 10, 2);
125126
}
126127
}

src/Gwa/MultisiteResolverManager.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Gwa\Wordpress;
34

45
/**
@@ -12,18 +13,23 @@
1213
* @license MIT
1314
*/
1415

16+
use Gwa\Wordpress\MockeryWpBridge\Traits\WpBridgeTrait;
17+
use Gwa\Wordpress\MockeryWpBridge\WpBridge;
18+
1519
/**
1620
* MultisiteResolverManager.
1721
*
1822
* @author Daniel Bannert
1923
*/
2024
class MultisiteResolverManager
2125
{
26+
use WpBridgeTrait;
27+
2228
const TYPE_SUBDOMAIN = '\Gwa\Wordpress\MultisiteSubDomainResolver';
23-
const TYPE_FOLDER = '\Gwa\Wordpress\MultisiteDirectoryResolver';
29+
const TYPE_FOLDER = '\Gwa\Wordpress\MultisiteDirectoryResolver';
2430

2531
/**
26-
* Resolver Handler
32+
* Resolver Handler.
2733
*
2834
* @var \Gwa\Wordpress\Contracts\MultisiteDirectoryResolver
2935
*/
@@ -34,17 +40,24 @@ class MultisiteResolverManager
3440
*
3541
* @param string $wpdir
3642
* @param string $multisiteDomainType
43+
* @param null $wpBridge
3744
*/
38-
public function __construct($wpdir, $multisiteDomainType) {
45+
public function __construct($wpdir, $multisiteDomainType, $wpBridge = null)
46+
{
3947
if (!is_string($wpdir) || $wpdir === '' || $wpdir === '/') {
4048
throw new \Exception('Please set the relative path to your Wordpress install folder.');
4149
}
4250

43-
$this->handler = new $multisiteDomainType($wpdir);
51+
$this->setWpBridge(($wpBridge !== null) ? $wpBridge : new WpBridge());
52+
53+
$handler = new $multisiteDomainType($wpdir);
54+
$handler->setWpBridge($this->getWpBridge());
55+
56+
$this->handler = $handler;
4457
}
4558

4659
/**
47-
* Get current Handler
60+
* Get current Handler.
4861
*
4962
* @return \Gwa\Wordpress\Contracts\MultisiteDirectoryResolver
5063
*/

src/Gwa/MultisiteSubDomainResolver.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Gwa\Wordpress;
34

45
/**
@@ -21,7 +22,7 @@
2122
*/
2223
class MultisiteSubDomainResolver extends AbstractResolver implements ResolverContract
2324
{
24-
/**
25+
/**
2526
* Set the right path for script and style loader.
2627
*
2728
* @param string $src
@@ -35,6 +36,6 @@ public function fixStyleScriptPathFilter($src, $handle)
3536
$src = str_replace('//app', '/app', $src);
3637
}
3738

38-
return esc_url($src);
39+
return $this->getWpBridge()->escUrl($src);
3940
}
4041
}

0 commit comments

Comments
 (0)