ActionsInterface.php
4 years ago
DeviceDetectionImporter.php
2 weeks ago
PagesImporter.php
2 weeks ago
RecordImporter.php
2 weeks ago
ReferrersImporter.php
8 months ago
UserCountryImporter.php
8 months ago
VisitorsImporter.php
2 weeks ago
VisitsTimeImporter.php
1 year ago
VisitorsImporter.php
94 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WpMatomo\WpStatistics\Importers\Actions; |
| 4 | |
| 5 | use Piwik\Common; |
| 6 | use Piwik\Metrics; |
| 7 | use WP_STATISTICS\MetaBox\top_visitors; |
| 8 | use Piwik\Date; |
| 9 | use WP_Statistics\Models\VisitorsModel; |
| 10 | use WpMatomo\WpStatistics\Config; |
| 11 | /** |
| 12 | * @package WpMatomo |
| 13 | * @subpackage WpStatisticsImport |
| 14 | */ |
| 15 | class VisitorsImporter extends RecordImporter implements ActionsInterface { |
| 16 | |
| 17 | const PLUGIN_NAME = 'VisitsSummary'; |
| 18 | |
| 19 | public function import_records( Date $date ) { |
| 20 | if ( class_exists( '\WP_Statistics\Models\VisitorsModel' ) ) { |
| 21 | $visits = $this->import_from_model( $date ); |
| 22 | } else { |
| 23 | $visits = $this->import_from_metabox( $date ); |
| 24 | } |
| 25 | |
| 26 | $this->logger->debug( 'Import {nb_visits} visits...', [ 'nb_visits' => count( $visits ) ] ); |
| 27 | $this->insert_numeric_records( [ Metrics::INDEX_NB_UNIQ_VISITORS => count( $visits ) ] ); |
| 28 | $this->insert_numeric_records( [ Metrics::INDEX_NB_VISITS => count( $visits ) ] ); |
| 29 | Common::destroy( $visits ); |
| 30 | return $visits; |
| 31 | } |
| 32 | |
| 33 | private function import_from_model( Date $date ) { |
| 34 | $limit = 100; |
| 35 | $visits = []; |
| 36 | $page = 0; |
| 37 | do { |
| 38 | ++$page; |
| 39 | |
| 40 | // copied from wp-statistics-meta-box-top-visitors.php. |
| 41 | // used to use top_visitors::get(), but that no longer supports |
| 42 | // pagination. |
| 43 | try { |
| 44 | $visitors_model = new VisitorsModel(); |
| 45 | $response = $visitors_model->getVisitorsData( |
| 46 | [ |
| 47 | 'date' => [ |
| 48 | 'from' => $date->toString(), |
| 49 | 'to' => $date->toString(), |
| 50 | ], |
| 51 | 'page' => $page, |
| 52 | 'per_page' => $limit, |
| 53 | 'order_by' => 'hits', |
| 54 | 'order' => 'DESC', |
| 55 | 'user_info' => true, |
| 56 | 'page_info' => true, |
| 57 | ] |
| 58 | ); |
| 59 | } catch ( \Exception $e ) { |
| 60 | $response = array(); |
| 61 | } |
| 62 | |
| 63 | $no_data = count( $response ) < 1; |
| 64 | if ( ! $no_data ) { |
| 65 | $visits = array_merge( $visits, $response ); |
| 66 | } |
| 67 | } while ( true !== $no_data ); |
| 68 | |
| 69 | return $visits; |
| 70 | } |
| 71 | |
| 72 | private function import_from_metabox( Date $date ) { |
| 73 | $limit = 100; |
| 74 | $visits = []; |
| 75 | $page = 0; |
| 76 | do { |
| 77 | ++$page; |
| 78 | $visits_found = top_visitors::get( |
| 79 | [ |
| 80 | 'day' => $date->toString( Config::WP_STATISTICS_DATE_FORMAT ), |
| 81 | 'per_page' => $limit, |
| 82 | 'paged' => $page, |
| 83 | ] |
| 84 | ); |
| 85 | $no_data = ( ( array_key_exists( 'no_data', $visits_found ) ) && ( 1 === $visits_found['no_data'] ) ); |
| 86 | if ( ! $no_data ) { |
| 87 | $visits = array_merge( $visits, $visits_found ); |
| 88 | } |
| 89 | } while ( true !== $no_data ); |
| 90 | |
| 91 | return $visits; |
| 92 | } |
| 93 | } |
| 94 |