protected function configureSegments()
 {
     $idSite = Common::getRequestVar('idSite', 0, 'int');
     if (empty($idSite)) {
         return array();
     }
     $configuration = StaticContainer::get('Piwik\\Plugins\\CustomDimensions\\Dao\\Configuration');
     $dimensions = $configuration->getCustomDimensionsForSite($idSite);
     foreach ($dimensions as $dimension) {
         if (!$dimension['active']) {
             continue;
         }
         $segment = new Segment();
         $segment->setSegment(CustomDimensionsRequestProcessor::buildCustomDimensionTrackingApiName($dimension));
         $segment->setType(Segment::TYPE_DIMENSION);
         $segment->setName($dimension['name']);
         $columnName = LogTable::buildCustomDimensionColumnName($dimension);
         if ($dimension['scope'] === CustomDimensions::SCOPE_ACTION) {
             $segment->setSqlSegment('log_link_visit_action. ' . $columnName);
             $segment->setCategory('General_Actions');
             $segment->setSuggestedValuesCallback(function ($idSite, $maxValuesToReturn) use($dimension) {
                 $autoSuggest = new AutoSuggest();
                 return $autoSuggest->getMostUsedActionDimensionValues($dimension, $idSite, $maxValuesToReturn);
             });
         } elseif ($dimension['scope'] === CustomDimensions::SCOPE_VISIT) {
             $segment->setSqlSegment('log_visit. ' . $columnName);
             $segment->setCategory('General_Visit');
         } else {
             continue;
         }
         $this->addSegment($segment);
     }
 }
Esempio n. 2
0
 /**
  * Adds a new segment. The segment type will be set to 'dimension' automatically if not already set.
  * @param Segment $segment
  * @api
  */
 protected function addSegment(Segment $segment)
 {
     $type = $segment->getType();
     if (empty($type)) {
         $segment->setType(Segment::TYPE_DIMENSION);
     }
     $this->segments[] = $segment;
 }
Esempio n. 3
0
 protected function configureSegments()
 {
     parent::configureSegments();
     $segment = new Segment();
     $segment->setType('metric');
     $segment->setCategory(Piwik::translate('General_Visit'));
     $segment->setName('General_VisitorIP');
     $segment->setSegment('visitIp');
     $segment->setAcceptedValues('13.54.122.1. </code>Select IP ranges with notation: <code>visitIp>13.54.122.0;visitIp<13.54.122.255');
     $segment->setSqlSegment('log_visit.location_ip');
     $segment->setSqlFilterValue(array('Piwik\\Network\\IPUtils', 'stringToBinaryIP'));
     $segment->setRequiresAtLeastViewAccess(true);
     $this->addSegment($segment);
 }
Esempio n. 4
0
 protected function configureSegments()
 {
     parent::configureSegments();
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setCategory(Piwik::translate('General_Visit'));
     $segment->setName('General_VisitorID');
     $segment->setSegment('visitorId');
     $segment->setAcceptedValues('34c31e04394bdc63 - any 16 Hexadecimal chars ID, which can be fetched using the Tracking API function getVisitorId()');
     $segment->setSqlSegment('log_visit.idvisitor');
     $segment->setSqlFilterValue(array('Piwik\\Common', 'convertVisitorIdToBin'));
     $segment->setRequiresAtLeastViewAccess(true);
     $this->addSegment($segment);
 }
Esempio n. 5
0
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setSegment('userId');
     $segment->setCategory(Piwik::translate('General_Visit'));
     $segment->setName('General_UserId');
     $segment->setAcceptedValues('any non empty unique string identifying the user (such as an email address or a username).');
     $segment->setSqlSegment('log_visit.user_id');
     $segment->setRequiresAtLeastViewAccess(true);
     $this->addSegment($segment);
 }
Esempio n. 6
0
 protected function configureSegments()
 {
     parent::configureSegments();
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setCategory(Piwik::translate('General_Visit'));
     $segment->setName(Piwik::translate('General_Visit') . " ID");
     $segment->setSegment('visitId');
     $segment->setAcceptedValues('Any integer.');
     $segment->setSqlSegment('log_visit.idvisit');
     $segment->setRequiresAtLeastViewAccess(true);
     $this->addSegment($segment);
 }
