コード例 #1
0
ファイル: Url.php プロジェクト: Doluci/tomatocart
 static function getArrayFromCurrentQueryString()
 {
     $queryString = Piwik_Url::getCurrentQueryString();
     $queryString = htmlspecialchars($queryString);
     $urlValues = Piwik_Common::getArrayFromQueryString($queryString);
     return $urlValues;
 }
コード例 #2
0
/**
 * Smarty {hiddenurl} function plugin.
 * Writes an input Hidden field for every parameter in the URL.
 * Useful when using GET forms because we need to print the current parameters 
 * in hidden input so they are to the next URL after the form is submitted.
 *
 * 
 * Examples:
 * <pre>
 * {hiddenurl module="API"} with a URL 'index.php?action=test&module=CoreHome' will output
 *  <input type=hidden name=action value=test>
 *  <input type=hidden name=module value=API>
 * </pre>
 * 
 * Set a value to null if you want this value not to be passed in the submitted form.
 * 
 * @param	array
 * @param	Smarty
 * @return	string
 */
function smarty_function_hiddenurl($params, &$smarty)
{
    $queryStringModified = Piwik_Url::getCurrentQueryStringWithParametersModified($params);
    $urlValues = Piwik_Common::getArrayFromQueryString($queryStringModified);
    $out = '';
    foreach ($urlValues as $name => $value) {
        $out .= '<input type="hidden" name="' . $name . '" value="' . $value . '" />';
    }
    return $out;
}
コード例 #3
0
/**
 * Rewrites the given URL so that it looks like an Admin URL.
 * 
 * @return string
 */
function smarty_modifier_urlRewriteAdminView($parameters)
{
    // replace module=X by moduleToLoad=X
    // replace action=Y by actionToLoad=Y
    if (!is_array($parameters)) {
        // if parameters is not an array, parse URL parameteres
        $parameters = Piwik_Common::getArrayFromQueryString(htmlspecialchars($parameters));
    }
    $parameters['moduleToLoad'] = $parameters['module'];
    unset($parameters['module']);
    if (isset($parameters['action'])) {
        $parameters['actionToLoad'] = $parameters['action'];
        unset($parameters['action']);
    } else {
        $parameters['actionToLoad'] = null;
    }
    $url = Piwik_Url::getCurrentQueryStringWithParametersModified($parameters);
    // add module=Home&action=showInContext
    $url = $url . '&module=AdminHome&action=showInContext';
    return $url;
}
コード例 #4
0
ファイル: Url.php プロジェクト: nnnnathann/piwik
 /**
  * If current URL is "http://example.org/dir1/dir2/index.php?param1=value1&param2=value2"
  * will return 
  *  array
  *    'param1' => string 'value1'
  *    'param2' => string 'value2'
  * 
  * @return array
  */
 static function getArrayFromCurrentQueryString()
 {
     $queryString = self::getCurrentQueryString();
     $urlValues = Piwik_Common::getArrayFromQueryString($queryString);
     return $urlValues;
 }
コード例 #5
0
ファイル: Common.test.php プロジェクト: nnnnathann/piwik
 function test_getArrayFromQueryString()
 {
     $expected = array('a' => false, 'b' => '', 'c' => '1', 'd' => array(false), 'e' => array(''), 'f' => array('a'), 'g' => array('b', 'c'));
     $string = 'a&b=&c=1&d[]&e[]=&f[]=a&g[]=b&g[]=c';
     $this->assertEqual(serialize(Piwik_Common::getArrayFromQueryString($string)), serialize($expected));
     $string = "?" . $string;
     $this->assertEqual(serialize(Piwik_Common::getArrayFromQueryString($string)), serialize($expected));
     $string = "";
     $this->assertEqual(serialize(Piwik_Common::getArrayFromQueryString($string)), serialize(array()));
 }
