PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / AJAX / Export_Report_Statistics.php
independent-analytics / IAWP / AJAX Last commit date
AJAX.php 3 months ago AJAX_Manager.php 4 days ago Archive_Link.php 3 months ago Clear_Favorite_Report.php 4 days ago Click_Tracking_Cache_Cleared.php 3 months ago Configure_Pruner.php 3 months ago Copy_Report.php 3 months ago Create_Campaign.php 2 years ago Create_Report.php 3 months ago Delete_Campaign.php 2 years ago Delete_Data.php 3 months ago Delete_Link.php 3 months ago Delete_Module.php 3 months ago Delete_Report.php 3 months ago Dismiss_Notice.php 1 year ago Edit_Link.php 3 months ago Edit_Module.php 3 months ago Export_Report_Statistics.php 2 months ago Export_Report_Table.php 9 months ago Export_Reports.php 4 days ago FetchRealTimeData.php 4 days ago Filter.php 2 months ago Get_Journey_Timeline.php 6 months ago Get_Markup_For_Module.php 1 year ago Get_Markup_For_Modules.php 3 months ago Import_Reports.php 3 months ago Migration_Status.php 3 months ago Pause_Email_Reports.php 3 months ago Preview_Email.php 2 months ago Refresh_Modules.php 3 months ago Rename_Report.php 3 months ago Reorder_Modules.php 3 months ago Reset_Analytics.php 3 months ago Reset_Overview.php 3 months ago SaveRealTimePreferences.php 4 days ago Save_Module.php 3 months ago Save_Report.php 3 months ago Set_Favorite_Report.php 1 year ago Set_WooCommerce_Statuses_To_Track.php 3 months ago Sort_Links.php 3 months ago Sort_Reports.php 3 months ago Test_Email.php 2 months ago Update_Capabilities.php 3 months ago Update_User_Settings.php 3 months ago
Export_Report_Statistics.php
95 lines
1 <?php
2
3 namespace IAWP\AJAX;
4
5 use DateTime;
6 use IAWP\Date_Range\Date_Range;
7 use IAWP\Date_Range\Exact_Date_Range;
8 use IAWP\Date_Range\Relative_Date_Range;
9 use IAWP\Env;
10 use IAWP\Examiner_Config;
11 use IAWP\Statistics\Intervals\Intervals;
12 use IAWP\Statistics\Statistics;
13 use IAWP\Tables\Table;
14 use IAWP\Utils\Timezone;
15 use Throwable;
16 /** @internal */
17 class Export_Report_Statistics extends \IAWP\AJAX\AJAX
18 {
19 protected function action_name() : string
20 {
21 return 'iawp_export_report_statistics';
22 }
23 protected function action_callback() : void
24 {
25 $date_range = $this->get_date_range();
26 $is_new_date_range = $this->get_field('is_new_date_range') === 'true';
27 $filters = $this->get_field('filters') ?? [];
28 $sort_column = $this->get_field('sort_column') ?? null;
29 $sort_direction = $this->get_field('sort_direction') ?? null;
30 $group = $this->get_field('group') ?? null;
31 $chart_interval = $is_new_date_range ? Intervals::default_for($date_range->number_of_days()) : Intervals::find_by_id($this->get_field('chart_interval'));
32 $page = \intval($this->get_field('page') ?? 1);
33 $number_of_rows = $page * \IAWPSCOPED\iawp()->pagination_page_size();
34 $table_type = $this->get_field('table_type');
35 $is_geo_table = $table_type === 'geo';
36 $examiner_config = Examiner_Config::make(['type' => $this->get_field('examiner_type'), 'group' => $this->get_field('examiner_group'), 'id' => $this->get_int_field('examiner_id')]);
37 if ($examiner_config) {
38 $table_class = Env::get_table($examiner_config->type());
39 /** @var Table $table */
40 $table = new $table_class($examiner_config->group());
41 } else {
42 $table_class = Env::get_table();
43 /** @var Table $table */
44 $table = new $table_class($group);
45 }
46 $filters = $table->sanitize_filters($filters);
47 $sort_configuration = $table->sanitize_sort_parameters($sort_column, $sort_direction);
48 $rows_class = $table->group()->rows_class();
49 $statistics_class = $table->group()->statistics_class();
50 if ($is_geo_table) {
51 $rows_query = new $rows_class($date_range, $sort_configuration, null, $filters);
52 } else {
53 $rows_query = new $rows_class($date_range, $sort_configuration, $number_of_rows, $filters);
54 }
55 if ($examiner_config) {
56 $rows_query->limit_to($examiner_config->id());
57 }
58 if (empty($filters) && !$examiner_config) {
59 /** @var Statistics $statistics */
60 $statistics = new $statistics_class($date_range, null, $chart_interval);
61 } else {
62 $statistics = new $statistics_class($date_range, $rows_query, $chart_interval);
63 }
64 $statistics->fetch();
65 \wp_send_json_success(['csv' => $statistics->get_statistics_as_csv()->to_string()]);
66 }
67 /**
68 * Get the date range for the filter request
69 *
70 * The date info can be supplied in one of two ways.
71 *
72 * The first is to provide a relative_range_id which is converted into start, end, and label.
73 *
74 * The second is to provide explicit start and end fields which will be used as is.
75 *
76 * @return Date_Range
77 */
78 private function get_date_range() : Date_Range
79 {
80 $relative_range_id = $this->get_field('relative_range_id');
81 $exact_start = $this->get_field('exact_start');
82 $exact_end = $this->get_field('exact_end');
83 if (!\is_null($exact_start) && !\is_null($exact_end)) {
84 try {
85 $start = new DateTime($exact_start, Timezone::site_timezone());
86 $end = new DateTime($exact_end, Timezone::site_timezone());
87 return new Exact_Date_Range($start, $end);
88 } catch (Throwable $e) {
89 // Do nothing and fall back to default relative date range
90 }
91 }
92 return new Relative_Date_Range($relative_range_id);
93 }
94 }
95