Contracts
5 years ago
Enum
5 years ago
Events
5 years ago
Helpers
5 years ago
Repositories
5 years ago
TrackingData
4 years ago
AccessToken.php
5 years ago
AdminActionHandler.php
5 years ago
AdminSettings.php
5 years ago
TrackClient.php
5 years ago
TrackJob.php
5 years ago
TrackJobScheduler.php
5 years ago
TrackRegisterer.php
5 years ago
TrackingServiceProvider.php
5 years ago
UsageTrackingOnBoarding.php
4 years ago
TrackClient.php
83 lines
| 1 | <?php |
| 2 | namespace Give\Tracking; |
| 3 | |
| 4 | use Give\Tracking\Contracts\TrackData; |
| 5 | use Give\Tracking\Enum\EventType; |
| 6 | use Give\Tracking\Repositories\TelemetryAccessDetails; |
| 7 | use WP_Error; |
| 8 | |
| 9 | /** |
| 10 | * Class TrackClient |
| 11 | * |
| 12 | * This class has responsibility to send tracking information |
| 13 | * |
| 14 | * @since 2.10.0 |
| 15 | * @package Give\Tracking |
| 16 | * |
| 17 | */ |
| 18 | class TrackClient { |
| 19 | const SERVER_URL = 'https://telemetry.givewp.com/api/v1/track-plugin-usage'; |
| 20 | |
| 21 | /** |
| 22 | * @var TelemetryAccessDetails |
| 23 | */ |
| 24 | private $telemetryAccessDetails; |
| 25 | |
| 26 | /** |
| 27 | * TrackClient constructor. |
| 28 | * |
| 29 | * @param TelemetryAccessDetails $telemetryAccessDetails |
| 30 | */ |
| 31 | public function __construct( TelemetryAccessDetails $telemetryAccessDetails ) { |
| 32 | $this->telemetryAccessDetails = $telemetryAccessDetails; |
| 33 | } |
| 34 | |
| 35 | /** |
| 36 | * Send a track event. |
| 37 | * |
| 38 | * @since 2.10.0 |
| 39 | * |
| 40 | * @param EventType $eventType |
| 41 | * @param TrackData $trackData |
| 42 | * @param array $requestArgs |
| 43 | * |
| 44 | * @return array|WP_Error |
| 45 | */ |
| 46 | public function post( EventType $eventType, TrackData $trackData, $requestArgs = [] ) { |
| 47 | $id = $eventType->getValue(); |
| 48 | $data = $trackData->get(); |
| 49 | |
| 50 | if ( ! $id || ! $data ) { |
| 51 | return new WP_Error( 'invalid-telemetry-request', 'Pass valid track id and tracked data to TrackClient' ); |
| 52 | } |
| 53 | |
| 54 | $default_request_args = [ |
| 55 | 'headers' => [ |
| 56 | 'content-type:' => 'application/json', |
| 57 | 'Authorization' => 'Bearer ' . $this->telemetryAccessDetails->getAccessTokenOptionValue(), |
| 58 | ], |
| 59 | 'timeout' => 8, |
| 60 | 'httpversion' => '1.1', |
| 61 | 'blocking' => false, |
| 62 | 'user-agent' => 'GIVE/' . GIVE_VERSION . ' ' . get_bloginfo( 'url' ), |
| 63 | 'body' => wp_json_encode( $data ), |
| 64 | 'data_format' => 'body', |
| 65 | ]; |
| 66 | |
| 67 | return wp_remote_post( $this->getApiUrl( $id ), wp_parse_args( $requestArgs, $default_request_args ) ); |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * Get api url. |
| 72 | * |
| 73 | * @since 2.10.0 |
| 74 | * |
| 75 | * @param string $trackId |
| 76 | * |
| 77 | * @return string |
| 78 | */ |
| 79 | public function getApiUrl( $trackId ) { |
| 80 | return self::SERVER_URL . '/' . $trackId; |
| 81 | } |
| 82 | } |
| 83 |