Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2016-09-01 09:28:13 +0300
committerGitHub <noreply@github.com>2016-09-01 09:28:13 +0300
commit9efc7341f98058bbe37f70d0a93e9ea47d7caf4c (patch)
tree7373a34dc9dc8850f70c315d597933e3f03f0766
parentca0bc1077618db213ffa2e83959c2c47cec9357e (diff)
Remove deprecated events (#10455)
* remove some deprecated events * fix unit tests wants to establish a DB connection, read it from cache * fix possible bug * fix some integration tests * fix tests * fix category was not set * fix some tests * fix integration test * trying to fix pivot tests * add new events * update submodule
-rw-r--r--CHANGELOG.md24
-rw-r--r--core/Columns/Dimension.php85
-rw-r--r--core/Menu/MenuAdmin.php6
-rw-r--r--core/Menu/MenuTop.php6
-rw-r--r--core/Plugin/ReportsProvider.php37
-rw-r--r--core/Segment.php4
-rw-r--r--core/Tracker/Action.php12
-rw-r--r--core/Tracker/GoalManager.php31
-rw-r--r--core/Tracker/Visit.php34
-rw-r--r--core/Tracker/VisitorRecognizer.php2
-rw-r--r--core/ViewDataTable/Factory.php20
-rw-r--r--core/ViewDataTable/Manager.php37
-rw-r--r--plugins/API/SegmentMetadata.php48
-rw-r--r--plugins/CoreVisualizations/CoreVisualizations.php5
m---------plugins/CustomDimensions0
-rw-r--r--plugins/CustomVariables/Columns/Base.php26
-rw-r--r--plugins/CustomVariables/Columns/CustomVariableName.php1
-rw-r--r--plugins/CustomVariables/Columns/CustomVariableValue.php1
-rw-r--r--plugins/CustomVariables/CustomVariables.php52
-rw-r--r--plugins/CustomVariables/Segment.php21
-rw-r--r--plugins/CustomVariables/tests/Integration/CustomVariablesTest.php7
-rw-r--r--plugins/Goals/Goals.php66
-rw-r--r--plugins/Login/SessionInitializer.php39
-rw-r--r--tests/PHPUnit/Integration/Columns/DimensionTest.php10
-rw-r--r--tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php6
-rw-r--r--tests/resources/screenshot-override/override.css6
26 files changed, 228 insertions, 358 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 44e75d7235..51cf8d2525 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -49,7 +49,23 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
* The creation of settings has slightly changed to improve performance. It is now possible to create new settings via the method `$this->makeSetting()` see `Piwik\Plugins\ExampleSettingsPlugin\SystemSettings` for an example.
* It is no possible to define an introduction text for settings.
* If requesting multipe periods for one report, the keys that define the range are no longer translated. For example before 3.0 an API response may contain: `<result date="From 2010-02-01 to 2010-02-07">` which is now `<result date="2010-02-01,2010-02-07">`.
-
+* The following deprecated events have been removed as mentioned.
+ * `Tracker.existingVisitInformation` Use [dimensions](http://developer.piwik.org/guides/dimensions) instead of using `Tracker` events.
+ * `Tracker.newVisitorInformation`
+ * `Tracker.recordAction`
+ * `Tracker.recordEcommerceGoal`
+ * `Tracker.recordStandardGoals`
+ * `API.getSegmentDimensionMetadata` Define segments in [Dimension](http://developer.piwik.org/guides/dimensions) instead
+ * `Menu.Admin.addItems` Create a [Menu](http://developer.piwik.org/guides/menus) instead of using `Menu` events
+ * `Menu.Reporting.addItems`
+ * `Menu.Top.addItems`
+ * `ViewDataTable.addViewDataTable` Create a [Visualization](http://developer.piwik.org/guides/visualizing-report-data) instead
+ * `ViewDataTable.getDefaultType` Specify the default type in a [Report](http://developer.piwik.org/guides/custom-reports) instead
+ * `Goals.getReportsWithGoalMetrics` Specify a report has goal metrics in a [Report](http://developer.piwik.org/guides/custom-reports) instead
+ * `Login.authenticate` Create a custom SessionInitializer instead of using `Login` events
+ * `Login.initSession.end`
+ * `Login.authenticate.successful`
+
Read more about migrating a plugin from Piwik 2.X to Piwik 3 on our [Migration guide](https://developer.piwik.org/guides/migrate-piwik-2-to-3).
### Deprecations
@@ -67,6 +83,12 @@ Read more about migrating a plugin from Piwik 2.X to Piwik 3 on our [Migration g
* The JavaScript AjaxHelper has a new method `ajaxHelper.withTokenInUrl()` to easily send a token along a XHR. Within the Controller the existence of this token can be checked via `$this->checkTokenInUrl();` to prevent CSRF attacks.
* The new class `Piwik\Updater\Migration\Factory` lets you easily create migrations that can be executed during an update. For example database or plugin related migrations. To generate a new update with migrations execute `./console generate:update`.
* The new method `Piwik\Updater::executeMigration` lets you execute a single migration.
+* The following events have been added:
+ * `ViewDataTable.filterViewDataTable` let's you filter available visualizations
+ * `Dimension.addDimension` let's you add custom dimensions
+ * `Dimension.filterDimension` let's you filter any dimensions
+ * `Report.addReports` let's you add dynamically created reports
+ * `Report.filterReports` let's you filter any report
### New features
* New "Sparklines" visualization that let's you create a widget showing multiple sparklines
diff --git a/core/Columns/Dimension.php b/core/Columns/Dimension.php
index c89ae637a5..3f31073bea 100644
--- a/core/Columns/Dimension.php
+++ b/core/Columns/Dimension.php
@@ -9,12 +9,16 @@
namespace Piwik\Columns;
use Exception;
+use Piwik\CacheId;
+use Piwik\Piwik;
use Piwik\Plugin;
use Piwik\Plugin\ComponentFactory;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugin\Dimension\ConversionDimension;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Plugin\Segment;
+use Piwik\Cache as PiwikCache;
+use Piwik\Plugin\Manager as PluginManager;
/**
* @api
@@ -171,40 +175,71 @@ abstract class Dimension
*/
public static function getAllDimensions()
{
- $dimensions = array();
-
- foreach (VisitDimension::getAllDimensions() as $dimension) {
- $dimensions[] = $dimension;
- }
-
- foreach (ActionDimension::getAllDimensions() as $dimension) {
- $dimensions[] = $dimension;
- }
-
- foreach (ConversionDimension::getAllDimensions() as $dimension) {
- $dimensions[] = $dimension;
+ $cacheId = CacheId::pluginAware('AllDimensions');
+ $cache = PiwikCache::getTransientCache();
+
+ if (!$cache->contains($cacheId)) {
+ $plugins = PluginManager::getInstance()->getPluginsLoadedAndActivated();
+ $instances = array();
+
+ /**
+ * Triggered to add new dimensions that cannot be picked up automatically by the platform.
+ * This is useful if the plugin allows a user to create reports / dimensions dynamically. For example
+ * CustomDimensions or CustomVariables. There are a variable number of dimensions in this case and it
+ * wouldn't be really possible to create a report file for one of these dimensions as it is not known
+ * how many Custom Dimensions will exist.
+ *
+ * **Example**
+ *
+ * public function addDimension(&$dimensions)
+ * {
+ * $dimensions[] = new MyCustomDimension();
+ * }
+ *
+ * @param Dimension[] $reports An array of dimensions
+ */
+ Piwik::postEvent('Dimension.addDimensions', array(&$instances));
+
+ foreach ($plugins as $plugin) {
+ foreach (self::getDimensions($plugin) as $instance) {
+ $instances[] = $instance;
+ }
+ }
+
+ /**
+ * Triggered to filter / restrict dimensions.
+ *
+ * **Example**
+ *
+ * public function filterDimensions(&$dimensions)
+ * {
+ * foreach ($dimensions as $index => $dimension) {
+ * if ($dimension->getName() === 'Page URL') {}
+ * unset($dimensions[$index]); // remove this dimension
+ * }
+ * }
+ * }
+ *
+ * @param Dimension[] $dimensions An array of dimensions
+ */
+ Piwik::postEvent('Dimension.filterDimensions', array(&$instances));
+
+ $cache->save($cacheId, $instances);
}
- return $dimensions;
+ return $cache->fetch($cacheId);
}
public static function getDimensions(Plugin $plugin)
{
- $dimensions = array();
-
- foreach (VisitDimension::getDimensions($plugin) as $dimension) {
- $dimensions[] = $dimension;
- }
-
- foreach (ActionDimension::getDimensions($plugin) as $dimension) {
- $dimensions[] = $dimension;
- }
+ $dimensions = $plugin->findMultipleComponents('Columns', '\\Piwik\\Columns\\Dimension');
+ $instances = array();
- foreach (ConversionDimension::getDimensions($plugin) as $dimension) {
- $dimensions[] = $dimension;
+ foreach ($dimensions as $dimension) {
+ $instances[] = new $dimension();
}
- return $dimensions;
+ return $instances;
}
/**
diff --git a/core/Menu/MenuAdmin.php b/core/Menu/MenuAdmin.php
index e13dfe2c6f..48951171b2 100644
--- a/core/Menu/MenuAdmin.php
+++ b/core/Menu/MenuAdmin.php
@@ -128,12 +128,6 @@ class MenuAdmin extends MenuAbstract
{
if (!$this->menu) {
- /**
- * @ignore
- * @deprecated
- */
- Piwik::postEvent('Menu.Admin.addItems', array());
-
foreach ($this->getAllMenus() as $menu) {
$menu->configureAdminMenu($this);
}
diff --git a/core/Menu/MenuTop.php b/core/Menu/MenuTop.php
index 47a62640fb..bd97c1b84a 100644
--- a/core/Menu/MenuTop.php
+++ b/core/Menu/MenuTop.php
@@ -66,12 +66,6 @@ class MenuTop extends MenuAbstract
{
if (!$this->menu) {
- /**
- * @ignore
- * @deprecated
- */
- Piwik::postEvent('Menu.Top.addItems', array());
-
foreach ($this->getAllMenus() as $menu) {
$menu->configureTopMenu($this);
}
diff --git a/core/Plugin/ReportsProvider.php b/core/Plugin/ReportsProvider.php
index 1a00c0aa7c..f134009881 100644
--- a/core/Plugin/ReportsProvider.php
+++ b/core/Plugin/ReportsProvider.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugin;
use Piwik\CacheId;
use Piwik\Category\CategoryList;
+use Piwik\Piwik;
use Piwik\Plugin;
use Piwik\Cache as PiwikCache;
@@ -86,10 +87,46 @@ class ReportsProvider
if (!$cache->contains($cacheId)) {
$instances = array();
+ /**
+ * Triggered to add new reports that cannot be picked up automatically by the platform.
+ * This is useful if the plugin allows a user to create reports / dimensions dynamically. For example
+ * CustomDimensions or CustomVariables. There are a variable number of dimensions in this case and it
+ * wouldn't be really possible to create a report file for one of these dimensions as it is not known
+ * how many Custom Dimensions will exist.
+ *
+ * **Example**
+ *
+ * public function addReport(&$reports)
+ * {
+ * $reports[] = new MyCustomReport();
+ * }
+ *
+ * @param Report[] $reports An array of reports
+ */
+ Piwik::postEvent('Report.addReports', array(&$instances));
+
foreach ($reports as $report) {
$instances[] = new $report();
}
+ /**
+ * Triggered to filter / restrict reports.
+ *
+ * **Example**
+ *
+ * public function filterReports(&$reports)
+ * {
+ * foreach ($reports as $index => $report) {
+ * if ($report->getCategory() === 'Actions') {}
+ * unset($reports[$index]); // remove all reports having this action
+ * }
+ * }
+ * }
+ *
+ * @param Report[] $reports An array of reports
+ */
+ Piwik::postEvent('Report.filterReports', array(&$instances));
+
usort($instances, array($this, 'sort'));
$cache->save($cacheId, $instances);
diff --git a/core/Segment.php b/core/Segment.php
index 0ba687740e..81c661278d 100644
--- a/core/Segment.php
+++ b/core/Segment.php
@@ -21,10 +21,6 @@ use Piwik\Segment\SegmentExpression;
* select visits that have a specific browser or come from a specific
* country, or both.
*
- * Individual segment dimensions (such as `browserCode` and `countryCode`)
- * are defined by plugins. Read about the {@hook API.getSegmentDimensionMetadata}
- * event to learn more.
- *
* Plugins that aggregate data stored in Piwik can support segments by
* using this class when generating aggregation SQL queries.
*
diff --git a/core/Tracker/Action.php b/core/Tracker/Action.php
index 143e53ad57..8326df8deb 100644
--- a/core/Tracker/Action.php
+++ b/core/Tracker/Action.php
@@ -400,18 +400,6 @@ abstract class Action
$visitActionDebug = $visitAction;
$visitActionDebug['idvisitor'] = bin2hex($visitActionDebug['idvisitor']);
Common::printDebug($visitActionDebug);
-
- /**
- * Triggered after successfully persisting a [visit action entity](/guides/persistence-and-the-mysql-backend#visit-actions).
- *
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
- *
- * @param Action $tracker Action The Action tracker instance.
- * @param array $visitAction The visit action entity that was persisted. Read
- * [this](/guides/persistence-and-the-mysql-backend#visit-actions) to see what it contains.
- * @deprecated
- */
- Piwik::postEvent('Tracker.recordAction', array($trackerAction = $this, $visitAction));
}
public function writeDebugInfo()
diff --git a/core/Tracker/GoalManager.php b/core/Tracker/GoalManager.php
index 3e1312fef3..3721957732 100644
--- a/core/Tracker/GoalManager.php
+++ b/core/Tracker/GoalManager.php
@@ -342,22 +342,6 @@ class GoalManager
if ($recorded) {
$this->recordEcommerceItems($conversion, $items);
}
-
- /**
- * Triggered after successfully persisting an ecommerce conversion.
- *
- * _Note: Subscribers should be wary of doing any expensive computation here as it may slow
- * the tracker down._
- *
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
- *
- * @param array $conversion The conversion entity that was just persisted. See what information
- * it contains [here](/guides/persistence-and-the-mysql-backend#conversions).
- * @param array $visitInformation The visit entity that we are tracking a conversion for. See what
- * information it contains [here](/guides/persistence-and-the-mysql-backend#visits).
- * @deprecated
- */
- Piwik::postEvent('Tracker.recordEcommerceGoal', array($conversion, $visitProperties->getProperties()));
}
/**
@@ -693,20 +677,6 @@ class GoalManager
$conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onGoalConversion', $visitor, $action, $conversion);
$this->insertNewConversion($conversion, $visitProperties->getProperties(), $request);
-
- /**
- * Triggered after successfully recording a non-ecommerce conversion.
- *
- * _Note: Subscribers should be wary of doing any expensive computation here as it may slow
- * the tracker down._
- *
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
- *
- * @param array $conversion The conversion entity that was just persisted. See what information
- * it contains [here](/guides/persistence-and-the-mysql-backend#conversions).
- * @deprecated
- */
- Piwik::postEvent('Tracker.recordStandardGoals', array($conversion));
}
}
@@ -732,6 +702,7 @@ class GoalManager
* information it contains [here](/guides/persistence-and-the-mysql-backend#visits).
* @param \Piwik\Tracker\Request $request An object describing the tracking request being processed.
* @deprecated
+ * @ignore
*/
Piwik::postEvent('Tracker.newConversionInformation', array(&$conversion, $visitInformation, $request));
diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php
index 9de1490424..3d306a71f8 100644
--- a/core/Tracker/Visit.php
+++ b/core/Tracker/Visit.php
@@ -211,22 +211,6 @@ class Visit implements VisitInterface
$this->visitProperties->setProperty($name, $value);
}
- /**
- * Triggered before a [visit entity](/guides/persistence-and-the-mysql-backend#visits) is updated when
- * tracking an action for an existing visit.
- *
- * This event can be used to modify the visit properties that will be updated before the changes
- * are persisted.
- *
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
- *
- * @param array &$valuesToUpdate Visit entity properties that will be updated.
- * @param array $visit The entire visit entity. Read [this](/guides/persistence-and-the-mysql-backend#visits)
- * to see what it contains.
- * @deprecated
- */
- Piwik::postEvent('Tracker.existingVisitInformation', array(&$valuesToUpdate, $this->visitProperties->getProperties()));
-
foreach ($this->requestProcessors as $processor) {
$processor->onExistingVisit($valuesToUpdate, $this->visitProperties, $this->request);
}
@@ -278,24 +262,6 @@ class Visit implements VisitInterface
$this->triggerHookOnDimensions($dimensions, 'onConvertedVisit');
}
- $properties = &$this->visitProperties->getProperties();
-
- /**
- * Triggered before a new [visit entity](/guides/persistence-and-the-mysql-backend#visits) is persisted.
- *
- * This event can be used to modify the visit entity or add new information to it before it is persisted.
- * The UserCountry plugin, for example, uses this event to add location information for each visit.
- *
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
- *
- * @param array &$visit The visit entity. Read [this](/guides/persistence-and-the-mysql-backend#visits) to see
- * what information it contains.
- * @param \Piwik\Tracker\Request $request An object describing the tracking request being processed.
- *
- * @deprecated
- */
- Piwik::postEvent('Tracker.newVisitorInformation', array(&$properties, $this->request));
-
foreach ($this->requestProcessors as $processor) {
$processor->onNewVisit($this->visitProperties, $this->request);
}
diff --git a/core/Tracker/VisitorRecognizer.php b/core/Tracker/VisitorRecognizer.php
index d5f5e3c502..a21ea063e0 100644
--- a/core/Tracker/VisitorRecognizer.php
+++ b/core/Tracker/VisitorRecognizer.php
@@ -249,7 +249,7 @@ class VisitorRecognizer
*
* This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
*
- * @deprecated
+ * @deprecated
*/
$this->eventDispatcher->postEvent('Tracker.getVisitFieldsToPersist', array(&$fields));
diff --git a/core/ViewDataTable/Factory.php b/core/ViewDataTable/Factory.php
index c20bf0fb97..90a44281e4 100644
--- a/core/ViewDataTable/Factory.php
+++ b/core/ViewDataTable/Factory.php
@@ -190,8 +190,7 @@ class Factory
return $report->getDefaultTypeViewDataTable();
}
- $defaultViewTypes = self::getDefaultTypeViewDataTable();
- return isset($defaultViewTypes[$apiAction]) ? $defaultViewTypes[$apiAction] : false;
+ return false;
}
/**
@@ -210,23 +209,6 @@ class Factory
}
/**
- * Returns a list of default viewDataTables ID to use when determining which visualization to use for multiple
- * reports.
- */
- private static function getDefaultTypeViewDataTable()
- {
- if (null === self::$defaultViewTypes) {
- self::$defaultViewTypes = array();
- /**
- * @ignore
- */
- Piwik::postEvent('ViewDataTable.getDefaultType', array(&self::$defaultViewTypes));
- }
-
- return self::$defaultViewTypes;
- }
-
- /**
* @param string $klass
* @param string $controllerAction
* @param string $apiAction
diff --git a/core/ViewDataTable/Manager.php b/core/ViewDataTable/Manager.php
index 23d5f46790..d087ad7c70 100644
--- a/core/ViewDataTable/Manager.php
+++ b/core/ViewDataTable/Manager.php
@@ -78,25 +78,6 @@ class Manager
/** @var string[] $visualizations */
$visualizations = PluginManager::getInstance()->findMultipleComponents('Visualizations', $klassToExtend);
- /**
- * Triggered when gathering all available DataTable visualizations.
- *
- * Plugins that want to expose new DataTable visualizations should subscribe to
- * this event and add visualization class names to the incoming array.
- *
- * **Example**
- *
- * public function addViewDataTable(&$visualizations)
- * {
- * $visualizations[] = 'Piwik\\Plugins\\MyPlugin\\MyVisualization';
- * }
- *
- * @param array &$visualizations The array of all available visualizations.
- * @ignore
- * @deprecated since 2.5.0 Place visualization in a "Visualizations" directory instead.
- */
- Piwik::postEvent('ViewDataTable.addViewDataTable', array(&$visualizations));
-
$result = array();
foreach ($visualizations as $viz) {
@@ -117,6 +98,24 @@ class Manager
$result[$vizId] = $viz;
}
+ /**
+ * Triggered to filter available DataTable visualizations.
+ *
+ * Plugins that want to disable certain visualizations should subscribe to
+ * this event and remove visualizations from the incoming array.
+ *
+ * **Example**
+ *
+ * public function filterViewDataTable(&$visualizations)
+ * {
+ * unset($visualizations[HtmlTable::ID]);
+ * }
+ *
+ * @param array &$visualizations An array of all available visualizations indexed by visualization ID.
+ * @since Piwik 3.0.0
+ */
+ Piwik::postEvent('ViewDataTable.filterViewDataTable', array(&$result));
+
$cache->save($cacheId, $result);
return $result;
diff --git a/plugins/API/SegmentMetadata.php b/plugins/API/SegmentMetadata.php
index 4be514978c..fbe73a774f 100644
--- a/plugins/API/SegmentMetadata.php
+++ b/plugins/API/SegmentMetadata.php
@@ -27,54 +27,6 @@ class SegmentMetadata
}
}
- /**
- * Triggered when gathering all available segment dimensions.
- *
- * This event can be used to make new segment dimensions available.
- *
- * **Example**
- *
- * public function getSegmentsMetadata(&$segments, $idSites)
- * {
- * $segments[] = array(
- * 'type' => 'dimension',
- * 'category' => Piwik::translate('General_Visit'),
- * 'name' => 'General_VisitorIP',
- * 'segment' => 'visitIp',
- * 'acceptedValues' => '13.54.122.1, etc.',
- * 'sqlSegment' => 'log_visit.location_ip',
- * 'sqlFilter' => array('Piwik\IP', 'P2N'),
- * 'permission' => $isAuthenticatedWithViewAccess,
- * );
- * }
- *
- * @param array &$dimensions The list of available segment dimensions. Append to this list to add
- * new segments. Each element in this list must contain the
- * following information:
- *
- * - **type**: Either `'metric'` or `'dimension'`. `'metric'` means
- * the value is a numeric and `'dimension'` means it is
- * a string. Also, `'metric'` values will be displayed
- * under **Visit (metrics)** in the Segment Editor.
- * - **category**: The segment category name. This can be an existing
- * segment category visible in the segment editor.
- * - **name**: The pretty name of the segment. Can be a translation token.
- * - **segment**: The segment name, eg, `'visitIp'` or `'searches'`.
- * - **acceptedValues**: A string describing one or two exacmple values, eg
- * `'13.54.122.1, etc.'`.
- * - **sqlSegment**: The table column this segment will segment by.
- * For example, `'log_visit.location_ip'` for the
- * **visitIp** segment.
- * - **sqlFilter**: A PHP callback to apply to segment values before
- * they are used in SQL.
- * - **permission**: True if the current user has view access to this
- * segment, false if otherwise.
- * @param array $idSites The list of site IDs we're getting the available segments
- * for. Some segments (such as Goal segments) depend on the
- * site.
- */
- Piwik::postEvent('API.getSegmentDimensionMetadata', array(&$segments, $idSites));
-
$segments[] = array(
'type' => 'dimension',
'category' => Piwik::translate('General_Visit'),
diff --git a/plugins/CoreVisualizations/CoreVisualizations.php b/plugins/CoreVisualizations/CoreVisualizations.php
index 0aec35fb3e..b832903228 100644
--- a/plugins/CoreVisualizations/CoreVisualizations.php
+++ b/plugins/CoreVisualizations/CoreVisualizations.php
@@ -9,7 +9,6 @@
namespace Piwik\Plugins\CoreVisualizations;
-use Piwik\Common;
use Piwik\ViewDataTable\Manager as ViewDataTableManager;
require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/JqplotDataGenerator.php';
@@ -21,7 +20,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/JqplotDataGenerat
class CoreVisualizations extends \Piwik\Plugin
{
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
@@ -29,7 +28,7 @@ class CoreVisualizations extends \Piwik\Plugin
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
- 'UsersManager.deleteUser' => 'deleteUser'
+ 'UsersManager.deleteUser' => 'deleteUser',
);
}
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject 8e088b3530dd85d2632ab2e264d2cb7492532ba
+Subproject 7bbbfd673469bea91c9164e3a4feeee1368e6ff
diff --git a/plugins/CustomVariables/Columns/Base.php b/plugins/CustomVariables/Columns/Base.php
index 4c6a4ea542..4cebcb0688 100644
--- a/plugins/CustomVariables/Columns/Base.php
+++ b/plugins/CustomVariables/Columns/Base.php
@@ -8,10 +8,9 @@
namespace Piwik\Plugins\CustomVariables\Columns;
-use Piwik\DataTable;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\VisitDimension;
-use Piwik\Plugin\Segment;
+use Piwik\Plugins\CustomVariables\Segment;
use Piwik\Plugins\CustomVariables\CustomVariables;
class Base extends VisitDimension
@@ -24,7 +23,6 @@ class Base extends VisitDimension
$segment->setType('dimension');
$segment->setSegment('customVariable' . $segmentNameSuffix);
$segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')');
- $segment->setCategory('CustomVariables_CustomVariables');
$segment->setUnionOfSegments($this->getSegmentColumns('customVariable' . $segmentNameSuffix, $numCustomVariables));
$this->addSegment($segment);
@@ -32,9 +30,29 @@ class Base extends VisitDimension
$segment->setType('dimension');
$segment->setSegment('customVariablePage' . $segmentNameSuffix);
$segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')');
- $segment->setCategory('CustomVariables_CustomVariables');
$segment->setUnionOfSegments($this->getSegmentColumns('customVariablePage' . $segmentNameSuffix, $numCustomVariables));
$this->addSegment($segment);
+
+ $segmentSuffix = 'v';
+ if (strtolower($segmentNameSuffix) === 'name') {
+ $segmentSuffix = 'k';
+ }
+
+ for ($i = 1; $i <= $numCustomVariables; $i++) {
+ $segment = new Segment();
+ $segment->setSegment('customVariable' . $segmentNameSuffix . $i);
+ $segment->setSqlSegment('log_visit.custom_var_' . $segmentSuffix . $i);
+ $segment->setName(Piwik::translate('CustomVariables_ColumnCustomVariable' . $segmentNameSuffix) . ' ' . $i
+ . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')');
+ $this->addSegment($segment);
+
+ $segment = new Segment();
+ $segment->setSegment('customVariablePage' . $segmentNameSuffix . $i);
+ $segment->setSqlSegment('log_link_visit_action.custom_var_' . $segmentSuffix . $i);
+ $segment->setName(Piwik::translate('CustomVariables_ColumnCustomVariable' . $segmentNameSuffix) . ' ' . $i
+ . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')');
+ $this->addSegment($segment);
+ }
}
private function getSegmentColumns($column, $numCustomVariables)
diff --git a/plugins/CustomVariables/Columns/CustomVariableName.php b/plugins/CustomVariables/Columns/CustomVariableName.php
index b42f2e8ae7..982ce1e264 100644
--- a/plugins/CustomVariables/Columns/CustomVariableName.php
+++ b/plugins/CustomVariables/Columns/CustomVariableName.php
@@ -21,4 +21,5 @@ class CustomVariableName extends Base
{
return Piwik::translate('CustomVariables_ColumnCustomVariableName');
}
+
} \ No newline at end of file
diff --git a/plugins/CustomVariables/Columns/CustomVariableValue.php b/plugins/CustomVariables/Columns/CustomVariableValue.php
index a565a8136c..10c146f2e1 100644
--- a/plugins/CustomVariables/Columns/CustomVariableValue.php
+++ b/plugins/CustomVariables/Columns/CustomVariableValue.php
@@ -21,4 +21,5 @@ class CustomVariableValue extends Base
{
return Piwik::translate('CustomVariables_ColumnCustomVariableValue');
}
+
} \ No newline at end of file
diff --git a/plugins/CustomVariables/CustomVariables.php b/plugins/CustomVariables/CustomVariables.php
index 9059482c33..78a779e5f9 100644
--- a/plugins/CustomVariables/CustomVariables.php
+++ b/plugins/CustomVariables/CustomVariables.php
@@ -8,24 +8,22 @@
*/
namespace Piwik\Plugins\CustomVariables;
-use Piwik\ArchiveProcessor;
-use Piwik\Piwik;
use Piwik\Tracker\Cache;
-use Piwik\Tracker;
class CustomVariables extends \Piwik\Plugin
{
+ const MAX_NUM_CUSTOMVARS_CACHEKEY = 'CustomVariables.MaxNumCustomVariables';
+
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
- 'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
- 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
);
}
@@ -77,7 +75,7 @@ class CustomVariables extends \Piwik\Plugin
public static function getNumUsableCustomVariables()
{
$cache = Cache::getCacheGeneral();
- $cacheKey = 'CustomVariables.NumUsableCustomVariables';
+ $cacheKey = self::MAX_NUM_CUSTOMVARS_CACHEKEY;
if (!array_key_exists($cacheKey, $cache)) {
@@ -107,46 +105,6 @@ class CustomVariables extends \Piwik\Plugin
return $cache[$cacheKey];
}
- public function getSegmentsMetadata(&$segments)
- {
- $maxCustomVariables = self::getNumUsableCustomVariables();
-
- for ($i = 1; $i <= $maxCustomVariables; $i++) {
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'CustomVariables_CustomVariables',
- 'name' => Piwik::translate('CustomVariables_ColumnCustomVariableName') . ' ' . $i
- . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')',
- 'segment' => 'customVariableName' . $i,
- 'sqlSegment' => 'log_visit.custom_var_k' . $i,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'CustomVariables_CustomVariables',
- 'name' => Piwik::translate('CustomVariables_ColumnCustomVariableValue') . ' ' . $i
- . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')',
- 'segment' => 'customVariableValue' . $i,
- 'sqlSegment' => 'log_visit.custom_var_v' . $i,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'CustomVariables_CustomVariables',
- 'name' => Piwik::translate('CustomVariables_ColumnCustomVariableName') . ' ' . $i
- . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')',
- 'segment' => 'customVariablePageName' . $i,
- 'sqlSegment' => 'log_link_visit_action.custom_var_k' . $i,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'CustomVariables_CustomVariables',
- 'name' => Piwik::translate('CustomVariables_ColumnCustomVariableValue') . ' ' . $i
- . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')',
- 'segment' => 'customVariablePageValue' . $i,
- 'sqlSegment' => 'log_link_visit_action.custom_var_v' . $i,
- );
- }
- }
-
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = 'CustomVariables_CustomVariables';
diff --git a/plugins/CustomVariables/Segment.php b/plugins/CustomVariables/Segment.php
new file mode 100644
index 0000000000..fc1c3fd0a7
--- /dev/null
+++ b/plugins/CustomVariables/Segment.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\CustomVariables;
+
+/**
+ * CustomVariables segment base class
+ */
+class Segment extends \Piwik\Plugin\Segment
+{
+ protected function init()
+ {
+ $this->setCategory('CustomVariables_CustomVariables');
+ }
+}
+
diff --git a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
index e24bbf0090..421b19bd0d 100644
--- a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
+++ b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
@@ -6,7 +6,8 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-namespace Piwik\Plugins\CustomVariables\tests;
+namespace Piwik\Plugins\CustomVariables\tests\Integration;
+
use Piwik\Plugins\CustomVariables\CustomVariables;
use Piwik\Plugins\CustomVariables\Model;
use Piwik\Tracker\Cache;
@@ -30,13 +31,13 @@ class CustomVariablesTest extends IntegrationTestCase
CustomVariables::getNumUsableCustomVariables();
$cache = Cache::getCacheGeneral();
- $this->assertSame(5, $cache['CustomVariables.NumUsableCustomVariables']);
+ $this->assertSame(5, $cache[CustomVariables::MAX_NUM_CUSTOMVARS_CACHEKEY]);
}
public function test_getNumUsableCustomVariables_ShouldReadFromCacheIfPossible()
{
$cache = Cache::getCacheGeneral();
- $cache['CustomVariables.NumUsableCustomVariables'] = 10;
+ $cache[CustomVariables::MAX_NUM_CUSTOMVARS_CACHEKEY] = 10;
Cache::setCacheGeneral($cache);
$this->assertSame(10, CustomVariables::getNumUsableCustomVariables());
diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php
index b478be5b16..0d228cadb6 100644
--- a/plugins/Goals/Goals.php
+++ b/plugins/Goals/Goals.php
@@ -67,7 +67,7 @@ class Goals extends \Piwik\Plugin
}
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
@@ -77,7 +77,6 @@ class Goals extends \Piwik\Plugin
'Tracker.Cache.getSiteAttributes' => 'fetchGoalsFromDb',
'API.getReportMetadata.end' => 'getReportMetadataEnd',
'SitesManager.deleteSite.end' => 'deleteSiteGoals',
- 'Goals.getReportsWithGoalMetrics' => 'getActualReportsWithGoalMetrics',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'Category.addSubcategories' => 'addSubcategories'
@@ -194,67 +193,28 @@ class Goals extends \Piwik\Plugin
'name' => $report->getName(),
'module' => $report->getModule(),
'action' => $report->getAction(),
+ 'parameters' => $report->getParameters()
);
}
}
- /**
- * Triggered when gathering all reports that contain Goal metrics. The list of reports
- * will be displayed on the left column of the bottom of every _Goals_ page.
- *
- * If plugins define reports that contain goal metrics (such as **conversions** or **revenue**),
- * they can use this event to make sure their reports can be viewed on Goals pages.
- *
- * **Example**
- *
- * public function getReportsWithGoalMetrics(&$reports)
- * {
- * $reports[] = array(
- * 'category' => Piwik::translate('MyPlugin_myReportCategory'),
- * 'name' => Piwik::translate('MyPlugin_myReportDimension'),
- * 'module' => 'MyPlugin',
- * 'action' => 'getMyReport'
- * );
- * }
- *
- * @param array &$reportsWithGoals The list of arrays describing reports that have Goal metrics.
- * Each element of this array must be an array with the following
- * properties:
- *
- * - **category**: The report category. This should be a translated string.
- * - **name**: The report's translated name.
- * - **module**: The plugin the report is in, eg, `'UserCountry'`.
- * - **action**: The API method of the report, eg, `'getCountry'`.
- * @ignore
- * @deprecated since 2.5.0
- */
- Piwik::postEvent('Goals.getReportsWithGoalMetrics', array(&$reportsWithGoals));
-
- return $reportsWithGoals;
- }
-
- /**
- * This function executes when the 'Goals.getReportsWithGoalMetrics' event fires. It
- * adds the 'visits to conversion' report metadata to the list of goal reports so
- * this report will be displayed.
- */
- public function getActualReportsWithGoalMetrics(&$dimensions)
- {
$reportWithGoalMetrics = array(
array('category' => 'General_Visit',
- 'name' => Piwik::translate('Goals_VisitsUntilConv'),
- 'module' => 'Goals',
- 'action' => 'getVisitsUntilConversion',
- 'viewDataTable' => 'table',
+ 'name' => Piwik::translate('Goals_VisitsUntilConv'),
+ 'module' => 'Goals',
+ 'action' => 'getVisitsUntilConversion',
+ 'viewDataTable' => 'table',
),
array('category' => 'General_Visit',
- 'name' => Piwik::translate('Goals_DaysToConv'),
- 'module' => 'Goals',
- 'action' => 'getDaysToConversion',
- 'viewDataTable' => 'table',
+ 'name' => Piwik::translate('Goals_DaysToConv'),
+ 'module' => 'Goals',
+ 'action' => 'getDaysToConversion',
+ 'viewDataTable' => 'table',
)
);
- $dimensions = array_merge($dimensions, $reportWithGoalMetrics);
+ $reportsWithGoals = array_merge($reportsWithGoals, $reportWithGoalMetrics);
+
+ return $reportsWithGoals;
}
public function getJsFiles(&$jsFiles)
diff --git a/plugins/Login/SessionInitializer.php b/plugins/Login/SessionInitializer.php
index a3c5f9a648..72013d2b8c 100644
--- a/plugins/Login/SessionInitializer.php
+++ b/plugins/Login/SessionInitializer.php
@@ -118,11 +118,6 @@ class SessionInitializer
} else {
$this->processSuccessfulSession($authResult, $rememberMe);
}
-
- /**
- * @deprecated Create a custom SessionInitializer instead.
- */
- Piwik::postEvent('Login.initSession.end');
}
/**
@@ -136,29 +131,6 @@ class SessionInitializer
*/
protected function doAuthenticateSession(AuthInterface $auth)
{
- $login = $auth->getLogin();
- $tokenAuthSecret = null;
-
- try {
- $tokenAuthSecret = $auth->getTokenAuthSecret();
- } catch (Exception $ex) {
- Log::debug("SessionInitializer::doAuthenticateSession: token_auth secret for %s not available before user"
- . " is authenticated.", $login);
- }
-
- $tokenAuth = empty($tokenAuthSecret) ? null : $this->usersManagerAPI->getTokenAuth($login, $tokenAuthSecret);
-
- /**
- * @deprecated Create a custom SessionInitializer instead.
- */
- Piwik::postEvent(
- 'Login.authenticate',
- array(
- $auth->getLogin(),
- $tokenAuth
- )
- );
-
return $auth->authenticate();
}
@@ -201,17 +173,6 @@ class SessionInitializer
*/
protected function processSuccessfulSession(AuthResult $authResult, $rememberMe)
{
- /**
- * @deprecated Create a custom SessionInitializer instead.
- */
- Piwik::postEvent(
- 'Login.authenticate.successful',
- array(
- $authResult->getIdentity(),
- $authResult->getTokenAuth()
- )
- );
-
$cookie = $this->getAuthCookie($rememberMe);
$cookie->set('login', $authResult->getIdentity());
$cookie->set('token_auth', $this->getHashTokenAuth($authResult->getIdentity(), $authResult->getTokenAuth()));
diff --git a/tests/PHPUnit/Integration/Columns/DimensionTest.php b/tests/PHPUnit/Integration/Columns/DimensionTest.php
index 990032af18..0e51177673 100644
--- a/tests/PHPUnit/Integration/Columns/DimensionTest.php
+++ b/tests/PHPUnit/Integration/Columns/DimensionTest.php
@@ -102,9 +102,9 @@ namespace Piwik\Tests\Integration\Columns
$this->assertSame('', $this->dimension->getName());
}
- public function test_getAllDimensions_shouldReturnActionVisitAndConversionDimensions()
+ public function test_getAllDimensions_shouldReturnAllKindOfDimensions()
{
- Manager::getInstance()->loadPlugins(array('Actions', 'Events', 'DevicesDetector', 'Goals'));
+ Manager::getInstance()->loadPlugins(array('Actions', 'Events', 'DevicesDetector', 'Goals', 'CustomVariables'));
$dimensions = Dimension::getAllDimensions();
@@ -113,6 +113,7 @@ namespace Piwik\Tests\Integration\Columns
$foundConversion = false;
$foundVisit = false;
$foundAction = false;
+ $foundNormal = false;
foreach ($dimensions as $dimension) {
if ($dimension instanceof ConversionDimension) {
@@ -121,16 +122,19 @@ namespace Piwik\Tests\Integration\Columns
$foundAction = true;
} else if ($dimension instanceof VisitDimension) {
$foundVisit = true;
+ } else if ($dimension instanceof Dimension) {
+ $foundNormal = true;
} else {
$this->fail('Unexpected dimension class found');
}
- $this->assertRegExp('/Piwik.Plugins.(Actions|Events|DevicesDetector|Goals).Columns/', get_class($dimension));
+ $this->assertRegExp('/Piwik.Plugins.(Actions|Events|DevicesDetector|Goals|CustomVariables).Columns/', get_class($dimension));
}
$this->assertTrue($foundConversion);
$this->assertTrue($foundAction);
$this->assertTrue($foundVisit);
+ $this->assertTrue($foundNormal);
}
public function test_getDimensions_shouldReturnAllKindOfDimensionsThatBelongToASpecificPlugin()
diff --git a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
index 94fd174836..967c77a862 100644
--- a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
+++ b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
@@ -8,6 +8,8 @@
namespace Piwik\Tests\Core\DataTable\Filter;
use Piwik\API\Proxy;
+use Piwik\Plugins\CustomVariables\CustomVariables;
+use Piwik\Tracker\Cache;
use Piwik\Config;
use Piwik\DataTable;
use Piwik\DataTable\Filter\PivotByDimension;
@@ -223,6 +225,8 @@ class PivotByDimensionTest extends IntegrationTestCase
public function test_filter_CorrectlyCreatesPivotTable_WhenSubtablesHaveNoRows()
{
+ Cache::setCacheGeneral(array(CustomVariables::MAX_NUM_CUSTOMVARS_CACHEKEY => 5));
+
$this->loadPlugins('Referrers', 'UserCountry', 'CustomVariables');
$table = $this->getTableToFilter(false);
@@ -236,6 +240,8 @@ class PivotByDimensionTest extends IntegrationTestCase
array('label' => 'row 2'),
array('label' => 'row 3')
);
+
+ Cache::clearCacheGeneral();
$this->assertTableRowsEquals($expectedRows, $table);
}
diff --git a/tests/resources/screenshot-override/override.css b/tests/resources/screenshot-override/override.css
index 111b83f73c..a332017bdb 100644
--- a/tests/resources/screenshot-override/override.css
+++ b/tests/resources/screenshot-override/override.css
@@ -37,12 +37,16 @@ body > .widget {
border-style: solid;
}
+.loadingPiwik {
+ display: none !important;
+}
+
/* do not display RSS feed widget's contents */
#widgetExampleRssWidgetrssPiwik .rss {
display:none;
}
-body * {
+html body div *, body * {
-webkit-transition: none !important;
transition: none !important;
-webkit-animation: none !important;