PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 4.13.3
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v4.13.3
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / classes / WpMatomo / WpStatistics / DataConverters / SubtableConverter.php
matomo / classes / WpMatomo / WpStatistics / DataConverters Last commit date
BrowsersConverter.php 4 years ago DataConverterInterface.php 4 years ago FilterConverter.php 4 years ago NumberConverter.php 4 years ago PagesTitleConverter.php 4 years ago PagesUrlConverter.php 4 years ago PlatformConverter.php 4 years ago ReferrersConverter.php 4 years ago SearchEngineConverter.php 4 years ago SearchKeywordConverter.php 4 years ago SearchQueryConverter.php 4 years ago SubtableConverter.php 4 years ago UserCityConverter.php 4 years ago UserCountryConverter.php 4 years ago UserRegionConverter.php 4 years ago VisitorsConverter.php 4 years ago VisitsTimeConverter.php 4 years ago
SubtableConverter.php
70 lines
1 <?php
2
3 namespace WpMatomo\WpStatistics\DataConverters;
4
5 use Piwik\DataTable;
6 /**
7 * @package WpMatomo
8 * @subpackage WpStatisticsImport
9 */
10 class SubtableConverter {
11
12 public static function aggregate_by_key( array $wp_statistics_data, $first_key, $second_key ) {
13 $data = [];
14 if ( count( $wp_statistics_data ) ) {
15 foreach ( $wp_statistics_data as $row ) {
16 if ( ! array_key_exists( $row[ $first_key ], $data ) ) {
17 $data[ $row[ $first_key ] ] = [
18 'label' => $row[ $first_key ],
19 'data' => [],
20 'nb_uniq_visitors' => 0,
21 'nb_visits' => 0,
22 ];
23 }
24 $data[ $row[ $first_key ] ]['data'][ $row[ $second_key ] ] = [
25 'label' => $row[ $second_key ],
26 'nb_uniq_visitors' => $row['nb'],
27 'nb_visits' => $row['nb'],
28 ];
29 $data[ $row[ $first_key ] ]['nb_visits'] += $row['nb'];
30 $data[ $row[ $first_key ] ]['nb_uniq_visitors'] += $row['nb'];
31 }
32 }
33
34 $data_table = new DataTable();
35 foreach ( $data as $key => $row ) {
36 $data = $row['data'];
37 unset( $row['data'] );
38 $top_level_row = self::add_row_to_table( $data_table, new DataTable\Row( array( 0 => $row ) ), $key );
39 foreach ( $data as $sub_key => $sub_row ) {
40 self::add_row_to_subtable( $top_level_row, new DataTable\Row( array( 0 => $sub_row ) ), $sub_key );
41 }
42 }
43 return $data_table;
44 }
45
46 protected static function add_row_to_subtable( DataTable\Row $top_level_row, DataTable\Row $row_to_add, $new_label ) {
47 $sub_table = $top_level_row->getSubtable();
48 if ( ! $sub_table ) {
49 $sub_table = new DataTable();
50 $top_level_row->setSubtable( $sub_table );
51 }
52
53 return self::add_row_to_table( $sub_table, $row_to_add, $new_label );
54 }
55
56 protected static function add_row_to_table( DataTable $record, DataTable\Row $row, $new_label ) {
57 $found_row = $record->getRowFromLabel( $new_label );
58 if ( empty( $found_row ) ) {
59 $found_row = clone $row;
60 $found_row->deleteMetadata();
61 $found_row->setColumn( 'label', $new_label );
62 $record->addRow( $found_row );
63 } else {
64 $found_row->sumRow( $row, $copy_metadata = false );
65 }
66
67 return $found_row;
68 }
69 }
70