コード例 #6
0
ファイル: Action.php プロジェクト: BackupTheBerlios/oos-svn
	static public function excludeQueryParametersFromUrl($originalUrl, $idSite)
	{
		$website = Piwik_Common::getCacheWebsiteAttributes( $idSite );
		$originalUrl = Piwik_Common::unsanitizeInputValue($originalUrl);
		$originalUrl = self::cleanupString($originalUrl);
		$parsedUrl = @parse_url($originalUrl);
		if(empty($parsedUrl['query']))
		{
			return $originalUrl;
		}
		$campaignTrackingParameters = Piwik_Common::getCampaignParameters();
		
		$campaignTrackingParameters = array_merge(
				$campaignTrackingParameters[0], // campaign name parameters
				$campaignTrackingParameters[1] // campaign keyword parameters
		);	
				
		$excludedParameters = isset($website['excluded_parameters']) 
									? $website['excluded_parameters'] 
									: array();
									
		$parametersToExclude = array_merge( $excludedParameters, 
											self::$queryParametersToExclude,
											$campaignTrackingParameters);
											
		$parametersToExclude = array_map('strtolower', $parametersToExclude);
		$queryParameters = Piwik_Common::getArrayFromQueryString($parsedUrl['query']);
		
		$validQuery = '';
		$separator = '&';
		foreach($queryParameters as $name => $value)
		{
			if(!in_array(strtolower($name), $parametersToExclude))
			{
				if (is_array($value))
				{
					foreach ($value as $param)
					{
						if($param === false)
						{
							$validQuery .= $name.'[]'.$separator;
						}
						else
						{
							$validQuery .= $name.'[]='.$param.$separator;
						}
					}
				}
				else if($value === false)
				{
					$validQuery .= $name.$separator;
				}
				else
				{
					$validQuery .= $name.'='.$value.$separator;
				}
			}
		}
		$parsedUrl['query'] = substr($validQuery,0,-strlen($separator));
		$url = Piwik_Common::getParseUrlReverse($parsedUrl);
		printDebug('Excluding parameters "'.implode(',',$excludedParameters).'" from URL');
		if($originalUrl != $url)
		{
			printDebug(' Before was "'.$originalUrl.'"');
			printDebug(' After is "'.$url.'"');
		}
		return $url;
	}
コード例 #7
0
define('PIWIK_INCLUDE_PATH', '..');
define('PIWIK_ENABLE_DISPATCH', false);
define('PIWIK_ENABLE_ERROR_HANDLER', false);
define('PIWIK_ENABLE_SESSION_START', false);
require_once PIWIK_INCLUDE_PATH . "/index.php";
require_once PIWIK_INCLUDE_PATH . "/core/API/Request.php";