Esempio n. 7
0
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('events');
     $segment->setName('Events_TotalEvents');
     $segment->setAcceptedValues('To select all visits who triggered an Event, use: &segment=events>0');
     $segment->setCategory('General_Visit');
     $segment->setType(Segment::TYPE_METRIC);
     $this->addSegment($segment);
 }
 /**
  * By defining one or multiple segments a user will be able to filter their visitors by this column. For instance
  * show all reports only considering users having more than 10 achievement points. If you do not want to define a
  * segment for this dimension just remove the column.
  */
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('last_name');
     $segment->setCategory('General_Visit');
     $segment->setName('ClientCertificates_LastName');
     $segment->setAcceptedValues('Here you should explain which values are accepted/useful: Any number, for instance 1, 2, 3 , 99');
     $this->addSegment($segment);
 }
Esempio n. 9
0
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('provider');
     $segment->setCategory('Visit Location');
     $segment->setName('Provider_ColumnProvider');
     $segment->setAcceptedValues('comcast.net, proxad.net, etc.');
     $this->addSegment($segment);
 }
 /**
  * By defining one or multiple segments a user will be able to filter their visitors by this column. For instance
  * show all actions only considering users having more than 10 achievement points. If you do not want to define a
  * segment for this dimension just remove the column.
  */
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('keywords');
     $segment->setCategory('General_Actions');
     $segment->setName('ExampleTracker_DimensionName');
     $segment->setAcceptedValues('Here you should explain which values are accepted/useful: Any word, for instance MyKeyword1, MyKeyword2');
     $this->addSegment($segment);
 }
Esempio n. 11
0
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setCategory('General_Visit');
     $segment->setName('General_VisitConvertedGoalId');
     $segment->setSegment('visitConvertedGoalId');
     $segment->setAcceptedValues('1, 2, 3, etc.');
     $this->addSegment($segment);
 }
 /**
  * By defining one or multiple segments a user will be able to filter their visitors by this column. For instance
  * show all reports only considering users having more than 10 achievement points. If you do not want to define a
  * segment for this dimension just remove the column.
  */
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('achievementPoints');
     $segment->setCategory('General_Visit');
     $segment->setName('ExampleTracker_DimensionName');
     $segment->setAcceptedValues('Here you should explain which values are accepted/useful: Any number, for instance 1, 2, 3 , 99');
     $this->addSegment($segment);
 }
 protected function configureSegments()
 {
     $segment = new Segment();
     $segment->setSegment('exitPageUrl');
     $segment->setName('Actions_ColumnExitPageURL');
     $segment->setCategory('General_Visit');
     $this->addSegment($segment);
     // custom type and sqlSegment
     $segment = new Segment();
     $segment->setSegment('exitPageUrl');
     $segment->setSqlSegment('customValue');
     $segment->setType(Segment::TYPE_METRIC);
     $segment->setName('Actions_ColumnExitPageURL');
     $segment->setCategory('General_Visit');
     $this->addSegment($segment);
 }
Esempio n. 14
0
 protected function configureSegmentsFor($segmentNameSuffix)
 {
     $numCustomVariables = CustomVariables::getNumUsableCustomVariables();
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setSegment('customVariable' . $segmentNameSuffix);
     $segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')');
     $segment->setCategory('CustomVariables_CustomVariables');
     $segment->setUnionOfSegments($this->getSegmentColumns('customVariable' . $segmentNameSuffix, $numCustomVariables));
     $this->addSegment($segment);
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setSegment('customVariablePage' . $segmentNameSuffix);
     $segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')');
     $segment->setCategory('CustomVariables_CustomVariables');
     $segment->setUnionOfSegments($this->getSegmentColumns('customVariablePage' . $segmentNameSuffix, $numCustomVariables));
     $this->addSegment($segment);
 }
Esempio n. 15
0
 protected function configureSegments()
 {
     $deviceTypes = DeviceParser::getAvailableDeviceTypeNames();
     $deviceTypeList = implode(", ", $deviceTypes);
     $segment = new Segment();
     $segment->setCategory('General_Visit');
     $segment->setSegment('deviceType');
     $segment->setName('DevicesDetection_DeviceType');
     $segment->setAcceptedValues($deviceTypeList);
     $segment->setSqlFilter(function ($type) use($deviceTypeList, $deviceTypes) {
         $index = array_search(strtolower(trim(urldecode($type))), $deviceTypes);
         if ($index === false) {
             throw new Exception("deviceType segment must be one of: {$deviceTypeList}");
         }
         return $index;
     });
     $this->addSegment($segment);
 }
