reporter = $reporter; $this->settings = $settingsController; $this->wp = new WPFunctions; } /** @return array|null */ public function generateAnalytics() { if ($this->shouldSend()) { $data = $this->wp->applyFilters(self::ANALYTICS_FILTER, $this->reporter->getData()); $this->recordDataSent(); return $data; } return null; } /** @return boolean */ public function isEnabled() { $analytics_settings = $this->settings->get('analytics', []); return !empty($analytics_settings['enabled']) === true; } public function setPublicId($new_public_id) { $current_public_id = $this->settings->get('public_id'); if ($current_public_id !== $new_public_id) { $this->settings->set('public_id', $new_public_id); $this->settings->set('new_public_id', 'true'); // Force user data to be resent $this->settings->delete(Analytics::SETTINGS_LAST_SENT_KEY); } } /** @return string */ public function getPublicId() { $public_id = $this->settings->get('public_id', ''); // if we didn't get the user public_id from the shop yet : we create one based on mixpanel distinct_id if (empty($public_id) && !empty($_COOKIE['mixpanel_distinct_id'])) { // the public id has to be diffent that mixpanel_distinct_id in order to be used on different browser $mixpanel_distinct_id = md5($_COOKIE['mixpanel_distinct_id']); $this->settings->set('public_id', $mixpanel_distinct_id); $this->settings->set('new_public_id', 'true'); return $mixpanel_distinct_id; } return $public_id; } /** * Returns true if a the public_id was added and update new_public_id to false * @return boolean */ public function isPublicIdNew() { $new_public_id = $this->settings->get('new_public_id'); if ($new_public_id === 'true') { $this->settings->set('new_public_id', 'false'); return true; } return false; } private function shouldSend() { if (!$this->isEnabled()) { return false; } $lastSent = $this->settings->get(Analytics::SETTINGS_LAST_SENT_KEY); if (!$lastSent) { return true; } $lastSentCarbon = Carbon::createFromTimestamp(strtotime($lastSent))->addDays(Analytics::SEND_AFTER_DAYS); return $lastSentCarbon->isPast(); } private function recordDataSent() { $this->settings->set(Analytics::SETTINGS_LAST_SENT_KEY, Carbon::now()); } }