Example #1
0
 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));
     }
 }
Example #3
0
 /**
  * @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) {
     }
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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));
     }
 }
Example #6
0
 /**
  * @return mixed|Dimension[]
  */
 private static function getConversionDimensions()
 {
     return ConversionDimension::getAllDimensions();
 }
Example #7
0
 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;
 }
Example #8
0
 /**
  * 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));
     }
 }
Example #9
0
 /**
  * @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;
 }
Example #10
0
 /**
  * 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);
     }
 }