Esempio n. 16
0
 protected function configureSegmentsFor($fieldPrefix, $segmentNameSuffix)
 {
     $numCustomVariables = CustomVariables::getNumUsableCustomVariables();
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setSegment('customVariable' . $segmentNameSuffix);
     $segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopeVisit') . ')');
     $segment->setCategory('CustomVariables_CustomVariables');
     $segment->setSqlSegment($this->getSegmentColumns('log_visit.' . $fieldPrefix, $numCustomVariables));
     $segment->setSuggestedValuesCallback(function ($idSite, $ignore, DataTable $table) use($segmentNameSuffix) {
         return $table->getColumnsStartingWith('customVariable' . $segmentNameSuffix);
     });
     $this->addSegment($segment);
     $segment = new Segment();
     $segment->setType('dimension');
     $segment->setSegment('customVariablePage' . $segmentNameSuffix);
     $segment->setName($this->getName() . ' (' . Piwik::translate('CustomVariables_ScopePage') . ')');
     $segment->setCategory('CustomVariables_CustomVariables');
     $segment->setSqlSegment($this->getSegmentColumns('log_link_visit_action.' . $fieldPrefix, $numCustomVariables));
     $segment->setSuggestedValuesCallback(function ($idSite, $ignore, DataTable $table) use($segmentNameSuffix) {
         return $table->getColumnsStartingWith('customVariablePage' . $segmentNameSuffix);
     });
     $this->addSegment($segment);
 }
Esempio n. 17
0
 private function fetchIntersectedWithThisBySegment(DataTable $table, $segmentValue)
 {
     $segmentStr = $this->thisReportDimensionSegment->getSegment() . "==" . urlencode($segmentValue);
     // TODO: segment + report API method query params should be stored in DataTable metadata so we don't have to access it here
     $originalSegment = Common::getRequestVar('segment', false);
     if (!empty($originalSegment)) {
         $segmentStr = $originalSegment . ';' . $segmentStr;
     }
     Log::debug("PivotByDimension: Fetching intersected with segment '%s'", $segmentStr);
     $params = array('segment' => $segmentStr) + $this->getRequestParamOverride($table);
     return $this->pivotDimensionReport->fetch($params);
 }
 public function getSegmentsMetadata(&$segments, $idSites)
 {
     if (empty($idSites) || is_array($idSites) && count($idSites) !== 1) {
         return array();
     }
     if (is_array($idSites)) {
         $idSite = array_shift($idSites);
     } else {
         $idSite = $idSites;
     }
     $idSite = (int) $idSite;
     $dimensions = $this->configuration->getCustomDimensionsForSite($idSite);
     foreach ($dimensions as $dimension) {
         if (!$dimension['active']) {
             continue;
         }
         $segment = new Plugin\Segment();
         $segment->setSegment(CustomDimensionsRequestProcessor::buildCustomDimensionTrackingApiName($dimension));
         $segment->setType(Plugin\Segment::TYPE_DIMENSION);
         $segment->setName($dimension['name']);
         $columnName = LogTable::buildCustomDimensionColumnName($dimension);
         if ($dimension['scope'] === CustomDimensions::SCOPE_ACTION) {
             $segment->setSqlSegment('log_link_visit_action. ' . $columnName);
             $segment->setCategory('General_Actions');
             $segment->setSuggestedValuesCallback(function ($idSite, $maxValuesToReturn) use($dimension) {
                 $autoSuggest = new AutoSuggest();
                 return $autoSuggest->getMostUsedActionDimensionValues($dimension, $idSite, $maxValuesToReturn);
             });
         } elseif ($dimension['scope'] === CustomDimensions::SCOPE_VISIT) {
             $segment->setSqlSegment('log_visit. ' . $columnName);
             $segment->setCategory('General_Visit');
         } else {
             continue;
         }
         $segments[] = $segment->toArray();
     }
 }
Esempio n. 19
0
 /**
  * Adds a new segment. It automatically sets the SQL segment depending on the column name in case none is set
  * already.
  * @see \Piwik\Columns\Dimension::addSegment()
  * @param Segment $segment
  * @api
  */
 protected function addSegment(Segment $segment)
 {
     $sqlSegment = $segment->getSqlSegment();
     if (!empty($this->columnName) && empty($sqlSegment)) {
         $segment->setSqlSegment($this->tableName . '.' . $this->columnName);
     }
     parent::addSegment($segment);
 }