Piwik_FrontController::getInstance()->init();
$widgets = Piwik_GetWidgetsList();
foreach($widgets as $category => $widgetsInCategory)
{
	echo '<h2>'.$category . '</h2>';
	foreach($widgetsInCategory as $widget)
	{
		echo '<h3>'.$widget['name'].'</h3>';
		$widgetUrl = Piwik_Common::getArrayFromQueryString($url);
		$widgetUrl['moduleToWidgetize'] = $widget['parameters']['module'];
		$widgetUrl['actionToWidgetize'] = $widget['parameters']['action'];
		$parameters = $widget['parameters'];
		unset($parameters['module']);
		unset($parameters['action']);
		foreach($parameters as $name => $value)
		{
			if(is_array($value))
			{
				$value = current($value);
			}
			$widgetUrl[$name] = $value;
		}
		$widgetUrl = Piwik_Url::getQueryStringFromParameters($widgetUrl);
		
コード例 #8
0
 protected function _testApiUrl($testName, $apiId, $requestUrl)
 {
     $isLiveMustDeleteDates = strpos($requestUrl, 'Live.getLastVisits') !== false;
     $request = new Piwik_API_Request($requestUrl);
     $dateTime = Piwik_Common::getRequestVar('date', '', 'string', Piwik_Common::getArrayFromQueryString($requestUrl));
     list($processedFilePath, $expectedFilePath) = $this->getProcessedAndExpectedPaths($testName, $apiId);
     // Cast as string is important. For example when calling
     // with format=original, objects or php arrays can be returned.
     // we also hide errors to prevent the 'headers already sent' in the ResponseBuilder (which sends Excel headers multiple times eg.)
     $response = (string) $request->process();
     if ($isLiveMustDeleteDates) {
         $response = $this->removeAllLiveDatesFromXml($response);
     }
     // normalize date markups and document ID in pdf files :
     // - /LastModified (D:20120820204023+00'00')
     // - /CreationDate (D:20120820202226+00'00')
     // - /ModDate (D:20120820202226+00'00')
     // - /M (D:20120820202226+00'00')
     // - /ID [ <0f5cc387dc28c0e13e682197f485fe65> <0f5cc387dc28c0e13e682197f485fe65> ]
     $response = preg_replace('/\\(D:[0-9]{14}/', '(D:19700101000000', $response);
     $response = preg_replace('/\\/ID \\[ <.*> ]/', '', $response);
     file_put_contents($processedFilePath, $response);
     $expected = $this->loadExpectedFile($expectedFilePath);
     if (empty($expected)) {
         return;
     }
     // @todo This should not vary between systems AFAIK... "idsubdatatable can differ"
     $expected = $this->removeXmlElement($expected, 'idsubdatatable', $testNotSmallAfter = false);
     $response = $this->removeXmlElement($response, 'idsubdatatable', $testNotSmallAfter = false);
     if ($isLiveMustDeleteDates) {
         $expected = $this->removeAllLiveDatesFromXml($expected);
     } elseif (strpos($dateTime, 'last') !== false || strpos($dateTime, 'today') !== false || strpos($dateTime, 'now') !== false) {
         if (strpos($requestUrl, 'API.getProcessedReport') !== false) {
             $expected = $this->removePrettyDateFromXml($expected);
             $response = $this->removePrettyDateFromXml($response);
         }
         // avoid build failure when running just before midnight, generating visits in the future
         $expected = $this->removeXmlElement($expected, 'sum_daily_nb_uniq_visitors');
         $response = $this->removeXmlElement($response, 'sum_daily_nb_uniq_visitors');
         $expected = $this->removeXmlElement($expected, 'nb_visits_converted');
         $response = $this->removeXmlElement($response, 'nb_visits_converted');
         if (strpos($requestUrl, 'date=') !== false) {
             $regex = "/date=[-0-9,%Ca-z]+/";
             // need to remove %2C which is encoded ,
             $expected = preg_replace($regex, 'date=', $expected);
             $response = preg_replace($regex, 'date=', $response);
         }
     }
     // if idSubtable is in request URL, make sure idSubtable values are not in any urls
     if (strpos($requestUrl, 'idSubtable=') !== false) {
         $regex = "/idSubtable=[0-9]+/";
         $expected = preg_replace($regex, 'idSubtable=', $expected);
         $response = preg_replace($regex, 'idSubtable=', $response);
     }
     // is there a better way to test for the current DB type in use?
     if (Zend_Registry::get('db') instanceof Piwik_Db_Adapter_Mysqli) {
         // Do not test for TRUNCATE(SUM()) returning .00 on mysqli since this is not working
         // http://bugs.php.net/bug.php?id=54508
         $expected = str_replace('.00</revenue>', '</revenue>', $expected);
         $response = str_replace('.00</revenue>', '</revenue>', $response);
         $expected = str_replace('.1</revenue>', '</revenue>', $expected);
         $expected = str_replace('.11</revenue>', '</revenue>', $expected);
         $response = str_replace('.11</revenue>', '</revenue>', $response);
         $response = str_replace('.1</revenue>', '</revenue>', $response);
     }
     try {
         if (strpos($requestUrl, 'format=xml') !== false) {
             $this->assertXmlStringEqualsXmlString($expected, $response, "Differences with expected in: {$processedFilePath}");
         } else {
             $this->assertEquals(strlen($expected), strlen($response), "Differences with expected in: {$processedFilePath}");
             $this->assertEquals($expected, $response, "Differences with expected in: {$processedFilePath}");
         }
         if (trim($response) == trim($expected)) {
             file_put_contents($processedFilePath, $response);
         }
     } catch (Exception $ex) {
         $this->comparisonFailures[] = $ex;
     }
 }
コード例 #9
0
ファイル: CommonTest.php プロジェクト: nnnnathann/piwik
 /**
  * @group Core
  * @group Common
  * @group getArrayFromQueryString
  */
 public function testGetArrayFromQueryString()
 {
     $expected = array('a' => false, 'b' => '', 'c' => '1', 'd' => array(false), 'e' => array(''), 'f' => array('a'), 'g' => array('b', 'c'));
     $this->assertEquals(serialize($expected), serialize(Piwik_Common::getArrayFromQueryString('a&b=&c=1&d[]&e[]=&f[]=a&g[]=b&g[]=c')));
 }
コード例 #10
0
ファイル: Action.php プロジェクト: nomoto-ubicast/piwik
 protected function detectSiteSearchFromUrl($website, $parsedUrl)
 {
     $doRemoveSearchParametersFromUrl = false;
     $separator = '&';
     $count = $actionName = $categoryName = false;
     $keywordParameters = isset($website['sitesearch_keyword_parameters']) ? $website['sitesearch_keyword_parameters'] : array();
     $queryString = (!empty($parsedUrl['query']) ? $parsedUrl['query'] : '') . (!empty($parsedUrl['fragment']) ? $separator . $parsedUrl['fragment'] : '');
     $parameters = Piwik_Common::getArrayFromQueryString($queryString);
     self::reencodeParameters($parameters, $this->pageEncoding);
     // Detect Site Search
     foreach ($keywordParameters as $keywordParameter) {
         if (!empty($parameters[$keywordParameter])) {
             $actionName = $parameters[$keywordParameter];
             break;
         }
     }
     if (empty($actionName)) {
         return false;
     }
     $categoryParameters = isset($website['sitesearch_category_parameters']) ? $website['sitesearch_category_parameters'] : array();
     foreach ($categoryParameters as $categoryParameter) {
         if (!empty($parameters[$categoryParameter])) {
             $categoryName = $parameters[$categoryParameter];
             break;
         }
     }
     if (isset($parameters[self::PARAMETER_NAME_SEARCH_COUNT]) && $this->isValidSearchCount($parameters[self::PARAMETER_NAME_SEARCH_COUNT])) {
         $count = $parameters[self::PARAMETER_NAME_SEARCH_COUNT];
     }
     // Remove search kwd from URL
     if ($doRemoveSearchParametersFromUrl) {
         // @see excludeQueryParametersFromUrl()
         // Excluded the detected parameters from the URL
         $parametersToExclude = array($categoryParameter, $keywordParameter);
         $parsedUrl['query'] = self::getQueryStringWithExcludedParameters(Piwik_Common::getArrayFromQueryString($parsedUrl['query']), $parametersToExclude);
         $parsedUrl['fragment'] = self::getQueryStringWithExcludedParameters(Piwik_Common::getArrayFromQueryString($parsedUrl['fragment']), $parametersToExclude);
     }
     $url = Piwik_Common::getParseUrlReverse($parsedUrl);
     if (is_array($actionName)) {
         $actionName = reset($actionName);
     }
     $actionName = trim(urldecode($actionName));
     if (empty($actionName)) {
         return false;
     }
     if (is_array($categoryName)) {
         $categoryName = reset($categoryName);
     }
     $categoryName = trim(urldecode($categoryName));
     return array($url, $actionName, $categoryName, $count);
 }