ID, '_last_login', current_time('mysql')); $this->trackActivityByUser($user, 'login'); } public function trackActivityByUser($user, $type = '') { if (is_numeric($user)) { $user = get_user_by('ID', $user); } if (!$user || empty($user->user_email)) { return; } $subscriber = Subscriber::where('email', $user->user_email)->first(); if (!$subscriber) { return; } $this->trackActivityBySubscriber($subscriber); if ($type == 'login') { fluentcrm_update_subscriber_meta($subscriber->id, '_last_login', current_time('mysql')); } return true; } public function trackActivityBySubscriber($subscriber) { if (!$subscriber) { return; } if (is_numeric($subscriber)) { $subscriber = Subscriber::where('id', $subscriber)->first(); } if (!$subscriber) { return; } if ($subscriber->last_activity && strtotime($subscriber->last_activity) > (current_time('timestamp') - 3600)) { return; } $data = [ 'last_activity' => current_time('mysql') ]; if (!$subscriber->ip && fluentCrmWillTrackIp()) { $ip = FluentCrm('request')->getIp(fluentCrmWillAnonymizeIp()); if ($ip != '127.0.0.1') { $data['ip'] = $ip; } } return fluentCrmDb()->table('fc_subscribers') ->where('id', $subscriber->id) ->update($data); } public function trackEmailOpenAnonymously($campaignEmaillModel) { if (!$campaignEmaillModel->campaign_id) { return; } // check if the campaign exist global $wpdb; $exists = $wpdb->get_var( $wpdb->prepare( "SELECT 1 FROM {$wpdb->prefix}fc_campaigns WHERE id = %d LIMIT 1", $campaignEmaillModel->campaign_id ) ); if (!$exists) { return; } $existingMetaModel = fluentcrm_get_campaign_meta($campaignEmaillModel->campaign_id, '_ano_open_count', false); if ($existingMetaModel) { global $wpdb; $wpdb->query($wpdb->prepare( "UPDATE {$wpdb->prefix}fc_meta SET value = value + 1 WHERE id = %d", $existingMetaModel->id )); } else { // we creating new one Meta::create([ 'key' => '_ano_open_count', 'value' => 1, 'object_id' => $campaignEmaillModel->campaign_id, 'object_type' => 'FluentCrm\App\Models\Campaign' ]); } return true; } public function trackEmailClickAnonymously($url, $campaign) { $existingMetaModel = fluentcrm_get_campaign_meta($campaign->id, '_ano_url_clicks', false); $url = (string)$url; if ($existingMetaModel) { $urls = is_array($existingMetaModel->value) ? $existingMetaModel->value : []; if (isset($urls[$url])) { $urls[$url] = (int)$urls[$url] + 1; } else { $urls[$url] = 1; } $existingMetaModel->value = $urls; $existingMetaModel->save(); } else { Meta::create([ 'key' => '_ano_url_clicks', 'value' => [ $url => 1 ], 'object_id' => $campaign->id, 'object_type' => 'FluentCrm\App\Models\Campaign' ]); } return true; } }