HubSpot – Free Marketing Plugin for WordPress - Version 5.4.0

Version Description

Download this release

Release Info

Developer leadin
Plugin Icon 128x128 HubSpot – Free Marketing Plugin for WordPress
Version 5.4.0
Comparing to
See all releases

Code changes from version 5.3.1 to 5.4.0

admin/leadin-admin.php DELETED
@@ -1,251 +0,0 @@
1
- <?php
2
-
3
- if (!defined('LEADIN_PLUGIN_VERSION')) {
4
- header('HTTP/1.0 403 Forbidden');
5
- die;
6
- }
7
-
8
- //=============================================
9
- // Define Constants
10
- //=============================================
11
-
12
- if (!defined('LEADIN_ADMIN_PATH'))
13
- define('LEADIN_ADMIN_PATH', untrailingslashit(__FILE__));
14
-
15
- //=============================================
16
- // Include Needed Files
17
- //=============================================
18
-
19
- include_once(ABSPATH . 'wp-admin/includes/plugin.php');
20
-
21
- if (!class_exists('LI_Pointers'))
22
- require_once LEADIN_PLUGIN_DIR . '/inc/class-leadin-pointers.php';
23
-
24
- //=============================================
25
- // WPLeadInAdmin Class
26
- //=============================================
27
- class WPLeadInAdmin
28
- {
29
-
30
- var $li_viewers;
31
- var $stats_dashboard;
32
- var $action;
33
-
34
- /**
35
- * Class constructor
36
- */
37
- function __construct()
38
- {
39
- //=============================================
40
- // Hooks & Filters
41
- //=============================================
42
-
43
- $plugin_version = get_option('leadin_pluginVersion');
44
-
45
- $this->action = $this->leadin_current_action();
46
-
47
- // If the plugin version matches the latest version escape the update function
48
- if ($plugin_version != LEADIN_PLUGIN_VERSION)
49
- self::leadin_update_check();
50
-
51
- add_action('admin_menu', array(&$this, 'leadin_add_menu_items'));
52
- add_action('admin_print_scripts', array(&$this, 'add_leadin_admin_scripts'));
53
- add_filter('plugin_action_links_' . 'leadin/leadin.php', array($this, 'leadin_plugin_settings_link'));
54
-
55
- }
56
-
57
- function leadin_update_check()
58
- {
59
- update_option('leadin_pluginVersion', LEADIN_PLUGIN_VERSION);
60
- }
61
-
62
- //=============================================
63
- // Menus
64
- //=============================================
65
-
66
- /**
67
- * Adds Leadin menu to /wp-admin sidebar
68
- */
69
- function leadin_add_menu_items()
70
- {
71
- $options = get_option('leadin_options');
72
-
73
- global $submenu;
74
- global $wp_version;
75
-
76
- // Block non-sanctioned users from accessing Leadin
77
- $capability = 'activate_plugins';
78
- if (!current_user_can('activate_plugins')) {
79
- if (!array_key_exists('li_grant_access_to_' . leadin_get_user_role(), $options))
80
- return FALSE;
81
- else {
82
- if (current_user_can('manage_network')) // super admin
83
- $capability = 'manage_network';
84
- else if (current_user_can('edit_pages')) // editor
85
- $capability = 'edit_pages';
86
- else if (current_user_can('publish_posts')) // author
87
- $capability = 'publish_posts';
88
- else if (current_user_can('edit_posts')) // contributor
89
- $capability = 'edit_posts';
90
- else if (current_user_can('read')) // subscriber
91
- $capability = 'read';
92
-
93
- }
94
- }
95
-
96
- $leadin_icon = LEADIN_PATH . '/images/leadin-icon-16x16-white.png';
97
-
98
- add_menu_page('Leadin', 'Leadin', $capability, 'leadin', array($this, 'leadin_build_app'), $leadin_icon, '25.100713');
99
-
100
- $slumberMode = get_option('leadin_slumber_mode');
101
-
102
- if (!$slumberMode) {
103
- add_submenu_page('leadin', 'Contacts', 'Contacts', 'activate_plugins', 'leadin_contacts', array($this, 'leadin_build_app'));
104
- add_submenu_page('leadin', 'Lead Flows', 'Lead Flows', 'activate_plugins', 'leadin_flows', array($this, 'leadin_build_app'));
105
- add_submenu_page('leadin', 'Collected Forms', 'Collected Forms', 'activate_plugins', 'leadin_collected_forms', array($this, 'leadin_build_app'));
106
- add_submenu_page('leadin', 'Settings', 'Settings', 'activate_plugins', 'leadin_settings', array($this, 'leadin_build_app'));
107
-
108
- $submenu['leadin'][0][0] = 'Dashboard';
109
- }
110
-
111
- if (!isset($_GET['page']) || $_GET['page'] != ('leadin' || 'leadin_settings' || 'leadin_contacts' || 'leadin_flows' || 'leadin_collected_forms')) {
112
- if (!get_option('leadin_portalId'))
113
- $li_pointers = new LI_Pointers(TRUE);
114
- //else if ( ! get_option('leadin_portalId') && $options )
115
- //$li_pointers = new LI_Pointers(FALSE);
116
- }
117
- }
118
-
119
- //=============================================
120
- // Settings Page
121
- //=============================================
122
-
123
- /**
124
- * Adds setting link for Leadin to plugins management page
125
- *
126
- * @param array $links
127
- * @return array
128
- */
129
- function leadin_plugin_settings_link($links)
130
- {
131
- $fullyRegistered = get_option('leadin_hapikey');
132
- if ($fullyRegistered) {
133
- $url = get_admin_url(get_current_blog_id(), 'admin.php?page=leadin_settings');
134
- } else {
135
- $url = get_admin_url(get_current_blog_id(), 'admin.php?page=leadin');
136
- }
137
-
138
- $settings_link = '<a href="' . $url . '">Settings</a>';
139
- array_unshift($links, $settings_link);
140
- return $links;
141
- }
142
-
143
- /**
144
- * Creates leadin app
145
- */
146
-
147
- function leadin_build_app()
148
- {
149
- global $wp_version;
150
-
151
- echo '<div id="leadin" class="wrap ' . ($wp_version < 3.8 && !is_plugin_active('mp6/mp6.php') ? 'pre-mp6' : '') . '"></div>';
152
-
153
- wp_enqueue_style('leadin-css');
154
- wp_enqueue_script('leadin-app');
155
-
156
- }
157
-
158
- function update_option_leadin_options_callback($old_value, $new_value)
159
- {
160
- }
161
-
162
- //=============================================
163
- // Admin Styles & Scripts
164
- //=============================================
165
-
166
- /**
167
- * Adds admin javascript
168
- */
169
- function add_leadin_admin_scripts()
170
- {
171
- global $pagenow;
172
- global $wp_roles;
173
- global $wp_version;
174
-
175
- $ajaxUrl = get_admin_url(get_current_blog_id(), 'admin-ajax.php');
176
-
177
- $leadin_config = array(
178
- 'portalId' => get_option('leadin_portalId'),
179
- 'hapikey' => get_option('leadin_hapikey'),
180
- 'slumberMode' => get_option('leadin_slumber_mode'),
181
- 'env' => constant('LEADIN_ENV'),
182
- 'user' => $this->leadin_get_user_for_tracking(),
183
- 'allRoles' => $wp_roles->get_names(),
184
- 'leadinPluginVersion' => constant('LEADIN_PLUGIN_VERSION'),
185
- 'wpVersion' => $wp_version,
186
- 'siteUrl' => get_site_url(),
187
- 'adminEmail' => get_option('admin_email'),
188
- 'siteName' => get_bloginfo('name'),
189
- 'adminBaseUrl' => get_admin_url(get_current_blog_id(), 'admin.php'),
190
- 'leadinPluginDirectory' => LEADIN_PLUGIN_SLUG,
191
- 'ajaxUrl' => is_ssl() ? str_replace('http:', 'https:', $ajaxUrl) : str_replace('https:', 'http:', $ajaxUrl),
192
- 'locale' => get_locale(),
193
- 'timezone' => get_option('gmt_offset'),
194
- 'timezoneString' => get_option('timezone_string') // If not set by the user manually it will be an empty string
195
- );
196
-
197
- if (($pagenow == 'admin.php' && isset($_GET['page']) && strstr($_GET['page'], 'leadin'))) {
198
- wp_register_script('leadin-head-js', leadin_get_resource_url('/bundle/head/head.js'), FALSE, FALSE, FALSE);
199
- wp_localize_script('leadin-head-js', 'leadin_config', $leadin_config);
200
- wp_enqueue_script('leadin-head-js');
201
-
202
- wp_register_script('leadin-app', leadin_get_resource_url('/bundle/app.js'), array('backbone'), FALSE, TRUE);
203
- wp_register_style('leadin-css', leadin_get_resource_url('/bundle/app.css'));
204
- }
205
- }
206
-
207
- //=============================================
208
- // Internal Class Functions
209
- //=============================================
210
-
211
- function leadin_get_user_for_tracking()
212
- {
213
- $leadin_user = leadin_get_current_user();
214
- $tracking_leadin_user = array(
215
- 'hashed_wp_url' => $leadin_user['user_id'],
216
- 'name' => $leadin_user['alias'],
217
- 'email' => $leadin_user['email'],
218
- 'wp-url' => $leadin_user['wp_url'],
219
- 'wp-version' => $leadin_user['wp_version'],
220
- 'li-source' => LEADIN_SOURCE,
221
- 'website' => $leadin_user['wp_url'],
222
- 'company' => $leadin_user['wp_url'],
223
- 'utm_source' => $leadin_user['utm_source'],
224
- 'utm_medium' => $leadin_user['utm_medium'],
225
- 'utm_term' => $leadin_user['utm_term'],
226
- 'utm_content' => $leadin_user['utm_term'],
227
- 'utm_campaign' => $leadin_user['utm_campaign'],
228
- 'referral_source' => $leadin_user['referral_source'],
229
- 'user_email' => $leadin_user['user_email']
230
- );
231
- return $tracking_leadin_user;
232
- }
233
-
234
- /**
235
- * GET and set url actions into readable strings
236
- * @return string if actions are set, bool if no actions set
237
- */
238
- function leadin_current_action()
239
- {
240
- if (isset($_REQUEST['action']) && -1 != $_REQUEST['action'])
241
- return $_REQUEST['action'];
242
-
243
- if (isset($_REQUEST['action2']) && -1 != $_REQUEST['action2'])
244
- return $_REQUEST['action2'];
245
-
246
- return FALSE;
247
- }
248
-
249
- }
250
-
251
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/banner-1544x500.png ADDED
Binary file
assets/banner-772x250.png ADDED
Binary file
assets/icon-128x128.png ADDED
Binary file
assets/icon-256x256.png ADDED
Binary file
images/leadin-icon-16x16-white.png DELETED
Binary file
inc/class-leadin-pointers.php DELETED
@@ -1,127 +0,0 @@
1
- <?php
2
-
3
- if (!defined('LEADIN_PLUGIN_VERSION')) {
4
- header('HTTP/1.0 403 Forbidden');
5
- die;
6
- }
7
-
8
- /**
9
- * This class handles the pointers used in the introduction tour.
10
- *
11
- * @todo Add an introdutory pointer on the edit post page too.
12
- */
13
- class LI_Pointers
14
- {
15
-
16
- /**
17
- * Class constructor.
18
- */
19
- function __construct($new_install = FALSE)
20
- {
21
- //=============================================
22
- // Hooks & Filters
23
- //=============================================
24
-
25
- if ($new_install) {
26
- add_action('admin_enqueue_scripts', array($this, 'enqueue_new_install_pointer'));
27
- }
28
- }
29
-
30
- /**
31
- * Enqueue styles and scripts needed for the pointers.
32
- */
33
- function enqueue_new_install_pointer()
34
- {
35
- if (!current_user_can('manage_options'))
36
- return;
37
-
38
- wp_enqueue_style('wp-pointer');
39
- wp_enqueue_script('jquery-ui');
40
- wp_enqueue_script('wp-pointer');
41
- wp_enqueue_script('utils');
42
-
43
- add_action('admin_print_footer_scripts', array($this, 'li_settings_popup_new'));
44
- }
45
-
46
- /**
47
- * Loads in the required scripts for the pointer
48
- */
49
- function enqueue_pointer_scripts()
50
- {
51
- wp_enqueue_style('wp-pointer');
52
- wp_enqueue_script('jquery-ui');
53
- wp_enqueue_script('wp-pointer');
54
- wp_enqueue_script('utils');
55
- }
56
-
57
- /**
58
- * Shows a popup that asks for permission to allow tracking.
59
- */
60
- function li_settings_popup_new()
61
- {
62
- $id = '#toplevel_page_leadin';
63
-
64
- $content = '<h3>' . __('So close...', 'leadin') . '</h3>';
65
- $content .= '<p>' . __('Leadin needs just a bit more info to get up and running. Click on \'Complete Setup\' to complete the setup.', 'leadin') . '</p>';
66
-
67
- $opt_arr = array(
68
- 'content' => $content,
69
- 'position' => array('edge' => 'left', 'align' => 'center')
70
- );
71
-
72
- $function2 = 'li_redirect_to_leadin()';
73
-
74
- $this->print_scripts($id, $opt_arr, 'Complete Setup', FALSE, '', $function2);
75
- }
76
-
77
- /**
78
- * Prints the pointer script
79
- *
80
- * @param string $selector The CSS selector the pointer is attached to.
81
- * @param array $options The options for the pointer.
82
- * @param string $button1 Text for button 1
83
- * @param string|bool $button2 Text for button 2 (or false to not show it, defaults to false)
84
- * @param string $button2_function The JavaScript function to attach to button 2
85
- * @param string $button1_function The JavaScript function to attach to button 1
86
- */
87
- function print_scripts($selector, $options, $button1, $button2 = FALSE, $button2_function = '', $button1_function = '')
88
- {
89
- ?>
90
- <script type="text/javascript">
91
- //<![CDATA[
92
- (function ($) {
93
-
94
- var li_pointer_options = <?php echo json_encode( $options ); ?>, setup;
95
-
96
- function li_redirect_to_leadin() {
97
- window.location.href = "<?php echo get_bloginfo('wpurl'); ?>/wp-admin/admin.php?page=leadin";
98
- }
99
-
100
- li_pointer_options = $.extend(li_pointer_options, {
101
- buttons: function (event, t) {
102
- button = jQuery('<a id="pointer-close" style="margin-left:5px" class="button-secondary">' + '<?php echo $button1; ?>' + '</a>');
103
- button.bind('click.pointer', function () {
104
- window.location.href = "<?php echo get_bloginfo('wpurl'); ?>/wp-admin/admin.php?page=leadin";
105
- //t.element.pointer('close');
106
- });
107
- return button;
108
- },
109
- close: function () {
110
- }
111
- });
112
-
113
- setup = function () {
114
- $('<?php echo $selector; ?>').pointer(li_pointer_options).pointer('open');
115
- };
116
-
117
- if (li_pointer_options.position && li_pointer_options.position.defer_loading)
118
- $(window).bind('load.wp-pointers', setup);
119
- else
120
- $(document).ready(setup);
121
- })(jQuery);
122
- //]]>
123
-
124
- </script>
125
- <?php
126
- }
127
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-leadin.php DELETED
@@ -1,134 +0,0 @@
1
- <?php
2
-
3
- //=============================================
4
- // WPLeadIn Class
5
- //=============================================
6
- class WPLeadIn
7
- {
8
- /**
9
- * Class constructor
10
- */
11
- function __construct()
12
- {
13
- global $pagenow;
14
-
15
- if (is_user_logged_in()) {
16
- add_action('admin_bar_menu', array($this, 'add_leadin_link_to_admin_bar'), 999);
17
- }
18
-
19
- if (is_admin()) {
20
- if (!defined('DOING_AJAX') || !DOING_AJAX)
21
- $li_wp_admin = new WPLeadInAdmin();
22
- } else {
23
- // Adds the leadin-tracking script to wp-login.php page which doesnt hook into the enqueue logic
24
- if ($this->leadin_is_login_or_register_page())
25
- add_action('login_enqueue_scripts', array($this, 'add_leadin_frontend_scripts'));
26
- else
27
- add_action('wp_enqueue_scripts', array($this, 'add_leadin_frontend_scripts'));
28
- }
29
- }
30
-
31
- //=============================================
32
- // Scripts & Styles
33
- //=============================================
34
-
35
- /**
36
- * Adds front end javascript + initializes ajax object
37
- */
38
-
39
- function add_leadin_frontend_scripts()
40
- {
41
-
42
- add_filter('script_loader_tag', array($this, 'leadin_add_embed_script_attributes'), 10, 2);
43
-
44
- $embedDomain = constant('LEADIN_EMBED_DOMAIN');
45
- $portalId = get_option('leadin_portalId');
46
- $slumberMode = get_option('leadin_slumber_mode');
47
-
48
- if (empty($portalId)) {
49
- echo '<!-- Leadin embed JS disabled as a portalId has not yet been configured -->';
50
- return;
51
- }
52
-
53
- $embedUrl = '//' . $embedDomain . '/js/v1/' . $portalId . '.js';
54
- $embedId = 'leadin-embed-js';
55
-
56
- if ($slumberMode || $portalId > 2476588) {
57
- // Send new & slumber-mode accounts to the new script loader service
58
- $embedDomain = constant('LEADIN_SCRIPT_LOADER_DOMAIN');
59
- $embedUrl = '//' . $embedDomain . '/' . $portalId . '.js';
60
- $embedId = 'leadin-scriptloader-js';
61
- }
62
-
63
-
64
- if (is_single())
65
- $page_type = 'post';
66
- else if (is_front_page())
67
- $page_type = 'home';
68
- else if (is_archive())
69
- $page_type = 'archive';
70
- else if ($this->leadin_is_login_or_register_page())
71
- $page_type = 'login';
72
- else if (is_page())
73
- $page_type = 'page';
74
- else
75
- $page_type = 'other';
76
-
77
- $leadin_wordpress_info = array(
78
- 'userRole' => (is_user_logged_in()) ? leadin_get_user_role() : 'visitor',
79
- 'pageType' => $page_type,
80
- 'leadinPluginVersion' => LEADIN_PLUGIN_VERSION
81
- );
82
-
83
- wp_register_script($embedId, $embedUrl, array('jquery'), FALSE, TRUE);
84
- wp_localize_script($embedId, 'leadin_wordpress', $leadin_wordpress_info);
85
- wp_enqueue_script($embedId);
86
- }
87
-
88
- function leadin_add_embed_script_attributes($tag, $handle)
89
- {
90
- if ($handle == 'leadin-embed-js')
91
- return str_replace(' src', ' async defer crossorigin="use-credentials" src', $tag);
92
- else if ($handle == 'leadin-scriptloader-js')
93
- return str_replace(' src', ' async defer src', $tag);
94
- else
95
- return $tag;
96
- }
97
-
98
- /**
99
- * Adds Leadin link to top-level admin bar
100
- */
101
- function add_leadin_link_to_admin_bar($wp_admin_bar)
102
- {
103
- global $wp_version;
104
-
105
- if (!current_user_can('activate_plugins')) {
106
- if (!array_key_exists('li_grant_access_to_' . leadin_get_user_role(), get_option('leadin_options')))
107
- return FALSE;
108
- }
109
-
110
-
111
- $leadin_icon = '<img src="' . LEADIN_PATH . '/images/leadin-icon-16x16-white.png' . '">';
112
-
113
- $args = array(
114
- 'id' => 'leadin-admin-menu',
115
- 'title' => '<span class="ab-icon" ' . ($wp_version < 3.8 && !is_plugin_active('mp6/mp6.php') ? ' style="margin-top: 3px;"' : '') . '>' . $leadin_icon . '</span><span class="ab-label">Leadin</span>', // alter the title of existing node
116
- 'parent' => FALSE, // set parent to false to make it a top level (parent) node
117
- 'href' => get_bloginfo('wpurl') . '/wp-admin/admin.php?page=leadin',
118
- 'meta' => array('title' => 'Leadin')
119
- );
120
-
121
- $wp_admin_bar->add_node($args);
122
- }
123
-
124
- public static function leadin_is_login_or_register_page()
125
- {
126
- return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
127
- }
128
- }
129
-
130
- //=============================================
131
- // Leadin Init
132
- //=============================================
133
-
134
- global $li_wp_admin;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/leadin-constants.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- if (!defined('LEADIN_UTM_SOURCE'))
4
- define('LEADIN_UTM_SOURCE', 'leadin%20repo%20plugin');
5
-
6
- if (!defined('LEADIN_UTM_MEDIUM'))
7
- define('LEADIN_UTM_MEDIUM', 'referral');
8
-
9
- if (!defined('LEADIN_UTM_CONTENT'))
10
- define('LEADIN_UTM_CONTENT', 'e10');
11
-
12
- if (!defined('LEADIN_UTM_CAMPAIGN'))
13
- define('LEADIN_UTM_CAMPAIGN', 'one%20click%20updater');
14
-
15
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/leadin-disconnect.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
- if (!defined('LEADIN_PLUGIN_VERSION')) {
3
- header('HTTP/1.0 403 Forbidden');
4
- wp_die();
5
- }
6
-
7
- if (is_admin()) {
8
- add_action('wp_ajax_leadin_disconnect_ajax', 'leadin_disconnect_ajax'); // Call when user in slumber mode would like to disconnect their account
9
- }
10
-
11
- function leadin_disconnect_ajax()
12
- {
13
- if (get_option('leadin_slumber_mode')) {
14
- delete_option('leadin_portalId');
15
- delete_option('leadin_slumber_mode');
16
-
17
- wp_die('{"message": "Success!"}');
18
- } else {
19
- error_log("Disconnect error");
20
- header('HTTP/1.0 400 Bad Request');
21
- wp_die('{"error": "Leadin must be in slumber mode to disconnect"}');
22
- }
23
-
24
- }
25
-
26
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/leadin-functions.php DELETED
@@ -1,121 +0,0 @@
1
- <?php
2
-
3
- if (!defined('LEADIN_PLUGIN_VERSION')) {
4
- header('HTTP/1.0 403 Forbidden');
5
- die;
6
- }
7
-
8
- if (!defined('LEADIN_PORTAL_ID')) {
9
- DEFINE('LEADIN_PORTAL_ID', intval(get_option('leadin_portalId')));
10
- }
11
-
12
- if (!defined('LEADIN_HAPIKEY')) {
13
- DEFINE('LEADIN_HAPIKEY', get_option('leadin_hapikey'));
14
- }
15
-
16
-
17
- function leadin_get_resource_url($path)
18
- {
19
- $resource_root = constant('LEADIN_ADMIN_ASSETS_BASE_URL');
20
-
21
- return $resource_root . $path;
22
- }
23
-
24
- /**
25
- * Get Leadin user
26
- *
27
- * @return array
28
- */
29
- function leadin_get_current_user()
30
- {
31
- global $wp_version;
32
-
33
- $current_user = wp_get_current_user();
34
- $li_user_id = md5(get_bloginfo('wpurl'));
35
-
36
- $li_options = get_option('leadin_options');
37
- $leadinPortalId = get_option('leadin_portalId');
38
-
39
- if (isset($li_options['li_email'])) {
40
- $li_user_email = $li_options['li_email'];
41
- } else {
42
- $li_user_email = $current_user->user_email;
43
- }
44
-
45
- $leadin_user = array(
46
- 'user_id' => $li_user_id,
47
- 'email' => $li_user_email,
48
- 'alias' => $current_user->display_name,
49
- 'wp_url' => get_bloginfo('wpurl'),
50
- 'li_version' => LEADIN_PLUGIN_VERSION,
51
- 'wp_version' => $wp_version,
52
- 'user_email' => $current_user->user_email
53
- );
54
-
55
- if (defined('LEADIN_REFERRAL_SOURCE'))
56
- $leadin_user['referral_source'] = LEADIN_REFERRAL_SOURCE;
57
- else
58
- $leadin_user['referral_source'] = '';
59
-
60
- if (defined('LEADIN_UTM_SOURCE'))
61
- $leadin_user['utm_source'] = LEADIN_UTM_SOURCE;
62
- else
63
- $leadin_user['utm_source'] = '';
64
-
65
- if (defined('LEADIN_UTM_MEDIUM'))
66
- $leadin_user['utm_medium'] = LEADIN_UTM_MEDIUM;
67
- else
68
- $leadin_user['utm_medium'] = '';
69
-
70
- if (defined('LEADIN_UTM_TERM'))
71
- $leadin_user['utm_term'] = LEADIN_UTM_TERM;
72
- else
73
- $leadin_user['utm_term'] = '';
74
-
75
- if (defined('LEADIN_UTM_CONTENT'))
76
- $leadin_user['utm_content'] = LEADIN_UTM_CONTENT;
77
- else
78
- $leadin_user['utm_content'] = '';
79
-
80
- if (defined('LEADIN_UTM_CAMPAIGN'))
81
- $leadin_user['utm_campaign'] = LEADIN_UTM_CAMPAIGN;
82
- else
83
- $leadin_user['utm_campaign'] = '';
84
-
85
- if (!empty($leadinPortalId)) {
86
- $leadin_user['portal_id'] = $leadinPortalId;
87
- }
88
-
89
- return $leadin_user;
90
- }
91
-
92
- /**
93
- * Logs a debug statement to /wp-content/debug.log
94
- *
95
- * @param string
96
- */
97
- function leadin_log_debug($message)
98
- {
99
- if (WP_DEBUG === TRUE) {
100
- if (is_array($message) || is_object($message))
101
- error_log(print_r($message, TRUE));
102
- else
103
- error_log($message);
104
- }
105
- }
106
-
107
- /**
108
- * Returns the user role for the current user
109
- *
110
- */
111
- function leadin_get_user_role()
112
- {
113
- global $current_user;
114
-
115
- $user_roles = $current_user->roles;
116
- $user_role = array_shift($user_roles);
117
-
118
- return $user_role;
119
- }
120
-
121
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/leadin-registration.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
- if (!defined('LEADIN_PLUGIN_VERSION')) {
3
- header('HTTP/1.0 403 Forbidden');
4
- wp_die();
5
- }
6
-
7
- if (is_admin()) {
8
- add_action('wp_ajax_leadin_registration_ajax', 'leadin_registration_ajax'); // Call when user logged in
9
- }
10
-
11
- function leadin_registration_ajax()
12
- {
13
- $existingPortalId = get_option('leadin_portalId');
14
- $existingHapikey = get_option('leadin_hapikey');
15
-
16
- if (!empty($existingPortalId) || !empty($existingHapikey)) {
17
- header('HTTP/1.0 400 Bad Request');
18
- wp_die('{"error": "Registration is already complete for this portal"}');
19
- }
20
-
21
- $data = json_decode(file_get_contents('php://input'), true);
22
-
23
- $newPortalId = $data['portalId'];
24
- $newHapiKey = $data['hapikey'];
25
- $slumberMode = $data['slumberMode'];
26
-
27
- error_log($data['hapikey']);
28
-
29
- if (empty($newPortalId) OR (empty($newHapiKey) AND empty($slumberMode))) {
30
- error_log("Registration error");
31
- header('HTTP/1.0 400 Bad Request');
32
- wp_die('{"error": "Registration missing required fields"}');
33
- }
34
-
35
- add_option('leadin_portalId', $newPortalId);
36
-
37
- if (!empty($newHapiKey)) {
38
- add_option('leadin_hapikey', $newHapiKey);
39
- }
40
- if (!empty($slumberMode)) {
41
- add_option('leadin_slumber_mode', $slumberMode);
42
- }
43
-
44
- wp_die('{"message": "Success!"}');
45
- }
46
-
47
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
leadin.php DELETED
@@ -1,204 +0,0 @@
1
- <?php
2
- /*
3
- Plugin Name: Leadin
4
- Plugin URI: http://leadin.hubspot.com
5
- Description: Leadin is an easy-to-use marketing automation and lead tracking plugin for WordPress that helps you better understand your web site visitors.
6
- Version: 5.3.1
7
- Author: Leadin
8
- Author URI: http://leadin.hubspot.com
9
- License: GPL2
10
- */
11
-
12
- //=============================================
13
- // Define Constants
14
- //=============================================
15
-
16
- if (!defined('LEADIN_PATH'))
17
- define('LEADIN_PATH', untrailingslashit(plugins_url('', __FILE__)));
18
-
19
- if (!defined('LEADIN_PLUGIN_DIR'))
20
- define('LEADIN_PLUGIN_DIR', untrailingslashit(dirname(__FILE__)));
21
-
22
- if (!defined('LEADIN_PLUGIN_SLUG'))
23
- define('LEADIN_PLUGIN_SLUG', basename(dirname(__FILE__)));
24
-
25
- if (file_exists(LEADIN_PLUGIN_DIR . '/inc/leadin-overrides.php'))
26
- include_once(LEADIN_PLUGIN_DIR . '/inc/leadin-overrides.php');
27
-
28
- if (!defined('LEADIN_DB_VERSION'))
29
- define('LEADIN_DB_VERSION', '2.2.5');
30
-
31
- if (!defined('LEADIN_PLUGIN_VERSION'))
32
- define('LEADIN_PLUGIN_VERSION', '5.3.1');
33
-
34
- if (!defined('LEADIN_SOURCE'))
35
- define('LEADIN_SOURCE', 'leadin.com');
36
-
37
- if (!defined('LEADIN_ADMIN_ASSETS_BASE_URL'))
38
- define('LEADIN_ADMIN_ASSETS_BASE_URL', "https://app.hubspot.com/leadin_admin_static_live");
39
-
40
- if (!defined('LEADIN_EMBED_DOMAIN'))
41
- define('LEADIN_EMBED_DOMAIN', "js.leadin.com");
42
-
43
- if (!defined('LEADIN_SCRIPT_LOADER_DOMAIN'))
44
- define('LEADIN_SCRIPT_LOADER_DOMAIN', "js.hs-scripts.com");
45
-
46
- if (!defined('LEADIN_ENV'))
47
- define('LEADIN_ENV', "prod");
48
-
49
- //=============================================
50
- // Include Needed Files
51
- //=============================================
52
-
53
- if (file_exists(LEADIN_PLUGIN_DIR . '/inc/leadin-constants.php'))
54
- include_once(LEADIN_PLUGIN_DIR . '/inc/leadin-constants.php');
55
-
56
- require_once(LEADIN_PLUGIN_DIR . '/inc/leadin-functions.php');
57
- require_once(LEADIN_PLUGIN_DIR . '/inc/leadin-registration.php');
58
- require_once(LEADIN_PLUGIN_DIR . '/inc/leadin-disconnect.php');
59
- require_once(LEADIN_PLUGIN_DIR . '/admin/leadin-admin.php');
60
-
61
- require_once(LEADIN_PLUGIN_DIR . '/inc/class-leadin.php');
62
-
63
-
64
- //=============================================
65
- // Hooks & Filters
66
- //=============================================
67
-
68
- /**
69
- * Activate the plugin
70
- */
71
- function activate_leadin($network_wide)
72
- {
73
-
74
- // Check activation on entire network or one blog
75
- if (is_multisite() && $network_wide) {
76
- global $wpdb;
77
-
78
- // Get this so we can switch back to it later
79
- $current_blog = $wpdb->blogid;
80
- // For storing the list of activated blogs
81
- $activated = array();
82
-
83
- // Get all blogs in the network and activate plugin on each one
84
- $q = "SELECT blog_id FROM $wpdb->blogs";
85
- $blog_ids = $wpdb->get_col($q);
86
- foreach ($blog_ids as $blog_id) {
87
- switch_to_blog($blog_id);
88
- add_leadin_defaults();
89
- $activated[] = $blog_id;
90
- }
91
-
92
- // Switch back to the current blog
93
- switch_to_blog($current_blog);
94
-
95
- // Store the array for a later function
96
- update_site_option('leadin_activated', $activated);
97
- } else {
98
- add_leadin_defaults();
99
- }
100
- }
101
-
102
- /**
103
- * Check Leadin installation and set options
104
- */
105
- function add_leadin_defaults()
106
- {
107
- global $wpdb;
108
- $options = get_option('leadin_options');
109
-
110
- if (($options['li_installed'] != 1) || (!is_array($options))) {
111
- $opt = array(
112
- 'li_installed' => 1,
113
- 'leadin_version' => LEADIN_PLUGIN_VERSION,
114
- 'li_email' => get_bloginfo('admin_email'),
115
- 'li_updates_subscription' => 1,
116
- 'onboarding_step' => 1,
117
- 'onboarding_complete' => 0,
118
- 'ignore_settings_popup' => 0,
119
- 'data_recovered' => 1,
120
- 'delete_flags_fixed' => 1,
121
- 'beta_tester' => 0,
122
- 'converted_to_tags' => 1,
123
- 'names_added_to_contacts' => 1
124
- );
125
-
126
- // Add the Pro flag if this is a pro installation
127
- if ((defined('LEADIN_UTM_SOURCE') && LEADIN_UTM_SOURCE != 'leadin%20repo%20plugin') || !defined('LEADIN_UTM_SOURCE'))
128
- $opt['pro'] = 1;
129
-
130
- // this is a hack because multisite doesn't recognize local options using either update_option or update_site_option...
131
- if (is_multisite()) {
132
- $multisite_prefix = (is_multisite() ? $wpdb->prefix : '');
133
- $q = $wpdb->prepare("
134
- INSERT INTO " . $multisite_prefix . "options
135
- ( option_name, option_value )
136
- VALUES ('leadin_options', %s)", serialize($opt));
137
- $wpdb->query($q);
138
- // TODO: Glob settings for multisite
139
- } else
140
- update_option('leadin_options', $opt);
141
-
142
- }
143
-
144
- setcookie("ignore_social_share", "1", 2592000, "/");
145
- }
146
-
147
- /**
148
- * Deactivate Leadin plugin hook
149
- */
150
- function deactivate_leadin($network_wide)
151
- {
152
- if (is_multisite() && $network_wide) {
153
- global $wpdb;
154
-
155
- // Get this so we can switch back to it later
156
- $current_blog = $wpdb->blogid;
157
-
158
- // Get all blogs in the network and activate plugin on each one
159
- $q = "SELECT blog_id FROM $wpdb->blogs";
160
- $blog_ids = $wpdb->get_col($q);
161
- foreach ($blog_ids as $blog_id) {
162
- switch_to_blog($blog_id);
163
- }
164
-
165
- // Switch back to the current blog
166
- switch_to_blog($current_blog);
167
- }
168
- }
169
-
170
- function activate_leadin_on_new_blog($blog_id, $user_id, $domain, $path, $site_id, $meta)
171
- {
172
- global $wpdb;
173
-
174
- if (is_plugin_active_for_network('leadin/leadin.php')) {
175
- $current_blog = $wpdb->blogid;
176
- switch_to_blog($blog_id);
177
- add_leadin_defaults();
178
- switch_to_blog($current_blog);
179
- }
180
- }
181
-
182
- /**
183
- * Checks the stored database version against the current data version + updates if needed
184
- */
185
- function leadin_init()
186
- {
187
- $leadin_wp = new WPLeadIn();
188
- }
189
-
190
-
191
- add_action('plugins_loaded', 'leadin_init', 14);
192
-
193
- if (is_admin()) {
194
- // Activate + install Leadin
195
- register_activation_hook(__FILE__, 'activate_leadin');
196
-
197
- // Deactivate Leadin
198
- register_deactivation_hook(__FILE__, 'deactivate_leadin');
199
-
200
- // Activate on newly created wpmu blog
201
- add_action('wpmu_new_blog', 'activate_leadin_on_new_blog', 10, 6);
202
- }
203
-
204
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "name": "leadin",
3
- "version": "1.0.0",
4
- "devDependencies": {
5
- "grunt": "^0.4.5",
6
- "grunt-contrib-compass": "^1.0.1",
7
- "grunt-contrib-clean": "^0.6.0",
8
- "grunt-contrib-concat": "~0.4.0",
9
- "grunt-contrib-uglify": "~0.4.0",
10
- "grunt-contrib-watch": "~0.6.1"
11
- },
12
- "description": "=== LeadIn === Contributors: andygcook, nelsonjoyce Tags: lead tracking, visitor tracking, analytics, crm, marketing automation, inbound marketing, subscription, marketing, lead generation, mailchimp Requires at least: 3.7 Tested up to: 3.9.1 Stable tag: 1.0.0",
13
- "main": "gruntfile.js",
14
- "dependencies": {},
15
- "scripts": {
16
- "test": "echo \"Error: no test specified\" && exit 1"
17
- },
18
- "repository": {
19
- "type": "git",
20
- "url": "https://github.com/LeadIn/leadin.git"
21
- },
22
- "author": "",
23
- "license": "ISC",
24
- "bugs": {
25
- "url": "https://github.com/LeadIn/leadin/issues"
26
- },
27
- "homepage": "https://github.com/LeadIn/leadin"
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt DELETED
@@ -1,707 +0,0 @@
1
- === Contact Forms & Website Analytics by Leadin ===
2
- Contributors: leadin, sredmond
3
- Tags: crm, contacts, lead tracking, click tracking, visitor tracking, analytics, marketing automation, inbound marketing, subscription, marketing, lead generation, mailchimp, constant contact, newsletter, popup, popover, email list, email, contacts database, contact form, forms, form widget, popup form
4
- Requires at least: 3.7
5
- Tested up to: 4.5
6
- Stable tag: 5.3.1
7
-
8
- Leadin is an easy-to-use contact form and marketing analytics plugin for your website that helps you better understand your website visitors.
9
-
10
- == Description ==
11
-
12
- = Get to know your website visitors =
13
-
14
- <a href="https://leadin.hubspot.com" alt="WordPress marketing automation and lead tracking plugin" target="_blank">Leadin</a> is an easy-to-use marketing automation and lead tracking plugin for WordPress that helps you better understand your web site visitors.
15
-
16
- [youtube https://www.youtube.com/watch?v=tcMYv2r3ecg]
17
-
18
- = Find out who's on your site and what they're doing =
19
- When someone visits your site, you want to know more about them. What pages they've visited, when they return, and what social networks they’re on. Leadin gives you the details you need to make your next move.
20
-
21
- = More context for your conversations =
22
- Leadin automatically finds publicly available information about each of your contacts. Details such as location, work history, and company info can give you more context when you reach out.
23
-
24
- = Convert more visitors to contacts =
25
- Use the optional popup form to prevent people from slipping through the cracks. The popup also uses the contact data to intelligently know when to appear.
26
-
27
- = Keep your contacts in sync with your email tool =
28
- Leadin syncs your contacts to an email list of your choice without replacing any forms.
29
-
30
- = Find out what content and traffic sources convert the best =
31
- Our simple analytics show you what sources of traffic and content are driving the most contacts. No more complicated Google Analytics reports.
32
-
33
- = How does it work? =
34
-
35
- 1. When you activate the WordPress plugin, Leadin will track each anonymous visitor to your site with a cookie.
36
- 2. Leadin automatically identifies and watches each existing form on your site for submissions.
37
- 3. Once someone fills out any other form on your site, Leadin will identify that person with their email address. and add them to your contact list.
38
- 4. You'll also receive an email with a link to the new contact record with all of their visit history. (check the screenshots sections to see it in action)
39
-
40
- = Who's using Leadin? =
41
-
42
- **<a href="http://www.extremeinbound.com/leadin-wordpress-crm-inbound-plugin/" target="_blank">Alan Perlman</a>**: *“I can use Leadin to get a sense of how engaged certain contacts are, and I can learn more about their behavior on my website to better drive the conversation and understand what they’re interested in or looking for.”*
43
-
44
- **<a href="http://thewpvalet.com/wordpress-lead-tracking/" target="_blank">Adam W. Warner</a>**: *“…the Leadin plugin has been very useful so far in giving us an idea of the actual visitor paths to our contact forms vs. the paths we’ve intended.”*
45
-
46
-
47
- Having trouble? Check out our <a href="https://leadin.hubspot.com/knowledge/">help documentation & support</a>
48
-
49
- == Installation ==
50
-
51
- 1. Upload the 'leadin' folder to the '/wp-content/plugins/' directory
52
- 2. Activate the plugin through the 'Plugins' menu in WordPress
53
- 3. Add an email address under 'Leadin' in your settings panel
54
-
55
- Having trouble? Check out our <a href="https://leadin.hubspot.com/knowledge/" target="_blank">help documentation & support</a>
56
-
57
- == Frequently Asked Questions ==
58
- = <a href="https://leadin.hubspot.com/knowledge/frequently-asked-questions" target="_blank">Full FAQ Here</a> =
59
-
60
- == Screenshots ==
61
-
62
- 1. See the visit history of each contact.
63
- 2. Get an email notification for every new lead.
64
- 3. Leadin Dashboard shows you where your leads are coming from.
65
- 4. All your contacts stored safely in one place.
66
- 5. Collect more contacts with the pop-up subscribe widget.
67
-
68
- == Changelog ==
69
-
70
- - Current version: 5.3.1
71
- - Current version release: 2016-08-11
72
-
73
- = 5.3.1
74
- - Added "collected forms" screen to the navigation, a new way to manage your collected forms
75
- - Shifted more accounts to the new unified script loader following a beta release in 5.2.1. Now all "existing app" customers, and all new customers use the unified loader.
76
-
77
- = 5.2.1
78
- - New "existing app" customers use the new unified script loader
79
-
80
- = 5.1.1
81
- - Rebranding "Flows" to "Lead Flows"
82
- - Correcting the settings link in Plugins when Leadin is connected to an existing Leadin web app account
83
-
84
- = 5.0.2
85
- - Update deployment script
86
-
87
- = 5.0.1
88
- - The Leadin plugin can now be installed for an existing Leadin web app account
89
-
90
- = 4.8.2 (2016.05.30) =
91
- - Added 'Flows' to the WordPress navigation - all-in-one lead conversion widgets - http://leadin.hubspot.com/flows
92
-
93
- = 4.7.1 (2016.04.14) =
94
- - Stopped using get_currentuserinfo(), which was deprecated in WordPress 4.5 in favor of wp_get_current_user()
95
-
96
- = 4.6.8 (2016.04.01) =
97
- - Updated supported version of WordPress
98
-
99
- = 4.6.6 (2016.03.23) =
100
- - Changed URL where Leadin's JavaScript loads from. This should help with customers who were experiencing blank screens due to overzealous adblocking
101
- - Updated readme
102
-
103
- = 4.5.0 (2016.01.14) =
104
- - Renamed "stats" to "dashboard" in the menu
105
- - Fixed a bug where deactivating the plugin in multisite mode would cause a PHP error
106
- - Removed old PHP that was used before Leadin was hosted in an iFrame, as it is now
107
- - Updated screenshots
108
-
109
- = 4.4.0 (2015.12.14) =
110
- - Remove migration code
111
-
112
- = 4.3.2 (2015.12.02) =
113
- - Wordpress assets update
114
-
115
- = 4.3.1 (2015.11.26) =
116
- - Logo updates
117
-
118
- = 4.3.0 (2015.09.30) =
119
- - Load time improvements to the tracking script
120
-
121
- = 4.2.3 (2015.08.20) =
122
- - Support widget improvements
123
-
124
- = 4.2.2 (2015.08.14) =
125
- - Correctly set the version number in PHP
126
-
127
- = 4.2.1 (2015.08.13) =
128
- - Fix detection of front page for popup triggering
129
- - Update screenshots
130
-
131
- = 4.2.0 (2015.08.13) =
132
- - Migration improvements
133
- - Bug fix to stop showing the setup dialog when setup is in progress
134
- - Preparatory work to send notification emails in the timezone WordPress is configured in
135
-
136
- = 4.1.1 (2015.07.14) =
137
- - Bug fix for upgraded installs from the plugin directory running through the migration process
138
-
139
- = 4.1.0 (2015.07.10) =
140
- - Migration script added to move data from MySQL to Leadin Cloud
141
-
142
- = 4.0.2 (2015.07.09) =
143
-
144
- - Bug fixes
145
-
146
- - Current version: 4.0.1
147
- - Current version release: 2015-06-24
148
-
149
- = 4.0.1 (2015.06.24) =
150
-
151
- - Bug fixes
152
- - Added support for custom page types
153
- - Stopped using SVG icons due to performance problems
154
- - Fixed signup error in PHP < 5.4 on browsers that don't support CORS
155
-
156
- = 4.0.0 (2015.05.20) =
157
-
158
- - Leadin Cloud launched
159
-
160
- = 3.1.8 (2015.05.15) =
161
-
162
- - Added email connector sync to onboarding
163
- - Sources now check the UTM tags on the first page view visit
164
- - Privacy policy added to plugin
165
-
166
- - Bug fixes
167
- - Fixed dismiss button conflict on WordPress notifications
168
- - Icon styles no longer conflict with other plugins
169
- - Deleted contacts no longer show up in the dashboard
170
- - Popup sync now looks at the actual inputs instead of the field names so it’ll work in other languages
171
- - Popup labels now work in IE
172
- - Fixed bug with SendGrid email delivery for Leadin Pro
173
-
174
- = 3.1.7 (2015.04.15) =
175
- = Enhancements =
176
- - Added debug mode
177
- - Default subscribe confirmation to off
178
-
179
- - Bug fixes
180
- - Fixed overly large Leadin icon in admin bar on front end for logged in users
181
-
182
- = 3.1.6 (2015.03.31) =
183
- = Enhancements =
184
- - Show name on contact timeline instead of email address if available
185
- - New contact timeline page styles
186
- - Ability to change color in popup
187
- - Popup now works on mobile
188
-
189
- - Bug fixes
190
- - Fixed dashicons not loading in < WP 3.7
191
- - Completely fix all the default object warnings for the contact lookups
192
- - Swap in non-svg logo if allow_url_fopen not toggled on in php.ini
193
- - Fixed Pro email delivery bugs
194
-
195
- = 3.1.5 (2015.03.20) =
196
- - Bug fixes
197
- - Changed out call to __DIR__ magic constant which wasn’t implemented until PHP 5.3 in favor of dirname(__FILE__)
198
-
199
- = 3.1.4 (2015.03.17) =
200
- = Enhancements =
201
- - Intercom added to plugin for in-app support
202
- - Onboarding improved for non-setup installs
203
- - Contact notifications are now sent through email delivery service to improve deliverability
204
-
205
- - Bug fixes
206
- - Namespaced AWeber oauth libraries with LI_ prefix to avoid duplicate class warnings
207
- - SVG icon permanently fixed for servers that don't natively support that file type
208
- - Check if database options are set for subscribe preview button
209
- - Added in check for default leadin_options in case they were deleted and recreate them if they are not there
210
- - Add in checks for the contact lookups to account for default object warnings
211
- -
212
-
213
- = 3.1.3 (2015.02.19) =
214
- = Enhancements =
215
- - Don't show the "You should receive a confirmation email shortly" message in the popup thank you if the confirmation email setting is toggled off
216
-
217
- - Bug fixes
218
- - Fixed SVG icon
219
- - Fixed the default object warnings in class-leadin-contact for the enrichment lookups
220
- - Tested NinjaPopups and added to readme as unsupported form plugin
221
- - "Namespace" AWeber with "LI_" prefix to avoid conflicts
222
-
223
- = 3.1.2 (2015.01.26) =
224
- = Enhancements =
225
- - Tested JotForm + added compatibility to the ReadMe file
226
-
227
- - Bug fixes
228
- - Add in support for like_escape for < WordPress 4.0
229
- - Add first + last names to bulk MailChimp connector
230
- - Remove rogue WPDB prepare in tag list table
231
- - Check for existence of ESP connector when pushing to an email list
232
- - Bug fix for multisite installs with broken onboarding
233
-
234
- = 3.1.1 (2014.01.20) =
235
- = Enhancements =
236
- - Added ability to toggle Leadin data access by user role
237
- - Hide Leadin nav menu item for user roles without access to Leadin data
238
- - Discontinued and disabled the beta program
239
-
240
- - Bug fixes
241
- - Fixed broken onboarding in WordPress Multisite after adding a new site to the network
242
- - Contact totals in tag editor now link to tagged list
243
-
244
- = 3.1.0 (2015.1.16) =
245
- = Enhancements =
246
- - GetResponse, Campaign Monitor and AWeber integrations launched
247
-
248
- = 3.0.0 (2014.12.10) =
249
- = Enhancements =
250
- - Jumping to version 3.0.0 to indefinitely override repository version of Leadin
251
-
252
- = Leadin 2.2.7 - 2.2.11 =
253
-
254
- *Leadin was split into Leadin and <a href="http://leadin.com/pro-upgrade" target="_blank">Leadin Pro</a> after version 2.2.6 and later merged back together, so versions 2.2.7 - 2.2.11 and 3.0.0 - 3.1.3 share similar updates.*
255
-
256
- = 2.2.11 (2015.02.18) =
257
-
258
- = Enhancements =
259
- - Don't show the "You should receive a confirmation email shortly" message in the popup thank you if the confirmation email setting is toggled off
260
-
261
- - Bug fixes
262
- - Fixed SVG icon
263
- - Fixed the default object warnings in class-leadin-contact for the enrichment lookups
264
- - Tested NinjaPopups and added to readme as unsupported form plugin
265
-
266
-
267
- = 2.2.10 (2015.01.26) =
268
- = Enhancements =
269
- - Tested JotForm + added compatibility to the ReadMe file
270
-
271
- - Bug fixes
272
- - Add in support for like_escape for < WordPress 4.0
273
- - Add first + last names to bulk MailChimp connector
274
- - Remove rogue WPDB prepare in tag list table
275
- - Check for existence of ESP connector when pushing to an email list
276
- - Bug fix for multisite installs with broken onboarding
277
-
278
- = 2.2.9 (2014.01.20) =
279
- = Enhancements =
280
- - Added ability to toggle Leadin data access by user role
281
- - Hide Leadin nav menu item for user roles without access to Leadin data
282
- - Discountinued and disabled the beta program
283
-
284
- - Bug fixes
285
- - Fixed broken onboarding in WordPress Multisite after adding a new site to the network
286
- - Contact totals in tag editor now link to tagged list
287
-
288
- = 2.2.8 (2014.12.15) =
289
- = Enhancements =
290
- - Added in CTAs for Leadin Pro
291
-
292
- = 2.2.7 (2014.12.09) =
293
- - Bug fixes
294
- - Fixing upgrade process from 2.2.6
295
-
296
- = 2.2.6 (2014.12.08) =
297
- = Enhancements =
298
- - Added names to contact export
299
- - Added “tagged as” to contact notification email subject lines
300
-
301
- - Bug fixes
302
- - Fixed bug with non-tagged contacts being added to tagged lists
303
-
304
- = 2.2.6 (2014.12.08) =
305
- = Enhancements =
306
- - Contact Lookup power-up
307
- - Added names to contact exports
308
- - Added “tagged as” to the email subject lines
309
-
310
- - Bug fixes
311
- - Fixed bug where Leadin would add non-tagged emails to ESP lists when it was not supposed to do those contacts
312
-
313
- = 2.2.5 (2014.11.20) =
314
- - Bug fixes
315
- - Fixes to bulk action labels
316
- - Fixed Add Tag button
317
-
318
- = 2.2.4 (2014.10.31) =
319
- - Bug fixes
320
- - Patch for 2.2.3 database structure. We forgot to include the new form_hashkey field in the database upgrade
321
-
322
- = 2.2.3 (2014.10.31) =
323
- = Enhancements =
324
- - Added "Tags" link to sidebar menu
325
- - Added the applied tags on form submission timeline events
326
- - Added the form selector on submission events in the timeline
327
- - Added language in the subject of the contact notification emails to indicate returning vs. new visitors
328
- - Leadin will now detect first names + last names and store them on the contact + push to ESP connectors
329
- - Retroactively apply names to all contacts where possible
330
-
331
- - Bug fixes
332
- - If a contact changes their email, Leadin will now push the new email to the ESP connectors
333
- - Added safeguards into all third party libraries to see if they are included already in the WordPress admin
334
- - Added default Javascript values to the popup form if the get_footer function isn't being called
335
-
336
- = 2.2.2 (2014.10.16) =
337
- = Enhancements =
338
- - Leadin now include the utm_ tags from the original first page view when parsing the sources
339
-
340
- - Bug fixes
341
- - Unchecking all the template checkboxes for the popup then saving no longer rechecks them all
342
- - Added in current_time fix for older versions of WordPress
343
- - Retooled tag editor to only pull down unique selectors
344
- - Contact list now will go back to the previous page when clicking the back link
345
- - Fixed mysterious bug where popup ignored new visitors
346
- - NOW the subscription confirmation stays checked/unchecked on save (Thanks Kate!)
347
-
348
- = 2.2.1 (2014.10.01) =
349
- = Enhancements =
350
- - Added video from WPApplied to readme file
351
-
352
- - Bug fixes
353
- - Page view filters now work in the all contacts list
354
- - Subscription confirmation box didn't work in settings page if the "homepage" checkbox was unchecked
355
- - Leadin menu link no longer shows up in the front-end menu bar for non-logged in users
356
- - Stopped selecting duplicate tags on a contact in the timeline view
357
- - Select inputs did not pull down the text and instead used the value. Fixed and use text now for selected option
358
- - Timezones with a database offset on the contact timeline were not correctly fixed in last update
359
- - Fix to ignore all cURL calls if script isn't present on the server
360
- - Disable beta program is cURL does not exist on the server
361
- - Fixed “<- All contacts” link showing up next to back link on a specific contact type in timeline view
362
-
363
- = 2.2.0 (2014.09.25) =
364
- = Enhancements =
365
- - Added ability to ignore logged in user roles from tracking
366
- - Popup can be previewed on the front end site before saving changes
367
- - MailChimp Connect checks for faulty API keys and prompts the user to enter in one that works on the tag editor page
368
- - Email headers for contact notificaitons come from the person who filled in the form
369
- - Added traffic source URL parameters to contact notification emails
370
-
371
- - Bug fixes
372
- - Leadin now accounts for timezones discrepancy on some MySQL databases and offsets to local time
373
- - Filters are now persistent when clicking the link back to the contact list from a contact timeline
374
- - cURL dependency no longer prints the raw error to the screen on installation and gracefully disables cURL-dependant features
375
- - Stats page and contact list totals didn't match up - fixed
376
-
377
- = 2.1.0 (2014.09.19) =
378
- = Enhancements =
379
- - Improved onboarding
380
- - Added setting include a short description to the popup under the form heading
381
- - General style improvements to the popup form power-up
382
-
383
- - Bug fixes
384
- - Contact filters are now persistent when navigating back to the main contact list from the contact timeline
385
-
386
- = 2.0.2 (2014.09.09) =
387
-
388
- - Bug fixes
389
- - Fix inconsistent sources on stats widgets and contact timeline widgets
390
- - Onboarding tooltip popup for setting up settings now works correctly
391
- - Parse out get vars for traffic sources in the contact timeline
392
-
393
- = 2.0.1 (2014.09.01) =
394
- = Enhancements =
395
- - Removed "Who read my post" widget analytics from the post editor
396
- - Separated backend from frontend code to speed up ajax calls on both sides
397
-
398
- - Bug fixes
399
- - Fixed bug when deleting specifically selected contacts looked like all the contacts were deleted on the page refresh
400
- - Organic traffic and paid traffic sources are now parsing more accurately
401
- - Credit card forms will add to the timeline now but will block all credit card information
402
- - Bulk edited tags now push contacts to ESP lists when added
403
- - Lists with existing contacts retroactively push email addresses to corresponding ESP list
404
- - Renamed MailChimp Contact Sync + Constant Contact Sync to MailChimp Connect + Constant Contact Connect
405
- - Fixed returning contacts vs. new contacts in dashboard widget
406
- - Contact export works again
407
- - Fixed insecure content warning on SSL
408
- - Non-administrators no longer can see the Leadin menu links or pages
409
- - Settings link missing from plugins list page
410
- - Line break contact notifications previews
411
- - Setup a mailto link on the contact notification email in the details header
412
-
413
- = 2.0.0 (2014.08.11) =
414
- = Enhancements =
415
- - Create a custom tagged list based on form submission rules
416
- - Ability to sync tagged contacts to a specific ESP list
417
- - Filter lists by form selectors
418
-
419
- - Bug fixes
420
- - Fix contact export for selected contacts
421
- - Text area line breaks in the contact notifications now show properly
422
- - Contact numbers at top of list did not always match number in sidebar - fixed
423
-
424
- = 1.3.0 (2014.07.14) =
425
- = Enhancements =
426
- - Multisite compatibility
427
-
428
- = 1.2.0 (2014.06.25) =
429
- - Bug fixes
430
- - Contacts with default "contact status" were not showing up in the contact list
431
- - WordPress admin backends secured with SSL can now be used with Leadin
432
- - Namespaced the referrer parsing library for the Sources widget
433
-
434
- = Enhancements =
435
- - Leadin VIP program
436
-
437
- = 1.1.1 (2014.06.20) =
438
- - Bug fixes
439
- - Emergency bug fix on activation caused by broken SVN merging
440
-
441
- = 1.1.0 (2014.06.20) =
442
- - Bug fixes
443
- - Leadin subscriber email confirmations were not sending
444
- - Removed smart contact segmenting for leads
445
-
446
- = Enhancements =
447
- - Added more contact status types for contacted + customer
448
- - Setup collection for form IDs + classes
449
-
450
- = 1.0.0 (2014.06.12) =
451
- - Bug fixes
452
- - Fixed sort by visits in the contacts list
453
-
454
- = Enhancements =
455
- - Contacts filtering
456
- - Stats dashboard
457
- - Sources
458
-
459
- = 0.10.0 (2014.06.03) =
460
- - Bug fixes
461
- - Fixed original referrer in contact timeline
462
- - Fixed unnecessary queries on contact timeline
463
- - Only run the update check if the version number is different than the saved number
464
- - Remove "fakepath" from file path text in uploaded file input types
465
-
466
- = Enhancements =
467
- - Expire the subscribe cookie after a few weeks
468
- - Ability to disable a subscribe notification
469
- - Added jQuery validation to the subscribe pop-up
470
- - Multi-select input support
471
- - Block forms with credit card fields from capturing contact information
472
- - Updated contact timeline views
473
- - Updated new contact notification emails
474
-
475
- = 0.9.3 (2014.05.19) =
476
- - Bug fixes
477
- - Fix for duplicate values being stored in the active power-ups option
478
-
479
- = 0.9.2 (2014.05.16) =
480
-
481
- = Enhancements =
482
- - Overhaul of settings page to make it easier to see which settings go with each power-up
483
- - Launched Leadin Beta Program
484
-
485
- = 0.9.1 (2014.05.14) =
486
- - Bug fixes
487
- - Fixed pop-up location dropdown not defaulting to saved options value
488
- - Hooked subscribe widget into get_footer action instead of loop_end filter
489
-
490
- = 0.9.0 (2014.05.12) =
491
- - Bug fixes
492
- - Remove leadin-css file enqueue call
493
-
494
- = Enhancements =
495
- - Show faces of people who viewed a post/page in the editor
496
- - Add background color to avatars so they are easier to see
497
- - Various UI fixes
498
-
499
- = 0.8.5 (2014.05.08) =
500
- - Bug fixes
501
- - Fixed broken contact notification emails
502
-
503
- = 0.8.4 (2014.05.07) =
504
- - Bug fixes
505
- - Fixed HTML encoding of apostrophes and special characters in the database for page titles
506
-
507
- = Enhancements =
508
- - Added ability to toggle subscribe widget on posts, pages, archives or the home page
509
- - Sort contacts by last visit
510
-
511
- = 0.8.3 (2014.05.06) =
512
- - Bug fixes
513
- - Merge duplicate contacts into one record
514
- - Remove url parameters from source links in contact list
515
- - Downgrade use of singletons so classes are compatible with PHP 5.2
516
-
517
- = Enhancements =
518
- - Swap out delete statements in favor of binary "deleted" flags to minimize data loss risk
519
- - Sort contacts by last visit
520
-
521
- = 0.8.2 (2014.05.02) =
522
- - Bug fixes
523
- - Removed namespace usage in favor or a low-tech work around to be compliant with PHP 5.2 and lower
524
-
525
- = 0.8.1 (2014.04.30) =
526
- - Bug fixes
527
- - Namespaced duplicate classes
528
-
529
- = 0.8.0 (2014.04.30) =
530
- - Bug fixes
531
- - Fix scrolling issue with subscribe pop-up
532
- - Duplicate class bug fixes
533
-
534
- = Enhancements =
535
- - Add optional first name, last name and phone fields for subscribe pop-up
536
- - Change out contact notification emails to be from settings email address
537
- - Ability to disable contact notification emails
538
- - Constant Contact list sync power-up
539
- - Sync optional contact fields (name + phone) to email service provider power-ups
540
-
541
- = 0.7.2 (2014.04.18) =
542
- - Bug fixes
543
- - Fix contact deletion bug
544
- - Implement data recovery fix for contacts
545
- - Bug fixes to contact merging
546
-
547
-
548
- = 0.7.1 (2014.04.11) =
549
- - Bug fixes
550
- - SVN bug fix that did not add the MailChimp List sync power-up
551
-
552
- = 0.7.0 (2014.04.10) =
553
-
554
- = Enhancements =
555
- - MailChimp List Sync power-up
556
- - Added new themes (bottom right, bottom left, top and pop-up) to the WordPress Subscribe Widget power-up
557
-
558
- = 0.6.2 (2014.04.07) =
559
- - Bug fixes
560
- - Fixed activation error for some installs by removing error output
561
- - MySQL query optimizations
562
- - Fixed bug with MySQL V5.0+ by adding default NULL values for insert statements on contacts table
563
- - Changed title for returning lead email notifications
564
- - Setting to change button label on
565
-
566
- = Enhancements =
567
- - Added ability to change button label on subscribe widget
568
-
569
- = 0.6.1 (2014.03.12) =
570
- - Bug fixes
571
- - Updated read me.txt file
572
- - Updated screenshots
573
-
574
- = 0.6.0 (2014.03.07) =
575
- - Bug fixes
576
- - Remove in-house plugin updating functionality
577
- - Original referrer is always the server url, not the HTTP referrer
578
- - Strip slashes from title tags
579
- - Number of contacts does not equal leads + commenters + subscribers
580
- - Modals aren't bound to forms after page load
581
- - Fix bug with activating + reactivating the plugin overwriting the saved settings
582
- - Override button styles for Subscribe Pop-up widget
583
-
584
- = Enhancements =
585
- - Improved readability on new lead notification emails
586
- - Confirmation email added for new subscribers to the Leadin Subscribe Pop-up
587
- - Updated screenshots
588
- - Improved onboarding flow
589
- - Deleted unused and deprecated files
590
-
591
- = 0.5.1 (2014.03.03) =
592
- - Bug fixes
593
- - Fixed Subscribe Pop-up automatically enabling itself
594
-
595
- = 0.5.0 (2014.02.25) =
596
- - Bug fixes
597
- - Add (blank page title tag) to emails and contact timeline for blank page titles
598
- - Fix link on admin nav menu bar to link to contact list
599
- - Ignore lead notifications and subscribe popup on login page
600
- - Saving an email no longer overwrites all the Leadin options
601
- - Added live chat support
602
-
603
- = Enhancements =
604
- - New power-ups page
605
- - Leadin Subscribe integrated into plugin as a power-up
606
- - Improved contact history styling + interface
607
- - Added visit, pageview and submission stats to the contact view
608
- - Added Live Chat into the Leadin WordPress admin screens
609
- - New Leadin icons for WordPress sidebar and admin nav menu
610
-
611
- = 0.4.6 (2013.02.11) =
612
- - Bug fixes
613
- - Fix table sorting for integers
614
- - Bug fixes to contact type headings
615
- - Bug fix "Select All" export
616
- - Bug fix for CSS "page views" hover triangle breaking to next line
617
- - Backwards compatibility for < jQuery 1.7.0
618
- - Add Leadin link to admin bar
619
-
620
- = Enhancements =
621
- - New onboarding flow
622
-
623
- = 0.4.5 (2013.01.30) =
624
- = Enhancements =
625
- - Integration with Leadin Subscribe
626
-
627
- = 0.4.4 (2013.01.24) =
628
- - Bug fixes
629
- - Bind submission tracking on buttons and images inside of forms instead of just submit input types
630
-
631
- = Enhancements =
632
- - Change out screenshots to obfiscate personal information
633
-
634
- = 0.4.3 (2013.01.13) =
635
- - Bug fixes
636
- - Fixed Leadin form submission inserts for comments
637
- - Resolved various silent PHP warnings in administrative dashboard
638
- - Fixed Leadin updater class to be compatible with WP3.8
639
- - Improved contact merging logic to be more reliable
640
-
641
- = Enhancements =
642
- - Improved onboarding flow
643
- - Optimized form submission catching + improved performance
644
-
645
- = 0.4.2 (2013.12.30) =
646
- - Bug fixes
647
- - Change 'contact' to 'lead' in the contacts table
648
- - Fixed emails always sending to the admin_email
649
- - Tie historical events to new lead when an email is submitted multiple times with different tracking codes
650
- - Select leads, commenters and subscribers on distinct email addresses
651
- - Fixed timeline order to show visit, then a form submission, then subsequent visits
652
-
653
- = Enhancements =
654
- - Added url for each page views in the contact timeline
655
- - Added source for each visit event
656
- - Tweak colors for contact timeline
657
- - Default the Leadin menu to the contacts page
658
-
659
- = 0.4.1 (2013.12.18) =
660
- - Bug fixes
661
- - Removed Leadin header from the contact timeline view
662
- - Updated the wording on the menu view picker above contacts list
663
- - Remove pre-mp6 styles if MP6 plugin is activated
664
- - Default totals leads/comments = 0 when leads table is empty instead of printing blank integer
665
- - Legacy visitors in table have 0 visits because session support did not exist. Default to 1
666
- - Update ouput for the number of comments to be equal to total_comments, not total_leads
667
- - Added border to pre-mp6 timeline events
668
-
669
- = 0.4.0 (2013.12.16) =
670
- - Bug fixes
671
- - Block admin comment replies from creating a contact
672
- - Fixed faulty sorting by Last visit + Created on dates in contacts list
673
-
674
- = Enhancements =
675
- - Timeline view of a contact history
676
- - New CSS styles for contacts table
677
- - Multiple email address support for new lead/comment emails
678
- - Integration + testing for popular WordPress form builder plugins
679
- - One click updates for manually hosted plugin
680
-
681
- = 0.3.0 (2013.12.09) =
682
- - Bug fixes
683
- - HTML encoded page titles to fix broken HTML characters
684
- - Strip slashes from page titles in emails
685
-
686
- = Enhancements =
687
- - Created separate Leadin menu in WordPress admin
688
- - CRM list of all contacts
689
- - Added ability to export list of contacts
690
- - Leadin now distinguishes between a contact requests and comment submissions
691
- - Added link to CRM list inside each contact/comment email
692
-
693
- = 0.2.0 (2013.11.26) =
694
- - Bug fixes
695
- - Broke up page view history by session instead of days
696
- - Fixed truncated form submission titles
697
- - Updated email headers
698
-
699
- = Enhancements =
700
- - Plugin now updates upon activation and keeps record of version
701
- - Added referral source to each session
702
- - Added link to page for form submissions
703
- - Updated email subject line
704
- - Added social media avatars to emails
705
-
706
- = 0.1.0 (2013.11.22) =
707
- - Plugin released
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
screenshot-1.png DELETED
Binary file
screenshot-2.png DELETED
Binary file
screenshot-3.png DELETED
Binary file
screenshot-4.png DELETED
Binary file
screenshot-5.png DELETED
Binary file