AJAX
1 year ago
Admin_Page
1 year ago
Custom_WordPress_Columns
2 years ago
Data_Pruning
1 year ago
Date_Picker
1 year ago
Date_Range
1 year ago
Ecommerce
1 year ago
Email_Reports
1 year ago
Filter_Lists
2 years ago
Form_Submissions
1 year ago
Interval
2 years ago
Menu_Bar_Stats
1 year ago
Migrations
1 year ago
Models
1 year ago
Public_API
2 years ago
Rows
1 year ago
Statistics
1 year ago
Tables
1 year ago
Utils
1 year ago
Campaign_Builder.php
2 years ago
Capability_Manager.php
1 year ago
Chart.php
1 year ago
Chart_Geo.php
1 year ago
Cron_Job.php
1 year ago
Cron_Job_Autoloader.php
1 year ago
Cron_Manager.php
2 years ago
Current_Traffic_Finder.php
2 years ago
Dashboard_Options.php
2 years ago
Dashboard_Widget.php
2 years ago
Database.php
2 years ago
Database_Manager.php
2 years ago
Empty_Report_Option.php
2 years ago
Env.php
1 year ago
Filters.php
1 year ago
Geo_Database_Background_Job.php
2 years ago
Geo_Database_Manager.php
1 year ago
Geoposition.php
2 years ago
Icon_Directory.php
2 years ago
Icon_Directory_Factory.php
2 years ago
Illuminate_Builder.php
1 year ago
Independent_Analytics.php
1 year ago
Interrupt.php
1 year ago
Known_Referrers.php
2 years ago
Patch.php
1 year ago
Plugin_Conflict_Detector.php
1 year ago
Plugin_Group.php
1 year ago
Plugin_Group_Option.php
2 years ago
Query.php
1 year ago
Query_Taps.php
1 year ago
Quick_Stats.php
2 years ago
REST_API.php
1 year ago
Real_Time.php
1 year ago
Report.php
2 years ago
Report_Finder.php
2 years ago
Report_Options_Parser.php
1 year ago
Resource_Identifier.php
1 year ago
Settings.php
1 year ago
Sort_Configuration.php
2 years ago
Track_Resource_Changes.php
2 years ago
View.php
2 years ago
View_Counter.php
1 year ago
Visitors_Over_Time_Finder.php
2 years ago
WP_Option_Cache_Bust.php
2 years ago
Campaign_Builder.php
100 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 | $url = new URL(\site_url() . $path); |
| 33 | if (!$url->is_valid_url()) { |
| 34 | $has_errors = \true; |
| 35 | $path_error = 'path invalid'; |
| 36 | } |
| 37 | if (\strlen($source) === 0) { |
| 38 | $has_errors = \true; |
| 39 | $source_error = 'Source is required'; |
| 40 | } |
| 41 | if (\strlen($medium) === 0) { |
| 42 | $has_errors = \true; |
| 43 | $medium_error = 'Medium is required'; |
| 44 | } |
| 45 | if (\strlen($campaign) === 0) { |
| 46 | $has_errors = \true; |
| 47 | $campaign_error = 'Campaign is required'; |
| 48 | } |
| 49 | if ($has_errors) { |
| 50 | 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()]); |
| 51 | } |
| 52 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 53 | $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')]); |
| 54 | $url = $this->build_url($path, $source, $medium, $campaign, $term, $content); |
| 55 | 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()]); |
| 56 | } |
| 57 | public function build_url($path, $source, $medium, $campaign, $term = null, $content = null) : string |
| 58 | { |
| 59 | $path = String_Util::str_starts_with($path, '/') ? \substr($path, 1) : $path; |
| 60 | $uri = Uri::createFromString(\trailingslashit(\site_url()) . $path); |
| 61 | $existing_query = $uri->getQuery(); |
| 62 | if (\is_null($existing_query)) { |
| 63 | $existing_query = []; |
| 64 | } else { |
| 65 | \parse_str($existing_query, $existing_query); |
| 66 | } |
| 67 | $existing_query['utm_source'] = $source; |
| 68 | $existing_query['utm_medium'] = $medium; |
| 69 | $existing_query['utm_campaign'] = $campaign; |
| 70 | if (isset($term)) { |
| 71 | $existing_query['utm_term'] = $term; |
| 72 | } |
| 73 | if (isset($content)) { |
| 74 | $existing_query['utm_content'] = $content; |
| 75 | } |
| 76 | return $uri->withQuery(\http_build_query($existing_query)); |
| 77 | } |
| 78 | private function get_previously_created_campaigns() |
| 79 | { |
| 80 | global $wpdb; |
| 81 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 82 | $results = $wpdb->get_results("\n SELECT * FROM {$campaign_urls_table} ORDER BY created_at DESC LIMIT 100\n "); |
| 83 | return \array_map(function ($result) { |
| 84 | $created_at = Carbon::parse($result->created_at)->diffForHumans(); |
| 85 | 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)]; |
| 86 | }, $results); |
| 87 | } |
| 88 | public static function has_campaigns() : bool |
| 89 | { |
| 90 | $campaign_builder = new \IAWP\Campaign_Builder(); |
| 91 | return \count($campaign_builder->get_previously_created_campaigns()) > 0; |
| 92 | } |
| 93 | public static function delete_campaign(string $campaign_url_id) |
| 94 | { |
| 95 | $campaign_urls_table = \IAWP\Query::get_table_name(\IAWP\Query::CAMPAIGN_URLS); |
| 96 | $delete_campaign = \IAWP\Illuminate_Builder::get_builder(); |
| 97 | $delete_campaign->from($campaign_urls_table)->where('campaign_url_id', '=', $campaign_url_id)->delete(); |
| 98 | } |
| 99 | } |
| 100 |