diff options
author | mattab <matthieu.aubry@gmail.com> | 2014-02-18 04:30:41 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2014-02-18 04:30:41 +0400 |
commit | 58449a825aaddf2f9bd223cdb89fd6c74775440f (patch) | |
tree | 52fcb4935bbcfef21ffcd73f96f66ddc804a7f39 | |
parent | 06946af25eb5785e85a01e4c3117b2bb718497b8 (diff) |
Finishing clearing the console command to allow piwik domain
-rwxr-xr-x | console | 2 | ||||
-rw-r--r-- | core/CliMulti.php | 8 | ||||
-rw-r--r-- | core/CliMulti/RequestCommand.php | 29 | ||||
-rw-r--r-- | core/Url.php | 37 | ||||
-rw-r--r-- | core/UrlHelper.php | 37 | ||||
-rw-r--r-- | tests/PHPUnit/Core/UrlHelperTest.php | 44 | ||||
-rw-r--r-- | tests/PHPUnit/Core/UrlTest.php | 29 | ||||
-rw-r--r-- | tests/PHPUnit/Integration/Core/CliMultiTest.php | 6 |
8 files changed, 107 insertions, 85 deletions
@@ -19,7 +19,7 @@ if (!Common::isPhpCliMode()) { } $piwikHostname = CronArchive::getParameterFromCli('piwik-domain', true); -$piwikHostname = Url::getHostFromUrl($piwikHostname); +$piwikHostname = UrlHelper::getHostFromUrl($piwikHostname); Url::setHost($piwikHostname); diff --git a/core/CliMulti.php b/core/CliMulti.php index 42285fd028..ccd0cbf935 100644 --- a/core/CliMulti.php +++ b/core/CliMulti.php @@ -7,8 +7,8 @@ */ namespace Piwik; -use Piwik\CliMulti\Process; use Piwik\CliMulti\Output; +use Piwik\CliMulti\Process; /** * Class CliMulti. @@ -221,9 +221,9 @@ class CliMulti { { $this->processes[] = new Process($cmdId); - $url = $this->appendTestmodeParamToUrlIfNeeded($url); - $query = Url::getQueryFromUrl($url, array('pid' => $cmdId)); - $hostname = parse_url($url, PHP_URL_HOST); + $url = $this->appendTestmodeParamToUrlIfNeeded($url); + $query = UrlHelper::getQueryFromUrl($url, array('pid' => $cmdId)); + $hostname = UrlHelper::getHostFromUrl($url); $command = $this->buildCommand($hostname, $query, $output->getPathToFile()); Log::debug($command); diff --git a/core/CliMulti/RequestCommand.php b/core/CliMulti/RequestCommand.php index a9ddd51a3c..8a1df0db19 100644 --- a/core/CliMulti/RequestCommand.php +++ b/core/CliMulti/RequestCommand.php @@ -10,6 +10,7 @@ namespace Piwik\CliMulti; use Piwik\Plugin\ConsoleCommand; use Piwik\Url; +use Piwik\UrlHelper; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -27,19 +28,12 @@ class RequestCommand extends ConsoleCommand { $this->setName('climulti:request'); $this->setDescription('Parses and executes the given query. See Piwik\CliMulti. Intended only for system usage.'); - $this->addArgument('url', null, InputOption::VALUE_REQUIRED, 'Piwik URL query string, for instance: "module=API&method=API.getPiwikVersion&token_auth=123456789"'); + $this->addArgument('url-query', null, InputOption::VALUE_REQUIRED, 'Piwik URL query string, for instance: "module=API&method=API.getPiwikVersion&token_auth=123456789"'); } protected function execute(InputInterface $input, OutputInterface $output) { - $_GET = array(); - - $hostname = $input->getOption('piwik-domain'); - Url::setHost($hostname); - - $url = $input->getArgument('url'); - $query = Url::getQueryStringFromUrl($url); - parse_str($query, $_GET); + $this->initHostAndQueryString($input); if ($this->isTestModeEnabled()) { Config::getInstance()->setTestEnvironment(); @@ -72,4 +66,21 @@ class RequestCommand extends ConsoleCommand return !empty($_GET['testmode']); } + /** + * @param InputInterface $input + */ + protected function initHostAndQueryString(InputInterface $input) + { + $_GET = array(); + + $hostname = $input->getOption('piwik-domain'); + Url::setHost($hostname); + + $query = $input->getArgument('url-query'); + $query = UrlHelper::getArrayFromQueryString($query); + foreach ($query as $name => $value) { + $_GET[$name] = $value; + } + } + }
\ No newline at end of file diff --git a/core/Url.php b/core/Url.php index 34b1175dfc..c023228fac 100644 --- a/core/Url.php +++ b/core/Url.php @@ -439,43 +439,6 @@ class Url return parse_url($url, PHP_URL_QUERY); } - static public function getHostFromUrl($url) - { - if(!UrlHelper::isLookLikeUrl($url)) { - $url = "http://" . $url; - } - return parse_url($url, PHP_URL_HOST); - } - - /** - * Returns the query part from any valid url and adds additional parameters to the query part if needed. - * - * @param string $url Any url eg `"http://example.com/piwik/?foo=bar"` - * @param array $additionalParamsToAdd If not empty the given parameters will be added to the query. - * - * @return string eg. `"foo=bar&foo2=bar2"` - * @api - */ - static public function getQueryFromUrl($url, array $additionalParamsToAdd) - { - $url = @parse_url($url); - $query = ''; - - if (!empty($url['query'])) { - $query .= $url['query']; - } - - if (!empty($additionalParamsToAdd)) { - if (!empty($query)) { - $query .= '&'; - } - - $query .= self::getQueryStringFromParameters($additionalParamsToAdd); - } - - return $query; - } - /** * Redirects the user to the referrer. If no referrer exists, the user is redirected * to the current URL without query string. diff --git a/core/UrlHelper.php b/core/UrlHelper.php index dbdb04dfd2..2ce26ba165 100644 --- a/core/UrlHelper.php +++ b/core/UrlHelper.php @@ -456,4 +456,41 @@ class UrlHelper 'keywords' => $key, ); } + + /** + * Returns the query part from any valid url and adds additional parameters to the query part if needed. + * + * @param string $url Any url eg `"http://example.com/piwik/?foo=bar"` + * @param array $additionalParamsToAdd If not empty the given parameters will be added to the query. + * + * @return string eg. `"foo=bar&foo2=bar2"` + * @api + */ + public static function getQueryFromUrl($url, array $additionalParamsToAdd = array()) + { + $url = @parse_url($url); + $query = ''; + + if (!empty($url['query'])) { + $query .= $url['query']; + } + + if (!empty($additionalParamsToAdd)) { + if (!empty($query)) { + $query .= '&'; + } + + $query .= Url::getQueryStringFromParameters($additionalParamsToAdd); + } + + return $query; + } + + public static function getHostFromUrl($url) + { + if (!UrlHelper::isLookLikeUrl($url)) { + $url = "http://" . $url; + } + return parse_url($url, PHP_URL_HOST); + } } diff --git a/tests/PHPUnit/Core/UrlHelperTest.php b/tests/PHPUnit/Core/UrlHelperTest.php index 0db58a7411..fd212b7a42 100644 --- a/tests/PHPUnit/Core/UrlHelperTest.php +++ b/tests/PHPUnit/Core/UrlHelperTest.php @@ -184,4 +184,48 @@ class Core_UrlHelperTest extends PHPUnit_Framework_TestCase include "DataFiles/SearchEngines.php";
include "DataFiles/Countries.php";
}
+
+
+ /**
+ * @group Core
+ */
+ public function test_getHostFromUrl()
+ {
+ $this->assertEquals('', UrlHelper::getHostFromUrl(''));
+ $this->assertEquals('', UrlHelper::getHostFromUrl(null));
+ $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost'));
+ $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost/path'));
+ $this->assertEquals('localhost', UrlHelper::getHostFromUrl('localhost/path'));
+ $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('sub.localhost/path'));
+ $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('http://sub.localhost/path/?query=test'));
+ }
+
+ /**
+ * @group Core
+ */
+ public function test_getQueryFromUrl_ShouldReturnEmtpyString_IfNoQuery()
+ {
+ $this->assertEquals('', UrlHelper::getQueryFromUrl('', array()));
+ $this->assertEquals('', UrlHelper::getQueryFromUrl(null, array()));
+ $this->assertEquals('', UrlHelper::getQueryFromUrl('http://localhost/path', array()));
+ }
+
+ /**
+ * @group Core
+ */
+ public function test_getQueryFromUrl_ShouldReturnOnlyTheQueryPartOfTheUrl_IfNoAdditionalParamsGiven()
+ {
+ $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array()));
+ $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('/?foo=bar&foo2=bar2&test[]=1', array()));
+ }
+
+ /**
+ * @group Core
+ */
+ public function test_getQueryFromUrl_ShouldAddAdditionalParams_IfGiven()
+ {
+ $this->assertEquals('foo=bar&foo2=bar2&test[]=1&add=foo', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array('add' => 'foo')));
+ $this->assertEquals('add=foo', UrlHelper::getQueryFromUrl('/', array('add' => 'foo')));
+ $this->assertEquals('add[]=foo&add[]=test', UrlHelper::getQueryFromUrl('/', array('add' => array('foo', 'test'))));
+ }
}
\ No newline at end of file diff --git a/tests/PHPUnit/Core/UrlTest.php b/tests/PHPUnit/Core/UrlTest.php index a83aa1ab3e..bf809994ed 100644 --- a/tests/PHPUnit/Core/UrlTest.php +++ b/tests/PHPUnit/Core/UrlTest.php @@ -1,6 +1,7 @@ <?php use Piwik\Config; use Piwik\Url; +use Piwik\UrlHelper; /** * Piwik - Open source web analytics @@ -280,33 +281,5 @@ class UrlTest extends PHPUnit_Framework_TestCase ); } - /** - * @group Core - */ - public function test_getQueryFromUrl_ShouldReturnEmtpyString_IfNoQuery() - { - $this->assertEquals('', Url::getQueryFromUrl('', array())); - $this->assertEquals('', Url::getQueryFromUrl(null, array())); - $this->assertEquals('', Url::getQueryFromUrl('http://localhost/path', array())); - } - - /** - * @group Core - */ - public function test_getQueryFromUrl_ShouldReturnOnlyTheQueryPartOfTheUrl_IfNoAdditionalParamsGiven() - { - $this->assertEquals('foo=bar&foo2=bar2&test[]=1', Url::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array())); - $this->assertEquals('foo=bar&foo2=bar2&test[]=1', Url::getQueryFromUrl('/?foo=bar&foo2=bar2&test[]=1', array())); - } - - /** - * @group Core - */ - public function test_getQueryFromUrl_ShouldAddAdditionalParams_IfGiven() - { - $this->assertEquals('foo=bar&foo2=bar2&test[]=1&add=foo', Url::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array('add' => 'foo'))); - $this->assertEquals('add=foo', Url::getQueryFromUrl('/', array('add' => 'foo'))); - $this->assertEquals('add[]=foo&add[]=test', Url::getQueryFromUrl('/', array('add' => array('foo', 'test')))); - } } diff --git a/tests/PHPUnit/Integration/Core/CliMultiTest.php b/tests/PHPUnit/Integration/Core/CliMultiTest.php index 99feb19f70..30569eab31 100644 --- a/tests/PHPUnit/Integration/Core/CliMultiTest.php +++ b/tests/PHPUnit/Integration/Core/CliMultiTest.php @@ -125,13 +125,7 @@ class Core_CliMultiTest extends IntegrationTestCase public function test_request_shouldDetectFinishOfRequest_IfNoParamsAreGiven() { $response = $this->cliMulti->request(array($this->completeUrl(''))); - $this->assertStringStartsWith('Error: no website was found', $response[0]); - - // performs a redirect - $response = $this->cliMulti->request(array('/')); - - $this->assertStringStartsWith('<!DOCTYPE html>', $response[0]); } public function test_request_shouldBeAbleToRenderARegularPageInPiwik() |