diff --git a/core/Columns/Updater.php b/core/Columns/Updater.php index c04779a81c23841efb76a17fa26dda86298280a5..d092cd308a47d9eba94719bb220554526a81656c 100644 --- a/core/Columns/Updater.php +++ b/core/Columns/Updater.php @@ -163,27 +163,52 @@ class Updater extends \Piwik\Updates $versions = array(); + $visitColumns = DbHelper::getTableColumns(Common::prefixTable('log_visit')); + $actionColumns = DbHelper::getTableColumns(Common::prefixTable('log_link_visit_action')); + $conversionColumns = DbHelper::getTableColumns(Common::prefixTable('log_conversion')); + foreach (VisitDimension::getAllDimensions() as $dimension) { - $columnName = $dimension->getColumnName(); - if ($columnName && $dimension->hasColumnType()) { - $versions['log_visit.' . $columnName] = $dimension->getVersion(); - } + $versions = self::mixinVersions($dimension, 'log_visit.', $visitColumns, $versions); } foreach (ActionDimension::getAllDimensions() as $dimension) { - $columnName = $dimension->getColumnName(); - if ($columnName && $dimension->hasColumnType()) { - $versions['log_link_visit_action.' . $columnName] = $dimension->getVersion(); - } + $versions = self::mixinVersions($dimension, 'log_link_visit_action.', $actionColumns, $versions); } foreach (ConversionDimension::getAllDimensions() as $dimension) { - $columnName = $dimension->getColumnName(); - if ($columnName && $dimension->hasColumnType()) { - $versions['log_conversion.' . $columnName] = $dimension->getVersion(); - } + $versions = self::mixinVersions($dimension, 'log_conversion.', $conversionColumns, $versions); + } + + return $versions; + } + + /** + * @param ActionDimension|ConversionDimension|VisitDimension $dimension + * @param string $componentPrefix + * @param array $columns + * @param array $versions + * @return array The modified versions array + */ + private static function mixinVersions($dimension, $componentPrefix, $columns, $versions) + { + $columnName = $dimension->getColumnName(); + + if (!$columnName || !$dimension->hasColumnType()) { + return $versions; } + $component = $componentPrefix . $columnName; + $version = $dimension->getVersion(); + + if (in_array($columnName, $columns) + && false === PiwikUpdater::getCurrentRecordedComponentVersion($component) + && self::wasDimensionMovedFromCoreToPlugin($component, $version)) { + PiwikUpdater::recordComponentSuccessfullyUpdated($component, $version); + return $versions; + } + + $versions[$component] = $version; + return $versions; } diff --git a/core/Updater.php b/core/Updater.php index 79754172d9fbfb16659be5af1df58572e9432ced..2e2d4cc6ab1625239212f8ee97e37f1051f3fc08 100644 --- a/core/Updater.php +++ b/core/Updater.php @@ -67,7 +67,7 @@ class Updater * @return false|string * @throws \Exception */ - private static function getCurrentRecordedComponentVersion($name) + public static function getCurrentRecordedComponentVersion($name) { try { $currentVersion = Option::get(self::getNameInOptionTable($name)); @@ -303,11 +303,6 @@ class Updater $currentVersion = self::getCurrentRecordedComponentVersion($name); if (ColumnUpdater::isDimensionComponent($name)) { - if ($currentVersion === false && ColumnUpdater::wasDimensionMovedFromCoreToPlugin($name, $version)) { - self::recordComponentSuccessfullyUpdated($name, $version); - continue; - } - $isComponentOutdated = $currentVersion !== $version; } else { // note: when versionCompare == 1, the version in the DB is newer, we choose to ignore diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml index 588a8e12b48db587079afc9627d07c3e24e5c3cd..cfcf4e9a0b6c71f38f19b831d7a44c654dac2d96 100644 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml @@ -131,14 +131,14 @@ <row> <type>dimension</type> <category>Visit</category> - <name>ExamplePlugin_DimensionName</name> + <name>Example Dimension</name> <segment>myConversionSegmentName</segment> <acceptedValues>Here you should explain which values are accepted/useful: Any number, for instance 1, 2, 3 , 99</acceptedValues> </row> <row> <type>dimension</type> <category>Visit</category> - <name>ExamplePlugin_DimensionName</name> + <name>Example Dimension</name> <segment>achievementPoints</segment> <acceptedValues>Here you should explain which values are accepted/useful: Any number, for instance 1, 2, 3 , 99</acceptedValues> </row> @@ -395,7 +395,7 @@ <row> <type>dimension</type> <category>Actions</category> - <name>ExamplePlugin_DimensionName</name> + <name>Example Dimension</name> <segment>keywords</segment> <acceptedValues>Here you should explain which values are accepted/useful: Any word, for instance MyKeyword1, MyKeyword2</acceptedValues> </row>