File size: 5,116 Bytes
9046370 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | <?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\CustomVariables;
use Piwik\Tracker\Cache;
class CustomVariables extends \Piwik\Plugin
{
public const MAX_NUM_CUSTOMVARS_CACHEKEY = 'CustomVariables.MaxNumCustomVariables';
/**
* @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Dimension.addDimensions' => 'addDimensions',
'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields',
'Tracker.setTrackerCacheGeneral' => 'getCacheGeneral',
'Tracker.getVisitFieldsToPersist' => 'getVisitFieldsToPersist'
);
}
public function install()
{
Model::install();
}
public function uninstall()
{
Model::uninstall();
}
public function addDimensions(&$instances)
{
foreach (Model::getScopes() as $scope) {
$model = new Model($scope);
try {
$highestIndex = $model->getHighestCustomVarIndex();
} catch (\Exception $e) {
continue; // ignore error for tests to work as this might be executed before Piwik tables are installed
}
foreach (range(1, $highestIndex) as $index) {
$custom = new CustomDimension();
$custom->initCustomDimension($index, $model);
$instances[] = $custom;
}
}
}
/**
* There are also some hardcoded places in JavaScript
* @return int
*/
public static function getMaxLengthCustomVariables()
{
return 200;
}
/**
* Returns the number of available custom variables that can be used.
*
* "Can be used" is identifed by the minimum number of available custom variables across all relevant tables. Eg
* if there are 6 custom variables installed in log_visit but only 5 in log_conversion, we consider only 5 custom
* variables as usable.
* @return int
*/
public static function getNumUsableCustomVariables()
{
$cache = Cache::getCacheGeneral();
$cacheKey = self::MAX_NUM_CUSTOMVARS_CACHEKEY;
if (isset($cache[$cacheKey])) {
return $cache[$cacheKey];
}
return 0;
}
public function getCacheGeneral(&$cacheContent)
{
$cacheContent[self::MAX_NUM_CUSTOMVARS_CACHEKEY] = self::fetchNumMaxCustomVariables();
}
private static function fetchNumMaxCustomVariables()
{
$minCustomVar = null;
foreach (Model::getScopes() as $scope) {
$model = new Model($scope);
$highestIndex = $model->getHighestCustomVarIndex();
if (!isset($minCustomVar)) {
$minCustomVar = $highestIndex;
}
if ($highestIndex < $minCustomVar) {
$minCustomVar = $highestIndex;
}
}
if (!isset($minCustomVar)) {
$minCustomVar = 0;
}
return $minCustomVar;
}
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = 'CustomVariables_CustomVariables';
$translationKeys[] = 'CustomVariables_ManageDescription';
$translationKeys[] = 'CustomVariables_ScopeX';
$translationKeys[] = 'CustomVariables_Index';
$translationKeys[] = 'CustomVariables_Usages';
$translationKeys[] = 'CustomVariables_Unused';
$translationKeys[] = 'CustomVariables_CreateNewSlot';
$translationKeys[] = 'CustomVariables_UsageDetails';
$translationKeys[] = 'CustomVariables_CurrentAvailableCustomVariables';
$translationKeys[] = 'CustomVariables_ToCreateCustomVarExecute';
$translationKeys[] = 'CustomVariables_CreatingCustomVariableTakesTime';
$translationKeys[] = 'CustomVariables_SlotsReportIsGeneratedOverTime';
$translationKeys[] = 'General_Loading';
$translationKeys[] = 'General_TrackingScopeVisit';
$translationKeys[] = 'General_TrackingScopePage';
}
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/CustomVariables/vue/src/ManageCustomVars/ManageCustomVars.less";
}
public function provideActionDimensionFields(&$fields, &$joins)
{
$maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
for ($i = 1; $i <= $maxCustomVariables; $i++) {
$fields[] = 'custom_var_k' . $i;
$fields[] = 'custom_var_v' . $i;
}
}
public function getVisitFieldsToPersist(&$fields)
{
for ($index = 1; $index <= CustomVariables::getNumUsableCustomVariables(); $index++) {
$fields[] = 'custom_var_k' . $index;
$fields[] = 'custom_var_v' . $index;
}
}
}
|