-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathplugin.php
More file actions
167 lines (141 loc) · 6.45 KB
/
plugin.php
File metadata and controls
167 lines (141 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
use SplitTestForElementor\Admin\Classes\Controllers\SplitTestController;
use SplitTestForElementor\Admin\Classes\Controllers\StatisticsController;
use SplitTestForElementor\Admin\Classes\Events\AdminInitEvent;
use SplitTestForElementor\Admin\Classes\Events\AfterSectionEndEvent;
use SplitTestForElementor\Classes\Endpoints\TestController;
use SplitTestForElementor\Classes\Endpoints\VariationController;
use SplitTestForElementor\Classes\Events\FormNewRecordEvent;
use SplitTestForElementor\Classes\Events\FrontendBeforeRenderEvent;
use SplitTestForElementor\Classes\Events\SendHeadersEvent;
use SplitTestForElementor\Classes\Events\WidgetRenderContentEvent;
use SplitTestForElementor\Classes\Events\WpHeaderEvent;
use SplitTestForElementor\Classes\Events\SectionShouldRenderEvent;
use SplitTestForElementor\Classes\Install\DB;
use SplitTestForElementor\Classes\Repo\PostTestManager;
use SplitTestForElementor\Classes\Misc\SettingsManager;
use SplitTestForElementor\Classes\Services\ExternalLinkTrackingService;
use SplitTestForElementor\Classes\Update\UpdateManager;
use SplitTestForElementor\Classes\Services\ExternalPageTrackingService;
/**
* @package SplitTestForElementor
*
* Plugin Name: Split Test For Elementor (Thebys Fork)
* Plugin URI: https://github.com/Thebys/split-test-for-elementor
* Description: Split Test For Elementor — forked with bug fixes for template-loaded tests, SQL injection patches, and distribution improvements.
* Author: Rocket Elements / Thebys
* Version: 1.8.4-fork.3
* Author URI: https://github.com/Thebys
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Update URI: false
* Text Domain: split-test-for-elementor
* Elementor tested up to: 4.4.0
* Elementor Pro tested up to: 4.4.0
*
*/
define('SPLIT_TEST_FOR_ELEMENTOR_MAIN_FILE', __FILE__);
define('SPLIT_TEST_FOR_ELEMENTOR_VERSION', "1.8.4-fork.3");
define('SPLIT_TEST_FOR_ELEMENTOR_VERSION_OPTION_NAME', "split_test_for_elementor_version");
define('SPLIT_TEST_FOR_ELEMENTOR_SUPPORT_LINK', 'https://www.rocketelements.io/support/');
require_once(__DIR__."/vendor/autoload.php");
// Updates and Setup ===================================================================================================
// Setup Database
register_activation_hook(__FILE__, array(new DB(), 'setup'));
register_activation_hook(__FILE__, function () {
global $wp_rewrite;
add_rewrite_rule(
'split-test-for-elementor/v1/tests/([0-9]*?)/track-conversion/?$',
'index.php?test_id=$matches[1]&rocket-split-test-action=track-conversion',
'top'
);
add_rewrite_rule(
'split-test-for-elementor/v1/tests/([0-9]*?)/external-link-redirect/?$',
'index.php?test_id=$matches[1]&rocket-split-test-action=external-link-redirect',
'top'
);
$wp_rewrite->flush_rules();
});
register_deactivation_hook( __FILE__, function () {
global $wp_rewrite;
$wp_rewrite->flush_rules();
});
// =====================================================================================================================
// Decide which test variation to show and tracks conversions
add_action('send_headers', [new SendHeadersEvent(), 'fire']);
add_action('wp_head', [new WpHeaderEvent(), 'fire']);
// Adding css for hiding / showing split test elements
add_action('elementor/frontend/section/before_render', [new FrontendBeforeRenderEvent(), 'fire']);
// Removing widgets from content from output
add_action('elementor/widget/render_content', [new WidgetRenderContentEvent(), 'fire'], 10, 2);
add_action('elementor/frontend/section/should_render', [new SectionShouldRenderEvent(), 'fire'], 10, 2);
add_action('elementor/frontend/container/before_render', [new FrontendBeforeRenderEvent(), 'fire']);
// Admin ===============================================================================================================
function splittest_for_elementor_page() {
$capability = apply_filters('splittest_for_elementor_admin_menu_capability', 'manage_options');
add_menu_page(
'Split test for Elementor',
'Split test',
$capability,
'splittest-for-elementor',
'splittest_for_elementor_page_html',
plugin_dir_url(__FILE__) . 'Admin/assets/images/icon.png',
20
);
}
add_action('admin_menu', 'splittest_for_elementor_page');
// Registering controllers before content is send
add_action('admin_init', [new AdminInitEvent(), 'fire']);
function splittest_for_elementor_page_html() {
switch (isset($_GET['scope']) ? $_GET['scope'] : "test") {
case "test" : (new SplitTestController())->run(); break;
case "statistics" : (new StatisticsController())->run(); break;
default : break;
}
}
add_action('elementor/editor/before_enqueue_scripts', function() {
wp_enqueue_script(
'split-test-for-elementor-editor',
plugins_url('Admin/assets/js/editor.min.js', SPLIT_TEST_FOR_ELEMENTOR_MAIN_FILE),
[],
SPLIT_TEST_FOR_ELEMENTOR_VERSION,
true // in_footer
);
});
// Rest Endpoints ======================================================================================================
add_action('rest_api_init', function () {
register_rest_route( 'splitTestForElementor/v1', '/tests/', [
'methods' => 'POST',
'callback' => array(new TestController(), 'store'),
'permission_callback' => function() { return current_user_can('publish_pages'); }
]);
});
add_action('rest_api_init', function () {
register_rest_route('splitTestForElementor/v1', '/variations/', [
'methods' => 'POST',
'callback' => array(new VariationController(), 'store'),
'permission_callback' => function() { return current_user_can('publish_pages'); }
]);
});
// Editor ==============================================================================================================
// Add Split test controls to editor
add_action('elementor/element/after_section_end', [new AfterSectionEndEvent(), 'fire'], 10, 3);
// Synchronize split tests / posts connections after save
add_action('elementor/editor/after_save', [new PostTestManager(), 'onEditorSave'], 10, 3);
do_action('split_test_for_elementor_after_init');
add_action( 'plugins_loaded', function() {
load_plugin_textdomain( 'split-test-for-elementor' );
});
// Other startup stuff
(new ExternalLinkTrackingService())->registerHooks();
(new ExternalPageTrackingService())->registerHooks();
add_action( 'admin_init', function() {
(new SettingsManager())->registerSettings();
});
add_action( 'elementor_pro/forms/new_record', [new FormNewRecordEvent(), 'fire'], 10, 2 );
// Updates
add_action('plugins_loaded', function() {
if (is_admin()) {
UpdateManager::runUpdates();
}
});