private function getConversionDimensions() { // see eg https://github.com/piwik/piwik/issues/8399 we fetch them only on demand to improve performance if (!isset($this->conversionDimensions)) { $this->conversionDimensions = ConversionDimension::getAllDimensions(); } return $this->conversionDimensions; }
public function test_getAllDimensions_shouldLoadAllDimensionsButOnlyIfLoadedPlugins() { Manager::getInstance()->loadPlugins(array('Goals', 'Ecommerce', 'ExampleTracker')); $dimensions = ConversionDimension::getAllDimensions(); $this->assertGreaterThan(5, count($dimensions)); foreach ($dimensions as $dimension) { $this->assertInstanceOf('\\Piwik\\Plugin\\Dimension\\ConversionDimension', $dimension); $this->assertRegExp('/Piwik.Plugins.(ExampleTracker|Ecommerce|Goals).Columns/', get_class($dimension)); } }
/** * @param $pluginName */ private function executePluginUninstall($pluginName) { try { $plugin = $this->getLoadedPlugin($pluginName); $plugin->uninstall(); } catch (\Exception $e) { } if (empty($plugin)) { return; } try { $visitDimensions = VisitDimension::getAllDimensions(); foreach (VisitDimension::getDimensions($plugin) as $dimension) { $this->uninstallDimension(VisitDimension::INSTALLER_PREFIX, $dimension, $visitDimensions); } } catch (\Exception $e) { } try { $actionDimensions = ActionDimension::getAllDimensions(); foreach (ActionDimension::getDimensions($plugin) as $dimension) { $this->uninstallDimension(ActionDimension::INSTALLER_PREFIX, $dimension, $actionDimensions); } } catch (\Exception $e) { } try { $conversionDimensions = ConversionDimension::getAllDimensions(); foreach (ConversionDimension::getDimensions($plugin) as $dimension) { $this->uninstallDimension(ConversionDimension::INSTALLER_PREFIX, $dimension, $conversionDimensions); } } catch (\Exception $e) { } }
/** * Gets an instance of all available visit, action and conversion dimension. * @return 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; } return $dimensions; }
/** * Records a standard non-Ecommerce goal in the DB (URL/Title matching), * linking the conversion to the action that triggered it * @param $goal * @param Visitor $visitor * @param Action $action * @param $visitorInformation */ protected function recordStandardGoals($goal, Visitor $visitor, $action, $visitorInformation) { foreach ($this->convertedGoals as $convertedGoal) { $this->currentGoal = $convertedGoal; Common::printDebug("- Goal " . $convertedGoal['idgoal'] . " matched. Recording..."); $conversion = $goal; $conversion['idgoal'] = $convertedGoal['idgoal']; $conversion['url'] = $convertedGoal['url']; if (!is_null($action)) { $conversion['idaction_url'] = $action->getIdActionUrl(); $conversion['idlink_va'] = $action->getIdLinkVisitAction(); } // If multiple Goal conversions per visit, set a cache buster $conversion['buster'] = $convertedGoal['allow_multiple'] == 0 ? '0' : $visitorInformation['visit_last_action_time']; $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($conversionDimensions, 'onGoalConversion', $visitor, $action, $conversion); $this->insertNewConversion($conversion, $visitorInformation); /** * 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._ * * @param array $conversion The conversion entity that was just persisted. See what information * it contains [here](/guides/persistence-and-the-mysql-backend#conversions). */ Piwik::postEvent('Tracker.recordStandardGoals', array($conversion)); } }
/** * @return mixed|Dimension[] */ private static function getConversionDimensions() { return ConversionDimension::getAllDimensions(); }
public static function getAllVersions() { // to avoid having to load all dimensions on each request we check if there were any changes on the file system // can easily save > 100ms for each request $cachedTimes = self::getCachedDimensionFileChanges(); $currentTimes = self::getCurrentDimensionFileChanges(); $diff = array_diff_assoc($currentTimes, $cachedTimes); if (empty($diff)) { return array(); } $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) { $versions = self::mixinVersions($dimension, 'log_visit.', $visitColumns, $versions); } foreach (ActionDimension::getAllDimensions() as $dimension) { $versions = self::mixinVersions($dimension, 'log_link_visit_action.', $actionColumns, $versions); } foreach (ConversionDimension::getAllDimensions() as $dimension) { $versions = self::mixinVersions($dimension, 'log_conversion.', $conversionColumns, $versions); } return $versions; }
/** * Records a standard non-Ecommerce goal in the DB (URL/Title matching), * linking the conversion to the action that triggered it * @param $goal * @param Visitor $visitor * @param Action $action * @param $visitorInformation */ protected function recordStandardGoals(VisitProperties $visitProperties, Request $request, $goal, $action) { $visitor = Visitor::makeFromVisitProperties($visitProperties, $request); $convertedGoals = $request->getMetadata('Goals', 'goalsConverted') ?: array(); foreach ($convertedGoals as $convertedGoal) { $this->currentGoal = $convertedGoal; Common::printDebug("- Goal " . $convertedGoal['idgoal'] . " matched. Recording..."); $conversion = $goal; $conversion['idgoal'] = $convertedGoal['idgoal']; $conversion['url'] = $convertedGoal['url']; if (!is_null($action)) { $conversion['idaction_url'] = $action->getIdActionUrl(); $conversion['idlink_va'] = $action->getIdLinkVisitAction(); } // If multiple Goal conversions per visit, set a cache buster $conversion['buster'] = $convertedGoal['allow_multiple'] == 0 ? '0' : $visitProperties->getProperty('visit_last_action_time'); $conversionDimensions = ConversionDimension::getAllDimensions(); $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)); } }
/** * @param VisitDimension[]|null $visitDimensions * @param ActionDimension[]|null $actionDimensions * @param ConversionDimension[]|null $conversionDimensions */ public function __construct(array $visitDimensions = null, array $actionDimensions = null, array $conversionDimensions = null) { $this->visitDimensions = $visitDimensions === null ? VisitDimension::getAllDimensions() : $visitDimensions; $this->actionDimensions = $actionDimensions === null ? ActionDimension::getAllDimensions() : $actionDimensions; $this->conversionDimensions = $conversionDimensions === null ? ConversionDimension::getAllDimensions() : $conversionDimensions; }
/** * Records a standard non-Ecommerce goal in the DB (URL/Title matching), * linking the conversion to the action that triggered it * @param $goal * @param Visitor $visitor * @param Action $action * @param $visitorInformation */ protected function recordStandardGoals(VisitProperties $visitProperties, Request $request, $goal, $action) { $visitor = Visitor::makeFromVisitProperties($visitProperties, $request); $convertedGoals = $request->getMetadata('Goals', 'goalsConverted') ?: array(); foreach ($convertedGoals as $convertedGoal) { $this->currentGoal = $convertedGoal; Common::printDebug("- Goal " . $convertedGoal['idgoal'] . " matched. Recording..."); $conversion = $goal; $conversion['idgoal'] = $convertedGoal['idgoal']; $conversion['url'] = $convertedGoal['url']; if (!is_null($action)) { $conversion['idaction_url'] = $action->getIdActionUrl(); $conversion['idlink_va'] = $action->getIdLinkVisitAction(); } // If multiple Goal conversions per visit, set a cache buster $conversion['buster'] = $convertedGoal['allow_multiple'] == 0 ? '0' : $visitProperties->getProperty('visit_last_action_time'); $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onGoalConversion', $visitor, $action, $conversion); $this->insertNewConversion($conversion, $visitProperties->getProperties(), $request); } }