Пример #1
0
 public function getHumanReadable($segmentString, $idSite)
 {
     if (empty($segmentString)) {
         return Piwik::translate('SegmentEditor_DefaultAllVisits');
     }
     try {
         $segment = new SegmentExpression(urldecode($segmentString));
         $expressions = $segment->parseSubExpressions();
     } catch (Exception $e) {
         $segment = new SegmentExpression($segmentString);
         $expressions = $segment->parseSubExpressions();
     }
     $readable = '';
     foreach ($expressions as $expression) {
         $operator = $expression[SegmentExpression::INDEX_BOOL_OPERATOR];
         $operand = $expression[SegmentExpression::INDEX_OPERAND];
         $name = $operand[SegmentExpression::INDEX_OPERAND_NAME];
         $segment = $this->segmentList->findSegment($name, $idSite);
         if (empty($segment)) {
             throw new Exception(sprintf("The segment '%s' does not exist.", $name));
         }
         $readable .= $segment['name'] . ' ';
         $readable .= $this->getTranslationForComparison($operand, $segment['type']) . ' ';
         $readable .= $this->getFormattedValue($operand);
         $readable .= $this->getTranslationForBoolOperator($operator) . ' ';
     }
     $readable = trim($readable);
     return $readable;
 }
Пример #2
0
 public function test_getSelectQueryString_DecoratesSql_WhenMultipleStoredSegmentsMatchUsedSegment()
 {
     $expression = new SegmentExpression('region!=FL');
     $expression->parseSubExpressions();
     $query = $this->decorator->getSelectQueryString($expression, '*', 'log_visit', '', array(), '', '', '');
     $this->assertStringStartsWith('/* idSegments = [2, 4] */', $query['sql']);
 }
 /**
  * @dataProvider getBogusFilters
  * @group Core
  */
 public function testBogusFiltersExpectExceptionThrown($bogus)
 {
     try {
         $segment = new SegmentExpression($bogus);
         $segment->parseSubExpressions();
         $segment->getSql();
     } catch (\Exception $e) {
         return;
     }
     $this->fail('Expected exception not raised for:' . var_export($segment->getSql(), true));
 }
Пример #4
0
 /**
  * @param $string
  * @param $idSites
  * @throws Exception
  */
 protected function initializeSegment($string, $idSites)
 {
     // As a preventive measure, we restrict the filter size to a safe limit
     $string = substr($string, 0, self::SEGMENT_TRUNCATE_LIMIT);
     $this->string = $string;
     $this->idSites = $idSites;
     $segment = new SegmentExpression($string);
     $this->segmentExpression = $segment;
     // parse segments
     $expressions = $segment->parseSubExpressions();
     // convert segments name to sql segment
     // check that user is allowed to view this segment
     // and apply a filter to the value to match if necessary (to map DB fields format)
     $cleanedExpressions = array();
     foreach ($expressions as $expression) {
         $operand = $expression[SegmentExpression::INDEX_OPERAND];
         $cleanedExpression = $this->getCleanedExpression($operand);
         $expression[SegmentExpression::INDEX_OPERAND] = $cleanedExpression;
         $cleanedExpressions[] = $expression;
     }
     $segment->setSubExpressionsAfterCleanup($cleanedExpressions);
 }