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