diff options
Diffstat (limited to 'core/Columns/DimensionsProvider.php')
-rw-r--r-- | core/Columns/DimensionsProvider.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/core/Columns/DimensionsProvider.php b/core/Columns/DimensionsProvider.php new file mode 100644 index 0000000000..cd9da962b6 --- /dev/null +++ b/core/Columns/DimensionsProvider.php @@ -0,0 +1,62 @@ +<?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\Columns; + +use Piwik\CacheId; +use Piwik\Cache as PiwikCache; + +class DimensionsProvider +{ + /** + * @param $dimensionId + * @return Dimension + */ + public function factory($dimensionId) + { + $listDimensions = self::getMapOfNameToDimension(); + + if (empty($listDimensions) || !is_array($listDimensions) || !$dimensionId || !array_key_exists($dimensionId, $listDimensions)) { + return null; + } + + return $listDimensions[$dimensionId]; + } + + private static function getMapOfNameToDimension() + { + $cacheId = CacheId::pluginAware('DimensionFactoryMap'); + + $cache = PiwikCache::getTransientCache(); + if ($cache->contains($cacheId)) { + $mapIdToDimension = $cache->fetch($cacheId); + } else { + $dimensions = new static(); + $dimensions = $dimensions->getAllDimensions(); + + $mapIdToDimension = array(); + foreach ($dimensions as $dimension) { + $mapIdToDimension[$dimension->getId()] = $dimension; + } + + $cache->save($cacheId, $mapIdToDimension); + } + + return $mapIdToDimension; + } + + /** + * Returns a list of all available dimensions. + * @return Dimension[] + */ + public function getAllDimensions() + { + return Dimension::getAllDimensions(); + } + +}
\ No newline at end of file |