AJAX
10 months ago
Admin_Page
11 months ago
Click_Tracking
1 year ago
Custom_WordPress_Columns
1 year ago
Data_Pruning
1 year ago
Date_Picker
1 year ago
Date_Range
11 months ago
Ecommerce
1 year ago
Email_Reports
11 months ago
Examiner
11 months ago
Filter_Lists
1 year ago
Form_Submissions
11 months ago
Integrations
1 year ago
Interval
1 year ago
Menu_Bar_Stats
1 year ago
Migrations
1 year ago
Models
10 months ago
Overview
11 months ago
Public_API
1 year ago
Rows
10 months ago
Statistics
11 months ago
Tables
11 months ago
Utils
11 months ago
Appearance.php
1 year ago
Campaign_Builder.php
1 year ago
Capability_Manager.php
1 year ago
Chart.php
1 year ago
Chart_Data.php
1 year ago
Click_Tracking.php
1 year ago
Cron_Job.php
1 year ago
Cron_Manager.php
1 year ago
Current_Traffic_Finder.php
1 year ago
Dashboard_Options.php
11 months ago
Dashboard_Widget.php
2 years ago
Database.php
1 year ago
Database_Manager.php
11 months ago
Empty_Report_Option.php
2 years ago
Env.php
1 year ago
Examiner_Config.php
11 months ago
Filters.php
1 year ago
Geo_Database_Background_Job.php
1 year ago
Geo_Database_Manager.php
11 months ago
Geoposition.php
1 year ago
Icon_Directory.php
2 years ago
Icon_Directory_Factory.php
2 years ago
Illuminate_Builder.php
10 months ago
Independent_Analytics.php
11 months ago
Interrupt.php
1 year ago
Known_Referrers.php
11 months ago
MainWP.php
1 year ago
Map.php
1 year ago
Map_Data.php
1 year ago
Migration_Fixer_Job.php
1 year ago
Patch.php
1 year ago
Payload_Validator.php
1 year ago
Plugin_Conflict_Detector.php
11 months ago
Plugin_Group.php
1 year ago
Plugin_Group_Option.php
2 years ago
Query.php
1 year ago
Query_Taps.php
11 months ago
Quick_Stats.php
11 months ago
REST_API.php
11 months ago
Real_Time.php
1 year ago
Report.php
1 year ago
Report_Finder.php
1 year ago
Report_Options_Parser.php
1 year ago
Resource_Identifier.php
1 year ago
Settings.php
11 months ago
Sort_Configuration.php
1 year ago
Tables.php
1 year ago
Track_Resource_Changes.php
1 year ago
View.php
11 months ago
View_Counter.php
1 year ago
Views_Over_Time_Finder.php
1 year ago
WP_Option_Cache_Bust.php
2 years ago
Campaign_Builder.php
101 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP; |
| 4 | |
| 5 | use IAWP\Utils\Singleton; |
| 6 | use IAWP\Utils\String_Util; |
| 7 | use IAWP\Utils\URL; |
| 8 | use IAWPSCOPED\Illuminate\Support\Carbon; |
| 9 | use IAWPSCOPED\League\Uri\Uri; |
| 10 | /** @internal */ |
| 11 | class Campaign_Builder |
| 12 | { |
| 13 | use Singleton; |
| 14 | public function __construct() |
| 15 | { |
| 16 | } |
| 17 | public function render_campaign_builder() |
| 18 | { |
| 19 | echo \IAWPSCOPED\iawp_blade()->run('campaign-builder', ['campaigns' => $this->get_previously_created_campaigns()]); |
| 20 | } |
| 21 | public function create_campaign($path, $source, $medium, $campaign, $term, $content) |
| 22 | { |
| 23 | global $wpdb; |
| 24 | $has_errors = \false; |
| 25 | $path = \strlen($path) > 0 ? $path : ''; |
| 26 | $path_error = null; |
| 27 | $source_error = null; |
| 28 | $medium_error = null; |
| 29 | $campaign_error = null; |
| 30 | $term = \strlen($term) > 0 ? $term : null; |
| 31 | $content = \strlen($content) > 0 ? $content : null; |
| 32 | $path = String_Util::str_starts_with($path, '/') ? \substr($path, 1) : $path; |
| 33 | $url = new URL(\trailingslashit(\site_url()) . $path); |
| 34 | if (!$url->is_valid_url()) { |
| 35 | $has_errors = \true; |
| 36 | $path_error = 'path invalid'; |
| 37 | } |
| 38 | if (\strlen($source) === 0) { |
| 39 | $has_errors = \true; |
| 40 | $source_error = 'Source is required'; |
| 41 | } |
| 42 | if (\strlen($medium) === 0) { |
| 43 | $has_errors = \true; |
| 44 | $medium_error = 'Medium is required'; |
| 45 | } |
| 46 | if (\strlen($campaign) === 0) { |
| 47 | $has_errors = \true; |
| 48 | $campaign_error = 'Campaign is required'; |
| 49 | } |
| 50 | if ($has_errors) { |
| 51 | return \IAWPSCOPED\iawp_blade()->run('campaign-builder', ['path' => $path, 'path_error' => $path_error, 'utm_source' => $source, 'utm_source_error' => $source_error, 'utm_medium' => $medium, 'utm_medium_error' => $medium_error, 'utm_campaign' => $campaign, 'utm_campaign_error' => $campaign_error, 'utm_term' => $term, 'utm_content' => $content, 'campaigns' => $this->get_previously_created_campaigns()]); |
| 52 | } |
| 53 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 54 | $wpdb->insert($campaign_urls_table, ['path' => $path, 'utm_source' => $source, 'utm_medium' => $medium, 'utm_campaign' => $campaign, 'utm_term' => $term, 'utm_content' => $content, 'created_at' => (new \DateTime())->format('Y-m-d H:i:s')]); |
| 55 | $url = $this->build_url($path, $source, $medium, $campaign, $term, $content); |
| 56 | return \IAWPSCOPED\iawp_blade()->run('campaign-builder', ['path' => $path, 'utm_source' => $source, 'utm_medium' => $medium, 'utm_campaign' => $campaign, 'utm_term' => $term, 'utm_content' => $content, 'new_campaign_url' => $url, 'campaigns' => $this->get_previously_created_campaigns()]); |
| 57 | } |
| 58 | public function build_url($path, $source, $medium, $campaign, $term = null, $content = null) : string |
| 59 | { |
| 60 | $path = String_Util::str_starts_with($path, '/') ? \substr($path, 1) : $path; |
| 61 | $uri = Uri::createFromString(\trailingslashit(\site_url()) . $path); |
| 62 | $existing_query = $uri->getQuery(); |
| 63 | if (\is_null($existing_query)) { |
| 64 | $existing_query = []; |
| 65 | } else { |
| 66 | \parse_str($existing_query, $existing_query); |
| 67 | } |
| 68 | $existing_query['utm_source'] = $source; |
| 69 | $existing_query['utm_medium'] = $medium; |
| 70 | $existing_query['utm_campaign'] = $campaign; |
| 71 | if (isset($term)) { |
| 72 | $existing_query['utm_term'] = $term; |
| 73 | } |
| 74 | if (isset($content)) { |
| 75 | $existing_query['utm_content'] = $content; |
| 76 | } |
| 77 | return $uri->withQuery(\http_build_query($existing_query)); |
| 78 | } |
| 79 | private function get_previously_created_campaigns() |
| 80 | { |
| 81 | global $wpdb; |
| 82 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 83 | $results = $wpdb->get_results("\n SELECT * FROM {$campaign_urls_table} ORDER BY created_at DESC LIMIT 100\n "); |
| 84 | return \array_map(function ($result) { |
| 85 | $created_at = Carbon::parse($result->created_at)->diffForHumans(); |
| 86 | return ['campaign_url_id' => $result->campaign_url_id, 'result' => \json_encode((array) $result), 'created_at' => $created_at, 'url' => $this->build_url($result->path, $result->utm_source, $result->utm_medium, $result->utm_campaign, $result->utm_term, $result->utm_content)]; |
| 87 | }, $results); |
| 88 | } |
| 89 | public static function has_campaigns() : bool |
| 90 | { |
| 91 | $campaign_builder = new \IAWP\Campaign_Builder(); |
| 92 | return \count($campaign_builder->get_previously_created_campaigns()) > 0; |
| 93 | } |
| 94 | public static function delete_campaign(string $campaign_url_id) |
| 95 | { |
| 96 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 97 | $delete_campaign = \IAWP\Illuminate_Builder::new(); |
| 98 | $delete_campaign->from($campaign_urls_table)->where('campaign_url_id', '=', $campaign_url_id)->delete(); |
| 99 | } |
| 100 | } |
| 101 |