__('Event Tracking', 'fluent-crm'), 'value' => 'event_tracking', 'children' => $this->getConditionItems() ]; return $groups; }); } public function getEventTrackingKeyOptions($options = []) { $items = EventTracker::select(['event_key']) ->groupBy('event_key') ->orderBy('event_key', 'ASC') ->get(); $formattedItems = []; foreach ($items as $item) { $formattedItems[] = [ 'id' => $item->event_key, 'title' => $item->event_key ]; } return $formattedItems; } public function applyEventTrackingFilter($query, $filters) { if (!Helper::isExperimentalEnabled('event_tracking')) { return $query; } foreach ($filters as $filter) { if (!array_key_exists('value', $filter) || $filter['value'] === '') { continue; } $relation = 'trackingEvents'; $filterProp = $filter['property']; if ($filterProp == 'event_tracking_key') { $operator = $filter['operator']; $values = $filter['value']; if ($operator == 'not_in') { $query->whereDoesntHave($relation, function ($q) use ($values) { $q->whereIn('event_key', $values); }); } else { $query->whereHas($relation, function ($q) use ($values) { $q->whereIn('event_key', $values); }); } continue; } if ($filterProp == 'event_tracking_title') { $operator = $filter['operator']; if ($operator == '=') { $query->whereHas($relation, function ($q) use ($filter) { $q->where('title', $filter['value']); }); } else if ($operator == '!=') { $query->whereDoesntHave($relation, function ($q) use ($filter) { $q->where('title', $filter['value']); }); } else if ($operator == 'contains') { $query->whereHas($relation, function ($q) use ($filter) { $q->where('title', 'LIKE', '%' . $filter['value'] . '%'); }); } else if ($operator == 'not_contains') { $query->whereDoesntHave($relation, function ($q) use ($filter) { $q->where('title', 'LIKE', '%' . $filter['value'] . '%'); }); } continue; } if ($filterProp == 'event_tracking_value') { $eventKey = Arr::get($filter, 'extra_value'); if (!$eventKey) { continue; } $operator = $filter['operator']; if ($operator == '=') { $query->whereHas($relation, function ($q) use ($filter, $eventKey) { $q->where('value', $filter['value']) ->where('event_key', $eventKey); }); } else if ($operator == '!=') { $query->whereDoesntHave($relation, function ($q) use ($filter, $eventKey) { $q->where('value', $filter['value']) ->where('event_key', $eventKey); }); } else if (in_array($operator, ['<', '>'])) { $query->whereHas($relation, function ($q) use ($filter, $eventKey, $operator) { $q->where('value', $operator, (int)$filter['value']) ->where('event_key', $eventKey); }); } else if ($operator == 'contains') { $query->whereHas($relation, function ($q) use ($filter, $eventKey) { $q->where('value', 'LIKE', '%' . $filter['value'] . '%') ->where('event_key', $eventKey); }); } else if ($operator == 'not_contains') { $query->whereDoesntHave($relation, function ($q) use ($filter, $eventKey) { $q->where('value', 'LIKE', '%' . $filter['value'] . '%') ->where('event_key', $eventKey); }); } continue; } if ($filterProp == 'event_tracking_key_count') { $eventKey = Arr::get($filter, 'extra_value'); if (!$eventKey) { continue; } $operator = $filter['operator']; if ($operator == '=') { $query->whereHas($relation, function ($q) use ($filter, $eventKey) { $q->where('counter', $filter['value']) ->where('event_key', $eventKey); }); } else if ($operator == '!=') { $query->whereDoesntHave($relation, function ($q) use ($filter, $eventKey) { $q->where('counter', $filter['value']) ->where('event_key', $eventKey); }); } else if (in_array($operator, ['<', '>'])) { $query->whereHas($relation, function ($q) use ($filter, $eventKey, $operator) { $q->where('counter', $operator, (int)$filter['value']) ->where('event_key', $eventKey); }); } continue; } } return $query; } public function trackEventActivity($data, $repeatable = true) { return FluentCrmApi('event_tracker')->track($data, $repeatable); } public function addSubscriberInfoWidgets($widgets, $subscriber) { if (!Helper::isExperimentalEnabled('event_tracking')) { return $widgets; } $events = EventTracker::where('subscriber_id', $subscriber->id) ->orderBy('updated_at', 'DESC') ->paginate(); if ($events->isEmpty()) { return $widgets; } $html = '
' . esc_html($event->title) . '
'; if ($event->value) { $html .= '' . wp_kses_post($event->value) . '
'; } $html .= ''; $html .= '