diff options
Diffstat (limited to 'core/Plugin/LogTablesProvider.php')
-rw-r--r-- | core/Plugin/LogTablesProvider.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/core/Plugin/LogTablesProvider.php b/core/Plugin/LogTablesProvider.php new file mode 100644 index 0000000000..92afca14c7 --- /dev/null +++ b/core/Plugin/LogTablesProvider.php @@ -0,0 +1,65 @@ +<?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\Plugin; + +use Piwik\Container\StaticContainer; +use Piwik\Tracker\LogTable; + +class LogTablesProvider { + + /** + * @var Manager + */ + private $pluginManager; + + /** + * @var LogTable[] + */ + private $tablesCache; + + public function __construct(Manager $pluginManager) + { + $this->pluginManager = $pluginManager; + } + + /** + * Get an instance of a specific log table if such a log table exists. + * + * @param string $tableNameWithoutPrefix eg "log_visit" + * @return LogTable|null + */ + public function getLogTable($tableNameWithoutPrefix) + { + foreach ($this->getAllLogTables() as $table) { + if ($table->getName() === $tableNameWithoutPrefix) { + return $table; + } + } + } + + /** + * Get all log table instances defined by any activated and loaded plugin. The returned tables are not sorted in + * any order. + * @return LogTable[] + */ + public function getAllLogTables() + { + if (!isset($this->tablesCache)) { + $tables = $this->pluginManager->findMultipleComponents('Tracker', 'Piwik\\Tracker\\LogTable'); + + $this->tablesCache = array(); + foreach ($tables as $table) { + $this->tablesCache[] = StaticContainer::get($table); + } + } + + return $this->tablesCache; + } + +} |