PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.4.2
Independent Analytics – WordPress Analytics Plugin v2.4.2
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 All 120 releases
independent-analytics / IAWP / AJAX / Copy_Report.php
Copy_Report.php
61 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP\AJAX;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Query;
7 use IAWP\Report;
8 use IAWP\Report_Options_Parser;
9 /** @internal */
10 class Copy_Report extends \IAWP\AJAX\AJAX
11 {
12 /**
13 * @return array
14 */
15 protected function action_required_fields() : array
16 {
17 return ['name'];
18 }
19 /**
20 * @return string
21 */
22 protected function action_name() : string
23 {
24 return 'iawp_copy_report';
25 }
26 /**
27 * @return void
28 */
29 protected function action_callback() : void
30 {
31 $reports_table = Query::get_table_name(Query::REPORTS);
32 $existing_report_options = $this->get_existing_report_options();
33 if (\is_null($existing_report_options)) {
34 \wp_send_json_error();
35 }
36 $new_report_id = Illuminate_Builder::get_builder()->from($reports_table)->insertGetId($existing_report_options);
37 $report_options_parser = Report_Options_Parser::from_json($_POST['changes']);
38 if (\count($report_options_parser->get_options_for_updating()) > 0) {
39 Illuminate_Builder::get_builder()->from($reports_table)->where('report_id', '=', $new_report_id)->update($report_options_parser->get_options_for_updating());
40 }
41 $row = Illuminate_Builder::get_builder()->from($reports_table)->where('report_id', '=', $new_report_id)->first();
42 $report = new Report($row);
43 \wp_send_json_success(['url' => $report->url()]);
44 }
45 private function get_existing_report_options() : ?array
46 {
47 if (\strlen($this->get_field('id')) === 0) {
48 return ['name' => $this->get_field('name'), 'type' => $this->get_field('type')];
49 }
50 $reports_table = Query::get_table_name(Query::REPORTS);
51 $existing_report = Illuminate_Builder::get_builder()->from($reports_table)->where('report_id', '=', $this->get_field('id'))->first();
52 if (\is_null($existing_report)) {
53 return null;
54 }
55 $existing_report = (array) $existing_report;
56 unset($existing_report['report_id']);
57 $existing_report['name'] = $this->get_field('name');
58 return $existing_report;
59 }
60 }
61